From 8a2c2824a59d7644e13bc52c9a0ecbd641f21f95 Mon Sep 17 00:00:00 2001 From: Robert Jonsson Date: Wed, 13 Oct 2010 19:34:22 +0000 Subject: new branch muse2, first checkin --- muse2/.muse.prcs_aux | 635 + muse2/AUTHORS | 17 + muse2/COPYING | 1 + muse2/ChangeLog | 3703 + muse2/Doxyfile.in | 150 + muse2/INSTALL | 1 + muse2/Makefile.am | 35 + muse2/Makefile.in | 859 + muse2/NEWS | 29 + muse2/README | 82 + muse2/README.CVS | 3 + muse2/README.de | 69 + muse2/README.effects-rack | 85 + muse2/README.instruments | 108 + muse2/README.ladspaguis | 56 + muse2/README.shortcuts | 159 + muse2/README.softsynth | 86 + muse2/README.translate | 62 + muse2/SECURITY | 244 + muse2/aclocal.m4 | 1334 + muse2/al/Makefile.am | 18 + muse2/al/Makefile.in | 595 + muse2/al/al.cpp | 29 + muse2/al/al.h | 34 + muse2/al/dsp.cpp | 182 + muse2/al/dsp.h | 107 + muse2/al/dspSSE.cpp | 531 + muse2/al/dspXMM.cpp | 119 + muse2/all-pic.h | 0 muse2/all.h | 0 muse2/autogen.sh | 147 + muse2/autom4te.cache/output.0 | 20607 ++ muse2/autom4te.cache/output.1 | 20639 ++ muse2/autom4te.cache/output.2 | 20639 ++ muse2/autom4te.cache/requests | 516 + muse2/autom4te.cache/traces.0 | 3343 + muse2/autom4te.cache/traces.1 | 1025 + muse2/autom4te.cache/traces.2 | 3053 + muse2/common.am | 47 + muse2/config.guess | 1 + muse2/config.h.in | 98 + muse2/config.sub | 1 + muse2/configure | 20639 ++ muse2/configure.ac | 817 + muse2/demos/Makefile.am | 1 + muse2/demos/Makefile.in | 415 + muse2/demos/rasen.med | 377 + muse2/depcomp | 1 + muse2/doc/Makefile.am | 13 + muse2/doc/Makefile.in | 428 + muse2/doc/midieditfunctions.png | Bin 0 -> 3903 bytes muse2/doc/muse.sgm | 493 + muse2/grepmidi/Makefile.am | 8 + muse2/grepmidi/Makefile.in | 618 + muse2/grepmidi/grepmidi.cpp | 348 + muse2/grid.med | 467 + muse2/install-sh | 1 + muse2/lib/Makefile.am | 1 + muse2/lib/Makefile.in | 617 + muse2/lib/plugins/Makefile.am | 23 + muse2/lib/plugins/Makefile.in | 436 + muse2/lib/synthi/Makefile.am | 23 + muse2/lib/synthi/Makefile.in | 436 + muse2/ltmain.sh | 1 + muse2/m4/Makefile.am | 1 + muse2/m4/Makefile.in | 415 + muse2/m4/aclocal-include.m4 | 16 + muse2/m4/alsa.m4 | 148 + muse2/m4/docbook.m4 | 97 + muse2/m4/libtool.m4 | 1 + muse2/m4/ltoptions.m4 | 1 + muse2/m4/ltsugar.m4 | 1 + muse2/m4/ltversion.m4 | 1 + muse2/m4/lt~obsolete.m4 | 1 + muse2/m4/qt.m4 | 246 + muse2/missing | 1 + muse2/muse.prj | 697 + muse2/muse.pro | 688 + muse2/muse/Makefile.am | 168 + muse2/muse/Makefile.in | 1067 + muse2/muse/app.cpp | 4767 + muse2/muse/app.cpp.orig | 3969 + muse2/muse/app.h | 327 + muse2/muse/appearance.cpp | 718 + muse2/muse/appearance.h | 56 + muse2/muse/arranger/Makefile.am | 20 + muse2/muse/arranger/Makefile.in | 612 + muse2/muse/arranger/alayout.cpp | 161 + muse2/muse/arranger/alayout.h | 48 + muse2/muse/arranger/arranger.cpp | 971 + muse2/muse/arranger/arranger.h | 227 + muse2/muse/arranger/pcanvas.cpp | 2825 + muse2/muse/arranger/pcanvas.h | 139 + muse2/muse/arranger/tlist.cpp | 1555 + muse2/muse/arranger/tlist.h | 131 + muse2/muse/arranger/trackautomationview.cpp | 53 + muse2/muse/arranger/trackautomationview.h | 21 + muse2/muse/arranger/trackinfo.cpp | 1570 + muse2/muse/audio.cpp | 1431 + muse2/muse/audio.h | 299 + muse2/muse/audioconvert.cpp | 886 + muse2/muse/audioconvert.h | 129 + muse2/muse/audioprefetch.cpp | 262 + muse2/muse/audioprefetch.h | 46 + muse2/muse/audiotrack.cpp | 1639 + muse2/muse/cliplist/Makefile.am | 14 + muse2/muse/cliplist/Makefile.in | 596 + muse2/muse/cliplist/cliplist.cpp | 260 + muse2/muse/cliplist/cliplist.h | 51 + muse2/muse/cobject.cpp | 62 + muse2/muse/cobject.h | 66 + muse2/muse/conf.cpp | 1499 + muse2/muse/conf.h | 38 + muse2/muse/confmport.cpp | 897 + muse2/muse/confmport.h | 83 + muse2/muse/ctrl.cpp | 297 + muse2/muse/ctrl.h | 144 + muse2/muse/ctrl/Makefile.am | 17 + muse2/muse/ctrl/Makefile.in | 604 + muse2/muse/ctrl/ctrlcanvas.cpp | 1533 + muse2/muse/ctrl/ctrlcanvas.h | 165 + muse2/muse/ctrl/ctrledit.cpp | 134 + muse2/muse/ctrl/ctrledit.h | 56 + muse2/muse/ctrl/ctrlpanel.cpp | 694 + muse2/muse/ctrl/ctrlpanel.h | 66 + muse2/muse/debug.h | 31 + muse2/muse/default_click.h | 1213 + muse2/muse/device.h | 46 + muse2/muse/driver/Makefile.am | 10 + muse2/muse/driver/Makefile.in | 595 + muse2/muse/driver/alsamidi.cpp | 917 + muse2/muse/driver/alsamidi.h | 53 + muse2/muse/driver/alsatimer.cpp | 225 + muse2/muse/driver/alsatimer.h | 52 + muse2/muse/driver/audiodev.h | 74 + muse2/muse/driver/dummyaudio.cpp | 454 + muse2/muse/driver/jack.cpp | 2173 + muse2/muse/driver/jackaudio.h | 97 + muse2/muse/driver/jackmidi.cpp | 1563 + muse2/muse/driver/jackmidi.h | 156 + muse2/muse/driver/rtctimer.cpp | 155 + muse2/muse/driver/rtctimer.h | 44 + muse2/muse/driver/timerdev.h | 41 + muse2/muse/dssihost.cpp | 3055 + muse2/muse/dssihost.h | 256 + muse2/muse/evdata.h | 67 + muse2/muse/event.cpp | 328 + muse2/muse/event.h | 150 + muse2/muse/eventbase.h | 97 + muse2/muse/eventlist.cpp | 112 + muse2/muse/exportmidi.cpp | 379 + muse2/muse/fastlog.h | 38 + muse2/muse/gconfig.cpp | 135 + muse2/muse/gconfig.h | 132 + muse2/muse/givertcap.c | 94 + muse2/muse/globaldefs.h | 34 + muse2/muse/globals.cpp | 396 + muse2/muse/globals.h | 192 + muse2/muse/help.cpp | 112 + muse2/muse/helper.cpp | 40 + muse2/muse/helper.h | 16 + muse2/muse/icons.cpp | 612 + muse2/muse/icons.h | 220 + muse2/muse/importmidi.cpp | 608 + muse2/muse/instruments/Makefile.am | 15 + muse2/muse/instruments/Makefile.in | 599 + muse2/muse/instruments/ccontrolbase.ui | 525 + muse2/muse/instruments/editinstrument.cpp | 3541 + muse2/muse/instruments/editinstrument.h | 92 + muse2/muse/instruments/editinstrumentbase.ui | 1840 + muse2/muse/instruments/midictrledit.cpp | 733 + muse2/muse/instruments/midictrledit.h | 56 + muse2/muse/instruments/minstrument.cpp | 850 + muse2/muse/instruments/minstrument.h | 135 + muse2/muse/key.cpp | 35 + muse2/muse/key.h | 54 + muse2/muse/ladspa.h | 599 + muse2/muse/liste/Makefile.am | 16 + muse2/muse/liste/Makefile.in | 601 + muse2/muse/liste/editctrlbase.ui | 702 + muse2/muse/liste/editevent.cpp | 853 + muse2/muse/liste/editevent.h | 196 + muse2/muse/liste/listedit.cpp | 909 + muse2/muse/liste/listedit.h | 81 + muse2/muse/make.inc | 164 + muse2/muse/marker/Makefile.am | 15 + muse2/muse/marker/Makefile.in | 596 + muse2/muse/marker/marker.cpp | 90 + muse2/muse/marker/marker.h | 51 + muse2/muse/marker/markerview.cpp | 597 + muse2/muse/marker/markerview.h | 84 + muse2/muse/master/Makefile.am | 19 + muse2/muse/master/Makefile.in | 609 + muse2/muse/master/lmaster.cpp | 715 + muse2/muse/master/lmaster.h | 145 + muse2/muse/master/master.cpp | 341 + muse2/muse/master/master.h | 69 + muse2/muse/master/masteredit.cpp | 403 + muse2/muse/master/masteredit.h | 83 + muse2/muse/master/tscale.cpp | 61 + muse2/muse/master/tscale.h | 38 + muse2/muse/memory.cpp | 100 + muse2/muse/memory.h | 180 + muse2/muse/midi.cpp | 1542 + muse2/muse/midi.h | 72 + muse2/muse/midictrl.cpp | 781 + muse2/muse/midictrl.h | 255 + muse2/muse/mididev.cpp | 548 + muse2/muse/mididev.h | 157 + muse2/muse/midiedit/Makefile.am | 36 + muse2/muse/midiedit/Makefile.in | 636 + muse2/muse/midiedit/cmd.h | 26 + muse2/muse/midiedit/dcanvas.cpp | 1291 + muse2/muse/midiedit/dcanvas.h | 93 + muse2/muse/midiedit/dlist.cpp | 754 + muse2/muse/midiedit/dlist.h | 105 + muse2/muse/midiedit/drumedit.cpp | 1167 + muse2/muse/midiedit/drumedit.h | 151 + muse2/muse/midiedit/drummap.cpp | 503 + muse2/muse/midiedit/drummap.h | 47 + muse2/muse/midiedit/ecanvas.cpp | 363 + muse2/muse/midiedit/ecanvas.h | 87 + muse2/muse/midiedit/piano.cpp | 557 + muse2/muse/midiedit/piano.h | 63 + muse2/muse/midiedit/pianoroll.cpp | 1107 + muse2/muse/midiedit/pianoroll.h | 146 + muse2/muse/midiedit/prcanvas.cpp | 1695 + muse2/muse/midiedit/prcanvas.h | 113 + muse2/muse/midiedit/quantconfig.cpp | 59 + muse2/muse/midiedit/quantconfig.h | 32 + muse2/muse/midieditor.cpp | 237 + muse2/muse/midieditor.h | 86 + muse2/muse/midievent.cpp | 175 + muse2/muse/midievent.h | 62 + muse2/muse/midifile.cpp | 678 + muse2/muse/midifile.h | 113 + muse2/muse/midiport.cpp | 1027 + muse2/muse/midiport.h | 130 + muse2/muse/midiseq.cpp | 766 + muse2/muse/midiseq.h | 102 + muse2/muse/miditransform.cpp | 1702 + muse2/muse/miditransform.h | 105 + muse2/muse/mixer/Makefile.am | 26 + muse2/muse/mixer/Makefile.in | 628 + muse2/muse/mixer/amixer.cpp | 592 + muse2/muse/mixer/amixer.h | 119 + muse2/muse/mixer/astrip.cpp | 2830 + muse2/muse/mixer/astrip.h | 97 + muse2/muse/mixer/auxknob.cpp | 40 + muse2/muse/mixer/auxknob.h | 33 + muse2/muse/mixer/meter.cpp | 184 + muse2/muse/mixer/meter.h | 52 + muse2/muse/mixer/midiportroutebase.ui | 85 + muse2/muse/mixer/mstrip.cpp | 1216 + muse2/muse/mixer/mstrip.h | 83 + muse2/muse/mixer/panknob.cpp | 32 + muse2/muse/mixer/panknob.h | 32 + muse2/muse/mixer/rack.cpp | 531 + muse2/muse/mixer/rack.h | 58 + muse2/muse/mixer/routedialog.cpp | 185 + muse2/muse/mixer/routedialog.h | 43 + muse2/muse/mixer/routedialogbase.ui | 234 + muse2/muse/mixer/strip.cpp | 238 + muse2/muse/mixer/strip.h | 77 + muse2/muse/mpevent.cpp | 160 + muse2/muse/mpevent.h | 183 + muse2/muse/mplugins/.cvsignore | 2 + muse2/muse/mplugins/Makefile.am | 26 + muse2/muse/mplugins/Makefile.in | 624 + muse2/muse/mplugins/midifilter.ui | 879 + muse2/muse/mplugins/midifilterimpl.cpp | 131 + muse2/muse/mplugins/midifilterimpl.h | 92 + muse2/muse/mplugins/midiitransform.cpp | 1696 + muse2/muse/mplugins/midiitransform.h | 101 + muse2/muse/mplugins/mitplugin.cpp | 145 + muse2/muse/mplugins/mitplugin.h | 39 + muse2/muse/mplugins/mittranspose.cpp | 181 + muse2/muse/mplugins/mittranspose.h | 70 + muse2/muse/mplugins/mrconfig.cpp | 71 + muse2/muse/mplugins/mrconfig.h | 40 + muse2/muse/mplugins/mrconfigbase.ui | 200 + muse2/muse/mplugins/random.cpp | 758 + muse2/muse/mplugins/random.h | 192 + muse2/muse/mplugins/rhythm.cpp | 516 + muse2/muse/mplugins/rhythm.h | 196 + muse2/muse/mplugins/rhythmbase.ui | 1004 + muse2/muse/mtc.cpp | 130 + muse2/muse/mtc.h | 56 + muse2/muse/muse.log | 1875 + muse2/muse/muse.pro | 369 + muse2/muse/node.cpp | 1911 + muse2/muse/node.h | 132 + muse2/muse/osc.cpp | 1386 + muse2/muse/osc.h | 212 + muse2/muse/part.cpp | 1432 + muse2/muse/part.h | 175 + muse2/muse/patchbay/Makefile.am | 9 + muse2/muse/patchbay/patchbay.cpp | 10 + muse2/muse/patchbay/patchbay.h | 16 + muse2/muse/patchbay/patchbaybase.ui | 36 + muse2/muse/plugin.cpp | 3871 + muse2/muse/plugin.h | 536 + muse2/muse/pos.cpp | 567 + muse2/muse/pos.h | 99 + muse2/muse/remote/Makefile.am | 15 + muse2/muse/remote/Makefile.in | 590 + muse2/muse/remote/pyapi.cpp | 1142 + muse2/muse/remote/pyapi.h | 40 + muse2/muse/route.cpp | 1633 + muse2/muse/route.h | 102 + muse2/muse/seqmsg.cpp | 1184 + muse2/muse/shortcuts.cpp | 312 + muse2/muse/shortcuts.h | 285 + muse2/muse/sig.cpp | 439 + muse2/muse/sig.h | 79 + muse2/muse/song.cpp | 3681 + muse2/muse/song.h | 413 + muse2/muse/songfile.cpp | 1507 + muse2/muse/stringparam.cpp | 113 + muse2/muse/stringparam.h | 49 + muse2/muse/sync.cpp | 1380 + muse2/muse/sync.h | 153 + muse2/muse/synth.cpp | 947 + muse2/muse/synth.h | 290 + muse2/muse/tempo.cpp | 503 + muse2/muse/tempo.h | 89 + muse2/muse/thread.cpp | 455 + muse2/muse/thread.h | 104 + muse2/muse/ticksynth.cpp | 215 + muse2/muse/ticksynth.h | 22 + muse2/muse/track.cpp | 980 + muse2/muse/track.h | 675 + muse2/muse/transport.cpp | 673 + muse2/muse/transport.h | 129 + muse2/muse/transpose.cpp | 92 + muse2/muse/transpose.h | 21 + muse2/muse/undo.cpp | 968 + muse2/muse/undo.h | 102 + muse2/muse/value.cpp | 60 + muse2/muse/value.h | 61 + muse2/muse/vst.cpp | 630 + muse2/muse/vst.h | 83 + muse2/muse/wave.cpp | 1175 + muse2/muse/wave.h | 264 + muse2/muse/waveedit/Makefile.am | 18 + muse2/muse/waveedit/Makefile.in | 606 + muse2/muse/waveedit/editgain.cpp | 91 + muse2/muse/waveedit/editgain.h | 37 + muse2/muse/waveedit/editgainbase.ui | 302 + muse2/muse/waveedit/waveedit.cpp | 413 + muse2/muse/waveedit/waveedit.h | 79 + muse2/muse/waveedit/waveview.cpp | 936 + muse2/muse/waveedit/waveview.h | 98 + muse2/muse/waveevent.cpp | 453 + muse2/muse/waveevent.h | 64 + muse2/muse/wavetrack.cpp | 360 + muse2/muse/widgets/.cvsignore | 23 + muse2/muse/widgets/Makefile.am | 262 + muse2/muse/widgets/Makefile.in | 2647 + muse2/muse/widgets/aboutbox.ui | 129 + muse2/muse/widgets/aboutbox_impl.cpp | 10 + muse2/muse/widgets/aboutbox_impl.h | 16 + muse2/muse/widgets/action.h | 32 + muse2/muse/widgets/appearancebase.ui | 1764 + muse2/muse/widgets/bigtime.cpp | 442 + muse2/muse/widgets/bigtime.h | 55 + muse2/muse/widgets/canvas.cpp | 1405 + muse2/muse/widgets/canvas.h | 185 + muse2/muse/widgets/checkbox.cpp | 58 + muse2/muse/widgets/checkbox.h | 45 + muse2/muse/widgets/citem.cpp | 93 + muse2/muse/widgets/citem.h | 90 + muse2/muse/widgets/cliplisteditorbase.ui | 168 + muse2/muse/widgets/comboQuant.cpp | 61 + muse2/muse/widgets/comboQuant.h | 33 + muse2/muse/widgets/combobox.cpp | 74 + muse2/muse/widgets/combobox.h | 49 + muse2/muse/widgets/comment.cpp | 86 + muse2/muse/widgets/comment.h | 53 + muse2/muse/widgets/commentbase.ui | 116 + muse2/muse/widgets/configmidifilebase.ui | 259 + muse2/muse/widgets/ctrlcombo.cpp | 56 + muse2/muse/widgets/ctrlcombo.cw | 22 + muse2/muse/widgets/ctrlcombo.h | 22 + muse2/muse/widgets/dentry.cpp | 243 + muse2/muse/widgets/dentry.h | 79 + muse2/muse/widgets/didyouknow.ui | 102 + muse2/muse/widgets/dimap.cpp | 308 + muse2/muse/widgets/dimap.h | 55 + muse2/muse/widgets/doublelabel.cpp | 189 + muse2/muse/widgets/doublelabel.h | 60 + muse2/muse/widgets/drange.cpp | 262 + muse2/muse/widgets/drange.h | 71 + muse2/muse/widgets/editctrl7dialogbase.ui | 214 + muse2/muse/widgets/editmetadialogbase.ui | 254 + muse2/muse/widgets/editnotedialogbase.ui | 202 + muse2/muse/widgets/editsysexdialogbase.ui | 209 + muse2/muse/widgets/fdialogbuttons.ui | 204 + muse2/muse/widgets/filedialog.cpp | 534 + muse2/muse/widgets/filedialog.h | 92 + muse2/muse/widgets/fontsel.cpp | 137 + muse2/muse/widgets/fontsel.h | 45 + muse2/muse/widgets/gatetime.cpp | 46 + muse2/muse/widgets/gatetime.h | 36 + muse2/muse/widgets/gatetimebase.ui | 285 + muse2/muse/widgets/genset.cpp | 444 + muse2/muse/widgets/genset.h | 41 + muse2/muse/widgets/gensetbase.ui | 1470 + muse2/muse/widgets/header.cpp | 62 + muse2/muse/widgets/header.h | 30 + muse2/muse/widgets/hitscale.cpp | 134 + muse2/muse/widgets/hitscale.h | 50 + muse2/muse/widgets/intlabel.cpp | 144 + muse2/muse/widgets/intlabel.h | 46 + muse2/muse/widgets/itransformbase.ui | 1296 + muse2/muse/widgets/knob.cpp | 506 + muse2/muse/widgets/knob.h | 78 + muse2/muse/widgets/lcombo.cpp | 49 + muse2/muse/widgets/lcombo.h | 40 + muse2/muse/widgets/listitem.h | 85 + muse2/muse/widgets/menutitleitem.h | 29 + muse2/muse/widgets/metronome.cpp | 186 + muse2/muse/widgets/metronome.h | 34 + muse2/muse/widgets/metronomebase.ui | 604 + muse2/muse/widgets/midisync.ui | 443 + muse2/muse/widgets/midisyncimpl.cpp | 1294 + muse2/muse/widgets/midisyncimpl.h | 150 + muse2/muse/widgets/mittransposebase.ui | 117 + muse2/muse/widgets/mixdowndialog.cpp | 108 + muse2/muse/widgets/mixdowndialog.h | 37 + muse2/muse/widgets/mixdowndialogbase.ui | 224 + muse2/muse/widgets/mktest | 5 + muse2/muse/widgets/mlabel.cpp | 17 + muse2/muse/widgets/mlabel.h | 39 + muse2/muse/widgets/mmath.cpp | 300 + muse2/muse/widgets/mmath.h | 77 + muse2/muse/widgets/moc_aboutbox.cpp | 81 + muse2/muse/widgets/moc_didyouknow.cpp | 81 + muse2/muse/widgets/moc_songinfo.cpp | 84 + muse2/muse/widgets/moc_ttoolbar.cpp | 0 muse2/muse/widgets/mtrackinfobase.ui | 1067 + muse2/muse/widgets/mtscale.cpp | 425 + muse2/muse/widgets/mtscale.h | 53 + muse2/muse/widgets/musewidgetsplug.cpp | 539 + muse2/muse/widgets/nentry.cpp | 407 + muse2/muse/widgets/nentry.h | 93 + muse2/muse/widgets/noteinfo.cpp | 178 + muse2/muse/widgets/noteinfo.h | 52 + muse2/muse/widgets/pitchedit.cpp | 64 + muse2/muse/widgets/pitchedit.h | 33 + muse2/muse/widgets/pitchlabel.cpp | 95 + muse2/muse/widgets/pitchlabel.h | 41 + muse2/muse/widgets/popupmenu.cpp | 2770 + muse2/muse/widgets/popupmenu.h | 303 + muse2/muse/widgets/posedit.cpp | 875 + muse2/muse/widgets/posedit.h | 106 + muse2/muse/widgets/poslabel.cpp | 152 + muse2/muse/widgets/poslabel.h | 45 + muse2/muse/widgets/scldiv.cpp | 652 + muse2/muse/widgets/scldiv.h | 57 + muse2/muse/widgets/scldraw.cpp | 881 + muse2/muse/widgets/scldraw.h | 89 + muse2/muse/widgets/sclif.cpp | 205 + muse2/muse/widgets/sclif.h | 51 + muse2/muse/widgets/scrollscale.cpp | 499 + muse2/muse/widgets/scrollscale.h | 90 + muse2/muse/widgets/section.h | 19 + muse2/muse/widgets/shortcutcapturedialog.cpp | 87 + muse2/muse/widgets/shortcutcapturedialog.h | 35 + muse2/muse/widgets/shortcutcapturedialogbase.ui | 134 + muse2/muse/widgets/shortcutconfig.cpp | 115 + muse2/muse/widgets/shortcutconfig.h | 61 + muse2/muse/widgets/shortcutconfigbase.ui | 207 + muse2/muse/widgets/sigedit.cpp | 755 + muse2/muse/widgets/sigedit.h | 90 + muse2/muse/widgets/siglabel.cpp | 157 + muse2/muse/widgets/siglabel.h | 42 + muse2/muse/widgets/sigscale.cpp | 152 + muse2/muse/widgets/sigscale.h | 50 + muse2/muse/widgets/slider.cpp | 930 + muse2/muse/widgets/slider.h | 98 + muse2/muse/widgets/sliderbase.cpp | 726 + muse2/muse/widgets/sliderbase.h | 107 + muse2/muse/widgets/songinfo.ui | 115 + muse2/muse/widgets/spinbox.cpp | 83 + muse2/muse/widgets/spinbox.h | 44 + muse2/muse/widgets/spinboxFP.cpp | 80 + muse2/muse/widgets/spinboxFP.h | 35 + muse2/muse/widgets/splitter.cpp | 77 + muse2/muse/widgets/splitter.h | 29 + muse2/muse/widgets/swidget.cpp | 20 + muse2/muse/widgets/swidget.h | 33 + muse2/muse/widgets/synthconfigbase.ui | 247 + muse2/muse/widgets/synthwizardbase.h | 58 + muse2/muse/widgets/tb1.cpp | 225 + muse2/muse/widgets/tb1.h | 57 + muse2/muse/widgets/tempolabel.cpp | 126 + muse2/muse/widgets/tempolabel.h | 60 + muse2/muse/widgets/tools.cpp | 139 + muse2/muse/widgets/tools.h | 57 + muse2/muse/widgets/transformbase.ui | 1146 + muse2/muse/widgets/transposebase.ui | 252 + muse2/muse/widgets/ttoolbar.cpp | 24 + muse2/muse/widgets/ttoolbar.h | 9 + muse2/muse/widgets/ttoolbutton.cpp | 30 + muse2/muse/widgets/ttoolbutton.h | 28 + muse2/muse/widgets/utils.cpp | 358 + muse2/muse/widgets/utils.h | 33 + muse2/muse/widgets/velocity.cpp | 46 + muse2/muse/widgets/velocity.h | 36 + muse2/muse/widgets/velocitybase.ui | 232 + muse2/muse/widgets/view.cpp | 514 + muse2/muse/widgets/view.h | 108 + muse2/muse/widgets/vscale.cpp | 27 + muse2/muse/widgets/vscale.h | 29 + muse2/muse/widgets/wtrackinfobase.ui | 224 + muse2/muse/widgets/wtscale.cpp | 289 + muse2/muse/widgets/wtscale.h | 51 + muse2/muse/xml.cpp | 733 + muse2/muse/xml.h | 95 + muse2/packaging/Makefile.am | 5 + muse2/packaging/Makefile.in | 488 + muse2/packaging/muse.desktop | 9 + muse2/packaging/muse_icon.png | Bin 0 -> 7493 bytes muse2/packaging/muse_mdk.spec | 274 + muse2/plugins/Makefile.am | 5 + muse2/plugins/Makefile.in | 668 + muse2/plugins/doublechorus/Makefile.am | 16 + muse2/plugins/doublechorus/Makefile.in | 673 + muse2/plugins/doublechorus/doublechorus.cpp | 173 + muse2/plugins/doublechorus/doublechorusmodel.cpp | 214 + muse2/plugins/doublechorus/doublechorusmodel.h | 72 + muse2/plugins/doublechorus/simplechorusmodel.cpp | 157 + muse2/plugins/doublechorus/simplechorusmodel.h | 96 + muse2/plugins/freeverb/Makefile.am | 17 + muse2/plugins/freeverb/Makefile.in | 672 + muse2/plugins/freeverb/allpass.h | 50 + muse2/plugins/freeverb/comb.h | 66 + muse2/plugins/freeverb/denormals.h | 28 + muse2/plugins/freeverb/freeverb.cpp | 166 + muse2/plugins/freeverb/readme.txt | 147 + muse2/plugins/freeverb/revmodel.cpp | 232 + muse2/plugins/freeverb/revmodel.h | 79 + muse2/plugins/freeverb/tuning.h | 60 + muse2/plugins/pandelay/Makefile.am | 16 + muse2/plugins/pandelay/Makefile.in | 673 + muse2/plugins/pandelay/ladspapandelay.cpp | 100 + muse2/plugins/pandelay/ladspapandelay.h | 55 + muse2/plugins/pandelay/pandelay.cpp | 170 + muse2/plugins/pandelay/pandelaymodel.cpp | 157 + muse2/plugins/pandelay/pandelaymodel.h | 93 + muse2/plugins/plugins-install.am | 1 + muse2/qt4migration.log | 35 + muse2/share/Makefile.am | 8 + muse2/share/Makefile.in | 670 + muse2/share/drummaps/AKAI_SG01v_Bank_dr1.map | 977 + muse2/share/drummaps/AKAI_SG01v_Bank_dr2.map | 977 + .../drummaps/KURZWEIL_SP2X_Drum_Map_GM_ReMap.map | 1425 + .../drummaps/KURZWEIL_SP2X_Drum_Map_Normal.map | 1419 + muse2/share/drummaps/Makefile.am | 5 + muse2/share/drummaps/Makefile.in | 465 + muse2/share/drummaps/addictive_drums.map | 1797 + muse2/share/drummaps/dx200_drum.map | 131 + muse2/share/drummaps/sc88-pc1.map | 329 + muse2/share/html/COPYING.html | 353 + muse2/share/html/Makefile.am | 5 + muse2/share/html/Makefile.in | 465 + muse2/share/html/button_bar.jpg | Bin 0 -> 13115 bytes muse2/share/html/getting_started.html | 89 + muse2/share/html/index.html | 66 + muse2/share/html/installation.html | 64 + muse2/share/html/invocation.html | 54 + muse2/share/html/left_pane.jpg | Bin 0 -> 24599 bytes muse2/share/html/main_window.jpg | Bin 0 -> 75510 bytes muse2/share/html/main_window_track_info.jpg | Bin 0 -> 84636 bytes muse2/share/html/right_pane.jpg | Bin 0 -> 34158 bytes muse2/share/html/styles.css | 85 + muse2/share/html/toc_.txt | 13 + muse2/share/html/track_info.jpg | Bin 0 -> 14003 bytes muse2/share/html/window_ref.html | 180 + muse2/share/instruments/Access_Virus.idf | 1046 + muse2/share/instruments/Akai-SG01v.idf | 282 + muse2/share/instruments/Alesis-QS-78R.idf | 674 + muse2/share/instruments/AlesisQS6.idf | 655 + muse2/share/instruments/Emu-4mbgsgmmt-sf.idf | 440 + muse2/share/instruments/Hammond_XB-1.idf | 89 + muse2/share/instruments/Korg-MS2000R.idf | 546 + muse2/share/instruments/Korg-X50.idf | 1091 + muse2/share/instruments/Korg-X5DR-PresetA.idf | 368 + muse2/share/instruments/Korg-X5DR-PresetB.idf | 368 + muse2/share/instruments/Kurzweil-SP2X.idf | 121 + muse2/share/instruments/MC303.idf | 526 + muse2/share/instruments/MC505.idf | 554 + muse2/share/instruments/Makefile.am | 5 + muse2/share/instruments/Makefile.in | 466 + muse2/share/instruments/Roland-E28.idf | 309 + muse2/share/instruments/Roland-SCD70.idf | 1371 + muse2/share/instruments/Roland-XP30.idf | 1591 + muse2/share/instruments/Roland_FantomXR.idf | 1387 + muse2/share/instruments/Roland_SRX-02.idf | 58 + muse2/share/instruments/Roland_SRX-09.idf | 442 + muse2/share/instruments/Waldorf-Q.idf | 574 + .../instruments/Waldorf-microQ-Factory2000.idf | 552 + .../instruments/Waldorf-microQ-Factory2001.idf | 552 + muse2/share/instruments/Waldorf-microQ-Phoenix.idf | 552 + muse2/share/instruments/Waldorf-microQ.idf | 552 + muse2/share/instruments/Waldorf_Microwave-I.idf | 142 + muse2/share/instruments/Yamaha-01v.idf | 219 + muse2/share/instruments/Yamaha-Motif-Rack.idf | 1135 + muse2/share/instruments/Yamaha-Motif.idf | 744 + muse2/share/instruments/Yamaha-P100.idf | 44 + muse2/share/instruments/Yamaha-P50m.idf | 63 + muse2/share/instruments/Yamaha-PSR275.idf | 567 + muse2/share/instruments/Yamaha-PSR530.idf | 757 + muse2/share/instruments/Yamaha-S90.idf | 666 + muse2/share/instruments/ZynAdd-1_4.idf | 22 + muse2/share/instruments/emuproteus2000.idf | 1081 + muse2/share/instruments/gm.idf | 193 + muse2/share/instruments/gs.idf | 218 + muse2/share/instruments/ns5r.idf | 565 + muse2/share/instruments/xg.idf | 606 + muse2/share/locale/Makefile.am | 11 + muse2/share/locale/Makefile.in | 472 + muse2/share/locale/muse_de.qm | Bin 0 -> 74548 bytes muse2/share/locale/muse_de.ts | 5722 + muse2/share/locale/muse_es.qm | Bin 0 -> 59120 bytes muse2/share/locale/muse_es.ts | 7146 + muse2/share/locale/muse_fr.qm | Bin 0 -> 74885 bytes muse2/share/locale/muse_fr.ts | 5947 + muse2/share/locale/muse_pl.qm | Bin 0 -> 74886 bytes muse2/share/locale/muse_pl.ts | 5722 + muse2/share/locale/muse_ru.qm | Bin 0 -> 72680 bytes muse2/share/locale/muse_ru.ts | 7466 + muse2/share/locale/muse_sv_SE.qm | Bin 0 -> 61945 bytes muse2/share/locale/muse_sv_SE.ts | 8357 + muse2/share/plugins/1050.ui | 246 + muse2/share/plugins/2142.ui | 520 + muse2/share/plugins/Makefile.am | 5 + muse2/share/plugins/Makefile.in | 465 + muse2/share/pybridge/Makefile.am | 6 + muse2/share/pybridge/Makefile.in | 466 + muse2/share/pybridge/Pyro_NS_URI | 1 + muse2/share/pybridge/examples/addpartexample.py | 29 + muse2/share/pybridge/examples/addtrack.py | 33 + muse2/share/pybridge/examples/ctrlexample.py | 26 + muse2/share/pybridge/examples/effecttoggle.py | 23 + muse2/share/pybridge/examples/mute.py | 20 + muse2/share/pybridge/examples/repeatpart.py | 61 + .../share/pybridge/examples/setpositionexample.py | 35 + muse2/share/pybridge/examples/tempoexample.py | 6 + .../pybridge/examples/trackparamchangeexample.py | 21 + muse2/share/pybridge/musepclient.py | 17 + muse2/share/pybridge/museplauncher.py | 257 + muse2/share/pybridge/parter/main.py | 26 + muse2/share/pybridge/parter/parter.py | 107 + muse2/share/pybridge/robert.py | 46 + muse2/share/scripts/ConstantLength | 77 + muse2/share/scripts/DoNothing | 15 + muse2/share/scripts/DoubleSpeed | 24 + muse2/share/scripts/Makefile.am | 11 + muse2/share/scripts/Makefile.in | 425 + muse2/share/scripts/README.txt | 36 + muse2/share/scripts/RemoveShortEvents | 79 + muse2/share/scripts/SwingQuantize1 | 105 + muse2/share/splash.png | Bin 0 -> 45958 bytes muse2/share/templates/Makefile.am | 5 + muse2/share/templates/Makefile.in | 465 + muse2/share/templates/audio.med | 329 + muse2/share/templates/default.med | 150 + muse2/share/templates/midiGM.med | 409 + muse2/share/templates/monorecord.med | 432 + muse2/share/templates/synti.med | 809 + muse2/share/wallpapers/Makefile.am | 5 + muse2/share/wallpapers/Makefile.in | 465 + muse2/share/wallpapers/gray.gif | Bin 0 -> 6699 bytes muse2/share/wallpapers/gray_rock.gif | Bin 0 -> 23780 bytes muse2/share/wallpapers/gray_stucco.gif | Bin 0 -> 20903 bytes muse2/share/wallpapers/paper1.jpg | Bin 0 -> 1662 bytes muse2/share/wallpapers/stone1.gif | Bin 0 -> 1252 bytes muse2/synti/Makefile.am | 19 + muse2/synti/Makefile.in | 683 + muse2/synti/deicsonze/.deps/deicsonze.Plo | 768 + muse2/synti/deicsonze/.deps/deicsonzegui.Plo | 593 + muse2/synti/deicsonze/.deps/deicsonzegui.Tpo | 894 + muse2/synti/deicsonze/.deps/moc_deicsonzegui.Plo | 514 + muse2/synti/deicsonze/ARCH_ALIN | 24941 +++ muse2/synti/deicsonze/Makefile | 683 + muse2/synti/deicsonze/Makefile.am | 23 + muse2/synti/deicsonze/Makefile.in | 683 + muse2/synti/deicsonze/README | 18 + muse2/synti/deicsonze/TODO | 13 + muse2/synti/deicsonze/deicsonze.cpp | 1658 + muse2/synti/deicsonze/deicsonze.h | 462 + muse2/synti/deicsonze/deicsonzegui.cpp | 720 + muse2/synti/deicsonze/deicsonzegui.h | 191 + muse2/synti/deicsonze/deicsonzeguibase.h | 3854 + muse2/synti/deicsonze/deicsonzeguibase.ui | 9667 + muse2/synti/deicsonze/moc_deicsonzegui.cpp | 304 + muse2/synti/deicsonze/newpreset.h | 1162 + muse2/synti/deicsonze/newpreset.ui | 402 + muse2/synti/deicsonze2/.deps/deicsonze.Plo | 1 + muse2/synti/deicsonze2/.deps/deicsonzefilter.Plo | 1 + muse2/synti/deicsonze2/.deps/deicsonzegui.Plo | 1 + muse2/synti/deicsonze2/.deps/deicsonzeplugin.Plo | 1 + muse2/synti/deicsonze2/.deps/deicsonzepreset.Plo | 1 + muse2/synti/deicsonze2/.deps/moc_deicsonzegui.Plo | 1 + muse2/synti/deicsonze2/ARCH_ALIN | 24945 +++ muse2/synti/deicsonze2/CMakeLists.txt | 59 + muse2/synti/deicsonze2/Makefile | 687 + muse2/synti/deicsonze2/Makefile.am | 27 + muse2/synti/deicsonze2/Makefile.in | 687 + muse2/synti/deicsonze2/README | 57 + muse2/synti/deicsonze2/SutulaBank.dei | 177644 ++++++++++++++++++ muse2/synti/deicsonze2/TODO | 13 + muse2/synti/deicsonze2/deicsonze.cpp | 4356 + muse2/synti/deicsonze2/deicsonze.h | 603 + muse2/synti/deicsonze2/deicsonzefilter.cpp | 67 + muse2/synti/deicsonze2/deicsonzefilter.h | 59 + muse2/synti/deicsonze2/deicsonzegui.cpp | 0 muse2/synti/deicsonze2/deicsonzegui.h | 571 + muse2/synti/deicsonze2/deicsonzegui.ui | 10237 + muse2/synti/deicsonze2/deicsonzeguibase.h | 312 + muse2/synti/deicsonze2/deicsonzeplugin.cpp | 502 + muse2/synti/deicsonze2/deicsonzeplugin.h | 40 + muse2/synti/deicsonze2/deicsonzepreset.cpp | 1202 + muse2/synti/deicsonze2/deicsonzepreset.h | 567 + muse2/synti/deicsonze2/pics/SHold.fig | 12 + muse2/synti/deicsonze2/pics/SHold.png | Bin 0 -> 394 bytes muse2/synti/deicsonze2/pics/algo1.fig | 31 + muse2/synti/deicsonze2/pics/algo1.png | Bin 0 -> 1010 bytes muse2/synti/deicsonze2/pics/algo2.fig | 29 + muse2/synti/deicsonze2/pics/algo2.png | Bin 0 -> 1840 bytes muse2/synti/deicsonze2/pics/algo3.fig | 29 + muse2/synti/deicsonze2/pics/algo3.png | Bin 0 -> 1841 bytes muse2/synti/deicsonze2/pics/algo4.fig | 29 + muse2/synti/deicsonze2/pics/algo4.png | Bin 0 -> 1952 bytes muse2/synti/deicsonze2/pics/algo5.fig | 34 + muse2/synti/deicsonze2/pics/algo5.png | Bin 0 -> 1542 bytes muse2/synti/deicsonze2/pics/algo6.fig | 37 + muse2/synti/deicsonze2/pics/algo6.png | Bin 0 -> 1672 bytes muse2/synti/deicsonze2/pics/algo7.fig | 35 + muse2/synti/deicsonze2/pics/algo7.png | Bin 0 -> 1623 bytes muse2/synti/deicsonze2/pics/algo8.fig | 34 + muse2/synti/deicsonze2/pics/algo8.png | Bin 0 -> 1631 bytes muse2/synti/deicsonze2/pics/sawUp.fig | 13 + muse2/synti/deicsonze2/pics/sawUp.png | Bin 0 -> 416 bytes muse2/synti/deicsonze2/pics/square.fig | 14 + muse2/synti/deicsonze2/pics/square.png | Bin 0 -> 354 bytes muse2/synti/deicsonze2/pics/triangl.fig | 13 + muse2/synti/deicsonze2/pics/triangl.png | Bin 0 -> 435 bytes muse2/synti/deicsonze2/pics/wave1.fig | 29 + muse2/synti/deicsonze2/pics/wave1.gnuplot | 2 + muse2/synti/deicsonze2/pics/wave1.png | Bin 0 -> 569 bytes muse2/synti/deicsonze2/pics/wave2.fig | 31 + muse2/synti/deicsonze2/pics/wave2.gnuplot | 2 + muse2/synti/deicsonze2/pics/wave2.png | Bin 0 -> 543 bytes muse2/synti/deicsonze2/pics/wave3.fig | 29 + muse2/synti/deicsonze2/pics/wave3.gnuplot | 2 + muse2/synti/deicsonze2/pics/wave3.png | Bin 0 -> 539 bytes muse2/synti/deicsonze2/pics/wave4.fig | 29 + muse2/synti/deicsonze2/pics/wave4.gnuplot | 2 + muse2/synti/deicsonze2/pics/wave4.png | Bin 0 -> 532 bytes muse2/synti/deicsonze2/pics/wave5.fig | 29 + muse2/synti/deicsonze2/pics/wave5.gnuplot | 2 + muse2/synti/deicsonze2/pics/wave5.png | Bin 0 -> 576 bytes muse2/synti/deicsonze2/pics/wave6.fig | 29 + muse2/synti/deicsonze2/pics/wave6.gnuplot | 2 + muse2/synti/deicsonze2/pics/wave6.png | Bin 0 -> 550 bytes muse2/synti/deicsonze2/pics/wave7.fig | 29 + muse2/synti/deicsonze2/pics/wave7.gnuplot | 2 + muse2/synti/deicsonze2/pics/wave7.png | Bin 0 -> 596 bytes muse2/synti/deicsonze2/pics/wave8.fig | 29 + muse2/synti/deicsonze2/pics/wave8.gnuplot | 2 + muse2/synti/deicsonze2/pics/wave8.png | Bin 0 -> 591 bytes muse2/synti/fluid/Makefile.am | 16 + muse2/synti/fluid/Makefile.in | 649 + muse2/synti/fluid/fluid.cpp | 588 + muse2/synti/fluid/fluid.h | 84 + muse2/synti/fluid/fluidgui.cpp | 82 + muse2/synti/fluid/fluidgui.h | 31 + muse2/synti/fluid/fluidguibase.ui | 166 + muse2/synti/fluidsynth/Makefile.am | 19 + muse2/synti/fluidsynth/Makefile.in | 655 + muse2/synti/fluidsynth/README.txt | 45 + muse2/synti/fluidsynth/TODO | 13 + muse2/synti/fluidsynth/fluidsynthgui.cpp | 819 + muse2/synti/fluidsynth/fluidsynthgui.h | 225 + muse2/synti/fluidsynth/fluidsynthguibase.ui | 632 + muse2/synti/fluidsynth/fluidsynti.cpp | 1314 + muse2/synti/fluidsynth/fluidsynti.h | 150 + muse2/synti/libsynti/Makefile.am | 15 + muse2/synti/libsynti/Makefile.in | 602 + muse2/synti/libsynti/evdata.h | 66 + muse2/synti/libsynti/gui.cpp | 130 + muse2/synti/libsynti/gui.h | 72 + muse2/synti/libsynti/mess.cpp | 122 + muse2/synti/libsynti/mess.h | 97 + muse2/synti/libsynti/mono.cpp | 47 + muse2/synti/libsynti/mono.h | 47 + muse2/synti/libsynti/mpevent.cpp | 22 + muse2/synti/libsynti/mpevent.h | 100 + muse2/synti/libsynti/poly.cpp | 35 + muse2/synti/libsynti/poly.h | 39 + muse2/synti/organ/Makefile.am | 15 + muse2/synti/organ/Makefile.in | 657 + muse2/synti/organ/fdialogbuttons.ui | 136 + muse2/synti/organ/organ.cpp | 710 + muse2/synti/organ/organ.h | 198 + muse2/synti/organ/organgui.cpp | 189 + muse2/synti/organ/organgui.h | 43 + muse2/synti/organ/organguibase.ui | 1219 + muse2/synti/s1/Makefile.am | 13 + muse2/synti/s1/Makefile.in | 634 + muse2/synti/s1/s1.cpp | 227 + muse2/synti/simpledrums/COPYING | 3 + muse2/synti/simpledrums/Makefile.am | 20 + muse2/synti/simpledrums/Makefile.in | 661 + muse2/synti/simpledrums/README | 44 + muse2/synti/simpledrums/ReleaseNotes.txt | 21 + muse2/synti/simpledrums/common.h | 110 + muse2/synti/simpledrums/simpledrums.cpp | 1759 + muse2/synti/simpledrums/simpledrums.h | 177 + muse2/synti/simpledrums/simpledrumsgui.cpp | 892 + muse2/synti/simpledrums/simpledrumsgui.h | 212 + muse2/synti/simpledrums/simpledrumsguibase.ui | 27 + muse2/synti/simpledrums/ssplugin.cpp | 461 + muse2/synti/simpledrums/ssplugin.h | 153 + muse2/synti/simpledrums/sspluginchooserbase.ui | 134 + muse2/synti/simpledrums/ssplugingui.cpp | 534 + muse2/synti/simpledrums/ssplugingui.h | 206 + muse2/synti/synti-install.am | 1 + muse2/synti/vam/COPYING | 340 + muse2/synti/vam/ChangeLog | 16 + muse2/synti/vam/Makefile.am | 18 + muse2/synti/vam/Makefile.in | 659 + muse2/synti/vam/README | 42 + muse2/synti/vam/TODO | 3 + muse2/synti/vam/vam.cpp | 1050 + muse2/synti/vam/vam.h | 38 + muse2/synti/vam/vamgui.cpp | 720 + muse2/synti/vam/vamgui.h | 82 + muse2/synti/vam/vamguibase.ui | 2032 + muse2/test.med | 449 + muse2/testproj.med | 333 + muse2/utils/Makefile.am | 5 + muse2/utils/Makefile.in | 420 + muse2/utils/muse-find-unused-wavs | 64 + muse2/utils/muse-song-convert.py | 740 + muse2/xpm/Makefile.am | 1 + muse2/xpm/Makefile.in | 415 + muse2/xpm/addtrack_addmiditrack.xpm | 76 + muse2/xpm/addtrack_audiogroup.xpm | 242 + muse2/xpm/addtrack_audioinput.xpm | 32 + muse2/xpm/addtrack_audiooutput.xpm | 128 + muse2/xpm/addtrack_auxsend.xpm | 95 + muse2/xpm/addtrack_drumtrack.xpm | 102 + muse2/xpm/addtrack_wavetrack.xpm | 167 + muse2/xpm/audio_bounce_to_file.xpm | 24 + muse2/xpm/audio_bounce_to_track.xpm | 27 + muse2/xpm/audio_restartaudio.xpm | 69 + muse2/xpm/automation_clear_data.xpm | 22 + muse2/xpm/automation_mixer.xpm | 35 + muse2/xpm/automation_take_snapshot.xpm | 144 + muse2/xpm/back.xpm | 27 + muse2/xpm/blacksqcheck.xpm | 34 + muse2/xpm/blacksquare.xpm | 25 + muse2/xpm/bluedot.xpm | 34 + muse2/xpm/bold.xpm | 16 + muse2/xpm/bouncetofile.xpm | 25 + muse2/xpm/buttondown.xpm | 27 + muse2/xpm/cafter.xpm | 29 + muse2/xpm/cliplistS.xpm | 28 + muse2/xpm/cmark.xpm | 23 + muse2/xpm/configure.xpm | 36 + muse2/xpm/context_help.xpm | 32 + muse2/xpm/ctrl.xpm | 27 + muse2/xpm/cut.xpm | 29 + muse2/xpm/darkgreendot.xpm | 21 + muse2/xpm/darkreddot.xpm | 17 + muse2/xpm/darkredled.xpm | 19 + muse2/xpm/delete.xpm | 27 + muse2/xpm/dot.xpm | 22 + muse2/xpm/dot1.xpm | 22 + muse2/xpm/doth.xpm | 22 + muse2/xpm/down.xpm | 15 + muse2/xpm/draw.xpm | 25 + muse2/xpm/drumS.xpm | 30 + muse2/xpm/edit_drumms.xpm | 45 + muse2/xpm/edit_list.xpm | 31 + muse2/xpm/edit_mastertrack.xpm | 38 + muse2/xpm/edit_midi.xpm | 26 + muse2/xpm/edit_pianoroll.xpm | 28 + muse2/xpm/edit_score.xpm | 24 + muse2/xpm/edit_track_add.xpm | 24 + muse2/xpm/edit_track_del.xpm | 25 + muse2/xpm/edit_wave.xpm | 38 + muse2/xpm/editcopy.xpm | 102 + muse2/xpm/editcopyS.xpm | 26 + muse2/xpm/editcut.xpm | 33 + muse2/xpm/editcutS.xpm | 24 + muse2/xpm/editmute.xpm | 33 + muse2/xpm/editmuteS.xpm | 63 + muse2/xpm/editpaste.xpm | 210 + muse2/xpm/editpaste2track.xpm | 168 + muse2/xpm/editpaste2trackS.xpm | 28 + muse2/xpm/editpasteS.xpm | 27 + muse2/xpm/editpasteclone.xpm | 184 + muse2/xpm/editpasteclone2track.xpm | 148 + muse2/xpm/editpasteclone2trackS.xpm | 34 + muse2/xpm/editpastecloneS.xpm | 34 + muse2/xpm/exit.xpm | 29 + muse2/xpm/exit1.xpm | 29 + muse2/xpm/exitS.xpm | 25 + muse2/xpm/fforward.xpm | 17 + muse2/xpm/filenew.xpm | 170 + muse2/xpm/filenewS.xpm | 29 + muse2/xpm/fileopen.xpm | 216 + muse2/xpm/fileopenS.xpm | 26 + muse2/xpm/fileprint.xpm | 102 + muse2/xpm/fileprintS.xpm | 26 + muse2/xpm/filesave.xpm | 175 + muse2/xpm/filesaveS.xpm | 28 + muse2/xpm/filesaveasS.xpm | 27 + muse2/xpm/find.xpm | 28 + muse2/xpm/flag.xpm | 28 + muse2/xpm/flagS.xpm | 19 + muse2/xpm/fluidsynth-logo-124x45.xpm | 2124 + muse2/xpm/fluidsynth_banner_124x45.xpm | 1899 + muse2/xpm/forward.xpm | 28 + muse2/xpm/frewind.xpm | 17 + muse2/xpm/glue.xpm | 49 + muse2/xpm/graydot.xpm | 21 + muse2/xpm/greendot.xpm | 25 + muse2/xpm/gv.xpm | 23 + muse2/xpm/home.xpm | 27 + muse2/xpm/idea.xpm | 35 + muse2/xpm/iiwusynth.xpm | 1372 + muse2/xpm/initS.xpm | 23 + muse2/xpm/inputpluginS.xpm | 22 + muse2/xpm/italic.xpm | 16 + muse2/xpm/listS.xpm | 26 + muse2/xpm/lmark.xpm | 23 + muse2/xpm/localoffS.xpm | 22 + muse2/xpm/lock.xpm | 86 + muse2/xpm/loop.xpm | 23 + muse2/xpm/loop1.xpm | 39 + muse2/xpm/master.xpm | 15 + muse2/xpm/mastertrackS.xpm | 25 + muse2/xpm/mastertrack_graphic.xpm | 28 + muse2/xpm/mastertrack_list.xpm | 27 + muse2/xpm/meta.xpm | 27 + muse2/xpm/midi_edit_instrument.xpm | 27 + muse2/xpm/midi_init_instr.xpm | 28 + muse2/xpm/midi_inputplugins.xpm | 33 + muse2/xpm/midi_inputplugins_midi_input_filter.xpm | 98 + .../xpm/midi_inputplugins_midi_input_transform.xpm | 31 + .../midi_inputplugins_random_rhythm_generator.xpm | 67 + muse2/xpm/midi_inputplugins_remote_control.xpm | 64 + muse2/xpm/midi_inputplugins_transpose.xpm | 30 + muse2/xpm/midi_local_off.xpm | 105 + muse2/xpm/midi_plugS.xpm | 22 + muse2/xpm/midi_reset_instr.xpm | 55 + muse2/xpm/midi_transform.xpm | 30 + muse2/xpm/midi_transpose.xpm | 31 + muse2/xpm/midiin.xpm | 23 + muse2/xpm/miditransformS.xpm | 22 + muse2/xpm/miditransposeS.xpm | 25 + muse2/xpm/mixerS.xpm | 21 + muse2/xpm/mixeraudioS.xpm | 22 + muse2/xpm/mono.xpm | 16 + muse2/xpm/muse_icon.xpm | 210 + muse2/xpm/muse_leftside_logo.xpm | 1058 + muse2/xpm/mustangS.xpm | 23 + muse2/xpm/mute.xpm | 18 + muse2/xpm/mutebutton_off.xpm | 73 + muse2/xpm/mutebutton_on.xpm | 352 + muse2/xpm/newmutebutton.xpm | 69 + muse2/xpm/note.xpm | 23 + muse2/xpm/note1.xpm | 28 + muse2/xpm/off.xpm | 25 + muse2/xpm/pafter.xpm | 29 + muse2/xpm/panic.xpm | 50 + muse2/xpm/pencil.xpm | 27 + muse2/xpm/piano.xpm | 170 + muse2/xpm/pianoS.xpm | 24 + muse2/xpm/pitch.xpm | 28 + muse2/xpm/play.xpm | 17 + muse2/xpm/pointer.xpm | 28 + muse2/xpm/punchin.xpm | 27 + muse2/xpm/punchin1.xpm | 18 + muse2/xpm/punchout.xpm | 24 + muse2/xpm/punchout1.xpm | 18 + muse2/xpm/quant.xpm | 28 + muse2/xpm/rec_echo_off.xpm | 15 + muse2/xpm/rec_echo_on.xpm | 16 + muse2/xpm/record.xpm | 160 + muse2/xpm/record1.xpm | 21 + muse2/xpm/record_off.xpm | 150 + muse2/xpm/record_on.xpm | 160 + muse2/xpm/recordoffbutton.xpm | 206 + muse2/xpm/recordonbutton.xpm | 85 + muse2/xpm/reddot.xpm | 17 + muse2/xpm/redled.xpm | 18 + muse2/xpm/redo.xpm | 92 + muse2/xpm/redoS.xpm | 25 + muse2/xpm/resetS.xpm | 22 + muse2/xpm/rmark.xpm | 23 + muse2/xpm/score.xpm | 170 + muse2/xpm/scoreS.xpm | 23 + muse2/xpm/select.xpm | 21 + muse2/xpm/select_all.xpm | 21 + muse2/xpm/select_all_parts_on_track.xpm | 39 + muse2/xpm/select_deselect_all.xpm | 22 + muse2/xpm/select_inside_loop.xpm | 21 + muse2/xpm/select_invert_selection.xpm | 21 + muse2/xpm/select_outside_loop.xpm | 21 + muse2/xpm/settings_appearance_settings.xpm | 66 + muse2/xpm/settings_configureshortcuts.xpm | 36 + muse2/xpm/settings_follow_song.xpm | 30 + muse2/xpm/settings_globalsettings.xpm | 89 + muse2/xpm/settings_metronome.xpm | 99 + muse2/xpm/settings_midifileexport.xpm | 30 + muse2/xpm/settings_midiport_softsynths.xpm | 29 + muse2/xpm/settings_midisync.xpm | 53 + muse2/xpm/solobutton.xpm | 39 + muse2/xpm/solobutton_off.xpm | 103 + muse2/xpm/solobutton_off_blksq.xpm | 98 + muse2/xpm/solobutton_on.xpm | 300 + muse2/xpm/solobutton_on_blksq.xpm | 273 + muse2/xpm/speaker.xpm | 23 + muse2/xpm/start.xpm | 17 + muse2/xpm/steprec.xpm | 24 + muse2/xpm/stereo.xpm | 14 + muse2/xpm/stick.xpm | 33 + muse2/xpm/stop.xpm | 17 + muse2/xpm/synth.xpm | 88 + muse2/xpm/sysex.xpm | 27 + muse2/xpm/toc.xpm | 27 + muse2/xpm/track_add.xpm | 23 + muse2/xpm/track_comment.xpm | 47 + muse2/xpm/track_delete.xpm | 23 + muse2/xpm/underlined.xpm | 16 + muse2/xpm/undo.xpm | 93 + muse2/xpm/undoS.xpm | 25 + muse2/xpm/up.xpm | 15 + muse2/xpm/view_bigtime_window.xpm | 22 + muse2/xpm/view_cliplist.xpm | 32 + muse2/xpm/view_marker.xpm | 37 + muse2/xpm/view_mixer.xpm | 26 + muse2/xpm/view_transport_window.xpm | 24 + muse2/xpm/wave.xpm | 33 + 1051 files changed, 677226 insertions(+) create mode 100644 muse2/.muse.prcs_aux create mode 100644 muse2/AUTHORS create mode 120000 muse2/COPYING create mode 100644 muse2/ChangeLog create mode 100644 muse2/Doxyfile.in create mode 120000 muse2/INSTALL create mode 100644 muse2/Makefile.am create mode 100644 muse2/Makefile.in create mode 100644 muse2/NEWS create mode 100644 muse2/README create mode 100644 muse2/README.CVS create mode 100644 muse2/README.de create mode 100644 muse2/README.effects-rack create mode 100644 muse2/README.instruments create mode 100644 muse2/README.ladspaguis create mode 100644 muse2/README.shortcuts create mode 100644 muse2/README.softsynth create mode 100644 muse2/README.translate create mode 100644 muse2/SECURITY create mode 100644 muse2/aclocal.m4 create mode 100644 muse2/al/Makefile.am create mode 100644 muse2/al/Makefile.in create mode 100644 muse2/al/al.cpp create mode 100644 muse2/al/al.h create mode 100644 muse2/al/dsp.cpp create mode 100644 muse2/al/dsp.h create mode 100644 muse2/al/dspSSE.cpp create mode 100644 muse2/al/dspXMM.cpp create mode 100644 muse2/all-pic.h create mode 100644 muse2/all.h create mode 100755 muse2/autogen.sh create mode 100644 muse2/autom4te.cache/output.0 create mode 100644 muse2/autom4te.cache/output.1 create mode 100644 muse2/autom4te.cache/output.2 create mode 100644 muse2/autom4te.cache/requests create mode 100644 muse2/autom4te.cache/traces.0 create mode 100644 muse2/autom4te.cache/traces.1 create mode 100644 muse2/autom4te.cache/traces.2 create mode 100644 muse2/common.am create mode 120000 muse2/config.guess create mode 100644 muse2/config.h.in create mode 120000 muse2/config.sub create mode 100755 muse2/configure create mode 100644 muse2/configure.ac create mode 100644 muse2/demos/Makefile.am create mode 100644 muse2/demos/Makefile.in create mode 100644 muse2/demos/rasen.med create mode 120000 muse2/depcomp create mode 100644 muse2/doc/Makefile.am create mode 100644 muse2/doc/Makefile.in create mode 100644 muse2/doc/midieditfunctions.png create mode 100644 muse2/doc/muse.sgm create mode 100644 muse2/grepmidi/Makefile.am create mode 100644 muse2/grepmidi/Makefile.in create mode 100644 muse2/grepmidi/grepmidi.cpp create mode 100644 muse2/grid.med create mode 120000 muse2/install-sh create mode 100644 muse2/lib/Makefile.am create mode 100644 muse2/lib/Makefile.in create mode 100644 muse2/lib/plugins/Makefile.am create mode 100644 muse2/lib/plugins/Makefile.in create mode 100644 muse2/lib/synthi/Makefile.am create mode 100644 muse2/lib/synthi/Makefile.in create mode 120000 muse2/ltmain.sh create mode 100644 muse2/m4/Makefile.am create mode 100644 muse2/m4/Makefile.in create mode 100644 muse2/m4/aclocal-include.m4 create mode 100644 muse2/m4/alsa.m4 create mode 100644 muse2/m4/docbook.m4 create mode 120000 muse2/m4/libtool.m4 create mode 120000 muse2/m4/ltoptions.m4 create mode 120000 muse2/m4/ltsugar.m4 create mode 120000 muse2/m4/ltversion.m4 create mode 120000 muse2/m4/lt~obsolete.m4 create mode 100644 muse2/m4/qt.m4 create mode 120000 muse2/missing create mode 100644 muse2/muse.prj create mode 100644 muse2/muse.pro create mode 100644 muse2/muse/Makefile.am create mode 100644 muse2/muse/Makefile.in create mode 100644 muse2/muse/app.cpp create mode 100644 muse2/muse/app.cpp.orig create mode 100644 muse2/muse/app.h create mode 100644 muse2/muse/appearance.cpp create mode 100644 muse2/muse/appearance.h create mode 100644 muse2/muse/arranger/Makefile.am create mode 100644 muse2/muse/arranger/Makefile.in create mode 100644 muse2/muse/arranger/alayout.cpp create mode 100644 muse2/muse/arranger/alayout.h create mode 100644 muse2/muse/arranger/arranger.cpp create mode 100644 muse2/muse/arranger/arranger.h create mode 100644 muse2/muse/arranger/pcanvas.cpp create mode 100644 muse2/muse/arranger/pcanvas.h create mode 100644 muse2/muse/arranger/tlist.cpp create mode 100644 muse2/muse/arranger/tlist.h create mode 100644 muse2/muse/arranger/trackautomationview.cpp create mode 100644 muse2/muse/arranger/trackautomationview.h create mode 100644 muse2/muse/arranger/trackinfo.cpp create mode 100644 muse2/muse/audio.cpp create mode 100644 muse2/muse/audio.h create mode 100644 muse2/muse/audioconvert.cpp create mode 100644 muse2/muse/audioconvert.h create mode 100644 muse2/muse/audioprefetch.cpp create mode 100644 muse2/muse/audioprefetch.h create mode 100644 muse2/muse/audiotrack.cpp create mode 100644 muse2/muse/cliplist/Makefile.am create mode 100644 muse2/muse/cliplist/Makefile.in create mode 100644 muse2/muse/cliplist/cliplist.cpp create mode 100644 muse2/muse/cliplist/cliplist.h create mode 100644 muse2/muse/cobject.cpp create mode 100644 muse2/muse/cobject.h create mode 100644 muse2/muse/conf.cpp create mode 100644 muse2/muse/conf.h create mode 100644 muse2/muse/confmport.cpp create mode 100644 muse2/muse/confmport.h create mode 100644 muse2/muse/ctrl.cpp create mode 100644 muse2/muse/ctrl.h create mode 100644 muse2/muse/ctrl/Makefile.am create mode 100644 muse2/muse/ctrl/Makefile.in create mode 100644 muse2/muse/ctrl/ctrlcanvas.cpp create mode 100644 muse2/muse/ctrl/ctrlcanvas.h create mode 100644 muse2/muse/ctrl/ctrledit.cpp create mode 100644 muse2/muse/ctrl/ctrledit.h create mode 100644 muse2/muse/ctrl/ctrlpanel.cpp create mode 100644 muse2/muse/ctrl/ctrlpanel.h create mode 100644 muse2/muse/debug.h create mode 100644 muse2/muse/default_click.h create mode 100644 muse2/muse/device.h create mode 100644 muse2/muse/driver/Makefile.am create mode 100644 muse2/muse/driver/Makefile.in create mode 100644 muse2/muse/driver/alsamidi.cpp create mode 100644 muse2/muse/driver/alsamidi.h create mode 100644 muse2/muse/driver/alsatimer.cpp create mode 100644 muse2/muse/driver/alsatimer.h create mode 100644 muse2/muse/driver/audiodev.h create mode 100644 muse2/muse/driver/dummyaudio.cpp create mode 100644 muse2/muse/driver/jack.cpp create mode 100644 muse2/muse/driver/jackaudio.h create mode 100644 muse2/muse/driver/jackmidi.cpp create mode 100644 muse2/muse/driver/jackmidi.h create mode 100644 muse2/muse/driver/rtctimer.cpp create mode 100644 muse2/muse/driver/rtctimer.h create mode 100644 muse2/muse/driver/timerdev.h create mode 100644 muse2/muse/dssihost.cpp create mode 100644 muse2/muse/dssihost.h create mode 100644 muse2/muse/evdata.h create mode 100644 muse2/muse/event.cpp create mode 100644 muse2/muse/event.h create mode 100644 muse2/muse/eventbase.h create mode 100644 muse2/muse/eventlist.cpp create mode 100644 muse2/muse/exportmidi.cpp create mode 100644 muse2/muse/fastlog.h create mode 100644 muse2/muse/gconfig.cpp create mode 100644 muse2/muse/gconfig.h create mode 100644 muse2/muse/givertcap.c create mode 100644 muse2/muse/globaldefs.h create mode 100644 muse2/muse/globals.cpp create mode 100644 muse2/muse/globals.h create mode 100644 muse2/muse/help.cpp create mode 100644 muse2/muse/helper.cpp create mode 100644 muse2/muse/helper.h create mode 100644 muse2/muse/icons.cpp create mode 100644 muse2/muse/icons.h create mode 100644 muse2/muse/importmidi.cpp create mode 100644 muse2/muse/instruments/Makefile.am create mode 100644 muse2/muse/instruments/Makefile.in create mode 100644 muse2/muse/instruments/ccontrolbase.ui create mode 100644 muse2/muse/instruments/editinstrument.cpp create mode 100644 muse2/muse/instruments/editinstrument.h create mode 100644 muse2/muse/instruments/editinstrumentbase.ui create mode 100644 muse2/muse/instruments/midictrledit.cpp create mode 100644 muse2/muse/instruments/midictrledit.h create mode 100644 muse2/muse/instruments/minstrument.cpp create mode 100644 muse2/muse/instruments/minstrument.h create mode 100644 muse2/muse/key.cpp create mode 100644 muse2/muse/key.h create mode 100644 muse2/muse/ladspa.h create mode 100644 muse2/muse/liste/Makefile.am create mode 100644 muse2/muse/liste/Makefile.in create mode 100644 muse2/muse/liste/editctrlbase.ui create mode 100644 muse2/muse/liste/editevent.cpp create mode 100644 muse2/muse/liste/editevent.h create mode 100644 muse2/muse/liste/listedit.cpp create mode 100644 muse2/muse/liste/listedit.h create mode 100644 muse2/muse/make.inc create mode 100644 muse2/muse/marker/Makefile.am create mode 100644 muse2/muse/marker/Makefile.in create mode 100644 muse2/muse/marker/marker.cpp create mode 100644 muse2/muse/marker/marker.h create mode 100644 muse2/muse/marker/markerview.cpp create mode 100644 muse2/muse/marker/markerview.h create mode 100644 muse2/muse/master/Makefile.am create mode 100644 muse2/muse/master/Makefile.in create mode 100644 muse2/muse/master/lmaster.cpp create mode 100644 muse2/muse/master/lmaster.h create mode 100644 muse2/muse/master/master.cpp create mode 100644 muse2/muse/master/master.h create mode 100644 muse2/muse/master/masteredit.cpp create mode 100644 muse2/muse/master/masteredit.h create mode 100644 muse2/muse/master/tscale.cpp create mode 100644 muse2/muse/master/tscale.h create mode 100644 muse2/muse/memory.cpp create mode 100644 muse2/muse/memory.h create mode 100644 muse2/muse/midi.cpp create mode 100644 muse2/muse/midi.h create mode 100644 muse2/muse/midictrl.cpp create mode 100644 muse2/muse/midictrl.h create mode 100644 muse2/muse/mididev.cpp create mode 100644 muse2/muse/mididev.h create mode 100644 muse2/muse/midiedit/Makefile.am create mode 100644 muse2/muse/midiedit/Makefile.in create mode 100644 muse2/muse/midiedit/cmd.h create mode 100644 muse2/muse/midiedit/dcanvas.cpp create mode 100644 muse2/muse/midiedit/dcanvas.h create mode 100644 muse2/muse/midiedit/dlist.cpp create mode 100644 muse2/muse/midiedit/dlist.h create mode 100644 muse2/muse/midiedit/drumedit.cpp create mode 100644 muse2/muse/midiedit/drumedit.h create mode 100644 muse2/muse/midiedit/drummap.cpp create mode 100644 muse2/muse/midiedit/drummap.h create mode 100644 muse2/muse/midiedit/ecanvas.cpp create mode 100644 muse2/muse/midiedit/ecanvas.h create mode 100644 muse2/muse/midiedit/piano.cpp create mode 100644 muse2/muse/midiedit/piano.h create mode 100644 muse2/muse/midiedit/pianoroll.cpp create mode 100644 muse2/muse/midiedit/pianoroll.h create mode 100644 muse2/muse/midiedit/prcanvas.cpp create mode 100644 muse2/muse/midiedit/prcanvas.h create mode 100644 muse2/muse/midiedit/quantconfig.cpp create mode 100644 muse2/muse/midiedit/quantconfig.h create mode 100644 muse2/muse/midieditor.cpp create mode 100644 muse2/muse/midieditor.h create mode 100644 muse2/muse/midievent.cpp create mode 100644 muse2/muse/midievent.h create mode 100644 muse2/muse/midifile.cpp create mode 100644 muse2/muse/midifile.h create mode 100644 muse2/muse/midiport.cpp create mode 100644 muse2/muse/midiport.h create mode 100644 muse2/muse/midiseq.cpp create mode 100644 muse2/muse/midiseq.h create mode 100644 muse2/muse/miditransform.cpp create mode 100644 muse2/muse/miditransform.h create mode 100644 muse2/muse/mixer/Makefile.am create mode 100644 muse2/muse/mixer/Makefile.in create mode 100644 muse2/muse/mixer/amixer.cpp create mode 100644 muse2/muse/mixer/amixer.h create mode 100644 muse2/muse/mixer/astrip.cpp create mode 100644 muse2/muse/mixer/astrip.h create mode 100644 muse2/muse/mixer/auxknob.cpp create mode 100644 muse2/muse/mixer/auxknob.h create mode 100644 muse2/muse/mixer/meter.cpp create mode 100644 muse2/muse/mixer/meter.h create mode 100644 muse2/muse/mixer/midiportroutebase.ui create mode 100644 muse2/muse/mixer/mstrip.cpp create mode 100644 muse2/muse/mixer/mstrip.h create mode 100644 muse2/muse/mixer/panknob.cpp create mode 100644 muse2/muse/mixer/panknob.h create mode 100644 muse2/muse/mixer/rack.cpp create mode 100644 muse2/muse/mixer/rack.h create mode 100644 muse2/muse/mixer/routedialog.cpp create mode 100644 muse2/muse/mixer/routedialog.h create mode 100644 muse2/muse/mixer/routedialogbase.ui create mode 100644 muse2/muse/mixer/strip.cpp create mode 100644 muse2/muse/mixer/strip.h create mode 100644 muse2/muse/mpevent.cpp create mode 100644 muse2/muse/mpevent.h create mode 100644 muse2/muse/mplugins/.cvsignore create mode 100644 muse2/muse/mplugins/Makefile.am create mode 100644 muse2/muse/mplugins/Makefile.in create mode 100644 muse2/muse/mplugins/midifilter.ui create mode 100644 muse2/muse/mplugins/midifilterimpl.cpp create mode 100644 muse2/muse/mplugins/midifilterimpl.h create mode 100644 muse2/muse/mplugins/midiitransform.cpp create mode 100644 muse2/muse/mplugins/midiitransform.h create mode 100644 muse2/muse/mplugins/mitplugin.cpp create mode 100644 muse2/muse/mplugins/mitplugin.h create mode 100644 muse2/muse/mplugins/mittranspose.cpp create mode 100644 muse2/muse/mplugins/mittranspose.h create mode 100644 muse2/muse/mplugins/mrconfig.cpp create mode 100644 muse2/muse/mplugins/mrconfig.h create mode 100644 muse2/muse/mplugins/mrconfigbase.ui create mode 100644 muse2/muse/mplugins/random.cpp create mode 100644 muse2/muse/mplugins/random.h create mode 100644 muse2/muse/mplugins/rhythm.cpp create mode 100644 muse2/muse/mplugins/rhythm.h create mode 100644 muse2/muse/mplugins/rhythmbase.ui create mode 100644 muse2/muse/mtc.cpp create mode 100644 muse2/muse/mtc.h create mode 100644 muse2/muse/muse.log create mode 100644 muse2/muse/muse.pro create mode 100644 muse2/muse/node.cpp create mode 100644 muse2/muse/node.h create mode 100644 muse2/muse/osc.cpp create mode 100644 muse2/muse/osc.h create mode 100644 muse2/muse/part.cpp create mode 100644 muse2/muse/part.h create mode 100644 muse2/muse/patchbay/Makefile.am create mode 100644 muse2/muse/patchbay/patchbay.cpp create mode 100644 muse2/muse/patchbay/patchbay.h create mode 100644 muse2/muse/patchbay/patchbaybase.ui create mode 100644 muse2/muse/plugin.cpp create mode 100644 muse2/muse/plugin.h create mode 100644 muse2/muse/pos.cpp create mode 100644 muse2/muse/pos.h create mode 100644 muse2/muse/remote/Makefile.am create mode 100644 muse2/muse/remote/Makefile.in create mode 100644 muse2/muse/remote/pyapi.cpp create mode 100644 muse2/muse/remote/pyapi.h create mode 100644 muse2/muse/route.cpp create mode 100644 muse2/muse/route.h create mode 100644 muse2/muse/seqmsg.cpp create mode 100644 muse2/muse/shortcuts.cpp create mode 100644 muse2/muse/shortcuts.h create mode 100644 muse2/muse/sig.cpp create mode 100644 muse2/muse/sig.h create mode 100644 muse2/muse/song.cpp create mode 100644 muse2/muse/song.h create mode 100644 muse2/muse/songfile.cpp create mode 100644 muse2/muse/stringparam.cpp create mode 100644 muse2/muse/stringparam.h create mode 100644 muse2/muse/sync.cpp create mode 100644 muse2/muse/sync.h create mode 100644 muse2/muse/synth.cpp create mode 100644 muse2/muse/synth.h create mode 100644 muse2/muse/tempo.cpp create mode 100644 muse2/muse/tempo.h create mode 100644 muse2/muse/thread.cpp create mode 100644 muse2/muse/thread.h create mode 100644 muse2/muse/ticksynth.cpp create mode 100644 muse2/muse/ticksynth.h create mode 100644 muse2/muse/track.cpp create mode 100644 muse2/muse/track.h create mode 100644 muse2/muse/transport.cpp create mode 100644 muse2/muse/transport.h create mode 100644 muse2/muse/transpose.cpp create mode 100644 muse2/muse/transpose.h create mode 100644 muse2/muse/undo.cpp create mode 100644 muse2/muse/undo.h create mode 100644 muse2/muse/value.cpp create mode 100644 muse2/muse/value.h create mode 100644 muse2/muse/vst.cpp create mode 100644 muse2/muse/vst.h create mode 100644 muse2/muse/wave.cpp create mode 100644 muse2/muse/wave.h create mode 100644 muse2/muse/waveedit/Makefile.am create mode 100644 muse2/muse/waveedit/Makefile.in create mode 100644 muse2/muse/waveedit/editgain.cpp create mode 100644 muse2/muse/waveedit/editgain.h create mode 100644 muse2/muse/waveedit/editgainbase.ui create mode 100644 muse2/muse/waveedit/waveedit.cpp create mode 100644 muse2/muse/waveedit/waveedit.h create mode 100644 muse2/muse/waveedit/waveview.cpp create mode 100644 muse2/muse/waveedit/waveview.h create mode 100644 muse2/muse/waveevent.cpp create mode 100644 muse2/muse/waveevent.h create mode 100644 muse2/muse/wavetrack.cpp create mode 100644 muse2/muse/widgets/.cvsignore create mode 100644 muse2/muse/widgets/Makefile.am create mode 100644 muse2/muse/widgets/Makefile.in create mode 100644 muse2/muse/widgets/aboutbox.ui create mode 100644 muse2/muse/widgets/aboutbox_impl.cpp create mode 100644 muse2/muse/widgets/aboutbox_impl.h create mode 100644 muse2/muse/widgets/action.h create mode 100644 muse2/muse/widgets/appearancebase.ui create mode 100644 muse2/muse/widgets/bigtime.cpp create mode 100644 muse2/muse/widgets/bigtime.h create mode 100644 muse2/muse/widgets/canvas.cpp create mode 100644 muse2/muse/widgets/canvas.h create mode 100644 muse2/muse/widgets/checkbox.cpp create mode 100644 muse2/muse/widgets/checkbox.h create mode 100644 muse2/muse/widgets/citem.cpp create mode 100644 muse2/muse/widgets/citem.h create mode 100644 muse2/muse/widgets/cliplisteditorbase.ui create mode 100644 muse2/muse/widgets/comboQuant.cpp create mode 100644 muse2/muse/widgets/comboQuant.h create mode 100644 muse2/muse/widgets/combobox.cpp create mode 100644 muse2/muse/widgets/combobox.h create mode 100644 muse2/muse/widgets/comment.cpp create mode 100644 muse2/muse/widgets/comment.h create mode 100644 muse2/muse/widgets/commentbase.ui create mode 100644 muse2/muse/widgets/configmidifilebase.ui create mode 100644 muse2/muse/widgets/ctrlcombo.cpp create mode 100644 muse2/muse/widgets/ctrlcombo.cw create mode 100644 muse2/muse/widgets/ctrlcombo.h create mode 100644 muse2/muse/widgets/dentry.cpp create mode 100644 muse2/muse/widgets/dentry.h create mode 100644 muse2/muse/widgets/didyouknow.ui create mode 100644 muse2/muse/widgets/dimap.cpp create mode 100644 muse2/muse/widgets/dimap.h create mode 100644 muse2/muse/widgets/doublelabel.cpp create mode 100644 muse2/muse/widgets/doublelabel.h create mode 100644 muse2/muse/widgets/drange.cpp create mode 100644 muse2/muse/widgets/drange.h create mode 100644 muse2/muse/widgets/editctrl7dialogbase.ui create mode 100644 muse2/muse/widgets/editmetadialogbase.ui create mode 100644 muse2/muse/widgets/editnotedialogbase.ui create mode 100644 muse2/muse/widgets/editsysexdialogbase.ui create mode 100644 muse2/muse/widgets/fdialogbuttons.ui create mode 100644 muse2/muse/widgets/filedialog.cpp create mode 100644 muse2/muse/widgets/filedialog.h create mode 100644 muse2/muse/widgets/fontsel.cpp create mode 100644 muse2/muse/widgets/fontsel.h create mode 100644 muse2/muse/widgets/gatetime.cpp create mode 100644 muse2/muse/widgets/gatetime.h create mode 100644 muse2/muse/widgets/gatetimebase.ui create mode 100644 muse2/muse/widgets/genset.cpp create mode 100644 muse2/muse/widgets/genset.h create mode 100644 muse2/muse/widgets/gensetbase.ui create mode 100644 muse2/muse/widgets/header.cpp create mode 100644 muse2/muse/widgets/header.h create mode 100644 muse2/muse/widgets/hitscale.cpp create mode 100644 muse2/muse/widgets/hitscale.h create mode 100644 muse2/muse/widgets/intlabel.cpp create mode 100644 muse2/muse/widgets/intlabel.h create mode 100644 muse2/muse/widgets/itransformbase.ui create mode 100644 muse2/muse/widgets/knob.cpp create mode 100644 muse2/muse/widgets/knob.h create mode 100644 muse2/muse/widgets/lcombo.cpp create mode 100644 muse2/muse/widgets/lcombo.h create mode 100644 muse2/muse/widgets/listitem.h create mode 100644 muse2/muse/widgets/menutitleitem.h create mode 100644 muse2/muse/widgets/metronome.cpp create mode 100644 muse2/muse/widgets/metronome.h create mode 100644 muse2/muse/widgets/metronomebase.ui create mode 100644 muse2/muse/widgets/midisync.ui create mode 100644 muse2/muse/widgets/midisyncimpl.cpp create mode 100644 muse2/muse/widgets/midisyncimpl.h create mode 100644 muse2/muse/widgets/mittransposebase.ui create mode 100644 muse2/muse/widgets/mixdowndialog.cpp create mode 100644 muse2/muse/widgets/mixdowndialog.h create mode 100644 muse2/muse/widgets/mixdowndialogbase.ui create mode 100644 muse2/muse/widgets/mktest create mode 100644 muse2/muse/widgets/mlabel.cpp create mode 100644 muse2/muse/widgets/mlabel.h create mode 100644 muse2/muse/widgets/mmath.cpp create mode 100644 muse2/muse/widgets/mmath.h create mode 100644 muse2/muse/widgets/moc_aboutbox.cpp create mode 100644 muse2/muse/widgets/moc_didyouknow.cpp create mode 100644 muse2/muse/widgets/moc_songinfo.cpp create mode 100644 muse2/muse/widgets/moc_ttoolbar.cpp create mode 100644 muse2/muse/widgets/mtrackinfobase.ui create mode 100644 muse2/muse/widgets/mtscale.cpp create mode 100644 muse2/muse/widgets/mtscale.h create mode 100644 muse2/muse/widgets/musewidgetsplug.cpp create mode 100644 muse2/muse/widgets/nentry.cpp create mode 100644 muse2/muse/widgets/nentry.h create mode 100644 muse2/muse/widgets/noteinfo.cpp create mode 100644 muse2/muse/widgets/noteinfo.h create mode 100644 muse2/muse/widgets/pitchedit.cpp create mode 100644 muse2/muse/widgets/pitchedit.h create mode 100644 muse2/muse/widgets/pitchlabel.cpp create mode 100644 muse2/muse/widgets/pitchlabel.h create mode 100644 muse2/muse/widgets/popupmenu.cpp create mode 100644 muse2/muse/widgets/popupmenu.h create mode 100644 muse2/muse/widgets/posedit.cpp create mode 100644 muse2/muse/widgets/posedit.h create mode 100644 muse2/muse/widgets/poslabel.cpp create mode 100644 muse2/muse/widgets/poslabel.h create mode 100644 muse2/muse/widgets/scldiv.cpp create mode 100644 muse2/muse/widgets/scldiv.h create mode 100644 muse2/muse/widgets/scldraw.cpp create mode 100644 muse2/muse/widgets/scldraw.h create mode 100644 muse2/muse/widgets/sclif.cpp create mode 100644 muse2/muse/widgets/sclif.h create mode 100644 muse2/muse/widgets/scrollscale.cpp create mode 100644 muse2/muse/widgets/scrollscale.h create mode 100644 muse2/muse/widgets/section.h create mode 100644 muse2/muse/widgets/shortcutcapturedialog.cpp create mode 100644 muse2/muse/widgets/shortcutcapturedialog.h create mode 100644 muse2/muse/widgets/shortcutcapturedialogbase.ui create mode 100644 muse2/muse/widgets/shortcutconfig.cpp create mode 100644 muse2/muse/widgets/shortcutconfig.h create mode 100644 muse2/muse/widgets/shortcutconfigbase.ui create mode 100644 muse2/muse/widgets/sigedit.cpp create mode 100644 muse2/muse/widgets/sigedit.h create mode 100644 muse2/muse/widgets/siglabel.cpp create mode 100644 muse2/muse/widgets/siglabel.h create mode 100644 muse2/muse/widgets/sigscale.cpp create mode 100644 muse2/muse/widgets/sigscale.h create mode 100644 muse2/muse/widgets/slider.cpp create mode 100644 muse2/muse/widgets/slider.h create mode 100644 muse2/muse/widgets/sliderbase.cpp create mode 100644 muse2/muse/widgets/sliderbase.h create mode 100644 muse2/muse/widgets/songinfo.ui create mode 100644 muse2/muse/widgets/spinbox.cpp create mode 100644 muse2/muse/widgets/spinbox.h create mode 100644 muse2/muse/widgets/spinboxFP.cpp create mode 100644 muse2/muse/widgets/spinboxFP.h create mode 100644 muse2/muse/widgets/splitter.cpp create mode 100644 muse2/muse/widgets/splitter.h create mode 100644 muse2/muse/widgets/swidget.cpp create mode 100644 muse2/muse/widgets/swidget.h create mode 100644 muse2/muse/widgets/synthconfigbase.ui create mode 100644 muse2/muse/widgets/synthwizardbase.h create mode 100644 muse2/muse/widgets/tb1.cpp create mode 100644 muse2/muse/widgets/tb1.h create mode 100644 muse2/muse/widgets/tempolabel.cpp create mode 100644 muse2/muse/widgets/tempolabel.h create mode 100644 muse2/muse/widgets/tools.cpp create mode 100644 muse2/muse/widgets/tools.h create mode 100644 muse2/muse/widgets/transformbase.ui create mode 100644 muse2/muse/widgets/transposebase.ui create mode 100644 muse2/muse/widgets/ttoolbar.cpp create mode 100644 muse2/muse/widgets/ttoolbar.h create mode 100644 muse2/muse/widgets/ttoolbutton.cpp create mode 100644 muse2/muse/widgets/ttoolbutton.h create mode 100644 muse2/muse/widgets/utils.cpp create mode 100644 muse2/muse/widgets/utils.h create mode 100644 muse2/muse/widgets/velocity.cpp create mode 100644 muse2/muse/widgets/velocity.h create mode 100644 muse2/muse/widgets/velocitybase.ui create mode 100644 muse2/muse/widgets/view.cpp create mode 100644 muse2/muse/widgets/view.h create mode 100644 muse2/muse/widgets/vscale.cpp create mode 100644 muse2/muse/widgets/vscale.h create mode 100644 muse2/muse/widgets/wtrackinfobase.ui create mode 100644 muse2/muse/widgets/wtscale.cpp create mode 100644 muse2/muse/widgets/wtscale.h create mode 100644 muse2/muse/xml.cpp create mode 100644 muse2/muse/xml.h create mode 100644 muse2/packaging/Makefile.am create mode 100644 muse2/packaging/Makefile.in create mode 100644 muse2/packaging/muse.desktop create mode 100644 muse2/packaging/muse_icon.png create mode 100755 muse2/packaging/muse_mdk.spec create mode 100644 muse2/plugins/Makefile.am create mode 100644 muse2/plugins/Makefile.in create mode 100644 muse2/plugins/doublechorus/Makefile.am create mode 100644 muse2/plugins/doublechorus/Makefile.in create mode 100644 muse2/plugins/doublechorus/doublechorus.cpp create mode 100644 muse2/plugins/doublechorus/doublechorusmodel.cpp create mode 100644 muse2/plugins/doublechorus/doublechorusmodel.h create mode 100644 muse2/plugins/doublechorus/simplechorusmodel.cpp create mode 100644 muse2/plugins/doublechorus/simplechorusmodel.h create mode 100644 muse2/plugins/freeverb/Makefile.am create mode 100644 muse2/plugins/freeverb/Makefile.in create mode 100644 muse2/plugins/freeverb/allpass.h create mode 100644 muse2/plugins/freeverb/comb.h create mode 100644 muse2/plugins/freeverb/denormals.h create mode 100644 muse2/plugins/freeverb/freeverb.cpp create mode 100644 muse2/plugins/freeverb/readme.txt create mode 100644 muse2/plugins/freeverb/revmodel.cpp create mode 100644 muse2/plugins/freeverb/revmodel.h create mode 100644 muse2/plugins/freeverb/tuning.h create mode 100644 muse2/plugins/pandelay/Makefile.am create mode 100644 muse2/plugins/pandelay/Makefile.in create mode 100644 muse2/plugins/pandelay/ladspapandelay.cpp create mode 100644 muse2/plugins/pandelay/ladspapandelay.h create mode 100644 muse2/plugins/pandelay/pandelay.cpp create mode 100644 muse2/plugins/pandelay/pandelaymodel.cpp create mode 100644 muse2/plugins/pandelay/pandelaymodel.h create mode 100644 muse2/plugins/plugins-install.am create mode 100644 muse2/qt4migration.log create mode 100644 muse2/share/Makefile.am create mode 100644 muse2/share/Makefile.in create mode 100644 muse2/share/drummaps/AKAI_SG01v_Bank_dr1.map create mode 100644 muse2/share/drummaps/AKAI_SG01v_Bank_dr2.map create mode 100644 muse2/share/drummaps/KURZWEIL_SP2X_Drum_Map_GM_ReMap.map create mode 100644 muse2/share/drummaps/KURZWEIL_SP2X_Drum_Map_Normal.map create mode 100644 muse2/share/drummaps/Makefile.am create mode 100644 muse2/share/drummaps/Makefile.in create mode 100644 muse2/share/drummaps/addictive_drums.map create mode 100644 muse2/share/drummaps/dx200_drum.map create mode 100644 muse2/share/drummaps/sc88-pc1.map create mode 100644 muse2/share/html/COPYING.html create mode 100644 muse2/share/html/Makefile.am create mode 100644 muse2/share/html/Makefile.in create mode 100644 muse2/share/html/button_bar.jpg create mode 100644 muse2/share/html/getting_started.html create mode 100644 muse2/share/html/index.html create mode 100644 muse2/share/html/installation.html create mode 100644 muse2/share/html/invocation.html create mode 100644 muse2/share/html/left_pane.jpg create mode 100644 muse2/share/html/main_window.jpg create mode 100644 muse2/share/html/main_window_track_info.jpg create mode 100644 muse2/share/html/right_pane.jpg create mode 100644 muse2/share/html/styles.css create mode 100644 muse2/share/html/toc_.txt create mode 100644 muse2/share/html/track_info.jpg create mode 100644 muse2/share/html/window_ref.html create mode 100644 muse2/share/instruments/Access_Virus.idf create mode 100644 muse2/share/instruments/Akai-SG01v.idf create mode 100644 muse2/share/instruments/Alesis-QS-78R.idf create mode 100644 muse2/share/instruments/AlesisQS6.idf create mode 100644 muse2/share/instruments/Emu-4mbgsgmmt-sf.idf create mode 100644 muse2/share/instruments/Hammond_XB-1.idf create mode 100644 muse2/share/instruments/Korg-MS2000R.idf create mode 100644 muse2/share/instruments/Korg-X50.idf create mode 100644 muse2/share/instruments/Korg-X5DR-PresetA.idf create mode 100644 muse2/share/instruments/Korg-X5DR-PresetB.idf create mode 100644 muse2/share/instruments/Kurzweil-SP2X.idf create mode 100644 muse2/share/instruments/MC303.idf create mode 100644 muse2/share/instruments/MC505.idf create mode 100644 muse2/share/instruments/Makefile.am create mode 100644 muse2/share/instruments/Makefile.in create mode 100644 muse2/share/instruments/Roland-E28.idf create mode 100644 muse2/share/instruments/Roland-SCD70.idf create mode 100644 muse2/share/instruments/Roland-XP30.idf create mode 100755 muse2/share/instruments/Roland_FantomXR.idf create mode 100755 muse2/share/instruments/Roland_SRX-02.idf create mode 100755 muse2/share/instruments/Roland_SRX-09.idf create mode 100644 muse2/share/instruments/Waldorf-Q.idf create mode 100644 muse2/share/instruments/Waldorf-microQ-Factory2000.idf create mode 100644 muse2/share/instruments/Waldorf-microQ-Factory2001.idf create mode 100644 muse2/share/instruments/Waldorf-microQ-Phoenix.idf create mode 100644 muse2/share/instruments/Waldorf-microQ.idf create mode 100644 muse2/share/instruments/Waldorf_Microwave-I.idf create mode 100644 muse2/share/instruments/Yamaha-01v.idf create mode 100644 muse2/share/instruments/Yamaha-Motif-Rack.idf create mode 100644 muse2/share/instruments/Yamaha-Motif.idf create mode 100644 muse2/share/instruments/Yamaha-P100.idf create mode 100644 muse2/share/instruments/Yamaha-P50m.idf create mode 100755 muse2/share/instruments/Yamaha-PSR275.idf create mode 100644 muse2/share/instruments/Yamaha-PSR530.idf create mode 100644 muse2/share/instruments/Yamaha-S90.idf create mode 100644 muse2/share/instruments/ZynAdd-1_4.idf create mode 100644 muse2/share/instruments/emuproteus2000.idf create mode 100644 muse2/share/instruments/gm.idf create mode 100644 muse2/share/instruments/gs.idf create mode 100644 muse2/share/instruments/ns5r.idf create mode 100644 muse2/share/instruments/xg.idf create mode 100644 muse2/share/locale/Makefile.am create mode 100644 muse2/share/locale/Makefile.in create mode 100644 muse2/share/locale/muse_de.qm create mode 100644 muse2/share/locale/muse_de.ts create mode 100644 muse2/share/locale/muse_es.qm create mode 100644 muse2/share/locale/muse_es.ts create mode 100644 muse2/share/locale/muse_fr.qm create mode 100644 muse2/share/locale/muse_fr.ts create mode 100644 muse2/share/locale/muse_pl.qm create mode 100644 muse2/share/locale/muse_pl.ts create mode 100644 muse2/share/locale/muse_ru.qm create mode 100644 muse2/share/locale/muse_ru.ts create mode 100644 muse2/share/locale/muse_sv_SE.qm create mode 100644 muse2/share/locale/muse_sv_SE.ts create mode 100644 muse2/share/plugins/1050.ui create mode 100644 muse2/share/plugins/2142.ui create mode 100644 muse2/share/plugins/Makefile.am create mode 100644 muse2/share/plugins/Makefile.in create mode 100644 muse2/share/pybridge/Makefile.am create mode 100644 muse2/share/pybridge/Makefile.in create mode 100644 muse2/share/pybridge/Pyro_NS_URI create mode 100644 muse2/share/pybridge/examples/addpartexample.py create mode 100644 muse2/share/pybridge/examples/addtrack.py create mode 100644 muse2/share/pybridge/examples/ctrlexample.py create mode 100644 muse2/share/pybridge/examples/effecttoggle.py create mode 100644 muse2/share/pybridge/examples/mute.py create mode 100644 muse2/share/pybridge/examples/repeatpart.py create mode 100644 muse2/share/pybridge/examples/setpositionexample.py create mode 100644 muse2/share/pybridge/examples/tempoexample.py create mode 100644 muse2/share/pybridge/examples/trackparamchangeexample.py create mode 100644 muse2/share/pybridge/musepclient.py create mode 100644 muse2/share/pybridge/museplauncher.py create mode 100644 muse2/share/pybridge/parter/main.py create mode 100644 muse2/share/pybridge/parter/parter.py create mode 100644 muse2/share/pybridge/robert.py create mode 100755 muse2/share/scripts/ConstantLength create mode 100755 muse2/share/scripts/DoNothing create mode 100755 muse2/share/scripts/DoubleSpeed create mode 100644 muse2/share/scripts/Makefile.am create mode 100644 muse2/share/scripts/Makefile.in create mode 100644 muse2/share/scripts/README.txt create mode 100755 muse2/share/scripts/RemoveShortEvents create mode 100755 muse2/share/scripts/SwingQuantize1 create mode 100644 muse2/share/splash.png create mode 100644 muse2/share/templates/Makefile.am create mode 100644 muse2/share/templates/Makefile.in create mode 100644 muse2/share/templates/audio.med create mode 100644 muse2/share/templates/default.med create mode 100644 muse2/share/templates/midiGM.med create mode 100644 muse2/share/templates/monorecord.med create mode 100644 muse2/share/templates/synti.med create mode 100644 muse2/share/wallpapers/Makefile.am create mode 100644 muse2/share/wallpapers/Makefile.in create mode 100644 muse2/share/wallpapers/gray.gif create mode 100644 muse2/share/wallpapers/gray_rock.gif create mode 100644 muse2/share/wallpapers/gray_stucco.gif create mode 100644 muse2/share/wallpapers/paper1.jpg create mode 100644 muse2/share/wallpapers/stone1.gif create mode 100644 muse2/synti/Makefile.am create mode 100644 muse2/synti/Makefile.in create mode 100644 muse2/synti/deicsonze/.deps/deicsonze.Plo create mode 100644 muse2/synti/deicsonze/.deps/deicsonzegui.Plo create mode 100644 muse2/synti/deicsonze/.deps/deicsonzegui.Tpo create mode 100644 muse2/synti/deicsonze/.deps/moc_deicsonzegui.Plo create mode 100644 muse2/synti/deicsonze/ARCH_ALIN create mode 100644 muse2/synti/deicsonze/Makefile create mode 100644 muse2/synti/deicsonze/Makefile.am create mode 100644 muse2/synti/deicsonze/Makefile.in create mode 100644 muse2/synti/deicsonze/README create mode 100644 muse2/synti/deicsonze/TODO create mode 100644 muse2/synti/deicsonze/deicsonze.cpp create mode 100644 muse2/synti/deicsonze/deicsonze.h create mode 100644 muse2/synti/deicsonze/deicsonzegui.cpp create mode 100644 muse2/synti/deicsonze/deicsonzegui.h create mode 100644 muse2/synti/deicsonze/deicsonzeguibase.h create mode 100644 muse2/synti/deicsonze/deicsonzeguibase.ui create mode 100644 muse2/synti/deicsonze/moc_deicsonzegui.cpp create mode 100644 muse2/synti/deicsonze/newpreset.h create mode 100644 muse2/synti/deicsonze/newpreset.ui create mode 100644 muse2/synti/deicsonze2/.deps/deicsonze.Plo create mode 100644 muse2/synti/deicsonze2/.deps/deicsonzefilter.Plo create mode 100644 muse2/synti/deicsonze2/.deps/deicsonzegui.Plo create mode 100644 muse2/synti/deicsonze2/.deps/deicsonzeplugin.Plo create mode 100644 muse2/synti/deicsonze2/.deps/deicsonzepreset.Plo create mode 100644 muse2/synti/deicsonze2/.deps/moc_deicsonzegui.Plo create mode 100644 muse2/synti/deicsonze2/ARCH_ALIN create mode 100644 muse2/synti/deicsonze2/CMakeLists.txt create mode 100644 muse2/synti/deicsonze2/Makefile create mode 100644 muse2/synti/deicsonze2/Makefile.am create mode 100644 muse2/synti/deicsonze2/Makefile.in create mode 100644 muse2/synti/deicsonze2/README create mode 100644 muse2/synti/deicsonze2/SutulaBank.dei create mode 100644 muse2/synti/deicsonze2/TODO create mode 100644 muse2/synti/deicsonze2/deicsonze.cpp create mode 100644 muse2/synti/deicsonze2/deicsonze.h create mode 100644 muse2/synti/deicsonze2/deicsonzefilter.cpp create mode 100644 muse2/synti/deicsonze2/deicsonzefilter.h create mode 100644 muse2/synti/deicsonze2/deicsonzegui.cpp create mode 100644 muse2/synti/deicsonze2/deicsonzegui.h create mode 100644 muse2/synti/deicsonze2/deicsonzegui.ui create mode 100644 muse2/synti/deicsonze2/deicsonzeguibase.h create mode 100644 muse2/synti/deicsonze2/deicsonzeplugin.cpp create mode 100644 muse2/synti/deicsonze2/deicsonzeplugin.h create mode 100644 muse2/synti/deicsonze2/deicsonzepreset.cpp create mode 100644 muse2/synti/deicsonze2/deicsonzepreset.h create mode 100644 muse2/synti/deicsonze2/pics/SHold.fig create mode 100644 muse2/synti/deicsonze2/pics/SHold.png create mode 100644 muse2/synti/deicsonze2/pics/algo1.fig create mode 100644 muse2/synti/deicsonze2/pics/algo1.png create mode 100644 muse2/synti/deicsonze2/pics/algo2.fig create mode 100644 muse2/synti/deicsonze2/pics/algo2.png create mode 100644 muse2/synti/deicsonze2/pics/algo3.fig create mode 100644 muse2/synti/deicsonze2/pics/algo3.png create mode 100644 muse2/synti/deicsonze2/pics/algo4.fig create mode 100644 muse2/synti/deicsonze2/pics/algo4.png create mode 100644 muse2/synti/deicsonze2/pics/algo5.fig create mode 100644 muse2/synti/deicsonze2/pics/algo5.png create mode 100644 muse2/synti/deicsonze2/pics/algo6.fig create mode 100644 muse2/synti/deicsonze2/pics/algo6.png create mode 100644 muse2/synti/deicsonze2/pics/algo7.fig create mode 100644 muse2/synti/deicsonze2/pics/algo7.png create mode 100644 muse2/synti/deicsonze2/pics/algo8.fig create mode 100644 muse2/synti/deicsonze2/pics/algo8.png create mode 100644 muse2/synti/deicsonze2/pics/sawUp.fig create mode 100644 muse2/synti/deicsonze2/pics/sawUp.png create mode 100644 muse2/synti/deicsonze2/pics/square.fig create mode 100644 muse2/synti/deicsonze2/pics/square.png create mode 100644 muse2/synti/deicsonze2/pics/triangl.fig create mode 100644 muse2/synti/deicsonze2/pics/triangl.png create mode 100644 muse2/synti/deicsonze2/pics/wave1.fig create mode 100644 muse2/synti/deicsonze2/pics/wave1.gnuplot create mode 100644 muse2/synti/deicsonze2/pics/wave1.png create mode 100644 muse2/synti/deicsonze2/pics/wave2.fig create mode 100644 muse2/synti/deicsonze2/pics/wave2.gnuplot create mode 100644 muse2/synti/deicsonze2/pics/wave2.png create mode 100644 muse2/synti/deicsonze2/pics/wave3.fig create mode 100644 muse2/synti/deicsonze2/pics/wave3.gnuplot create mode 100644 muse2/synti/deicsonze2/pics/wave3.png create mode 100644 muse2/synti/deicsonze2/pics/wave4.fig create mode 100644 muse2/synti/deicsonze2/pics/wave4.gnuplot create mode 100644 muse2/synti/deicsonze2/pics/wave4.png create mode 100644 muse2/synti/deicsonze2/pics/wave5.fig create mode 100644 muse2/synti/deicsonze2/pics/wave5.gnuplot create mode 100644 muse2/synti/deicsonze2/pics/wave5.png create mode 100644 muse2/synti/deicsonze2/pics/wave6.fig create mode 100644 muse2/synti/deicsonze2/pics/wave6.gnuplot create mode 100644 muse2/synti/deicsonze2/pics/wave6.png create mode 100644 muse2/synti/deicsonze2/pics/wave7.fig create mode 100644 muse2/synti/deicsonze2/pics/wave7.gnuplot create mode 100644 muse2/synti/deicsonze2/pics/wave7.png create mode 100644 muse2/synti/deicsonze2/pics/wave8.fig create mode 100644 muse2/synti/deicsonze2/pics/wave8.gnuplot create mode 100644 muse2/synti/deicsonze2/pics/wave8.png create mode 100644 muse2/synti/fluid/Makefile.am create mode 100644 muse2/synti/fluid/Makefile.in create mode 100644 muse2/synti/fluid/fluid.cpp create mode 100644 muse2/synti/fluid/fluid.h create mode 100644 muse2/synti/fluid/fluidgui.cpp create mode 100644 muse2/synti/fluid/fluidgui.h create mode 100644 muse2/synti/fluid/fluidguibase.ui create mode 100644 muse2/synti/fluidsynth/Makefile.am create mode 100644 muse2/synti/fluidsynth/Makefile.in create mode 100644 muse2/synti/fluidsynth/README.txt create mode 100644 muse2/synti/fluidsynth/TODO create mode 100644 muse2/synti/fluidsynth/fluidsynthgui.cpp create mode 100644 muse2/synti/fluidsynth/fluidsynthgui.h create mode 100644 muse2/synti/fluidsynth/fluidsynthguibase.ui create mode 100644 muse2/synti/fluidsynth/fluidsynti.cpp create mode 100644 muse2/synti/fluidsynth/fluidsynti.h create mode 100644 muse2/synti/libsynti/Makefile.am create mode 100644 muse2/synti/libsynti/Makefile.in create mode 100644 muse2/synti/libsynti/evdata.h create mode 100644 muse2/synti/libsynti/gui.cpp create mode 100644 muse2/synti/libsynti/gui.h create mode 100644 muse2/synti/libsynti/mess.cpp create mode 100644 muse2/synti/libsynti/mess.h create mode 100644 muse2/synti/libsynti/mono.cpp create mode 100644 muse2/synti/libsynti/mono.h create mode 100644 muse2/synti/libsynti/mpevent.cpp create mode 100644 muse2/synti/libsynti/mpevent.h create mode 100644 muse2/synti/libsynti/poly.cpp create mode 100644 muse2/synti/libsynti/poly.h create mode 100644 muse2/synti/organ/Makefile.am create mode 100644 muse2/synti/organ/Makefile.in create mode 100644 muse2/synti/organ/fdialogbuttons.ui create mode 100644 muse2/synti/organ/organ.cpp create mode 100644 muse2/synti/organ/organ.h create mode 100644 muse2/synti/organ/organgui.cpp create mode 100644 muse2/synti/organ/organgui.h create mode 100644 muse2/synti/organ/organguibase.ui create mode 100644 muse2/synti/s1/Makefile.am create mode 100644 muse2/synti/s1/Makefile.in create mode 100644 muse2/synti/s1/s1.cpp create mode 100644 muse2/synti/simpledrums/COPYING create mode 100644 muse2/synti/simpledrums/Makefile.am create mode 100644 muse2/synti/simpledrums/Makefile.in create mode 100644 muse2/synti/simpledrums/README create mode 100644 muse2/synti/simpledrums/ReleaseNotes.txt create mode 100644 muse2/synti/simpledrums/common.h create mode 100644 muse2/synti/simpledrums/simpledrums.cpp create mode 100644 muse2/synti/simpledrums/simpledrums.h create mode 100644 muse2/synti/simpledrums/simpledrumsgui.cpp create mode 100644 muse2/synti/simpledrums/simpledrumsgui.h create mode 100644 muse2/synti/simpledrums/simpledrumsguibase.ui create mode 100644 muse2/synti/simpledrums/ssplugin.cpp create mode 100644 muse2/synti/simpledrums/ssplugin.h create mode 100644 muse2/synti/simpledrums/sspluginchooserbase.ui create mode 100644 muse2/synti/simpledrums/ssplugingui.cpp create mode 100644 muse2/synti/simpledrums/ssplugingui.h create mode 100644 muse2/synti/synti-install.am create mode 100644 muse2/synti/vam/COPYING create mode 100644 muse2/synti/vam/ChangeLog create mode 100644 muse2/synti/vam/Makefile.am create mode 100644 muse2/synti/vam/Makefile.in create mode 100644 muse2/synti/vam/README create mode 100644 muse2/synti/vam/TODO create mode 100644 muse2/synti/vam/vam.cpp create mode 100644 muse2/synti/vam/vam.h create mode 100644 muse2/synti/vam/vamgui.cpp create mode 100644 muse2/synti/vam/vamgui.h create mode 100644 muse2/synti/vam/vamguibase.ui create mode 100644 muse2/test.med create mode 100644 muse2/testproj.med create mode 100644 muse2/utils/Makefile.am create mode 100644 muse2/utils/Makefile.in create mode 100755 muse2/utils/muse-find-unused-wavs create mode 100755 muse2/utils/muse-song-convert.py create mode 100644 muse2/xpm/Makefile.am create mode 100644 muse2/xpm/Makefile.in create mode 100644 muse2/xpm/addtrack_addmiditrack.xpm create mode 100644 muse2/xpm/addtrack_audiogroup.xpm create mode 100644 muse2/xpm/addtrack_audioinput.xpm create mode 100644 muse2/xpm/addtrack_audiooutput.xpm create mode 100644 muse2/xpm/addtrack_auxsend.xpm create mode 100644 muse2/xpm/addtrack_drumtrack.xpm create mode 100644 muse2/xpm/addtrack_wavetrack.xpm create mode 100644 muse2/xpm/audio_bounce_to_file.xpm create mode 100644 muse2/xpm/audio_bounce_to_track.xpm create mode 100644 muse2/xpm/audio_restartaudio.xpm create mode 100644 muse2/xpm/automation_clear_data.xpm create mode 100644 muse2/xpm/automation_mixer.xpm create mode 100644 muse2/xpm/automation_take_snapshot.xpm create mode 100644 muse2/xpm/back.xpm create mode 100644 muse2/xpm/blacksqcheck.xpm create mode 100644 muse2/xpm/blacksquare.xpm create mode 100644 muse2/xpm/bluedot.xpm create mode 100644 muse2/xpm/bold.xpm create mode 100644 muse2/xpm/bouncetofile.xpm create mode 100644 muse2/xpm/buttondown.xpm create mode 100644 muse2/xpm/cafter.xpm create mode 100644 muse2/xpm/cliplistS.xpm create mode 100644 muse2/xpm/cmark.xpm create mode 100644 muse2/xpm/configure.xpm create mode 100644 muse2/xpm/context_help.xpm create mode 100644 muse2/xpm/ctrl.xpm create mode 100644 muse2/xpm/cut.xpm create mode 100644 muse2/xpm/darkgreendot.xpm create mode 100644 muse2/xpm/darkreddot.xpm create mode 100644 muse2/xpm/darkredled.xpm create mode 100644 muse2/xpm/delete.xpm create mode 100644 muse2/xpm/dot.xpm create mode 100644 muse2/xpm/dot1.xpm create mode 100644 muse2/xpm/doth.xpm create mode 100644 muse2/xpm/down.xpm create mode 100644 muse2/xpm/draw.xpm create mode 100644 muse2/xpm/drumS.xpm create mode 100644 muse2/xpm/edit_drumms.xpm create mode 100644 muse2/xpm/edit_list.xpm create mode 100644 muse2/xpm/edit_mastertrack.xpm create mode 100644 muse2/xpm/edit_midi.xpm create mode 100644 muse2/xpm/edit_pianoroll.xpm create mode 100644 muse2/xpm/edit_score.xpm create mode 100644 muse2/xpm/edit_track_add.xpm create mode 100644 muse2/xpm/edit_track_del.xpm create mode 100644 muse2/xpm/edit_wave.xpm create mode 100644 muse2/xpm/editcopy.xpm create mode 100644 muse2/xpm/editcopyS.xpm create mode 100644 muse2/xpm/editcut.xpm create mode 100644 muse2/xpm/editcutS.xpm create mode 100644 muse2/xpm/editmute.xpm create mode 100644 muse2/xpm/editmuteS.xpm create mode 100644 muse2/xpm/editpaste.xpm create mode 100644 muse2/xpm/editpaste2track.xpm create mode 100644 muse2/xpm/editpaste2trackS.xpm create mode 100644 muse2/xpm/editpasteS.xpm create mode 100644 muse2/xpm/editpasteclone.xpm create mode 100644 muse2/xpm/editpasteclone2track.xpm create mode 100644 muse2/xpm/editpasteclone2trackS.xpm create mode 100644 muse2/xpm/editpastecloneS.xpm create mode 100644 muse2/xpm/exit.xpm create mode 100644 muse2/xpm/exit1.xpm create mode 100644 muse2/xpm/exitS.xpm create mode 100644 muse2/xpm/fforward.xpm create mode 100644 muse2/xpm/filenew.xpm create mode 100644 muse2/xpm/filenewS.xpm create mode 100644 muse2/xpm/fileopen.xpm create mode 100644 muse2/xpm/fileopenS.xpm create mode 100644 muse2/xpm/fileprint.xpm create mode 100644 muse2/xpm/fileprintS.xpm create mode 100644 muse2/xpm/filesave.xpm create mode 100644 muse2/xpm/filesaveS.xpm create mode 100644 muse2/xpm/filesaveasS.xpm create mode 100644 muse2/xpm/find.xpm create mode 100644 muse2/xpm/flag.xpm create mode 100644 muse2/xpm/flagS.xpm create mode 100644 muse2/xpm/fluidsynth-logo-124x45.xpm create mode 100644 muse2/xpm/fluidsynth_banner_124x45.xpm create mode 100644 muse2/xpm/forward.xpm create mode 100644 muse2/xpm/frewind.xpm create mode 100644 muse2/xpm/glue.xpm create mode 100644 muse2/xpm/graydot.xpm create mode 100644 muse2/xpm/greendot.xpm create mode 100644 muse2/xpm/gv.xpm create mode 100644 muse2/xpm/home.xpm create mode 100644 muse2/xpm/idea.xpm create mode 100644 muse2/xpm/iiwusynth.xpm create mode 100644 muse2/xpm/initS.xpm create mode 100644 muse2/xpm/inputpluginS.xpm create mode 100644 muse2/xpm/italic.xpm create mode 100644 muse2/xpm/listS.xpm create mode 100644 muse2/xpm/lmark.xpm create mode 100644 muse2/xpm/localoffS.xpm create mode 100644 muse2/xpm/lock.xpm create mode 100644 muse2/xpm/loop.xpm create mode 100644 muse2/xpm/loop1.xpm create mode 100644 muse2/xpm/master.xpm create mode 100644 muse2/xpm/mastertrackS.xpm create mode 100644 muse2/xpm/mastertrack_graphic.xpm create mode 100644 muse2/xpm/mastertrack_list.xpm create mode 100644 muse2/xpm/meta.xpm create mode 100644 muse2/xpm/midi_edit_instrument.xpm create mode 100644 muse2/xpm/midi_init_instr.xpm create mode 100644 muse2/xpm/midi_inputplugins.xpm create mode 100644 muse2/xpm/midi_inputplugins_midi_input_filter.xpm create mode 100644 muse2/xpm/midi_inputplugins_midi_input_transform.xpm create mode 100644 muse2/xpm/midi_inputplugins_random_rhythm_generator.xpm create mode 100644 muse2/xpm/midi_inputplugins_remote_control.xpm create mode 100644 muse2/xpm/midi_inputplugins_transpose.xpm create mode 100644 muse2/xpm/midi_local_off.xpm create mode 100644 muse2/xpm/midi_plugS.xpm create mode 100644 muse2/xpm/midi_reset_instr.xpm create mode 100644 muse2/xpm/midi_transform.xpm create mode 100644 muse2/xpm/midi_transpose.xpm create mode 100644 muse2/xpm/midiin.xpm create mode 100644 muse2/xpm/miditransformS.xpm create mode 100644 muse2/xpm/miditransposeS.xpm create mode 100644 muse2/xpm/mixerS.xpm create mode 100644 muse2/xpm/mixeraudioS.xpm create mode 100644 muse2/xpm/mono.xpm create mode 100644 muse2/xpm/muse_icon.xpm create mode 100644 muse2/xpm/muse_leftside_logo.xpm create mode 100644 muse2/xpm/mustangS.xpm create mode 100644 muse2/xpm/mute.xpm create mode 100644 muse2/xpm/mutebutton_off.xpm create mode 100644 muse2/xpm/mutebutton_on.xpm create mode 100644 muse2/xpm/newmutebutton.xpm create mode 100644 muse2/xpm/note.xpm create mode 100644 muse2/xpm/note1.xpm create mode 100644 muse2/xpm/off.xpm create mode 100644 muse2/xpm/pafter.xpm create mode 100644 muse2/xpm/panic.xpm create mode 100644 muse2/xpm/pencil.xpm create mode 100644 muse2/xpm/piano.xpm create mode 100644 muse2/xpm/pianoS.xpm create mode 100644 muse2/xpm/pitch.xpm create mode 100644 muse2/xpm/play.xpm create mode 100644 muse2/xpm/pointer.xpm create mode 100644 muse2/xpm/punchin.xpm create mode 100644 muse2/xpm/punchin1.xpm create mode 100644 muse2/xpm/punchout.xpm create mode 100644 muse2/xpm/punchout1.xpm create mode 100644 muse2/xpm/quant.xpm create mode 100644 muse2/xpm/rec_echo_off.xpm create mode 100644 muse2/xpm/rec_echo_on.xpm create mode 100644 muse2/xpm/record.xpm create mode 100644 muse2/xpm/record1.xpm create mode 100644 muse2/xpm/record_off.xpm create mode 100644 muse2/xpm/record_on.xpm create mode 100644 muse2/xpm/recordoffbutton.xpm create mode 100644 muse2/xpm/recordonbutton.xpm create mode 100644 muse2/xpm/reddot.xpm create mode 100644 muse2/xpm/redled.xpm create mode 100644 muse2/xpm/redo.xpm create mode 100644 muse2/xpm/redoS.xpm create mode 100644 muse2/xpm/resetS.xpm create mode 100644 muse2/xpm/rmark.xpm create mode 100644 muse2/xpm/score.xpm create mode 100644 muse2/xpm/scoreS.xpm create mode 100644 muse2/xpm/select.xpm create mode 100644 muse2/xpm/select_all.xpm create mode 100644 muse2/xpm/select_all_parts_on_track.xpm create mode 100644 muse2/xpm/select_deselect_all.xpm create mode 100644 muse2/xpm/select_inside_loop.xpm create mode 100644 muse2/xpm/select_invert_selection.xpm create mode 100644 muse2/xpm/select_outside_loop.xpm create mode 100644 muse2/xpm/settings_appearance_settings.xpm create mode 100644 muse2/xpm/settings_configureshortcuts.xpm create mode 100644 muse2/xpm/settings_follow_song.xpm create mode 100644 muse2/xpm/settings_globalsettings.xpm create mode 100644 muse2/xpm/settings_metronome.xpm create mode 100644 muse2/xpm/settings_midifileexport.xpm create mode 100644 muse2/xpm/settings_midiport_softsynths.xpm create mode 100644 muse2/xpm/settings_midisync.xpm create mode 100644 muse2/xpm/solobutton.xpm create mode 100644 muse2/xpm/solobutton_off.xpm create mode 100644 muse2/xpm/solobutton_off_blksq.xpm create mode 100644 muse2/xpm/solobutton_on.xpm create mode 100644 muse2/xpm/solobutton_on_blksq.xpm create mode 100644 muse2/xpm/speaker.xpm create mode 100644 muse2/xpm/start.xpm create mode 100644 muse2/xpm/steprec.xpm create mode 100644 muse2/xpm/stereo.xpm create mode 100644 muse2/xpm/stick.xpm create mode 100644 muse2/xpm/stop.xpm create mode 100644 muse2/xpm/synth.xpm create mode 100644 muse2/xpm/sysex.xpm create mode 100644 muse2/xpm/toc.xpm create mode 100644 muse2/xpm/track_add.xpm create mode 100644 muse2/xpm/track_comment.xpm create mode 100644 muse2/xpm/track_delete.xpm create mode 100644 muse2/xpm/underlined.xpm create mode 100644 muse2/xpm/undo.xpm create mode 100644 muse2/xpm/undoS.xpm create mode 100644 muse2/xpm/up.xpm create mode 100644 muse2/xpm/view_bigtime_window.xpm create mode 100644 muse2/xpm/view_cliplist.xpm create mode 100644 muse2/xpm/view_marker.xpm create mode 100644 muse2/xpm/view_mixer.xpm create mode 100644 muse2/xpm/view_transport_window.xpm create mode 100644 muse2/xpm/wave.xpm diff --git a/muse2/.muse.prcs_aux b/muse2/.muse.prcs_aux new file mode 100644 index 00000000..1ed7cbea --- /dev/null +++ b/muse2/.muse.prcs_aux @@ -0,0 +1,635 @@ +;; This file is automatically generated, editing may cause PRCS to do +;; REALLY bad things. +(Created-By-Prcs-Version 1 2 15) +(doc/Makefile.am 273 1066299123 x/21_Makefile.a 1.1) +(muse/key.h 1494 1066299123 v/3_key.h 1.1) +(xpm/cmark.xpm 480 1066299123 w/45_cmark.xpm 1.1) +(muse/mplugins/midifilterimpl.h 3205 1066299123 s/27_midifilter 1.1) +(xpm/midiin.xpm 482 1066299123 v/23_midiin.xpm 1.1) +(muse/patchbay/patchbaybase.ui 962 1066299123 u/4_patchbayba 1.1) +(xpm/punchout1.xpm 295 1066299123 x/6_punchout1. 1.1) +(muse/widgets/ttoolbar.h 303 1066299123 p/18_ttoolbar.h 1.1) +(share/html/styles.css 1253 1066299123 n/32_styles.css 1.1) +(muse/widgets/audioconf.h 848 1067279329 p/1_audioconf. 1.2) +(muse/device.h 1198 1066299123 r/40_device.h 1.1) +(muse/master/lmaster.h 1192 1066299123 s/45_lmaster.h 1.1) +(xpm/iiwusynth.xpm 32583 1066299123 x/0_iiwusynth. 1.1) +(xpm/editpasteS.xpm 502 1066299123 v/24_editpasteS 1.1) +(muse/widgets/drange.h 2072 1066299123 q/3_drange.h 1.1) +(muse/widgets/gensetbase.ui 18106 1066299123 q/19_gensetbase 1.1) +(muse/track.h 7952 1066299123 t/1_track.h 1.1) +(README.ladspaguis 1185 1066299123 l/49_README.lad 1.1) +(muse/widgets/vscale.cpp 711 1066299123 q/7_vscale.cpp 1.1) +(muse/instruments/editinstrument.cpp 2554 1066299123 r/36_editinstru 1.1) +(muse/widgets/appearancebase.h 3596 1067279329 q/45_appearance 1.2) +(muse/widgets/view.cpp 12465 1066299123 o/17_view.cpp 1.1) +(muse/driver/alsamidi.h 1200 1067279329 t/13_alsamidi.h 1.3) +(README 3542 1066299123 l/43_README 1.1) +(xpm/fileopenS.xpm 486 1066299123 w/46_fileopenS. 1.1) +(xpm/filenew.xpm 3437 1066299123 w/38_filenew.xp 1.1) +(muse/mixer/amixer.cpp 30778 1066299123 u/40_amixer.cpp 1.1) +(muse/TODO 1818 1067279329 x/45_TODO 1.2) +(muse/mtc.h 1412 1066299123 u/29_mtc.h 1.1) +(xpm/undoS.xpm 467 1066299123 w/13_undoS.xpm 1.1) +(muse/audioprefetch.cpp 4567 1066299123 u/22_audioprefe 1.1) +(muse/midiedit/quantconfig.h 706 1066299123 t/35_quantconfi 1.1) +(muse/audio.h 6876 1067279329 r/15_audio.h 1.2) +(muse/widgets/musewidgetsplug.cpp 11764 1066299123 q/33_musewidget 1.1) +(muse/icons.cpp 9264 1066299123 r/41_icons.cpp 1.1) +(muse/widgets/pitchedit.cpp 1145 1066299123 r/1_pitchedit. 1.1) +(muse/waveedit/waveedit.h 1571 1066299123 s/32_waveedit.h 1.1) +(muse/midieditor.h 1990 1066299123 u/15_midieditor 1.1) +(share/html/toc_.txt 483 1066299123 n/36_toc_.txt 1.1) +(muse/midiedit/quantconfig.cpp 2133 1066299123 t/36_quantconfi 1.1) +(xpm/pianoS.xpm 423 1066299123 v/44_pianoS.xpm 1.1) +(xpm/delete.xpm 527 1066299123 v/43_delete.xpm 1.1) +(muse/mpevent.cpp 3183 1067279329 t/49_mpevent.cp 1.3) +(xpm/find.xpm 647 1066299123 w/31_find.xpm 1.1) +(muse/widgets/intlabel.h 1141 1066299123 o/36_intlabel.h 1.1) +(muse/widgets/bigtime.h 923 1066299123 q/22_bigtime.h 1.1) +(muse/widgets/synthconfigbase.h 1278 1067279329 q/16_synthconfi 1.2) +(plugins/freeverb/revmodel.cpp 6203 1066299123 m/16_revmodel.c 1.1) +(muse/widgets/swidget.cpp 536 1066299123 r/8_swidget.cp 1.1) +(muse/widgets/spinboxFP.h 1000 1066299123 p/3_spinboxFP. 1.1) +(muse/widgets/pitchedit.h 784 1066299123 q/43_pitchedit. 1.1) +(SECURITY 9122 1066299123 l/45_SECURITY 1.1) +(muse/widgets/gatetime.h 887 1066299123 q/40_gatetime.h 1.1) +(m4/alsa.m4 4397 1066299123 x/23_alsa.m4 1.1) +(muse/mplugins/midifilter.ui 35725 1066299123 s/11_midifilter 1.1) +(share/html/index.html 1318 1066299123 n/40_index.html 1.1) +(muse/mixer/panknob.h 694 1066299123 u/38_panknob.h 1.1) +(muse/muse.log 49598 1066299123 u/1_muse.log 1.1) +(muse/widgets/posedit.cpp 25081 1066299123 o/43_posedit.cp 1.1) +(xpm/editmuteS.xpm 456 1066299123 v/22_editmuteS. 1.1) +(muse/song.h 13368 1067279329 r/49_song.h 1.2) +(muse/audio.cpp 21654 1067279329 u/9_audio.cpp 1.3) +(muse/marker/markerview.cpp 13611 1066299123 s/50_markerview 1.1) +(plugins/freeverb/freeverb.cpp 4635 1066299123 m/14_freeverb.c 1.1) +(share/plugins/1050.ui 7059 1066299123 n/0_1050.ui 1.1) +(muse/tempo.h 2528 1066299123 t/51_tempo.h 1.1) +(xpm/rmark.xpm 480 1066299123 v/31_rmark.xpm 1.1) +(grepmidi/grepmidi.cpp 11122 1066299123 m/6_grepmidi.c 1.1) +(muse/ctrl/ctrlpanel.cpp 5038 1066299123 v/19_ctrlpanel. 1.1) +(demos/Makefile.am 23 1066299123 n/45_Makefile.a 1.1) +(share/html/window_ref.html 5372 1066299123 n/41_window_ref 1.1) +(lib/synthi/Makefile.am 552 1066299123 x/18_Makefile.a 1.1) +(muse/widgets/ctrlcombo.cpp 2921 1066299123 o/38_ctrlcombo. 1.1) +(muse/widgets/fdialogbuttons.ui 17795 1066299123 q/26_fdialogbut 1.1) +(muse/track.cpp 14088 1066299123 o/6_track.cpp 1.1) +(muse/widgets/scldraw.cpp 20724 1066299123 q/21_scldraw.cp 1.1) +(muse/driver/midiserial.h 2976 1066299123 t/9_midiserial 1.1) +(muse/widgets/mktest 152 1066299123 p/23_mktest 1.1) +(xpm/forward.xpm 559 1066299123 w/23_forward.xp 1.1) +(muse/driver/jackaudio.h 1538 1067279329 t/21_jackaudio. 1.2) +(muse/widgets/spinboxFP.cpp 2265 1066299123 o/31_spinboxFP. 1.1) +(synti/vam/fdialogbuttons.h 1108 1066299123 m/43_fdialogbut 1.1) +(muse/widgets/mixdowndialogbase.ui 7951 1066299123 r/6_mixdowndia 1.1) +(xpm/flag.xpm 672 1066299123 w/6_flag.xpm 1.1) +(muse/cliplist/cliplist.h 1121 1066299123 o/2_cliplist.h 1.1) +(synti/s1/s1.cpp 7307 1066299123 m/50_s1.cpp 1.1) +(muse/widgets/comboQuant.h 764 1066299123 q/39_comboQuant 1.1) +(muse/widgets/sliderbase.h 2580 1066299123 o/19_sliderbase 1.1) +(muse/globals.h 3964 1067279329 r/16_globals.h 1.2) +(muse/widgets/commentbase.h 991 1067279329 r/10_commentbas 1.2) +(muse/widgets/filedialog.cpp 12014 1066299123 o/13_filedialog 1.1) +(xpm/filesave.xpm 3518 1066299123 w/37_filesave.x 1.1) +(muse/app.cpp 89316 1067279329 r/26_app.cpp 1.2) +(muse/widgets/ctrlcombo.h 486 1066299123 q/38_ctrlcombo. 1.1) +(xpm/toc.xpm 537 1066299123 w/20_toc.xpm 1.1) +(muse/arranger/pcanvas.cpp 46470 1066299123 r/24_pcanvas.cp 1.1) +(xpm/italic.xpm 253 1066299123 v/26_italic.xpm 1.1) +(muse/synthconfig.cpp 5325 1066299123 u/11_synthconfi 1.1) +(muse/driver/midirawin.h 1176 1066299123 t/10_midirawin. 1.1) +(muse/widgets/utils.h 641 1066299123 o/45_utils.h 1.1) +(muse/mixer/volslider.h 735 1066299123 u/34_volslider. 1.1) +(muse/master/tscale.h 795 1066299123 s/46_tscale.h 1.1) +(muse/cobject.h 1713 1066299123 t/3_cobject.h 1.1) +(synti/s1/Makefile.am 192 1066299123 m/51_Makefile.a 1.1) +(muse/song.cpp 39275 1067279329 v/5_song.cpp 1.2) +(muse/midiedit/dlist.cpp 15115 1066299123 t/32_dlist.cpp 1.1) +(muse/waveedit/Makefile.am 259 1066299123 s/29_Makefile.a 1.1) +(xpm/recordoffbutton.xpm 4021 1066299123 v/37_recordoffb 1.1) +(muse/midiedit/drumedit.cpp 27725 1066299123 t/40_drumedit.c 1.1) +(synti/fluid/fluidgui.cpp 3846 1066299123 m/30_fluidgui.c 1.1) +(xpm/play.xpm 308 1066299123 v/49_play.xpm 1.1) +(muse/liste/editctrlbase.ui 9574 1066299123 v/2_editctrlba 1.1) +(muse/thread.cpp 9706 1067279329 o/3_thread.cpp 1.2) +(synti/fluid/Makefile.am 448 1066299123 m/33_Makefile.a 1.1) +(muse/widgets/ttoolbar.cpp 686 1066299123 p/46_ttoolbar.c 1.1) +(muse/widgets/genset.cpp 3074 1066299123 p/22_genset.cpp 1.1) +(xpm/stick.xpm 238 1066299123 v/51_stick.xpm 1.1) +(README.de 3499 1066299123 l/44_README.de 1.1) +(xpm/record1.xpm 379 1066299123 w/26_record1.xp 1.1) +(muse/widgets/editmetadialogbase.h 1491 1067279329 p/7_editmetadi 1.2) +(xpm/recordonbutton.xpm 1539 1066299123 w/5_recordonbu 1.1) +(synti/fluid/fluidgui.h 726 1066299123 m/36_fluidgui.h 1.1) +(muse/evdata.h 1619 1066299123 x/42_evdata.h 1.1) +(muse/widgets/ctrlcombo.cw 981 1066299123 o/34_ctrlcombo. 1.1) +(muse/widgets/scldiv.h 1792 1066299123 q/2_scldiv.h 1.1) +(muse/midiedit/drumedit.h 3237 1066299123 t/28_drumedit.h 1.1) +(xpm/loop.xpm 636 1066299123 v/35_loop.xpm 1.1) +(muse/widgets/midisync.ui 27725 1066299123 q/5_midisync.u 1.1) +(synti/organ/Makefile.am 673 1066299123 m/24_Makefile.a 1.1) +(muse/widgets/editmetadialogbase.ui 12117 1066299123 q/11_editmetadi 1.1) +(synti/organ/fdialogbuttons.h 1108 1067279329 m/25_fdialogbut 1.2) +(muse/master/tscale.cpp 1533 1066299123 s/41_tscale.cpp 1.1) +(m4/docbook.m4 2575 1066299123 x/24_docbook.m4 1.1) +(xpm/redo.xpm 1634 1066299123 v/27_redo.xpm 1.1) +(muse/debug.h 1350 1066299123 v/12_debug.h 1.1) +(muse/midiedit/pianoroll.h 3107 1066299123 t/43_pianoroll. 1.1) +(share/locale/muse_es.qm 75220 1066299123 n/20_muse_es.qm 1.1) +(muse/value.cpp 1261 1066299123 r/51_value.cpp 1.1) +(share/Makefile.am 67 1066299123 n/23_Makefile.a 1.1) +(muse/widgets/knob.h 1460 1066299123 p/26_knob.h 1.1) +(muse/midiedit/drummap.h 1197 1066299123 t/27_drummap.h 1.1) +(muse/mplugins/random.cpp 13630 1066299123 s/28_random.cpp 1.1) +(muse/midiseq.h 2200 1066299123 x/34_midiseq.h 1.1) +(muse/event.cpp 1240 1066299123 t/44_event.cpp 1.1) +(muse/widgets/sigscale.h 1146 1066299123 o/50_sigscale.h 1.1) +(xpm/filesaveS.xpm 516 1066299123 v/28_filesaveS. 1.1) +(muse/widgets/gatetimebase.h 1420 1067279329 q/48_gatetimeba 1.2) +(muse/arranger/tlist.cpp 35397 1066299123 r/19_tlist.cpp 1.1) +(m4/aclocal-include.m4 372 1066299123 x/26_aclocal-in 1.1) +(muse/liste/editctrlbase.h 1330 1067279329 u/49_editctrlba 1.2) +(muse/midiedit/ecanvas.h 1935 1066299123 t/34_ecanvas.h 1.1) +(muse/arranger/arranger.cpp 39540 1067279329 r/25_arranger.c 1.2) +(share/plugins/Makefile.am 110 1066299123 n/1_Makefile.a 1.1) +(xpm/frewind.xpm 372 1066299123 v/32_frewind.xp 1.1) +(muse/mixer/audionodebutton.h 794 1066299123 u/44_audionodeb 1.1) +(configure.ac 9865 1066299123 m/1_configure. 1.1) +(share/locale/muse_ru.ts 171552 1066299123 n/15_muse_ru.ts 1.1) +(Doxyfile 5894 1066299123 x/28_Doxyfile 1.1) +(synti/vam/COPYING 17983 1066299123 m/38_COPYING 1.1) +(muse/marker/Makefile.am 233 1066299123 s/48_Makefile.a 1.1) +(muse/mixer/panknob.cpp 898 1066299123 u/39_panknob.cp 1.1) +(xpm/cafter.xpm 661 1066299123 w/4_cafter.xpm 1.1) +(muse/app.h 7321 1067279329 v/4_app.h 1.2) +(muse/widgets/doublelabel.cpp 3441 1066299123 p/39_doublelabe 1.1) +(muse/mplugins/mittranspose.h 1647 1066299123 s/24_mittranspo 1.1) +(synti/organ/organgui.h 1777 1066299123 m/26_organgui.h 1.1) +(share/instruments/gs.idf 11055 1066299123 x/30_gs.idf 1.1) +(muse/ctrl/ctrledit.h 1300 1066299123 v/16_ctrledit.h 1.1) +(muse/widgets/nentry.cpp 10511 1066299123 p/8_nentry.cpp 1.1) +(muse/widgets/midirawbase.h 1792 1067279329 q/4_midirawbas 1.2) +(xpm/stop.xpm 308 1066299123 v/33_stop.xpm 1.1) +(muse/driver/midirawdev.h 1670 1066305474 t/11_midirawdev 1.2) +(muse/driver/alsamidi.cpp 22045 1067279329 t/12_alsamidi.c 1.3) +(m4/Makefile.am 29 1066299123 x/25_Makefile.a 1.1) +(muse/undo.cpp 12199 1066299123 v/11_undo.cpp 1.1) +(muse/globaldefs.h 471 1066299123 u/18_globaldefs 1.1) +(muse/instruments/editinstrumentbase.h 3068 1067279329 r/39_editinstru 1.2) +(muse/plugin.cpp 39878 1066299123 x/43_plugin.cpp 1.1) +(muse/widgets/transformbase.ui 45821 1066299123 p/10_transformb 1.1) +(muse/midiedit/cmd.h 583 1066299123 t/42_cmd.h 1.1) +(doc/muse.sgm 14762 1066299123 x/22_muse.sgm 1.1) +(xpm/mute.xpm 391 1066299123 w/29_mute.xpm 1.1) +(muse/marker/markerview.h 1926 1066299123 s/51_markerview 1.1) +(muse/mplugins/midifilterimpl.cpp 5278 1066299123 s/7_midifilter 1.1) +(muse/widgets/sliderbase.cpp 15116 1066299123 p/21_sliderbase 1.1) +(muse/widgets/action.h 775 1066299123 p/15_action.h 1.1) +(muse/widgets/metronome.h 866 1066299123 q/14_metronome. 1.1) +(muse/midievent.cpp 5645 1067279329 v/10_midievent. 1.2) +(muse/widgets/slider.h 2686 1066299123 p/13_slider.h 1.1) +(muse/liste/listedit.cpp 21988 1067279329 v/1_listedit.c 1.2) +(muse/widgets/knob.cpp 11241 1066299123 q/51_knob.cpp 1.1) +(plugins/plugins-install.am 33 1066299123 m/18_plugins-in 1.1) +(plugins/freeverb/revmodel.h 2084 1066299123 m/11_revmodel.h 1.1) +(muse/mixer/meter.cpp 3599 1066299123 u/31_meter.cpp 1.1) +(share/locale/muse_fr.ts 168370 1066299123 n/17_muse_fr.ts 1.1) +(muse/widgets/tools.cpp 4542 1066299123 q/28_tools.cpp 1.1) +(muse/widgets/editctrl7dialogbase.ui 8089 1066299123 o/47_editctrl7d 1.1) +(muse/widgets/dimap.cpp 8580 1066299123 o/10_dimap.cpp 1.1) +(lib/plugins/Makefile.am 555 1066299123 x/17_Makefile.a 1.1) +(muse/arranger/arranger.h 4269 1067279329 r/20_arranger.h 1.2) +(xpm/dot.xpm 443 1066299123 x/3_dot.xpm 1.1) +(muse/widgets/synthwizardbase.h 1340 1067279329 x/37_synthwizar 1.2) +(xpm/graydot.xpm 379 1066299123 v/34_graydot.xp 1.1) +(plugins/Makefile.am 85 1066299123 m/17_Makefile.a 1.1) +(muse/mididev.h 2832 1066305474 x/35_mididev.h 1.2) +(muse/widgets/dentry.cpp 5021 1066299123 q/36_dentry.cpp 1.1) +(muse/transport.h 2902 1066299123 r/12_transport. 1.1) +(xpm/editcut.xpm 751 1066299123 w/43_editcut.xp 1.1) +(muse/widgets/synthconfigbase.ui 8988 1066299123 r/7_synthconfi 1.1) +(synti/organ/organ.cpp 19957 1066299123 m/21_organ.cpp 1.1) +(muse/widgets/mittransposebase.h 1111 1067279329 o/24_mittranspo 1.2) +(muse/widgets/wtrackinfobase.ui 5407 1066299123 q/6_wtrackinfo 1.1) +(share/wallpapers/Makefile.am 126 1066299123 n/25_Makefile.a 1.1) +(xpm/home.xpm 541 1066299123 w/25_home.xpm 1.1) +(README.instruments 3326 1066299123 l/51_README.ins 1.1) +(muse/widgets/filedialog.h 2272 1066299123 q/30_filedialog 1.1) +(muse/midiedit/drummap.cpp 21076 1066299123 t/24_drummap.cp 1.1) +(muse/widgets/dimap.h 1569 1066299123 r/0_dimap.h 1.1) +(xpm/master.xpm 224 1066299123 x/13_master.xpm 1.1) +(xpm/filenewS.xpm 531 1066299123 v/38_filenewS.x 1.1) +(xpm/down.xpm 253 1066299123 x/2_down.xpm 1.1) +(share/locale/muse_sv_SE.qm 51900 1066299123 n/13_muse_sv_SE 1.1) +(muse/widgets/velocitybase.ui 8434 1066299123 p/45_velocityba 1.1) +(synti/vam/vamguibase.h 4143 1066299123 m/45_vamguibase 1.1) +(muse/widgets/audioconfbase.h 1358 1067279329 p/16_audioconfb 1.2) +(muse/mixer/dot.xpm 443 1066299123 u/45_dot.xpm 1.1) +(muse/eventlist.cpp 4310 1066299123 u/24_eventlist. 1.1) +(muse/widgets/sigedit.cpp 20088 1066299123 p/29_sigedit.cp 1.1) +(muse/widgets/hitscale.cpp 3315 1066299123 o/20_hitscale.c 1.1) +(muse/widgets/mlabel.h 920 1066299123 o/30_mlabel.h 1.1) +(synti/vam/vam.cpp 19461 1066299123 m/41_vam.cpp 1.1) +(muse/mplugins/rhythmbase.ui 42686 1066299123 s/10_rhythmbase 1.1) +(muse/ctrl/ctrlcanvas.cpp 28582 1066299123 v/13_ctrlcanvas 1.1) +(share/html/installation.html 2122 1066299123 n/42_installati 1.1) +(muse/mplugins/mrconfigbase.ui 7475 1066299123 s/17_mrconfigba 1.1) +(doc/midieditfunctions.png 3903 1066299123 x/20_midieditfu 1.1) +(muse/driver/midiserial.cpp 11658 1066299123 t/18_midiserial 1.1) +(share/html/invocation.html 1568 1066299123 n/30_invocation 1.1) +(xpm/piano.xpm 3435 1066299123 w/39_piano.xpm 1.1) +(muse/widgets/midisync.h 2297 1067279329 q/46_midisync.h 1.2) +(README.shortcuts 3250 1066299123 l/46_README.sho 1.1) +(muse/widgets/mixdowndialog.cpp 3489 1066299123 o/39_mixdowndia 1.1) +(muse/widgets/canvas.cpp 30164 1066299123 o/51_canvas.cpp 1.1) +(muse/event.h 1089 1066299123 t/47_event.h 1.1) +(share/html/getting_started.html 3361 1066299123 n/39_getting_st 1.1) +(share/wallpapers/gray_stucco.gif 20903 1066299123 n/28_gray_stucc 1.1) +(share/drummaps/sc88-pc1.map 6911 1066299123 n/11_sc88-pc1.m 1.1) +(plugins/freeverb/readme.txt 7127 1066299123 m/10_readme.txt 1.1) +(muse/widgets/editsysexdialogbase.ui 10638 1066299123 q/8_editsysexd 1.1) +(muse/midiedit/Makefile.am 563 1066299123 t/31_Makefile.a 1.1) +(muse/widgets/Makefile.am 5932 1066299123 p/35_Makefile.a 1.1) +(share/locale/muse_de.ts 171803 1066299123 n/21_muse_de.ts 1.1) +(muse/midiseq.cpp 15240 1067279329 x/44_midiseq.cp 1.2) +(muse/widgets/sigscale.cpp 3855 1066299123 q/12_sigscale.c 1.1) +(synti/fluid/synth.cpp 14235 1066299123 m/32_synth.cpp 1.1) +(muse/instruments/midictrledit.cpp 14341 1066299123 r/32_midictrled 1.1) +(plugins/freeverb/tuning.h 1911 1066299123 m/9_tuning.h 1.1) +(muse/widgets/mmath.h 1435 1066299123 p/41_mmath.h 1.1) +(xpm/panic.xpm 510 1066299123 w/34_panic.xpm 1.1) +(muse/widgets/metronomebase.h 2038 1067279329 q/29_metronomeb 1.2) +(aclocal.m4 166531 1066299123 m/5_aclocal.m4 1.1) +(muse/widgets/intlabel.cpp 3060 1066299123 p/36_intlabel.c 1.1) +(synti/synti-install.am 31 1066299123 m/20_synti-inst 1.1) +(Makefile.am 586 1066299123 l/50_Makefile.a 1.1) +(muse/patchbay/patchbay.h 263 1066299123 u/5_patchbay.h 1.1) +(muse/cliplist/Makefile.am 215 1066299123 o/1_Makefile.a 1.1) +(xpm/glue.xpm 691 1066299123 w/16_glue.xpm 1.1) +(muse/widgets/sigedit.h 1862 1066299123 o/35_sigedit.h 1.1) +(muse/make.inc 3673 1066299123 u/7_make.inc 1.1) +(muse/conf.h 1128 1066299123 t/23_conf.h 1.1) +(share/instruments/Yamaha-S90.idf 45027 1066299123 n/8_Yamaha-S90 1.1) +(muse/importmidi.cpp 11582 1067279329 x/32_importmidi 1.2) +(xpm/reddot.xpm 277 1066299123 w/32_reddot.xpm 1.1) +(xpm/editcutS.xpm 455 1066299123 w/8_editcutS.x 1.1) +(muse/master/masteredit.cpp 13002 1066299123 s/39_masteredit 1.1) +(muse/audioprefetch.h 1005 1066299123 t/48_audioprefe 1.1) +(muse/driver/jack.cpp 10087 1067279329 t/15_jack.cpp 1.2) +(muse/undo.h 1932 1066299123 r/45_undo.h 1.1) +(muse/widgets/mtrackinfobase.ui 23665 1067279329 q/13_mtrackinfo 1.2) +(muse/sync.cpp 12413 1066299123 s/38_sync.cpp 1.1) +(xpm/doth.xpm 444 1066299123 x/5_doth.xpm 1.1) +(synti/fluid/synth.h 2262 1066299123 m/34_synth.h 1.1) +(muse/instruments/ccontrolbase.h 1982 1067279329 r/30_ccontrolba 1.2) +(muse/help.cpp 1220 1066299123 n/51_help.cpp 1.1) +(plugins/freeverb/Makefile.am 369 1066299123 m/12_Makefile.a 1.1) +(muse/widgets/synthwizardbase.ui 10097 1066299123 x/38_synthwizar 1.1) +(xpm/darkgreendot.xpm 384 1066299123 w/30_darkgreend 1.1) +(xpm/off.xpm 465 1066299123 w/7_off.xpm 1.1) +(share/locale/muse_sv_SE.ts 169707 1066299123 n/12_muse_sv_SE 1.1) +(muse/mixer/mixer.cpp 10690 1066299123 u/32_mixer.cpp 1.1) +(muse/midieditor.cpp 6171 1066299123 s/34_midieditor 1.1) +(xpm/punchout.xpm 523 1066299123 w/33_punchout.x 1.1) +(muse/mplugins/Makefile.am 547 1066299123 s/20_Makefile.a 1.1) +(xpm/editmute.xpm 752 1066299123 w/9_editmute.x 1.1) +(muse/sig.cpp 12854 1066299123 u/14_sig.cpp 1.1) +(share/instruments/Roland-XP30.idf 121905 1066299123 n/4_Roland-XP3 1.1) +(muse/midiedit/piano.h 1264 1066299123 t/26_piano.h 1.1) +(muse/widgets/wtscale.h 1200 1066299123 p/42_wtscale.h 1.1) +(muse/wave.h 4076 1066299123 r/42_wave.h 1.1) +(muse/liste/Makefile.am 275 1066299123 u/51_Makefile.a 1.1) +(muse/appearance.cpp 11094 1066299123 t/50_appearance 1.1) +(share/html/COPYING.html 18292 1066299123 n/34_COPYING.ht 1.1) +(muse/icons.h 2867 1066299123 r/28_icons.h 1.1) +(muse/widgets/header.cpp 1982 1066299123 o/22_header.cpp 1.1) +(muse/midifile.h 2221 1067279329 x/33_midifile.h 1.2) +(m4/qt.m4 5988 1066299123 x/27_qt.m4 1.1) +(muse/driver/alsaaudio.h 1984 1067279329 t/17_alsaaudio. 1.2) +(xpm/editcopy.xpm 1788 1066299123 v/48_editcopy.x 1.1) +(muse/widgets/section.h 414 1066299123 r/9_section.h 1.1) +(muse/mplugins/mrconfigbase.h 1270 1067279329 s/23_mrconfigba 1.2) +(README.CVS 62 1066299123 l/47_README.CVS 1.1) +(share/instruments/Yamaha-P50m.idf 4192 1066299123 n/2_Yamaha-P50 1.1) +(share/drummaps/Makefile.am 101 1066299123 n/10_Makefile.a 1.1) +(muse/widgets/wtrackinfobase.h 1153 1067279329 p/5_wtrackinfo 1.2) +(muse/midiedit/dlist.h 1731 1066299123 t/41_dlist.h 1.1) +(muse/widgets/scldraw.h 2157 1066299123 o/18_scldraw.h 1.1) +(muse/tempo.cpp 11951 1066299123 n/49_tempo.cpp 1.1) +(muse/instruments/minstrument.h 2995 1067279329 r/33_minstrumen 1.2) +(xpm/bold.xpm 251 1066299123 v/39_bold.xpm 1.1) +(xpm/flagS.xpm 245 1066299123 w/51_flagS.xpm 1.1) +(muse/mixer/mixer.h 1565 1066299123 u/37_mixer.h 1.1) +(muse/widgets/citem.cpp 1920 1066299123 p/37_citem.cpp 1.1) +(muse/master/master.h 1729 1066299123 s/43_master.h 1.1) +(muse/widgets/poslabel.cpp 4147 1066299123 q/23_poslabel.c 1.1) +(share/html/left_pane.jpg 24599 1066299123 n/31_left_pane. 1.1) +(xpm/greendot.xpm 444 1066299123 w/21_greendot.x 1.1) +(share/html/right_pane.jpg 34158 1066299123 n/44_right_pane 1.1) +(muse/arranger/pcanvas.h 3584 1066299123 r/17_pcanvas.h 1.1) +(muse/widgets/doublelabel.h 1945 1066299123 o/48_doublelabe 1.1) +(muse/widgets/fontsel.h 921 1066299123 q/47_fontsel.h 1.1) +(muse/widgets/mtscale.h 1237 1066299123 p/4_mtscale.h 1.1) +(xpm/quant.xpm 647 1066299123 x/4_quant.xpm 1.1) +(muse/mplugins/midiitransform.h 2772 1066299123 s/15_midiitrans 1.1) +(muse/widgets/lcombo.h 928 1066299123 q/44_lcombo.h 1.1) +(muse/widgets/transposebase.ui 9369 1066299123 p/2_transposeb 1.1) +(xpm/score.xpm 3435 1066299123 w/15_score.xpm 1.1) +(muse/node.h 7735 1066299123 s/4_node.h 1.1) +(xpm/lock.xpm 346 1066299123 w/1_lock.xpm 1.1) +(muse/mplugins/.cvsignore 28 1066299123 s/9_.cvsignore 1.1) +(muse/mplugins/mrconfig.cpp 1851 1066299123 s/18_mrconfig.c 1.1) +(muse/wave.cpp 22541 1066299123 s/35_wave.cpp 1.1) +(muse/widgets/itransformbase.ui 52342 1066299123 o/21_itransform 1.1) +(muse/midievent.h 2804 1067279329 u/16_midievent. 1.2) +(muse/widgets/scldiv.cpp 16730 1066299123 q/32_scldiv.cpp 1.1) +(muse/widgets/splitter.cpp 2350 1066299123 o/46_splitter.c 1.1) +(muse/midiedit/pianoroll.cpp 31634 1066299123 t/33_pianoroll. 1.1) +(synti/organ/organ.h 741 1066299123 m/22_organ.h 1.1) +(muse/widgets/tempolabel.h 1298 1066299123 o/25_tempolabel 1.1) +(muse/mtc.cpp 3004 1066299123 t/2_mtc.cpp 1.1) +(xpm/fforward.xpm 372 1066299123 w/0_fforward.x 1.1) +(xpm/start.xpm 369 1066299123 v/45_start.xpm 1.1) +(muse/widgets/mittransposebase.ui 3683 1066299123 p/11_mittranspo 1.1) +(share/instruments/AlesisQS6.idf 44373 1066299123 n/9_AlesisQS6. 1.1) +(muse/widgets/velocitybase.h 1420 1067279329 o/16_velocityba 1.2) +(muse/widgets/velocity.cpp 1174 1066299123 o/26_velocity.c 1.1) +(muse/widgets/vscale.h 620 1066299123 q/1_vscale.h 1.1) +(muse/part.h 3574 1066299123 s/3_part.h 1.1) +(muse/widgets/gatetime.cpp 1174 1066299123 q/17_gatetime.c 1.1) +(libtool 151337 1067279329 m/3_libtool 1.2) +(xpm/scoreS.xpm 441 1066299123 v/29_scoreS.xpm 1.1) +(synti/vam/vamgui.cpp 20419 1066299123 m/37_vamgui.cpp 1.1) +(muse/master/Makefile.am 336 1066299123 s/42_Makefile.a 1.1) +(muse/widgets/comboQuant.cpp 1870 1066299123 p/19_comboQuant 1.1) +(muse/mixer/meter.h 949 1066299123 u/41_meter.h 1.1) +(share/locale/Makefile.am 230 1066299123 n/14_Makefile.a 1.1) +(muse/driver/Makefile.am 409 1066299123 t/14_Makefile.a 1.1) +(xpm/up.xpm 251 1066299123 w/3_up.xpm 1.1) +(muse/mplugins/rhythm.cpp 15993 1066299123 s/8_rhythm.cpp 1.1) +(share/instruments/MC303.idf 31145 1066299123 n/5_MC303.idf 1.1) +(muse/givertcap.c 2434 1066299123 s/1_givertcap. 1.1) +(synti/organ/organguibase.h 2625 1067279329 m/29_organguiba 1.2) +(muse/midi.cpp 36744 1067279329 t/45_midi.cpp 1.2) +(xpm/note1.xpm 671 1066299123 w/48_note1.xpm 1.1) +(muse/widgets/metronome.cpp 4024 1066299123 o/33_metronome. 1.1) +(muse/mplugins/mrconfig.h 897 1066299123 s/19_mrconfig.h 1.1) +(xpm/context_help.xpm 771 1066299123 w/49_context_he 1.1) +(muse/mixer/volslider.cpp 1234 1066299123 u/46_volslider. 1.1) +(muse/widgets/canvas.h 3850 1066299123 p/38_canvas.h 1.1) +(xpm/redoS.xpm 467 1066299123 w/19_redoS.xpm 1.1) +(autogen.sh 3103 1066299123 m/0_autogen.sh 1.1) +(muse/mplugins/rhythm.h 4982 1066299123 s/13_rhythm.h 1.1) +(muse/confmport.cpp 23929 1066299123 u/10_confmport. 1.1) +(xpm/configure.xpm 627 1066299123 w/22_configure. 1.1) +(muse/widgets/dentry.h 1746 1066299123 p/12_dentry.h 1.1) +(xpm/meta.xpm 673 1066299123 x/11_meta.xpm 1.1) +(xpm/fileprint.xpm 1789 1066299123 v/47_fileprint. 1.1) +(xpm/darkreddot.xpm 281 1066299123 v/21_darkreddot 1.1) +(muse/ctrl/Makefile.am 299 1066299123 v/17_Makefile.a 1.1) +(muse/widgets/pitchlabel.cpp 2467 1066299123 q/31_pitchlabel 1.1) +(muse/pos.cpp 14430 1067279329 o/5_pos.cpp 1.2) +(share/html/main_window_track_info.jpg 84636 1066299123 n/43_main_windo 1.1) +(muse/transport.cpp 19742 1066299123 u/23_transport. 1.1) +(muse/Makefile.am 3400 1066299123 n/47_Makefile.a 1.1) +(share/html/track_info.jpg 14003 1066299123 n/38_track_info 1.1) +(muse/marker/marker.h 1513 1066299123 s/49_marker.h 1.1) +(muse/widgets/midisyncimpl.cpp 3520 1066299123 q/34_midisyncim 1.1) +(muse/widgets/mtrackinfobase.h 1655 1067279329 o/40_mtrackinfo 1.2) +(xpm/dot1.xpm 444 1066299123 x/10_dot1.xpm 1.1) +(muse/widgets/itransformbase.h 3263 1067279329 p/31_itransform 1.2) +(muse/widgets/swidget.h 775 1066299123 p/32_swidget.h 1.1) +(muse/cobject.cpp 1905 1066299123 s/6_cobject.cp 1.1) +(xpm/editpaste.xpm 4079 1066299123 v/41_editpaste. 1.1) +(synti/vam/fdialogbuttons.ui 17795 1066299123 m/44_fdialogbut 1.1) +(muse/driver/alsaaudio.cpp 22493 1067279329 t/19_alsaaudio. 1.2) +(muse/widgets/splitter.h 705 1066299123 p/28_splitter.h 1.1) +(synti/fluid/fluid.cpp 921 1066299123 m/35_fluid.cpp 1.1) +(muse/liste/editevent.cpp 15574 1066299123 u/48_editevent. 1.1) +(xpm/pencil.xpm 526 1066299123 w/10_pencil.xpm 1.1) +(share/instruments/ns5r.idf 43686 1066299123 n/3_ns5r.idf 1.1) +(muse/midiport.h 2178 1066305474 v/8_midiport.h 1.2) +(muse/widgets/mtscale.cpp 10315 1066299123 p/48_mtscale.cp 1.1) +(plugins/freeverb/comb.h 1431 1066299123 m/13_comb.h 1.1) +(xpm/punchin.xpm 618 1066299123 v/46_punchin.xp 1.1) +(muse/globals.cpp 6008 1067279329 o/4_globals.cp 1.2) +(xpm/newmutebutton.xpm 1823 1066299123 x/15_newmutebut 1.1) +(muse/midictrl.cpp 11794 1067279329 t/6_midictrl.c 1.2) +(synti/vam/TODO 87 1066299123 m/49_TODO 1.1) +(muse/mplugins/random.h 4708 1066299123 s/21_random.h 1.1) +(muse/widgets/appearancebase.ui 50845 1066299123 q/0_appearance 1.1) +(synti/Makefile.am 90 1066299123 m/19_Makefile.a 1.1) +(muse/confmport.h 2178 1066299123 u/8_confmport. 1.1) +(muse/widgets/editnotedialogbase.ui 6831 1066299123 q/42_editnotedi 1.1) +(muse/plugin.h 7878 1066299123 x/31_plugin.h 1.1) +(xpm/lmark.xpm 480 1066299123 w/27_lmark.xpm 1.1) +(muse/widgets/tools.h 1246 1066299123 p/33_tools.h 1.1) +(muse/transpose.cpp 2453 1066299123 u/25_transpose. 1.1) +(NEWS 15 1066299123 l/39_NEWS 1.1) +(muse/midiedit/ecanvas.cpp 6041 1066299123 t/37_ecanvas.cp 1.1) +(muse/mplugins/rhythmbase.h 3206 1067279329 s/25_rhythmbase 1.2) +(muse/midiedit/prcanvas.cpp 38022 1066299123 t/29_prcanvas.c 1.1) +(xpm/gv.xpm 434 1066299123 w/18_gv.xpm 1.1) +(muse/widgets/editctrl7dialogbase.h 1353 1067279329 q/20_editctrl7d 1.2) +(muse/arranger/alayout.h 1576 1066299123 r/18_alayout.h 1.1) +(xpm/pitch.xpm 671 1066299123 v/25_pitch.xpm 1.1) +(muse/widgets/siglabel.h 989 1066299123 p/9_siglabel.h 1.1) +(xpm/fileopen.xpm 4174 1066299123 v/40_fileopen.x 1.1) +(muse/widgets/velocity.h 893 1066299123 p/24_velocity.h 1.1) +(muse/master/masteredit.h 1637 1066299123 s/44_masteredit 1.1) +(muse/driver/midirawin.cpp 6044 1066299123 t/16_midirawin. 1.1) +(xpm/punchin1.xpm 294 1066299123 w/41_punchin1.x 1.1) +(xpm/pointer.xpm 600 1066299123 w/11_pointer.xp 1.1) +(muse/widgets/hitscale.h 1146 1066299123 o/42_hitscale.h 1.1) +(muse/exportmidi.cpp 11445 1066299123 x/40_exportmidi 1.1) +(muse/widgets/noteinfo.cpp 4863 1066299123 p/50_noteinfo.c 1.1) +(muse/widgets/midisyncimpl.h 776 1066299123 p/20_midisyncim 1.1) +(share/locale/muse_ru.qm 34338 1066299123 n/16_muse_ru.qm 1.1) +(muse/synth.cpp 21137 1066299123 r/50_synth.cpp 1.1) +(xpm/solobutton.xpm 1835 1066299123 w/40_solobutton 1.1) +(xpm/Makefile.am 30 1066299123 w/17_Makefile.a 1.1) +(share/instruments/xg.idf 44143 1066299123 x/29_xg.idf 1.1) +(muse/widgets/fontsel.cpp 3822 1066299123 o/41_fontsel.cp 1.1) +(muse/node.cpp 40732 1067279329 o/8_node.cpp 1.2) +(xpm/underlined.xpm 257 1066299123 w/24_underlined 1.1) +(README.translate 1379 1066299123 m/2_README.tra 1.1) +(muse/widgets/cliplisteditorbase.h 1193 1067279329 q/9_cliplisted 1.2) +(muse/stamp-h1 23 1066299123 r/44_stamp-h1 1.1) +(muse/widgets/scrollscale.cpp 11149 1066299123 p/47_scrollscal 1.1) +(muse/widgets/poslabel.h 1103 1066299123 p/25_poslabel.h 1.1) +(muse/xml.cpp 16119 1066299123 v/9_xml.cpp 1.1) +(muse/widgets/pitchlabel.h 927 1066299123 p/34_pitchlabel 1.1) +(muse/widgets/comment.h 1180 1066299123 q/37_comment.h 1.1) +(muse/widgets/mlabel.cpp 375 1066299123 o/32_mlabel.cpp 1.1) +(muse/seqmsg.cpp 17843 1067279329 r/14_seqmsg.cpp 1.2) +(muse/widgets/lcombo.cpp 1156 1066299123 p/51_lcombo.cpp 1.1) +(muse/midiedit/dcanvas.cpp 18532 1066299123 t/30_dcanvas.cp 1.1) +(muse/miditransform.h 2833 1066299123 u/21_miditransf 1.1) +(muse/midictrl.h 6919 1067279329 o/7_midictrl.h 1.2) +(share/wallpapers/gray_rock.gif 23780 1066299123 n/26_gray_rock. 1.1) +(muse/miditransform.cpp 53478 1066299123 u/19_miditransf 1.1) +(muse/eventlist.h 2591 1066299123 u/13_eventlist. 1.1) +(muse/waveevent.cpp 3436 1066299123 r/48_waveevent. 1.1) +(muse/widgets/audioconf.cpp 4885 1067279329 p/30_audioconf. 1.2) +(muse/mixer/routecombo.cpp 1437 1066299123 u/33_routecombo 1.1) +(share/locale/muse_es.ts 191460 1066299123 n/19_muse_es.ts 1.1) +(README.softsynth 3462 1066299123 l/48_README.sof 1.1) +(muse/widgets/tb1.cpp 6479 1066299123 q/18_tb1.cpp 1.1) +(muse/widgets/tempolabel.cpp 3507 1066299123 q/49_tempolabel 1.1) +(muse/mess.h 2222 1066299123 s/37_mess.h 1.1) +(muse/xml.h 2016 1066299123 u/26_xml.h 1.1) +(muse/widgets/editnotedialogbase.h 1364 1067279329 r/11_editnotedi 1.2) +(muse/patchbay/Makefile.am 180 1066299123 u/2_Makefile.a 1.1) +(share/wallpapers/stone1.gif 1252 1066299123 n/29_stone1.gif 1.1) +(muse/widgets/sclif.cpp 6640 1066299123 o/12_sclif.cpp 1.1) +(xpm/fileprintS.xpm 487 1066299123 w/35_fileprintS 1.1) +(muse/master/master.cpp 9836 1066299123 s/47_master.cpp 1.1) +(muse/widgets/header.h 825 1066299123 o/29_header.h 1.1) +(xpm/undo.xpm 1649 1066299123 x/12_undo.xpm 1.1) +(muse/widgets/mixdowndialog.h 966 1066299123 r/3_mixdowndia 1.1) +(muse/waveedit/waveview.h 1436 1066299123 s/30_waveview.h 1.1) +(muse/widgets/bigtime.cpp 8320 1066299123 o/15_bigtime.cp 1.1) +(muse/widgets/midirawbase.ui 19730 1066299123 o/27_midirawbas 1.1) +(xpm/note.xpm 226 1066299123 x/8_note.xpm 1.1) +(muse/sig.h 2262 1066299123 u/27_sig.h 1.1) +(synti/vam/vamgui.h 2721 1066299123 m/40_vamgui.h 1.1) +(share/locale/muse_fr.qm 56295 1066299123 n/18_muse_fr.qm 1.1) +(muse/waveedit/waveedit.cpp 10069 1066299123 s/31_waveedit.c 1.1) +(xpm/pafter.xpm 661 1066299123 x/16_pafter.xpm 1.1) +(muse/ctrl/ctrledit.cpp 4133 1066299123 v/18_ctrledit.c 1.1) +(muse/waveedit/waveview.cpp 10805 1066299123 s/33_waveview.c 1.1) +(muse/widgets/commentbase.ui 3807 1066299123 q/35_commentbas 1.1) +(muse/mplugins/mitplugin.h 1008 1066299123 s/12_mitplugin. 1.1) +(muse/widgets/view.h 3121 1066299123 p/0_view.h 1.1) +(muse/widgets/siglabel.cpp 4340 1066299123 r/2_siglabel.c 1.1) +(xpm/ctrl.xpm 673 1066299123 w/47_ctrl.xpm 1.1) +(xpm/filesaveasS.xpm 490 1066299123 v/50_filesaveas 1.1) +(muse/helper.cpp 1066 1066299123 u/20_helper.cpp 1.1) +(muse/arranger/Makefile.am 320 1066299123 r/22_Makefile.a 1.1) +(muse/widgets/scrollscale.h 2086 1066299123 q/25_scrollscal 1.1) +(muse/widgets/citem.h 2691 1066299123 o/14_citem.h 1.1) +(share/instruments/Makefile.am 123 1066299123 n/6_Makefile.a 1.1) +(muse/mplugins/midiitransform.cpp 50394 1066299123 s/22_midiitrans 1.1) +(synti/organ/organguibase.ui 63156 1066299123 m/23_organguiba 1.1) +(muse/instruments/editinstrument.h 900 1066299123 r/29_editinstru 1.1) +(muse/memory.cpp 2527 1067279329 v/7_memory.cpp 1.2) +(muse/part.cpp 12732 1066299123 u/6_part.cpp 1.1) +(synti/fluid/fluidguibase.ui 5829 1066299123 m/31_fluidguiba 1.1) +(muse/mplugins/mittranspose.cpp 5157 1066299123 s/16_mittranspo 1.1) +(muse/cliplist/cliplist.cpp 8791 1066299123 o/0_cliplist.c 1.1) +(muse/widgets/mixdowndialogbase.h 1390 1067279329 q/15_mixdowndia 1.2) +(xpm/bluedot.xpm 379 1066299123 x/14_bluedot.xp 1.1) +(muse/value.h 1313 1066299123 s/2_value.h 1.1) +(muse/widgets/gatetimebase.ui 10237 1066299123 q/10_gatetimeba 1.1) +(muse/ctrl/ctrlpanel.h 947 1066299123 v/14_ctrlpanel. 1.1) +(muse/instruments/editinstrumentbase.ui 42807 1066299123 r/38_editinstru 1.1) +(muse/synthconfig.h 875 1066299123 s/5_synthconfi 1.1) +(synti/vam/README 1433 1066299123 m/46_README 1.1) +(muse/liste/listedit.h 1569 1066299123 v/0_listedit.h 1.1) +(muse/instruments/minstrument.cpp 15669 1067279329 r/37_minstrumen 1.2) +(muse/mixer/routecombo.h 716 1066299123 u/43_routecombo 1.1) +(muse/patchbay/patchbay.cpp 218 1066299123 u/3_patchbay.c 1.1) +(common.am 1198 1066299123 m/4_common.am 1.1) +(muse/midiedit/dcanvas.h 2282 1066299123 t/25_dcanvas.h 1.1) +(Doxyfile.in 5917 1066299123 l/41_Doxyfile.i 1.1) +(muse/widgets/transformbase.h 3026 1067279329 r/5_transformb 1.2) +(xpm/record.xpm 320 1066299123 w/28_record.xpm 1.1) +(muse/mplugins/mitplugin.cpp 4502 1066299123 s/26_mitplugin. 1.1) +(muse/liste/editevent.h 4424 1066299123 u/50_editevent. 1.1) +(muse/arranger/tlist.h 3114 1066299123 r/23_tlist.h 1.1) +(xpm/speaker.xpm 485 1066299123 v/42_speaker.xp 1.1) +(muse/widgets/sclif.h 1342 1066299123 q/27_sclif.h 1.1) +(muse/ladspa.h 27436 1066299123 r/43_ladspa.h 1.1) +(synti/organ/fdialogbuttons.ui 17795 1066299123 m/27_fdialogbut 1.1) +(muse/widgets/utils.cpp 5031 1066299123 o/11_utils.cpp 1.1) +(share/html/main_window.jpg 75510 1066299123 n/35_main_windo 1.1) +(share/html/Makefile.am 139 1066299123 n/37_Makefile.a 1.1) +(grepmidi/Makefile.am 116 1066299123 m/7_Makefile.a 1.1) +(muse/ctrl/ctrlcanvas.h 3762 1066299123 v/15_ctrlcanvas 1.1) +(xpm/wave.xpm 237 1066299123 w/12_wave.xpm 1.1) +(demos/rasen.med 12283 1066299123 n/46_rasen.med 1.1) +(muse/mididev.cpp 9178 1067279329 x/36_mididev.cp 1.3) +(muse/widgets/.cvsignore 392 1066299123 o/23_.cvsignore 1.1) +(muse/midifile.cpp 16110 1067279329 x/41_midifile.c 1.2) +(lib/Makefile.am 25 1066299123 x/19_Makefile.a 1.1) +(xpm/draw.xpm 509 1066299123 w/36_draw.xpm 1.1) +(muse/master/lmaster.cpp 7194 1066299123 s/40_lmaster.cp 1.1) +(share/locale/muse_de.qm 4285 1066299123 n/22_muse_de.qm 1.1) +(muse/key.cpp 754 1066299123 v/6_key.cpp 1.1) +(muse/instruments/ccontrolbase.ui 20350 1066299123 r/31_ccontrolba 1.1) +(muse/arranger/alayout.cpp 4092 1067279329 r/21_alayout.cp 1.2) +(xpm/exit.xpm 688 1066299123 v/30_exit.xpm 1.1) +(plugins/freeverb/denormals.h 722 1066299123 m/8_denormals. 1.1) +(xpm/editcopyS.xpm 486 1066299123 w/44_editcopyS. 1.1) +(muse/widgets/editsysexdialogbase.h 1405 1067279329 p/6_editsysexd 1.2) +(xpm/exitS.xpm 467 1066299123 w/50_exitS.xpm 1.1) +(muse/synth.h 3248 1066305474 t/4_synth.h 1.2) +(muse/widgets/tb1.h 1297 1066299123 q/41_tb1.h 1.1) +(xpm/sysex.xpm 665 1066299123 x/1_sysex.xpm 1.1) +(muse/widgets/drange.cpp 8057 1066299123 o/28_drange.cpp 1.1) +(muse/instruments/Makefile.am 363 1066299123 r/34_Makefile.a 1.1) +(muse/widgets/audioconfbase.ui 9751 1067279329 o/44_audioconfb 1.2) +(share/html/button_bar.jpg 13115 1066299123 n/33_button_bar 1.1) +(muse/cfprint.cpp 3910 1066299123 v/20_cfprint.cp 1.1) +(muse/widgets/mmath.cpp 6630 1066299123 o/9_mmath.cpp 1.1) +(synti/vam/ChangeLog 387 1066299123 m/39_ChangeLog 1.1) +(muse/widgets/transposebase.h 1521 1067279329 r/4_transposeb 1.2) +(muse/mixer/rack.cpp 6965 1066299123 u/42_rack.cpp 1.1) +(muse/widgets/slider.cpp 22383 1066299123 p/40_slider.cpp 1.1) +(muse/muse.pro 11189 1066299123 u/0_muse.pro 1.1) +(muse/transpose.h 416 1066299123 r/13_transpose. 1.1) +(muse/widgets/fdialogbuttons.h 1108 1067279329 p/49_fdialogbut 1.2) +(share/instruments/gm.idf 7461 1066299123 n/7_gm.idf 1.1) +(xpm/steprec.xpm 497 1066299123 v/36_steprec.xp 1.1) +(muse/mixer/Makefile.am 542 1066299123 u/36_Makefile.a 1.1) +(muse/widgets/posedit.h 2538 1066299123 p/44_posedit.h 1.1) +(TODO 1432 1066299123 l/40_TODO 1.1) +(AUTHORS 0 1066299123 l/42_AUTHORS 1.1) +(muse/widgets/cliplisteditorbase.ui 5696 1066299123 p/27_cliplisted 1.1) +(muse/driver/audiodev.h 1554 1066299123 t/8_audiodev.h 1.1) +(ChangeLog 50444 1066299123 l/38_ChangeLog 1.1) +(xpm/loop1.xpm 862 1066299123 w/14_loop1.xpm 1.1) +(muse/songfile.cpp 42252 1066299123 t/5_songfile.c 1.1) +(muse/driver/midirawdev.cpp 6472 1066305474 t/20_midirawdev 1.2) +(muse/helper.h 374 1066299123 n/48_helper.h 1.1) +(muse/widgets/comment.cpp 2786 1066299123 o/37_comment.cp 1.1) +(plugins/freeverb/allpass.h 1157 1066299123 m/15_allpass.h 1.1) +(muse/pos.h 2479 1067279329 u/28_pos.h 1.2) +(muse/widgets/nentry.h 2075 1066299123 p/17_nentry.h 1.1) +(muse/midiedit/prcanvas.h 3167 1066299123 t/39_prcanvas.h 1.1) +(muse/marker/marker.cpp 2787 1066299123 t/0_marker.cpp 1.1) +(muse/midiedit/piano.cpp 14708 1066299123 t/38_piano.cpp 1.1) +(muse/midiport.cpp 10997 1067279329 s/0_midiport.c 1.3) +(muse/mixer/audionodebutton.cpp 889 1066299123 u/47_audionodeb 1.1) +(muse/stamp-chown 0 1066299123 r/47_stamp-chow 1.1) +(xpm/back.xpm 542 1066299123 w/2_back.xpm 1.1) +(share/wallpapers/paper1.jpg 1662 1066299123 n/24_paper1.jpg 1.1) +(muse/memory.h 5006 1066299123 n/50_memory.h 1.1) +(muse/widgets/noteinfo.h 1224 1066299123 o/49_noteinfo.h 1.1) +(xpm/cut.xpm 553 1066299123 x/7_cut.xpm 1.1) +(muse/appearance.h 924 1066299123 u/17_appearance 1.1) +(muse/widgets/gensetbase.h 1848 1067279329 q/50_gensetbase 1.2) +(muse/mixer/amixer.h 2618 1066299123 u/30_amixer.h 1.1) +(synti/vam/vamguibase.ui 84847 1066299123 m/48_vamguibase 1.1) +(muse/waveevent.h 929 1066299123 t/46_waveevent. 1.1) +(muse/midi.h 1350 1066299123 s/36_midi.h 1.1) +(xpm/idea.xpm 814 1066299123 w/42_idea.xpm 1.1) +(muse/thread.h 2792 1066299123 r/27_thread.h 1.1) +(muse/widgets/genset.h 760 1066299123 p/43_genset.h 1.1) +(muse/mixer/rack.h 839 1066299123 u/35_rack.h 1.1) +(synti/vam/Makefile.am 680 1066299123 m/42_Makefile.a 1.1) +(synti/organ/organgui.cpp 19336 1066299123 m/28_organgui.c 1.1) +(muse/instruments/midictrledit.h 1347 1066299123 r/35_midictrled 1.1) +(muse/cfprint.h 817 1066299123 u/12_cfprint.h 1.1) +(muse/mplugins/midifilter.h 2063 1067279329 s/14_midifilter 1.2) +(muse/instruments/instr 1714255 1066299123 x/39_instr 1.1) +(xpm/buttondown.xpm 502 1066299123 x/9_buttondown 1.1) +(muse/widgets/wtscale.cpp 9051 1066299123 p/14_wtscale.cp 1.1) +(muse/mpevent.h 4798 1066299123 t/7_mpevent.h 1.1) +(share/wallpapers/gray.gif 6699 1066299123 n/27_gray.gif 1.1) +(synti/vam/vam.h 1345 1066299123 m/47_vam.h 1.1) +(muse/sync.h 767 1066299123 r/46_sync.h 1.1) +(muse/widgets/metronomebase.ui 24638 1066299123 q/24_metronomeb 1.1) +(muse/conf.cpp 46929 1067279329 t/22_conf.cpp 1.2) diff --git a/muse2/AUTHORS b/muse2/AUTHORS new file mode 100644 index 00000000..048d8824 --- /dev/null +++ b/muse2/AUTHORS @@ -0,0 +1,17 @@ +Muse +This software has been brought to you by: + +Name: user: users sourceforge net +--------------- --------- +Administrator: +Werner Schweer wschweer + +Developers: +Nil Geisweiller a-lin +Frank Neumann franky +Mathias Lundgren lunar_shuttle +Joachim Schiele qknight +Robert Jonsson spamatica +Tim Donnelly terminator356 + +Fluidsynth logo designed by Josh "Swami" Green. diff --git a/muse2/COPYING b/muse2/COPYING new file mode 120000 index 00000000..6168a397 --- /dev/null +++ b/muse2/COPYING @@ -0,0 +1 @@ +/usr/share/automake-1.11/COPYING \ No newline at end of file diff --git a/muse2/ChangeLog b/muse2/ChangeLog new file mode 100644 index 00000000..a5cd7d5e --- /dev/null +++ b/muse2/ChangeLog @@ -0,0 +1,3703 @@ +09.10.2010 + * Fixed: Gluing of midi track parts, over tempo changes, caused incorrect note times and lengths. (T356) + - Fixed Song::cmdGluePart(). +08.10.2010 + * Disabled: Precount does not work, disabled function in gui (rj) + ======================================= + * 1.1 tagged (rj) + ======================================= + * added: missing headerfile in dssihost.cpp, required for building on Ubuntu Maverick (rj) +21.09.2010 + * Fixed: Mixers not restoring their size properly upon song load. (T356) + - Rearranged MusE::loadProjectFile1() slightly so mixer resizing done at end. Tested OK. + * Changed: Disabled some optimized code always enabled in Dsp::cpy(), for now, in case of 64-bit issues. (T356) +16.09.2010 + * Created rc2 release for 1.1 (rj) + * Fixed: Delete track(s) not disconnecting track routes, causing routes to hang around and store in song file. (T356) + - Fixed major regressions (my fault) in Song::insertTrack2() and ::removeTrack2(). + * Fixed: Dummy audio device: Crashes when Jack midi device created in device manager, or loaded from song. (T356) + - This allows to create Jack midi devices even when dummy audio driver is used. + - Tested OK loading complex Jack midi based songs with dummy audio driver. + * Fixed: AlsaTimer cannot start, with dummy audio device. (T356) + - Reverted: Back to default SND_TIMER_GLOBAL_SYSTEM in AlsaTimer, for now until a better fix. + - Also replaced pop-up warning in dummy loop with terminal output instead. + * Changed: MidiDevice <-> Track routes replaced with MidiPort <-> Track routes. (T356) + - This allows to change a port's device (even to !) while keeping all the track channel routes. + * Changed: Single midi <-> track route with channel mask, instead of one route-per-channel. (T356) + - Potentially saving very many routes from memory and in song file. +10.09.2010 + * Fixed: regression with oR routing for Aux strips (rj) +05.09.2010 + * Fixed: shortcut for insert moved to Ctrl+Shift+X (rj) + * Added: Select all toggle for midi channels iR menu (rj) + * Added: Auto-route-connect old songs with obsolete midi input port/channel masks (before iR button added). (T356) + - Added MidiTrack::setInPortAndChannelMask() and called it from MidiTrack::read(). +03.09.2010 + * Changed: Updated German localizations muse_de.qm and muse_de.ts from (T356) + * Added: Instrument definitions and drum maps for Kurzweil SP2X, from (T356) +28.08.2010 + * Created rc1 release for 1.1 (rj) + * Added: Instrument definitions for AKAI SG01 and Waldorf-microQ from (rj) +23.08.2010 + * Added: Possibility to turn on/off move-armed-track with track selection in settings (rj) +21.08.2010 + * Renamed: Soft synth configuration changed to Synth configuration, as per patch from Geoff King (rj) + * Fixed: Shortcuts with modifier keys wasn't working for global shortcuts, should be now (rj) + * Added: Shortcuts for changing len of events, default Ctrl+Shift+Left/Right (rj) +>>>>>>> .r459 +10.08.2010 + * Fixed/Changed: Grid reacts to midi resolution change (rj) +01.08.2010 + * Added: Move track selection when part selection is moved, is this a good approach? (rj) + * Added: Backspace unarms all armed tracks (rj) +24.07.2010 + * Feature: Audio and midi routing popup menus now stay open, for making rapid connections. (T356) + * Fixed: Delete some objects hanging around upon close like song, audio, midiSeq, and prefetch. (T356) + TODO: Find a way to delete the 'muse' object without causing problems like seg faults. +21.07.2010 + * Improved: Note lanes in pianoroll and marking of C-notes (rj) +20.07.2010 + * Fixed: illegal shortcut no longer reported on startup (rj) +18.07.2010 + * Fixed: Handle errors during timer initialization more gracefully (rj) +15.07.2010 + * Added: Volume control for audio metronome (rj) +12.07.2010 + * Fixed: When wave files were edited allocation was on stack which caused crashes for larger selections, now done on heap (rj) + * Added: Print svn version in -v and About box. (rj) + * Fixed: Bug with RemoveShortEvents plugin script, would not remove anything due to index error (rj) +10.07.2010 + * Added: Insert measure, inserts empty space and moves everything after playpointer to the right and + Part-insert, pastes parts and moves everything after the paste point to the right + it's currently not possible to change the shortcuts for these, wip (rj) +06.07.2010 + * Added: Button in transport to enable/disable jack transport. (rj) + * Fixed: Dropdown Snap and Type in arranger toolbar no longer steal focus, annoyed the helloutame (rj) + * Fixed: Making edits to larger chunks in wave files no longer cause a crash, heap is used for allocation (rj) + * Improved: Part selection when navigating with keyboard, previously there was sometimes a need to use the mouse + to get a part selected, now the first one should be selected (rj) + * Added: some automation (very)wip stuff, not enabled, just to get it off my harddrive (rj) +22.06.2010 + * Fixed: Crashes loading a song while another is loaded. Or worse, it loads but saving corrupts the file! (T356) + - Song::clear(): Clear all midi port devices. Delete Jack midi devices, and remove all ALSA midi device routes. + - Route::read() Ignore bogus midi routes in med file if the device they refer to is not in use by the song (port is -1). + - MidiJackDevice::writeRouting(), MidiAlsaDevice::writeRouting(): Ignore and do not write midi routes if the device + they refer to is not in use by the song (port is -1). This prevents bogus midi routes writing to med file. + - Fifo::~Fifo(): Free the buffers! Fifo::getWriteBuffer(), Fifo::put(): Verify allocation. Fifo::get(): Verify buffers. +15.06.2010 + * Fixed: Jack midi output: Sent pitch bend and program values were incorrect, if coming from midi keyboard. (T356) + - Reported by Pieter while using Hurdy Gurdy vst under fst. Tests OK now, here. + * Fixed: Drum editor: Controller graph not in current tool mode (pencil, eraser etc.), when first opened. (T356) + - Call setTool() in DrumEdit::addCtrl(). + * Fixing: Drum editor: Velocity controller graph showing incorrect for selected drum, or showing for all drums, when first opened. (T356) + - WIP. Still not quite correct, but at least now it doesn't show all drum velocities when first opened. + (This is interesting! I will try to allow 'no drum' list selection, to show all drum velocities at once, just like piano roll.) +13.06.2010 + * Fixed: More fixes to marker list, selected item was still not right. (T356) +03.06.2010 + * Fixed: Time signature editing problems in master track list and gui. (T356) + - Fixed SigEdit::outOfRange(). Added Sig::isValid(), and check it in LMaster::returnPressed() to fix crash with 0 n or z. + * Fixed: Marker/list problems. Double entries. Pianoroll/arranger timescale 'shift-left/right-click-to-add/del-marker' fixed. + Marker 'lock' (smpte/ticks) works now. Up/down buttons fixed. Marker list selection 'stays put' now + when adding or deleting markers. (T356) + * Fixed: Graphics corruption in arranger and track list when vertically scrolling. (T356) + - Changed rectangle to full w/h in 'shift down' section of View::setYPos() and TList::setYPos(). + Should not have to do this, but it cured my problems. No noticable change in speed. + - Arranger corruption occured on more than one machine with xorg nv, ati drivers. More severe arranger AND track list + corruption occured with proprietary drivers. Corruption is also observed in several other windows (ex. ladspa browser) + but there's not much I can do, the corruption is found in ordinary usage of QListView for example. + * Changed: Increased arranger vertical scroll step, was too slow to scroll. (T356) + * Possible fix: Auto-scroll in pianoroll and arranger take waaay too long to stop scrolling. (T356) + - Increased timer timeout from 40 to 80 ms in Canvas::scrollTimerDone(). Helped for me, on a 1.6Ghz P4... + * Changed: Ladspa plugin guis now have scroll bars. Helps when there are many controls. (T356) + - Still toying with the code a bit, please bear with me while I try to get it right. + * Started: Addition of MusE-native ladspa guis for dssi synths. (T356) + - No visible changes yet, just under the hood. Added class PluginIBase which is inherited by + DssiSynthIF and PluginI. Changed class PluginGui and DssiSynthIF to fit. +07.05.2010 + * Fixed: Xml file trouble: Tag attributes not storing xml-friendly entities, trouble reloading song. (T356) + - Fixed all usages of Xml::nput, ::put, ::tag, and ::etag. Discovered by Geoff B. +06.05.2010 + * Fixed: Audio Input tracks: Loud noises or DC output with unconnected input routes. (T356) + - AudioInput::getData(): Do not get buffers of unconnected client ports. Causes repeating leftover data. + * Fixed: Audio Input tracks: Stereo processing not correct if both input routes connected to same port. (T356) + - AudioInput::getData(): Just copy the buffers always, don't set buffer pointer directly. + * Fixed: Effect rack plugins: Not saving correct number of plugin channels. Upon reload, channels are wrong. (T356) + - PluginI::writeConfiguration() and PluginI::readConfiguration(): Write and read the channels, not instances. + - Optimize TODO: Is xml plugin 'channel' really necessary? Well not now, but later if we optimize the effect rack + by not creating redundant plugin instances if the next plugin in the rack doesn't need them. + What I have changed is always make the number of plugin channels equal to the number of track channels. + PluginI::setChannels() and PluginI::initPluginInstance() then sort out the details of how many instances to create. + * Fixed: Effect rack plugins: Some plugins crash MusE, for example plugins with no audio outputs. (T356) + - PluginI::setChannels() and PluginI::initPluginInstance(): Be more aware of different audio ins and outs. + * Added: First draft help file README.effects-rack titled "Understanding the Effects Rack". (T356) + - Details how MusE uses plugins, especially now with these changes. +27.04.2010 + * Changed: Building: Separate --enable-dssi --enable-osc configure options. (T356) + --enable-dssi (Enable dssi synths AND special handling of dssi-vst ladspa effect plugins. No guis if by itself.) and + --enable-osc (Enable dssi guis. Useless by itself at the moment). + Use both for best features. + * Feature: If dssi and osc support are enabled, audio track effects rack dssi-vst plugins can now show their NATIVE guis. (T356) + * Fixed: Storing dssi synth states. Remembers current program, all configure strings, and control settings - for current program ONLY. (T356) + - With dssi-vst synths, some better are than others at remembering program. + - Todo: Ignore unwanted dssi-vst config strings/values like "guiVisible" "" (gives non-fatal error on reload). + * Fixed: Dssi native synths (hexter, LTS etc.) should actually work now. Their gui controls operate the sounds now. (T356) + - Todo: If using large audio buffers (Jack), my 'one-at-a-time-per-audio-process' osc control fifo streams kinda suck, + with a delay in their processing. Want to try MULTIPLE 'run's or 'run-multiple's PER audio process, for SAMPLE accuracy and + better quicker message processing. Just need to add a timestamp to my osc fifo items, then all forms of change - whether + control, midi event, or program - have a timestamp with which we can SPLIT UP the runs into 'runs between changes'. + * Tip: Currently a patch to dssi-vst is required for their guis to update properly. (For now, ask about this on our lists.) +21.04.2010 + * Fixed: Shortcut for moving between tracks in arranger. Ctrl+Up/Down (rj) +19.04.2010 + * Patch: Fix for libdir bug causing synths to not be available on some 64bit systems. By Orcan Ogetbil (rj) + * Fixed: Drawing of grid when snaping to less than measure (rj) +12.04.2010 + * Fixed: LADSPA rack effects: Do not display LADSPA output controls (such as latency). (T356) + * Fixed: Bug when cancelling 'save as' operation, says 'file exists'. Caused by my earlier compressed save fixes. (T356) +11.04.2010 + * Fixed: DSSI requested midi mapped controls were not correct. (T356) + * Changed: Working on controllers, and saving their state. Synths like Organ should remember their state now. (T356) + - Working on DSSI controls... Working on OSC stuff... +06.04.2010 + * Fixed: Jack midi, and DSSI: Midi controller knobs, sliders, boxes etc. not updating with current values. (T356) + - Copied code in MidiPort::sendEvent() to JackMidi::processMidi() and DssiSynthIF::getData(). + * Fixed: DSSI: Crashing with unkown controllers sent to synths. (T356) + - Ignore unkown controllers in DssiSynthIF::processEvent(). +05.04.2010 + * Added: Rec enabled track moved with selection when only one track is rec enabled (rj) + * Changed: Made canvas show grid the default (rj) + * Added: Jack midi ports can now be renamed in the ports list dialog, by clicking on the name. (T356) + - Also cleaned up ports list behaviour and added tooltips. +30.03.2010 + * Major reworks: Jack midi, routing system, multichannel synth ins/outs, midi strips and trackinfo pane. (T356) + - WORK IN PROGRESS. Should be usable for current projects. + - ADVISORY: If opening current projects you are advised to "save as" or back up your med files (waves should be OK) + until all is deemed to be working OK. It is possible more changes to .med file structure are needed later. + - Some .med project file structures have CHANGED (like routing). I have tested opening large existing projects, + then re-saving them. OK so far. + However, I have not added importing code for the old midi trackinfo panel 'input port' and 'input channel' boxes (gone now). + If you want to wait, I am planning to do that, but later... Otherwise you must re-enter them with the new midi input routing. + - ** Multichannel synth inputs and outputs: Fairly satisfied with popup menus, hopefully no major reworks... + Routing system fully supports multichannel synth mono/stero paths but is NOT COMPLETE yet. + When changing a connected track from stereo to mono, there is no coding yet to ensure the existing stereo routes are + changed from stereo to mono (just like the audio input and output tracks have always done with Jack routes). + Also coding must be added to avoid simultaneous mono and stereo routes - make them mutually exclusive - although + there's nothing technically wrong with it, it's just not desirable. + - ** Jack midi: You now create your own Jack midi ports. I have not added any means to delete them yet, but I believe + if you 'unselect' them in the midi ports list so that they are not used, then the saved .med file will ignore them. + - Multi-instances of MusE should work OK now - all ports should hopefully have unique names. + - Number of midi ports increased from 32 to 128. It's a bit much for the ports list, was planning "create your own + midi port as needed" (like RG). Obstacles seem to have been cleared now, but it would be a big job (lots of places to change). + - Along the way various tweaks and fixes when I spotted them. +18.02.2010 + * Added: Separate Jack midi client ports per MusE port. (T356) + - For now, you will have to manually add further connections to those ports if desired, each session. + - Tested OK rec/play so far. + * Fixed: Some inconsistencies in midi controller number decoding. (T356) + - Everything now references the values listed in midictrl.h + * Fixed: Some Jack code was not calling free after calling certain functions. (T356) + * Changed: Midi priority now deaults to audio priority +1. (T356) + - Thanks to RJ for the convincing argument. +14.02.2010 + * Added: Jack midi input should be working now. Controllers, too. (T356) + - Tested with large 1024 frame buffer. Events are recorded with good sub-tick (frame) resolution, + as viewed in pianoroll with 64T snap grid. +13.02.2010 + * Fixed: Jack midi output should now be frame-accurate, support variable length events (like sysex), + and most controllers should work. (T356) + - TODO: No record yet. Just playback. + - TODO: I have code in place for multiple device listing (like ALSA) with auto-connect, + instead of single 'jackmidi' device, but it doesn't seem to want to actually connect. + Simply enable the #define JACK_MIDI_SHOW_MULTIPLE_DEVICES in driver/jackmidi.h + and it will magically switch. Shows port names as their alias #1 (with a rem'able line to + revert to non-alias names - to be made configurable later). I swear it was working, + then intermittent, then not at all. Hmm... +06.02.2010 + * Fixed: MusE hanging on close, with Jack driver. (T356) + - Unregister Jack midi ports on destruction of JackAudioDevice. +05.02.2010 + * Fixed: Top level windows: Do not open if there are no parts. Case: bogus -1 top-level part index stored in med file. (T356) + - Changed MusE::readToplevels() and stuff in listedit.cpp + - Was causing crash of list editor upon loading a song saved with the list editor open. + Somehow a bogus -1 top-level part index can make it in to the .med file. Checking this... + * Changed: Preparations for audio processors: Moved stuff out of class Event and into class WavePart. (T356) + - WavePart needs a converter map to lookup events in the part's (shared) event list, in case clones exist ! + Ughh, it's going to be tough to ensure the map is always correct because an event cannot tell what part owns it... +04.02.2010 + * Improved: Grid handling in arranger improved, it should now be actually usable (rj) +01.02.2010 + * Fixed: Jack midi output: Stuck or missing notes. (T356) + - Must only be one jack_midi_event_reserve() per event in handle_jack_midi_out_events(). +31.01.2010 + * Changed: Midi sync window: Clock is now seperated from other real time commands (play/stop etc). (T356) +31.01.2010 + * Fixed: Midi sync in: Should be very solid and 'in time' now, play/stop/continue. (T356) + - Re-coded to begin incrementing immediately upon first-clock detection. Forbid MusE to send transport commands + while in external sync mode - our sync router handles that. Was causing problems. + - Tested OK: Ensoniq ESQ-1 KB (sends clocks ony between start and stop) and Roland TR-505 drums (clocks always running). + The measured general timings were quite different, but (thankfully) clocks and events were not. + - MusE responds better to the TR-505 than the ESQ-1 does with a direct midi cable connection! (ESQ gains ticks on continue). + * Added: Midi sync window: 'Rewind on start' column. (Also a 'Send first clock delay' box - not implemented yet). (T356) +29.01.2010 + * Feature: Dummy audio driver: Added global settings for sample rate and period size. (T356) + - The period size affects midi resolution, and the default was just too long. So this was added. +27.01.2010 + * Changed: Don't process audio prefetch, or getData() in Audio::copyData(), if track is 'Off'. (T356) + * Added: Arranger track list: Quick 'right-click' or 'ctrl-click' or 'ctrl-mouse-wheel' toggling of Track On/Off. (T356) + - Note this includes midi tracks now! Remains to be seen whether allowing midi off is useful and will work, + or should be filtered out. **TODO: Turn off remaining controls in midi strips, turn off actual midi playback and record. + * Feature: Initial Jack midi support. Imported from Larry Valkama's GIT repo. (T356) +26.01.2010 + * Fixed: Import midi 'replace' broken last fixes. (T356) + * Fixed: External midi sync: Wait until first clock after start to start transport, and >= second clock to increment ticks. (T356) +24.01.2010 + * Added: Midi sync: Added 'Jack timebase master' checkbox, removed requirement of MusE being tempo map master. (T356) + * Added: While on external sync and Jack timebase master, reports correct MusE BBT info to Jack. (Tempo not correct yet). (T356) + * Added: Midi import option: Whether to split imported tracks into multiple parts. (T356) +23.01.2010 + * Fixed: External midi sync in: MusE transport not rewinding upon reception of start. (T356) + * Added: Midi sync: MusE now transmits and receives some MMC commands, and displays some MTC and SMTPE info. (T356) + - No transmit MTC or receive MTC syncing yet, just transport control stuff. + - Tested OK with Rosegarden and Ardour, but they do not seem to have an option to sync to the input midi clock, + only MTC or internally. Must test when MTC output added to MusE. + * Improved: Midi sync editor window: Shows MMC and MTC activity and works with them now. (T356) +21.01.2010 + * Fixed: First tests: External midi sync in works now! Should be rock solid no matter what is thrown at it. (T356) + - All changes are labeled "p3.3.25" + - Switched to a 'direct drive' method instead of 'calculation of tempo' method. + Drift between source of master and slave is non-existant since the incoming midi clocks + drive the midi engine directly. This is at the expense of exact 64th note resolution. + At MusE's fixed 24 midi clocks per quarternote, triplet 32nd notes are resolved (32nd note divided by three). + MusE's default 'division' (ticks per quarternote) is 384. 384/24 gives a division of 16 MusE 'ticks' per midi clock. + - Normally when using the tempo map (external sync is off), device play event times are in frames, + because the tempo map provides for that kind of sub-tick frame resolution. + But now, during external sync, device play event times are in ticks, not frames. + Hence the compromise between exactness of note times, and master/slave drift. + - Tested heavily with a Roland TR-505 which has a variable 'analog' tempo knob. + Combined that with a complete midi song, and other test 'tick' tracks driving external synth KB, + was rock solid going 'absolutely nuts' with the tempo knob up to 260BPM, surprisingly good resolution. + - TODO: Check safety of 'midiExtSyncTicks = 0' inside audio thread while midi thread is counting it up. + Also fix seek operations and check for any more place needing these 'tick'frame' alterations. + * Changed: Some more changes for compressed files operations. (T356) + - More to be done, but tests OK so far. +19.01.2010 + * Fixed: Saving/loading compressed .gz/.bz2 MusE .med files, + loading compressed .mid/.kar files (save broken, off for now). (T356) + - Changed filedialog.cpp:getSaveFileName() and MusE::loadProjectFile1. + - Added seperate save file dialog filters in globals.cpp. + - Disabled exporting of compressed midi/karaoke files (.mid/.kar) for now because + a compressed file is opened as a pipe, and pipes can't seek, resulting in a + corrupted midi file in MidiFile::writeTrack(). +18.01.2010 + * Added: Piano roll and drum editor edit menus: "Select prev/next part". With default hotkeys Alt+Left/Right. (T356) + - This is an easy way to switch parts when multiple part editing in one window (via Ctrl-E or Ctrl-D). + And it was absolutely essential, for multiple dedicated controller track editing since there are no notes, + and no (other) way to select another part to edit. +17.01.2010 + * Feature: MusE now has two mixers, with selectable track type display. (T356) + - Changes to .med file were needed. Tested OK so far with old and new song files. + * Fixed: Builtin freeverb and TAP reverb ladspa GUIs, or custom user GUIs not showing controls. (T356) + - Broken since removal of musewidgetsplugin library months ago. + Added PluginWidgetFactory class to handle local creation of controls. + (Custom user GUIs must be done by hand since the removal of musewidgetsplugin library). + * Fixed: Appearance settings red colour adjustment larger than others. (T356) + * Changed: Default controller graph foreground colour from blue to medium orange. (T356) + - Avoid clash with blue colour used by left and right markers. +12.01.2010 + * Release: 1.0.1 (rj) +10.01.2010 + * Fixed: python detection exchanged for script from http://libvirt.org/ (rj) +09.01.2010 + * Removed: Disabled watchdog thread. (T356) + - Tested OK (normally) without it, although behaviour needs to be tested if audio or midi thread + would stop unexpectedly. + * Changed/Fixed: Thread priorites: Added command line switches for audio (-P) and midi (-Y). (T356) + - Audio (-P) applies to dummy driver only. (Else audio priority is fixed by Jack). + - Also changed default settings so that no two threads have same priority. May fix problem reported + by user GB, concerning high midi latency. + * Added: Enable/disable LASH command line switch (-L), (if LASH support is compiled in). (T356) + - Helps prevent some issues like auto-starting Jack, or automatically routing midi to fluidsynth (observed). +07.01.2010 + * Fixed: BUG ID: 2879426: *.med does not save meta event types. (T356) + - Changed midievent.cpp MidiEventBase::write(). Now saves value A, B, C and sysex/meta data. Tested OK. + * Fixed: Midi meters now show for each track even if they're all on same device and channel. (T356) + - Oversight, long overdue. The meters AND automation control needed to be 'per-track'. + * Applied: muse-destdir.patch Scripts and utils packaging fix submitted by Orcan Ogetbil. (T356) +06.01.2010 + * Feature: Jack transport enable/disable in Midi Sync settings window. Stores setting per-song. (T356) + - Should be Ok to use and test. Needs a bit more work. See jack.cpp and jackaudio.h + * Fixed: Speedups of audio pre-fetch especially when moving the cursor around (seeking). (T356) +23.12.2009: + * Added: DeicsOnze2 initial import. (ng) + * Fix: deicsonzepreset.cpp for Xml muse 1 API +20.12.2009: + ======================================= + * 1.0 tagged (rj) + ======================================= +19.12.2009: + * Feature/Fix: Audio metronome: Send output tracks now selectable in Settings->Metronome. Also fixed bad noises.(T356) +15.12.2009: + * Patch: New patch for 64-bit memory issues, from Daniel Kobras (rj) + * Reworked: Output of configure script to point out deprecated stuff and list the interesting stuff (rj) + * Fixed: Old bug: WaveTrack muting slow to respond or odd behaviour. (T356) + - Removed track mute check in WaveTrack::fetchData(). Was causing 'delayed repeated muting' since the mute check is + done at a time when audio segments are fetched which are to played a few seconds into the future. + Tested OK so far, playing and bouncing wavetracks. Mute is now quick to respond and does not 'repeat' or 'delay'. +14.12.2009: + * Fixed: Overhauled AudioTrack processing. Fixes noises if multiple output routes exist. Eliminates costly redundant + processing of audio tracks, and their effects racks. Waves, groups, inputs, outputs, synths etc. (T356) + - Made better use of AudioTrack::outBuffers, as a 'post-effect/pre-volume' caching mechanism if the track has more than one + output route. WaveTrack was already using this scheme, but I moved it up 'higher' and now all tracks benefit from it. + - See AudioTrack::copyData() and ::addData(). Most changes there. (Comments included!) + * Fixed: Old songs made before recent synth changes were not loading their synths. (T356) + - In .med file, added synth 'label' tag to go with existing 'class' tag, to support synths like dssi-vst. + - Songs made recently after the changes might not load their synths and will simply have to be re loaded and re-saved. +07.12.2009: + * Fixed: Add Synth popup menu: Show names AND descriptions. Now sorted, too. Also separate MESS, DSSI, VST, and Other. (T356) + - Added app.cpp:populateAddSynth() function. + * Fixed: Increased buffers for reading xml. Song files with large patchdata from vstis caused crashes (rj) + * Fixed: Self inflicted bug with setting inital song loading in general configuration (rj) +06.12.2009: + * Fixed: List popup synths by description. Cleaned up soft synth main list. Added persistent names, descriptions, ver, etc. (T356) +05.12.2009: + * Fixed: ddsi synths: Ticking or crackling when more than one output route path. (T356) + - The synths were being run more than once per process cycle, due to multiple out routes eventually calling getData. + - ** Work in progress - must also do MESS synths and other track types which should only process once per cycle. + * Feature: SSE support configure build option and SSE enabled dsp routines added. (T356) + - Currently none of the routines are actually used, yet... Borrowed from MusE-2. + - They appear to only be enabled for 64-bit CPUs. Investigating why not 32-bit... + * Feature: i386 optimized dsp float buffer copy routines. (T356) + - Should work on all i386 compatible CPUs (uses asm movsl). Borrowed from MusE-2 + - I couldn't bear to add yet another unoptimized memcpy usage, so I added this. + * Changed: All audio buffers now allocated with 'posix_memalign' instead of 'new'. (T356) + - Borrowed from MusE-2. +03.12.2009: + * Fixed: Support for initial vst chunk storage support if available in dssi-vst + requires a patch to dssi-vst. + * Fixed: Better cleanup on closing MusE. (T356) + - Added Song::cleanupForQuit called from Muse::closeEvent. Disconnect gracefully from LASH before app quit. + Clean up memory. Make vst synth processes which were in undo or redo list at close go away. +02.12.2009: + * Fixed: Do not send default midi values back to dssi synths. Let them handle their own default setting mechanisms. (T356) + - Also saves a bit of loading time for synths with hundreds of controls. See MidiPort::setMidiDevice(). +02.12.2009: + * Fixed: dssi: Crashes when loading most vst synths. (T356) + - All ports must be connected even if not used. + Made sure all audio in/out and control in/out ports are connected, + including latency control out port. Test Ok. +30.11.2009: + * Added: Configuration option for vst plugin in-place processing, fixes ladspa vst plugins not working or loud feedback. (T356) + - Hmmm, they were working before when I upgraded OS. Now they're not. Extensive testing: It seems this is not MusE's fault. + - R.J. reports they weren't working too. Investigating... +29.11.2009: + * Fixed: dssi: Loading of synths with more than 2 out channels. (T356) + - Currently only the FIRST TWO channels of the synth will be used. + - Tested ok so far with A.D. drumkit. +28.11.2009: + * Fixed: dssi: List only synths found, not effect plugins. (T356) + - Does the exact opposite of what dssi-vst does for ladspa plugins, + therefore all plugins should be covered - effects will be listed + in ladspa effect dialog, while synths will be listed as synths. +27.11.2009: + * Fixed: dssi: Both native guis and vst guis should open now. Ooooh - pretty! (T356) + - ** But still: Keep an eye on your process list and manually kill any + synth instances lying around after exit. For now try to 'politely' + close dssi guis and delete any dssi synth tracks before exiting muse. + - Working on gui open-close-reopen-show-hide stuff. Kinda weird esp. with vsts right now... +26.11.2009: + * Fixed: Loading dssi crash bug. Should at least load them now. (T356) + - Also some controller functionality via track controllers... +25.11.2009: + * Feature: Dis.. Dis.. Disposable wha? (T356) + - dssi support. Work in progress. + - ** VERY IMPORTANT Currently you must manually 'kill' any synth instances lying around after exit !!! + - Should work OK for tests and fun... +22.11.2009: + * Added: Support for reading ogg files through libsndfile (rj) +18.11.2009: + * Fixed: Audio and synth tracks not processing when output path ultimately leads nowhere. (T356) + - ALL tracks now always animate meters, and process audio 'quietly', and synth tracks + process their gui messages, if output path leads nowhere. + - This fixes a few problems: For example fluidsynth was not allowing loading of soundfonts. + And synths would suddenly 'dump' any backlogged events when processing was turned back on. + And during play, when disconnecting and reconnecting the track outputs, the audio would be + out of sync because it was not processed during that time. + - See Audio::process1() to understand the changes more. Follow from there to SynthI, SynthIF etc. + * Fixed: Minor issue with port 0 display in track list port column for synths, from previous fix. (T356) +17.11.2009: + * Changed again: Arranger: Track list: Left click synth track's port column now lets you choose a port. (T356) + * Fixed: Do not list synths as instruments in ports/synths settings window. (T356) +16.11.2009: + * Added: Script functionality moved from PianoRoll to song class, available in main menu (under 'Midi') + and drum editor (mg) + * Added: 'Add synth' sub-menus now automatically assign the instance to a free midi port. (T356) +15.11.2009: + * Added: Added 'Add synth' sub-menu to main 'Edit menu' and Mixer 'Create' menu. (T356) + * Changed: All audio track types now start with two channels and 0db volume. (Input tracks remain muted as usual). (T356) + * Fixed: Organ synth: Drawbar harmonics and sustain midi controllers were not working. (T356) + - Applied auto-bias corrections. +14.11.2009: + * Added: DoubleSpeed plugin script for PianoRoll (mg) + * Fixed: Disable Python ifdefs (mg) +13.11.2009: + * Feature: Mixer labels: Auto-Font-Size(TM) using Appearance Settings font # 6. Word wrap (only with spaces) supported. (T356) + - The mixer labels will try to fit the text, trying font size from font #6 point size down to point size = 5. + * Feature: Arranger: Track list: Right-click 'Add ...' now lists soft synths ! (T356) + * Feature: Arranger: Track list: Left/right click synth track's output port column now shows synth gui ! (T356) + * Changed: Midi track info: Removed redundant track name box, changed label to behave like mixer strip. (T356) + * Fixed: Appearance Settings: Manual entry into font name boxes now works. (T356) + * Fixed: Appearance Settings: Added tooltips to font #0 - #6. Explains which font does what. (T356) +12.11.2009: + * Fixes: Some Python API refcount code added (mg) +10.11.2009: + * Added: Effect disable/enable + add/remove track to Python API (mg) +09.11.2009: + * Feature: Added 'Echo recording to output' button to midi track info panel. (T356) + - Turns on or off echoing of incoming record events to output device. + * Fixed: Midi tracks not recording when no output device selected. (T356) + - Now tracks will record with no output device selected. + * Fixed: Problems since increasing number of midi ports from 16 to 32 several months ago. (T356) + - Added Xml::parseUInt() and ::uintTag(), utils.cpp:u32bitmap2String() and string2u32bitmap(). + - Fixed saving and loading of input port mask in med files. + - Fixed display of input port mask in track info panel. +08.11.2009: + * Added: First test shot at part managing app in Python (mg) + * Added: Python api functions for selected track + import of part file (mg) +06.11.2009 + * Fixed: Python configure.ac problems. (T356) + * Removed: musewidgetsplugin (QT3 Designer widgets plugin) which may cause CVS build to fail with libtool2. (T356) + - Infamous '-o' trick no longer required to build from CVS. Removed until further notice. +04.11.2009 + * Added: Shortcuts to drumeditor + pianoroll: goto current pos, scroll left + right (mg) + * Fixed: Added command line switch (-y) for enabling Python control - disabled as default (mg) + * Added: Shortcut keys added to pianoroll and drumeditor (mg) + * Added: Startup dialog showing 'good to know' info, can be disabled (rj) + * Added: Song info dialog, can be used to record song related arbitrary text information (rj) + * Changed: the output limiter is now configurale, and by default off (rj) + * Fixed: Midi loop recording now honours the transport cycle record mode setting. (T356) + - Cycle mode REPLACE: Only record notes in current loop. Erase any previous loop notes from rec stop pos to loop end. + - Cycle mode NORMAL: Same as REPLACE, but don't erase any previous loop notes from rec stop pos to loop end. + - Cycle mode MIX: Keep all recorded notes from all loops. + - Use the transport record mode OVERDUB or REPLACE as usual to either mix with or replace existing track notes. + * Fixed: Midi record (incl. new part, looping, part auto-extend) now honours the arranger snap selection. (T356) + - Previously the left and right ends of the part would always be 'snapped' to bars, and any new notes recorded + past the end would not snap the part. + * Changed: muse/mpevent.h: Changed MREL list from using audioRTalloc to midiRTalloc. (T356) + - This must have been a mistake? midiRTalloc was not even being used anywhere before. The comment lines gave clues. + * Fixed: Multiple copies of wave events appearing in wave parts after resizing part. (T356) + - Changed EventList::find() to respect wave or midi. D'oh! Missed this obvious one from changes I made many months ago. + * Fixed: Audio loop recording now respects arranger snap setting. (T356) + - Previously the left and right ends of the part would always be 'snapped' to bars. + * Fixed: Audio recording now respects punchin and punchout points. (T356) + * Fixed: Audio loop recording now works (currently replace mode only). (T356) + - WORK IN PROGRESS: Only overwrite (replace) mode supported. Working on overdub mode... + - If recording is started INSIDE the loop points, then allowed to loop, the + 'zeroth loop' wave contents will be 'shifted' back to the left loop point. + This may have to change if mix mode is to be supported. In other words + keep that 'zeroth' portion of wave in place. May change it anyway. +02.11.2009 + * Added: Midi track controller + audio track volume to Python interface (mg) +28.10.2009 + * Fixed: No, or badly shifted wave recording, since libsndfile 2008-05-11 (T356) + - Fix for recorded waves being shifted ahead by an amount equal to start record position. + - Removed _recFile->seek() in AudioTrack::record(). Since libsndfile 2008-05-11, "seeking past + end of file during write" is allowed, which caused problem with the line seeking the record + file to an absolute frame which *included* the recording start position. +25.10.2009 + * Added: Mute functionality to Python interface (mg) + * Fixed: Midi mixerstrip mute update issues (mg) + * Fixed: initialization in pandelay ladspa plugin (rj) +21.10.2009: + * Added: functions for looping to Python interface (mg) +19.10.2009: + * Added: more functions to Python interface: deletePart, set position of locators, get/set song + length, get division, set midi track parameters (mg) + * Added: now possible to create and modify parts via Python bridge (mg) +18.10.2009 + * Added: backported ladspa plugins doublechorus and pandelay from svn-muse (rj) + * Fixed: Mixer was not updating when a midi track's channel was changed. (T356) + - Created a new song changed flag SC_MIDI_CHANNEL and used it to only update mixer midi strips, + not the whole mixer. Changed AudioMixerApp::songChanged() and ::updateMixer(). + * Fixed: Mixer was not shrinking enough when a track was removed, leaving space between strips. (T356) + - Added a couple of lines to AudioMixerApp::updateMixer() STRIP_REMOVED section. + * Fixed: Bug with reading soundfonts from song dir fixed (rj) +17.10.2009 + * Examples: added some example scripts, DoNothing and RemoveShortEvents (currently requires PyQt4) (rj) + * Added: more tags to plugin format in pianoroll, see readme in dist: share/scripts (rj) + * Added: Updates to Python API, now possible to modify part data. Needs a lot of testing (mg) +16.10.2009 + * Added: Added a few functions to Python remote API (start/stop playback + location queries) + * Feature: Each drum instrument listed in the drum map now has a playback 'volume' setting. (T356) + - Currently it affects playback only. I am looking to maybe add record level, too. + * Changed: Default drum map velocity level 3 (110) and 4 (127), now 127, 110. (T356) + - To allow easy (no key hold) drawing of default 110 velocity notes. + (Hold shift = 127, ctl= 90, shift+ctl = 70) + * Fixed: Drum editor controller graphs now align perfectly with editor canvas. (T356) + - Changed DrumEdit::newCanvasWidth(). + - Tested OK with various appearance themes, and various vertical splitter positions. + * Fixed: Drum map length, velocity level, and volume columns rapid mid-/right- clicks causing left double-clicks. (T356) + - Now the columns can be quickly mid and right clicked (decrement/increment). + * Fixed: Fluidsynth now realizes that a soundfont was located in the song-dir and then omitts + the path in the configuration data. (rj) + * Changed: Changed the format of the datafile for the automation option in the pianoroll + Mathias, we can wrestle about it later ;-) (rj) +15.10.2009 + * Feature: First version of MusE remote Python control (mg) + * Fixed: Drum canvas 'select' functions not updating, can't copy/cut etc. (T356) + - Added updateSelection() to the end of DrumCanvas::cmd(). Tested OK. +12.10.2009 + * Feature: External scripting functionality added via PianoRoll menu: (mg) + PianoRoll scans INSTPREFIX/share/muse/scripts and ~/.muse/scripts for executables, which modify part + data via data stored in temporary file + +25.08.2009 + * Proposal: new default colors for various stuff (rj) +12.08.2009 + * Fixed: bug 2811156, soft synth and marker window no longer appear when hidden for XFCE window manager (rj) +15.07.2009 + * Patch: from bug 2819312 (by Gerardo Exequiel Pozzi) added. Allows muse to launch with never glibc. The fix is + perhaps not fully understood but it looks harmless. (rj) +09.07.2009 + * Changed: Track info program, vol, and pan spinboxes now lose focus with one enter press instead of two. (T356) +05.07.2009 + * Fixed: Small fix on behalf of T356, Jack should not be started if running -a (rj) + * Fixed: Help menu -> Report a Bug: Set address to current muse org bug address. (T356) +01.07.2009 + * Fixed: Dropdown menus in transport no longer grab focus, make space start/stop work again (rj) + * Fixed: Dropdown in Mastertrack editor no longer grabs focus (rj) + * Feature: Added denormal protection, by default on, can be turned off in global config (rj) +25.06.2009 + * Fixed: Recording of midi sysex was not working. (T356) + - My fault since recent midi sync changes. Fixed the last few lines in alsaProcessMidiInput(). + * Fixed: Segfault when certain movements are done in track list. (T356) + - Added valid track check to RESIZE section of TList::mouseMoveEvent(), + and a few other places. +23.06.2009 + * Testing: A fix for some Jack-2 net problems... (T356) + - Added missing break statements, and JackTransportNetStarting detection + (hard-coded as '4' for now so that muse will build with Jack 1 and 2 - we need + config detection of Jack version!) to processSync(), and JackAudioDevice::getState(). +21.06.2009 + * Feature: Added Jack freewheel mode. (T356) + - Dramatically speeds up bounce to file and bounce to track operations. + With freewheel enabled, you don't have to wait for Muse to play the song + at normal speed while bouncing - it goes as fast as possible. + - Added configuration option for it. See 'Global Settings -> Audio'. +20.06.2009 + ======================================= + * 1.0rc3 tagged (rj) + ======================================= + * Feature: Jack transport master functionality added. (T356) + - Allows other Jack client apps to properly disply Muse's current bar, beat, and tick. + - Especially useful for songs with tempo and time signature changes. + - It is activated / deactivated by clicking on Muse's transport 'Master', + or Muse's graphic Mastertrack window 'Enable'. +17.06.2009 + * Fixed: Segfault after creating simpledrums instance, then adding a midi track. (T356) + - Return non zero in SimpleSynth::getPatchName(). +15.06.2009 + * Removed: Some code in jack driver which may cause shutdowns or static noise with Jack version 1 (T356) + - Tested several hours here, no shutdowns or sudden static noise. Thanks to the Jack team for that one... +13.06.2009 + * Fixed: New midi right-click popup menu 'add/set event' and 'erase event' not working for drum controllers. (T356) + - Also, on 'add/set', added check and ignore if an existing event value is already equal. + * Fixed: Midi track info vol, pan, prog 'Rec' buttons were allowing duplicate events. (T356) + - Added check for existing event in Song::recordEvent(). + - Also added check and ignore if event value is already equal. +10.06.2009 + * Fixed: Link error concerning libmidiedit.a and CtrlEdit.a (T356) + - Somehow the list of link libraries was out of order. Reordered, tested OK. +05.06.2009 + * Fixed: Users in some locales reported audio automation save/load corruption. (T356) + - Changed CtrlList::read() to use QString and QLocale instead of strtol() and strtod(). + - Checked: Other places using QString::toDouble() work OK because QString will fallback + to 'C' locale if formatting using current locale fails. (Hmm... But is it a speed hit?) + * Fixed: When linking, get errors concerning uuid functions not found. (T356) + - Added a section in configure.ac to test for uuid.h and libuuid. + - Added uuid lib to list of linked libs. + * Fixed: Midi port controller values not erased upon song load. (T356) + - There were leftover ghost values in the controller graphs between song loads. + - Added MidiCtrlValListList::clearDelete(), called from Song::clear(). + * Added: Right-click automation popup menu to all midi controller knobs/sliders. (T356) + - Contains add/set event, and erase event. + - When activated by the muse mixer midi controls, it 'prefers' selected parts on the track + over unselected parts, otherwise it chooses the first part found. If no part is found, + it creates a new one to contain the event. + - When activated by pianoroll or drum editor controller graph, it uses the currently + selected part (within the editor). + - Adding 'previous event', 'next event', 'erase range' and 'clear automation', just like + the audio automation popup menu, will take more time. Not implemented yet. + * Disabled: Midi mixer strip automation type button. (T356) + - There is no midi automation recording mechanism (yet). Disabled to avoid confusion with users. + * Added: Some new instrument .idf files submitted by MST (Michael). (T356) + - Akai SG01v, Korg MS2000R, Korg X5DR, Korg X50, Waldorf MicroQ. +02.06.2009 + * Applied: Some patches by Mandriva packagers. (T356) + - muse-1.0-fix-str-fmt.patch for deicsonze printf fix. + - muse-1.0-linkage.patch fixes compiler hang up at deicsonze.cpp. +01.06.2009 + * Fixed: Instrument editor 'Save as' was not working right. (T356) + - Was overwriting existing instrument. + - Now prompts for new instrument name. + * Added text in ctrl view to explain how to add controller values (rj) + +24.05.2009 + * Fixed: Missing uuid header in two files. (T356) + - My fault. Added include uuid/uuid.h to songfile.cpp and pcanvas.cpp. + * Fixed: Bounce to track: Wrong message "Select one audio output track", to "Select one target wave track". (T356) + - My fault. Message is displayed when there is one output and one or more wave tracks, and the user has clicked + on the output but not a track, too. + * Added: Start 'Wave editor' edit menu item, with configurable shortcut key. (T356) + - This will handle mutiple wave part editing. The existing right-click wave part popup menu + 'wave edit' item did that too, but now has been reverted back to opening a single + wavepart only, just like midi parts. + * Streamlined: All reading of 'part' xml is now done by a new routine. (T356) + - Replaced new PartCanvas::readClone(), and existing Part::read(), with standalone readXmlPart(), + in order to block creation of parts with mis-matched type, which don't belong on a track. + - Allowed mixed part .mpt files (midi and wave), and made a new clipboard type 'text/mixedpart'. + - Mixed part files can be dragged, imported or pasted to either a wave or midi track, and only the + relevant parts will be created. + - Added warning dialog showing how many, of how many total, parts couldn't be created. + - Added a parameter to Event::write() and EventBase::write() to force full wave file paths to be stored. + Used for copying, pasting, dragging, importing, exporting parts, but not for the song file itself. + * Added: Right-click wave part popup menu now has 'export', just like midi parts. (T356) + - As mentioned above, the full wave path is stored so there's minimum confusion when re-loading + the export, unless of course the file moved or was deleted etc. + * Fixed: Some issues with clones, controller events, and port controller values. (T356) + - It means "What you see on the controller graph is what you get, when you move the play cursor." + Port controller values are used when moving the cursor, they make the knobs move and send + values to the midi port. However, during play, they are not used, the song's controller events + themselves are used. Synchronizing these two mechanisms is what this is all about. + Fortunately, during play, "What you see on the controller graph" is ALWAYS correct, and is sent + to the midi port. + - TODO: Not quite done yet. Some functions may not update port controller values properly still, + like splitting or gluing clone parts. +06.05.2009 + ======================================= + * 1.0rc2 tagged (rj) + ======================================= + +02.05.2009 + * Feature: Right-click popup menu on a clone part now has "Select N clones", where N is number of clones. (T356) + - Major addition: Part "clone chaining system". (See part.cpp for new functions). Speeds up searches for clones. + * Feature: Added 'Paste clone' to arranger edit menu. Pastes clones of copied parts. (T356) + - 'Paste' will behave as always, only making a fresh copy of non-clone parts, while cloning clone parts. + - 'Paste clone' will always make a clone no matter if the parts are clones or non-clones. + * Feature: Added 'Paste to track' and 'Paste clone to track' to arranger edit menu. (T356) + - 'Paste' (and 'Paste clone') now attempt to paste to the original track(s) which the parts belonged to, + or if the original track has been deleted, then the current track. + 'Paste to track' and 'Paste clone to track' paste all copied parts to the currently selected track, + which was the previous behaviour of 'Paste'. + - Much work went into making sure that all scenarios work with these features, like copy/paste, drag/drop, + drag/drop .mpt part files, drag/drop between different instances of muse etc. + * Fixed: Importing or dragging midi part file (.mpt) into muse now supports multiple parts in the file. (T356) + - Changed MusE::importPartToTrack(). + * Fixed: Midi record into existing part past part end, in 'Replace' record mode, works now. (T356) + - Finished an erase events 'TODO' block in Song::cmdAddRecordedEvents. + * Fixed: Midi record into existing part, past part end, was decreasing part aref count, causing de-clone of clones. (T356) + - Removed extra "part->events()->incARef(-1)" from Song::cmdAddRecordedEvents(). + * Changed: Number of midi ports from 16 to 32. (T356) + * Added: Muse application desktop file, and added installation of it plus the muse icon, upon 'make install'. (T356) + - Desktop file submitted by Orcan Ogetbil. + - Note if muse is installed to /usr/local, the desktop file might not find the icon. + * Fixed: "-mcpu= is deprecated" compiler warnings. (T356) + - Changed configure.ac to use -mtune and -march. + * Speedups: Some heartBeat routines (such as Meter) were constantly drawing, wasting time and causing flicker. (T356) + - Also fixed Track Info midi detect light, and Midi Sync lights. + * Fixed: Midi strip vu meters now have a peak indicator. (T356) + * Fixed: Audio mixer strips now update when config minimum meter/slider value changed. (T356) + - Also fixed blocky 'aliased' drawing at low signals / low minimum meter settings. + - Changed Track::_meter and ::_peak from ints to doubles for more accuracy, eliminate 'false' draw update triggers. + * Added: Configurable shortcut key: "Transport: Goto start". Default 'W' key (as in reWind to start). (T356) + * Added: Appearance configuration button: Clear background picture. (T356) + - Also fixed Appearance::apply() to clear the string if selected. + - Also fixed Arranger::configChanged() to set canvas null background QPixmap. + - This means clearing the filename in the 'select picture' dialog also works now. + * Changed: Selected cloned parts now draw (inverted) dashed border, just like unselected parts. (T356) + * Changed: Part drag-clone key from Shift-Ctrl back to Alt. (T356) + - My fault. Was changed to Shift-Ctrl, but Ctrl is for selecting all items in a row or limiting movement to x or y. + - Still not a good thing. Some desktops even reserve Alt, Shift-Alt etc. for window move, snap etc. + - TODO: Must find a way to override desktop setting. Without Alt, we don't have enough keys to work with! + Don't want user to have to disable setting. + * Cleanups: Moved some methods outside of Part and Track classes which I had put inside them. (T356) + - Methods like addPortCtrlEvents() deletePortCtrlEvents() etc. + * Changed: Muse wants qt >= 3.2, but some .ui files had version 3.3. (T356) + - Changed editinstrumentbase, editgainbase, aboutbox, configmidifilebase, gensetbase, midisync, + fluidsynthguibase, and vamguibase .ui files. + * Fixed: Midi Track info panel was allowing track name change to an already existing name. (T356) + - Fixed Arranger::iNameChanged() to warn. Changing the name in the arranger Track List already warns OK. + * Fixed: Crash or bizarre behaviour when undoing a track rename operation. (T356) + - Replaced default simple Track class assignment operator with custom method. Added a flag parameter to + Track::clone and Track copy constructors to indicate partlist is simply assigned, not parts cloned. + Also removed the lines reassigning each part's track (!). Can get away with this since track rename + is the only operation to use that, but something better would be needed if more 'normal' behaviour + was needed in copy constructor and assignment operator ! +05.04.2009 + * Fixed: Arranger part cloning works now! (Hold shift-ctrl while moving part - note dashed border on cloned parts). (T356) + - In Song::cmdChangePart() do not call "oldPart->events()->incARef(-1)" if new part is clone of old part, + (that is, old/new parts' eventlists point to same eventlist). + - Changed from 'alt' to 'Shift-Ctrl' button combo to activate cloning in Canvas::viewMousePressEvent(). + Alt is reserved for moving the whole window (on my machine), so most people probably never knew about cloning? + - This also fixes a reference count problem when renaming a part, ref count was being dec'd past 0. + Quite possibly fixes some other issues, too. Testing... + * Fixed: Transport window was disappearing by itself. (T356) + - Removed WStyle_Tool from Transport constructor. Seems to test Ok now. + - Gave it a caption "Muse: Transport", to appear on task bar. + * Fixed: Big time display now shows MTC minutes, seconds, frames, and subframes. (T356) + * Fixed: Wave editor MTC cursor time readout was not right. (T356) + - Use samplepos to set pos2 value in WaveEdit::setTime(). +03.04.2009 + * Followup: Track info panel program, volume, and pan were not allowing editing values. (T356) + - Fixed the track info heartBeat function. + * Followup: Some more changes to respect MidiDevice open flags, set in midi config window. (T356) + - Strangely, midi config 'write enable' lights still weren't stopping events from being played, + even though the port was clearly unsubscribed successfully for writing (!) + Also, strangely, only if Jack Midi was disabled, some device putEvent() error messages were appearing. + I expected the messages to ALWAYS occur but it didn't happen, even though events were always played. + - Added MidiDevice::_writeEnable and ::_readEnable, set when the device is opened or closed. + - Changed the various ::putEvent methods to respect _writeEnable. (_readEnable not used yet, because + port unsubscribtion for reading IS working - events stop arriving). + * Added: Instrument definition file for playing to an Emu 4MBGSMT SoundFont. (T356) +01.04.2009 + * Fixed: Midi config window: Clicking on green in/out enable lights was not actually dis/enabling in/out. (T356) + - As initiated from MPConfig::rbClicked(), MidiAlsaDevice::close() was seeing the NEW flags, not the old. + So, in MidiAlsaDevice::close(), removed _openFlags check, and added snd_seq_get_port_subscription() check. + - Tested Ok disabling/enabling ins/outs, and clearing/setting port's device. + * Fixed: Muse was not storing midi port 'openFlags' in the song files. (T356) + - Muse could read the old 'record' flag and the new 'openFlags' tags, but only stored the + old 'record' tag (well, it was actually storing rwFlags by mistake). + - Added the necessary tag to file write. (Related to the fix above - now it stores the port in/out enable). +01.04.2009 + * Fixed: Compile problem with muse widgets plugin "undefined reference to `main'". (T356) + - Added -c to musewidgetsplugin_so_CPPFLAGS in muse/widgets/Makefile.am + - Re-ran automake, configure, built, tested ok. + - To be tested by users... + * Fixed: Compile error: "editctrlbase.cpp:53: error: invalid use of incomplete type 'struct PosEdit'" (T356) + - Added a section to editctrlbase.ui + - To be tested by users... +31.03.2009 + * Feature: Midi file export: Configuration options added for 2 or 4 byte time signatures + note off optimizations. (T356) + - For 4 byte timesigs: Add fixed "metronome" value of 24 (once per quarter-note), and "32nd notes per quarter-note" value of 8. + - For note off optimizations: Replace note offs with zero velocity note ons. + * Fixed: Midi track info panel now updates when external changes occur, such as keyboard program changes. (T356) + - Changed track info window from songChanged based updates to periodic heartBeatTimer based updates. + * Feature: Added midi input detect indicator to track info panel. (T356) + - Detects all note on-off, controller, aftertouch, program change, and pitchbend (but not sysex or realtime) + events on the selected channels, on the selected midi ports. + * Fixed: Midi program adjustment controls now respond when external program changes occur. (T356) + - Added a section to handle ME_PROGRAM in MidiPort::sendEvent(), so that visual controls can update, + such as trackinfo 'program' , and pianoroll 'program' controller adjustment knob. + * Fixed: Some issues with 'Follow Song' setting and position cursor position/visibility. (T356) + - Added 'xorg' in ppos calculations in Canvas::setPos() (and others like WaveView, but that still isn't quite right.) + - For windows which have an appreciable x origin (space at the left of the contents), the play cursor was + too far right or not visible sometimes, especialy with large horizontal zoom, particularly the arranger. + With 'Follow Continuous', the play cursor should now stay about in the middle of the windows. + With 'Follow Page', the view should now more or less always move in full 'pages'. +27.03.2009 + * Fixed: Track info 'instrument patch' list box was not correct when selecting another track with unknown patch. (T356) + - Broken last fixes. + * Improved: Support for & < > \ " characters in xml files. (T356) + - Fixed xml.cpp + - Many places in muse can now use them (ex. track name, instrument names/patches/controllers etc.) + - TODO: Writing: Must still check for places which manually use Xml::nput, put etc, but at least muse + should now read them all without trouble. + * Fixed: Instrument Editor was still asking to save sometimes even if user clicked save already. (T356) + - Call instrumentNameReturn() patchNameReturn() and ctrlNameReturn() from various places, to force update. + * Feature: Redesigned Midi Sync Editor and sync system. To allow multiple inputs/outputs, and more. (T356) + - See tooltips or click on What's This to see detailed explanations of each item. + - TODO: Only realtime MC events are tested at the moment. MMC and MTC are not tested, or not working yet. + - TODO: Fix midi sync clock input. Observed problems: wandering, even reversing(!) song cursor time. + Can be stored in .med file that way (tempomap->fix is negative number!) making a bad file which won't play. +12.03.2009 + * Fixed: Global configuration dialog 'Displayed Resolution', and added 'Midi Resolution' boxes. (T356) + - Separate midi/gui configurations were allowed, but not implemented. + - TODO: Now make the 'Displayed Resolution' setting actually do something. + The 'Midi Resolution' currently sets BOTH what should be separated into midi and gui. + Only config.division is used throughout muse, not config.guiDivision. + Also, now that these settings are working, they reveal some issues with drawing, such as + not enough pianoroll zoom-out ability with high resolution. + * Improved: Midi Clock output. Was improper, causing external devices to misbehave. (T356) + - Changed MidiSeq::processTimerTick(). + - Tested: With RTC resolution at 8192, the target device slowly drifted out of phase with muse after + about 20 bars. With RTC resolution at 1024 it was actually more stable (100 bars or more), despite + more clock jitter. + Used an equalization scheme to balance the time out. Must test if stability improves without this scheme. + MidiSeq::processTimerTick() still needs some tweaking. + - You may see severe phase difference if moving the cursor around and playing. Try playing from the song start. +19.02.2009 + * Patch: Patch to find best available ALSA timer. (T356) + - Submitted by Pedro Lopez-Cabanillas. Patch was named "muse_alsatimer_2nd.patch". + - "This patch adds selection logic to ALSA timer initialization, trying to find + the best available ALSA timer (a non slave timer with lowest resolution). + Currently muse uses only the ALSA system timer, even when the system has an + ALSA RTC or ALSA HPET drivers available, which are probably better for many users." + * Patch: Patches for printf%zd/size_t, and grepMidi/gcc4.4 issues, and fix some compiler warnings. (T356) + - Submitted by Orcan Ogetbil. + - Patches were named muse-size_t.patch, muse-gcc44.patch, and muse-fix-some-compilation-warnings.patch + * Fixed: Some more issues with manipulating drum tracks and underlying controller events. (T356) + - Changing a drum track's output port, (and allowing muse to change the whole drum map), + was not changing existing port controller values. + - Also changing a track from 'midi' <-> 'drum' was not changing the port controller values properly. + - NOTE: I still observed occasional 'ghost' midi port controller values. Tracking this issue... + * Fixed: Seek or Init Instrument with XG instrument caused double loading of controller init values. (T356) + - Moved controller init code from MidiPort::sendGm/XgOn() to a new MidiPort::sendGm/Gs/XgInitValues() + and changed Audio::initDevices() to call them. + * Added: 'Value' readout on menu toolbar (beside 'Cursor' readout), in Drum Editor. (T356) + - Just like pianoroll, except it only shows controller values. + - Now you can read the values you are drawing on the Drum Editor controller graph. + * Fixed: Some issues with configuration, and appearance window. (T356) + - Muse now remembers configured 'selected track foreground/background' colours. + - Added "Midi Editor -> controller graph" colour configuration option (default navy blue). + - Fixed Arranger and Style/Fonts windows not showing current values. + * Fixed: Segfault with Appearance configured to show events, with a part tick > 0 on part canvas. (T356) + - Added limit checks on from/to variables in PartCanvas::drawItem(). + * Fixed: Midi controller graphs were displaying 'quantization' vertical lines instead of 'snap' lines. (T356) + - Changed CtrlCanvas::draw() to use raster instead of quant value. + - Also changed gray background colour to darkGray, so 'major' snap lines can be seen. + * Added: Send 'null' midi controller parameters after each RPN/NRPN controler event. (T356) + - Symptom: After muse sends any RPN/NRPN controller event, operating the 'data' (MSB/LSB) + midi controllers affects that RPN/NRPN controller. + - Cause: The RPN/NRPN parameters are still active, open to any subsequent data adjustments. + - Cure: Send 'null' parameters after each RPN/NRPN event, so that subsequent data adjustments + are sent there instead. + - Added adjustable 'null' parameter numbers to the instrument editor. Typically they should + be '127/127', but they are adjustable (select an unused controller number) if desired. + They can also be turned off, if desired, by selecting 'off/off', so that muse will NOT send + them. Turning them off is useful for instruments which do not use RPN/NRPN controllers. + * Changed: GS/XG instrument patches high banks from 18 to 128, 17 to 127, and 5 to 65. (T356) + - Was it a typo? XG specifications say high banks should be 128, 127, 65 etc. + - Also, in instrument editor, reorganized XG Drum patches into Drum Kits and Sound FX. + - TODO: Other instruments may have to be changed, too. + * Fixed: Track info 'Rec' button: If new part was created, it was too short even to see. (T356) + - Changed Song::recordEvent to round (tick + 1) up one bar. + - Added separate record buttons for program (and bank), volume, and pan. +18.02.2009 + * Added: Missing midi program controller to pianoroll/drum edit controller graph and adjustment knob. (T356) + - Since the range is limited to 1-128, this only edits the program byte, NOT the program MSB or LSB! + - Since only the program byte is edited, adding new values to the graph uses the CURRENT + program MSB and LSB, as shown in the track info pane (H-Bank/L-Bank). + If the current program is 'unknown' (all off), then the graph uses MSB=off, LSB=off if the song type + is GM, and MSB=1, LSB=1 if not. + - I considered using the 'previous value' on the graph for the MSB/LSB, but then there would be + no way to quickly set the MSB/LSB when adding new values to the graph. + - The only other way is to draw on the graph, and then use the midi event list editor to change + the program MSB/LSB values. + - TODO: Fix the track info H-Bank/L-Bank/Program behaviour. Do not allow program to be 'off' + if H-Bank/L-Bank are not 'off'. + * Changed: Instrument editor behaviour. Allow a 'user' instrument directory PLUS the 'built-in' directory. (T356) + - Muse now looks first in the MUSEINSTRUMENTS directory (default MUSEHOME/muse_instruments, where MUSEHOME + is default HOME/), then looks in the 'built-in' instrument directory (/usr/share/muse etc.) + - Instruments found in the user directory OVERRIDE instruments with the SAME NAME in the 'built-in' directory. + - This allows users to quickly experiment with existing instruments while keeping the same instrument name. + - TODO: add a 'Delete' button to the instrument editor. + * Added: Pitch bend sensitivity controller to fluidsynth. (T356) + * Fixed: Organ synth: Volume not working. (T356) + - There is no volume gui control to return proper min/max values. + - Added a trap for CTRL_VOLUME in Organ::getControllerInfo() and + set min/max to 0/127. + * TODO: Fix some broken VAM synth midi controllers with improper range. (T356) +09.02.2009 + * Fixed: Drum map: Grey vertical lines not proper when map header rearranged. (T356) + - Used header->mapToSection when drawing grey vertical lines in dlist.cpp. +08.02.2009 + * Fixed: Drum map - Changing ANote, Channel, Port now updates controller graph and knob. (T356) + - Changing ANote, Channel, or Port of a drum map item now updates the controller graph + and adjustment knob. Useful for XG/GS drum controllers. + - TODO: Fix 'Undo' changing ANote, Channel, Port. + * Fixed: Drum map - List item drag and drop works properly now. (T356) + - Was not manipulating events properly, although port controller values were still OK. + Useful for XG/GS drum controllers. + - TODO: Fix 'Undo' of drag and drop. + * Changed: All calls to some new message sending routines with direct calls. (T356) + - Replaced all calls to msgSetTrackOutChannel, msgSetTrackOutPort, msgRemapPortDrumCtlEvents, + and msgChangeAllPortDrumCtrlEvents, with direct calls (song->remapPortDrumCtlEvents etc.), + bracketed by audio->msgIdle(true) and audio->msgIdle(false). + - For complex operations, 'msgIdle' technique seems to be preferred over sending messages. + - Tested such operations while in stop mode, and while playing. Tested OK. +06.02.2009 + * Changed: Hard coded LADSPA paths in plugin.cpp and ssplugin.cpp to include /usr/lib64/ladspa + and /usr/local/lib64/ladspa. (T356) + - Suggested by Orcan Ogetbil + - Note that the environment variable LADSPA_PATH still overrides these hard-coded paths. +06.02.2009 + * Patch applied: Removes duplicate implementation of fast_log*() functions in ssplugin.h (T356) + - Submitted by Orcan Ogetbil +05.02.2009 + ======================================= + * 1.0rc1 tagged (rj) + ======================================= +04.02.2009 + * Fixed: Track info panel 'Rec' button not changing existing values on controller graph. (T356) + - Name changes: MidiCtrlValList::add, ::del, ::find to ::addMCtlVal, ::delMCtlVal, ::findMCtlVal + to make it easier to spot all usages of them. + - Simple fix in MidiCtrlValList::addMCtlVal: Return false if the value is already found for the part. + - TODO: It takes three 'undos' to undo the 'Rec' button push. It is because prog, vol, and pan + are changed. This should be unified into one undo... + +01.02.2009 + * Fixed: Compile error on 64-bit systems, in audiotrack.cpp at cacheJackRouteNames(). (T356) + - Changed from unsigned int pair key, which required pointer conversion, to AudioTrack* pair key. + - Test OK (on my 32-bit system). ** Need 64-bit users to test it. ** + * Fixed: Segfault when playing a note in a drum map, when the note's port says 'none'. (T356) + - Added a line in the 'don't echo controller changes back to software synthesizer' block of + Audio::processMidi(), to check valid device. + * Fixed: Missing or stuck notes or events on recording (or rec-armed only) midi track. (T356) + - Symptom: Playing live (rec-armed only), or recording, on a midi track gives stuck or + missing notes and other events. Very annoying bug! + - Cause: A single list was used for recording midi events, while muse was also reading from that list. + - Employed a 'flipping' two-list technique for MidiDevice::recordEvents(). + - In Audio::processMidi(), process one list while MidiDevice::recordEvent() writes to the other. + * Fixed: Manipulating controller events in midi track parts was not changing midi port controller values. (T356) + - Symptom: Change a part's midi controller events, or move or delete a part, or delete a track, then the underlying + midi port's controller values are not altered, leading to 'phantom' or 'ghost', or duplicate controller values, + even where there is no part or no track, or no controller values where there should be ! + - Oops, how did this major bug go unnoticed so long?... + - Major rewrite: Created a struct MidiCtrlVal{int val, Part* part}, and changed class MidiCtrlValList from + std::map to std::multimap + Changed MidiCtrlValList::add(int tick, int value) to MidiCtrlValList::add(int tick, int value, Part* part), + and MidiCtrlValList::del(int tick) to MidiCtrlValList::del(int tick, Part* part), + and added MidiCtrlValList::find(int tick, Part* part). + Changed Song::addEvent(), Song::changeEvent(), Song::deleteEvent(), Song::addPart(), Song::changePart(), + Song::removePart(), Song::insertTrack2(), and Song::removeTrack2() to make sure port controller values + are added/removed properly. + Changed a few other things to make it all work. + Reasons: The Part* member was added to each controller value item in the list, so that the system can + know exactly which part was responsible for putting a value in the list. + This helps when we have overlapping controller values from events of different parts on the same port and the same channel - + if one of the parts is deleted or moved, the overlapping values from the events of the other part are NOT disturbed + within the port's controller value list. + The list was changed from 'map' to 'multimap' to accommodate the multiple values from events of different parts. + - NOTE: When there are overlapping values from events of different parts, the system will arbitrarily choose the + first value it finds at a given time. I considered 'mixing' the overlapping values together + (by averaging, or maybe highest/lowest value), but I felt it would just cause more confusion for the user. + Therefore it is up to the user to be aware of overlapping controller events and deal with them. + If you are looking at a controller graph and it shows a particular value at some time, but the + midi knobs/sliders and actual midi output does NOT correspond to what you are seeing, then + most likely ANOTHER part on the same port and channel has an event at that same time, and that + event's value is likely the one that is being used by the system. + * Fixed: Changing a midi track's out port or channel was not updating the ports' controller values. (T356) + - Changed MidiTrack::setOutPort() and MidiTrack::setOutChannel() calls to new MidiTrack::setOutPortAndUpdate() + and MidiTrack::setOutChanAndUpdate(), which make sure the port's controller value list is properly updated. + - Part of the larger fixes above. + * Fixed: Midi adjustment knob on controller canvas was not working after moving the part to another track. (T356) + - Added some code to CtrlCanvas::songChanged() to set curPart and curTrack and update the knob, + upon SC_PART_MODIFIED. + * Fixed: Clear midi input transforms when song cleared. Update transform dialog when song changed. (T356) + - Symptom: Repeated loading of songs causes duplication of midi transforms, causing .med song files to grow big ! + - Added clearMidiInputTransforms() to midiitransform.cpp, called by Song::clear(). + - Added updatePresetList() and slot songChanged() to MidiInputTransformDialog, triggered by Song::songChanged. + - Added some code to readMidiInputTransform() to **auto-eliminate** duplicate transforms in existing .med files. + - Still some 'quirkiness' with the dialog buttons, but it works better now. + - ALSO: Applied those same fixes to midi transforms and the midi transform dialog. + * Fixed: Notes not recorded to track for a drum map 'instrument item' having non-default (track) port. (T356) + - Changed to drumRecEvent.setPort(port) in 'Track::DRUM' section of 'if(recording)' section of Audio::processMidi() + so that buildMidiEventList() would accept the notes. + * Fixed: Removed jack midi port names from audio in/out port lists. (T356) + - Added JACK_DEFAULT_AUDIO_TYPE to jack_get_ports calls in JackAudioDevice::inputPorts and ::outputPorts. + * Fixed: Notes were being mixed up when switching a track type between midi and drum. (T356) + - Changed to drumMap[pitch].enote in 'Drum -> Midi' section of TList::classesPopupMenu(). + * Completed: Moving multiple events from multiple parts when editing in pianoroll or drum editor. (T356) + - Work had begun several commits ago. Completed. + - Now you can select and move multiple events from different parts in the editors. + * Feature: When editing multiple parts in the pianoroll or drum editor, controller graphs are now overlaid! (T356) + - When you are editing more than one part at a time in the editors, the controller graph will overlay + all of the graphs together! + - The currently selected part will show its controller as normal blue columns, as before, but the other + unselected parts will draw their controllers as a gray 'ghost' outline on top. + - TODO: Add menu items, hot keys etc. to cycle through each part (in case there are no notes to select in a part!) + * Improved: Support for GS/XG midi drum controllers. (T356) + - Added MidiPort::drumController(). Tells if an event is a drum controller event, according to the port's instrument. + Does it by looking up the event in the instrument's controller list. + Would prefer a 'marker flag', eg use the event 'dataA' high bit to mark as drum controller event, but it's too risky! + Used MidiPort::drumController() a dozen or so places where drum controller events needed remapping/manipulation etc. + May be a speed hit with many/large controller graphs? Test further... + - Added code to update port controller values when changing drum map ANote, channel, or port. + - KNOWN BUGS: Still a few loose ends to tie up: Port controller values (but not track events) may not be correct when: + 'Swapping' (by dragging) items in the drum map, and + loading a song with a drum map which had 'swapped' (by dragging) items. + Some stuff (midi value adjustment knob) is not updated when changing drum map ANote, channel, or port. + Workaround: Be sure to select another drum map item, then reselect the changed item again, after such operations. + * Changed: All softsynth midi controllers now have default initial values. (T356) + - Added default initial values to all softsynth controllers such as fluidsynth's controller map. + - Added 'initval' argument to all ::getControllerInfo() methods, which is passed to the newly created + controller (new MidiController) in SynthI::initInstance(). + - These initial values will then show on the various gui midi adjustment controls, knobs etc. + * Changed: Fluidsynth master gain and reverb initial settings. Gain was too loud and there was too much reverb. (T356) + * Fixed: Follow up - some issues with instrument editor. (T356) + - Instrument editor was sometimes falsely detecting instrument had changed. + - Also, do not list 'internal' instruments like generic midi, soft synths, vst etc. + - Also, upon 'Save As', prompt for a new instrument name if the user hasn't changed it, to avoid duplicates. + - Remove any unsaved (new) instrument when moving to another instrument, closing etc. + - Fixed up tab order of instrument editor controls. + - TODO: When muse wants to close, trap it in the instrument editor so we can save. + * Fixed: Problem in xml parser. '&', '"' etc were being read as '&&', '""' etc. (T356) + - Added a couple of lines, and removed one, in Xml::stoken(). + * Fixed: Zero bias midi controllers (with a negative minimum value, like 'pan') weren't working right. (T356) + - Broken after last changes. Added an updateBias() line to MidiController::read() 'controller' tag end section. + * Added: Send all instrument controller initial (default) values to all of a port's midi channels, + except where explicitly initialized by the song. (T356) + - Added some code to MidiPort::setMidiDevice to initialize controllers from instrument, if needed. + - When setting a midi port's device (such as in Settings->Midi Ports, or simply when loading a song), + then any specified controller initial values in the instrument are sent to ALL of the port's channels, + EVEN if the controller is NOT in the song. This ensures better consistency between songs, so that + chosen controllers are not left in undesirable 'leftover' states. + (Taken from important comments in MidiPort::setMidiDevice(): ) + For example: A song is loaded which has a 'reverb level' controller initial value of '100'. + Then a song is loaded which has no such controller (hence no explicit initial value). + The 'reverb level' controller would still be at '100', and could adversely affect the song, + but if the instrument has an available initial value of say '0', it will be used instead. + - It is desirable to have defaults for some controllers, but it is wise to have NO default for certain + other controllers, like the 'reset all controllers' and 'sustain' controllers (actually, zero would be OK). + * Changed: Clicking Midi->InitInstrument (or moving to song position 0) now initializes controllers + from instrument controller initial values, if they exist, or previously hard coded values if not. (T356) + - sendGmOn() and sendXgOn(), which are called via Audio::initDevices(), now use instrument controller + initial values if they exist, or the previously hard coded values if not. + * Changed: Non-softsynth non-GM drum tracks: Patch popups now show all drum AND melodic patches on ANY channel. (T356) + - For drum tracks, if the song type is not GM, and the track's port is not a softsynth, then all patches + including drum AND melodic are shown for ALL channels when 'select instrument patch' popup is clicked, + regardless of the patches' 'drum' flag setting (in the instrument editor). + (Softsynths handle their own patch popup lists). + - Added a 'bool isDrum' parameter to all populatePatchPopup() methods, which is passed 'true' only + if it's a drum track, and changed a couple of lines in the only class which uses the drum flag - MidiInstrument. + - Previous behaviour was to show drum patches ONLY on channel 10 of drum tracks. + - Reasons for change: 1): A midi device might have a non-standard drum channel(s), so drum patches + as well as melodic patches are shown for all channels. 2): Since any channel can be used in the drum map, + melodic patches are shown as well as drum patches so that any patch can be selected for any channel. + NOTE: Each of a drum track's channels which are used in the drum map should be set to a patch number, + otherwise it doesn't work right ! (**) This is true for softsynth devices too ! (**). + So it was imperative that the user be able to select ANY patch on ANY channel, to suit their setup, + for flexibility. + (If that same flexibility were applied to regular midi tracks (non-drum tracks), it might make the + 'drum' flag for patches obsolete, since there would be no reason to filter them from the list !) + * Changed: All midi controller event values sent to a midi port are now constrained (limited) to the port's + instrument controller's range (if that instrument controller exists). (T356) + - Example: Incoming events from a midi keyboard's pitch wheel range from -8192 to 8191, but it is + desired to limit that range to, say -200 to 8191. One could use the midi input transformer to + accomplish this, but instead now you can simply adjust the chosen instrument's pitch controller range + (in the instrument editor), and then the pitch wheel's range will be limited to that range. + - This only affects playback events (and therefore 'live' incoming events), but does NOT affect + actual recorded data, so that by simply readjusting the instrument controller's range, + or by changing instruments, the range can be restored with no loss of recorded data range. + * Fixed: Cleaned up all .idf files and changed ranges of all 'zero-bias' controls (-64/63 'pan' etc). (T356) + - Many .idf files had bare '&' characters in them, causing corruption of names and values when reading. + - Also turned on the 'drum' flag for ALL drum patches in MANY .idf instrument files. + Some .idf's I was uncertain about, and did not change : AlesisQS6, Waldorf Q. + * Changed: Fluidsynth pan controller range from 0/127 to -64/63. (T356) + - To be consistent with .idf file changes. + * Replaced: All direct calls to MidiPort::setHwCtrlState() from GUI thread, with new Audio::msgSetHwCtrlState(). (T356) + - My fault, I was not paying attention to iter-thread communications. + * Optimizations: Optimized MidiPort::setHwCtrlState(), MidiPort::sendEvent(), and calls to MidiPort::setCtrl(). (T356) + - Optimized MidiPort::sendEvent(). + - Replaced code in MidiPort::setHwCtrlState() with more optimized code. + - Replaced several clumsy calls to MidiPort::setCtrl(), which checked for and created the controller, + with a new optimized MidiPort::setControllerVal(). +06.01.2009 + * Fixed simpledrums/ssplugin.cpp to build with recent Ubuntu 8.10 (FN) +17.08.2008 + * Feature: Muse now has an instrument editor, complete with a midi controller editor! (T356) + - Click on the menu "Midi->Edit Instrument". + - You will see a sysex editor there too, but it is non-functional. (Use the midi event editor instead). + - >>> Tooltips and "What's This?" are provided with IMPORTANT information. <<< + >>> If you want to understand how to use instruments, patches, and controllers in your song, <<< + >>> READ THEM! <<< + * Added: Environment variable MUSEINSTRUMENTS, so a (writable) instrument directory can be chosen + instead of default /usr/share/muse/instruments etc. (T356) + - Also added display of environment variables recognized by muse to command line help (muse -h). + * Fixed: Popup displays of instrument patches to filter according to GM, GS, XG song type, and whether + on drum channel 10. (T356) + - Use the new instrument editor to set these GM, GS, XG, and drum filters. + * Changed slightly: Creation of a new drum track - initialize to channel 10 instead of 1. (T356) + * Fixed: Force audio prefetch seek when play is pressed. (T356) + - In Audio::seek, changed the call of audioPrefetch->msgSeek to force a prefetch, + to ensure the most recent data. Things can happen to a part before play is pressed + such as part muting, part moving etc. Without a force, the wrong (old) data was being played. + - If you perform those same operations while playing, there may be a few seconds delay before you + hear the changes (the play cursor must move a certain distance before they're heard). + - TODO: How to make the same thing happen when transport is externally started, such as from qjackctl. + OR: How to force a prefetch at specific places like when a part is muted, and when it is moved, + instead of just before play is started. That way the operations can be done quickly while playing. + * Fixed hangup: Upon loading of songs with fluidsynth soundfonts which can't be found. (T356) + - (!) Removed error message box from FluidSynthGUI::processEvent causing freezeup. + - You can still read fluidsynth errors by running muse on a command line. I figured it was + better to be able to load the song and to see errors, instead of just letting it freeze. + - This should now allow you to share fluidsynth songs with other people (without the soundfonts). + * Fixed: Audio aux tracks not working, intermittent. (T356) + - Aux functionality was intermittent depending on whether the aux had out routes, + and whether any tracks feeding the aux had out routes, and other factors. + - In Audio::process1, rearranged, and added, some code to make aux work all the time now. + * Speedups: To some songChanged() functions. Ignore unnecessary flags. (T356) + - For example simply adjusting midi gui controls would cause costly and + unnecessary rebuilding/redrawing of certain areas, like parts of trackinfo, and controller graphs. + - Noticeably less 'slugglish' when adjusting controls now. + * Fixed: Midi controller events not being added to midi port controller, after record with no part. (T356) + - Symptom: If you record midi controllers without first creating a part, muse creates the part + for you and creates the controller graph OK, but when you move the play cursor around, the graphs + have no effect. This doesn't happen if you first create the part to record into, or manually edit a graph. + - Symptom: As above, the graph is OK, but the controllers don't show up in the list when you click 'ctrl'. + - Changed a line in song::cmdAddRecordedEvents() to use addEvent() instead of adding directly to list. + * Fixed: Automatic detection of pitch bend wheel not working. (T356) + - Added some code to MidiPort::sendEvent to detect ME_PITCHBEND events. + - Note: There appears to be a sound system bug (using ALSA 1.0.15): The system will NOT deliver any pitch + bend events to muse until ANOTHER controller is detected, ex. move the modulation wheel THEN the pitch wheel. + Verified with another app - RG - and with a real midi hardware to hardware connection (not my KB's fault). + * Observed: Stuck or missing midi notes when recording or even just 'record armed only' 'live' playing. (T356) + - The sound system appears to be having occasional trouble detecting midi events, including note-off ! + Verified with muse and RG (using ALSA 1.0.15). Not sure why or when this started, seems early this year... + * Linked: All midi knobs and sliders with their labels. (T356) + - Now they work together when displaying and adjusting. + - After careful consideration of the meaning of 'off' in those + labels, you now double click the label to turn the midi control on/off. + Off does not mean 'zero'. Rather, it means: + 'Don't save this current value in the song file'. + When a midi control is 'off', loading the song won't initialize the controller with a value. + 'Off' means the current value is set at 'unknown'. 'Unknown' means the actual + 'behind the scenes' hardware value is the last value that was set. The knob or slider still + shows this value, or a default initial value, or if both of those are unknown, then 0. + * Changed: Midi and audio level slider/knob labels to show '---' for infinite attenuation. (T356) + - As mentioned above, the midi level slider labels can also show 'off'. + * Fixed: The new midi controller knob in pianoroll and drum editor. (T356) + - It was not adjusting anything. + * Fixed: Midi vu meters again. Now they should work! (T356) + - They were not responding to play events with an off velocity other than zero. + * Fixed: Marker view window doesn't remember if it is open or closed. (T356) + - Add a markerClosed function to app. + * Reverted: Back to audioRTalloc in mpevent.h (T356) + (!) - I had changed it to midiRTalloc, but that may have been causing problems like + midi shutdown (audio OK) after a few hours, and crash soon afterwards. + Verifying... No more midi shutdowns after a few hours, so far... + Ooops, not so fast, happened again... +30.04.2008 + * Fixed bug in drum editor. Dragging the splitter too far left causes runaway resize, stuck in loop. (T356) + - Tried several different arrangements, but QSplitter won't behave the way I need it to. Best I could do, so far. + - You may notice some strangeness, like the controller graph not aligning with the matrix, if the right edge + of the window is offscreen. + * Added 'add/set event' to audio automation right-click popup menus. Ancient request by R.J. (T356) + * Fixed arranger midi strip and arranger top controls not giving up keyboard focus after adjustment/entry. (T356) + - Further request by user G.B. Changed all relevant QSpinBoxes to custom SpinBox, which behaves like this: + Click up/down, or mousewheel, or hit enter with un-modified text (which means enter TWICE for modified text), + and the control will give up focus, thereby allowing you to use global shortcut keys afterwards. + Up/down keys still keep the focus. + - TODO: Piano roll and drum editor. + * Fixed major problem with lost jack routes upon file save, when save causes a jack shutdown. (T356) + - Symptom: You click save, but jack shuts down during the save, causing lost jack routes in the file. + - Fix: Cached the jack route names before file save, then used them during AudioTrack::writeRouting() xml code. + Note this doesn't actually stop shutdowns from happening - now it just saves your files without losing jack routes. + * Fixed mysterious intermittent wave part muting, as mentioned in 11.03.2008 (T356) + - !!! PartList and EventList are now sorted by frame instead of tick, for wave parts only. Because fetchData() + didn't like sorting by ticks. This is a radical change. So far, no other areas found requiring further coding, but... + * Overlapping wave parts and events now mix together, instead of one part or event taking priority over others ! (T356) + - Virtually no speed hit, since muse was already cycling through all the wave parts/events, + just not mixing them together. So the very LAST wave part/event in the part/event lists was + taking priority over others. + * Fixed default instrument midi controller min/max values. (T356) + - Symptom: Some pianoroll midi controller graphs much too small or too big, vertically. + - Cause: You added these controllers to your track as a midi instrument, ex. General Midi (GM), then you + changed the instrument, ex. to 'Generic Midi' or another instrument without those controllers, + which set improper min/max values. + - Fix: Added code to MidiPort::midiController() to set proper min/max values based on standard controller type. + However, if the original instrument used CUSTOM min/max values, the graph may still be distorted. + * Fixes to midi event list editor. (T356) + - Added true sorting of event list. Now you can click on column headers to sort as desired! + - Added formatted program number display (like 1-1-120) for 'Val B' column. + - Fixed Poly After Touch events display in list. They were being listed as Channel After Touch. + - Fixed crash when 'Delete events' clicked with no actual items selected. + - 'Edit Contoller Event' dialog: + - Fixed 'Create New Controller' popup list: Now it actually creates the selected controller. + - Fixed 'Program' controller not showing correct program after selecting other controllers in list. + - Fixed too high initial value displayed for controllers without an initial value in the instrument file. + - 'Enter Poly After Touch' dialog: + - Fixed uneditable note box. Switched from PitchLabel to PitchEdit. + * Feature added - Pianoroll and drum editor controller graphs now have a static manual adjustment knob ! (T356) + - Now you don't have to enter controller graph values to adjust a setting, just turn the knob. + * Changed 'Create New Controller' in event editor 'Edit Contoller Event' dialog, and 'add new...' controller popup + list in piano roll. (T356) + - Now they only list controllers not already added, instead of all of them. + * Fixed 'Position Edit' controls (0001.01.000 + up/down buttons) - click 'down' nothing happens. (T356) + - Added updateButtons() call to PosEdit::setValue(). + * Fixed Mixer midi strip variation, reverb and chorus send knobs not enabled after controllers added. (T356) + - Now you only need to create the controller to enable the knobs, allowing you to set a manual value without + having to actually create one or more controller events first. + * Fixed midi trackinfo pan value not the same as midi mixer strip pan value. (T356) + - Trackinfo pan now goes from 'off' (-65) to -64 to +63. + * Fixes to fluidsynth. Would crash when getting patch names from an 'unspecified' soundfont. (T356) + - In fluidsynti.cpp, various places check for FS_UNSPECIFIED_FONT only. Added check for FS_UNSPECIFIED_ID. + - Not sure if FS_UNSPECIFIED_FONT is redundant and unnecessary, but left it there anyway. + * Fixed old bug - IntLabel control - right click causes popup and runaway increment. (T356) + - Fixed NEntry widget. Same fix as for double entry widget (DEntry), somewhere way down on this change log... + * More fixes to wave part gluing/splitting/drawing/playing. (T356) + - Now all splitting/gluing of wave parts, even overlapping ones, even multiple times, should work. + - Fixed problem in WaveTrack::fetchData causing it to read too many samples of wave events. + * Fixes and changes to bounce functions. (T356) + - Fixed garbled target track or file. processWrite() was writing ALL the Audio Outputs to the file or track, instead of just one. + - Feature: Bounce to track (from menu): You now first select any single Audio Output track, and any single target Wave track. + - Feature: Bounce to file (from menu): You now first select any single Audio Output track. + * Fixed some problems with Mastertrack window. (T356) + - Mastertrack window was causing tempos to be inserted into tempo list, if window open when project loaded. + - Added signature list change event handling - to update signature value box. + - Fixed drawing of signature scale after signature list change. + * Fixed wave editor 'reverse' function crashing. (T356) + * Fixed track list not highlighting wave tracks (default green) when selected in the arranger window. (T356) + * Fixed midi VU meters, again. (T356) + - Borrowed idea from Muse 2. Self-decay the meters in midi strip code, rather than the midi thread code. + - The midi VU meters self-decay at a rate determined by the GUI update rate in the configuration. +11.03.2008 + * Fixed arranger controls not giving up keyboard focus after adjustment/entry. Requested by user G.B. (T356) + * Fixed gluing/splitting of waveparts. (Known bug of 02.02.2008 is gone now). (T356) + * Fixed playing, and arranger/waveeditor drawing, of glued waveparts. (T356) + - 'Working on' of 26.01.2008 is done. + - Drawing of waveparts, even 'glued' ones, now fully respects tempo changes. + * Fixed 'glued' mono + stereo wavepart drawing. Was drawing outside track if track height small. (T356) + * Fixed soloed/muted wavetrack audio 'bleeding' into other wavetracks. fetchData() was not checking isMute(). (T356) + * Fixed part colour popup to change unselected clicked item colour if no parts selected. (T356) + * Fixed recent possible accidental(?) change of tracklist xml tag 'header' to 'header1'. (T356) + - Muse was complaining: Tlist: unknown tag
at line 32 + * Fixed MREventList in mpevent.h, to use midiRTalloc instead of audioRTalloc. (T356) + - Possible accidental(?) coding error since there is no other usage of midiRTalloc at all in muse. + - If it does help at all, it might just ease RT congestion a bit. + * Working on MIDI VU meters. They're too fast to see with jack, but should be OK with dummy driver. (T356) + * KNOWN PREEXISTING BUGS + - If you move waveparts around AFTER the current play position, then play, muse actually plays the same + arrangement as if you had not moved the waveparts at all, just one time - rewind the play position and + it corrects itself. This is because muse does not prefetch the audio again after the movement of the parts. + Workaround - After moving waveparts, be sure to rewind the play position to a point AT LEAST before those parts. + - Wave parts will sometimes mysteriously go silent for no reason. Move the parts slightly, or reload, or do + certain other operations, then the sound comes back. Working on this important issue! +02.02.2008 + * Fixed a slight error in BigTime absolute display. Now shows proper absolute tick and frame values. (T356) + * Added an extra arranger wavepart right-click popup menu item - "file info". + Shows what wave file(s) are used by the wavepart event(s). + TODO: Either remove duplicate file names or list the files by event number. + Spice up with more info like wave starting/ending points etc. (T356) + * Removed some debug output lines from dummy driver - may have been causing intermittent crashes when moving position. (T356) + * Some more fixes to arranger partcanvas wavepart drawing - speeded up and tightened code. + KNOWN BUG: Does not correctly display more than one wave 'event' (file) per wavepart. (For ex. two waveparts 'glued' together). + Working on this issue ! (T356) +27.01.2008 + * Fixed MIDI mixer strip VU meters. Let there be light! Not the best solution, a choice between two so-so methods. + Looking at how to improve it... (T356) +26.01.2008 + * Pianoroll and drumedit now open at the current cursor position. (T356) + (The cursor position is that moving black vertical line on the time scale). + This means you just click on an arranger midi part where you want to open the editor. + * Arranger, pianoroll, drumedit and waveedit now stay at their current (left-side) position when you use the scale bar. (T356) + * Fixed 'end of part' drawing problems - now you are guaranteed to see about 1+1/4 extra bar after the end + of a pianoroll/drumedit (also compensating for drumedit drummap/canvas splitter), allowing you to + add/move/clone notes past the end and allowing muse to properly auto-extend the part (to the right). + TODO: Auto-extend parts to the left when necessary. (T356) + * Added vertical, and fixed horizontal, lasso/parts/events auto-scroll - even past the end of parts. (T356) + * Fixed drawing of wave parts in arranger. Now you can rely on the 'picture' of the wave inside the part + lining up correctly with the time scale, regardless of tempo/timesig changes in the song. (T356) + * More fixes to wave editor. Fixed drawing of markers - they were much too close together. + Added songChanged synchronization with arranger (you move/resize a wave part and the wave editor readjusts, etc.) + WORKING ON: In the arranger, if you move a wave part to the left, the wave editor will readjust but the + wave may be chopped off at the end. Investigating... (T356) + * Corrected the drawing order of items from ALL parts in pianoroll and drumedit. For multiple-part viewing. + WORK IN PROGRESS: Added ability to select items from different parts at once, and to move them. + For now, only items from the currently selected part actually move. (T356) + * Added small checkbox to Big Time display. Now you can switch between formatted or absolute time display. + Absolute is handy for syncing with another app, or just knowing, absolutely, where you are in the song. Absolutely. + Added ToolTip popups describing each 'group' of numbers (bars, beats, ticks etc). (T356) +20.01.2008 + (ml) + * Added function for deleting note overlaps in piano roll (usually makes fluidsynth grumpy - silencing the following note). + * Some work on opening the editor at current position and selecting the leftmost item + (ws) + * fixed hanging note when editing multiple parts in midieditor and + switching part +19.01.2008 (ws) + * fixed Song::changeEvent(): part tick offset was not used + * fixed removing of controller events in Song::deleteEvent(); this affects midi recording + in replace mode and controller editing +12.10 + * Fixed automation right-click popup menu 'prev/next event' not working after a tempo change. (T356) + - Now you are guaranteed to be able to navigate the automation events, regardless + of how many tempo or time signature changes are in the song, or if you change the tempo/sig(s) + AFTER adding automation events. +12.06 + * Fixed softsynths 'Fluidsynth', 'Deicsonze', and 'Fluid' to allow pitch wheel changes. (T356) + * Fixed softsynths 'Fluidsynth' and 'Deicsonze' to allow MIDI patch changes. (T356) + Note that I included MIDI patch change code in 'Fluid', but fluid is slightly broken + and still doesn't respond. 'Fluid' should be removed from muse. It's obsolete. Use Fluidsynth. +11.22 + * Fixed LASH loading and saving. (T356) + - Symptom - Muse fails building with error about 'lash_get_fqn' not declared in scope. + - Cause - You are building muse with LASH > 0.5.1, where certain header files have been removed. + - Fix - Replaced both calls to lash_get_fqn with QString manipulations instead. + * NOTE! I encountered a muse segfault when you use LASH to close the project. + It says 'received unknown LASH event of type 10' (which is LASH_Server_Lost), then it says + 'received unknown LASH event of type <>, then segfault and + a glibc backtrace due to 'double free or corruption'. Not a big deal, but this will need to be fixed. + * Tested OK saving and loading projects with LASH 0.5.4 + +09.02 + ======================================= + * 0.9 final tagged (rj) + no changes from pre3 + ======================================= + +08.22 + ======================================= + * 0.9pre3 tagged (rj) + ======================================= + +08.20 + * Fixed bug 1650953 - select and move segfault (T356) + - Symptom - In piano roll, select some notes and move them past the end of the part, + then muse crashes. Also occurs when pasting or adding notes past part length. + - Cause - Canvas was not adding the new resized part to the midi editor. Also a bunch + of other stuff needed to be fixed for it all to work OK. + * Fixed broken master list editor. Should also cure bug 1687166 (T356) + - Symptom - Open master list and nothing is listed (should be at least one default + tempo and one default time signature). Click to add new tempo or sig and muse crashes. + - Cause - Some code was added to lmaster.cpp: LMaster::updateList() which broke it. + * Added auto part resizing to drum canvas (T356) + - Symptom - In drums editor, there is no auto part resizing, like in piano roll. + - Cause - Missing all part resizing code. Added. + * Fixed intermittent crash when cutting a part. Improper 'delete while iterate' STL operation. (T356) + * Fixed arranger part selection - selected parts now draw on top of non-selected parts. (T356) + * Fixed arranger part operations (move etc.) to use selected part. (T356) + * Fixed arranger keyboard left and right previous/next part selection. (T356) + - Now you can use left/right arrow keys to cycle through parts in a track, + expecially useful for overlapping parts! + * Regarding part selection - A remaining problem is that there is no 'z-order' drawing + scheme. The part item list has no such ordering support. + - This means a selected part will (now) appear on top of others, but when unselected, + it will not stay on top. Adding that support could be messy. + - Best to leave it alone for now. At least you can (now) cycle through overlapped parts... + * Tested arranger part operations with worst case scenario - multiple tempo changes + and multiple parts. Test OK. All should be OK now. (T356) + * Added tooltip to song length box in arranger with text 'song length in bars'. (T356) + * Fixed wave editor - Black selection bar intermittent drawing. (T356) + - Symptom - In wave editor selecting a portion of the wave caused intermittent drawing + of the black selection bar. + - Cause - Unsure of exact cause or a permanent cure, but it's better now. + But it still draws intermittently if you zoom in (x magnify) very very close. + Working on this issue. + * Added feature - Wave editor now allows you to open multiple selected wave parts and + will display only those parts and you can edit them. Tested wave editor 'functions' + menu and it works OK on some or all selected portions of the multiple wave parts. + - This is in preparation for a possible automation viewer and/or editor. + - Work in progress. Some rough parts still to clean up. (T356) + * Fixed intermittent arithmetic exception crash in wave viewer. (T356) + * Fixed bad wave drawing above certain zoom level in wave editor. (T356) + * Enabled serial numbers in my deltaTick2Frame and deltaFrame2Tick routines, and + merged code. Makes it a bit faster. (T356) +======= +08.16 * Reverted change in synth.cpp, realtime playback of softsynths did not work (rj) + * fix for sustain pedal to work as suspected when looping. (rj) + * Above involved adding "managed-controllers", whenever a controller is found + time will tell if this is the right solution (rj) +02.13 + * Feature request: 1650957 space bar should start/stop playback fixed by + adding this possiblity, old style is possible with property setting in + configuration. (rj) +02.09 + * Fixed bug 1645575 - Eraser tool causes segfault in drum editor (T356) + * Added the project AUTHORS (whooo are you... who who...) (T356) +01.27 + * Fixes to remove lots of warnings and potential errors in the code (WillyFoobar) + (rj by proxy) + * Fix for bug #1074808 "NRPN - still 128 values?" from Sebastian Gutsfeld (rj) +01.06 + * Changed 'exit' to 'return' when plugins are invalid (rj) +01.05 + ======================================= + * 0.9pre2 tagged (rj) + ======================================= + +2007.01.03 + * Fixed some major issues with undo/redo. (T356) + - Symptom - Delete track(s), then undo, muse crashes. + - Symptom - Rename a track, then undo, muse crashes. + - Cause - 'Delete' destroyed the track(s), so undo would attempt to restore + non-existent object. Other problems caused rename crash. Still more undo/redo code + was causing problems, like left-over synth instances hanging around after loading a new song, + or crashing upon loading a new song if certain redo items were still in the redo list... + - Known bugs - DON'T rename a synth track then undo, muse still crashes. Not sure why yet. + After 'un-deleting' a synth track, you will have to open the 'MIDI Ports/Soft Synth' window + and manually restore its MIDI port. + Don't do anything too crazy like deleting multiple tracks while playing, might possibly crash. + After undeleting an audio wave track, its sound might not be sync'd with the rest of the song - + simply hit the fast-forward or rewind button to cure that. + * Prevented saving, and segfault upon loading, of routes in med file with empty names. (T356) + - Symptom - Jack shuts down, so instead of attempting to restart audio, you save your work, + but when you try to reload your song, muse crashes. + - Cause - Upon Jack shutdown, all audio in and out Jack routes were erased, and muse saved + the song like that. Upon reload, muse would crash due to the empty routes in the .med file. + - Note that this does not cure the original cause of this (Jack routes erased), so although you + can now re-load the song without muse crashing, you must manually restore all the audio in/out + Jack routes. So please try to restart the audio first. (Trying to fix this issue...) + * Add new soloing system. Check it out! (T356) + - Symptom - You click solo on a track but you hear nothing, and all other tracks are muted. + - Cause - Wasn't really broken, you just had to solo all other tracks in that routing path + to make sure whatever you were attempting to solo made its way to its destination so you + would hear it. + Inconvenient, yes. Especially with a large song with a lot of tracks, groups etc. + With this new system, this is done automatically for you. Even MIDI tracks driving synth + tracks, too. + - Known bug - If a MIDI track drives some external MIDI device which you feed the audio + back into muse, there's no way for muse to know how to couple the MIDI and audio in + tracks together. Sorry you'll have to manually solo both. + BUT - I'm CONSIDERING adding this - If an audio in track's name BEGINS WITH the name + of a MIDI track, I could couple them that way. For example - MIDI track named 'Track1' and + an audio in track named 'Track1 Input', then muse could mutually solo both tracks properly... + * Enabled MIDI mixer strip solo buttons. (T356) + * Some other minor fixups here and there. (T356) + - Other known bugs - Due to an earlier oversight, if you use your own custom LADSPA plugin + GUI's (see README.ladspaguis), QCheckbox and QCombobox controls may not automate quite right. + Note that this includes just one built-in custom GUI - for the 'TAP Reverberator' plugin. +21.11 + * Fixed loading of .med files, with plugins, created before muse-0.9pre1. (t356) + They will load, then save, correctly now. + - Symptom - Load an old song with plugins and some of the plugin controls can't be moved. + - Cause - Controller id's in med file mixed up, not save correctly, because of moving rack + plugins around, which never properly switched the id's before muse-0.9pre1. + * Fixed soloing (again). (t356) + - Symptom - Delete a soloed track, then soloing is messed up - other tracks may be muted but don't show it, + only way out is to reload. Speaking of which, loading also did not set track soloing correctly. + - Cause - Upon deleting a track or loading a song, track solo ref count was not updated. + * Added infrastructure for an improved soloing system, much more intuitive. (Not done yet!...) (t356) + * Fixed spelling mistake - Freeverb "Rooom" size. (t356) +13.11 + * By T356 + * More automation fixes. Everything should be working now, check it out! + * Although still no automation editor, all of these changes so far should help + manipulate and navigate the events. + * Fixed touch mode events storing, was not right. + * Fixed a couple of stray signal connects which may have caused wacky controls. + * Sliders, knobs and labels now respond to mousewheel and paging properly. + * Linked slider/knob labels with sliders and knobs so paging or mousewheeling + a label works smoothly and linearly, even with logarithmic controls. + * Fixed integer controls (like Glame Bandpass 'stages'). + * Fixed external plugin gui's to look like the built-in freeverb. This means + they now scale properly with different fonts. :) + * Hopefully the last of major automation conceptual changes - making sliders, knobs, + labels and checkboxes work together with the four automation modes, barring any fixes, + and a few tweaks to follow (like shift key for label mousewheeling, and how to make + a label stop updating so values can be entered). Some more right-click menu options + may follow (like store event, enable automation, enable interpolation). + Automation readme to come (need it!). + * Still to fix - Controls' right-click automation menu still a bit confused upon tempo changes. +10.11 + * reworked mute, old solution caused problems for solo + * solo is now united between midi and audio, they were previously + interdependant. This has the downside that if a soft synth is + soloed both the midi and the audio needs to have solo enabled (rj) + * fixed issue with hanging notes for softsynths when stop is pressed (rj) + * Backported fix from HEAD for using a file descriptor from two different + threads, should make it work somewhat better with SMP (rj) + * fixed faulty off value for aux when set to max (rj) + * Allow wheeling of tracks from track list (rj) +08.11 + * reenabled mute for outputs (rj) +07.11 + * Fixed timing bug causing MusE to depend on jack buffer setting + this needs testing, it involved uncommenting some code that might + have been commented for a reason (rj) +05.11 + * Added support for auto-scroll for other drag operations but + rubberband (rj) +04.11 + ======================================= + * 0.9pre1 tagged (rj) + ======================================= +04.11 + * Adopted RT locking method from 1.0 branch. (rj) + * Preparations for 0.9pre1 (rj) +31.10 + * By T356 + * Fixed old bug - DoubleLabel right click causes popup and runaway increment. + * Currently the increment/decrement is fixed at 1, so that's why it doesn't + work for pan or other controls with 1.0 or less max. + - So fixes to that are next... +29.10 + * By T356 + * Changing global tempo now updates things. (Like resizing wave tracks). + * Fixed segfault upon lengthening a blank new wave track part. + * Removed some thread-unsafe code from my first patch + * Fixed ladspa plugin automation not working until plugin displayed. + * Improved automation and ladspa plugin automation behaviour. + - While stopped and in touch mode, clicking an automateable control immediately + writes the value to the list, so you don't have to press play then stop + just to store one value. + - Smoother slider transitions from last touched value to previous stored values, + so that they don't suddenly 'jump' to previous stored values when you let go. + - Checkboxes now automated. Their behaviour in touch mode is slightly + different than sliders - they remain 'touched' until you stop, but store + only up to the last toggle done. + - Checkboxes now check as soon as you click them. + - Sliders now have 'mouse cursor capture (tm)' so you can actually grab onto + the thumbs even if they are moving too quickly due to automation. Paging can + still be done with right button. + - Sliders and knobs now work properly if you 'page' them (click outside the thumb + or dial). + - Added right-click popup menu on all automateable controls with + previous event (seek) + next event (seek) + erase event (if cursor is on one) + erase range (between left and right markers) + clear automation (clear all events) + Known bug: Becomes slightly confused if tempo is changed after doing automation. + Workaround for now: Press play to update the cursor to a new position. +04.10 + * Select the right item when items are stacked on top of each other, for pianoroll + and arranger (rj) + * Do not display resize cursor when last track cannot be resized (rj) +03.10 + * Apply effect rack before sending aux, changed after discussion with Thorsten Wilms (rj) + * Auto assign internal softsynths upon creation (rj) + * New method for pasting parts. If several parts are pasted they are now spaced + according to their original spacing. This only works reliably when the copied parts + are all on one track. (Possibly copying parts from several tracks should be + disallowed), fixes bug #1516294 (rj) + * Muting of midi-tracks no longer mute input, bug #1092343 (rj) +01.10 + * Fixed issue with playing of controllers when moving playhead. basically + all events from all parts where played at the beginning, fixes bug #1316542 (rj) +30.09 + * Cached peak files are now updated when wave files are more recent, bug #1469177(rj) + * Fixed bug with recording notes to existing part, bug #1552783 (rj) +29.09 + * MusE now asks when imported wave file has differing samplerate, bug #1428248 (rj) +28.09 + * Always restore sequencer configuration even when song + is loaded without config, fixes bug #1092289, midi mixer settings not restored (rj) +27.09 + * Optimizations and fixes to rubberband scrolling (rj) + * Aux changed to be affected by volume and pan (rj) + * Aux now affected by mute (rj) +26.09 + * Fix for pianoroll selection of events in/outside loop with respect to part offset (ml) + * Added lasso/rubberband scrolling in arranger, drumedit and pianoroll, bug #1057732 (rj) +24.09 + * Followups by T356 + * Fixed rack plugin change not clearing automation + * Fixed moving an empty rack position + * Fixed moving a plugin onto itself + * Changed colours of audio output and wave track + strip names to match icon colours +20.09 + * Fixed aux sending (rj) + * Patch from terminator356 to fix logarithmic feedback to plugin sliders (rj) +19.09 + * Various fixes from Torsten Duwe (rj) + - deicsonze undefined returnvalue + - vam uninitialized value + - 64bit fix for calling external wave editor + * Fixed multiple part undo for move,drag and copy in arranger, bug #1516298 (rj) + * Fixed multiple note undo for move and drag in pianoroll (rj) + * Fixed cursor placement in List Editor upon deleting events bug #1417718 (rj) +16.09 + * Following changes by { terminator356 [at] users [dot] sourceforge [dot] net } + * The changes can be applied to muse-0.7.2preX or muse-0.8.1 and work fine in both. + * Fixed soloing. Also multiple soloing now allowed. + - TODO: Soloing of tracks which feed a group. Workaround for now: Solo the tracks AND the group. + * Enabled solo buttons on the mixer strips. + * Fixed major issues with rack plugin moving, saving and loading. + * Fixed problems with multiple tempo changes and incorrect wave part lengths. + * Changed plugin code to use double instead of float to stop certain errors, and consistency. + * Fixed some minor spelling mistakes. + * Fixed issues with audio track automation. + * Fixed very 'jumpy' volume sliders and pan knobs under automation. + * Fixed several other small problems. For example a duplicate define in song.h + * Changed the way audio track automation works. + - For ease of use, the current mode now remains selected, even after a file write and re-open. + - To reduce the chance of accidental changes, for added visual warning, Touch and Write modes + colour the automation mode box red. + - Write and Touch modes: Only if the controls were touched, changes will be stored when + the transport is stopped. Since the current mode remains active, you can move to + another part and do some more automation. + - Write mode: The controls are updated with stored values until you touch them, then they + store from the time you hit play to the time you hit stop. If you touch the controls AFTER + you hit play, you may get unexpected results so remember to initialize that 'first value' + (at the time when you hit play), since muse will NOT 'fill in' from the time you hit play + to the time you first touched the control, with the value of that first touch. (Maybe support + this later). + - If you load a plugin preset, if the control values don't seem correct, try setting the track's + automation to 'Off', because the track will usually be on 'Read' - reading stored values. + - TODO: Muse really needs an automation editor/viewer! Perhaps integrate with wave viewer. + Also, add one more automation mode: 'Instant mode'. + * Hmmm, oh yes - added full LADSPA plugin automation. Check it out! + Compatibility with existing med files' Plugin section should be OK, but if you open an + existing med file with plugins, and the plugins' control values are no longer correct, + let me know. See comments (with these changes applied) audiotrack.cpp around line 557. + - TODO: Checkbox automation not working right. We need a better checkbox - one which checks + as soon as you press down! Also would like to add bypass and mute automation. +05.08 + * Fixed build without fluidsynth (rj) +14.07 + * fluidsynth: fixed pitchbend events, fixes bug #1404212 (ml) + +13.04 + * Editing volume and pan with keyboard on audio strip now works (rj) + * Fixed issue with recording audio, fifo could overflow when + when running with small jack sizes (rj) + * fixed storing of wave files with relative path when located + "under" the project path (rj) +28.03 + ======================================= + * retagged app.cpp and Yamaha-Motif-Rack.idf (rj) + ======================================= + * fixed build bug in app.cpp (rj) + * fixed bug with Yamaha-Motif-Rack.idf (rj) +27.03 + ======================================= + * 0.8.1 tagged (rj) + ======================================= + * some lash fixes (rj) +26.03 + * Added next/prev marker, keyboard shortcut (rj) +25.03 + * Reverted fix for silent softsynths, synths were not silenced + upon [stop], gah! (rj) + * Added LASH support (patch from evermind @ gentoo) (rj) +21.03 + * Added Motif-Rack idf from europeen (rj) +19.03 + ======================================= + * retagged dummyaudio.cpp (rj) + ======================================= + * Fixed build bug in dummyaudio.cpp (rj) +18.03 + ======================================= + * 0.8 tagged (was 0.7.2) (rj) + ======================================= + * Added idf files from linux chaos + Waldorf-Q, Yamaha-01v,Yamaha-Motif, Yamaha-P100 (rj) +05.03 + * Arranger no longer performs "seek" while editing + when in ext-sync mode (rj) + * Play/Stop disabled for all when in ext-sync mode (rj) +02.03 + * more work on extern sync, loop works better (rj) + * no-audio + extern sync does not hang anymore (rj) + * muse now starts even if jack is not found (rj) + * fixed a number of divide by zero errors mainly affecting zoom (rj) +11.02 + * Added menu alternative for storing plugin preset (rj) +06.02 + * Updated/improved swedish translation. (rj) +04.02 + * Fix for softsynths going silent under load. Sometimes events arrive + with time=0, this is now handled. Why it happens is yet unknown.(rj) +02.02 + * check audioDevice and _client for validity (rj) +13.01 + * amd64 fix in driver/rtctimer.cpp (ws) +09.01 + * Added patch for vam from mane_grotesk (rj) +07.01 * On drumtracks, there was no check for non-existing ports. If a drum + instrument was configured to output to a port other than standard for + the track, there was a segfault. Now output to non-existing ports are + simply ignored (ml) + +05.01 + * Added updated french translation from Intent (rj) + * Fixed crash bug in pianoroll when moving several + events outside part. (rj) + * Fixed esc key in drumeditor name edit (rj) + +03.01 + ======================================== + * 0.7.2pre5 (final!) tagged (rj) + ======================================= + +02.01 + * Added popup when enabling rec for a track unable to create it's + wave file (rj) +2006.01.01 + * Enlarged listeditor dialog (FR:1392090) (rj) + * Changed preset file extension of vam presets to .vam (rj) + * No longer translates dir name for drummaps (rj) + * Fixed crash bug when arrowing left in an empty editor (rj) + * Added F2 name edit in drum editor (rj) + * Added up/down arrowing in drum editor (rj) +30.12 + * Fixed bug in detection of RTC (rj) + * Removed ugly printouts from probeing for browser (rj) +29.12 + * Reawoken Organ: (rj) + - read/write current settings + - automation of all parameters + * Reawoken VAM: (rj) + - read/write current settings + - automation of all parameters + - preset dialog +28.12 + * Changed audio prefetch buffer to be dynamically sized after the + jack buffers (rj) +27.12 + * Fixed allocation of wave memory when reading and writing sound files + fixes problems with audio-operations (rj) + * Fixed problem when external wave editor was not correctly defined (rj) +26.12 + * Race condition between threads caused lockup upon quit and load project. + Fixed by checking if sequencer is actually running before making + internal IPC call, made major difference (rj) +21.12 + ======================================== + * 0.7.2pre4 tagged (rj) + ======================================= + + * Now dynamically extends parts if events continue after end and + ignores pastes before part, fixes bug:1363066 Paste outside segment (rj) +18.12 + * ExtSync improvements, handles relocation of playhead during stop + (on my gear atleast), does not work during play (rj) + * fixed bug building synths (introduced during last checkin) (rj) +14.12 + * fast_log10 exchanged for HEAD version (old version doesn't work with + gcc4), fixes problem with meters and sliders not working (rj) + * Added patch from Martin Habets fixes core dump problem while + building with LADCCA (rj) + * Added patch from LarryL autoconf changes to synth building (rj) + * Fixed drag in effect rack that it does not start directly (rj) + * Adapted optimization parameters for gcc4 (rj) +13.12 + * Possibly fixed issue with crashes during load of projects + by putting delays between start/stop of sequencer and actual load + operation. This should make sure that the process loop is idle. (rj) + * now tries both RTC and Alsa (in that sequence) for main timer (rj) + * added checks if alsaDevice is valid (fixes several crash bugs when + muse goes zombie). Should be done in more places. (rj) + * added check if audio is really running when jack calls process. + Sometimes it's called when it should not. (rj) +12.12 + * updated muse_ru.ts from Alexandre Prokoudine (ws) +11.12 + * removed assert, fixes bug:1376783, deleting track with pianoroll open + crashes muse +09.12 + * Added patch from Daniel Cobras regarding compatibility with 64-bit + systems (rj) + * fixed crash bug when muse tried to show plugin-guis when the + plugin did not exist (rj) +29.11 + * fixed seg fault when deleting last note in pianoroll editor (ws) +13.11 + ======================================== + * 0.7.2pre3 tagged (rj) + ======================================== + * Changed back to AlsaTimer (rj) +8.11 + * fixed typo in share/locale/Makefile.am +7.11 + * removed some dubious locks in thread start (ws) +19.10 + * Fixed bug 1329537 (User defined fonts not updated) (rj) +13.10 + * added emuproteus200.idf from Piotr Sawicki (ws) + * updated polish translation +12.10 + * added polish translation from Piotr Sawicki (ws) +26.9 + * Handle restart of Jack and restart of audio (rj) +21.8 + * Added new timer classes from Jonathan Woithe. (rj) +14.8 + * Solo for audio tracks improved by removing the possibility to mute Output tracks (rj) + * Implemented REPLACE for midi recording (seems to sometimes miss notes though...) (rj) + * Fixes for Appearance dialog, background pic, event display (rj) + * Marker window now toggling (rj) + * Added "raise" to more dialog windows (rj) + * compress event display in parts somewhat (rj) + * reverted pipeline again...bah...think before you change (rj) + * bounce now stops correctly (rj) + + +13.7 + * Fixed position of import of wave files, inserted at cursor, now inserts at mouse (rj) + * Added drag&drop support to plugin racks in mixer, internal and to/from disk (rj) + * Changed the plugin pipeline depth to 5.. four is too little.. though it should be runtime extendable, wip (rj) + * Added patches from Daniel Kobras that correct errors in EditMetaDialog + and old html docs. (rj) + * Added uppercase filters to midi import (rj) + +12.7 + * Added quick search to LADSPA plugin dialog (rj) +11.7 + ======================================== + * 0.7.2pre2 tagged (rj) + ======================================== +10.7 + * Added possibility to edit selection of wave in external editor (ml) +9.7 + * Added gain modification functions + misc to waveedit (ml) +8.7 + * Updates to wavefile modification, implemented normalize, fade in, fade out and reverse of wavefile selection. + Removal of wavefile undo data on shutdown (ml) +7.7 + * Added undo/redo handling for modifications of wavefiles + mute of selection in waveedit. expect updates. (ml) +6.7 + * Added selection to waveeditor + ignore unhandled keyevents in waveeditor (ml) +4.7 + * Implemented resize of waveparts (ml) + * Added Idf files by Steve D for Roland FantomXR, SRX-02 and SRX-09 (rj) +2.7 + * Fixes for waveedit: offset problem fixed (no more empty waveedit windows), initial zoom value to + roughly match size of part (ml) +01.7 + * Fixed bug with loading of background pixmaps (rj) +28.6 + * Only send MMC continue message when in playback state when seeking (rj) +22.6 + * Fixed bug 1199171 (Time change: a part does not completely fit into 4 bars), part + resize problem (ml) +21.6 + * Added scrollwheel support for vertical scrolling in arranger, pianoroll and drumeditor (ml) + * Fixed bug 1056996: Multiple selection, but single paste. Possible to copy several parts in arranger (ml) +20.6 + * Fixed bug 1092424: bug in reposition of instruments in drumeditor (ml) +19.6 + * Added recall of last entered directory in filedialog for global and user mode + recall of + opening mode (global, user or project) (ml) +18.6 + * Fix for drumtracks and part export/import + * Fix for opening Midi port/softsynth dialog when already open (now raised and set to active window) (ml) +13.6 + * Added export/import of midi parts (.mpt-files), drag & drop also possible (ml) +05.6 + * Fix for generating midi clock, needs field testing. (rj) +04.6 + * Added fixes to AlsaTimer and DummyAudio from Jonathan Woithe (rj) + * Added fix so AudioPrefetch is initialized upon starting the sequencer, + which for instance happens when loading a song (rj) +24.5 + * Added Roland E-28 idf file from Jonathan Woithe (js) +16.5 + * Updated ladspa-gui for newer version of tap-reverb (rj) +15.5 + * Allows for several midi devices with the same name, they are now renamed + internally so they have a unique name. This is a partial fix for synths + that do not correctly give each instance a new name. (rj) +12.5 + * s1 softsynth added square wave with parameter (rj) +11.5 + * Fix for bug 1198747, tests for fluidsynth and rtcap in configure.ac (rj) + * Fix for bug 1198744, added patch for reading browser setting from config + without crashing, from Philip Nelson (rj) + * Fix for bug 1188767, downmix won't stop playback until reaching the + right marker (rj) +08.5 + * the instrument list in the drumeditor now has fixed width when resizing the window (finally, it made me nuts) (ml) + * added nudge event position left/right w keyboard (ctrl+left/rightarrow as default) to pianoroll and drumeditor (ml) + * added fixed length command to pianoroll, uses snap-to value (ml) +07.5 + * added snap/quantize patch from Petr Mazanec (snap of notes in pianoroll+drumeditor is now controlled by + snap, not quantize) (ml) + * simpledrums: added save/load of setup to file, bugfixes. + simpledrums version is now 1.0 (go figure! ;) (ml) +06.5 + * No longer crashed when enabling audio metronome when there's an aux (rj) + + ======================================== + * 0.7.2pre1 tagged ! (rj) + ======================================== +04.5 + * extern sync algorithm "reworked" (rj) +1.5 + * simpledrums: backported fixes for channel number + memory deallocation, + fixed issue with clearing of sampledata, I hope (ml) +30.4 + * fluidsynth: bankno is saved to project, switched to hbank from lbank (ml) + * Now really runs libtoolize in autogen.sh (rj) +29.4 + * make sleep() in watchdog thread non interruptible to avoid + watchdog timeouts at startup (ws) + * added vst preallocation of memory "fix" (rj) + * More fixes to filenames containing dots (for instance wca files) (rj) + * Added Yamaha-PSR275 instrument file by Petr Mazanec (rj) +27.4 + * fixed patch-info issue in Fluidsynth (bug 1191214) (ml) +25.4 + * fixed bug w paste in drumeditor, 1189267, patch from P Mazanec +18.4 + * removed file ltmain.sh; this file is now created by "libtoolize" + command in autogen.sh (ws) +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) +15.4 + * Added a redundant test that makes midi input work on PPC for some + reason. (will research a better fix for 0.8) (rj) +10.4 + * Added an error popup when importing wave files fails. (rj) +30.3 + * [DONE] midi -> edit instrument is not implemented -> remove it (js) + * [DONE] same for random rythm gen -> is not implemented -> remove it (js) + * [DONE] BUG: pianoroll editor -> tools resize wrong, they should stay on max they need instead of width fit (js) + * have to go to the dentist on 7.3.2005, god help me, i fear this will kill me (js) +29.3 + * README changed some links (js) + * README added some icons to arranger (js) + * added support for german localisation (30% translated, still quite bad) (js) + * help: changed muse homepage location (js) + * more to come (js) +28.3 + * Fix for overflow when importing midi (rj + ml) +6.3 + * Added some fixed on dialog handling, mainly "esc" will close the widget now. (js) + * As usual added the icons which i forgot to add in the last release + * Corrected the drums icon which was a wave icon (in the dropdown, arranger) +26.2 + * Added Roland-SCD70.idf from Emiliano Grilli (rj) +09.2 + * fixed bug with sending start play w/ midi-clock (rj) +01.20 + * Added RT support and better working timing to DummyAudio backend (rj) + * New version of MC505.idf from Wim VW (rj) +01.18 + * Added script to convert MusE 0.6 songs to 0.7 format (rj) +01.17 + * Midi clock sync first test, unstable (ml) +01.14 + * patch from Erwin Scheuch-Heilig to allow for libtool >= 1.4 (ws) +01.10 + ======================================== + * 0.7.1 tagged ! (rj) + ======================================== + * ZynAdd instrument def file added (ml) + * Now the length is updated when importing a midi file to a project, + fixes bug: 1056994 (rj) + * Disabled freewheeling for bounce functions (song.cpp:_bounce) (rj) +01.09 + * Fixed bug: 1094622, MidiTransform now uses new controller types (ml) + * Fixed bug with custom plugin guis that caused them to be + uninitialized (rj) + * fixed just introduced jack graphChanged problem (rj) + * Fixed a crash issue with Thread class (only did happen when you mess around) (rj) + * Synti tracks don't crash when being renamed (rj) +01.04 + * Fixed a crash problem when using several fluidsynths (rj) + * Now fluidsynth restores most memory upon deletion + (but not all it seems) (rj) + * fluid disabled when fluidsynth disabled (we should probably + disable it all together) (rj) + * Fixed mixdown clash with auto-rec enable (rj) + * Fixed crash / hang when closing connected jack apps (rj) +2005.01.02 + ======================================== + * 0.7.1pre3 tagged ! (rj) + ======================================== + +31.12 + * Mastertrack list editor updates (add sigevent + misc) (ml) +30.12 + * Insertion of tempo events in list mastereditor added (ml) +29.12 + * Added support for changing time signature in list master editor (ml) +27.12 + * Added support for changing tempo + position of tempoevents in list mastereditor (ml) + * Backported auto rec-enable from HEAD branch (rj) + * Added visual feedback of marker addition in ruler as well as + possibility to remove markers with shift+rmb (rj) + * Made it easier to resize the last track (bug: 1041798) (rj) + * Fixed bug: 966005, new projects are now called "untitled" (rj) + * fixed bug: 1085791, no more crashes with delete + drag (rj) +26.12 + * Listedit bugfixes. Consideration of part offset used for events (ml) +20.12 + * Fix for bug #1085796 (when renaming channel by doubleclicking it + in tracklist and a part is selected, pressing return opens editor for part) (ml) +17.12 + * -a (No Audio) flag added, improved Dummy audio backend (rj) + * alsa timer bugfix (rj) + * added deicsonze patch from Alex Marandon to fix QT<->STL + problems on affected platforms (rj) + +14.12 + * Disable of fluidsynth works (rj) + * Added test for libsamplerate (rj) + * Reenabled --enable-suid-install (rj) + * Added to simpledrums.h (rj) + * Added -no-rtti to simpledrums (ml) + +13.12 + ======================================== + * 0.7.1pre2 tagged ! (rj) + ======================================== + * SimpleDrums 0.2 softsynth added (ml) +12.12 + * Removed -no-rtti from configuration (rj) + * Extern sync (codename: it_works_for_me__sometimes) is back! (rj) + * Changes to midi-input, events to softsynths vanished (rj) + * bounce to file now limits output to +/- 0.99 (rj) + * crash bug on missing event in sig.cpp fixed (rj) + * Changed default timer resolution to 1024 (rj) + * Applied fix from Levi D. Burton to allow midi thread to run + realtime allthough Jack is not (rj) + * New version (0.22) of DeicsOnze from Alin Weiller (rj) + +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) +01.12 + * fixed import of type 0 midi files (ws) + * Added updated DeicsOnze (0.21) from Alin Weiller (rj) + * added a branch of new icons, changed default colors of + wav/audio output track in arranger (js) + * changed changelog (js) +30.11 + * Added IDF files from Christof Eckert for Access Virus, + Hammond XB and Waldorf Microwave (rj) + * backported fix from 0.8 so listing patches for synths + works again (rj) +29.11 + * fix midi import: tick values of tempo/signature + and marker events are now properly converted to internal + resolution (backport from 0.8) (ws) + * some make system changes to better handle precompiled headers (ws) + ======================================== + * 0.7.1pre1 tagged ! (rj) + ======================================== + * LADCCA was incorrectly disabled in config, now fixed (rj) + * Changed URL of homepage to www.muse-sequencer.org (rj) +28.11 + * Partial support for "input only" midi devices. (rj) + +27.11 + * Added Alsa Timer as a new timing device, RTC is still + available, though not easily selectable yet. (rj) + * Made some changes to how threads are created, for systems + where thread creation has been erratic, linux2.6 in various + configurations. Not yet verified if it makes any differance. (rj) +08.11 + * Backported audio metronome (rj) + * Backported open/save dialog improvements (rj) + * Added -r parameter to allow MusE to start without RTC + not the right thing to do, but it seems necessary on PPC, + it's a start. (rj) + * Added patch from CK to allow getopt to work on PPC (rj) + +02.11 + * Added icon stuff to tlist.cpp (js) +01.11 + * Added Alin Weiller's DeicsOnze synthesizer (ws) + * add dummy call to process() in Audio::start() to warm up caches + to avoid "JACK - zombified" during startup (ws) +23.08 + * fix crash in list editor - create new controller (ws) + * increase required JACK version to 0.98.0 (ws) +20.07 + * updated muse/muse.pro and share/locale files (ws) +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/muse2/Doxyfile.in b/muse2/Doxyfile.in new file mode 100644 index 00000000..e66c9a48 --- /dev/null +++ b/muse2/Doxyfile.in @@ -0,0 +1,150 @@ +# Doxygen configuration generated by Doxywizard version 0.1 +#--------------------------------------------------------------------------- +# General configuration options +#--------------------------------------------------------------------------- +PROJECT_NAME = MusE +PROJECT_NUMBER = @VERSION@ +OUTPUT_DIRECTORY = doc +OUTPUT_LANGUAGE = English +EXTRACT_ALL = YES +EXTRACT_PRIVATE = YES +EXTRACT_STATIC = YES +HIDE_UNDOC_MEMBERS = NO +HIDE_UNDOC_CLASSES = NO +BRIEF_MEMBER_DESC = YES +REPEAT_BRIEF = YES +ALWAYS_DETAILED_SEC = NO +FULL_PATH_NAMES = NO +STRIP_FROM_PATH = +INTERNAL_DOCS = YES +CLASS_DIAGRAMS = YES +SOURCE_BROWSER = YES +INLINE_SOURCES = YES +STRIP_CODE_COMMENTS = YES +CASE_SENSE_NAMES = YES +HIDE_SCOPE_NAMES = NO +VERBATIM_HEADERS = YES +SHOW_INCLUDE_FILES = YES +JAVADOC_AUTOBRIEF = NO +INHERIT_DOCS = YES +INLINE_INFO = YES +SORT_MEMBER_DOCS = YES +DISTRIBUTE_GROUP_DOC = NO +TAB_SIZE = 8 +ENABLED_SECTIONS = +GENERATE_TODOLIST = YES +GENERATE_TESTLIST = YES +ALIASES = +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- +QUIET = NO +WARNINGS = YES +WARN_IF_UNDOCUMENTED = YES +WARN_FORMAT = "$file:$line: $text" +WARN_LOGFILE = +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- +INPUT = . +FILE_PATTERNS = *.cpp \ + *.h +RECURSIVE = YES +EXCLUDE = +EXCLUDE_PATTERNS = +EXAMPLE_PATH = +EXAMPLE_PATTERNS = +IMAGE_PATH = +INPUT_FILTER = +FILTER_SOURCE_FILES = YES +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- +ALPHABETICAL_INDEX = YES +COLS_IN_ALPHA_INDEX = 5 +IGNORE_PREFIX = +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- +GENERATE_HTML = YES +HTML_OUTPUT = html +HTML_HEADER = +HTML_FOOTER = +HTML_STYLESHEET = +HTML_ALIGN_MEMBERS = YES +GENERATE_HTMLHELP = YES +DISABLE_INDEX = NO +ENUM_VALUES_PER_LINE = 4 +GENERATE_TREEVIEW = @DOXYGEN_TREEVIEW@ +TREEVIEW_WIDTH = 250 +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- +GENERATE_LATEX = NO +LATEX_OUTPUT = latex +COMPACT_LATEX = NO +PAPER_TYPE = a4wide +EXTRA_PACKAGES = +LATEX_HEADER = +PDF_HYPERLINKS = NO +USE_PDFLATEX = NO +LATEX_BATCHMODE = NO +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- +GENERATE_RTF = NO +RTF_OUTPUT = rtf +COMPACT_RTF = NO +RTF_HYPERLINKS = NO +RTF_STYLESHEET_FILE = +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- +GENERATE_MAN = NO +MAN_OUTPUT = man +MAN_EXTENSION = .3 +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- +GENERATE_XML = NO +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- +ENABLE_PREPROCESSING = YES +MACRO_EXPANSION = NO +EXPAND_ONLY_PREDEF = YES +SEARCH_INCLUDES = YES +INCLUDE_PATH = +INCLUDE_FILE_PATTERNS = +PREDEFINED = +EXPAND_AS_DEFINED = +#--------------------------------------------------------------------------- +# Configuration::addtions related to external references +#--------------------------------------------------------------------------- +TAGFILES = +GENERATE_TAGFILE = +ALLEXTERNALS = YES +PERL_PATH = @PERL@ +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- +HAVE_DOT = @HAVEDOT@ +CLASS_GRAPH = YES +COLLABORATION_GRAPH = NO +INCLUDE_GRAPH = YES +INCLUDED_BY_GRAPH = YES +GRAPHICAL_HIERARCHY = YES +DOT_PATH = @DOTPATH@ +MAX_DOT_GRAPH_WIDTH = 1024 +MAX_DOT_GRAPH_HEIGHT = 1024 +GENERATE_LEGEND = YES +#--------------------------------------------------------------------------- +# Configuration::addtions related to the search engine +#--------------------------------------------------------------------------- +SEARCHENGINE = NO +CGI_NAME = search.cgi +CGI_URL = +DOC_URL = +DOC_ABSPATH = +BIN_ABSPATH = /usr/bin/ +EXT_DOC_PATHS = diff --git a/muse2/INSTALL b/muse2/INSTALL new file mode 120000 index 00000000..cbd1c80d --- /dev/null +++ b/muse2/INSTALL @@ -0,0 +1 @@ +/usr/share/automake-1.11/INSTALL \ No newline at end of file diff --git a/muse2/Makefile.am b/muse2/Makefile.am new file mode 100644 index 00000000..1de212fc --- /dev/null +++ b/muse2/Makefile.am @@ -0,0 +1,35 @@ +include $(top_srcdir)/common.am + +ACLOCAL_AMFLAGS = -I m4 + +SUBDIRS = m4 al synti muse lib share demos doc plugins grepmidi xpm packaging utils + +DISTCLEANFILES = stamp-doxygen + +MAINTAINERCLEANFILES = depcomp config.guess \ + install-sh config.sub missing mkinstalldirs INSTALL COPYING + +BUILT_SOURCES += all-pic.h + +if PCH +BUILT_SOURCES += all.h.gch all-pic.h.gch + +all.h.gch: all.h + $(CXX) $(AM_CXXFLAGS) all.h -o all.h.gch +all-pic.h.gch: all-pic.h + $(CXX) $(AM_CXXFLAGS) -fPIC all-pic.h -o all-pic.h.gch +endif + +all-pic.h: all.h + cp all.h all-pic.h + +EXTRA_DIST = common.am README.de README.softsynth \ + SECURITY autogen.sh README.translate README.shortcuts \ + README.instruments NEWS README.CVS muse.prj \ + README.ladspaguis all.h + +dox: stamp-doxygen + +stamp-doxygen: $(shell find -name "*.cpp" -or -name "*.h") + $(DOXYGEN) Doxyfile + touch stamp-doxygen diff --git a/muse2/Makefile.in b/muse2/Makefile.in new file mode 100644 index 00000000..d1dd0935 --- /dev/null +++ b/muse2/Makefile.in @@ -0,0 +1,859 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +DIST_COMMON = README $(am__configure_deps) $(srcdir)/Doxyfile.in \ + $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(srcdir)/config.h.in $(top_srcdir)/common.am \ + $(top_srcdir)/configure AUTHORS COPYING ChangeLog INSTALL NEWS \ + config.guess config.sub depcomp install-sh ltmain.sh missing +@PCH_TRUE@am__append_1 = all.h.gch all-pic.h.gch +subdir = . +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal-include.m4 \ + $(top_srcdir)/m4/alsa.m4 $(top_srcdir)/m4/docbook.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ + configure.lineno config.status.lineno +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = config.h +CONFIG_CLEAN_FILES = Doxyfile +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir dist dist-all distcheck +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) +am__remove_distdir = \ + { test ! -d "$(distdir)" \ + || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -fr "$(distdir)"; }; } +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +DIST_ARCHIVES = $(distdir).tar.gz +GZIP_ENV = --best +distuninstallcheck_listfiles = find . -type f -print +distcleancheck_listfiles = find . -type f -print +ACLOCAL = @ACLOCAL@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DOCBOOKSTYLE = @DOCBOOKSTYLE@ +DOCBOOKTARGETS = @DOCBOOKTARGETS@ +DOT = @DOT@ +DOTPATH = @DOTPATH@ +DOXYGEN = @DOXYGEN@ +DOXYGEN_TREEVIEW = @DOXYGEN_TREEVIEW@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FLUIDSYNTHDIRS = @FLUIDSYNTHDIRS@ +FST_CFLAGS = @FST_CFLAGS@ +FST_LIBS = @FST_LIBS@ +Fluidsynth_CFLAGS = @Fluidsynth_CFLAGS@ +Fluidsynth_LIBS = @Fluidsynth_LIBS@ +GIVERTCAP = @GIVERTCAP@ +GREP = @GREP@ +HAVEDOT = @HAVEDOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_LIBS = @JACK_LIBS@ +JADE = @JADE@ +LASH_CFLAGS = @LASH_CFLAGS@ +LASH_LIBS = @LASH_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LO_CFLAGS = @LO_CFLAGS@ +LO_LIBS = @LO_LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MUSECXXFLAGS = @MUSECXXFLAGS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NSGMLS = @NSGMLS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PCH = @PCH@ +PERL = @PERL@ +PKG_CONFIG = @PKG_CONFIG@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIB = @PYTHON_LIB@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QTDIR_BIN = @QTDIR_BIN@ +QTDIR_INC = @QTDIR_INC@ +QT_LIBS = @QT_LIBS@ +RANLIB = @RANLIB@ +SAMPLERATE_CFLAGS = @SAMPLERATE_CFLAGS@ +SAMPLERATE_LIBS = @SAMPLERATE_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ +SNDFILE_LIBS = @SNDFILE_LIBS@ +STRIP = @STRIP@ +SUIDBUILD = @SUIDBUILD@ +SUIDINSTALL = @SUIDINSTALL@ +USE_SSE = @USE_SSE@ +UUID_CFLAGS = @UUID_CFLAGS@ +UUID_LIBS = @UUID_LIBS@ +VERSION = @VERSION@ +XMKMF = @XMKMF@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +have_docbook = @have_docbook@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +synth_fluid = @synth_fluid@ +synth_fluidsynth = @synth_fluidsynth@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AM_CXXFLAGS = $(MUSECXXFLAGS) -I.. -I$(top_srcdir)/synti \ + -I$(top_srcdir)/muse/widgets -DQT_SHARED -DQT_THREAD_SUPPORT \ + -DQT_PLUGIN $(QTDIR_INC) -DQT3_SUPPORT +AM_CPPFLAGS = +MOC = $(QTDIR_BIN)/moc +#UIC = $(QTDIR_BIN)/uic3 +UIC = /usr/bin/uic3 +UIFILES = $(wildcard *.ui) +MOCFILES = $(shell for h in $(filter %.h,$(SOURCES)); do \ + if grep -q Q_OBJECT $$h; then \ + echo $$h | sed "s/\(.*\)\.h/moc_\1.cpp/"; \ + fi; \ + done) + +BUILT_SOURCES = $(MOCFILES) $(UIFILES:%.ui=%.h) all-pic.h \ + $(am__append_1) +MOSTLYCLEANFILES = $(MOCFILES) $(UIFILES:%.ui=%.h) +SUFFIXES = .ui .h.gch +ACLOCAL_AMFLAGS = -I m4 +SUBDIRS = m4 al synti muse lib share demos doc plugins grepmidi xpm packaging utils +DISTCLEANFILES = stamp-doxygen +MAINTAINERCLEANFILES = depcomp config.guess \ + install-sh config.sub missing mkinstalldirs INSTALL COPYING + +EXTRA_DIST = common.am README.de README.softsynth \ + SECURITY autogen.sh README.translate README.shortcuts \ + README.instruments NEWS README.CVS muse.prj \ + README.ladspaguis all.h + +all: $(BUILT_SOURCES) config.h + $(MAKE) $(AM_MAKEFLAGS) all-recursive + +.SUFFIXES: +.SUFFIXES: .ui .h.gch .lo .o +am--refresh: + @: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/common.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \ + $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + echo ' $(SHELL) ./config.status'; \ + $(SHELL) ./config.status;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck + +$(top_srcdir)/configure: $(am__configure_deps) + $(am__cd) $(srcdir) && $(AUTOCONF) +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +$(am__aclocal_m4_deps): + +config.h: stamp-h1 + @if test ! -f $@; then \ + rm -f stamp-h1; \ + $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \ + else :; fi + +stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status + @rm -f stamp-h1 + cd $(top_builddir) && $(SHELL) ./config.status config.h +$(srcdir)/config.h.in: $(am__configure_deps) + ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) + rm -f stamp-h1 + touch $@ + +distclean-hdr: + -rm -f config.h stamp-h1 +Doxyfile: $(top_builddir)/config.status $(srcdir)/Doxyfile.in + cd $(top_builddir) && $(SHELL) ./config.status $@ + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + -rm -f libtool config.lt + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + $(am__remove_distdir) + test -d "$(distdir)" || mkdir "$(distdir)" + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done + -test -n "$(am__skip_mode_fix)" \ + || find "$(distdir)" -type d ! -perm -755 \ + -exec chmod u+rwx,go+rx {} \; -o \ + ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ + || chmod -R a+r "$(distdir)" +dist-gzip: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__remove_distdir) + +dist-bzip2: distdir + tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 + $(am__remove_distdir) + +dist-lzma: distdir + tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma + $(am__remove_distdir) + +dist-xz: distdir + tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz + $(am__remove_distdir) + +dist-tarZ: distdir + tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z + $(am__remove_distdir) + +dist-shar: distdir + shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz + $(am__remove_distdir) + +dist-zip: distdir + -rm -f $(distdir).zip + zip -rq $(distdir).zip $(distdir) + $(am__remove_distdir) + +dist dist-all: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__remove_distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + case '$(DIST_ARCHIVES)' in \ + *.tar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ + *.tar.bz2*) \ + bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.lzma*) \ + lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ + *.tar.xz*) \ + xz -dc $(distdir).tar.xz | $(am__untar) ;;\ + *.tar.Z*) \ + uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ + *.shar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ + *.zip*) \ + unzip $(distdir).zip ;;\ + esac + chmod -R a-w $(distdir); chmod a+w $(distdir) + mkdir $(distdir)/_build + mkdir $(distdir)/_inst + chmod a-w $(distdir) + test -d $(distdir)/_build || exit 0; \ + dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ + && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ + && am__cwd=`pwd` \ + && $(am__cd) $(distdir)/_build \ + && ../configure --srcdir=.. --prefix="$$dc_install_base" \ + $(DISTCHECK_CONFIGURE_FLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ + distuninstallcheck \ + && chmod -R a-w "$$dc_install_base" \ + && ({ \ + (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ + distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ + } || { rm -rf "$$dc_destdir"; exit 1; }) \ + && rm -rf "$$dc_destdir" \ + && $(MAKE) $(AM_MAKEFLAGS) dist \ + && rm -rf $(DIST_ARCHIVES) \ + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ + && cd "$$am__cwd" \ + || exit 1 + $(am__remove_distdir) + @(echo "$(distdir) archives ready for distribution: "; \ + list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ + sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' +distuninstallcheck: + @$(am__cd) '$(distuninstallcheck_dir)' \ + && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ + || { echo "ERROR: files left after uninstall:" ; \ + if test -n "$(DESTDIR)"; then \ + echo " (check DESTDIR support)"; \ + fi ; \ + $(distuninstallcheck_listfiles) ; \ + exit 1; } >&2 +distcleancheck: distclean + @if test '$(srcdir)' = . ; then \ + echo "ERROR: distcleancheck can only run from a VPATH build" ; \ + exit 1 ; \ + fi + @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left in build directory after distclean:" ; \ + $(distcleancheck_listfiles) ; \ + exit 1; } >&2 +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-recursive +all-am: Makefile config.h +installdirs: installdirs-recursive +installdirs-am: +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-hdr \ + distclean-libtool distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf $(top_srcdir)/autom4te.cache + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all check \ + ctags-recursive install install-am install-strip \ + tags-recursive + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am am--refresh check check-am clean clean-generic \ + clean-libtool ctags ctags-recursive dist dist-all dist-bzip2 \ + dist-gzip dist-lzma dist-shar dist-tarZ dist-xz dist-zip \ + distcheck distclean distclean-generic distclean-hdr \ + distclean-libtool distclean-tags distcleancheck distdir \ + distuninstallcheck dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am tags tags-recursive uninstall uninstall-am + + +de: + @for base in $(MOCFILES); do echo -e "\t$${base}.cpp $${base}.h \\"; done + +nde: + @for base in $(MOCFILES); do echo -e "\tmoc_$${base}.cpp \\"; done + +.ui.o: %.h + $(UIC) -L $(top_srcdir)/muse/widgets -o $*.cpp -impl $*.h $*.ui + $(MOC) $*.h >> $*.cpp + $(CXXCOMPILE) -c $*.cpp -o $*.o + $(RM) $*.cpp moc_$*.cpp moc_$*.o + +.ui.lo: %.h + $(UIC) -L $(top_srcdir)/muse/widgets -o $*.cpp -impl $*.h $*.ui + $(MOC) $*.h >> $*.cpp + $(LTCXXCOMPILE) -c $*.cpp -o $*.lo + $(RM) $*.cpp moc_$*.cpp moc_$*.lo moc_$*.o + +moc_%.cpp: %.h + $(MOC) $< -o $@ + +%.h: %.ui + $(UIC) -o $@ $< +# $(UIC) -L $(top_srcdir)/muse/widgets -o $@ $< + +@PCH_TRUE@all.h.gch: all.h +@PCH_TRUE@ $(CXX) $(AM_CXXFLAGS) all.h -o all.h.gch +@PCH_TRUE@all-pic.h.gch: all-pic.h +@PCH_TRUE@ $(CXX) $(AM_CXXFLAGS) -fPIC all-pic.h -o all-pic.h.gch + +all-pic.h: all.h + cp all.h all-pic.h + +dox: stamp-doxygen + +stamp-doxygen: $(shell find -name "*.cpp" -or -name "*.h") + $(DOXYGEN) Doxyfile + touch stamp-doxygen + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/muse2/NEWS b/muse2/NEWS new file mode 100644 index 00000000..96613ef6 --- /dev/null +++ b/muse2/NEWS @@ -0,0 +1,29 @@ +MusE 0.7: + New features: + + - MusE now depends on JACK; midi event timing is coupled + to JACK timing i.e + - simpler integration of internal software synthesizer; + midi events are now delivered directly to synthesizer without + ALSA. This eleminates the need of an extra realtime thread + for every synthesizer instance. + - instrument definition files "*.idf" files now describe + available midi controller for instrument + - software synthesizer show available midi controller + with name in controller editor pulldown + - 14 bit midi controllers (RPN'n NRPN's) can be handled in + graphical controller editor + - imported midi can be added to current song + - "New" now shows a selection of template songs to start with + - Keyboard shortcuts editor: most (all?) shortcuts can now be changed at + runtime. + - Redesigned audio-mixer with much improved routing capabilities + towards JACK. + - Track types extended, input, output, group, aux, wavetrack, + softsynth, miditrack, drumtrack + - The beginings of automation, only volume/pan at the moment. + - Improved RT performance, xruns should be a thing of the past. :) + - JACK transport integration + - support of JACK "freewheel" mode + - extended configuration - configurable shortcuts + diff --git a/muse2/README b/muse2/README new file mode 100644 index 00000000..65963b43 --- /dev/null +++ b/muse2/README @@ -0,0 +1,82 @@ +==================================================================== + MusE --- Linux (Midi) 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 + ============================= + + - QT: Qt 3.2.0 or above + ftp://ftp.trolltech.com/qt/source + MusE does _not_ compile with older versions + Please compile Qt3 with "-thread" option so you get + the qt-mt.so lib instead of qt.so + MAKE SURE YOU SET YOUR 'QTDIR' ENVIRONMENT VARIABLE + + - ALSA 0.9.x or newer (cvs) + http://www.alsa-project.org/ + + - gcc 3.x.x + NOTE: you _must_ compile MusE with the same compiler + you used to compile QT + + - libsndfile 1.0.1 (current 1.0.4) + http://www.zip.com.au/~erikd/libsndfile/ + + - Linux kernel with rtc (RealTimeClock) driver (device /dev/rtc) + (you may also apply "low latency patches" for low timing jitter) + + - JACK + http://jackit.sourceforge.net/download/ + + - fluidsynth-1.0.3 (formerly known as iiwusynth) from + http://savannah.nongnu.org/download/fluid + + - of course: a soundcard and/or some midi gear + - (if you compile from cvs:) automake 1.7 and autoconf 2.54 + + ============================= + Compiling: + ============================= + + - download source from http://lmuse.sourceforge.net/ + - uncompress source: + bunzip2 muse-x.x.x.tar.bz2 + - untar source: + tar xvof muse-x.x.x.tar + or if you have a recent tar, you can combine both steps: + tar xvofj muse-x.x.x.tar.bz2 + + - enter dirctory muse-x.x.x: + MAKE SURE YOU SET YOUR 'QTDIR' ENVIRONMENT VARIABLE + run configure + run make all + + - as root run: + make install + to install MusE + + ============================= + some known bugs + ============================= + + - many + +==================================================================== +Let me know whether MusE works for you !!! +Have a look at the webpage http://www.muse-sequencer.org/ for details. + diff --git a/muse2/README.CVS b/muse2/README.CVS new file mode 100644 index 00000000..43d973c5 --- /dev/null +++ b/muse2/README.CVS @@ -0,0 +1,3 @@ + +To compile a cvs tree, inspect ./autogen.sh and then run it + diff --git a/muse2/README.de b/muse2/README.de new file mode 100644 index 00000000..b6b03c5a --- /dev/null +++ b/muse2/README.de @@ -0,0 +1,69 @@ +==================================================================== + MusE --- Linux (Midi) 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/muse2/README.effects-rack b/muse2/README.effects-rack new file mode 100644 index 00000000..823ae74c --- /dev/null +++ b/muse2/README.effects-rack @@ -0,0 +1,85 @@ +May 6, 2010 v0.0.2 by Tim. + +Understanding the Effects Rack +------------------------------ + +All audio track types (Input, Output, Group, Wave, Synth, and Aux) have + an effects rack into which audio plugins can be inserted in a chain. +Currently each rack can accomodate up to four plugins. + +MusE currently supports LADSPA plugins and DSSI effects plugins. + +One must carefully consider how many audio inputs and outputs a plugin has, + and how may channels the particular audio track has (1 mono or 2 stereo), + and how MusE uses the plugins in the rack. + +MusE will try to internally create as many independent copies (instances) of + a plugin as necessary, to satisfy the number of channels in the audio track. +Basically it divides the number of track channels by the number of + plugin audio inputs or outputs to determine how many copies to make. +First it examines the number of plugin audio outputs, and if there are none, + it will examine the number of audio inputs, and if there are none, + it will simply use just one plugin copy. + +For mono tracks with plugins having more than one audio input or output, + MusE uses the first input or output and ignores the rest. + +For stereo tracks: + + Plugin Plugin Independent Real number Real number + audio audio plugin of track of track + inputs: outputs: copies: input route output route + channels used: channels used: + ------------------------------------------------------------------- + 0 0 1 0 0 + 0 1 2 0 2 + 0 >= 2 1 0 2 + 1 0 2 2 0 + 1 1 2 2 2 + 1 >= 2 1 1 L only! 2 + >= 2 0 1 2 0 + >= 2 1 2 2 2 + >= 2 >= 2 1 2 2 + +Notice that on a stereo track with a plugin having one audio input and two + audio outputs, only the first track input route channel is used (left only). + +These same rules apply to inter-plugin audio when more than one plugin + is in the rack chain. Extra audio outputs of one plugin may be ignored + by the next plugin if not used. + +Currently plugins with no audio outputs are not really useful in MusE, + chiefly because plugin control outputs are not used or displayed. +Nor are specialized plugins with many inputs and/or outputs. + +Nor are so-called 'realtime' control plugins which use audio inputs + and outputs for control signals. +<<< + Loud noise alert! Beware of using such plugins in an audio effects rack. +>>> + + +Example: Consider a stereo Audio Input track with these effect rack + LADSPA plugins: + + comb_splitter Comb Splitter by Steve Harris, and + tap_stereo_echo Tap Stereo Echo by Tom Szilagyi + +The Comb Splitter has one audio input and two audio outputs. +The Stereo Echo has two audio inputs and two audio outputs. + +The stereo Audio Input track will therefore ignore its second + input route connection. It will process the left input only, + separating it into stereo with the Comb Splitter, passing the + split stereo signal into the Stereo Echo, finally producing + stereo output available at the Audio Input track's output routes. + + +One improvement would be not creating unused redundant plugin copies + between plugins in stereo tracks. +For example, for a plugin having one audio input and one audio output, + feeding a plugin having one audio input and two audio outputs, + the extra copy of the first plugin is redundant and not required, + but currently it is created anyway. + + \ No newline at end of file diff --git a/muse2/README.instruments b/muse2/README.instruments new file mode 100644 index 00000000..a2693b4e --- /dev/null +++ b/muse2/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/muse2/README.ladspaguis b/muse2/README.ladspaguis new file mode 100644 index 00000000..c1b168ff --- /dev/null +++ b/muse2/README.ladspaguis @@ -0,0 +1,56 @@ +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/widgets/musewidgetsplugin.so into a directory were +Qt (designer) can find it. + +Example: + if you installed Qt in /usr/qt3: + su -c "cp -af musewidgetsplugin.so /usr/qt3/plugins/designer" +Check: + After starting the Qt designer you see all MusE specific widgets + under Tools/MusE. If you cannot find any MusE widgets, designer + did not find the file "musewidgetsplugin.so". + +====================== + 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" followed by the parameter +index. + Example: + A "Slider" widget which manipulates the 3th parameter of a + plugin has the name "P3slider". + +Supported Widgets: + "Slider" slider for float values + "DoubleLabel" entry for float values + "QCheckbox" to manipulate a on/off LADSPA parameter + "QComboBox" select from a list of named values; sets + integer LADSPA values + +(for more hints please look at the example *.ui files) + diff --git a/muse2/README.shortcuts b/muse2/README.shortcuts new file mode 100644 index 00000000..48de30f3 --- /dev/null +++ b/muse2/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/muse2/README.softsynth b/muse2/README.softsynth new file mode 100644 index 00000000..e3201ff2 --- /dev/null +++ b/muse2/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/muse2/README.translate b/muse2/README.translate new file mode 100644 index 00000000..d169e35f --- /dev/null +++ b/muse2/README.translate @@ -0,0 +1,62 @@ +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/qt3-2/bin/lupdate muse.pro + + This generates the file "locale/muse_fr.ts". + +Step 3: + Edit "locale/muse_fr.ts" manually or use the Qt "linguist" tool: + + linguist muse_fr.ts + +Step 4: + Save the edited file "muse_fr.ts" from linguist and + start File->Release. This generates the file "locale/muse_fr.qm" + + or + + start the Qt program "lrelease" + + lrelease muse.pro + + This generates all *.qm files. + +Step 5: + install the *.qm files: as superuser start "make install" + + +Step 6: + Test: + set the environment variable LANG to the desired + Language: + export LANG=fr + + Start MusE: + muse + + + diff --git a/muse2/SECURITY b/muse2/SECURITY new file mode 100644 index 00000000..d09e03d9 --- /dev/null +++ b/muse2/SECURITY @@ -0,0 +1,244 @@ +MusE Security Information +========================= + +In order to operate reliably at low latencies, MusE needs root privileges. +For a stand-alone computer in a home environment, this is not a problem. +However, on networked machines with multi-user access, there are some security +issues to be aware of. + + +Why does MusE require root privileges ? +--------------------------------------- + +1. +MusE must set the real time clock (/dev/rtc/) to a higher rate in order to get +a more precise timing source than the standard setting would allow. +For this task, it is *not* sufficient to alter the permissions or group of +/dev/rtc. You need root access. + +2. +The MusE audio threads must acquire real-time scheduling to perform with low +latency and free of dropouts. Since this could be misused for a local +denial-of-service attack (you can hog 100% cpu with a real-time task, thus +effectively making the system unusable), only root is allowed to do that. + + +Do I need to be root to run MusE ? +---------------------------------- + +No. You should not do normal work as root. Use the root login exclusively for +administrative tasks. You can run MusE as a normal user, provided you have set +the *suid bit*. +This is done automatically when you build and install MusE. + + +How does this "suid bit" thing work ? +-------------------------------------- + +Normally, when a program is started, it gets the user and group id of the user +who started it, and thus has the same permissions as the user. It can read and +write the same files and use the same devices. + +Some applications need higher privileges to perform certain tasks, but must be +available to normal users. To accomplish this, UNIX-like systems have the +concept of the "effective user id". + +That means you can start a process, but the effective user id will be someone +else's, most likely that of the root user. You can recognize such programs by +the suid (for set-user-id) bit in their permissions. + +For example, when you do + + #ls -l /bin/ping + +you will see something like + + -rwsr-xr-x 1 root root 20908 Feb 27 2001 /bin/ping . + +This tells you it's a normal file (the first dash), it is readable and writable +by the owner (root) and has the owner's suid bit set (the letter "s"). +You may invoke it as a normal user, but the program will have root permissions +while it runs. + +(Btw, there is also an sgid (set-group-id) bit, which allows a program to be run +with the permissions of the group it is owned by. This can be used for +finer-grained access control to some programs but is rarely used in practice.) + +(Btw2, the letter "s" actually means both "executable" AND "set-{user,group}-id". +A capital "S" stands for "set-uid" without the execution privilege, which also +very rarely seen on real systems.) + + +What is the problem with suid programs ? +---------------------------------------- + +suid programs are safe as long as you can be sure they do only the job they were +written to do. For instance, you certainly want users to be able to do a ping, +but you wouldn't want them to wipe out the system disk while doing it. + +Unfortunately, there is a very common vulnerability in many programs called a +buffer overflow, which allows an attacker to spawn a shell from within a suid +program that inherits the permissions, giving him or her root access to the +entire system. +This exploit is fairly easy for an experienced attacker. All that's needed is +the compiled equivalent of the C expression execve("/bin/sh"), which can be +inserted into the running program whenever it does not check the length of user +input properly, by overflowing a buffer and thus overwriting a part of +the program code with the shell exploit code. + +The more complex a program becomes, the more likely buffer overflow +vulnerabilities slip in. + +If you are interested in details of such attacks, I recommend AlephOne's paper +"Smashing the stack for fun and profit", to be found in Issue 49 of Phrack +Magazine (http://www.phrack.com/show.php?p=49&a=14). + + +Does MusE have buffer-overflow vulnerabilities ? +------------------------------------------------ + +It may. But even if it had not, it is good practice to assume it does. +As soon as you are in a security-critical environment, you should treat all suid +programs with extra care unless they are proven to be secure. + +This is a gruesome and boring task, and we all want Werner to concentrate on +cool new features rather than digging through the code to fix loopholes that +aren't even a problem for 99% of the MusE users. +MusE does not need to be as secure as server daemons. It is intended for home +use in a trusted environment. +If you run MusE on your company's primary DNS server, it's your fault. + +But even home machines can become targets for intruders the moment they connect +to the internet. Since almost all of the machines than run MusE are occasionally +used to surf the web, it might be worth taking a few precautions. + + +What can I do to minimize the risk of a suid program ? +------------------------------------------------------ + +By default, Werner drops the root privileges in MusE's GUI thread - only the +audio threads keep it. This rules out many possible exploits, since GUI code is +usually the hardest to make secure. + + +As a further very simple yet effective security precaution, you can create a +group of trusted users, and give only this group access to critical suid +programs. For example, you might create a group called musers, of which you and +your best friend are members. Then you can set the muse binary as follows: + + #chown root:musers muse + #chmod 4750 muse + #ls -l muse + -rwsr-x--- 1 root musers 20930049 Aug 28 19:34 muse + +Now only members of the group musers can use MusE, Joe Random Hacker can not. +(However, if your account is hacked, MusE can then be exploited to gain root, +but hey...) + +Additionally, you can use "givertcap" as described in the next section. + + +What is givertcap and how do I use it ? +--------------------------------------- + +"givertcap" (give real-time capabilites) is a small wrapper written by Tommi +Ilmonen. +When enabled, it is executed by MusE and gives to it just the capabilities +needed to set the timer and get real-time scheduling, but not the full set of +root privileges. This greatly reduces the amount of damage that can be done. + +However, it is not used by default, since it requires a kernel modification. + +To enable givertcap, simply call ./configure --enable-rtcap before compiling. +(The givertcap code is part of the MusE distribution.) + +With current kernels, you need to apply a little patch to the kernel headers: +Go to /usr/src/linux/include/linux (or wherever you have your kernel sources) +and in the file capability.h change the line + + #define CAP_INIT_EFF_SET to_cap_t(~0&~CAP_TO_MASK(CAP_SETPCAP)) +to + #define CAP_INIT_EFF_SET to_cap_t( ~0 ) + +and the line + + #define CAP_INIT_INH_SET to_cap_t(0) +to + #define CAP_INIT_INH_SET to_cap_t( ~0 ) +. + +You must then recompile your kernel. + +In this setup, givertcap must be set suid root, but MusE can be run with normal +privileges. +Now all possible suid exploits described above apply to givertcap, but since it +is such a tiny program, it can be checked for exploits far more easily and can +be considered reasonably secure. + +Unfortunately, givertcap can be used to grant real-time privileges to *any* +program, so it's an easy way to have the machine clogged up by a malicious user +who might run bogus tasks at 100% system usage. +Therefore, you *must* create an extra group for it (called "musers" in this +example): + # chown root:musers givertcap + # chmod 4750 givertcap +Do not forget to remove the suid bit on muse afterwards by doing + # chmod 755 muse +. + +For more information about givertcap and kernel capabilites, see +http://www.tml.hut.fi/~tilmonen/givertcap/ +and +http://ftp.kernel.org/pub/linux/libs/security/linux-privs/kernel-2.4/capfaq-0.2. +txt. + + + +Further reading: +================ + +General Linux system security: +http://linuxdoc.org/HOWTO/Security-Quickstart-HOWTO/ +http://linuxdoc.org/HOWTO/Security-HOWTO.html + +Secure Linux programming: +http://linuxdoc.org/HOWTO/Secure-Programs-HOWTO/ + +Permissions: +man chmod +man chattr + +givertcap: +http://www.tml.hut.fi/~tilmonen/givertcap/ + +An alternative approach, using a kernel module: +http://arctrix.com/nas/linux/capwrap.tar.gz + +Kernel capabilites: +http://ftp.kernel.org/pub/linux/libs/security/linux-privs/kernel-2.4/capfaq-0.2. +txt + +Adding capability flags to ELF files: +http://atrey.karlin.mff.cuni.cz/~pavel/elfcap.html + + +Buffer Overflow attacks: +"Smashing the stack for fun and profit" by AlephOne 1996, published in +Phrack magazine, issue 49 +http://www.phrack.com/show.php?p=49&a=14 + +In the MusE source, app.cpp contains the invocation of givertcap and the +dropping of the suid privileges: grep for "getCapabilities" and "setuid" to see +how it's done. + +________________________________________________________________________________ + + +This document was written by Jörn Nettingsmeier + +Corrections and improvements welcome. + +Thanks to Werner Schweer and Tommi Ilmonen for answering my questions. + +Last updated 02/22/2002. + diff --git a/muse2/aclocal.m4 b/muse2/aclocal.m4 new file mode 100644 index 00000000..948fb3fa --- /dev/null +++ b/muse2/aclocal.m4 @@ -0,0 +1,1334 @@ +# generated automatically by aclocal 1.11.1 -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.65],, +[m4_warning([this file was generated for autoconf 2.65. +You have another version of autoconf. It may work, but is not guaranteed to. +If you have problems, you may need to regenerate the build system entirely. +To do so, use the procedure documented by the package, typically `autoreconf'.])]) + +# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- +# +# Copyright © 2004 Scott James Remnant . +# +# 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. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# PKG_PROG_PKG_CONFIG([MIN-VERSION]) +# ---------------------------------- +AC_DEFUN([PKG_PROG_PKG_CONFIG], +[m4_pattern_forbid([^_?PKG_[A-Z_]+$]) +m4_pattern_allow([^PKG_CONFIG(_PATH)?$]) +AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])dnl +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) +fi +if test -n "$PKG_CONFIG"; then + _pkg_min_version=m4_default([$1], [0.9.0]) + AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + PKG_CONFIG="" + fi + +fi[]dnl +])# PKG_PROG_PKG_CONFIG + +# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +# +# Check to see whether a particular set of modules exists. Similar +# to PKG_CHECK_MODULES(), but does not set variables or print errors. +# +# +# Similar to PKG_CHECK_MODULES, make sure that the first instance of +# this or PKG_CHECK_MODULES is called, or make sure to call +# PKG_CHECK_EXISTS manually +# -------------------------------------------------------------- +AC_DEFUN([PKG_CHECK_EXISTS], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +if test -n "$PKG_CONFIG" && \ + AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then + m4_ifval([$2], [$2], [:]) +m4_ifvaln([$3], [else + $3])dnl +fi]) + + +# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) +# --------------------------------------------- +m4_define([_PKG_CONFIG], +[if test -n "$PKG_CONFIG"; then + if test -n "$$1"; then + pkg_cv_[]$1="$$1" + else + PKG_CHECK_EXISTS([$3], + [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`], + [pkg_failed=yes]) + fi +else + pkg_failed=untried +fi[]dnl +])# _PKG_CONFIG + +# _PKG_SHORT_ERRORS_SUPPORTED +# ----------------------------- +AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG]) +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi[]dnl +])# _PKG_SHORT_ERRORS_SUPPORTED + + +# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], +# [ACTION-IF-NOT-FOUND]) +# +# +# Note that if there is a possibility the first call to +# PKG_CHECK_MODULES might not happen, you should be sure to include an +# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac +# +# +# -------------------------------------------------------------- +AC_DEFUN([PKG_CHECK_MODULES], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl +AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl + +pkg_failed=no +AC_MSG_CHECKING([for $1]) + +_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) +_PKG_CONFIG([$1][_LIBS], [libs], [$2]) + +m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS +and $1[]_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details.]) + +if test $pkg_failed = yes; then + _PKG_SHORT_ERRORS_SUPPORTED + if test $_pkg_short_errors_supported = yes; then + $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$2"` + else + $1[]_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"` + fi + # Put the nasty error message in config.log where it belongs + echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD + + ifelse([$4], , [AC_MSG_ERROR(dnl +[Package requirements ($2) were not met: + +$$1_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +_PKG_TEXT +])], + [AC_MSG_RESULT([no]) + $4]) +elif test $pkg_failed = untried; then + ifelse([$4], , [AC_MSG_FAILURE(dnl +[The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +_PKG_TEXT + +To get pkg-config, see .])], + [$4]) +else + $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS + $1[]_LIBS=$pkg_cv_[]$1[]_LIBS + AC_MSG_RESULT([yes]) + ifelse([$3], , :, [$3]) +fi[]dnl +])# PKG_CHECK_MODULES + +# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_AUTOMAKE_VERSION(VERSION) +# ---------------------------- +# Automake X.Y traces this macro to ensure aclocal.m4 has been +# generated from the m4 files accompanying Automake X.Y. +# (This private macro should not be called outside this file.) +AC_DEFUN([AM_AUTOMAKE_VERSION], +[am__api_version='1.11' +dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to +dnl require some minimum version. Point them to the right macro. +m4_if([$1], [1.11.1], [], + [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl +]) + +# _AM_AUTOCONF_VERSION(VERSION) +# ----------------------------- +# aclocal traces this macro to find the Autoconf version. +# This is a private macro too. Using m4_define simplifies +# the logic in aclocal, which can simply ignore this definition. +m4_define([_AM_AUTOCONF_VERSION], []) + +# AM_SET_CURRENT_AUTOMAKE_VERSION +# ------------------------------- +# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. +# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. +AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], +[AM_AUTOMAKE_VERSION([1.11.1])dnl +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) + +# AM_AUX_DIR_EXPAND -*- Autoconf -*- + +# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets +# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to +# `$srcdir', `$srcdir/..', or `$srcdir/../..'. +# +# Of course, Automake must honor this variable whenever it calls a +# tool from the auxiliary directory. The problem is that $srcdir (and +# therefore $ac_aux_dir as well) can be either absolute or relative, +# depending on how configure is run. This is pretty annoying, since +# it makes $ac_aux_dir quite unusable in subdirectories: in the top +# source directory, any form will work fine, but in subdirectories a +# relative path needs to be adjusted first. +# +# $ac_aux_dir/missing +# fails when called from a subdirectory if $ac_aux_dir is relative +# $top_srcdir/$ac_aux_dir/missing +# fails if $ac_aux_dir is absolute, +# fails when called from a subdirectory in a VPATH build with +# a relative $ac_aux_dir +# +# The reason of the latter failure is that $top_srcdir and $ac_aux_dir +# are both prefixed by $srcdir. In an in-source build this is usually +# harmless because $srcdir is `.', but things will broke when you +# start a VPATH build or use an absolute $srcdir. +# +# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, +# iff we strip the leading $srcdir from $ac_aux_dir. That would be: +# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` +# and then we would define $MISSING as +# MISSING="\${SHELL} $am_aux_dir/missing" +# This will work as long as MISSING is not called from configure, because +# unfortunately $(top_srcdir) has no meaning in configure. +# However there are other variables, like CC, which are often used in +# configure, and could therefore not use this "fixed" $ac_aux_dir. +# +# Another solution, used here, is to always expand $ac_aux_dir to an +# absolute PATH. The drawback is that using absolute paths prevent a +# configured tree to be moved without reconfiguration. + +AC_DEFUN([AM_AUX_DIR_EXPAND], +[dnl Rely on autoconf to set up CDPATH properly. +AC_PREREQ([2.50])dnl +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` +]) + +# AM_CONDITIONAL -*- Autoconf -*- + +# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 9 + +# AM_CONDITIONAL(NAME, SHELL-CONDITION) +# ------------------------------------- +# Define a conditional. +AC_DEFUN([AM_CONDITIONAL], +[AC_PREREQ(2.52)dnl + ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +AC_SUBST([$1_TRUE])dnl +AC_SUBST([$1_FALSE])dnl +_AM_SUBST_NOTMAKE([$1_TRUE])dnl +_AM_SUBST_NOTMAKE([$1_FALSE])dnl +m4_define([_AM_COND_VALUE_$1], [$2])dnl +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi +AC_CONFIG_COMMANDS_PRE( +[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then + AC_MSG_ERROR([[conditional "$1" was never defined. +Usually this means the macro was only invoked conditionally.]]) +fi])]) + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 10 + +# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be +# written in clear, in which case automake, when reading aclocal.m4, +# will think it sees a *use*, and therefore will trigger all it's +# C support machinery. Also note that it means that autoscan, seeing +# CC etc. in the Makefile, will ask for an AC_PROG_CC use... + + +# _AM_DEPENDENCIES(NAME) +# ---------------------- +# See how the compiler implements dependency checking. +# NAME is "CC", "CXX", "GCJ", or "OBJC". +# We try a few techniques and use that to set a single cache variable. +# +# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was +# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular +# dependency, and given that the user is not expected to run this macro, +# just rely on AC_PROG_CC. +AC_DEFUN([_AM_DEPENDENCIES], +[AC_REQUIRE([AM_SET_DEPDIR])dnl +AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl +AC_REQUIRE([AM_MAKE_INCLUDE])dnl +AC_REQUIRE([AM_DEP_TRACK])dnl + +ifelse([$1], CC, [depcc="$CC" am_compiler_list=], + [$1], CXX, [depcc="$CXX" am_compiler_list=], + [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], UPC, [depcc="$UPC" am_compiler_list=], + [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], + [depcc="$$1" am_compiler_list=]) + +AC_CACHE_CHECK([dependency style of $depcc], + [am_cv_$1_dependencies_compiler_type], +[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_$1_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` + fi + am__universal=false + m4_case([$1], [CC], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac], + [CXX], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac]) + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_$1_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_$1_dependencies_compiler_type=none +fi +]) +AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) +AM_CONDITIONAL([am__fastdep$1], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) +]) + + +# AM_SET_DEPDIR +# ------------- +# Choose a directory name for dependency files. +# This macro is AC_REQUIREd in _AM_DEPENDENCIES +AC_DEFUN([AM_SET_DEPDIR], +[AC_REQUIRE([AM_SET_LEADING_DOT])dnl +AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl +]) + + +# AM_DEP_TRACK +# ------------ +AC_DEFUN([AM_DEP_TRACK], +[AC_ARG_ENABLE(dependency-tracking, +[ --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors]) +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +AC_SUBST([AMDEPBACKSLASH])dnl +_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl +]) + +# Generate code to set up dependency tracking. -*- Autoconf -*- + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +#serial 5 + +# _AM_OUTPUT_DEPENDENCY_COMMANDS +# ------------------------------ +AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], +[{ + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} +])# _AM_OUTPUT_DEPENDENCY_COMMANDS + + +# AM_OUTPUT_DEPENDENCY_COMMANDS +# ----------------------------- +# This macro should only be invoked once -- use via AC_REQUIRE. +# +# This code is only required when automatic dependency tracking +# is enabled. FIXME. This creates each `.P' file that we will +# need in order to bootstrap the dependency handling code. +AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], +[AC_CONFIG_COMMANDS([depfiles], + [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], + [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) +]) + +# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 8 + +# AM_CONFIG_HEADER is obsolete. It has been replaced by AC_CONFIG_HEADERS. +AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)]) + +# Do all the work for Automake. -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006, 2008, 2009 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 16 + +# This macro actually does too much. Some checks are only needed if +# your package does certain things. But this isn't really a big deal. + +# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) +# AM_INIT_AUTOMAKE([OPTIONS]) +# ----------------------------------------------- +# The call with PACKAGE and VERSION arguments is the old style +# call (pre autoconf-2.50), which is being phased out. PACKAGE +# and VERSION should now be passed to AC_INIT and removed from +# the call to AM_INIT_AUTOMAKE. +# We support both call styles for the transition. After +# the next Automake release, Autoconf can make the AC_INIT +# arguments mandatory, and then we can depend on a new Autoconf +# release and drop the old call support. +AC_DEFUN([AM_INIT_AUTOMAKE], +[AC_PREREQ([2.62])dnl +dnl Autoconf wants to disallow AM_ names. We explicitly allow +dnl the ones we care about. +m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl +AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl +AC_REQUIRE([AC_PROG_INSTALL])dnl +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi +AC_SUBST([CYGPATH_W]) + +# Define the identity of the package. +dnl Distinguish between old-style and new-style calls. +m4_ifval([$2], +[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl + AC_SUBST([PACKAGE], [$1])dnl + AC_SUBST([VERSION], [$2])], +[_AM_SET_OPTIONS([$1])dnl +dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. +m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, + [m4_fatal([AC_INIT should be called with package and version arguments])])dnl + AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl + AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl + +_AM_IF_OPTION([no-define],, +[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) + AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl + +# Some tools Automake needs. +AC_REQUIRE([AM_SANITY_CHECK])dnl +AC_REQUIRE([AC_ARG_PROGRAM])dnl +AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) +AM_MISSING_PROG(AUTOCONF, autoconf) +AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) +AM_MISSING_PROG(AUTOHEADER, autoheader) +AM_MISSING_PROG(MAKEINFO, makeinfo) +AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl +AC_REQUIRE([AM_PROG_MKDIR_P])dnl +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([AC_PROG_MAKE_SET])dnl +AC_REQUIRE([AM_SET_LEADING_DOT])dnl +_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], + [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) +_AM_IF_OPTION([no-dependencies],, +[AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES(CC)], + [define([AC_PROG_CC], + defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES(CXX)], + [define([AC_PROG_CXX], + defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES(OBJC)], + [define([AC_PROG_OBJC], + defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl +]) +_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl +dnl The `parallel-tests' driver may need to know about EXEEXT, so add the +dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro +dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. +AC_CONFIG_COMMANDS_PRE(dnl +[m4_provide_if([_AM_COMPILER_EXEEXT], + [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl +]) + +dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not +dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further +dnl mangled by Autoconf and run in a shell conditional statement. +m4_define([_AC_COMPILER_EXEEXT], +m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) + + +# When config.status generates a header, we must update the stamp-h file. +# This file resides in the same directory as the config header +# that is generated. The stamp files are numbered to have different names. + +# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the +# loop where config.status creates the headers, so we can generate +# our stamp files there. +AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], +[# Compute $1's index in $config_headers. +_am_arg=$1 +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) + +# Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_SH +# ------------------ +# Define $install_sh. +AC_DEFUN([AM_PROG_INSTALL_SH], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi +AC_SUBST(install_sh)]) + +# Copyright (C) 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# Check whether the underlying file-system supports filenames +# with a leading dot. For instance MS-DOS doesn't. +AC_DEFUN([AM_SET_LEADING_DOT], +[rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null +AC_SUBST([am__leading_dot])]) + +# Check to see how 'make' treats includes. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 4 + +# AM_MAKE_INCLUDE() +# ----------------- +# Check to see how make treats includes. +AC_DEFUN([AM_MAKE_INCLUDE], +[am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +AC_MSG_CHECKING([for style of include used by $am_make]) +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi +AC_SUBST([am__include]) +AC_SUBST([am__quote]) +AC_MSG_RESULT([$_am_result]) +rm -f confinc confmf +]) + +# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- + +# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 6 + +# AM_MISSING_PROG(NAME, PROGRAM) +# ------------------------------ +AC_DEFUN([AM_MISSING_PROG], +[AC_REQUIRE([AM_MISSING_HAS_RUN]) +$1=${$1-"${am_missing_run}$2"} +AC_SUBST($1)]) + + +# AM_MISSING_HAS_RUN +# ------------------ +# Define MISSING if not defined so far and test if it supports --run. +# If it does, set am_missing_run to use it, otherwise, to nothing. +AC_DEFUN([AM_MISSING_HAS_RUN], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([missing])dnl +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + AC_MSG_WARN([`missing' script is too old or missing]) +fi +]) + +# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_MKDIR_P +# --------------- +# Check for `mkdir -p'. +AC_DEFUN([AM_PROG_MKDIR_P], +[AC_PREREQ([2.60])dnl +AC_REQUIRE([AC_PROG_MKDIR_P])dnl +dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, +dnl while keeping a definition of mkdir_p for backward compatibility. +dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. +dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of +dnl Makefile.ins that do not define MKDIR_P, so we do our own +dnl adjustment using top_builddir (which is defined more often than +dnl MKDIR_P). +AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl +case $mkdir_p in + [[\\/$]]* | ?:[[\\/]]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac +]) + +# Helper functions for option handling. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 4 + +# _AM_MANGLE_OPTION(NAME) +# ----------------------- +AC_DEFUN([_AM_MANGLE_OPTION], +[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) + +# _AM_SET_OPTION(NAME) +# ------------------------------ +# Set option NAME. Presently that only means defining a flag for this option. +AC_DEFUN([_AM_SET_OPTION], +[m4_define(_AM_MANGLE_OPTION([$1]), 1)]) + +# _AM_SET_OPTIONS(OPTIONS) +# ---------------------------------- +# OPTIONS is a space-separated list of Automake options. +AC_DEFUN([_AM_SET_OPTIONS], +[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) + +# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) +# ------------------------------------------- +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +AC_DEFUN([_AM_IF_OPTION], +[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008, 2009 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PATH_PYTHON([MINIMUM-VERSION], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +# --------------------------------------------------------------------------- +# Adds support for distributing Python modules and packages. To +# install modules, copy them to $(pythondir), using the python_PYTHON +# automake variable. To install a package with the same name as the +# automake package, install to $(pkgpythondir), or use the +# pkgpython_PYTHON automake variable. +# +# The variables $(pyexecdir) and $(pkgpyexecdir) are provided as +# locations to install python extension modules (shared libraries). +# Another macro is required to find the appropriate flags to compile +# extension modules. +# +# If your package is configured with a different prefix to python, +# users will have to add the install directory to the PYTHONPATH +# environment variable, or create a .pth file (see the python +# documentation for details). +# +# If the MINIMUM-VERSION argument is passed, AM_PATH_PYTHON will +# cause an error if the version of python installed on the system +# doesn't meet the requirement. MINIMUM-VERSION should consist of +# numbers and dots only. +AC_DEFUN([AM_PATH_PYTHON], + [ + dnl Find a Python interpreter. Python versions prior to 2.0 are not + dnl supported. (2.0 was released on October 16, 2000). + m4_define_default([_AM_PYTHON_INTERPRETER_LIST], + [python python2 python3 python3.0 python2.5 python2.4 python2.3 python2.2 dnl +python2.1 python2.0]) + + m4_if([$1],[],[ + dnl No version check is needed. + # Find any Python interpreter. + if test -z "$PYTHON"; then + AC_PATH_PROGS([PYTHON], _AM_PYTHON_INTERPRETER_LIST, :) + fi + am_display_PYTHON=python + ], [ + dnl A version check is needed. + if test -n "$PYTHON"; then + # If the user set $PYTHON, use it and don't search something else. + AC_MSG_CHECKING([whether $PYTHON version >= $1]) + AM_PYTHON_CHECK_VERSION([$PYTHON], [$1], + [AC_MSG_RESULT(yes)], + [AC_MSG_ERROR(too old)]) + am_display_PYTHON=$PYTHON + else + # Otherwise, try each interpreter until we find one that satisfies + # VERSION. + AC_CACHE_CHECK([for a Python interpreter with version >= $1], + [am_cv_pathless_PYTHON],[ + for am_cv_pathless_PYTHON in _AM_PYTHON_INTERPRETER_LIST none; do + test "$am_cv_pathless_PYTHON" = none && break + AM_PYTHON_CHECK_VERSION([$am_cv_pathless_PYTHON], [$1], [break]) + done]) + # Set $PYTHON to the absolute path of $am_cv_pathless_PYTHON. + if test "$am_cv_pathless_PYTHON" = none; then + PYTHON=: + else + AC_PATH_PROG([PYTHON], [$am_cv_pathless_PYTHON]) + fi + am_display_PYTHON=$am_cv_pathless_PYTHON + fi + ]) + + if test "$PYTHON" = :; then + dnl Run any user-specified action, or abort. + m4_default([$3], [AC_MSG_ERROR([no suitable Python interpreter found])]) + else + + dnl Query Python for its version number. Getting [:3] seems to be + dnl the best way to do this; it's what "site.py" does in the standard + dnl library. + + AC_CACHE_CHECK([for $am_display_PYTHON version], [am_cv_python_version], + [am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[[:3]])"`]) + AC_SUBST([PYTHON_VERSION], [$am_cv_python_version]) + + dnl Use the values of $prefix and $exec_prefix for the corresponding + dnl values of PYTHON_PREFIX and PYTHON_EXEC_PREFIX. These are made + dnl distinct variables so they can be overridden if need be. However, + dnl general consensus is that you shouldn't need this ability. + + AC_SUBST([PYTHON_PREFIX], ['${prefix}']) + AC_SUBST([PYTHON_EXEC_PREFIX], ['${exec_prefix}']) + + dnl At times (like when building shared libraries) you may want + dnl to know which OS platform Python thinks this is. + + AC_CACHE_CHECK([for $am_display_PYTHON platform], [am_cv_python_platform], + [am_cv_python_platform=`$PYTHON -c "import sys; sys.stdout.write(sys.platform)"`]) + AC_SUBST([PYTHON_PLATFORM], [$am_cv_python_platform]) + + + dnl Set up 4 directories: + + dnl pythondir -- where to install python scripts. This is the + dnl site-packages directory, not the python standard library + dnl directory like in previous automake betas. This behavior + dnl is more consistent with lispdir.m4 for example. + dnl Query distutils for this directory. distutils does not exist in + dnl Python 1.5, so we fall back to the hardcoded directory if it + dnl doesn't work. + AC_CACHE_CHECK([for $am_display_PYTHON script directory], + [am_cv_python_pythondir], + [if test "x$prefix" = xNONE + then + am_py_prefix=$ac_default_prefix + else + am_py_prefix=$prefix + fi + am_cv_python_pythondir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(0,0,prefix='$am_py_prefix'))" 2>/dev/null || + echo "$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages"` + case $am_cv_python_pythondir in + $am_py_prefix*) + am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'` + am_cv_python_pythondir=`echo "$am_cv_python_pythondir" | sed "s,^$am__strip_prefix,$PYTHON_PREFIX,"` + ;; + *) + case $am_py_prefix in + /usr|/System*) ;; + *) + am_cv_python_pythondir=$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages + ;; + esac + ;; + esac + ]) + AC_SUBST([pythondir], [$am_cv_python_pythondir]) + + dnl pkgpythondir -- $PACKAGE directory under pythondir. Was + dnl PYTHON_SITE_PACKAGE in previous betas, but this naming is + dnl more consistent with the rest of automake. + + AC_SUBST([pkgpythondir], [\${pythondir}/$PACKAGE]) + + dnl pyexecdir -- directory for installing python extension modules + dnl (shared libraries) + dnl Query distutils for this directory. distutils does not exist in + dnl Python 1.5, so we fall back to the hardcoded directory if it + dnl doesn't work. + AC_CACHE_CHECK([for $am_display_PYTHON extension module directory], + [am_cv_python_pyexecdir], + [if test "x$exec_prefix" = xNONE + then + am_py_exec_prefix=$am_py_prefix + else + am_py_exec_prefix=$exec_prefix + fi + am_cv_python_pyexecdir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(1,0,prefix='$am_py_exec_prefix'))" 2>/dev/null || + echo "$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages"` + case $am_cv_python_pyexecdir in + $am_py_exec_prefix*) + am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'` + am_cv_python_pyexecdir=`echo "$am_cv_python_pyexecdir" | sed "s,^$am__strip_prefix,$PYTHON_EXEC_PREFIX,"` + ;; + *) + case $am_py_exec_prefix in + /usr|/System*) ;; + *) + am_cv_python_pyexecdir=$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages + ;; + esac + ;; + esac + ]) + AC_SUBST([pyexecdir], [$am_cv_python_pyexecdir]) + + dnl pkgpyexecdir -- $(pyexecdir)/$(PACKAGE) + + AC_SUBST([pkgpyexecdir], [\${pyexecdir}/$PACKAGE]) + + dnl Run any user-specified action. + $2 + fi + +]) + + +# AM_PYTHON_CHECK_VERSION(PROG, VERSION, [ACTION-IF-TRUE], [ACTION-IF-FALSE]) +# --------------------------------------------------------------------------- +# Run ACTION-IF-TRUE if the Python interpreter PROG has version >= VERSION. +# Run ACTION-IF-FALSE otherwise. +# This test uses sys.hexversion instead of the string equivalent (first +# word of sys.version), in order to cope with versions such as 2.2c1. +# This supports Python 2.0 or higher. (2.0 was released on October 16, 2000). +AC_DEFUN([AM_PYTHON_CHECK_VERSION], + [prog="import sys +# split strings by '.' and convert to numeric. Append some zeros +# because we need at least 4 digits for the hex conversion. +# map returns an iterator in Python 3.0 and a list in 2.x +minver = list(map(int, '$2'.split('.'))) + [[0, 0, 0]] +minverhex = 0 +# xrange is not present in Python 3.0 and range returns an iterator +for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[[i]] +sys.exit(sys.hexversion < minverhex)" + AS_IF([AM_RUN_LOG([$1 -c "$prog"])], [$3], [$4])]) + +# Check to make sure that the build environment is sane. -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 5 + +# AM_SANITY_CHECK +# --------------- +AC_DEFUN([AM_SANITY_CHECK], +[AC_MSG_CHECKING([whether build environment is sane]) +# Just in case +sleep 1 +echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[[\\\"\#\$\&\'\`$am_lf]]*) + AC_MSG_ERROR([unsafe absolute working directory name]);; +esac +case $srcdir in + *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) + AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; +esac + +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + rm -f conftest.file + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken +alias in your environment]) + fi + + test "$[2]" = conftest.file + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +AC_MSG_RESULT(yes)]) + +# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_STRIP +# --------------------- +# One issue with vendor `install' (even GNU) is that you can't +# specify the program used to strip binaries. This is especially +# annoying in cross-compiling environments, where the build's strip +# is unlikely to handle the host's binaries. +# Fortunately install-sh will honor a STRIPPROG variable, so we +# always use install-sh in `make install-strip', and initialize +# STRIPPROG with the value of the STRIP variable (set by the user). +AC_DEFUN([AM_PROG_INSTALL_STRIP], +[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be `maybe'. +if test "$cross_compiling" != no; then + AC_CHECK_TOOL([STRIP], [strip], :) +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" +AC_SUBST([INSTALL_STRIP_PROGRAM])]) + +# Copyright (C) 2006, 2008 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# _AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. +# This macro is traced by Automake. +AC_DEFUN([_AM_SUBST_NOTMAKE]) + +# AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Public sister of _AM_SUBST_NOTMAKE. +AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) + +# Check how to create a tarball. -*- Autoconf -*- + +# Copyright (C) 2004, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# _AM_PROG_TAR(FORMAT) +# -------------------- +# Check how to create a tarball in format FORMAT. +# FORMAT should be one of `v7', `ustar', or `pax'. +# +# Substitute a variable $(am__tar) that is a command +# writing to stdout a FORMAT-tarball containing the directory +# $tardir. +# tardir=directory && $(am__tar) > result.tar +# +# Substitute a variable $(am__untar) that extract such +# a tarball read from stdin. +# $(am__untar) < result.tar +AC_DEFUN([_AM_PROG_TAR], +[# Always define AMTAR for backward compatibility. +AM_MISSING_PROG([AMTAR], [tar]) +m4_if([$1], [v7], + [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], + [m4_case([$1], [ustar],, [pax],, + [m4_fatal([Unknown tar format])]) +AC_MSG_CHECKING([how to create a $1 tar archive]) +# Loop over all known methods to create a tar archive until one works. +_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' +_am_tools=${am_cv_prog_tar_$1-$_am_tools} +# Do not fold the above two line into one, because Tru64 sh and +# Solaris sh will not grok spaces in the rhs of `-'. +for _am_tool in $_am_tools +do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; + do + AM_RUN_LOG([$_am_tar --version]) && break + done + am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x $1 -w "$$tardir"' + am__tar_='pax -L -x $1 -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H $1 -L' + am__tar_='find "$tardir" -print | cpio -o -H $1 -L' + am__untar='cpio -i -H $1 -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac + + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_$1}" && break + + # tar/untar a dummy directory, and stop if the command works + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) + rm -rf conftest.dir + if test -s conftest.tar; then + AM_RUN_LOG([$am__untar /dev/null 2>&1 && break + fi +done +rm -rf conftest.dir + +AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) +AC_MSG_RESULT([$am_cv_prog_tar_$1])]) +AC_SUBST([am__tar]) +AC_SUBST([am__untar]) +]) # _AM_PROG_TAR + +m4_include([m4/aclocal-include.m4]) +m4_include([m4/alsa.m4]) +m4_include([m4/docbook.m4]) +m4_include([m4/libtool.m4]) +m4_include([m4/ltoptions.m4]) +m4_include([m4/ltsugar.m4]) +m4_include([m4/ltversion.m4]) +m4_include([m4/lt~obsolete.m4]) diff --git a/muse2/al/Makefile.am b/muse2/al/Makefile.am new file mode 100644 index 00000000..f2464217 --- /dev/null +++ b/muse2/al/Makefile.am @@ -0,0 +1,18 @@ +include $(top_srcdir)/common.am + +if PCH +AM_CXXFLAGS += -include $(top_srcdir)/all.h +endif + +noinst_LIBRARIES = libal.a + +dist_libal_a_SOURCES = \ + al.cpp al.h \ + dsp.cpp dsp.h + +if USE_SSE +dist_libal_a_SOURCES += dspSSE.cpp dspXMM.cpp +dspSSE.o: dspSSE.cpp + $(CXXCOMPILE) -x assembler -c dspSSE.cpp +endif + diff --git a/muse2/al/Makefile.in b/muse2/al/Makefile.in new file mode 100644 index 00000000..7f747537 --- /dev/null +++ b/muse2/al/Makefile.in @@ -0,0 +1,595 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/common.am +@PCH_TRUE@am__append_1 = -include $(top_srcdir)/all.h +@USE_SSE_TRUE@am__append_2 = dspSSE.cpp dspXMM.cpp +subdir = al +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal-include.m4 \ + $(top_srcdir)/m4/alsa.m4 $(top_srcdir)/m4/docbook.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +LIBRARIES = $(noinst_LIBRARIES) +ARFLAGS = cru +libal_a_AR = $(AR) $(ARFLAGS) +libal_a_LIBADD = +am__dist_libal_a_SOURCES_DIST = al.cpp al.h dsp.cpp dsp.h dspSSE.cpp \ + dspXMM.cpp +@USE_SSE_TRUE@am__objects_1 = dspSSE.$(OBJEXT) dspXMM.$(OBJEXT) +dist_libal_a_OBJECTS = al.$(OBJEXT) dsp.$(OBJEXT) $(am__objects_1) +libal_a_OBJECTS = $(dist_libal_a_OBJECTS) +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +CXXLD = $(CXX) +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(dist_libal_a_SOURCES) +DIST_SOURCES = $(am__dist_libal_a_SOURCES_DIST) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DOCBOOKSTYLE = @DOCBOOKSTYLE@ +DOCBOOKTARGETS = @DOCBOOKTARGETS@ +DOT = @DOT@ +DOTPATH = @DOTPATH@ +DOXYGEN = @DOXYGEN@ +DOXYGEN_TREEVIEW = @DOXYGEN_TREEVIEW@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FLUIDSYNTHDIRS = @FLUIDSYNTHDIRS@ +FST_CFLAGS = @FST_CFLAGS@ +FST_LIBS = @FST_LIBS@ +Fluidsynth_CFLAGS = @Fluidsynth_CFLAGS@ +Fluidsynth_LIBS = @Fluidsynth_LIBS@ +GIVERTCAP = @GIVERTCAP@ +GREP = @GREP@ +HAVEDOT = @HAVEDOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_LIBS = @JACK_LIBS@ +JADE = @JADE@ +LASH_CFLAGS = @LASH_CFLAGS@ +LASH_LIBS = @LASH_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LO_CFLAGS = @LO_CFLAGS@ +LO_LIBS = @LO_LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MUSECXXFLAGS = @MUSECXXFLAGS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NSGMLS = @NSGMLS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PCH = @PCH@ +PERL = @PERL@ +PKG_CONFIG = @PKG_CONFIG@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIB = @PYTHON_LIB@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QTDIR_BIN = @QTDIR_BIN@ +QTDIR_INC = @QTDIR_INC@ +QT_LIBS = @QT_LIBS@ +RANLIB = @RANLIB@ +SAMPLERATE_CFLAGS = @SAMPLERATE_CFLAGS@ +SAMPLERATE_LIBS = @SAMPLERATE_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ +SNDFILE_LIBS = @SNDFILE_LIBS@ +STRIP = @STRIP@ +SUIDBUILD = @SUIDBUILD@ +SUIDINSTALL = @SUIDINSTALL@ +USE_SSE = @USE_SSE@ +UUID_CFLAGS = @UUID_CFLAGS@ +UUID_LIBS = @UUID_LIBS@ +VERSION = @VERSION@ +XMKMF = @XMKMF@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +have_docbook = @have_docbook@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +synth_fluid = @synth_fluid@ +synth_fluidsynth = @synth_fluidsynth@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AM_CXXFLAGS = $(MUSECXXFLAGS) -I.. -I$(top_srcdir)/synti \ + -I$(top_srcdir)/muse/widgets -DQT_SHARED -DQT_THREAD_SUPPORT \ + -DQT_PLUGIN $(QTDIR_INC) -DQT3_SUPPORT $(am__append_1) +AM_CPPFLAGS = +MOC = $(QTDIR_BIN)/moc +#UIC = $(QTDIR_BIN)/uic3 +UIC = /usr/bin/uic3 +UIFILES = $(wildcard *.ui) +MOCFILES = $(shell for h in $(filter %.h,$(SOURCES)); do \ + if grep -q Q_OBJECT $$h; then \ + echo $$h | sed "s/\(.*\)\.h/moc_\1.cpp/"; \ + fi; \ + done) + +BUILT_SOURCES = $(MOCFILES) $(UIFILES:%.ui=%.h) +MOSTLYCLEANFILES = $(MOCFILES) $(UIFILES:%.ui=%.h) +SUFFIXES = .ui .h.gch +noinst_LIBRARIES = libal.a +dist_libal_a_SOURCES = al.cpp al.h dsp.cpp dsp.h $(am__append_2) +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: .ui .h.gch .cpp .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/common.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu al/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu al/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-noinstLIBRARIES: + -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) +libal.a: $(libal_a_OBJECTS) $(libal_a_DEPENDENCIES) + -rm -f libal.a + $(libal_a_AR) libal.a $(libal_a_OBJECTS) $(libal_a_LIBADD) + $(RANLIB) libal.a + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/al.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dsp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dspSSE.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dspXMM.Po@am__quote@ + +.cpp.o: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< + +.cpp.obj: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.cpp.lo: +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-am +all-am: Makefile $(LIBRARIES) +installdirs: +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +clean: clean-am + +clean-am: clean-generic clean-libtool clean-noinstLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: all check install install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-noinstLIBRARIES ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags uninstall uninstall-am + + +de: + @for base in $(MOCFILES); do echo -e "\t$${base}.cpp $${base}.h \\"; done + +nde: + @for base in $(MOCFILES); do echo -e "\tmoc_$${base}.cpp \\"; done + +.ui.o: %.h + $(UIC) -L $(top_srcdir)/muse/widgets -o $*.cpp -impl $*.h $*.ui + $(MOC) $*.h >> $*.cpp + $(CXXCOMPILE) -c $*.cpp -o $*.o + $(RM) $*.cpp moc_$*.cpp moc_$*.o + +.ui.lo: %.h + $(UIC) -L $(top_srcdir)/muse/widgets -o $*.cpp -impl $*.h $*.ui + $(MOC) $*.h >> $*.cpp + $(LTCXXCOMPILE) -c $*.cpp -o $*.lo + $(RM) $*.cpp moc_$*.cpp moc_$*.lo moc_$*.o + +moc_%.cpp: %.h + $(MOC) $< -o $@ + +%.h: %.ui + $(UIC) -o $@ $< +# $(UIC) -L $(top_srcdir)/muse/widgets -o $@ $< +@USE_SSE_TRUE@dspSSE.o: dspSSE.cpp +@USE_SSE_TRUE@ $(CXXCOMPILE) -x assembler -c dspSSE.cpp + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/muse2/al/al.cpp b/muse2/al/al.cpp new file mode 100644 index 00000000..dddb6805 --- /dev/null +++ b/muse2/al/al.cpp @@ -0,0 +1,29 @@ +//============================================================================= +// AL +// Audio Utility Library +// $Id: al.cpp,v 1.1.2.2 2009/12/06 01:39:33 terminator356 Exp $ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the 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/muse2/al/al.h b/muse2/al/al.h new file mode 100644 index 00000000..2f1a02d9 --- /dev/null +++ b/muse2/al/al.h @@ -0,0 +1,34 @@ +//============================================================================= +// AL +// Audio Utility Library +// $Id: al.h,v 1.1.2.2 2009/12/06 01:39:33 terminator356 Exp $ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the 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/muse2/al/dsp.cpp b/muse2/al/dsp.cpp new file mode 100644 index 00000000..fa9fa18b --- /dev/null +++ b/muse2/al/dsp.cpp @@ -0,0 +1,182 @@ +//============================================================================= +// AL +// Audio Utility Library +// $Id: dsp.cpp,v 1.1.2.1 2009/12/06 01:39:33 terminator356 Exp $ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the 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 "dsp.h" +#include "config.h" +#include "../globals.h" + +namespace AL { + +Dsp* dsp = 0; + +#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 0 // Disabled for now. +#if defined(__i386__) || defined(__x86_64__) + if(debugMsg) + printf("Muse: __i386__ or __x86_64__ defined. Using optimized float buffer copying (asm movsl).\n"); +#else + if(debugMsg) + printf("Muse: __i386__ or __x86_64__ not defined. Using non-optimized memcpy for float buffer copying.\n"); +#endif +#endif + +#if defined(__i386__) && defined(USE_SSE) + unsigned long useSSE = 0; + if(debugMsg) + printf("initDsp: __i386__ and USE_SSE defined\n"); + +// FIXME: 64? Shouldn't these routines work on 32 bit? +#ifdef __x86_64__ + useSSE = 1 << 25; // we know the platform has SSE + if(debugMsg) + printf("initDsp: __x86_64__ defined\n"); +#else + if(debugMsg) + printf("initDsp: getting cpuid via asm\n"); + asm ( + "mov $1, %%eax\n" + "pushl %%ebx\n" + "cpuid\n" + "movl %%edx, %0\n" + "popl %%ebx\n" + : "=r" (useSSE) + : + : "%eax", "%ecx", "%edx", "memory"); +#endif + if(debugMsg) + printf("initDsp: checking for bit 25 SSE support:%lX\n", useSSE); + 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 + if(debugMsg) + printf("Muse: using unoptimized non-SSE dsp routines\n"); + dsp = new Dsp(); + } + +//--------------------------------------------------------- +// exitDsp +//--------------------------------------------------------- + +void exitDsp() +{ + if(dsp) + delete dsp; + dsp = 0; +} + +void Dsp::cpy(float* dst, float* src, unsigned n) +{ +// FIXME: Changed by T356. Not defined. Where are these??? +//#if defined(ARCH_X86) || defined(ARCH_X86_64) +///#if defined(__i386__) || defined(__x86_64__) +#if 0 // Disabled for now. + //printf("Dsp: using asm cpy\n"); + // Changed by T356. Get To and From not declared in scope compile errors. + //register unsigned long int dummy; + //__asm__ __volatile__ ("rep; movsl" :"=&D"(dst), "=&S"(src), "=&c"(dummy) :"0" (to), "1" (from),"2" (n) : "memory"); + // FIXME: FIXME: I don't think this is correct but it works so far... + // Tried clobbering, get "Can't find a register in class `CREG' while reloading `asm'" + __asm__ __volatile__ ( + "cld\n\t" + "rep\n\t" + "movsl" + : + : "S" (src), "D" (dst), "c" (n) + : "memory" + ); + + //: "%ecx", "%esi", "%edi", "memory" +#else + //printf("Dsp: using memcpy\n"); + memcpy(dst, src, sizeof(float) * n); +#endif +} + +} // namespace AL diff --git a/muse2/al/dsp.h b/muse2/al/dsp.h new file mode 100644 index 00000000..f88a0122 --- /dev/null +++ b/muse2/al/dsp.h @@ -0,0 +1,107 @@ +//============================================================================= +// AL +// Audio Utility Library +// $Id: dsp.h,v 1.1.2.1 2009/12/06 01:39:33 terminator356 Exp $ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the 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__ + +#include +#include + +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); +/* + { +// Changed by T356. Not defined. Where are these??? +//#if defined(ARCH_X86) || defined(ARCH_X86_64) +#if defined(__i386__) || defined(__x86_64__) + printf("Dsp: using asm cpy\n"); + // Changed by T356. Get To and From not declared in scope compile errors. + register unsigned long int dummy; + //__asm__ __volatile__ ("rep; movsl" :"=&D"(dst), "=&S"(src), "=&c"(dummy) :"0" (to), "1" (from),"2" (n) : "memory"); + // From http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html + __asm__ __volatile__ ( \ + "cld\n\t" \ + "rep\n\t" \ + "movsl" \ + : \ + : "S" (src), "D" (dst), "c" (n) \ + : "memory" + ); + + //: "%ecx", "%esi", "%edi", "memory" +#else + printf("Dsp: using memcpy\n"); + memcpy(dst, src, sizeof(float) * n); +#endif + } +*/ + + }; + +extern void initDsp(); +extern void exitDsp(); +extern Dsp* dsp; + +} + +#endif + diff --git a/muse2/al/dspSSE.cpp b/muse2/al/dspSSE.cpp new file mode 100644 index 00000000..a345e308 --- /dev/null +++ b/muse2/al/dspSSE.cpp @@ -0,0 +1,531 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: dspSSE.cpp,v 1.1.2.3 2009/12/20 00:04:25 spamatica Exp $ +// +// (C) Copyright 2007-2009 Werner Schweer (ws@seh.de) +// file originally from Ardour DAW project by Paul Davis (c) 2005 +// licensed through GPL +// Original author Sampo Savolainen +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//====================================================================== + +#; 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/muse2/al/dspXMM.cpp b/muse2/al/dspXMM.cpp new file mode 100644 index 00000000..99893c3f --- /dev/null +++ b/muse2/al/dspXMM.cpp @@ -0,0 +1,119 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: dspXMM.cpp,v 1.1.2.2 2009/12/20 00:04:25 spamatica Exp $ +// +// (C) Copyright 2007-2009 Werner Schweer (ws@seh.de) +// file originally from Ardour DAW project by Paul Davis (c) 2007 +// licensed through GPL +// Original author Sampo Savolainen +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the 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/muse2/all-pic.h b/muse2/all-pic.h new file mode 100644 index 00000000..e69de29b diff --git a/muse2/all.h b/muse2/all.h new file mode 100644 index 00000000..e69de29b diff --git a/muse2/autogen.sh b/muse2/autogen.sh new file mode 100755 index 00000000..63ec8590 --- /dev/null +++ b/muse2/autogen.sh @@ -0,0 +1,147 @@ +#!/bin/sh + +AUTOMAKE_REQ=1.7 +AUTOCONF_REQ=2.54 +LIBTOOL_REQ=2.2.10 +PKG_CONFIG_REQ=0.1 + +lessthan () { + ver1="$1" + ver2="$2" + + major1=$( echo $ver1 | sed "s/^\([0-9]*\)\..*/\1/"); + minor1=$( echo $ver1 | sed "s/^[^\.]*\.\([0-9]*\).*/\1/" ); + major2=$( echo $ver2 | sed "s/^\([0-9]*\)\..*/\1/"); + minor2=$( echo $ver2 | sed "s/^[^\.]*\.\([0-9]*\).*/\1/" ); + test "$major1" -lt "$major2" || test "$minor1" -lt "$minor2"; +} + +morethan () { + ver1="$1" + ver2="$2" + + major1=$( echo $ver1 | sed "s/^\([0-9]*\)\..*/\1/"); + minor1=$( echo $ver1 | sed "s/^[^\.]*\.\([0-9]*\).*/\1/" ); + major2=$( echo $ver2 | sed "s/^\([0-9]*\)\..*/\1/"); + minor2=$( echo $ver2 | sed "s/^[^\.]*\.\([0-9]*\).*/\1/" ); + test "$major2" -lt "$major1" || test "$minor2" -lt "$minor1"; +} + +echo -n "automake version: " +amver=$( automake --version | head -1 | sed "s/.* //" ); +echo -n "$amver" + +lessthan $amver $AUTOMAKE_REQ +if test $? = 0; then + echo " (not ok)" + echo " +#################################################################### +######################### WARNING ################################ +#################################################################### + + You need automake >= ${AUTOMAKE_REQ}! + + +" + sleep 1; +else + echo " (ok)" +fi + +echo -n "autoconf version: " +acver=$( autoconf --version | head -1 | sed "s/.* //" ); +echo -n "$acver" +lessthan $acver $AUTOCONF_REQ +if test $? = 0; then + echo " (not ok)" + echo " +#################################################################### +######################### WARNING ################################ +#################################################################### + + You need autoconf >= ${AUTOCONF_REQ}! + + +" + sleep 1; +else + echo " (ok)" +fi + +if [ ! -f `which libtool` ] ; then + echo "No libtool installed" + exit 1 +fi +echo -n "libtool version: " +ltver=$( libtool --version | cut -d ' ' -f 4 | head -1 ); +echo -n "$ltver" +#lessthan $ltver $LIBTOOL_REQ +#if test $? = 0; then +# echo " (not ok)" +# echo " +##################################################################### +########################## WARNING ################################ +##################################################################### +# +# You need libtool < ${LIBTOOL_REQ}! +# +# +#" +#else + echo " (ok)" + sleep 1; +# fi + + +echo -n "pkg-config: " +pkg_config="$( which pkg-config )" +if test -z "$pkg_config"; then + echo "(not found)" + echo " +#################################################################### +######################### WARNING ################################ +#################################################################### + + You need pkg-config! + + +" +else + echo "$pkg_config" + echo -n "pkg-config version: " + pcver=$( pkg-config --version ) + echo -n "$pcver" + lessthan $pcver $PKG_CONFIG_REQ + if test $? = 0; then + echo " (not ok)" + echo " +#################################################################### +######################### WARNING ################################ +#################################################################### + + You need pkg-config >= ${PKG_CONFIG_REQ}! + + +" + else + echo " (ok)" + sleep 1; + fi +fi + +### && libtoolize -f + +echo -n "generating build system.." +libtoolize -f \ + && echo -n "." && aclocal -I m4 \ + && echo -n "." && autoheader \ + && echo -n "." && automake -a --include-deps \ + && echo -n "." && autoconf && echo "done" \ + && echo " + + You may now run configure + + Eg: ./configure --enable-maintainer-mode \\ + --disable-doxy-treeview --enable-optimize +" + diff --git a/muse2/autom4te.cache/output.0 b/muse2/autom4te.cache/output.0 new file mode 100644 index 00000000..cc42d35e --- /dev/null +++ b/muse2/autom4te.cache/output.0 @@ -0,0 +1,20607 @@ +@%:@! /bin/sh +@%:@ Guess values for system-dependent variables and create Makefiles. +@%:@ Generated by GNU Autoconf 2.65 for MusE 1.1. +@%:@ +@%:@ +@%:@ Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +@%:@ 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +@%:@ Inc. +@%:@ +@%:@ +@%:@ This configure script is free software; the Free Software Foundation +@%:@ gives unlimited permission to copy, distribute and modify it. +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in @%:@( + *posix*) : + set -o posix ;; @%:@( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in @%:@( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +case $0 in @%:@(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in @%:@( + *posix*) : + set -o posix ;; @%:@( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in @%:@( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : + # We cannot yet assume a decent shell, so we have to provide a + # neutralization value for shells without unset; and this also + # works around shells that cannot unset nonexistent variables. + BASH_ENV=/dev/null + ENV=/dev/null + (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, +$0: including any error possibly output before this +$0: message. Then install a modern shell, or manually run +$0: the script under such a shell if you do have one." + fi + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +@%:@ as_fn_unset VAR +@%:@ --------------- +@%:@ Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +@%:@ as_fn_set_status STATUS +@%:@ ----------------------- +@%:@ Set @S|@? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} @%:@ as_fn_set_status + +@%:@ as_fn_exit STATUS +@%:@ ----------------- +@%:@ Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} @%:@ as_fn_exit + +@%:@ as_fn_mkdir_p +@%:@ ------------- +@%:@ Create "@S|@as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" + + +} @%:@ as_fn_mkdir_p +@%:@ as_fn_append VAR VALUE +@%:@ ---------------------- +@%:@ Append the text in VALUE to the end of the definition contained in VAR. Take +@%:@ advantage of any shell optimizations that allow amortized linear growth over +@%:@ repeated appends, instead of the typical quadratic growth present in naive +@%:@ implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +@%:@ as_fn_arith ARG... +@%:@ ------------------ +@%:@ Perform arithmetic evaluation on the ARGs, and store the result in the +@%:@ global @S|@as_val. Take advantage of shells that can avoid forks. The arguments +@%:@ must be portable across @S|@(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +@%:@ as_fn_error ERROR [LINENO LOG_FD] +@%:@ --------------------------------- +@%:@ Output "`basename @S|@0`: error: ERROR" to stderr. If LINENO and LOG_FD are +@%:@ provided, also output the error to LOG_FD, referencing LINENO. Then exit the +@%:@ script with status @S|@?, using 1 if that was 0. +as_fn_error () +{ + as_status=$?; test $as_status -eq 0 && as_status=1 + if test "$3"; then + as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 + fi + $as_echo "$as_me: error: $1" >&2 + as_fn_exit $as_status +} @%:@ as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + + + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in @%:@((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in @%:@( + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in @%:@(( + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + + +# Check that we are running under the correct shell. +SHELL=${CONFIG_SHELL-/bin/sh} + +case X$lt_ECHO in +X*--fallback-echo) + # Remove one level of quotation (which was required for Make). + ECHO=`echo "$lt_ECHO" | sed 's,\\\\\$\\$0,'$0','` + ;; +esac + +ECHO=${lt_ECHO-echo} +if test "X$1" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift +elif test "X$1" = X--fallback-echo; then + # Avoid inline document here, it may be left over + : +elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then + # Yippee, $ECHO works! + : +else + # Restart under the correct shell. + exec $SHELL "$0" --no-reexec ${1+"$@"} +fi + +if test "X$1" = X--fallback-echo; then + # used as fallback echo + shift + cat <<_LT_EOF +$* +_LT_EOF + exit 0 +fi + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +if test -z "$lt_ECHO"; then + if test "X${echo_test_string+set}" != Xset; then + # find a string as large as possible, as long as the shell can cope with it + for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do + # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... + if { echo_test_string=`eval $cmd`; } 2>/dev/null && + { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null + then + break + fi + done + fi + + if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && + echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + : + else + # The Solaris, AIX, and Digital Unix default echo programs unquote + # backslashes. This makes it impossible to quote backslashes using + # echo "$something" | sed 's/\\/\\\\/g' + # + # So, first we look for a working echo in the user's PATH. + + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for dir in $PATH /usr/ucb; do + IFS="$lt_save_ifs" + if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && + test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + ECHO="$dir/echo" + break + fi + done + IFS="$lt_save_ifs" + + if test "X$ECHO" = Xecho; then + # We didn't find a better echo, so look for alternatives. + if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' && + echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # This shell has a builtin print -r that does the trick. + ECHO='print -r' + elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } && + test "X$CONFIG_SHELL" != X/bin/ksh; then + # If we have ksh, try running configure again with it. + ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} + export ORIGINAL_CONFIG_SHELL + CONFIG_SHELL=/bin/ksh + export CONFIG_SHELL + exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"} + else + # Try using printf. + ECHO='printf %s\n' + if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && + echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # Cool, printf works + : + elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL + export CONFIG_SHELL + SHELL="$CONFIG_SHELL" + export SHELL + ECHO="$CONFIG_SHELL $0 --fallback-echo" + elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + ECHO="$CONFIG_SHELL $0 --fallback-echo" + else + # maybe with a smaller string... + prev=: + + for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do + if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null + then + break + fi + prev="$cmd" + done + + if test "$prev" != 'sed 50q "$0"'; then + echo_test_string=`eval $prev` + export echo_test_string + exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"} + else + # Oops. We lost completely, so just stick with echo. + ECHO=echo + fi + fi + fi + fi + fi +fi + +# Copy echo and quote the copy suitably for passing to libtool from +# the Makefile, instead of quoting the original, which is used later. +lt_ECHO=$ECHO +if test "X$lt_ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then + lt_ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo" +fi + + + + +test -n "$DJDIR" || exec 7<&0 &1 + +# Name of the host. +# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIB@&t@OBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= + +# Identity of this package. +PACKAGE_NAME='MusE' +PACKAGE_TARNAME='muse' +PACKAGE_VERSION='1.1' +PACKAGE_STRING='MusE 1.1' +PACKAGE_BUGREPORT='' +PACKAGE_URL='' + +ac_unique_file="muse/app.cpp" +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif +#ifdef STDC_HEADERS +# include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include +# endif +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_INTTYPES_H +# include +#endif +#ifdef HAVE_STDINT_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#endif" + +ac_subst_vars='am__EXEEXT_FALSE +am__EXEEXT_TRUE +LTLIBOBJS +LIB@&t@OBJS +MUSECXXFLAGS +HAVE_AUDIO_FALSE +HAVE_AUDIO_TRUE +DSSI_SUPPORT_FALSE +DSSI_SUPPORT_TRUE +OSC_SUPPORT_FALSE +OSC_SUPPORT_TRUE +LO_LIBS +LO_CFLAGS +VST_SUPPORT_FALSE +VST_SUPPORT_TRUE +FST_LIBS +FST_CFLAGS +PYTHON_LIB +PYTHON_INCLUDES +ENABLE_PYTHON_FALSE +ENABLE_PYTHON_TRUE +pkgpyexecdir +pyexecdir +pkgpythondir +pythondir +PYTHON_PLATFORM +PYTHON_EXEC_PREFIX +PYTHON_PREFIX +PYTHON_VERSION +PYTHON +USE_SSE_FALSE +USE_SSE_TRUE +USE_SSE +PCH_FALSE +PCH_TRUE +PCH +DOXYGEN_TREEVIEW +SUIDBUILD +SUIDINSTALL +GIVERTCAP +RTCAP_FALSE +RTCAP_TRUE +HAVE_LASH_FALSE +HAVE_LASH_TRUE +LASH_LIBS +LASH_CFLAGS +JACK_LIBS +JACK_CFLAGS +UUID_LIBS +UUID_CFLAGS +SAMPLERATE_LIBS +SAMPLERATE_CFLAGS +SNDFILE_LIBS +SNDFILE_CFLAGS +synth_fluid +synth_fluidsynth +FLUIDSYNTHDIRS +Fluidsynth_LIBS +Fluidsynth_CFLAGS +PKG_CONFIG +ENABLEFLUIDSYNTH_FALSE +ENABLEFLUIDSYNTH_TRUE +ALSA_LIBS +ALSA_CFLAGS +UIC +MOC +QT_LIBS +QT_CFLAGS +X_EXTRA_LIBS +X_LIBS +X_PRE_LIBS +X_CFLAGS +XMKMF +PERL +DOTPATH +HAVEDOT +DOT +DOXYGEN +DOCBOOKTARGETS +DOCBOOKSTYLE +have_docbook +NSGMLS +JADE +CXXCPP +CPP +OTOOL64 +OTOOL +LIPO +NMEDIT +DSYMUTIL +lt_ECHO +RANLIB +AR +OBJDUMP +LN_S +NM +ac_ct_DUMPBIN +DUMPBIN +LD +FGREP +EGREP +GREP +SED +am__fastdepCC_FALSE +am__fastdepCC_TRUE +CCDEPMODE +ac_ct_CC +CFLAGS +CC +host_os +host_vendor +host_cpu +host +build_os +build_vendor +build_cpu +build +LIBTOOL +am__fastdepCXX_FALSE +am__fastdepCXX_TRUE +CXXDEPMODE +AMDEPBACKSLASH +AMDEP_FALSE +AMDEP_TRUE +am__quote +am__include +DEPDIR +OBJEXT +EXEEXT +ac_ct_CXX +CPPFLAGS +LDFLAGS +CXXFLAGS +CXX +INSIDE_GNOME_COMMON_FALSE +INSIDE_GNOME_COMMON_TRUE +am__untar +am__tar +AMTAR +am__leading_dot +SET_MAKE +AWK +mkdir_p +MKDIR_P +INSTALL_STRIP_PROGRAM +STRIP +install_sh +MAKEINFO +AUTOHEADER +AUTOMAKE +AUTOCONF +ACLOCAL +VERSION +PACKAGE +CYGPATH_W +am__isrc +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' +ac_subst_files='' +ac_user_opts=' +enable_option_checking +enable_dependency_tracking +enable_shared +enable_static +with_pic +enable_fast_install +with_gnu_ld +enable_libtool_lock +with_docbook_stylesheets +with_x +enable_qttest +with_qt_prefix +with_qt_includes +with_qt_libraries +with_qt_binaries +with_qt_moc +with_qt_uic +with_alsa_prefix +with_alsa_inc_prefix +enable_alsatest +enable_fluidsynth +enable_lash +enable_rtcap +enable_suid_install +enable_suid_build +enable_doxy_treeview +enable_optimize +enable_debug +enable_pch +enable_arch +enable_sse +with_python +enable_vst +enable_osc +enable_dssi +' + ac_precious_vars='build_alias +host_alias +target_alias +CXX +CXXFLAGS +LDFLAGS +LIBS +CPPFLAGS +CCC +CC +CFLAGS +CPP +CXXCPP +DOXYGEN +DOT +PERL +XMKMF +PKG_CONFIG +Fluidsynth_CFLAGS +Fluidsynth_LIBS +SNDFILE_CFLAGS +SNDFILE_LIBS +SAMPLERATE_CFLAGS +SAMPLERATE_LIBS +JACK_CFLAGS +JACK_LIBS +LASH_CFLAGS +LASH_LIBS +FST_CFLAGS +FST_LIBS +LO_CFLAGS +LO_LIBS' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *) ac_optarg=yes ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; + + -without-* | --without-*) + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) as_fn_error "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information." + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error "invalid variable name: \`$ac_envvar'" ;; + esac + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + as_fn_error "missing argument to $ac_option" +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac +fi + +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir +do + eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + as_fn_error "expected an absolute directory name for --$ac_var: $ac_val" +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. + If a cross compiler is detected then cross compile mode will be used." >&2 + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + as_fn_error "working directory cannot be determined" +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + as_fn_error "pwd does not report name of working directory" + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + as_fn_error "cannot find sources ($ac_unique_file) in $srcdir" +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error "$ac_msg" + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures MusE 1.1 to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + @<:@@S|@ac_default_prefix@:>@ + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + @<:@PREFIX@:>@ + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root @<:@DATAROOTDIR/doc/muse@:>@ + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF + +Program names: + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM run sed PROGRAM on installed program names + +X features: + --x-includes=DIR X include files are in DIR + --x-libraries=DIR X library files are in DIR + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of MusE 1.1:";; + esac + cat <<\_ACEOF + +Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors + --enable-shared@<:@=PKGS@:>@ build shared libraries @<:@default=yes@:>@ + --enable-static@<:@=PKGS@:>@ build static libraries @<:@default=yes@:>@ + --enable-fast-install@<:@=PKGS@:>@ + optimize for fast installation @<:@default=yes@:>@ + --disable-libtool-lock avoid locking (might break parallel builds) + --disable-qttest do not try to compile and run a test libqt program + --disable-alsatest do not try to compile and run a test alsa program + --disable-fluidsynth disable fluidsynth softsynth plugin + --enable-lash enable LASH support + --enable-rtcap (deprecated) use Tommi Ilmonen's "givertcap" to give + realtime capabilities + --enable-suid-install (deprecated) install MusE setuid root (with kernel 2.6, use realtime-lsm instead) + --enable-suid-build (deprecated) build MusE setuid root(with kernel 2.6, use realtime-lsm instead) + --disable-doxy-treeview stop Doxygen from generating java-ified + treeview menus in its HTML output + --enable-optimize ask the compiler for its best optimizations (possibly only i386) + --enable-debug disable optimizations + --enable-pch enable precompiled headers (gcc 3.4 required) + --enable-arch=ARCH use -march=ARCH and -mtune=ARCH argument to CXX + choose from any supported gcc architecture such as: + 386, 486, 586, 686, pentium, pentiumpro, k6, athlon... + --enable-sse enable SSE optimizations + --enable-vst (deprecated, use dssi) build VST/win support. (disabled by default) + --enable-osc build OSC support. (disabled by default) + --enable-dssi is also recommended! + --enable-dssi build DSSI + DSSI-Vst support. (disabled by default) + --enable-osc is also recommended! + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-pic try to use only PIC/non-PIC objects @<:@default=use + both@:>@ + --with-gnu-ld assume the C compiler uses GNU ld @<:@default=no@:>@ + --with-docbook-stylesheets=DIR use DIR/html/docbook.dsl + --with-x use the X Window System + --with-qt-prefix=PFX where the root of Qt is installed + --with-qt-includes=DIR where the Qt includes are installed + --with-qt-libraries=DIR where the Qt libraries are installed. + --with-qt-binaries=DIR where the Qt binaries are installed. + --with-qt-moc=PROG where the Qt meta object compiler is installed. + --with-qt-uic=PROG where the Qt user interface compiler is installed. + --with-alsa-prefix=PFX prefix where alsa library is installed (optional) + --with-alsa-inc-prefix=PFX prefix where include libraries are (optional) + --enable-python Build python bindings (on) + +Some influential environment variables: + CXX C++ compiler command + CXXFLAGS C++ compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if + you have headers in a nonstandard directory + CC C compiler command + CFLAGS C compiler flags + CPP C preprocessor + CXXCPP C++ preprocessor + DOXYGEN Doxygen + DOT The "dot" program from graphviz + PERL Perl + XMKMF Path to xmkmf, Makefile generator for X Window System + PKG_CONFIG path to pkg-config utility + Fluidsynth_CFLAGS + C compiler flags for Fluidsynth, overriding pkg-config + Fluidsynth_LIBS + linker flags for Fluidsynth, overriding pkg-config + SNDFILE_CFLAGS + C compiler flags for SNDFILE, overriding pkg-config + SNDFILE_LIBS + linker flags for SNDFILE, overriding pkg-config + SAMPLERATE_CFLAGS + C compiler flags for SAMPLERATE, overriding pkg-config + SAMPLERATE_LIBS + linker flags for SAMPLERATE, overriding pkg-config + JACK_CFLAGS C compiler flags for JACK, overriding pkg-config + JACK_LIBS linker flags for JACK, overriding pkg-config + LASH_CFLAGS C compiler flags for LASH, overriding pkg-config + LASH_LIBS linker flags for LASH, overriding pkg-config + FST_CFLAGS C compiler flags for FST, overriding pkg-config + FST_LIBS linker flags for FST, overriding pkg-config + LO_CFLAGS C compiler flags for LO, overriding pkg-config + LO_LIBS linker flags for LO, overriding pkg-config + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +Report bugs to the package provider. +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive + else + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } + done +fi + +test -n "$ac_init_help" && exit $ac_status +if $ac_init_version; then + cat <<\_ACEOF +MusE configure 1.1 +generated by GNU Autoconf 2.65 + +Copyright (C) 2009 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi + +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## + +@%:@ ac_fn_cxx_try_compile LINENO +@%:@ ---------------------------- +@%:@ Try to compile conftest.@S|@ac_ext, and return whether this succeeded. +ac_fn_cxx_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} @%:@ ac_fn_cxx_try_compile + +@%:@ ac_fn_c_try_compile LINENO +@%:@ -------------------------- +@%:@ Try to compile conftest.@S|@ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} @%:@ ac_fn_c_try_compile + +@%:@ ac_fn_c_try_link LINENO +@%:@ ----------------------- +@%:@ Try to link conftest.@S|@ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} @%:@ ac_fn_c_try_link + +@%:@ ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +@%:@ ------------------------------------------------------- +@%:@ Tests whether HEADER exists and can be compiled using the include files in +@%:@ INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +@%:@include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} @%:@ ac_fn_c_check_header_compile + +@%:@ ac_fn_c_try_cpp LINENO +@%:@ ---------------------- +@%:@ Try to preprocess conftest.@S|@ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} @%:@ ac_fn_c_try_cpp + +@%:@ ac_fn_c_try_run LINENO +@%:@ ---------------------- +@%:@ Try to link conftest.@S|@ac_ext, and return whether this succeeded. Assumes +@%:@ that executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} @%:@ ac_fn_c_try_run + +@%:@ ac_fn_c_check_func LINENO FUNC VAR +@%:@ ---------------------------------- +@%:@ Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_c_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case declares $2. + For example, HP-UX 11i declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main () +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} @%:@ ac_fn_c_check_func + +@%:@ ac_fn_cxx_try_cpp LINENO +@%:@ ------------------------ +@%:@ Try to preprocess conftest.@S|@ac_ext, and return whether this succeeded. +ac_fn_cxx_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } >/dev/null && { + test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} @%:@ ac_fn_cxx_try_cpp + +@%:@ ac_fn_cxx_try_link LINENO +@%:@ ------------------------- +@%:@ Try to link conftest.@S|@ac_ext, and return whether this succeeded. +ac_fn_cxx_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} @%:@ ac_fn_cxx_try_link + +@%:@ ac_fn_cxx_try_run LINENO +@%:@ ------------------------ +@%:@ Try to link conftest.@S|@ac_ext, and return whether this succeeded. Assumes +@%:@ that executables *can* be run. +ac_fn_cxx_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} @%:@ ac_fn_cxx_try_run + +@%:@ ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES +@%:@ ------------------------------------------------------- +@%:@ Tests whether HEADER exists, giving a warning if it cannot be compiled using +@%:@ the include files in INCLUDES and setting the cache variable VAR +@%:@ accordingly. +ac_fn_c_check_header_mongrel () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 +$as_echo_n "checking $2 usability... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +@%:@include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_header_compiler=yes +else + ac_header_compiler=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 +$as_echo_n "checking $2 presence... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@include <$2> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + ac_header_preproc=yes +else + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( + yes:no: ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; + no:yes:* ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=\$ac_header_compiler" +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} @%:@ ac_fn_c_check_header_mongrel +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by MusE $as_me 1.1, which was +generated by GNU Autoconf 2.65. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" + done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; + 2) + as_fn_append ac_configure_args1 " '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + as_fn_append ac_configure_args " '$ac_arg'" + ;; + esac + done +done +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + cat <<\_ASBOX +## ---------------- ## +## Cache variables. ## +## ---------------- ## +_ASBOX + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + cat <<\_ASBOX +## ----------------- ## +## Output variables. ## +## ----------------- ## +_ASBOX + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + cat <<\_ASBOX +## ------------------- ## +## File substitutions. ## +## ------------------- ## +_ASBOX + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + cat <<\_ASBOX +## ----------- ## +## confdefs.h. ## +## ----------- ## +_ASBOX + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +@%:@define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +@%:@define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +@%:@define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + +cat >>confdefs.h <<_ACEOF +@%:@define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + +cat >>confdefs.h <<_ACEOF +@%:@define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + +cat >>confdefs.h <<_ACEOF +@%:@define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + ac_site_file1=$CONFIG_SITE +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + +am__api_version='1.11' + +ac_aux_dir= +for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do + for ac_t in install-sh install.sh shtool; do + if test -f "$ac_dir/$ac_t"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/$ac_t -c" + break 2 + fi + done +done +if test -z "$ac_aux_dir"; then + as_fn_error "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if test "${ac_cv_path_install+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in @%:@(( + ./ | .// | /[cC]/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac + + done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 +$as_echo_n "checking whether build environment is sane... " >&6; } +# Just in case +sleep 1 +echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[\\\"\#\$\&\'\`$am_lf]*) + as_fn_error "unsafe absolute working directory name" "$LINENO" 5;; +esac +case $srcdir in + *[\\\"\#\$\&\'\`$am_lf\ \ ]*) + as_fn_error "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; +esac + +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + rm -f conftest.file + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + as_fn_error "ls -t appears to fail. Make sure there is not a broken +alias in your environment" "$LINENO" 5 + fi + + test "$2" = conftest.file + ) +then + # Ok. + : +else + as_fn_error "newly created file is older than distributed files! +Check your system clock" "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +test "$program_prefix" != NONE && + program_transform_name="s&^&$program_prefix&;$program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s&\$&$program_suffix&;$program_transform_name" +# Double any \ or $. +# By default was `s,x,x', remove it if useless. +ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' +program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` + +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` + +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 +$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} +fi + +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi + +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 +$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } +if test -z "$MKDIR_P"; then + if test "${ac_cv_path_mkdir+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in mkdir gmkdir; do + for ac_exec_ext in '' $ac_executable_extensions; do + { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue + case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir (GNU coreutils) '* | \ + 'mkdir (coreutils) '* | \ + 'mkdir (fileutils) '4.1*) + ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + break 3;; + esac + done + done + done +IFS=$as_save_IFS + +fi + + test -d ./--version && rmdir ./--version + if test "${ac_cv_path_mkdir+set}" = set; then + MKDIR_P="$ac_cv_path_mkdir -p" + else + # As a last resort, use the slow shell script. Don't cache a + # value for MKDIR_P within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + MKDIR_P="$ac_install_sh -d" + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 +$as_echo "$MKDIR_P" >&6; } + +mkdir_p="$MKDIR_P" +case $mkdir_p in + [\\/$]* | ?:[\\/]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_AWK+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AWK="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + cat >conftest.make <<\_ACEOF +SHELL = /bin/sh +all: + @echo '@@@%%%=$(MAKE)=@@@%%%' +_ACEOF +# GNU make sometimes prints "make[1]: Entering...", which would confuse us. +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac +rm -f conftest.make +fi +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + SET_MAKE= +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi + +rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null + +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + am__isrc=' -I$(srcdir)' + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + as_fn_error "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi + + +# Define the identity of the package. + PACKAGE='muse' + VERSION='1.1' + + +cat >>confdefs.h <<_ACEOF +@%:@define PACKAGE "$PACKAGE" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +@%:@define VERSION "$VERSION" +_ACEOF + +# Some tools Automake needs. + +ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} + + +AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} + + +AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} + + +AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} + + +MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} + +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +# Always define AMTAR for backward compatibility. + +AMTAR=${AMTAR-"${am_missing_run}tar"} + +am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' + + + + + +ac_config_headers="$ac_config_headers config.h" + +### AM_MAINTAINER_MODE + + if test x = y; then + INSIDE_GNOME_COMMON_TRUE= + INSIDE_GNOME_COMMON_FALSE='#' +else + INSIDE_GNOME_COMMON_TRUE='#' + INSIDE_GNOME_COMMON_FALSE= +fi + + + test -n "$ACLOCAL_FLAGS" && ACLOCAL="$ACLOCAL $ACLOCAL_FLAGS" + + for k in m4 ; do ACLOCAL="$ACLOCAL -I $k" ; done + + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +if test -z "$CXX"; then + if test -n "$CCC"; then + CXX=$CCC + else + if test -n "$ac_tool_prefix"; then + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CXX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CXX"; then + ac_cv_prog_CXX="$CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CXX=$ac_cv_prog_CXX +if test -n "$CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 +$as_echo "$CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CXX" && break + done +fi +if test -z "$CXX"; then + ac_ct_CXX=$CXX + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CXX"; then + ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CXX="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CXX=$ac_cv_prog_ac_ct_CXX +if test -n "$ac_ct_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 +$as_echo "$ac_ct_CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CXX" && break +done + + if test "x$ac_ct_CXX" = x; then + CXX="g++" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CXX=$ac_ct_CXX + fi +fi + + fi +fi +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C++ compiler works" >&5 +$as_echo_n "checking whether the C++ compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= + +else + ac_file='' +fi +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ as_fn_set_status 77 +as_fn_error "C++ compiler cannot create executables +See \`config.log' for more details." "$LINENO" 5; }; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler default output file name" >&5 +$as_echo_n "checking for C++ compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +ac_exeext=$ac_cv_exeext + +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." "$LINENO" 5; } +fi +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@include +int +main () +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "cannot run C++ compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." "$LINENO" 5; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if test "${ac_cv_objext+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "cannot compute suffix of object files: cannot compile +See \`config.log' for more details." "$LINENO" 5; } +fi +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 +$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } +if test "${ac_cv_cxx_compiler_gnu+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_cxx_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 +$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GXX=yes +else + GXX= +fi +ac_test_CXXFLAGS=${CXXFLAGS+set} +ac_save_CXXFLAGS=$CXXFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 +$as_echo_n "checking whether $CXX accepts -g... " >&6; } +if test "${ac_cv_prog_cxx_g+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_save_cxx_werror_flag=$ac_cxx_werror_flag + ac_cxx_werror_flag=yes + ac_cv_prog_cxx_g=no + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +else + CXXFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + +else + ac_cxx_werror_flag=$ac_save_cxx_werror_flag + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cxx_werror_flag=$ac_save_cxx_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 +$as_echo "$ac_cv_prog_cxx_g" >&6; } +if test "$ac_test_CXXFLAGS" = set; then + CXXFLAGS=$ac_save_CXXFLAGS +elif test $ac_cv_prog_cxx_g = yes; then + if test "$GXX" = yes; then + CXXFLAGS="-g -O2" + else + CXXFLAGS="-g" + fi +else + if test "$GXX" = yes; then + CXXFLAGS="-O2" + else + CXXFLAGS= + fi +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +DEPDIR="${am__leading_dot}deps" + +ac_config_commands="$ac_config_commands depfiles" + + +am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 +$as_echo_n "checking for style of include used by $am_make... " >&6; } +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 +$as_echo "$_am_result" >&6; } +rm -f confinc confmf + +@%:@ Check whether --enable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then : + enableval=$enable_dependency_tracking; +fi + +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi + if test "x$enable_dependency_tracking" != xno; then + AMDEP_TRUE= + AMDEP_FALSE='#' +else + AMDEP_TRUE='#' + AMDEP_FALSE= +fi + + + +depcc="$CXX" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CXX_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CXX_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CXX_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } +CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then + am__fastdepCXX_TRUE= + am__fastdepCXX_FALSE='#' +else + am__fastdepCXX_TRUE='#' + am__fastdepCXX_FALSE= +fi + + +case `pwd` in + *\ * | *\ *) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 +$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; +esac + + + +macro_version='2.2.6b' +macro_revision='1.3017' + + + + + + + + + + + + + +ltmain="$ac_aux_dir/ltmain.sh" + +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + as_fn_error "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if test "${ac_cv_build+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + as_fn_error "cannot guess build type; you must specify one" "$LINENO" 5 +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + as_fn_error "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) as_fn_error "invalid value of canonical build" "$LINENO" 5;; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if test "${ac_cv_host+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + as_fn_error "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) as_fn_error "invalid value of canonical host" "$LINENO" 5;; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $@%:@ != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "no acceptable C compiler found in \$PATH +See \`config.log' for more details." "$LINENO" 5; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if test "${ac_cv_c_compiler_gnu+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if test "${ac_cv_prog_cc_g+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if test "${ac_cv_prog_cc_c89+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +depcc="$CC" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if test "${ac_cv_path_SED+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_SED_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + as_fn_error "no acceptable sed could be found in \$PATH" "$LINENO" 5 + fi +else + ac_cv_path_SED=$SED +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed + +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if test "${ac_cv_path_GREP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if test "${ac_cv_path_EGREP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 +$as_echo_n "checking for fgrep... " >&6; } +if test "${ac_cv_path_FGREP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 + then ac_cv_path_FGREP="$GREP -F" + else + if test -z "$FGREP"; then + ac_path_FGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in fgrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue +# Check for GNU ac_path_FGREP and select it if it is found. + # Check for GNU $ac_path_FGREP +case `"$ac_path_FGREP" --version 2>&1` in +*GNU*) + ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'FGREP' >> "conftest.nl" + "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_FGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_FGREP="$ac_path_FGREP" + ac_path_FGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_FGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_FGREP"; then + as_fn_error "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_FGREP=$FGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 +$as_echo "$ac_cv_path_FGREP" >&6; } + FGREP="$ac_cv_path_FGREP" + + +test -z "$GREP" && GREP=grep + + + + + + + + + + + + + + + + + + + +@%:@ Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if test "${lt_cv_path_LD+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && as_fn_error "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if test "${lt_cv_prog_gnu_ld+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 +$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } +if test "${lt_cv_path_NM+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_nm_to_check="${ac_tool_prefix}nm" + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/$lt_tmp_nm" + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS="$lt_save_ifs" + done + : ${lt_cv_path_NM=no} +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 +$as_echo "$lt_cv_path_NM" >&6; } +if test "$lt_cv_path_NM" != "no"; then + NM="$lt_cv_path_NM" +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$ac_tool_prefix"; then + for ac_prog in "dumpbin -symbols" "link -dump -symbols" + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_DUMPBIN+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DUMPBIN"; then + ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DUMPBIN=$ac_cv_prog_DUMPBIN +if test -n "$DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 +$as_echo "$DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$DUMPBIN" && break + done +fi +if test -z "$DUMPBIN"; then + ac_ct_DUMPBIN=$DUMPBIN + for ac_prog in "dumpbin -symbols" "link -dump -symbols" +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DUMPBIN"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN +if test -n "$ac_ct_DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 +$as_echo "$ac_ct_DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_DUMPBIN" && break +done + + if test "x$ac_ct_DUMPBIN" = x; then + DUMPBIN=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DUMPBIN=$ac_ct_DUMPBIN + fi +fi + + + if test "$DUMPBIN" != ":"; then + NM="$DUMPBIN" + fi +fi +test -z "$NM" && NM=nm + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 +$as_echo_n "checking the name lister ($NM) interface... " >&6; } +if test "${lt_cv_nm_interface+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:__oline__: $ac_compile\"" >&5) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&5 + (eval echo "\"\$as_me:__oline__: $NM \\\"conftest.$ac_objext\\\"\"" >&5) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&5 + (eval echo "\"\$as_me:__oline__: output\"" >&5) + cat conftest.out >&5 + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 +$as_echo "$lt_cv_nm_interface" >&6; } + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +$as_echo_n "checking whether ln -s works... " >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +$as_echo "no, using $LN_S" >&6; } +fi + +# find the maximum length of command line arguments +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 +$as_echo_n "checking the maximum length of command line arguments... " >&6; } +if test "${lt_cv_sys_max_cmd_len+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + i=0 + teststring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8 ; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test "X"`$SHELL $0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \ + = "XX$teststring$teststring"; } >/dev/null 2>&1 && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac + +fi + +if test -n $lt_cv_sys_max_cmd_len ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 +$as_echo "$lt_cv_sys_max_cmd_len" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 +$as_echo "none" >&6; } +fi +max_cmd_len=$lt_cv_sys_max_cmd_len + + + + + + +: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 +$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } +# Try some XSI features +xsi_shell=no +( _lt_dummy="a/b/c" + test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \ + = c,a/b,, \ + && eval 'test $(( 1 + 1 )) -eq 2 \ + && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ + && xsi_shell=yes +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 +$as_echo "$xsi_shell" >&6; } + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 +$as_echo_n "checking whether the shell understands \"+=\"... " >&6; } +lt_shell_append=no +( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ + >/dev/null 2>&1 \ + && lt_shell_append=yes +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 +$as_echo "$lt_shell_append" >&6; } + + +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi + + + + + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 +$as_echo_n "checking for $LD option to reload object files... " >&6; } +if test "${lt_cv_ld_reload_flag+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_reload_flag='-r' +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 +$as_echo "$lt_cv_ld_reload_flag" >&6; } +reload_flag=$lt_cv_ld_reload_flag +case $reload_flag in +"" | " "*) ;; +*) reload_flag=" $reload_flag" ;; +esac +reload_cmds='$LD$reload_flag -o $output$reload_objs' +case $host_os in + darwin*) + if test "$GCC" = yes; then + reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' + else + reload_cmds='$LD$reload_flag -o $output$reload_objs' + fi + ;; +esac + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. +set dummy ${ac_tool_prefix}objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OBJDUMP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + # Extract the first word of "objdump", so it can be a program name with args. +set dummy objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OBJDUMP="objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +$as_echo "$ac_ct_OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OBJDUMP" = x; then + OBJDUMP="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJDUMP=$ac_ct_OBJDUMP + fi +else + OBJDUMP="$ac_cv_prog_OBJDUMP" +fi + +test -z "$OBJDUMP" && OBJDUMP=objdump + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 +$as_echo_n "checking how to recognize dependent libraries... " >&6; } +if test "${lt_cv_deplibs_check_method+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# `unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# which responds to the $file_magic_cmd with a given extended regex. +# If you have `file' or equivalent on your system and you're not sure +# whether `pass_all' will *always* work, you probably want this one. + +case $host_os in +aix[4-9]*) + lt_cv_deplibs_check_method=pass_all + ;; + +beos*) + lt_cv_deplibs_check_method=pass_all + ;; + +bsdi[45]*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' + lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; + +cygwin*) + # func_win32_libid is a shell function defined in ltmain.sh + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + ;; + +mingw* | pw32*) + # Base MSYS/MinGW do not provide the 'file' command needed by + # func_win32_libid shell function, so use a weaker test based on 'objdump', + # unless we find 'file', for example because we are cross-compiling. + if ( file / ) >/dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]' + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[3-9]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 +$as_echo "$lt_cv_deplibs_check_method" >&6; } +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + + + + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_AR+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_AR+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + +test -z "$AR" && AR=ar +test -z "$AR_FLAGS" && AR_FLAGS=cru + + + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +test -z "$STRIP" && STRIP=: + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_RANLIB+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi + +test -z "$RANLIB" && RANLIB=: + + + + + + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# Check for command to grab the raw symbol name followed by C symbol from nm. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 +$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } +if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[BCDEGRST]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([_A-Za-z][_A-Za-z0-9]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[BCDT]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[ABCDGISTW]' + ;; +hpux*) + if test "$host_cpu" = ia64; then + symcode='[ABCDEGRST]' + fi + ;; +irix* | nonstopux*) + symcode='[BCDEGRST]' + ;; +osf*) + symcode='[BCDEGQRST]' + ;; +solaris*) + symcode='[BDRT]' + ;; +sco3.2v5*) + symcode='[DT]' + ;; +sysv4.2uw2*) + symcode='[DT]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[ABDT]' + ;; +sysv4) + symcode='[DFNSTU]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[ABCDGIRSTW]' ;; +esac + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function + # and D for any global variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK '"\ +" {last_section=section; section=\$ 3};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ +" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ +" s[1]~/^[@?]/{print s[1], s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + # Now try to grab the symbols. + nlist=conftest.nm + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\""; } >&5 + (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +const struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_save_LIBS="$LIBS" + lt_save_CFLAGS="$CFLAGS" + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext}; then + pipe_works=yes + fi + LIBS="$lt_save_LIBS" + CFLAGS="$lt_save_CFLAGS" + else + echo "cannot find nm_test_func in $nlist" >&5 + fi + else + echo "cannot find nm_test_var in $nlist" >&5 + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 + fi + else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done + +fi + +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 +$as_echo "failed" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 +$as_echo "ok" >&6; } +fi + + + + + + + + + + + + + + + + + + + + + + + +@%:@ Check whether --enable-libtool-lock was given. +if test "${enable_libtool_lock+set}" = set; then : + enableval=$enable_libtool_lock; +fi + +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '#line __oline__ "configure"' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_i386" + ;; + ppc64-*linux*|powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + ppc*-*linux*|powerpc*-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 +$as_echo_n "checking whether the C compiler needs -belf... " >&6; } +if test "${lt_cv_cc_needs_belf+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_cc_needs_belf=yes +else + lt_cv_cc_needs_belf=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 +$as_echo "$lt_cv_cc_needs_belf" >&6; } + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; +sparc*-*solaris*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) LD="${LD-ld} -m elf64_sparc" ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks="$enable_libtool_lock" + + + case $host_os in + rhapsody* | darwin*) + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. +set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_DSYMUTIL+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DSYMUTIL"; then + ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DSYMUTIL=$ac_cv_prog_DSYMUTIL +if test -n "$DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 +$as_echo "$DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DSYMUTIL"; then + ac_ct_DSYMUTIL=$DSYMUTIL + # Extract the first word of "dsymutil", so it can be a program name with args. +set dummy dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DSYMUTIL"; then + ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL +if test -n "$ac_ct_DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 +$as_echo "$ac_ct_DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DSYMUTIL" = x; then + DSYMUTIL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DSYMUTIL=$ac_ct_DSYMUTIL + fi +else + DSYMUTIL="$ac_cv_prog_DSYMUTIL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. +set dummy ${ac_tool_prefix}nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_NMEDIT+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NMEDIT"; then + ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +NMEDIT=$ac_cv_prog_NMEDIT +if test -n "$NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 +$as_echo "$NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_NMEDIT"; then + ac_ct_NMEDIT=$NMEDIT + # Extract the first word of "nmedit", so it can be a program name with args. +set dummy nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_NMEDIT"; then + ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_NMEDIT="nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT +if test -n "$ac_ct_NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 +$as_echo "$ac_ct_NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_NMEDIT" = x; then + NMEDIT=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + NMEDIT=$ac_ct_NMEDIT + fi +else + NMEDIT="$ac_cv_prog_NMEDIT" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. +set dummy ${ac_tool_prefix}lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_LIPO+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LIPO"; then + ac_cv_prog_LIPO="$LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_LIPO="${ac_tool_prefix}lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LIPO=$ac_cv_prog_LIPO +if test -n "$LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 +$as_echo "$LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LIPO"; then + ac_ct_LIPO=$LIPO + # Extract the first word of "lipo", so it can be a program name with args. +set dummy lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_LIPO+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LIPO"; then + ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_LIPO="lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO +if test -n "$ac_ct_LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 +$as_echo "$ac_ct_LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LIPO" = x; then + LIPO=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LIPO=$ac_ct_LIPO + fi +else + LIPO="$ac_cv_prog_LIPO" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OTOOL+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL"; then + ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OTOOL="${ac_tool_prefix}otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL=$ac_cv_prog_OTOOL +if test -n "$OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 +$as_echo "$OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL"; then + ac_ct_OTOOL=$OTOOL + # Extract the first word of "otool", so it can be a program name with args. +set dummy otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_OTOOL+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL"; then + ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OTOOL="otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL +if test -n "$ac_ct_OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 +$as_echo "$ac_ct_OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL" = x; then + OTOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL=$ac_ct_OTOOL + fi +else + OTOOL="$ac_cv_prog_OTOOL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OTOOL64+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL64"; then + ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL64=$ac_cv_prog_OTOOL64 +if test -n "$OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 +$as_echo "$OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL64"; then + ac_ct_OTOOL64=$OTOOL64 + # Extract the first word of "otool64", so it can be a program name with args. +set dummy otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_OTOOL64+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL64"; then + ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OTOOL64="otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 +if test -n "$ac_ct_OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 +$as_echo "$ac_ct_OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL64" = x; then + OTOOL64=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL64=$ac_ct_OTOOL64 + fi +else + OTOOL64="$ac_cv_prog_OTOOL64" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 +$as_echo_n "checking for -single_module linker flag... " >&6; } +if test "${lt_cv_apple_cc_single_mod+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_apple_cc_single_mod=no + if test -z "${LT_MULTI_MODULE}"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&5 + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 +$as_echo "$lt_cv_apple_cc_single_mod" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 +$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } +if test "${lt_cv_ld_exported_symbols_list+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_ld_exported_symbols_list=yes +else + lt_cv_ld_exported_symbols_list=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 +$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } + case $host_os in + rhapsody* | darwin1.[012]) + _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[91]*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + 10.[012]*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test "$lt_cv_apple_cc_single_mod" = "yes"; then + _lt_dar_single_mod='$single_module' + fi + if test "$lt_cv_ld_exported_symbols_list" = "yes"; then + _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + if test "$DSYMUTIL" != ":"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if test "${ac_cv_prog_CPP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@ifdef __STDC__ +@%:@ include +@%:@else +@%:@ include +@%:@endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@ifdef __STDC__ +@%:@ include +@%:@else +@%:@ include +@%:@endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if test "${ac_cv_header_stdc+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "@%:@define STDC_HEADERS 1" >>confdefs.h + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then : + cat >>confdefs.h <<_ACEOF +@%:@define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +for ac_header in dlfcn.h +do : + ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default +" +if test "x$ac_cv_header_dlfcn_h" = x""yes; then : + cat >>confdefs.h <<_ACEOF +@%:@define HAVE_DLFCN_H 1 +_ACEOF + +fi + +done + + + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +if test -z "$CXX"; then + if test -n "$CCC"; then + CXX=$CCC + else + if test -n "$ac_tool_prefix"; then + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CXX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CXX"; then + ac_cv_prog_CXX="$CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CXX=$ac_cv_prog_CXX +if test -n "$CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 +$as_echo "$CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CXX" && break + done +fi +if test -z "$CXX"; then + ac_ct_CXX=$CXX + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CXX"; then + ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CXX="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CXX=$ac_cv_prog_ac_ct_CXX +if test -n "$ac_ct_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 +$as_echo "$ac_ct_CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CXX" && break +done + + if test "x$ac_ct_CXX" = x; then + CXX="g++" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CXX=$ac_ct_CXX + fi +fi + + fi +fi +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 +$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } +if test "${ac_cv_cxx_compiler_gnu+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_cxx_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 +$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GXX=yes +else + GXX= +fi +ac_test_CXXFLAGS=${CXXFLAGS+set} +ac_save_CXXFLAGS=$CXXFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 +$as_echo_n "checking whether $CXX accepts -g... " >&6; } +if test "${ac_cv_prog_cxx_g+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_save_cxx_werror_flag=$ac_cxx_werror_flag + ac_cxx_werror_flag=yes + ac_cv_prog_cxx_g=no + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +else + CXXFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + +else + ac_cxx_werror_flag=$ac_save_cxx_werror_flag + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cxx_werror_flag=$ac_save_cxx_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 +$as_echo "$ac_cv_prog_cxx_g" >&6; } +if test "$ac_test_CXXFLAGS" = set; then + CXXFLAGS=$ac_save_CXXFLAGS +elif test $ac_cv_prog_cxx_g = yes; then + if test "$GXX" = yes; then + CXXFLAGS="-g -O2" + else + CXXFLAGS="-g" + fi +else + if test "$GXX" = yes; then + CXXFLAGS="-O2" + else + CXXFLAGS= + fi +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +depcc="$CXX" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CXX_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CXX_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CXX_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } +CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then + am__fastdepCXX_TRUE= + am__fastdepCXX_FALSE='#' +else + am__fastdepCXX_TRUE='#' + am__fastdepCXX_FALSE= +fi + + +if test -n "$CXX" && ( test "X$CXX" != "Xno" && + ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || + (test "X$CXX" != "Xg++"))) ; then + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 +$as_echo_n "checking how to run the C++ preprocessor... " >&6; } +if test -z "$CXXCPP"; then + if test "${ac_cv_prog_CXXCPP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CXXCPP needs to be expanded + for CXXCPP in "$CXX -E" "/lib/cpp" + do + ac_preproc_ok=false +for ac_cxx_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@ifdef __STDC__ +@%:@ include +@%:@else +@%:@ include +@%:@endif + Syntax error +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@include +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CXXCPP=$CXXCPP + +fi + CXXCPP=$ac_cv_prog_CXXCPP +else + ac_cv_prog_CXXCPP=$CXXCPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 +$as_echo "$CXXCPP" >&6; } +ac_preproc_ok=false +for ac_cxx_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@ifdef __STDC__ +@%:@ include +@%:@else +@%:@ include +@%:@endif + Syntax error +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@include +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +_lt_caught_CXX_error=yes; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +else + _lt_caught_CXX_error=yes +fi + + + + + +# Set options + + + + enable_dlopen=no + + + enable_win32_dll=no + + + @%:@ Check whether --enable-shared was given. +if test "${enable_shared+set}" = set; then : + enableval=$enable_shared; p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_shared=yes +fi + + + + + + + + + + @%:@ Check whether --enable-static was given. +if test "${enable_static+set}" = set; then : + enableval=$enable_static; p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_static=yes +fi + + + + + + + + + + +@%:@ Check whether --with-pic was given. +if test "${with_pic+set}" = set; then : + withval=$with_pic; pic_mode="$withval" +else + pic_mode=default +fi + + +test -z "$pic_mode" && pic_mode=default + + + + + + + + @%:@ Check whether --enable-fast-install was given. +if test "${enable_fast_install+set}" = set; then : + enableval=$enable_fast_install; p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_fast_install=yes +fi + + + + + + + + + + + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ltmain" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' + + + + + + + + + + + + + + + + + + + + + + + + + +test -z "$LN_S" && LN_S="ln -s" + + + + + + + + + + + + + + +if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 +$as_echo_n "checking for objdir... " >&6; } +if test "${lt_cv_objdir+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 +$as_echo "$lt_cv_objdir" >&6; } +objdir=$lt_cv_objdir + + + + + +cat >>confdefs.h <<_ACEOF +@%:@define LT_OBJDIR "$lt_cv_objdir/" +_ACEOF + + + + + + + + + + + + + + + + + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='s/\(["`$\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld="$lt_cv_prog_gnu_ld" + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` + + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 +$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } +if test "${lt_cv_path_MAGIC_CMD+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/${ac_tool_prefix}file; then + lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + + +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 +$as_echo_n "checking for file... " >&6; } +if test "${lt_cv_path_MAGIC_CMD+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/file; then + lt_cv_path_MAGIC_CMD="$ac_dir/file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + else + MAGIC_CMD=: + fi +fi + + fi + ;; +esac + +# Use C for the default configuration in the libtool script + +lt_save_CC="$CC" +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +objext=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* + +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* + + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + +lt_prog_compiler_no_builtin_flag= + +if test "$GCC" = yes; then + lt_prog_compiler_no_builtin_flag=' -fno-builtin' + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } +if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_rtti_exceptions=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="-fno-rtti -fno-exceptions" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:__oline__: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_rtti_exceptions=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } + +if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then + lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" +else + : +fi + +fi + + + + + + + lt_prog_compiler_wl= +lt_prog_compiler_pic= +lt_prog_compiler_static= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } + + if test "$GCC" = yes; then + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_static='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic='-fno-common' + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + ;; + + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic=-Kconform_pic + fi + ;; + + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + else + lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static='-non_shared' + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + # old Intel for x86_64 which still supported -KPIC. + ecc*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='--shared' + lt_prog_compiler_static='--static' + ;; + pgcc* | pgf77* | pgf90* | pgf95*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + ccc*) + lt_prog_compiler_wl='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + xl*) + # IBM XL C 8.0/Fortran 10.1 on PPC + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-qpic' + lt_prog_compiler_static='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C 5.9 + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Wl,' + ;; + *Sun\ F*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='' + ;; + esac + ;; + esac + ;; + + newsos6) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + + rdos*) + lt_prog_compiler_static='-non_shared' + ;; + + solaris*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + case $cc_basename in + f77* | f90* | f95*) + lt_prog_compiler_wl='-Qoption ld ';; + *) + lt_prog_compiler_wl='-Wl,';; + esac + ;; + + sunos4*) + lt_prog_compiler_wl='-Qoption ld ' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + lt_prog_compiler_pic='-Kconform_pic' + lt_prog_compiler_static='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + unicos*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_can_build_shared=no + ;; + + uts4*) + lt_prog_compiler_pic='-pic' + lt_prog_compiler_static='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared=no + ;; + esac + fi + +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic= + ;; + *) + lt_prog_compiler_pic="$lt_prog_compiler_pic@&t@ -DPIC" + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5 +$as_echo "$lt_prog_compiler_pic" >&6; } + + + + + + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } +if test "${lt_cv_prog_compiler_pic_works+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_works=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic@&t@ -DPIC" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:__oline__: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 +$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } + +if test x"$lt_cv_prog_compiler_pic_works" = xyes; then + case $lt_prog_compiler_pic in + "" | " "*) ;; + *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; + esac +else + lt_prog_compiler_pic= + lt_prog_compiler_can_build_shared=no +fi + +fi + + + + + + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if test "${lt_cv_prog_compiler_static_works+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_static_works=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works=yes + fi + else + lt_cv_prog_compiler_static_works=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 +$as_echo "$lt_cv_prog_compiler_static_works" >&6; } + +if test x"$lt_cv_prog_compiler_static_works" = xyes; then + : +else + lt_prog_compiler_static= +fi + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test "${lt_cv_prog_compiler_c_o+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:__oline__: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test "${lt_cv_prog_compiler_c_o+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:__oline__: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } + if test "$hard_links" = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + + runpath_var= + allow_undefined_flag= + always_export_symbols=no + archive_cmds= + archive_expsym_cmds= + compiler_needs_object=no + enable_shared_with_static_runtimes=no + export_dynamic_flag_spec= + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + hardcode_automatic=no + hardcode_direct=no + hardcode_direct_absolute=no + hardcode_libdir_flag_spec= + hardcode_libdir_flag_spec_ld= + hardcode_libdir_separator= + hardcode_minus_L=no + hardcode_shlibpath_var=unsupported + inherit_rpath=no + link_all_deplibs=unknown + module_cmds= + module_expsym_cmds= + old_archive_from_new_cmds= + old_archive_from_expsyms_cmds= + thread_safe_flag_spec= + whole_archive_flag_spec= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; + linux* | k*bsd*-gnu) + link_all_deplibs=no + ;; + esac + + ld_shlibs=yes + if test "$with_gnu_ld" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + export_dynamic_flag_spec='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec= + fi + supports_anon_versioning=no + case `$LD -v 2>&1` in + *GNU\ gold*) supports_anon_versioning=yes ;; + *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[3-9]*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.9.1, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to modify your PATH +*** so that a non-GNU linker is found, and then restart. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + allow_undefined_flag=unsupported + always_export_symbols=no + enable_shared_with_static_runtimes=yes + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs=no + fi + ;; + + interix[3-9]*) + hardcode_direct=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + tmp_diet=no + if test "$host_os" = linux-dietlibc; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test "$tmp_diet" = no + then + tmp_addflag= + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + whole_archive_flag_spec= + tmp_sharedflag='--shared' ;; + xl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + compiler_needs_object=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + xlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' + hardcode_libdir_flag_spec= + hardcode_libdir_flag_spec_ld='-rpath $libdir' + archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + ld_shlibs=no + fi + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + ;; + + sunos4*) + archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + + if test "$ld_shlibs" = no; then + runpath_var= + hardcode_libdir_flag_spec= + export_dynamic_flag_spec= + whole_archive_flag_spec= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag=unsupported + always_export_symbols=yes + archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + + aix[4-9]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds='' + hardcode_direct=yes + hardcode_direct_absolute=yes + hardcode_libdir_separator=':' + link_all_deplibs=yes + file_list_spec='${wl}-f,' + + if test "$GCC" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + link_all_deplibs=no + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + export_dynamic_flag_spec='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag="-z nodefs" + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag=' ${wl}-bernotok' + allow_undefined_flag=' ${wl}-berok' + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec='$convenience' + archive_cmds_need_lc=yes + # This is similar to how AIX traditionally builds its shared libraries. + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + bsdi[45]*) + export_dynamic_flag_spec=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_from_new_cmds='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' + fix_srcfile_path='`cygpath -w "$srcfile"`' + enable_shared_with_static_runtimes=yes + ;; + + darwin* | rhapsody*) + + + archive_cmds_need_lc=no + hardcode_direct=no + hardcode_automatic=yes + hardcode_shlibpath_var=unsupported + whole_archive_flag_spec='' + link_all_deplibs=yes + allow_undefined_flag="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=echo + archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + + else + ld_shlibs=no + fi + + ;; + + dgux*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + freebsd1*) + ld_shlibs=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + hpux9*) + if test "$GCC" = yes; then + archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + export_dynamic_flag_spec='${wl}-E' + ;; + + hpux10*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_flag_spec_ld='+b $libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='${wl}-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + fi + ;; + + hpux11*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct=no + hardcode_shlibpath_var=no + ;; + *) + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int foo(void) {} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' + +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$save_LDFLAGS" + else + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + inherit_rpath=yes + link_all_deplibs=yes + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + newsos6) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_shlibpath_var=no + ;; + + *nto* | *qnx*) + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + hardcode_direct=yes + hardcode_shlibpath_var=no + hardcode_direct_absolute=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + else + case $host_os in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-R$libdir' + ;; + *) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + esac + fi + else + ld_shlibs=no + fi + ;; + + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec='-rpath $libdir' + fi + archive_cmds_need_lc='no' + hardcode_libdir_separator=: + ;; + + solaris*) + no_undefined_flag=' -z defs' + if test "$GCC" = yes; then + wlarc='${wl}' + archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='${wl}' + archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_shlibpath_var=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. GCC discards it without `$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test "$GCC" = yes; then + whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + else + whole_archive_flag_spec='-z allextract$convenience -z defaultextract' + fi + ;; + esac + link_all_deplibs=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds='$CC -r -o $output$reload_objs' + hardcode_direct=no + ;; + motorola) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var=no + ;; + + sysv4.3*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + export_dynamic_flag_spec='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag='${wl}-z,text' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag='${wl}-z,text' + allow_undefined_flag='${wl}-z,nodefs' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='${wl}-R,$libdir' + hardcode_libdir_separator=':' + link_all_deplibs=yes + export_dynamic_flag_spec='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + *) + ld_shlibs=no + ;; + esac + + if test x$host_vendor = xsni; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + export_dynamic_flag_spec='${wl}-Blargedynsym' + ;; + esac + fi + fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 +$as_echo "$ld_shlibs" >&6; } +test "$ld_shlibs" = no && can_build_shared=no + +with_gnu_ld=$with_gnu_ld + + + + + + + + + + + + + + + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl + pic_flag=$lt_prog_compiler_pic + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag + allow_undefined_flag= + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 + (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + then + archive_cmds_need_lc=no + else + archive_cmds_need_lc=yes + fi + allow_undefined_flag=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc" >&5 +$as_echo "$archive_cmds_need_lc" >&6; } + ;; + esac + fi + ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } + +if test "$GCC" = yes; then + case $host_os in + darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; + *) lt_awk_arg="/^libraries:/" ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'` + else + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary. + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path/$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" + else + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk ' +BEGIN {RS=" "; FS="/|\n";} { + lt_foo=""; + lt_count=0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo="/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[lt_foo]++; } + if (lt_freq[lt_foo] == 1) { print lt_foo; } +}'` + sys_lib_search_path_spec=`$ECHO $lt_search_path_spec` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[4-9]*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[123]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +interix[3-9]*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # Some binutils ld are patched to set DT_RUNPATH + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : + shlibpath_overrides_runpath=yes +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } +hardcode_action= +if test -n "$hardcode_libdir_flag_spec" || + test -n "$runpath_var" || + test "X$hardcode_automatic" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$hardcode_direct" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && + test "$hardcode_minus_L" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action=unsupported +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 +$as_echo "$hardcode_action" >&6; } + +if test "$hardcode_action" = relink || + test "$inherit_rpath" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if test "${ac_cv_lib_dl_dlopen+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + +fi + + ;; + + *) + ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" +if test "x$ac_cv_func_shl_load" = x""yes; then : + lt_cv_dlopen="shl_load" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 +$as_echo_n "checking for shl_load in -ldld... " >&6; } +if test "${ac_cv_lib_dld_shl_load+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shl_load (); +int +main () +{ +return shl_load (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_shl_load=yes +else + ac_cv_lib_dld_shl_load=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 +$as_echo "$ac_cv_lib_dld_shl_load" >&6; } +if test "x$ac_cv_lib_dld_shl_load" = x""yes; then : + lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" +else + ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" +if test "x$ac_cv_func_dlopen" = x""yes; then : + lt_cv_dlopen="dlopen" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if test "${ac_cv_lib_dl_dlopen+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 +$as_echo_n "checking for dlopen in -lsvld... " >&6; } +if test "${ac_cv_lib_svld_dlopen+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsvld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_svld_dlopen=yes +else + ac_cv_lib_svld_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 +$as_echo "$ac_cv_lib_svld_dlopen" >&6; } +if test "x$ac_cv_lib_svld_dlopen" = x""yes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 +$as_echo_n "checking for dld_link in -ldld... " >&6; } +if test "${ac_cv_lib_dld_dld_link+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dld_link (); +int +main () +{ +return dld_link (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_dld_link=yes +else + ac_cv_lib_dld_dld_link=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 +$as_echo "$ac_cv_lib_dld_dld_link" >&6; } +if test "x$ac_cv_lib_dld_dld_link" = x""yes; then : + lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" +fi + + +fi + + +fi + + +fi + + +fi + + +fi + + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 +$as_echo_n "checking whether a program can dlopen itself... " >&6; } +if test "${lt_cv_dlopen_self+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line __oline__ "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 +$as_echo "$lt_cv_dlopen_self" >&6; } + + if test "x$lt_cv_dlopen_self" = xyes; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 +$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } +if test "${lt_cv_dlopen_self_static+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self_static=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line __oline__ "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self_static=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 +$as_echo "$lt_cv_dlopen_self_static" >&6; } + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi + + + + + + + + + + + + + + + + + +striplib= +old_striplib= +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 +$as_echo_n "checking whether stripping libraries is possible... " >&6; } +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + fi + ;; + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + ;; + esac +fi + + + + + + + + + + + + + # Report which library types will actually be built + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 +$as_echo_n "checking if libtool supports shared libraries... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 +$as_echo "$can_build_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 +$as_echo_n "checking whether to build shared libraries... " >&6; } + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[4-9]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 +$as_echo "$enable_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 +$as_echo_n "checking whether to build static libraries... " >&6; } + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 +$as_echo "$enable_static" >&6; } + + + + +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC="$lt_save_CC" + + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +archive_cmds_need_lc_CXX=no +allow_undefined_flag_CXX= +always_export_symbols_CXX=no +archive_expsym_cmds_CXX= +compiler_needs_object_CXX=no +export_dynamic_flag_spec_CXX= +hardcode_direct_CXX=no +hardcode_direct_absolute_CXX=no +hardcode_libdir_flag_spec_CXX= +hardcode_libdir_flag_spec_ld_CXX= +hardcode_libdir_separator_CXX= +hardcode_minus_L_CXX=no +hardcode_shlibpath_var_CXX=unsupported +hardcode_automatic_CXX=no +inherit_rpath_CXX=no +module_cmds_CXX= +module_expsym_cmds_CXX= +link_all_deplibs_CXX=unknown +old_archive_cmds_CXX=$old_archive_cmds +no_undefined_flag_CXX= +whole_archive_flag_spec_CXX= +enable_shared_with_static_runtimes_CXX=no + +# Source file extension for C++ test sources. +ac_ext=cpp + +# Object file extension for compiled C++ test sources. +objext=o +objext_CXX=$objext + +# No sense in running all these tests if we already determined that +# the CXX compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_caught_CXX_error" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="int some_variable = 0;" + + # Code to be used in simple link tests + lt_simple_link_test_code='int main(int, char *[]) { return(0); }' + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + + # save warnings/boilerplate of simple test code + ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* + + ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* + + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_LD=$LD + lt_save_GCC=$GCC + GCC=$GXX + lt_save_with_gnu_ld=$with_gnu_ld + lt_save_path_LD=$lt_cv_path_LD + if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then + lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx + else + $as_unset lt_cv_prog_gnu_ld + fi + if test -n "${lt_cv_path_LDCXX+set}"; then + lt_cv_path_LD=$lt_cv_path_LDCXX + else + $as_unset lt_cv_path_LD + fi + test -z "${LDCXX+set}" || LD=$LDCXX + CC=${CXX-"c++"} + compiler=$CC + compiler_CXX=$CC + for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` + + + if test -n "$compiler"; then + # We don't want -fno-exception when compiling C++ code, so set the + # no_builtin_flag separately + if test "$GXX" = yes; then + lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' + else + lt_prog_compiler_no_builtin_flag_CXX= + fi + + if test "$GXX" = yes; then + # Set up default GNU C++ configuration + + + +@%:@ Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if test "${lt_cv_path_LD+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && as_fn_error "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if test "${lt_cv_prog_gnu_ld+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + + + + + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test "$with_gnu_ld" = yes; then + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + + # If archive_cmds runs LD, not CC, wlarc should be empty + # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to + # investigate it a little bit more. (MM) + wlarc='${wl}' + + # ancient GNU ld didn't support --whole-archive et. al. + if eval "`$CC -print-prog-name=ld` --help 2>&1" | + $GREP 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec_CXX= + fi + else + with_gnu_ld=no + wlarc= + + # A generic and very simple default shared library creation + # command for GNU C++ for the case where it uses the native + # linker, instead of GNU ld. If possible, this setting should + # overridden to take advantage of the native linker features on + # the platform it is being used on. + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + fi + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' + + else + GXX=no + with_gnu_ld=no + wlarc= + fi + + # PORTME: fill in a description of your system's C++ link characteristics + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + ld_shlibs_CXX=yes + case $host_os in + aix3*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aix[4-9]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds_CXX='' + hardcode_direct_CXX=yes + hardcode_direct_absolute_CXX=yes + hardcode_libdir_separator_CXX=':' + link_all_deplibs_CXX=yes + file_list_spec_CXX='${wl}-f,' + + if test "$GXX" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct_CXX=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L_CXX=yes + hardcode_libdir_flag_spec_CXX='-L$libdir' + hardcode_libdir_separator_CXX= + fi + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + export_dynamic_flag_spec_CXX='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to + # export. + always_export_symbols_CXX=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag_CXX='-berok' + # Determine the default libpath from the value encoded in an empty + # executable. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" + + archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag_CXX="-z nodefs" + archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag_CXX=' ${wl}-bernotok' + allow_undefined_flag_CXX=' ${wl}-berok' + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec_CXX='$convenience' + archive_cmds_need_lc_CXX=yes + # This is similar to how AIX traditionally builds its shared + # libraries. + archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag_CXX=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs_CXX=no + fi + ;; + + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec_CXX='-L$libdir' + allow_undefined_flag_CXX=unsupported + always_export_symbols_CXX=no + enable_shared_with_static_runtimes_CXX=yes + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs_CXX=no + fi + ;; + darwin* | rhapsody*) + + + archive_cmds_need_lc_CXX=no + hardcode_direct_CXX=no + hardcode_automatic_CXX=yes + hardcode_shlibpath_var_CXX=unsupported + whole_archive_flag_spec_CXX='' + link_all_deplibs_CXX=yes + allow_undefined_flag_CXX="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=echo + archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + if test "$lt_cv_apple_cc_single_mod" != "yes"; then + archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" + archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" + fi + + else + ld_shlibs_CXX=no + fi + + ;; + + dgux*) + case $cc_basename in + ec++*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + ghcx*) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + freebsd[12]*) + # C++ shared libraries reported to be fairly broken before + # switch to ELF + ld_shlibs_CXX=no + ;; + + freebsd-elf*) + archive_cmds_need_lc_CXX=no + ;; + + freebsd* | dragonfly*) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + ld_shlibs_CXX=yes + ;; + + gnu*) + ;; + + hpux9*) + hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_CXX=: + export_dynamic_flag_spec_CXX='${wl}-E' + hardcode_direct_CXX=yes + hardcode_minus_L_CXX=yes # Not in the search PATH, + # but as the default + # location of the library. + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aCC*) + archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + ;; + *) + if test "$GXX" = yes; then + archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + + hpux10*|hpux11*) + if test $with_gnu_ld = no; then + hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_CXX=: + + case $host_cpu in + hppa*64*|ia64*) + ;; + *) + export_dynamic_flag_spec_CXX='${wl}-E' + ;; + esac + fi + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct_CXX=no + hardcode_shlibpath_var_CXX=no + ;; + *) + hardcode_direct_CXX=yes + hardcode_direct_absolute_CXX=yes + hardcode_minus_L_CXX=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + esac + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aCC*) + case $host_cpu in + hppa*64*) + archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + ;; + *) + if test "$GXX" = yes; then + if test $with_gnu_ld = no; then + case $host_cpu in + hppa*64*) + archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + + interix[3-9]*) + hardcode_direct_CXX=no + hardcode_shlibpath_var_CXX=no + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + export_dynamic_flag_spec_CXX='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + irix5* | irix6*) + case $cc_basename in + CC*) + # SGI C++ + archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + + # Archives containing C++ object files must be created using + # "CC -ar", where "CC" is the IRIX C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test "$GXX" = yes; then + if test "$with_gnu_ld" = no; then + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib' + fi + fi + link_all_deplibs_CXX=yes + ;; + esac + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_CXX=: + inherit_rpath_CXX=yes + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc* | ecpc* ) + # Intel C++ + with_gnu_ld=yes + # version 8.0 and above of icpc choke on multiply defined symbols + # if we add $predep_objects and $postdep_objects, however 7.1 and + # earlier do not add the objects themselves. + case `$CC -V 2>&1` in + *"Version 7."*) + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 8.0 or newer + tmp_idyn= + case $host_cpu in + ia64*) tmp_idyn=' -i_dynamic';; + esac + archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + archive_cmds_need_lc_CXX=no + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + case `$CC -V` in + *pgCC\ [1-5]* | *pgcpp\ [1-5]*) + prelink_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ + compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"' + old_archive_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ + $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~ + $RANLIB $oldlib' + archive_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + archive_expsym_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + *) # Version 6 will use weak symbols + archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + esac + + hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + ;; + cxx*) + # Compaq C++ + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' + + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec_CXX='-rpath $libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + ;; + xl*) + # IBM XL 8.0 on PPC, with GNU ld + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + no_undefined_flag_CXX=' -zdefs' + archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' + hardcode_libdir_flag_spec_CXX='-R$libdir' + whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + compiler_needs_object_CXX=yes + + # Not sure whether something based on + # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 + # would be better. + output_verbose_link_cmd='echo' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' + ;; + esac + ;; + esac + ;; + + lynxos*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + m88k*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + mvs*) + case $cc_basename in + cxx*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + hardcode_libdir_flag_spec_CXX='-R$libdir' + hardcode_direct_CXX=yes + hardcode_shlibpath_var_CXX=no + fi + # Workaround some broken pre-1.5 toolchains + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' + ;; + + *nto* | *qnx*) + ld_shlibs_CXX=yes + ;; + + openbsd2*) + # C++ shared libraries are fairly broken + ld_shlibs_CXX=no + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + hardcode_direct_CXX=yes + hardcode_shlibpath_var_CXX=no + hardcode_direct_absolute_CXX=yes + archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' + export_dynamic_flag_spec_CXX='${wl}-E' + whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + fi + output_verbose_link_cmd=echo + else + ld_shlibs_CXX=no + fi + ;; + + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + hardcode_libdir_separator_CXX=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + case $host in + osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; + *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; + esac + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + cxx*) + case $host in + osf3*) + allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + ;; + *) + allow_undefined_flag_CXX=' -expect_unresolved \*' + archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~ + $RM $lib.exp' + hardcode_libdir_flag_spec_CXX='-rpath $libdir' + ;; + esac + + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' + case $host in + osf3*) + archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + *) + archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + esac + + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' + + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + + psos*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + lcc*) + # Lucid + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + solaris*) + case $cc_basename in + CC*) + # Sun C++ 4.2, 5.x and Centerline C++ + archive_cmds_need_lc_CXX=yes + no_undefined_flag_CXX=' -zdefs' + archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + hardcode_libdir_flag_spec_CXX='-R$libdir' + hardcode_shlibpath_var_CXX=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. + # Supported since Solaris 2.6 (maybe 2.5.1?) + whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract' + ;; + esac + link_all_deplibs_CXX=yes + + output_verbose_link_cmd='echo' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' + ;; + gcx*) + # Green Hills C++ Compiler + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + + # The C++ compiler must be used to create the archive. + old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + no_undefined_flag_CXX=' ${wl}-z ${wl}defs' + if $CC --version | $GREP -v '^2\.7' > /dev/null; then + archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' + else + # g++ 2.7 appears to require `-G' NOT `-shared' on this + # platform. + archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' + fi + + hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + ;; + esac + fi + ;; + esac + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag_CXX='${wl}-z,text' + archive_cmds_need_lc_CXX=no + hardcode_shlibpath_var_CXX=no + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag_CXX='${wl}-z,text' + allow_undefined_flag_CXX='${wl}-z,nodefs' + archive_cmds_need_lc_CXX=no + hardcode_shlibpath_var_CXX=no + hardcode_libdir_flag_spec_CXX='${wl}-R,$libdir' + hardcode_libdir_separator_CXX=':' + link_all_deplibs_CXX=yes + export_dynamic_flag_spec_CXX='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + vxworks*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 +$as_echo "$ld_shlibs_CXX" >&6; } + test "$ld_shlibs_CXX" = no && can_build_shared=no + + GCC_CXX="$GXX" + LD_CXX="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + # Dependencies to place before and after the object being linked: +predep_objects_CXX= +postdep_objects_CXX= +predeps_CXX= +postdeps_CXX= +compiler_lib_search_path_CXX= + +cat > conftest.$ac_ext <<_LT_EOF +class Foo +{ +public: + Foo (void) { a = 0; } +private: + int a; +}; +_LT_EOF + +if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + # Parse the compiler output and extract the necessary + # objects, libraries and library flags. + + # Sentinel used to keep track of whether or not we are before + # the conftest object file. + pre_test_object_deps_done=no + + for p in `eval "$output_verbose_link_cmd"`; do + case $p in + + -L* | -R* | -l*) + # Some compilers place space between "-{L,R}" and the path. + # Remove the space. + if test $p = "-L" || + test $p = "-R"; then + prev=$p + continue + else + prev= + fi + + if test "$pre_test_object_deps_done" = no; then + case $p in + -L* | -R*) + # Internal compiler library paths should come after those + # provided the user. The postdeps already come after the + # user supplied libs so there is no need to process them. + if test -z "$compiler_lib_search_path_CXX"; then + compiler_lib_search_path_CXX="${prev}${p}" + else + compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}" + fi + ;; + # The "-l" case would never come before the object being + # linked, so don't bother handling this case. + esac + else + if test -z "$postdeps_CXX"; then + postdeps_CXX="${prev}${p}" + else + postdeps_CXX="${postdeps_CXX} ${prev}${p}" + fi + fi + ;; + + *.$objext) + # This assumes that the test object file only shows up + # once in the compiler output. + if test "$p" = "conftest.$objext"; then + pre_test_object_deps_done=yes + continue + fi + + if test "$pre_test_object_deps_done" = no; then + if test -z "$predep_objects_CXX"; then + predep_objects_CXX="$p" + else + predep_objects_CXX="$predep_objects_CXX $p" + fi + else + if test -z "$postdep_objects_CXX"; then + postdep_objects_CXX="$p" + else + postdep_objects_CXX="$postdep_objects_CXX $p" + fi + fi + ;; + + *) ;; # Ignore the rest. + + esac + done + + # Clean up. + rm -f a.out a.exe +else + echo "libtool.m4: error: problem compiling CXX test program" +fi + +$RM -f confest.$objext + +# PORTME: override above test on systems where it is broken +case $host_os in +interix[3-9]*) + # Interix 3.5 installs completely hosed .la files for C++, so rather than + # hack all around it, let's just trust "g++" to DTRT. + predep_objects_CXX= + postdep_objects_CXX= + postdeps_CXX= + ;; + +linux*) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + if test "$solaris_use_stlport4" != yes; then + postdeps_CXX='-library=Cstd -library=Crun' + fi + ;; + esac + ;; + +solaris*) + case $cc_basename in + CC*) + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + # Adding this requires a known-good setup of shared libraries for + # Sun compiler versions before 5.6, else PIC objects from an old + # archive will be linked into the output, leading to subtle bugs. + if test "$solaris_use_stlport4" != yes; then + postdeps_CXX='-library=Cstd -library=Crun' + fi + ;; + esac + ;; +esac + + +case " $postdeps_CXX " in +*" -lc "*) archive_cmds_need_lc_CXX=no ;; +esac + compiler_lib_search_dirs_CXX= +if test -n "${compiler_lib_search_path_CXX}"; then + compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + lt_prog_compiler_wl_CXX= +lt_prog_compiler_pic_CXX= +lt_prog_compiler_static_CXX= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } + + # C++ specific cases for pic, static, wl, etc. + if test "$GXX" = yes; then + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_CXX='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic_CXX='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic_CXX='-DDLL_EXPORT' + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic_CXX='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + lt_prog_compiler_pic_CXX= + ;; + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic_CXX=-Kconform_pic + fi + ;; + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + ;; + *) + lt_prog_compiler_pic_CXX='-fPIC' + ;; + esac + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic_CXX='-fPIC -shared' + ;; + *) + lt_prog_compiler_pic_CXX='-fPIC' + ;; + esac + else + case $host_os in + aix[4-9]*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_CXX='-Bstatic' + else + lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68*) + # Green Hills C++ Compiler + # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" + ;; + esac + ;; + dgux*) + case $cc_basename in + ec++*) + lt_prog_compiler_pic_CXX='-KPIC' + ;; + ghcx*) + # Green Hills C++ Compiler + lt_prog_compiler_pic_CXX='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | dragonfly*) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' + if test "$host_cpu" != ia64; then + lt_prog_compiler_pic_CXX='+Z' + fi + ;; + aCC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic_CXX='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + interix*) + # This is c89, which is MS Visual C++ (no shared libs) + # Anyone wants to do a port? + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + KCC*) + # KAI C++ Compiler + lt_prog_compiler_wl_CXX='--backend -Wl,' + lt_prog_compiler_pic_CXX='-fPIC' + ;; + ecpc* ) + # old Intel C++ for x86_64 which still supported -KPIC. + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-static' + ;; + icpc* ) + # Intel C++, used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-fPIC' + lt_prog_compiler_static_CXX='-static' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-fpic' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + cxx*) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + lt_prog_compiler_pic_CXX= + lt_prog_compiler_static_CXX='-non_shared' + ;; + xlc* | xlC*) + # IBM XL 8.0 on PPC + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-qpic' + lt_prog_compiler_static_CXX='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + lt_prog_compiler_wl_CXX='-Qoption ld ' + ;; + esac + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx*) + lt_prog_compiler_pic_CXX='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd* | netbsdelf*-gnu) + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic_CXX='-fPIC -shared' + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + lt_prog_compiler_wl_CXX='--backend -Wl,' + ;; + RCC*) + # Rational C++ 2.4.1 + lt_prog_compiler_pic_CXX='-pic' + ;; + cxx*) + # Digital/Compaq C++ + lt_prog_compiler_wl_CXX='-Wl,' + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + lt_prog_compiler_pic_CXX= + lt_prog_compiler_static_CXX='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + solaris*) + case $cc_basename in + CC*) + # Sun C++ 4.2, 5.x and Centerline C++ + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + lt_prog_compiler_wl_CXX='-Qoption ld ' + ;; + gcx*) + # Green Hills C++ Compiler + lt_prog_compiler_pic_CXX='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + lt_prog_compiler_pic_CXX='-pic' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + lcc*) + # Lucid + lt_prog_compiler_pic_CXX='-pic' + ;; + *) + ;; + esac + ;; + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + lt_prog_compiler_pic_CXX='-KPIC' + ;; + *) + ;; + esac + ;; + vxworks*) + ;; + *) + lt_prog_compiler_can_build_shared_CXX=no + ;; + esac + fi + +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic_CXX= + ;; + *) + lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX@&t@ -DPIC" + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic_CXX" >&5 +$as_echo "$lt_prog_compiler_pic_CXX" >&6; } + + + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } +if test "${lt_cv_prog_compiler_pic_works_CXX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_works_CXX=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic_CXX@&t@ -DPIC" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:__oline__: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works_CXX=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; } + +if test x"$lt_cv_prog_compiler_pic_works_CXX" = xyes; then + case $lt_prog_compiler_pic_CXX in + "" | " "*) ;; + *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; + esac +else + lt_prog_compiler_pic_CXX= + lt_prog_compiler_can_build_shared_CXX=no +fi + +fi + + + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if test "${lt_cv_prog_compiler_static_works_CXX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_static_works_CXX=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works_CXX=yes + fi + else + lt_cv_prog_compiler_static_works_CXX=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; } + +if test x"$lt_cv_prog_compiler_static_works_CXX" = xyes; then + : +else + lt_prog_compiler_static_CXX= +fi + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o_CXX=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:__oline__: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o_CXX=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o_CXX=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:__oline__: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o_CXX=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } + + + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } + if test "$hard_links" = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + case $host_os in + aix[4-9]*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + export_symbols_cmds_CXX="$ltdll_cmds" + ;; + cygwin* | mingw* | cegcc*) + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;/^.*[ ]__nm__/s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' + ;; + linux* | k*bsd*-gnu) + link_all_deplibs_CXX=no + ;; + *) + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac + exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 +$as_echo "$ld_shlibs_CXX" >&6; } +test "$ld_shlibs_CXX" = no && can_build_shared=no + +with_gnu_ld_CXX=$with_gnu_ld + + + + + + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc_CXX" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc_CXX=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds_CXX in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl_CXX + pic_flag=$lt_prog_compiler_pic_CXX + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag_CXX + allow_undefined_flag_CXX= + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 + (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + then + archive_cmds_need_lc_CXX=no + else + archive_cmds_need_lc_CXX=yes + fi + allow_undefined_flag_CXX=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc_CXX" >&5 +$as_echo "$archive_cmds_need_lc_CXX" >&6; } + ;; + esac + fi + ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } + +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[4-9]*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[123]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +interix[3-9]*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # Some binutils ld are patched to set DT_RUNPATH + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\"" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : + shlibpath_overrides_runpath=yes +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } +hardcode_action_CXX= +if test -n "$hardcode_libdir_flag_spec_CXX" || + test -n "$runpath_var_CXX" || + test "X$hardcode_automatic_CXX" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$hardcode_direct_CXX" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" != no && + test "$hardcode_minus_L_CXX" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action_CXX=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action_CXX=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action_CXX=unsupported +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 +$as_echo "$hardcode_action_CXX" >&6; } + +if test "$hardcode_action_CXX" = relink || + test "$inherit_rpath_CXX" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + + fi # test -n "$compiler" + + CC=$lt_save_CC + LDCXX=$LD + LD=$lt_save_LD + GCC=$lt_save_GCC + with_gnu_ld=$lt_save_with_gnu_ld + lt_cv_path_LDCXX=$lt_cv_path_LD + lt_cv_path_LD=$lt_save_path_LD + lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld + lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld +fi # test "$_lt_caught_CXX_error" != yes + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + + + + + + + + + + + + ac_config_commands="$ac_config_commands libtool" + + + + +# Only expand once: + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +$as_echo_n "checking whether ln -s works... " >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +$as_echo "no, using $LN_S" >&6; } +fi + + +############### +### DocBook ### +############### +for ac_prog in openjade jade +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_JADE+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$JADE"; then + ac_cv_prog_JADE="$JADE" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_JADE="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +JADE=$ac_cv_prog_JADE +if test -n "$JADE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $JADE" >&5 +$as_echo "$JADE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$JADE" && break +done + +if test -n "$JADE"; then + for ac_prog in onsgmls nsgmls +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_NSGMLS+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NSGMLS"; then + ac_cv_prog_NSGMLS="$NSGMLS" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_NSGMLS="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +NSGMLS=$ac_cv_prog_NSGMLS +if test -n "$NSGMLS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NSGMLS" >&5 +$as_echo "$NSGMLS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$NSGMLS" && break +done + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for DocBook V4.1" >&5 +$as_echo_n "checking for DocBook V4.1... " >&6; } +if test "${pgac_cv_check_docbook+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat >conftest.sgml < + + test + + random + + testsect + text + + + +EOF + +${NSGMLS-false} -s conftest.sgml 1>&5 2>&1 +if test $? -eq 0; then + pgac_cv_check_docbook=yes +else + pgac_cv_check_docbook=no +fi +rm -f conftest.sgml +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_check_docbook" >&5 +$as_echo "$pgac_cv_check_docbook" >&6; } + +have_docbook=$pgac_cv_check_docbook + + + if test "$pgac_cv_check_docbook" = "yes"; then + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for DocBook stylesheets" >&5 +$as_echo_n "checking for DocBook stylesheets... " >&6; } + +@%:@ Check whether --with-docbook-stylesheets was given. +if test "${with_docbook_stylesheets+set}" = set; then : + withval=$with_docbook_stylesheets; muse_docbook_prefix="$withval" +fi + +if test "${pgac_cv_path_stylesheets+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + +if test -n "$muse_docbook_prefix"; then + if test -r "$muse_docbook_prefix/html/docbook.dsl" \ + && test -r "$muse_docbook_prefix/print/docbook.dsl"; then + pgac_cv_path_stylesheets="$muse_docbook_prefix" + fi +fi +if test -z "$pgac_cv_path_stylesheets"; then + if test -n "$DOCBOOKSTYLE"; then + if test -r "$DOCBOOKSTYLE/html/docbook.dsl" \ + && test -r "$DOCBOOKSTYLE/print/docbook.dsl"; then + pgac_cv_path_stylesheets="$DOCBOOKSTYLE" + fi + fi +fi +if test -z "$pgac_cv_path_stylesheets"; then + for pgac_prefix in /usr /usr/local /opt; do + for pgac_infix in share lib; do + for pgac_postfix in \ + sgml/stylesheets/nwalsh-modular \ + sgml/stylesheets/docbook \ + sgml/docbook/dsssl/modular \ + sgml/docbook/stylesheet/dsssl/modular + do + pgac_candidate=$pgac_prefix/$pgac_infix/$pgac_postfix + if test -r "$pgac_candidate/html/docbook.dsl" \ + && test -r "$pgac_candidate/print/docbook.dsl" + then + pgac_cv_path_stylesheets=$pgac_candidate + break 3 + fi + done + done + done +fi + +fi + +DOCBOOKSTYLE=$pgac_cv_path_stylesheets + +if test -n "$DOCBOOKSTYLE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DOCBOOKSTYLE" >&5 +$as_echo "$DOCBOOKSTYLE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + if test -n "$DOCBOOKSTYLE"; then + DOCBOOKTARGETS="book1.html" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: DocBook stylesheets not found or not usable - documentation will not be built" >&5 +$as_echo "$as_me: WARNING: DocBook stylesheets not found or not usable - documentation will not be built" >&2;} + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: DocBook 4.1 DTD not found or not usable - documentation will not be built" >&5 +$as_echo "$as_me: WARNING: DocBook 4.1 DTD not found or not usable - documentation will not be built" >&2;} + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: jade not found - documentation will not be built" >&5 +$as_echo "$as_me: WARNING: jade not found - documentation will not be built" >&2;} +fi + + +############### +### doxygen ### +############### + +# Extract the first word of "doxygen", so it can be a program name with args. +set dummy doxygen; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_DOXYGEN+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $DOXYGEN in + [\\/]* | ?:[\\/]*) + ac_cv_path_DOXYGEN="$DOXYGEN" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_DOXYGEN="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_DOXYGEN" && ac_cv_path_DOXYGEN="no" + ;; +esac +fi +DOXYGEN=$ac_cv_path_DOXYGEN +if test -n "$DOXYGEN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DOXYGEN" >&5 +$as_echo "$DOXYGEN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + +################ +### graphviz ### +################ + +# Extract the first word of "dot", so it can be a program name with args. +set dummy dot; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_DOT+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $DOT in + [\\/]* | ?:[\\/]*) + ac_cv_path_DOT="$DOT" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_DOT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_DOT" && ac_cv_path_DOT="no" + ;; +esac +fi +DOT=$ac_cv_path_DOT +if test -n "$DOT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DOT" >&5 +$as_echo "$DOT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +if test "$DOT" != "no"; then + HAVEDOT=YES + DOTPATH=$( dirname "$DOT" ) +else + HAVEDOT=NO +fi + + + +############ +### perl ### +############ + +# Extract the first word of "perl", so it can be a program name with args. +set dummy perl; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_PERL+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $PERL in + [\\/]* | ?:[\\/]*) + ac_cv_path_PERL="$PERL" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_PERL" && ac_cv_path_PERL="no" + ;; +esac +fi +PERL=$ac_cv_path_PERL +if test -n "$PERL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5 +$as_echo "$PERL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +if test "$PERL" == "no"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: you don't have perl installed! wierdo! (and doxygen might not like this)" >&5 +$as_echo "$as_me: WARNING: you don't have perl installed! wierdo! (and doxygen might not like this)" >&2;} +fi + + +######### +### X ### +######### +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for X" >&5 +$as_echo_n "checking for X... " >&6; } + + +@%:@ Check whether --with-x was given. +if test "${with_x+set}" = set; then : + withval=$with_x; +fi + +# $have_x is `yes', `no', `disabled', or empty when we do not yet know. +if test "x$with_x" = xno; then + # The user explicitly disabled X. + have_x=disabled +else + case $x_includes,$x_libraries in #( + *\'*) as_fn_error "cannot use X directory names containing '" "$LINENO" 5;; #( + *,NONE | NONE,*) if test "${ac_cv_have_x+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + # One or both of the vars are not set, and there is no cached value. +ac_x_includes=no ac_x_libraries=no +rm -f -r conftest.dir +if mkdir conftest.dir; then + cd conftest.dir + cat >Imakefile <<'_ACEOF' +incroot: + @echo incroot='${INCROOT}' +usrlibdir: + @echo usrlibdir='${USRLIBDIR}' +libdir: + @echo libdir='${LIBDIR}' +_ACEOF + if (export CC; ${XMKMF-xmkmf}) >/dev/null 2>/dev/null && test -f Makefile; then + # GNU make sometimes prints "make[1]: Entering...", which would confuse us. + for ac_var in incroot usrlibdir libdir; do + eval "ac_im_$ac_var=\`\${MAKE-make} $ac_var 2>/dev/null | sed -n 's/^$ac_var=//p'\`" + done + # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR. + for ac_extension in a so sl dylib la dll; do + if test ! -f "$ac_im_usrlibdir/libX11.$ac_extension" && + test -f "$ac_im_libdir/libX11.$ac_extension"; then + ac_im_usrlibdir=$ac_im_libdir; break + fi + done + # Screen out bogus values from the imake configuration. They are + # bogus both because they are the default anyway, and because + # using them would break gcc on systems where it needs fixed includes. + case $ac_im_incroot in + /usr/include) ac_x_includes= ;; + *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;; + esac + case $ac_im_usrlibdir in + /usr/lib | /usr/lib64 | /lib | /lib64) ;; + *) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;; + esac + fi + cd .. + rm -f -r conftest.dir +fi + +# Standard set of common directories for X headers. +# Check X11 before X11Rn because it is often a symlink to the current release. +ac_x_header_dirs=' +/usr/X11/include +/usr/X11R7/include +/usr/X11R6/include +/usr/X11R5/include +/usr/X11R4/include + +/usr/include/X11 +/usr/include/X11R7 +/usr/include/X11R6 +/usr/include/X11R5 +/usr/include/X11R4 + +/usr/local/X11/include +/usr/local/X11R7/include +/usr/local/X11R6/include +/usr/local/X11R5/include +/usr/local/X11R4/include + +/usr/local/include/X11 +/usr/local/include/X11R7 +/usr/local/include/X11R6 +/usr/local/include/X11R5 +/usr/local/include/X11R4 + +/usr/X386/include +/usr/x386/include +/usr/XFree86/include/X11 + +/usr/include +/usr/local/include +/usr/unsupported/include +/usr/athena/include +/usr/local/x11r5/include +/usr/lpp/Xamples/include + +/usr/openwin/include +/usr/openwin/share/include' + +if test "$ac_x_includes" = no; then + # Guess where to find include files, by looking for Xlib.h. + # First, try using that file with no special directory specified. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # We can compile using X headers with no special include directory. +ac_x_includes= +else + for ac_dir in $ac_x_header_dirs; do + if test -r "$ac_dir/X11/Xlib.h"; then + ac_x_includes=$ac_dir + break + fi +done +fi +rm -f conftest.err conftest.$ac_ext +fi # $ac_x_includes = no + +if test "$ac_x_libraries" = no; then + # Check for the libraries. + # See if we find them without any special options. + # Don't add to $LIBS permanently. + ac_save_LIBS=$LIBS + LIBS="-lX11 $LIBS" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@include +int +main () +{ +XrmInitialize () + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + LIBS=$ac_save_LIBS +# We can link X programs with no special library path. +ac_x_libraries= +else + LIBS=$ac_save_LIBS +for ac_dir in `$as_echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g` +do + # Don't even attempt the hair of trying to link an X program! + for ac_extension in a so sl dylib la dll; do + if test -r "$ac_dir/libX11.$ac_extension"; then + ac_x_libraries=$ac_dir + break 2 + fi + done +done +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi # $ac_x_libraries = no + +case $ac_x_includes,$ac_x_libraries in #( + no,* | *,no | *\'*) + # Didn't find X, or a directory has "'" in its name. + ac_cv_have_x="have_x=no";; #( + *) + # Record where we found X for the cache. + ac_cv_have_x="have_x=yes\ + ac_x_includes='$ac_x_includes'\ + ac_x_libraries='$ac_x_libraries'" +esac +fi +;; #( + *) have_x=yes;; + esac + eval "$ac_cv_have_x" +fi # $with_x != no + +if test "$have_x" != yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_x" >&5 +$as_echo "$have_x" >&6; } + no_x=yes +else + # If each of the values was on the command line, it overrides each guess. + test "x$x_includes" = xNONE && x_includes=$ac_x_includes + test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries + # Update the cache value to reflect the command line values. + ac_cv_have_x="have_x=yes\ + ac_x_includes='$x_includes'\ + ac_x_libraries='$x_libraries'" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: libraries $x_libraries, headers $x_includes" >&5 +$as_echo "libraries $x_libraries, headers $x_includes" >&6; } +fi + +if test "$no_x" = yes; then + # Not all programs may use this symbol, but it does not hurt to define it. + +$as_echo "@%:@define X_DISPLAY_MISSING 1" >>confdefs.h + + X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS= +else + if test -n "$x_includes"; then + X_CFLAGS="$X_CFLAGS -I$x_includes" + fi + + # It would also be nice to do this for all -L options, not just this one. + if test -n "$x_libraries"; then + X_LIBS="$X_LIBS -L$x_libraries" + # For Solaris; some versions of Sun CC require a space after -R and + # others require no space. Words are not sufficient . . . . + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -R must be followed by a space" >&5 +$as_echo_n "checking whether -R must be followed by a space... " >&6; } + ac_xsave_LIBS=$LIBS; LIBS="$LIBS -R$x_libraries" + ac_xsave_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + X_LIBS="$X_LIBS -R$x_libraries" +else + LIBS="$ac_xsave_LIBS -R $x_libraries" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + X_LIBS="$X_LIBS -R $x_libraries" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: neither works" >&5 +$as_echo "neither works" >&6; } +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + ac_c_werror_flag=$ac_xsave_c_werror_flag + LIBS=$ac_xsave_LIBS + fi + + # Check for system-dependent libraries X programs must link with. + # Do this before checking for the system-independent R6 libraries + # (-lICE), since we may need -lsocket or whatever for X linking. + + if test "$ISC" = yes; then + X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet" + else + # Martyn Johnson says this is needed for Ultrix, if the X + # libraries were built with DECnet support. And Karl Berry says + # the Alpha needs dnet_stub (dnet does not exist). + ac_xsave_LIBS="$LIBS"; LIBS="$LIBS $X_LIBS -lX11" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char XOpenDisplay (); +int +main () +{ +return XOpenDisplay (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet" >&5 +$as_echo_n "checking for dnet_ntoa in -ldnet... " >&6; } +if test "${ac_cv_lib_dnet_dnet_ntoa+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldnet $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dnet_ntoa (); +int +main () +{ +return dnet_ntoa (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dnet_dnet_ntoa=yes +else + ac_cv_lib_dnet_dnet_ntoa=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_dnet_ntoa" >&5 +$as_echo "$ac_cv_lib_dnet_dnet_ntoa" >&6; } +if test "x$ac_cv_lib_dnet_dnet_ntoa" = x""yes; then : + X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet" +fi + + if test $ac_cv_lib_dnet_dnet_ntoa = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet_stub" >&5 +$as_echo_n "checking for dnet_ntoa in -ldnet_stub... " >&6; } +if test "${ac_cv_lib_dnet_stub_dnet_ntoa+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldnet_stub $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dnet_ntoa (); +int +main () +{ +return dnet_ntoa (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dnet_stub_dnet_ntoa=yes +else + ac_cv_lib_dnet_stub_dnet_ntoa=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5 +$as_echo "$ac_cv_lib_dnet_stub_dnet_ntoa" >&6; } +if test "x$ac_cv_lib_dnet_stub_dnet_ntoa" = x""yes; then : + X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub" +fi + + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LIBS="$ac_xsave_LIBS" + + # msh@cis.ufl.edu says -lnsl (and -lsocket) are needed for his 386/AT, + # to get the SysV transport functions. + # Chad R. Larson says the Pyramis MIS-ES running DC/OSx (SVR4) + # needs -lnsl. + # The nsl library prevents programs from opening the X display + # on Irix 5.2, according to T.E. Dickey. + # The functions gethostbyname, getservbyname, and inet_addr are + # in -lbsd on LynxOS 3.0.1/i386, according to Lars Hecking. + ac_fn_c_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname" +if test "x$ac_cv_func_gethostbyname" = x""yes; then : + +fi + + if test $ac_cv_func_gethostbyname = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl" >&5 +$as_echo_n "checking for gethostbyname in -lnsl... " >&6; } +if test "${ac_cv_lib_nsl_gethostbyname+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lnsl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char gethostbyname (); +int +main () +{ +return gethostbyname (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_nsl_gethostbyname=yes +else + ac_cv_lib_nsl_gethostbyname=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostbyname" >&5 +$as_echo "$ac_cv_lib_nsl_gethostbyname" >&6; } +if test "x$ac_cv_lib_nsl_gethostbyname" = x""yes; then : + X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl" +fi + + if test $ac_cv_lib_nsl_gethostbyname = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lbsd" >&5 +$as_echo_n "checking for gethostbyname in -lbsd... " >&6; } +if test "${ac_cv_lib_bsd_gethostbyname+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lbsd $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char gethostbyname (); +int +main () +{ +return gethostbyname (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_bsd_gethostbyname=yes +else + ac_cv_lib_bsd_gethostbyname=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bsd_gethostbyname" >&5 +$as_echo "$ac_cv_lib_bsd_gethostbyname" >&6; } +if test "x$ac_cv_lib_bsd_gethostbyname" = x""yes; then : + X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd" +fi + + fi + fi + + # lieder@skyler.mavd.honeywell.com says without -lsocket, + # socket/setsockopt and other routines are undefined under SCO ODT + # 2.0. But -lsocket is broken on IRIX 5.2 (and is not necessary + # on later versions), says Simon Leinen: it contains gethostby* + # variants that don't use the name server (or something). -lsocket + # must be given before -lnsl if both are needed. We assume that + # if connect needs -lnsl, so does gethostbyname. + ac_fn_c_check_func "$LINENO" "connect" "ac_cv_func_connect" +if test "x$ac_cv_func_connect" = x""yes; then : + +fi + + if test $ac_cv_func_connect = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for connect in -lsocket" >&5 +$as_echo_n "checking for connect in -lsocket... " >&6; } +if test "${ac_cv_lib_socket_connect+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsocket $X_EXTRA_LIBS $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char connect (); +int +main () +{ +return connect (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_socket_connect=yes +else + ac_cv_lib_socket_connect=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_connect" >&5 +$as_echo "$ac_cv_lib_socket_connect" >&6; } +if test "x$ac_cv_lib_socket_connect" = x""yes; then : + X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS" +fi + + fi + + # Guillermo Gomez says -lposix is necessary on A/UX. + ac_fn_c_check_func "$LINENO" "remove" "ac_cv_func_remove" +if test "x$ac_cv_func_remove" = x""yes; then : + +fi + + if test $ac_cv_func_remove = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for remove in -lposix" >&5 +$as_echo_n "checking for remove in -lposix... " >&6; } +if test "${ac_cv_lib_posix_remove+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lposix $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char remove (); +int +main () +{ +return remove (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_posix_remove=yes +else + ac_cv_lib_posix_remove=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_posix_remove" >&5 +$as_echo "$ac_cv_lib_posix_remove" >&6; } +if test "x$ac_cv_lib_posix_remove" = x""yes; then : + X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix" +fi + + fi + + # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay. + ac_fn_c_check_func "$LINENO" "shmat" "ac_cv_func_shmat" +if test "x$ac_cv_func_shmat" = x""yes; then : + +fi + + if test $ac_cv_func_shmat = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shmat in -lipc" >&5 +$as_echo_n "checking for shmat in -lipc... " >&6; } +if test "${ac_cv_lib_ipc_shmat+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lipc $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shmat (); +int +main () +{ +return shmat (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_ipc_shmat=yes +else + ac_cv_lib_ipc_shmat=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ipc_shmat" >&5 +$as_echo "$ac_cv_lib_ipc_shmat" >&6; } +if test "x$ac_cv_lib_ipc_shmat" = x""yes; then : + X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc" +fi + + fi + fi + + # Check for libraries that X11R6 Xt/Xaw programs need. + ac_save_LDFLAGS=$LDFLAGS + test -n "$x_libraries" && LDFLAGS="$LDFLAGS -L$x_libraries" + # SM needs ICE to (dynamically) link under SunOS 4.x (so we have to + # check for ICE first), but we must link in the order -lSM -lICE or + # we get undefined symbols. So assume we have SM if we have ICE. + # These have to be linked with before -lX11, unlike the other + # libraries we check for below, so use a different variable. + # John Interrante, Karl Berry + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for IceConnectionNumber in -lICE" >&5 +$as_echo_n "checking for IceConnectionNumber in -lICE... " >&6; } +if test "${ac_cv_lib_ICE_IceConnectionNumber+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lICE $X_EXTRA_LIBS $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char IceConnectionNumber (); +int +main () +{ +return IceConnectionNumber (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_ICE_IceConnectionNumber=yes +else + ac_cv_lib_ICE_IceConnectionNumber=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5 +$as_echo "$ac_cv_lib_ICE_IceConnectionNumber" >&6; } +if test "x$ac_cv_lib_ICE_IceConnectionNumber" = x""yes; then : + X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE" +fi + + LDFLAGS=$ac_save_LDFLAGS + +fi + +if test "$X_DISPLAY_MISSING" != ""; then + as_fn_error "X required" "$LINENO" 5 +fi + + + +########## +### QT ### +########## + + + qt_error="no" + + QT_CFLAGS="" + QT_LIBS="" + MOC="moc" + UIC="uic" + qt_includes="/usr/include/qt" + qt_libraries="" + qt_binaries="" + + if test "$qt_error" = "no"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for QT environment variable QTDIR" >&5 +$as_echo_n "checking for QT environment variable QTDIR... " >&6; } + if test -z "$QTDIR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: + + ***************** WARNING ***************** + +YOU HAVE NOT SET YOUR 'QTDIR' ENVIRONMENT VARIABLE!!! + +This is the source of most people's problems when +configuring muse. If the configuration fails to find +qt, try setting your QTDIR environment variable to +the directory where qt is installed. + + ******************************************* + +" >&5 +$as_echo "$as_me: WARNING: + + ***************** WARNING ***************** + +YOU HAVE NOT SET YOUR 'QTDIR' ENVIRONMENT VARIABLE!!! + +This is the source of most people's problems when +configuring muse. If the configuration fails to find +qt, try setting your QTDIR environment variable to +the directory where qt is installed. + + ******************************************* + +" >&2;} + echo -ne "\a" + echo -ne "\a" + echo -ne "\a" + sleep 7 + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + qt_includes="$QTDIR/include" + qt_libraries="$QTDIR/lib" + qt_binaries="$QTDIR/bin" + MOC="$qt_binaries/moc"; + UIC="$qt_binaries/uic"; + fi + fi + + muse_qttest="yes" + @%:@ Check whether --enable-qttest was given. +if test "${enable_qttest+set}" = set; then : + enableval=$enable_qttest; + case "$enableval" in + "yes") + muse_qttest="yes" + ;; + "no") + muse_qttest="no" + ;; + *) + as_fn_error "must use --enable-qttest(=yes/no) or --disable-qttest" "$LINENO" 5 + ;; + esac + +fi + + + + +@%:@ Check whether --with-qt-prefix was given. +if test "${with_qt_prefix+set}" = set; then : + withval=$with_qt_prefix; + qt_includes="$withval/include" + qt_libraries="$withval/lib" + qt_binaries="$withval/bin" + MOC="$qt_binaries/moc"; + UIC="$qt_binaries/uic"; + +fi + + + +@%:@ Check whether --with-qt-includes was given. +if test "${with_qt_includes+set}" = set; then : + withval=$with_qt_includes; + qt_includes="$withval" + +fi + + + +@%:@ Check whether --with-qt-libraries was given. +if test "${with_qt_libraries+set}" = set; then : + withval=$with_qt_libraries; + qt_libraries="$withval" + +fi + + + +@%:@ Check whether --with-qt-binaries was given. +if test "${with_qt_binaries+set}" = set; then : + withval=$with_qt_binaries; + qt_binaries="$withval" + MOC="$qt_binaries/moc"; + UIC="$qt_binaries/uic"; + +fi + + + +@%:@ Check whether --with-qt-moc was given. +if test "${with_qt_moc+set}" = set; then : + withval=$with_qt_moc; + MOC="$withval" + +fi + + + +@%:@ Check whether --with-qt-uic was given. +if test "${with_qt_uic+set}" = set; then : + withval=$with_qt_uic; + UIC="$withval" + +fi + + + if test "$qt_error" = "no"; then + saved_CPPFLAGS="$CPPFLAGS" + saved_LIBS="$LIBS" + CPPFLAGS="$saved_CPPFLAGS -I$qt_includes" + if test -n "$qt_libraries"; then + LIBS="$saved_LIBS -L$qt_libraries -lqt-mt -lqui" + QT_LIBS="-L$qt_libraries -lqt-mt -lqui" + else + LIBS="$saved_LIBS -lqt-mt -lqui -lm $X11_LIBS" + QT_LIBS="-lqt-mt -lqui" + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for QT includes ($qt_includes)" >&5 +$as_echo_n "checking for QT includes ($qt_includes)... " >&6; } + if test "${qt_includes_found+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + qt_includes_found=yes +else + qt_includes_found=no +fi +rm -f conftest.err conftest.$ac_ext + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + if test "$qt_includes_found" = "yes"; then + QT_CFLAGS="-I$qt_includes" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + qt_error=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + fi + +fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for QT libraries ($qt_libraries)" >&5 +$as_echo_n "checking for QT libraries ($qt_libraries)... " >&6; } + if test "${qt_libraries_found+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + saved_CXXFLAGS="$CXXFLAGS" + saved_LIBS="$LIBS" + CXXFLAGS="$QT_CFLAGS $LIBS" + LIBS="$QT_LIBS $LIBS" + + + if test "$muse_qttest" = "yes"; then + if test "$cross_compiling" = yes; then : + as_fn_error "cross compiling unsupported" "$LINENO" 5 + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include + int main(int argc, char **argv) + { + QApplication app(argc, argv, false); + + } + +_ACEOF +if ac_fn_cxx_try_run "$LINENO"; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + qt_error="yes" + +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes (assumed due to --disable-qttest)" >&5 +$as_echo "yes (assumed due to --disable-qttest)" >&6; } + fi + + LIBS="$saved_LIBS" + CXXFLAGS="$saved_CXXFLAGS" + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for QT moc ($MOC)" >&5 +$as_echo_n "checking for QT moc ($MOC)... " >&6; } + output=`eval "$MOC --help 2>&1 | grep Qt"` + if test -z "$output"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + qt_error="yes" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for QT uic ($UIC)" >&5 +$as_echo_n "checking for QT uic ($UIC)... " >&6; } + output=`eval "$UIC --help 2>&1 | grep Qt"` + if test -z "$output"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + qt_error="yes" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + fi + CPPFLAGS="$saved_CPPFLAGS" + LIBS="$saved_LIBS" + fi + + if test "$qt_error" = "no"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for QT version >= 3.2.0" >&5 +$as_echo_n "checking for QT version >= 3.2.0... " >&6; } + qt_major_version=`echo 3.2.0 | \ + sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'` + qt_minor_version=`echo 3.2.0 | \ + sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'` + qt_micro_version=`echo 3.2.0 | \ + sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'` + qt_version="$qt_major_version$qt_minor_version$qt_micro_version" + + + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + saved_CXXFLAGS="$CXXFLAGS" + saved_LIBS="$LIBS" + CXXFLAGS="$QT_CFLAGS $LIBS" + LIBS="$QT_LIBS $LIBS" + + if test "$muse_qttest" = "yes"; then + if test "$cross_compiling" = yes; then : + as_fn_error "cross compiling unsupported" "$LINENO" 5 + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include + int main() + { + int version = ($qt_major_version << 16) + + ($qt_minor_version << 8) + + $qt_micro_version; + if (QT_VERSION < version) return(1); + return(0); + } + +_ACEOF +if ac_fn_cxx_try_run "$LINENO"; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + qt_error="yes" + +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes (assumed due to --disable-qttest)" >&5 +$as_echo "yes (assumed due to --disable-qttest)" >&6; } + fi + + LIBS="$saved_LIBS" + CXXFLAGS="$saved_CXXFLAGS" + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + fi + + + + + + if test "$qt_error" = "no"; then + : + else + as_fn_error "need qt >= 3.2.0" "$LINENO" 5 + fi + +if test "$muse_qttest" = "yes"; then + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + muse_save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $QT_CFLAGS" + muse_save_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS $QT_CFLAGS" + muse_save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $QT_LIBS" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for qt_selection_property in -lqt-mt" >&5 +$as_echo_n "checking for qt_selection_property in -lqt-mt... " >&6; } +if test "${ac_cv_lib_qt_mt_qt_selection_property+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lqt-mt $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char qt_selection_property (); +int +main () +{ +return qt_selection_property (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ac_cv_lib_qt_mt_qt_selection_property=yes +else + ac_cv_lib_qt_mt_qt_selection_property=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_qt_mt_qt_selection_property" >&5 +$as_echo "$ac_cv_lib_qt_mt_qt_selection_property" >&6; } +if test "x$ac_cv_lib_qt_mt_qt_selection_property" = x""yes; then : + + true + +else + + as_fn_error " + + MusE requires thread enabled QT (qt-mt) >= 3.2.0 + + You can either compile your own version of QT (making sure you enable + threading!) or install the appropriate package for your distribution. +" "$LINENO" 5 + +fi + + CFLAGS="$muse_save_CFLAGS" + CXXFLAGS="$muse_save_CXXFLAGS" + LDFLAGS="$muse_save_LDFLAGS" + unset muse_save_CFLAGS + unset muse_save_CXXFLAGS + unset muse_save_LDFLAGS + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +fi + +############ +### ALSA ### +############ +alsa_save_CFLAGS="$CFLAGS" +alsa_save_LDFLAGS="$LDFLAGS" +alsa_save_LIBS="$LIBS" +alsa_found=yes + + +@%:@ Check whether --with-alsa-prefix was given. +if test "${with_alsa_prefix+set}" = set; then : + withval=$with_alsa_prefix; alsa_prefix="$withval" +else + alsa_prefix="" +fi + + + +@%:@ Check whether --with-alsa-inc-prefix was given. +if test "${with_alsa_inc_prefix+set}" = set; then : + withval=$with_alsa_inc_prefix; alsa_inc_prefix="$withval" +else + alsa_inc_prefix="" +fi + + +@%:@ Check whether --enable-alsatest was given. +if test "${enable_alsatest+set}" = set; then : + enableval=$enable_alsatest; enable_alsatest=no +else + enable_alsatest=yes +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ALSA CFLAGS" >&5 +$as_echo_n "checking for ALSA CFLAGS... " >&6; } +if test "$alsa_inc_prefix" != "" ; then + ALSA_CFLAGS="$ALSA_CFLAGS -I$alsa_inc_prefix" + CFLAGS="$CFLAGS -I$alsa_inc_prefix" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ALSA_CFLAGS" >&5 +$as_echo "$ALSA_CFLAGS" >&6; } + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ALSA LDFLAGS" >&5 +$as_echo_n "checking for ALSA LDFLAGS... " >&6; } +if test "$alsa_prefix" != "" ; then + ALSA_LIBS="$ALSA_LIBS -L$alsa_prefix" + LDFLAGS="$LDFLAGS $ALSA_LIBS" +fi + +ALSA_LIBS="$ALSA_LIBS -lasound -lm -ldl" +LIBS=`echo $LIBS | sed 's/-lm//'` +LIBS=`echo $LIBS | sed 's/-ldl//'` +LIBS=`echo $LIBS | sed 's/ //'` +LIBS="$ALSA_LIBS $LIBS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ALSA_LIBS" >&5 +$as_echo "$ALSA_LIBS" >&6; } + +min_alsa_version=0.9.0 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for libasound headers version >= $min_alsa_version" >&5 +$as_echo_n "checking for libasound headers version >= $min_alsa_version... " >&6; } +no_alsa="" + alsa_min_major_version=`echo $min_alsa_version | \ + sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'` + alsa_min_minor_version=`echo $min_alsa_version | \ + sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'` + alsa_min_micro_version=`echo $min_alsa_version | \ + sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'` + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include + +int +main () +{ + +void main(void) +{ +/* ensure backward compatibility */ +#if !defined(SND_LIB_MAJOR) && defined(SOUNDLIB_VERSION_MAJOR) +#define SND_LIB_MAJOR SOUNDLIB_VERSION_MAJOR +#endif +#if !defined(SND_LIB_MINOR) && defined(SOUNDLIB_VERSION_MINOR) +#define SND_LIB_MINOR SOUNDLIB_VERSION_MINOR +#endif +#if !defined(SND_LIB_SUBMINOR) && defined(SOUNDLIB_VERSION_SUBMINOR) +#define SND_LIB_SUBMINOR SOUNDLIB_VERSION_SUBMINOR +#endif + +# if(SND_LIB_MAJOR > $alsa_min_major_version) + exit(0); +# else +# if(SND_LIB_MAJOR < $alsa_min_major_version) +# error not present +# endif + +# if(SND_LIB_MINOR > $alsa_min_minor_version) + exit(0); +# else +# if(SND_LIB_MINOR < $alsa_min_minor_version) +# error not present +# endif + +# if(SND_LIB_SUBMINOR < $alsa_min_micro_version) +# error not present +# endif +# endif +# endif +exit(0); +} + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: found." >&5 +$as_echo "found." >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not present." >&5 +$as_echo "not present." >&6; } + + alsa_found=no + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for snd_seq_create_event in -lasound" >&5 +$as_echo_n "checking for snd_seq_create_event in -lasound... " >&6; } +if test "${ac_cv_lib_asound_snd_seq_create_event+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lasound $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char snd_seq_create_event (); +int +main () +{ +return snd_seq_create_event (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ac_cv_lib_asound_snd_seq_create_event=yes +else + ac_cv_lib_asound_snd_seq_create_event=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_asound_snd_seq_create_event" >&5 +$as_echo "$ac_cv_lib_asound_snd_seq_create_event" >&6; } +if test "x$ac_cv_lib_asound_snd_seq_create_event" = x""yes; then : + cat >>confdefs.h <<_ACEOF +@%:@define HAVE_LIBASOUND 1 +_ACEOF + + LIBS="-lasound $LIBS" + +else + + alsa_found=no + +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +if test "x$alsa_found" = "xyes" ; then + true + LIBS=`echo $LIBS | sed 's/-lasound//g'` + LIBS=`echo $LIBS | sed 's/ //'` + LIBS="-lasound $LIBS" +fi +if test "x$alsa_found" = "xno" ; then + as_fn_error "latest alsa (0.9.x) is required" "$LINENO" 5 + + CFLAGS="$alsa_save_CFLAGS" + LDFLAGS="$alsa_save_LDFLAGS" + LIBS="$alsa_save_LIBS" + ALSA_CFLAGS="" + ALSA_LIBS="" +fi + + + + + +################# +### fluidsynth ### +################# +LIBFLUIDSYNTH= +muse_enable_fluidlib="yes" +synth_fluidsynth="fluidsynth" +synth_fluid="fluid" +@%:@ Check whether --enable-fluidsynth was given. +if test "${enable_fluidsynth+set}" = set; then : + enableval=$enable_fluidsynth; + case "$enableval" in + "yes") + synth_fluidsynth="fluidsynth" + synth_fluid="fluid" + ;; + "no") + muse_enable_fluidlib="no" + synth_fluidsynth="" + synth_fluid="" + ;; + *) + as_fn_error "must use --enable-fluidsynth(=yes/no) or --disable-fluidsynth" "$LINENO" 5 + ;; + esac + +fi + + + if test "$muse_enable_fluidlib" = "yes"; then + ENABLEFLUIDSYNTH_TRUE= + ENABLEFLUIDSYNTH_FALSE='#' +else + ENABLEFLUIDSYNTH_TRUE='#' + ENABLEFLUIDSYNTH_FALSE= +fi + + + +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_PKG_CONFIG+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PKG_CONFIG=$ac_cv_path_PKG_CONFIG +if test -n "$PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 +$as_echo "$PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_PKG_CONFIG"; then + ac_pt_PKG_CONFIG=$PKG_CONFIG + # Extract the first word of "pkg-config", so it can be a program name with args. +set dummy pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG +if test -n "$ac_pt_PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 +$as_echo "$ac_pt_PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_PKG_CONFIG" = x; then + PKG_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + PKG_CONFIG=$ac_pt_PKG_CONFIG + fi +else + PKG_CONFIG="$ac_cv_path_PKG_CONFIG" +fi + +fi +if test -n "$PKG_CONFIG"; then + _pkg_min_version=0.9.0 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 +$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + PKG_CONFIG="" + fi + +fi + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fluidsynth" >&5 +$as_echo_n "checking for Fluidsynth... " >&6; } + +if test -n "$PKG_CONFIG"; then + if test -n "$Fluidsynth_CFLAGS"; then + pkg_cv_Fluidsynth_CFLAGS="$Fluidsynth_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"fluidsynth\""; } >&5 + ($PKG_CONFIG --exists --print-errors "fluidsynth") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_Fluidsynth_CFLAGS=`$PKG_CONFIG --cflags "fluidsynth" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi +if test -n "$PKG_CONFIG"; then + if test -n "$Fluidsynth_LIBS"; then + pkg_cv_Fluidsynth_LIBS="$Fluidsynth_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"fluidsynth\""; } >&5 + ($PKG_CONFIG --exists --print-errors "fluidsynth") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_Fluidsynth_LIBS=`$PKG_CONFIG --libs "fluidsynth" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + Fluidsynth_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "fluidsynth"` + else + Fluidsynth_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "fluidsynth"` + fi + # Put the nasty error message in config.log where it belongs + echo "$Fluidsynth_PKG_ERRORS" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: libfluidsynth not found; disabling fluidsynth plugins" >&5 +$as_echo "$as_me: WARNING: libfluidsynth not found; disabling fluidsynth plugins" >&2;} ; + muse_enable_fluidlib="no" + +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: libfluidsynth not found; disabling fluidsynth plugins" >&5 +$as_echo "$as_me: WARNING: libfluidsynth not found; disabling fluidsynth plugins" >&2;} ; + muse_enable_fluidlib="no" + +else + Fluidsynth_CFLAGS=$pkg_cv_Fluidsynth_CFLAGS + Fluidsynth_LIBS=$pkg_cv_Fluidsynth_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + FLUIDSYNTHDIRS="fluid fluidsynth"; +$as_echo "@%:@define ENABLEFLUIDSYNTH 1" >>confdefs.h + +fi + + + +if test "$muse_enable_fluidlib" = "no"; then + synth_fluidsynth="" + synth_fluid="" +fi + + +############### +### sndfile ### +############### + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for SNDFILE" >&5 +$as_echo_n "checking for SNDFILE... " >&6; } + +if test -n "$PKG_CONFIG"; then + if test -n "$SNDFILE_CFLAGS"; then + pkg_cv_SNDFILE_CFLAGS="$SNDFILE_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"sndfile >= 1.0.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "sndfile >= 1.0.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_SNDFILE_CFLAGS=`$PKG_CONFIG --cflags "sndfile >= 1.0.0" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi +if test -n "$PKG_CONFIG"; then + if test -n "$SNDFILE_LIBS"; then + pkg_cv_SNDFILE_LIBS="$SNDFILE_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"sndfile >= 1.0.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "sndfile >= 1.0.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_SNDFILE_LIBS=`$PKG_CONFIG --libs "sndfile >= 1.0.0" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + SNDFILE_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "sndfile >= 1.0.0"` + else + SNDFILE_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "sndfile >= 1.0.0"` + fi + # Put the nasty error message in config.log where it belongs + echo "$SNDFILE_PKG_ERRORS" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + as_fn_error "need libsndfile >= 1.0.0" "$LINENO" 5 + +elif test $pkg_failed = untried; then + as_fn_error "need libsndfile >= 1.0.0" "$LINENO" 5 + +else + SNDFILE_CFLAGS=$pkg_cv_SNDFILE_CFLAGS + SNDFILE_LIBS=$pkg_cv_SNDFILE_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + true +fi + +############### +### libsamplerate ### +############### + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for SAMPLERATE" >&5 +$as_echo_n "checking for SAMPLERATE... " >&6; } + +if test -n "$PKG_CONFIG"; then + if test -n "$SAMPLERATE_CFLAGS"; then + pkg_cv_SAMPLERATE_CFLAGS="$SAMPLERATE_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"samplerate >= 0.1.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "samplerate >= 0.1.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_SAMPLERATE_CFLAGS=`$PKG_CONFIG --cflags "samplerate >= 0.1.0" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi +if test -n "$PKG_CONFIG"; then + if test -n "$SAMPLERATE_LIBS"; then + pkg_cv_SAMPLERATE_LIBS="$SAMPLERATE_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"samplerate >= 0.1.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "samplerate >= 0.1.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_SAMPLERATE_LIBS=`$PKG_CONFIG --libs "samplerate >= 0.1.0" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + SAMPLERATE_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "samplerate >= 0.1.0"` + else + SAMPLERATE_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "samplerate >= 0.1.0"` + fi + # Put the nasty error message in config.log where it belongs + echo "$SAMPLERATE_PKG_ERRORS" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + as_fn_error "need libsamplerate" "$LINENO" 5 + +elif test $pkg_failed = untried; then + as_fn_error "need libsamplerate" "$LINENO" 5 + +else + SAMPLERATE_CFLAGS=$pkg_cv_SAMPLERATE_CFLAGS + SAMPLERATE_LIBS=$pkg_cv_SAMPLERATE_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + true +fi + +############### +### libuuid ### +############### +ac_fn_c_check_header_mongrel "$LINENO" "uuid/uuid.h" "ac_cv_header_uuid_uuid_h" "$ac_includes_default" +if test "x$ac_cv_header_uuid_uuid_h" = x""yes; then : + UUID_FOUND="yes" +else + UUID_FOUND="no" +fi + + +if test x$UUID_FOUND = xno; then + as_fn_error "Header file uuid.h, from the uuid-dev (sometimes in e2fsprogs) package, is required" "$LINENO" 5 +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for uuid_generate in -luuid" >&5 +$as_echo_n "checking for uuid_generate in -luuid... " >&6; } +if test "${ac_cv_lib_uuid_uuid_generate+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-luuid $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char uuid_generate (); +int +main () +{ +return uuid_generate (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_uuid_uuid_generate=yes +else + ac_cv_lib_uuid_uuid_generate=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_uuid_uuid_generate" >&5 +$as_echo "$ac_cv_lib_uuid_uuid_generate" >&6; } +if test "x$ac_cv_lib_uuid_uuid_generate" = x""yes; then : + UUID_FOUND="yes" +else + UUID_FOUND="no" +fi + +if test x$UUID_FOUND = xno; then + as_fn_error "libuuid (sometimes in e2fsprogs package) is required" "$LINENO" 5 +fi +UUID_LIBS="-luuid" + + + +## PKG_CHECK_MODULES(UUID, uuid >= 1.0, +## true, +## AC_MSG_ERROR([need libuuid >= 1.0 from e2fsprogs package]) +## ) + +############ +### JACK ### +############ + + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for JACK" >&5 +$as_echo_n "checking for JACK... " >&6; } + +if test -n "$PKG_CONFIG"; then + if test -n "$JACK_CFLAGS"; then + pkg_cv_JACK_CFLAGS="$JACK_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"jack >= 0.98.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "jack >= 0.98.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_JACK_CFLAGS=`$PKG_CONFIG --cflags "jack >= 0.98.0" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi +if test -n "$PKG_CONFIG"; then + if test -n "$JACK_LIBS"; then + pkg_cv_JACK_LIBS="$JACK_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"jack >= 0.98.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "jack >= 0.98.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_JACK_LIBS=`$PKG_CONFIG --libs "jack >= 0.98.0" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + JACK_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "jack >= 0.98.0"` + else + JACK_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "jack >= 0.98.0"` + fi + # Put the nasty error message in config.log where it belongs + echo "$JACK_PKG_ERRORS" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + as_fn_error "need JACK >= 0.98.0" "$LINENO" 5 + +elif test $pkg_failed = untried; then + as_fn_error "need JACK >= 0.98.0" "$LINENO" 5 + +else + JACK_CFLAGS=$pkg_cv_JACK_CFLAGS + JACK_LIBS=$pkg_cv_JACK_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + true +fi + +############## +### LASH ### +############## +muse_enable_lash="no" +@%:@ Check whether --enable-lash was given. +if test "${enable_lash+set}" = set; then : + enableval=$enable_lash; + case "$enableval" in + "yes") + muse_enable_lash="yes" + ;; + "no") + muse_enable_lash="no" + ;; + *) + as_fn_error "must use --enable-lash(=yes/no) or --disable-lash" "$LINENO" 5 + ;; + esac + +fi + + +if test "$muse_enable_lash" = "yes"; then + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LASH" >&5 +$as_echo_n "checking for LASH... " >&6; } + +if test -n "$PKG_CONFIG"; then + if test -n "$LASH_CFLAGS"; then + pkg_cv_LASH_CFLAGS="$LASH_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"lash-1.0 >= 0.2\""; } >&5 + ($PKG_CONFIG --exists --print-errors "lash-1.0 >= 0.2") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_LASH_CFLAGS=`$PKG_CONFIG --cflags "lash-1.0 >= 0.2" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi +if test -n "$PKG_CONFIG"; then + if test -n "$LASH_LIBS"; then + pkg_cv_LASH_LIBS="$LASH_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"lash-1.0 >= 0.2\""; } >&5 + ($PKG_CONFIG --exists --print-errors "lash-1.0 >= 0.2") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_LASH_LIBS=`$PKG_CONFIG --libs "lash-1.0 >= 0.2" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + LASH_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "lash-1.0 >= 0.2"` + else + LASH_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "lash-1.0 >= 0.2"` + fi + # Put the nasty error message in config.log where it belongs + echo "$LASH_PKG_ERRORS" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + LASH_FOUND="no" +elif test $pkg_failed = untried; then + LASH_FOUND="no" +else + LASH_CFLAGS=$pkg_cv_LASH_CFLAGS + LASH_LIBS=$pkg_cv_LASH_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + LASH_FOUND="yes" +fi + + + + if test "$LASH_FOUND" = "yes"; then + +$as_echo "@%:@define HAVE_LASH 1" >>confdefs.h + + LASH_VERSION=$( pkg-config --modversion lash-1.0 ) + +cat >>confdefs.h <<_ACEOF +@%:@define LASH_VERSION "$LASH_VERSION" +_ACEOF + + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: LASH support is disabled" >&5 +$as_echo "$as_me: WARNING: LASH support is disabled" >&2;} + LASH_FOUND="no" +fi + if test "$LASH_FOUND" = "yes"; then + HAVE_LASH_TRUE= + HAVE_LASH_FALSE='#' +else + HAVE_LASH_TRUE='#' + HAVE_LASH_FALSE= +fi + + + + + +################# +### givertcap ### +################# + +GIVERTCAP= +report_rtcap="no" +@%:@ Check whether --enable-rtcap was given. +if test "${enable_rtcap+set}" = set; then : + enableval=$enable_rtcap; + case "$enableval" in + "yes") + +$as_echo "@%:@define RTCAP 1" >>confdefs.h + + MUSECXXFLAGS="$MUSECXXFLAGS -DRTCAP" + GIVERTCAP="givertcap" + + ac_fn_c_check_header_mongrel "$LINENO" "sys/capability.h" "ac_cv_header_sys_capability_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_capability_h" = x""yes; then : + report_rtcap="yes" +else + as_fn_error "Missing sys/capability.h" "$LINENO" 5 +fi + + + ;; + "no") + ;; + *) + as_fn_error "must use --enable-rtcap(=yes/no) or --disable-rtcap" "$LINENO" 5 + esac + +fi + + if test "$report_rtcap" = "yes"; then + RTCAP_TRUE= + RTCAP_FALSE='#' +else + RTCAP_TRUE='#' + RTCAP_FALSE= +fi + + + + +#################### +### suid-install ### +#################### + +SUIDINSTALL="no" +@%:@ Check whether --enable-suid-install was given. +if test "${enable_suid_install+set}" = set; then : + enableval=$enable_suid_install; + case "$enableval" in + "yes") + SUIDINSTALL="yes" + ;; + "no") + ;; + *) + as_fn_error "must use --enable-suid-install(=yes/no) or --disable-suid-install" "$LINENO" 5 + ;; + esac + +fi + + + +################## +### suid-build ### +################## +SUIDBUILD="no" +@%:@ Check whether --enable-suid-build was given. +if test "${enable_suid_build+set}" = set; then : + enableval=$enable_suid_build; + case "$enableval" in + "yes") + SUIDBUILD="yes" + ;; + "no") + SUIDBUILD="no" + ;; + *) + as_fn_error "must use --enable-suid-build(=yes/no) or --disable-suid-build" "$LINENO" 5 + ;; + esac + +fi + + + + +######################## +### doxygen-treeview ### +######################## +DOXYGEN_TREEVIEW="YES" +report_doxy_treeview="yes"; +@%:@ Check whether --enable-doxy-treeview was given. +if test "${enable_doxy_treeview+set}" = set; then : + enableval=$enable_doxy_treeview; + case "$enableval" in + "yes") + ;; + "no") + DOXYGEN_TREEVIEW="NO" + report_doxy_treeview="no"; + ;; + *) + as_fn_error "must use --enable-doxy-treeview(=yes/no) or --disable-doxy-treeview" "$LINENO" 5 + ;; + esac + +fi + + + +################ +### patchbay ### +################ +###PATCHBAY="no" +###AC_SUBST(PATCHBAY) +###AM_CONDITIONAL(PATCHBAY, test "$PATCHBAY" == "yes") + +## -DQT_NO_CAST_ASCII +MUSECXXFLAGS="-g -fno-exceptions -Wall -W -D_GNU_SOURCE -D_REENTRANT \ + -DQT_CLEAN_NAMESPACE -DQT_NO_COMPAT \ + -I\$(top_srcdir) -I\$(top_srcdir)/muse/widgets \$(QT_CFLAGS)" + +#MUSEOPTCXXFLAGS="-O6 -fomit-frame-pointer -ffast-math -fstrength-reduce \ +#-funroll-loops" +#MUSEOPTCXXFLAGS="-O2" +MUSEOPTCXXFLAGS="-O3 -fomit-frame-pointer -ffast-math -fstrength-reduce -funroll-loops" + +# -fmove-all-movables + +################ +### optimize ### +################ +report_optimise="no" +@%:@ Check whether --enable-optimize was given. +if test "${enable_optimize+set}" = set; then : + enableval=$enable_optimize; + case "$enableval" in + "yes") + report_optimise="yes" + CXXFLAGS="$( echo "$CXXFLAGS" | sed "s/-O. *//" )" + MUSECXXFLAGS="$MUSECXXFLAGS $MUSEOPTCXXFLAGS" + ;; + "no") + ;; + *) + as_fn_error "must use --enable-optimize(=yes/no) or --disable-optimize" "$LINENO" 5 + ;; + esac + +fi + + +############# +### debug ### +############# +report_debug="no" +@%:@ Check whether --enable-debug was given. +if test "${enable_debug+set}" = set; then : + enableval=$enable_debug; + case "$enableval" in + "yes") + report_debug="yes" + CXXFLAGS="" + ;; + "no") + ;; + *) + as_fn_error "must use --enable-debug(=yes/no) or --disable-debug" "$LINENO" 5 + ;; + esac + +fi + + +########################### +### PCH ### +### precompiled headers ### +########################### + +@%:@ Check whether --enable-pch was given. +if test "${enable_pch+set}" = set; then : + enableval=$enable_pch; + case "$enableval" in + "yes") + MUSECXXFLAGS="$MUSECXXFLAGS -Winvalid-pch" + PCH="yes" + + +$as_echo "@%:@define PCH 1" >>confdefs.h + + ;; + "no") + ;; + *) + as_fn_error "must use --enable-pch(=yes/no) or --disable-pch" "$LINENO" 5 + ;; + esac + +fi + + if test "$PCH" = "yes"; then + PCH_TRUE= + PCH_FALSE='#' +else + PCH_TRUE='#' + PCH_FALSE= +fi + + +############ +### arch ### +############ + +report_march="none" +@%:@ Check whether --enable-arch was given. +if test "${enable_arch+set}" = set; then : + enableval=$enable_arch; + case "$enableval" in + "no") + ;; + *) + report_march="$enableval" + MUSECXXFLAGS="$MUSECXXFLAGS -mtune=$enableval -march=$enableval" + ;; + esac + +fi + + +########################### +### SSE ### +### SSE optimizations ### +########################### + +report_sse="no" +@%:@ Check whether --enable-sse was given. +if test "${enable_sse+set}" = set; then : + enableval=$enable_sse; + case "$enableval" in + "yes") + ## MUSECXXFLAGS="$MUSECXXFLAGS -Winvalid-pch" + report_sse="yes" + USE_SSE="yes" + + +$as_echo "@%:@define USE_SSE 1" >>confdefs.h + + ;; + "no") + ;; + *) + as_fn_error "must use --enable-sse(=yes/no) or --disable-sse" "$LINENO" 5 + ;; + esac + +fi + + if test "$USE_SSE" = "yes"; then + USE_SSE_TRUE= + USE_SSE_FALSE='#' +else + USE_SSE_TRUE='#' + USE_SSE_FALSE= +fi + + +########## +# PYTHON # +########## +# python detection borrowed from libvirt (http://libvirt.org) + +@%:@ Check whether --with-python was given. +if test "${with_python+set}" = set; then : + withval=$with_python; +else + enable_python=yes +fi + + +PYTHON_VERSION= +PYTHON_INCLUDES= +if test "$enable_python" != "no" ; then + if test -x "$enable_python/bin/python" + then + { $as_echo "$as_me:${as_lineno-$LINENO}: Found python in $enable_python/bin/python" >&5 +$as_echo "$as_me: Found python in $enable_python/bin/python" >&6;} + PYTHON="$enable_python/bin/python" + enable_python=yes + else + if test -x "$enable_python" + then + { $as_echo "$as_me:${as_lineno-$LINENO}: Found python in $enable_python" >&5 +$as_echo "$as_me: Found python in $enable_python" >&6;} + PYTHON="$enable_python" + enable_python=yes + else + if test -x "$PYTHON" + then + { $as_echo "$as_me:${as_lineno-$LINENO}: Found python in environment PYTHON=$PYTHON" >&5 +$as_echo "$as_me: Found python in environment PYTHON=$PYTHON" >&6;} + enable_python=yes + fi + fi + fi + + if test "$enable_python" == "yes" ; then + + + + + # Find any Python interpreter. + if test -z "$PYTHON"; then + for ac_prog in python python2 python3 python3.0 python2.5 python2.4 python2.3 python2.2 python2.1 python2.0 +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_PYTHON+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $PYTHON in + [\\/]* | ?:[\\/]*) + ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_PYTHON="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PYTHON=$ac_cv_path_PYTHON +if test -n "$PYTHON"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 +$as_echo "$PYTHON" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$PYTHON" && break +done +test -n "$PYTHON" || PYTHON=":" + + fi + am_display_PYTHON=python + + + if test "$PYTHON" = :; then + : + else + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON version" >&5 +$as_echo_n "checking for $am_display_PYTHON version... " >&6; } +if test "${am_cv_python_version+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[:3])"` +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_version" >&5 +$as_echo "$am_cv_python_version" >&6; } + PYTHON_VERSION=$am_cv_python_version + + + + PYTHON_PREFIX='${prefix}' + + PYTHON_EXEC_PREFIX='${exec_prefix}' + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON platform" >&5 +$as_echo_n "checking for $am_display_PYTHON platform... " >&6; } +if test "${am_cv_python_platform+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + am_cv_python_platform=`$PYTHON -c "import sys; sys.stdout.write(sys.platform)"` +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_platform" >&5 +$as_echo "$am_cv_python_platform" >&6; } + PYTHON_PLATFORM=$am_cv_python_platform + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON script directory" >&5 +$as_echo_n "checking for $am_display_PYTHON script directory... " >&6; } +if test "${am_cv_python_pythondir+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "x$prefix" = xNONE + then + am_py_prefix=$ac_default_prefix + else + am_py_prefix=$prefix + fi + am_cv_python_pythondir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(0,0,prefix='$am_py_prefix'))" 2>/dev/null || + echo "$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages"` + case $am_cv_python_pythondir in + $am_py_prefix*) + am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'` + am_cv_python_pythondir=`echo "$am_cv_python_pythondir" | sed "s,^$am__strip_prefix,$PYTHON_PREFIX,"` + ;; + *) + case $am_py_prefix in + /usr|/System*) ;; + *) + am_cv_python_pythondir=$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages + ;; + esac + ;; + esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_pythondir" >&5 +$as_echo "$am_cv_python_pythondir" >&6; } + pythondir=$am_cv_python_pythondir + + + + pkgpythondir=\${pythondir}/$PACKAGE + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON extension module directory" >&5 +$as_echo_n "checking for $am_display_PYTHON extension module directory... " >&6; } +if test "${am_cv_python_pyexecdir+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "x$exec_prefix" = xNONE + then + am_py_exec_prefix=$am_py_prefix + else + am_py_exec_prefix=$exec_prefix + fi + am_cv_python_pyexecdir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(1,0,prefix='$am_py_exec_prefix'))" 2>/dev/null || + echo "$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages"` + case $am_cv_python_pyexecdir in + $am_py_exec_prefix*) + am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'` + am_cv_python_pyexecdir=`echo "$am_cv_python_pyexecdir" | sed "s,^$am__strip_prefix,$PYTHON_EXEC_PREFIX,"` + ;; + *) + case $am_py_exec_prefix in + /usr|/System*) ;; + *) + am_cv_python_pyexecdir=$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages + ;; + esac + ;; + esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_pyexecdir" >&5 +$as_echo "$am_cv_python_pyexecdir" >&6; } + pyexecdir=$am_cv_python_pyexecdir + + + + pkgpyexecdir=\${pyexecdir}/$PACKAGE + + + + fi + + + + if test "$PYTHON" != : ; then + PYTHON_CONFIG="$PYTHON-config" + + if test -x "$PYTHON_CONFIG" + then + PYTHON_INCLUDES=`$PYTHON_CONFIG --includes` + PYTHON_LIB=`$PYTHON_CONFIG --libs` + else + if test -r $PYTHON_EXEC_PREFIX/include/python$PYTHON_VERSION/Python.h + then + PYTHON_INCLUDES=-I$PYTHON_EXEC_PREFIX/include/python$PYTHON_VERSION + else + if test -r $prefix/include/python$PYTHON_VERSION/Python.h + then + PYTHON_INCLUDES=-I$prefix/include/python$PYTHON_VERSION + else + if test -r /usr/include/python$PYTHON_VERSION/Python.h + then + PYTHON_INCLUDES=-I/usr/include/python$PYTHON_VERSION + else + { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find python$PYTHON_VERSION/Python.h, disabling bindings" >&5 +$as_echo "$as_me: Could not find python$PYTHON_VERSION/Python.h, disabling bindings" >&6;} + enable_python=no + fi + fi + fi + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find python interpreter, disabling bindings" >&5 +$as_echo "$as_me: Could not find python interpreter, disabling bindings" >&6;} + enable_python=no + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find python in $enable_python, disabling bindings" >&5 +$as_echo "$as_me: Could not find python in $enable_python, disabling bindings" >&6;} + enable_python=no + fi +fi + if test "$enable_python" = "yes"; then + ENABLE_PYTHON_TRUE= + ENABLE_PYTHON_FALSE='#' +else + ENABLE_PYTHON_TRUE='#' + ENABLE_PYTHON_FALSE= +fi + + + + + +#AC_ARG_ENABLE(python, +#enable_python="yes" +# [ --disable-python disable python bindings for MusE],[ +# case "$enableval" in +# "no") +# enable_python="no" +# ;; +# *) +# AC_MSG_ERROR([must use --enable-python(=yes/no) or --disable-python]) +# ;; +# esac +# ]) +# +#if test "$enable_python" = "yes"; then +# AM_PATH_PYTHON +# PYTHON_INCLUDE_DIR="" +# if test -n "$PYTHON_INCLUDES" ; then +# PYTHON_INCLUDE_DIR=$PYTHON_INCLUDES +# python_bindings="yes" +# else +# python_bindings="no - devel pkg not found" +# fi +#fi +#AM_CONDITIONAL(ENABLE_PYTHON, test "$python_bindings" = "yes") + +################### +### vst plugins ### +################### + +vst_possible=no +VST="no" +@%:@ Check whether --enable-vst was given. +if test "${enable_vst+set}" = set; then : + enableval=$enable_vst; if test x$enable_vst = xyes ; then + vst_requested=yes; + fi + + +fi + + +if test x$vst_requested = xyes ; then + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for FST" >&5 +$as_echo_n "checking for FST... " >&6; } + +if test -n "$PKG_CONFIG"; then + if test -n "$FST_CFLAGS"; then + pkg_cv_FST_CFLAGS="$FST_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libfst\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libfst") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_FST_CFLAGS=`$PKG_CONFIG --cflags "libfst" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi +if test -n "$PKG_CONFIG"; then + if test -n "$FST_LIBS"; then + pkg_cv_FST_LIBS="$FST_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libfst\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libfst") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_FST_LIBS=`$PKG_CONFIG --libs "libfst" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + FST_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "libfst"` + else + FST_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "libfst"` + fi + # Put the nasty error message in config.log where it belongs + echo "$FST_PKG_ERRORS" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + vst_possible=no +elif test $pkg_failed = untried; then + vst_possible=no +else + FST_CFLAGS=$pkg_cv_FST_CFLAGS + FST_LIBS=$pkg_cv_FST_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + vst_possible=yes +fi +fi + +if test x$vst_possible = xyes -a x$vst_requested = xyes ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking support for VST/win plugins" >&5 +$as_echo_n "checking support for VST/win plugins... " >&6; } + VST_CFLAGS="$FST_CFLAGS" + VST_LIBS="$FST_LIBS" + VST="yes" + +$as_echo "@%:@define VST_SUPPORT 1" >>confdefs.h + +fi + + if test x$vst_possible = xyes -a x$vst_requested = xyes; then + VST_SUPPORT_TRUE= + VST_SUPPORT_FALSE='#' +else + VST_SUPPORT_TRUE='#' + VST_SUPPORT_FALSE= +fi + + + +################### +### OSC support ### +################### + +osc_requested=no +LO_LIB_FOUND="no" +OSC="no" +@%:@ Check whether --enable-osc was given. +if test "${enable_osc+set}" = set; then : + enableval=$enable_osc; if test x$enable_osc = xyes ; then + osc_requested=yes; + fi + + +fi + + +if test x$osc_requested = xyes ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking support for OSC" >&5 +$as_echo_n "checking support for OSC... " >&6; } +## AC_CHECK_LIB(lo, lo_send, LO_LIB_FOUND="yes", LO_LIB_FOUND="no") +## PKG_CHECK_MODULES(LO, lo >= 0.2, LO_LIB_FOUND="yes", LO_LIB_FOUND="no") + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LO" >&5 +$as_echo_n "checking for LO... " >&6; } + +if test -n "$PKG_CONFIG"; then + if test -n "$LO_CFLAGS"; then + pkg_cv_LO_CFLAGS="$LO_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"liblo\""; } >&5 + ($PKG_CONFIG --exists --print-errors "liblo") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_LO_CFLAGS=`$PKG_CONFIG --cflags "liblo" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi +if test -n "$PKG_CONFIG"; then + if test -n "$LO_LIBS"; then + pkg_cv_LO_LIBS="$LO_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"liblo\""; } >&5 + ($PKG_CONFIG --exists --print-errors "liblo") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_LO_LIBS=`$PKG_CONFIG --libs "liblo" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + LO_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "liblo"` + else + LO_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "liblo"` + fi + # Put the nasty error message in config.log where it belongs + echo "$LO_PKG_ERRORS" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + LO_LIB_FOUND=no +elif test $pkg_failed = untried; then + LO_LIB_FOUND=no +else + LO_CFLAGS=$pkg_cv_LO_CFLAGS + LO_LIBS=$pkg_cv_LO_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + LO_LIB_FOUND=yes +fi + if test x$LO_LIB_FOUND = xno; then + as_fn_error "Library liblo from The Lightweight OSC Implementation is required" "$LINENO" 5 + fi +fi + +if test x$LO_LIB_FOUND = xyes ; then + LO_CFLAGS="$LO_CFLAGS" + ##LO_LIBS="$LO_LIBS" + LO_LIBS="-llo" + OSC="yes" + + + +$as_echo "@%:@define OSC_SUPPORT 1" >>confdefs.h + +fi + + if test x$LO_LIB_FOUND = xyes; then + OSC_SUPPORT_TRUE= + OSC_SUPPORT_FALSE='#' +else + OSC_SUPPORT_TRUE='#' + OSC_SUPPORT_FALSE= +fi + + +## LO_LIBS="-llo" +## AC_SUBST(LO_CFLAGS) +## AC_SUBST(LO_LIBS) + +## PKG_CHECK_MODULES(LO, lo >= 0.23, +## true, +## AC_MSG_ERROR([need liblo >= 0.23 ]) +## ) + + + +################### +### dssi plugins ### +################### + +dssi_requested=no +## LO_LIB_FOUND="no" +DSSI_H_FOUND="no" +DSSI="no" +@%:@ Check whether --enable-dssi was given. +if test "${enable_dssi+set}" = set; then : + enableval=$enable_dssi; if test x$enable_dssi = xyes ; then + dssi_requested=yes; + fi + + +fi + + + +if test x$dssi_requested = xyes ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking support for DSSI + DSSI-Vst plugins" >&5 +$as_echo_n "checking support for DSSI + DSSI-Vst plugins... " >&6; } + ## AC_CHECK_LIB(lo, lo_send, LO_LIB_FOUND="yes", LO_LIB_FOUND="no") + ## PKG_CHECK_MODULES(LO, lo >= 0.2, LO_LIB_FOUND="yes", LO_LIB_FOUND="no") +## PKG_CHECK_MODULES(LO,liblo, [ LO_LIB_FOUND=yes ], [ LO_LIB_FOUND=no ]) +## if test x$LO_LIB_FOUND = xno; then +## AC_MSG_ERROR([Library liblo from The Lightweight OSC Implementation is required]) +## fi + + ac_fn_c_check_header_mongrel "$LINENO" "dssi.h" "ac_cv_header_dssi_h" "$ac_includes_default" +if test "x$ac_cv_header_dssi_h" = x""yes; then : + DSSI_FOUND="yes" +else + DSSI_FOUND="no" +fi + + + ## PKG_CHECK_MODULES(DSSI [ DSSI_FOUND=yes ], [ DSSI_FOUND=no ]) + if test x$DSSI_FOUND = xno; then + as_fn_error "Header file dssi.h from DSSI (Disposable Soft Synth Interface) is required" "$LINENO" 5 + fi +fi + +## if test x$LO_LIB_FOUND = xyes -a x$DSSI_FOUND = xyes ; then +if test x$DSSI_FOUND = xyes ; then +## LO_CFLAGS="$LO_CFLAGS" + ##LO_LIBS="$LO_LIBS" +## LO_LIBS="-llo" + DSSI="yes" +## AC_SUBST(LO_CFLAGS) +## AC_SUBST(LO_LIBS) + +$as_echo "@%:@define DSSI_SUPPORT 1" >>confdefs.h + +fi + +## AM_CONDITIONAL(DSSI_SUPPORT, test x$LO_LIB_FOUND = xyes -a x$DSSI_FOUND = xyes) + if test x$DSSI_FOUND = xyes; then + DSSI_SUPPORT_TRUE= + DSSI_SUPPORT_FALSE='#' +else + DSSI_SUPPORT_TRUE='#' + DSSI_SUPPORT_FALSE= +fi + + +## LO_LIBS="-llo" +## AC_SUBST(LO_CFLAGS) +## AC_SUBST(LO_LIBS) + +## PKG_CHECK_MODULES(LO, lo >= 0.23, +## true, +## AC_MSG_ERROR([need liblo >= 0.23 ]) +## ) + + + + +###################################### + + + +$as_echo "@%:@define HAVE_AUDIO 1" >>confdefs.h + + if test "yes" = "yes"; then + HAVE_AUDIO_TRUE= + HAVE_AUDIO_FALSE='#' +else + HAVE_AUDIO_TRUE='#' + HAVE_AUDIO_FALSE= +fi + + + +if test -n "$GIVERTCAP"; then + SUIDINSTALL="no" + SUIDBUILD="no" + fi + + +ac_config_files="$ac_config_files Makefile m4/Makefile al/Makefile doc/Makefile xpm/Makefile demos/Makefile grepmidi/Makefile packaging/Makefile muse/Makefile muse/widgets/Makefile muse/master/Makefile muse/midiedit/Makefile muse/arranger/Makefile muse/liste/Makefile muse/driver/Makefile muse/waveedit/Makefile muse/ctrl/Makefile muse/instruments/Makefile muse/mixer/Makefile muse/cliplist/Makefile muse/marker/Makefile muse/mplugins/Makefile muse/remote/Makefile share/Makefile share/drummaps/Makefile share/html/Makefile share/locale/Makefile share/wallpapers/Makefile share/instruments/Makefile share/plugins/Makefile share/templates/Makefile share/pybridge/Makefile share/scripts/Makefile synti/Makefile synti/libsynti/Makefile synti/fluidsynth/Makefile synti/fluid/Makefile synti/organ/Makefile synti/s1/Makefile synti/vam/Makefile synti/deicsonze/Makefile synti/simpledrums/Makefile lib/Makefile lib/synthi/Makefile lib/plugins/Makefile plugins/Makefile plugins/freeverb/Makefile plugins/pandelay/Makefile plugins/doublechorus/Makefile Doxyfile utils/Makefile" + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + test "x$cache_file" != "x/dev/null" && + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + cat confcache >$cache_file + else + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +DEFS=-DHAVE_CONFIG_H + +ac_libobjs= +ac_ltlibobjs= +for ac_i in : $LIB@&t@OBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIB@&t@OBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + + if test -n "$EXEEXT"; then + am__EXEEXT_TRUE= + am__EXEEXT_FALSE='#' +else + am__EXEEXT_TRUE='#' + am__EXEEXT_FALSE= +fi + +if test -z "${INSIDE_GNOME_COMMON_TRUE}" && test -z "${INSIDE_GNOME_COMMON_FALSE}"; then + as_fn_error "conditional \"INSIDE_GNOME_COMMON\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then + as_fn_error "conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then + as_fn_error "conditional \"am__fastdepCXX\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + as_fn_error "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then + as_fn_error "conditional \"am__fastdepCXX\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${ENABLEFLUIDSYNTH_TRUE}" && test -z "${ENABLEFLUIDSYNTH_FALSE}"; then + as_fn_error "conditional \"ENABLEFLUIDSYNTH\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${HAVE_LASH_TRUE}" && test -z "${HAVE_LASH_FALSE}"; then + as_fn_error "conditional \"HAVE_LASH\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${RTCAP_TRUE}" && test -z "${RTCAP_FALSE}"; then + as_fn_error "conditional \"RTCAP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${PCH_TRUE}" && test -z "${PCH_FALSE}"; then + as_fn_error "conditional \"PCH\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${USE_SSE_TRUE}" && test -z "${USE_SSE_FALSE}"; then + as_fn_error "conditional \"USE_SSE\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${ENABLE_PYTHON_TRUE}" && test -z "${ENABLE_PYTHON_FALSE}"; then + as_fn_error "conditional \"ENABLE_PYTHON\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${VST_SUPPORT_TRUE}" && test -z "${VST_SUPPORT_FALSE}"; then + as_fn_error "conditional \"VST_SUPPORT\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${OSC_SUPPORT_TRUE}" && test -z "${OSC_SUPPORT_FALSE}"; then + as_fn_error "conditional \"OSC_SUPPORT\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${DSSI_SUPPORT_TRUE}" && test -z "${DSSI_SUPPORT_FALSE}"; then + as_fn_error "conditional \"DSSI_SUPPORT\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${HAVE_AUDIO_TRUE}" && test -z "${HAVE_AUDIO_FALSE}"; then + as_fn_error "conditional \"HAVE_AUDIO\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi + +: ${CONFIG_STATUS=./config.status} +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false + +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in @%:@( + *posix*) : + set -o posix ;; @%:@( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in @%:@( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +case $0 in @%:@(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +@%:@ as_fn_error ERROR [LINENO LOG_FD] +@%:@ --------------------------------- +@%:@ Output "`basename @S|@0`: error: ERROR" to stderr. If LINENO and LOG_FD are +@%:@ provided, also output the error to LOG_FD, referencing LINENO. Then exit the +@%:@ script with status @S|@?, using 1 if that was 0. +as_fn_error () +{ + as_status=$?; test $as_status -eq 0 && as_status=1 + if test "$3"; then + as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 + fi + $as_echo "$as_me: error: $1" >&2 + as_fn_exit $as_status +} @%:@ as_fn_error + + +@%:@ as_fn_set_status STATUS +@%:@ ----------------------- +@%:@ Set @S|@? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} @%:@ as_fn_set_status + +@%:@ as_fn_exit STATUS +@%:@ ----------------- +@%:@ Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} @%:@ as_fn_exit + +@%:@ as_fn_unset VAR +@%:@ --------------- +@%:@ Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +@%:@ as_fn_append VAR VALUE +@%:@ ---------------------- +@%:@ Append the text in VALUE to the end of the definition contained in VAR. Take +@%:@ advantage of any shell optimizations that allow amortized linear growth over +@%:@ repeated appends, instead of the typical quadratic growth present in naive +@%:@ implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +@%:@ as_fn_arith ARG... +@%:@ ------------------ +@%:@ Perform arithmetic evaluation on the ARGs, and store the result in the +@%:@ global @S|@as_val. Take advantage of shells that can avoid forks. The arguments +@%:@ must be portable across @S|@(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in @%:@((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +@%:@ as_fn_mkdir_p +@%:@ ------------- +@%:@ Create "@S|@as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" + + +} @%:@ as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in @%:@( + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in @%:@(( + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by MusE $as_me 1.1, which was +generated by GNU Autoconf 2.65. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + +case $ac_config_headers in *" +"*) set x $ac_config_headers; shift; ac_config_headers=$*;; +esac + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" +config_headers="$ac_config_headers" +config_commands="$ac_config_commands" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +ac_cs_usage="\ +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. + +Usage: $0 [OPTION]... [TAG]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration commands: +$config_commands + +Report bugs to the package provider." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_version="\\ +MusE config.status 1.1 +configured by $0, generated by GNU Autoconf 2.65, + with options \\"\$ac_cs_config\\" + +Copyright (C) 2009 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +MKDIR_P='$MKDIR_P' +AWK='$AWK' +test -n "\$AWK" || AWK=awk +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_HEADERS " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + as_fn_error "ambiguous option: \`$1' +Try \`$0 --help' for more information.";; + --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) as_fn_error "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +if \$ac_cs_recheck; then + set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../@%:@@%:@ /;s/...$/ @%:@@%:@/;p;x;p;x' <<_ASBOX +@%:@@%:@ Running $as_me. @%:@@%:@ +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# +# INIT-COMMANDS +# +AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" + + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +macro_version='`$ECHO "X$macro_version" | $Xsed -e "$delay_single_quote_subst"`' +macro_revision='`$ECHO "X$macro_revision" | $Xsed -e "$delay_single_quote_subst"`' +enable_shared='`$ECHO "X$enable_shared" | $Xsed -e "$delay_single_quote_subst"`' +enable_static='`$ECHO "X$enable_static" | $Xsed -e "$delay_single_quote_subst"`' +pic_mode='`$ECHO "X$pic_mode" | $Xsed -e "$delay_single_quote_subst"`' +enable_fast_install='`$ECHO "X$enable_fast_install" | $Xsed -e "$delay_single_quote_subst"`' +host_alias='`$ECHO "X$host_alias" | $Xsed -e "$delay_single_quote_subst"`' +host='`$ECHO "X$host" | $Xsed -e "$delay_single_quote_subst"`' +host_os='`$ECHO "X$host_os" | $Xsed -e "$delay_single_quote_subst"`' +build_alias='`$ECHO "X$build_alias" | $Xsed -e "$delay_single_quote_subst"`' +build='`$ECHO "X$build" | $Xsed -e "$delay_single_quote_subst"`' +build_os='`$ECHO "X$build_os" | $Xsed -e "$delay_single_quote_subst"`' +SED='`$ECHO "X$SED" | $Xsed -e "$delay_single_quote_subst"`' +Xsed='`$ECHO "X$Xsed" | $Xsed -e "$delay_single_quote_subst"`' +GREP='`$ECHO "X$GREP" | $Xsed -e "$delay_single_quote_subst"`' +EGREP='`$ECHO "X$EGREP" | $Xsed -e "$delay_single_quote_subst"`' +FGREP='`$ECHO "X$FGREP" | $Xsed -e "$delay_single_quote_subst"`' +LD='`$ECHO "X$LD" | $Xsed -e "$delay_single_quote_subst"`' +NM='`$ECHO "X$NM" | $Xsed -e "$delay_single_quote_subst"`' +LN_S='`$ECHO "X$LN_S" | $Xsed -e "$delay_single_quote_subst"`' +max_cmd_len='`$ECHO "X$max_cmd_len" | $Xsed -e "$delay_single_quote_subst"`' +ac_objext='`$ECHO "X$ac_objext" | $Xsed -e "$delay_single_quote_subst"`' +exeext='`$ECHO "X$exeext" | $Xsed -e "$delay_single_quote_subst"`' +lt_unset='`$ECHO "X$lt_unset" | $Xsed -e "$delay_single_quote_subst"`' +lt_SP2NL='`$ECHO "X$lt_SP2NL" | $Xsed -e "$delay_single_quote_subst"`' +lt_NL2SP='`$ECHO "X$lt_NL2SP" | $Xsed -e "$delay_single_quote_subst"`' +reload_flag='`$ECHO "X$reload_flag" | $Xsed -e "$delay_single_quote_subst"`' +reload_cmds='`$ECHO "X$reload_cmds" | $Xsed -e "$delay_single_quote_subst"`' +OBJDUMP='`$ECHO "X$OBJDUMP" | $Xsed -e "$delay_single_quote_subst"`' +deplibs_check_method='`$ECHO "X$deplibs_check_method" | $Xsed -e "$delay_single_quote_subst"`' +file_magic_cmd='`$ECHO "X$file_magic_cmd" | $Xsed -e "$delay_single_quote_subst"`' +AR='`$ECHO "X$AR" | $Xsed -e "$delay_single_quote_subst"`' +AR_FLAGS='`$ECHO "X$AR_FLAGS" | $Xsed -e "$delay_single_quote_subst"`' +STRIP='`$ECHO "X$STRIP" | $Xsed -e "$delay_single_quote_subst"`' +RANLIB='`$ECHO "X$RANLIB" | $Xsed -e "$delay_single_quote_subst"`' +old_postinstall_cmds='`$ECHO "X$old_postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' +old_postuninstall_cmds='`$ECHO "X$old_postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_cmds='`$ECHO "X$old_archive_cmds" | $Xsed -e "$delay_single_quote_subst"`' +CC='`$ECHO "X$CC" | $Xsed -e "$delay_single_quote_subst"`' +CFLAGS='`$ECHO "X$CFLAGS" | $Xsed -e "$delay_single_quote_subst"`' +compiler='`$ECHO "X$compiler" | $Xsed -e "$delay_single_quote_subst"`' +GCC='`$ECHO "X$GCC" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_pipe='`$ECHO "X$lt_cv_sys_global_symbol_pipe" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_cdecl='`$ECHO "X$lt_cv_sys_global_symbol_to_cdecl" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`' +objdir='`$ECHO "X$objdir" | $Xsed -e "$delay_single_quote_subst"`' +SHELL='`$ECHO "X$SHELL" | $Xsed -e "$delay_single_quote_subst"`' +ECHO='`$ECHO "X$ECHO" | $Xsed -e "$delay_single_quote_subst"`' +MAGIC_CMD='`$ECHO "X$MAGIC_CMD" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_no_builtin_flag='`$ECHO "X$lt_prog_compiler_no_builtin_flag" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_wl='`$ECHO "X$lt_prog_compiler_wl" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_pic='`$ECHO "X$lt_prog_compiler_pic" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_static='`$ECHO "X$lt_prog_compiler_static" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_prog_compiler_c_o='`$ECHO "X$lt_cv_prog_compiler_c_o" | $Xsed -e "$delay_single_quote_subst"`' +need_locks='`$ECHO "X$need_locks" | $Xsed -e "$delay_single_quote_subst"`' +DSYMUTIL='`$ECHO "X$DSYMUTIL" | $Xsed -e "$delay_single_quote_subst"`' +NMEDIT='`$ECHO "X$NMEDIT" | $Xsed -e "$delay_single_quote_subst"`' +LIPO='`$ECHO "X$LIPO" | $Xsed -e "$delay_single_quote_subst"`' +OTOOL='`$ECHO "X$OTOOL" | $Xsed -e "$delay_single_quote_subst"`' +OTOOL64='`$ECHO "X$OTOOL64" | $Xsed -e "$delay_single_quote_subst"`' +libext='`$ECHO "X$libext" | $Xsed -e "$delay_single_quote_subst"`' +shrext_cmds='`$ECHO "X$shrext_cmds" | $Xsed -e "$delay_single_quote_subst"`' +extract_expsyms_cmds='`$ECHO "X$extract_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`' +archive_cmds_need_lc='`$ECHO "X$archive_cmds_need_lc" | $Xsed -e "$delay_single_quote_subst"`' +enable_shared_with_static_runtimes='`$ECHO "X$enable_shared_with_static_runtimes" | $Xsed -e "$delay_single_quote_subst"`' +export_dynamic_flag_spec='`$ECHO "X$export_dynamic_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' +whole_archive_flag_spec='`$ECHO "X$whole_archive_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' +compiler_needs_object='`$ECHO "X$compiler_needs_object" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_from_new_cmds='`$ECHO "X$old_archive_from_new_cmds" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_from_expsyms_cmds='`$ECHO "X$old_archive_from_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`' +archive_cmds='`$ECHO "X$archive_cmds" | $Xsed -e "$delay_single_quote_subst"`' +archive_expsym_cmds='`$ECHO "X$archive_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`' +module_cmds='`$ECHO "X$module_cmds" | $Xsed -e "$delay_single_quote_subst"`' +module_expsym_cmds='`$ECHO "X$module_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`' +with_gnu_ld='`$ECHO "X$with_gnu_ld" | $Xsed -e "$delay_single_quote_subst"`' +allow_undefined_flag='`$ECHO "X$allow_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`' +no_undefined_flag='`$ECHO "X$no_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec='`$ECHO "X$hardcode_libdir_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec_ld='`$ECHO "X$hardcode_libdir_flag_spec_ld" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_separator='`$ECHO "X$hardcode_libdir_separator" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_direct='`$ECHO "X$hardcode_direct" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_direct_absolute='`$ECHO "X$hardcode_direct_absolute" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_minus_L='`$ECHO "X$hardcode_minus_L" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_shlibpath_var='`$ECHO "X$hardcode_shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_automatic='`$ECHO "X$hardcode_automatic" | $Xsed -e "$delay_single_quote_subst"`' +inherit_rpath='`$ECHO "X$inherit_rpath" | $Xsed -e "$delay_single_quote_subst"`' +link_all_deplibs='`$ECHO "X$link_all_deplibs" | $Xsed -e "$delay_single_quote_subst"`' +fix_srcfile_path='`$ECHO "X$fix_srcfile_path" | $Xsed -e "$delay_single_quote_subst"`' +always_export_symbols='`$ECHO "X$always_export_symbols" | $Xsed -e "$delay_single_quote_subst"`' +export_symbols_cmds='`$ECHO "X$export_symbols_cmds" | $Xsed -e "$delay_single_quote_subst"`' +exclude_expsyms='`$ECHO "X$exclude_expsyms" | $Xsed -e "$delay_single_quote_subst"`' +include_expsyms='`$ECHO "X$include_expsyms" | $Xsed -e "$delay_single_quote_subst"`' +prelink_cmds='`$ECHO "X$prelink_cmds" | $Xsed -e "$delay_single_quote_subst"`' +file_list_spec='`$ECHO "X$file_list_spec" | $Xsed -e "$delay_single_quote_subst"`' +variables_saved_for_relink='`$ECHO "X$variables_saved_for_relink" | $Xsed -e "$delay_single_quote_subst"`' +need_lib_prefix='`$ECHO "X$need_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`' +need_version='`$ECHO "X$need_version" | $Xsed -e "$delay_single_quote_subst"`' +version_type='`$ECHO "X$version_type" | $Xsed -e "$delay_single_quote_subst"`' +runpath_var='`$ECHO "X$runpath_var" | $Xsed -e "$delay_single_quote_subst"`' +shlibpath_var='`$ECHO "X$shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`' +shlibpath_overrides_runpath='`$ECHO "X$shlibpath_overrides_runpath" | $Xsed -e "$delay_single_quote_subst"`' +libname_spec='`$ECHO "X$libname_spec" | $Xsed -e "$delay_single_quote_subst"`' +library_names_spec='`$ECHO "X$library_names_spec" | $Xsed -e "$delay_single_quote_subst"`' +soname_spec='`$ECHO "X$soname_spec" | $Xsed -e "$delay_single_quote_subst"`' +postinstall_cmds='`$ECHO "X$postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' +postuninstall_cmds='`$ECHO "X$postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' +finish_cmds='`$ECHO "X$finish_cmds" | $Xsed -e "$delay_single_quote_subst"`' +finish_eval='`$ECHO "X$finish_eval" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_into_libs='`$ECHO "X$hardcode_into_libs" | $Xsed -e "$delay_single_quote_subst"`' +sys_lib_search_path_spec='`$ECHO "X$sys_lib_search_path_spec" | $Xsed -e "$delay_single_quote_subst"`' +sys_lib_dlsearch_path_spec='`$ECHO "X$sys_lib_dlsearch_path_spec" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_action='`$ECHO "X$hardcode_action" | $Xsed -e "$delay_single_quote_subst"`' +enable_dlopen='`$ECHO "X$enable_dlopen" | $Xsed -e "$delay_single_quote_subst"`' +enable_dlopen_self='`$ECHO "X$enable_dlopen_self" | $Xsed -e "$delay_single_quote_subst"`' +enable_dlopen_self_static='`$ECHO "X$enable_dlopen_self_static" | $Xsed -e "$delay_single_quote_subst"`' +old_striplib='`$ECHO "X$old_striplib" | $Xsed -e "$delay_single_quote_subst"`' +striplib='`$ECHO "X$striplib" | $Xsed -e "$delay_single_quote_subst"`' +compiler_lib_search_dirs='`$ECHO "X$compiler_lib_search_dirs" | $Xsed -e "$delay_single_quote_subst"`' +predep_objects='`$ECHO "X$predep_objects" | $Xsed -e "$delay_single_quote_subst"`' +postdep_objects='`$ECHO "X$postdep_objects" | $Xsed -e "$delay_single_quote_subst"`' +predeps='`$ECHO "X$predeps" | $Xsed -e "$delay_single_quote_subst"`' +postdeps='`$ECHO "X$postdeps" | $Xsed -e "$delay_single_quote_subst"`' +compiler_lib_search_path='`$ECHO "X$compiler_lib_search_path" | $Xsed -e "$delay_single_quote_subst"`' +LD_CXX='`$ECHO "X$LD_CXX" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_cmds_CXX='`$ECHO "X$old_archive_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' +compiler_CXX='`$ECHO "X$compiler_CXX" | $Xsed -e "$delay_single_quote_subst"`' +GCC_CXX='`$ECHO "X$GCC_CXX" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "X$lt_prog_compiler_no_builtin_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_wl_CXX='`$ECHO "X$lt_prog_compiler_wl_CXX" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_pic_CXX='`$ECHO "X$lt_prog_compiler_pic_CXX" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_static_CXX='`$ECHO "X$lt_prog_compiler_static_CXX" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_prog_compiler_c_o_CXX='`$ECHO "X$lt_cv_prog_compiler_c_o_CXX" | $Xsed -e "$delay_single_quote_subst"`' +archive_cmds_need_lc_CXX='`$ECHO "X$archive_cmds_need_lc_CXX" | $Xsed -e "$delay_single_quote_subst"`' +enable_shared_with_static_runtimes_CXX='`$ECHO "X$enable_shared_with_static_runtimes_CXX" | $Xsed -e "$delay_single_quote_subst"`' +export_dynamic_flag_spec_CXX='`$ECHO "X$export_dynamic_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`' +whole_archive_flag_spec_CXX='`$ECHO "X$whole_archive_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`' +compiler_needs_object_CXX='`$ECHO "X$compiler_needs_object_CXX" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_from_new_cmds_CXX='`$ECHO "X$old_archive_from_new_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_from_expsyms_cmds_CXX='`$ECHO "X$old_archive_from_expsyms_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' +archive_cmds_CXX='`$ECHO "X$archive_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' +archive_expsym_cmds_CXX='`$ECHO "X$archive_expsym_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' +module_cmds_CXX='`$ECHO "X$module_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' +module_expsym_cmds_CXX='`$ECHO "X$module_expsym_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' +with_gnu_ld_CXX='`$ECHO "X$with_gnu_ld_CXX" | $Xsed -e "$delay_single_quote_subst"`' +allow_undefined_flag_CXX='`$ECHO "X$allow_undefined_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`' +no_undefined_flag_CXX='`$ECHO "X$no_undefined_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec_CXX='`$ECHO "X$hardcode_libdir_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec_ld_CXX='`$ECHO "X$hardcode_libdir_flag_spec_ld_CXX" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_separator_CXX='`$ECHO "X$hardcode_libdir_separator_CXX" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_direct_CXX='`$ECHO "X$hardcode_direct_CXX" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_direct_absolute_CXX='`$ECHO "X$hardcode_direct_absolute_CXX" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_minus_L_CXX='`$ECHO "X$hardcode_minus_L_CXX" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_shlibpath_var_CXX='`$ECHO "X$hardcode_shlibpath_var_CXX" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_automatic_CXX='`$ECHO "X$hardcode_automatic_CXX" | $Xsed -e "$delay_single_quote_subst"`' +inherit_rpath_CXX='`$ECHO "X$inherit_rpath_CXX" | $Xsed -e "$delay_single_quote_subst"`' +link_all_deplibs_CXX='`$ECHO "X$link_all_deplibs_CXX" | $Xsed -e "$delay_single_quote_subst"`' +fix_srcfile_path_CXX='`$ECHO "X$fix_srcfile_path_CXX" | $Xsed -e "$delay_single_quote_subst"`' +always_export_symbols_CXX='`$ECHO "X$always_export_symbols_CXX" | $Xsed -e "$delay_single_quote_subst"`' +export_symbols_cmds_CXX='`$ECHO "X$export_symbols_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' +exclude_expsyms_CXX='`$ECHO "X$exclude_expsyms_CXX" | $Xsed -e "$delay_single_quote_subst"`' +include_expsyms_CXX='`$ECHO "X$include_expsyms_CXX" | $Xsed -e "$delay_single_quote_subst"`' +prelink_cmds_CXX='`$ECHO "X$prelink_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' +file_list_spec_CXX='`$ECHO "X$file_list_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_action_CXX='`$ECHO "X$hardcode_action_CXX" | $Xsed -e "$delay_single_quote_subst"`' +compiler_lib_search_dirs_CXX='`$ECHO "X$compiler_lib_search_dirs_CXX" | $Xsed -e "$delay_single_quote_subst"`' +predep_objects_CXX='`$ECHO "X$predep_objects_CXX" | $Xsed -e "$delay_single_quote_subst"`' +postdep_objects_CXX='`$ECHO "X$postdep_objects_CXX" | $Xsed -e "$delay_single_quote_subst"`' +predeps_CXX='`$ECHO "X$predeps_CXX" | $Xsed -e "$delay_single_quote_subst"`' +postdeps_CXX='`$ECHO "X$postdeps_CXX" | $Xsed -e "$delay_single_quote_subst"`' +compiler_lib_search_path_CXX='`$ECHO "X$compiler_lib_search_path_CXX" | $Xsed -e "$delay_single_quote_subst"`' + +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# Quote evaled strings. +for var in SED \ +GREP \ +EGREP \ +FGREP \ +LD \ +NM \ +LN_S \ +lt_SP2NL \ +lt_NL2SP \ +reload_flag \ +OBJDUMP \ +deplibs_check_method \ +file_magic_cmd \ +AR \ +AR_FLAGS \ +STRIP \ +RANLIB \ +CC \ +CFLAGS \ +compiler \ +lt_cv_sys_global_symbol_pipe \ +lt_cv_sys_global_symbol_to_cdecl \ +lt_cv_sys_global_symbol_to_c_name_address \ +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ +SHELL \ +ECHO \ +lt_prog_compiler_no_builtin_flag \ +lt_prog_compiler_wl \ +lt_prog_compiler_pic \ +lt_prog_compiler_static \ +lt_cv_prog_compiler_c_o \ +need_locks \ +DSYMUTIL \ +NMEDIT \ +LIPO \ +OTOOL \ +OTOOL64 \ +shrext_cmds \ +export_dynamic_flag_spec \ +whole_archive_flag_spec \ +compiler_needs_object \ +with_gnu_ld \ +allow_undefined_flag \ +no_undefined_flag \ +hardcode_libdir_flag_spec \ +hardcode_libdir_flag_spec_ld \ +hardcode_libdir_separator \ +fix_srcfile_path \ +exclude_expsyms \ +include_expsyms \ +file_list_spec \ +variables_saved_for_relink \ +libname_spec \ +library_names_spec \ +soname_spec \ +finish_eval \ +old_striplib \ +striplib \ +compiler_lib_search_dirs \ +predep_objects \ +postdep_objects \ +predeps \ +postdeps \ +compiler_lib_search_path \ +LD_CXX \ +compiler_CXX \ +lt_prog_compiler_no_builtin_flag_CXX \ +lt_prog_compiler_wl_CXX \ +lt_prog_compiler_pic_CXX \ +lt_prog_compiler_static_CXX \ +lt_cv_prog_compiler_c_o_CXX \ +export_dynamic_flag_spec_CXX \ +whole_archive_flag_spec_CXX \ +compiler_needs_object_CXX \ +with_gnu_ld_CXX \ +allow_undefined_flag_CXX \ +no_undefined_flag_CXX \ +hardcode_libdir_flag_spec_CXX \ +hardcode_libdir_flag_spec_ld_CXX \ +hardcode_libdir_separator_CXX \ +fix_srcfile_path_CXX \ +exclude_expsyms_CXX \ +include_expsyms_CXX \ +file_list_spec_CXX \ +compiler_lib_search_dirs_CXX \ +predep_objects_CXX \ +postdep_objects_CXX \ +predeps_CXX \ +postdeps_CXX \ +compiler_lib_search_path_CXX; do + case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in reload_cmds \ +old_postinstall_cmds \ +old_postuninstall_cmds \ +old_archive_cmds \ +extract_expsyms_cmds \ +old_archive_from_new_cmds \ +old_archive_from_expsyms_cmds \ +archive_cmds \ +archive_expsym_cmds \ +module_cmds \ +module_expsym_cmds \ +export_symbols_cmds \ +prelink_cmds \ +postinstall_cmds \ +postuninstall_cmds \ +finish_cmds \ +sys_lib_search_path_spec \ +sys_lib_dlsearch_path_spec \ +old_archive_cmds_CXX \ +old_archive_from_new_cmds_CXX \ +old_archive_from_expsyms_cmds_CXX \ +archive_cmds_CXX \ +archive_expsym_cmds_CXX \ +module_cmds_CXX \ +module_expsym_cmds_CXX \ +export_symbols_cmds_CXX \ +prelink_cmds_CXX; do + case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Fix-up fallback echo if it was mangled by the above quoting rules. +case \$lt_ECHO in +*'\\\$0 --fallback-echo"') lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\$0 --fallback-echo"\$/\$0 --fallback-echo"/'\` + ;; +esac + +ac_aux_dir='$ac_aux_dir' +xsi_shell='$xsi_shell' +lt_shell_append='$lt_shell_append' + +# See if we are running on zsh, and set the options which allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + + + PACKAGE='$PACKAGE' + VERSION='$VERSION' + TIMESTAMP='$TIMESTAMP' + RM='$RM' + ofile='$ofile' + + + + + + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "m4/Makefile") CONFIG_FILES="$CONFIG_FILES m4/Makefile" ;; + "al/Makefile") CONFIG_FILES="$CONFIG_FILES al/Makefile" ;; + "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; + "xpm/Makefile") CONFIG_FILES="$CONFIG_FILES xpm/Makefile" ;; + "demos/Makefile") CONFIG_FILES="$CONFIG_FILES demos/Makefile" ;; + "grepmidi/Makefile") CONFIG_FILES="$CONFIG_FILES grepmidi/Makefile" ;; + "packaging/Makefile") CONFIG_FILES="$CONFIG_FILES packaging/Makefile" ;; + "muse/Makefile") CONFIG_FILES="$CONFIG_FILES muse/Makefile" ;; + "muse/widgets/Makefile") CONFIG_FILES="$CONFIG_FILES muse/widgets/Makefile" ;; + "muse/master/Makefile") CONFIG_FILES="$CONFIG_FILES muse/master/Makefile" ;; + "muse/midiedit/Makefile") CONFIG_FILES="$CONFIG_FILES muse/midiedit/Makefile" ;; + "muse/arranger/Makefile") CONFIG_FILES="$CONFIG_FILES muse/arranger/Makefile" ;; + "muse/liste/Makefile") CONFIG_FILES="$CONFIG_FILES muse/liste/Makefile" ;; + "muse/driver/Makefile") CONFIG_FILES="$CONFIG_FILES muse/driver/Makefile" ;; + "muse/waveedit/Makefile") CONFIG_FILES="$CONFIG_FILES muse/waveedit/Makefile" ;; + "muse/ctrl/Makefile") CONFIG_FILES="$CONFIG_FILES muse/ctrl/Makefile" ;; + "muse/instruments/Makefile") CONFIG_FILES="$CONFIG_FILES muse/instruments/Makefile" ;; + "muse/mixer/Makefile") CONFIG_FILES="$CONFIG_FILES muse/mixer/Makefile" ;; + "muse/cliplist/Makefile") CONFIG_FILES="$CONFIG_FILES muse/cliplist/Makefile" ;; + "muse/marker/Makefile") CONFIG_FILES="$CONFIG_FILES muse/marker/Makefile" ;; + "muse/mplugins/Makefile") CONFIG_FILES="$CONFIG_FILES muse/mplugins/Makefile" ;; + "muse/remote/Makefile") CONFIG_FILES="$CONFIG_FILES muse/remote/Makefile" ;; + "share/Makefile") CONFIG_FILES="$CONFIG_FILES share/Makefile" ;; + "share/drummaps/Makefile") CONFIG_FILES="$CONFIG_FILES share/drummaps/Makefile" ;; + "share/html/Makefile") CONFIG_FILES="$CONFIG_FILES share/html/Makefile" ;; + "share/locale/Makefile") CONFIG_FILES="$CONFIG_FILES share/locale/Makefile" ;; + "share/wallpapers/Makefile") CONFIG_FILES="$CONFIG_FILES share/wallpapers/Makefile" ;; + "share/instruments/Makefile") CONFIG_FILES="$CONFIG_FILES share/instruments/Makefile" ;; + "share/plugins/Makefile") CONFIG_FILES="$CONFIG_FILES share/plugins/Makefile" ;; + "share/templates/Makefile") CONFIG_FILES="$CONFIG_FILES share/templates/Makefile" ;; + "share/pybridge/Makefile") CONFIG_FILES="$CONFIG_FILES share/pybridge/Makefile" ;; + "share/scripts/Makefile") CONFIG_FILES="$CONFIG_FILES share/scripts/Makefile" ;; + "synti/Makefile") CONFIG_FILES="$CONFIG_FILES synti/Makefile" ;; + "synti/libsynti/Makefile") CONFIG_FILES="$CONFIG_FILES synti/libsynti/Makefile" ;; + "synti/fluidsynth/Makefile") CONFIG_FILES="$CONFIG_FILES synti/fluidsynth/Makefile" ;; + "synti/fluid/Makefile") CONFIG_FILES="$CONFIG_FILES synti/fluid/Makefile" ;; + "synti/organ/Makefile") CONFIG_FILES="$CONFIG_FILES synti/organ/Makefile" ;; + "synti/s1/Makefile") CONFIG_FILES="$CONFIG_FILES synti/s1/Makefile" ;; + "synti/vam/Makefile") CONFIG_FILES="$CONFIG_FILES synti/vam/Makefile" ;; + "synti/deicsonze/Makefile") CONFIG_FILES="$CONFIG_FILES synti/deicsonze/Makefile" ;; + "synti/simpledrums/Makefile") CONFIG_FILES="$CONFIG_FILES synti/simpledrums/Makefile" ;; + "lib/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;; + "lib/synthi/Makefile") CONFIG_FILES="$CONFIG_FILES lib/synthi/Makefile" ;; + "lib/plugins/Makefile") CONFIG_FILES="$CONFIG_FILES lib/plugins/Makefile" ;; + "plugins/Makefile") CONFIG_FILES="$CONFIG_FILES plugins/Makefile" ;; + "plugins/freeverb/Makefile") CONFIG_FILES="$CONFIG_FILES plugins/freeverb/Makefile" ;; + "plugins/pandelay/Makefile") CONFIG_FILES="$CONFIG_FILES plugins/pandelay/Makefile" ;; + "plugins/doublechorus/Makefile") CONFIG_FILES="$CONFIG_FILES plugins/doublechorus/Makefile" ;; + "Doxyfile") CONFIG_FILES="$CONFIG_FILES Doxyfile" ;; + "utils/Makefile") CONFIG_FILES="$CONFIG_FILES utils/Makefile" ;; + + *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= + trap 'exit_status=$? + { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -n "$tmp" && test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5 + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$tmp/subs1.awk" && +_ACEOF + + +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ + || as_fn_error "could not setup config files machinery" "$LINENO" 5 +_ACEOF + +# VPATH may cause trouble with some makes, so we remove $(srcdir), +# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=/{ +s/:*\$(srcdir):*/:/ +s/:*\${srcdir}:*/:/ +s/:*@srcdir@:*/:/ +s/^\([^=]*=[ ]*\):*/\1/ +s/:*$// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" + +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$tmp/defines.awk" <<\_ACAWK || +BEGIN { +_ACEOF + +# Transform confdefs.h into an awk script `defines.awk', embedded as +# here-document in config.status, that substitutes the proper values into +# config.h.in to produce config.h. + +# Create a delimiter string that does not exist in confdefs.h, to ease +# handling of long lines. +ac_delim='%!_!# ' +for ac_last_try in false false :; do + ac_t=`sed -n "/$ac_delim/p" confdefs.h` + if test -z "$ac_t"; then + break + elif $ac_last_try; then + as_fn_error "could not make $CONFIG_HEADERS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +# For the awk script, D is an array of macro values keyed by name, +# likewise P contains macro parameters if any. Preserve backslash +# newline sequences. + +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +sed -n ' +s/.\{148\}/&'"$ac_delim"'/g +t rset +:rset +s/^[ ]*#[ ]*define[ ][ ]*/ / +t def +d +:def +s/\\$// +t bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3"/p +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p +d +:bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3\\\\\\n"\\/p +t cont +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p +t cont +d +:cont +n +s/.\{148\}/&'"$ac_delim"'/g +t clear +:clear +s/\\$// +t bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/"/p +d +:bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p +b cont +' >$CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { + line = \$ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + as_fn_error "could not setup config headers machinery" "$LINENO" 5 +fi # test -n "$CONFIG_HEADERS" + + +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$tmp/stdin" \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir="$ac_dir"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + esac +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined." >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined." >&2;} + + rm -f "$tmp/stdin" + case $ac_file in + -) cat "$tmp/out" && rm -f "$tmp/out";; + *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; + esac \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 + ;; + :H) + # + # CONFIG_HEADER + # + if test x"$ac_file" != x-; then + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" + } >"$tmp/config.h" \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 + if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} + else + rm -f "$ac_file" + mv "$tmp/config.h" "$ac_file" \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 + fi + else + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error "could not create -" "$LINENO" 5 + fi +# Compute "$ac_file"'s index in $config_headers. +_am_arg="$ac_file" +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || +$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$_am_arg" : 'X\(//\)[^/]' \| \ + X"$_am_arg" : 'X\(//\)$' \| \ + X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$_am_arg" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'`/stamp-h$_am_stamp_count + ;; + + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "depfiles":C) test x"$AMDEP_TRUE" != x"" || { + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir=$dirpart/$fdir; as_fn_mkdir_p + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} + ;; + "libtool":C) + + # See if we are running on zsh, and set the options which allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + + cfgfile="${ofile}T" + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL + +# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008 Free Software Foundation, Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is part of GNU Libtool. +# +# GNU Libtool 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. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, or +# obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + +# The names of the tagged configurations supported by this script. +available_tags="CXX " + +# ### BEGIN LIBTOOL CONFIG + +# Which release of libtool.m4 was used? +macro_version=$macro_version +macro_revision=$macro_revision + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# What type of objects to build. +pic_mode=$pic_mode + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# The host system. +host_alias=$host_alias +host=$host +host_os=$host_os + +# The build system. +build_alias=$build_alias +build=$build +build_os=$build_os + +# A sed program that does not truncate output. +SED=$lt_SED + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="\$SED -e 1s/^X//" + +# A grep program that handles long lines. +GREP=$lt_GREP + +# An ERE matcher. +EGREP=$lt_EGREP + +# A literal string matcher. +FGREP=$lt_FGREP + +# A BSD- or MS-compatible name lister. +NM=$lt_NM + +# Whether we need soft or hard links. +LN_S=$lt_LN_S + +# What is the maximum length of a command? +max_cmd_len=$max_cmd_len + +# Object file suffix (normally "o"). +objext=$ac_objext + +# Executable file suffix (normally ""). +exeext=$exeext + +# whether the shell understands "unset". +lt_unset=$lt_unset + +# turn spaces into newlines. +SP2NL=$lt_lt_SP2NL + +# turn newlines into spaces. +NL2SP=$lt_lt_NL2SP + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# An object symbol dumper. +OBJDUMP=$lt_OBJDUMP + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method == "file_magic". +file_magic_cmd=$lt_file_magic_cmd + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# A symbol stripping program. +STRIP=$lt_STRIP + +# Commands used to install an old-style archive. +RANLIB=$lt_RANLIB +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# A C compiler. +LTCC=$lt_CC + +# LTCC compiler flags. +LTCFLAGS=$lt_CFLAGS + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration. +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair. +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# Transform the output of nm in a C name address pair when lib prefix is needed. +global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# An echo program that does not interpret backslashes. +ECHO=$lt_ECHO + +# Used to examine libraries when file_magic_cmd begins with "file". +MAGIC_CMD=$MAGIC_CMD + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# Tool to manipulate archived DWARF debug symbol files on Mac OS X. +DSYMUTIL=$lt_DSYMUTIL + +# Tool to change global to local symbols on Mac OS X. +NMEDIT=$lt_NMEDIT + +# Tool to manipulate fat objects and archives on Mac OS X. +LIPO=$lt_LIPO + +# ldd/readelf like tool for Mach-O binaries on Mac OS X. +OTOOL=$lt_OTOOL + +# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. +OTOOL64=$lt_OTOOL64 + +# Old archive suffix (normally "a"). +libext=$libext + +# Shared library suffix (normally ".so"). +shrext_cmds=$lt_shrext_cmds + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at link time. +variables_saved_for_relink=$lt_variables_saved_for_relink + +# Do we need the "lib" prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Library versioning type. +version_type=$version_type + +# Shared library runtime path variable. +runpath_var=$runpath_var + +# Shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Command to use after installation of a shared archive. +postinstall_cmds=$lt_postinstall_cmds + +# Command to use after uninstallation of a shared archive. +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# As "finish_cmds", except a single script fragment to be evaled but +# not shown. +finish_eval=$lt_finish_eval + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Compile-time system search path for libraries. +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries. +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + + +# The linker used to build libraries. +LD=$lt_LD + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds + +# A language specific compiler. +CC=$lt_compiler + +# Is the compiler the GNU compiler? +with_gcc=$GCC + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds +archive_expsym_cmds=$lt_archive_expsym_cmds + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds +module_expsym_cmds=$lt_module_expsym_cmds + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec + +# If ld is used when linking, flag to hardcode \$libdir into a binary +# during linking. This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \${shlibpath_var} if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path=$lt_fix_srcfile_path + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action + +# The directories searched by this compiler when creating a shared library. +compiler_lib_search_dirs=$lt_compiler_lib_search_dirs + +# Dependencies to place before and after the objects being linked to +# create a shared library. +predep_objects=$lt_predep_objects +postdep_objects=$lt_postdep_objects +predeps=$lt_predeps +postdeps=$lt_postdeps + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path + +# ### END LIBTOOL CONFIG + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + +ltmain="$ac_aux_dir/ltmain.sh" + + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + case $xsi_shell in + yes) + cat << \_LT_EOF >> "$cfgfile" + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac +} + +# func_basename file +func_basename () +{ + func_basename_result="${1##*/}" +} + +# func_dirname_and_basename file append nondir_replacement +# perform func_basename and func_dirname in a single function +# call: +# dirname: Compute the dirname of FILE. If nonempty, +# add APPEND to the result, otherwise set result +# to NONDIR_REPLACEMENT. +# value returned in "$func_dirname_result" +# basename: Compute filename of FILE. +# value retuned in "$func_basename_result" +# Implementation must be kept synchronized with func_dirname +# and func_basename. For efficiency, we do not delegate to +# those functions but instead duplicate the functionality here. +func_dirname_and_basename () +{ + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac + func_basename_result="${1##*/}" +} + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +func_stripname () +{ + # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are + # positional parameters, so assign one to ordinary parameter first. + func_stripname_result=${3} + func_stripname_result=${func_stripname_result#"${1}"} + func_stripname_result=${func_stripname_result%"${2}"} +} + +# func_opt_split +func_opt_split () +{ + func_opt_split_opt=${1%%=*} + func_opt_split_arg=${1#*=} +} + +# func_lo2o object +func_lo2o () +{ + case ${1} in + *.lo) func_lo2o_result=${1%.lo}.${objext} ;; + *) func_lo2o_result=${1} ;; + esac +} + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=${1%.*}.lo +} + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=$(( $* )) +} + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=${#1} +} + +_LT_EOF + ;; + *) # Bourne compatible functions. + cat << \_LT_EOF >> "$cfgfile" + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + # Extract subdirectory from the argument. + func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` + if test "X$func_dirname_result" = "X${1}"; then + func_dirname_result="${3}" + else + func_dirname_result="$func_dirname_result${2}" + fi +} + +# func_basename file +func_basename () +{ + func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` +} + + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +# func_strip_suffix prefix name +func_stripname () +{ + case ${2} in + .*) func_stripname_result=`$ECHO "X${3}" \ + | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;; + *) func_stripname_result=`$ECHO "X${3}" \ + | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;; + esac +} + +# sed scripts: +my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q' +my_sed_long_arg='1s/^-[^=]*=//' + +# func_opt_split +func_opt_split () +{ + func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"` + func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"` +} + +# func_lo2o object +func_lo2o () +{ + func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"` +} + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[^.]*$/.lo/'` +} + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=`expr "$@"` +} + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` +} + +_LT_EOF +esac + +case $lt_shell_append in + yes) + cat << \_LT_EOF >> "$cfgfile" + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "$1+=\$2" +} +_LT_EOF + ;; + *) + cat << \_LT_EOF >> "$cfgfile" + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "$1=\$$1\$2" +} + +_LT_EOF + ;; + esac + + + sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" + + + cat <<_LT_EOF >> "$ofile" + +# ### BEGIN LIBTOOL TAG CONFIG: CXX + +# The linker used to build libraries. +LD=$lt_LD_CXX + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds_CXX + +# A language specific compiler. +CC=$lt_compiler_CXX + +# Is the compiler the GNU compiler? +with_gcc=$GCC_CXX + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl_CXX + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic_CXX + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static_CXX + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc_CXX + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object_CXX + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds_CXX +archive_expsym_cmds=$lt_archive_expsym_cmds_CXX + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds_CXX +module_expsym_cmds=$lt_module_expsym_cmds_CXX + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld_CXX + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag_CXX + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag_CXX + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX + +# If ld is used when linking, flag to hardcode \$libdir into a binary +# during linking. This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct_CXX + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \${shlibpath_var} if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute_CXX + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L_CXX + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic_CXX + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath_CXX + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs_CXX + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path=$lt_fix_srcfile_path_CXX + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols_CXX + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds_CXX + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms_CXX + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms_CXX + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds_CXX + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec_CXX + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action_CXX + +# The directories searched by this compiler when creating a shared library. +compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX + +# Dependencies to place before and after the objects being linked to +# create a shared library. +predep_objects=$lt_predep_objects_CXX +postdep_objects=$lt_postdep_objects_CXX +predeps=$lt_predeps_CXX +postdeps=$lt_postdeps_CXX + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path_CXX + +# ### END LIBTOOL TAG CONFIG: CXX +_LT_EOF + + ;; + + esac +done # for ac_tag + + +as_fn_exit 0 +_ACEOF +ac_clean_files=$ac_clean_files_save + +test $ac_write_fail = 0 || + as_fn_error "write failure creating $CONFIG_STATUS" "$LINENO" 5 + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || as_fn_exit $? +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} +fi + + +######## Show a configuration report ######## +if test -n "$JADE"; then + jade_report="$JADE"; +else + jade_report="not present" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: + + MusE configured + + LASH support: $LASH_FOUND + OSC support: $OSC + DSSI support: $DSSI + FluidSynth: $muse_enable_fluidlib + + jade: $jade_report + doxygen: $DOXYGEN + graphviz: $DOT + perl: $PERL + treeviews in doxygen + html output: $report_doxy_treeview + + C++ compiler: $CXX + optimizing: $report_optimise + debug: $report_debug + optimise for arch: $report_march + SSE optimizations $report_sse + python bindings: $enable_python + + installation prefix: $prefix + + Deprecated: + --------------------------------------------------- + using rtcap: $report_rtcap + setuid root install: $SUIDINSTALL + setuid root build: $SUIDBUILD + VST/win support: $VST + +" >&5 +$as_echo "$as_me: + + MusE configured + + LASH support: $LASH_FOUND + OSC support: $OSC + DSSI support: $DSSI + FluidSynth: $muse_enable_fluidlib + + jade: $jade_report + doxygen: $DOXYGEN + graphviz: $DOT + perl: $PERL + treeviews in doxygen + html output: $report_doxy_treeview + + C++ compiler: $CXX + optimizing: $report_optimise + debug: $report_debug + optimise for arch: $report_march + SSE optimizations $report_sse + python bindings: $enable_python + + installation prefix: $prefix + + Deprecated: + --------------------------------------------------- + using rtcap: $report_rtcap + setuid root install: $SUIDINSTALL + setuid root build: $SUIDBUILD + VST/win support: $VST + +" >&6;} + diff --git a/muse2/autom4te.cache/output.1 b/muse2/autom4te.cache/output.1 new file mode 100644 index 00000000..f9b346c9 --- /dev/null +++ b/muse2/autom4te.cache/output.1 @@ -0,0 +1,20639 @@ +@%:@! /bin/sh +@%:@ Guess values for system-dependent variables and create Makefiles. +@%:@ Generated by GNU Autoconf 2.65 for MusE 1.1. +@%:@ +@%:@ +@%:@ Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +@%:@ 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +@%:@ Inc. +@%:@ +@%:@ +@%:@ This configure script is free software; the Free Software Foundation +@%:@ gives unlimited permission to copy, distribute and modify it. +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in @%:@( + *posix*) : + set -o posix ;; @%:@( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in @%:@( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +case $0 in @%:@(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in @%:@( + *posix*) : + set -o posix ;; @%:@( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in @%:@( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : + # We cannot yet assume a decent shell, so we have to provide a + # neutralization value for shells without unset; and this also + # works around shells that cannot unset nonexistent variables. + BASH_ENV=/dev/null + ENV=/dev/null + (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, +$0: including any error possibly output before this +$0: message. Then install a modern shell, or manually run +$0: the script under such a shell if you do have one." + fi + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +@%:@ as_fn_unset VAR +@%:@ --------------- +@%:@ Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +@%:@ as_fn_set_status STATUS +@%:@ ----------------------- +@%:@ Set @S|@? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} @%:@ as_fn_set_status + +@%:@ as_fn_exit STATUS +@%:@ ----------------- +@%:@ Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} @%:@ as_fn_exit + +@%:@ as_fn_mkdir_p +@%:@ ------------- +@%:@ Create "@S|@as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" + + +} @%:@ as_fn_mkdir_p +@%:@ as_fn_append VAR VALUE +@%:@ ---------------------- +@%:@ Append the text in VALUE to the end of the definition contained in VAR. Take +@%:@ advantage of any shell optimizations that allow amortized linear growth over +@%:@ repeated appends, instead of the typical quadratic growth present in naive +@%:@ implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +@%:@ as_fn_arith ARG... +@%:@ ------------------ +@%:@ Perform arithmetic evaluation on the ARGs, and store the result in the +@%:@ global @S|@as_val. Take advantage of shells that can avoid forks. The arguments +@%:@ must be portable across @S|@(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +@%:@ as_fn_error ERROR [LINENO LOG_FD] +@%:@ --------------------------------- +@%:@ Output "`basename @S|@0`: error: ERROR" to stderr. If LINENO and LOG_FD are +@%:@ provided, also output the error to LOG_FD, referencing LINENO. Then exit the +@%:@ script with status @S|@?, using 1 if that was 0. +as_fn_error () +{ + as_status=$?; test $as_status -eq 0 && as_status=1 + if test "$3"; then + as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 + fi + $as_echo "$as_me: error: $1" >&2 + as_fn_exit $as_status +} @%:@ as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + + + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in @%:@((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in @%:@( + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in @%:@(( + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + + +# Check that we are running under the correct shell. +SHELL=${CONFIG_SHELL-/bin/sh} + +case X$lt_ECHO in +X*--fallback-echo) + # Remove one level of quotation (which was required for Make). + ECHO=`echo "$lt_ECHO" | sed 's,\\\\\$\\$0,'$0','` + ;; +esac + +ECHO=${lt_ECHO-echo} +if test "X$1" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift +elif test "X$1" = X--fallback-echo; then + # Avoid inline document here, it may be left over + : +elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then + # Yippee, $ECHO works! + : +else + # Restart under the correct shell. + exec $SHELL "$0" --no-reexec ${1+"$@"} +fi + +if test "X$1" = X--fallback-echo; then + # used as fallback echo + shift + cat <<_LT_EOF +$* +_LT_EOF + exit 0 +fi + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +if test -z "$lt_ECHO"; then + if test "X${echo_test_string+set}" != Xset; then + # find a string as large as possible, as long as the shell can cope with it + for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do + # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... + if { echo_test_string=`eval $cmd`; } 2>/dev/null && + { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null + then + break + fi + done + fi + + if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && + echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + : + else + # The Solaris, AIX, and Digital Unix default echo programs unquote + # backslashes. This makes it impossible to quote backslashes using + # echo "$something" | sed 's/\\/\\\\/g' + # + # So, first we look for a working echo in the user's PATH. + + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for dir in $PATH /usr/ucb; do + IFS="$lt_save_ifs" + if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && + test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + ECHO="$dir/echo" + break + fi + done + IFS="$lt_save_ifs" + + if test "X$ECHO" = Xecho; then + # We didn't find a better echo, so look for alternatives. + if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' && + echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # This shell has a builtin print -r that does the trick. + ECHO='print -r' + elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } && + test "X$CONFIG_SHELL" != X/bin/ksh; then + # If we have ksh, try running configure again with it. + ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} + export ORIGINAL_CONFIG_SHELL + CONFIG_SHELL=/bin/ksh + export CONFIG_SHELL + exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"} + else + # Try using printf. + ECHO='printf %s\n' + if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && + echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # Cool, printf works + : + elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL + export CONFIG_SHELL + SHELL="$CONFIG_SHELL" + export SHELL + ECHO="$CONFIG_SHELL $0 --fallback-echo" + elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + ECHO="$CONFIG_SHELL $0 --fallback-echo" + else + # maybe with a smaller string... + prev=: + + for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do + if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null + then + break + fi + prev="$cmd" + done + + if test "$prev" != 'sed 50q "$0"'; then + echo_test_string=`eval $prev` + export echo_test_string + exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"} + else + # Oops. We lost completely, so just stick with echo. + ECHO=echo + fi + fi + fi + fi + fi +fi + +# Copy echo and quote the copy suitably for passing to libtool from +# the Makefile, instead of quoting the original, which is used later. +lt_ECHO=$ECHO +if test "X$lt_ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then + lt_ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo" +fi + + + + +test -n "$DJDIR" || exec 7<&0 &1 + +# Name of the host. +# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIB@&t@OBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= + +# Identity of this package. +PACKAGE_NAME='MusE' +PACKAGE_TARNAME='muse' +PACKAGE_VERSION='1.1' +PACKAGE_STRING='MusE 1.1' +PACKAGE_BUGREPORT='' +PACKAGE_URL='' + +ac_unique_file="muse/app.cpp" +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif +#ifdef STDC_HEADERS +# include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include +# endif +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_INTTYPES_H +# include +#endif +#ifdef HAVE_STDINT_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#endif" + +ac_subst_vars='am__EXEEXT_FALSE +am__EXEEXT_TRUE +LTLIBOBJS +LIB@&t@OBJS +QTDIR_BIN +QT_LIBS +QTDIR_INC +MUSECXXFLAGS +HAVE_AUDIO_FALSE +HAVE_AUDIO_TRUE +DSSI_SUPPORT_FALSE +DSSI_SUPPORT_TRUE +OSC_SUPPORT_FALSE +OSC_SUPPORT_TRUE +LO_LIBS +LO_CFLAGS +VST_SUPPORT_FALSE +VST_SUPPORT_TRUE +FST_LIBS +FST_CFLAGS +PYTHON_LIB +PYTHON_INCLUDES +ENABLE_PYTHON_FALSE +ENABLE_PYTHON_TRUE +pkgpyexecdir +pyexecdir +pkgpythondir +pythondir +PYTHON_PLATFORM +PYTHON_EXEC_PREFIX +PYTHON_PREFIX +PYTHON_VERSION +PYTHON +USE_SSE_FALSE +USE_SSE_TRUE +USE_SSE +PCH_FALSE +PCH_TRUE +PCH +DOXYGEN_TREEVIEW +SUIDBUILD +SUIDINSTALL +GIVERTCAP +RTCAP_FALSE +RTCAP_TRUE +HAVE_LASH_FALSE +HAVE_LASH_TRUE +LASH_LIBS +LASH_CFLAGS +JACK_LIBS +JACK_CFLAGS +UUID_LIBS +UUID_CFLAGS +SAMPLERATE_LIBS +SAMPLERATE_CFLAGS +SNDFILE_LIBS +SNDFILE_CFLAGS +synth_fluid +synth_fluidsynth +FLUIDSYNTHDIRS +Fluidsynth_LIBS +Fluidsynth_CFLAGS +PKG_CONFIG +ENABLEFLUIDSYNTH_FALSE +ENABLEFLUIDSYNTH_TRUE +ALSA_LIBS +ALSA_CFLAGS +X_EXTRA_LIBS +X_LIBS +X_PRE_LIBS +X_CFLAGS +XMKMF +PERL +DOTPATH +HAVEDOT +DOT +DOXYGEN +DOCBOOKTARGETS +DOCBOOKSTYLE +have_docbook +NSGMLS +JADE +CXXCPP +CPP +OTOOL64 +OTOOL +LIPO +NMEDIT +DSYMUTIL +lt_ECHO +RANLIB +AR +OBJDUMP +LN_S +NM +ac_ct_DUMPBIN +DUMPBIN +LD +FGREP +EGREP +GREP +SED +am__fastdepCC_FALSE +am__fastdepCC_TRUE +CCDEPMODE +ac_ct_CC +CFLAGS +CC +host_os +host_vendor +host_cpu +host +build_os +build_vendor +build_cpu +build +LIBTOOL +am__fastdepCXX_FALSE +am__fastdepCXX_TRUE +CXXDEPMODE +AMDEPBACKSLASH +AMDEP_FALSE +AMDEP_TRUE +am__quote +am__include +DEPDIR +OBJEXT +EXEEXT +ac_ct_CXX +CPPFLAGS +LDFLAGS +CXXFLAGS +CXX +INSIDE_GNOME_COMMON_FALSE +INSIDE_GNOME_COMMON_TRUE +am__untar +am__tar +AMTAR +am__leading_dot +SET_MAKE +AWK +mkdir_p +MKDIR_P +INSTALL_STRIP_PROGRAM +STRIP +install_sh +MAKEINFO +AUTOHEADER +AUTOMAKE +AUTOCONF +ACLOCAL +VERSION +PACKAGE +CYGPATH_W +am__isrc +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' +ac_subst_files='' +ac_user_opts=' +enable_option_checking +enable_dependency_tracking +enable_shared +enable_static +with_pic +enable_fast_install +with_gnu_ld +enable_libtool_lock +with_docbook_stylesheets +with_x +with_alsa_prefix +with_alsa_inc_prefix +enable_alsatest +enable_fluidsynth +enable_lash +enable_rtcap +enable_suid_install +enable_suid_build +enable_doxy_treeview +enable_optimize +enable_debug +enable_pch +enable_arch +enable_sse +with_python +enable_vst +enable_osc +enable_dssi +' + ac_precious_vars='build_alias +host_alias +target_alias +CXX +CXXFLAGS +LDFLAGS +LIBS +CPPFLAGS +CCC +CC +CFLAGS +CPP +CXXCPP +DOXYGEN +DOT +PERL +XMKMF +PKG_CONFIG +Fluidsynth_CFLAGS +Fluidsynth_LIBS +SNDFILE_CFLAGS +SNDFILE_LIBS +SAMPLERATE_CFLAGS +SAMPLERATE_LIBS +JACK_CFLAGS +JACK_LIBS +LASH_CFLAGS +LASH_LIBS +FST_CFLAGS +FST_LIBS +LO_CFLAGS +LO_LIBS' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *) ac_optarg=yes ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; + + -without-* | --without-*) + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) as_fn_error "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information." + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error "invalid variable name: \`$ac_envvar'" ;; + esac + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + as_fn_error "missing argument to $ac_option" +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac +fi + +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir +do + eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + as_fn_error "expected an absolute directory name for --$ac_var: $ac_val" +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. + If a cross compiler is detected then cross compile mode will be used." >&2 + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + as_fn_error "working directory cannot be determined" +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + as_fn_error "pwd does not report name of working directory" + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + as_fn_error "cannot find sources ($ac_unique_file) in $srcdir" +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error "$ac_msg" + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures MusE 1.1 to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + @<:@@S|@ac_default_prefix@:>@ + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + @<:@PREFIX@:>@ + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root @<:@DATAROOTDIR/doc/muse@:>@ + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF + +Program names: + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM run sed PROGRAM on installed program names + +X features: + --x-includes=DIR X include files are in DIR + --x-libraries=DIR X library files are in DIR + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of MusE 1.1:";; + esac + cat <<\_ACEOF + +Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors + --enable-shared@<:@=PKGS@:>@ build shared libraries @<:@default=yes@:>@ + --enable-static@<:@=PKGS@:>@ build static libraries @<:@default=yes@:>@ + --enable-fast-install@<:@=PKGS@:>@ + optimize for fast installation @<:@default=yes@:>@ + --disable-libtool-lock avoid locking (might break parallel builds) + --disable-alsatest do not try to compile and run a test alsa program + --disable-fluidsynth disable fluidsynth softsynth plugin + --enable-lash enable LASH support + --enable-rtcap (deprecated) use Tommi Ilmonen's "givertcap" to give + realtime capabilities + --enable-suid-install (deprecated) install MusE setuid root (with kernel 2.6, use realtime-lsm instead) + --enable-suid-build (deprecated) build MusE setuid root(with kernel 2.6, use realtime-lsm instead) + --disable-doxy-treeview stop Doxygen from generating java-ified + treeview menus in its HTML output + --enable-optimize ask the compiler for its best optimizations (possibly only i386) + --enable-debug disable optimizations + --enable-pch enable precompiled headers (gcc 3.4 required) + --enable-arch=ARCH use -march=ARCH and -mtune=ARCH argument to CXX + choose from any supported gcc architecture such as: + 386, 486, 586, 686, pentium, pentiumpro, k6, athlon... + --enable-sse enable SSE optimizations + --enable-vst (deprecated, use dssi) build VST/win support. (disabled by default) + --enable-osc build OSC support. (disabled by default) + --enable-dssi is also recommended! + --enable-dssi build DSSI + DSSI-Vst support. (disabled by default) + --enable-osc is also recommended! + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-pic try to use only PIC/non-PIC objects @<:@default=use + both@:>@ + --with-gnu-ld assume the C compiler uses GNU ld @<:@default=no@:>@ + --with-docbook-stylesheets=DIR use DIR/html/docbook.dsl + --with-x use the X Window System + --with-alsa-prefix=PFX prefix where alsa library is installed (optional) + --with-alsa-inc-prefix=PFX prefix where include libraries are (optional) + --enable-python Build python bindings (on) + +Some influential environment variables: + CXX C++ compiler command + CXXFLAGS C++ compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if + you have headers in a nonstandard directory + CC C compiler command + CFLAGS C compiler flags + CPP C preprocessor + CXXCPP C++ preprocessor + DOXYGEN Doxygen + DOT The "dot" program from graphviz + PERL Perl + XMKMF Path to xmkmf, Makefile generator for X Window System + PKG_CONFIG path to pkg-config utility + Fluidsynth_CFLAGS + C compiler flags for Fluidsynth, overriding pkg-config + Fluidsynth_LIBS + linker flags for Fluidsynth, overriding pkg-config + SNDFILE_CFLAGS + C compiler flags for SNDFILE, overriding pkg-config + SNDFILE_LIBS + linker flags for SNDFILE, overriding pkg-config + SAMPLERATE_CFLAGS + C compiler flags for SAMPLERATE, overriding pkg-config + SAMPLERATE_LIBS + linker flags for SAMPLERATE, overriding pkg-config + JACK_CFLAGS C compiler flags for JACK, overriding pkg-config + JACK_LIBS linker flags for JACK, overriding pkg-config + LASH_CFLAGS C compiler flags for LASH, overriding pkg-config + LASH_LIBS linker flags for LASH, overriding pkg-config + FST_CFLAGS C compiler flags for FST, overriding pkg-config + FST_LIBS linker flags for FST, overriding pkg-config + LO_CFLAGS C compiler flags for LO, overriding pkg-config + LO_LIBS linker flags for LO, overriding pkg-config + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +Report bugs to the package provider. +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive + else + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } + done +fi + +test -n "$ac_init_help" && exit $ac_status +if $ac_init_version; then + cat <<\_ACEOF +MusE configure 1.1 +generated by GNU Autoconf 2.65 + +Copyright (C) 2009 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi + +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## + +@%:@ ac_fn_cxx_try_compile LINENO +@%:@ ---------------------------- +@%:@ Try to compile conftest.@S|@ac_ext, and return whether this succeeded. +ac_fn_cxx_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} @%:@ ac_fn_cxx_try_compile + +@%:@ ac_fn_c_try_compile LINENO +@%:@ -------------------------- +@%:@ Try to compile conftest.@S|@ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} @%:@ ac_fn_c_try_compile + +@%:@ ac_fn_c_try_link LINENO +@%:@ ----------------------- +@%:@ Try to link conftest.@S|@ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} @%:@ ac_fn_c_try_link + +@%:@ ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +@%:@ ------------------------------------------------------- +@%:@ Tests whether HEADER exists and can be compiled using the include files in +@%:@ INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +@%:@include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} @%:@ ac_fn_c_check_header_compile + +@%:@ ac_fn_c_try_cpp LINENO +@%:@ ---------------------- +@%:@ Try to preprocess conftest.@S|@ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} @%:@ ac_fn_c_try_cpp + +@%:@ ac_fn_c_try_run LINENO +@%:@ ---------------------- +@%:@ Try to link conftest.@S|@ac_ext, and return whether this succeeded. Assumes +@%:@ that executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} @%:@ ac_fn_c_try_run + +@%:@ ac_fn_c_check_func LINENO FUNC VAR +@%:@ ---------------------------------- +@%:@ Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_c_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case declares $2. + For example, HP-UX 11i declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main () +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} @%:@ ac_fn_c_check_func + +@%:@ ac_fn_cxx_try_cpp LINENO +@%:@ ------------------------ +@%:@ Try to preprocess conftest.@S|@ac_ext, and return whether this succeeded. +ac_fn_cxx_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } >/dev/null && { + test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} @%:@ ac_fn_cxx_try_cpp + +@%:@ ac_fn_cxx_try_link LINENO +@%:@ ------------------------- +@%:@ Try to link conftest.@S|@ac_ext, and return whether this succeeded. +ac_fn_cxx_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} @%:@ ac_fn_cxx_try_link + +@%:@ ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES +@%:@ ------------------------------------------------------- +@%:@ Tests whether HEADER exists, giving a warning if it cannot be compiled using +@%:@ the include files in INCLUDES and setting the cache variable VAR +@%:@ accordingly. +ac_fn_c_check_header_mongrel () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 +$as_echo_n "checking $2 usability... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +@%:@include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_header_compiler=yes +else + ac_header_compiler=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 +$as_echo_n "checking $2 presence... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@include <$2> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + ac_header_preproc=yes +else + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( + yes:no: ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; + no:yes:* ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=\$ac_header_compiler" +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} @%:@ ac_fn_c_check_header_mongrel +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by MusE $as_me 1.1, which was +generated by GNU Autoconf 2.65. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" + done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; + 2) + as_fn_append ac_configure_args1 " '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + as_fn_append ac_configure_args " '$ac_arg'" + ;; + esac + done +done +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + cat <<\_ASBOX +## ---------------- ## +## Cache variables. ## +## ---------------- ## +_ASBOX + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + cat <<\_ASBOX +## ----------------- ## +## Output variables. ## +## ----------------- ## +_ASBOX + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + cat <<\_ASBOX +## ------------------- ## +## File substitutions. ## +## ------------------- ## +_ASBOX + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + cat <<\_ASBOX +## ----------- ## +## confdefs.h. ## +## ----------- ## +_ASBOX + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +@%:@define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +@%:@define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +@%:@define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + +cat >>confdefs.h <<_ACEOF +@%:@define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + +cat >>confdefs.h <<_ACEOF +@%:@define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + +cat >>confdefs.h <<_ACEOF +@%:@define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + ac_site_file1=$CONFIG_SITE +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + +am__api_version='1.11' + +ac_aux_dir= +for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do + for ac_t in install-sh install.sh shtool; do + if test -f "$ac_dir/$ac_t"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/$ac_t -c" + break 2 + fi + done +done +if test -z "$ac_aux_dir"; then + as_fn_error "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if test "${ac_cv_path_install+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in @%:@(( + ./ | .// | /[cC]/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac + + done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 +$as_echo_n "checking whether build environment is sane... " >&6; } +# Just in case +sleep 1 +echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[\\\"\#\$\&\'\`$am_lf]*) + as_fn_error "unsafe absolute working directory name" "$LINENO" 5;; +esac +case $srcdir in + *[\\\"\#\$\&\'\`$am_lf\ \ ]*) + as_fn_error "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; +esac + +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + rm -f conftest.file + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + as_fn_error "ls -t appears to fail. Make sure there is not a broken +alias in your environment" "$LINENO" 5 + fi + + test "$2" = conftest.file + ) +then + # Ok. + : +else + as_fn_error "newly created file is older than distributed files! +Check your system clock" "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +test "$program_prefix" != NONE && + program_transform_name="s&^&$program_prefix&;$program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s&\$&$program_suffix&;$program_transform_name" +# Double any \ or $. +# By default was `s,x,x', remove it if useless. +ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' +program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` + +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` + +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 +$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} +fi + +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi + +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 +$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } +if test -z "$MKDIR_P"; then + if test "${ac_cv_path_mkdir+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in mkdir gmkdir; do + for ac_exec_ext in '' $ac_executable_extensions; do + { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue + case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir (GNU coreutils) '* | \ + 'mkdir (coreutils) '* | \ + 'mkdir (fileutils) '4.1*) + ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + break 3;; + esac + done + done + done +IFS=$as_save_IFS + +fi + + test -d ./--version && rmdir ./--version + if test "${ac_cv_path_mkdir+set}" = set; then + MKDIR_P="$ac_cv_path_mkdir -p" + else + # As a last resort, use the slow shell script. Don't cache a + # value for MKDIR_P within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + MKDIR_P="$ac_install_sh -d" + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 +$as_echo "$MKDIR_P" >&6; } + +mkdir_p="$MKDIR_P" +case $mkdir_p in + [\\/$]* | ?:[\\/]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_AWK+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AWK="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + cat >conftest.make <<\_ACEOF +SHELL = /bin/sh +all: + @echo '@@@%%%=$(MAKE)=@@@%%%' +_ACEOF +# GNU make sometimes prints "make[1]: Entering...", which would confuse us. +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac +rm -f conftest.make +fi +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + SET_MAKE= +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi + +rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null + +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + am__isrc=' -I$(srcdir)' + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + as_fn_error "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi + + +# Define the identity of the package. + PACKAGE='muse' + VERSION='1.1' + + +cat >>confdefs.h <<_ACEOF +@%:@define PACKAGE "$PACKAGE" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +@%:@define VERSION "$VERSION" +_ACEOF + +# Some tools Automake needs. + +ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} + + +AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} + + +AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} + + +AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} + + +MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} + +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +# Always define AMTAR for backward compatibility. + +AMTAR=${AMTAR-"${am_missing_run}tar"} + +am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' + + + + + +ac_config_headers="$ac_config_headers config.h" + +### AM_MAINTAINER_MODE + + if test x = y; then + INSIDE_GNOME_COMMON_TRUE= + INSIDE_GNOME_COMMON_FALSE='#' +else + INSIDE_GNOME_COMMON_TRUE='#' + INSIDE_GNOME_COMMON_FALSE= +fi + + + test -n "$ACLOCAL_FLAGS" && ACLOCAL="$ACLOCAL $ACLOCAL_FLAGS" + + for k in m4 ; do ACLOCAL="$ACLOCAL -I $k" ; done + + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +if test -z "$CXX"; then + if test -n "$CCC"; then + CXX=$CCC + else + if test -n "$ac_tool_prefix"; then + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CXX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CXX"; then + ac_cv_prog_CXX="$CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CXX=$ac_cv_prog_CXX +if test -n "$CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 +$as_echo "$CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CXX" && break + done +fi +if test -z "$CXX"; then + ac_ct_CXX=$CXX + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CXX"; then + ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CXX="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CXX=$ac_cv_prog_ac_ct_CXX +if test -n "$ac_ct_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 +$as_echo "$ac_ct_CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CXX" && break +done + + if test "x$ac_ct_CXX" = x; then + CXX="g++" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CXX=$ac_ct_CXX + fi +fi + + fi +fi +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C++ compiler works" >&5 +$as_echo_n "checking whether the C++ compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= + +else + ac_file='' +fi +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ as_fn_set_status 77 +as_fn_error "C++ compiler cannot create executables +See \`config.log' for more details." "$LINENO" 5; }; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler default output file name" >&5 +$as_echo_n "checking for C++ compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +ac_exeext=$ac_cv_exeext + +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." "$LINENO" 5; } +fi +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@include +int +main () +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "cannot run C++ compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." "$LINENO" 5; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if test "${ac_cv_objext+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "cannot compute suffix of object files: cannot compile +See \`config.log' for more details." "$LINENO" 5; } +fi +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 +$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } +if test "${ac_cv_cxx_compiler_gnu+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_cxx_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 +$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GXX=yes +else + GXX= +fi +ac_test_CXXFLAGS=${CXXFLAGS+set} +ac_save_CXXFLAGS=$CXXFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 +$as_echo_n "checking whether $CXX accepts -g... " >&6; } +if test "${ac_cv_prog_cxx_g+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_save_cxx_werror_flag=$ac_cxx_werror_flag + ac_cxx_werror_flag=yes + ac_cv_prog_cxx_g=no + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +else + CXXFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + +else + ac_cxx_werror_flag=$ac_save_cxx_werror_flag + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cxx_werror_flag=$ac_save_cxx_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 +$as_echo "$ac_cv_prog_cxx_g" >&6; } +if test "$ac_test_CXXFLAGS" = set; then + CXXFLAGS=$ac_save_CXXFLAGS +elif test $ac_cv_prog_cxx_g = yes; then + if test "$GXX" = yes; then + CXXFLAGS="-g -O2" + else + CXXFLAGS="-g" + fi +else + if test "$GXX" = yes; then + CXXFLAGS="-O2" + else + CXXFLAGS= + fi +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +DEPDIR="${am__leading_dot}deps" + +ac_config_commands="$ac_config_commands depfiles" + + +am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 +$as_echo_n "checking for style of include used by $am_make... " >&6; } +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 +$as_echo "$_am_result" >&6; } +rm -f confinc confmf + +@%:@ Check whether --enable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then : + enableval=$enable_dependency_tracking; +fi + +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi + if test "x$enable_dependency_tracking" != xno; then + AMDEP_TRUE= + AMDEP_FALSE='#' +else + AMDEP_TRUE='#' + AMDEP_FALSE= +fi + + + +depcc="$CXX" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CXX_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CXX_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CXX_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } +CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then + am__fastdepCXX_TRUE= + am__fastdepCXX_FALSE='#' +else + am__fastdepCXX_TRUE='#' + am__fastdepCXX_FALSE= +fi + + +case `pwd` in + *\ * | *\ *) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 +$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; +esac + + + +macro_version='2.2.6b' +macro_revision='1.3017' + + + + + + + + + + + + + +ltmain="$ac_aux_dir/ltmain.sh" + +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + as_fn_error "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if test "${ac_cv_build+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + as_fn_error "cannot guess build type; you must specify one" "$LINENO" 5 +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + as_fn_error "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) as_fn_error "invalid value of canonical build" "$LINENO" 5;; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if test "${ac_cv_host+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + as_fn_error "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) as_fn_error "invalid value of canonical host" "$LINENO" 5;; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $@%:@ != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "no acceptable C compiler found in \$PATH +See \`config.log' for more details." "$LINENO" 5; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if test "${ac_cv_c_compiler_gnu+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if test "${ac_cv_prog_cc_g+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if test "${ac_cv_prog_cc_c89+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +depcc="$CC" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if test "${ac_cv_path_SED+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_SED_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + as_fn_error "no acceptable sed could be found in \$PATH" "$LINENO" 5 + fi +else + ac_cv_path_SED=$SED +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed + +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if test "${ac_cv_path_GREP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if test "${ac_cv_path_EGREP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 +$as_echo_n "checking for fgrep... " >&6; } +if test "${ac_cv_path_FGREP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 + then ac_cv_path_FGREP="$GREP -F" + else + if test -z "$FGREP"; then + ac_path_FGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in fgrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue +# Check for GNU ac_path_FGREP and select it if it is found. + # Check for GNU $ac_path_FGREP +case `"$ac_path_FGREP" --version 2>&1` in +*GNU*) + ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'FGREP' >> "conftest.nl" + "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_FGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_FGREP="$ac_path_FGREP" + ac_path_FGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_FGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_FGREP"; then + as_fn_error "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_FGREP=$FGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 +$as_echo "$ac_cv_path_FGREP" >&6; } + FGREP="$ac_cv_path_FGREP" + + +test -z "$GREP" && GREP=grep + + + + + + + + + + + + + + + + + + + +@%:@ Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if test "${lt_cv_path_LD+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && as_fn_error "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if test "${lt_cv_prog_gnu_ld+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 +$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } +if test "${lt_cv_path_NM+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_nm_to_check="${ac_tool_prefix}nm" + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/$lt_tmp_nm" + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS="$lt_save_ifs" + done + : ${lt_cv_path_NM=no} +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 +$as_echo "$lt_cv_path_NM" >&6; } +if test "$lt_cv_path_NM" != "no"; then + NM="$lt_cv_path_NM" +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$ac_tool_prefix"; then + for ac_prog in "dumpbin -symbols" "link -dump -symbols" + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_DUMPBIN+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DUMPBIN"; then + ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DUMPBIN=$ac_cv_prog_DUMPBIN +if test -n "$DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 +$as_echo "$DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$DUMPBIN" && break + done +fi +if test -z "$DUMPBIN"; then + ac_ct_DUMPBIN=$DUMPBIN + for ac_prog in "dumpbin -symbols" "link -dump -symbols" +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DUMPBIN"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN +if test -n "$ac_ct_DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 +$as_echo "$ac_ct_DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_DUMPBIN" && break +done + + if test "x$ac_ct_DUMPBIN" = x; then + DUMPBIN=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DUMPBIN=$ac_ct_DUMPBIN + fi +fi + + + if test "$DUMPBIN" != ":"; then + NM="$DUMPBIN" + fi +fi +test -z "$NM" && NM=nm + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 +$as_echo_n "checking the name lister ($NM) interface... " >&6; } +if test "${lt_cv_nm_interface+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:__oline__: $ac_compile\"" >&5) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&5 + (eval echo "\"\$as_me:__oline__: $NM \\\"conftest.$ac_objext\\\"\"" >&5) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&5 + (eval echo "\"\$as_me:__oline__: output\"" >&5) + cat conftest.out >&5 + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 +$as_echo "$lt_cv_nm_interface" >&6; } + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +$as_echo_n "checking whether ln -s works... " >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +$as_echo "no, using $LN_S" >&6; } +fi + +# find the maximum length of command line arguments +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 +$as_echo_n "checking the maximum length of command line arguments... " >&6; } +if test "${lt_cv_sys_max_cmd_len+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + i=0 + teststring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8 ; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test "X"`$SHELL $0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \ + = "XX$teststring$teststring"; } >/dev/null 2>&1 && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac + +fi + +if test -n $lt_cv_sys_max_cmd_len ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 +$as_echo "$lt_cv_sys_max_cmd_len" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 +$as_echo "none" >&6; } +fi +max_cmd_len=$lt_cv_sys_max_cmd_len + + + + + + +: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 +$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } +# Try some XSI features +xsi_shell=no +( _lt_dummy="a/b/c" + test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \ + = c,a/b,, \ + && eval 'test $(( 1 + 1 )) -eq 2 \ + && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ + && xsi_shell=yes +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 +$as_echo "$xsi_shell" >&6; } + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 +$as_echo_n "checking whether the shell understands \"+=\"... " >&6; } +lt_shell_append=no +( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ + >/dev/null 2>&1 \ + && lt_shell_append=yes +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 +$as_echo "$lt_shell_append" >&6; } + + +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi + + + + + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 +$as_echo_n "checking for $LD option to reload object files... " >&6; } +if test "${lt_cv_ld_reload_flag+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_reload_flag='-r' +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 +$as_echo "$lt_cv_ld_reload_flag" >&6; } +reload_flag=$lt_cv_ld_reload_flag +case $reload_flag in +"" | " "*) ;; +*) reload_flag=" $reload_flag" ;; +esac +reload_cmds='$LD$reload_flag -o $output$reload_objs' +case $host_os in + darwin*) + if test "$GCC" = yes; then + reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' + else + reload_cmds='$LD$reload_flag -o $output$reload_objs' + fi + ;; +esac + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. +set dummy ${ac_tool_prefix}objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OBJDUMP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + # Extract the first word of "objdump", so it can be a program name with args. +set dummy objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OBJDUMP="objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +$as_echo "$ac_ct_OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OBJDUMP" = x; then + OBJDUMP="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJDUMP=$ac_ct_OBJDUMP + fi +else + OBJDUMP="$ac_cv_prog_OBJDUMP" +fi + +test -z "$OBJDUMP" && OBJDUMP=objdump + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 +$as_echo_n "checking how to recognize dependent libraries... " >&6; } +if test "${lt_cv_deplibs_check_method+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# `unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# which responds to the $file_magic_cmd with a given extended regex. +# If you have `file' or equivalent on your system and you're not sure +# whether `pass_all' will *always* work, you probably want this one. + +case $host_os in +aix[4-9]*) + lt_cv_deplibs_check_method=pass_all + ;; + +beos*) + lt_cv_deplibs_check_method=pass_all + ;; + +bsdi[45]*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' + lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; + +cygwin*) + # func_win32_libid is a shell function defined in ltmain.sh + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + ;; + +mingw* | pw32*) + # Base MSYS/MinGW do not provide the 'file' command needed by + # func_win32_libid shell function, so use a weaker test based on 'objdump', + # unless we find 'file', for example because we are cross-compiling. + if ( file / ) >/dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]' + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[3-9]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 +$as_echo "$lt_cv_deplibs_check_method" >&6; } +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + + + + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_AR+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_AR+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + +test -z "$AR" && AR=ar +test -z "$AR_FLAGS" && AR_FLAGS=cru + + + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +test -z "$STRIP" && STRIP=: + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_RANLIB+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi + +test -z "$RANLIB" && RANLIB=: + + + + + + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# Check for command to grab the raw symbol name followed by C symbol from nm. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 +$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } +if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[BCDEGRST]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([_A-Za-z][_A-Za-z0-9]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[BCDT]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[ABCDGISTW]' + ;; +hpux*) + if test "$host_cpu" = ia64; then + symcode='[ABCDEGRST]' + fi + ;; +irix* | nonstopux*) + symcode='[BCDEGRST]' + ;; +osf*) + symcode='[BCDEGQRST]' + ;; +solaris*) + symcode='[BDRT]' + ;; +sco3.2v5*) + symcode='[DT]' + ;; +sysv4.2uw2*) + symcode='[DT]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[ABDT]' + ;; +sysv4) + symcode='[DFNSTU]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[ABCDGIRSTW]' ;; +esac + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function + # and D for any global variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK '"\ +" {last_section=section; section=\$ 3};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ +" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ +" s[1]~/^[@?]/{print s[1], s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + # Now try to grab the symbols. + nlist=conftest.nm + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\""; } >&5 + (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +const struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_save_LIBS="$LIBS" + lt_save_CFLAGS="$CFLAGS" + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext}; then + pipe_works=yes + fi + LIBS="$lt_save_LIBS" + CFLAGS="$lt_save_CFLAGS" + else + echo "cannot find nm_test_func in $nlist" >&5 + fi + else + echo "cannot find nm_test_var in $nlist" >&5 + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 + fi + else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done + +fi + +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 +$as_echo "failed" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 +$as_echo "ok" >&6; } +fi + + + + + + + + + + + + + + + + + + + + + + + +@%:@ Check whether --enable-libtool-lock was given. +if test "${enable_libtool_lock+set}" = set; then : + enableval=$enable_libtool_lock; +fi + +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '#line __oline__ "configure"' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_i386" + ;; + ppc64-*linux*|powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + ppc*-*linux*|powerpc*-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 +$as_echo_n "checking whether the C compiler needs -belf... " >&6; } +if test "${lt_cv_cc_needs_belf+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_cc_needs_belf=yes +else + lt_cv_cc_needs_belf=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 +$as_echo "$lt_cv_cc_needs_belf" >&6; } + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; +sparc*-*solaris*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) LD="${LD-ld} -m elf64_sparc" ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks="$enable_libtool_lock" + + + case $host_os in + rhapsody* | darwin*) + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. +set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_DSYMUTIL+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DSYMUTIL"; then + ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DSYMUTIL=$ac_cv_prog_DSYMUTIL +if test -n "$DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 +$as_echo "$DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DSYMUTIL"; then + ac_ct_DSYMUTIL=$DSYMUTIL + # Extract the first word of "dsymutil", so it can be a program name with args. +set dummy dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DSYMUTIL"; then + ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL +if test -n "$ac_ct_DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 +$as_echo "$ac_ct_DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DSYMUTIL" = x; then + DSYMUTIL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DSYMUTIL=$ac_ct_DSYMUTIL + fi +else + DSYMUTIL="$ac_cv_prog_DSYMUTIL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. +set dummy ${ac_tool_prefix}nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_NMEDIT+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NMEDIT"; then + ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +NMEDIT=$ac_cv_prog_NMEDIT +if test -n "$NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 +$as_echo "$NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_NMEDIT"; then + ac_ct_NMEDIT=$NMEDIT + # Extract the first word of "nmedit", so it can be a program name with args. +set dummy nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_NMEDIT"; then + ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_NMEDIT="nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT +if test -n "$ac_ct_NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 +$as_echo "$ac_ct_NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_NMEDIT" = x; then + NMEDIT=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + NMEDIT=$ac_ct_NMEDIT + fi +else + NMEDIT="$ac_cv_prog_NMEDIT" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. +set dummy ${ac_tool_prefix}lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_LIPO+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LIPO"; then + ac_cv_prog_LIPO="$LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_LIPO="${ac_tool_prefix}lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LIPO=$ac_cv_prog_LIPO +if test -n "$LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 +$as_echo "$LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LIPO"; then + ac_ct_LIPO=$LIPO + # Extract the first word of "lipo", so it can be a program name with args. +set dummy lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_LIPO+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LIPO"; then + ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_LIPO="lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO +if test -n "$ac_ct_LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 +$as_echo "$ac_ct_LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LIPO" = x; then + LIPO=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LIPO=$ac_ct_LIPO + fi +else + LIPO="$ac_cv_prog_LIPO" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OTOOL+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL"; then + ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OTOOL="${ac_tool_prefix}otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL=$ac_cv_prog_OTOOL +if test -n "$OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 +$as_echo "$OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL"; then + ac_ct_OTOOL=$OTOOL + # Extract the first word of "otool", so it can be a program name with args. +set dummy otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_OTOOL+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL"; then + ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OTOOL="otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL +if test -n "$ac_ct_OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 +$as_echo "$ac_ct_OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL" = x; then + OTOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL=$ac_ct_OTOOL + fi +else + OTOOL="$ac_cv_prog_OTOOL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OTOOL64+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL64"; then + ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL64=$ac_cv_prog_OTOOL64 +if test -n "$OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 +$as_echo "$OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL64"; then + ac_ct_OTOOL64=$OTOOL64 + # Extract the first word of "otool64", so it can be a program name with args. +set dummy otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_OTOOL64+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL64"; then + ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OTOOL64="otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 +if test -n "$ac_ct_OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 +$as_echo "$ac_ct_OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL64" = x; then + OTOOL64=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL64=$ac_ct_OTOOL64 + fi +else + OTOOL64="$ac_cv_prog_OTOOL64" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 +$as_echo_n "checking for -single_module linker flag... " >&6; } +if test "${lt_cv_apple_cc_single_mod+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_apple_cc_single_mod=no + if test -z "${LT_MULTI_MODULE}"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&5 + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 +$as_echo "$lt_cv_apple_cc_single_mod" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 +$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } +if test "${lt_cv_ld_exported_symbols_list+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_ld_exported_symbols_list=yes +else + lt_cv_ld_exported_symbols_list=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 +$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } + case $host_os in + rhapsody* | darwin1.[012]) + _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[91]*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + 10.[012]*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test "$lt_cv_apple_cc_single_mod" = "yes"; then + _lt_dar_single_mod='$single_module' + fi + if test "$lt_cv_ld_exported_symbols_list" = "yes"; then + _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + if test "$DSYMUTIL" != ":"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if test "${ac_cv_prog_CPP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@ifdef __STDC__ +@%:@ include +@%:@else +@%:@ include +@%:@endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@ifdef __STDC__ +@%:@ include +@%:@else +@%:@ include +@%:@endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if test "${ac_cv_header_stdc+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "@%:@define STDC_HEADERS 1" >>confdefs.h + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then : + cat >>confdefs.h <<_ACEOF +@%:@define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +for ac_header in dlfcn.h +do : + ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default +" +if test "x$ac_cv_header_dlfcn_h" = x""yes; then : + cat >>confdefs.h <<_ACEOF +@%:@define HAVE_DLFCN_H 1 +_ACEOF + +fi + +done + + + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +if test -z "$CXX"; then + if test -n "$CCC"; then + CXX=$CCC + else + if test -n "$ac_tool_prefix"; then + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CXX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CXX"; then + ac_cv_prog_CXX="$CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CXX=$ac_cv_prog_CXX +if test -n "$CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 +$as_echo "$CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CXX" && break + done +fi +if test -z "$CXX"; then + ac_ct_CXX=$CXX + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CXX"; then + ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CXX="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CXX=$ac_cv_prog_ac_ct_CXX +if test -n "$ac_ct_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 +$as_echo "$ac_ct_CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CXX" && break +done + + if test "x$ac_ct_CXX" = x; then + CXX="g++" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CXX=$ac_ct_CXX + fi +fi + + fi +fi +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 +$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } +if test "${ac_cv_cxx_compiler_gnu+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_cxx_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 +$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GXX=yes +else + GXX= +fi +ac_test_CXXFLAGS=${CXXFLAGS+set} +ac_save_CXXFLAGS=$CXXFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 +$as_echo_n "checking whether $CXX accepts -g... " >&6; } +if test "${ac_cv_prog_cxx_g+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_save_cxx_werror_flag=$ac_cxx_werror_flag + ac_cxx_werror_flag=yes + ac_cv_prog_cxx_g=no + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +else + CXXFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + +else + ac_cxx_werror_flag=$ac_save_cxx_werror_flag + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cxx_werror_flag=$ac_save_cxx_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 +$as_echo "$ac_cv_prog_cxx_g" >&6; } +if test "$ac_test_CXXFLAGS" = set; then + CXXFLAGS=$ac_save_CXXFLAGS +elif test $ac_cv_prog_cxx_g = yes; then + if test "$GXX" = yes; then + CXXFLAGS="-g -O2" + else + CXXFLAGS="-g" + fi +else + if test "$GXX" = yes; then + CXXFLAGS="-O2" + else + CXXFLAGS= + fi +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +depcc="$CXX" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CXX_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CXX_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CXX_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } +CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then + am__fastdepCXX_TRUE= + am__fastdepCXX_FALSE='#' +else + am__fastdepCXX_TRUE='#' + am__fastdepCXX_FALSE= +fi + + +if test -n "$CXX" && ( test "X$CXX" != "Xno" && + ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || + (test "X$CXX" != "Xg++"))) ; then + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 +$as_echo_n "checking how to run the C++ preprocessor... " >&6; } +if test -z "$CXXCPP"; then + if test "${ac_cv_prog_CXXCPP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CXXCPP needs to be expanded + for CXXCPP in "$CXX -E" "/lib/cpp" + do + ac_preproc_ok=false +for ac_cxx_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@ifdef __STDC__ +@%:@ include +@%:@else +@%:@ include +@%:@endif + Syntax error +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@include +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CXXCPP=$CXXCPP + +fi + CXXCPP=$ac_cv_prog_CXXCPP +else + ac_cv_prog_CXXCPP=$CXXCPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 +$as_echo "$CXXCPP" >&6; } +ac_preproc_ok=false +for ac_cxx_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@ifdef __STDC__ +@%:@ include +@%:@else +@%:@ include +@%:@endif + Syntax error +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@include +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +_lt_caught_CXX_error=yes; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +else + _lt_caught_CXX_error=yes +fi + + + + + +# Set options + + + + enable_dlopen=no + + + enable_win32_dll=no + + + @%:@ Check whether --enable-shared was given. +if test "${enable_shared+set}" = set; then : + enableval=$enable_shared; p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_shared=yes +fi + + + + + + + + + + @%:@ Check whether --enable-static was given. +if test "${enable_static+set}" = set; then : + enableval=$enable_static; p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_static=yes +fi + + + + + + + + + + +@%:@ Check whether --with-pic was given. +if test "${with_pic+set}" = set; then : + withval=$with_pic; pic_mode="$withval" +else + pic_mode=default +fi + + +test -z "$pic_mode" && pic_mode=default + + + + + + + + @%:@ Check whether --enable-fast-install was given. +if test "${enable_fast_install+set}" = set; then : + enableval=$enable_fast_install; p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_fast_install=yes +fi + + + + + + + + + + + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ltmain" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' + + + + + + + + + + + + + + + + + + + + + + + + + +test -z "$LN_S" && LN_S="ln -s" + + + + + + + + + + + + + + +if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 +$as_echo_n "checking for objdir... " >&6; } +if test "${lt_cv_objdir+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 +$as_echo "$lt_cv_objdir" >&6; } +objdir=$lt_cv_objdir + + + + + +cat >>confdefs.h <<_ACEOF +@%:@define LT_OBJDIR "$lt_cv_objdir/" +_ACEOF + + + + + + + + + + + + + + + + + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='s/\(["`$\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld="$lt_cv_prog_gnu_ld" + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` + + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 +$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } +if test "${lt_cv_path_MAGIC_CMD+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/${ac_tool_prefix}file; then + lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + + +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 +$as_echo_n "checking for file... " >&6; } +if test "${lt_cv_path_MAGIC_CMD+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/file; then + lt_cv_path_MAGIC_CMD="$ac_dir/file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + else + MAGIC_CMD=: + fi +fi + + fi + ;; +esac + +# Use C for the default configuration in the libtool script + +lt_save_CC="$CC" +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +objext=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* + +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* + + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + +lt_prog_compiler_no_builtin_flag= + +if test "$GCC" = yes; then + lt_prog_compiler_no_builtin_flag=' -fno-builtin' + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } +if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_rtti_exceptions=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="-fno-rtti -fno-exceptions" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:__oline__: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_rtti_exceptions=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } + +if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then + lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" +else + : +fi + +fi + + + + + + + lt_prog_compiler_wl= +lt_prog_compiler_pic= +lt_prog_compiler_static= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } + + if test "$GCC" = yes; then + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_static='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic='-fno-common' + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + ;; + + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic=-Kconform_pic + fi + ;; + + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + else + lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static='-non_shared' + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + # old Intel for x86_64 which still supported -KPIC. + ecc*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='--shared' + lt_prog_compiler_static='--static' + ;; + pgcc* | pgf77* | pgf90* | pgf95*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + ccc*) + lt_prog_compiler_wl='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + xl*) + # IBM XL C 8.0/Fortran 10.1 on PPC + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-qpic' + lt_prog_compiler_static='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C 5.9 + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Wl,' + ;; + *Sun\ F*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='' + ;; + esac + ;; + esac + ;; + + newsos6) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + + rdos*) + lt_prog_compiler_static='-non_shared' + ;; + + solaris*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + case $cc_basename in + f77* | f90* | f95*) + lt_prog_compiler_wl='-Qoption ld ';; + *) + lt_prog_compiler_wl='-Wl,';; + esac + ;; + + sunos4*) + lt_prog_compiler_wl='-Qoption ld ' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + lt_prog_compiler_pic='-Kconform_pic' + lt_prog_compiler_static='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + unicos*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_can_build_shared=no + ;; + + uts4*) + lt_prog_compiler_pic='-pic' + lt_prog_compiler_static='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared=no + ;; + esac + fi + +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic= + ;; + *) + lt_prog_compiler_pic="$lt_prog_compiler_pic@&t@ -DPIC" + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5 +$as_echo "$lt_prog_compiler_pic" >&6; } + + + + + + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } +if test "${lt_cv_prog_compiler_pic_works+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_works=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic@&t@ -DPIC" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:__oline__: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 +$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } + +if test x"$lt_cv_prog_compiler_pic_works" = xyes; then + case $lt_prog_compiler_pic in + "" | " "*) ;; + *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; + esac +else + lt_prog_compiler_pic= + lt_prog_compiler_can_build_shared=no +fi + +fi + + + + + + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if test "${lt_cv_prog_compiler_static_works+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_static_works=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works=yes + fi + else + lt_cv_prog_compiler_static_works=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 +$as_echo "$lt_cv_prog_compiler_static_works" >&6; } + +if test x"$lt_cv_prog_compiler_static_works" = xyes; then + : +else + lt_prog_compiler_static= +fi + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test "${lt_cv_prog_compiler_c_o+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:__oline__: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test "${lt_cv_prog_compiler_c_o+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:__oline__: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } + if test "$hard_links" = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + + runpath_var= + allow_undefined_flag= + always_export_symbols=no + archive_cmds= + archive_expsym_cmds= + compiler_needs_object=no + enable_shared_with_static_runtimes=no + export_dynamic_flag_spec= + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + hardcode_automatic=no + hardcode_direct=no + hardcode_direct_absolute=no + hardcode_libdir_flag_spec= + hardcode_libdir_flag_spec_ld= + hardcode_libdir_separator= + hardcode_minus_L=no + hardcode_shlibpath_var=unsupported + inherit_rpath=no + link_all_deplibs=unknown + module_cmds= + module_expsym_cmds= + old_archive_from_new_cmds= + old_archive_from_expsyms_cmds= + thread_safe_flag_spec= + whole_archive_flag_spec= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; + linux* | k*bsd*-gnu) + link_all_deplibs=no + ;; + esac + + ld_shlibs=yes + if test "$with_gnu_ld" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + export_dynamic_flag_spec='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec= + fi + supports_anon_versioning=no + case `$LD -v 2>&1` in + *GNU\ gold*) supports_anon_versioning=yes ;; + *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[3-9]*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.9.1, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to modify your PATH +*** so that a non-GNU linker is found, and then restart. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + allow_undefined_flag=unsupported + always_export_symbols=no + enable_shared_with_static_runtimes=yes + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs=no + fi + ;; + + interix[3-9]*) + hardcode_direct=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + tmp_diet=no + if test "$host_os" = linux-dietlibc; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test "$tmp_diet" = no + then + tmp_addflag= + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + whole_archive_flag_spec= + tmp_sharedflag='--shared' ;; + xl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + compiler_needs_object=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + xlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' + hardcode_libdir_flag_spec= + hardcode_libdir_flag_spec_ld='-rpath $libdir' + archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + ld_shlibs=no + fi + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + ;; + + sunos4*) + archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + + if test "$ld_shlibs" = no; then + runpath_var= + hardcode_libdir_flag_spec= + export_dynamic_flag_spec= + whole_archive_flag_spec= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag=unsupported + always_export_symbols=yes + archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + + aix[4-9]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds='' + hardcode_direct=yes + hardcode_direct_absolute=yes + hardcode_libdir_separator=':' + link_all_deplibs=yes + file_list_spec='${wl}-f,' + + if test "$GCC" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + link_all_deplibs=no + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + export_dynamic_flag_spec='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag="-z nodefs" + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag=' ${wl}-bernotok' + allow_undefined_flag=' ${wl}-berok' + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec='$convenience' + archive_cmds_need_lc=yes + # This is similar to how AIX traditionally builds its shared libraries. + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + bsdi[45]*) + export_dynamic_flag_spec=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_from_new_cmds='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' + fix_srcfile_path='`cygpath -w "$srcfile"`' + enable_shared_with_static_runtimes=yes + ;; + + darwin* | rhapsody*) + + + archive_cmds_need_lc=no + hardcode_direct=no + hardcode_automatic=yes + hardcode_shlibpath_var=unsupported + whole_archive_flag_spec='' + link_all_deplibs=yes + allow_undefined_flag="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=echo + archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + + else + ld_shlibs=no + fi + + ;; + + dgux*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + freebsd1*) + ld_shlibs=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + hpux9*) + if test "$GCC" = yes; then + archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + export_dynamic_flag_spec='${wl}-E' + ;; + + hpux10*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_flag_spec_ld='+b $libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='${wl}-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + fi + ;; + + hpux11*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct=no + hardcode_shlibpath_var=no + ;; + *) + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int foo(void) {} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' + +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$save_LDFLAGS" + else + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + inherit_rpath=yes + link_all_deplibs=yes + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + newsos6) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_shlibpath_var=no + ;; + + *nto* | *qnx*) + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + hardcode_direct=yes + hardcode_shlibpath_var=no + hardcode_direct_absolute=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + else + case $host_os in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-R$libdir' + ;; + *) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + esac + fi + else + ld_shlibs=no + fi + ;; + + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec='-rpath $libdir' + fi + archive_cmds_need_lc='no' + hardcode_libdir_separator=: + ;; + + solaris*) + no_undefined_flag=' -z defs' + if test "$GCC" = yes; then + wlarc='${wl}' + archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='${wl}' + archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_shlibpath_var=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. GCC discards it without `$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test "$GCC" = yes; then + whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + else + whole_archive_flag_spec='-z allextract$convenience -z defaultextract' + fi + ;; + esac + link_all_deplibs=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds='$CC -r -o $output$reload_objs' + hardcode_direct=no + ;; + motorola) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var=no + ;; + + sysv4.3*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + export_dynamic_flag_spec='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag='${wl}-z,text' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag='${wl}-z,text' + allow_undefined_flag='${wl}-z,nodefs' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='${wl}-R,$libdir' + hardcode_libdir_separator=':' + link_all_deplibs=yes + export_dynamic_flag_spec='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + *) + ld_shlibs=no + ;; + esac + + if test x$host_vendor = xsni; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + export_dynamic_flag_spec='${wl}-Blargedynsym' + ;; + esac + fi + fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 +$as_echo "$ld_shlibs" >&6; } +test "$ld_shlibs" = no && can_build_shared=no + +with_gnu_ld=$with_gnu_ld + + + + + + + + + + + + + + + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl + pic_flag=$lt_prog_compiler_pic + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag + allow_undefined_flag= + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 + (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + then + archive_cmds_need_lc=no + else + archive_cmds_need_lc=yes + fi + allow_undefined_flag=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc" >&5 +$as_echo "$archive_cmds_need_lc" >&6; } + ;; + esac + fi + ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } + +if test "$GCC" = yes; then + case $host_os in + darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; + *) lt_awk_arg="/^libraries:/" ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'` + else + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary. + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path/$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" + else + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk ' +BEGIN {RS=" "; FS="/|\n";} { + lt_foo=""; + lt_count=0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo="/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[lt_foo]++; } + if (lt_freq[lt_foo] == 1) { print lt_foo; } +}'` + sys_lib_search_path_spec=`$ECHO $lt_search_path_spec` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[4-9]*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[123]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +interix[3-9]*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # Some binutils ld are patched to set DT_RUNPATH + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : + shlibpath_overrides_runpath=yes +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } +hardcode_action= +if test -n "$hardcode_libdir_flag_spec" || + test -n "$runpath_var" || + test "X$hardcode_automatic" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$hardcode_direct" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && + test "$hardcode_minus_L" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action=unsupported +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 +$as_echo "$hardcode_action" >&6; } + +if test "$hardcode_action" = relink || + test "$inherit_rpath" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if test "${ac_cv_lib_dl_dlopen+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + +fi + + ;; + + *) + ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" +if test "x$ac_cv_func_shl_load" = x""yes; then : + lt_cv_dlopen="shl_load" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 +$as_echo_n "checking for shl_load in -ldld... " >&6; } +if test "${ac_cv_lib_dld_shl_load+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shl_load (); +int +main () +{ +return shl_load (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_shl_load=yes +else + ac_cv_lib_dld_shl_load=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 +$as_echo "$ac_cv_lib_dld_shl_load" >&6; } +if test "x$ac_cv_lib_dld_shl_load" = x""yes; then : + lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" +else + ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" +if test "x$ac_cv_func_dlopen" = x""yes; then : + lt_cv_dlopen="dlopen" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if test "${ac_cv_lib_dl_dlopen+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 +$as_echo_n "checking for dlopen in -lsvld... " >&6; } +if test "${ac_cv_lib_svld_dlopen+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsvld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_svld_dlopen=yes +else + ac_cv_lib_svld_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 +$as_echo "$ac_cv_lib_svld_dlopen" >&6; } +if test "x$ac_cv_lib_svld_dlopen" = x""yes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 +$as_echo_n "checking for dld_link in -ldld... " >&6; } +if test "${ac_cv_lib_dld_dld_link+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dld_link (); +int +main () +{ +return dld_link (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_dld_link=yes +else + ac_cv_lib_dld_dld_link=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 +$as_echo "$ac_cv_lib_dld_dld_link" >&6; } +if test "x$ac_cv_lib_dld_dld_link" = x""yes; then : + lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" +fi + + +fi + + +fi + + +fi + + +fi + + +fi + + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 +$as_echo_n "checking whether a program can dlopen itself... " >&6; } +if test "${lt_cv_dlopen_self+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line __oline__ "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 +$as_echo "$lt_cv_dlopen_self" >&6; } + + if test "x$lt_cv_dlopen_self" = xyes; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 +$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } +if test "${lt_cv_dlopen_self_static+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self_static=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line __oline__ "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self_static=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 +$as_echo "$lt_cv_dlopen_self_static" >&6; } + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi + + + + + + + + + + + + + + + + + +striplib= +old_striplib= +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 +$as_echo_n "checking whether stripping libraries is possible... " >&6; } +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + fi + ;; + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + ;; + esac +fi + + + + + + + + + + + + + # Report which library types will actually be built + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 +$as_echo_n "checking if libtool supports shared libraries... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 +$as_echo "$can_build_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 +$as_echo_n "checking whether to build shared libraries... " >&6; } + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[4-9]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 +$as_echo "$enable_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 +$as_echo_n "checking whether to build static libraries... " >&6; } + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 +$as_echo "$enable_static" >&6; } + + + + +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC="$lt_save_CC" + + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +archive_cmds_need_lc_CXX=no +allow_undefined_flag_CXX= +always_export_symbols_CXX=no +archive_expsym_cmds_CXX= +compiler_needs_object_CXX=no +export_dynamic_flag_spec_CXX= +hardcode_direct_CXX=no +hardcode_direct_absolute_CXX=no +hardcode_libdir_flag_spec_CXX= +hardcode_libdir_flag_spec_ld_CXX= +hardcode_libdir_separator_CXX= +hardcode_minus_L_CXX=no +hardcode_shlibpath_var_CXX=unsupported +hardcode_automatic_CXX=no +inherit_rpath_CXX=no +module_cmds_CXX= +module_expsym_cmds_CXX= +link_all_deplibs_CXX=unknown +old_archive_cmds_CXX=$old_archive_cmds +no_undefined_flag_CXX= +whole_archive_flag_spec_CXX= +enable_shared_with_static_runtimes_CXX=no + +# Source file extension for C++ test sources. +ac_ext=cpp + +# Object file extension for compiled C++ test sources. +objext=o +objext_CXX=$objext + +# No sense in running all these tests if we already determined that +# the CXX compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_caught_CXX_error" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="int some_variable = 0;" + + # Code to be used in simple link tests + lt_simple_link_test_code='int main(int, char *[]) { return(0); }' + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + + # save warnings/boilerplate of simple test code + ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* + + ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* + + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_LD=$LD + lt_save_GCC=$GCC + GCC=$GXX + lt_save_with_gnu_ld=$with_gnu_ld + lt_save_path_LD=$lt_cv_path_LD + if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then + lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx + else + $as_unset lt_cv_prog_gnu_ld + fi + if test -n "${lt_cv_path_LDCXX+set}"; then + lt_cv_path_LD=$lt_cv_path_LDCXX + else + $as_unset lt_cv_path_LD + fi + test -z "${LDCXX+set}" || LD=$LDCXX + CC=${CXX-"c++"} + compiler=$CC + compiler_CXX=$CC + for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` + + + if test -n "$compiler"; then + # We don't want -fno-exception when compiling C++ code, so set the + # no_builtin_flag separately + if test "$GXX" = yes; then + lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' + else + lt_prog_compiler_no_builtin_flag_CXX= + fi + + if test "$GXX" = yes; then + # Set up default GNU C++ configuration + + + +@%:@ Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if test "${lt_cv_path_LD+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && as_fn_error "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if test "${lt_cv_prog_gnu_ld+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + + + + + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test "$with_gnu_ld" = yes; then + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + + # If archive_cmds runs LD, not CC, wlarc should be empty + # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to + # investigate it a little bit more. (MM) + wlarc='${wl}' + + # ancient GNU ld didn't support --whole-archive et. al. + if eval "`$CC -print-prog-name=ld` --help 2>&1" | + $GREP 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec_CXX= + fi + else + with_gnu_ld=no + wlarc= + + # A generic and very simple default shared library creation + # command for GNU C++ for the case where it uses the native + # linker, instead of GNU ld. If possible, this setting should + # overridden to take advantage of the native linker features on + # the platform it is being used on. + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + fi + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' + + else + GXX=no + with_gnu_ld=no + wlarc= + fi + + # PORTME: fill in a description of your system's C++ link characteristics + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + ld_shlibs_CXX=yes + case $host_os in + aix3*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aix[4-9]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds_CXX='' + hardcode_direct_CXX=yes + hardcode_direct_absolute_CXX=yes + hardcode_libdir_separator_CXX=':' + link_all_deplibs_CXX=yes + file_list_spec_CXX='${wl}-f,' + + if test "$GXX" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct_CXX=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L_CXX=yes + hardcode_libdir_flag_spec_CXX='-L$libdir' + hardcode_libdir_separator_CXX= + fi + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + export_dynamic_flag_spec_CXX='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to + # export. + always_export_symbols_CXX=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag_CXX='-berok' + # Determine the default libpath from the value encoded in an empty + # executable. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" + + archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag_CXX="-z nodefs" + archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag_CXX=' ${wl}-bernotok' + allow_undefined_flag_CXX=' ${wl}-berok' + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec_CXX='$convenience' + archive_cmds_need_lc_CXX=yes + # This is similar to how AIX traditionally builds its shared + # libraries. + archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag_CXX=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs_CXX=no + fi + ;; + + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec_CXX='-L$libdir' + allow_undefined_flag_CXX=unsupported + always_export_symbols_CXX=no + enable_shared_with_static_runtimes_CXX=yes + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs_CXX=no + fi + ;; + darwin* | rhapsody*) + + + archive_cmds_need_lc_CXX=no + hardcode_direct_CXX=no + hardcode_automatic_CXX=yes + hardcode_shlibpath_var_CXX=unsupported + whole_archive_flag_spec_CXX='' + link_all_deplibs_CXX=yes + allow_undefined_flag_CXX="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=echo + archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + if test "$lt_cv_apple_cc_single_mod" != "yes"; then + archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" + archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" + fi + + else + ld_shlibs_CXX=no + fi + + ;; + + dgux*) + case $cc_basename in + ec++*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + ghcx*) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + freebsd[12]*) + # C++ shared libraries reported to be fairly broken before + # switch to ELF + ld_shlibs_CXX=no + ;; + + freebsd-elf*) + archive_cmds_need_lc_CXX=no + ;; + + freebsd* | dragonfly*) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + ld_shlibs_CXX=yes + ;; + + gnu*) + ;; + + hpux9*) + hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_CXX=: + export_dynamic_flag_spec_CXX='${wl}-E' + hardcode_direct_CXX=yes + hardcode_minus_L_CXX=yes # Not in the search PATH, + # but as the default + # location of the library. + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aCC*) + archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + ;; + *) + if test "$GXX" = yes; then + archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + + hpux10*|hpux11*) + if test $with_gnu_ld = no; then + hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_CXX=: + + case $host_cpu in + hppa*64*|ia64*) + ;; + *) + export_dynamic_flag_spec_CXX='${wl}-E' + ;; + esac + fi + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct_CXX=no + hardcode_shlibpath_var_CXX=no + ;; + *) + hardcode_direct_CXX=yes + hardcode_direct_absolute_CXX=yes + hardcode_minus_L_CXX=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + esac + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aCC*) + case $host_cpu in + hppa*64*) + archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + ;; + *) + if test "$GXX" = yes; then + if test $with_gnu_ld = no; then + case $host_cpu in + hppa*64*) + archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + + interix[3-9]*) + hardcode_direct_CXX=no + hardcode_shlibpath_var_CXX=no + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + export_dynamic_flag_spec_CXX='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + irix5* | irix6*) + case $cc_basename in + CC*) + # SGI C++ + archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + + # Archives containing C++ object files must be created using + # "CC -ar", where "CC" is the IRIX C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test "$GXX" = yes; then + if test "$with_gnu_ld" = no; then + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib' + fi + fi + link_all_deplibs_CXX=yes + ;; + esac + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_CXX=: + inherit_rpath_CXX=yes + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc* | ecpc* ) + # Intel C++ + with_gnu_ld=yes + # version 8.0 and above of icpc choke on multiply defined symbols + # if we add $predep_objects and $postdep_objects, however 7.1 and + # earlier do not add the objects themselves. + case `$CC -V 2>&1` in + *"Version 7."*) + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 8.0 or newer + tmp_idyn= + case $host_cpu in + ia64*) tmp_idyn=' -i_dynamic';; + esac + archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + archive_cmds_need_lc_CXX=no + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + case `$CC -V` in + *pgCC\ [1-5]* | *pgcpp\ [1-5]*) + prelink_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ + compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"' + old_archive_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ + $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~ + $RANLIB $oldlib' + archive_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + archive_expsym_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + *) # Version 6 will use weak symbols + archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + esac + + hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + ;; + cxx*) + # Compaq C++ + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' + + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec_CXX='-rpath $libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + ;; + xl*) + # IBM XL 8.0 on PPC, with GNU ld + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + no_undefined_flag_CXX=' -zdefs' + archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' + hardcode_libdir_flag_spec_CXX='-R$libdir' + whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + compiler_needs_object_CXX=yes + + # Not sure whether something based on + # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 + # would be better. + output_verbose_link_cmd='echo' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' + ;; + esac + ;; + esac + ;; + + lynxos*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + m88k*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + mvs*) + case $cc_basename in + cxx*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + hardcode_libdir_flag_spec_CXX='-R$libdir' + hardcode_direct_CXX=yes + hardcode_shlibpath_var_CXX=no + fi + # Workaround some broken pre-1.5 toolchains + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' + ;; + + *nto* | *qnx*) + ld_shlibs_CXX=yes + ;; + + openbsd2*) + # C++ shared libraries are fairly broken + ld_shlibs_CXX=no + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + hardcode_direct_CXX=yes + hardcode_shlibpath_var_CXX=no + hardcode_direct_absolute_CXX=yes + archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' + export_dynamic_flag_spec_CXX='${wl}-E' + whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + fi + output_verbose_link_cmd=echo + else + ld_shlibs_CXX=no + fi + ;; + + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + hardcode_libdir_separator_CXX=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + case $host in + osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; + *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; + esac + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + cxx*) + case $host in + osf3*) + allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + ;; + *) + allow_undefined_flag_CXX=' -expect_unresolved \*' + archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~ + $RM $lib.exp' + hardcode_libdir_flag_spec_CXX='-rpath $libdir' + ;; + esac + + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' + case $host in + osf3*) + archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + *) + archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + esac + + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' + + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + + psos*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + lcc*) + # Lucid + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + solaris*) + case $cc_basename in + CC*) + # Sun C++ 4.2, 5.x and Centerline C++ + archive_cmds_need_lc_CXX=yes + no_undefined_flag_CXX=' -zdefs' + archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + hardcode_libdir_flag_spec_CXX='-R$libdir' + hardcode_shlibpath_var_CXX=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. + # Supported since Solaris 2.6 (maybe 2.5.1?) + whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract' + ;; + esac + link_all_deplibs_CXX=yes + + output_verbose_link_cmd='echo' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' + ;; + gcx*) + # Green Hills C++ Compiler + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + + # The C++ compiler must be used to create the archive. + old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + no_undefined_flag_CXX=' ${wl}-z ${wl}defs' + if $CC --version | $GREP -v '^2\.7' > /dev/null; then + archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' + else + # g++ 2.7 appears to require `-G' NOT `-shared' on this + # platform. + archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' + fi + + hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + ;; + esac + fi + ;; + esac + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag_CXX='${wl}-z,text' + archive_cmds_need_lc_CXX=no + hardcode_shlibpath_var_CXX=no + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag_CXX='${wl}-z,text' + allow_undefined_flag_CXX='${wl}-z,nodefs' + archive_cmds_need_lc_CXX=no + hardcode_shlibpath_var_CXX=no + hardcode_libdir_flag_spec_CXX='${wl}-R,$libdir' + hardcode_libdir_separator_CXX=':' + link_all_deplibs_CXX=yes + export_dynamic_flag_spec_CXX='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + vxworks*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 +$as_echo "$ld_shlibs_CXX" >&6; } + test "$ld_shlibs_CXX" = no && can_build_shared=no + + GCC_CXX="$GXX" + LD_CXX="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + # Dependencies to place before and after the object being linked: +predep_objects_CXX= +postdep_objects_CXX= +predeps_CXX= +postdeps_CXX= +compiler_lib_search_path_CXX= + +cat > conftest.$ac_ext <<_LT_EOF +class Foo +{ +public: + Foo (void) { a = 0; } +private: + int a; +}; +_LT_EOF + +if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + # Parse the compiler output and extract the necessary + # objects, libraries and library flags. + + # Sentinel used to keep track of whether or not we are before + # the conftest object file. + pre_test_object_deps_done=no + + for p in `eval "$output_verbose_link_cmd"`; do + case $p in + + -L* | -R* | -l*) + # Some compilers place space between "-{L,R}" and the path. + # Remove the space. + if test $p = "-L" || + test $p = "-R"; then + prev=$p + continue + else + prev= + fi + + if test "$pre_test_object_deps_done" = no; then + case $p in + -L* | -R*) + # Internal compiler library paths should come after those + # provided the user. The postdeps already come after the + # user supplied libs so there is no need to process them. + if test -z "$compiler_lib_search_path_CXX"; then + compiler_lib_search_path_CXX="${prev}${p}" + else + compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}" + fi + ;; + # The "-l" case would never come before the object being + # linked, so don't bother handling this case. + esac + else + if test -z "$postdeps_CXX"; then + postdeps_CXX="${prev}${p}" + else + postdeps_CXX="${postdeps_CXX} ${prev}${p}" + fi + fi + ;; + + *.$objext) + # This assumes that the test object file only shows up + # once in the compiler output. + if test "$p" = "conftest.$objext"; then + pre_test_object_deps_done=yes + continue + fi + + if test "$pre_test_object_deps_done" = no; then + if test -z "$predep_objects_CXX"; then + predep_objects_CXX="$p" + else + predep_objects_CXX="$predep_objects_CXX $p" + fi + else + if test -z "$postdep_objects_CXX"; then + postdep_objects_CXX="$p" + else + postdep_objects_CXX="$postdep_objects_CXX $p" + fi + fi + ;; + + *) ;; # Ignore the rest. + + esac + done + + # Clean up. + rm -f a.out a.exe +else + echo "libtool.m4: error: problem compiling CXX test program" +fi + +$RM -f confest.$objext + +# PORTME: override above test on systems where it is broken +case $host_os in +interix[3-9]*) + # Interix 3.5 installs completely hosed .la files for C++, so rather than + # hack all around it, let's just trust "g++" to DTRT. + predep_objects_CXX= + postdep_objects_CXX= + postdeps_CXX= + ;; + +linux*) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + if test "$solaris_use_stlport4" != yes; then + postdeps_CXX='-library=Cstd -library=Crun' + fi + ;; + esac + ;; + +solaris*) + case $cc_basename in + CC*) + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + # Adding this requires a known-good setup of shared libraries for + # Sun compiler versions before 5.6, else PIC objects from an old + # archive will be linked into the output, leading to subtle bugs. + if test "$solaris_use_stlport4" != yes; then + postdeps_CXX='-library=Cstd -library=Crun' + fi + ;; + esac + ;; +esac + + +case " $postdeps_CXX " in +*" -lc "*) archive_cmds_need_lc_CXX=no ;; +esac + compiler_lib_search_dirs_CXX= +if test -n "${compiler_lib_search_path_CXX}"; then + compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + lt_prog_compiler_wl_CXX= +lt_prog_compiler_pic_CXX= +lt_prog_compiler_static_CXX= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } + + # C++ specific cases for pic, static, wl, etc. + if test "$GXX" = yes; then + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_CXX='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic_CXX='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic_CXX='-DDLL_EXPORT' + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic_CXX='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + lt_prog_compiler_pic_CXX= + ;; + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic_CXX=-Kconform_pic + fi + ;; + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + ;; + *) + lt_prog_compiler_pic_CXX='-fPIC' + ;; + esac + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic_CXX='-fPIC -shared' + ;; + *) + lt_prog_compiler_pic_CXX='-fPIC' + ;; + esac + else + case $host_os in + aix[4-9]*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_CXX='-Bstatic' + else + lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68*) + # Green Hills C++ Compiler + # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" + ;; + esac + ;; + dgux*) + case $cc_basename in + ec++*) + lt_prog_compiler_pic_CXX='-KPIC' + ;; + ghcx*) + # Green Hills C++ Compiler + lt_prog_compiler_pic_CXX='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | dragonfly*) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' + if test "$host_cpu" != ia64; then + lt_prog_compiler_pic_CXX='+Z' + fi + ;; + aCC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic_CXX='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + interix*) + # This is c89, which is MS Visual C++ (no shared libs) + # Anyone wants to do a port? + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + KCC*) + # KAI C++ Compiler + lt_prog_compiler_wl_CXX='--backend -Wl,' + lt_prog_compiler_pic_CXX='-fPIC' + ;; + ecpc* ) + # old Intel C++ for x86_64 which still supported -KPIC. + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-static' + ;; + icpc* ) + # Intel C++, used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-fPIC' + lt_prog_compiler_static_CXX='-static' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-fpic' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + cxx*) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + lt_prog_compiler_pic_CXX= + lt_prog_compiler_static_CXX='-non_shared' + ;; + xlc* | xlC*) + # IBM XL 8.0 on PPC + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-qpic' + lt_prog_compiler_static_CXX='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + lt_prog_compiler_wl_CXX='-Qoption ld ' + ;; + esac + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx*) + lt_prog_compiler_pic_CXX='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd* | netbsdelf*-gnu) + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic_CXX='-fPIC -shared' + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + lt_prog_compiler_wl_CXX='--backend -Wl,' + ;; + RCC*) + # Rational C++ 2.4.1 + lt_prog_compiler_pic_CXX='-pic' + ;; + cxx*) + # Digital/Compaq C++ + lt_prog_compiler_wl_CXX='-Wl,' + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + lt_prog_compiler_pic_CXX= + lt_prog_compiler_static_CXX='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + solaris*) + case $cc_basename in + CC*) + # Sun C++ 4.2, 5.x and Centerline C++ + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + lt_prog_compiler_wl_CXX='-Qoption ld ' + ;; + gcx*) + # Green Hills C++ Compiler + lt_prog_compiler_pic_CXX='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + lt_prog_compiler_pic_CXX='-pic' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + lcc*) + # Lucid + lt_prog_compiler_pic_CXX='-pic' + ;; + *) + ;; + esac + ;; + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + lt_prog_compiler_pic_CXX='-KPIC' + ;; + *) + ;; + esac + ;; + vxworks*) + ;; + *) + lt_prog_compiler_can_build_shared_CXX=no + ;; + esac + fi + +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic_CXX= + ;; + *) + lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX@&t@ -DPIC" + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic_CXX" >&5 +$as_echo "$lt_prog_compiler_pic_CXX" >&6; } + + + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } +if test "${lt_cv_prog_compiler_pic_works_CXX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_works_CXX=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic_CXX@&t@ -DPIC" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:__oline__: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works_CXX=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; } + +if test x"$lt_cv_prog_compiler_pic_works_CXX" = xyes; then + case $lt_prog_compiler_pic_CXX in + "" | " "*) ;; + *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; + esac +else + lt_prog_compiler_pic_CXX= + lt_prog_compiler_can_build_shared_CXX=no +fi + +fi + + + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if test "${lt_cv_prog_compiler_static_works_CXX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_static_works_CXX=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works_CXX=yes + fi + else + lt_cv_prog_compiler_static_works_CXX=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; } + +if test x"$lt_cv_prog_compiler_static_works_CXX" = xyes; then + : +else + lt_prog_compiler_static_CXX= +fi + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o_CXX=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:__oline__: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o_CXX=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o_CXX=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:__oline__: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o_CXX=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } + + + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } + if test "$hard_links" = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + case $host_os in + aix[4-9]*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + export_symbols_cmds_CXX="$ltdll_cmds" + ;; + cygwin* | mingw* | cegcc*) + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;/^.*[ ]__nm__/s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' + ;; + linux* | k*bsd*-gnu) + link_all_deplibs_CXX=no + ;; + *) + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac + exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 +$as_echo "$ld_shlibs_CXX" >&6; } +test "$ld_shlibs_CXX" = no && can_build_shared=no + +with_gnu_ld_CXX=$with_gnu_ld + + + + + + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc_CXX" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc_CXX=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds_CXX in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl_CXX + pic_flag=$lt_prog_compiler_pic_CXX + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag_CXX + allow_undefined_flag_CXX= + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 + (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + then + archive_cmds_need_lc_CXX=no + else + archive_cmds_need_lc_CXX=yes + fi + allow_undefined_flag_CXX=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc_CXX" >&5 +$as_echo "$archive_cmds_need_lc_CXX" >&6; } + ;; + esac + fi + ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } + +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[4-9]*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[123]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +interix[3-9]*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # Some binutils ld are patched to set DT_RUNPATH + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\"" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : + shlibpath_overrides_runpath=yes +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } +hardcode_action_CXX= +if test -n "$hardcode_libdir_flag_spec_CXX" || + test -n "$runpath_var_CXX" || + test "X$hardcode_automatic_CXX" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$hardcode_direct_CXX" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" != no && + test "$hardcode_minus_L_CXX" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action_CXX=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action_CXX=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action_CXX=unsupported +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 +$as_echo "$hardcode_action_CXX" >&6; } + +if test "$hardcode_action_CXX" = relink || + test "$inherit_rpath_CXX" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + + fi # test -n "$compiler" + + CC=$lt_save_CC + LDCXX=$LD + LD=$lt_save_LD + GCC=$lt_save_GCC + with_gnu_ld=$lt_save_with_gnu_ld + lt_cv_path_LDCXX=$lt_cv_path_LD + lt_cv_path_LD=$lt_save_path_LD + lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld + lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld +fi # test "$_lt_caught_CXX_error" != yes + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + + + + + + + + + + + + ac_config_commands="$ac_config_commands libtool" + + + + +# Only expand once: + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +$as_echo_n "checking whether ln -s works... " >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +$as_echo "no, using $LN_S" >&6; } +fi + + +############### +### DocBook ### +############### +for ac_prog in openjade jade +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_JADE+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$JADE"; then + ac_cv_prog_JADE="$JADE" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_JADE="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +JADE=$ac_cv_prog_JADE +if test -n "$JADE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $JADE" >&5 +$as_echo "$JADE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$JADE" && break +done + +if test -n "$JADE"; then + for ac_prog in onsgmls nsgmls +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_NSGMLS+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NSGMLS"; then + ac_cv_prog_NSGMLS="$NSGMLS" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_NSGMLS="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +NSGMLS=$ac_cv_prog_NSGMLS +if test -n "$NSGMLS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NSGMLS" >&5 +$as_echo "$NSGMLS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$NSGMLS" && break +done + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for DocBook V4.1" >&5 +$as_echo_n "checking for DocBook V4.1... " >&6; } +if test "${pgac_cv_check_docbook+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat >conftest.sgml < + + test + + random + + testsect + text + + + +EOF + +${NSGMLS-false} -s conftest.sgml 1>&5 2>&1 +if test $? -eq 0; then + pgac_cv_check_docbook=yes +else + pgac_cv_check_docbook=no +fi +rm -f conftest.sgml +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_check_docbook" >&5 +$as_echo "$pgac_cv_check_docbook" >&6; } + +have_docbook=$pgac_cv_check_docbook + + + if test "$pgac_cv_check_docbook" = "yes"; then + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for DocBook stylesheets" >&5 +$as_echo_n "checking for DocBook stylesheets... " >&6; } + +@%:@ Check whether --with-docbook-stylesheets was given. +if test "${with_docbook_stylesheets+set}" = set; then : + withval=$with_docbook_stylesheets; muse_docbook_prefix="$withval" +fi + +if test "${pgac_cv_path_stylesheets+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + +if test -n "$muse_docbook_prefix"; then + if test -r "$muse_docbook_prefix/html/docbook.dsl" \ + && test -r "$muse_docbook_prefix/print/docbook.dsl"; then + pgac_cv_path_stylesheets="$muse_docbook_prefix" + fi +fi +if test -z "$pgac_cv_path_stylesheets"; then + if test -n "$DOCBOOKSTYLE"; then + if test -r "$DOCBOOKSTYLE/html/docbook.dsl" \ + && test -r "$DOCBOOKSTYLE/print/docbook.dsl"; then + pgac_cv_path_stylesheets="$DOCBOOKSTYLE" + fi + fi +fi +if test -z "$pgac_cv_path_stylesheets"; then + for pgac_prefix in /usr /usr/local /opt; do + for pgac_infix in share lib; do + for pgac_postfix in \ + sgml/stylesheets/nwalsh-modular \ + sgml/stylesheets/docbook \ + sgml/docbook/dsssl/modular \ + sgml/docbook/stylesheet/dsssl/modular + do + pgac_candidate=$pgac_prefix/$pgac_infix/$pgac_postfix + if test -r "$pgac_candidate/html/docbook.dsl" \ + && test -r "$pgac_candidate/print/docbook.dsl" + then + pgac_cv_path_stylesheets=$pgac_candidate + break 3 + fi + done + done + done +fi + +fi + +DOCBOOKSTYLE=$pgac_cv_path_stylesheets + +if test -n "$DOCBOOKSTYLE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DOCBOOKSTYLE" >&5 +$as_echo "$DOCBOOKSTYLE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + if test -n "$DOCBOOKSTYLE"; then + DOCBOOKTARGETS="book1.html" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: DocBook stylesheets not found or not usable - documentation will not be built" >&5 +$as_echo "$as_me: WARNING: DocBook stylesheets not found or not usable - documentation will not be built" >&2;} + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: DocBook 4.1 DTD not found or not usable - documentation will not be built" >&5 +$as_echo "$as_me: WARNING: DocBook 4.1 DTD not found or not usable - documentation will not be built" >&2;} + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: jade not found - documentation will not be built" >&5 +$as_echo "$as_me: WARNING: jade not found - documentation will not be built" >&2;} +fi + + +############### +### doxygen ### +############### + +# Extract the first word of "doxygen", so it can be a program name with args. +set dummy doxygen; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_DOXYGEN+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $DOXYGEN in + [\\/]* | ?:[\\/]*) + ac_cv_path_DOXYGEN="$DOXYGEN" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_DOXYGEN="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_DOXYGEN" && ac_cv_path_DOXYGEN="no" + ;; +esac +fi +DOXYGEN=$ac_cv_path_DOXYGEN +if test -n "$DOXYGEN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DOXYGEN" >&5 +$as_echo "$DOXYGEN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + +################ +### graphviz ### +################ + +# Extract the first word of "dot", so it can be a program name with args. +set dummy dot; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_DOT+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $DOT in + [\\/]* | ?:[\\/]*) + ac_cv_path_DOT="$DOT" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_DOT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_DOT" && ac_cv_path_DOT="no" + ;; +esac +fi +DOT=$ac_cv_path_DOT +if test -n "$DOT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DOT" >&5 +$as_echo "$DOT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +if test "$DOT" != "no"; then + HAVEDOT=YES + DOTPATH=$( dirname "$DOT" ) +else + HAVEDOT=NO +fi + + + +############ +### perl ### +############ + +# Extract the first word of "perl", so it can be a program name with args. +set dummy perl; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_PERL+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $PERL in + [\\/]* | ?:[\\/]*) + ac_cv_path_PERL="$PERL" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_PERL" && ac_cv_path_PERL="no" + ;; +esac +fi +PERL=$ac_cv_path_PERL +if test -n "$PERL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5 +$as_echo "$PERL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +if test "$PERL" == "no"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: you don't have perl installed! wierdo! (and doxygen might not like this)" >&5 +$as_echo "$as_me: WARNING: you don't have perl installed! wierdo! (and doxygen might not like this)" >&2;} +fi + + +######### +### X ### +######### +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for X" >&5 +$as_echo_n "checking for X... " >&6; } + + +@%:@ Check whether --with-x was given. +if test "${with_x+set}" = set; then : + withval=$with_x; +fi + +# $have_x is `yes', `no', `disabled', or empty when we do not yet know. +if test "x$with_x" = xno; then + # The user explicitly disabled X. + have_x=disabled +else + case $x_includes,$x_libraries in #( + *\'*) as_fn_error "cannot use X directory names containing '" "$LINENO" 5;; #( + *,NONE | NONE,*) if test "${ac_cv_have_x+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + # One or both of the vars are not set, and there is no cached value. +ac_x_includes=no ac_x_libraries=no +rm -f -r conftest.dir +if mkdir conftest.dir; then + cd conftest.dir + cat >Imakefile <<'_ACEOF' +incroot: + @echo incroot='${INCROOT}' +usrlibdir: + @echo usrlibdir='${USRLIBDIR}' +libdir: + @echo libdir='${LIBDIR}' +_ACEOF + if (export CC; ${XMKMF-xmkmf}) >/dev/null 2>/dev/null && test -f Makefile; then + # GNU make sometimes prints "make[1]: Entering...", which would confuse us. + for ac_var in incroot usrlibdir libdir; do + eval "ac_im_$ac_var=\`\${MAKE-make} $ac_var 2>/dev/null | sed -n 's/^$ac_var=//p'\`" + done + # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR. + for ac_extension in a so sl dylib la dll; do + if test ! -f "$ac_im_usrlibdir/libX11.$ac_extension" && + test -f "$ac_im_libdir/libX11.$ac_extension"; then + ac_im_usrlibdir=$ac_im_libdir; break + fi + done + # Screen out bogus values from the imake configuration. They are + # bogus both because they are the default anyway, and because + # using them would break gcc on systems where it needs fixed includes. + case $ac_im_incroot in + /usr/include) ac_x_includes= ;; + *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;; + esac + case $ac_im_usrlibdir in + /usr/lib | /usr/lib64 | /lib | /lib64) ;; + *) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;; + esac + fi + cd .. + rm -f -r conftest.dir +fi + +# Standard set of common directories for X headers. +# Check X11 before X11Rn because it is often a symlink to the current release. +ac_x_header_dirs=' +/usr/X11/include +/usr/X11R7/include +/usr/X11R6/include +/usr/X11R5/include +/usr/X11R4/include + +/usr/include/X11 +/usr/include/X11R7 +/usr/include/X11R6 +/usr/include/X11R5 +/usr/include/X11R4 + +/usr/local/X11/include +/usr/local/X11R7/include +/usr/local/X11R6/include +/usr/local/X11R5/include +/usr/local/X11R4/include + +/usr/local/include/X11 +/usr/local/include/X11R7 +/usr/local/include/X11R6 +/usr/local/include/X11R5 +/usr/local/include/X11R4 + +/usr/X386/include +/usr/x386/include +/usr/XFree86/include/X11 + +/usr/include +/usr/local/include +/usr/unsupported/include +/usr/athena/include +/usr/local/x11r5/include +/usr/lpp/Xamples/include + +/usr/openwin/include +/usr/openwin/share/include' + +if test "$ac_x_includes" = no; then + # Guess where to find include files, by looking for Xlib.h. + # First, try using that file with no special directory specified. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # We can compile using X headers with no special include directory. +ac_x_includes= +else + for ac_dir in $ac_x_header_dirs; do + if test -r "$ac_dir/X11/Xlib.h"; then + ac_x_includes=$ac_dir + break + fi +done +fi +rm -f conftest.err conftest.$ac_ext +fi # $ac_x_includes = no + +if test "$ac_x_libraries" = no; then + # Check for the libraries. + # See if we find them without any special options. + # Don't add to $LIBS permanently. + ac_save_LIBS=$LIBS + LIBS="-lX11 $LIBS" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@include +int +main () +{ +XrmInitialize () + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + LIBS=$ac_save_LIBS +# We can link X programs with no special library path. +ac_x_libraries= +else + LIBS=$ac_save_LIBS +for ac_dir in `$as_echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g` +do + # Don't even attempt the hair of trying to link an X program! + for ac_extension in a so sl dylib la dll; do + if test -r "$ac_dir/libX11.$ac_extension"; then + ac_x_libraries=$ac_dir + break 2 + fi + done +done +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi # $ac_x_libraries = no + +case $ac_x_includes,$ac_x_libraries in #( + no,* | *,no | *\'*) + # Didn't find X, or a directory has "'" in its name. + ac_cv_have_x="have_x=no";; #( + *) + # Record where we found X for the cache. + ac_cv_have_x="have_x=yes\ + ac_x_includes='$ac_x_includes'\ + ac_x_libraries='$ac_x_libraries'" +esac +fi +;; #( + *) have_x=yes;; + esac + eval "$ac_cv_have_x" +fi # $with_x != no + +if test "$have_x" != yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_x" >&5 +$as_echo "$have_x" >&6; } + no_x=yes +else + # If each of the values was on the command line, it overrides each guess. + test "x$x_includes" = xNONE && x_includes=$ac_x_includes + test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries + # Update the cache value to reflect the command line values. + ac_cv_have_x="have_x=yes\ + ac_x_includes='$x_includes'\ + ac_x_libraries='$x_libraries'" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: libraries $x_libraries, headers $x_includes" >&5 +$as_echo "libraries $x_libraries, headers $x_includes" >&6; } +fi + +if test "$no_x" = yes; then + # Not all programs may use this symbol, but it does not hurt to define it. + +$as_echo "@%:@define X_DISPLAY_MISSING 1" >>confdefs.h + + X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS= +else + if test -n "$x_includes"; then + X_CFLAGS="$X_CFLAGS -I$x_includes" + fi + + # It would also be nice to do this for all -L options, not just this one. + if test -n "$x_libraries"; then + X_LIBS="$X_LIBS -L$x_libraries" + # For Solaris; some versions of Sun CC require a space after -R and + # others require no space. Words are not sufficient . . . . + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -R must be followed by a space" >&5 +$as_echo_n "checking whether -R must be followed by a space... " >&6; } + ac_xsave_LIBS=$LIBS; LIBS="$LIBS -R$x_libraries" + ac_xsave_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + X_LIBS="$X_LIBS -R$x_libraries" +else + LIBS="$ac_xsave_LIBS -R $x_libraries" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + X_LIBS="$X_LIBS -R $x_libraries" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: neither works" >&5 +$as_echo "neither works" >&6; } +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + ac_c_werror_flag=$ac_xsave_c_werror_flag + LIBS=$ac_xsave_LIBS + fi + + # Check for system-dependent libraries X programs must link with. + # Do this before checking for the system-independent R6 libraries + # (-lICE), since we may need -lsocket or whatever for X linking. + + if test "$ISC" = yes; then + X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet" + else + # Martyn Johnson says this is needed for Ultrix, if the X + # libraries were built with DECnet support. And Karl Berry says + # the Alpha needs dnet_stub (dnet does not exist). + ac_xsave_LIBS="$LIBS"; LIBS="$LIBS $X_LIBS -lX11" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char XOpenDisplay (); +int +main () +{ +return XOpenDisplay (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet" >&5 +$as_echo_n "checking for dnet_ntoa in -ldnet... " >&6; } +if test "${ac_cv_lib_dnet_dnet_ntoa+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldnet $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dnet_ntoa (); +int +main () +{ +return dnet_ntoa (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dnet_dnet_ntoa=yes +else + ac_cv_lib_dnet_dnet_ntoa=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_dnet_ntoa" >&5 +$as_echo "$ac_cv_lib_dnet_dnet_ntoa" >&6; } +if test "x$ac_cv_lib_dnet_dnet_ntoa" = x""yes; then : + X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet" +fi + + if test $ac_cv_lib_dnet_dnet_ntoa = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet_stub" >&5 +$as_echo_n "checking for dnet_ntoa in -ldnet_stub... " >&6; } +if test "${ac_cv_lib_dnet_stub_dnet_ntoa+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldnet_stub $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dnet_ntoa (); +int +main () +{ +return dnet_ntoa (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dnet_stub_dnet_ntoa=yes +else + ac_cv_lib_dnet_stub_dnet_ntoa=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5 +$as_echo "$ac_cv_lib_dnet_stub_dnet_ntoa" >&6; } +if test "x$ac_cv_lib_dnet_stub_dnet_ntoa" = x""yes; then : + X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub" +fi + + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LIBS="$ac_xsave_LIBS" + + # msh@cis.ufl.edu says -lnsl (and -lsocket) are needed for his 386/AT, + # to get the SysV transport functions. + # Chad R. Larson says the Pyramis MIS-ES running DC/OSx (SVR4) + # needs -lnsl. + # The nsl library prevents programs from opening the X display + # on Irix 5.2, according to T.E. Dickey. + # The functions gethostbyname, getservbyname, and inet_addr are + # in -lbsd on LynxOS 3.0.1/i386, according to Lars Hecking. + ac_fn_c_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname" +if test "x$ac_cv_func_gethostbyname" = x""yes; then : + +fi + + if test $ac_cv_func_gethostbyname = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl" >&5 +$as_echo_n "checking for gethostbyname in -lnsl... " >&6; } +if test "${ac_cv_lib_nsl_gethostbyname+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lnsl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char gethostbyname (); +int +main () +{ +return gethostbyname (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_nsl_gethostbyname=yes +else + ac_cv_lib_nsl_gethostbyname=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostbyname" >&5 +$as_echo "$ac_cv_lib_nsl_gethostbyname" >&6; } +if test "x$ac_cv_lib_nsl_gethostbyname" = x""yes; then : + X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl" +fi + + if test $ac_cv_lib_nsl_gethostbyname = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lbsd" >&5 +$as_echo_n "checking for gethostbyname in -lbsd... " >&6; } +if test "${ac_cv_lib_bsd_gethostbyname+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lbsd $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char gethostbyname (); +int +main () +{ +return gethostbyname (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_bsd_gethostbyname=yes +else + ac_cv_lib_bsd_gethostbyname=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bsd_gethostbyname" >&5 +$as_echo "$ac_cv_lib_bsd_gethostbyname" >&6; } +if test "x$ac_cv_lib_bsd_gethostbyname" = x""yes; then : + X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd" +fi + + fi + fi + + # lieder@skyler.mavd.honeywell.com says without -lsocket, + # socket/setsockopt and other routines are undefined under SCO ODT + # 2.0. But -lsocket is broken on IRIX 5.2 (and is not necessary + # on later versions), says Simon Leinen: it contains gethostby* + # variants that don't use the name server (or something). -lsocket + # must be given before -lnsl if both are needed. We assume that + # if connect needs -lnsl, so does gethostbyname. + ac_fn_c_check_func "$LINENO" "connect" "ac_cv_func_connect" +if test "x$ac_cv_func_connect" = x""yes; then : + +fi + + if test $ac_cv_func_connect = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for connect in -lsocket" >&5 +$as_echo_n "checking for connect in -lsocket... " >&6; } +if test "${ac_cv_lib_socket_connect+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsocket $X_EXTRA_LIBS $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char connect (); +int +main () +{ +return connect (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_socket_connect=yes +else + ac_cv_lib_socket_connect=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_connect" >&5 +$as_echo "$ac_cv_lib_socket_connect" >&6; } +if test "x$ac_cv_lib_socket_connect" = x""yes; then : + X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS" +fi + + fi + + # Guillermo Gomez says -lposix is necessary on A/UX. + ac_fn_c_check_func "$LINENO" "remove" "ac_cv_func_remove" +if test "x$ac_cv_func_remove" = x""yes; then : + +fi + + if test $ac_cv_func_remove = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for remove in -lposix" >&5 +$as_echo_n "checking for remove in -lposix... " >&6; } +if test "${ac_cv_lib_posix_remove+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lposix $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char remove (); +int +main () +{ +return remove (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_posix_remove=yes +else + ac_cv_lib_posix_remove=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_posix_remove" >&5 +$as_echo "$ac_cv_lib_posix_remove" >&6; } +if test "x$ac_cv_lib_posix_remove" = x""yes; then : + X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix" +fi + + fi + + # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay. + ac_fn_c_check_func "$LINENO" "shmat" "ac_cv_func_shmat" +if test "x$ac_cv_func_shmat" = x""yes; then : + +fi + + if test $ac_cv_func_shmat = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shmat in -lipc" >&5 +$as_echo_n "checking for shmat in -lipc... " >&6; } +if test "${ac_cv_lib_ipc_shmat+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lipc $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shmat (); +int +main () +{ +return shmat (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_ipc_shmat=yes +else + ac_cv_lib_ipc_shmat=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ipc_shmat" >&5 +$as_echo "$ac_cv_lib_ipc_shmat" >&6; } +if test "x$ac_cv_lib_ipc_shmat" = x""yes; then : + X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc" +fi + + fi + fi + + # Check for libraries that X11R6 Xt/Xaw programs need. + ac_save_LDFLAGS=$LDFLAGS + test -n "$x_libraries" && LDFLAGS="$LDFLAGS -L$x_libraries" + # SM needs ICE to (dynamically) link under SunOS 4.x (so we have to + # check for ICE first), but we must link in the order -lSM -lICE or + # we get undefined symbols. So assume we have SM if we have ICE. + # These have to be linked with before -lX11, unlike the other + # libraries we check for below, so use a different variable. + # John Interrante, Karl Berry + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for IceConnectionNumber in -lICE" >&5 +$as_echo_n "checking for IceConnectionNumber in -lICE... " >&6; } +if test "${ac_cv_lib_ICE_IceConnectionNumber+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lICE $X_EXTRA_LIBS $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char IceConnectionNumber (); +int +main () +{ +return IceConnectionNumber (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_ICE_IceConnectionNumber=yes +else + ac_cv_lib_ICE_IceConnectionNumber=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5 +$as_echo "$ac_cv_lib_ICE_IceConnectionNumber" >&6; } +if test "x$ac_cv_lib_ICE_IceConnectionNumber" = x""yes; then : + X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE" +fi + + LDFLAGS=$ac_save_LDFLAGS + +fi + +if test "$X_DISPLAY_MISSING" != ""; then + as_fn_error "X required" "$LINENO" 5 +fi + + + +########## +### QT ### +########## +#CONFIGURE_QT(3.2.0, , AC_MSG_ERROR([need qt >= 3.2.0])) +#if test "$muse_qttest" = "yes"; then +# AC_LANG_PUSH([C++]) +# muse_save_CFLAGS="$CFLAGS" +# CFLAGS="$CFLAGS $QT_CFLAGS" +# muse_save_CXXFLAGS="$CXXFLAGS" +# CXXFLAGS="$CXXFLAGS $QT_CFLAGS" +# muse_save_LDFLAGS="$LDFLAGS" +# LDFLAGS="$LDFLAGS $QT_LIBS" +# AC_CHECK_LIB(qt-mt, qt_selection_property, [ +# true +# ],[ +# AC_MSG_ERROR([ +# +# MusE requires thread enabled QT (qt-mt) >= 3.2.0 +# +# You can either compile your own version of QT (making sure you enable +# threading!) or install the appropriate package for your distribution. +#]) +# ]) +# CFLAGS="$muse_save_CFLAGS" +# CXXFLAGS="$muse_save_CXXFLAGS" +# LDFLAGS="$muse_save_LDFLAGS" +# unset muse_save_CFLAGS +# unset muse_save_CXXFLAGS +# unset muse_save_LDFLAGS +# AC_LANG_POP([C++]) +#fi + +QTDIR=/usr/share/qt4 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $QTDIR" >&5 +$as_echo "$QTDIR" >&6; } +if test "$no_x" = yes; then + # Not all programs may use this symbol, but it does not hurt to define it. + +$as_echo "@%:@define X_DISPLAY_MISSING 1" >>confdefs.h + + X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS= +else + if test -n "$x_includes"; then + X_CFLAGS="$X_CFLAGS -I$x_includes" + fi + + # It would also be nice to do this for all -L options, not just this one. + if test -n "$x_libraries"; then + X_LIBS="$X_LIBS -L$x_libraries" + # For Solaris; some versions of Sun CC require a space after -R and + # others require no space. Words are not sufficient . . . . + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -R must be followed by a space" >&5 +$as_echo_n "checking whether -R must be followed by a space... " >&6; } + ac_xsave_LIBS=$LIBS; LIBS="$LIBS -R$x_libraries" + ac_xsave_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + X_LIBS="$X_LIBS -R$x_libraries" +else + LIBS="$ac_xsave_LIBS -R $x_libraries" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + X_LIBS="$X_LIBS -R $x_libraries" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: neither works" >&5 +$as_echo "neither works" >&6; } +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + ac_c_werror_flag=$ac_xsave_c_werror_flag + LIBS=$ac_xsave_LIBS + fi + + # Check for system-dependent libraries X programs must link with. + # Do this before checking for the system-independent R6 libraries + # (-lICE), since we may need -lsocket or whatever for X linking. + + if test "$ISC" = yes; then + X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet" + else + # Martyn Johnson says this is needed for Ultrix, if the X + # libraries were built with DECnet support. And Karl Berry says + # the Alpha needs dnet_stub (dnet does not exist). + ac_xsave_LIBS="$LIBS"; LIBS="$LIBS $X_LIBS -lX11" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char XOpenDisplay (); +int +main () +{ +return XOpenDisplay (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet" >&5 +$as_echo_n "checking for dnet_ntoa in -ldnet... " >&6; } +if test "${ac_cv_lib_dnet_dnet_ntoa+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldnet $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dnet_ntoa (); +int +main () +{ +return dnet_ntoa (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dnet_dnet_ntoa=yes +else + ac_cv_lib_dnet_dnet_ntoa=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_dnet_ntoa" >&5 +$as_echo "$ac_cv_lib_dnet_dnet_ntoa" >&6; } +if test "x$ac_cv_lib_dnet_dnet_ntoa" = x""yes; then : + X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet" +fi + + if test $ac_cv_lib_dnet_dnet_ntoa = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet_stub" >&5 +$as_echo_n "checking for dnet_ntoa in -ldnet_stub... " >&6; } +if test "${ac_cv_lib_dnet_stub_dnet_ntoa+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldnet_stub $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dnet_ntoa (); +int +main () +{ +return dnet_ntoa (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dnet_stub_dnet_ntoa=yes +else + ac_cv_lib_dnet_stub_dnet_ntoa=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5 +$as_echo "$ac_cv_lib_dnet_stub_dnet_ntoa" >&6; } +if test "x$ac_cv_lib_dnet_stub_dnet_ntoa" = x""yes; then : + X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub" +fi + + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LIBS="$ac_xsave_LIBS" + + # msh@cis.ufl.edu says -lnsl (and -lsocket) are needed for his 386/AT, + # to get the SysV transport functions. + # Chad R. Larson says the Pyramis MIS-ES running DC/OSx (SVR4) + # needs -lnsl. + # The nsl library prevents programs from opening the X display + # on Irix 5.2, according to T.E. Dickey. + # The functions gethostbyname, getservbyname, and inet_addr are + # in -lbsd on LynxOS 3.0.1/i386, according to Lars Hecking. + ac_fn_c_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname" +if test "x$ac_cv_func_gethostbyname" = x""yes; then : + +fi + + if test $ac_cv_func_gethostbyname = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl" >&5 +$as_echo_n "checking for gethostbyname in -lnsl... " >&6; } +if test "${ac_cv_lib_nsl_gethostbyname+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lnsl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char gethostbyname (); +int +main () +{ +return gethostbyname (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_nsl_gethostbyname=yes +else + ac_cv_lib_nsl_gethostbyname=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostbyname" >&5 +$as_echo "$ac_cv_lib_nsl_gethostbyname" >&6; } +if test "x$ac_cv_lib_nsl_gethostbyname" = x""yes; then : + X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl" +fi + + if test $ac_cv_lib_nsl_gethostbyname = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lbsd" >&5 +$as_echo_n "checking for gethostbyname in -lbsd... " >&6; } +if test "${ac_cv_lib_bsd_gethostbyname+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lbsd $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char gethostbyname (); +int +main () +{ +return gethostbyname (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_bsd_gethostbyname=yes +else + ac_cv_lib_bsd_gethostbyname=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bsd_gethostbyname" >&5 +$as_echo "$ac_cv_lib_bsd_gethostbyname" >&6; } +if test "x$ac_cv_lib_bsd_gethostbyname" = x""yes; then : + X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd" +fi + + fi + fi + + # lieder@skyler.mavd.honeywell.com says without -lsocket, + # socket/setsockopt and other routines are undefined under SCO ODT + # 2.0. But -lsocket is broken on IRIX 5.2 (and is not necessary + # on later versions), says Simon Leinen: it contains gethostby* + # variants that don't use the name server (or something). -lsocket + # must be given before -lnsl if both are needed. We assume that + # if connect needs -lnsl, so does gethostbyname. + ac_fn_c_check_func "$LINENO" "connect" "ac_cv_func_connect" +if test "x$ac_cv_func_connect" = x""yes; then : + +fi + + if test $ac_cv_func_connect = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for connect in -lsocket" >&5 +$as_echo_n "checking for connect in -lsocket... " >&6; } +if test "${ac_cv_lib_socket_connect+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsocket $X_EXTRA_LIBS $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char connect (); +int +main () +{ +return connect (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_socket_connect=yes +else + ac_cv_lib_socket_connect=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_connect" >&5 +$as_echo "$ac_cv_lib_socket_connect" >&6; } +if test "x$ac_cv_lib_socket_connect" = x""yes; then : + X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS" +fi + + fi + + # Guillermo Gomez says -lposix is necessary on A/UX. + ac_fn_c_check_func "$LINENO" "remove" "ac_cv_func_remove" +if test "x$ac_cv_func_remove" = x""yes; then : + +fi + + if test $ac_cv_func_remove = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for remove in -lposix" >&5 +$as_echo_n "checking for remove in -lposix... " >&6; } +if test "${ac_cv_lib_posix_remove+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lposix $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char remove (); +int +main () +{ +return remove (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_posix_remove=yes +else + ac_cv_lib_posix_remove=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_posix_remove" >&5 +$as_echo "$ac_cv_lib_posix_remove" >&6; } +if test "x$ac_cv_lib_posix_remove" = x""yes; then : + X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix" +fi + + fi + + # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay. + ac_fn_c_check_func "$LINENO" "shmat" "ac_cv_func_shmat" +if test "x$ac_cv_func_shmat" = x""yes; then : + +fi + + if test $ac_cv_func_shmat = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shmat in -lipc" >&5 +$as_echo_n "checking for shmat in -lipc... " >&6; } +if test "${ac_cv_lib_ipc_shmat+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lipc $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shmat (); +int +main () +{ +return shmat (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_ipc_shmat=yes +else + ac_cv_lib_ipc_shmat=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ipc_shmat" >&5 +$as_echo "$ac_cv_lib_ipc_shmat" >&6; } +if test "x$ac_cv_lib_ipc_shmat" = x""yes; then : + X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc" +fi + + fi + fi + + # Check for libraries that X11R6 Xt/Xaw programs need. + ac_save_LDFLAGS=$LDFLAGS + test -n "$x_libraries" && LDFLAGS="$LDFLAGS -L$x_libraries" + # SM needs ICE to (dynamically) link under SunOS 4.x (so we have to + # check for ICE first), but we must link in the order -lSM -lICE or + # we get undefined symbols. So assume we have SM if we have ICE. + # These have to be linked with before -lX11, unlike the other + # libraries we check for below, so use a different variable. + # John Interrante, Karl Berry + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for IceConnectionNumber in -lICE" >&5 +$as_echo_n "checking for IceConnectionNumber in -lICE... " >&6; } +if test "${ac_cv_lib_ICE_IceConnectionNumber+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lICE $X_EXTRA_LIBS $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char IceConnectionNumber (); +int +main () +{ +return IceConnectionNumber (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_ICE_IceConnectionNumber=yes +else + ac_cv_lib_ICE_IceConnectionNumber=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5 +$as_echo "$ac_cv_lib_ICE_IceConnectionNumber" >&6; } +if test "x$ac_cv_lib_ICE_IceConnectionNumber" = x""yes; then : + X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE" +fi + + LDFLAGS=$ac_save_LDFLAGS + +fi + +QT_LIBS="-Wl,-rpath,$QTDIR/lib -L$QTDIR/lib -lQtGui -lQtOpenGL -lQtCore -lQt3Support $X_LIBS -lX11 -lXext -lXmu -lXt -lXi $X_EXTRA_LIBS -lGLU -lGL -lpthread" +QTDIR_INC="-I$QTDIR/include -I$QTDIR/include/QtGui -I$QTDIR/include/QtCore -I$QTDIR/include/Qt3Support $X_CFLAGS -DQT_OPENGL_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED" +QTDIR_BIN="$QTDIR/bin" + + +############ +### ALSA ### +############ +alsa_save_CFLAGS="$CFLAGS" +alsa_save_LDFLAGS="$LDFLAGS" +alsa_save_LIBS="$LIBS" +alsa_found=yes + + +@%:@ Check whether --with-alsa-prefix was given. +if test "${with_alsa_prefix+set}" = set; then : + withval=$with_alsa_prefix; alsa_prefix="$withval" +else + alsa_prefix="" +fi + + + +@%:@ Check whether --with-alsa-inc-prefix was given. +if test "${with_alsa_inc_prefix+set}" = set; then : + withval=$with_alsa_inc_prefix; alsa_inc_prefix="$withval" +else + alsa_inc_prefix="" +fi + + +@%:@ Check whether --enable-alsatest was given. +if test "${enable_alsatest+set}" = set; then : + enableval=$enable_alsatest; enable_alsatest=no +else + enable_alsatest=yes +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ALSA CFLAGS" >&5 +$as_echo_n "checking for ALSA CFLAGS... " >&6; } +if test "$alsa_inc_prefix" != "" ; then + ALSA_CFLAGS="$ALSA_CFLAGS -I$alsa_inc_prefix" + CFLAGS="$CFLAGS -I$alsa_inc_prefix" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ALSA_CFLAGS" >&5 +$as_echo "$ALSA_CFLAGS" >&6; } + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ALSA LDFLAGS" >&5 +$as_echo_n "checking for ALSA LDFLAGS... " >&6; } +if test "$alsa_prefix" != "" ; then + ALSA_LIBS="$ALSA_LIBS -L$alsa_prefix" + LDFLAGS="$LDFLAGS $ALSA_LIBS" +fi + +ALSA_LIBS="$ALSA_LIBS -lasound -lm -ldl" +LIBS=`echo $LIBS | sed 's/-lm//'` +LIBS=`echo $LIBS | sed 's/-ldl//'` +LIBS=`echo $LIBS | sed 's/ //'` +LIBS="$ALSA_LIBS $LIBS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ALSA_LIBS" >&5 +$as_echo "$ALSA_LIBS" >&6; } + +min_alsa_version=0.9.0 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for libasound headers version >= $min_alsa_version" >&5 +$as_echo_n "checking for libasound headers version >= $min_alsa_version... " >&6; } +no_alsa="" + alsa_min_major_version=`echo $min_alsa_version | \ + sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'` + alsa_min_minor_version=`echo $min_alsa_version | \ + sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'` + alsa_min_micro_version=`echo $min_alsa_version | \ + sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'` + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include + +int +main () +{ + +void main(void) +{ +/* ensure backward compatibility */ +#if !defined(SND_LIB_MAJOR) && defined(SOUNDLIB_VERSION_MAJOR) +#define SND_LIB_MAJOR SOUNDLIB_VERSION_MAJOR +#endif +#if !defined(SND_LIB_MINOR) && defined(SOUNDLIB_VERSION_MINOR) +#define SND_LIB_MINOR SOUNDLIB_VERSION_MINOR +#endif +#if !defined(SND_LIB_SUBMINOR) && defined(SOUNDLIB_VERSION_SUBMINOR) +#define SND_LIB_SUBMINOR SOUNDLIB_VERSION_SUBMINOR +#endif + +# if(SND_LIB_MAJOR > $alsa_min_major_version) + exit(0); +# else +# if(SND_LIB_MAJOR < $alsa_min_major_version) +# error not present +# endif + +# if(SND_LIB_MINOR > $alsa_min_minor_version) + exit(0); +# else +# if(SND_LIB_MINOR < $alsa_min_minor_version) +# error not present +# endif + +# if(SND_LIB_SUBMINOR < $alsa_min_micro_version) +# error not present +# endif +# endif +# endif +exit(0); +} + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: found." >&5 +$as_echo "found." >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not present." >&5 +$as_echo "not present." >&6; } + + alsa_found=no + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for snd_seq_create_event in -lasound" >&5 +$as_echo_n "checking for snd_seq_create_event in -lasound... " >&6; } +if test "${ac_cv_lib_asound_snd_seq_create_event+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lasound $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char snd_seq_create_event (); +int +main () +{ +return snd_seq_create_event (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ac_cv_lib_asound_snd_seq_create_event=yes +else + ac_cv_lib_asound_snd_seq_create_event=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_asound_snd_seq_create_event" >&5 +$as_echo "$ac_cv_lib_asound_snd_seq_create_event" >&6; } +if test "x$ac_cv_lib_asound_snd_seq_create_event" = x""yes; then : + cat >>confdefs.h <<_ACEOF +@%:@define HAVE_LIBASOUND 1 +_ACEOF + + LIBS="-lasound $LIBS" + +else + + alsa_found=no + +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +if test "x$alsa_found" = "xyes" ; then + true + LIBS=`echo $LIBS | sed 's/-lasound//g'` + LIBS=`echo $LIBS | sed 's/ //'` + LIBS="-lasound $LIBS" +fi +if test "x$alsa_found" = "xno" ; then + as_fn_error "latest alsa (0.9.x) is required" "$LINENO" 5 + + CFLAGS="$alsa_save_CFLAGS" + LDFLAGS="$alsa_save_LDFLAGS" + LIBS="$alsa_save_LIBS" + ALSA_CFLAGS="" + ALSA_LIBS="" +fi + + + + + +################# +### fluidsynth ### +################# +LIBFLUIDSYNTH= +muse_enable_fluidlib="yes" +synth_fluidsynth="fluidsynth" +synth_fluid="fluid" +@%:@ Check whether --enable-fluidsynth was given. +if test "${enable_fluidsynth+set}" = set; then : + enableval=$enable_fluidsynth; + case "$enableval" in + "yes") + synth_fluidsynth="fluidsynth" + synth_fluid="fluid" + ;; + "no") + muse_enable_fluidlib="no" + synth_fluidsynth="" + synth_fluid="" + ;; + *) + as_fn_error "must use --enable-fluidsynth(=yes/no) or --disable-fluidsynth" "$LINENO" 5 + ;; + esac + +fi + + + if test "$muse_enable_fluidlib" = "yes"; then + ENABLEFLUIDSYNTH_TRUE= + ENABLEFLUIDSYNTH_FALSE='#' +else + ENABLEFLUIDSYNTH_TRUE='#' + ENABLEFLUIDSYNTH_FALSE= +fi + + + +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_PKG_CONFIG+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PKG_CONFIG=$ac_cv_path_PKG_CONFIG +if test -n "$PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 +$as_echo "$PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_PKG_CONFIG"; then + ac_pt_PKG_CONFIG=$PKG_CONFIG + # Extract the first word of "pkg-config", so it can be a program name with args. +set dummy pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG +if test -n "$ac_pt_PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 +$as_echo "$ac_pt_PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_PKG_CONFIG" = x; then + PKG_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + PKG_CONFIG=$ac_pt_PKG_CONFIG + fi +else + PKG_CONFIG="$ac_cv_path_PKG_CONFIG" +fi + +fi +if test -n "$PKG_CONFIG"; then + _pkg_min_version=0.9.0 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 +$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + PKG_CONFIG="" + fi + +fi + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fluidsynth" >&5 +$as_echo_n "checking for Fluidsynth... " >&6; } + +if test -n "$PKG_CONFIG"; then + if test -n "$Fluidsynth_CFLAGS"; then + pkg_cv_Fluidsynth_CFLAGS="$Fluidsynth_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"fluidsynth\""; } >&5 + ($PKG_CONFIG --exists --print-errors "fluidsynth") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_Fluidsynth_CFLAGS=`$PKG_CONFIG --cflags "fluidsynth" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi +if test -n "$PKG_CONFIG"; then + if test -n "$Fluidsynth_LIBS"; then + pkg_cv_Fluidsynth_LIBS="$Fluidsynth_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"fluidsynth\""; } >&5 + ($PKG_CONFIG --exists --print-errors "fluidsynth") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_Fluidsynth_LIBS=`$PKG_CONFIG --libs "fluidsynth" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + Fluidsynth_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "fluidsynth"` + else + Fluidsynth_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "fluidsynth"` + fi + # Put the nasty error message in config.log where it belongs + echo "$Fluidsynth_PKG_ERRORS" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: libfluidsynth not found; disabling fluidsynth plugins" >&5 +$as_echo "$as_me: WARNING: libfluidsynth not found; disabling fluidsynth plugins" >&2;} ; + muse_enable_fluidlib="no" + +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: libfluidsynth not found; disabling fluidsynth plugins" >&5 +$as_echo "$as_me: WARNING: libfluidsynth not found; disabling fluidsynth plugins" >&2;} ; + muse_enable_fluidlib="no" + +else + Fluidsynth_CFLAGS=$pkg_cv_Fluidsynth_CFLAGS + Fluidsynth_LIBS=$pkg_cv_Fluidsynth_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + FLUIDSYNTHDIRS="fluid fluidsynth"; +$as_echo "@%:@define ENABLEFLUIDSYNTH 1" >>confdefs.h + +fi + + + +if test "$muse_enable_fluidlib" = "no"; then + synth_fluidsynth="" + synth_fluid="" +fi + + +############### +### sndfile ### +############### + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for SNDFILE" >&5 +$as_echo_n "checking for SNDFILE... " >&6; } + +if test -n "$PKG_CONFIG"; then + if test -n "$SNDFILE_CFLAGS"; then + pkg_cv_SNDFILE_CFLAGS="$SNDFILE_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"sndfile >= 1.0.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "sndfile >= 1.0.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_SNDFILE_CFLAGS=`$PKG_CONFIG --cflags "sndfile >= 1.0.0" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi +if test -n "$PKG_CONFIG"; then + if test -n "$SNDFILE_LIBS"; then + pkg_cv_SNDFILE_LIBS="$SNDFILE_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"sndfile >= 1.0.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "sndfile >= 1.0.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_SNDFILE_LIBS=`$PKG_CONFIG --libs "sndfile >= 1.0.0" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + SNDFILE_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "sndfile >= 1.0.0"` + else + SNDFILE_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "sndfile >= 1.0.0"` + fi + # Put the nasty error message in config.log where it belongs + echo "$SNDFILE_PKG_ERRORS" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + as_fn_error "need libsndfile >= 1.0.0" "$LINENO" 5 + +elif test $pkg_failed = untried; then + as_fn_error "need libsndfile >= 1.0.0" "$LINENO" 5 + +else + SNDFILE_CFLAGS=$pkg_cv_SNDFILE_CFLAGS + SNDFILE_LIBS=$pkg_cv_SNDFILE_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + true +fi + +############### +### libsamplerate ### +############### + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for SAMPLERATE" >&5 +$as_echo_n "checking for SAMPLERATE... " >&6; } + +if test -n "$PKG_CONFIG"; then + if test -n "$SAMPLERATE_CFLAGS"; then + pkg_cv_SAMPLERATE_CFLAGS="$SAMPLERATE_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"samplerate >= 0.1.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "samplerate >= 0.1.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_SAMPLERATE_CFLAGS=`$PKG_CONFIG --cflags "samplerate >= 0.1.0" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi +if test -n "$PKG_CONFIG"; then + if test -n "$SAMPLERATE_LIBS"; then + pkg_cv_SAMPLERATE_LIBS="$SAMPLERATE_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"samplerate >= 0.1.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "samplerate >= 0.1.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_SAMPLERATE_LIBS=`$PKG_CONFIG --libs "samplerate >= 0.1.0" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + SAMPLERATE_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "samplerate >= 0.1.0"` + else + SAMPLERATE_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "samplerate >= 0.1.0"` + fi + # Put the nasty error message in config.log where it belongs + echo "$SAMPLERATE_PKG_ERRORS" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + as_fn_error "need libsamplerate" "$LINENO" 5 + +elif test $pkg_failed = untried; then + as_fn_error "need libsamplerate" "$LINENO" 5 + +else + SAMPLERATE_CFLAGS=$pkg_cv_SAMPLERATE_CFLAGS + SAMPLERATE_LIBS=$pkg_cv_SAMPLERATE_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + true +fi + +############### +### libuuid ### +############### +ac_fn_c_check_header_mongrel "$LINENO" "uuid/uuid.h" "ac_cv_header_uuid_uuid_h" "$ac_includes_default" +if test "x$ac_cv_header_uuid_uuid_h" = x""yes; then : + UUID_FOUND="yes" +else + UUID_FOUND="no" +fi + + +if test x$UUID_FOUND = xno; then + as_fn_error "Header file uuid.h, from the uuid-dev (sometimes in e2fsprogs) package, is required" "$LINENO" 5 +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for uuid_generate in -luuid" >&5 +$as_echo_n "checking for uuid_generate in -luuid... " >&6; } +if test "${ac_cv_lib_uuid_uuid_generate+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-luuid $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char uuid_generate (); +int +main () +{ +return uuid_generate (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_uuid_uuid_generate=yes +else + ac_cv_lib_uuid_uuid_generate=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_uuid_uuid_generate" >&5 +$as_echo "$ac_cv_lib_uuid_uuid_generate" >&6; } +if test "x$ac_cv_lib_uuid_uuid_generate" = x""yes; then : + UUID_FOUND="yes" +else + UUID_FOUND="no" +fi + +if test x$UUID_FOUND = xno; then + as_fn_error "libuuid (sometimes in e2fsprogs package) is required" "$LINENO" 5 +fi +UUID_LIBS="-luuid" + + + +## PKG_CHECK_MODULES(UUID, uuid >= 1.0, +## true, +## AC_MSG_ERROR([need libuuid >= 1.0 from e2fsprogs package]) +## ) + +############ +### JACK ### +############ + + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for JACK" >&5 +$as_echo_n "checking for JACK... " >&6; } + +if test -n "$PKG_CONFIG"; then + if test -n "$JACK_CFLAGS"; then + pkg_cv_JACK_CFLAGS="$JACK_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"jack >= 0.98.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "jack >= 0.98.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_JACK_CFLAGS=`$PKG_CONFIG --cflags "jack >= 0.98.0" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi +if test -n "$PKG_CONFIG"; then + if test -n "$JACK_LIBS"; then + pkg_cv_JACK_LIBS="$JACK_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"jack >= 0.98.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "jack >= 0.98.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_JACK_LIBS=`$PKG_CONFIG --libs "jack >= 0.98.0" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + JACK_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "jack >= 0.98.0"` + else + JACK_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "jack >= 0.98.0"` + fi + # Put the nasty error message in config.log where it belongs + echo "$JACK_PKG_ERRORS" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + as_fn_error "need JACK >= 0.98.0" "$LINENO" 5 + +elif test $pkg_failed = untried; then + as_fn_error "need JACK >= 0.98.0" "$LINENO" 5 + +else + JACK_CFLAGS=$pkg_cv_JACK_CFLAGS + JACK_LIBS=$pkg_cv_JACK_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + true +fi + +############## +### LASH ### +############## +muse_enable_lash="no" +@%:@ Check whether --enable-lash was given. +if test "${enable_lash+set}" = set; then : + enableval=$enable_lash; + case "$enableval" in + "yes") + muse_enable_lash="yes" + ;; + "no") + muse_enable_lash="no" + ;; + *) + as_fn_error "must use --enable-lash(=yes/no) or --disable-lash" "$LINENO" 5 + ;; + esac + +fi + + +if test "$muse_enable_lash" = "yes"; then + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LASH" >&5 +$as_echo_n "checking for LASH... " >&6; } + +if test -n "$PKG_CONFIG"; then + if test -n "$LASH_CFLAGS"; then + pkg_cv_LASH_CFLAGS="$LASH_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"lash-1.0 >= 0.2\""; } >&5 + ($PKG_CONFIG --exists --print-errors "lash-1.0 >= 0.2") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_LASH_CFLAGS=`$PKG_CONFIG --cflags "lash-1.0 >= 0.2" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi +if test -n "$PKG_CONFIG"; then + if test -n "$LASH_LIBS"; then + pkg_cv_LASH_LIBS="$LASH_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"lash-1.0 >= 0.2\""; } >&5 + ($PKG_CONFIG --exists --print-errors "lash-1.0 >= 0.2") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_LASH_LIBS=`$PKG_CONFIG --libs "lash-1.0 >= 0.2" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + LASH_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "lash-1.0 >= 0.2"` + else + LASH_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "lash-1.0 >= 0.2"` + fi + # Put the nasty error message in config.log where it belongs + echo "$LASH_PKG_ERRORS" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + LASH_FOUND="no" +elif test $pkg_failed = untried; then + LASH_FOUND="no" +else + LASH_CFLAGS=$pkg_cv_LASH_CFLAGS + LASH_LIBS=$pkg_cv_LASH_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + LASH_FOUND="yes" +fi + + + + if test "$LASH_FOUND" = "yes"; then + +$as_echo "@%:@define HAVE_LASH 1" >>confdefs.h + + LASH_VERSION=$( pkg-config --modversion lash-1.0 ) + +cat >>confdefs.h <<_ACEOF +@%:@define LASH_VERSION "$LASH_VERSION" +_ACEOF + + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: LASH support is disabled" >&5 +$as_echo "$as_me: WARNING: LASH support is disabled" >&2;} + LASH_FOUND="no" +fi + if test "$LASH_FOUND" = "yes"; then + HAVE_LASH_TRUE= + HAVE_LASH_FALSE='#' +else + HAVE_LASH_TRUE='#' + HAVE_LASH_FALSE= +fi + + + + + +################# +### givertcap ### +################# + +GIVERTCAP= +report_rtcap="no" +@%:@ Check whether --enable-rtcap was given. +if test "${enable_rtcap+set}" = set; then : + enableval=$enable_rtcap; + case "$enableval" in + "yes") + +$as_echo "@%:@define RTCAP 1" >>confdefs.h + + MUSECXXFLAGS="$MUSECXXFLAGS -DRTCAP" + GIVERTCAP="givertcap" + + ac_fn_c_check_header_mongrel "$LINENO" "sys/capability.h" "ac_cv_header_sys_capability_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_capability_h" = x""yes; then : + report_rtcap="yes" +else + as_fn_error "Missing sys/capability.h" "$LINENO" 5 +fi + + + ;; + "no") + ;; + *) + as_fn_error "must use --enable-rtcap(=yes/no) or --disable-rtcap" "$LINENO" 5 + esac + +fi + + if test "$report_rtcap" = "yes"; then + RTCAP_TRUE= + RTCAP_FALSE='#' +else + RTCAP_TRUE='#' + RTCAP_FALSE= +fi + + + + +#################### +### suid-install ### +#################### + +SUIDINSTALL="no" +@%:@ Check whether --enable-suid-install was given. +if test "${enable_suid_install+set}" = set; then : + enableval=$enable_suid_install; + case "$enableval" in + "yes") + SUIDINSTALL="yes" + ;; + "no") + ;; + *) + as_fn_error "must use --enable-suid-install(=yes/no) or --disable-suid-install" "$LINENO" 5 + ;; + esac + +fi + + + +################## +### suid-build ### +################## +SUIDBUILD="no" +@%:@ Check whether --enable-suid-build was given. +if test "${enable_suid_build+set}" = set; then : + enableval=$enable_suid_build; + case "$enableval" in + "yes") + SUIDBUILD="yes" + ;; + "no") + SUIDBUILD="no" + ;; + *) + as_fn_error "must use --enable-suid-build(=yes/no) or --disable-suid-build" "$LINENO" 5 + ;; + esac + +fi + + + + +######################## +### doxygen-treeview ### +######################## +DOXYGEN_TREEVIEW="YES" +report_doxy_treeview="yes"; +@%:@ Check whether --enable-doxy-treeview was given. +if test "${enable_doxy_treeview+set}" = set; then : + enableval=$enable_doxy_treeview; + case "$enableval" in + "yes") + ;; + "no") + DOXYGEN_TREEVIEW="NO" + report_doxy_treeview="no"; + ;; + *) + as_fn_error "must use --enable-doxy-treeview(=yes/no) or --disable-doxy-treeview" "$LINENO" 5 + ;; + esac + +fi + + + +################ +### patchbay ### +################ +###PATCHBAY="no" +###AC_SUBST(PATCHBAY) +###AM_CONDITIONAL(PATCHBAY, test "$PATCHBAY" == "yes") + +## -DQT_NO_CAST_ASCII +MUSECXXFLAGS="-g -fno-exceptions -Wall -W -D_GNU_SOURCE -D_REENTRANT \ + -DQT_CLEAN_NAMESPACE -DQT_NO_COMPAT \ + -I\$(top_srcdir) -I\$(top_srcdir)/muse/widgets \$(QT_CFLAGS)" + +#MUSEOPTCXXFLAGS="-O6 -fomit-frame-pointer -ffast-math -fstrength-reduce \ +#-funroll-loops" +#MUSEOPTCXXFLAGS="-O2" +MUSEOPTCXXFLAGS="-O3 -fomit-frame-pointer -ffast-math -fstrength-reduce -funroll-loops" + +# -fmove-all-movables + +################ +### optimize ### +################ +report_optimise="no" +@%:@ Check whether --enable-optimize was given. +if test "${enable_optimize+set}" = set; then : + enableval=$enable_optimize; + case "$enableval" in + "yes") + report_optimise="yes" + CXXFLAGS="$( echo "$CXXFLAGS" | sed "s/-O. *//" )" + MUSECXXFLAGS="$MUSECXXFLAGS $MUSEOPTCXXFLAGS" + ;; + "no") + ;; + *) + as_fn_error "must use --enable-optimize(=yes/no) or --disable-optimize" "$LINENO" 5 + ;; + esac + +fi + + +############# +### debug ### +############# +report_debug="no" +@%:@ Check whether --enable-debug was given. +if test "${enable_debug+set}" = set; then : + enableval=$enable_debug; + case "$enableval" in + "yes") + report_debug="yes" + CXXFLAGS="" + ;; + "no") + ;; + *) + as_fn_error "must use --enable-debug(=yes/no) or --disable-debug" "$LINENO" 5 + ;; + esac + +fi + + +########################### +### PCH ### +### precompiled headers ### +########################### + +@%:@ Check whether --enable-pch was given. +if test "${enable_pch+set}" = set; then : + enableval=$enable_pch; + case "$enableval" in + "yes") + MUSECXXFLAGS="$MUSECXXFLAGS -Winvalid-pch" + PCH="yes" + + +$as_echo "@%:@define PCH 1" >>confdefs.h + + ;; + "no") + ;; + *) + as_fn_error "must use --enable-pch(=yes/no) or --disable-pch" "$LINENO" 5 + ;; + esac + +fi + + if test "$PCH" = "yes"; then + PCH_TRUE= + PCH_FALSE='#' +else + PCH_TRUE='#' + PCH_FALSE= +fi + + +############ +### arch ### +############ + +report_march="none" +@%:@ Check whether --enable-arch was given. +if test "${enable_arch+set}" = set; then : + enableval=$enable_arch; + case "$enableval" in + "no") + ;; + *) + report_march="$enableval" + MUSECXXFLAGS="$MUSECXXFLAGS -mtune=$enableval -march=$enableval" + ;; + esac + +fi + + +########################### +### SSE ### +### SSE optimizations ### +########################### + +report_sse="no" +@%:@ Check whether --enable-sse was given. +if test "${enable_sse+set}" = set; then : + enableval=$enable_sse; + case "$enableval" in + "yes") + ## MUSECXXFLAGS="$MUSECXXFLAGS -Winvalid-pch" + report_sse="yes" + USE_SSE="yes" + + +$as_echo "@%:@define USE_SSE 1" >>confdefs.h + + ;; + "no") + ;; + *) + as_fn_error "must use --enable-sse(=yes/no) or --disable-sse" "$LINENO" 5 + ;; + esac + +fi + + if test "$USE_SSE" = "yes"; then + USE_SSE_TRUE= + USE_SSE_FALSE='#' +else + USE_SSE_TRUE='#' + USE_SSE_FALSE= +fi + + +########## +# PYTHON # +########## +# python detection borrowed from libvirt (http://libvirt.org) + +@%:@ Check whether --with-python was given. +if test "${with_python+set}" = set; then : + withval=$with_python; +else + enable_python=yes +fi + + +PYTHON_VERSION= +PYTHON_INCLUDES= +if test "$enable_python" != "no" ; then + if test -x "$enable_python/bin/python" + then + { $as_echo "$as_me:${as_lineno-$LINENO}: Found python in $enable_python/bin/python" >&5 +$as_echo "$as_me: Found python in $enable_python/bin/python" >&6;} + PYTHON="$enable_python/bin/python" + enable_python=yes + else + if test -x "$enable_python" + then + { $as_echo "$as_me:${as_lineno-$LINENO}: Found python in $enable_python" >&5 +$as_echo "$as_me: Found python in $enable_python" >&6;} + PYTHON="$enable_python" + enable_python=yes + else + if test -x "$PYTHON" + then + { $as_echo "$as_me:${as_lineno-$LINENO}: Found python in environment PYTHON=$PYTHON" >&5 +$as_echo "$as_me: Found python in environment PYTHON=$PYTHON" >&6;} + enable_python=yes + fi + fi + fi + + if test "$enable_python" == "yes" ; then + + + + + # Find any Python interpreter. + if test -z "$PYTHON"; then + for ac_prog in python python2 python3 python3.0 python2.5 python2.4 python2.3 python2.2 python2.1 python2.0 +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_PYTHON+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $PYTHON in + [\\/]* | ?:[\\/]*) + ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_PYTHON="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PYTHON=$ac_cv_path_PYTHON +if test -n "$PYTHON"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 +$as_echo "$PYTHON" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$PYTHON" && break +done +test -n "$PYTHON" || PYTHON=":" + + fi + am_display_PYTHON=python + + + if test "$PYTHON" = :; then + : + else + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON version" >&5 +$as_echo_n "checking for $am_display_PYTHON version... " >&6; } +if test "${am_cv_python_version+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[:3])"` +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_version" >&5 +$as_echo "$am_cv_python_version" >&6; } + PYTHON_VERSION=$am_cv_python_version + + + + PYTHON_PREFIX='${prefix}' + + PYTHON_EXEC_PREFIX='${exec_prefix}' + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON platform" >&5 +$as_echo_n "checking for $am_display_PYTHON platform... " >&6; } +if test "${am_cv_python_platform+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + am_cv_python_platform=`$PYTHON -c "import sys; sys.stdout.write(sys.platform)"` +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_platform" >&5 +$as_echo "$am_cv_python_platform" >&6; } + PYTHON_PLATFORM=$am_cv_python_platform + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON script directory" >&5 +$as_echo_n "checking for $am_display_PYTHON script directory... " >&6; } +if test "${am_cv_python_pythondir+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "x$prefix" = xNONE + then + am_py_prefix=$ac_default_prefix + else + am_py_prefix=$prefix + fi + am_cv_python_pythondir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(0,0,prefix='$am_py_prefix'))" 2>/dev/null || + echo "$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages"` + case $am_cv_python_pythondir in + $am_py_prefix*) + am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'` + am_cv_python_pythondir=`echo "$am_cv_python_pythondir" | sed "s,^$am__strip_prefix,$PYTHON_PREFIX,"` + ;; + *) + case $am_py_prefix in + /usr|/System*) ;; + *) + am_cv_python_pythondir=$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages + ;; + esac + ;; + esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_pythondir" >&5 +$as_echo "$am_cv_python_pythondir" >&6; } + pythondir=$am_cv_python_pythondir + + + + pkgpythondir=\${pythondir}/$PACKAGE + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON extension module directory" >&5 +$as_echo_n "checking for $am_display_PYTHON extension module directory... " >&6; } +if test "${am_cv_python_pyexecdir+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "x$exec_prefix" = xNONE + then + am_py_exec_prefix=$am_py_prefix + else + am_py_exec_prefix=$exec_prefix + fi + am_cv_python_pyexecdir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(1,0,prefix='$am_py_exec_prefix'))" 2>/dev/null || + echo "$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages"` + case $am_cv_python_pyexecdir in + $am_py_exec_prefix*) + am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'` + am_cv_python_pyexecdir=`echo "$am_cv_python_pyexecdir" | sed "s,^$am__strip_prefix,$PYTHON_EXEC_PREFIX,"` + ;; + *) + case $am_py_exec_prefix in + /usr|/System*) ;; + *) + am_cv_python_pyexecdir=$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages + ;; + esac + ;; + esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_pyexecdir" >&5 +$as_echo "$am_cv_python_pyexecdir" >&6; } + pyexecdir=$am_cv_python_pyexecdir + + + + pkgpyexecdir=\${pyexecdir}/$PACKAGE + + + + fi + + + + if test "$PYTHON" != : ; then + PYTHON_CONFIG="$PYTHON-config" + + if test -x "$PYTHON_CONFIG" + then + PYTHON_INCLUDES=`$PYTHON_CONFIG --includes` + PYTHON_LIB=`$PYTHON_CONFIG --libs` + else + if test -r $PYTHON_EXEC_PREFIX/include/python$PYTHON_VERSION/Python.h + then + PYTHON_INCLUDES=-I$PYTHON_EXEC_PREFIX/include/python$PYTHON_VERSION + else + if test -r $prefix/include/python$PYTHON_VERSION/Python.h + then + PYTHON_INCLUDES=-I$prefix/include/python$PYTHON_VERSION + else + if test -r /usr/include/python$PYTHON_VERSION/Python.h + then + PYTHON_INCLUDES=-I/usr/include/python$PYTHON_VERSION + else + { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find python$PYTHON_VERSION/Python.h, disabling bindings" >&5 +$as_echo "$as_me: Could not find python$PYTHON_VERSION/Python.h, disabling bindings" >&6;} + enable_python=no + fi + fi + fi + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find python interpreter, disabling bindings" >&5 +$as_echo "$as_me: Could not find python interpreter, disabling bindings" >&6;} + enable_python=no + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find python in $enable_python, disabling bindings" >&5 +$as_echo "$as_me: Could not find python in $enable_python, disabling bindings" >&6;} + enable_python=no + fi +fi + if test "$enable_python" = "yes"; then + ENABLE_PYTHON_TRUE= + ENABLE_PYTHON_FALSE='#' +else + ENABLE_PYTHON_TRUE='#' + ENABLE_PYTHON_FALSE= +fi + + + + + +#AC_ARG_ENABLE(python, +#enable_python="yes" +# [ --disable-python disable python bindings for MusE],[ +# case "$enableval" in +# "no") +# enable_python="no" +# ;; +# *) +# AC_MSG_ERROR([must use --enable-python(=yes/no) or --disable-python]) +# ;; +# esac +# ]) +# +#if test "$enable_python" = "yes"; then +# AM_PATH_PYTHON +# PYTHON_INCLUDE_DIR="" +# if test -n "$PYTHON_INCLUDES" ; then +# PYTHON_INCLUDE_DIR=$PYTHON_INCLUDES +# python_bindings="yes" +# else +# python_bindings="no - devel pkg not found" +# fi +#fi +#AM_CONDITIONAL(ENABLE_PYTHON, test "$python_bindings" = "yes") + +################### +### vst plugins ### +################### + +vst_possible=no +VST="no" +@%:@ Check whether --enable-vst was given. +if test "${enable_vst+set}" = set; then : + enableval=$enable_vst; if test x$enable_vst = xyes ; then + vst_requested=yes; + fi + + +fi + + +if test x$vst_requested = xyes ; then + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for FST" >&5 +$as_echo_n "checking for FST... " >&6; } + +if test -n "$PKG_CONFIG"; then + if test -n "$FST_CFLAGS"; then + pkg_cv_FST_CFLAGS="$FST_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libfst\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libfst") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_FST_CFLAGS=`$PKG_CONFIG --cflags "libfst" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi +if test -n "$PKG_CONFIG"; then + if test -n "$FST_LIBS"; then + pkg_cv_FST_LIBS="$FST_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libfst\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libfst") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_FST_LIBS=`$PKG_CONFIG --libs "libfst" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + FST_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "libfst"` + else + FST_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "libfst"` + fi + # Put the nasty error message in config.log where it belongs + echo "$FST_PKG_ERRORS" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + vst_possible=no +elif test $pkg_failed = untried; then + vst_possible=no +else + FST_CFLAGS=$pkg_cv_FST_CFLAGS + FST_LIBS=$pkg_cv_FST_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + vst_possible=yes +fi +fi + +if test x$vst_possible = xyes -a x$vst_requested = xyes ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking support for VST/win plugins" >&5 +$as_echo_n "checking support for VST/win plugins... " >&6; } + VST_CFLAGS="$FST_CFLAGS" + VST_LIBS="$FST_LIBS" + VST="yes" + +$as_echo "@%:@define VST_SUPPORT 1" >>confdefs.h + +fi + + if test x$vst_possible = xyes -a x$vst_requested = xyes; then + VST_SUPPORT_TRUE= + VST_SUPPORT_FALSE='#' +else + VST_SUPPORT_TRUE='#' + VST_SUPPORT_FALSE= +fi + + + +################### +### OSC support ### +################### + +osc_requested=no +LO_LIB_FOUND="no" +OSC="no" +@%:@ Check whether --enable-osc was given. +if test "${enable_osc+set}" = set; then : + enableval=$enable_osc; if test x$enable_osc = xyes ; then + osc_requested=yes; + fi + + +fi + + +if test x$osc_requested = xyes ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking support for OSC" >&5 +$as_echo_n "checking support for OSC... " >&6; } +## AC_CHECK_LIB(lo, lo_send, LO_LIB_FOUND="yes", LO_LIB_FOUND="no") +## PKG_CHECK_MODULES(LO, lo >= 0.2, LO_LIB_FOUND="yes", LO_LIB_FOUND="no") + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LO" >&5 +$as_echo_n "checking for LO... " >&6; } + +if test -n "$PKG_CONFIG"; then + if test -n "$LO_CFLAGS"; then + pkg_cv_LO_CFLAGS="$LO_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"liblo\""; } >&5 + ($PKG_CONFIG --exists --print-errors "liblo") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_LO_CFLAGS=`$PKG_CONFIG --cflags "liblo" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi +if test -n "$PKG_CONFIG"; then + if test -n "$LO_LIBS"; then + pkg_cv_LO_LIBS="$LO_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"liblo\""; } >&5 + ($PKG_CONFIG --exists --print-errors "liblo") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_LO_LIBS=`$PKG_CONFIG --libs "liblo" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + LO_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "liblo"` + else + LO_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "liblo"` + fi + # Put the nasty error message in config.log where it belongs + echo "$LO_PKG_ERRORS" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + LO_LIB_FOUND=no +elif test $pkg_failed = untried; then + LO_LIB_FOUND=no +else + LO_CFLAGS=$pkg_cv_LO_CFLAGS + LO_LIBS=$pkg_cv_LO_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + LO_LIB_FOUND=yes +fi + if test x$LO_LIB_FOUND = xno; then + as_fn_error "Library liblo from The Lightweight OSC Implementation is required" "$LINENO" 5 + fi +fi + +if test x$LO_LIB_FOUND = xyes ; then + LO_CFLAGS="$LO_CFLAGS" + ##LO_LIBS="$LO_LIBS" + LO_LIBS="-llo" + OSC="yes" + + + +$as_echo "@%:@define OSC_SUPPORT 1" >>confdefs.h + +fi + + if test x$LO_LIB_FOUND = xyes; then + OSC_SUPPORT_TRUE= + OSC_SUPPORT_FALSE='#' +else + OSC_SUPPORT_TRUE='#' + OSC_SUPPORT_FALSE= +fi + + +## LO_LIBS="-llo" +## AC_SUBST(LO_CFLAGS) +## AC_SUBST(LO_LIBS) + +## PKG_CHECK_MODULES(LO, lo >= 0.23, +## true, +## AC_MSG_ERROR([need liblo >= 0.23 ]) +## ) + + + +################### +### dssi plugins ### +################### + +dssi_requested=no +## LO_LIB_FOUND="no" +DSSI_H_FOUND="no" +DSSI="no" +@%:@ Check whether --enable-dssi was given. +if test "${enable_dssi+set}" = set; then : + enableval=$enable_dssi; if test x$enable_dssi = xyes ; then + dssi_requested=yes; + fi + + +fi + + + +if test x$dssi_requested = xyes ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking support for DSSI + DSSI-Vst plugins" >&5 +$as_echo_n "checking support for DSSI + DSSI-Vst plugins... " >&6; } + ## AC_CHECK_LIB(lo, lo_send, LO_LIB_FOUND="yes", LO_LIB_FOUND="no") + ## PKG_CHECK_MODULES(LO, lo >= 0.2, LO_LIB_FOUND="yes", LO_LIB_FOUND="no") +## PKG_CHECK_MODULES(LO,liblo, [ LO_LIB_FOUND=yes ], [ LO_LIB_FOUND=no ]) +## if test x$LO_LIB_FOUND = xno; then +## AC_MSG_ERROR([Library liblo from The Lightweight OSC Implementation is required]) +## fi + + ac_fn_c_check_header_mongrel "$LINENO" "dssi.h" "ac_cv_header_dssi_h" "$ac_includes_default" +if test "x$ac_cv_header_dssi_h" = x""yes; then : + DSSI_FOUND="yes" +else + DSSI_FOUND="no" +fi + + + ## PKG_CHECK_MODULES(DSSI [ DSSI_FOUND=yes ], [ DSSI_FOUND=no ]) + if test x$DSSI_FOUND = xno; then + as_fn_error "Header file dssi.h from DSSI (Disposable Soft Synth Interface) is required" "$LINENO" 5 + fi +fi + +## if test x$LO_LIB_FOUND = xyes -a x$DSSI_FOUND = xyes ; then +if test x$DSSI_FOUND = xyes ; then +## LO_CFLAGS="$LO_CFLAGS" + ##LO_LIBS="$LO_LIBS" +## LO_LIBS="-llo" + DSSI="yes" +## AC_SUBST(LO_CFLAGS) +## AC_SUBST(LO_LIBS) + +$as_echo "@%:@define DSSI_SUPPORT 1" >>confdefs.h + +fi + +## AM_CONDITIONAL(DSSI_SUPPORT, test x$LO_LIB_FOUND = xyes -a x$DSSI_FOUND = xyes) + if test x$DSSI_FOUND = xyes; then + DSSI_SUPPORT_TRUE= + DSSI_SUPPORT_FALSE='#' +else + DSSI_SUPPORT_TRUE='#' + DSSI_SUPPORT_FALSE= +fi + + +## LO_LIBS="-llo" +## AC_SUBST(LO_CFLAGS) +## AC_SUBST(LO_LIBS) + +## PKG_CHECK_MODULES(LO, lo >= 0.23, +## true, +## AC_MSG_ERROR([need liblo >= 0.23 ]) +## ) + + + + +###################################### + + + +$as_echo "@%:@define HAVE_AUDIO 1" >>confdefs.h + + if test "yes" = "yes"; then + HAVE_AUDIO_TRUE= + HAVE_AUDIO_FALSE='#' +else + HAVE_AUDIO_TRUE='#' + HAVE_AUDIO_FALSE= +fi + + + + + + +if test -n "$GIVERTCAP"; then + SUIDINSTALL="no" + SUIDBUILD="no" + fi + + +ac_config_files="$ac_config_files Makefile m4/Makefile al/Makefile doc/Makefile xpm/Makefile demos/Makefile grepmidi/Makefile packaging/Makefile muse/Makefile muse/widgets/Makefile muse/master/Makefile muse/midiedit/Makefile muse/arranger/Makefile muse/liste/Makefile muse/driver/Makefile muse/waveedit/Makefile muse/ctrl/Makefile muse/instruments/Makefile muse/mixer/Makefile muse/cliplist/Makefile muse/marker/Makefile muse/mplugins/Makefile muse/remote/Makefile share/Makefile share/drummaps/Makefile share/html/Makefile share/locale/Makefile share/wallpapers/Makefile share/instruments/Makefile share/plugins/Makefile share/templates/Makefile share/pybridge/Makefile share/scripts/Makefile synti/Makefile synti/libsynti/Makefile synti/fluidsynth/Makefile synti/fluid/Makefile synti/organ/Makefile synti/s1/Makefile synti/vam/Makefile synti/deicsonze/Makefile synti/simpledrums/Makefile lib/Makefile lib/synthi/Makefile lib/plugins/Makefile plugins/Makefile plugins/freeverb/Makefile plugins/pandelay/Makefile plugins/doublechorus/Makefile Doxyfile utils/Makefile" + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + test "x$cache_file" != "x/dev/null" && + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + cat confcache >$cache_file + else + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +DEFS=-DHAVE_CONFIG_H + +ac_libobjs= +ac_ltlibobjs= +for ac_i in : $LIB@&t@OBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIB@&t@OBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + + if test -n "$EXEEXT"; then + am__EXEEXT_TRUE= + am__EXEEXT_FALSE='#' +else + am__EXEEXT_TRUE='#' + am__EXEEXT_FALSE= +fi + +if test -z "${INSIDE_GNOME_COMMON_TRUE}" && test -z "${INSIDE_GNOME_COMMON_FALSE}"; then + as_fn_error "conditional \"INSIDE_GNOME_COMMON\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then + as_fn_error "conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then + as_fn_error "conditional \"am__fastdepCXX\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + as_fn_error "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then + as_fn_error "conditional \"am__fastdepCXX\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${ENABLEFLUIDSYNTH_TRUE}" && test -z "${ENABLEFLUIDSYNTH_FALSE}"; then + as_fn_error "conditional \"ENABLEFLUIDSYNTH\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${HAVE_LASH_TRUE}" && test -z "${HAVE_LASH_FALSE}"; then + as_fn_error "conditional \"HAVE_LASH\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${RTCAP_TRUE}" && test -z "${RTCAP_FALSE}"; then + as_fn_error "conditional \"RTCAP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${PCH_TRUE}" && test -z "${PCH_FALSE}"; then + as_fn_error "conditional \"PCH\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${USE_SSE_TRUE}" && test -z "${USE_SSE_FALSE}"; then + as_fn_error "conditional \"USE_SSE\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${ENABLE_PYTHON_TRUE}" && test -z "${ENABLE_PYTHON_FALSE}"; then + as_fn_error "conditional \"ENABLE_PYTHON\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${VST_SUPPORT_TRUE}" && test -z "${VST_SUPPORT_FALSE}"; then + as_fn_error "conditional \"VST_SUPPORT\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${OSC_SUPPORT_TRUE}" && test -z "${OSC_SUPPORT_FALSE}"; then + as_fn_error "conditional \"OSC_SUPPORT\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${DSSI_SUPPORT_TRUE}" && test -z "${DSSI_SUPPORT_FALSE}"; then + as_fn_error "conditional \"DSSI_SUPPORT\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${HAVE_AUDIO_TRUE}" && test -z "${HAVE_AUDIO_FALSE}"; then + as_fn_error "conditional \"HAVE_AUDIO\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi + +: ${CONFIG_STATUS=./config.status} +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false + +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in @%:@( + *posix*) : + set -o posix ;; @%:@( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in @%:@( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +case $0 in @%:@(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +@%:@ as_fn_error ERROR [LINENO LOG_FD] +@%:@ --------------------------------- +@%:@ Output "`basename @S|@0`: error: ERROR" to stderr. If LINENO and LOG_FD are +@%:@ provided, also output the error to LOG_FD, referencing LINENO. Then exit the +@%:@ script with status @S|@?, using 1 if that was 0. +as_fn_error () +{ + as_status=$?; test $as_status -eq 0 && as_status=1 + if test "$3"; then + as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 + fi + $as_echo "$as_me: error: $1" >&2 + as_fn_exit $as_status +} @%:@ as_fn_error + + +@%:@ as_fn_set_status STATUS +@%:@ ----------------------- +@%:@ Set @S|@? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} @%:@ as_fn_set_status + +@%:@ as_fn_exit STATUS +@%:@ ----------------- +@%:@ Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} @%:@ as_fn_exit + +@%:@ as_fn_unset VAR +@%:@ --------------- +@%:@ Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +@%:@ as_fn_append VAR VALUE +@%:@ ---------------------- +@%:@ Append the text in VALUE to the end of the definition contained in VAR. Take +@%:@ advantage of any shell optimizations that allow amortized linear growth over +@%:@ repeated appends, instead of the typical quadratic growth present in naive +@%:@ implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +@%:@ as_fn_arith ARG... +@%:@ ------------------ +@%:@ Perform arithmetic evaluation on the ARGs, and store the result in the +@%:@ global @S|@as_val. Take advantage of shells that can avoid forks. The arguments +@%:@ must be portable across @S|@(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in @%:@((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +@%:@ as_fn_mkdir_p +@%:@ ------------- +@%:@ Create "@S|@as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" + + +} @%:@ as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in @%:@( + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in @%:@(( + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by MusE $as_me 1.1, which was +generated by GNU Autoconf 2.65. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + +case $ac_config_headers in *" +"*) set x $ac_config_headers; shift; ac_config_headers=$*;; +esac + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" +config_headers="$ac_config_headers" +config_commands="$ac_config_commands" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +ac_cs_usage="\ +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. + +Usage: $0 [OPTION]... [TAG]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration commands: +$config_commands + +Report bugs to the package provider." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_version="\\ +MusE config.status 1.1 +configured by $0, generated by GNU Autoconf 2.65, + with options \\"\$ac_cs_config\\" + +Copyright (C) 2009 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +MKDIR_P='$MKDIR_P' +AWK='$AWK' +test -n "\$AWK" || AWK=awk +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_HEADERS " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + as_fn_error "ambiguous option: \`$1' +Try \`$0 --help' for more information.";; + --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) as_fn_error "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +if \$ac_cs_recheck; then + set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../@%:@@%:@ /;s/...$/ @%:@@%:@/;p;x;p;x' <<_ASBOX +@%:@@%:@ Running $as_me. @%:@@%:@ +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# +# INIT-COMMANDS +# +AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" + + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +macro_version='`$ECHO "X$macro_version" | $Xsed -e "$delay_single_quote_subst"`' +macro_revision='`$ECHO "X$macro_revision" | $Xsed -e "$delay_single_quote_subst"`' +enable_shared='`$ECHO "X$enable_shared" | $Xsed -e "$delay_single_quote_subst"`' +enable_static='`$ECHO "X$enable_static" | $Xsed -e "$delay_single_quote_subst"`' +pic_mode='`$ECHO "X$pic_mode" | $Xsed -e "$delay_single_quote_subst"`' +enable_fast_install='`$ECHO "X$enable_fast_install" | $Xsed -e "$delay_single_quote_subst"`' +host_alias='`$ECHO "X$host_alias" | $Xsed -e "$delay_single_quote_subst"`' +host='`$ECHO "X$host" | $Xsed -e "$delay_single_quote_subst"`' +host_os='`$ECHO "X$host_os" | $Xsed -e "$delay_single_quote_subst"`' +build_alias='`$ECHO "X$build_alias" | $Xsed -e "$delay_single_quote_subst"`' +build='`$ECHO "X$build" | $Xsed -e "$delay_single_quote_subst"`' +build_os='`$ECHO "X$build_os" | $Xsed -e "$delay_single_quote_subst"`' +SED='`$ECHO "X$SED" | $Xsed -e "$delay_single_quote_subst"`' +Xsed='`$ECHO "X$Xsed" | $Xsed -e "$delay_single_quote_subst"`' +GREP='`$ECHO "X$GREP" | $Xsed -e "$delay_single_quote_subst"`' +EGREP='`$ECHO "X$EGREP" | $Xsed -e "$delay_single_quote_subst"`' +FGREP='`$ECHO "X$FGREP" | $Xsed -e "$delay_single_quote_subst"`' +LD='`$ECHO "X$LD" | $Xsed -e "$delay_single_quote_subst"`' +NM='`$ECHO "X$NM" | $Xsed -e "$delay_single_quote_subst"`' +LN_S='`$ECHO "X$LN_S" | $Xsed -e "$delay_single_quote_subst"`' +max_cmd_len='`$ECHO "X$max_cmd_len" | $Xsed -e "$delay_single_quote_subst"`' +ac_objext='`$ECHO "X$ac_objext" | $Xsed -e "$delay_single_quote_subst"`' +exeext='`$ECHO "X$exeext" | $Xsed -e "$delay_single_quote_subst"`' +lt_unset='`$ECHO "X$lt_unset" | $Xsed -e "$delay_single_quote_subst"`' +lt_SP2NL='`$ECHO "X$lt_SP2NL" | $Xsed -e "$delay_single_quote_subst"`' +lt_NL2SP='`$ECHO "X$lt_NL2SP" | $Xsed -e "$delay_single_quote_subst"`' +reload_flag='`$ECHO "X$reload_flag" | $Xsed -e "$delay_single_quote_subst"`' +reload_cmds='`$ECHO "X$reload_cmds" | $Xsed -e "$delay_single_quote_subst"`' +OBJDUMP='`$ECHO "X$OBJDUMP" | $Xsed -e "$delay_single_quote_subst"`' +deplibs_check_method='`$ECHO "X$deplibs_check_method" | $Xsed -e "$delay_single_quote_subst"`' +file_magic_cmd='`$ECHO "X$file_magic_cmd" | $Xsed -e "$delay_single_quote_subst"`' +AR='`$ECHO "X$AR" | $Xsed -e "$delay_single_quote_subst"`' +AR_FLAGS='`$ECHO "X$AR_FLAGS" | $Xsed -e "$delay_single_quote_subst"`' +STRIP='`$ECHO "X$STRIP" | $Xsed -e "$delay_single_quote_subst"`' +RANLIB='`$ECHO "X$RANLIB" | $Xsed -e "$delay_single_quote_subst"`' +old_postinstall_cmds='`$ECHO "X$old_postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' +old_postuninstall_cmds='`$ECHO "X$old_postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_cmds='`$ECHO "X$old_archive_cmds" | $Xsed -e "$delay_single_quote_subst"`' +CC='`$ECHO "X$CC" | $Xsed -e "$delay_single_quote_subst"`' +CFLAGS='`$ECHO "X$CFLAGS" | $Xsed -e "$delay_single_quote_subst"`' +compiler='`$ECHO "X$compiler" | $Xsed -e "$delay_single_quote_subst"`' +GCC='`$ECHO "X$GCC" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_pipe='`$ECHO "X$lt_cv_sys_global_symbol_pipe" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_cdecl='`$ECHO "X$lt_cv_sys_global_symbol_to_cdecl" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`' +objdir='`$ECHO "X$objdir" | $Xsed -e "$delay_single_quote_subst"`' +SHELL='`$ECHO "X$SHELL" | $Xsed -e "$delay_single_quote_subst"`' +ECHO='`$ECHO "X$ECHO" | $Xsed -e "$delay_single_quote_subst"`' +MAGIC_CMD='`$ECHO "X$MAGIC_CMD" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_no_builtin_flag='`$ECHO "X$lt_prog_compiler_no_builtin_flag" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_wl='`$ECHO "X$lt_prog_compiler_wl" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_pic='`$ECHO "X$lt_prog_compiler_pic" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_static='`$ECHO "X$lt_prog_compiler_static" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_prog_compiler_c_o='`$ECHO "X$lt_cv_prog_compiler_c_o" | $Xsed -e "$delay_single_quote_subst"`' +need_locks='`$ECHO "X$need_locks" | $Xsed -e "$delay_single_quote_subst"`' +DSYMUTIL='`$ECHO "X$DSYMUTIL" | $Xsed -e "$delay_single_quote_subst"`' +NMEDIT='`$ECHO "X$NMEDIT" | $Xsed -e "$delay_single_quote_subst"`' +LIPO='`$ECHO "X$LIPO" | $Xsed -e "$delay_single_quote_subst"`' +OTOOL='`$ECHO "X$OTOOL" | $Xsed -e "$delay_single_quote_subst"`' +OTOOL64='`$ECHO "X$OTOOL64" | $Xsed -e "$delay_single_quote_subst"`' +libext='`$ECHO "X$libext" | $Xsed -e "$delay_single_quote_subst"`' +shrext_cmds='`$ECHO "X$shrext_cmds" | $Xsed -e "$delay_single_quote_subst"`' +extract_expsyms_cmds='`$ECHO "X$extract_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`' +archive_cmds_need_lc='`$ECHO "X$archive_cmds_need_lc" | $Xsed -e "$delay_single_quote_subst"`' +enable_shared_with_static_runtimes='`$ECHO "X$enable_shared_with_static_runtimes" | $Xsed -e "$delay_single_quote_subst"`' +export_dynamic_flag_spec='`$ECHO "X$export_dynamic_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' +whole_archive_flag_spec='`$ECHO "X$whole_archive_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' +compiler_needs_object='`$ECHO "X$compiler_needs_object" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_from_new_cmds='`$ECHO "X$old_archive_from_new_cmds" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_from_expsyms_cmds='`$ECHO "X$old_archive_from_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`' +archive_cmds='`$ECHO "X$archive_cmds" | $Xsed -e "$delay_single_quote_subst"`' +archive_expsym_cmds='`$ECHO "X$archive_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`' +module_cmds='`$ECHO "X$module_cmds" | $Xsed -e "$delay_single_quote_subst"`' +module_expsym_cmds='`$ECHO "X$module_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`' +with_gnu_ld='`$ECHO "X$with_gnu_ld" | $Xsed -e "$delay_single_quote_subst"`' +allow_undefined_flag='`$ECHO "X$allow_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`' +no_undefined_flag='`$ECHO "X$no_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec='`$ECHO "X$hardcode_libdir_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec_ld='`$ECHO "X$hardcode_libdir_flag_spec_ld" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_separator='`$ECHO "X$hardcode_libdir_separator" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_direct='`$ECHO "X$hardcode_direct" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_direct_absolute='`$ECHO "X$hardcode_direct_absolute" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_minus_L='`$ECHO "X$hardcode_minus_L" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_shlibpath_var='`$ECHO "X$hardcode_shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_automatic='`$ECHO "X$hardcode_automatic" | $Xsed -e "$delay_single_quote_subst"`' +inherit_rpath='`$ECHO "X$inherit_rpath" | $Xsed -e "$delay_single_quote_subst"`' +link_all_deplibs='`$ECHO "X$link_all_deplibs" | $Xsed -e "$delay_single_quote_subst"`' +fix_srcfile_path='`$ECHO "X$fix_srcfile_path" | $Xsed -e "$delay_single_quote_subst"`' +always_export_symbols='`$ECHO "X$always_export_symbols" | $Xsed -e "$delay_single_quote_subst"`' +export_symbols_cmds='`$ECHO "X$export_symbols_cmds" | $Xsed -e "$delay_single_quote_subst"`' +exclude_expsyms='`$ECHO "X$exclude_expsyms" | $Xsed -e "$delay_single_quote_subst"`' +include_expsyms='`$ECHO "X$include_expsyms" | $Xsed -e "$delay_single_quote_subst"`' +prelink_cmds='`$ECHO "X$prelink_cmds" | $Xsed -e "$delay_single_quote_subst"`' +file_list_spec='`$ECHO "X$file_list_spec" | $Xsed -e "$delay_single_quote_subst"`' +variables_saved_for_relink='`$ECHO "X$variables_saved_for_relink" | $Xsed -e "$delay_single_quote_subst"`' +need_lib_prefix='`$ECHO "X$need_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`' +need_version='`$ECHO "X$need_version" | $Xsed -e "$delay_single_quote_subst"`' +version_type='`$ECHO "X$version_type" | $Xsed -e "$delay_single_quote_subst"`' +runpath_var='`$ECHO "X$runpath_var" | $Xsed -e "$delay_single_quote_subst"`' +shlibpath_var='`$ECHO "X$shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`' +shlibpath_overrides_runpath='`$ECHO "X$shlibpath_overrides_runpath" | $Xsed -e "$delay_single_quote_subst"`' +libname_spec='`$ECHO "X$libname_spec" | $Xsed -e "$delay_single_quote_subst"`' +library_names_spec='`$ECHO "X$library_names_spec" | $Xsed -e "$delay_single_quote_subst"`' +soname_spec='`$ECHO "X$soname_spec" | $Xsed -e "$delay_single_quote_subst"`' +postinstall_cmds='`$ECHO "X$postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' +postuninstall_cmds='`$ECHO "X$postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' +finish_cmds='`$ECHO "X$finish_cmds" | $Xsed -e "$delay_single_quote_subst"`' +finish_eval='`$ECHO "X$finish_eval" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_into_libs='`$ECHO "X$hardcode_into_libs" | $Xsed -e "$delay_single_quote_subst"`' +sys_lib_search_path_spec='`$ECHO "X$sys_lib_search_path_spec" | $Xsed -e "$delay_single_quote_subst"`' +sys_lib_dlsearch_path_spec='`$ECHO "X$sys_lib_dlsearch_path_spec" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_action='`$ECHO "X$hardcode_action" | $Xsed -e "$delay_single_quote_subst"`' +enable_dlopen='`$ECHO "X$enable_dlopen" | $Xsed -e "$delay_single_quote_subst"`' +enable_dlopen_self='`$ECHO "X$enable_dlopen_self" | $Xsed -e "$delay_single_quote_subst"`' +enable_dlopen_self_static='`$ECHO "X$enable_dlopen_self_static" | $Xsed -e "$delay_single_quote_subst"`' +old_striplib='`$ECHO "X$old_striplib" | $Xsed -e "$delay_single_quote_subst"`' +striplib='`$ECHO "X$striplib" | $Xsed -e "$delay_single_quote_subst"`' +compiler_lib_search_dirs='`$ECHO "X$compiler_lib_search_dirs" | $Xsed -e "$delay_single_quote_subst"`' +predep_objects='`$ECHO "X$predep_objects" | $Xsed -e "$delay_single_quote_subst"`' +postdep_objects='`$ECHO "X$postdep_objects" | $Xsed -e "$delay_single_quote_subst"`' +predeps='`$ECHO "X$predeps" | $Xsed -e "$delay_single_quote_subst"`' +postdeps='`$ECHO "X$postdeps" | $Xsed -e "$delay_single_quote_subst"`' +compiler_lib_search_path='`$ECHO "X$compiler_lib_search_path" | $Xsed -e "$delay_single_quote_subst"`' +LD_CXX='`$ECHO "X$LD_CXX" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_cmds_CXX='`$ECHO "X$old_archive_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' +compiler_CXX='`$ECHO "X$compiler_CXX" | $Xsed -e "$delay_single_quote_subst"`' +GCC_CXX='`$ECHO "X$GCC_CXX" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "X$lt_prog_compiler_no_builtin_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_wl_CXX='`$ECHO "X$lt_prog_compiler_wl_CXX" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_pic_CXX='`$ECHO "X$lt_prog_compiler_pic_CXX" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_static_CXX='`$ECHO "X$lt_prog_compiler_static_CXX" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_prog_compiler_c_o_CXX='`$ECHO "X$lt_cv_prog_compiler_c_o_CXX" | $Xsed -e "$delay_single_quote_subst"`' +archive_cmds_need_lc_CXX='`$ECHO "X$archive_cmds_need_lc_CXX" | $Xsed -e "$delay_single_quote_subst"`' +enable_shared_with_static_runtimes_CXX='`$ECHO "X$enable_shared_with_static_runtimes_CXX" | $Xsed -e "$delay_single_quote_subst"`' +export_dynamic_flag_spec_CXX='`$ECHO "X$export_dynamic_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`' +whole_archive_flag_spec_CXX='`$ECHO "X$whole_archive_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`' +compiler_needs_object_CXX='`$ECHO "X$compiler_needs_object_CXX" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_from_new_cmds_CXX='`$ECHO "X$old_archive_from_new_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_from_expsyms_cmds_CXX='`$ECHO "X$old_archive_from_expsyms_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' +archive_cmds_CXX='`$ECHO "X$archive_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' +archive_expsym_cmds_CXX='`$ECHO "X$archive_expsym_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' +module_cmds_CXX='`$ECHO "X$module_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' +module_expsym_cmds_CXX='`$ECHO "X$module_expsym_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' +with_gnu_ld_CXX='`$ECHO "X$with_gnu_ld_CXX" | $Xsed -e "$delay_single_quote_subst"`' +allow_undefined_flag_CXX='`$ECHO "X$allow_undefined_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`' +no_undefined_flag_CXX='`$ECHO "X$no_undefined_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec_CXX='`$ECHO "X$hardcode_libdir_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec_ld_CXX='`$ECHO "X$hardcode_libdir_flag_spec_ld_CXX" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_separator_CXX='`$ECHO "X$hardcode_libdir_separator_CXX" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_direct_CXX='`$ECHO "X$hardcode_direct_CXX" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_direct_absolute_CXX='`$ECHO "X$hardcode_direct_absolute_CXX" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_minus_L_CXX='`$ECHO "X$hardcode_minus_L_CXX" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_shlibpath_var_CXX='`$ECHO "X$hardcode_shlibpath_var_CXX" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_automatic_CXX='`$ECHO "X$hardcode_automatic_CXX" | $Xsed -e "$delay_single_quote_subst"`' +inherit_rpath_CXX='`$ECHO "X$inherit_rpath_CXX" | $Xsed -e "$delay_single_quote_subst"`' +link_all_deplibs_CXX='`$ECHO "X$link_all_deplibs_CXX" | $Xsed -e "$delay_single_quote_subst"`' +fix_srcfile_path_CXX='`$ECHO "X$fix_srcfile_path_CXX" | $Xsed -e "$delay_single_quote_subst"`' +always_export_symbols_CXX='`$ECHO "X$always_export_symbols_CXX" | $Xsed -e "$delay_single_quote_subst"`' +export_symbols_cmds_CXX='`$ECHO "X$export_symbols_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' +exclude_expsyms_CXX='`$ECHO "X$exclude_expsyms_CXX" | $Xsed -e "$delay_single_quote_subst"`' +include_expsyms_CXX='`$ECHO "X$include_expsyms_CXX" | $Xsed -e "$delay_single_quote_subst"`' +prelink_cmds_CXX='`$ECHO "X$prelink_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' +file_list_spec_CXX='`$ECHO "X$file_list_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_action_CXX='`$ECHO "X$hardcode_action_CXX" | $Xsed -e "$delay_single_quote_subst"`' +compiler_lib_search_dirs_CXX='`$ECHO "X$compiler_lib_search_dirs_CXX" | $Xsed -e "$delay_single_quote_subst"`' +predep_objects_CXX='`$ECHO "X$predep_objects_CXX" | $Xsed -e "$delay_single_quote_subst"`' +postdep_objects_CXX='`$ECHO "X$postdep_objects_CXX" | $Xsed -e "$delay_single_quote_subst"`' +predeps_CXX='`$ECHO "X$predeps_CXX" | $Xsed -e "$delay_single_quote_subst"`' +postdeps_CXX='`$ECHO "X$postdeps_CXX" | $Xsed -e "$delay_single_quote_subst"`' +compiler_lib_search_path_CXX='`$ECHO "X$compiler_lib_search_path_CXX" | $Xsed -e "$delay_single_quote_subst"`' + +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# Quote evaled strings. +for var in SED \ +GREP \ +EGREP \ +FGREP \ +LD \ +NM \ +LN_S \ +lt_SP2NL \ +lt_NL2SP \ +reload_flag \ +OBJDUMP \ +deplibs_check_method \ +file_magic_cmd \ +AR \ +AR_FLAGS \ +STRIP \ +RANLIB \ +CC \ +CFLAGS \ +compiler \ +lt_cv_sys_global_symbol_pipe \ +lt_cv_sys_global_symbol_to_cdecl \ +lt_cv_sys_global_symbol_to_c_name_address \ +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ +SHELL \ +ECHO \ +lt_prog_compiler_no_builtin_flag \ +lt_prog_compiler_wl \ +lt_prog_compiler_pic \ +lt_prog_compiler_static \ +lt_cv_prog_compiler_c_o \ +need_locks \ +DSYMUTIL \ +NMEDIT \ +LIPO \ +OTOOL \ +OTOOL64 \ +shrext_cmds \ +export_dynamic_flag_spec \ +whole_archive_flag_spec \ +compiler_needs_object \ +with_gnu_ld \ +allow_undefined_flag \ +no_undefined_flag \ +hardcode_libdir_flag_spec \ +hardcode_libdir_flag_spec_ld \ +hardcode_libdir_separator \ +fix_srcfile_path \ +exclude_expsyms \ +include_expsyms \ +file_list_spec \ +variables_saved_for_relink \ +libname_spec \ +library_names_spec \ +soname_spec \ +finish_eval \ +old_striplib \ +striplib \ +compiler_lib_search_dirs \ +predep_objects \ +postdep_objects \ +predeps \ +postdeps \ +compiler_lib_search_path \ +LD_CXX \ +compiler_CXX \ +lt_prog_compiler_no_builtin_flag_CXX \ +lt_prog_compiler_wl_CXX \ +lt_prog_compiler_pic_CXX \ +lt_prog_compiler_static_CXX \ +lt_cv_prog_compiler_c_o_CXX \ +export_dynamic_flag_spec_CXX \ +whole_archive_flag_spec_CXX \ +compiler_needs_object_CXX \ +with_gnu_ld_CXX \ +allow_undefined_flag_CXX \ +no_undefined_flag_CXX \ +hardcode_libdir_flag_spec_CXX \ +hardcode_libdir_flag_spec_ld_CXX \ +hardcode_libdir_separator_CXX \ +fix_srcfile_path_CXX \ +exclude_expsyms_CXX \ +include_expsyms_CXX \ +file_list_spec_CXX \ +compiler_lib_search_dirs_CXX \ +predep_objects_CXX \ +postdep_objects_CXX \ +predeps_CXX \ +postdeps_CXX \ +compiler_lib_search_path_CXX; do + case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in reload_cmds \ +old_postinstall_cmds \ +old_postuninstall_cmds \ +old_archive_cmds \ +extract_expsyms_cmds \ +old_archive_from_new_cmds \ +old_archive_from_expsyms_cmds \ +archive_cmds \ +archive_expsym_cmds \ +module_cmds \ +module_expsym_cmds \ +export_symbols_cmds \ +prelink_cmds \ +postinstall_cmds \ +postuninstall_cmds \ +finish_cmds \ +sys_lib_search_path_spec \ +sys_lib_dlsearch_path_spec \ +old_archive_cmds_CXX \ +old_archive_from_new_cmds_CXX \ +old_archive_from_expsyms_cmds_CXX \ +archive_cmds_CXX \ +archive_expsym_cmds_CXX \ +module_cmds_CXX \ +module_expsym_cmds_CXX \ +export_symbols_cmds_CXX \ +prelink_cmds_CXX; do + case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Fix-up fallback echo if it was mangled by the above quoting rules. +case \$lt_ECHO in +*'\\\$0 --fallback-echo"') lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\$0 --fallback-echo"\$/\$0 --fallback-echo"/'\` + ;; +esac + +ac_aux_dir='$ac_aux_dir' +xsi_shell='$xsi_shell' +lt_shell_append='$lt_shell_append' + +# See if we are running on zsh, and set the options which allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + + + PACKAGE='$PACKAGE' + VERSION='$VERSION' + TIMESTAMP='$TIMESTAMP' + RM='$RM' + ofile='$ofile' + + + + + + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "m4/Makefile") CONFIG_FILES="$CONFIG_FILES m4/Makefile" ;; + "al/Makefile") CONFIG_FILES="$CONFIG_FILES al/Makefile" ;; + "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; + "xpm/Makefile") CONFIG_FILES="$CONFIG_FILES xpm/Makefile" ;; + "demos/Makefile") CONFIG_FILES="$CONFIG_FILES demos/Makefile" ;; + "grepmidi/Makefile") CONFIG_FILES="$CONFIG_FILES grepmidi/Makefile" ;; + "packaging/Makefile") CONFIG_FILES="$CONFIG_FILES packaging/Makefile" ;; + "muse/Makefile") CONFIG_FILES="$CONFIG_FILES muse/Makefile" ;; + "muse/widgets/Makefile") CONFIG_FILES="$CONFIG_FILES muse/widgets/Makefile" ;; + "muse/master/Makefile") CONFIG_FILES="$CONFIG_FILES muse/master/Makefile" ;; + "muse/midiedit/Makefile") CONFIG_FILES="$CONFIG_FILES muse/midiedit/Makefile" ;; + "muse/arranger/Makefile") CONFIG_FILES="$CONFIG_FILES muse/arranger/Makefile" ;; + "muse/liste/Makefile") CONFIG_FILES="$CONFIG_FILES muse/liste/Makefile" ;; + "muse/driver/Makefile") CONFIG_FILES="$CONFIG_FILES muse/driver/Makefile" ;; + "muse/waveedit/Makefile") CONFIG_FILES="$CONFIG_FILES muse/waveedit/Makefile" ;; + "muse/ctrl/Makefile") CONFIG_FILES="$CONFIG_FILES muse/ctrl/Makefile" ;; + "muse/instruments/Makefile") CONFIG_FILES="$CONFIG_FILES muse/instruments/Makefile" ;; + "muse/mixer/Makefile") CONFIG_FILES="$CONFIG_FILES muse/mixer/Makefile" ;; + "muse/cliplist/Makefile") CONFIG_FILES="$CONFIG_FILES muse/cliplist/Makefile" ;; + "muse/marker/Makefile") CONFIG_FILES="$CONFIG_FILES muse/marker/Makefile" ;; + "muse/mplugins/Makefile") CONFIG_FILES="$CONFIG_FILES muse/mplugins/Makefile" ;; + "muse/remote/Makefile") CONFIG_FILES="$CONFIG_FILES muse/remote/Makefile" ;; + "share/Makefile") CONFIG_FILES="$CONFIG_FILES share/Makefile" ;; + "share/drummaps/Makefile") CONFIG_FILES="$CONFIG_FILES share/drummaps/Makefile" ;; + "share/html/Makefile") CONFIG_FILES="$CONFIG_FILES share/html/Makefile" ;; + "share/locale/Makefile") CONFIG_FILES="$CONFIG_FILES share/locale/Makefile" ;; + "share/wallpapers/Makefile") CONFIG_FILES="$CONFIG_FILES share/wallpapers/Makefile" ;; + "share/instruments/Makefile") CONFIG_FILES="$CONFIG_FILES share/instruments/Makefile" ;; + "share/plugins/Makefile") CONFIG_FILES="$CONFIG_FILES share/plugins/Makefile" ;; + "share/templates/Makefile") CONFIG_FILES="$CONFIG_FILES share/templates/Makefile" ;; + "share/pybridge/Makefile") CONFIG_FILES="$CONFIG_FILES share/pybridge/Makefile" ;; + "share/scripts/Makefile") CONFIG_FILES="$CONFIG_FILES share/scripts/Makefile" ;; + "synti/Makefile") CONFIG_FILES="$CONFIG_FILES synti/Makefile" ;; + "synti/libsynti/Makefile") CONFIG_FILES="$CONFIG_FILES synti/libsynti/Makefile" ;; + "synti/fluidsynth/Makefile") CONFIG_FILES="$CONFIG_FILES synti/fluidsynth/Makefile" ;; + "synti/fluid/Makefile") CONFIG_FILES="$CONFIG_FILES synti/fluid/Makefile" ;; + "synti/organ/Makefile") CONFIG_FILES="$CONFIG_FILES synti/organ/Makefile" ;; + "synti/s1/Makefile") CONFIG_FILES="$CONFIG_FILES synti/s1/Makefile" ;; + "synti/vam/Makefile") CONFIG_FILES="$CONFIG_FILES synti/vam/Makefile" ;; + "synti/deicsonze/Makefile") CONFIG_FILES="$CONFIG_FILES synti/deicsonze/Makefile" ;; + "synti/simpledrums/Makefile") CONFIG_FILES="$CONFIG_FILES synti/simpledrums/Makefile" ;; + "lib/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;; + "lib/synthi/Makefile") CONFIG_FILES="$CONFIG_FILES lib/synthi/Makefile" ;; + "lib/plugins/Makefile") CONFIG_FILES="$CONFIG_FILES lib/plugins/Makefile" ;; + "plugins/Makefile") CONFIG_FILES="$CONFIG_FILES plugins/Makefile" ;; + "plugins/freeverb/Makefile") CONFIG_FILES="$CONFIG_FILES plugins/freeverb/Makefile" ;; + "plugins/pandelay/Makefile") CONFIG_FILES="$CONFIG_FILES plugins/pandelay/Makefile" ;; + "plugins/doublechorus/Makefile") CONFIG_FILES="$CONFIG_FILES plugins/doublechorus/Makefile" ;; + "Doxyfile") CONFIG_FILES="$CONFIG_FILES Doxyfile" ;; + "utils/Makefile") CONFIG_FILES="$CONFIG_FILES utils/Makefile" ;; + + *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= + trap 'exit_status=$? + { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -n "$tmp" && test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5 + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$tmp/subs1.awk" && +_ACEOF + + +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ + || as_fn_error "could not setup config files machinery" "$LINENO" 5 +_ACEOF + +# VPATH may cause trouble with some makes, so we remove $(srcdir), +# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=/{ +s/:*\$(srcdir):*/:/ +s/:*\${srcdir}:*/:/ +s/:*@srcdir@:*/:/ +s/^\([^=]*=[ ]*\):*/\1/ +s/:*$// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" + +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$tmp/defines.awk" <<\_ACAWK || +BEGIN { +_ACEOF + +# Transform confdefs.h into an awk script `defines.awk', embedded as +# here-document in config.status, that substitutes the proper values into +# config.h.in to produce config.h. + +# Create a delimiter string that does not exist in confdefs.h, to ease +# handling of long lines. +ac_delim='%!_!# ' +for ac_last_try in false false :; do + ac_t=`sed -n "/$ac_delim/p" confdefs.h` + if test -z "$ac_t"; then + break + elif $ac_last_try; then + as_fn_error "could not make $CONFIG_HEADERS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +# For the awk script, D is an array of macro values keyed by name, +# likewise P contains macro parameters if any. Preserve backslash +# newline sequences. + +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +sed -n ' +s/.\{148\}/&'"$ac_delim"'/g +t rset +:rset +s/^[ ]*#[ ]*define[ ][ ]*/ / +t def +d +:def +s/\\$// +t bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3"/p +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p +d +:bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3\\\\\\n"\\/p +t cont +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p +t cont +d +:cont +n +s/.\{148\}/&'"$ac_delim"'/g +t clear +:clear +s/\\$// +t bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/"/p +d +:bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p +b cont +' >$CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { + line = \$ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + as_fn_error "could not setup config headers machinery" "$LINENO" 5 +fi # test -n "$CONFIG_HEADERS" + + +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$tmp/stdin" \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir="$ac_dir"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + esac +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined." >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined." >&2;} + + rm -f "$tmp/stdin" + case $ac_file in + -) cat "$tmp/out" && rm -f "$tmp/out";; + *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; + esac \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 + ;; + :H) + # + # CONFIG_HEADER + # + if test x"$ac_file" != x-; then + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" + } >"$tmp/config.h" \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 + if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} + else + rm -f "$ac_file" + mv "$tmp/config.h" "$ac_file" \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 + fi + else + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error "could not create -" "$LINENO" 5 + fi +# Compute "$ac_file"'s index in $config_headers. +_am_arg="$ac_file" +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || +$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$_am_arg" : 'X\(//\)[^/]' \| \ + X"$_am_arg" : 'X\(//\)$' \| \ + X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$_am_arg" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'`/stamp-h$_am_stamp_count + ;; + + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "depfiles":C) test x"$AMDEP_TRUE" != x"" || { + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir=$dirpart/$fdir; as_fn_mkdir_p + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} + ;; + "libtool":C) + + # See if we are running on zsh, and set the options which allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + + cfgfile="${ofile}T" + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL + +# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008 Free Software Foundation, Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is part of GNU Libtool. +# +# GNU Libtool 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. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, or +# obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + +# The names of the tagged configurations supported by this script. +available_tags="CXX " + +# ### BEGIN LIBTOOL CONFIG + +# Which release of libtool.m4 was used? +macro_version=$macro_version +macro_revision=$macro_revision + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# What type of objects to build. +pic_mode=$pic_mode + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# The host system. +host_alias=$host_alias +host=$host +host_os=$host_os + +# The build system. +build_alias=$build_alias +build=$build +build_os=$build_os + +# A sed program that does not truncate output. +SED=$lt_SED + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="\$SED -e 1s/^X//" + +# A grep program that handles long lines. +GREP=$lt_GREP + +# An ERE matcher. +EGREP=$lt_EGREP + +# A literal string matcher. +FGREP=$lt_FGREP + +# A BSD- or MS-compatible name lister. +NM=$lt_NM + +# Whether we need soft or hard links. +LN_S=$lt_LN_S + +# What is the maximum length of a command? +max_cmd_len=$max_cmd_len + +# Object file suffix (normally "o"). +objext=$ac_objext + +# Executable file suffix (normally ""). +exeext=$exeext + +# whether the shell understands "unset". +lt_unset=$lt_unset + +# turn spaces into newlines. +SP2NL=$lt_lt_SP2NL + +# turn newlines into spaces. +NL2SP=$lt_lt_NL2SP + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# An object symbol dumper. +OBJDUMP=$lt_OBJDUMP + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method == "file_magic". +file_magic_cmd=$lt_file_magic_cmd + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# A symbol stripping program. +STRIP=$lt_STRIP + +# Commands used to install an old-style archive. +RANLIB=$lt_RANLIB +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# A C compiler. +LTCC=$lt_CC + +# LTCC compiler flags. +LTCFLAGS=$lt_CFLAGS + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration. +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair. +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# Transform the output of nm in a C name address pair when lib prefix is needed. +global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# An echo program that does not interpret backslashes. +ECHO=$lt_ECHO + +# Used to examine libraries when file_magic_cmd begins with "file". +MAGIC_CMD=$MAGIC_CMD + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# Tool to manipulate archived DWARF debug symbol files on Mac OS X. +DSYMUTIL=$lt_DSYMUTIL + +# Tool to change global to local symbols on Mac OS X. +NMEDIT=$lt_NMEDIT + +# Tool to manipulate fat objects and archives on Mac OS X. +LIPO=$lt_LIPO + +# ldd/readelf like tool for Mach-O binaries on Mac OS X. +OTOOL=$lt_OTOOL + +# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. +OTOOL64=$lt_OTOOL64 + +# Old archive suffix (normally "a"). +libext=$libext + +# Shared library suffix (normally ".so"). +shrext_cmds=$lt_shrext_cmds + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at link time. +variables_saved_for_relink=$lt_variables_saved_for_relink + +# Do we need the "lib" prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Library versioning type. +version_type=$version_type + +# Shared library runtime path variable. +runpath_var=$runpath_var + +# Shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Command to use after installation of a shared archive. +postinstall_cmds=$lt_postinstall_cmds + +# Command to use after uninstallation of a shared archive. +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# As "finish_cmds", except a single script fragment to be evaled but +# not shown. +finish_eval=$lt_finish_eval + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Compile-time system search path for libraries. +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries. +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + + +# The linker used to build libraries. +LD=$lt_LD + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds + +# A language specific compiler. +CC=$lt_compiler + +# Is the compiler the GNU compiler? +with_gcc=$GCC + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds +archive_expsym_cmds=$lt_archive_expsym_cmds + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds +module_expsym_cmds=$lt_module_expsym_cmds + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec + +# If ld is used when linking, flag to hardcode \$libdir into a binary +# during linking. This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \${shlibpath_var} if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path=$lt_fix_srcfile_path + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action + +# The directories searched by this compiler when creating a shared library. +compiler_lib_search_dirs=$lt_compiler_lib_search_dirs + +# Dependencies to place before and after the objects being linked to +# create a shared library. +predep_objects=$lt_predep_objects +postdep_objects=$lt_postdep_objects +predeps=$lt_predeps +postdeps=$lt_postdeps + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path + +# ### END LIBTOOL CONFIG + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + +ltmain="$ac_aux_dir/ltmain.sh" + + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + case $xsi_shell in + yes) + cat << \_LT_EOF >> "$cfgfile" + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac +} + +# func_basename file +func_basename () +{ + func_basename_result="${1##*/}" +} + +# func_dirname_and_basename file append nondir_replacement +# perform func_basename and func_dirname in a single function +# call: +# dirname: Compute the dirname of FILE. If nonempty, +# add APPEND to the result, otherwise set result +# to NONDIR_REPLACEMENT. +# value returned in "$func_dirname_result" +# basename: Compute filename of FILE. +# value retuned in "$func_basename_result" +# Implementation must be kept synchronized with func_dirname +# and func_basename. For efficiency, we do not delegate to +# those functions but instead duplicate the functionality here. +func_dirname_and_basename () +{ + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac + func_basename_result="${1##*/}" +} + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +func_stripname () +{ + # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are + # positional parameters, so assign one to ordinary parameter first. + func_stripname_result=${3} + func_stripname_result=${func_stripname_result#"${1}"} + func_stripname_result=${func_stripname_result%"${2}"} +} + +# func_opt_split +func_opt_split () +{ + func_opt_split_opt=${1%%=*} + func_opt_split_arg=${1#*=} +} + +# func_lo2o object +func_lo2o () +{ + case ${1} in + *.lo) func_lo2o_result=${1%.lo}.${objext} ;; + *) func_lo2o_result=${1} ;; + esac +} + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=${1%.*}.lo +} + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=$(( $* )) +} + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=${#1} +} + +_LT_EOF + ;; + *) # Bourne compatible functions. + cat << \_LT_EOF >> "$cfgfile" + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + # Extract subdirectory from the argument. + func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` + if test "X$func_dirname_result" = "X${1}"; then + func_dirname_result="${3}" + else + func_dirname_result="$func_dirname_result${2}" + fi +} + +# func_basename file +func_basename () +{ + func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` +} + + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +# func_strip_suffix prefix name +func_stripname () +{ + case ${2} in + .*) func_stripname_result=`$ECHO "X${3}" \ + | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;; + *) func_stripname_result=`$ECHO "X${3}" \ + | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;; + esac +} + +# sed scripts: +my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q' +my_sed_long_arg='1s/^-[^=]*=//' + +# func_opt_split +func_opt_split () +{ + func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"` + func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"` +} + +# func_lo2o object +func_lo2o () +{ + func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"` +} + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[^.]*$/.lo/'` +} + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=`expr "$@"` +} + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` +} + +_LT_EOF +esac + +case $lt_shell_append in + yes) + cat << \_LT_EOF >> "$cfgfile" + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "$1+=\$2" +} +_LT_EOF + ;; + *) + cat << \_LT_EOF >> "$cfgfile" + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "$1=\$$1\$2" +} + +_LT_EOF + ;; + esac + + + sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" + + + cat <<_LT_EOF >> "$ofile" + +# ### BEGIN LIBTOOL TAG CONFIG: CXX + +# The linker used to build libraries. +LD=$lt_LD_CXX + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds_CXX + +# A language specific compiler. +CC=$lt_compiler_CXX + +# Is the compiler the GNU compiler? +with_gcc=$GCC_CXX + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl_CXX + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic_CXX + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static_CXX + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc_CXX + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object_CXX + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds_CXX +archive_expsym_cmds=$lt_archive_expsym_cmds_CXX + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds_CXX +module_expsym_cmds=$lt_module_expsym_cmds_CXX + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld_CXX + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag_CXX + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag_CXX + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX + +# If ld is used when linking, flag to hardcode \$libdir into a binary +# during linking. This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct_CXX + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \${shlibpath_var} if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute_CXX + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L_CXX + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic_CXX + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath_CXX + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs_CXX + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path=$lt_fix_srcfile_path_CXX + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols_CXX + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds_CXX + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms_CXX + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms_CXX + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds_CXX + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec_CXX + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action_CXX + +# The directories searched by this compiler when creating a shared library. +compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX + +# Dependencies to place before and after the objects being linked to +# create a shared library. +predep_objects=$lt_predep_objects_CXX +postdep_objects=$lt_postdep_objects_CXX +predeps=$lt_predeps_CXX +postdeps=$lt_postdeps_CXX + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path_CXX + +# ### END LIBTOOL TAG CONFIG: CXX +_LT_EOF + + ;; + + esac +done # for ac_tag + + +as_fn_exit 0 +_ACEOF +ac_clean_files=$ac_clean_files_save + +test $ac_write_fail = 0 || + as_fn_error "write failure creating $CONFIG_STATUS" "$LINENO" 5 + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || as_fn_exit $? +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} +fi + + +######## Show a configuration report ######## +if test -n "$JADE"; then + jade_report="$JADE"; +else + jade_report="not present" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: + QTDIR $QTDIR + QTDIR_INC $QTDIR_INC + QTDIR_BIN $QTDIR_BIN + QT_LIBS $QT_LIBS + + MusE configured + + LASH support: $LASH_FOUND + OSC support: $OSC + DSSI support: $DSSI + FluidSynth: $muse_enable_fluidlib + + jade: $jade_report + doxygen: $DOXYGEN + graphviz: $DOT + perl: $PERL + treeviews in doxygen + html output: $report_doxy_treeview + + C++ compiler: $CXX + optimizing: $report_optimise + debug: $report_debug + optimise for arch: $report_march + SSE optimizations $report_sse + python bindings: $enable_python + + installation prefix: $prefix + + Deprecated: + --------------------------------------------------- + using rtcap: $report_rtcap + setuid root install: $SUIDINSTALL + setuid root build: $SUIDBUILD + VST/win support: $VST + +" >&5 +$as_echo "$as_me: + QTDIR $QTDIR + QTDIR_INC $QTDIR_INC + QTDIR_BIN $QTDIR_BIN + QT_LIBS $QT_LIBS + + MusE configured + + LASH support: $LASH_FOUND + OSC support: $OSC + DSSI support: $DSSI + FluidSynth: $muse_enable_fluidlib + + jade: $jade_report + doxygen: $DOXYGEN + graphviz: $DOT + perl: $PERL + treeviews in doxygen + html output: $report_doxy_treeview + + C++ compiler: $CXX + optimizing: $report_optimise + debug: $report_debug + optimise for arch: $report_march + SSE optimizations $report_sse + python bindings: $enable_python + + installation prefix: $prefix + + Deprecated: + --------------------------------------------------- + using rtcap: $report_rtcap + setuid root install: $SUIDINSTALL + setuid root build: $SUIDBUILD + VST/win support: $VST + +" >&6;} + diff --git a/muse2/autom4te.cache/output.2 b/muse2/autom4te.cache/output.2 new file mode 100644 index 00000000..f9b346c9 --- /dev/null +++ b/muse2/autom4te.cache/output.2 @@ -0,0 +1,20639 @@ +@%:@! /bin/sh +@%:@ Guess values for system-dependent variables and create Makefiles. +@%:@ Generated by GNU Autoconf 2.65 for MusE 1.1. +@%:@ +@%:@ +@%:@ Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +@%:@ 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +@%:@ Inc. +@%:@ +@%:@ +@%:@ This configure script is free software; the Free Software Foundation +@%:@ gives unlimited permission to copy, distribute and modify it. +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in @%:@( + *posix*) : + set -o posix ;; @%:@( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in @%:@( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +case $0 in @%:@(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in @%:@( + *posix*) : + set -o posix ;; @%:@( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in @%:@( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : + # We cannot yet assume a decent shell, so we have to provide a + # neutralization value for shells without unset; and this also + # works around shells that cannot unset nonexistent variables. + BASH_ENV=/dev/null + ENV=/dev/null + (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, +$0: including any error possibly output before this +$0: message. Then install a modern shell, or manually run +$0: the script under such a shell if you do have one." + fi + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +@%:@ as_fn_unset VAR +@%:@ --------------- +@%:@ Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +@%:@ as_fn_set_status STATUS +@%:@ ----------------------- +@%:@ Set @S|@? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} @%:@ as_fn_set_status + +@%:@ as_fn_exit STATUS +@%:@ ----------------- +@%:@ Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} @%:@ as_fn_exit + +@%:@ as_fn_mkdir_p +@%:@ ------------- +@%:@ Create "@S|@as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" + + +} @%:@ as_fn_mkdir_p +@%:@ as_fn_append VAR VALUE +@%:@ ---------------------- +@%:@ Append the text in VALUE to the end of the definition contained in VAR. Take +@%:@ advantage of any shell optimizations that allow amortized linear growth over +@%:@ repeated appends, instead of the typical quadratic growth present in naive +@%:@ implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +@%:@ as_fn_arith ARG... +@%:@ ------------------ +@%:@ Perform arithmetic evaluation on the ARGs, and store the result in the +@%:@ global @S|@as_val. Take advantage of shells that can avoid forks. The arguments +@%:@ must be portable across @S|@(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +@%:@ as_fn_error ERROR [LINENO LOG_FD] +@%:@ --------------------------------- +@%:@ Output "`basename @S|@0`: error: ERROR" to stderr. If LINENO and LOG_FD are +@%:@ provided, also output the error to LOG_FD, referencing LINENO. Then exit the +@%:@ script with status @S|@?, using 1 if that was 0. +as_fn_error () +{ + as_status=$?; test $as_status -eq 0 && as_status=1 + if test "$3"; then + as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 + fi + $as_echo "$as_me: error: $1" >&2 + as_fn_exit $as_status +} @%:@ as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + + + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in @%:@((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in @%:@( + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in @%:@(( + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + + +# Check that we are running under the correct shell. +SHELL=${CONFIG_SHELL-/bin/sh} + +case X$lt_ECHO in +X*--fallback-echo) + # Remove one level of quotation (which was required for Make). + ECHO=`echo "$lt_ECHO" | sed 's,\\\\\$\\$0,'$0','` + ;; +esac + +ECHO=${lt_ECHO-echo} +if test "X$1" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift +elif test "X$1" = X--fallback-echo; then + # Avoid inline document here, it may be left over + : +elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then + # Yippee, $ECHO works! + : +else + # Restart under the correct shell. + exec $SHELL "$0" --no-reexec ${1+"$@"} +fi + +if test "X$1" = X--fallback-echo; then + # used as fallback echo + shift + cat <<_LT_EOF +$* +_LT_EOF + exit 0 +fi + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +if test -z "$lt_ECHO"; then + if test "X${echo_test_string+set}" != Xset; then + # find a string as large as possible, as long as the shell can cope with it + for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do + # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... + if { echo_test_string=`eval $cmd`; } 2>/dev/null && + { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null + then + break + fi + done + fi + + if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && + echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + : + else + # The Solaris, AIX, and Digital Unix default echo programs unquote + # backslashes. This makes it impossible to quote backslashes using + # echo "$something" | sed 's/\\/\\\\/g' + # + # So, first we look for a working echo in the user's PATH. + + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for dir in $PATH /usr/ucb; do + IFS="$lt_save_ifs" + if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && + test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + ECHO="$dir/echo" + break + fi + done + IFS="$lt_save_ifs" + + if test "X$ECHO" = Xecho; then + # We didn't find a better echo, so look for alternatives. + if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' && + echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # This shell has a builtin print -r that does the trick. + ECHO='print -r' + elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } && + test "X$CONFIG_SHELL" != X/bin/ksh; then + # If we have ksh, try running configure again with it. + ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} + export ORIGINAL_CONFIG_SHELL + CONFIG_SHELL=/bin/ksh + export CONFIG_SHELL + exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"} + else + # Try using printf. + ECHO='printf %s\n' + if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && + echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # Cool, printf works + : + elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL + export CONFIG_SHELL + SHELL="$CONFIG_SHELL" + export SHELL + ECHO="$CONFIG_SHELL $0 --fallback-echo" + elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + ECHO="$CONFIG_SHELL $0 --fallback-echo" + else + # maybe with a smaller string... + prev=: + + for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do + if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null + then + break + fi + prev="$cmd" + done + + if test "$prev" != 'sed 50q "$0"'; then + echo_test_string=`eval $prev` + export echo_test_string + exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"} + else + # Oops. We lost completely, so just stick with echo. + ECHO=echo + fi + fi + fi + fi + fi +fi + +# Copy echo and quote the copy suitably for passing to libtool from +# the Makefile, instead of quoting the original, which is used later. +lt_ECHO=$ECHO +if test "X$lt_ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then + lt_ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo" +fi + + + + +test -n "$DJDIR" || exec 7<&0 &1 + +# Name of the host. +# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIB@&t@OBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= + +# Identity of this package. +PACKAGE_NAME='MusE' +PACKAGE_TARNAME='muse' +PACKAGE_VERSION='1.1' +PACKAGE_STRING='MusE 1.1' +PACKAGE_BUGREPORT='' +PACKAGE_URL='' + +ac_unique_file="muse/app.cpp" +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif +#ifdef STDC_HEADERS +# include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include +# endif +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_INTTYPES_H +# include +#endif +#ifdef HAVE_STDINT_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#endif" + +ac_subst_vars='am__EXEEXT_FALSE +am__EXEEXT_TRUE +LTLIBOBJS +LIB@&t@OBJS +QTDIR_BIN +QT_LIBS +QTDIR_INC +MUSECXXFLAGS +HAVE_AUDIO_FALSE +HAVE_AUDIO_TRUE +DSSI_SUPPORT_FALSE +DSSI_SUPPORT_TRUE +OSC_SUPPORT_FALSE +OSC_SUPPORT_TRUE +LO_LIBS +LO_CFLAGS +VST_SUPPORT_FALSE +VST_SUPPORT_TRUE +FST_LIBS +FST_CFLAGS +PYTHON_LIB +PYTHON_INCLUDES +ENABLE_PYTHON_FALSE +ENABLE_PYTHON_TRUE +pkgpyexecdir +pyexecdir +pkgpythondir +pythondir +PYTHON_PLATFORM +PYTHON_EXEC_PREFIX +PYTHON_PREFIX +PYTHON_VERSION +PYTHON +USE_SSE_FALSE +USE_SSE_TRUE +USE_SSE +PCH_FALSE +PCH_TRUE +PCH +DOXYGEN_TREEVIEW +SUIDBUILD +SUIDINSTALL +GIVERTCAP +RTCAP_FALSE +RTCAP_TRUE +HAVE_LASH_FALSE +HAVE_LASH_TRUE +LASH_LIBS +LASH_CFLAGS +JACK_LIBS +JACK_CFLAGS +UUID_LIBS +UUID_CFLAGS +SAMPLERATE_LIBS +SAMPLERATE_CFLAGS +SNDFILE_LIBS +SNDFILE_CFLAGS +synth_fluid +synth_fluidsynth +FLUIDSYNTHDIRS +Fluidsynth_LIBS +Fluidsynth_CFLAGS +PKG_CONFIG +ENABLEFLUIDSYNTH_FALSE +ENABLEFLUIDSYNTH_TRUE +ALSA_LIBS +ALSA_CFLAGS +X_EXTRA_LIBS +X_LIBS +X_PRE_LIBS +X_CFLAGS +XMKMF +PERL +DOTPATH +HAVEDOT +DOT +DOXYGEN +DOCBOOKTARGETS +DOCBOOKSTYLE +have_docbook +NSGMLS +JADE +CXXCPP +CPP +OTOOL64 +OTOOL +LIPO +NMEDIT +DSYMUTIL +lt_ECHO +RANLIB +AR +OBJDUMP +LN_S +NM +ac_ct_DUMPBIN +DUMPBIN +LD +FGREP +EGREP +GREP +SED +am__fastdepCC_FALSE +am__fastdepCC_TRUE +CCDEPMODE +ac_ct_CC +CFLAGS +CC +host_os +host_vendor +host_cpu +host +build_os +build_vendor +build_cpu +build +LIBTOOL +am__fastdepCXX_FALSE +am__fastdepCXX_TRUE +CXXDEPMODE +AMDEPBACKSLASH +AMDEP_FALSE +AMDEP_TRUE +am__quote +am__include +DEPDIR +OBJEXT +EXEEXT +ac_ct_CXX +CPPFLAGS +LDFLAGS +CXXFLAGS +CXX +INSIDE_GNOME_COMMON_FALSE +INSIDE_GNOME_COMMON_TRUE +am__untar +am__tar +AMTAR +am__leading_dot +SET_MAKE +AWK +mkdir_p +MKDIR_P +INSTALL_STRIP_PROGRAM +STRIP +install_sh +MAKEINFO +AUTOHEADER +AUTOMAKE +AUTOCONF +ACLOCAL +VERSION +PACKAGE +CYGPATH_W +am__isrc +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' +ac_subst_files='' +ac_user_opts=' +enable_option_checking +enable_dependency_tracking +enable_shared +enable_static +with_pic +enable_fast_install +with_gnu_ld +enable_libtool_lock +with_docbook_stylesheets +with_x +with_alsa_prefix +with_alsa_inc_prefix +enable_alsatest +enable_fluidsynth +enable_lash +enable_rtcap +enable_suid_install +enable_suid_build +enable_doxy_treeview +enable_optimize +enable_debug +enable_pch +enable_arch +enable_sse +with_python +enable_vst +enable_osc +enable_dssi +' + ac_precious_vars='build_alias +host_alias +target_alias +CXX +CXXFLAGS +LDFLAGS +LIBS +CPPFLAGS +CCC +CC +CFLAGS +CPP +CXXCPP +DOXYGEN +DOT +PERL +XMKMF +PKG_CONFIG +Fluidsynth_CFLAGS +Fluidsynth_LIBS +SNDFILE_CFLAGS +SNDFILE_LIBS +SAMPLERATE_CFLAGS +SAMPLERATE_LIBS +JACK_CFLAGS +JACK_LIBS +LASH_CFLAGS +LASH_LIBS +FST_CFLAGS +FST_LIBS +LO_CFLAGS +LO_LIBS' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *) ac_optarg=yes ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; + + -without-* | --without-*) + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) as_fn_error "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information." + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error "invalid variable name: \`$ac_envvar'" ;; + esac + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + as_fn_error "missing argument to $ac_option" +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac +fi + +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir +do + eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + as_fn_error "expected an absolute directory name for --$ac_var: $ac_val" +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. + If a cross compiler is detected then cross compile mode will be used." >&2 + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + as_fn_error "working directory cannot be determined" +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + as_fn_error "pwd does not report name of working directory" + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + as_fn_error "cannot find sources ($ac_unique_file) in $srcdir" +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error "$ac_msg" + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures MusE 1.1 to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + @<:@@S|@ac_default_prefix@:>@ + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + @<:@PREFIX@:>@ + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root @<:@DATAROOTDIR/doc/muse@:>@ + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF + +Program names: + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM run sed PROGRAM on installed program names + +X features: + --x-includes=DIR X include files are in DIR + --x-libraries=DIR X library files are in DIR + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of MusE 1.1:";; + esac + cat <<\_ACEOF + +Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors + --enable-shared@<:@=PKGS@:>@ build shared libraries @<:@default=yes@:>@ + --enable-static@<:@=PKGS@:>@ build static libraries @<:@default=yes@:>@ + --enable-fast-install@<:@=PKGS@:>@ + optimize for fast installation @<:@default=yes@:>@ + --disable-libtool-lock avoid locking (might break parallel builds) + --disable-alsatest do not try to compile and run a test alsa program + --disable-fluidsynth disable fluidsynth softsynth plugin + --enable-lash enable LASH support + --enable-rtcap (deprecated) use Tommi Ilmonen's "givertcap" to give + realtime capabilities + --enable-suid-install (deprecated) install MusE setuid root (with kernel 2.6, use realtime-lsm instead) + --enable-suid-build (deprecated) build MusE setuid root(with kernel 2.6, use realtime-lsm instead) + --disable-doxy-treeview stop Doxygen from generating java-ified + treeview menus in its HTML output + --enable-optimize ask the compiler for its best optimizations (possibly only i386) + --enable-debug disable optimizations + --enable-pch enable precompiled headers (gcc 3.4 required) + --enable-arch=ARCH use -march=ARCH and -mtune=ARCH argument to CXX + choose from any supported gcc architecture such as: + 386, 486, 586, 686, pentium, pentiumpro, k6, athlon... + --enable-sse enable SSE optimizations + --enable-vst (deprecated, use dssi) build VST/win support. (disabled by default) + --enable-osc build OSC support. (disabled by default) + --enable-dssi is also recommended! + --enable-dssi build DSSI + DSSI-Vst support. (disabled by default) + --enable-osc is also recommended! + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-pic try to use only PIC/non-PIC objects @<:@default=use + both@:>@ + --with-gnu-ld assume the C compiler uses GNU ld @<:@default=no@:>@ + --with-docbook-stylesheets=DIR use DIR/html/docbook.dsl + --with-x use the X Window System + --with-alsa-prefix=PFX prefix where alsa library is installed (optional) + --with-alsa-inc-prefix=PFX prefix where include libraries are (optional) + --enable-python Build python bindings (on) + +Some influential environment variables: + CXX C++ compiler command + CXXFLAGS C++ compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if + you have headers in a nonstandard directory + CC C compiler command + CFLAGS C compiler flags + CPP C preprocessor + CXXCPP C++ preprocessor + DOXYGEN Doxygen + DOT The "dot" program from graphviz + PERL Perl + XMKMF Path to xmkmf, Makefile generator for X Window System + PKG_CONFIG path to pkg-config utility + Fluidsynth_CFLAGS + C compiler flags for Fluidsynth, overriding pkg-config + Fluidsynth_LIBS + linker flags for Fluidsynth, overriding pkg-config + SNDFILE_CFLAGS + C compiler flags for SNDFILE, overriding pkg-config + SNDFILE_LIBS + linker flags for SNDFILE, overriding pkg-config + SAMPLERATE_CFLAGS + C compiler flags for SAMPLERATE, overriding pkg-config + SAMPLERATE_LIBS + linker flags for SAMPLERATE, overriding pkg-config + JACK_CFLAGS C compiler flags for JACK, overriding pkg-config + JACK_LIBS linker flags for JACK, overriding pkg-config + LASH_CFLAGS C compiler flags for LASH, overriding pkg-config + LASH_LIBS linker flags for LASH, overriding pkg-config + FST_CFLAGS C compiler flags for FST, overriding pkg-config + FST_LIBS linker flags for FST, overriding pkg-config + LO_CFLAGS C compiler flags for LO, overriding pkg-config + LO_LIBS linker flags for LO, overriding pkg-config + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +Report bugs to the package provider. +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive + else + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } + done +fi + +test -n "$ac_init_help" && exit $ac_status +if $ac_init_version; then + cat <<\_ACEOF +MusE configure 1.1 +generated by GNU Autoconf 2.65 + +Copyright (C) 2009 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi + +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## + +@%:@ ac_fn_cxx_try_compile LINENO +@%:@ ---------------------------- +@%:@ Try to compile conftest.@S|@ac_ext, and return whether this succeeded. +ac_fn_cxx_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} @%:@ ac_fn_cxx_try_compile + +@%:@ ac_fn_c_try_compile LINENO +@%:@ -------------------------- +@%:@ Try to compile conftest.@S|@ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} @%:@ ac_fn_c_try_compile + +@%:@ ac_fn_c_try_link LINENO +@%:@ ----------------------- +@%:@ Try to link conftest.@S|@ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} @%:@ ac_fn_c_try_link + +@%:@ ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +@%:@ ------------------------------------------------------- +@%:@ Tests whether HEADER exists and can be compiled using the include files in +@%:@ INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +@%:@include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} @%:@ ac_fn_c_check_header_compile + +@%:@ ac_fn_c_try_cpp LINENO +@%:@ ---------------------- +@%:@ Try to preprocess conftest.@S|@ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} @%:@ ac_fn_c_try_cpp + +@%:@ ac_fn_c_try_run LINENO +@%:@ ---------------------- +@%:@ Try to link conftest.@S|@ac_ext, and return whether this succeeded. Assumes +@%:@ that executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} @%:@ ac_fn_c_try_run + +@%:@ ac_fn_c_check_func LINENO FUNC VAR +@%:@ ---------------------------------- +@%:@ Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_c_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case declares $2. + For example, HP-UX 11i declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main () +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} @%:@ ac_fn_c_check_func + +@%:@ ac_fn_cxx_try_cpp LINENO +@%:@ ------------------------ +@%:@ Try to preprocess conftest.@S|@ac_ext, and return whether this succeeded. +ac_fn_cxx_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } >/dev/null && { + test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} @%:@ ac_fn_cxx_try_cpp + +@%:@ ac_fn_cxx_try_link LINENO +@%:@ ------------------------- +@%:@ Try to link conftest.@S|@ac_ext, and return whether this succeeded. +ac_fn_cxx_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} @%:@ ac_fn_cxx_try_link + +@%:@ ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES +@%:@ ------------------------------------------------------- +@%:@ Tests whether HEADER exists, giving a warning if it cannot be compiled using +@%:@ the include files in INCLUDES and setting the cache variable VAR +@%:@ accordingly. +ac_fn_c_check_header_mongrel () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 +$as_echo_n "checking $2 usability... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +@%:@include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_header_compiler=yes +else + ac_header_compiler=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 +$as_echo_n "checking $2 presence... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@include <$2> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + ac_header_preproc=yes +else + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( + yes:no: ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; + no:yes:* ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=\$ac_header_compiler" +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} @%:@ ac_fn_c_check_header_mongrel +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by MusE $as_me 1.1, which was +generated by GNU Autoconf 2.65. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" + done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; + 2) + as_fn_append ac_configure_args1 " '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + as_fn_append ac_configure_args " '$ac_arg'" + ;; + esac + done +done +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + cat <<\_ASBOX +## ---------------- ## +## Cache variables. ## +## ---------------- ## +_ASBOX + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + cat <<\_ASBOX +## ----------------- ## +## Output variables. ## +## ----------------- ## +_ASBOX + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + cat <<\_ASBOX +## ------------------- ## +## File substitutions. ## +## ------------------- ## +_ASBOX + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + cat <<\_ASBOX +## ----------- ## +## confdefs.h. ## +## ----------- ## +_ASBOX + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +@%:@define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +@%:@define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +@%:@define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + +cat >>confdefs.h <<_ACEOF +@%:@define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + +cat >>confdefs.h <<_ACEOF +@%:@define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + +cat >>confdefs.h <<_ACEOF +@%:@define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + ac_site_file1=$CONFIG_SITE +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + +am__api_version='1.11' + +ac_aux_dir= +for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do + for ac_t in install-sh install.sh shtool; do + if test -f "$ac_dir/$ac_t"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/$ac_t -c" + break 2 + fi + done +done +if test -z "$ac_aux_dir"; then + as_fn_error "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if test "${ac_cv_path_install+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in @%:@(( + ./ | .// | /[cC]/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac + + done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 +$as_echo_n "checking whether build environment is sane... " >&6; } +# Just in case +sleep 1 +echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[\\\"\#\$\&\'\`$am_lf]*) + as_fn_error "unsafe absolute working directory name" "$LINENO" 5;; +esac +case $srcdir in + *[\\\"\#\$\&\'\`$am_lf\ \ ]*) + as_fn_error "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; +esac + +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + rm -f conftest.file + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + as_fn_error "ls -t appears to fail. Make sure there is not a broken +alias in your environment" "$LINENO" 5 + fi + + test "$2" = conftest.file + ) +then + # Ok. + : +else + as_fn_error "newly created file is older than distributed files! +Check your system clock" "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +test "$program_prefix" != NONE && + program_transform_name="s&^&$program_prefix&;$program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s&\$&$program_suffix&;$program_transform_name" +# Double any \ or $. +# By default was `s,x,x', remove it if useless. +ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' +program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` + +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` + +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 +$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} +fi + +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi + +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 +$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } +if test -z "$MKDIR_P"; then + if test "${ac_cv_path_mkdir+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in mkdir gmkdir; do + for ac_exec_ext in '' $ac_executable_extensions; do + { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue + case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir (GNU coreutils) '* | \ + 'mkdir (coreutils) '* | \ + 'mkdir (fileutils) '4.1*) + ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + break 3;; + esac + done + done + done +IFS=$as_save_IFS + +fi + + test -d ./--version && rmdir ./--version + if test "${ac_cv_path_mkdir+set}" = set; then + MKDIR_P="$ac_cv_path_mkdir -p" + else + # As a last resort, use the slow shell script. Don't cache a + # value for MKDIR_P within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + MKDIR_P="$ac_install_sh -d" + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 +$as_echo "$MKDIR_P" >&6; } + +mkdir_p="$MKDIR_P" +case $mkdir_p in + [\\/$]* | ?:[\\/]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_AWK+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AWK="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + cat >conftest.make <<\_ACEOF +SHELL = /bin/sh +all: + @echo '@@@%%%=$(MAKE)=@@@%%%' +_ACEOF +# GNU make sometimes prints "make[1]: Entering...", which would confuse us. +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac +rm -f conftest.make +fi +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + SET_MAKE= +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi + +rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null + +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + am__isrc=' -I$(srcdir)' + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + as_fn_error "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi + + +# Define the identity of the package. + PACKAGE='muse' + VERSION='1.1' + + +cat >>confdefs.h <<_ACEOF +@%:@define PACKAGE "$PACKAGE" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +@%:@define VERSION "$VERSION" +_ACEOF + +# Some tools Automake needs. + +ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} + + +AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} + + +AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} + + +AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} + + +MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} + +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +# Always define AMTAR for backward compatibility. + +AMTAR=${AMTAR-"${am_missing_run}tar"} + +am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' + + + + + +ac_config_headers="$ac_config_headers config.h" + +### AM_MAINTAINER_MODE + + if test x = y; then + INSIDE_GNOME_COMMON_TRUE= + INSIDE_GNOME_COMMON_FALSE='#' +else + INSIDE_GNOME_COMMON_TRUE='#' + INSIDE_GNOME_COMMON_FALSE= +fi + + + test -n "$ACLOCAL_FLAGS" && ACLOCAL="$ACLOCAL $ACLOCAL_FLAGS" + + for k in m4 ; do ACLOCAL="$ACLOCAL -I $k" ; done + + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +if test -z "$CXX"; then + if test -n "$CCC"; then + CXX=$CCC + else + if test -n "$ac_tool_prefix"; then + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CXX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CXX"; then + ac_cv_prog_CXX="$CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CXX=$ac_cv_prog_CXX +if test -n "$CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 +$as_echo "$CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CXX" && break + done +fi +if test -z "$CXX"; then + ac_ct_CXX=$CXX + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CXX"; then + ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CXX="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CXX=$ac_cv_prog_ac_ct_CXX +if test -n "$ac_ct_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 +$as_echo "$ac_ct_CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CXX" && break +done + + if test "x$ac_ct_CXX" = x; then + CXX="g++" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CXX=$ac_ct_CXX + fi +fi + + fi +fi +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C++ compiler works" >&5 +$as_echo_n "checking whether the C++ compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= + +else + ac_file='' +fi +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ as_fn_set_status 77 +as_fn_error "C++ compiler cannot create executables +See \`config.log' for more details." "$LINENO" 5; }; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler default output file name" >&5 +$as_echo_n "checking for C++ compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +ac_exeext=$ac_cv_exeext + +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." "$LINENO" 5; } +fi +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@include +int +main () +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "cannot run C++ compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." "$LINENO" 5; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if test "${ac_cv_objext+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "cannot compute suffix of object files: cannot compile +See \`config.log' for more details." "$LINENO" 5; } +fi +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 +$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } +if test "${ac_cv_cxx_compiler_gnu+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_cxx_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 +$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GXX=yes +else + GXX= +fi +ac_test_CXXFLAGS=${CXXFLAGS+set} +ac_save_CXXFLAGS=$CXXFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 +$as_echo_n "checking whether $CXX accepts -g... " >&6; } +if test "${ac_cv_prog_cxx_g+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_save_cxx_werror_flag=$ac_cxx_werror_flag + ac_cxx_werror_flag=yes + ac_cv_prog_cxx_g=no + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +else + CXXFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + +else + ac_cxx_werror_flag=$ac_save_cxx_werror_flag + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cxx_werror_flag=$ac_save_cxx_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 +$as_echo "$ac_cv_prog_cxx_g" >&6; } +if test "$ac_test_CXXFLAGS" = set; then + CXXFLAGS=$ac_save_CXXFLAGS +elif test $ac_cv_prog_cxx_g = yes; then + if test "$GXX" = yes; then + CXXFLAGS="-g -O2" + else + CXXFLAGS="-g" + fi +else + if test "$GXX" = yes; then + CXXFLAGS="-O2" + else + CXXFLAGS= + fi +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +DEPDIR="${am__leading_dot}deps" + +ac_config_commands="$ac_config_commands depfiles" + + +am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 +$as_echo_n "checking for style of include used by $am_make... " >&6; } +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 +$as_echo "$_am_result" >&6; } +rm -f confinc confmf + +@%:@ Check whether --enable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then : + enableval=$enable_dependency_tracking; +fi + +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi + if test "x$enable_dependency_tracking" != xno; then + AMDEP_TRUE= + AMDEP_FALSE='#' +else + AMDEP_TRUE='#' + AMDEP_FALSE= +fi + + + +depcc="$CXX" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CXX_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CXX_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CXX_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } +CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then + am__fastdepCXX_TRUE= + am__fastdepCXX_FALSE='#' +else + am__fastdepCXX_TRUE='#' + am__fastdepCXX_FALSE= +fi + + +case `pwd` in + *\ * | *\ *) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 +$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; +esac + + + +macro_version='2.2.6b' +macro_revision='1.3017' + + + + + + + + + + + + + +ltmain="$ac_aux_dir/ltmain.sh" + +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + as_fn_error "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if test "${ac_cv_build+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + as_fn_error "cannot guess build type; you must specify one" "$LINENO" 5 +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + as_fn_error "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) as_fn_error "invalid value of canonical build" "$LINENO" 5;; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if test "${ac_cv_host+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + as_fn_error "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) as_fn_error "invalid value of canonical host" "$LINENO" 5;; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $@%:@ != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "no acceptable C compiler found in \$PATH +See \`config.log' for more details." "$LINENO" 5; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if test "${ac_cv_c_compiler_gnu+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if test "${ac_cv_prog_cc_g+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if test "${ac_cv_prog_cc_c89+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +depcc="$CC" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if test "${ac_cv_path_SED+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_SED_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + as_fn_error "no acceptable sed could be found in \$PATH" "$LINENO" 5 + fi +else + ac_cv_path_SED=$SED +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed + +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if test "${ac_cv_path_GREP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if test "${ac_cv_path_EGREP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 +$as_echo_n "checking for fgrep... " >&6; } +if test "${ac_cv_path_FGREP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 + then ac_cv_path_FGREP="$GREP -F" + else + if test -z "$FGREP"; then + ac_path_FGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in fgrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue +# Check for GNU ac_path_FGREP and select it if it is found. + # Check for GNU $ac_path_FGREP +case `"$ac_path_FGREP" --version 2>&1` in +*GNU*) + ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'FGREP' >> "conftest.nl" + "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_FGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_FGREP="$ac_path_FGREP" + ac_path_FGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_FGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_FGREP"; then + as_fn_error "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_FGREP=$FGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 +$as_echo "$ac_cv_path_FGREP" >&6; } + FGREP="$ac_cv_path_FGREP" + + +test -z "$GREP" && GREP=grep + + + + + + + + + + + + + + + + + + + +@%:@ Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if test "${lt_cv_path_LD+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && as_fn_error "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if test "${lt_cv_prog_gnu_ld+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 +$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } +if test "${lt_cv_path_NM+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_nm_to_check="${ac_tool_prefix}nm" + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/$lt_tmp_nm" + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS="$lt_save_ifs" + done + : ${lt_cv_path_NM=no} +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 +$as_echo "$lt_cv_path_NM" >&6; } +if test "$lt_cv_path_NM" != "no"; then + NM="$lt_cv_path_NM" +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$ac_tool_prefix"; then + for ac_prog in "dumpbin -symbols" "link -dump -symbols" + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_DUMPBIN+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DUMPBIN"; then + ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DUMPBIN=$ac_cv_prog_DUMPBIN +if test -n "$DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 +$as_echo "$DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$DUMPBIN" && break + done +fi +if test -z "$DUMPBIN"; then + ac_ct_DUMPBIN=$DUMPBIN + for ac_prog in "dumpbin -symbols" "link -dump -symbols" +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DUMPBIN"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN +if test -n "$ac_ct_DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 +$as_echo "$ac_ct_DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_DUMPBIN" && break +done + + if test "x$ac_ct_DUMPBIN" = x; then + DUMPBIN=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DUMPBIN=$ac_ct_DUMPBIN + fi +fi + + + if test "$DUMPBIN" != ":"; then + NM="$DUMPBIN" + fi +fi +test -z "$NM" && NM=nm + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 +$as_echo_n "checking the name lister ($NM) interface... " >&6; } +if test "${lt_cv_nm_interface+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:__oline__: $ac_compile\"" >&5) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&5 + (eval echo "\"\$as_me:__oline__: $NM \\\"conftest.$ac_objext\\\"\"" >&5) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&5 + (eval echo "\"\$as_me:__oline__: output\"" >&5) + cat conftest.out >&5 + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 +$as_echo "$lt_cv_nm_interface" >&6; } + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +$as_echo_n "checking whether ln -s works... " >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +$as_echo "no, using $LN_S" >&6; } +fi + +# find the maximum length of command line arguments +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 +$as_echo_n "checking the maximum length of command line arguments... " >&6; } +if test "${lt_cv_sys_max_cmd_len+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + i=0 + teststring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8 ; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test "X"`$SHELL $0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \ + = "XX$teststring$teststring"; } >/dev/null 2>&1 && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac + +fi + +if test -n $lt_cv_sys_max_cmd_len ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 +$as_echo "$lt_cv_sys_max_cmd_len" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 +$as_echo "none" >&6; } +fi +max_cmd_len=$lt_cv_sys_max_cmd_len + + + + + + +: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 +$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } +# Try some XSI features +xsi_shell=no +( _lt_dummy="a/b/c" + test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \ + = c,a/b,, \ + && eval 'test $(( 1 + 1 )) -eq 2 \ + && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ + && xsi_shell=yes +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 +$as_echo "$xsi_shell" >&6; } + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 +$as_echo_n "checking whether the shell understands \"+=\"... " >&6; } +lt_shell_append=no +( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ + >/dev/null 2>&1 \ + && lt_shell_append=yes +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 +$as_echo "$lt_shell_append" >&6; } + + +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi + + + + + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 +$as_echo_n "checking for $LD option to reload object files... " >&6; } +if test "${lt_cv_ld_reload_flag+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_reload_flag='-r' +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 +$as_echo "$lt_cv_ld_reload_flag" >&6; } +reload_flag=$lt_cv_ld_reload_flag +case $reload_flag in +"" | " "*) ;; +*) reload_flag=" $reload_flag" ;; +esac +reload_cmds='$LD$reload_flag -o $output$reload_objs' +case $host_os in + darwin*) + if test "$GCC" = yes; then + reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' + else + reload_cmds='$LD$reload_flag -o $output$reload_objs' + fi + ;; +esac + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. +set dummy ${ac_tool_prefix}objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OBJDUMP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + # Extract the first word of "objdump", so it can be a program name with args. +set dummy objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OBJDUMP="objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +$as_echo "$ac_ct_OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OBJDUMP" = x; then + OBJDUMP="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJDUMP=$ac_ct_OBJDUMP + fi +else + OBJDUMP="$ac_cv_prog_OBJDUMP" +fi + +test -z "$OBJDUMP" && OBJDUMP=objdump + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 +$as_echo_n "checking how to recognize dependent libraries... " >&6; } +if test "${lt_cv_deplibs_check_method+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# `unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# which responds to the $file_magic_cmd with a given extended regex. +# If you have `file' or equivalent on your system and you're not sure +# whether `pass_all' will *always* work, you probably want this one. + +case $host_os in +aix[4-9]*) + lt_cv_deplibs_check_method=pass_all + ;; + +beos*) + lt_cv_deplibs_check_method=pass_all + ;; + +bsdi[45]*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' + lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; + +cygwin*) + # func_win32_libid is a shell function defined in ltmain.sh + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + ;; + +mingw* | pw32*) + # Base MSYS/MinGW do not provide the 'file' command needed by + # func_win32_libid shell function, so use a weaker test based on 'objdump', + # unless we find 'file', for example because we are cross-compiling. + if ( file / ) >/dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]' + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[3-9]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 +$as_echo "$lt_cv_deplibs_check_method" >&6; } +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + + + + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_AR+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_AR+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + +test -z "$AR" && AR=ar +test -z "$AR_FLAGS" && AR_FLAGS=cru + + + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +test -z "$STRIP" && STRIP=: + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_RANLIB+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi + +test -z "$RANLIB" && RANLIB=: + + + + + + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# Check for command to grab the raw symbol name followed by C symbol from nm. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 +$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } +if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[BCDEGRST]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([_A-Za-z][_A-Za-z0-9]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[BCDT]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[ABCDGISTW]' + ;; +hpux*) + if test "$host_cpu" = ia64; then + symcode='[ABCDEGRST]' + fi + ;; +irix* | nonstopux*) + symcode='[BCDEGRST]' + ;; +osf*) + symcode='[BCDEGQRST]' + ;; +solaris*) + symcode='[BDRT]' + ;; +sco3.2v5*) + symcode='[DT]' + ;; +sysv4.2uw2*) + symcode='[DT]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[ABDT]' + ;; +sysv4) + symcode='[DFNSTU]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[ABCDGIRSTW]' ;; +esac + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function + # and D for any global variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK '"\ +" {last_section=section; section=\$ 3};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ +" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ +" s[1]~/^[@?]/{print s[1], s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + # Now try to grab the symbols. + nlist=conftest.nm + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\""; } >&5 + (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +const struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_save_LIBS="$LIBS" + lt_save_CFLAGS="$CFLAGS" + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext}; then + pipe_works=yes + fi + LIBS="$lt_save_LIBS" + CFLAGS="$lt_save_CFLAGS" + else + echo "cannot find nm_test_func in $nlist" >&5 + fi + else + echo "cannot find nm_test_var in $nlist" >&5 + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 + fi + else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done + +fi + +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 +$as_echo "failed" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 +$as_echo "ok" >&6; } +fi + + + + + + + + + + + + + + + + + + + + + + + +@%:@ Check whether --enable-libtool-lock was given. +if test "${enable_libtool_lock+set}" = set; then : + enableval=$enable_libtool_lock; +fi + +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '#line __oline__ "configure"' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_i386" + ;; + ppc64-*linux*|powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + ppc*-*linux*|powerpc*-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 +$as_echo_n "checking whether the C compiler needs -belf... " >&6; } +if test "${lt_cv_cc_needs_belf+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_cc_needs_belf=yes +else + lt_cv_cc_needs_belf=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 +$as_echo "$lt_cv_cc_needs_belf" >&6; } + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; +sparc*-*solaris*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) LD="${LD-ld} -m elf64_sparc" ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks="$enable_libtool_lock" + + + case $host_os in + rhapsody* | darwin*) + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. +set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_DSYMUTIL+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DSYMUTIL"; then + ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DSYMUTIL=$ac_cv_prog_DSYMUTIL +if test -n "$DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 +$as_echo "$DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DSYMUTIL"; then + ac_ct_DSYMUTIL=$DSYMUTIL + # Extract the first word of "dsymutil", so it can be a program name with args. +set dummy dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DSYMUTIL"; then + ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL +if test -n "$ac_ct_DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 +$as_echo "$ac_ct_DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DSYMUTIL" = x; then + DSYMUTIL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DSYMUTIL=$ac_ct_DSYMUTIL + fi +else + DSYMUTIL="$ac_cv_prog_DSYMUTIL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. +set dummy ${ac_tool_prefix}nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_NMEDIT+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NMEDIT"; then + ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +NMEDIT=$ac_cv_prog_NMEDIT +if test -n "$NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 +$as_echo "$NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_NMEDIT"; then + ac_ct_NMEDIT=$NMEDIT + # Extract the first word of "nmedit", so it can be a program name with args. +set dummy nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_NMEDIT"; then + ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_NMEDIT="nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT +if test -n "$ac_ct_NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 +$as_echo "$ac_ct_NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_NMEDIT" = x; then + NMEDIT=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + NMEDIT=$ac_ct_NMEDIT + fi +else + NMEDIT="$ac_cv_prog_NMEDIT" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. +set dummy ${ac_tool_prefix}lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_LIPO+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LIPO"; then + ac_cv_prog_LIPO="$LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_LIPO="${ac_tool_prefix}lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LIPO=$ac_cv_prog_LIPO +if test -n "$LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 +$as_echo "$LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LIPO"; then + ac_ct_LIPO=$LIPO + # Extract the first word of "lipo", so it can be a program name with args. +set dummy lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_LIPO+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LIPO"; then + ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_LIPO="lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO +if test -n "$ac_ct_LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 +$as_echo "$ac_ct_LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LIPO" = x; then + LIPO=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LIPO=$ac_ct_LIPO + fi +else + LIPO="$ac_cv_prog_LIPO" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OTOOL+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL"; then + ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OTOOL="${ac_tool_prefix}otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL=$ac_cv_prog_OTOOL +if test -n "$OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 +$as_echo "$OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL"; then + ac_ct_OTOOL=$OTOOL + # Extract the first word of "otool", so it can be a program name with args. +set dummy otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_OTOOL+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL"; then + ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OTOOL="otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL +if test -n "$ac_ct_OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 +$as_echo "$ac_ct_OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL" = x; then + OTOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL=$ac_ct_OTOOL + fi +else + OTOOL="$ac_cv_prog_OTOOL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OTOOL64+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL64"; then + ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL64=$ac_cv_prog_OTOOL64 +if test -n "$OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 +$as_echo "$OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL64"; then + ac_ct_OTOOL64=$OTOOL64 + # Extract the first word of "otool64", so it can be a program name with args. +set dummy otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_OTOOL64+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL64"; then + ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OTOOL64="otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 +if test -n "$ac_ct_OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 +$as_echo "$ac_ct_OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL64" = x; then + OTOOL64=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL64=$ac_ct_OTOOL64 + fi +else + OTOOL64="$ac_cv_prog_OTOOL64" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 +$as_echo_n "checking for -single_module linker flag... " >&6; } +if test "${lt_cv_apple_cc_single_mod+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_apple_cc_single_mod=no + if test -z "${LT_MULTI_MODULE}"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&5 + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 +$as_echo "$lt_cv_apple_cc_single_mod" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 +$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } +if test "${lt_cv_ld_exported_symbols_list+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_ld_exported_symbols_list=yes +else + lt_cv_ld_exported_symbols_list=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 +$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } + case $host_os in + rhapsody* | darwin1.[012]) + _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[91]*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + 10.[012]*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test "$lt_cv_apple_cc_single_mod" = "yes"; then + _lt_dar_single_mod='$single_module' + fi + if test "$lt_cv_ld_exported_symbols_list" = "yes"; then + _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + if test "$DSYMUTIL" != ":"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if test "${ac_cv_prog_CPP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@ifdef __STDC__ +@%:@ include +@%:@else +@%:@ include +@%:@endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@ifdef __STDC__ +@%:@ include +@%:@else +@%:@ include +@%:@endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if test "${ac_cv_header_stdc+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "@%:@define STDC_HEADERS 1" >>confdefs.h + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then : + cat >>confdefs.h <<_ACEOF +@%:@define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +for ac_header in dlfcn.h +do : + ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default +" +if test "x$ac_cv_header_dlfcn_h" = x""yes; then : + cat >>confdefs.h <<_ACEOF +@%:@define HAVE_DLFCN_H 1 +_ACEOF + +fi + +done + + + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +if test -z "$CXX"; then + if test -n "$CCC"; then + CXX=$CCC + else + if test -n "$ac_tool_prefix"; then + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CXX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CXX"; then + ac_cv_prog_CXX="$CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CXX=$ac_cv_prog_CXX +if test -n "$CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 +$as_echo "$CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CXX" && break + done +fi +if test -z "$CXX"; then + ac_ct_CXX=$CXX + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CXX"; then + ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CXX="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CXX=$ac_cv_prog_ac_ct_CXX +if test -n "$ac_ct_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 +$as_echo "$ac_ct_CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CXX" && break +done + + if test "x$ac_ct_CXX" = x; then + CXX="g++" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CXX=$ac_ct_CXX + fi +fi + + fi +fi +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 +$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } +if test "${ac_cv_cxx_compiler_gnu+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_cxx_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 +$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GXX=yes +else + GXX= +fi +ac_test_CXXFLAGS=${CXXFLAGS+set} +ac_save_CXXFLAGS=$CXXFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 +$as_echo_n "checking whether $CXX accepts -g... " >&6; } +if test "${ac_cv_prog_cxx_g+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_save_cxx_werror_flag=$ac_cxx_werror_flag + ac_cxx_werror_flag=yes + ac_cv_prog_cxx_g=no + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +else + CXXFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + +else + ac_cxx_werror_flag=$ac_save_cxx_werror_flag + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cxx_werror_flag=$ac_save_cxx_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 +$as_echo "$ac_cv_prog_cxx_g" >&6; } +if test "$ac_test_CXXFLAGS" = set; then + CXXFLAGS=$ac_save_CXXFLAGS +elif test $ac_cv_prog_cxx_g = yes; then + if test "$GXX" = yes; then + CXXFLAGS="-g -O2" + else + CXXFLAGS="-g" + fi +else + if test "$GXX" = yes; then + CXXFLAGS="-O2" + else + CXXFLAGS= + fi +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +depcc="$CXX" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CXX_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CXX_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CXX_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } +CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then + am__fastdepCXX_TRUE= + am__fastdepCXX_FALSE='#' +else + am__fastdepCXX_TRUE='#' + am__fastdepCXX_FALSE= +fi + + +if test -n "$CXX" && ( test "X$CXX" != "Xno" && + ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || + (test "X$CXX" != "Xg++"))) ; then + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 +$as_echo_n "checking how to run the C++ preprocessor... " >&6; } +if test -z "$CXXCPP"; then + if test "${ac_cv_prog_CXXCPP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CXXCPP needs to be expanded + for CXXCPP in "$CXX -E" "/lib/cpp" + do + ac_preproc_ok=false +for ac_cxx_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@ifdef __STDC__ +@%:@ include +@%:@else +@%:@ include +@%:@endif + Syntax error +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@include +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CXXCPP=$CXXCPP + +fi + CXXCPP=$ac_cv_prog_CXXCPP +else + ac_cv_prog_CXXCPP=$CXXCPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 +$as_echo "$CXXCPP" >&6; } +ac_preproc_ok=false +for ac_cxx_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@ifdef __STDC__ +@%:@ include +@%:@else +@%:@ include +@%:@endif + Syntax error +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@include +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +_lt_caught_CXX_error=yes; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +else + _lt_caught_CXX_error=yes +fi + + + + + +# Set options + + + + enable_dlopen=no + + + enable_win32_dll=no + + + @%:@ Check whether --enable-shared was given. +if test "${enable_shared+set}" = set; then : + enableval=$enable_shared; p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_shared=yes +fi + + + + + + + + + + @%:@ Check whether --enable-static was given. +if test "${enable_static+set}" = set; then : + enableval=$enable_static; p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_static=yes +fi + + + + + + + + + + +@%:@ Check whether --with-pic was given. +if test "${with_pic+set}" = set; then : + withval=$with_pic; pic_mode="$withval" +else + pic_mode=default +fi + + +test -z "$pic_mode" && pic_mode=default + + + + + + + + @%:@ Check whether --enable-fast-install was given. +if test "${enable_fast_install+set}" = set; then : + enableval=$enable_fast_install; p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_fast_install=yes +fi + + + + + + + + + + + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ltmain" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' + + + + + + + + + + + + + + + + + + + + + + + + + +test -z "$LN_S" && LN_S="ln -s" + + + + + + + + + + + + + + +if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 +$as_echo_n "checking for objdir... " >&6; } +if test "${lt_cv_objdir+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 +$as_echo "$lt_cv_objdir" >&6; } +objdir=$lt_cv_objdir + + + + + +cat >>confdefs.h <<_ACEOF +@%:@define LT_OBJDIR "$lt_cv_objdir/" +_ACEOF + + + + + + + + + + + + + + + + + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='s/\(["`$\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld="$lt_cv_prog_gnu_ld" + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` + + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 +$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } +if test "${lt_cv_path_MAGIC_CMD+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/${ac_tool_prefix}file; then + lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + + +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 +$as_echo_n "checking for file... " >&6; } +if test "${lt_cv_path_MAGIC_CMD+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/file; then + lt_cv_path_MAGIC_CMD="$ac_dir/file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + else + MAGIC_CMD=: + fi +fi + + fi + ;; +esac + +# Use C for the default configuration in the libtool script + +lt_save_CC="$CC" +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +objext=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* + +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* + + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + +lt_prog_compiler_no_builtin_flag= + +if test "$GCC" = yes; then + lt_prog_compiler_no_builtin_flag=' -fno-builtin' + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } +if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_rtti_exceptions=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="-fno-rtti -fno-exceptions" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:__oline__: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_rtti_exceptions=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } + +if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then + lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" +else + : +fi + +fi + + + + + + + lt_prog_compiler_wl= +lt_prog_compiler_pic= +lt_prog_compiler_static= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } + + if test "$GCC" = yes; then + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_static='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic='-fno-common' + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + ;; + + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic=-Kconform_pic + fi + ;; + + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + else + lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static='-non_shared' + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + # old Intel for x86_64 which still supported -KPIC. + ecc*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='--shared' + lt_prog_compiler_static='--static' + ;; + pgcc* | pgf77* | pgf90* | pgf95*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + ccc*) + lt_prog_compiler_wl='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + xl*) + # IBM XL C 8.0/Fortran 10.1 on PPC + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-qpic' + lt_prog_compiler_static='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C 5.9 + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Wl,' + ;; + *Sun\ F*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='' + ;; + esac + ;; + esac + ;; + + newsos6) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + + rdos*) + lt_prog_compiler_static='-non_shared' + ;; + + solaris*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + case $cc_basename in + f77* | f90* | f95*) + lt_prog_compiler_wl='-Qoption ld ';; + *) + lt_prog_compiler_wl='-Wl,';; + esac + ;; + + sunos4*) + lt_prog_compiler_wl='-Qoption ld ' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + lt_prog_compiler_pic='-Kconform_pic' + lt_prog_compiler_static='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + unicos*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_can_build_shared=no + ;; + + uts4*) + lt_prog_compiler_pic='-pic' + lt_prog_compiler_static='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared=no + ;; + esac + fi + +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic= + ;; + *) + lt_prog_compiler_pic="$lt_prog_compiler_pic@&t@ -DPIC" + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5 +$as_echo "$lt_prog_compiler_pic" >&6; } + + + + + + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } +if test "${lt_cv_prog_compiler_pic_works+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_works=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic@&t@ -DPIC" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:__oline__: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 +$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } + +if test x"$lt_cv_prog_compiler_pic_works" = xyes; then + case $lt_prog_compiler_pic in + "" | " "*) ;; + *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; + esac +else + lt_prog_compiler_pic= + lt_prog_compiler_can_build_shared=no +fi + +fi + + + + + + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if test "${lt_cv_prog_compiler_static_works+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_static_works=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works=yes + fi + else + lt_cv_prog_compiler_static_works=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 +$as_echo "$lt_cv_prog_compiler_static_works" >&6; } + +if test x"$lt_cv_prog_compiler_static_works" = xyes; then + : +else + lt_prog_compiler_static= +fi + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test "${lt_cv_prog_compiler_c_o+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:__oline__: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test "${lt_cv_prog_compiler_c_o+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:__oline__: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } + if test "$hard_links" = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + + runpath_var= + allow_undefined_flag= + always_export_symbols=no + archive_cmds= + archive_expsym_cmds= + compiler_needs_object=no + enable_shared_with_static_runtimes=no + export_dynamic_flag_spec= + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + hardcode_automatic=no + hardcode_direct=no + hardcode_direct_absolute=no + hardcode_libdir_flag_spec= + hardcode_libdir_flag_spec_ld= + hardcode_libdir_separator= + hardcode_minus_L=no + hardcode_shlibpath_var=unsupported + inherit_rpath=no + link_all_deplibs=unknown + module_cmds= + module_expsym_cmds= + old_archive_from_new_cmds= + old_archive_from_expsyms_cmds= + thread_safe_flag_spec= + whole_archive_flag_spec= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; + linux* | k*bsd*-gnu) + link_all_deplibs=no + ;; + esac + + ld_shlibs=yes + if test "$with_gnu_ld" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + export_dynamic_flag_spec='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec= + fi + supports_anon_versioning=no + case `$LD -v 2>&1` in + *GNU\ gold*) supports_anon_versioning=yes ;; + *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[3-9]*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.9.1, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to modify your PATH +*** so that a non-GNU linker is found, and then restart. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + allow_undefined_flag=unsupported + always_export_symbols=no + enable_shared_with_static_runtimes=yes + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs=no + fi + ;; + + interix[3-9]*) + hardcode_direct=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + tmp_diet=no + if test "$host_os" = linux-dietlibc; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test "$tmp_diet" = no + then + tmp_addflag= + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + whole_archive_flag_spec= + tmp_sharedflag='--shared' ;; + xl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + compiler_needs_object=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + xlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' + hardcode_libdir_flag_spec= + hardcode_libdir_flag_spec_ld='-rpath $libdir' + archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + ld_shlibs=no + fi + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + ;; + + sunos4*) + archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + + if test "$ld_shlibs" = no; then + runpath_var= + hardcode_libdir_flag_spec= + export_dynamic_flag_spec= + whole_archive_flag_spec= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag=unsupported + always_export_symbols=yes + archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + + aix[4-9]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds='' + hardcode_direct=yes + hardcode_direct_absolute=yes + hardcode_libdir_separator=':' + link_all_deplibs=yes + file_list_spec='${wl}-f,' + + if test "$GCC" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + link_all_deplibs=no + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + export_dynamic_flag_spec='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag="-z nodefs" + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag=' ${wl}-bernotok' + allow_undefined_flag=' ${wl}-berok' + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec='$convenience' + archive_cmds_need_lc=yes + # This is similar to how AIX traditionally builds its shared libraries. + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + bsdi[45]*) + export_dynamic_flag_spec=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_from_new_cmds='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' + fix_srcfile_path='`cygpath -w "$srcfile"`' + enable_shared_with_static_runtimes=yes + ;; + + darwin* | rhapsody*) + + + archive_cmds_need_lc=no + hardcode_direct=no + hardcode_automatic=yes + hardcode_shlibpath_var=unsupported + whole_archive_flag_spec='' + link_all_deplibs=yes + allow_undefined_flag="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=echo + archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + + else + ld_shlibs=no + fi + + ;; + + dgux*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + freebsd1*) + ld_shlibs=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + hpux9*) + if test "$GCC" = yes; then + archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + export_dynamic_flag_spec='${wl}-E' + ;; + + hpux10*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_flag_spec_ld='+b $libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='${wl}-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + fi + ;; + + hpux11*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct=no + hardcode_shlibpath_var=no + ;; + *) + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int foo(void) {} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' + +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$save_LDFLAGS" + else + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + inherit_rpath=yes + link_all_deplibs=yes + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + newsos6) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_shlibpath_var=no + ;; + + *nto* | *qnx*) + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + hardcode_direct=yes + hardcode_shlibpath_var=no + hardcode_direct_absolute=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + else + case $host_os in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-R$libdir' + ;; + *) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + esac + fi + else + ld_shlibs=no + fi + ;; + + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec='-rpath $libdir' + fi + archive_cmds_need_lc='no' + hardcode_libdir_separator=: + ;; + + solaris*) + no_undefined_flag=' -z defs' + if test "$GCC" = yes; then + wlarc='${wl}' + archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='${wl}' + archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_shlibpath_var=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. GCC discards it without `$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test "$GCC" = yes; then + whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + else + whole_archive_flag_spec='-z allextract$convenience -z defaultextract' + fi + ;; + esac + link_all_deplibs=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds='$CC -r -o $output$reload_objs' + hardcode_direct=no + ;; + motorola) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var=no + ;; + + sysv4.3*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + export_dynamic_flag_spec='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag='${wl}-z,text' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag='${wl}-z,text' + allow_undefined_flag='${wl}-z,nodefs' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='${wl}-R,$libdir' + hardcode_libdir_separator=':' + link_all_deplibs=yes + export_dynamic_flag_spec='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + *) + ld_shlibs=no + ;; + esac + + if test x$host_vendor = xsni; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + export_dynamic_flag_spec='${wl}-Blargedynsym' + ;; + esac + fi + fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 +$as_echo "$ld_shlibs" >&6; } +test "$ld_shlibs" = no && can_build_shared=no + +with_gnu_ld=$with_gnu_ld + + + + + + + + + + + + + + + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl + pic_flag=$lt_prog_compiler_pic + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag + allow_undefined_flag= + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 + (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + then + archive_cmds_need_lc=no + else + archive_cmds_need_lc=yes + fi + allow_undefined_flag=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc" >&5 +$as_echo "$archive_cmds_need_lc" >&6; } + ;; + esac + fi + ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } + +if test "$GCC" = yes; then + case $host_os in + darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; + *) lt_awk_arg="/^libraries:/" ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'` + else + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary. + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path/$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" + else + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk ' +BEGIN {RS=" "; FS="/|\n";} { + lt_foo=""; + lt_count=0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo="/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[lt_foo]++; } + if (lt_freq[lt_foo] == 1) { print lt_foo; } +}'` + sys_lib_search_path_spec=`$ECHO $lt_search_path_spec` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[4-9]*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[123]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +interix[3-9]*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # Some binutils ld are patched to set DT_RUNPATH + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : + shlibpath_overrides_runpath=yes +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } +hardcode_action= +if test -n "$hardcode_libdir_flag_spec" || + test -n "$runpath_var" || + test "X$hardcode_automatic" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$hardcode_direct" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && + test "$hardcode_minus_L" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action=unsupported +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 +$as_echo "$hardcode_action" >&6; } + +if test "$hardcode_action" = relink || + test "$inherit_rpath" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if test "${ac_cv_lib_dl_dlopen+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + +fi + + ;; + + *) + ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" +if test "x$ac_cv_func_shl_load" = x""yes; then : + lt_cv_dlopen="shl_load" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 +$as_echo_n "checking for shl_load in -ldld... " >&6; } +if test "${ac_cv_lib_dld_shl_load+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shl_load (); +int +main () +{ +return shl_load (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_shl_load=yes +else + ac_cv_lib_dld_shl_load=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 +$as_echo "$ac_cv_lib_dld_shl_load" >&6; } +if test "x$ac_cv_lib_dld_shl_load" = x""yes; then : + lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" +else + ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" +if test "x$ac_cv_func_dlopen" = x""yes; then : + lt_cv_dlopen="dlopen" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if test "${ac_cv_lib_dl_dlopen+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 +$as_echo_n "checking for dlopen in -lsvld... " >&6; } +if test "${ac_cv_lib_svld_dlopen+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsvld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_svld_dlopen=yes +else + ac_cv_lib_svld_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 +$as_echo "$ac_cv_lib_svld_dlopen" >&6; } +if test "x$ac_cv_lib_svld_dlopen" = x""yes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 +$as_echo_n "checking for dld_link in -ldld... " >&6; } +if test "${ac_cv_lib_dld_dld_link+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dld_link (); +int +main () +{ +return dld_link (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_dld_link=yes +else + ac_cv_lib_dld_dld_link=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 +$as_echo "$ac_cv_lib_dld_dld_link" >&6; } +if test "x$ac_cv_lib_dld_dld_link" = x""yes; then : + lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" +fi + + +fi + + +fi + + +fi + + +fi + + +fi + + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 +$as_echo_n "checking whether a program can dlopen itself... " >&6; } +if test "${lt_cv_dlopen_self+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line __oline__ "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 +$as_echo "$lt_cv_dlopen_self" >&6; } + + if test "x$lt_cv_dlopen_self" = xyes; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 +$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } +if test "${lt_cv_dlopen_self_static+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self_static=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line __oline__ "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self_static=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 +$as_echo "$lt_cv_dlopen_self_static" >&6; } + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi + + + + + + + + + + + + + + + + + +striplib= +old_striplib= +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 +$as_echo_n "checking whether stripping libraries is possible... " >&6; } +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + fi + ;; + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + ;; + esac +fi + + + + + + + + + + + + + # Report which library types will actually be built + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 +$as_echo_n "checking if libtool supports shared libraries... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 +$as_echo "$can_build_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 +$as_echo_n "checking whether to build shared libraries... " >&6; } + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[4-9]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 +$as_echo "$enable_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 +$as_echo_n "checking whether to build static libraries... " >&6; } + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 +$as_echo "$enable_static" >&6; } + + + + +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC="$lt_save_CC" + + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +archive_cmds_need_lc_CXX=no +allow_undefined_flag_CXX= +always_export_symbols_CXX=no +archive_expsym_cmds_CXX= +compiler_needs_object_CXX=no +export_dynamic_flag_spec_CXX= +hardcode_direct_CXX=no +hardcode_direct_absolute_CXX=no +hardcode_libdir_flag_spec_CXX= +hardcode_libdir_flag_spec_ld_CXX= +hardcode_libdir_separator_CXX= +hardcode_minus_L_CXX=no +hardcode_shlibpath_var_CXX=unsupported +hardcode_automatic_CXX=no +inherit_rpath_CXX=no +module_cmds_CXX= +module_expsym_cmds_CXX= +link_all_deplibs_CXX=unknown +old_archive_cmds_CXX=$old_archive_cmds +no_undefined_flag_CXX= +whole_archive_flag_spec_CXX= +enable_shared_with_static_runtimes_CXX=no + +# Source file extension for C++ test sources. +ac_ext=cpp + +# Object file extension for compiled C++ test sources. +objext=o +objext_CXX=$objext + +# No sense in running all these tests if we already determined that +# the CXX compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_caught_CXX_error" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="int some_variable = 0;" + + # Code to be used in simple link tests + lt_simple_link_test_code='int main(int, char *[]) { return(0); }' + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + + # save warnings/boilerplate of simple test code + ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* + + ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* + + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_LD=$LD + lt_save_GCC=$GCC + GCC=$GXX + lt_save_with_gnu_ld=$with_gnu_ld + lt_save_path_LD=$lt_cv_path_LD + if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then + lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx + else + $as_unset lt_cv_prog_gnu_ld + fi + if test -n "${lt_cv_path_LDCXX+set}"; then + lt_cv_path_LD=$lt_cv_path_LDCXX + else + $as_unset lt_cv_path_LD + fi + test -z "${LDCXX+set}" || LD=$LDCXX + CC=${CXX-"c++"} + compiler=$CC + compiler_CXX=$CC + for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` + + + if test -n "$compiler"; then + # We don't want -fno-exception when compiling C++ code, so set the + # no_builtin_flag separately + if test "$GXX" = yes; then + lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' + else + lt_prog_compiler_no_builtin_flag_CXX= + fi + + if test "$GXX" = yes; then + # Set up default GNU C++ configuration + + + +@%:@ Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if test "${lt_cv_path_LD+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && as_fn_error "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if test "${lt_cv_prog_gnu_ld+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + + + + + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test "$with_gnu_ld" = yes; then + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + + # If archive_cmds runs LD, not CC, wlarc should be empty + # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to + # investigate it a little bit more. (MM) + wlarc='${wl}' + + # ancient GNU ld didn't support --whole-archive et. al. + if eval "`$CC -print-prog-name=ld` --help 2>&1" | + $GREP 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec_CXX= + fi + else + with_gnu_ld=no + wlarc= + + # A generic and very simple default shared library creation + # command for GNU C++ for the case where it uses the native + # linker, instead of GNU ld. If possible, this setting should + # overridden to take advantage of the native linker features on + # the platform it is being used on. + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + fi + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' + + else + GXX=no + with_gnu_ld=no + wlarc= + fi + + # PORTME: fill in a description of your system's C++ link characteristics + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + ld_shlibs_CXX=yes + case $host_os in + aix3*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aix[4-9]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds_CXX='' + hardcode_direct_CXX=yes + hardcode_direct_absolute_CXX=yes + hardcode_libdir_separator_CXX=':' + link_all_deplibs_CXX=yes + file_list_spec_CXX='${wl}-f,' + + if test "$GXX" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct_CXX=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L_CXX=yes + hardcode_libdir_flag_spec_CXX='-L$libdir' + hardcode_libdir_separator_CXX= + fi + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + export_dynamic_flag_spec_CXX='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to + # export. + always_export_symbols_CXX=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag_CXX='-berok' + # Determine the default libpath from the value encoded in an empty + # executable. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" + + archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag_CXX="-z nodefs" + archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag_CXX=' ${wl}-bernotok' + allow_undefined_flag_CXX=' ${wl}-berok' + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec_CXX='$convenience' + archive_cmds_need_lc_CXX=yes + # This is similar to how AIX traditionally builds its shared + # libraries. + archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag_CXX=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs_CXX=no + fi + ;; + + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec_CXX='-L$libdir' + allow_undefined_flag_CXX=unsupported + always_export_symbols_CXX=no + enable_shared_with_static_runtimes_CXX=yes + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs_CXX=no + fi + ;; + darwin* | rhapsody*) + + + archive_cmds_need_lc_CXX=no + hardcode_direct_CXX=no + hardcode_automatic_CXX=yes + hardcode_shlibpath_var_CXX=unsupported + whole_archive_flag_spec_CXX='' + link_all_deplibs_CXX=yes + allow_undefined_flag_CXX="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=echo + archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + if test "$lt_cv_apple_cc_single_mod" != "yes"; then + archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" + archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" + fi + + else + ld_shlibs_CXX=no + fi + + ;; + + dgux*) + case $cc_basename in + ec++*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + ghcx*) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + freebsd[12]*) + # C++ shared libraries reported to be fairly broken before + # switch to ELF + ld_shlibs_CXX=no + ;; + + freebsd-elf*) + archive_cmds_need_lc_CXX=no + ;; + + freebsd* | dragonfly*) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + ld_shlibs_CXX=yes + ;; + + gnu*) + ;; + + hpux9*) + hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_CXX=: + export_dynamic_flag_spec_CXX='${wl}-E' + hardcode_direct_CXX=yes + hardcode_minus_L_CXX=yes # Not in the search PATH, + # but as the default + # location of the library. + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aCC*) + archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + ;; + *) + if test "$GXX" = yes; then + archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + + hpux10*|hpux11*) + if test $with_gnu_ld = no; then + hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_CXX=: + + case $host_cpu in + hppa*64*|ia64*) + ;; + *) + export_dynamic_flag_spec_CXX='${wl}-E' + ;; + esac + fi + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct_CXX=no + hardcode_shlibpath_var_CXX=no + ;; + *) + hardcode_direct_CXX=yes + hardcode_direct_absolute_CXX=yes + hardcode_minus_L_CXX=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + esac + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aCC*) + case $host_cpu in + hppa*64*) + archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + ;; + *) + if test "$GXX" = yes; then + if test $with_gnu_ld = no; then + case $host_cpu in + hppa*64*) + archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + + interix[3-9]*) + hardcode_direct_CXX=no + hardcode_shlibpath_var_CXX=no + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + export_dynamic_flag_spec_CXX='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + irix5* | irix6*) + case $cc_basename in + CC*) + # SGI C++ + archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + + # Archives containing C++ object files must be created using + # "CC -ar", where "CC" is the IRIX C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test "$GXX" = yes; then + if test "$with_gnu_ld" = no; then + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib' + fi + fi + link_all_deplibs_CXX=yes + ;; + esac + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_CXX=: + inherit_rpath_CXX=yes + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc* | ecpc* ) + # Intel C++ + with_gnu_ld=yes + # version 8.0 and above of icpc choke on multiply defined symbols + # if we add $predep_objects and $postdep_objects, however 7.1 and + # earlier do not add the objects themselves. + case `$CC -V 2>&1` in + *"Version 7."*) + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 8.0 or newer + tmp_idyn= + case $host_cpu in + ia64*) tmp_idyn=' -i_dynamic';; + esac + archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + archive_cmds_need_lc_CXX=no + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + case `$CC -V` in + *pgCC\ [1-5]* | *pgcpp\ [1-5]*) + prelink_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ + compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"' + old_archive_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ + $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~ + $RANLIB $oldlib' + archive_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + archive_expsym_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + *) # Version 6 will use weak symbols + archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + esac + + hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + ;; + cxx*) + # Compaq C++ + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' + + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec_CXX='-rpath $libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + ;; + xl*) + # IBM XL 8.0 on PPC, with GNU ld + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + no_undefined_flag_CXX=' -zdefs' + archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' + hardcode_libdir_flag_spec_CXX='-R$libdir' + whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + compiler_needs_object_CXX=yes + + # Not sure whether something based on + # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 + # would be better. + output_verbose_link_cmd='echo' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' + ;; + esac + ;; + esac + ;; + + lynxos*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + m88k*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + mvs*) + case $cc_basename in + cxx*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + hardcode_libdir_flag_spec_CXX='-R$libdir' + hardcode_direct_CXX=yes + hardcode_shlibpath_var_CXX=no + fi + # Workaround some broken pre-1.5 toolchains + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' + ;; + + *nto* | *qnx*) + ld_shlibs_CXX=yes + ;; + + openbsd2*) + # C++ shared libraries are fairly broken + ld_shlibs_CXX=no + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + hardcode_direct_CXX=yes + hardcode_shlibpath_var_CXX=no + hardcode_direct_absolute_CXX=yes + archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' + export_dynamic_flag_spec_CXX='${wl}-E' + whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + fi + output_verbose_link_cmd=echo + else + ld_shlibs_CXX=no + fi + ;; + + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + hardcode_libdir_separator_CXX=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + case $host in + osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; + *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; + esac + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + cxx*) + case $host in + osf3*) + allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + ;; + *) + allow_undefined_flag_CXX=' -expect_unresolved \*' + archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~ + $RM $lib.exp' + hardcode_libdir_flag_spec_CXX='-rpath $libdir' + ;; + esac + + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' + case $host in + osf3*) + archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + *) + archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + esac + + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' + + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + + psos*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + lcc*) + # Lucid + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + solaris*) + case $cc_basename in + CC*) + # Sun C++ 4.2, 5.x and Centerline C++ + archive_cmds_need_lc_CXX=yes + no_undefined_flag_CXX=' -zdefs' + archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + hardcode_libdir_flag_spec_CXX='-R$libdir' + hardcode_shlibpath_var_CXX=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. + # Supported since Solaris 2.6 (maybe 2.5.1?) + whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract' + ;; + esac + link_all_deplibs_CXX=yes + + output_verbose_link_cmd='echo' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' + ;; + gcx*) + # Green Hills C++ Compiler + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + + # The C++ compiler must be used to create the archive. + old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + no_undefined_flag_CXX=' ${wl}-z ${wl}defs' + if $CC --version | $GREP -v '^2\.7' > /dev/null; then + archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' + else + # g++ 2.7 appears to require `-G' NOT `-shared' on this + # platform. + archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' + fi + + hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + ;; + esac + fi + ;; + esac + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag_CXX='${wl}-z,text' + archive_cmds_need_lc_CXX=no + hardcode_shlibpath_var_CXX=no + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag_CXX='${wl}-z,text' + allow_undefined_flag_CXX='${wl}-z,nodefs' + archive_cmds_need_lc_CXX=no + hardcode_shlibpath_var_CXX=no + hardcode_libdir_flag_spec_CXX='${wl}-R,$libdir' + hardcode_libdir_separator_CXX=':' + link_all_deplibs_CXX=yes + export_dynamic_flag_spec_CXX='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + vxworks*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 +$as_echo "$ld_shlibs_CXX" >&6; } + test "$ld_shlibs_CXX" = no && can_build_shared=no + + GCC_CXX="$GXX" + LD_CXX="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + # Dependencies to place before and after the object being linked: +predep_objects_CXX= +postdep_objects_CXX= +predeps_CXX= +postdeps_CXX= +compiler_lib_search_path_CXX= + +cat > conftest.$ac_ext <<_LT_EOF +class Foo +{ +public: + Foo (void) { a = 0; } +private: + int a; +}; +_LT_EOF + +if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + # Parse the compiler output and extract the necessary + # objects, libraries and library flags. + + # Sentinel used to keep track of whether or not we are before + # the conftest object file. + pre_test_object_deps_done=no + + for p in `eval "$output_verbose_link_cmd"`; do + case $p in + + -L* | -R* | -l*) + # Some compilers place space between "-{L,R}" and the path. + # Remove the space. + if test $p = "-L" || + test $p = "-R"; then + prev=$p + continue + else + prev= + fi + + if test "$pre_test_object_deps_done" = no; then + case $p in + -L* | -R*) + # Internal compiler library paths should come after those + # provided the user. The postdeps already come after the + # user supplied libs so there is no need to process them. + if test -z "$compiler_lib_search_path_CXX"; then + compiler_lib_search_path_CXX="${prev}${p}" + else + compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}" + fi + ;; + # The "-l" case would never come before the object being + # linked, so don't bother handling this case. + esac + else + if test -z "$postdeps_CXX"; then + postdeps_CXX="${prev}${p}" + else + postdeps_CXX="${postdeps_CXX} ${prev}${p}" + fi + fi + ;; + + *.$objext) + # This assumes that the test object file only shows up + # once in the compiler output. + if test "$p" = "conftest.$objext"; then + pre_test_object_deps_done=yes + continue + fi + + if test "$pre_test_object_deps_done" = no; then + if test -z "$predep_objects_CXX"; then + predep_objects_CXX="$p" + else + predep_objects_CXX="$predep_objects_CXX $p" + fi + else + if test -z "$postdep_objects_CXX"; then + postdep_objects_CXX="$p" + else + postdep_objects_CXX="$postdep_objects_CXX $p" + fi + fi + ;; + + *) ;; # Ignore the rest. + + esac + done + + # Clean up. + rm -f a.out a.exe +else + echo "libtool.m4: error: problem compiling CXX test program" +fi + +$RM -f confest.$objext + +# PORTME: override above test on systems where it is broken +case $host_os in +interix[3-9]*) + # Interix 3.5 installs completely hosed .la files for C++, so rather than + # hack all around it, let's just trust "g++" to DTRT. + predep_objects_CXX= + postdep_objects_CXX= + postdeps_CXX= + ;; + +linux*) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + if test "$solaris_use_stlport4" != yes; then + postdeps_CXX='-library=Cstd -library=Crun' + fi + ;; + esac + ;; + +solaris*) + case $cc_basename in + CC*) + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + # Adding this requires a known-good setup of shared libraries for + # Sun compiler versions before 5.6, else PIC objects from an old + # archive will be linked into the output, leading to subtle bugs. + if test "$solaris_use_stlport4" != yes; then + postdeps_CXX='-library=Cstd -library=Crun' + fi + ;; + esac + ;; +esac + + +case " $postdeps_CXX " in +*" -lc "*) archive_cmds_need_lc_CXX=no ;; +esac + compiler_lib_search_dirs_CXX= +if test -n "${compiler_lib_search_path_CXX}"; then + compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + lt_prog_compiler_wl_CXX= +lt_prog_compiler_pic_CXX= +lt_prog_compiler_static_CXX= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } + + # C++ specific cases for pic, static, wl, etc. + if test "$GXX" = yes; then + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_CXX='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic_CXX='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic_CXX='-DDLL_EXPORT' + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic_CXX='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + lt_prog_compiler_pic_CXX= + ;; + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic_CXX=-Kconform_pic + fi + ;; + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + ;; + *) + lt_prog_compiler_pic_CXX='-fPIC' + ;; + esac + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic_CXX='-fPIC -shared' + ;; + *) + lt_prog_compiler_pic_CXX='-fPIC' + ;; + esac + else + case $host_os in + aix[4-9]*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_CXX='-Bstatic' + else + lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68*) + # Green Hills C++ Compiler + # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" + ;; + esac + ;; + dgux*) + case $cc_basename in + ec++*) + lt_prog_compiler_pic_CXX='-KPIC' + ;; + ghcx*) + # Green Hills C++ Compiler + lt_prog_compiler_pic_CXX='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | dragonfly*) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' + if test "$host_cpu" != ia64; then + lt_prog_compiler_pic_CXX='+Z' + fi + ;; + aCC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic_CXX='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + interix*) + # This is c89, which is MS Visual C++ (no shared libs) + # Anyone wants to do a port? + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + KCC*) + # KAI C++ Compiler + lt_prog_compiler_wl_CXX='--backend -Wl,' + lt_prog_compiler_pic_CXX='-fPIC' + ;; + ecpc* ) + # old Intel C++ for x86_64 which still supported -KPIC. + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-static' + ;; + icpc* ) + # Intel C++, used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-fPIC' + lt_prog_compiler_static_CXX='-static' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-fpic' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + cxx*) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + lt_prog_compiler_pic_CXX= + lt_prog_compiler_static_CXX='-non_shared' + ;; + xlc* | xlC*) + # IBM XL 8.0 on PPC + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-qpic' + lt_prog_compiler_static_CXX='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + lt_prog_compiler_wl_CXX='-Qoption ld ' + ;; + esac + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx*) + lt_prog_compiler_pic_CXX='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd* | netbsdelf*-gnu) + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic_CXX='-fPIC -shared' + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + lt_prog_compiler_wl_CXX='--backend -Wl,' + ;; + RCC*) + # Rational C++ 2.4.1 + lt_prog_compiler_pic_CXX='-pic' + ;; + cxx*) + # Digital/Compaq C++ + lt_prog_compiler_wl_CXX='-Wl,' + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + lt_prog_compiler_pic_CXX= + lt_prog_compiler_static_CXX='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + solaris*) + case $cc_basename in + CC*) + # Sun C++ 4.2, 5.x and Centerline C++ + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + lt_prog_compiler_wl_CXX='-Qoption ld ' + ;; + gcx*) + # Green Hills C++ Compiler + lt_prog_compiler_pic_CXX='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + lt_prog_compiler_pic_CXX='-pic' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + lcc*) + # Lucid + lt_prog_compiler_pic_CXX='-pic' + ;; + *) + ;; + esac + ;; + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + lt_prog_compiler_pic_CXX='-KPIC' + ;; + *) + ;; + esac + ;; + vxworks*) + ;; + *) + lt_prog_compiler_can_build_shared_CXX=no + ;; + esac + fi + +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic_CXX= + ;; + *) + lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX@&t@ -DPIC" + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic_CXX" >&5 +$as_echo "$lt_prog_compiler_pic_CXX" >&6; } + + + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } +if test "${lt_cv_prog_compiler_pic_works_CXX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_works_CXX=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic_CXX@&t@ -DPIC" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:__oline__: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works_CXX=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; } + +if test x"$lt_cv_prog_compiler_pic_works_CXX" = xyes; then + case $lt_prog_compiler_pic_CXX in + "" | " "*) ;; + *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; + esac +else + lt_prog_compiler_pic_CXX= + lt_prog_compiler_can_build_shared_CXX=no +fi + +fi + + + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if test "${lt_cv_prog_compiler_static_works_CXX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_static_works_CXX=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works_CXX=yes + fi + else + lt_cv_prog_compiler_static_works_CXX=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; } + +if test x"$lt_cv_prog_compiler_static_works_CXX" = xyes; then + : +else + lt_prog_compiler_static_CXX= +fi + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o_CXX=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:__oline__: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o_CXX=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o_CXX=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:__oline__: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o_CXX=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } + + + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } + if test "$hard_links" = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + case $host_os in + aix[4-9]*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + export_symbols_cmds_CXX="$ltdll_cmds" + ;; + cygwin* | mingw* | cegcc*) + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;/^.*[ ]__nm__/s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' + ;; + linux* | k*bsd*-gnu) + link_all_deplibs_CXX=no + ;; + *) + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac + exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 +$as_echo "$ld_shlibs_CXX" >&6; } +test "$ld_shlibs_CXX" = no && can_build_shared=no + +with_gnu_ld_CXX=$with_gnu_ld + + + + + + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc_CXX" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc_CXX=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds_CXX in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl_CXX + pic_flag=$lt_prog_compiler_pic_CXX + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag_CXX + allow_undefined_flag_CXX= + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 + (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + then + archive_cmds_need_lc_CXX=no + else + archive_cmds_need_lc_CXX=yes + fi + allow_undefined_flag_CXX=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc_CXX" >&5 +$as_echo "$archive_cmds_need_lc_CXX" >&6; } + ;; + esac + fi + ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } + +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[4-9]*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[123]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +interix[3-9]*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # Some binutils ld are patched to set DT_RUNPATH + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\"" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : + shlibpath_overrides_runpath=yes +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } +hardcode_action_CXX= +if test -n "$hardcode_libdir_flag_spec_CXX" || + test -n "$runpath_var_CXX" || + test "X$hardcode_automatic_CXX" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$hardcode_direct_CXX" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" != no && + test "$hardcode_minus_L_CXX" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action_CXX=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action_CXX=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action_CXX=unsupported +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 +$as_echo "$hardcode_action_CXX" >&6; } + +if test "$hardcode_action_CXX" = relink || + test "$inherit_rpath_CXX" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + + fi # test -n "$compiler" + + CC=$lt_save_CC + LDCXX=$LD + LD=$lt_save_LD + GCC=$lt_save_GCC + with_gnu_ld=$lt_save_with_gnu_ld + lt_cv_path_LDCXX=$lt_cv_path_LD + lt_cv_path_LD=$lt_save_path_LD + lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld + lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld +fi # test "$_lt_caught_CXX_error" != yes + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + + + + + + + + + + + + ac_config_commands="$ac_config_commands libtool" + + + + +# Only expand once: + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +$as_echo_n "checking whether ln -s works... " >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +$as_echo "no, using $LN_S" >&6; } +fi + + +############### +### DocBook ### +############### +for ac_prog in openjade jade +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_JADE+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$JADE"; then + ac_cv_prog_JADE="$JADE" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_JADE="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +JADE=$ac_cv_prog_JADE +if test -n "$JADE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $JADE" >&5 +$as_echo "$JADE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$JADE" && break +done + +if test -n "$JADE"; then + for ac_prog in onsgmls nsgmls +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_NSGMLS+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NSGMLS"; then + ac_cv_prog_NSGMLS="$NSGMLS" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_NSGMLS="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +NSGMLS=$ac_cv_prog_NSGMLS +if test -n "$NSGMLS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NSGMLS" >&5 +$as_echo "$NSGMLS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$NSGMLS" && break +done + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for DocBook V4.1" >&5 +$as_echo_n "checking for DocBook V4.1... " >&6; } +if test "${pgac_cv_check_docbook+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat >conftest.sgml < + + test + + random + + testsect + text + + + +EOF + +${NSGMLS-false} -s conftest.sgml 1>&5 2>&1 +if test $? -eq 0; then + pgac_cv_check_docbook=yes +else + pgac_cv_check_docbook=no +fi +rm -f conftest.sgml +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_check_docbook" >&5 +$as_echo "$pgac_cv_check_docbook" >&6; } + +have_docbook=$pgac_cv_check_docbook + + + if test "$pgac_cv_check_docbook" = "yes"; then + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for DocBook stylesheets" >&5 +$as_echo_n "checking for DocBook stylesheets... " >&6; } + +@%:@ Check whether --with-docbook-stylesheets was given. +if test "${with_docbook_stylesheets+set}" = set; then : + withval=$with_docbook_stylesheets; muse_docbook_prefix="$withval" +fi + +if test "${pgac_cv_path_stylesheets+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + +if test -n "$muse_docbook_prefix"; then + if test -r "$muse_docbook_prefix/html/docbook.dsl" \ + && test -r "$muse_docbook_prefix/print/docbook.dsl"; then + pgac_cv_path_stylesheets="$muse_docbook_prefix" + fi +fi +if test -z "$pgac_cv_path_stylesheets"; then + if test -n "$DOCBOOKSTYLE"; then + if test -r "$DOCBOOKSTYLE/html/docbook.dsl" \ + && test -r "$DOCBOOKSTYLE/print/docbook.dsl"; then + pgac_cv_path_stylesheets="$DOCBOOKSTYLE" + fi + fi +fi +if test -z "$pgac_cv_path_stylesheets"; then + for pgac_prefix in /usr /usr/local /opt; do + for pgac_infix in share lib; do + for pgac_postfix in \ + sgml/stylesheets/nwalsh-modular \ + sgml/stylesheets/docbook \ + sgml/docbook/dsssl/modular \ + sgml/docbook/stylesheet/dsssl/modular + do + pgac_candidate=$pgac_prefix/$pgac_infix/$pgac_postfix + if test -r "$pgac_candidate/html/docbook.dsl" \ + && test -r "$pgac_candidate/print/docbook.dsl" + then + pgac_cv_path_stylesheets=$pgac_candidate + break 3 + fi + done + done + done +fi + +fi + +DOCBOOKSTYLE=$pgac_cv_path_stylesheets + +if test -n "$DOCBOOKSTYLE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DOCBOOKSTYLE" >&5 +$as_echo "$DOCBOOKSTYLE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + if test -n "$DOCBOOKSTYLE"; then + DOCBOOKTARGETS="book1.html" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: DocBook stylesheets not found or not usable - documentation will not be built" >&5 +$as_echo "$as_me: WARNING: DocBook stylesheets not found or not usable - documentation will not be built" >&2;} + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: DocBook 4.1 DTD not found or not usable - documentation will not be built" >&5 +$as_echo "$as_me: WARNING: DocBook 4.1 DTD not found or not usable - documentation will not be built" >&2;} + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: jade not found - documentation will not be built" >&5 +$as_echo "$as_me: WARNING: jade not found - documentation will not be built" >&2;} +fi + + +############### +### doxygen ### +############### + +# Extract the first word of "doxygen", so it can be a program name with args. +set dummy doxygen; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_DOXYGEN+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $DOXYGEN in + [\\/]* | ?:[\\/]*) + ac_cv_path_DOXYGEN="$DOXYGEN" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_DOXYGEN="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_DOXYGEN" && ac_cv_path_DOXYGEN="no" + ;; +esac +fi +DOXYGEN=$ac_cv_path_DOXYGEN +if test -n "$DOXYGEN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DOXYGEN" >&5 +$as_echo "$DOXYGEN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + +################ +### graphviz ### +################ + +# Extract the first word of "dot", so it can be a program name with args. +set dummy dot; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_DOT+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $DOT in + [\\/]* | ?:[\\/]*) + ac_cv_path_DOT="$DOT" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_DOT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_DOT" && ac_cv_path_DOT="no" + ;; +esac +fi +DOT=$ac_cv_path_DOT +if test -n "$DOT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DOT" >&5 +$as_echo "$DOT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +if test "$DOT" != "no"; then + HAVEDOT=YES + DOTPATH=$( dirname "$DOT" ) +else + HAVEDOT=NO +fi + + + +############ +### perl ### +############ + +# Extract the first word of "perl", so it can be a program name with args. +set dummy perl; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_PERL+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $PERL in + [\\/]* | ?:[\\/]*) + ac_cv_path_PERL="$PERL" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_PERL" && ac_cv_path_PERL="no" + ;; +esac +fi +PERL=$ac_cv_path_PERL +if test -n "$PERL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5 +$as_echo "$PERL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +if test "$PERL" == "no"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: you don't have perl installed! wierdo! (and doxygen might not like this)" >&5 +$as_echo "$as_me: WARNING: you don't have perl installed! wierdo! (and doxygen might not like this)" >&2;} +fi + + +######### +### X ### +######### +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for X" >&5 +$as_echo_n "checking for X... " >&6; } + + +@%:@ Check whether --with-x was given. +if test "${with_x+set}" = set; then : + withval=$with_x; +fi + +# $have_x is `yes', `no', `disabled', or empty when we do not yet know. +if test "x$with_x" = xno; then + # The user explicitly disabled X. + have_x=disabled +else + case $x_includes,$x_libraries in #( + *\'*) as_fn_error "cannot use X directory names containing '" "$LINENO" 5;; #( + *,NONE | NONE,*) if test "${ac_cv_have_x+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + # One or both of the vars are not set, and there is no cached value. +ac_x_includes=no ac_x_libraries=no +rm -f -r conftest.dir +if mkdir conftest.dir; then + cd conftest.dir + cat >Imakefile <<'_ACEOF' +incroot: + @echo incroot='${INCROOT}' +usrlibdir: + @echo usrlibdir='${USRLIBDIR}' +libdir: + @echo libdir='${LIBDIR}' +_ACEOF + if (export CC; ${XMKMF-xmkmf}) >/dev/null 2>/dev/null && test -f Makefile; then + # GNU make sometimes prints "make[1]: Entering...", which would confuse us. + for ac_var in incroot usrlibdir libdir; do + eval "ac_im_$ac_var=\`\${MAKE-make} $ac_var 2>/dev/null | sed -n 's/^$ac_var=//p'\`" + done + # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR. + for ac_extension in a so sl dylib la dll; do + if test ! -f "$ac_im_usrlibdir/libX11.$ac_extension" && + test -f "$ac_im_libdir/libX11.$ac_extension"; then + ac_im_usrlibdir=$ac_im_libdir; break + fi + done + # Screen out bogus values from the imake configuration. They are + # bogus both because they are the default anyway, and because + # using them would break gcc on systems where it needs fixed includes. + case $ac_im_incroot in + /usr/include) ac_x_includes= ;; + *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;; + esac + case $ac_im_usrlibdir in + /usr/lib | /usr/lib64 | /lib | /lib64) ;; + *) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;; + esac + fi + cd .. + rm -f -r conftest.dir +fi + +# Standard set of common directories for X headers. +# Check X11 before X11Rn because it is often a symlink to the current release. +ac_x_header_dirs=' +/usr/X11/include +/usr/X11R7/include +/usr/X11R6/include +/usr/X11R5/include +/usr/X11R4/include + +/usr/include/X11 +/usr/include/X11R7 +/usr/include/X11R6 +/usr/include/X11R5 +/usr/include/X11R4 + +/usr/local/X11/include +/usr/local/X11R7/include +/usr/local/X11R6/include +/usr/local/X11R5/include +/usr/local/X11R4/include + +/usr/local/include/X11 +/usr/local/include/X11R7 +/usr/local/include/X11R6 +/usr/local/include/X11R5 +/usr/local/include/X11R4 + +/usr/X386/include +/usr/x386/include +/usr/XFree86/include/X11 + +/usr/include +/usr/local/include +/usr/unsupported/include +/usr/athena/include +/usr/local/x11r5/include +/usr/lpp/Xamples/include + +/usr/openwin/include +/usr/openwin/share/include' + +if test "$ac_x_includes" = no; then + # Guess where to find include files, by looking for Xlib.h. + # First, try using that file with no special directory specified. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # We can compile using X headers with no special include directory. +ac_x_includes= +else + for ac_dir in $ac_x_header_dirs; do + if test -r "$ac_dir/X11/Xlib.h"; then + ac_x_includes=$ac_dir + break + fi +done +fi +rm -f conftest.err conftest.$ac_ext +fi # $ac_x_includes = no + +if test "$ac_x_libraries" = no; then + # Check for the libraries. + # See if we find them without any special options. + # Don't add to $LIBS permanently. + ac_save_LIBS=$LIBS + LIBS="-lX11 $LIBS" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@include +int +main () +{ +XrmInitialize () + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + LIBS=$ac_save_LIBS +# We can link X programs with no special library path. +ac_x_libraries= +else + LIBS=$ac_save_LIBS +for ac_dir in `$as_echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g` +do + # Don't even attempt the hair of trying to link an X program! + for ac_extension in a so sl dylib la dll; do + if test -r "$ac_dir/libX11.$ac_extension"; then + ac_x_libraries=$ac_dir + break 2 + fi + done +done +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi # $ac_x_libraries = no + +case $ac_x_includes,$ac_x_libraries in #( + no,* | *,no | *\'*) + # Didn't find X, or a directory has "'" in its name. + ac_cv_have_x="have_x=no";; #( + *) + # Record where we found X for the cache. + ac_cv_have_x="have_x=yes\ + ac_x_includes='$ac_x_includes'\ + ac_x_libraries='$ac_x_libraries'" +esac +fi +;; #( + *) have_x=yes;; + esac + eval "$ac_cv_have_x" +fi # $with_x != no + +if test "$have_x" != yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_x" >&5 +$as_echo "$have_x" >&6; } + no_x=yes +else + # If each of the values was on the command line, it overrides each guess. + test "x$x_includes" = xNONE && x_includes=$ac_x_includes + test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries + # Update the cache value to reflect the command line values. + ac_cv_have_x="have_x=yes\ + ac_x_includes='$x_includes'\ + ac_x_libraries='$x_libraries'" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: libraries $x_libraries, headers $x_includes" >&5 +$as_echo "libraries $x_libraries, headers $x_includes" >&6; } +fi + +if test "$no_x" = yes; then + # Not all programs may use this symbol, but it does not hurt to define it. + +$as_echo "@%:@define X_DISPLAY_MISSING 1" >>confdefs.h + + X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS= +else + if test -n "$x_includes"; then + X_CFLAGS="$X_CFLAGS -I$x_includes" + fi + + # It would also be nice to do this for all -L options, not just this one. + if test -n "$x_libraries"; then + X_LIBS="$X_LIBS -L$x_libraries" + # For Solaris; some versions of Sun CC require a space after -R and + # others require no space. Words are not sufficient . . . . + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -R must be followed by a space" >&5 +$as_echo_n "checking whether -R must be followed by a space... " >&6; } + ac_xsave_LIBS=$LIBS; LIBS="$LIBS -R$x_libraries" + ac_xsave_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + X_LIBS="$X_LIBS -R$x_libraries" +else + LIBS="$ac_xsave_LIBS -R $x_libraries" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + X_LIBS="$X_LIBS -R $x_libraries" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: neither works" >&5 +$as_echo "neither works" >&6; } +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + ac_c_werror_flag=$ac_xsave_c_werror_flag + LIBS=$ac_xsave_LIBS + fi + + # Check for system-dependent libraries X programs must link with. + # Do this before checking for the system-independent R6 libraries + # (-lICE), since we may need -lsocket or whatever for X linking. + + if test "$ISC" = yes; then + X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet" + else + # Martyn Johnson says this is needed for Ultrix, if the X + # libraries were built with DECnet support. And Karl Berry says + # the Alpha needs dnet_stub (dnet does not exist). + ac_xsave_LIBS="$LIBS"; LIBS="$LIBS $X_LIBS -lX11" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char XOpenDisplay (); +int +main () +{ +return XOpenDisplay (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet" >&5 +$as_echo_n "checking for dnet_ntoa in -ldnet... " >&6; } +if test "${ac_cv_lib_dnet_dnet_ntoa+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldnet $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dnet_ntoa (); +int +main () +{ +return dnet_ntoa (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dnet_dnet_ntoa=yes +else + ac_cv_lib_dnet_dnet_ntoa=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_dnet_ntoa" >&5 +$as_echo "$ac_cv_lib_dnet_dnet_ntoa" >&6; } +if test "x$ac_cv_lib_dnet_dnet_ntoa" = x""yes; then : + X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet" +fi + + if test $ac_cv_lib_dnet_dnet_ntoa = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet_stub" >&5 +$as_echo_n "checking for dnet_ntoa in -ldnet_stub... " >&6; } +if test "${ac_cv_lib_dnet_stub_dnet_ntoa+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldnet_stub $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dnet_ntoa (); +int +main () +{ +return dnet_ntoa (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dnet_stub_dnet_ntoa=yes +else + ac_cv_lib_dnet_stub_dnet_ntoa=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5 +$as_echo "$ac_cv_lib_dnet_stub_dnet_ntoa" >&6; } +if test "x$ac_cv_lib_dnet_stub_dnet_ntoa" = x""yes; then : + X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub" +fi + + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LIBS="$ac_xsave_LIBS" + + # msh@cis.ufl.edu says -lnsl (and -lsocket) are needed for his 386/AT, + # to get the SysV transport functions. + # Chad R. Larson says the Pyramis MIS-ES running DC/OSx (SVR4) + # needs -lnsl. + # The nsl library prevents programs from opening the X display + # on Irix 5.2, according to T.E. Dickey. + # The functions gethostbyname, getservbyname, and inet_addr are + # in -lbsd on LynxOS 3.0.1/i386, according to Lars Hecking. + ac_fn_c_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname" +if test "x$ac_cv_func_gethostbyname" = x""yes; then : + +fi + + if test $ac_cv_func_gethostbyname = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl" >&5 +$as_echo_n "checking for gethostbyname in -lnsl... " >&6; } +if test "${ac_cv_lib_nsl_gethostbyname+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lnsl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char gethostbyname (); +int +main () +{ +return gethostbyname (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_nsl_gethostbyname=yes +else + ac_cv_lib_nsl_gethostbyname=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostbyname" >&5 +$as_echo "$ac_cv_lib_nsl_gethostbyname" >&6; } +if test "x$ac_cv_lib_nsl_gethostbyname" = x""yes; then : + X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl" +fi + + if test $ac_cv_lib_nsl_gethostbyname = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lbsd" >&5 +$as_echo_n "checking for gethostbyname in -lbsd... " >&6; } +if test "${ac_cv_lib_bsd_gethostbyname+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lbsd $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char gethostbyname (); +int +main () +{ +return gethostbyname (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_bsd_gethostbyname=yes +else + ac_cv_lib_bsd_gethostbyname=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bsd_gethostbyname" >&5 +$as_echo "$ac_cv_lib_bsd_gethostbyname" >&6; } +if test "x$ac_cv_lib_bsd_gethostbyname" = x""yes; then : + X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd" +fi + + fi + fi + + # lieder@skyler.mavd.honeywell.com says without -lsocket, + # socket/setsockopt and other routines are undefined under SCO ODT + # 2.0. But -lsocket is broken on IRIX 5.2 (and is not necessary + # on later versions), says Simon Leinen: it contains gethostby* + # variants that don't use the name server (or something). -lsocket + # must be given before -lnsl if both are needed. We assume that + # if connect needs -lnsl, so does gethostbyname. + ac_fn_c_check_func "$LINENO" "connect" "ac_cv_func_connect" +if test "x$ac_cv_func_connect" = x""yes; then : + +fi + + if test $ac_cv_func_connect = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for connect in -lsocket" >&5 +$as_echo_n "checking for connect in -lsocket... " >&6; } +if test "${ac_cv_lib_socket_connect+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsocket $X_EXTRA_LIBS $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char connect (); +int +main () +{ +return connect (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_socket_connect=yes +else + ac_cv_lib_socket_connect=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_connect" >&5 +$as_echo "$ac_cv_lib_socket_connect" >&6; } +if test "x$ac_cv_lib_socket_connect" = x""yes; then : + X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS" +fi + + fi + + # Guillermo Gomez says -lposix is necessary on A/UX. + ac_fn_c_check_func "$LINENO" "remove" "ac_cv_func_remove" +if test "x$ac_cv_func_remove" = x""yes; then : + +fi + + if test $ac_cv_func_remove = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for remove in -lposix" >&5 +$as_echo_n "checking for remove in -lposix... " >&6; } +if test "${ac_cv_lib_posix_remove+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lposix $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char remove (); +int +main () +{ +return remove (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_posix_remove=yes +else + ac_cv_lib_posix_remove=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_posix_remove" >&5 +$as_echo "$ac_cv_lib_posix_remove" >&6; } +if test "x$ac_cv_lib_posix_remove" = x""yes; then : + X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix" +fi + + fi + + # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay. + ac_fn_c_check_func "$LINENO" "shmat" "ac_cv_func_shmat" +if test "x$ac_cv_func_shmat" = x""yes; then : + +fi + + if test $ac_cv_func_shmat = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shmat in -lipc" >&5 +$as_echo_n "checking for shmat in -lipc... " >&6; } +if test "${ac_cv_lib_ipc_shmat+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lipc $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shmat (); +int +main () +{ +return shmat (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_ipc_shmat=yes +else + ac_cv_lib_ipc_shmat=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ipc_shmat" >&5 +$as_echo "$ac_cv_lib_ipc_shmat" >&6; } +if test "x$ac_cv_lib_ipc_shmat" = x""yes; then : + X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc" +fi + + fi + fi + + # Check for libraries that X11R6 Xt/Xaw programs need. + ac_save_LDFLAGS=$LDFLAGS + test -n "$x_libraries" && LDFLAGS="$LDFLAGS -L$x_libraries" + # SM needs ICE to (dynamically) link under SunOS 4.x (so we have to + # check for ICE first), but we must link in the order -lSM -lICE or + # we get undefined symbols. So assume we have SM if we have ICE. + # These have to be linked with before -lX11, unlike the other + # libraries we check for below, so use a different variable. + # John Interrante, Karl Berry + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for IceConnectionNumber in -lICE" >&5 +$as_echo_n "checking for IceConnectionNumber in -lICE... " >&6; } +if test "${ac_cv_lib_ICE_IceConnectionNumber+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lICE $X_EXTRA_LIBS $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char IceConnectionNumber (); +int +main () +{ +return IceConnectionNumber (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_ICE_IceConnectionNumber=yes +else + ac_cv_lib_ICE_IceConnectionNumber=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5 +$as_echo "$ac_cv_lib_ICE_IceConnectionNumber" >&6; } +if test "x$ac_cv_lib_ICE_IceConnectionNumber" = x""yes; then : + X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE" +fi + + LDFLAGS=$ac_save_LDFLAGS + +fi + +if test "$X_DISPLAY_MISSING" != ""; then + as_fn_error "X required" "$LINENO" 5 +fi + + + +########## +### QT ### +########## +#CONFIGURE_QT(3.2.0, , AC_MSG_ERROR([need qt >= 3.2.0])) +#if test "$muse_qttest" = "yes"; then +# AC_LANG_PUSH([C++]) +# muse_save_CFLAGS="$CFLAGS" +# CFLAGS="$CFLAGS $QT_CFLAGS" +# muse_save_CXXFLAGS="$CXXFLAGS" +# CXXFLAGS="$CXXFLAGS $QT_CFLAGS" +# muse_save_LDFLAGS="$LDFLAGS" +# LDFLAGS="$LDFLAGS $QT_LIBS" +# AC_CHECK_LIB(qt-mt, qt_selection_property, [ +# true +# ],[ +# AC_MSG_ERROR([ +# +# MusE requires thread enabled QT (qt-mt) >= 3.2.0 +# +# You can either compile your own version of QT (making sure you enable +# threading!) or install the appropriate package for your distribution. +#]) +# ]) +# CFLAGS="$muse_save_CFLAGS" +# CXXFLAGS="$muse_save_CXXFLAGS" +# LDFLAGS="$muse_save_LDFLAGS" +# unset muse_save_CFLAGS +# unset muse_save_CXXFLAGS +# unset muse_save_LDFLAGS +# AC_LANG_POP([C++]) +#fi + +QTDIR=/usr/share/qt4 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $QTDIR" >&5 +$as_echo "$QTDIR" >&6; } +if test "$no_x" = yes; then + # Not all programs may use this symbol, but it does not hurt to define it. + +$as_echo "@%:@define X_DISPLAY_MISSING 1" >>confdefs.h + + X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS= +else + if test -n "$x_includes"; then + X_CFLAGS="$X_CFLAGS -I$x_includes" + fi + + # It would also be nice to do this for all -L options, not just this one. + if test -n "$x_libraries"; then + X_LIBS="$X_LIBS -L$x_libraries" + # For Solaris; some versions of Sun CC require a space after -R and + # others require no space. Words are not sufficient . . . . + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -R must be followed by a space" >&5 +$as_echo_n "checking whether -R must be followed by a space... " >&6; } + ac_xsave_LIBS=$LIBS; LIBS="$LIBS -R$x_libraries" + ac_xsave_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + X_LIBS="$X_LIBS -R$x_libraries" +else + LIBS="$ac_xsave_LIBS -R $x_libraries" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + X_LIBS="$X_LIBS -R $x_libraries" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: neither works" >&5 +$as_echo "neither works" >&6; } +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + ac_c_werror_flag=$ac_xsave_c_werror_flag + LIBS=$ac_xsave_LIBS + fi + + # Check for system-dependent libraries X programs must link with. + # Do this before checking for the system-independent R6 libraries + # (-lICE), since we may need -lsocket or whatever for X linking. + + if test "$ISC" = yes; then + X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet" + else + # Martyn Johnson says this is needed for Ultrix, if the X + # libraries were built with DECnet support. And Karl Berry says + # the Alpha needs dnet_stub (dnet does not exist). + ac_xsave_LIBS="$LIBS"; LIBS="$LIBS $X_LIBS -lX11" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char XOpenDisplay (); +int +main () +{ +return XOpenDisplay (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet" >&5 +$as_echo_n "checking for dnet_ntoa in -ldnet... " >&6; } +if test "${ac_cv_lib_dnet_dnet_ntoa+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldnet $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dnet_ntoa (); +int +main () +{ +return dnet_ntoa (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dnet_dnet_ntoa=yes +else + ac_cv_lib_dnet_dnet_ntoa=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_dnet_ntoa" >&5 +$as_echo "$ac_cv_lib_dnet_dnet_ntoa" >&6; } +if test "x$ac_cv_lib_dnet_dnet_ntoa" = x""yes; then : + X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet" +fi + + if test $ac_cv_lib_dnet_dnet_ntoa = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet_stub" >&5 +$as_echo_n "checking for dnet_ntoa in -ldnet_stub... " >&6; } +if test "${ac_cv_lib_dnet_stub_dnet_ntoa+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldnet_stub $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dnet_ntoa (); +int +main () +{ +return dnet_ntoa (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dnet_stub_dnet_ntoa=yes +else + ac_cv_lib_dnet_stub_dnet_ntoa=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5 +$as_echo "$ac_cv_lib_dnet_stub_dnet_ntoa" >&6; } +if test "x$ac_cv_lib_dnet_stub_dnet_ntoa" = x""yes; then : + X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub" +fi + + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LIBS="$ac_xsave_LIBS" + + # msh@cis.ufl.edu says -lnsl (and -lsocket) are needed for his 386/AT, + # to get the SysV transport functions. + # Chad R. Larson says the Pyramis MIS-ES running DC/OSx (SVR4) + # needs -lnsl. + # The nsl library prevents programs from opening the X display + # on Irix 5.2, according to T.E. Dickey. + # The functions gethostbyname, getservbyname, and inet_addr are + # in -lbsd on LynxOS 3.0.1/i386, according to Lars Hecking. + ac_fn_c_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname" +if test "x$ac_cv_func_gethostbyname" = x""yes; then : + +fi + + if test $ac_cv_func_gethostbyname = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl" >&5 +$as_echo_n "checking for gethostbyname in -lnsl... " >&6; } +if test "${ac_cv_lib_nsl_gethostbyname+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lnsl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char gethostbyname (); +int +main () +{ +return gethostbyname (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_nsl_gethostbyname=yes +else + ac_cv_lib_nsl_gethostbyname=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostbyname" >&5 +$as_echo "$ac_cv_lib_nsl_gethostbyname" >&6; } +if test "x$ac_cv_lib_nsl_gethostbyname" = x""yes; then : + X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl" +fi + + if test $ac_cv_lib_nsl_gethostbyname = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lbsd" >&5 +$as_echo_n "checking for gethostbyname in -lbsd... " >&6; } +if test "${ac_cv_lib_bsd_gethostbyname+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lbsd $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char gethostbyname (); +int +main () +{ +return gethostbyname (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_bsd_gethostbyname=yes +else + ac_cv_lib_bsd_gethostbyname=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bsd_gethostbyname" >&5 +$as_echo "$ac_cv_lib_bsd_gethostbyname" >&6; } +if test "x$ac_cv_lib_bsd_gethostbyname" = x""yes; then : + X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd" +fi + + fi + fi + + # lieder@skyler.mavd.honeywell.com says without -lsocket, + # socket/setsockopt and other routines are undefined under SCO ODT + # 2.0. But -lsocket is broken on IRIX 5.2 (and is not necessary + # on later versions), says Simon Leinen: it contains gethostby* + # variants that don't use the name server (or something). -lsocket + # must be given before -lnsl if both are needed. We assume that + # if connect needs -lnsl, so does gethostbyname. + ac_fn_c_check_func "$LINENO" "connect" "ac_cv_func_connect" +if test "x$ac_cv_func_connect" = x""yes; then : + +fi + + if test $ac_cv_func_connect = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for connect in -lsocket" >&5 +$as_echo_n "checking for connect in -lsocket... " >&6; } +if test "${ac_cv_lib_socket_connect+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsocket $X_EXTRA_LIBS $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char connect (); +int +main () +{ +return connect (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_socket_connect=yes +else + ac_cv_lib_socket_connect=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_connect" >&5 +$as_echo "$ac_cv_lib_socket_connect" >&6; } +if test "x$ac_cv_lib_socket_connect" = x""yes; then : + X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS" +fi + + fi + + # Guillermo Gomez says -lposix is necessary on A/UX. + ac_fn_c_check_func "$LINENO" "remove" "ac_cv_func_remove" +if test "x$ac_cv_func_remove" = x""yes; then : + +fi + + if test $ac_cv_func_remove = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for remove in -lposix" >&5 +$as_echo_n "checking for remove in -lposix... " >&6; } +if test "${ac_cv_lib_posix_remove+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lposix $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char remove (); +int +main () +{ +return remove (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_posix_remove=yes +else + ac_cv_lib_posix_remove=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_posix_remove" >&5 +$as_echo "$ac_cv_lib_posix_remove" >&6; } +if test "x$ac_cv_lib_posix_remove" = x""yes; then : + X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix" +fi + + fi + + # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay. + ac_fn_c_check_func "$LINENO" "shmat" "ac_cv_func_shmat" +if test "x$ac_cv_func_shmat" = x""yes; then : + +fi + + if test $ac_cv_func_shmat = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shmat in -lipc" >&5 +$as_echo_n "checking for shmat in -lipc... " >&6; } +if test "${ac_cv_lib_ipc_shmat+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lipc $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shmat (); +int +main () +{ +return shmat (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_ipc_shmat=yes +else + ac_cv_lib_ipc_shmat=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ipc_shmat" >&5 +$as_echo "$ac_cv_lib_ipc_shmat" >&6; } +if test "x$ac_cv_lib_ipc_shmat" = x""yes; then : + X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc" +fi + + fi + fi + + # Check for libraries that X11R6 Xt/Xaw programs need. + ac_save_LDFLAGS=$LDFLAGS + test -n "$x_libraries" && LDFLAGS="$LDFLAGS -L$x_libraries" + # SM needs ICE to (dynamically) link under SunOS 4.x (so we have to + # check for ICE first), but we must link in the order -lSM -lICE or + # we get undefined symbols. So assume we have SM if we have ICE. + # These have to be linked with before -lX11, unlike the other + # libraries we check for below, so use a different variable. + # John Interrante, Karl Berry + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for IceConnectionNumber in -lICE" >&5 +$as_echo_n "checking for IceConnectionNumber in -lICE... " >&6; } +if test "${ac_cv_lib_ICE_IceConnectionNumber+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lICE $X_EXTRA_LIBS $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char IceConnectionNumber (); +int +main () +{ +return IceConnectionNumber (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_ICE_IceConnectionNumber=yes +else + ac_cv_lib_ICE_IceConnectionNumber=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5 +$as_echo "$ac_cv_lib_ICE_IceConnectionNumber" >&6; } +if test "x$ac_cv_lib_ICE_IceConnectionNumber" = x""yes; then : + X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE" +fi + + LDFLAGS=$ac_save_LDFLAGS + +fi + +QT_LIBS="-Wl,-rpath,$QTDIR/lib -L$QTDIR/lib -lQtGui -lQtOpenGL -lQtCore -lQt3Support $X_LIBS -lX11 -lXext -lXmu -lXt -lXi $X_EXTRA_LIBS -lGLU -lGL -lpthread" +QTDIR_INC="-I$QTDIR/include -I$QTDIR/include/QtGui -I$QTDIR/include/QtCore -I$QTDIR/include/Qt3Support $X_CFLAGS -DQT_OPENGL_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED" +QTDIR_BIN="$QTDIR/bin" + + +############ +### ALSA ### +############ +alsa_save_CFLAGS="$CFLAGS" +alsa_save_LDFLAGS="$LDFLAGS" +alsa_save_LIBS="$LIBS" +alsa_found=yes + + +@%:@ Check whether --with-alsa-prefix was given. +if test "${with_alsa_prefix+set}" = set; then : + withval=$with_alsa_prefix; alsa_prefix="$withval" +else + alsa_prefix="" +fi + + + +@%:@ Check whether --with-alsa-inc-prefix was given. +if test "${with_alsa_inc_prefix+set}" = set; then : + withval=$with_alsa_inc_prefix; alsa_inc_prefix="$withval" +else + alsa_inc_prefix="" +fi + + +@%:@ Check whether --enable-alsatest was given. +if test "${enable_alsatest+set}" = set; then : + enableval=$enable_alsatest; enable_alsatest=no +else + enable_alsatest=yes +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ALSA CFLAGS" >&5 +$as_echo_n "checking for ALSA CFLAGS... " >&6; } +if test "$alsa_inc_prefix" != "" ; then + ALSA_CFLAGS="$ALSA_CFLAGS -I$alsa_inc_prefix" + CFLAGS="$CFLAGS -I$alsa_inc_prefix" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ALSA_CFLAGS" >&5 +$as_echo "$ALSA_CFLAGS" >&6; } + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ALSA LDFLAGS" >&5 +$as_echo_n "checking for ALSA LDFLAGS... " >&6; } +if test "$alsa_prefix" != "" ; then + ALSA_LIBS="$ALSA_LIBS -L$alsa_prefix" + LDFLAGS="$LDFLAGS $ALSA_LIBS" +fi + +ALSA_LIBS="$ALSA_LIBS -lasound -lm -ldl" +LIBS=`echo $LIBS | sed 's/-lm//'` +LIBS=`echo $LIBS | sed 's/-ldl//'` +LIBS=`echo $LIBS | sed 's/ //'` +LIBS="$ALSA_LIBS $LIBS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ALSA_LIBS" >&5 +$as_echo "$ALSA_LIBS" >&6; } + +min_alsa_version=0.9.0 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for libasound headers version >= $min_alsa_version" >&5 +$as_echo_n "checking for libasound headers version >= $min_alsa_version... " >&6; } +no_alsa="" + alsa_min_major_version=`echo $min_alsa_version | \ + sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'` + alsa_min_minor_version=`echo $min_alsa_version | \ + sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'` + alsa_min_micro_version=`echo $min_alsa_version | \ + sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'` + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include + +int +main () +{ + +void main(void) +{ +/* ensure backward compatibility */ +#if !defined(SND_LIB_MAJOR) && defined(SOUNDLIB_VERSION_MAJOR) +#define SND_LIB_MAJOR SOUNDLIB_VERSION_MAJOR +#endif +#if !defined(SND_LIB_MINOR) && defined(SOUNDLIB_VERSION_MINOR) +#define SND_LIB_MINOR SOUNDLIB_VERSION_MINOR +#endif +#if !defined(SND_LIB_SUBMINOR) && defined(SOUNDLIB_VERSION_SUBMINOR) +#define SND_LIB_SUBMINOR SOUNDLIB_VERSION_SUBMINOR +#endif + +# if(SND_LIB_MAJOR > $alsa_min_major_version) + exit(0); +# else +# if(SND_LIB_MAJOR < $alsa_min_major_version) +# error not present +# endif + +# if(SND_LIB_MINOR > $alsa_min_minor_version) + exit(0); +# else +# if(SND_LIB_MINOR < $alsa_min_minor_version) +# error not present +# endif + +# if(SND_LIB_SUBMINOR < $alsa_min_micro_version) +# error not present +# endif +# endif +# endif +exit(0); +} + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: found." >&5 +$as_echo "found." >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not present." >&5 +$as_echo "not present." >&6; } + + alsa_found=no + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for snd_seq_create_event in -lasound" >&5 +$as_echo_n "checking for snd_seq_create_event in -lasound... " >&6; } +if test "${ac_cv_lib_asound_snd_seq_create_event+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lasound $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char snd_seq_create_event (); +int +main () +{ +return snd_seq_create_event (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ac_cv_lib_asound_snd_seq_create_event=yes +else + ac_cv_lib_asound_snd_seq_create_event=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_asound_snd_seq_create_event" >&5 +$as_echo "$ac_cv_lib_asound_snd_seq_create_event" >&6; } +if test "x$ac_cv_lib_asound_snd_seq_create_event" = x""yes; then : + cat >>confdefs.h <<_ACEOF +@%:@define HAVE_LIBASOUND 1 +_ACEOF + + LIBS="-lasound $LIBS" + +else + + alsa_found=no + +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +if test "x$alsa_found" = "xyes" ; then + true + LIBS=`echo $LIBS | sed 's/-lasound//g'` + LIBS=`echo $LIBS | sed 's/ //'` + LIBS="-lasound $LIBS" +fi +if test "x$alsa_found" = "xno" ; then + as_fn_error "latest alsa (0.9.x) is required" "$LINENO" 5 + + CFLAGS="$alsa_save_CFLAGS" + LDFLAGS="$alsa_save_LDFLAGS" + LIBS="$alsa_save_LIBS" + ALSA_CFLAGS="" + ALSA_LIBS="" +fi + + + + + +################# +### fluidsynth ### +################# +LIBFLUIDSYNTH= +muse_enable_fluidlib="yes" +synth_fluidsynth="fluidsynth" +synth_fluid="fluid" +@%:@ Check whether --enable-fluidsynth was given. +if test "${enable_fluidsynth+set}" = set; then : + enableval=$enable_fluidsynth; + case "$enableval" in + "yes") + synth_fluidsynth="fluidsynth" + synth_fluid="fluid" + ;; + "no") + muse_enable_fluidlib="no" + synth_fluidsynth="" + synth_fluid="" + ;; + *) + as_fn_error "must use --enable-fluidsynth(=yes/no) or --disable-fluidsynth" "$LINENO" 5 + ;; + esac + +fi + + + if test "$muse_enable_fluidlib" = "yes"; then + ENABLEFLUIDSYNTH_TRUE= + ENABLEFLUIDSYNTH_FALSE='#' +else + ENABLEFLUIDSYNTH_TRUE='#' + ENABLEFLUIDSYNTH_FALSE= +fi + + + +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_PKG_CONFIG+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PKG_CONFIG=$ac_cv_path_PKG_CONFIG +if test -n "$PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 +$as_echo "$PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_PKG_CONFIG"; then + ac_pt_PKG_CONFIG=$PKG_CONFIG + # Extract the first word of "pkg-config", so it can be a program name with args. +set dummy pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG +if test -n "$ac_pt_PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 +$as_echo "$ac_pt_PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_PKG_CONFIG" = x; then + PKG_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + PKG_CONFIG=$ac_pt_PKG_CONFIG + fi +else + PKG_CONFIG="$ac_cv_path_PKG_CONFIG" +fi + +fi +if test -n "$PKG_CONFIG"; then + _pkg_min_version=0.9.0 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 +$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + PKG_CONFIG="" + fi + +fi + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fluidsynth" >&5 +$as_echo_n "checking for Fluidsynth... " >&6; } + +if test -n "$PKG_CONFIG"; then + if test -n "$Fluidsynth_CFLAGS"; then + pkg_cv_Fluidsynth_CFLAGS="$Fluidsynth_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"fluidsynth\""; } >&5 + ($PKG_CONFIG --exists --print-errors "fluidsynth") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_Fluidsynth_CFLAGS=`$PKG_CONFIG --cflags "fluidsynth" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi +if test -n "$PKG_CONFIG"; then + if test -n "$Fluidsynth_LIBS"; then + pkg_cv_Fluidsynth_LIBS="$Fluidsynth_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"fluidsynth\""; } >&5 + ($PKG_CONFIG --exists --print-errors "fluidsynth") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_Fluidsynth_LIBS=`$PKG_CONFIG --libs "fluidsynth" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + Fluidsynth_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "fluidsynth"` + else + Fluidsynth_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "fluidsynth"` + fi + # Put the nasty error message in config.log where it belongs + echo "$Fluidsynth_PKG_ERRORS" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: libfluidsynth not found; disabling fluidsynth plugins" >&5 +$as_echo "$as_me: WARNING: libfluidsynth not found; disabling fluidsynth plugins" >&2;} ; + muse_enable_fluidlib="no" + +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: libfluidsynth not found; disabling fluidsynth plugins" >&5 +$as_echo "$as_me: WARNING: libfluidsynth not found; disabling fluidsynth plugins" >&2;} ; + muse_enable_fluidlib="no" + +else + Fluidsynth_CFLAGS=$pkg_cv_Fluidsynth_CFLAGS + Fluidsynth_LIBS=$pkg_cv_Fluidsynth_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + FLUIDSYNTHDIRS="fluid fluidsynth"; +$as_echo "@%:@define ENABLEFLUIDSYNTH 1" >>confdefs.h + +fi + + + +if test "$muse_enable_fluidlib" = "no"; then + synth_fluidsynth="" + synth_fluid="" +fi + + +############### +### sndfile ### +############### + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for SNDFILE" >&5 +$as_echo_n "checking for SNDFILE... " >&6; } + +if test -n "$PKG_CONFIG"; then + if test -n "$SNDFILE_CFLAGS"; then + pkg_cv_SNDFILE_CFLAGS="$SNDFILE_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"sndfile >= 1.0.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "sndfile >= 1.0.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_SNDFILE_CFLAGS=`$PKG_CONFIG --cflags "sndfile >= 1.0.0" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi +if test -n "$PKG_CONFIG"; then + if test -n "$SNDFILE_LIBS"; then + pkg_cv_SNDFILE_LIBS="$SNDFILE_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"sndfile >= 1.0.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "sndfile >= 1.0.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_SNDFILE_LIBS=`$PKG_CONFIG --libs "sndfile >= 1.0.0" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + SNDFILE_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "sndfile >= 1.0.0"` + else + SNDFILE_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "sndfile >= 1.0.0"` + fi + # Put the nasty error message in config.log where it belongs + echo "$SNDFILE_PKG_ERRORS" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + as_fn_error "need libsndfile >= 1.0.0" "$LINENO" 5 + +elif test $pkg_failed = untried; then + as_fn_error "need libsndfile >= 1.0.0" "$LINENO" 5 + +else + SNDFILE_CFLAGS=$pkg_cv_SNDFILE_CFLAGS + SNDFILE_LIBS=$pkg_cv_SNDFILE_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + true +fi + +############### +### libsamplerate ### +############### + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for SAMPLERATE" >&5 +$as_echo_n "checking for SAMPLERATE... " >&6; } + +if test -n "$PKG_CONFIG"; then + if test -n "$SAMPLERATE_CFLAGS"; then + pkg_cv_SAMPLERATE_CFLAGS="$SAMPLERATE_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"samplerate >= 0.1.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "samplerate >= 0.1.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_SAMPLERATE_CFLAGS=`$PKG_CONFIG --cflags "samplerate >= 0.1.0" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi +if test -n "$PKG_CONFIG"; then + if test -n "$SAMPLERATE_LIBS"; then + pkg_cv_SAMPLERATE_LIBS="$SAMPLERATE_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"samplerate >= 0.1.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "samplerate >= 0.1.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_SAMPLERATE_LIBS=`$PKG_CONFIG --libs "samplerate >= 0.1.0" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + SAMPLERATE_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "samplerate >= 0.1.0"` + else + SAMPLERATE_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "samplerate >= 0.1.0"` + fi + # Put the nasty error message in config.log where it belongs + echo "$SAMPLERATE_PKG_ERRORS" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + as_fn_error "need libsamplerate" "$LINENO" 5 + +elif test $pkg_failed = untried; then + as_fn_error "need libsamplerate" "$LINENO" 5 + +else + SAMPLERATE_CFLAGS=$pkg_cv_SAMPLERATE_CFLAGS + SAMPLERATE_LIBS=$pkg_cv_SAMPLERATE_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + true +fi + +############### +### libuuid ### +############### +ac_fn_c_check_header_mongrel "$LINENO" "uuid/uuid.h" "ac_cv_header_uuid_uuid_h" "$ac_includes_default" +if test "x$ac_cv_header_uuid_uuid_h" = x""yes; then : + UUID_FOUND="yes" +else + UUID_FOUND="no" +fi + + +if test x$UUID_FOUND = xno; then + as_fn_error "Header file uuid.h, from the uuid-dev (sometimes in e2fsprogs) package, is required" "$LINENO" 5 +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for uuid_generate in -luuid" >&5 +$as_echo_n "checking for uuid_generate in -luuid... " >&6; } +if test "${ac_cv_lib_uuid_uuid_generate+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-luuid $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char uuid_generate (); +int +main () +{ +return uuid_generate (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_uuid_uuid_generate=yes +else + ac_cv_lib_uuid_uuid_generate=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_uuid_uuid_generate" >&5 +$as_echo "$ac_cv_lib_uuid_uuid_generate" >&6; } +if test "x$ac_cv_lib_uuid_uuid_generate" = x""yes; then : + UUID_FOUND="yes" +else + UUID_FOUND="no" +fi + +if test x$UUID_FOUND = xno; then + as_fn_error "libuuid (sometimes in e2fsprogs package) is required" "$LINENO" 5 +fi +UUID_LIBS="-luuid" + + + +## PKG_CHECK_MODULES(UUID, uuid >= 1.0, +## true, +## AC_MSG_ERROR([need libuuid >= 1.0 from e2fsprogs package]) +## ) + +############ +### JACK ### +############ + + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for JACK" >&5 +$as_echo_n "checking for JACK... " >&6; } + +if test -n "$PKG_CONFIG"; then + if test -n "$JACK_CFLAGS"; then + pkg_cv_JACK_CFLAGS="$JACK_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"jack >= 0.98.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "jack >= 0.98.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_JACK_CFLAGS=`$PKG_CONFIG --cflags "jack >= 0.98.0" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi +if test -n "$PKG_CONFIG"; then + if test -n "$JACK_LIBS"; then + pkg_cv_JACK_LIBS="$JACK_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"jack >= 0.98.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "jack >= 0.98.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_JACK_LIBS=`$PKG_CONFIG --libs "jack >= 0.98.0" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + JACK_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "jack >= 0.98.0"` + else + JACK_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "jack >= 0.98.0"` + fi + # Put the nasty error message in config.log where it belongs + echo "$JACK_PKG_ERRORS" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + as_fn_error "need JACK >= 0.98.0" "$LINENO" 5 + +elif test $pkg_failed = untried; then + as_fn_error "need JACK >= 0.98.0" "$LINENO" 5 + +else + JACK_CFLAGS=$pkg_cv_JACK_CFLAGS + JACK_LIBS=$pkg_cv_JACK_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + true +fi + +############## +### LASH ### +############## +muse_enable_lash="no" +@%:@ Check whether --enable-lash was given. +if test "${enable_lash+set}" = set; then : + enableval=$enable_lash; + case "$enableval" in + "yes") + muse_enable_lash="yes" + ;; + "no") + muse_enable_lash="no" + ;; + *) + as_fn_error "must use --enable-lash(=yes/no) or --disable-lash" "$LINENO" 5 + ;; + esac + +fi + + +if test "$muse_enable_lash" = "yes"; then + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LASH" >&5 +$as_echo_n "checking for LASH... " >&6; } + +if test -n "$PKG_CONFIG"; then + if test -n "$LASH_CFLAGS"; then + pkg_cv_LASH_CFLAGS="$LASH_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"lash-1.0 >= 0.2\""; } >&5 + ($PKG_CONFIG --exists --print-errors "lash-1.0 >= 0.2") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_LASH_CFLAGS=`$PKG_CONFIG --cflags "lash-1.0 >= 0.2" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi +if test -n "$PKG_CONFIG"; then + if test -n "$LASH_LIBS"; then + pkg_cv_LASH_LIBS="$LASH_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"lash-1.0 >= 0.2\""; } >&5 + ($PKG_CONFIG --exists --print-errors "lash-1.0 >= 0.2") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_LASH_LIBS=`$PKG_CONFIG --libs "lash-1.0 >= 0.2" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + LASH_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "lash-1.0 >= 0.2"` + else + LASH_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "lash-1.0 >= 0.2"` + fi + # Put the nasty error message in config.log where it belongs + echo "$LASH_PKG_ERRORS" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + LASH_FOUND="no" +elif test $pkg_failed = untried; then + LASH_FOUND="no" +else + LASH_CFLAGS=$pkg_cv_LASH_CFLAGS + LASH_LIBS=$pkg_cv_LASH_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + LASH_FOUND="yes" +fi + + + + if test "$LASH_FOUND" = "yes"; then + +$as_echo "@%:@define HAVE_LASH 1" >>confdefs.h + + LASH_VERSION=$( pkg-config --modversion lash-1.0 ) + +cat >>confdefs.h <<_ACEOF +@%:@define LASH_VERSION "$LASH_VERSION" +_ACEOF + + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: LASH support is disabled" >&5 +$as_echo "$as_me: WARNING: LASH support is disabled" >&2;} + LASH_FOUND="no" +fi + if test "$LASH_FOUND" = "yes"; then + HAVE_LASH_TRUE= + HAVE_LASH_FALSE='#' +else + HAVE_LASH_TRUE='#' + HAVE_LASH_FALSE= +fi + + + + + +################# +### givertcap ### +################# + +GIVERTCAP= +report_rtcap="no" +@%:@ Check whether --enable-rtcap was given. +if test "${enable_rtcap+set}" = set; then : + enableval=$enable_rtcap; + case "$enableval" in + "yes") + +$as_echo "@%:@define RTCAP 1" >>confdefs.h + + MUSECXXFLAGS="$MUSECXXFLAGS -DRTCAP" + GIVERTCAP="givertcap" + + ac_fn_c_check_header_mongrel "$LINENO" "sys/capability.h" "ac_cv_header_sys_capability_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_capability_h" = x""yes; then : + report_rtcap="yes" +else + as_fn_error "Missing sys/capability.h" "$LINENO" 5 +fi + + + ;; + "no") + ;; + *) + as_fn_error "must use --enable-rtcap(=yes/no) or --disable-rtcap" "$LINENO" 5 + esac + +fi + + if test "$report_rtcap" = "yes"; then + RTCAP_TRUE= + RTCAP_FALSE='#' +else + RTCAP_TRUE='#' + RTCAP_FALSE= +fi + + + + +#################### +### suid-install ### +#################### + +SUIDINSTALL="no" +@%:@ Check whether --enable-suid-install was given. +if test "${enable_suid_install+set}" = set; then : + enableval=$enable_suid_install; + case "$enableval" in + "yes") + SUIDINSTALL="yes" + ;; + "no") + ;; + *) + as_fn_error "must use --enable-suid-install(=yes/no) or --disable-suid-install" "$LINENO" 5 + ;; + esac + +fi + + + +################## +### suid-build ### +################## +SUIDBUILD="no" +@%:@ Check whether --enable-suid-build was given. +if test "${enable_suid_build+set}" = set; then : + enableval=$enable_suid_build; + case "$enableval" in + "yes") + SUIDBUILD="yes" + ;; + "no") + SUIDBUILD="no" + ;; + *) + as_fn_error "must use --enable-suid-build(=yes/no) or --disable-suid-build" "$LINENO" 5 + ;; + esac + +fi + + + + +######################## +### doxygen-treeview ### +######################## +DOXYGEN_TREEVIEW="YES" +report_doxy_treeview="yes"; +@%:@ Check whether --enable-doxy-treeview was given. +if test "${enable_doxy_treeview+set}" = set; then : + enableval=$enable_doxy_treeview; + case "$enableval" in + "yes") + ;; + "no") + DOXYGEN_TREEVIEW="NO" + report_doxy_treeview="no"; + ;; + *) + as_fn_error "must use --enable-doxy-treeview(=yes/no) or --disable-doxy-treeview" "$LINENO" 5 + ;; + esac + +fi + + + +################ +### patchbay ### +################ +###PATCHBAY="no" +###AC_SUBST(PATCHBAY) +###AM_CONDITIONAL(PATCHBAY, test "$PATCHBAY" == "yes") + +## -DQT_NO_CAST_ASCII +MUSECXXFLAGS="-g -fno-exceptions -Wall -W -D_GNU_SOURCE -D_REENTRANT \ + -DQT_CLEAN_NAMESPACE -DQT_NO_COMPAT \ + -I\$(top_srcdir) -I\$(top_srcdir)/muse/widgets \$(QT_CFLAGS)" + +#MUSEOPTCXXFLAGS="-O6 -fomit-frame-pointer -ffast-math -fstrength-reduce \ +#-funroll-loops" +#MUSEOPTCXXFLAGS="-O2" +MUSEOPTCXXFLAGS="-O3 -fomit-frame-pointer -ffast-math -fstrength-reduce -funroll-loops" + +# -fmove-all-movables + +################ +### optimize ### +################ +report_optimise="no" +@%:@ Check whether --enable-optimize was given. +if test "${enable_optimize+set}" = set; then : + enableval=$enable_optimize; + case "$enableval" in + "yes") + report_optimise="yes" + CXXFLAGS="$( echo "$CXXFLAGS" | sed "s/-O. *//" )" + MUSECXXFLAGS="$MUSECXXFLAGS $MUSEOPTCXXFLAGS" + ;; + "no") + ;; + *) + as_fn_error "must use --enable-optimize(=yes/no) or --disable-optimize" "$LINENO" 5 + ;; + esac + +fi + + +############# +### debug ### +############# +report_debug="no" +@%:@ Check whether --enable-debug was given. +if test "${enable_debug+set}" = set; then : + enableval=$enable_debug; + case "$enableval" in + "yes") + report_debug="yes" + CXXFLAGS="" + ;; + "no") + ;; + *) + as_fn_error "must use --enable-debug(=yes/no) or --disable-debug" "$LINENO" 5 + ;; + esac + +fi + + +########################### +### PCH ### +### precompiled headers ### +########################### + +@%:@ Check whether --enable-pch was given. +if test "${enable_pch+set}" = set; then : + enableval=$enable_pch; + case "$enableval" in + "yes") + MUSECXXFLAGS="$MUSECXXFLAGS -Winvalid-pch" + PCH="yes" + + +$as_echo "@%:@define PCH 1" >>confdefs.h + + ;; + "no") + ;; + *) + as_fn_error "must use --enable-pch(=yes/no) or --disable-pch" "$LINENO" 5 + ;; + esac + +fi + + if test "$PCH" = "yes"; then + PCH_TRUE= + PCH_FALSE='#' +else + PCH_TRUE='#' + PCH_FALSE= +fi + + +############ +### arch ### +############ + +report_march="none" +@%:@ Check whether --enable-arch was given. +if test "${enable_arch+set}" = set; then : + enableval=$enable_arch; + case "$enableval" in + "no") + ;; + *) + report_march="$enableval" + MUSECXXFLAGS="$MUSECXXFLAGS -mtune=$enableval -march=$enableval" + ;; + esac + +fi + + +########################### +### SSE ### +### SSE optimizations ### +########################### + +report_sse="no" +@%:@ Check whether --enable-sse was given. +if test "${enable_sse+set}" = set; then : + enableval=$enable_sse; + case "$enableval" in + "yes") + ## MUSECXXFLAGS="$MUSECXXFLAGS -Winvalid-pch" + report_sse="yes" + USE_SSE="yes" + + +$as_echo "@%:@define USE_SSE 1" >>confdefs.h + + ;; + "no") + ;; + *) + as_fn_error "must use --enable-sse(=yes/no) or --disable-sse" "$LINENO" 5 + ;; + esac + +fi + + if test "$USE_SSE" = "yes"; then + USE_SSE_TRUE= + USE_SSE_FALSE='#' +else + USE_SSE_TRUE='#' + USE_SSE_FALSE= +fi + + +########## +# PYTHON # +########## +# python detection borrowed from libvirt (http://libvirt.org) + +@%:@ Check whether --with-python was given. +if test "${with_python+set}" = set; then : + withval=$with_python; +else + enable_python=yes +fi + + +PYTHON_VERSION= +PYTHON_INCLUDES= +if test "$enable_python" != "no" ; then + if test -x "$enable_python/bin/python" + then + { $as_echo "$as_me:${as_lineno-$LINENO}: Found python in $enable_python/bin/python" >&5 +$as_echo "$as_me: Found python in $enable_python/bin/python" >&6;} + PYTHON="$enable_python/bin/python" + enable_python=yes + else + if test -x "$enable_python" + then + { $as_echo "$as_me:${as_lineno-$LINENO}: Found python in $enable_python" >&5 +$as_echo "$as_me: Found python in $enable_python" >&6;} + PYTHON="$enable_python" + enable_python=yes + else + if test -x "$PYTHON" + then + { $as_echo "$as_me:${as_lineno-$LINENO}: Found python in environment PYTHON=$PYTHON" >&5 +$as_echo "$as_me: Found python in environment PYTHON=$PYTHON" >&6;} + enable_python=yes + fi + fi + fi + + if test "$enable_python" == "yes" ; then + + + + + # Find any Python interpreter. + if test -z "$PYTHON"; then + for ac_prog in python python2 python3 python3.0 python2.5 python2.4 python2.3 python2.2 python2.1 python2.0 +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_PYTHON+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $PYTHON in + [\\/]* | ?:[\\/]*) + ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_PYTHON="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PYTHON=$ac_cv_path_PYTHON +if test -n "$PYTHON"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 +$as_echo "$PYTHON" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$PYTHON" && break +done +test -n "$PYTHON" || PYTHON=":" + + fi + am_display_PYTHON=python + + + if test "$PYTHON" = :; then + : + else + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON version" >&5 +$as_echo_n "checking for $am_display_PYTHON version... " >&6; } +if test "${am_cv_python_version+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[:3])"` +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_version" >&5 +$as_echo "$am_cv_python_version" >&6; } + PYTHON_VERSION=$am_cv_python_version + + + + PYTHON_PREFIX='${prefix}' + + PYTHON_EXEC_PREFIX='${exec_prefix}' + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON platform" >&5 +$as_echo_n "checking for $am_display_PYTHON platform... " >&6; } +if test "${am_cv_python_platform+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + am_cv_python_platform=`$PYTHON -c "import sys; sys.stdout.write(sys.platform)"` +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_platform" >&5 +$as_echo "$am_cv_python_platform" >&6; } + PYTHON_PLATFORM=$am_cv_python_platform + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON script directory" >&5 +$as_echo_n "checking for $am_display_PYTHON script directory... " >&6; } +if test "${am_cv_python_pythondir+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "x$prefix" = xNONE + then + am_py_prefix=$ac_default_prefix + else + am_py_prefix=$prefix + fi + am_cv_python_pythondir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(0,0,prefix='$am_py_prefix'))" 2>/dev/null || + echo "$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages"` + case $am_cv_python_pythondir in + $am_py_prefix*) + am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'` + am_cv_python_pythondir=`echo "$am_cv_python_pythondir" | sed "s,^$am__strip_prefix,$PYTHON_PREFIX,"` + ;; + *) + case $am_py_prefix in + /usr|/System*) ;; + *) + am_cv_python_pythondir=$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages + ;; + esac + ;; + esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_pythondir" >&5 +$as_echo "$am_cv_python_pythondir" >&6; } + pythondir=$am_cv_python_pythondir + + + + pkgpythondir=\${pythondir}/$PACKAGE + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON extension module directory" >&5 +$as_echo_n "checking for $am_display_PYTHON extension module directory... " >&6; } +if test "${am_cv_python_pyexecdir+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "x$exec_prefix" = xNONE + then + am_py_exec_prefix=$am_py_prefix + else + am_py_exec_prefix=$exec_prefix + fi + am_cv_python_pyexecdir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(1,0,prefix='$am_py_exec_prefix'))" 2>/dev/null || + echo "$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages"` + case $am_cv_python_pyexecdir in + $am_py_exec_prefix*) + am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'` + am_cv_python_pyexecdir=`echo "$am_cv_python_pyexecdir" | sed "s,^$am__strip_prefix,$PYTHON_EXEC_PREFIX,"` + ;; + *) + case $am_py_exec_prefix in + /usr|/System*) ;; + *) + am_cv_python_pyexecdir=$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages + ;; + esac + ;; + esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_pyexecdir" >&5 +$as_echo "$am_cv_python_pyexecdir" >&6; } + pyexecdir=$am_cv_python_pyexecdir + + + + pkgpyexecdir=\${pyexecdir}/$PACKAGE + + + + fi + + + + if test "$PYTHON" != : ; then + PYTHON_CONFIG="$PYTHON-config" + + if test -x "$PYTHON_CONFIG" + then + PYTHON_INCLUDES=`$PYTHON_CONFIG --includes` + PYTHON_LIB=`$PYTHON_CONFIG --libs` + else + if test -r $PYTHON_EXEC_PREFIX/include/python$PYTHON_VERSION/Python.h + then + PYTHON_INCLUDES=-I$PYTHON_EXEC_PREFIX/include/python$PYTHON_VERSION + else + if test -r $prefix/include/python$PYTHON_VERSION/Python.h + then + PYTHON_INCLUDES=-I$prefix/include/python$PYTHON_VERSION + else + if test -r /usr/include/python$PYTHON_VERSION/Python.h + then + PYTHON_INCLUDES=-I/usr/include/python$PYTHON_VERSION + else + { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find python$PYTHON_VERSION/Python.h, disabling bindings" >&5 +$as_echo "$as_me: Could not find python$PYTHON_VERSION/Python.h, disabling bindings" >&6;} + enable_python=no + fi + fi + fi + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find python interpreter, disabling bindings" >&5 +$as_echo "$as_me: Could not find python interpreter, disabling bindings" >&6;} + enable_python=no + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find python in $enable_python, disabling bindings" >&5 +$as_echo "$as_me: Could not find python in $enable_python, disabling bindings" >&6;} + enable_python=no + fi +fi + if test "$enable_python" = "yes"; then + ENABLE_PYTHON_TRUE= + ENABLE_PYTHON_FALSE='#' +else + ENABLE_PYTHON_TRUE='#' + ENABLE_PYTHON_FALSE= +fi + + + + + +#AC_ARG_ENABLE(python, +#enable_python="yes" +# [ --disable-python disable python bindings for MusE],[ +# case "$enableval" in +# "no") +# enable_python="no" +# ;; +# *) +# AC_MSG_ERROR([must use --enable-python(=yes/no) or --disable-python]) +# ;; +# esac +# ]) +# +#if test "$enable_python" = "yes"; then +# AM_PATH_PYTHON +# PYTHON_INCLUDE_DIR="" +# if test -n "$PYTHON_INCLUDES" ; then +# PYTHON_INCLUDE_DIR=$PYTHON_INCLUDES +# python_bindings="yes" +# else +# python_bindings="no - devel pkg not found" +# fi +#fi +#AM_CONDITIONAL(ENABLE_PYTHON, test "$python_bindings" = "yes") + +################### +### vst plugins ### +################### + +vst_possible=no +VST="no" +@%:@ Check whether --enable-vst was given. +if test "${enable_vst+set}" = set; then : + enableval=$enable_vst; if test x$enable_vst = xyes ; then + vst_requested=yes; + fi + + +fi + + +if test x$vst_requested = xyes ; then + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for FST" >&5 +$as_echo_n "checking for FST... " >&6; } + +if test -n "$PKG_CONFIG"; then + if test -n "$FST_CFLAGS"; then + pkg_cv_FST_CFLAGS="$FST_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libfst\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libfst") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_FST_CFLAGS=`$PKG_CONFIG --cflags "libfst" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi +if test -n "$PKG_CONFIG"; then + if test -n "$FST_LIBS"; then + pkg_cv_FST_LIBS="$FST_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libfst\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libfst") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_FST_LIBS=`$PKG_CONFIG --libs "libfst" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + FST_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "libfst"` + else + FST_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "libfst"` + fi + # Put the nasty error message in config.log where it belongs + echo "$FST_PKG_ERRORS" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + vst_possible=no +elif test $pkg_failed = untried; then + vst_possible=no +else + FST_CFLAGS=$pkg_cv_FST_CFLAGS + FST_LIBS=$pkg_cv_FST_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + vst_possible=yes +fi +fi + +if test x$vst_possible = xyes -a x$vst_requested = xyes ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking support for VST/win plugins" >&5 +$as_echo_n "checking support for VST/win plugins... " >&6; } + VST_CFLAGS="$FST_CFLAGS" + VST_LIBS="$FST_LIBS" + VST="yes" + +$as_echo "@%:@define VST_SUPPORT 1" >>confdefs.h + +fi + + if test x$vst_possible = xyes -a x$vst_requested = xyes; then + VST_SUPPORT_TRUE= + VST_SUPPORT_FALSE='#' +else + VST_SUPPORT_TRUE='#' + VST_SUPPORT_FALSE= +fi + + + +################### +### OSC support ### +################### + +osc_requested=no +LO_LIB_FOUND="no" +OSC="no" +@%:@ Check whether --enable-osc was given. +if test "${enable_osc+set}" = set; then : + enableval=$enable_osc; if test x$enable_osc = xyes ; then + osc_requested=yes; + fi + + +fi + + +if test x$osc_requested = xyes ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking support for OSC" >&5 +$as_echo_n "checking support for OSC... " >&6; } +## AC_CHECK_LIB(lo, lo_send, LO_LIB_FOUND="yes", LO_LIB_FOUND="no") +## PKG_CHECK_MODULES(LO, lo >= 0.2, LO_LIB_FOUND="yes", LO_LIB_FOUND="no") + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LO" >&5 +$as_echo_n "checking for LO... " >&6; } + +if test -n "$PKG_CONFIG"; then + if test -n "$LO_CFLAGS"; then + pkg_cv_LO_CFLAGS="$LO_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"liblo\""; } >&5 + ($PKG_CONFIG --exists --print-errors "liblo") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_LO_CFLAGS=`$PKG_CONFIG --cflags "liblo" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi +if test -n "$PKG_CONFIG"; then + if test -n "$LO_LIBS"; then + pkg_cv_LO_LIBS="$LO_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"liblo\""; } >&5 + ($PKG_CONFIG --exists --print-errors "liblo") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_LO_LIBS=`$PKG_CONFIG --libs "liblo" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + LO_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "liblo"` + else + LO_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "liblo"` + fi + # Put the nasty error message in config.log where it belongs + echo "$LO_PKG_ERRORS" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + LO_LIB_FOUND=no +elif test $pkg_failed = untried; then + LO_LIB_FOUND=no +else + LO_CFLAGS=$pkg_cv_LO_CFLAGS + LO_LIBS=$pkg_cv_LO_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + LO_LIB_FOUND=yes +fi + if test x$LO_LIB_FOUND = xno; then + as_fn_error "Library liblo from The Lightweight OSC Implementation is required" "$LINENO" 5 + fi +fi + +if test x$LO_LIB_FOUND = xyes ; then + LO_CFLAGS="$LO_CFLAGS" + ##LO_LIBS="$LO_LIBS" + LO_LIBS="-llo" + OSC="yes" + + + +$as_echo "@%:@define OSC_SUPPORT 1" >>confdefs.h + +fi + + if test x$LO_LIB_FOUND = xyes; then + OSC_SUPPORT_TRUE= + OSC_SUPPORT_FALSE='#' +else + OSC_SUPPORT_TRUE='#' + OSC_SUPPORT_FALSE= +fi + + +## LO_LIBS="-llo" +## AC_SUBST(LO_CFLAGS) +## AC_SUBST(LO_LIBS) + +## PKG_CHECK_MODULES(LO, lo >= 0.23, +## true, +## AC_MSG_ERROR([need liblo >= 0.23 ]) +## ) + + + +################### +### dssi plugins ### +################### + +dssi_requested=no +## LO_LIB_FOUND="no" +DSSI_H_FOUND="no" +DSSI="no" +@%:@ Check whether --enable-dssi was given. +if test "${enable_dssi+set}" = set; then : + enableval=$enable_dssi; if test x$enable_dssi = xyes ; then + dssi_requested=yes; + fi + + +fi + + + +if test x$dssi_requested = xyes ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking support for DSSI + DSSI-Vst plugins" >&5 +$as_echo_n "checking support for DSSI + DSSI-Vst plugins... " >&6; } + ## AC_CHECK_LIB(lo, lo_send, LO_LIB_FOUND="yes", LO_LIB_FOUND="no") + ## PKG_CHECK_MODULES(LO, lo >= 0.2, LO_LIB_FOUND="yes", LO_LIB_FOUND="no") +## PKG_CHECK_MODULES(LO,liblo, [ LO_LIB_FOUND=yes ], [ LO_LIB_FOUND=no ]) +## if test x$LO_LIB_FOUND = xno; then +## AC_MSG_ERROR([Library liblo from The Lightweight OSC Implementation is required]) +## fi + + ac_fn_c_check_header_mongrel "$LINENO" "dssi.h" "ac_cv_header_dssi_h" "$ac_includes_default" +if test "x$ac_cv_header_dssi_h" = x""yes; then : + DSSI_FOUND="yes" +else + DSSI_FOUND="no" +fi + + + ## PKG_CHECK_MODULES(DSSI [ DSSI_FOUND=yes ], [ DSSI_FOUND=no ]) + if test x$DSSI_FOUND = xno; then + as_fn_error "Header file dssi.h from DSSI (Disposable Soft Synth Interface) is required" "$LINENO" 5 + fi +fi + +## if test x$LO_LIB_FOUND = xyes -a x$DSSI_FOUND = xyes ; then +if test x$DSSI_FOUND = xyes ; then +## LO_CFLAGS="$LO_CFLAGS" + ##LO_LIBS="$LO_LIBS" +## LO_LIBS="-llo" + DSSI="yes" +## AC_SUBST(LO_CFLAGS) +## AC_SUBST(LO_LIBS) + +$as_echo "@%:@define DSSI_SUPPORT 1" >>confdefs.h + +fi + +## AM_CONDITIONAL(DSSI_SUPPORT, test x$LO_LIB_FOUND = xyes -a x$DSSI_FOUND = xyes) + if test x$DSSI_FOUND = xyes; then + DSSI_SUPPORT_TRUE= + DSSI_SUPPORT_FALSE='#' +else + DSSI_SUPPORT_TRUE='#' + DSSI_SUPPORT_FALSE= +fi + + +## LO_LIBS="-llo" +## AC_SUBST(LO_CFLAGS) +## AC_SUBST(LO_LIBS) + +## PKG_CHECK_MODULES(LO, lo >= 0.23, +## true, +## AC_MSG_ERROR([need liblo >= 0.23 ]) +## ) + + + + +###################################### + + + +$as_echo "@%:@define HAVE_AUDIO 1" >>confdefs.h + + if test "yes" = "yes"; then + HAVE_AUDIO_TRUE= + HAVE_AUDIO_FALSE='#' +else + HAVE_AUDIO_TRUE='#' + HAVE_AUDIO_FALSE= +fi + + + + + + +if test -n "$GIVERTCAP"; then + SUIDINSTALL="no" + SUIDBUILD="no" + fi + + +ac_config_files="$ac_config_files Makefile m4/Makefile al/Makefile doc/Makefile xpm/Makefile demos/Makefile grepmidi/Makefile packaging/Makefile muse/Makefile muse/widgets/Makefile muse/master/Makefile muse/midiedit/Makefile muse/arranger/Makefile muse/liste/Makefile muse/driver/Makefile muse/waveedit/Makefile muse/ctrl/Makefile muse/instruments/Makefile muse/mixer/Makefile muse/cliplist/Makefile muse/marker/Makefile muse/mplugins/Makefile muse/remote/Makefile share/Makefile share/drummaps/Makefile share/html/Makefile share/locale/Makefile share/wallpapers/Makefile share/instruments/Makefile share/plugins/Makefile share/templates/Makefile share/pybridge/Makefile share/scripts/Makefile synti/Makefile synti/libsynti/Makefile synti/fluidsynth/Makefile synti/fluid/Makefile synti/organ/Makefile synti/s1/Makefile synti/vam/Makefile synti/deicsonze/Makefile synti/simpledrums/Makefile lib/Makefile lib/synthi/Makefile lib/plugins/Makefile plugins/Makefile plugins/freeverb/Makefile plugins/pandelay/Makefile plugins/doublechorus/Makefile Doxyfile utils/Makefile" + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + test "x$cache_file" != "x/dev/null" && + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + cat confcache >$cache_file + else + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +DEFS=-DHAVE_CONFIG_H + +ac_libobjs= +ac_ltlibobjs= +for ac_i in : $LIB@&t@OBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIB@&t@OBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + + if test -n "$EXEEXT"; then + am__EXEEXT_TRUE= + am__EXEEXT_FALSE='#' +else + am__EXEEXT_TRUE='#' + am__EXEEXT_FALSE= +fi + +if test -z "${INSIDE_GNOME_COMMON_TRUE}" && test -z "${INSIDE_GNOME_COMMON_FALSE}"; then + as_fn_error "conditional \"INSIDE_GNOME_COMMON\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then + as_fn_error "conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then + as_fn_error "conditional \"am__fastdepCXX\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + as_fn_error "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then + as_fn_error "conditional \"am__fastdepCXX\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${ENABLEFLUIDSYNTH_TRUE}" && test -z "${ENABLEFLUIDSYNTH_FALSE}"; then + as_fn_error "conditional \"ENABLEFLUIDSYNTH\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${HAVE_LASH_TRUE}" && test -z "${HAVE_LASH_FALSE}"; then + as_fn_error "conditional \"HAVE_LASH\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${RTCAP_TRUE}" && test -z "${RTCAP_FALSE}"; then + as_fn_error "conditional \"RTCAP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${PCH_TRUE}" && test -z "${PCH_FALSE}"; then + as_fn_error "conditional \"PCH\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${USE_SSE_TRUE}" && test -z "${USE_SSE_FALSE}"; then + as_fn_error "conditional \"USE_SSE\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${ENABLE_PYTHON_TRUE}" && test -z "${ENABLE_PYTHON_FALSE}"; then + as_fn_error "conditional \"ENABLE_PYTHON\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${VST_SUPPORT_TRUE}" && test -z "${VST_SUPPORT_FALSE}"; then + as_fn_error "conditional \"VST_SUPPORT\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${OSC_SUPPORT_TRUE}" && test -z "${OSC_SUPPORT_FALSE}"; then + as_fn_error "conditional \"OSC_SUPPORT\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${DSSI_SUPPORT_TRUE}" && test -z "${DSSI_SUPPORT_FALSE}"; then + as_fn_error "conditional \"DSSI_SUPPORT\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${HAVE_AUDIO_TRUE}" && test -z "${HAVE_AUDIO_FALSE}"; then + as_fn_error "conditional \"HAVE_AUDIO\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi + +: ${CONFIG_STATUS=./config.status} +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false + +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in @%:@( + *posix*) : + set -o posix ;; @%:@( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in @%:@( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +case $0 in @%:@(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +@%:@ as_fn_error ERROR [LINENO LOG_FD] +@%:@ --------------------------------- +@%:@ Output "`basename @S|@0`: error: ERROR" to stderr. If LINENO and LOG_FD are +@%:@ provided, also output the error to LOG_FD, referencing LINENO. Then exit the +@%:@ script with status @S|@?, using 1 if that was 0. +as_fn_error () +{ + as_status=$?; test $as_status -eq 0 && as_status=1 + if test "$3"; then + as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 + fi + $as_echo "$as_me: error: $1" >&2 + as_fn_exit $as_status +} @%:@ as_fn_error + + +@%:@ as_fn_set_status STATUS +@%:@ ----------------------- +@%:@ Set @S|@? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} @%:@ as_fn_set_status + +@%:@ as_fn_exit STATUS +@%:@ ----------------- +@%:@ Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} @%:@ as_fn_exit + +@%:@ as_fn_unset VAR +@%:@ --------------- +@%:@ Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +@%:@ as_fn_append VAR VALUE +@%:@ ---------------------- +@%:@ Append the text in VALUE to the end of the definition contained in VAR. Take +@%:@ advantage of any shell optimizations that allow amortized linear growth over +@%:@ repeated appends, instead of the typical quadratic growth present in naive +@%:@ implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +@%:@ as_fn_arith ARG... +@%:@ ------------------ +@%:@ Perform arithmetic evaluation on the ARGs, and store the result in the +@%:@ global @S|@as_val. Take advantage of shells that can avoid forks. The arguments +@%:@ must be portable across @S|@(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in @%:@((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +@%:@ as_fn_mkdir_p +@%:@ ------------- +@%:@ Create "@S|@as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" + + +} @%:@ as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in @%:@( + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in @%:@(( + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by MusE $as_me 1.1, which was +generated by GNU Autoconf 2.65. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + +case $ac_config_headers in *" +"*) set x $ac_config_headers; shift; ac_config_headers=$*;; +esac + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" +config_headers="$ac_config_headers" +config_commands="$ac_config_commands" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +ac_cs_usage="\ +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. + +Usage: $0 [OPTION]... [TAG]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration commands: +$config_commands + +Report bugs to the package provider." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_version="\\ +MusE config.status 1.1 +configured by $0, generated by GNU Autoconf 2.65, + with options \\"\$ac_cs_config\\" + +Copyright (C) 2009 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +MKDIR_P='$MKDIR_P' +AWK='$AWK' +test -n "\$AWK" || AWK=awk +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_HEADERS " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + as_fn_error "ambiguous option: \`$1' +Try \`$0 --help' for more information.";; + --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) as_fn_error "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +if \$ac_cs_recheck; then + set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../@%:@@%:@ /;s/...$/ @%:@@%:@/;p;x;p;x' <<_ASBOX +@%:@@%:@ Running $as_me. @%:@@%:@ +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# +# INIT-COMMANDS +# +AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" + + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +macro_version='`$ECHO "X$macro_version" | $Xsed -e "$delay_single_quote_subst"`' +macro_revision='`$ECHO "X$macro_revision" | $Xsed -e "$delay_single_quote_subst"`' +enable_shared='`$ECHO "X$enable_shared" | $Xsed -e "$delay_single_quote_subst"`' +enable_static='`$ECHO "X$enable_static" | $Xsed -e "$delay_single_quote_subst"`' +pic_mode='`$ECHO "X$pic_mode" | $Xsed -e "$delay_single_quote_subst"`' +enable_fast_install='`$ECHO "X$enable_fast_install" | $Xsed -e "$delay_single_quote_subst"`' +host_alias='`$ECHO "X$host_alias" | $Xsed -e "$delay_single_quote_subst"`' +host='`$ECHO "X$host" | $Xsed -e "$delay_single_quote_subst"`' +host_os='`$ECHO "X$host_os" | $Xsed -e "$delay_single_quote_subst"`' +build_alias='`$ECHO "X$build_alias" | $Xsed -e "$delay_single_quote_subst"`' +build='`$ECHO "X$build" | $Xsed -e "$delay_single_quote_subst"`' +build_os='`$ECHO "X$build_os" | $Xsed -e "$delay_single_quote_subst"`' +SED='`$ECHO "X$SED" | $Xsed -e "$delay_single_quote_subst"`' +Xsed='`$ECHO "X$Xsed" | $Xsed -e "$delay_single_quote_subst"`' +GREP='`$ECHO "X$GREP" | $Xsed -e "$delay_single_quote_subst"`' +EGREP='`$ECHO "X$EGREP" | $Xsed -e "$delay_single_quote_subst"`' +FGREP='`$ECHO "X$FGREP" | $Xsed -e "$delay_single_quote_subst"`' +LD='`$ECHO "X$LD" | $Xsed -e "$delay_single_quote_subst"`' +NM='`$ECHO "X$NM" | $Xsed -e "$delay_single_quote_subst"`' +LN_S='`$ECHO "X$LN_S" | $Xsed -e "$delay_single_quote_subst"`' +max_cmd_len='`$ECHO "X$max_cmd_len" | $Xsed -e "$delay_single_quote_subst"`' +ac_objext='`$ECHO "X$ac_objext" | $Xsed -e "$delay_single_quote_subst"`' +exeext='`$ECHO "X$exeext" | $Xsed -e "$delay_single_quote_subst"`' +lt_unset='`$ECHO "X$lt_unset" | $Xsed -e "$delay_single_quote_subst"`' +lt_SP2NL='`$ECHO "X$lt_SP2NL" | $Xsed -e "$delay_single_quote_subst"`' +lt_NL2SP='`$ECHO "X$lt_NL2SP" | $Xsed -e "$delay_single_quote_subst"`' +reload_flag='`$ECHO "X$reload_flag" | $Xsed -e "$delay_single_quote_subst"`' +reload_cmds='`$ECHO "X$reload_cmds" | $Xsed -e "$delay_single_quote_subst"`' +OBJDUMP='`$ECHO "X$OBJDUMP" | $Xsed -e "$delay_single_quote_subst"`' +deplibs_check_method='`$ECHO "X$deplibs_check_method" | $Xsed -e "$delay_single_quote_subst"`' +file_magic_cmd='`$ECHO "X$file_magic_cmd" | $Xsed -e "$delay_single_quote_subst"`' +AR='`$ECHO "X$AR" | $Xsed -e "$delay_single_quote_subst"`' +AR_FLAGS='`$ECHO "X$AR_FLAGS" | $Xsed -e "$delay_single_quote_subst"`' +STRIP='`$ECHO "X$STRIP" | $Xsed -e "$delay_single_quote_subst"`' +RANLIB='`$ECHO "X$RANLIB" | $Xsed -e "$delay_single_quote_subst"`' +old_postinstall_cmds='`$ECHO "X$old_postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' +old_postuninstall_cmds='`$ECHO "X$old_postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_cmds='`$ECHO "X$old_archive_cmds" | $Xsed -e "$delay_single_quote_subst"`' +CC='`$ECHO "X$CC" | $Xsed -e "$delay_single_quote_subst"`' +CFLAGS='`$ECHO "X$CFLAGS" | $Xsed -e "$delay_single_quote_subst"`' +compiler='`$ECHO "X$compiler" | $Xsed -e "$delay_single_quote_subst"`' +GCC='`$ECHO "X$GCC" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_pipe='`$ECHO "X$lt_cv_sys_global_symbol_pipe" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_cdecl='`$ECHO "X$lt_cv_sys_global_symbol_to_cdecl" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`' +objdir='`$ECHO "X$objdir" | $Xsed -e "$delay_single_quote_subst"`' +SHELL='`$ECHO "X$SHELL" | $Xsed -e "$delay_single_quote_subst"`' +ECHO='`$ECHO "X$ECHO" | $Xsed -e "$delay_single_quote_subst"`' +MAGIC_CMD='`$ECHO "X$MAGIC_CMD" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_no_builtin_flag='`$ECHO "X$lt_prog_compiler_no_builtin_flag" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_wl='`$ECHO "X$lt_prog_compiler_wl" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_pic='`$ECHO "X$lt_prog_compiler_pic" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_static='`$ECHO "X$lt_prog_compiler_static" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_prog_compiler_c_o='`$ECHO "X$lt_cv_prog_compiler_c_o" | $Xsed -e "$delay_single_quote_subst"`' +need_locks='`$ECHO "X$need_locks" | $Xsed -e "$delay_single_quote_subst"`' +DSYMUTIL='`$ECHO "X$DSYMUTIL" | $Xsed -e "$delay_single_quote_subst"`' +NMEDIT='`$ECHO "X$NMEDIT" | $Xsed -e "$delay_single_quote_subst"`' +LIPO='`$ECHO "X$LIPO" | $Xsed -e "$delay_single_quote_subst"`' +OTOOL='`$ECHO "X$OTOOL" | $Xsed -e "$delay_single_quote_subst"`' +OTOOL64='`$ECHO "X$OTOOL64" | $Xsed -e "$delay_single_quote_subst"`' +libext='`$ECHO "X$libext" | $Xsed -e "$delay_single_quote_subst"`' +shrext_cmds='`$ECHO "X$shrext_cmds" | $Xsed -e "$delay_single_quote_subst"`' +extract_expsyms_cmds='`$ECHO "X$extract_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`' +archive_cmds_need_lc='`$ECHO "X$archive_cmds_need_lc" | $Xsed -e "$delay_single_quote_subst"`' +enable_shared_with_static_runtimes='`$ECHO "X$enable_shared_with_static_runtimes" | $Xsed -e "$delay_single_quote_subst"`' +export_dynamic_flag_spec='`$ECHO "X$export_dynamic_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' +whole_archive_flag_spec='`$ECHO "X$whole_archive_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' +compiler_needs_object='`$ECHO "X$compiler_needs_object" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_from_new_cmds='`$ECHO "X$old_archive_from_new_cmds" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_from_expsyms_cmds='`$ECHO "X$old_archive_from_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`' +archive_cmds='`$ECHO "X$archive_cmds" | $Xsed -e "$delay_single_quote_subst"`' +archive_expsym_cmds='`$ECHO "X$archive_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`' +module_cmds='`$ECHO "X$module_cmds" | $Xsed -e "$delay_single_quote_subst"`' +module_expsym_cmds='`$ECHO "X$module_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`' +with_gnu_ld='`$ECHO "X$with_gnu_ld" | $Xsed -e "$delay_single_quote_subst"`' +allow_undefined_flag='`$ECHO "X$allow_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`' +no_undefined_flag='`$ECHO "X$no_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec='`$ECHO "X$hardcode_libdir_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec_ld='`$ECHO "X$hardcode_libdir_flag_spec_ld" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_separator='`$ECHO "X$hardcode_libdir_separator" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_direct='`$ECHO "X$hardcode_direct" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_direct_absolute='`$ECHO "X$hardcode_direct_absolute" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_minus_L='`$ECHO "X$hardcode_minus_L" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_shlibpath_var='`$ECHO "X$hardcode_shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_automatic='`$ECHO "X$hardcode_automatic" | $Xsed -e "$delay_single_quote_subst"`' +inherit_rpath='`$ECHO "X$inherit_rpath" | $Xsed -e "$delay_single_quote_subst"`' +link_all_deplibs='`$ECHO "X$link_all_deplibs" | $Xsed -e "$delay_single_quote_subst"`' +fix_srcfile_path='`$ECHO "X$fix_srcfile_path" | $Xsed -e "$delay_single_quote_subst"`' +always_export_symbols='`$ECHO "X$always_export_symbols" | $Xsed -e "$delay_single_quote_subst"`' +export_symbols_cmds='`$ECHO "X$export_symbols_cmds" | $Xsed -e "$delay_single_quote_subst"`' +exclude_expsyms='`$ECHO "X$exclude_expsyms" | $Xsed -e "$delay_single_quote_subst"`' +include_expsyms='`$ECHO "X$include_expsyms" | $Xsed -e "$delay_single_quote_subst"`' +prelink_cmds='`$ECHO "X$prelink_cmds" | $Xsed -e "$delay_single_quote_subst"`' +file_list_spec='`$ECHO "X$file_list_spec" | $Xsed -e "$delay_single_quote_subst"`' +variables_saved_for_relink='`$ECHO "X$variables_saved_for_relink" | $Xsed -e "$delay_single_quote_subst"`' +need_lib_prefix='`$ECHO "X$need_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`' +need_version='`$ECHO "X$need_version" | $Xsed -e "$delay_single_quote_subst"`' +version_type='`$ECHO "X$version_type" | $Xsed -e "$delay_single_quote_subst"`' +runpath_var='`$ECHO "X$runpath_var" | $Xsed -e "$delay_single_quote_subst"`' +shlibpath_var='`$ECHO "X$shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`' +shlibpath_overrides_runpath='`$ECHO "X$shlibpath_overrides_runpath" | $Xsed -e "$delay_single_quote_subst"`' +libname_spec='`$ECHO "X$libname_spec" | $Xsed -e "$delay_single_quote_subst"`' +library_names_spec='`$ECHO "X$library_names_spec" | $Xsed -e "$delay_single_quote_subst"`' +soname_spec='`$ECHO "X$soname_spec" | $Xsed -e "$delay_single_quote_subst"`' +postinstall_cmds='`$ECHO "X$postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' +postuninstall_cmds='`$ECHO "X$postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' +finish_cmds='`$ECHO "X$finish_cmds" | $Xsed -e "$delay_single_quote_subst"`' +finish_eval='`$ECHO "X$finish_eval" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_into_libs='`$ECHO "X$hardcode_into_libs" | $Xsed -e "$delay_single_quote_subst"`' +sys_lib_search_path_spec='`$ECHO "X$sys_lib_search_path_spec" | $Xsed -e "$delay_single_quote_subst"`' +sys_lib_dlsearch_path_spec='`$ECHO "X$sys_lib_dlsearch_path_spec" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_action='`$ECHO "X$hardcode_action" | $Xsed -e "$delay_single_quote_subst"`' +enable_dlopen='`$ECHO "X$enable_dlopen" | $Xsed -e "$delay_single_quote_subst"`' +enable_dlopen_self='`$ECHO "X$enable_dlopen_self" | $Xsed -e "$delay_single_quote_subst"`' +enable_dlopen_self_static='`$ECHO "X$enable_dlopen_self_static" | $Xsed -e "$delay_single_quote_subst"`' +old_striplib='`$ECHO "X$old_striplib" | $Xsed -e "$delay_single_quote_subst"`' +striplib='`$ECHO "X$striplib" | $Xsed -e "$delay_single_quote_subst"`' +compiler_lib_search_dirs='`$ECHO "X$compiler_lib_search_dirs" | $Xsed -e "$delay_single_quote_subst"`' +predep_objects='`$ECHO "X$predep_objects" | $Xsed -e "$delay_single_quote_subst"`' +postdep_objects='`$ECHO "X$postdep_objects" | $Xsed -e "$delay_single_quote_subst"`' +predeps='`$ECHO "X$predeps" | $Xsed -e "$delay_single_quote_subst"`' +postdeps='`$ECHO "X$postdeps" | $Xsed -e "$delay_single_quote_subst"`' +compiler_lib_search_path='`$ECHO "X$compiler_lib_search_path" | $Xsed -e "$delay_single_quote_subst"`' +LD_CXX='`$ECHO "X$LD_CXX" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_cmds_CXX='`$ECHO "X$old_archive_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' +compiler_CXX='`$ECHO "X$compiler_CXX" | $Xsed -e "$delay_single_quote_subst"`' +GCC_CXX='`$ECHO "X$GCC_CXX" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "X$lt_prog_compiler_no_builtin_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_wl_CXX='`$ECHO "X$lt_prog_compiler_wl_CXX" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_pic_CXX='`$ECHO "X$lt_prog_compiler_pic_CXX" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_static_CXX='`$ECHO "X$lt_prog_compiler_static_CXX" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_prog_compiler_c_o_CXX='`$ECHO "X$lt_cv_prog_compiler_c_o_CXX" | $Xsed -e "$delay_single_quote_subst"`' +archive_cmds_need_lc_CXX='`$ECHO "X$archive_cmds_need_lc_CXX" | $Xsed -e "$delay_single_quote_subst"`' +enable_shared_with_static_runtimes_CXX='`$ECHO "X$enable_shared_with_static_runtimes_CXX" | $Xsed -e "$delay_single_quote_subst"`' +export_dynamic_flag_spec_CXX='`$ECHO "X$export_dynamic_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`' +whole_archive_flag_spec_CXX='`$ECHO "X$whole_archive_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`' +compiler_needs_object_CXX='`$ECHO "X$compiler_needs_object_CXX" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_from_new_cmds_CXX='`$ECHO "X$old_archive_from_new_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_from_expsyms_cmds_CXX='`$ECHO "X$old_archive_from_expsyms_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' +archive_cmds_CXX='`$ECHO "X$archive_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' +archive_expsym_cmds_CXX='`$ECHO "X$archive_expsym_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' +module_cmds_CXX='`$ECHO "X$module_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' +module_expsym_cmds_CXX='`$ECHO "X$module_expsym_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' +with_gnu_ld_CXX='`$ECHO "X$with_gnu_ld_CXX" | $Xsed -e "$delay_single_quote_subst"`' +allow_undefined_flag_CXX='`$ECHO "X$allow_undefined_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`' +no_undefined_flag_CXX='`$ECHO "X$no_undefined_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec_CXX='`$ECHO "X$hardcode_libdir_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec_ld_CXX='`$ECHO "X$hardcode_libdir_flag_spec_ld_CXX" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_separator_CXX='`$ECHO "X$hardcode_libdir_separator_CXX" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_direct_CXX='`$ECHO "X$hardcode_direct_CXX" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_direct_absolute_CXX='`$ECHO "X$hardcode_direct_absolute_CXX" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_minus_L_CXX='`$ECHO "X$hardcode_minus_L_CXX" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_shlibpath_var_CXX='`$ECHO "X$hardcode_shlibpath_var_CXX" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_automatic_CXX='`$ECHO "X$hardcode_automatic_CXX" | $Xsed -e "$delay_single_quote_subst"`' +inherit_rpath_CXX='`$ECHO "X$inherit_rpath_CXX" | $Xsed -e "$delay_single_quote_subst"`' +link_all_deplibs_CXX='`$ECHO "X$link_all_deplibs_CXX" | $Xsed -e "$delay_single_quote_subst"`' +fix_srcfile_path_CXX='`$ECHO "X$fix_srcfile_path_CXX" | $Xsed -e "$delay_single_quote_subst"`' +always_export_symbols_CXX='`$ECHO "X$always_export_symbols_CXX" | $Xsed -e "$delay_single_quote_subst"`' +export_symbols_cmds_CXX='`$ECHO "X$export_symbols_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' +exclude_expsyms_CXX='`$ECHO "X$exclude_expsyms_CXX" | $Xsed -e "$delay_single_quote_subst"`' +include_expsyms_CXX='`$ECHO "X$include_expsyms_CXX" | $Xsed -e "$delay_single_quote_subst"`' +prelink_cmds_CXX='`$ECHO "X$prelink_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' +file_list_spec_CXX='`$ECHO "X$file_list_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_action_CXX='`$ECHO "X$hardcode_action_CXX" | $Xsed -e "$delay_single_quote_subst"`' +compiler_lib_search_dirs_CXX='`$ECHO "X$compiler_lib_search_dirs_CXX" | $Xsed -e "$delay_single_quote_subst"`' +predep_objects_CXX='`$ECHO "X$predep_objects_CXX" | $Xsed -e "$delay_single_quote_subst"`' +postdep_objects_CXX='`$ECHO "X$postdep_objects_CXX" | $Xsed -e "$delay_single_quote_subst"`' +predeps_CXX='`$ECHO "X$predeps_CXX" | $Xsed -e "$delay_single_quote_subst"`' +postdeps_CXX='`$ECHO "X$postdeps_CXX" | $Xsed -e "$delay_single_quote_subst"`' +compiler_lib_search_path_CXX='`$ECHO "X$compiler_lib_search_path_CXX" | $Xsed -e "$delay_single_quote_subst"`' + +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# Quote evaled strings. +for var in SED \ +GREP \ +EGREP \ +FGREP \ +LD \ +NM \ +LN_S \ +lt_SP2NL \ +lt_NL2SP \ +reload_flag \ +OBJDUMP \ +deplibs_check_method \ +file_magic_cmd \ +AR \ +AR_FLAGS \ +STRIP \ +RANLIB \ +CC \ +CFLAGS \ +compiler \ +lt_cv_sys_global_symbol_pipe \ +lt_cv_sys_global_symbol_to_cdecl \ +lt_cv_sys_global_symbol_to_c_name_address \ +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ +SHELL \ +ECHO \ +lt_prog_compiler_no_builtin_flag \ +lt_prog_compiler_wl \ +lt_prog_compiler_pic \ +lt_prog_compiler_static \ +lt_cv_prog_compiler_c_o \ +need_locks \ +DSYMUTIL \ +NMEDIT \ +LIPO \ +OTOOL \ +OTOOL64 \ +shrext_cmds \ +export_dynamic_flag_spec \ +whole_archive_flag_spec \ +compiler_needs_object \ +with_gnu_ld \ +allow_undefined_flag \ +no_undefined_flag \ +hardcode_libdir_flag_spec \ +hardcode_libdir_flag_spec_ld \ +hardcode_libdir_separator \ +fix_srcfile_path \ +exclude_expsyms \ +include_expsyms \ +file_list_spec \ +variables_saved_for_relink \ +libname_spec \ +library_names_spec \ +soname_spec \ +finish_eval \ +old_striplib \ +striplib \ +compiler_lib_search_dirs \ +predep_objects \ +postdep_objects \ +predeps \ +postdeps \ +compiler_lib_search_path \ +LD_CXX \ +compiler_CXX \ +lt_prog_compiler_no_builtin_flag_CXX \ +lt_prog_compiler_wl_CXX \ +lt_prog_compiler_pic_CXX \ +lt_prog_compiler_static_CXX \ +lt_cv_prog_compiler_c_o_CXX \ +export_dynamic_flag_spec_CXX \ +whole_archive_flag_spec_CXX \ +compiler_needs_object_CXX \ +with_gnu_ld_CXX \ +allow_undefined_flag_CXX \ +no_undefined_flag_CXX \ +hardcode_libdir_flag_spec_CXX \ +hardcode_libdir_flag_spec_ld_CXX \ +hardcode_libdir_separator_CXX \ +fix_srcfile_path_CXX \ +exclude_expsyms_CXX \ +include_expsyms_CXX \ +file_list_spec_CXX \ +compiler_lib_search_dirs_CXX \ +predep_objects_CXX \ +postdep_objects_CXX \ +predeps_CXX \ +postdeps_CXX \ +compiler_lib_search_path_CXX; do + case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in reload_cmds \ +old_postinstall_cmds \ +old_postuninstall_cmds \ +old_archive_cmds \ +extract_expsyms_cmds \ +old_archive_from_new_cmds \ +old_archive_from_expsyms_cmds \ +archive_cmds \ +archive_expsym_cmds \ +module_cmds \ +module_expsym_cmds \ +export_symbols_cmds \ +prelink_cmds \ +postinstall_cmds \ +postuninstall_cmds \ +finish_cmds \ +sys_lib_search_path_spec \ +sys_lib_dlsearch_path_spec \ +old_archive_cmds_CXX \ +old_archive_from_new_cmds_CXX \ +old_archive_from_expsyms_cmds_CXX \ +archive_cmds_CXX \ +archive_expsym_cmds_CXX \ +module_cmds_CXX \ +module_expsym_cmds_CXX \ +export_symbols_cmds_CXX \ +prelink_cmds_CXX; do + case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Fix-up fallback echo if it was mangled by the above quoting rules. +case \$lt_ECHO in +*'\\\$0 --fallback-echo"') lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\$0 --fallback-echo"\$/\$0 --fallback-echo"/'\` + ;; +esac + +ac_aux_dir='$ac_aux_dir' +xsi_shell='$xsi_shell' +lt_shell_append='$lt_shell_append' + +# See if we are running on zsh, and set the options which allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + + + PACKAGE='$PACKAGE' + VERSION='$VERSION' + TIMESTAMP='$TIMESTAMP' + RM='$RM' + ofile='$ofile' + + + + + + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "m4/Makefile") CONFIG_FILES="$CONFIG_FILES m4/Makefile" ;; + "al/Makefile") CONFIG_FILES="$CONFIG_FILES al/Makefile" ;; + "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; + "xpm/Makefile") CONFIG_FILES="$CONFIG_FILES xpm/Makefile" ;; + "demos/Makefile") CONFIG_FILES="$CONFIG_FILES demos/Makefile" ;; + "grepmidi/Makefile") CONFIG_FILES="$CONFIG_FILES grepmidi/Makefile" ;; + "packaging/Makefile") CONFIG_FILES="$CONFIG_FILES packaging/Makefile" ;; + "muse/Makefile") CONFIG_FILES="$CONFIG_FILES muse/Makefile" ;; + "muse/widgets/Makefile") CONFIG_FILES="$CONFIG_FILES muse/widgets/Makefile" ;; + "muse/master/Makefile") CONFIG_FILES="$CONFIG_FILES muse/master/Makefile" ;; + "muse/midiedit/Makefile") CONFIG_FILES="$CONFIG_FILES muse/midiedit/Makefile" ;; + "muse/arranger/Makefile") CONFIG_FILES="$CONFIG_FILES muse/arranger/Makefile" ;; + "muse/liste/Makefile") CONFIG_FILES="$CONFIG_FILES muse/liste/Makefile" ;; + "muse/driver/Makefile") CONFIG_FILES="$CONFIG_FILES muse/driver/Makefile" ;; + "muse/waveedit/Makefile") CONFIG_FILES="$CONFIG_FILES muse/waveedit/Makefile" ;; + "muse/ctrl/Makefile") CONFIG_FILES="$CONFIG_FILES muse/ctrl/Makefile" ;; + "muse/instruments/Makefile") CONFIG_FILES="$CONFIG_FILES muse/instruments/Makefile" ;; + "muse/mixer/Makefile") CONFIG_FILES="$CONFIG_FILES muse/mixer/Makefile" ;; + "muse/cliplist/Makefile") CONFIG_FILES="$CONFIG_FILES muse/cliplist/Makefile" ;; + "muse/marker/Makefile") CONFIG_FILES="$CONFIG_FILES muse/marker/Makefile" ;; + "muse/mplugins/Makefile") CONFIG_FILES="$CONFIG_FILES muse/mplugins/Makefile" ;; + "muse/remote/Makefile") CONFIG_FILES="$CONFIG_FILES muse/remote/Makefile" ;; + "share/Makefile") CONFIG_FILES="$CONFIG_FILES share/Makefile" ;; + "share/drummaps/Makefile") CONFIG_FILES="$CONFIG_FILES share/drummaps/Makefile" ;; + "share/html/Makefile") CONFIG_FILES="$CONFIG_FILES share/html/Makefile" ;; + "share/locale/Makefile") CONFIG_FILES="$CONFIG_FILES share/locale/Makefile" ;; + "share/wallpapers/Makefile") CONFIG_FILES="$CONFIG_FILES share/wallpapers/Makefile" ;; + "share/instruments/Makefile") CONFIG_FILES="$CONFIG_FILES share/instruments/Makefile" ;; + "share/plugins/Makefile") CONFIG_FILES="$CONFIG_FILES share/plugins/Makefile" ;; + "share/templates/Makefile") CONFIG_FILES="$CONFIG_FILES share/templates/Makefile" ;; + "share/pybridge/Makefile") CONFIG_FILES="$CONFIG_FILES share/pybridge/Makefile" ;; + "share/scripts/Makefile") CONFIG_FILES="$CONFIG_FILES share/scripts/Makefile" ;; + "synti/Makefile") CONFIG_FILES="$CONFIG_FILES synti/Makefile" ;; + "synti/libsynti/Makefile") CONFIG_FILES="$CONFIG_FILES synti/libsynti/Makefile" ;; + "synti/fluidsynth/Makefile") CONFIG_FILES="$CONFIG_FILES synti/fluidsynth/Makefile" ;; + "synti/fluid/Makefile") CONFIG_FILES="$CONFIG_FILES synti/fluid/Makefile" ;; + "synti/organ/Makefile") CONFIG_FILES="$CONFIG_FILES synti/organ/Makefile" ;; + "synti/s1/Makefile") CONFIG_FILES="$CONFIG_FILES synti/s1/Makefile" ;; + "synti/vam/Makefile") CONFIG_FILES="$CONFIG_FILES synti/vam/Makefile" ;; + "synti/deicsonze/Makefile") CONFIG_FILES="$CONFIG_FILES synti/deicsonze/Makefile" ;; + "synti/simpledrums/Makefile") CONFIG_FILES="$CONFIG_FILES synti/simpledrums/Makefile" ;; + "lib/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;; + "lib/synthi/Makefile") CONFIG_FILES="$CONFIG_FILES lib/synthi/Makefile" ;; + "lib/plugins/Makefile") CONFIG_FILES="$CONFIG_FILES lib/plugins/Makefile" ;; + "plugins/Makefile") CONFIG_FILES="$CONFIG_FILES plugins/Makefile" ;; + "plugins/freeverb/Makefile") CONFIG_FILES="$CONFIG_FILES plugins/freeverb/Makefile" ;; + "plugins/pandelay/Makefile") CONFIG_FILES="$CONFIG_FILES plugins/pandelay/Makefile" ;; + "plugins/doublechorus/Makefile") CONFIG_FILES="$CONFIG_FILES plugins/doublechorus/Makefile" ;; + "Doxyfile") CONFIG_FILES="$CONFIG_FILES Doxyfile" ;; + "utils/Makefile") CONFIG_FILES="$CONFIG_FILES utils/Makefile" ;; + + *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= + trap 'exit_status=$? + { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -n "$tmp" && test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5 + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$tmp/subs1.awk" && +_ACEOF + + +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ + || as_fn_error "could not setup config files machinery" "$LINENO" 5 +_ACEOF + +# VPATH may cause trouble with some makes, so we remove $(srcdir), +# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=/{ +s/:*\$(srcdir):*/:/ +s/:*\${srcdir}:*/:/ +s/:*@srcdir@:*/:/ +s/^\([^=]*=[ ]*\):*/\1/ +s/:*$// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" + +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$tmp/defines.awk" <<\_ACAWK || +BEGIN { +_ACEOF + +# Transform confdefs.h into an awk script `defines.awk', embedded as +# here-document in config.status, that substitutes the proper values into +# config.h.in to produce config.h. + +# Create a delimiter string that does not exist in confdefs.h, to ease +# handling of long lines. +ac_delim='%!_!# ' +for ac_last_try in false false :; do + ac_t=`sed -n "/$ac_delim/p" confdefs.h` + if test -z "$ac_t"; then + break + elif $ac_last_try; then + as_fn_error "could not make $CONFIG_HEADERS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +# For the awk script, D is an array of macro values keyed by name, +# likewise P contains macro parameters if any. Preserve backslash +# newline sequences. + +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +sed -n ' +s/.\{148\}/&'"$ac_delim"'/g +t rset +:rset +s/^[ ]*#[ ]*define[ ][ ]*/ / +t def +d +:def +s/\\$// +t bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3"/p +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p +d +:bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3\\\\\\n"\\/p +t cont +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p +t cont +d +:cont +n +s/.\{148\}/&'"$ac_delim"'/g +t clear +:clear +s/\\$// +t bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/"/p +d +:bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p +b cont +' >$CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { + line = \$ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + as_fn_error "could not setup config headers machinery" "$LINENO" 5 +fi # test -n "$CONFIG_HEADERS" + + +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$tmp/stdin" \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir="$ac_dir"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + esac +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined." >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined." >&2;} + + rm -f "$tmp/stdin" + case $ac_file in + -) cat "$tmp/out" && rm -f "$tmp/out";; + *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; + esac \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 + ;; + :H) + # + # CONFIG_HEADER + # + if test x"$ac_file" != x-; then + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" + } >"$tmp/config.h" \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 + if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} + else + rm -f "$ac_file" + mv "$tmp/config.h" "$ac_file" \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 + fi + else + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error "could not create -" "$LINENO" 5 + fi +# Compute "$ac_file"'s index in $config_headers. +_am_arg="$ac_file" +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || +$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$_am_arg" : 'X\(//\)[^/]' \| \ + X"$_am_arg" : 'X\(//\)$' \| \ + X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$_am_arg" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'`/stamp-h$_am_stamp_count + ;; + + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "depfiles":C) test x"$AMDEP_TRUE" != x"" || { + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir=$dirpart/$fdir; as_fn_mkdir_p + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} + ;; + "libtool":C) + + # See if we are running on zsh, and set the options which allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + + cfgfile="${ofile}T" + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL + +# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008 Free Software Foundation, Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is part of GNU Libtool. +# +# GNU Libtool 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. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, or +# obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + +# The names of the tagged configurations supported by this script. +available_tags="CXX " + +# ### BEGIN LIBTOOL CONFIG + +# Which release of libtool.m4 was used? +macro_version=$macro_version +macro_revision=$macro_revision + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# What type of objects to build. +pic_mode=$pic_mode + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# The host system. +host_alias=$host_alias +host=$host +host_os=$host_os + +# The build system. +build_alias=$build_alias +build=$build +build_os=$build_os + +# A sed program that does not truncate output. +SED=$lt_SED + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="\$SED -e 1s/^X//" + +# A grep program that handles long lines. +GREP=$lt_GREP + +# An ERE matcher. +EGREP=$lt_EGREP + +# A literal string matcher. +FGREP=$lt_FGREP + +# A BSD- or MS-compatible name lister. +NM=$lt_NM + +# Whether we need soft or hard links. +LN_S=$lt_LN_S + +# What is the maximum length of a command? +max_cmd_len=$max_cmd_len + +# Object file suffix (normally "o"). +objext=$ac_objext + +# Executable file suffix (normally ""). +exeext=$exeext + +# whether the shell understands "unset". +lt_unset=$lt_unset + +# turn spaces into newlines. +SP2NL=$lt_lt_SP2NL + +# turn newlines into spaces. +NL2SP=$lt_lt_NL2SP + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# An object symbol dumper. +OBJDUMP=$lt_OBJDUMP + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method == "file_magic". +file_magic_cmd=$lt_file_magic_cmd + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# A symbol stripping program. +STRIP=$lt_STRIP + +# Commands used to install an old-style archive. +RANLIB=$lt_RANLIB +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# A C compiler. +LTCC=$lt_CC + +# LTCC compiler flags. +LTCFLAGS=$lt_CFLAGS + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration. +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair. +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# Transform the output of nm in a C name address pair when lib prefix is needed. +global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# An echo program that does not interpret backslashes. +ECHO=$lt_ECHO + +# Used to examine libraries when file_magic_cmd begins with "file". +MAGIC_CMD=$MAGIC_CMD + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# Tool to manipulate archived DWARF debug symbol files on Mac OS X. +DSYMUTIL=$lt_DSYMUTIL + +# Tool to change global to local symbols on Mac OS X. +NMEDIT=$lt_NMEDIT + +# Tool to manipulate fat objects and archives on Mac OS X. +LIPO=$lt_LIPO + +# ldd/readelf like tool for Mach-O binaries on Mac OS X. +OTOOL=$lt_OTOOL + +# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. +OTOOL64=$lt_OTOOL64 + +# Old archive suffix (normally "a"). +libext=$libext + +# Shared library suffix (normally ".so"). +shrext_cmds=$lt_shrext_cmds + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at link time. +variables_saved_for_relink=$lt_variables_saved_for_relink + +# Do we need the "lib" prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Library versioning type. +version_type=$version_type + +# Shared library runtime path variable. +runpath_var=$runpath_var + +# Shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Command to use after installation of a shared archive. +postinstall_cmds=$lt_postinstall_cmds + +# Command to use after uninstallation of a shared archive. +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# As "finish_cmds", except a single script fragment to be evaled but +# not shown. +finish_eval=$lt_finish_eval + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Compile-time system search path for libraries. +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries. +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + + +# The linker used to build libraries. +LD=$lt_LD + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds + +# A language specific compiler. +CC=$lt_compiler + +# Is the compiler the GNU compiler? +with_gcc=$GCC + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds +archive_expsym_cmds=$lt_archive_expsym_cmds + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds +module_expsym_cmds=$lt_module_expsym_cmds + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec + +# If ld is used when linking, flag to hardcode \$libdir into a binary +# during linking. This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \${shlibpath_var} if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path=$lt_fix_srcfile_path + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action + +# The directories searched by this compiler when creating a shared library. +compiler_lib_search_dirs=$lt_compiler_lib_search_dirs + +# Dependencies to place before and after the objects being linked to +# create a shared library. +predep_objects=$lt_predep_objects +postdep_objects=$lt_postdep_objects +predeps=$lt_predeps +postdeps=$lt_postdeps + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path + +# ### END LIBTOOL CONFIG + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + +ltmain="$ac_aux_dir/ltmain.sh" + + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + case $xsi_shell in + yes) + cat << \_LT_EOF >> "$cfgfile" + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac +} + +# func_basename file +func_basename () +{ + func_basename_result="${1##*/}" +} + +# func_dirname_and_basename file append nondir_replacement +# perform func_basename and func_dirname in a single function +# call: +# dirname: Compute the dirname of FILE. If nonempty, +# add APPEND to the result, otherwise set result +# to NONDIR_REPLACEMENT. +# value returned in "$func_dirname_result" +# basename: Compute filename of FILE. +# value retuned in "$func_basename_result" +# Implementation must be kept synchronized with func_dirname +# and func_basename. For efficiency, we do not delegate to +# those functions but instead duplicate the functionality here. +func_dirname_and_basename () +{ + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac + func_basename_result="${1##*/}" +} + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +func_stripname () +{ + # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are + # positional parameters, so assign one to ordinary parameter first. + func_stripname_result=${3} + func_stripname_result=${func_stripname_result#"${1}"} + func_stripname_result=${func_stripname_result%"${2}"} +} + +# func_opt_split +func_opt_split () +{ + func_opt_split_opt=${1%%=*} + func_opt_split_arg=${1#*=} +} + +# func_lo2o object +func_lo2o () +{ + case ${1} in + *.lo) func_lo2o_result=${1%.lo}.${objext} ;; + *) func_lo2o_result=${1} ;; + esac +} + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=${1%.*}.lo +} + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=$(( $* )) +} + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=${#1} +} + +_LT_EOF + ;; + *) # Bourne compatible functions. + cat << \_LT_EOF >> "$cfgfile" + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + # Extract subdirectory from the argument. + func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` + if test "X$func_dirname_result" = "X${1}"; then + func_dirname_result="${3}" + else + func_dirname_result="$func_dirname_result${2}" + fi +} + +# func_basename file +func_basename () +{ + func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` +} + + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +# func_strip_suffix prefix name +func_stripname () +{ + case ${2} in + .*) func_stripname_result=`$ECHO "X${3}" \ + | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;; + *) func_stripname_result=`$ECHO "X${3}" \ + | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;; + esac +} + +# sed scripts: +my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q' +my_sed_long_arg='1s/^-[^=]*=//' + +# func_opt_split +func_opt_split () +{ + func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"` + func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"` +} + +# func_lo2o object +func_lo2o () +{ + func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"` +} + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[^.]*$/.lo/'` +} + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=`expr "$@"` +} + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` +} + +_LT_EOF +esac + +case $lt_shell_append in + yes) + cat << \_LT_EOF >> "$cfgfile" + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "$1+=\$2" +} +_LT_EOF + ;; + *) + cat << \_LT_EOF >> "$cfgfile" + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "$1=\$$1\$2" +} + +_LT_EOF + ;; + esac + + + sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" + + + cat <<_LT_EOF >> "$ofile" + +# ### BEGIN LIBTOOL TAG CONFIG: CXX + +# The linker used to build libraries. +LD=$lt_LD_CXX + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds_CXX + +# A language specific compiler. +CC=$lt_compiler_CXX + +# Is the compiler the GNU compiler? +with_gcc=$GCC_CXX + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl_CXX + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic_CXX + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static_CXX + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc_CXX + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object_CXX + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds_CXX +archive_expsym_cmds=$lt_archive_expsym_cmds_CXX + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds_CXX +module_expsym_cmds=$lt_module_expsym_cmds_CXX + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld_CXX + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag_CXX + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag_CXX + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX + +# If ld is used when linking, flag to hardcode \$libdir into a binary +# during linking. This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct_CXX + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \${shlibpath_var} if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute_CXX + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L_CXX + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic_CXX + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath_CXX + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs_CXX + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path=$lt_fix_srcfile_path_CXX + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols_CXX + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds_CXX + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms_CXX + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms_CXX + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds_CXX + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec_CXX + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action_CXX + +# The directories searched by this compiler when creating a shared library. +compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX + +# Dependencies to place before and after the objects being linked to +# create a shared library. +predep_objects=$lt_predep_objects_CXX +postdep_objects=$lt_postdep_objects_CXX +predeps=$lt_predeps_CXX +postdeps=$lt_postdeps_CXX + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path_CXX + +# ### END LIBTOOL TAG CONFIG: CXX +_LT_EOF + + ;; + + esac +done # for ac_tag + + +as_fn_exit 0 +_ACEOF +ac_clean_files=$ac_clean_files_save + +test $ac_write_fail = 0 || + as_fn_error "write failure creating $CONFIG_STATUS" "$LINENO" 5 + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || as_fn_exit $? +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} +fi + + +######## Show a configuration report ######## +if test -n "$JADE"; then + jade_report="$JADE"; +else + jade_report="not present" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: + QTDIR $QTDIR + QTDIR_INC $QTDIR_INC + QTDIR_BIN $QTDIR_BIN + QT_LIBS $QT_LIBS + + MusE configured + + LASH support: $LASH_FOUND + OSC support: $OSC + DSSI support: $DSSI + FluidSynth: $muse_enable_fluidlib + + jade: $jade_report + doxygen: $DOXYGEN + graphviz: $DOT + perl: $PERL + treeviews in doxygen + html output: $report_doxy_treeview + + C++ compiler: $CXX + optimizing: $report_optimise + debug: $report_debug + optimise for arch: $report_march + SSE optimizations $report_sse + python bindings: $enable_python + + installation prefix: $prefix + + Deprecated: + --------------------------------------------------- + using rtcap: $report_rtcap + setuid root install: $SUIDINSTALL + setuid root build: $SUIDBUILD + VST/win support: $VST + +" >&5 +$as_echo "$as_me: + QTDIR $QTDIR + QTDIR_INC $QTDIR_INC + QTDIR_BIN $QTDIR_BIN + QT_LIBS $QT_LIBS + + MusE configured + + LASH support: $LASH_FOUND + OSC support: $OSC + DSSI support: $DSSI + FluidSynth: $muse_enable_fluidlib + + jade: $jade_report + doxygen: $DOXYGEN + graphviz: $DOT + perl: $PERL + treeviews in doxygen + html output: $report_doxy_treeview + + C++ compiler: $CXX + optimizing: $report_optimise + debug: $report_debug + optimise for arch: $report_march + SSE optimizations $report_sse + python bindings: $enable_python + + installation prefix: $prefix + + Deprecated: + --------------------------------------------------- + using rtcap: $report_rtcap + setuid root install: $SUIDINSTALL + setuid root build: $SUIDBUILD + VST/win support: $VST + +" >&6;} + diff --git a/muse2/autom4te.cache/requests b/muse2/autom4te.cache/requests new file mode 100644 index 00000000..3af686c5 --- /dev/null +++ b/muse2/autom4te.cache/requests @@ -0,0 +1,516 @@ +# This file was generated by Autom4te Tue Dec 22 07:01:21 UTC 2009. +# It contains the lists of macros which have been traced. +# It can be safely removed. + +@request = ( + bless( [ + '0', + 1, + [ + '/usr/share/autoconf' + ], + [ + '/usr/share/autoconf/autoconf/autoconf.m4f', + '/usr/share/aclocal/argz.m4', + '/usr/share/aclocal/ltdl.m4', + '/usr/share/aclocal/pkg.m4', + '/usr/share/aclocal-1.11/amversion.m4', + '/usr/share/aclocal-1.11/auxdir.m4', + '/usr/share/aclocal-1.11/cond.m4', + '/usr/share/aclocal-1.11/depend.m4', + '/usr/share/aclocal-1.11/depout.m4', + '/usr/share/aclocal-1.11/header.m4', + '/usr/share/aclocal-1.11/init.m4', + '/usr/share/aclocal-1.11/install-sh.m4', + '/usr/share/aclocal-1.11/lead-dot.m4', + '/usr/share/aclocal-1.11/make.m4', + '/usr/share/aclocal-1.11/missing.m4', + '/usr/share/aclocal-1.11/mkdirp.m4', + '/usr/share/aclocal-1.11/options.m4', + '/usr/share/aclocal-1.11/python.m4', + '/usr/share/aclocal-1.11/runlog.m4', + '/usr/share/aclocal-1.11/sanity.m4', + '/usr/share/aclocal-1.11/silent.m4', + '/usr/share/aclocal-1.11/strip.m4', + '/usr/share/aclocal-1.11/substnot.m4', + '/usr/share/aclocal-1.11/tar.m4', + 'm4/aclocal-include.m4', + 'm4/alsa.m4', + 'm4/docbook.m4', + 'm4/libtool.m4', + 'm4/ltoptions.m4', + 'm4/ltsugar.m4', + 'm4/ltversion.m4', + 'm4/lt~obsolete.m4', + 'm4/qt.m4', + 'configure.ac' + ], + { + 'AM_ENABLE_STATIC' => 1, + 'AC_LIBTOOL_LANG_RC_CONFIG' => 1, + '_LT_AC_SHELL_INIT' => 1, + 'AC_DEFUN' => 1, + 'AC_PROG_LIBTOOL' => 1, + '_LT_AC_LANG_CXX_CONFIG' => 1, + 'AM_PROG_MKDIR_P' => 1, + 'AM_PYTHON_CHECK_VERSION' => 1, + 'AM_AUTOMAKE_VERSION' => 1, + 'AM_SUBST_NOTMAKE' => 1, + 'AM_MISSING_PROG' => 1, + 'AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH' => 1, + '_LT_AC_LANG_C_CONFIG' => 1, + 'AM_PROG_INSTALL_STRIP' => 1, + '_m4_warn' => 1, + 'AC_LIBTOOL_OBJDIR' => 1, + 'gl_FUNC_ARGZ' => 1, + 'LTOBSOLETE_VERSION' => 1, + 'AM_SANITY_CHECK' => 1, + 'AC_LIBTOOL_LANG_GCJ_CONFIG' => 1, + 'AC_LIBTOOL_PROG_COMPILER_PIC' => 1, + 'LT_LIB_M' => 1, + '_LT_AC_CHECK_DLFCN' => 1, + 'AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE' => 1, + 'LTSUGAR_VERSION' => 1, + '_LT_PROG_LTMAIN' => 1, + 'LT_SYS_SYMBOL_USCORE' => 1, + '_AM_PROG_TAR' => 1, + 'AC_LIBTOOL_GCJ' => 1, + 'LT_FUNC_DLSYM_USCORE' => 1, + 'PGAC_CHECK_DOCBOOK' => 1, + 'LT_SYS_DLOPEN_DEPLIBS' => 1, + 'AC_LIBTOOL_CONFIG' => 1, + '_LT_AC_LANG_F77' => 1, + 'AC_LTDL_DLLIB' => 1, + '_AM_SUBST_NOTMAKE' => 1, + '_AM_AUTOCONF_VERSION' => 1, + 'AM_DISABLE_SHARED' => 1, + '_LTDL_SETUP' => 1, + 'AM_PROG_LIBTOOL' => 1, + '_LT_AC_LANG_CXX' => 1, + 'PGAC_PROG_NSGMLS' => 1, + 'AM_PROG_LD' => 1, + '_LT_AC_FILE_LTDLL_C' => 1, + 'AC_LIB_LTDL' => 1, + 'AU_DEFUN' => 1, + 'AC_PROG_NM' => 1, + 'AC_LIBTOOL_DLOPEN' => 1, + 'AC_PROG_LD' => 1, + 'AC_PROG_LD_GNU' => 1, + 'AC_ENABLE_FAST_INSTALL' => 1, + 'AC_LIBTOOL_FC' => 1, + 'LTDL_CONVENIENCE' => 1, + '_AM_SET_OPTION' => 1, + 'AC_LTDL_PREOPEN' => 1, + '_LT_LINKER_BOILERPLATE' => 1, + 'AC_LIBTOOL_LANG_CXX_CONFIG' => 1, + 'AC_LIBTOOL_PROG_CC_C_O' => 1, + 'gl_PREREQ_ARGZ' => 1, + 'PGAC_PATH_DOCBOOK_STYLESHEETS' => 1, + 'LT_SUPPORTED_TAG' => 1, + 'AM_OUTPUT_DEPENDENCY_COMMANDS' => 1, + 'LT_PROG_RC' => 1, + 'LT_SYS_MODULE_EXT' => 1, + 'AC_DEFUN_ONCE' => 1, + '_LT_AC_LANG_GCJ' => 1, + 'AC_LTDL_OBJDIR' => 1, + '_LT_PATH_TOOL_PREFIX' => 1, + 'AC_LIBTOOL_RC' => 1, + '_LT_AC_PROG_ECHO_BACKSLASH' => 1, + 'AC_DISABLE_FAST_INSTALL' => 1, + 'AM_SILENT_RULES' => 1, + 'include' => 1, + '_LT_AC_TRY_DLOPEN_SELF' => 1, + '_LT_AC_SYS_LIBPATH_AIX' => 1, + 'LT_AC_PROG_SED' => 1, + 'AM_ENABLE_SHARED' => 1, + 'LTDL_INSTALLABLE' => 1, + '_LT_AC_LANG_GCJ_CONFIG' => 1, + 'AC_ENABLE_SHARED' => 1, + 'AC_LIBTOOL_SYS_HARD_LINK_LOCKS' => 1, + 'AC_ENABLE_STATIC' => 1, + '_LT_AC_TAGVAR' => 1, + 'AC_LIBTOOL_LANG_F77_CONFIG' => 1, + 'AM_CONDITIONAL' => 1, + 'LT_LIB_DLLOAD' => 1, + 'LTVERSION_VERSION' => 1, + 'LTDL_INIT' => 1, + 'm4_include' => 1, + 'AM_PROG_INSTALL_SH' => 1, + 'AC_PROG_EGREP' => 1, + 'AM_PATH_PYTHON' => 1, + 'AC_PATH_MAGIC' => 1, + '_AC_AM_CONFIG_HEADER_HOOK' => 1, + 'AC_LTDL_SYSSEARCHPATH' => 1, + 'AM_MAKE_INCLUDE' => 1, + 'LT_CMD_MAX_LEN' => 1, + '_LT_AC_TAGCONFIG' => 1, + 'm4_pattern_forbid' => 1, + '_LT_LINKER_OPTION' => 1, + 'AC_LIBTOOL_COMPILER_OPTION' => 1, + 'AC_DISABLE_SHARED' => 1, + '_LT_COMPILER_BOILERPLATE' => 1, + 'AC_LIBTOOL_WIN32_DLL' => 1, + 'AC_LIBTOOL_SETUP' => 1, + 'AC_PROG_LD_RELOAD_FLAG' => 1, + 'AC_LTDL_DLSYM_USCORE' => 1, + 'AM_MISSING_HAS_RUN' => 1, + 'LT_LANG' => 1, + 'LT_SYS_DLSEARCH_PATH' => 1, + 'LT_CONFIG_LTDL_DIR' => 1, + 'AC_LIBTOOL_DLOPEN_SELF' => 1, + 'LT_OUTPUT' => 1, + 'AC_LIBTOOL_PROG_LD_SHLIBS' => 1, + '_PKG_SHORT_ERRORS_SUPPORTED' => 1, + 'AC_WITH_LTDL' => 1, + 'AC_LIBTOOL_LINKER_OPTION' => 1, + 'PKG_CHECK_EXISTS' => 1, + 'LT_AC_PROG_RC' => 1, + 'AC_LIBTOOL_CXX' => 1, + 'LT_INIT' => 1, + 'LT_AC_PROG_GCJ' => 1, + 'LT_SYS_DLOPEN_SELF' => 1, + 'AM_DEP_TRACK' => 1, + 'AM_DISABLE_STATIC' => 1, + 'PGAC_PROG_JADE' => 1, + 'AM_CONFIG_HEADER' => 1, + '_AC_PROG_LIBTOOL' => 1, + '_AM_IF_OPTION' => 1, + 'AC_PATH_TOOL_PREFIX' => 1, + 'm4_pattern_allow' => 1, + 'AC_LIBTOOL_F77' => 1, + 'AM_SET_LEADING_DOT' => 1, + 'LT_AC_PROG_EGREP' => 1, + '_AM_DEPENDENCIES' => 1, + 'AC_LIBTOOL_LANG_C_CONFIG' => 1, + 'LTOPTIONS_VERSION' => 1, + '_LT_AC_SYS_COMPILER' => 1, + 'AM_PROG_NM' => 1, + 'PKG_CHECK_MODULES' => 1, + 'AC_LIBLTDL_CONVENIENCE' => 1, + 'AC_DEPLIBS_CHECK_METHOD' => 1, + 'AC_LIBLTDL_INSTALLABLE' => 1, + 'AM_SET_CURRENT_AUTOMAKE_VERSION' => 1, + 'AC_LTDL_ENABLE_INSTALL' => 1, + 'LT_PROG_GCJ' => 1, + 'AC_LIBTOOL_SYS_DYNAMIC_LINKER' => 1, + 'AM_INIT_AUTOMAKE' => 1, + 'AC_DISABLE_STATIC' => 1, + 'AM_PATH_ALSA' => 1, + 'LT_PATH_NM' => 1, + 'AC_LTDL_SHLIBEXT' => 1, + 'AM_ACLOCAL_INCLUDE' => 1, + '_LT_AC_LOCK' => 1, + '_LT_AC_LANG_RC_CONFIG' => 1, + 'LT_SYS_MODULE_PATH' => 1, + 'LT_WITH_LTDL' => 1, + 'AC_LIBTOOL_POSTDEP_PREDEP' => 1, + 'AC_LTDL_SHLIBPATH' => 1, + 'AM_AUX_DIR_EXPAND' => 1, + 'AC_LIBTOOL_PROG_COMPILER_NO_RTTI' => 1, + '_LT_AC_LANG_F77_CONFIG' => 1, + 'CONFIGURE_QT' => 1, + '_LT_COMPILER_OPTION' => 1, + '_AM_SET_OPTIONS' => 1, + 'AM_RUN_LOG' => 1, + '_AM_OUTPUT_DEPENDENCY_COMMANDS' => 1, + 'AC_LIBTOOL_PICMODE' => 1, + 'AC_LTDL_SYS_DLOPEN_DEPLIBS' => 1, + 'AC_LIBTOOL_SYS_OLD_ARCHIVE' => 1, + 'AC_CHECK_LIBM' => 1, + 'LT_PATH_LD' => 1, + 'AC_LIBTOOL_SYS_LIB_STRIP' => 1, + '_AM_MANGLE_OPTION' => 1, + 'AC_LIBTOOL_SYS_MAX_CMD_LEN' => 1, + 'AC_LTDL_SYMBOL_USCORE' => 1, + 'AM_SET_DEPDIR' => 1, + 'PKG_PROG_PKG_CONFIG' => 1, + '_LT_CC_BASENAME' => 1, + '_LT_LIBOBJ' => 1 + } + ], 'Autom4te::Request' ), + bless( [ + '1', + 1, + [ + '/usr/share/autoconf' + ], + [ + '/usr/share/autoconf/autoconf/autoconf.m4f', + 'aclocal.m4', + 'configure.ac' + ], + { + 'AM_PROG_F77_C_O' => 1, + '_LT_AC_TAGCONFIG' => 1, + 'm4_pattern_forbid' => 1, + 'AC_INIT' => 1, + 'AC_CANONICAL_TARGET' => 1, + '_AM_COND_IF' => 1, + 'AC_CONFIG_LIBOBJ_DIR' => 1, + 'AC_SUBST' => 1, + 'AC_CANONICAL_HOST' => 1, + 'AC_FC_SRCEXT' => 1, + 'AC_PROG_LIBTOOL' => 1, + 'AM_INIT_AUTOMAKE' => 1, + 'AC_CONFIG_SUBDIRS' => 1, + 'AM_AUTOMAKE_VERSION' => 1, + 'LT_CONFIG_LTDL_DIR' => 1, + 'AC_CONFIG_LINKS' => 1, + 'AC_REQUIRE_AUX_FILE' => 1, + 'LT_SUPPORTED_TAG' => 1, + 'm4_sinclude' => 1, + 'AM_MAINTAINER_MODE' => 1, + 'AM_GNU_GETTEXT_INTL_SUBDIR' => 1, + '_m4_warn' => 1, + 'AM_PROG_CXX_C_O' => 1, + '_AM_COND_ENDIF' => 1, + 'AM_ENABLE_MULTILIB' => 1, + 'AM_SILENT_RULES' => 1, + 'AC_CONFIG_FILES' => 1, + 'include' => 1, + 'LT_INIT' => 1, + 'AM_GNU_GETTEXT' => 1, + 'AC_LIBSOURCE' => 1, + 'AC_CANONICAL_BUILD' => 1, + 'AM_PROG_FC_C_O' => 1, + 'AC_FC_FREEFORM' => 1, + 'AH_OUTPUT' => 1, + 'AC_CONFIG_AUX_DIR' => 1, + '_AM_SUBST_NOTMAKE' => 1, + 'm4_pattern_allow' => 1, + 'AM_PROG_CC_C_O' => 1, + 'sinclude' => 1, + 'AM_CONDITIONAL' => 1, + 'AC_CANONICAL_SYSTEM' => 1, + 'AC_CONFIG_HEADERS' => 1, + 'AC_DEFINE_TRACE_LITERAL' => 1, + 'm4_include' => 1, + '_AM_COND_ELSE' => 1, + 'AC_SUBST_TRACE' => 1 + } + ], 'Autom4te::Request' ), + bless( [ + '2', + 1, + [ + '/usr/share/autoconf' + ], + [ + '/usr/share/autoconf/autoconf/autoconf.m4f', + '/usr/share/aclocal/argz.m4', + '/usr/share/aclocal/ltdl.m4', + '/usr/share/aclocal/pkg.m4', + '/usr/share/aclocal-1.11/amversion.m4', + '/usr/share/aclocal-1.11/auxdir.m4', + '/usr/share/aclocal-1.11/cond.m4', + '/usr/share/aclocal-1.11/depend.m4', + '/usr/share/aclocal-1.11/depout.m4', + '/usr/share/aclocal-1.11/header.m4', + '/usr/share/aclocal-1.11/init.m4', + '/usr/share/aclocal-1.11/install-sh.m4', + '/usr/share/aclocal-1.11/lead-dot.m4', + '/usr/share/aclocal-1.11/make.m4', + '/usr/share/aclocal-1.11/missing.m4', + '/usr/share/aclocal-1.11/mkdirp.m4', + '/usr/share/aclocal-1.11/options.m4', + '/usr/share/aclocal-1.11/python.m4', + '/usr/share/aclocal-1.11/runlog.m4', + '/usr/share/aclocal-1.11/sanity.m4', + '/usr/share/aclocal-1.11/silent.m4', + '/usr/share/aclocal-1.11/strip.m4', + '/usr/share/aclocal-1.11/substnot.m4', + '/usr/share/aclocal-1.11/tar.m4', + 'm4/aclocal-include.m4', + 'm4/alsa.m4', + 'm4/docbook.m4', + 'm4/libtool.m4', + 'm4/ltoptions.m4', + 'm4/ltsugar.m4', + 'm4/ltversion.m4', + 'm4/lt~obsolete.m4', + 'configure.ac' + ], + { + 'AM_ENABLE_STATIC' => 1, + 'AC_LIBTOOL_LANG_RC_CONFIG' => 1, + '_LT_AC_SHELL_INIT' => 1, + 'AC_DEFUN' => 1, + 'AC_PROG_LIBTOOL' => 1, + '_LT_AC_LANG_CXX_CONFIG' => 1, + 'AM_PROG_MKDIR_P' => 1, + 'AM_PYTHON_CHECK_VERSION' => 1, + 'AM_AUTOMAKE_VERSION' => 1, + 'AM_SUBST_NOTMAKE' => 1, + 'AM_MISSING_PROG' => 1, + 'AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH' => 1, + '_LT_AC_LANG_C_CONFIG' => 1, + 'AM_PROG_INSTALL_STRIP' => 1, + '_m4_warn' => 1, + 'AC_LIBTOOL_OBJDIR' => 1, + 'gl_FUNC_ARGZ' => 1, + 'LTOBSOLETE_VERSION' => 1, + 'AM_SANITY_CHECK' => 1, + 'AC_LIBTOOL_LANG_GCJ_CONFIG' => 1, + 'AC_LIBTOOL_PROG_COMPILER_PIC' => 1, + 'LT_LIB_M' => 1, + '_LT_AC_CHECK_DLFCN' => 1, + 'AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE' => 1, + 'LTSUGAR_VERSION' => 1, + '_LT_PROG_LTMAIN' => 1, + 'LT_SYS_SYMBOL_USCORE' => 1, + '_AM_PROG_TAR' => 1, + 'AC_LIBTOOL_GCJ' => 1, + 'LT_FUNC_DLSYM_USCORE' => 1, + 'PGAC_CHECK_DOCBOOK' => 1, + 'LT_SYS_DLOPEN_DEPLIBS' => 1, + 'AC_LIBTOOL_CONFIG' => 1, + '_LT_AC_LANG_F77' => 1, + 'AC_LTDL_DLLIB' => 1, + '_AM_SUBST_NOTMAKE' => 1, + '_AM_AUTOCONF_VERSION' => 1, + 'AM_DISABLE_SHARED' => 1, + '_LTDL_SETUP' => 1, + 'AM_PROG_LIBTOOL' => 1, + '_LT_AC_LANG_CXX' => 1, + 'PGAC_PROG_NSGMLS' => 1, + 'AM_PROG_LD' => 1, + '_LT_AC_FILE_LTDLL_C' => 1, + 'AC_LIB_LTDL' => 1, + 'AU_DEFUN' => 1, + 'AC_PROG_NM' => 1, + 'AC_LIBTOOL_DLOPEN' => 1, + 'AC_PROG_LD' => 1, + 'AC_PROG_LD_GNU' => 1, + 'AC_ENABLE_FAST_INSTALL' => 1, + 'AC_LIBTOOL_FC' => 1, + 'LTDL_CONVENIENCE' => 1, + '_AM_SET_OPTION' => 1, + 'AC_LTDL_PREOPEN' => 1, + '_LT_LINKER_BOILERPLATE' => 1, + 'AC_LIBTOOL_LANG_CXX_CONFIG' => 1, + 'AC_LIBTOOL_PROG_CC_C_O' => 1, + 'gl_PREREQ_ARGZ' => 1, + 'PGAC_PATH_DOCBOOK_STYLESHEETS' => 1, + 'LT_SUPPORTED_TAG' => 1, + 'AM_OUTPUT_DEPENDENCY_COMMANDS' => 1, + 'LT_PROG_RC' => 1, + 'LT_SYS_MODULE_EXT' => 1, + 'AC_DEFUN_ONCE' => 1, + '_LT_AC_LANG_GCJ' => 1, + 'AC_LTDL_OBJDIR' => 1, + '_LT_PATH_TOOL_PREFIX' => 1, + 'AC_LIBTOOL_RC' => 1, + '_LT_AC_PROG_ECHO_BACKSLASH' => 1, + 'AC_DISABLE_FAST_INSTALL' => 1, + 'AM_SILENT_RULES' => 1, + 'include' => 1, + '_LT_AC_TRY_DLOPEN_SELF' => 1, + '_LT_AC_SYS_LIBPATH_AIX' => 1, + 'LT_AC_PROG_SED' => 1, + 'AM_ENABLE_SHARED' => 1, + 'LTDL_INSTALLABLE' => 1, + '_LT_AC_LANG_GCJ_CONFIG' => 1, + 'AC_ENABLE_SHARED' => 1, + 'AC_LIBTOOL_SYS_HARD_LINK_LOCKS' => 1, + 'AC_ENABLE_STATIC' => 1, + '_LT_AC_TAGVAR' => 1, + 'AC_LIBTOOL_LANG_F77_CONFIG' => 1, + 'AM_CONDITIONAL' => 1, + 'LT_LIB_DLLOAD' => 1, + 'LTVERSION_VERSION' => 1, + 'LTDL_INIT' => 1, + 'm4_include' => 1, + 'AM_PROG_INSTALL_SH' => 1, + 'AC_PROG_EGREP' => 1, + 'AM_PATH_PYTHON' => 1, + 'AC_PATH_MAGIC' => 1, + '_AC_AM_CONFIG_HEADER_HOOK' => 1, + 'AC_LTDL_SYSSEARCHPATH' => 1, + 'AM_MAKE_INCLUDE' => 1, + 'LT_CMD_MAX_LEN' => 1, + '_LT_AC_TAGCONFIG' => 1, + 'm4_pattern_forbid' => 1, + '_LT_LINKER_OPTION' => 1, + 'AC_LIBTOOL_COMPILER_OPTION' => 1, + 'AC_DISABLE_SHARED' => 1, + '_LT_COMPILER_BOILERPLATE' => 1, + 'AC_LIBTOOL_WIN32_DLL' => 1, + 'AC_LIBTOOL_SETUP' => 1, + 'AC_PROG_LD_RELOAD_FLAG' => 1, + 'AC_LTDL_DLSYM_USCORE' => 1, + 'AM_MISSING_HAS_RUN' => 1, + 'LT_LANG' => 1, + 'LT_SYS_DLSEARCH_PATH' => 1, + 'LT_CONFIG_LTDL_DIR' => 1, + 'AC_LIBTOOL_DLOPEN_SELF' => 1, + 'LT_OUTPUT' => 1, + 'AC_LIBTOOL_PROG_LD_SHLIBS' => 1, + '_PKG_SHORT_ERRORS_SUPPORTED' => 1, + 'AC_WITH_LTDL' => 1, + 'AC_LIBTOOL_LINKER_OPTION' => 1, + 'PKG_CHECK_EXISTS' => 1, + 'LT_AC_PROG_RC' => 1, + 'AC_LIBTOOL_CXX' => 1, + 'LT_INIT' => 1, + 'LT_AC_PROG_GCJ' => 1, + 'LT_SYS_DLOPEN_SELF' => 1, + 'AM_DEP_TRACK' => 1, + 'AM_DISABLE_STATIC' => 1, + 'PGAC_PROG_JADE' => 1, + 'AM_CONFIG_HEADER' => 1, + '_AC_PROG_LIBTOOL' => 1, + '_AM_IF_OPTION' => 1, + 'AC_PATH_TOOL_PREFIX' => 1, + 'm4_pattern_allow' => 1, + 'AC_LIBTOOL_F77' => 1, + 'AM_SET_LEADING_DOT' => 1, + 'LT_AC_PROG_EGREP' => 1, + '_AM_DEPENDENCIES' => 1, + 'AC_LIBTOOL_LANG_C_CONFIG' => 1, + 'LTOPTIONS_VERSION' => 1, + '_LT_AC_SYS_COMPILER' => 1, + 'AM_PROG_NM' => 1, + 'PKG_CHECK_MODULES' => 1, + 'AC_LIBLTDL_CONVENIENCE' => 1, + 'AC_DEPLIBS_CHECK_METHOD' => 1, + 'AC_LIBLTDL_INSTALLABLE' => 1, + 'AM_SET_CURRENT_AUTOMAKE_VERSION' => 1, + 'AC_LTDL_ENABLE_INSTALL' => 1, + 'LT_PROG_GCJ' => 1, + 'AC_LIBTOOL_SYS_DYNAMIC_LINKER' => 1, + 'AM_INIT_AUTOMAKE' => 1, + 'AC_DISABLE_STATIC' => 1, + 'AM_PATH_ALSA' => 1, + 'LT_PATH_NM' => 1, + 'AC_LTDL_SHLIBEXT' => 1, + 'AM_ACLOCAL_INCLUDE' => 1, + '_LT_AC_LOCK' => 1, + '_LT_AC_LANG_RC_CONFIG' => 1, + 'LT_SYS_MODULE_PATH' => 1, + 'LT_WITH_LTDL' => 1, + 'AC_LIBTOOL_POSTDEP_PREDEP' => 1, + 'AC_LTDL_SHLIBPATH' => 1, + 'AM_AUX_DIR_EXPAND' => 1, + 'AC_LIBTOOL_PROG_COMPILER_NO_RTTI' => 1, + '_LT_AC_LANG_F77_CONFIG' => 1, + '_LT_COMPILER_OPTION' => 1, + '_AM_SET_OPTIONS' => 1, + 'AM_RUN_LOG' => 1, + '_AM_OUTPUT_DEPENDENCY_COMMANDS' => 1, + 'AC_LIBTOOL_PICMODE' => 1, + 'AC_LTDL_SYS_DLOPEN_DEPLIBS' => 1, + 'AC_LIBTOOL_SYS_OLD_ARCHIVE' => 1, + 'AC_CHECK_LIBM' => 1, + 'LT_PATH_LD' => 1, + 'AC_LIBTOOL_SYS_LIB_STRIP' => 1, + '_AM_MANGLE_OPTION' => 1, + 'AC_LIBTOOL_SYS_MAX_CMD_LEN' => 1, + 'AC_LTDL_SYMBOL_USCORE' => 1, + 'AM_SET_DEPDIR' => 1, + 'PKG_PROG_PKG_CONFIG' => 1, + '_LT_CC_BASENAME' => 1, + '_LT_LIBOBJ' => 1 + } + ], 'Autom4te::Request' ) + ); + diff --git a/muse2/autom4te.cache/traces.0 b/muse2/autom4te.cache/traces.0 new file mode 100644 index 00000000..fe17865f --- /dev/null +++ b/muse2/autom4te.cache/traces.0 @@ -0,0 +1,3343 @@ +m4trace:/usr/share/aclocal/argz.m4:12: -1- AC_DEFUN([gl_FUNC_ARGZ], [gl_PREREQ_ARGZ + +AC_CHECK_HEADERS([argz.h], [], [], [AC_INCLUDES_DEFAULT]) + +AC_CHECK_TYPES([error_t], + [], + [AC_DEFINE([error_t], [int], + [Define to a type to use for `error_t' if it is not otherwise available.]) + AC_DEFINE([__error_t_defined], [1], [Define so that glibc/gnulib argp.h + does not typedef error_t.])], + [#if defined(HAVE_ARGZ_H) +# include +#endif]) + +ARGZ_H= +AC_CHECK_FUNCS([argz_add argz_append argz_count argz_create_sep argz_insert \ + argz_next argz_stringify], [], [ARGZ_H=argz.h; AC_LIBOBJ([argz])]) + +dnl if have system argz functions, allow forced use of +dnl libltdl-supplied implementation (and default to do so +dnl on "known bad" systems). Could use a runtime check, but +dnl (a) detecting malloc issues is notoriously unreliable +dnl (b) only known system that declares argz functions, +dnl provides them, yet they are broken, is cygwin +dnl releases prior to 16-Mar-2007 (1.5.24 and earlier) +dnl So, it's more straightforward simply to special case +dnl this for known bad systems. +AS_IF([test -z "$ARGZ_H"], + [AC_CACHE_CHECK( + [if argz actually works], + [lt_cv_sys_argz_works], + [[case $host_os in #( + *cygwin*) + lt_cv_sys_argz_works=no + if test "$cross_compiling" != no; then + lt_cv_sys_argz_works="guessing no" + else + lt_sed_extract_leading_digits='s/^\([0-9\.]*\).*/\1/' + save_IFS=$IFS + IFS=-. + set x `uname -r | sed -e "$lt_sed_extract_leading_digits"` + IFS=$save_IFS + lt_os_major=${2-0} + lt_os_minor=${3-0} + lt_os_micro=${4-0} + if test "$lt_os_major" -gt 1 \ + || { test "$lt_os_major" -eq 1 \ + && { test "$lt_os_minor" -gt 5 \ + || { test "$lt_os_minor" -eq 5 \ + && test "$lt_os_micro" -gt 24; }; }; }; then + lt_cv_sys_argz_works=yes + fi + fi + ;; #( + *) lt_cv_sys_argz_works=yes ;; + esac]]) + AS_IF([test $lt_cv_sys_argz_works = yes], + [AC_DEFINE([HAVE_WORKING_ARGZ], 1, + [This value is set to 1 to indicate that the system argz facility works])], + [ARGZ_H=argz.h + AC_LIBOBJ([argz])])]) + +AC_SUBST([ARGZ_H]) +]) +m4trace:/usr/share/aclocal/argz.m4:79: -1- AC_DEFUN([gl_PREREQ_ARGZ], [:]) +m4trace:/usr/share/aclocal/ltdl.m4:16: -1- AC_DEFUN([LT_CONFIG_LTDL_DIR], [AC_BEFORE([$0], [LTDL_INIT]) +_$0($*) +]) +m4trace:/usr/share/aclocal/ltdl.m4:68: -1- AC_DEFUN([LTDL_CONVENIENCE], [AC_BEFORE([$0], [LTDL_INIT])dnl +dnl Although the argument is deprecated and no longer documented, +dnl LTDL_CONVENIENCE used to take a DIRECTORY orgument, if we have one +dnl here make sure it is the same as any other declaration of libltdl's +dnl location! This also ensures lt_ltdl_dir is set when configure.ac is +dnl not yet using an explicit LT_CONFIG_LTDL_DIR. +m4_ifval([$1], [_LT_CONFIG_LTDL_DIR([$1])])dnl +_$0() +]) +m4trace:/usr/share/aclocal/ltdl.m4:81: -1- AU_DEFUN([AC_LIBLTDL_CONVENIENCE], [_LT_CONFIG_LTDL_DIR([m4_default([$1], [libltdl])]) +_LTDL_CONVENIENCE]) +m4trace:/usr/share/aclocal/ltdl.m4:81: -1- AC_DEFUN([AC_LIBLTDL_CONVENIENCE], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBLTDL_CONVENIENCE' is obsolete. +You should run autoupdate.])dnl +_LT_CONFIG_LTDL_DIR([m4_default([$1], [libltdl])]) +_LTDL_CONVENIENCE]) +m4trace:/usr/share/aclocal/ltdl.m4:124: -1- AC_DEFUN([LTDL_INSTALLABLE], [AC_BEFORE([$0], [LTDL_INIT])dnl +dnl Although the argument is deprecated and no longer documented, +dnl LTDL_INSTALLABLE used to take a DIRECTORY orgument, if we have one +dnl here make sure it is the same as any other declaration of libltdl's +dnl location! This also ensures lt_ltdl_dir is set when configure.ac is +dnl not yet using an explicit LT_CONFIG_LTDL_DIR. +m4_ifval([$1], [_LT_CONFIG_LTDL_DIR([$1])])dnl +_$0() +]) +m4trace:/usr/share/aclocal/ltdl.m4:137: -1- AU_DEFUN([AC_LIBLTDL_INSTALLABLE], [_LT_CONFIG_LTDL_DIR([m4_default([$1], [libltdl])]) +_LTDL_INSTALLABLE]) +m4trace:/usr/share/aclocal/ltdl.m4:137: -1- AC_DEFUN([AC_LIBLTDL_INSTALLABLE], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBLTDL_INSTALLABLE' is obsolete. +You should run autoupdate.])dnl +_LT_CONFIG_LTDL_DIR([m4_default([$1], [libltdl])]) +_LTDL_INSTALLABLE]) +m4trace:/usr/share/aclocal/ltdl.m4:213: -1- AC_DEFUN([_LT_LIBOBJ], [ + m4_pattern_allow([^_LT_LIBOBJS$]) + _LT_LIBOBJS="$_LT_LIBOBJS $1.$ac_objext" +]) +m4trace:/usr/share/aclocal/ltdl.m4:226: -1- AC_DEFUN([LTDL_INIT], [dnl Parse OPTIONS +_LT_SET_OPTIONS([$0], [$1]) + +dnl We need to keep our own list of libobjs separate from our parent project, +dnl and the easiest way to do that is redefine the AC_LIBOBJs macro while +dnl we look for our own LIBOBJs. +m4_pushdef([AC_LIBOBJ], m4_defn([_LT_LIBOBJ])) +m4_pushdef([AC_LIBSOURCES]) + +dnl If not otherwise defined, default to the 1.5.x compatible subproject mode: +m4_if(_LTDL_MODE, [], + [m4_define([_LTDL_MODE], m4_default([$2], [subproject])) + m4_if([-1], [m4_bregexp(_LTDL_MODE, [\(subproject\|\(non\)?recursive\)])], + [m4_fatal([unknown libltdl mode: ]_LTDL_MODE)])]) + +AC_ARG_WITH([included_ltdl], + [AS_HELP_STRING([--with-included-ltdl], + [use the GNU ltdl sources included here])]) + +if test "x$with_included_ltdl" != xyes; then + # We are not being forced to use the included libltdl sources, so + # decide whether there is a useful installed version we can use. + AC_CHECK_HEADER([ltdl.h], + [AC_CHECK_DECL([lt_dlinterface_register], + [AC_CHECK_LIB([ltdl], [lt_dladvise_preload], + [with_included_ltdl=no], + [with_included_ltdl=yes])], + [with_included_ltdl=yes], + [AC_INCLUDES_DEFAULT + #include ])], + [with_included_ltdl=yes], + [AC_INCLUDES_DEFAULT] + ) +fi + +dnl If neither LT_CONFIG_LTDL_DIR, LTDL_CONVENIENCE nor LTDL_INSTALLABLE +dnl was called yet, then for old times' sake, we assume libltdl is in an +dnl eponymous directory: +AC_PROVIDE_IFELSE([LT_CONFIG_LTDL_DIR], [], [_LT_CONFIG_LTDL_DIR([libltdl])]) + +AC_ARG_WITH([ltdl_include], + [AS_HELP_STRING([--with-ltdl-include=DIR], + [use the ltdl headers installed in DIR])]) + +if test -n "$with_ltdl_include"; then + if test -f "$with_ltdl_include/ltdl.h"; then : + else + AC_MSG_ERROR([invalid ltdl include directory: `$with_ltdl_include']) + fi +else + with_ltdl_include=no +fi + +AC_ARG_WITH([ltdl_lib], + [AS_HELP_STRING([--with-ltdl-lib=DIR], + [use the libltdl.la installed in DIR])]) + +if test -n "$with_ltdl_lib"; then + if test -f "$with_ltdl_lib/libltdl.la"; then : + else + AC_MSG_ERROR([invalid ltdl library directory: `$with_ltdl_lib']) + fi +else + with_ltdl_lib=no +fi + +case ,$with_included_ltdl,$with_ltdl_include,$with_ltdl_lib, in + ,yes,no,no,) + m4_case(m4_default(_LTDL_TYPE, [convenience]), + [convenience], [_LTDL_CONVENIENCE], + [installable], [_LTDL_INSTALLABLE], + [m4_fatal([unknown libltdl build type: ]_LTDL_TYPE)]) + ;; + ,no,no,no,) + # If the included ltdl is not to be used, then use the + # preinstalled libltdl we found. + AC_DEFINE([HAVE_LTDL], [1], + [Define this if a modern libltdl is already installed]) + LIBLTDL=-lltdl + LTDLDEPS= + LTDLINCL= + ;; + ,no*,no,*) + AC_MSG_ERROR([`--with-ltdl-include' and `--with-ltdl-lib' options must be used together]) + ;; + *) with_included_ltdl=no + LIBLTDL="-L$with_ltdl_lib -lltdl" + LTDLDEPS= + LTDLINCL="-I$with_ltdl_include" + ;; +esac +INCLTDL="$LTDLINCL" + +# Report our decision... +AC_MSG_CHECKING([where to find libltdl headers]) +AC_MSG_RESULT([$LTDLINCL]) +AC_MSG_CHECKING([where to find libltdl library]) +AC_MSG_RESULT([$LIBLTDL]) + +_LTDL_SETUP + +dnl restore autoconf definition. +m4_popdef([AC_LIBOBJ]) +m4_popdef([AC_LIBSOURCES]) + +AC_CONFIG_COMMANDS_PRE([ + _ltdl_libobjs= + _ltdl_ltlibobjs= + if test -n "$_LT_LIBOBJS"; then + # Remove the extension. + _lt_sed_drop_objext='s/\.o$//;s/\.obj$//' + for i in `for i in $_LT_LIBOBJS; do echo "$i"; done | sed "$_lt_sed_drop_objext" | sort -u`; do + _ltdl_libobjs="$_ltdl_libobjs $lt_libobj_prefix$i.$ac_objext" + _ltdl_ltlibobjs="$_ltdl_ltlibobjs $lt_libobj_prefix$i.lo" + done + fi + AC_SUBST([ltdl_LIBOBJS], [$_ltdl_libobjs]) + AC_SUBST([ltdl_LTLIBOBJS], [$_ltdl_ltlibobjs]) +]) + +# Only expand once: +m4_define([LTDL_INIT]) +]) +m4trace:/usr/share/aclocal/ltdl.m4:352: -1- AU_DEFUN([AC_LIB_LTDL], [LTDL_INIT($@)]) +m4trace:/usr/share/aclocal/ltdl.m4:352: -1- AC_DEFUN([AC_LIB_LTDL], [AC_DIAGNOSE([obsolete], [The macro `AC_LIB_LTDL' is obsolete. +You should run autoupdate.])dnl +LTDL_INIT($@)]) +m4trace:/usr/share/aclocal/ltdl.m4:353: -1- AU_DEFUN([AC_WITH_LTDL], [LTDL_INIT($@)]) +m4trace:/usr/share/aclocal/ltdl.m4:353: -1- AC_DEFUN([AC_WITH_LTDL], [AC_DIAGNOSE([obsolete], [The macro `AC_WITH_LTDL' is obsolete. +You should run autoupdate.])dnl +LTDL_INIT($@)]) +m4trace:/usr/share/aclocal/ltdl.m4:354: -1- AU_DEFUN([LT_WITH_LTDL], [LTDL_INIT($@)]) +m4trace:/usr/share/aclocal/ltdl.m4:354: -1- AC_DEFUN([LT_WITH_LTDL], [AC_DIAGNOSE([obsolete], [The macro `LT_WITH_LTDL' is obsolete. +You should run autoupdate.])dnl +LTDL_INIT($@)]) +m4trace:/usr/share/aclocal/ltdl.m4:367: -1- AC_DEFUN([_LTDL_SETUP], [AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([LT_SYS_MODULE_EXT])dnl +AC_REQUIRE([LT_SYS_MODULE_PATH])dnl +AC_REQUIRE([LT_SYS_DLSEARCH_PATH])dnl +AC_REQUIRE([LT_LIB_DLLOAD])dnl +AC_REQUIRE([LT_SYS_SYMBOL_USCORE])dnl +AC_REQUIRE([LT_FUNC_DLSYM_USCORE])dnl +AC_REQUIRE([LT_SYS_DLOPEN_DEPLIBS])dnl +AC_REQUIRE([gl_FUNC_ARGZ])dnl + +m4_require([_LT_CHECK_OBJDIR])dnl +m4_require([_LT_HEADER_DLFCN])dnl +m4_require([_LT_CHECK_DLPREOPEN])dnl +m4_require([_LT_DECL_SED])dnl + +dnl Don't require this, or it will be expanded earlier than the code +dnl that sets the variables it relies on: +_LT_ENABLE_INSTALL + +dnl _LTDL_MODE specific code must be called at least once: +_LTDL_MODE_DISPATCH + +# In order that ltdl.c can compile, find out the first AC_CONFIG_HEADERS +# the user used. This is so that ltdl.h can pick up the parent projects +# config.h file, The first file in AC_CONFIG_HEADERS must contain the +# definitions required by ltdl.c. +# FIXME: Remove use of undocumented AC_LIST_HEADERS (2.59 compatibility). +AC_CONFIG_COMMANDS_PRE([dnl +m4_pattern_allow([^LT_CONFIG_H$])dnl +m4_ifset([AH_HEADER], + [LT_CONFIG_H=AH_HEADER], + [m4_ifset([AC_LIST_HEADERS], + [LT_CONFIG_H=`echo "AC_LIST_HEADERS" | $SED 's,^[[ ]]*,,;s,[[ :]].*$,,'`], + [])])]) +AC_SUBST([LT_CONFIG_H]) + +AC_CHECK_HEADERS([unistd.h dl.h sys/dl.h dld.h mach-o/dyld.h dirent.h], + [], [], [AC_INCLUDES_DEFAULT]) + +AC_CHECK_FUNCS([closedir opendir readdir], [], [AC_LIBOBJ([lt__dirent])]) +AC_CHECK_FUNCS([strlcat strlcpy], [], [AC_LIBOBJ([lt__strl])]) + +AC_DEFINE_UNQUOTED([LT_LIBEXT],["$libext"],[The archive extension]) + +name=ltdl +LTDLOPEN=`eval "\\$ECHO \"$libname_spec\""` +AC_SUBST([LTDLOPEN]) +]) +m4trace:/usr/share/aclocal/ltdl.m4:437: -1- AC_DEFUN([LT_SYS_DLOPEN_DEPLIBS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_CACHE_CHECK([whether deplibs are loaded by dlopen], + [lt_cv_sys_dlopen_deplibs], + [# PORTME does your system automatically load deplibs for dlopen? + # or its logical equivalent (e.g. shl_load for HP-UX < 11) + # For now, we just catch OSes we know something about -- in the + # future, we'll try test this programmatically. + lt_cv_sys_dlopen_deplibs=unknown + case $host_os in + aix3*|aix4.1.*|aix4.2.*) + # Unknown whether this is true for these versions of AIX, but + # we want this `case' here to explicitly catch those versions. + lt_cv_sys_dlopen_deplibs=unknown + ;; + aix[[4-9]]*) + lt_cv_sys_dlopen_deplibs=yes + ;; + amigaos*) + case $host_cpu in + powerpc) + lt_cv_sys_dlopen_deplibs=no + ;; + esac + ;; + darwin*) + # Assuming the user has installed a libdl from somewhere, this is true + # If you are looking for one http://www.opendarwin.org/projects/dlcompat + lt_cv_sys_dlopen_deplibs=yes + ;; + freebsd* | dragonfly*) + lt_cv_sys_dlopen_deplibs=yes + ;; + gnu* | linux* | k*bsd*-gnu | kopensolaris*-gnu) + # GNU and its variants, using gnu ld.so (Glibc) + lt_cv_sys_dlopen_deplibs=yes + ;; + hpux10*|hpux11*) + lt_cv_sys_dlopen_deplibs=yes + ;; + interix*) + lt_cv_sys_dlopen_deplibs=yes + ;; + irix[[12345]]*|irix6.[[01]]*) + # Catch all versions of IRIX before 6.2, and indicate that we don't + # know how it worked for any of those versions. + lt_cv_sys_dlopen_deplibs=unknown + ;; + irix*) + # The case above catches anything before 6.2, and it's known that + # at 6.2 and later dlopen does load deplibs. + lt_cv_sys_dlopen_deplibs=yes + ;; + netbsd* | netbsdelf*-gnu) + lt_cv_sys_dlopen_deplibs=yes + ;; + openbsd*) + lt_cv_sys_dlopen_deplibs=yes + ;; + osf[[1234]]*) + # dlopen did load deplibs (at least at 4.x), but until the 5.x series, + # it did *not* use an RPATH in a shared library to find objects the + # library depends on, so we explicitly say `no'. + lt_cv_sys_dlopen_deplibs=no + ;; + osf5.0|osf5.0a|osf5.1) + # dlopen *does* load deplibs and with the right loader patch applied + # it even uses RPATH in a shared library to search for shared objects + # that the library depends on, but there's no easy way to know if that + # patch is installed. Since this is the case, all we can really + # say is unknown -- it depends on the patch being installed. If + # it is, this changes to `yes'. Without it, it would be `no'. + lt_cv_sys_dlopen_deplibs=unknown + ;; + osf*) + # the two cases above should catch all versions of osf <= 5.1. Read + # the comments above for what we know about them. + # At > 5.1, deplibs are loaded *and* any RPATH in a shared library + # is used to find them so we can finally say `yes'. + lt_cv_sys_dlopen_deplibs=yes + ;; + qnx*) + lt_cv_sys_dlopen_deplibs=yes + ;; + solaris*) + lt_cv_sys_dlopen_deplibs=yes + ;; + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + libltdl_cv_sys_dlopen_deplibs=yes + ;; + esac + ]) +if test "$lt_cv_sys_dlopen_deplibs" != yes; then + AC_DEFINE([LTDL_DLOPEN_DEPLIBS], [1], + [Define if the OS needs help to load dependent libraries for dlopen().]) +fi +]) +m4trace:/usr/share/aclocal/ltdl.m4:536: -1- AU_DEFUN([AC_LTDL_SYS_DLOPEN_DEPLIBS], [m4_if($#, 0, [LT_SYS_DLOPEN_DEPLIBS], [LT_SYS_DLOPEN_DEPLIBS($@)])]) +m4trace:/usr/share/aclocal/ltdl.m4:536: -1- AC_DEFUN([AC_LTDL_SYS_DLOPEN_DEPLIBS], [AC_DIAGNOSE([obsolete], [The macro `AC_LTDL_SYS_DLOPEN_DEPLIBS' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [LT_SYS_DLOPEN_DEPLIBS], [LT_SYS_DLOPEN_DEPLIBS($@)])]) +m4trace:/usr/share/aclocal/ltdl.m4:543: -1- AC_DEFUN([LT_SYS_MODULE_EXT], [m4_require([_LT_SYS_DYNAMIC_LINKER])dnl +AC_CACHE_CHECK([which extension is used for runtime loadable modules], + [libltdl_cv_shlibext], +[ +module=yes +eval libltdl_cv_shlibext=$shrext_cmds + ]) +if test -n "$libltdl_cv_shlibext"; then + m4_pattern_allow([LT_MODULE_EXT])dnl + AC_DEFINE_UNQUOTED([LT_MODULE_EXT], ["$libltdl_cv_shlibext"], + [Define to the extension used for runtime loadable modules, say, ".so".]) +fi +]) +m4trace:/usr/share/aclocal/ltdl.m4:559: -1- AU_DEFUN([AC_LTDL_SHLIBEXT], [m4_if($#, 0, [LT_SYS_MODULE_EXT], [LT_SYS_MODULE_EXT($@)])]) +m4trace:/usr/share/aclocal/ltdl.m4:559: -1- AC_DEFUN([AC_LTDL_SHLIBEXT], [AC_DIAGNOSE([obsolete], [The macro `AC_LTDL_SHLIBEXT' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [LT_SYS_MODULE_EXT], [LT_SYS_MODULE_EXT($@)])]) +m4trace:/usr/share/aclocal/ltdl.m4:566: -1- AC_DEFUN([LT_SYS_MODULE_PATH], [m4_require([_LT_SYS_DYNAMIC_LINKER])dnl +AC_CACHE_CHECK([which variable specifies run-time module search path], + [lt_cv_module_path_var], [lt_cv_module_path_var="$shlibpath_var"]) +if test -n "$lt_cv_module_path_var"; then + m4_pattern_allow([LT_MODULE_PATH_VAR])dnl + AC_DEFINE_UNQUOTED([LT_MODULE_PATH_VAR], ["$lt_cv_module_path_var"], + [Define to the name of the environment variable that determines the run-time module search path.]) +fi +]) +m4trace:/usr/share/aclocal/ltdl.m4:578: -1- AU_DEFUN([AC_LTDL_SHLIBPATH], [m4_if($#, 0, [LT_SYS_MODULE_PATH], [LT_SYS_MODULE_PATH($@)])]) +m4trace:/usr/share/aclocal/ltdl.m4:578: -1- AC_DEFUN([AC_LTDL_SHLIBPATH], [AC_DIAGNOSE([obsolete], [The macro `AC_LTDL_SHLIBPATH' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [LT_SYS_MODULE_PATH], [LT_SYS_MODULE_PATH($@)])]) +m4trace:/usr/share/aclocal/ltdl.m4:585: -1- AC_DEFUN([LT_SYS_DLSEARCH_PATH], [m4_require([_LT_SYS_DYNAMIC_LINKER])dnl +AC_CACHE_CHECK([for the default library search path], + [lt_cv_sys_dlsearch_path], + [lt_cv_sys_dlsearch_path="$sys_lib_dlsearch_path_spec"]) +if test -n "$lt_cv_sys_dlsearch_path"; then + sys_dlsearch_path= + for dir in $lt_cv_sys_dlsearch_path; do + if test -z "$sys_dlsearch_path"; then + sys_dlsearch_path="$dir" + else + sys_dlsearch_path="$sys_dlsearch_path$PATH_SEPARATOR$dir" + fi + done + m4_pattern_allow([LT_DLSEARCH_PATH])dnl + AC_DEFINE_UNQUOTED([LT_DLSEARCH_PATH], ["$sys_dlsearch_path"], + [Define to the system default library search path.]) +fi +]) +m4trace:/usr/share/aclocal/ltdl.m4:606: -1- AU_DEFUN([AC_LTDL_SYSSEARCHPATH], [m4_if($#, 0, [LT_SYS_DLSEARCH_PATH], [LT_SYS_DLSEARCH_PATH($@)])]) +m4trace:/usr/share/aclocal/ltdl.m4:606: -1- AC_DEFUN([AC_LTDL_SYSSEARCHPATH], [AC_DIAGNOSE([obsolete], [The macro `AC_LTDL_SYSSEARCHPATH' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [LT_SYS_DLSEARCH_PATH], [LT_SYS_DLSEARCH_PATH($@)])]) +m4trace:/usr/share/aclocal/ltdl.m4:632: -1- AC_DEFUN([LT_LIB_DLLOAD], [m4_pattern_allow([^LT_DLLOADERS$]) +LT_DLLOADERS= +AC_SUBST([LT_DLLOADERS]) + +AC_LANG_PUSH([C]) + +LIBADD_DLOPEN= +AC_SEARCH_LIBS([dlopen], [dl], + [AC_DEFINE([HAVE_LIBDL], [1], + [Define if you have the libdl library or equivalent.]) + if test "$ac_cv_search_dlopen" != "none required" ; then + LIBADD_DLOPEN="-ldl" + fi + libltdl_cv_lib_dl_dlopen="yes" + LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dlopen.la"], + [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#if HAVE_DLFCN_H +# include +#endif + ]], [[dlopen(0, 0);]])], + [AC_DEFINE([HAVE_LIBDL], [1], + [Define if you have the libdl library or equivalent.]) + libltdl_cv_func_dlopen="yes" + LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dlopen.la"], + [AC_CHECK_LIB([svld], [dlopen], + [AC_DEFINE([HAVE_LIBDL], [1], + [Define if you have the libdl library or equivalent.]) + LIBADD_DLOPEN="-lsvld" libltdl_cv_func_dlopen="yes" + LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dlopen.la"])])]) +if test x"$libltdl_cv_func_dlopen" = xyes || test x"$libltdl_cv_lib_dl_dlopen" = xyes +then + lt_save_LIBS="$LIBS" + LIBS="$LIBS $LIBADD_DLOPEN" + AC_CHECK_FUNCS([dlerror]) + LIBS="$lt_save_LIBS" +fi +AC_SUBST([LIBADD_DLOPEN]) + +LIBADD_SHL_LOAD= +AC_CHECK_FUNC([shl_load], + [AC_DEFINE([HAVE_SHL_LOAD], [1], + [Define if you have the shl_load function.]) + LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}shl_load.la"], + [AC_CHECK_LIB([dld], [shl_load], + [AC_DEFINE([HAVE_SHL_LOAD], [1], + [Define if you have the shl_load function.]) + LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}shl_load.la" + LIBADD_SHL_LOAD="-ldld"])]) +AC_SUBST([LIBADD_SHL_LOAD]) + +case $host_os in +darwin[[1567]].*) +# We only want this for pre-Mac OS X 10.4. + AC_CHECK_FUNC([_dyld_func_lookup], + [AC_DEFINE([HAVE_DYLD], [1], + [Define if you have the _dyld_func_lookup function.]) + LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dyld.la"]) + ;; +beos*) + LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}load_add_on.la" + ;; +cygwin* | mingw* | os2* | pw32*) + AC_CHECK_DECLS([cygwin_conv_path], [], [], [[#include ]]) + LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}loadlibrary.la" + ;; +esac + +AC_CHECK_LIB([dld], [dld_link], + [AC_DEFINE([HAVE_DLD], [1], + [Define if you have the GNU dld library.]) + LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dld_link.la"]) +AC_SUBST([LIBADD_DLD_LINK]) + +m4_pattern_allow([^LT_DLPREOPEN$]) +LT_DLPREOPEN= +if test -n "$LT_DLLOADERS" +then + for lt_loader in $LT_DLLOADERS; do + LT_DLPREOPEN="$LT_DLPREOPEN-dlpreopen $lt_loader " + done + AC_DEFINE([HAVE_LIBDLLOADER], [1], + [Define if libdlloader will be built on this platform]) +fi +AC_SUBST([LT_DLPREOPEN]) + +dnl This isn't used anymore, but set it for backwards compatibility +LIBADD_DL="$LIBADD_DLOPEN $LIBADD_SHL_LOAD" +AC_SUBST([LIBADD_DL]) + +AC_LANG_POP +]) +m4trace:/usr/share/aclocal/ltdl.m4:725: -1- AU_DEFUN([AC_LTDL_DLLIB], [m4_if($#, 0, [LT_LIB_DLLOAD], [LT_LIB_DLLOAD($@)])]) +m4trace:/usr/share/aclocal/ltdl.m4:725: -1- AC_DEFUN([AC_LTDL_DLLIB], [AC_DIAGNOSE([obsolete], [The macro `AC_LTDL_DLLIB' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [LT_LIB_DLLOAD], [LT_LIB_DLLOAD($@)])]) +m4trace:/usr/share/aclocal/ltdl.m4:733: -1- AC_DEFUN([LT_SYS_SYMBOL_USCORE], [m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl +AC_CACHE_CHECK([for _ prefix in compiled symbols], + [lt_cv_sys_symbol_underscore], + [lt_cv_sys_symbol_underscore=no + cat > conftest.$ac_ext <<_LT_EOF +void nm_test_func(){} +int main(){nm_test_func;return 0;} +_LT_EOF + if AC_TRY_EVAL(ac_compile); then + # Now try to grab the symbols. + ac_nlist=conftest.nm + if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $ac_nlist) && test -s "$ac_nlist"; then + # See whether the symbols have a leading underscore. + if grep '^. _nm_test_func' "$ac_nlist" >/dev/null; then + lt_cv_sys_symbol_underscore=yes + else + if grep '^. nm_test_func ' "$ac_nlist" >/dev/null; then + : + else + echo "configure: cannot find nm_test_func in $ac_nlist" >&AS_MESSAGE_LOG_FD + fi + fi + else + echo "configure: cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD + fi + else + echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD + cat conftest.c >&AS_MESSAGE_LOG_FD + fi + rm -rf conftest* + ]) + sys_symbol_underscore=$lt_cv_sys_symbol_underscore + AC_SUBST([sys_symbol_underscore]) +]) +m4trace:/usr/share/aclocal/ltdl.m4:770: -1- AU_DEFUN([AC_LTDL_SYMBOL_USCORE], [m4_if($#, 0, [LT_SYS_SYMBOL_USCORE], [LT_SYS_SYMBOL_USCORE($@)])]) +m4trace:/usr/share/aclocal/ltdl.m4:770: -1- AC_DEFUN([AC_LTDL_SYMBOL_USCORE], [AC_DIAGNOSE([obsolete], [The macro `AC_LTDL_SYMBOL_USCORE' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [LT_SYS_SYMBOL_USCORE], [LT_SYS_SYMBOL_USCORE($@)])]) +m4trace:/usr/share/aclocal/ltdl.m4:777: -1- AC_DEFUN([LT_FUNC_DLSYM_USCORE], [AC_REQUIRE([LT_SYS_SYMBOL_USCORE])dnl +if test x"$lt_cv_sys_symbol_underscore" = xyes; then + if test x"$libltdl_cv_func_dlopen" = xyes || + test x"$libltdl_cv_lib_dl_dlopen" = xyes ; then + AC_CACHE_CHECK([whether we have to add an underscore for dlsym], + [libltdl_cv_need_uscore], + [libltdl_cv_need_uscore=unknown + save_LIBS="$LIBS" + LIBS="$LIBS $LIBADD_DLOPEN" + _LT_TRY_DLOPEN_SELF( + [libltdl_cv_need_uscore=no], [libltdl_cv_need_uscore=yes], + [], [libltdl_cv_need_uscore=cross]) + LIBS="$save_LIBS" + ]) + fi +fi + +if test x"$libltdl_cv_need_uscore" = xyes; then + AC_DEFINE([NEED_USCORE], [1], + [Define if dlsym() requires a leading underscore in symbol names.]) +fi +]) +m4trace:/usr/share/aclocal/ltdl.m4:802: -1- AU_DEFUN([AC_LTDL_DLSYM_USCORE], [m4_if($#, 0, [LT_FUNC_DLSYM_USCORE], [LT_FUNC_DLSYM_USCORE($@)])]) +m4trace:/usr/share/aclocal/ltdl.m4:802: -1- AC_DEFUN([AC_LTDL_DLSYM_USCORE], [AC_DIAGNOSE([obsolete], [The macro `AC_LTDL_DLSYM_USCORE' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [LT_FUNC_DLSYM_USCORE], [LT_FUNC_DLSYM_USCORE($@)])]) +m4trace:/usr/share/aclocal/pkg.m4:26: -1- AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) +m4_pattern_allow([^PKG_CONFIG(_PATH)?$]) +AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])dnl +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) +fi +if test -n "$PKG_CONFIG"; then + _pkg_min_version=m4_default([$1], [0.9.0]) + AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + PKG_CONFIG="" + fi + +fi[]dnl +]) +m4trace:/usr/share/aclocal/pkg.m4:56: -1- AC_DEFUN([PKG_CHECK_EXISTS], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +if test -n "$PKG_CONFIG" && \ + AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then + m4_ifval([$2], [$2], [:]) +m4_ifvaln([$3], [else + $3])dnl +fi]) +m4trace:/usr/share/aclocal/pkg.m4:84: -1- AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi[]dnl +]) +m4trace:/usr/share/aclocal/pkg.m4:104: -1- AC_DEFUN([PKG_CHECK_MODULES], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl +AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl + +pkg_failed=no +AC_MSG_CHECKING([for $1]) + +_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) +_PKG_CONFIG([$1][_LIBS], [libs], [$2]) + +m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS +and $1[]_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details.]) + +if test $pkg_failed = yes; then + _PKG_SHORT_ERRORS_SUPPORTED + if test $_pkg_short_errors_supported = yes; then + $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$2"` + else + $1[]_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"` + fi + # Put the nasty error message in config.log where it belongs + echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD + + ifelse([$4], , [AC_MSG_ERROR(dnl +[Package requirements ($2) were not met: + +$$1_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +_PKG_TEXT +])], + [AC_MSG_RESULT([no]) + $4]) +elif test $pkg_failed = untried; then + ifelse([$4], , [AC_MSG_FAILURE(dnl +[The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +_PKG_TEXT + +To get pkg-config, see .])], + [$4]) +else + $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS + $1[]_LIBS=$pkg_cv_[]$1[]_LIBS + AC_MSG_RESULT([yes]) + ifelse([$3], , :, [$3]) +fi[]dnl +]) +m4trace:/usr/share/aclocal-1.11/amversion.m4:14: -1- AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.11' +dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to +dnl require some minimum version. Point them to the right macro. +m4_if([$1], [1.11.1], [], + [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl +]) +m4trace:/usr/share/aclocal-1.11/amversion.m4:33: -1- AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.11.1])dnl +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) +m4trace:/usr/share/aclocal-1.11/auxdir.m4:47: -1- AC_DEFUN([AM_AUX_DIR_EXPAND], [dnl Rely on autoconf to set up CDPATH properly. +AC_PREREQ([2.50])dnl +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` +]) +m4trace:/usr/share/aclocal-1.11/cond.m4:15: -1- AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ(2.52)dnl + ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +AC_SUBST([$1_TRUE])dnl +AC_SUBST([$1_FALSE])dnl +_AM_SUBST_NOTMAKE([$1_TRUE])dnl +_AM_SUBST_NOTMAKE([$1_FALSE])dnl +m4_define([_AM_COND_VALUE_$1], [$2])dnl +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi +AC_CONFIG_COMMANDS_PRE( +[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then + AC_MSG_ERROR([[conditional "$1" was never defined. +Usually this means the macro was only invoked conditionally.]]) +fi])]) +m4trace:/usr/share/aclocal-1.11/depend.m4:28: -1- AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl +AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl +AC_REQUIRE([AM_MAKE_INCLUDE])dnl +AC_REQUIRE([AM_DEP_TRACK])dnl + +ifelse([$1], CC, [depcc="$CC" am_compiler_list=], + [$1], CXX, [depcc="$CXX" am_compiler_list=], + [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], UPC, [depcc="$UPC" am_compiler_list=], + [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], + [depcc="$$1" am_compiler_list=]) + +AC_CACHE_CHECK([dependency style of $depcc], + [am_cv_$1_dependencies_compiler_type], +[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_$1_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` + fi + am__universal=false + m4_case([$1], [CC], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac], + [CXX], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac]) + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_$1_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_$1_dependencies_compiler_type=none +fi +]) +AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) +AM_CONDITIONAL([am__fastdep$1], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) +]) +m4trace:/usr/share/aclocal-1.11/depend.m4:163: -1- AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl +AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl +]) +m4trace:/usr/share/aclocal-1.11/depend.m4:171: -1- AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE(dependency-tracking, +[ --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors]) +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +AC_SUBST([AMDEPBACKSLASH])dnl +_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl +]) +m4trace:/usr/share/aclocal-1.11/depout.m4:14: -1- AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} +]) +m4trace:/usr/share/aclocal-1.11/depout.m4:75: -1- AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], + [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], + [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) +]) +m4trace:/usr/share/aclocal-1.11/header.m4:12: -1- AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)]) +m4trace:/usr/share/aclocal-1.11/header.m4:12: -1- AC_DEFUN([AM_CONFIG_HEADER], [AC_DIAGNOSE([obsolete], [The macro `AM_CONFIG_HEADER' is obsolete. +You should run autoupdate.])dnl +AC_CONFIG_HEADERS($@)]) +m4trace:/usr/share/aclocal-1.11/init.m4:26: -1- AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.62])dnl +dnl Autoconf wants to disallow AM_ names. We explicitly allow +dnl the ones we care about. +m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl +AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl +AC_REQUIRE([AC_PROG_INSTALL])dnl +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi +AC_SUBST([CYGPATH_W]) + +# Define the identity of the package. +dnl Distinguish between old-style and new-style calls. +m4_ifval([$2], +[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl + AC_SUBST([PACKAGE], [$1])dnl + AC_SUBST([VERSION], [$2])], +[_AM_SET_OPTIONS([$1])dnl +dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. +m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, + [m4_fatal([AC_INIT should be called with package and version arguments])])dnl + AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl + AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl + +_AM_IF_OPTION([no-define],, +[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) + AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl + +# Some tools Automake needs. +AC_REQUIRE([AM_SANITY_CHECK])dnl +AC_REQUIRE([AC_ARG_PROGRAM])dnl +AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) +AM_MISSING_PROG(AUTOCONF, autoconf) +AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) +AM_MISSING_PROG(AUTOHEADER, autoheader) +AM_MISSING_PROG(MAKEINFO, makeinfo) +AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl +AC_REQUIRE([AM_PROG_MKDIR_P])dnl +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([AC_PROG_MAKE_SET])dnl +AC_REQUIRE([AM_SET_LEADING_DOT])dnl +_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], + [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) +_AM_IF_OPTION([no-dependencies],, +[AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES(CC)], + [define([AC_PROG_CC], + defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES(CXX)], + [define([AC_PROG_CXX], + defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES(OBJC)], + [define([AC_PROG_OBJC], + defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl +]) +_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl +dnl The `parallel-tests' driver may need to know about EXEEXT, so add the +dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro +dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. +AC_CONFIG_COMMANDS_PRE(dnl +[m4_provide_if([_AM_COMPILER_EXEEXT], + [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl +]) +m4trace:/usr/share/aclocal-1.11/init.m4:126: -1- AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. +_am_arg=$1 +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) +m4trace:/usr/share/aclocal-1.11/install-sh.m4:11: -1- AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi +AC_SUBST(install_sh)]) +m4trace:/usr/share/aclocal-1.11/lead-dot.m4:12: -1- AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null +AC_SUBST([am__leading_dot])]) +m4trace:/usr/share/aclocal-1.11/make.m4:14: -1- AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +AC_MSG_CHECKING([for style of include used by $am_make]) +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi +AC_SUBST([am__include]) +AC_SUBST([am__quote]) +AC_MSG_RESULT([$_am_result]) +rm -f confinc confmf +]) +m4trace:/usr/share/aclocal-1.11/missing.m4:14: -1- AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) +$1=${$1-"${am_missing_run}$2"} +AC_SUBST($1)]) +m4trace:/usr/share/aclocal-1.11/missing.m4:24: -1- AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([missing])dnl +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + AC_MSG_WARN([`missing' script is too old or missing]) +fi +]) +m4trace:/usr/share/aclocal-1.11/mkdirp.m4:11: -1- AC_DEFUN([AM_PROG_MKDIR_P], [AC_PREREQ([2.60])dnl +AC_REQUIRE([AC_PROG_MKDIR_P])dnl +dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, +dnl while keeping a definition of mkdir_p for backward compatibility. +dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. +dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of +dnl Makefile.ins that do not define MKDIR_P, so we do our own +dnl adjustment using top_builddir (which is defined more often than +dnl MKDIR_P). +AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl +case $mkdir_p in + [[\\/$]]* | ?:[[\\/]]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac +]) +m4trace:/usr/share/aclocal-1.11/options.m4:13: -1- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) +m4trace:/usr/share/aclocal-1.11/options.m4:19: -1- AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), 1)]) +m4trace:/usr/share/aclocal-1.11/options.m4:25: -1- AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) +m4trace:/usr/share/aclocal-1.11/options.m4:31: -1- AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) +m4trace:/usr/share/aclocal-1.11/python.m4:35: -1- AC_DEFUN([AM_PATH_PYTHON], [ + dnl Find a Python interpreter. Python versions prior to 2.0 are not + dnl supported. (2.0 was released on October 16, 2000). + m4_define_default([_AM_PYTHON_INTERPRETER_LIST], + [python python2 python3 python3.0 python2.5 python2.4 python2.3 python2.2 dnl +python2.1 python2.0]) + + m4_if([$1],[],[ + dnl No version check is needed. + # Find any Python interpreter. + if test -z "$PYTHON"; then + AC_PATH_PROGS([PYTHON], _AM_PYTHON_INTERPRETER_LIST, :) + fi + am_display_PYTHON=python + ], [ + dnl A version check is needed. + if test -n "$PYTHON"; then + # If the user set $PYTHON, use it and don't search something else. + AC_MSG_CHECKING([whether $PYTHON version >= $1]) + AM_PYTHON_CHECK_VERSION([$PYTHON], [$1], + [AC_MSG_RESULT(yes)], + [AC_MSG_ERROR(too old)]) + am_display_PYTHON=$PYTHON + else + # Otherwise, try each interpreter until we find one that satisfies + # VERSION. + AC_CACHE_CHECK([for a Python interpreter with version >= $1], + [am_cv_pathless_PYTHON],[ + for am_cv_pathless_PYTHON in _AM_PYTHON_INTERPRETER_LIST none; do + test "$am_cv_pathless_PYTHON" = none && break + AM_PYTHON_CHECK_VERSION([$am_cv_pathless_PYTHON], [$1], [break]) + done]) + # Set $PYTHON to the absolute path of $am_cv_pathless_PYTHON. + if test "$am_cv_pathless_PYTHON" = none; then + PYTHON=: + else + AC_PATH_PROG([PYTHON], [$am_cv_pathless_PYTHON]) + fi + am_display_PYTHON=$am_cv_pathless_PYTHON + fi + ]) + + if test "$PYTHON" = :; then + dnl Run any user-specified action, or abort. + m4_default([$3], [AC_MSG_ERROR([no suitable Python interpreter found])]) + else + + dnl Query Python for its version number. Getting [:3] seems to be + dnl the best way to do this; it's what "site.py" does in the standard + dnl library. + + AC_CACHE_CHECK([for $am_display_PYTHON version], [am_cv_python_version], + [am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[[:3]])"`]) + AC_SUBST([PYTHON_VERSION], [$am_cv_python_version]) + + dnl Use the values of $prefix and $exec_prefix for the corresponding + dnl values of PYTHON_PREFIX and PYTHON_EXEC_PREFIX. These are made + dnl distinct variables so they can be overridden if need be. However, + dnl general consensus is that you shouldn't need this ability. + + AC_SUBST([PYTHON_PREFIX], ['${prefix}']) + AC_SUBST([PYTHON_EXEC_PREFIX], ['${exec_prefix}']) + + dnl At times (like when building shared libraries) you may want + dnl to know which OS platform Python thinks this is. + + AC_CACHE_CHECK([for $am_display_PYTHON platform], [am_cv_python_platform], + [am_cv_python_platform=`$PYTHON -c "import sys; sys.stdout.write(sys.platform)"`]) + AC_SUBST([PYTHON_PLATFORM], [$am_cv_python_platform]) + + + dnl Set up 4 directories: + + dnl pythondir -- where to install python scripts. This is the + dnl site-packages directory, not the python standard library + dnl directory like in previous automake betas. This behavior + dnl is more consistent with lispdir.m4 for example. + dnl Query distutils for this directory. distutils does not exist in + dnl Python 1.5, so we fall back to the hardcoded directory if it + dnl doesn't work. + AC_CACHE_CHECK([for $am_display_PYTHON script directory], + [am_cv_python_pythondir], + [if test "x$prefix" = xNONE + then + am_py_prefix=$ac_default_prefix + else + am_py_prefix=$prefix + fi + am_cv_python_pythondir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(0,0,prefix='$am_py_prefix'))" 2>/dev/null || + echo "$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages"` + case $am_cv_python_pythondir in + $am_py_prefix*) + am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'` + am_cv_python_pythondir=`echo "$am_cv_python_pythondir" | sed "s,^$am__strip_prefix,$PYTHON_PREFIX,"` + ;; + *) + case $am_py_prefix in + /usr|/System*) ;; + *) + am_cv_python_pythondir=$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages + ;; + esac + ;; + esac + ]) + AC_SUBST([pythondir], [$am_cv_python_pythondir]) + + dnl pkgpythondir -- $PACKAGE directory under pythondir. Was + dnl PYTHON_SITE_PACKAGE in previous betas, but this naming is + dnl more consistent with the rest of automake. + + AC_SUBST([pkgpythondir], [\${pythondir}/$PACKAGE]) + + dnl pyexecdir -- directory for installing python extension modules + dnl (shared libraries) + dnl Query distutils for this directory. distutils does not exist in + dnl Python 1.5, so we fall back to the hardcoded directory if it + dnl doesn't work. + AC_CACHE_CHECK([for $am_display_PYTHON extension module directory], + [am_cv_python_pyexecdir], + [if test "x$exec_prefix" = xNONE + then + am_py_exec_prefix=$am_py_prefix + else + am_py_exec_prefix=$exec_prefix + fi + am_cv_python_pyexecdir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(1,0,prefix='$am_py_exec_prefix'))" 2>/dev/null || + echo "$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages"` + case $am_cv_python_pyexecdir in + $am_py_exec_prefix*) + am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'` + am_cv_python_pyexecdir=`echo "$am_cv_python_pyexecdir" | sed "s,^$am__strip_prefix,$PYTHON_EXEC_PREFIX,"` + ;; + *) + case $am_py_exec_prefix in + /usr|/System*) ;; + *) + am_cv_python_pyexecdir=$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages + ;; + esac + ;; + esac + ]) + AC_SUBST([pyexecdir], [$am_cv_python_pyexecdir]) + + dnl pkgpyexecdir -- $(pyexecdir)/$(PACKAGE) + + AC_SUBST([pkgpyexecdir], [\${pyexecdir}/$PACKAGE]) + + dnl Run any user-specified action. + $2 + fi + +]) +m4trace:/usr/share/aclocal-1.11/python.m4:199: -1- AC_DEFUN([AM_PYTHON_CHECK_VERSION], [prog="import sys +# split strings by '.' and convert to numeric. Append some zeros +# because we need at least 4 digits for the hex conversion. +# map returns an iterator in Python 3.0 and a list in 2.x +minver = list(map(int, '$2'.split('.'))) + [[0, 0, 0]] +minverhex = 0 +# xrange is not present in Python 3.0 and range returns an iterator +for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[[i]] +sys.exit(sys.hexversion < minverhex)" + AS_IF([AM_RUN_LOG([$1 -c "$prog"])], [$3], [$4])]) +m4trace:/usr/share/aclocal-1.11/runlog.m4:12: -1- AC_DEFUN([AM_RUN_LOG], [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD + ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + (exit $ac_status); }]) +m4trace:/usr/share/aclocal-1.11/sanity.m4:14: -1- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) +# Just in case +sleep 1 +echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[[\\\"\#\$\&\'\`$am_lf]]*) + AC_MSG_ERROR([unsafe absolute working directory name]);; +esac +case $srcdir in + *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) + AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; +esac + +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + rm -f conftest.file + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken +alias in your environment]) + fi + + test "$[2]" = conftest.file + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +AC_MSG_RESULT(yes)]) +m4trace:/usr/share/aclocal-1.11/silent.m4:14: -1- AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], +[ --enable-silent-rules less verbose build output (undo: `make V=1') + --disable-silent-rules verbose build output (undo: `make V=0')]) +case $enable_silent_rules in +yes) AM_DEFAULT_VERBOSITY=0;; +no) AM_DEFAULT_VERBOSITY=1;; +*) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; +esac +AC_SUBST([AM_DEFAULT_VERBOSITY])dnl +AM_BACKSLASH='\' +AC_SUBST([AM_BACKSLASH])dnl +_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl +]) +m4trace:/usr/share/aclocal-1.11/strip.m4:17: -1- AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be `maybe'. +if test "$cross_compiling" != no; then + AC_CHECK_TOOL([STRIP], [strip], :) +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" +AC_SUBST([INSTALL_STRIP_PROGRAM])]) +m4trace:/usr/share/aclocal-1.11/substnot.m4:14: -1- AC_DEFUN([_AM_SUBST_NOTMAKE]) +m4trace:/usr/share/aclocal-1.11/substnot.m4:19: -1- AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) +m4trace:/usr/share/aclocal-1.11/tar.m4:24: -1- AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. +AM_MISSING_PROG([AMTAR], [tar]) +m4_if([$1], [v7], + [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], + [m4_case([$1], [ustar],, [pax],, + [m4_fatal([Unknown tar format])]) +AC_MSG_CHECKING([how to create a $1 tar archive]) +# Loop over all known methods to create a tar archive until one works. +_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' +_am_tools=${am_cv_prog_tar_$1-$_am_tools} +# Do not fold the above two line into one, because Tru64 sh and +# Solaris sh will not grok spaces in the rhs of `-'. +for _am_tool in $_am_tools +do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; + do + AM_RUN_LOG([$_am_tar --version]) && break + done + am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x $1 -w "$$tardir"' + am__tar_='pax -L -x $1 -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H $1 -L' + am__tar_='find "$tardir" -print | cpio -o -H $1 -L' + am__untar='cpio -i -H $1 -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac + + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_$1}" && break + + # tar/untar a dummy directory, and stop if the command works + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) + rm -rf conftest.dir + if test -s conftest.tar; then + AM_RUN_LOG([$am__untar /dev/null 2>&1 && break + fi +done +rm -rf conftest.dir + +AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) +AC_MSG_RESULT([$am_cv_prog_tar_$1])]) +AC_SUBST([am__tar]) +AC_SUBST([am__untar]) +]) +m4trace:m4/aclocal-include.m4:9: -1- AC_DEFUN([AM_ACLOCAL_INCLUDE], [ + AM_CONDITIONAL(INSIDE_GNOME_COMMON, test x = y) + + test -n "$ACLOCAL_FLAGS" && ACLOCAL="$ACLOCAL $ACLOCAL_FLAGS" + + for k in $1 ; do ACLOCAL="$ACLOCAL -I $k" ; done +]) +m4trace:m4/alsa.m4:15: -1- AC_DEFUN([AM_PATH_ALSA], [dnl Save the original CFLAGS, LDFLAGS, and LIBS +alsa_save_CFLAGS="$CFLAGS" +alsa_save_LDFLAGS="$LDFLAGS" +alsa_save_LIBS="$LIBS" +alsa_found=yes + +dnl +dnl Get the cflags and libraries for alsa +dnl +AC_ARG_WITH(alsa-prefix, +[ --with-alsa-prefix=PFX prefix where alsa library is installed (optional)], +[alsa_prefix="$withval"], [alsa_prefix=""]) + +AC_ARG_WITH(alsa-inc-prefix, +[ --with-alsa-inc-prefix=PFX prefix where include libraries are (optional)], +[alsa_inc_prefix="$withval"], [alsa_inc_prefix=""]) + +dnl FIXME: this is not yet implemented +AC_ARG_ENABLE(alsatest, +[ --disable-alsatest do not try to compile and run a test alsa program], +[enable_alsatest=no], +[enable_alsatest=yes]) + +dnl Add any special include directories +AC_MSG_CHECKING(for ALSA CFLAGS) +if test "$alsa_inc_prefix" != "" ; then + ALSA_CFLAGS="$ALSA_CFLAGS -I$alsa_inc_prefix" + CFLAGS="$CFLAGS -I$alsa_inc_prefix" +fi +AC_MSG_RESULT($ALSA_CFLAGS) + +dnl add any special lib dirs +AC_MSG_CHECKING(for ALSA LDFLAGS) +if test "$alsa_prefix" != "" ; then + ALSA_LIBS="$ALSA_LIBS -L$alsa_prefix" + LDFLAGS="$LDFLAGS $ALSA_LIBS" +fi + +dnl add the alsa library +ALSA_LIBS="$ALSA_LIBS -lasound -lm -ldl" +LIBS=`echo $LIBS | sed 's/-lm//'` +LIBS=`echo $LIBS | sed 's/-ldl//'` +LIBS=`echo $LIBS | sed 's/ //'` +LIBS="$ALSA_LIBS $LIBS" +AC_MSG_RESULT($ALSA_LIBS) + +dnl Check for a working version of libasound that is of the right version. +min_alsa_version=ifelse([$1], ,0.1.1,$1) +AC_MSG_CHECKING(for libasound headers version >= $min_alsa_version) +no_alsa="" + alsa_min_major_version=`echo $min_alsa_version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` + alsa_min_minor_version=`echo $min_alsa_version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` + alsa_min_micro_version=`echo $min_alsa_version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` + +AC_LANG_SAVE +AC_LANG_C +AC_TRY_COMPILE([ +#include +], [ +void main(void) +{ +/* ensure backward compatibility */ +#if !defined(SND_LIB_MAJOR) && defined(SOUNDLIB_VERSION_MAJOR) +#define SND_LIB_MAJOR SOUNDLIB_VERSION_MAJOR +#endif +#if !defined(SND_LIB_MINOR) && defined(SOUNDLIB_VERSION_MINOR) +#define SND_LIB_MINOR SOUNDLIB_VERSION_MINOR +#endif +#if !defined(SND_LIB_SUBMINOR) && defined(SOUNDLIB_VERSION_SUBMINOR) +#define SND_LIB_SUBMINOR SOUNDLIB_VERSION_SUBMINOR +#endif + +# if(SND_LIB_MAJOR > $alsa_min_major_version) + exit(0); +# else +# if(SND_LIB_MAJOR < $alsa_min_major_version) +# error not present +# endif + +# if(SND_LIB_MINOR > $alsa_min_minor_version) + exit(0); +# else +# if(SND_LIB_MINOR < $alsa_min_minor_version) +# error not present +# endif + +# if(SND_LIB_SUBMINOR < $alsa_min_micro_version) +# error not present +# endif +# endif +# endif +exit(0); +} +], + [AC_MSG_RESULT(found.)], + [AC_MSG_RESULT(not present.) + ifelse([$3], , [AC_MSG_ERROR(Sufficiently new version of libasound not found.)]) + alsa_found=no] +) +AC_LANG_RESTORE + +dnl Now that we know that we have the right version, let's see if we have the library and not just the headers. +AC_LANG_SAVE +AC_LANG_CPLUSPLUS +AC_CHECK_LIB([asound], [snd_seq_create_event],, + [ifelse([$3], , [AC_MSG_ERROR(No linkable libasound was found.)]) + alsa_found=no] +) +AC_LANG_RESTORE + +if test "x$alsa_found" = "xyes" ; then + ifelse([$2], , :, [$2]) + LIBS=`echo $LIBS | sed 's/-lasound//g'` + LIBS=`echo $LIBS | sed 's/ //'` + LIBS="-lasound $LIBS" +fi +if test "x$alsa_found" = "xno" ; then + ifelse([$3], , :, [$3]) + CFLAGS="$alsa_save_CFLAGS" + LDFLAGS="$alsa_save_LDFLAGS" + LIBS="$alsa_save_LIBS" + ALSA_CFLAGS="" + ALSA_LIBS="" +fi + +dnl That should be it. Now just export out symbols: +AC_SUBST(ALSA_CFLAGS) +AC_SUBST(ALSA_LIBS) +]) +m4trace:m4/docbook.m4:5: -1- AC_DEFUN([PGAC_PROG_JADE], [AC_CHECK_PROGS([JADE], [openjade jade])]) +m4trace:m4/docbook.m4:11: -1- AC_DEFUN([PGAC_PROG_NSGMLS], [AC_CHECK_PROGS([NSGMLS], [onsgmls nsgmls])]) +m4trace:m4/docbook.m4:17: -1- AC_DEFUN([PGAC_CHECK_DOCBOOK], [AC_REQUIRE([PGAC_PROG_NSGMLS]) +AC_CACHE_CHECK([for DocBook V$1], [pgac_cv_check_docbook], +[cat >conftest.sgml < + + test + + random + + testsect + text + + + +EOF + +${NSGMLS-false} -s conftest.sgml 1>&5 2>&1 +if test $? -eq 0; then + pgac_cv_check_docbook=yes +else + pgac_cv_check_docbook=no +fi +rm -f conftest.sgml]) + +have_docbook=$pgac_cv_check_docbook +AC_SUBST([have_docbook]) +]) +m4trace:m4/docbook.m4:50: -1- AC_DEFUN([PGAC_PATH_DOCBOOK_STYLESHEETS], [ +AC_MSG_CHECKING([for DocBook stylesheets]) +AC_ARG_WITH(docbook-stylesheets, + [ --with-docbook-stylesheets=DIR use DIR/html/docbook.dsl], + [muse_docbook_prefix="$withval"]) +AC_CACHE_VAL([pgac_cv_path_stylesheets], [ +if test -n "$muse_docbook_prefix"; then + if test -r "$muse_docbook_prefix/html/docbook.dsl" \ + && test -r "$muse_docbook_prefix/print/docbook.dsl"; then + pgac_cv_path_stylesheets="$muse_docbook_prefix" + fi +fi +if test -z "$pgac_cv_path_stylesheets"; then + if test -n "$DOCBOOKSTYLE"; then + if test -r "$DOCBOOKSTYLE/html/docbook.dsl" \ + && test -r "$DOCBOOKSTYLE/print/docbook.dsl"; then + pgac_cv_path_stylesheets="$DOCBOOKSTYLE" + fi + fi +fi +if test -z "$pgac_cv_path_stylesheets"; then + for pgac_prefix in /usr /usr/local /opt; do + for pgac_infix in share lib; do + for pgac_postfix in \ + sgml/stylesheets/nwalsh-modular \ + sgml/stylesheets/docbook \ + sgml/docbook/dsssl/modular \ + sgml/docbook/stylesheet/dsssl/modular + do + pgac_candidate=$pgac_prefix/$pgac_infix/$pgac_postfix + if test -r "$pgac_candidate/html/docbook.dsl" \ + && test -r "$pgac_candidate/print/docbook.dsl" + then + pgac_cv_path_stylesheets=$pgac_candidate + break 3 + fi + done + done + done +fi +]) +DOCBOOKSTYLE=$pgac_cv_path_stylesheets +AC_SUBST([DOCBOOKSTYLE]) +if test -n "$DOCBOOKSTYLE"; then + AC_MSG_RESULT([$DOCBOOKSTYLE]) +else + AC_MSG_RESULT(no) +fi]) +m4trace:m4/libtool.m4:67: -1- AC_DEFUN([LT_INIT], [AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT +AC_BEFORE([$0], [LT_LANG])dnl +AC_BEFORE([$0], [LT_OUTPUT])dnl +AC_BEFORE([$0], [LTDL_INIT])dnl +m4_require([_LT_CHECK_BUILDDIR])dnl + +dnl Autoconf doesn't catch unexpanded LT_ macros by default: +m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl +m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl +dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 +dnl unless we require an AC_DEFUNed macro: +AC_REQUIRE([LTOPTIONS_VERSION])dnl +AC_REQUIRE([LTSUGAR_VERSION])dnl +AC_REQUIRE([LTVERSION_VERSION])dnl +AC_REQUIRE([LTOBSOLETE_VERSION])dnl +m4_require([_LT_PROG_LTMAIN])dnl + +dnl Parse OPTIONS +_LT_SET_OPTIONS([$0], [$1]) + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ltmain" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' +AC_SUBST(LIBTOOL)dnl + +_LT_SETUP + +# Only expand once: +m4_define([LT_INIT]) +]) +m4trace:m4/libtool.m4:102: -1- AU_DEFUN([AC_PROG_LIBTOOL], [m4_if($#, 0, [LT_INIT], [LT_INIT($@)])]) +m4trace:m4/libtool.m4:102: -1- AC_DEFUN([AC_PROG_LIBTOOL], [AC_DIAGNOSE([obsolete], [The macro `AC_PROG_LIBTOOL' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [LT_INIT], [LT_INIT($@)])]) +m4trace:m4/libtool.m4:103: -1- AU_DEFUN([AM_PROG_LIBTOOL], [m4_if($#, 0, [LT_INIT], [LT_INIT($@)])]) +m4trace:m4/libtool.m4:103: -1- AC_DEFUN([AM_PROG_LIBTOOL], [AC_DIAGNOSE([obsolete], [The macro `AM_PROG_LIBTOOL' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [LT_INIT], [LT_INIT($@)])]) +m4trace:m4/libtool.m4:562: -1- AC_DEFUN([LT_OUTPUT], [: ${CONFIG_LT=./config.lt} +AC_MSG_NOTICE([creating $CONFIG_LT]) +cat >"$CONFIG_LT" <<_LTEOF +#! $SHELL +# Generated by $as_me. +# Run this file to recreate a libtool stub with the current configuration. + +lt_cl_silent=false +SHELL=\${CONFIG_SHELL-$SHELL} +_LTEOF + +cat >>"$CONFIG_LT" <<\_LTEOF +AS_SHELL_SANITIZE +_AS_PREPARE + +exec AS_MESSAGE_FD>&1 +exec AS_MESSAGE_LOG_FD>>config.log +{ + echo + AS_BOX([Running $as_me.]) +} >&AS_MESSAGE_LOG_FD + +lt_cl_help="\ +\`$as_me' creates a local libtool stub from the current configuration, +for use in further configure time tests before the real libtool is +generated. + +Usage: $[0] [[OPTIONS]] + + -h, --help print this help, then exit + -V, --version print version number, then exit + -q, --quiet do not print progress messages + -d, --debug don't remove temporary files + +Report bugs to ." + +lt_cl_version="\ +m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl +m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) +configured by $[0], generated by m4_PACKAGE_STRING. + +Copyright (C) 2008 Free Software Foundation, Inc. +This config.lt script is free software; the Free Software Foundation +gives unlimited permision to copy, distribute and modify it." + +while test $[#] != 0 +do + case $[1] in + --version | --v* | -V ) + echo "$lt_cl_version"; exit 0 ;; + --help | --h* | -h ) + echo "$lt_cl_help"; exit 0 ;; + --debug | --d* | -d ) + debug=: ;; + --quiet | --q* | --silent | --s* | -q ) + lt_cl_silent=: ;; + + -*) AC_MSG_ERROR([unrecognized option: $[1] +Try \`$[0] --help' for more information.]) ;; + + *) AC_MSG_ERROR([unrecognized argument: $[1] +Try \`$[0] --help' for more information.]) ;; + esac + shift +done + +if $lt_cl_silent; then + exec AS_MESSAGE_FD>/dev/null +fi +_LTEOF + +cat >>"$CONFIG_LT" <<_LTEOF +_LT_OUTPUT_LIBTOOL_COMMANDS_INIT +_LTEOF + +cat >>"$CONFIG_LT" <<\_LTEOF +AC_MSG_NOTICE([creating $ofile]) +_LT_OUTPUT_LIBTOOL_COMMANDS +AS_EXIT(0) +_LTEOF +chmod +x "$CONFIG_LT" + +# configure is writing to config.log, but config.lt does its own redirection, +# appending to config.log, which fails on DOS, as config.log is still kept +# open by configure. Here we exec the FD to /dev/null, effectively closing +# config.log, so it can be properly (re)opened and appended to by config.lt. +if test "$no_create" != yes; then + lt_cl_success=: + test "$silent" = yes && + lt_config_lt_args="$lt_config_lt_args --quiet" + exec AS_MESSAGE_LOG_FD>/dev/null + $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false + exec AS_MESSAGE_LOG_FD>>config.log + $lt_cl_success || AS_EXIT(1) +fi +]) +m4trace:m4/libtool.m4:757: -1- AC_DEFUN([LT_SUPPORTED_TAG], []) +m4trace:m4/libtool.m4:768: -1- AC_DEFUN([LT_LANG], [AC_BEFORE([$0], [LT_OUTPUT])dnl +m4_case([$1], + [C], [_LT_LANG(C)], + [C++], [_LT_LANG(CXX)], + [Java], [_LT_LANG(GCJ)], + [Fortran 77], [_LT_LANG(F77)], + [Fortran], [_LT_LANG(FC)], + [Windows Resource], [_LT_LANG(RC)], + [m4_ifdef([_LT_LANG_]$1[_CONFIG], + [_LT_LANG($1)], + [m4_fatal([$0: unsupported language: "$1"])])])dnl +]) +m4trace:m4/libtool.m4:830: -1- AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) +m4trace:m4/libtool.m4:830: -1- AC_DEFUN([AC_LIBTOOL_CXX], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_CXX' is obsolete. +You should run autoupdate.])dnl +LT_LANG(C++)]) +m4trace:m4/libtool.m4:831: -1- AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) +m4trace:m4/libtool.m4:831: -1- AC_DEFUN([AC_LIBTOOL_F77], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_F77' is obsolete. +You should run autoupdate.])dnl +LT_LANG(Fortran 77)]) +m4trace:m4/libtool.m4:832: -1- AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) +m4trace:m4/libtool.m4:832: -1- AC_DEFUN([AC_LIBTOOL_FC], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_FC' is obsolete. +You should run autoupdate.])dnl +LT_LANG(Fortran)]) +m4trace:m4/libtool.m4:833: -1- AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) +m4trace:m4/libtool.m4:833: -1- AC_DEFUN([AC_LIBTOOL_GCJ], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_GCJ' is obsolete. +You should run autoupdate.])dnl +LT_LANG(Java)]) +m4trace:m4/libtool.m4:1402: -1- AC_DEFUN([_LT_COMPILER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$3" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + fi + $RM conftest* +]) + +if test x"[$]$2" = xyes; then + m4_if([$5], , :, [$5]) +else + m4_if([$6], , :, [$6]) +fi +]) +m4trace:m4/libtool.m4:1444: -1- AU_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [m4_if($#, 0, [_LT_COMPILER_OPTION], [_LT_COMPILER_OPTION($@)])]) +m4trace:m4/libtool.m4:1444: -1- AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_COMPILER_OPTION' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [_LT_COMPILER_OPTION], [_LT_COMPILER_OPTION($@)])]) +m4trace:m4/libtool.m4:1453: -1- AC_DEFUN([_LT_LINKER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $3" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&AS_MESSAGE_LOG_FD + $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + else + $2=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" +]) + +if test x"[$]$2" = xyes; then + m4_if([$4], , :, [$4]) +else + m4_if([$5], , :, [$5]) +fi +]) +m4trace:m4/libtool.m4:1488: -1- AU_DEFUN([AC_LIBTOOL_LINKER_OPTION], [m4_if($#, 0, [_LT_LINKER_OPTION], [_LT_LINKER_OPTION($@)])]) +m4trace:m4/libtool.m4:1488: -1- AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_LINKER_OPTION' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [_LT_LINKER_OPTION], [_LT_LINKER_OPTION($@)])]) +m4trace:m4/libtool.m4:1495: -1- AC_DEFUN([LT_CMD_MAX_LEN], [AC_REQUIRE([AC_CANONICAL_HOST])dnl +# find the maximum length of command line arguments +AC_MSG_CHECKING([the maximum length of command line arguments]) +AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl + i=0 + teststring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8 ; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test "X"`$SHELL [$]0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \ + = "XX$teststring$teststring"; } >/dev/null 2>&1 && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac +]) +if test -n $lt_cv_sys_max_cmd_len ; then + AC_MSG_RESULT($lt_cv_sys_max_cmd_len) +else + AC_MSG_RESULT(none) +fi +max_cmd_len=$lt_cv_sys_max_cmd_len +_LT_DECL([], [max_cmd_len], [0], + [What is the maximum length of a command?]) +]) +m4trace:m4/libtool.m4:1623: -1- AU_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [m4_if($#, 0, [LT_CMD_MAX_LEN], [LT_CMD_MAX_LEN($@)])]) +m4trace:m4/libtool.m4:1623: -1- AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_SYS_MAX_CMD_LEN' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [LT_CMD_MAX_LEN], [LT_CMD_MAX_LEN($@)])]) +m4trace:m4/libtool.m4:1724: -1- AC_DEFUN([LT_SYS_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl +if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ]) + ;; + + *) + AC_CHECK_FUNC([shl_load], + [lt_cv_dlopen="shl_load"], + [AC_CHECK_LIB([dld], [shl_load], + [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], + [AC_CHECK_FUNC([dlopen], + [lt_cv_dlopen="dlopen"], + [AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], + [AC_CHECK_LIB([svld], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], + [AC_CHECK_LIB([dld], [dld_link], + [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) + ]) + ]) + ]) + ]) + ]) + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + AC_CACHE_CHECK([whether a program can dlopen itself], + lt_cv_dlopen_self, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, + lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) + ]) + + if test "x$lt_cv_dlopen_self" = xyes; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + AC_CACHE_CHECK([whether a statically linked program can dlopen itself], + lt_cv_dlopen_self_static, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, + lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) + ]) + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi +_LT_DECL([dlopen_support], [enable_dlopen], [0], + [Whether dlopen is supported]) +_LT_DECL([dlopen_self], [enable_dlopen_self], [0], + [Whether dlopen of programs is supported]) +_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], + [Whether dlopen of statically linked programs is supported]) +]) +m4trace:m4/libtool.m4:1841: -1- AU_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [m4_if($#, 0, [LT_SYS_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF($@)])]) +m4trace:m4/libtool.m4:1841: -1- AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_DLOPEN_SELF' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [LT_SYS_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF($@)])]) +m4trace:m4/libtool.m4:2741: -1- AC_DEFUN([_LT_PATH_TOOL_PREFIX], [m4_require([_LT_DECL_EGREP])dnl +AC_MSG_CHECKING([for $1]) +AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, +[case $MAGIC_CMD in +[[\\/*] | ?:[\\/]*]) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR +dnl $ac_dummy forces splitting on constant user-supplied paths. +dnl POSIX.2 word splitting is done only on the output of word expansions, +dnl not every word. This closes a longstanding sh security hole. + ac_dummy="m4_if([$2], , $PATH, [$2])" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$1; then + lt_cv_path_MAGIC_CMD="$ac_dir/$1" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac]) +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + AC_MSG_RESULT($MAGIC_CMD) +else + AC_MSG_RESULT(no) +fi +_LT_DECL([], [MAGIC_CMD], [0], + [Used to examine libraries when file_magic_cmd begins with "file"])dnl +]) +m4trace:m4/libtool.m4:2803: -1- AU_DEFUN([AC_PATH_TOOL_PREFIX], [m4_if($#, 0, [_LT_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX($@)])]) +m4trace:m4/libtool.m4:2803: -1- AC_DEFUN([AC_PATH_TOOL_PREFIX], [AC_DIAGNOSE([obsolete], [The macro `AC_PATH_TOOL_PREFIX' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [_LT_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX($@)])]) +m4trace:m4/libtool.m4:2826: -1- AC_DEFUN([LT_PATH_LD], [AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_DECL_EGREP])dnl + +AC_ARG_WITH([gnu-ld], + [AS_HELP_STRING([--with-gnu-ld], + [assume the C compiler uses GNU ld @<:@default=no@:>@])], + [test "$withval" = no || with_gnu_ld=yes], + [with_gnu_ld=no])dnl + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + AC_MSG_CHECKING([for ld used by $CC]) + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [[\\/]]* | ?:[[\\/]]*) + re_direlt='/[[^/]][[^/]]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + AC_MSG_CHECKING([for GNU ld]) +else + AC_MSG_CHECKING([for non-GNU ld]) +fi +AC_CACHE_VAL(lt_cv_path_LD, +[if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS="$lt_save_ifs" + done + : ${lt_cv_path_NM=no} +fi]) +if test "$lt_cv_path_NM" != "no"; then + NM="$lt_cv_path_NM" +else + # Didn't find any BSD compatible name lister, look for dumpbin. + AC_CHECK_TOOLS(DUMPBIN, ["dumpbin -symbols" "link -dump -symbols"], :) + AC_SUBST([DUMPBIN]) + if test "$DUMPBIN" != ":"; then + NM="$DUMPBIN" + fi +fi +test -z "$NM" && NM=nm +AC_SUBST([NM]) +_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl + +AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], + [lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:__oline__: $ac_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:__oline__: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:__oline__: output\"" >&AS_MESSAGE_LOG_FD) + cat conftest.out >&AS_MESSAGE_LOG_FD + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest*]) +]) +m4trace:m4/libtool.m4:3257: -1- AU_DEFUN([AM_PROG_NM], [m4_if($#, 0, [LT_PATH_NM], [LT_PATH_NM($@)])]) +m4trace:m4/libtool.m4:3257: -1- AC_DEFUN([AM_PROG_NM], [AC_DIAGNOSE([obsolete], [The macro `AM_PROG_NM' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [LT_PATH_NM], [LT_PATH_NM($@)])]) +m4trace:m4/libtool.m4:3258: -1- AU_DEFUN([AC_PROG_NM], [m4_if($#, 0, [LT_PATH_NM], [LT_PATH_NM($@)])]) +m4trace:m4/libtool.m4:3258: -1- AC_DEFUN([AC_PROG_NM], [AC_DIAGNOSE([obsolete], [The macro `AC_PROG_NM' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [LT_PATH_NM], [LT_PATH_NM($@)])]) +m4trace:m4/libtool.m4:3267: -1- AC_DEFUN([LT_LIB_M], [AC_REQUIRE([AC_CANONICAL_HOST])dnl +LIBM= +case $host in +*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*) + # These system don't have libm, or don't need it + ;; +*-ncr-sysv4.3*) + AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") + AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") + ;; +*) + AC_CHECK_LIB(m, cos, LIBM="-lm") + ;; +esac +AC_SUBST([LIBM]) +]) +m4trace:m4/libtool.m4:3286: -1- AU_DEFUN([AC_CHECK_LIBM], [m4_if($#, 0, [LT_LIB_M], [LT_LIB_M($@)])]) +m4trace:m4/libtool.m4:3286: -1- AC_DEFUN([AC_CHECK_LIBM], [AC_DIAGNOSE([obsolete], [The macro `AC_CHECK_LIBM' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [LT_LIB_M], [LT_LIB_M($@)])]) +m4trace:m4/libtool.m4:6987: -1- AC_DEFUN([LT_PROG_GCJ], [m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], + [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], + [AC_CHECK_TOOL(GCJ, gcj,) + test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" + AC_SUBST(GCJFLAGS)])])[]dnl +]) +m4trace:m4/libtool.m4:6996: -1- AU_DEFUN([LT_AC_PROG_GCJ], [m4_if($#, 0, [LT_PROG_GCJ], [LT_PROG_GCJ($@)])]) +m4trace:m4/libtool.m4:6996: -1- AC_DEFUN([LT_AC_PROG_GCJ], [AC_DIAGNOSE([obsolete], [The macro `LT_AC_PROG_GCJ' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [LT_PROG_GCJ], [LT_PROG_GCJ($@)])]) +m4trace:m4/libtool.m4:7003: -1- AC_DEFUN([LT_PROG_RC], [AC_CHECK_TOOL(RC, windres,) +]) +m4trace:m4/libtool.m4:7008: -1- AU_DEFUN([LT_AC_PROG_RC], [m4_if($#, 0, [LT_PROG_RC], [LT_PROG_RC($@)])]) +m4trace:m4/libtool.m4:7008: -1- AC_DEFUN([LT_AC_PROG_RC], [AC_DIAGNOSE([obsolete], [The macro `LT_AC_PROG_RC' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [LT_PROG_RC], [LT_PROG_RC($@)])]) +m4trace:m4/libtool.m4:7119: -1- AU_DEFUN([LT_AC_PROG_SED], [m4_if($#, 0, [AC_PROG_SED], [AC_PROG_SED($@)])]) +m4trace:m4/libtool.m4:7119: -1- AC_DEFUN([LT_AC_PROG_SED], [AC_DIAGNOSE([obsolete], [The macro `LT_AC_PROG_SED' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [AC_PROG_SED], [AC_PROG_SED($@)])]) +m4trace:m4/ltoptions.m4:13: -1- AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) +m4trace:m4/ltoptions.m4:110: -1- AU_DEFUN([AC_LIBTOOL_DLOPEN], [_LT_SET_OPTION([LT_INIT], [dlopen]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `dlopen' option into LT_INIT's first parameter.]) +]) +m4trace:m4/ltoptions.m4:110: -1- AC_DEFUN([AC_LIBTOOL_DLOPEN], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_DLOPEN' is obsolete. +You should run autoupdate.])dnl +_LT_SET_OPTION([LT_INIT], [dlopen]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `dlopen' option into LT_INIT's first parameter.]) +]) +m4trace:m4/ltoptions.m4:145: -1- AU_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_REQUIRE([AC_CANONICAL_HOST])dnl +_LT_SET_OPTION([LT_INIT], [win32-dll]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `win32-dll' option into LT_INIT's first parameter.]) +]) +m4trace:m4/ltoptions.m4:145: -1- AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_WIN32_DLL' is obsolete. +You should run autoupdate.])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +_LT_SET_OPTION([LT_INIT], [win32-dll]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `win32-dll' option into LT_INIT's first parameter.]) +]) +m4trace:m4/ltoptions.m4:194: -1- AC_DEFUN([AC_ENABLE_SHARED], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) +]) +m4trace:m4/ltoptions.m4:198: -1- AC_DEFUN([AC_DISABLE_SHARED], [_LT_SET_OPTION([LT_INIT], [disable-shared]) +]) +m4trace:m4/ltoptions.m4:202: -1- AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) +m4trace:m4/ltoptions.m4:202: -1- AC_DEFUN([AM_ENABLE_SHARED], [AC_DIAGNOSE([obsolete], [The macro `AM_ENABLE_SHARED' is obsolete. +You should run autoupdate.])dnl +AC_ENABLE_SHARED($@)]) +m4trace:m4/ltoptions.m4:203: -1- AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) +m4trace:m4/ltoptions.m4:203: -1- AC_DEFUN([AM_DISABLE_SHARED], [AC_DIAGNOSE([obsolete], [The macro `AM_DISABLE_SHARED' is obsolete. +You should run autoupdate.])dnl +AC_DISABLE_SHARED($@)]) +m4trace:m4/ltoptions.m4:248: -1- AC_DEFUN([AC_ENABLE_STATIC], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) +]) +m4trace:m4/ltoptions.m4:252: -1- AC_DEFUN([AC_DISABLE_STATIC], [_LT_SET_OPTION([LT_INIT], [disable-static]) +]) +m4trace:m4/ltoptions.m4:256: -1- AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) +m4trace:m4/ltoptions.m4:256: -1- AC_DEFUN([AM_ENABLE_STATIC], [AC_DIAGNOSE([obsolete], [The macro `AM_ENABLE_STATIC' is obsolete. +You should run autoupdate.])dnl +AC_ENABLE_STATIC($@)]) +m4trace:m4/ltoptions.m4:257: -1- AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) +m4trace:m4/ltoptions.m4:257: -1- AC_DEFUN([AM_DISABLE_STATIC], [AC_DIAGNOSE([obsolete], [The macro `AM_DISABLE_STATIC' is obsolete. +You should run autoupdate.])dnl +AC_DISABLE_STATIC($@)]) +m4trace:m4/ltoptions.m4:302: -1- AU_DEFUN([AC_ENABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the `fast-install' option into LT_INIT's first parameter.]) +]) +m4trace:m4/ltoptions.m4:302: -1- AC_DEFUN([AC_ENABLE_FAST_INSTALL], [AC_DIAGNOSE([obsolete], [The macro `AC_ENABLE_FAST_INSTALL' is obsolete. +You should run autoupdate.])dnl +_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the `fast-install' option into LT_INIT's first parameter.]) +]) +m4trace:m4/ltoptions.m4:309: -1- AU_DEFUN([AC_DISABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], [disable-fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the `disable-fast-install' option into LT_INIT's first parameter.]) +]) +m4trace:m4/ltoptions.m4:309: -1- AC_DEFUN([AC_DISABLE_FAST_INSTALL], [AC_DIAGNOSE([obsolete], [The macro `AC_DISABLE_FAST_INSTALL' is obsolete. +You should run autoupdate.])dnl +_LT_SET_OPTION([LT_INIT], [disable-fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the `disable-fast-install' option into LT_INIT's first parameter.]) +]) +m4trace:m4/ltoptions.m4:342: -1- AU_DEFUN([AC_LIBTOOL_PICMODE], [_LT_SET_OPTION([LT_INIT], [pic-only]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `pic-only' option into LT_INIT's first parameter.]) +]) +m4trace:m4/ltoptions.m4:342: -1- AC_DEFUN([AC_LIBTOOL_PICMODE], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_PICMODE' is obsolete. +You should run autoupdate.])dnl +_LT_SET_OPTION([LT_INIT], [pic-only]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `pic-only' option into LT_INIT's first parameter.]) +]) +m4trace:m4/ltsugar.m4:13: -1- AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) +m4trace:m4/ltversion.m4:18: -1- AC_DEFUN([LTVERSION_VERSION], [macro_version='2.2.6b' +macro_revision='1.3017' +_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) +_LT_DECL(, macro_revision, 0) +]) +m4trace:m4/lt~obsolete.m4:36: -1- AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) +m4trace:m4/lt~obsolete.m4:40: -1- AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH]) +m4trace:m4/lt~obsolete.m4:41: -1- AC_DEFUN([_LT_AC_SHELL_INIT]) +m4trace:m4/lt~obsolete.m4:42: -1- AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX]) +m4trace:m4/lt~obsolete.m4:44: -1- AC_DEFUN([_LT_AC_TAGVAR]) +m4trace:m4/lt~obsolete.m4:45: -1- AC_DEFUN([AC_LTDL_ENABLE_INSTALL]) +m4trace:m4/lt~obsolete.m4:46: -1- AC_DEFUN([AC_LTDL_PREOPEN]) +m4trace:m4/lt~obsolete.m4:47: -1- AC_DEFUN([_LT_AC_SYS_COMPILER]) +m4trace:m4/lt~obsolete.m4:48: -1- AC_DEFUN([_LT_AC_LOCK]) +m4trace:m4/lt~obsolete.m4:49: -1- AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE]) +m4trace:m4/lt~obsolete.m4:50: -1- AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF]) +m4trace:m4/lt~obsolete.m4:51: -1- AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O]) +m4trace:m4/lt~obsolete.m4:52: -1- AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS]) +m4trace:m4/lt~obsolete.m4:53: -1- AC_DEFUN([AC_LIBTOOL_OBJDIR]) +m4trace:m4/lt~obsolete.m4:54: -1- AC_DEFUN([AC_LTDL_OBJDIR]) +m4trace:m4/lt~obsolete.m4:55: -1- AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH]) +m4trace:m4/lt~obsolete.m4:56: -1- AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP]) +m4trace:m4/lt~obsolete.m4:57: -1- AC_DEFUN([AC_PATH_MAGIC]) +m4trace:m4/lt~obsolete.m4:58: -1- AC_DEFUN([AC_PROG_LD_GNU]) +m4trace:m4/lt~obsolete.m4:59: -1- AC_DEFUN([AC_PROG_LD_RELOAD_FLAG]) +m4trace:m4/lt~obsolete.m4:60: -1- AC_DEFUN([AC_DEPLIBS_CHECK_METHOD]) +m4trace:m4/lt~obsolete.m4:61: -1- AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI]) +m4trace:m4/lt~obsolete.m4:62: -1- AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE]) +m4trace:m4/lt~obsolete.m4:63: -1- AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC]) +m4trace:m4/lt~obsolete.m4:64: -1- AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS]) +m4trace:m4/lt~obsolete.m4:65: -1- AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP]) +m4trace:m4/lt~obsolete.m4:66: -1- AC_DEFUN([LT_AC_PROG_EGREP]) +m4trace:m4/lt~obsolete.m4:71: -1- AC_DEFUN([_AC_PROG_LIBTOOL]) +m4trace:m4/lt~obsolete.m4:72: -1- AC_DEFUN([AC_LIBTOOL_SETUP]) +m4trace:m4/lt~obsolete.m4:73: -1- AC_DEFUN([_LT_AC_CHECK_DLFCN]) +m4trace:m4/lt~obsolete.m4:74: -1- AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER]) +m4trace:m4/lt~obsolete.m4:75: -1- AC_DEFUN([_LT_AC_TAGCONFIG]) +m4trace:m4/lt~obsolete.m4:77: -1- AC_DEFUN([_LT_AC_LANG_CXX]) +m4trace:m4/lt~obsolete.m4:78: -1- AC_DEFUN([_LT_AC_LANG_F77]) +m4trace:m4/lt~obsolete.m4:79: -1- AC_DEFUN([_LT_AC_LANG_GCJ]) +m4trace:m4/lt~obsolete.m4:80: -1- AC_DEFUN([AC_LIBTOOL_RC]) +m4trace:m4/lt~obsolete.m4:81: -1- AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG]) +m4trace:m4/lt~obsolete.m4:82: -1- AC_DEFUN([_LT_AC_LANG_C_CONFIG]) +m4trace:m4/lt~obsolete.m4:83: -1- AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG]) +m4trace:m4/lt~obsolete.m4:84: -1- AC_DEFUN([_LT_AC_LANG_CXX_CONFIG]) +m4trace:m4/lt~obsolete.m4:85: -1- AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG]) +m4trace:m4/lt~obsolete.m4:86: -1- AC_DEFUN([_LT_AC_LANG_F77_CONFIG]) +m4trace:m4/lt~obsolete.m4:87: -1- AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG]) +m4trace:m4/lt~obsolete.m4:88: -1- AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG]) +m4trace:m4/lt~obsolete.m4:89: -1- AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG]) +m4trace:m4/lt~obsolete.m4:90: -1- AC_DEFUN([_LT_AC_LANG_RC_CONFIG]) +m4trace:m4/lt~obsolete.m4:91: -1- AC_DEFUN([AC_LIBTOOL_CONFIG]) +m4trace:m4/lt~obsolete.m4:92: -1- AC_DEFUN([_LT_AC_FILE_LTDLL_C]) +m4trace:m4/qt.m4:5: -1- AC_DEFUN([CONFIGURE_QT], [ + qt_error="no" + + QT_CFLAGS="" + QT_LIBS="" + MOC="moc" + UIC="uic" + qt_includes="/usr/include/qt" + qt_libraries="" + qt_binaries="" + + if test "$qt_error" = "no"; then + AC_MSG_CHECKING([for QT environment variable QTDIR]) + if test -z "$QTDIR"; then + AC_MSG_RESULT(no) + AC_MSG_WARN([ + + ***************** WARNING ***************** + +YOU HAVE NOT SET YOUR 'QTDIR' ENVIRONMENT VARIABLE!!! + +This is the source of most people's problems when +configuring muse. If the configuration fails to find +qt, try setting your QTDIR environment variable to +the directory where qt is installed. + + ******************************************* + +]) + echo -ne "\a" + echo -ne "\a" + echo -ne "\a" + sleep 7 + else + AC_MSG_RESULT(yes) + qt_includes="$QTDIR/include" + qt_libraries="$QTDIR/lib" + qt_binaries="$QTDIR/bin" + MOC="$qt_binaries/moc"; + UIC="$qt_binaries/uic"; + fi + fi + + muse_qttest="yes" + AC_ARG_ENABLE(qttest, + [ --disable-qttest do not try to compile and run a test libqt program],[ + case "$enableval" in + "yes") + muse_qttest="yes" + ;; + "no") + muse_qttest="no" + ;; + *) + AC_MSG_ERROR([must use --enable-qttest(=yes/no) or --disable-qttest]) + ;; + esac + ]) + + + AC_ARG_WITH(qt-prefix, + [ --with-qt-prefix=PFX where the root of Qt is installed ], + [ + qt_includes="$withval/include" + qt_libraries="$withval/lib" + qt_binaries="$withval/bin" + MOC="$qt_binaries/moc"; + UIC="$qt_binaries/uic"; + ]) + + AC_ARG_WITH(qt-includes, + [ --with-qt-includes=DIR where the Qt includes are installed ], + [ + qt_includes="$withval" + ]) + + AC_ARG_WITH(qt-libraries, + [ --with-qt-libraries=DIR where the Qt libraries are installed.], + [ + qt_libraries="$withval" + ]) + + AC_ARG_WITH(qt-binaries, + [ --with-qt-binaries=DIR where the Qt binaries are installed.], + [ + qt_binaries="$withval" + MOC="$qt_binaries/moc"; + UIC="$qt_binaries/uic"; + ]) + + AC_ARG_WITH(qt-moc, + [ --with-qt-moc=PROG where the Qt meta object compiler is installed.], + [ + MOC="$withval" + ]) + + AC_ARG_WITH(qt-uic, + [ --with-qt-uic=PROG where the Qt user interface compiler is installed.], + [ + UIC="$withval" + ]) + + if test "$qt_error" = "no"; then + saved_CPPFLAGS="$CPPFLAGS" + saved_LIBS="$LIBS" + CPPFLAGS="$saved_CPPFLAGS -I$qt_includes" + if test -n "$qt_libraries"; then + LIBS="$saved_LIBS -L$qt_libraries -lqt-mt -lqui" + QT_LIBS="-L$qt_libraries -lqt-mt -lqui" + else + LIBS="$saved_LIBS -lqt-mt -lqui -lm $X11_LIBS" + QT_LIBS="-lqt-mt -lqui" + fi + AC_MSG_CHECKING([for QT includes ($qt_includes)]) + AC_CACHE_VAL(qt_includes_found, + [ + AC_LANG_PUSH(C++) + AC_TRY_CPP([#include ], + qt_includes_found=yes, qt_includes_found=no) + AC_LANG_POP(C++) + if test "$qt_includes_found" = "yes"; then + QT_CFLAGS="-I$qt_includes" + AC_MSG_RESULT(yes) + else + qt_error=yes + AC_MSG_RESULT(no) + fi + ]) + + AC_MSG_CHECKING([for QT libraries ($qt_libraries)]) + AC_CACHE_VAL(qt_libraries_found, + [ + AC_LANG_SAVE + AC_LANG_CPLUSPLUS + saved_CXXFLAGS="$CXXFLAGS" + saved_LIBS="$LIBS" + CXXFLAGS="$QT_CFLAGS $LIBS" + LIBS="$QT_LIBS $LIBS" + + + if test "$muse_qttest" = "yes"; then + AC_TRY_RUN([ + #include + int main(int argc, char **argv) + { + QApplication app(argc, argv, false); + + } + ],[ + AC_MSG_RESULT(yes) + ],[ + AC_MSG_RESULT(no) + qt_error="yes" + ], + AC_MSG_ERROR([cross compiling unsupported]) + ) + else + AC_MSG_RESULT([yes (assumed due to --disable-qttest)]) + fi + + LIBS="$saved_LIBS" + CXXFLAGS="$saved_CXXFLAGS" + AC_LANG_RESTORE + ]) + + AC_MSG_CHECKING([for QT moc ($MOC)]) + output=`eval "$MOC --help 2>&1 | grep Qt"` + if test -z "$output"; then + AC_MSG_RESULT(no) + qt_error="yes" + else + AC_MSG_RESULT(yes) + fi + + AC_MSG_CHECKING([for QT uic ($UIC)]) + output=`eval "$UIC --help 2>&1 | grep Qt"` + if test -z "$output"; then + AC_MSG_RESULT(no) + qt_error="yes" + else + AC_MSG_RESULT(yes) + fi + CPPFLAGS="$saved_CPPFLAGS" + LIBS="$saved_LIBS" + fi + + if test "$qt_error" = "no"; then + AC_MSG_CHECKING([for QT version >= $1]) + qt_major_version=`echo $1 | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` + qt_minor_version=`echo $1 | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` + qt_micro_version=`echo $1 | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` + qt_version="$qt_major_version$qt_minor_version$qt_micro_version" + + AC_LANG_SAVE + AC_LANG_CPLUSPLUS + saved_CXXFLAGS="$CXXFLAGS" + saved_LIBS="$LIBS" + CXXFLAGS="$QT_CFLAGS $LIBS" + LIBS="$QT_LIBS $LIBS" + + if test "$muse_qttest" = "yes"; then + AC_TRY_RUN([ + #include + int main() + { + int version = ($qt_major_version << 16) + + ($qt_minor_version << 8) + + $qt_micro_version; + if (QT_VERSION < version) return(1); + return(0); + } + ],[ + AC_MSG_RESULT(yes) + ],[ + AC_MSG_RESULT(no) + qt_error="yes" + ], + AC_MSG_ERROR([cross compiling unsupported]) + ) + else + AC_MSG_RESULT([yes (assumed due to --disable-qttest)]) + fi + + LIBS="$saved_LIBS" + CXXFLAGS="$saved_CXXFLAGS" + AC_LANG_RESTORE + fi + + AC_SUBST(QT_CFLAGS) + AC_SUBST(QT_LIBS) + AC_SUBST(MOC) + AC_SUBST(UIC) + if test "$qt_error" = "no"; then + ifelse([$2], , :, [$2]) + else + ifelse([$3], , :, [$3]) + fi +]) +m4trace:configure.ac:5: -1- m4_pattern_forbid([^_?A[CHUM]_]) +m4trace:configure.ac:5: -1- m4_pattern_forbid([_AC_]) +m4trace:configure.ac:5: -1- m4_pattern_forbid([^LIBOBJS$], [do not use LIBOBJS directly, use AC_LIBOBJ (see section `AC_LIBOBJ vs LIBOBJS']) +m4trace:configure.ac:5: -1- m4_pattern_allow([^AS_FLAGS$]) +m4trace:configure.ac:5: -1- m4_pattern_forbid([^_?m4_]) +m4trace:configure.ac:5: -1- m4_pattern_forbid([^dnl$]) +m4trace:configure.ac:5: -1- m4_pattern_forbid([^_?AS_]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^SHELL$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^PATH_SEPARATOR$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^PACKAGE_NAME$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^PACKAGE_TARNAME$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^PACKAGE_VERSION$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^PACKAGE_STRING$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^PACKAGE_URL$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^exec_prefix$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^prefix$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^program_transform_name$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^bindir$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^sbindir$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^libexecdir$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^datarootdir$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^datadir$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^sysconfdir$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^sharedstatedir$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^localstatedir$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^includedir$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^oldincludedir$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^docdir$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^infodir$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^htmldir$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^dvidir$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^pdfdir$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^psdir$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^libdir$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^localedir$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^mandir$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^PACKAGE_NAME$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^PACKAGE_TARNAME$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^PACKAGE_VERSION$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^PACKAGE_STRING$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^PACKAGE_URL$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^DEFS$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^ECHO_C$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^ECHO_N$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^ECHO_T$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^LIBS$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^build_alias$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^host_alias$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^target_alias$]) +m4trace:configure.ac:7: -1- AM_INIT_AUTOMAKE([1.1]) +m4trace:configure.ac:7: -1- m4_pattern_allow([^AM_[A-Z]+FLAGS$]) +m4trace:configure.ac:7: -1- AM_SET_CURRENT_AUTOMAKE_VERSION +m4trace:configure.ac:7: -1- AM_AUTOMAKE_VERSION([1.11.1]) +m4trace:configure.ac:7: -1- _AM_AUTOCONF_VERSION([2.65]) +m4trace:configure.ac:7: -1- m4_pattern_allow([^INSTALL_PROGRAM$]) +m4trace:configure.ac:7: -1- m4_pattern_allow([^INSTALL_SCRIPT$]) +m4trace:configure.ac:7: -1- m4_pattern_allow([^INSTALL_DATA$]) +m4trace:configure.ac:7: -1- m4_pattern_allow([^am__isrc$]) +m4trace:configure.ac:7: -1- _AM_SUBST_NOTMAKE([am__isrc]) +m4trace:configure.ac:7: -1- m4_pattern_allow([^CYGPATH_W$]) +m4trace:configure.ac:7: -1- _AM_SET_OPTIONS([1.1]) +m4trace:configure.ac:7: -1- _AM_SET_OPTION([1.1]) +m4trace:configure.ac:7: -2- _AM_MANGLE_OPTION([1.1]) +m4trace:configure.ac:7: -1- m4_pattern_allow([^PACKAGE$]) +m4trace:configure.ac:7: -1- m4_pattern_allow([^VERSION$]) +m4trace:configure.ac:7: -1- _AM_IF_OPTION([no-define], [], [AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) + AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])]) +m4trace:configure.ac:7: -2- _AM_MANGLE_OPTION([no-define]) +m4trace:configure.ac:7: -1- m4_pattern_allow([^PACKAGE$]) +m4trace:configure.ac:7: -1- m4_pattern_allow([^VERSION$]) +m4trace:configure.ac:7: -1- AM_SANITY_CHECK +m4trace:configure.ac:7: -1- AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) +m4trace:configure.ac:7: -1- AM_MISSING_HAS_RUN +m4trace:configure.ac:7: -1- AM_AUX_DIR_EXPAND +m4trace:configure.ac:7: -1- m4_pattern_allow([^ACLOCAL$]) +m4trace:configure.ac:7: -1- AM_MISSING_PROG([AUTOCONF], [autoconf]) +m4trace:configure.ac:7: -1- m4_pattern_allow([^AUTOCONF$]) +m4trace:configure.ac:7: -1- AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) +m4trace:configure.ac:7: -1- m4_pattern_allow([^AUTOMAKE$]) +m4trace:configure.ac:7: -1- AM_MISSING_PROG([AUTOHEADER], [autoheader]) +m4trace:configure.ac:7: -1- m4_pattern_allow([^AUTOHEADER$]) +m4trace:configure.ac:7: -1- AM_MISSING_PROG([MAKEINFO], [makeinfo]) +m4trace:configure.ac:7: -1- m4_pattern_allow([^MAKEINFO$]) +m4trace:configure.ac:7: -1- AM_PROG_INSTALL_SH +m4trace:configure.ac:7: -1- m4_pattern_allow([^install_sh$]) +m4trace:configure.ac:7: -1- AM_PROG_INSTALL_STRIP +m4trace:configure.ac:7: -1- m4_pattern_allow([^STRIP$]) +m4trace:configure.ac:7: -1- m4_pattern_allow([^INSTALL_STRIP_PROGRAM$]) +m4trace:configure.ac:7: -1- AM_PROG_MKDIR_P +m4trace:configure.ac:7: -1- m4_pattern_allow([^MKDIR_P$]) +m4trace:configure.ac:7: -1- m4_pattern_allow([^mkdir_p$]) +m4trace:configure.ac:7: -1- m4_pattern_allow([^AWK$]) +m4trace:configure.ac:7: -1- m4_pattern_allow([^SET_MAKE$]) +m4trace:configure.ac:7: -1- AM_SET_LEADING_DOT +m4trace:configure.ac:7: -1- m4_pattern_allow([^am__leading_dot$]) +m4trace:configure.ac:7: -1- _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) +m4trace:configure.ac:7: -2- _AM_MANGLE_OPTION([tar-ustar]) +m4trace:configure.ac:7: -1- _AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])]) +m4trace:configure.ac:7: -2- _AM_MANGLE_OPTION([tar-pax]) +m4trace:configure.ac:7: -1- _AM_PROG_TAR([v7]) +m4trace:configure.ac:7: -1- AM_MISSING_PROG([AMTAR], [tar]) +m4trace:configure.ac:7: -1- m4_pattern_allow([^AMTAR$]) +m4trace:configure.ac:7: -1- m4_pattern_allow([^am__tar$]) +m4trace:configure.ac:7: -1- m4_pattern_allow([^am__untar$]) +m4trace:configure.ac:7: -1- _AM_IF_OPTION([no-dependencies], [], [AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES(CC)], + [define([AC_PROG_CC], + defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES(CXX)], + [define([AC_PROG_CXX], + defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES(OBJC)], + [define([AC_PROG_OBJC], + defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl +]) +m4trace:configure.ac:7: -2- _AM_MANGLE_OPTION([no-dependencies]) +m4trace:configure.ac:7: -1- _AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])]) +m4trace:configure.ac:7: -2- _AM_MANGLE_OPTION([silent-rules]) +m4trace:configure.ac:8: -1- AM_CONFIG_HEADER([config.h]) +m4trace:configure.ac:8: -1- _m4_warn([obsolete], [The macro `AM_CONFIG_HEADER' is obsolete. +You should run autoupdate.], [/usr/share/aclocal-1.11/header.m4:12: AM_CONFIG_HEADER is expanded from... +configure.ac:8: the top level]) +m4trace:configure.ac:10: -1- AM_ACLOCAL_INCLUDE([m4]) +m4trace:configure.ac:10: -1- AM_CONDITIONAL([INSIDE_GNOME_COMMON], [test x = y]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^INSIDE_GNOME_COMMON_TRUE$]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^INSIDE_GNOME_COMMON_FALSE$]) +m4trace:configure.ac:10: -1- _AM_SUBST_NOTMAKE([INSIDE_GNOME_COMMON_TRUE]) +m4trace:configure.ac:10: -1- _AM_SUBST_NOTMAKE([INSIDE_GNOME_COMMON_FALSE]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^CXX$]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^CXXFLAGS$]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^LDFLAGS$]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^LIBS$]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^CPPFLAGS$]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^CXX$]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^ac_ct_CXX$]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^EXEEXT$]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^OBJEXT$]) +m4trace:configure.ac:13: -1- _AM_DEPENDENCIES([CXX]) +m4trace:configure.ac:13: -1- AM_SET_DEPDIR +m4trace:configure.ac:13: -1- m4_pattern_allow([^DEPDIR$]) +m4trace:configure.ac:13: -1- AM_OUTPUT_DEPENDENCY_COMMANDS +m4trace:configure.ac:13: -1- AM_MAKE_INCLUDE +m4trace:configure.ac:13: -1- m4_pattern_allow([^am__include$]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^am__quote$]) +m4trace:configure.ac:13: -1- AM_DEP_TRACK +m4trace:configure.ac:13: -1- AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^AMDEP_TRUE$]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^AMDEP_FALSE$]) +m4trace:configure.ac:13: -1- _AM_SUBST_NOTMAKE([AMDEP_TRUE]) +m4trace:configure.ac:13: -1- _AM_SUBST_NOTMAKE([AMDEP_FALSE]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^AMDEPBACKSLASH$]) +m4trace:configure.ac:13: -1- _AM_SUBST_NOTMAKE([AMDEPBACKSLASH]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^CXXDEPMODE$]) +m4trace:configure.ac:13: -1- AM_CONDITIONAL([am__fastdepCXX], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CXX_dependencies_compiler_type" = gcc3]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^am__fastdepCXX_TRUE$]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^am__fastdepCXX_FALSE$]) +m4trace:configure.ac:13: -1- _AM_SUBST_NOTMAKE([am__fastdepCXX_TRUE]) +m4trace:configure.ac:13: -1- _AM_SUBST_NOTMAKE([am__fastdepCXX_FALSE]) +m4trace:configure.ac:14: -1- AC_PROG_LIBTOOL +m4trace:configure.ac:14: -1- _m4_warn([obsolete], [The macro `AC_PROG_LIBTOOL' is obsolete. +You should run autoupdate.], [m4/libtool.m4:102: AC_PROG_LIBTOOL is expanded from... +configure.ac:14: the top level]) +m4trace:configure.ac:14: -1- LT_INIT +m4trace:configure.ac:14: -1- m4_pattern_forbid([^_?LT_[A-Z_]+$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$]) +m4trace:configure.ac:14: -1- LTOPTIONS_VERSION +m4trace:configure.ac:14: -1- LTSUGAR_VERSION +m4trace:configure.ac:14: -1- LTVERSION_VERSION +m4trace:configure.ac:14: -1- LTOBSOLETE_VERSION +m4trace:configure.ac:14: -1- _LT_PROG_LTMAIN +m4trace:configure.ac:14: -1- m4_pattern_allow([^LIBTOOL$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^build$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^build_cpu$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^build_vendor$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^build_os$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^host$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^host_cpu$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^host_vendor$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^host_os$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^CC$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^CFLAGS$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^LDFLAGS$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^LIBS$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^CPPFLAGS$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^CC$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^CC$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^CC$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^CC$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^ac_ct_CC$]) +m4trace:configure.ac:14: -1- _AM_DEPENDENCIES([CC]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^CCDEPMODE$]) +m4trace:configure.ac:14: -1- AM_CONDITIONAL([am__fastdepCC], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^am__fastdepCC_TRUE$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^am__fastdepCC_FALSE$]) +m4trace:configure.ac:14: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_TRUE]) +m4trace:configure.ac:14: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_FALSE]) +m4trace:configure.ac:14: -1- LT_PATH_LD +m4trace:configure.ac:14: -1- m4_pattern_allow([^SED$]) +m4trace:configure.ac:14: -1- AC_PROG_EGREP +m4trace:configure.ac:14: -1- m4_pattern_allow([^GREP$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^EGREP$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^FGREP$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^GREP$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^LD$]) +m4trace:configure.ac:14: -1- LT_PATH_NM +m4trace:configure.ac:14: -1- m4_pattern_allow([^DUMPBIN$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^ac_ct_DUMPBIN$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^DUMPBIN$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^NM$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^LN_S$]) +m4trace:configure.ac:14: -1- LT_CMD_MAX_LEN +m4trace:configure.ac:14: -1- m4_pattern_allow([^OBJDUMP$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^OBJDUMP$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^AR$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^STRIP$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^RANLIB$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([LT_OBJDIR]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^LT_OBJDIR$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^lt_ECHO$]) +m4trace:configure.ac:14: -1- _LT_CC_BASENAME([$compiler]) +m4trace:configure.ac:14: -1- _LT_PATH_TOOL_PREFIX([${ac_tool_prefix}file], [/usr/bin$PATH_SEPARATOR$PATH]) +m4trace:configure.ac:14: -1- _LT_PATH_TOOL_PREFIX([file], [/usr/bin$PATH_SEPARATOR$PATH]) +m4trace:configure.ac:14: -1- LT_SUPPORTED_TAG([CC]) +m4trace:configure.ac:14: -1- _LT_COMPILER_BOILERPLATE +m4trace:configure.ac:14: -1- _LT_LINKER_BOILERPLATE +m4trace:configure.ac:14: -1- _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], [lt_cv_prog_compiler_rtti_exceptions], [-fno-rtti -fno-exceptions], [], [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, )="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, ) -fno-rtti -fno-exceptions"]) +m4trace:configure.ac:14: -1- _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, ) works], [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, )], [$_LT_TAGVAR(lt_prog_compiler_pic, )@&t@m4_if([],[],[ -DPIC],[m4_if([],[CXX],[ -DPIC],[])])], [], [case $_LT_TAGVAR(lt_prog_compiler_pic, ) in + "" | " "*) ;; + *) _LT_TAGVAR(lt_prog_compiler_pic, )=" $_LT_TAGVAR(lt_prog_compiler_pic, )" ;; + esac], [_LT_TAGVAR(lt_prog_compiler_pic, )= + _LT_TAGVAR(lt_prog_compiler_can_build_shared, )=no]) +m4trace:configure.ac:14: -1- _LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], [lt_cv_prog_compiler_static_works], [$lt_tmp_static_flag], [], [_LT_TAGVAR(lt_prog_compiler_static, )=]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^DSYMUTIL$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^NMEDIT$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^LIPO$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^OTOOL$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^OTOOL64$]) +m4trace:configure.ac:14: -1- LT_SYS_DLOPEN_SELF +m4trace:configure.ac:14: -1- m4_pattern_allow([^CPP$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^CPPFLAGS$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^CPP$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^STDC_HEADERS$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^HAVE_DLFCN_H$]) +m4trace:configure.ac:14: -1- LT_LANG([CXX]) +m4trace:configure.ac:14: -1- LT_SUPPORTED_TAG([CXX]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^CXX$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^CXXFLAGS$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^LDFLAGS$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^LIBS$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^CPPFLAGS$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^CXX$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^ac_ct_CXX$]) +m4trace:configure.ac:14: -1- _AM_DEPENDENCIES([CXX]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^CXXDEPMODE$]) +m4trace:configure.ac:14: -1- AM_CONDITIONAL([am__fastdepCXX], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CXX_dependencies_compiler_type" = gcc3]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^am__fastdepCXX_TRUE$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^am__fastdepCXX_FALSE$]) +m4trace:configure.ac:14: -1- _AM_SUBST_NOTMAKE([am__fastdepCXX_TRUE]) +m4trace:configure.ac:14: -1- _AM_SUBST_NOTMAKE([am__fastdepCXX_FALSE]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^CXXCPP$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^CPPFLAGS$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^CXXCPP$]) +m4trace:configure.ac:14: -1- _LT_COMPILER_BOILERPLATE +m4trace:configure.ac:14: -1- _LT_LINKER_BOILERPLATE +m4trace:configure.ac:14: -1- _LT_CC_BASENAME([$compiler]) +m4trace:configure.ac:14: -1- LT_PATH_LD +m4trace:configure.ac:14: -1- m4_pattern_allow([^LD$]) +m4trace:configure.ac:14: -1- _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, CXX) works], [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, CXX)], [$_LT_TAGVAR(lt_prog_compiler_pic, CXX)@&t@m4_if([CXX],[],[ -DPIC],[m4_if([CXX],[CXX],[ -DPIC],[])])], [], [case $_LT_TAGVAR(lt_prog_compiler_pic, CXX) in + "" | " "*) ;; + *) _LT_TAGVAR(lt_prog_compiler_pic, CXX)=" $_LT_TAGVAR(lt_prog_compiler_pic, CXX)" ;; + esac], [_LT_TAGVAR(lt_prog_compiler_pic, CXX)= + _LT_TAGVAR(lt_prog_compiler_can_build_shared, CXX)=no]) +m4trace:configure.ac:14: -1- _LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], [lt_cv_prog_compiler_static_works_CXX], [$lt_tmp_static_flag], [], [_LT_TAGVAR(lt_prog_compiler_static, CXX)=]) +m4trace:configure.ac:15: -1- m4_pattern_allow([^LN_S$]) +m4trace:configure.ac:20: -1- PGAC_PROG_JADE +m4trace:configure.ac:20: -1- m4_pattern_allow([^JADE$]) +m4trace:configure.ac:22: -1- PGAC_CHECK_DOCBOOK([4.1]) +m4trace:configure.ac:22: -1- PGAC_PROG_NSGMLS +m4trace:configure.ac:22: -1- m4_pattern_allow([^NSGMLS$]) +m4trace:configure.ac:22: -1- m4_pattern_allow([^have_docbook$]) +m4trace:configure.ac:24: -1- PGAC_PATH_DOCBOOK_STYLESHEETS +m4trace:configure.ac:24: -1- m4_pattern_allow([^DOCBOOKSTYLE$]) +m4trace:configure.ac:36: -1- m4_pattern_allow([^DOCBOOKTARGETS$]) +m4trace:configure.ac:41: -1- m4_pattern_allow([^DOXYGEN$]) +m4trace:configure.ac:42: -1- m4_pattern_allow([^DOXYGEN$]) +m4trace:configure.ac:47: -1- m4_pattern_allow([^DOT$]) +m4trace:configure.ac:48: -1- m4_pattern_allow([^DOT$]) +m4trace:configure.ac:55: -1- m4_pattern_allow([^HAVEDOT$]) +m4trace:configure.ac:56: -1- m4_pattern_allow([^DOTPATH$]) +m4trace:configure.ac:61: -1- m4_pattern_allow([^PERL$]) +m4trace:configure.ac:62: -1- m4_pattern_allow([^PERL$]) +m4trace:configure.ac:72: -1- m4_pattern_allow([^XMKMF$]) +m4trace:configure.ac:72: -1- m4_pattern_allow([^X_DISPLAY_MISSING$]) +m4trace:configure.ac:72: -1- m4_pattern_allow([^X_CFLAGS$]) +m4trace:configure.ac:72: -1- m4_pattern_allow([^X_PRE_LIBS$]) +m4trace:configure.ac:72: -1- m4_pattern_allow([^X_LIBS$]) +m4trace:configure.ac:72: -1- m4_pattern_allow([^X_EXTRA_LIBS$]) +m4trace:configure.ac:82: -1- CONFIGURE_QT([3.2.0], [], [as_fn_error "need qt >= 3.2.0" "$LINENO" 5]) +m4trace:configure.ac:82: -1- _m4_warn([syntax], [AC_CACHE_VAL(qt_includes_found, ...): suspicious cache-id, must contain _cv_ to be cached], [../../lib/autoconf/general.m4:1998: AC_CACHE_VAL is expanded from... +m4/qt.m4:5: CONFIGURE_QT is expanded from... +configure.ac:82: the top level]) +m4trace:configure.ac:82: -1- _m4_warn([obsolete], [The macro `AC_TRY_CPP' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:2496: AC_TRY_CPP is expanded from... +../../lib/m4sugar/m4sh.m4:598: AS_IF is expanded from... +../../lib/autoconf/general.m4:1998: AC_CACHE_VAL is expanded from... +m4/qt.m4:5: CONFIGURE_QT is expanded from... +configure.ac:82: the top level]) +m4trace:configure.ac:82: -1- _m4_warn([syntax], [AC_CACHE_VAL(qt_libraries_found, ...): suspicious cache-id, must contain _cv_ to be cached], [../../lib/autoconf/general.m4:1998: AC_CACHE_VAL is expanded from... +m4/qt.m4:5: CONFIGURE_QT is expanded from... +configure.ac:82: the top level]) +m4trace:configure.ac:82: -1- _m4_warn([obsolete], [The macro `AC_LANG_SAVE' is obsolete. +You should run autoupdate.], [../../lib/autoconf/lang.m4:126: AC_LANG_SAVE is expanded from... +../../lib/m4sugar/m4sh.m4:598: AS_IF is expanded from... +../../lib/autoconf/general.m4:1998: AC_CACHE_VAL is expanded from... +m4/qt.m4:5: CONFIGURE_QT is expanded from... +configure.ac:82: the top level]) +m4trace:configure.ac:82: -1- _m4_warn([obsolete], [The macro `AC_LANG_CPLUSPLUS' is obsolete. +You should run autoupdate.], [../../lib/autoconf/c.m4:252: AC_LANG_CPLUSPLUS is expanded from... +../../lib/m4sugar/m4sh.m4:598: AS_IF is expanded from... +../../lib/autoconf/general.m4:1998: AC_CACHE_VAL is expanded from... +m4/qt.m4:5: CONFIGURE_QT is expanded from... +configure.ac:82: the top level]) +m4trace:configure.ac:82: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:2731: AC_TRY_RUN is expanded from... +../../lib/m4sugar/m4sh.m4:598: AS_IF is expanded from... +../../lib/autoconf/general.m4:1998: AC_CACHE_VAL is expanded from... +m4/qt.m4:5: CONFIGURE_QT is expanded from... +configure.ac:82: the top level]) +m4trace:configure.ac:82: -1- _m4_warn([obsolete], [The macro `AC_LANG_RESTORE' is obsolete. +You should run autoupdate.], [../../lib/autoconf/lang.m4:135: AC_LANG_RESTORE is expanded from... +../../lib/m4sugar/m4sh.m4:598: AS_IF is expanded from... +../../lib/autoconf/general.m4:1998: AC_CACHE_VAL is expanded from... +m4/qt.m4:5: CONFIGURE_QT is expanded from... +configure.ac:82: the top level]) +m4trace:configure.ac:82: -1- _m4_warn([obsolete], [The macro `AC_LANG_SAVE' is obsolete. +You should run autoupdate.], [../../lib/autoconf/lang.m4:126: AC_LANG_SAVE is expanded from... +m4/qt.m4:5: CONFIGURE_QT is expanded from... +configure.ac:82: the top level]) +m4trace:configure.ac:82: -1- _m4_warn([obsolete], [The macro `AC_LANG_CPLUSPLUS' is obsolete. +You should run autoupdate.], [../../lib/autoconf/c.m4:252: AC_LANG_CPLUSPLUS is expanded from... +m4/qt.m4:5: CONFIGURE_QT is expanded from... +configure.ac:82: the top level]) +m4trace:configure.ac:82: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:2731: AC_TRY_RUN is expanded from... +m4/qt.m4:5: CONFIGURE_QT is expanded from... +configure.ac:82: the top level]) +m4trace:configure.ac:82: -1- _m4_warn([obsolete], [The macro `AC_LANG_RESTORE' is obsolete. +You should run autoupdate.], [../../lib/autoconf/lang.m4:135: AC_LANG_RESTORE is expanded from... +m4/qt.m4:5: CONFIGURE_QT is expanded from... +configure.ac:82: the top level]) +m4trace:configure.ac:82: -1- m4_pattern_allow([^QT_CFLAGS$]) +m4trace:configure.ac:82: -1- m4_pattern_allow([^QT_LIBS$]) +m4trace:configure.ac:82: -1- m4_pattern_allow([^MOC$]) +m4trace:configure.ac:82: -1- m4_pattern_allow([^UIC$]) +m4trace:configure.ac:114: -1- AM_PATH_ALSA([0.9.0], [true], [as_fn_error "latest alsa (0.9.x) is required" "$LINENO" 5 +]) +m4trace:configure.ac:114: -1- _m4_warn([obsolete], [The macro `AC_LANG_SAVE' is obsolete. +You should run autoupdate.], [../../lib/autoconf/lang.m4:126: AC_LANG_SAVE is expanded from... +m4/alsa.m4:15: AM_PATH_ALSA is expanded from... +configure.ac:114: the top level]) +m4trace:configure.ac:114: -1- _m4_warn([obsolete], [The macro `AC_LANG_C' is obsolete. +You should run autoupdate.], [../../lib/autoconf/c.m4:73: AC_LANG_C is expanded from... +m4/alsa.m4:15: AM_PATH_ALSA is expanded from... +configure.ac:114: the top level]) +m4trace:configure.ac:114: -1- _m4_warn([obsolete], [The macro `AC_TRY_COMPILE' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:2581: AC_TRY_COMPILE is expanded from... +m4/alsa.m4:15: AM_PATH_ALSA is expanded from... +configure.ac:114: the top level]) +m4trace:configure.ac:114: -1- _m4_warn([obsolete], [The macro `AC_LANG_RESTORE' is obsolete. +You should run autoupdate.], [../../lib/autoconf/lang.m4:135: AC_LANG_RESTORE is expanded from... +m4/alsa.m4:15: AM_PATH_ALSA is expanded from... +configure.ac:114: the top level]) +m4trace:configure.ac:114: -1- _m4_warn([obsolete], [The macro `AC_LANG_SAVE' is obsolete. +You should run autoupdate.], [../../lib/autoconf/lang.m4:126: AC_LANG_SAVE is expanded from... +m4/alsa.m4:15: AM_PATH_ALSA is expanded from... +configure.ac:114: the top level]) +m4trace:configure.ac:114: -1- _m4_warn([obsolete], [The macro `AC_LANG_CPLUSPLUS' is obsolete. +You should run autoupdate.], [../../lib/autoconf/c.m4:252: AC_LANG_CPLUSPLUS is expanded from... +m4/alsa.m4:15: AM_PATH_ALSA is expanded from... +configure.ac:114: the top level]) +m4trace:configure.ac:114: -1- m4_pattern_allow([^HAVE_LIBASOUND$]) +m4trace:configure.ac:114: -1- _m4_warn([obsolete], [The macro `AC_LANG_RESTORE' is obsolete. +You should run autoupdate.], [../../lib/autoconf/lang.m4:135: AC_LANG_RESTORE is expanded from... +m4/alsa.m4:15: AM_PATH_ALSA is expanded from... +configure.ac:114: the top level]) +m4trace:configure.ac:114: -1- m4_pattern_allow([^ALSA_CFLAGS$]) +m4trace:configure.ac:114: -1- m4_pattern_allow([^ALSA_LIBS$]) +m4trace:configure.ac:143: -1- AM_CONDITIONAL([ENABLEFLUIDSYNTH], [test "$muse_enable_fluidlib" = "yes"]) +m4trace:configure.ac:143: -1- m4_pattern_allow([^ENABLEFLUIDSYNTH_TRUE$]) +m4trace:configure.ac:143: -1- m4_pattern_allow([^ENABLEFLUIDSYNTH_FALSE$]) +m4trace:configure.ac:143: -1- _AM_SUBST_NOTMAKE([ENABLEFLUIDSYNTH_TRUE]) +m4trace:configure.ac:143: -1- _AM_SUBST_NOTMAKE([ENABLEFLUIDSYNTH_FALSE]) +m4trace:configure.ac:144: -1- PKG_CHECK_MODULES([Fluidsynth], [fluidsynth], [FLUIDSYNTHDIRS="fluid fluidsynth"; AC_DEFINE(ENABLEFLUIDSYNTH, 1, [Compile fluidsynth])], [AC_MSG_WARN([libfluidsynth not found; disabling fluidsynth plugins]) ; + muse_enable_fluidlib="no" + ]) +m4trace:configure.ac:144: -1- PKG_PROG_PKG_CONFIG +m4trace:configure.ac:144: -1- m4_pattern_forbid([^_?PKG_[A-Z_]+$]) +m4trace:configure.ac:144: -1- m4_pattern_allow([^PKG_CONFIG(_PATH)?$]) +m4trace:configure.ac:144: -1- m4_pattern_allow([^PKG_CONFIG$]) +m4trace:configure.ac:144: -1- m4_pattern_allow([^PKG_CONFIG$]) +m4trace:configure.ac:144: -1- m4_pattern_allow([^Fluidsynth_CFLAGS$]) +m4trace:configure.ac:144: -1- m4_pattern_allow([^Fluidsynth_LIBS$]) +m4trace:configure.ac:144: -1- PKG_CHECK_EXISTS([fluidsynth], [pkg_cv_[]Fluidsynth_CFLAGS=`$PKG_CONFIG --[]cflags "fluidsynth" 2>/dev/null`], [pkg_failed=yes]) +m4trace:configure.ac:144: -1- PKG_CHECK_EXISTS([fluidsynth], [pkg_cv_[]Fluidsynth_LIBS=`$PKG_CONFIG --[]libs "fluidsynth" 2>/dev/null`], [pkg_failed=yes]) +m4trace:configure.ac:144: -1- _PKG_SHORT_ERRORS_SUPPORTED +m4trace:configure.ac:144: -1- m4_pattern_allow([^ENABLEFLUIDSYNTH$]) +m4trace:configure.ac:149: -1- m4_pattern_allow([^FLUIDSYNTHDIRS$]) +m4trace:configure.ac:150: -1- m4_pattern_allow([^synth_fluidsynth$]) +m4trace:configure.ac:151: -1- m4_pattern_allow([^synth_fluid$]) +m4trace:configure.ac:161: -1- PKG_CHECK_MODULES([SNDFILE], [sndfile >= 1.0.0], [true], [as_fn_error "need libsndfile >= 1.0.0" "$LINENO" 5 +]) +m4trace:configure.ac:161: -1- m4_pattern_allow([^SNDFILE_CFLAGS$]) +m4trace:configure.ac:161: -1- m4_pattern_allow([^SNDFILE_LIBS$]) +m4trace:configure.ac:161: -1- PKG_CHECK_EXISTS([sndfile >= 1.0.0], [pkg_cv_[]SNDFILE_CFLAGS=`$PKG_CONFIG --[]cflags "sndfile >= 1.0.0" 2>/dev/null`], [pkg_failed=yes]) +m4trace:configure.ac:161: -1- PKG_CHECK_EXISTS([sndfile >= 1.0.0], [pkg_cv_[]SNDFILE_LIBS=`$PKG_CONFIG --[]libs "sndfile >= 1.0.0" 2>/dev/null`], [pkg_failed=yes]) +m4trace:configure.ac:161: -1- _PKG_SHORT_ERRORS_SUPPORTED +m4trace:configure.ac:169: -1- PKG_CHECK_MODULES([SAMPLERATE], [samplerate >= 0.1.0], [true], [as_fn_error "need libsamplerate" "$LINENO" 5 +]) +m4trace:configure.ac:169: -1- m4_pattern_allow([^SAMPLERATE_CFLAGS$]) +m4trace:configure.ac:169: -1- m4_pattern_allow([^SAMPLERATE_LIBS$]) +m4trace:configure.ac:169: -1- PKG_CHECK_EXISTS([samplerate >= 0.1.0], [pkg_cv_[]SAMPLERATE_CFLAGS=`$PKG_CONFIG --[]cflags "samplerate >= 0.1.0" 2>/dev/null`], [pkg_failed=yes]) +m4trace:configure.ac:169: -1- PKG_CHECK_EXISTS([samplerate >= 0.1.0], [pkg_cv_[]SAMPLERATE_LIBS=`$PKG_CONFIG --[]libs "samplerate >= 0.1.0" 2>/dev/null`], [pkg_failed=yes]) +m4trace:configure.ac:169: -1- _PKG_SHORT_ERRORS_SUPPORTED +m4trace:configure.ac:187: -1- m4_pattern_allow([^UUID_CFLAGS$]) +m4trace:configure.ac:188: -1- m4_pattern_allow([^UUID_LIBS$]) +m4trace:configure.ac:199: -1- PKG_CHECK_MODULES([JACK], [jack >= 0.98.0], [true], [as_fn_error "need JACK >= 0.98.0" "$LINENO" 5 + ]) +m4trace:configure.ac:199: -1- m4_pattern_allow([^JACK_CFLAGS$]) +m4trace:configure.ac:199: -1- m4_pattern_allow([^JACK_LIBS$]) +m4trace:configure.ac:199: -1- PKG_CHECK_EXISTS([jack >= 0.98.0], [pkg_cv_[]JACK_CFLAGS=`$PKG_CONFIG --[]cflags "jack >= 0.98.0" 2>/dev/null`], [pkg_failed=yes]) +m4trace:configure.ac:199: -1- PKG_CHECK_EXISTS([jack >= 0.98.0], [pkg_cv_[]JACK_LIBS=`$PKG_CONFIG --[]libs "jack >= 0.98.0" 2>/dev/null`], [pkg_failed=yes]) +m4trace:configure.ac:199: -1- _PKG_SHORT_ERRORS_SUPPORTED +m4trace:configure.ac:225: -1- PKG_CHECK_MODULES([LASH], [lash-1.0 >= 0.2], [LASH_FOUND="yes"], [LASH_FOUND="no"]) +m4trace:configure.ac:225: -1- m4_pattern_allow([^LASH_CFLAGS$]) +m4trace:configure.ac:225: -1- m4_pattern_allow([^LASH_LIBS$]) +m4trace:configure.ac:225: -1- PKG_CHECK_EXISTS([lash-1.0 >= 0.2], [pkg_cv_[]LASH_CFLAGS=`$PKG_CONFIG --[]cflags "lash-1.0 >= 0.2" 2>/dev/null`], [pkg_failed=yes]) +m4trace:configure.ac:225: -1- PKG_CHECK_EXISTS([lash-1.0 >= 0.2], [pkg_cv_[]LASH_LIBS=`$PKG_CONFIG --[]libs "lash-1.0 >= 0.2" 2>/dev/null`], [pkg_failed=yes]) +m4trace:configure.ac:225: -1- _PKG_SHORT_ERRORS_SUPPORTED +m4trace:configure.ac:226: -1- m4_pattern_allow([^LASH_CFLAGS$]) +m4trace:configure.ac:227: -1- m4_pattern_allow([^LASH_LIBS$]) +m4trace:configure.ac:230: -1- m4_pattern_allow([^HAVE_LASH$]) +m4trace:configure.ac:232: -1- m4_pattern_allow([^LASH_VERSION$]) +m4trace:configure.ac:238: -1- AM_CONDITIONAL([HAVE_LASH], [test "$LASH_FOUND" = "yes"]) +m4trace:configure.ac:238: -1- m4_pattern_allow([^HAVE_LASH_TRUE$]) +m4trace:configure.ac:238: -1- m4_pattern_allow([^HAVE_LASH_FALSE$]) +m4trace:configure.ac:238: -1- _AM_SUBST_NOTMAKE([HAVE_LASH_TRUE]) +m4trace:configure.ac:238: -1- _AM_SUBST_NOTMAKE([HAVE_LASH_FALSE]) +m4trace:configure.ac:251: -1- m4_pattern_allow([^RTCAP$]) +m4trace:configure.ac:270: -1- AM_CONDITIONAL([RTCAP], [test "$report_rtcap" = "yes"]) +m4trace:configure.ac:270: -1- m4_pattern_allow([^RTCAP_TRUE$]) +m4trace:configure.ac:270: -1- m4_pattern_allow([^RTCAP_FALSE$]) +m4trace:configure.ac:270: -1- _AM_SUBST_NOTMAKE([RTCAP_TRUE]) +m4trace:configure.ac:270: -1- _AM_SUBST_NOTMAKE([RTCAP_FALSE]) +m4trace:configure.ac:271: -1- m4_pattern_allow([^GIVERTCAP$]) +m4trace:configure.ac:292: -1- m4_pattern_allow([^SUIDINSTALL$]) +m4trace:configure.ac:312: -1- m4_pattern_allow([^SUIDBUILD$]) +m4trace:configure.ac:335: -1- m4_pattern_allow([^DOXYGEN_TREEVIEW$]) +m4trace:configure.ac:400: -1- m4_pattern_allow([^PCH$]) +m4trace:configure.ac:400: -1- m4_pattern_allow([^PCH$]) +m4trace:configure.ac:416: -1- AM_CONDITIONAL([PCH], [test "$PCH" = "yes"]) +m4trace:configure.ac:416: -1- m4_pattern_allow([^PCH_TRUE$]) +m4trace:configure.ac:416: -1- m4_pattern_allow([^PCH_FALSE$]) +m4trace:configure.ac:416: -1- _AM_SUBST_NOTMAKE([PCH_TRUE]) +m4trace:configure.ac:416: -1- _AM_SUBST_NOTMAKE([PCH_FALSE]) +m4trace:configure.ac:443: -1- m4_pattern_allow([^USE_SSE$]) +m4trace:configure.ac:443: -1- m4_pattern_allow([^USE_SSE$]) +m4trace:configure.ac:460: -1- AM_CONDITIONAL([USE_SSE], [test "$USE_SSE" = "yes"]) +m4trace:configure.ac:460: -1- m4_pattern_allow([^USE_SSE_TRUE$]) +m4trace:configure.ac:460: -1- m4_pattern_allow([^USE_SSE_FALSE$]) +m4trace:configure.ac:460: -1- _AM_SUBST_NOTMAKE([USE_SSE_TRUE]) +m4trace:configure.ac:460: -1- _AM_SUBST_NOTMAKE([USE_SSE_FALSE]) +m4trace:configure.ac:493: -1- AM_PATH_PYTHON([], [], [:]) +m4trace:configure.ac:493: -1- m4_pattern_allow([^PYTHON$]) +m4trace:configure.ac:493: -1- m4_pattern_allow([^PYTHON_VERSION$]) +m4trace:configure.ac:493: -1- m4_pattern_allow([^PYTHON_PREFIX$]) +m4trace:configure.ac:493: -1- m4_pattern_allow([^PYTHON_EXEC_PREFIX$]) +m4trace:configure.ac:493: -1- m4_pattern_allow([^PYTHON_PLATFORM$]) +m4trace:configure.ac:493: -1- m4_pattern_allow([^pythondir$]) +m4trace:configure.ac:493: -1- m4_pattern_allow([^pkgpythondir$]) +m4trace:configure.ac:493: -1- m4_pattern_allow([^pyexecdir$]) +m4trace:configure.ac:493: -1- m4_pattern_allow([^pkgpyexecdir$]) +m4trace:configure.ac:530: -1- AM_CONDITIONAL([ENABLE_PYTHON], [test "$enable_python" = "yes"]) +m4trace:configure.ac:530: -1- m4_pattern_allow([^ENABLE_PYTHON_TRUE$]) +m4trace:configure.ac:530: -1- m4_pattern_allow([^ENABLE_PYTHON_FALSE$]) +m4trace:configure.ac:530: -1- _AM_SUBST_NOTMAKE([ENABLE_PYTHON_TRUE]) +m4trace:configure.ac:530: -1- _AM_SUBST_NOTMAKE([ENABLE_PYTHON_FALSE]) +m4trace:configure.ac:531: -1- m4_pattern_allow([^PYTHON_VERSION$]) +m4trace:configure.ac:532: -1- m4_pattern_allow([^PYTHON_INCLUDES$]) +m4trace:configure.ac:533: -1- m4_pattern_allow([^PYTHON_LIB$]) +m4trace:configure.ac:574: -1- PKG_CHECK_MODULES([FST], [libfst], [ vst_possible=yes ], [ vst_possible=no ]) +m4trace:configure.ac:574: -1- m4_pattern_allow([^FST_CFLAGS$]) +m4trace:configure.ac:574: -1- m4_pattern_allow([^FST_LIBS$]) +m4trace:configure.ac:574: -1- PKG_CHECK_EXISTS([libfst], [pkg_cv_[]FST_CFLAGS=`$PKG_CONFIG --[]cflags "libfst" 2>/dev/null`], [pkg_failed=yes]) +m4trace:configure.ac:574: -1- PKG_CHECK_EXISTS([libfst], [pkg_cv_[]FST_LIBS=`$PKG_CONFIG --[]libs "libfst" 2>/dev/null`], [pkg_failed=yes]) +m4trace:configure.ac:574: -1- _PKG_SHORT_ERRORS_SUPPORTED +m4trace:configure.ac:582: -1- m4_pattern_allow([^VST_SUPPORT$]) +m4trace:configure.ac:585: -1- AM_CONDITIONAL([VST_SUPPORT], [test x$vst_possible = xyes -a x$vst_requested = xyes]) +m4trace:configure.ac:585: -1- m4_pattern_allow([^VST_SUPPORT_TRUE$]) +m4trace:configure.ac:585: -1- m4_pattern_allow([^VST_SUPPORT_FALSE$]) +m4trace:configure.ac:585: -1- _AM_SUBST_NOTMAKE([VST_SUPPORT_TRUE]) +m4trace:configure.ac:585: -1- _AM_SUBST_NOTMAKE([VST_SUPPORT_FALSE]) +m4trace:configure.ac:607: -1- PKG_CHECK_MODULES([LO], [liblo], [ LO_LIB_FOUND=yes ], [ LO_LIB_FOUND=no ]) +m4trace:configure.ac:607: -1- m4_pattern_allow([^LO_CFLAGS$]) +m4trace:configure.ac:607: -1- m4_pattern_allow([^LO_LIBS$]) +m4trace:configure.ac:607: -1- PKG_CHECK_EXISTS([liblo], [pkg_cv_[]LO_CFLAGS=`$PKG_CONFIG --[]cflags "liblo" 2>/dev/null`], [pkg_failed=yes]) +m4trace:configure.ac:607: -1- PKG_CHECK_EXISTS([liblo], [pkg_cv_[]LO_LIBS=`$PKG_CONFIG --[]libs "liblo" 2>/dev/null`], [pkg_failed=yes]) +m4trace:configure.ac:607: -1- _PKG_SHORT_ERRORS_SUPPORTED +m4trace:configure.ac:618: -1- m4_pattern_allow([^LO_CFLAGS$]) +m4trace:configure.ac:619: -1- m4_pattern_allow([^LO_LIBS$]) +m4trace:configure.ac:620: -1- m4_pattern_allow([^OSC_SUPPORT$]) +m4trace:configure.ac:623: -1- AM_CONDITIONAL([OSC_SUPPORT], [test x$LO_LIB_FOUND = xyes]) +m4trace:configure.ac:623: -1- m4_pattern_allow([^OSC_SUPPORT_TRUE$]) +m4trace:configure.ac:623: -1- m4_pattern_allow([^OSC_SUPPORT_FALSE$]) +m4trace:configure.ac:623: -1- _AM_SUBST_NOTMAKE([OSC_SUPPORT_TRUE]) +m4trace:configure.ac:623: -1- _AM_SUBST_NOTMAKE([OSC_SUPPORT_FALSE]) +m4trace:configure.ac:677: -1- m4_pattern_allow([^DSSI_SUPPORT$]) +m4trace:configure.ac:681: -1- AM_CONDITIONAL([DSSI_SUPPORT], [test x$DSSI_FOUND = xyes]) +m4trace:configure.ac:681: -1- m4_pattern_allow([^DSSI_SUPPORT_TRUE$]) +m4trace:configure.ac:681: -1- m4_pattern_allow([^DSSI_SUPPORT_FALSE$]) +m4trace:configure.ac:681: -1- _AM_SUBST_NOTMAKE([DSSI_SUPPORT_TRUE]) +m4trace:configure.ac:681: -1- _AM_SUBST_NOTMAKE([DSSI_SUPPORT_FALSE]) +m4trace:configure.ac:698: -1- m4_pattern_allow([^HAVE_AUDIO$]) +m4trace:configure.ac:699: -1- AM_CONDITIONAL([HAVE_AUDIO], [test "yes" = "yes"]) +m4trace:configure.ac:699: -1- m4_pattern_allow([^HAVE_AUDIO_TRUE$]) +m4trace:configure.ac:699: -1- m4_pattern_allow([^HAVE_AUDIO_FALSE$]) +m4trace:configure.ac:699: -1- _AM_SUBST_NOTMAKE([HAVE_AUDIO_TRUE]) +m4trace:configure.ac:699: -1- _AM_SUBST_NOTMAKE([HAVE_AUDIO_FALSE]) +m4trace:configure.ac:700: -1- m4_pattern_allow([^MUSECXXFLAGS$]) +m4trace:configure.ac:708: -1- _m4_warn([obsolete], [AC_OUTPUT should be used without arguments. +You should run autoupdate.], []) +m4trace:configure.ac:708: -1- m4_pattern_allow([^LIB@&t@OBJS$]) +m4trace:configure.ac:708: -1- m4_pattern_allow([^LTLIBOBJS$]) +m4trace:configure.ac:708: -1- AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"]) +m4trace:configure.ac:708: -1- m4_pattern_allow([^am__EXEEXT_TRUE$]) +m4trace:configure.ac:708: -1- m4_pattern_allow([^am__EXEEXT_FALSE$]) +m4trace:configure.ac:708: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_TRUE]) +m4trace:configure.ac:708: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_FALSE]) +m4trace:configure.ac:708: -1- _AC_AM_CONFIG_HEADER_HOOK(["$ac_file"]) +m4trace:configure.ac:708: -1- _AM_OUTPUT_DEPENDENCY_COMMANDS +m4trace:configure.ac:708: -1- _LT_PROG_LTMAIN diff --git a/muse2/autom4te.cache/traces.1 b/muse2/autom4te.cache/traces.1 new file mode 100644 index 00000000..5d60049a --- /dev/null +++ b/muse2/autom4te.cache/traces.1 @@ -0,0 +1,1025 @@ +m4trace:aclocal.m4:1327: -1- m4_include([m4/aclocal-include.m4]) +m4trace:aclocal.m4:1328: -1- m4_include([m4/alsa.m4]) +m4trace:aclocal.m4:1329: -1- m4_include([m4/docbook.m4]) +m4trace:aclocal.m4:1330: -1- m4_include([m4/libtool.m4]) +m4trace:aclocal.m4:1331: -1- m4_include([m4/ltoptions.m4]) +m4trace:aclocal.m4:1332: -1- m4_include([m4/ltsugar.m4]) +m4trace:aclocal.m4:1333: -1- m4_include([m4/ltversion.m4]) +m4trace:aclocal.m4:1334: -1- m4_include([m4/lt~obsolete.m4]) +m4trace:configure.ac:5: -1- AC_INIT([MusE], [1.1]) +m4trace:configure.ac:5: -1- m4_pattern_forbid([^_?A[CHUM]_]) +m4trace:configure.ac:5: -1- m4_pattern_forbid([_AC_]) +m4trace:configure.ac:5: -1- m4_pattern_forbid([^LIBOBJS$], [do not use LIBOBJS directly, use AC_LIBOBJ (see section `AC_LIBOBJ vs LIBOBJS']) +m4trace:configure.ac:5: -1- m4_pattern_allow([^AS_FLAGS$]) +m4trace:configure.ac:5: -1- m4_pattern_forbid([^_?m4_]) +m4trace:configure.ac:5: -1- m4_pattern_forbid([^dnl$]) +m4trace:configure.ac:5: -1- m4_pattern_forbid([^_?AS_]) +m4trace:configure.ac:5: -1- AC_SUBST([SHELL]) +m4trace:configure.ac:5: -1- AC_SUBST_TRACE([SHELL]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^SHELL$]) +m4trace:configure.ac:5: -1- AC_SUBST([PATH_SEPARATOR]) +m4trace:configure.ac:5: -1- AC_SUBST_TRACE([PATH_SEPARATOR]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^PATH_SEPARATOR$]) +m4trace:configure.ac:5: -1- AC_SUBST([PACKAGE_NAME], [m4_ifdef([AC_PACKAGE_NAME], ['AC_PACKAGE_NAME'])]) +m4trace:configure.ac:5: -1- AC_SUBST_TRACE([PACKAGE_NAME]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^PACKAGE_NAME$]) +m4trace:configure.ac:5: -1- AC_SUBST([PACKAGE_TARNAME], [m4_ifdef([AC_PACKAGE_TARNAME], ['AC_PACKAGE_TARNAME'])]) +m4trace:configure.ac:5: -1- AC_SUBST_TRACE([PACKAGE_TARNAME]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^PACKAGE_TARNAME$]) +m4trace:configure.ac:5: -1- AC_SUBST([PACKAGE_VERSION], [m4_ifdef([AC_PACKAGE_VERSION], ['AC_PACKAGE_VERSION'])]) +m4trace:configure.ac:5: -1- AC_SUBST_TRACE([PACKAGE_VERSION]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^PACKAGE_VERSION$]) +m4trace:configure.ac:5: -1- AC_SUBST([PACKAGE_STRING], [m4_ifdef([AC_PACKAGE_STRING], ['AC_PACKAGE_STRING'])]) +m4trace:configure.ac:5: -1- AC_SUBST_TRACE([PACKAGE_STRING]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^PACKAGE_STRING$]) +m4trace:configure.ac:5: -1- AC_SUBST([PACKAGE_BUGREPORT], [m4_ifdef([AC_PACKAGE_BUGREPORT], ['AC_PACKAGE_BUGREPORT'])]) +m4trace:configure.ac:5: -1- AC_SUBST_TRACE([PACKAGE_BUGREPORT]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$]) +m4trace:configure.ac:5: -1- AC_SUBST([PACKAGE_URL], [m4_ifdef([AC_PACKAGE_URL], ['AC_PACKAGE_URL'])]) +m4trace:configure.ac:5: -1- AC_SUBST_TRACE([PACKAGE_URL]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^PACKAGE_URL$]) +m4trace:configure.ac:5: -1- AC_SUBST([exec_prefix], [NONE]) +m4trace:configure.ac:5: -1- AC_SUBST_TRACE([exec_prefix]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^exec_prefix$]) +m4trace:configure.ac:5: -1- AC_SUBST([prefix], [NONE]) +m4trace:configure.ac:5: -1- AC_SUBST_TRACE([prefix]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^prefix$]) +m4trace:configure.ac:5: -1- AC_SUBST([program_transform_name], [s,x,x,]) +m4trace:configure.ac:5: -1- AC_SUBST_TRACE([program_transform_name]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^program_transform_name$]) +m4trace:configure.ac:5: -1- AC_SUBST([bindir], ['${exec_prefix}/bin']) +m4trace:configure.ac:5: -1- AC_SUBST_TRACE([bindir]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^bindir$]) +m4trace:configure.ac:5: -1- AC_SUBST([sbindir], ['${exec_prefix}/sbin']) +m4trace:configure.ac:5: -1- AC_SUBST_TRACE([sbindir]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^sbindir$]) +m4trace:configure.ac:5: -1- AC_SUBST([libexecdir], ['${exec_prefix}/libexec']) +m4trace:configure.ac:5: -1- AC_SUBST_TRACE([libexecdir]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^libexecdir$]) +m4trace:configure.ac:5: -1- AC_SUBST([datarootdir], ['${prefix}/share']) +m4trace:configure.ac:5: -1- AC_SUBST_TRACE([datarootdir]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^datarootdir$]) +m4trace:configure.ac:5: -1- AC_SUBST([datadir], ['${datarootdir}']) +m4trace:configure.ac:5: -1- AC_SUBST_TRACE([datadir]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^datadir$]) +m4trace:configure.ac:5: -1- AC_SUBST([sysconfdir], ['${prefix}/etc']) +m4trace:configure.ac:5: -1- AC_SUBST_TRACE([sysconfdir]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^sysconfdir$]) +m4trace:configure.ac:5: -1- AC_SUBST([sharedstatedir], ['${prefix}/com']) +m4trace:configure.ac:5: -1- AC_SUBST_TRACE([sharedstatedir]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^sharedstatedir$]) +m4trace:configure.ac:5: -1- AC_SUBST([localstatedir], ['${prefix}/var']) +m4trace:configure.ac:5: -1- AC_SUBST_TRACE([localstatedir]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^localstatedir$]) +m4trace:configure.ac:5: -1- AC_SUBST([includedir], ['${prefix}/include']) +m4trace:configure.ac:5: -1- AC_SUBST_TRACE([includedir]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^includedir$]) +m4trace:configure.ac:5: -1- AC_SUBST([oldincludedir], ['/usr/include']) +m4trace:configure.ac:5: -1- AC_SUBST_TRACE([oldincludedir]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^oldincludedir$]) +m4trace:configure.ac:5: -1- AC_SUBST([docdir], [m4_ifset([AC_PACKAGE_TARNAME], + ['${datarootdir}/doc/${PACKAGE_TARNAME}'], + ['${datarootdir}/doc/${PACKAGE}'])]) +m4trace:configure.ac:5: -1- AC_SUBST_TRACE([docdir]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^docdir$]) +m4trace:configure.ac:5: -1- AC_SUBST([infodir], ['${datarootdir}/info']) +m4trace:configure.ac:5: -1- AC_SUBST_TRACE([infodir]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^infodir$]) +m4trace:configure.ac:5: -1- AC_SUBST([htmldir], ['${docdir}']) +m4trace:configure.ac:5: -1- AC_SUBST_TRACE([htmldir]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^htmldir$]) +m4trace:configure.ac:5: -1- AC_SUBST([dvidir], ['${docdir}']) +m4trace:configure.ac:5: -1- AC_SUBST_TRACE([dvidir]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^dvidir$]) +m4trace:configure.ac:5: -1- AC_SUBST([pdfdir], ['${docdir}']) +m4trace:configure.ac:5: -1- AC_SUBST_TRACE([pdfdir]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^pdfdir$]) +m4trace:configure.ac:5: -1- AC_SUBST([psdir], ['${docdir}']) +m4trace:configure.ac:5: -1- AC_SUBST_TRACE([psdir]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^psdir$]) +m4trace:configure.ac:5: -1- AC_SUBST([libdir], ['${exec_prefix}/lib']) +m4trace:configure.ac:5: -1- AC_SUBST_TRACE([libdir]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^libdir$]) +m4trace:configure.ac:5: -1- AC_SUBST([localedir], ['${datarootdir}/locale']) +m4trace:configure.ac:5: -1- AC_SUBST_TRACE([localedir]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^localedir$]) +m4trace:configure.ac:5: -1- AC_SUBST([mandir], ['${datarootdir}/man']) +m4trace:configure.ac:5: -1- AC_SUBST_TRACE([mandir]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^mandir$]) +m4trace:configure.ac:5: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_NAME]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^PACKAGE_NAME$]) +m4trace:configure.ac:5: -1- AH_OUTPUT([PACKAGE_NAME], [/* Define to the full name of this package. */ +@%:@undef PACKAGE_NAME]) +m4trace:configure.ac:5: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_TARNAME]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^PACKAGE_TARNAME$]) +m4trace:configure.ac:5: -1- AH_OUTPUT([PACKAGE_TARNAME], [/* Define to the one symbol short name of this package. */ +@%:@undef PACKAGE_TARNAME]) +m4trace:configure.ac:5: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_VERSION]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^PACKAGE_VERSION$]) +m4trace:configure.ac:5: -1- AH_OUTPUT([PACKAGE_VERSION], [/* Define to the version of this package. */ +@%:@undef PACKAGE_VERSION]) +m4trace:configure.ac:5: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_STRING]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^PACKAGE_STRING$]) +m4trace:configure.ac:5: -1- AH_OUTPUT([PACKAGE_STRING], [/* Define to the full name and version of this package. */ +@%:@undef PACKAGE_STRING]) +m4trace:configure.ac:5: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_BUGREPORT]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$]) +m4trace:configure.ac:5: -1- AH_OUTPUT([PACKAGE_BUGREPORT], [/* Define to the address where bug reports for this package should be sent. */ +@%:@undef PACKAGE_BUGREPORT]) +m4trace:configure.ac:5: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_URL]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^PACKAGE_URL$]) +m4trace:configure.ac:5: -1- AH_OUTPUT([PACKAGE_URL], [/* Define to the home page for this package. */ +@%:@undef PACKAGE_URL]) +m4trace:configure.ac:5: -1- AC_SUBST([DEFS]) +m4trace:configure.ac:5: -1- AC_SUBST_TRACE([DEFS]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^DEFS$]) +m4trace:configure.ac:5: -1- AC_SUBST([ECHO_C]) +m4trace:configure.ac:5: -1- AC_SUBST_TRACE([ECHO_C]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^ECHO_C$]) +m4trace:configure.ac:5: -1- AC_SUBST([ECHO_N]) +m4trace:configure.ac:5: -1- AC_SUBST_TRACE([ECHO_N]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^ECHO_N$]) +m4trace:configure.ac:5: -1- AC_SUBST([ECHO_T]) +m4trace:configure.ac:5: -1- AC_SUBST_TRACE([ECHO_T]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^ECHO_T$]) +m4trace:configure.ac:5: -1- AC_SUBST([LIBS]) +m4trace:configure.ac:5: -1- AC_SUBST_TRACE([LIBS]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^LIBS$]) +m4trace:configure.ac:5: -1- AC_SUBST([build_alias]) +m4trace:configure.ac:5: -1- AC_SUBST_TRACE([build_alias]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^build_alias$]) +m4trace:configure.ac:5: -1- AC_SUBST([host_alias]) +m4trace:configure.ac:5: -1- AC_SUBST_TRACE([host_alias]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^host_alias$]) +m4trace:configure.ac:5: -1- AC_SUBST([target_alias]) +m4trace:configure.ac:5: -1- AC_SUBST_TRACE([target_alias]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^target_alias$]) +m4trace:configure.ac:7: -1- AM_INIT_AUTOMAKE([1.1]) +m4trace:configure.ac:7: -1- m4_pattern_allow([^AM_[A-Z]+FLAGS$]) +m4trace:configure.ac:7: -1- AM_AUTOMAKE_VERSION([1.11.1]) +m4trace:configure.ac:7: -1- AC_REQUIRE_AUX_FILE([install-sh]) +m4trace:configure.ac:7: -1- AC_SUBST([INSTALL_PROGRAM]) +m4trace:configure.ac:7: -1- AC_SUBST_TRACE([INSTALL_PROGRAM]) +m4trace:configure.ac:7: -1- m4_pattern_allow([^INSTALL_PROGRAM$]) +m4trace:configure.ac:7: -1- AC_SUBST([INSTALL_SCRIPT]) +m4trace:configure.ac:7: -1- AC_SUBST_TRACE([INSTALL_SCRIPT]) +m4trace:configure.ac:7: -1- m4_pattern_allow([^INSTALL_SCRIPT$]) +m4trace:configure.ac:7: -1- AC_SUBST([INSTALL_DATA]) +m4trace:configure.ac:7: -1- AC_SUBST_TRACE([INSTALL_DATA]) +m4trace:configure.ac:7: -1- m4_pattern_allow([^INSTALL_DATA$]) +m4trace:configure.ac:7: -1- AC_SUBST([am__isrc], [' -I$(srcdir)']) +m4trace:configure.ac:7: -1- AC_SUBST_TRACE([am__isrc]) +m4trace:configure.ac:7: -1- m4_pattern_allow([^am__isrc$]) +m4trace:configure.ac:7: -1- _AM_SUBST_NOTMAKE([am__isrc]) +m4trace:configure.ac:7: -1- AC_SUBST([CYGPATH_W]) +m4trace:configure.ac:7: -1- AC_SUBST_TRACE([CYGPATH_W]) +m4trace:configure.ac:7: -1- m4_pattern_allow([^CYGPATH_W$]) +m4trace:configure.ac:7: -1- AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME']) +m4trace:configure.ac:7: -1- AC_SUBST_TRACE([PACKAGE]) +m4trace:configure.ac:7: -1- m4_pattern_allow([^PACKAGE$]) +m4trace:configure.ac:7: -1- AC_SUBST([VERSION], ['AC_PACKAGE_VERSION']) +m4trace:configure.ac:7: -1- AC_SUBST_TRACE([VERSION]) +m4trace:configure.ac:7: -1- m4_pattern_allow([^VERSION$]) +m4trace:configure.ac:7: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE]) +m4trace:configure.ac:7: -1- m4_pattern_allow([^PACKAGE$]) +m4trace:configure.ac:7: -1- AH_OUTPUT([PACKAGE], [/* Name of package */ +@%:@undef PACKAGE]) +m4trace:configure.ac:7: -1- AC_DEFINE_TRACE_LITERAL([VERSION]) +m4trace:configure.ac:7: -1- m4_pattern_allow([^VERSION$]) +m4trace:configure.ac:7: -1- AH_OUTPUT([VERSION], [/* Version number of package */ +@%:@undef VERSION]) +m4trace:configure.ac:7: -1- AC_REQUIRE_AUX_FILE([missing]) +m4trace:configure.ac:7: -1- AC_SUBST([ACLOCAL]) +m4trace:configure.ac:7: -1- AC_SUBST_TRACE([ACLOCAL]) +m4trace:configure.ac:7: -1- m4_pattern_allow([^ACLOCAL$]) +m4trace:configure.ac:7: -1- AC_SUBST([AUTOCONF]) +m4trace:configure.ac:7: -1- AC_SUBST_TRACE([AUTOCONF]) +m4trace:configure.ac:7: -1- m4_pattern_allow([^AUTOCONF$]) +m4trace:configure.ac:7: -1- AC_SUBST([AUTOMAKE]) +m4trace:configure.ac:7: -1- AC_SUBST_TRACE([AUTOMAKE]) +m4trace:configure.ac:7: -1- m4_pattern_allow([^AUTOMAKE$]) +m4trace:configure.ac:7: -1- AC_SUBST([AUTOHEADER]) +m4trace:configure.ac:7: -1- AC_SUBST_TRACE([AUTOHEADER]) +m4trace:configure.ac:7: -1- m4_pattern_allow([^AUTOHEADER$]) +m4trace:configure.ac:7: -1- AC_SUBST([MAKEINFO]) +m4trace:configure.ac:7: -1- AC_SUBST_TRACE([MAKEINFO]) +m4trace:configure.ac:7: -1- m4_pattern_allow([^MAKEINFO$]) +m4trace:configure.ac:7: -1- AC_SUBST([install_sh]) +m4trace:configure.ac:7: -1- AC_SUBST_TRACE([install_sh]) +m4trace:configure.ac:7: -1- m4_pattern_allow([^install_sh$]) +m4trace:configure.ac:7: -1- AC_SUBST([STRIP]) +m4trace:configure.ac:7: -1- AC_SUBST_TRACE([STRIP]) +m4trace:configure.ac:7: -1- m4_pattern_allow([^STRIP$]) +m4trace:configure.ac:7: -1- AC_SUBST([INSTALL_STRIP_PROGRAM]) +m4trace:configure.ac:7: -1- AC_SUBST_TRACE([INSTALL_STRIP_PROGRAM]) +m4trace:configure.ac:7: -1- m4_pattern_allow([^INSTALL_STRIP_PROGRAM$]) +m4trace:configure.ac:7: -1- AC_REQUIRE_AUX_FILE([install-sh]) +m4trace:configure.ac:7: -1- AC_SUBST([MKDIR_P]) +m4trace:configure.ac:7: -1- AC_SUBST_TRACE([MKDIR_P]) +m4trace:configure.ac:7: -1- m4_pattern_allow([^MKDIR_P$]) +m4trace:configure.ac:7: -1- AC_SUBST([mkdir_p], ["$MKDIR_P"]) +m4trace:configure.ac:7: -1- AC_SUBST_TRACE([mkdir_p]) +m4trace:configure.ac:7: -1- m4_pattern_allow([^mkdir_p$]) +m4trace:configure.ac:7: -1- AC_SUBST([AWK]) +m4trace:configure.ac:7: -1- AC_SUBST_TRACE([AWK]) +m4trace:configure.ac:7: -1- m4_pattern_allow([^AWK$]) +m4trace:configure.ac:7: -1- AC_SUBST([SET_MAKE]) +m4trace:configure.ac:7: -1- AC_SUBST_TRACE([SET_MAKE]) +m4trace:configure.ac:7: -1- m4_pattern_allow([^SET_MAKE$]) +m4trace:configure.ac:7: -1- AC_SUBST([am__leading_dot]) +m4trace:configure.ac:7: -1- AC_SUBST_TRACE([am__leading_dot]) +m4trace:configure.ac:7: -1- m4_pattern_allow([^am__leading_dot$]) +m4trace:configure.ac:7: -1- AC_SUBST([AMTAR]) +m4trace:configure.ac:7: -1- AC_SUBST_TRACE([AMTAR]) +m4trace:configure.ac:7: -1- m4_pattern_allow([^AMTAR$]) +m4trace:configure.ac:7: -1- AC_SUBST([am__tar]) +m4trace:configure.ac:7: -1- AC_SUBST_TRACE([am__tar]) +m4trace:configure.ac:7: -1- m4_pattern_allow([^am__tar$]) +m4trace:configure.ac:7: -1- AC_SUBST([am__untar]) +m4trace:configure.ac:7: -1- AC_SUBST_TRACE([am__untar]) +m4trace:configure.ac:7: -1- m4_pattern_allow([^am__untar$]) +m4trace:configure.ac:8: -1- _m4_warn([obsolete], [The macro `AM_CONFIG_HEADER' is obsolete. +You should run autoupdate.], [aclocal.m4:577: AM_CONFIG_HEADER is expanded from... +configure.ac:8: the top level]) +m4trace:configure.ac:8: -1- AC_CONFIG_HEADERS([config.h]) +m4trace:configure.ac:10: -1- AM_CONDITIONAL([INSIDE_GNOME_COMMON], [test x = y]) +m4trace:configure.ac:10: -1- AC_SUBST([INSIDE_GNOME_COMMON_TRUE]) +m4trace:configure.ac:10: -1- AC_SUBST_TRACE([INSIDE_GNOME_COMMON_TRUE]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^INSIDE_GNOME_COMMON_TRUE$]) +m4trace:configure.ac:10: -1- AC_SUBST([INSIDE_GNOME_COMMON_FALSE]) +m4trace:configure.ac:10: -1- AC_SUBST_TRACE([INSIDE_GNOME_COMMON_FALSE]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^INSIDE_GNOME_COMMON_FALSE$]) +m4trace:configure.ac:10: -1- _AM_SUBST_NOTMAKE([INSIDE_GNOME_COMMON_TRUE]) +m4trace:configure.ac:10: -1- _AM_SUBST_NOTMAKE([INSIDE_GNOME_COMMON_FALSE]) +m4trace:configure.ac:13: -1- AC_SUBST([CXX]) +m4trace:configure.ac:13: -1- AC_SUBST_TRACE([CXX]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^CXX$]) +m4trace:configure.ac:13: -1- AC_SUBST([CXXFLAGS]) +m4trace:configure.ac:13: -1- AC_SUBST_TRACE([CXXFLAGS]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^CXXFLAGS$]) +m4trace:configure.ac:13: -1- AC_SUBST([LDFLAGS]) +m4trace:configure.ac:13: -1- AC_SUBST_TRACE([LDFLAGS]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^LDFLAGS$]) +m4trace:configure.ac:13: -1- AC_SUBST([LIBS]) +m4trace:configure.ac:13: -1- AC_SUBST_TRACE([LIBS]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^LIBS$]) +m4trace:configure.ac:13: -1- AC_SUBST([CPPFLAGS]) +m4trace:configure.ac:13: -1- AC_SUBST_TRACE([CPPFLAGS]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^CPPFLAGS$]) +m4trace:configure.ac:13: -1- AC_SUBST([CXX]) +m4trace:configure.ac:13: -1- AC_SUBST_TRACE([CXX]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^CXX$]) +m4trace:configure.ac:13: -1- AC_SUBST([ac_ct_CXX]) +m4trace:configure.ac:13: -1- AC_SUBST_TRACE([ac_ct_CXX]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^ac_ct_CXX$]) +m4trace:configure.ac:13: -1- AC_SUBST([EXEEXT], [$ac_cv_exeext]) +m4trace:configure.ac:13: -1- AC_SUBST_TRACE([EXEEXT]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^EXEEXT$]) +m4trace:configure.ac:13: -1- AC_SUBST([OBJEXT], [$ac_cv_objext]) +m4trace:configure.ac:13: -1- AC_SUBST_TRACE([OBJEXT]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^OBJEXT$]) +m4trace:configure.ac:13: -1- AC_SUBST([DEPDIR], ["${am__leading_dot}deps"]) +m4trace:configure.ac:13: -1- AC_SUBST_TRACE([DEPDIR]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^DEPDIR$]) +m4trace:configure.ac:13: -1- AC_SUBST([am__include]) +m4trace:configure.ac:13: -1- AC_SUBST_TRACE([am__include]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^am__include$]) +m4trace:configure.ac:13: -1- AC_SUBST([am__quote]) +m4trace:configure.ac:13: -1- AC_SUBST_TRACE([am__quote]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^am__quote$]) +m4trace:configure.ac:13: -1- AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +m4trace:configure.ac:13: -1- AC_SUBST([AMDEP_TRUE]) +m4trace:configure.ac:13: -1- AC_SUBST_TRACE([AMDEP_TRUE]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^AMDEP_TRUE$]) +m4trace:configure.ac:13: -1- AC_SUBST([AMDEP_FALSE]) +m4trace:configure.ac:13: -1- AC_SUBST_TRACE([AMDEP_FALSE]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^AMDEP_FALSE$]) +m4trace:configure.ac:13: -1- _AM_SUBST_NOTMAKE([AMDEP_TRUE]) +m4trace:configure.ac:13: -1- _AM_SUBST_NOTMAKE([AMDEP_FALSE]) +m4trace:configure.ac:13: -1- AC_SUBST([AMDEPBACKSLASH]) +m4trace:configure.ac:13: -1- AC_SUBST_TRACE([AMDEPBACKSLASH]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^AMDEPBACKSLASH$]) +m4trace:configure.ac:13: -1- _AM_SUBST_NOTMAKE([AMDEPBACKSLASH]) +m4trace:configure.ac:13: -1- AC_SUBST([CXXDEPMODE], [depmode=$am_cv_CXX_dependencies_compiler_type]) +m4trace:configure.ac:13: -1- AC_SUBST_TRACE([CXXDEPMODE]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^CXXDEPMODE$]) +m4trace:configure.ac:13: -1- AM_CONDITIONAL([am__fastdepCXX], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CXX_dependencies_compiler_type" = gcc3]) +m4trace:configure.ac:13: -1- AC_SUBST([am__fastdepCXX_TRUE]) +m4trace:configure.ac:13: -1- AC_SUBST_TRACE([am__fastdepCXX_TRUE]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^am__fastdepCXX_TRUE$]) +m4trace:configure.ac:13: -1- AC_SUBST([am__fastdepCXX_FALSE]) +m4trace:configure.ac:13: -1- AC_SUBST_TRACE([am__fastdepCXX_FALSE]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^am__fastdepCXX_FALSE$]) +m4trace:configure.ac:13: -1- _AM_SUBST_NOTMAKE([am__fastdepCXX_TRUE]) +m4trace:configure.ac:13: -1- _AM_SUBST_NOTMAKE([am__fastdepCXX_FALSE]) +m4trace:configure.ac:14: -1- AC_PROG_LIBTOOL +m4trace:configure.ac:14: -1- _m4_warn([obsolete], [The macro `AC_PROG_LIBTOOL' is obsolete. +You should run autoupdate.], [m4/libtool.m4:102: AC_PROG_LIBTOOL is expanded from... +configure.ac:14: the top level]) +m4trace:configure.ac:14: -1- LT_INIT +m4trace:configure.ac:14: -1- m4_pattern_forbid([^_?LT_[A-Z_]+$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$]) +m4trace:configure.ac:14: -1- AC_REQUIRE_AUX_FILE([ltmain.sh]) +m4trace:configure.ac:14: -1- AC_SUBST([LIBTOOL]) +m4trace:configure.ac:14: -1- AC_SUBST_TRACE([LIBTOOL]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^LIBTOOL$]) +m4trace:configure.ac:14: -1- AC_CANONICAL_HOST +m4trace:configure.ac:14: -1- AC_CANONICAL_BUILD +m4trace:configure.ac:14: -1- AC_REQUIRE_AUX_FILE([config.sub]) +m4trace:configure.ac:14: -1- AC_REQUIRE_AUX_FILE([config.guess]) +m4trace:configure.ac:14: -1- AC_SUBST([build], [$ac_cv_build]) +m4trace:configure.ac:14: -1- AC_SUBST_TRACE([build]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^build$]) +m4trace:configure.ac:14: -1- AC_SUBST([build_cpu], [$[1]]) +m4trace:configure.ac:14: -1- AC_SUBST_TRACE([build_cpu]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^build_cpu$]) +m4trace:configure.ac:14: -1- AC_SUBST([build_vendor], [$[2]]) +m4trace:configure.ac:14: -1- AC_SUBST_TRACE([build_vendor]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^build_vendor$]) +m4trace:configure.ac:14: -1- AC_SUBST([build_os]) +m4trace:configure.ac:14: -1- AC_SUBST_TRACE([build_os]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^build_os$]) +m4trace:configure.ac:14: -1- AC_SUBST([host], [$ac_cv_host]) +m4trace:configure.ac:14: -1- AC_SUBST_TRACE([host]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^host$]) +m4trace:configure.ac:14: -1- AC_SUBST([host_cpu], [$[1]]) +m4trace:configure.ac:14: -1- AC_SUBST_TRACE([host_cpu]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^host_cpu$]) +m4trace:configure.ac:14: -1- AC_SUBST([host_vendor], [$[2]]) +m4trace:configure.ac:14: -1- AC_SUBST_TRACE([host_vendor]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^host_vendor$]) +m4trace:configure.ac:14: -1- AC_SUBST([host_os]) +m4trace:configure.ac:14: -1- AC_SUBST_TRACE([host_os]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^host_os$]) +m4trace:configure.ac:14: -1- AC_SUBST([CC]) +m4trace:configure.ac:14: -1- AC_SUBST_TRACE([CC]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^CC$]) +m4trace:configure.ac:14: -1- AC_SUBST([CFLAGS]) +m4trace:configure.ac:14: -1- AC_SUBST_TRACE([CFLAGS]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^CFLAGS$]) +m4trace:configure.ac:14: -1- AC_SUBST([LDFLAGS]) +m4trace:configure.ac:14: -1- AC_SUBST_TRACE([LDFLAGS]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^LDFLAGS$]) +m4trace:configure.ac:14: -1- AC_SUBST([LIBS]) +m4trace:configure.ac:14: -1- AC_SUBST_TRACE([LIBS]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^LIBS$]) +m4trace:configure.ac:14: -1- AC_SUBST([CPPFLAGS]) +m4trace:configure.ac:14: -1- AC_SUBST_TRACE([CPPFLAGS]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^CPPFLAGS$]) +m4trace:configure.ac:14: -1- AC_SUBST([CC]) +m4trace:configure.ac:14: -1- AC_SUBST_TRACE([CC]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^CC$]) +m4trace:configure.ac:14: -1- AC_SUBST([CC]) +m4trace:configure.ac:14: -1- AC_SUBST_TRACE([CC]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^CC$]) +m4trace:configure.ac:14: -1- AC_SUBST([CC]) +m4trace:configure.ac:14: -1- AC_SUBST_TRACE([CC]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^CC$]) +m4trace:configure.ac:14: -1- AC_SUBST([CC]) +m4trace:configure.ac:14: -1- AC_SUBST_TRACE([CC]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^CC$]) +m4trace:configure.ac:14: -1- AC_SUBST([ac_ct_CC]) +m4trace:configure.ac:14: -1- AC_SUBST_TRACE([ac_ct_CC]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^ac_ct_CC$]) +m4trace:configure.ac:14: -1- AC_SUBST([CCDEPMODE], [depmode=$am_cv_CC_dependencies_compiler_type]) +m4trace:configure.ac:14: -1- AC_SUBST_TRACE([CCDEPMODE]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^CCDEPMODE$]) +m4trace:configure.ac:14: -1- AM_CONDITIONAL([am__fastdepCC], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3]) +m4trace:configure.ac:14: -1- AC_SUBST([am__fastdepCC_TRUE]) +m4trace:configure.ac:14: -1- AC_SUBST_TRACE([am__fastdepCC_TRUE]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^am__fastdepCC_TRUE$]) +m4trace:configure.ac:14: -1- AC_SUBST([am__fastdepCC_FALSE]) +m4trace:configure.ac:14: -1- AC_SUBST_TRACE([am__fastdepCC_FALSE]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^am__fastdepCC_FALSE$]) +m4trace:configure.ac:14: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_TRUE]) +m4trace:configure.ac:14: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_FALSE]) +m4trace:configure.ac:14: -1- AC_SUBST([SED]) +m4trace:configure.ac:14: -1- AC_SUBST_TRACE([SED]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^SED$]) +m4trace:configure.ac:14: -1- AC_SUBST([GREP]) +m4trace:configure.ac:14: -1- AC_SUBST_TRACE([GREP]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^GREP$]) +m4trace:configure.ac:14: -1- AC_SUBST([EGREP]) +m4trace:configure.ac:14: -1- AC_SUBST_TRACE([EGREP]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^EGREP$]) +m4trace:configure.ac:14: -1- AC_SUBST([FGREP]) +m4trace:configure.ac:14: -1- AC_SUBST_TRACE([FGREP]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^FGREP$]) +m4trace:configure.ac:14: -1- AC_SUBST([GREP]) +m4trace:configure.ac:14: -1- AC_SUBST_TRACE([GREP]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^GREP$]) +m4trace:configure.ac:14: -1- AC_SUBST([LD]) +m4trace:configure.ac:14: -1- AC_SUBST_TRACE([LD]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^LD$]) +m4trace:configure.ac:14: -1- AC_SUBST([DUMPBIN]) +m4trace:configure.ac:14: -1- AC_SUBST_TRACE([DUMPBIN]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^DUMPBIN$]) +m4trace:configure.ac:14: -1- AC_SUBST([ac_ct_DUMPBIN]) +m4trace:configure.ac:14: -1- AC_SUBST_TRACE([ac_ct_DUMPBIN]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^ac_ct_DUMPBIN$]) +m4trace:configure.ac:14: -1- AC_SUBST([DUMPBIN]) +m4trace:configure.ac:14: -1- AC_SUBST_TRACE([DUMPBIN]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^DUMPBIN$]) +m4trace:configure.ac:14: -1- AC_SUBST([NM]) +m4trace:configure.ac:14: -1- AC_SUBST_TRACE([NM]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^NM$]) +m4trace:configure.ac:14: -1- AC_SUBST([LN_S], [$as_ln_s]) +m4trace:configure.ac:14: -1- AC_SUBST_TRACE([LN_S]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^LN_S$]) +m4trace:configure.ac:14: -1- AC_SUBST([OBJDUMP]) +m4trace:configure.ac:14: -1- AC_SUBST_TRACE([OBJDUMP]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^OBJDUMP$]) +m4trace:configure.ac:14: -1- AC_SUBST([OBJDUMP]) +m4trace:configure.ac:14: -1- AC_SUBST_TRACE([OBJDUMP]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^OBJDUMP$]) +m4trace:configure.ac:14: -1- AC_SUBST([AR]) +m4trace:configure.ac:14: -1- AC_SUBST_TRACE([AR]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^AR$]) +m4trace:configure.ac:14: -1- AC_SUBST([STRIP]) +m4trace:configure.ac:14: -1- AC_SUBST_TRACE([STRIP]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^STRIP$]) +m4trace:configure.ac:14: -1- AC_SUBST([RANLIB]) +m4trace:configure.ac:14: -1- AC_SUBST_TRACE([RANLIB]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^RANLIB$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([LT_OBJDIR]) +m4trace:configure.ac:14: -1- AC_DEFINE_TRACE_LITERAL([LT_OBJDIR]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^LT_OBJDIR$]) +m4trace:configure.ac:14: -1- AH_OUTPUT([LT_OBJDIR], [/* Define to the sub-directory in which libtool stores uninstalled libraries. + */ +@%:@undef LT_OBJDIR]) +m4trace:configure.ac:14: -1- AC_SUBST([lt_ECHO]) +m4trace:configure.ac:14: -1- AC_SUBST_TRACE([lt_ECHO]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^lt_ECHO$]) +m4trace:configure.ac:14: -1- LT_SUPPORTED_TAG([CC]) +m4trace:configure.ac:14: -1- AC_SUBST([DSYMUTIL]) +m4trace:configure.ac:14: -1- AC_SUBST_TRACE([DSYMUTIL]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^DSYMUTIL$]) +m4trace:configure.ac:14: -1- AC_SUBST([NMEDIT]) +m4trace:configure.ac:14: -1- AC_SUBST_TRACE([NMEDIT]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^NMEDIT$]) +m4trace:configure.ac:14: -1- AC_SUBST([LIPO]) +m4trace:configure.ac:14: -1- AC_SUBST_TRACE([LIPO]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^LIPO$]) +m4trace:configure.ac:14: -1- AC_SUBST([OTOOL]) +m4trace:configure.ac:14: -1- AC_SUBST_TRACE([OTOOL]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^OTOOL$]) +m4trace:configure.ac:14: -1- AC_SUBST([OTOOL64]) +m4trace:configure.ac:14: -1- AC_SUBST_TRACE([OTOOL64]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^OTOOL64$]) +m4trace:configure.ac:14: -1- AH_OUTPUT([HAVE_DLFCN_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_DLFCN_H]) +m4trace:configure.ac:14: -1- AC_SUBST([CPP]) +m4trace:configure.ac:14: -1- AC_SUBST_TRACE([CPP]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^CPP$]) +m4trace:configure.ac:14: -1- AC_SUBST([CPPFLAGS]) +m4trace:configure.ac:14: -1- AC_SUBST_TRACE([CPPFLAGS]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^CPPFLAGS$]) +m4trace:configure.ac:14: -1- AC_SUBST([CPP]) +m4trace:configure.ac:14: -1- AC_SUBST_TRACE([CPP]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^CPP$]) +m4trace:configure.ac:14: -1- AC_DEFINE_TRACE_LITERAL([STDC_HEADERS]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^STDC_HEADERS$]) +m4trace:configure.ac:14: -1- AH_OUTPUT([STDC_HEADERS], [/* Define to 1 if you have the ANSI C header files. */ +@%:@undef STDC_HEADERS]) +m4trace:configure.ac:14: -1- AH_OUTPUT([HAVE_SYS_TYPES_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_SYS_TYPES_H]) +m4trace:configure.ac:14: -1- AH_OUTPUT([HAVE_SYS_STAT_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_SYS_STAT_H]) +m4trace:configure.ac:14: -1- AH_OUTPUT([HAVE_STDLIB_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_STDLIB_H]) +m4trace:configure.ac:14: -1- AH_OUTPUT([HAVE_STRING_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_STRING_H]) +m4trace:configure.ac:14: -1- AH_OUTPUT([HAVE_MEMORY_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_MEMORY_H]) +m4trace:configure.ac:14: -1- AH_OUTPUT([HAVE_STRINGS_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_STRINGS_H]) +m4trace:configure.ac:14: -1- AH_OUTPUT([HAVE_INTTYPES_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_INTTYPES_H]) +m4trace:configure.ac:14: -1- AH_OUTPUT([HAVE_STDINT_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_STDINT_H]) +m4trace:configure.ac:14: -1- AH_OUTPUT([HAVE_UNISTD_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_UNISTD_H]) +m4trace:configure.ac:14: -1- AC_DEFINE_TRACE_LITERAL([HAVE_DLFCN_H]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^HAVE_DLFCN_H$]) +m4trace:configure.ac:14: -1- LT_SUPPORTED_TAG([CXX]) +m4trace:configure.ac:14: -1- AC_SUBST([CXX]) +m4trace:configure.ac:14: -1- AC_SUBST_TRACE([CXX]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^CXX$]) +m4trace:configure.ac:14: -1- AC_SUBST([CXXFLAGS]) +m4trace:configure.ac:14: -1- AC_SUBST_TRACE([CXXFLAGS]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^CXXFLAGS$]) +m4trace:configure.ac:14: -1- AC_SUBST([LDFLAGS]) +m4trace:configure.ac:14: -1- AC_SUBST_TRACE([LDFLAGS]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^LDFLAGS$]) +m4trace:configure.ac:14: -1- AC_SUBST([LIBS]) +m4trace:configure.ac:14: -1- AC_SUBST_TRACE([LIBS]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^LIBS$]) +m4trace:configure.ac:14: -1- AC_SUBST([CPPFLAGS]) +m4trace:configure.ac:14: -1- AC_SUBST_TRACE([CPPFLAGS]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^CPPFLAGS$]) +m4trace:configure.ac:14: -1- AC_SUBST([CXX]) +m4trace:configure.ac:14: -1- AC_SUBST_TRACE([CXX]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^CXX$]) +m4trace:configure.ac:14: -1- AC_SUBST([ac_ct_CXX]) +m4trace:configure.ac:14: -1- AC_SUBST_TRACE([ac_ct_CXX]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^ac_ct_CXX$]) +m4trace:configure.ac:14: -1- AC_SUBST([CXXDEPMODE], [depmode=$am_cv_CXX_dependencies_compiler_type]) +m4trace:configure.ac:14: -1- AC_SUBST_TRACE([CXXDEPMODE]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^CXXDEPMODE$]) +m4trace:configure.ac:14: -1- AM_CONDITIONAL([am__fastdepCXX], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CXX_dependencies_compiler_type" = gcc3]) +m4trace:configure.ac:14: -1- AC_SUBST([am__fastdepCXX_TRUE]) +m4trace:configure.ac:14: -1- AC_SUBST_TRACE([am__fastdepCXX_TRUE]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^am__fastdepCXX_TRUE$]) +m4trace:configure.ac:14: -1- AC_SUBST([am__fastdepCXX_FALSE]) +m4trace:configure.ac:14: -1- AC_SUBST_TRACE([am__fastdepCXX_FALSE]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^am__fastdepCXX_FALSE$]) +m4trace:configure.ac:14: -1- _AM_SUBST_NOTMAKE([am__fastdepCXX_TRUE]) +m4trace:configure.ac:14: -1- _AM_SUBST_NOTMAKE([am__fastdepCXX_FALSE]) +m4trace:configure.ac:14: -1- AC_SUBST([CXXCPP]) +m4trace:configure.ac:14: -1- AC_SUBST_TRACE([CXXCPP]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^CXXCPP$]) +m4trace:configure.ac:14: -1- AC_SUBST([CPPFLAGS]) +m4trace:configure.ac:14: -1- AC_SUBST_TRACE([CPPFLAGS]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^CPPFLAGS$]) +m4trace:configure.ac:14: -1- AC_SUBST([CXXCPP]) +m4trace:configure.ac:14: -1- AC_SUBST_TRACE([CXXCPP]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^CXXCPP$]) +m4trace:configure.ac:14: -1- AC_SUBST([LD]) +m4trace:configure.ac:14: -1- AC_SUBST_TRACE([LD]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^LD$]) +m4trace:configure.ac:15: -1- AC_SUBST([LN_S], [$as_ln_s]) +m4trace:configure.ac:15: -1- AC_SUBST_TRACE([LN_S]) +m4trace:configure.ac:15: -1- m4_pattern_allow([^LN_S$]) +m4trace:configure.ac:20: -1- AC_SUBST([JADE]) +m4trace:configure.ac:20: -1- AC_SUBST_TRACE([JADE]) +m4trace:configure.ac:20: -1- m4_pattern_allow([^JADE$]) +m4trace:configure.ac:22: -1- AC_SUBST([NSGMLS]) +m4trace:configure.ac:22: -1- AC_SUBST_TRACE([NSGMLS]) +m4trace:configure.ac:22: -1- m4_pattern_allow([^NSGMLS$]) +m4trace:configure.ac:22: -1- AC_SUBST([have_docbook]) +m4trace:configure.ac:22: -1- AC_SUBST_TRACE([have_docbook]) +m4trace:configure.ac:22: -1- m4_pattern_allow([^have_docbook$]) +m4trace:configure.ac:24: -1- AC_SUBST([DOCBOOKSTYLE]) +m4trace:configure.ac:24: -1- AC_SUBST_TRACE([DOCBOOKSTYLE]) +m4trace:configure.ac:24: -1- m4_pattern_allow([^DOCBOOKSTYLE$]) +m4trace:configure.ac:36: -1- AC_SUBST([DOCBOOKTARGETS]) +m4trace:configure.ac:36: -1- AC_SUBST_TRACE([DOCBOOKTARGETS]) +m4trace:configure.ac:36: -1- m4_pattern_allow([^DOCBOOKTARGETS$]) +m4trace:configure.ac:41: -1- AC_SUBST([DOXYGEN]) +m4trace:configure.ac:41: -1- AC_SUBST_TRACE([DOXYGEN]) +m4trace:configure.ac:41: -1- m4_pattern_allow([^DOXYGEN$]) +m4trace:configure.ac:42: -1- AC_SUBST([DOXYGEN]) +m4trace:configure.ac:42: -1- AC_SUBST_TRACE([DOXYGEN]) +m4trace:configure.ac:42: -1- m4_pattern_allow([^DOXYGEN$]) +m4trace:configure.ac:47: -1- AC_SUBST([DOT]) +m4trace:configure.ac:47: -1- AC_SUBST_TRACE([DOT]) +m4trace:configure.ac:47: -1- m4_pattern_allow([^DOT$]) +m4trace:configure.ac:48: -1- AC_SUBST([DOT]) +m4trace:configure.ac:48: -1- AC_SUBST_TRACE([DOT]) +m4trace:configure.ac:48: -1- m4_pattern_allow([^DOT$]) +m4trace:configure.ac:55: -1- AC_SUBST([HAVEDOT]) +m4trace:configure.ac:55: -1- AC_SUBST_TRACE([HAVEDOT]) +m4trace:configure.ac:55: -1- m4_pattern_allow([^HAVEDOT$]) +m4trace:configure.ac:56: -1- AC_SUBST([DOTPATH]) +m4trace:configure.ac:56: -1- AC_SUBST_TRACE([DOTPATH]) +m4trace:configure.ac:56: -1- m4_pattern_allow([^DOTPATH$]) +m4trace:configure.ac:61: -1- AC_SUBST([PERL]) +m4trace:configure.ac:61: -1- AC_SUBST_TRACE([PERL]) +m4trace:configure.ac:61: -1- m4_pattern_allow([^PERL$]) +m4trace:configure.ac:62: -1- AC_SUBST([PERL]) +m4trace:configure.ac:62: -1- AC_SUBST_TRACE([PERL]) +m4trace:configure.ac:62: -1- m4_pattern_allow([^PERL$]) +m4trace:configure.ac:72: -1- AC_SUBST([XMKMF]) +m4trace:configure.ac:72: -1- AC_SUBST_TRACE([XMKMF]) +m4trace:configure.ac:72: -1- m4_pattern_allow([^XMKMF$]) +m4trace:configure.ac:72: -1- AC_DEFINE_TRACE_LITERAL([X_DISPLAY_MISSING]) +m4trace:configure.ac:72: -1- m4_pattern_allow([^X_DISPLAY_MISSING$]) +m4trace:configure.ac:72: -1- AH_OUTPUT([X_DISPLAY_MISSING], [/* Define to 1 if the X Window System is missing or not being used. */ +@%:@undef X_DISPLAY_MISSING]) +m4trace:configure.ac:72: -1- AC_SUBST([X_CFLAGS]) +m4trace:configure.ac:72: -1- AC_SUBST_TRACE([X_CFLAGS]) +m4trace:configure.ac:72: -1- m4_pattern_allow([^X_CFLAGS$]) +m4trace:configure.ac:72: -1- AC_SUBST([X_PRE_LIBS]) +m4trace:configure.ac:72: -1- AC_SUBST_TRACE([X_PRE_LIBS]) +m4trace:configure.ac:72: -1- m4_pattern_allow([^X_PRE_LIBS$]) +m4trace:configure.ac:72: -1- AC_SUBST([X_LIBS]) +m4trace:configure.ac:72: -1- AC_SUBST_TRACE([X_LIBS]) +m4trace:configure.ac:72: -1- m4_pattern_allow([^X_LIBS$]) +m4trace:configure.ac:72: -1- AC_SUBST([X_EXTRA_LIBS]) +m4trace:configure.ac:72: -1- AC_SUBST_TRACE([X_EXTRA_LIBS]) +m4trace:configure.ac:72: -1- m4_pattern_allow([^X_EXTRA_LIBS$]) +m4trace:configure.ac:114: -1- AC_DEFINE_TRACE_LITERAL([X_DISPLAY_MISSING]) +m4trace:configure.ac:114: -1- m4_pattern_allow([^X_DISPLAY_MISSING$]) +m4trace:configure.ac:114: -1- AH_OUTPUT([X_DISPLAY_MISSING], [/* Define to 1 if the X Window System is missing or not being used. */ +@%:@undef X_DISPLAY_MISSING]) +m4trace:configure.ac:114: -1- AC_SUBST([X_CFLAGS]) +m4trace:configure.ac:114: -1- AC_SUBST_TRACE([X_CFLAGS]) +m4trace:configure.ac:114: -1- m4_pattern_allow([^X_CFLAGS$]) +m4trace:configure.ac:114: -1- AC_SUBST([X_PRE_LIBS]) +m4trace:configure.ac:114: -1- AC_SUBST_TRACE([X_PRE_LIBS]) +m4trace:configure.ac:114: -1- m4_pattern_allow([^X_PRE_LIBS$]) +m4trace:configure.ac:114: -1- AC_SUBST([X_LIBS]) +m4trace:configure.ac:114: -1- AC_SUBST_TRACE([X_LIBS]) +m4trace:configure.ac:114: -1- m4_pattern_allow([^X_LIBS$]) +m4trace:configure.ac:114: -1- AC_SUBST([X_EXTRA_LIBS]) +m4trace:configure.ac:114: -1- AC_SUBST_TRACE([X_EXTRA_LIBS]) +m4trace:configure.ac:114: -1- m4_pattern_allow([^X_EXTRA_LIBS$]) +m4trace:configure.ac:123: -1- _m4_warn([obsolete], [The macro `AC_LANG_SAVE' is obsolete. +You should run autoupdate.], [../../lib/autoconf/lang.m4:126: AC_LANG_SAVE is expanded from... +m4/alsa.m4:15: AM_PATH_ALSA is expanded from... +configure.ac:123: the top level]) +m4trace:configure.ac:123: -1- _m4_warn([obsolete], [The macro `AC_LANG_C' is obsolete. +You should run autoupdate.], [../../lib/autoconf/c.m4:73: AC_LANG_C is expanded from... +m4/alsa.m4:15: AM_PATH_ALSA is expanded from... +configure.ac:123: the top level]) +m4trace:configure.ac:123: -1- _m4_warn([obsolete], [The macro `AC_TRY_COMPILE' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:2581: AC_TRY_COMPILE is expanded from... +m4/alsa.m4:15: AM_PATH_ALSA is expanded from... +configure.ac:123: the top level]) +m4trace:configure.ac:123: -1- _m4_warn([obsolete], [The macro `AC_LANG_RESTORE' is obsolete. +You should run autoupdate.], [../../lib/autoconf/lang.m4:135: AC_LANG_RESTORE is expanded from... +m4/alsa.m4:15: AM_PATH_ALSA is expanded from... +configure.ac:123: the top level]) +m4trace:configure.ac:123: -1- _m4_warn([obsolete], [The macro `AC_LANG_SAVE' is obsolete. +You should run autoupdate.], [../../lib/autoconf/lang.m4:126: AC_LANG_SAVE is expanded from... +m4/alsa.m4:15: AM_PATH_ALSA is expanded from... +configure.ac:123: the top level]) +m4trace:configure.ac:123: -1- _m4_warn([obsolete], [The macro `AC_LANG_CPLUSPLUS' is obsolete. +You should run autoupdate.], [../../lib/autoconf/c.m4:252: AC_LANG_CPLUSPLUS is expanded from... +m4/alsa.m4:15: AM_PATH_ALSA is expanded from... +configure.ac:123: the top level]) +m4trace:configure.ac:123: -1- AH_OUTPUT([HAVE_LIBASOUND], [/* Define to 1 if you have the `asound\' library (-lasound). */ +@%:@undef HAVE_LIBASOUND]) +m4trace:configure.ac:123: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LIBASOUND]) +m4trace:configure.ac:123: -1- m4_pattern_allow([^HAVE_LIBASOUND$]) +m4trace:configure.ac:123: -1- _m4_warn([obsolete], [The macro `AC_LANG_RESTORE' is obsolete. +You should run autoupdate.], [../../lib/autoconf/lang.m4:135: AC_LANG_RESTORE is expanded from... +m4/alsa.m4:15: AM_PATH_ALSA is expanded from... +configure.ac:123: the top level]) +m4trace:configure.ac:123: -1- AC_SUBST([ALSA_CFLAGS]) +m4trace:configure.ac:123: -1- AC_SUBST_TRACE([ALSA_CFLAGS]) +m4trace:configure.ac:123: -1- m4_pattern_allow([^ALSA_CFLAGS$]) +m4trace:configure.ac:123: -1- AC_SUBST([ALSA_LIBS]) +m4trace:configure.ac:123: -1- AC_SUBST_TRACE([ALSA_LIBS]) +m4trace:configure.ac:123: -1- m4_pattern_allow([^ALSA_LIBS$]) +m4trace:configure.ac:152: -1- AM_CONDITIONAL([ENABLEFLUIDSYNTH], [test "$muse_enable_fluidlib" = "yes"]) +m4trace:configure.ac:152: -1- AC_SUBST([ENABLEFLUIDSYNTH_TRUE]) +m4trace:configure.ac:152: -1- AC_SUBST_TRACE([ENABLEFLUIDSYNTH_TRUE]) +m4trace:configure.ac:152: -1- m4_pattern_allow([^ENABLEFLUIDSYNTH_TRUE$]) +m4trace:configure.ac:152: -1- AC_SUBST([ENABLEFLUIDSYNTH_FALSE]) +m4trace:configure.ac:152: -1- AC_SUBST_TRACE([ENABLEFLUIDSYNTH_FALSE]) +m4trace:configure.ac:152: -1- m4_pattern_allow([^ENABLEFLUIDSYNTH_FALSE$]) +m4trace:configure.ac:152: -1- _AM_SUBST_NOTMAKE([ENABLEFLUIDSYNTH_TRUE]) +m4trace:configure.ac:152: -1- _AM_SUBST_NOTMAKE([ENABLEFLUIDSYNTH_FALSE]) +m4trace:configure.ac:153: -1- m4_pattern_forbid([^_?PKG_[A-Z_]+$]) +m4trace:configure.ac:153: -1- m4_pattern_allow([^PKG_CONFIG(_PATH)?$]) +m4trace:configure.ac:153: -1- AC_SUBST([PKG_CONFIG]) +m4trace:configure.ac:153: -1- AC_SUBST_TRACE([PKG_CONFIG]) +m4trace:configure.ac:153: -1- m4_pattern_allow([^PKG_CONFIG$]) +m4trace:configure.ac:153: -1- AC_SUBST([PKG_CONFIG]) +m4trace:configure.ac:153: -1- AC_SUBST_TRACE([PKG_CONFIG]) +m4trace:configure.ac:153: -1- m4_pattern_allow([^PKG_CONFIG$]) +m4trace:configure.ac:153: -1- AC_SUBST([Fluidsynth_CFLAGS]) +m4trace:configure.ac:153: -1- AC_SUBST_TRACE([Fluidsynth_CFLAGS]) +m4trace:configure.ac:153: -1- m4_pattern_allow([^Fluidsynth_CFLAGS$]) +m4trace:configure.ac:153: -1- AC_SUBST([Fluidsynth_LIBS]) +m4trace:configure.ac:153: -1- AC_SUBST_TRACE([Fluidsynth_LIBS]) +m4trace:configure.ac:153: -1- m4_pattern_allow([^Fluidsynth_LIBS$]) +m4trace:configure.ac:153: -1- AC_DEFINE_TRACE_LITERAL([ENABLEFLUIDSYNTH]) +m4trace:configure.ac:153: -1- m4_pattern_allow([^ENABLEFLUIDSYNTH$]) +m4trace:configure.ac:153: -1- AH_OUTPUT([ENABLEFLUIDSYNTH], [/* Compile fluidsynth */ +@%:@undef ENABLEFLUIDSYNTH]) +m4trace:configure.ac:158: -1- AC_SUBST([FLUIDSYNTHDIRS]) +m4trace:configure.ac:158: -1- AC_SUBST_TRACE([FLUIDSYNTHDIRS]) +m4trace:configure.ac:158: -1- m4_pattern_allow([^FLUIDSYNTHDIRS$]) +m4trace:configure.ac:159: -1- AC_SUBST([synth_fluidsynth]) +m4trace:configure.ac:159: -1- AC_SUBST_TRACE([synth_fluidsynth]) +m4trace:configure.ac:159: -1- m4_pattern_allow([^synth_fluidsynth$]) +m4trace:configure.ac:160: -1- AC_SUBST([synth_fluid]) +m4trace:configure.ac:160: -1- AC_SUBST_TRACE([synth_fluid]) +m4trace:configure.ac:160: -1- m4_pattern_allow([^synth_fluid$]) +m4trace:configure.ac:170: -1- AC_SUBST([SNDFILE_CFLAGS]) +m4trace:configure.ac:170: -1- AC_SUBST_TRACE([SNDFILE_CFLAGS]) +m4trace:configure.ac:170: -1- m4_pattern_allow([^SNDFILE_CFLAGS$]) +m4trace:configure.ac:170: -1- AC_SUBST([SNDFILE_LIBS]) +m4trace:configure.ac:170: -1- AC_SUBST_TRACE([SNDFILE_LIBS]) +m4trace:configure.ac:170: -1- m4_pattern_allow([^SNDFILE_LIBS$]) +m4trace:configure.ac:178: -1- AC_SUBST([SAMPLERATE_CFLAGS]) +m4trace:configure.ac:178: -1- AC_SUBST_TRACE([SAMPLERATE_CFLAGS]) +m4trace:configure.ac:178: -1- m4_pattern_allow([^SAMPLERATE_CFLAGS$]) +m4trace:configure.ac:178: -1- AC_SUBST([SAMPLERATE_LIBS]) +m4trace:configure.ac:178: -1- AC_SUBST_TRACE([SAMPLERATE_LIBS]) +m4trace:configure.ac:178: -1- m4_pattern_allow([^SAMPLERATE_LIBS$]) +m4trace:configure.ac:196: -1- AC_SUBST([UUID_CFLAGS]) +m4trace:configure.ac:196: -1- AC_SUBST_TRACE([UUID_CFLAGS]) +m4trace:configure.ac:196: -1- m4_pattern_allow([^UUID_CFLAGS$]) +m4trace:configure.ac:197: -1- AC_SUBST([UUID_LIBS]) +m4trace:configure.ac:197: -1- AC_SUBST_TRACE([UUID_LIBS]) +m4trace:configure.ac:197: -1- m4_pattern_allow([^UUID_LIBS$]) +m4trace:configure.ac:208: -1- AC_SUBST([JACK_CFLAGS]) +m4trace:configure.ac:208: -1- AC_SUBST_TRACE([JACK_CFLAGS]) +m4trace:configure.ac:208: -1- m4_pattern_allow([^JACK_CFLAGS$]) +m4trace:configure.ac:208: -1- AC_SUBST([JACK_LIBS]) +m4trace:configure.ac:208: -1- AC_SUBST_TRACE([JACK_LIBS]) +m4trace:configure.ac:208: -1- m4_pattern_allow([^JACK_LIBS$]) +m4trace:configure.ac:234: -1- AC_SUBST([LASH_CFLAGS]) +m4trace:configure.ac:234: -1- AC_SUBST_TRACE([LASH_CFLAGS]) +m4trace:configure.ac:234: -1- m4_pattern_allow([^LASH_CFLAGS$]) +m4trace:configure.ac:234: -1- AC_SUBST([LASH_LIBS]) +m4trace:configure.ac:234: -1- AC_SUBST_TRACE([LASH_LIBS]) +m4trace:configure.ac:234: -1- m4_pattern_allow([^LASH_LIBS$]) +m4trace:configure.ac:235: -1- AC_SUBST([LASH_CFLAGS]) +m4trace:configure.ac:235: -1- AC_SUBST_TRACE([LASH_CFLAGS]) +m4trace:configure.ac:235: -1- m4_pattern_allow([^LASH_CFLAGS$]) +m4trace:configure.ac:236: -1- AC_SUBST([LASH_LIBS]) +m4trace:configure.ac:236: -1- AC_SUBST_TRACE([LASH_LIBS]) +m4trace:configure.ac:236: -1- m4_pattern_allow([^LASH_LIBS$]) +m4trace:configure.ac:239: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LASH]) +m4trace:configure.ac:239: -1- m4_pattern_allow([^HAVE_LASH$]) +m4trace:configure.ac:239: -1- AH_OUTPUT([HAVE_LASH], [/* whether or not we are supporting lash */ +@%:@undef HAVE_LASH]) +m4trace:configure.ac:241: -1- AC_DEFINE_TRACE_LITERAL([LASH_VERSION]) +m4trace:configure.ac:241: -1- m4_pattern_allow([^LASH_VERSION$]) +m4trace:configure.ac:241: -1- AH_OUTPUT([LASH_VERSION], [/* The version of lash we\'re compiling against */ +@%:@undef LASH_VERSION]) +m4trace:configure.ac:247: -1- AM_CONDITIONAL([HAVE_LASH], [test "$LASH_FOUND" = "yes"]) +m4trace:configure.ac:247: -1- AC_SUBST([HAVE_LASH_TRUE]) +m4trace:configure.ac:247: -1- AC_SUBST_TRACE([HAVE_LASH_TRUE]) +m4trace:configure.ac:247: -1- m4_pattern_allow([^HAVE_LASH_TRUE$]) +m4trace:configure.ac:247: -1- AC_SUBST([HAVE_LASH_FALSE]) +m4trace:configure.ac:247: -1- AC_SUBST_TRACE([HAVE_LASH_FALSE]) +m4trace:configure.ac:247: -1- m4_pattern_allow([^HAVE_LASH_FALSE$]) +m4trace:configure.ac:247: -1- _AM_SUBST_NOTMAKE([HAVE_LASH_TRUE]) +m4trace:configure.ac:247: -1- _AM_SUBST_NOTMAKE([HAVE_LASH_FALSE]) +m4trace:configure.ac:260: -1- AC_DEFINE_TRACE_LITERAL([RTCAP]) +m4trace:configure.ac:260: -1- m4_pattern_allow([^RTCAP$]) +m4trace:configure.ac:260: -1- AH_OUTPUT([RTCAP], [/* Use givertcap */ +@%:@undef RTCAP]) +m4trace:configure.ac:279: -1- AM_CONDITIONAL([RTCAP], [test "$report_rtcap" = "yes"]) +m4trace:configure.ac:279: -1- AC_SUBST([RTCAP_TRUE]) +m4trace:configure.ac:279: -1- AC_SUBST_TRACE([RTCAP_TRUE]) +m4trace:configure.ac:279: -1- m4_pattern_allow([^RTCAP_TRUE$]) +m4trace:configure.ac:279: -1- AC_SUBST([RTCAP_FALSE]) +m4trace:configure.ac:279: -1- AC_SUBST_TRACE([RTCAP_FALSE]) +m4trace:configure.ac:279: -1- m4_pattern_allow([^RTCAP_FALSE$]) +m4trace:configure.ac:279: -1- _AM_SUBST_NOTMAKE([RTCAP_TRUE]) +m4trace:configure.ac:279: -1- _AM_SUBST_NOTMAKE([RTCAP_FALSE]) +m4trace:configure.ac:280: -1- AC_SUBST([GIVERTCAP]) +m4trace:configure.ac:280: -1- AC_SUBST_TRACE([GIVERTCAP]) +m4trace:configure.ac:280: -1- m4_pattern_allow([^GIVERTCAP$]) +m4trace:configure.ac:301: -1- AC_SUBST([SUIDINSTALL]) +m4trace:configure.ac:301: -1- AC_SUBST_TRACE([SUIDINSTALL]) +m4trace:configure.ac:301: -1- m4_pattern_allow([^SUIDINSTALL$]) +m4trace:configure.ac:321: -1- AC_SUBST([SUIDBUILD]) +m4trace:configure.ac:321: -1- AC_SUBST_TRACE([SUIDBUILD]) +m4trace:configure.ac:321: -1- m4_pattern_allow([^SUIDBUILD$]) +m4trace:configure.ac:344: -1- AC_SUBST([DOXYGEN_TREEVIEW]) +m4trace:configure.ac:344: -1- AC_SUBST_TRACE([DOXYGEN_TREEVIEW]) +m4trace:configure.ac:344: -1- m4_pattern_allow([^DOXYGEN_TREEVIEW$]) +m4trace:configure.ac:409: -1- AC_SUBST([PCH]) +m4trace:configure.ac:409: -1- AC_SUBST_TRACE([PCH]) +m4trace:configure.ac:409: -1- m4_pattern_allow([^PCH$]) +m4trace:configure.ac:409: -1- AC_DEFINE_TRACE_LITERAL([PCH]) +m4trace:configure.ac:409: -1- m4_pattern_allow([^PCH$]) +m4trace:configure.ac:409: -1- AH_OUTPUT([PCH], [/* whether or not we use precompiled headers */ +@%:@undef PCH]) +m4trace:configure.ac:425: -1- AM_CONDITIONAL([PCH], [test "$PCH" = "yes"]) +m4trace:configure.ac:425: -1- AC_SUBST([PCH_TRUE]) +m4trace:configure.ac:425: -1- AC_SUBST_TRACE([PCH_TRUE]) +m4trace:configure.ac:425: -1- m4_pattern_allow([^PCH_TRUE$]) +m4trace:configure.ac:425: -1- AC_SUBST([PCH_FALSE]) +m4trace:configure.ac:425: -1- AC_SUBST_TRACE([PCH_FALSE]) +m4trace:configure.ac:425: -1- m4_pattern_allow([^PCH_FALSE$]) +m4trace:configure.ac:425: -1- _AM_SUBST_NOTMAKE([PCH_TRUE]) +m4trace:configure.ac:425: -1- _AM_SUBST_NOTMAKE([PCH_FALSE]) +m4trace:configure.ac:452: -1- AC_SUBST([USE_SSE]) +m4trace:configure.ac:452: -1- AC_SUBST_TRACE([USE_SSE]) +m4trace:configure.ac:452: -1- m4_pattern_allow([^USE_SSE$]) +m4trace:configure.ac:452: -1- AC_DEFINE_TRACE_LITERAL([USE_SSE]) +m4trace:configure.ac:452: -1- m4_pattern_allow([^USE_SSE$]) +m4trace:configure.ac:452: -1- AH_OUTPUT([USE_SSE], [/* whether or not to enable SSE */ +@%:@undef USE_SSE]) +m4trace:configure.ac:469: -1- AM_CONDITIONAL([USE_SSE], [test "$USE_SSE" = "yes"]) +m4trace:configure.ac:469: -1- AC_SUBST([USE_SSE_TRUE]) +m4trace:configure.ac:469: -1- AC_SUBST_TRACE([USE_SSE_TRUE]) +m4trace:configure.ac:469: -1- m4_pattern_allow([^USE_SSE_TRUE$]) +m4trace:configure.ac:469: -1- AC_SUBST([USE_SSE_FALSE]) +m4trace:configure.ac:469: -1- AC_SUBST_TRACE([USE_SSE_FALSE]) +m4trace:configure.ac:469: -1- m4_pattern_allow([^USE_SSE_FALSE$]) +m4trace:configure.ac:469: -1- _AM_SUBST_NOTMAKE([USE_SSE_TRUE]) +m4trace:configure.ac:469: -1- _AM_SUBST_NOTMAKE([USE_SSE_FALSE]) +m4trace:configure.ac:502: -1- AC_SUBST([PYTHON]) +m4trace:configure.ac:502: -1- AC_SUBST_TRACE([PYTHON]) +m4trace:configure.ac:502: -1- m4_pattern_allow([^PYTHON$]) +m4trace:configure.ac:502: -1- AC_SUBST([PYTHON_VERSION], [$am_cv_python_version]) +m4trace:configure.ac:502: -1- AC_SUBST_TRACE([PYTHON_VERSION]) +m4trace:configure.ac:502: -1- m4_pattern_allow([^PYTHON_VERSION$]) +m4trace:configure.ac:502: -1- AC_SUBST([PYTHON_PREFIX], ['${prefix}']) +m4trace:configure.ac:502: -1- AC_SUBST_TRACE([PYTHON_PREFIX]) +m4trace:configure.ac:502: -1- m4_pattern_allow([^PYTHON_PREFIX$]) +m4trace:configure.ac:502: -1- AC_SUBST([PYTHON_EXEC_PREFIX], ['${exec_prefix}']) +m4trace:configure.ac:502: -1- AC_SUBST_TRACE([PYTHON_EXEC_PREFIX]) +m4trace:configure.ac:502: -1- m4_pattern_allow([^PYTHON_EXEC_PREFIX$]) +m4trace:configure.ac:502: -1- AC_SUBST([PYTHON_PLATFORM], [$am_cv_python_platform]) +m4trace:configure.ac:502: -1- AC_SUBST_TRACE([PYTHON_PLATFORM]) +m4trace:configure.ac:502: -1- m4_pattern_allow([^PYTHON_PLATFORM$]) +m4trace:configure.ac:502: -1- AC_SUBST([pythondir], [$am_cv_python_pythondir]) +m4trace:configure.ac:502: -1- AC_SUBST_TRACE([pythondir]) +m4trace:configure.ac:502: -1- m4_pattern_allow([^pythondir$]) +m4trace:configure.ac:502: -1- AC_SUBST([pkgpythondir], [\${pythondir}/$PACKAGE]) +m4trace:configure.ac:502: -1- AC_SUBST_TRACE([pkgpythondir]) +m4trace:configure.ac:502: -1- m4_pattern_allow([^pkgpythondir$]) +m4trace:configure.ac:502: -1- AC_SUBST([pyexecdir], [$am_cv_python_pyexecdir]) +m4trace:configure.ac:502: -1- AC_SUBST_TRACE([pyexecdir]) +m4trace:configure.ac:502: -1- m4_pattern_allow([^pyexecdir$]) +m4trace:configure.ac:502: -1- AC_SUBST([pkgpyexecdir], [\${pyexecdir}/$PACKAGE]) +m4trace:configure.ac:502: -1- AC_SUBST_TRACE([pkgpyexecdir]) +m4trace:configure.ac:502: -1- m4_pattern_allow([^pkgpyexecdir$]) +m4trace:configure.ac:539: -1- AM_CONDITIONAL([ENABLE_PYTHON], [test "$enable_python" = "yes"]) +m4trace:configure.ac:539: -1- AC_SUBST([ENABLE_PYTHON_TRUE]) +m4trace:configure.ac:539: -1- AC_SUBST_TRACE([ENABLE_PYTHON_TRUE]) +m4trace:configure.ac:539: -1- m4_pattern_allow([^ENABLE_PYTHON_TRUE$]) +m4trace:configure.ac:539: -1- AC_SUBST([ENABLE_PYTHON_FALSE]) +m4trace:configure.ac:539: -1- AC_SUBST_TRACE([ENABLE_PYTHON_FALSE]) +m4trace:configure.ac:539: -1- m4_pattern_allow([^ENABLE_PYTHON_FALSE$]) +m4trace:configure.ac:539: -1- _AM_SUBST_NOTMAKE([ENABLE_PYTHON_TRUE]) +m4trace:configure.ac:539: -1- _AM_SUBST_NOTMAKE([ENABLE_PYTHON_FALSE]) +m4trace:configure.ac:540: -1- AC_SUBST([PYTHON_VERSION]) +m4trace:configure.ac:540: -1- AC_SUBST_TRACE([PYTHON_VERSION]) +m4trace:configure.ac:540: -1- m4_pattern_allow([^PYTHON_VERSION$]) +m4trace:configure.ac:541: -1- AC_SUBST([PYTHON_INCLUDES]) +m4trace:configure.ac:541: -1- AC_SUBST_TRACE([PYTHON_INCLUDES]) +m4trace:configure.ac:541: -1- m4_pattern_allow([^PYTHON_INCLUDES$]) +m4trace:configure.ac:542: -1- AC_SUBST([PYTHON_LIB]) +m4trace:configure.ac:542: -1- AC_SUBST_TRACE([PYTHON_LIB]) +m4trace:configure.ac:542: -1- m4_pattern_allow([^PYTHON_LIB$]) +m4trace:configure.ac:583: -1- AC_SUBST([FST_CFLAGS]) +m4trace:configure.ac:583: -1- AC_SUBST_TRACE([FST_CFLAGS]) +m4trace:configure.ac:583: -1- m4_pattern_allow([^FST_CFLAGS$]) +m4trace:configure.ac:583: -1- AC_SUBST([FST_LIBS]) +m4trace:configure.ac:583: -1- AC_SUBST_TRACE([FST_LIBS]) +m4trace:configure.ac:583: -1- m4_pattern_allow([^FST_LIBS$]) +m4trace:configure.ac:591: -1- AC_DEFINE_TRACE_LITERAL([VST_SUPPORT]) +m4trace:configure.ac:591: -1- m4_pattern_allow([^VST_SUPPORT$]) +m4trace:configure.ac:591: -1- AH_OUTPUT([VST_SUPPORT], [/* support for VST/win plugins */ +@%:@undef VST_SUPPORT]) +m4trace:configure.ac:594: -1- AM_CONDITIONAL([VST_SUPPORT], [test x$vst_possible = xyes -a x$vst_requested = xyes]) +m4trace:configure.ac:594: -1- AC_SUBST([VST_SUPPORT_TRUE]) +m4trace:configure.ac:594: -1- AC_SUBST_TRACE([VST_SUPPORT_TRUE]) +m4trace:configure.ac:594: -1- m4_pattern_allow([^VST_SUPPORT_TRUE$]) +m4trace:configure.ac:594: -1- AC_SUBST([VST_SUPPORT_FALSE]) +m4trace:configure.ac:594: -1- AC_SUBST_TRACE([VST_SUPPORT_FALSE]) +m4trace:configure.ac:594: -1- m4_pattern_allow([^VST_SUPPORT_FALSE$]) +m4trace:configure.ac:594: -1- _AM_SUBST_NOTMAKE([VST_SUPPORT_TRUE]) +m4trace:configure.ac:594: -1- _AM_SUBST_NOTMAKE([VST_SUPPORT_FALSE]) +m4trace:configure.ac:616: -1- AC_SUBST([LO_CFLAGS]) +m4trace:configure.ac:616: -1- AC_SUBST_TRACE([LO_CFLAGS]) +m4trace:configure.ac:616: -1- m4_pattern_allow([^LO_CFLAGS$]) +m4trace:configure.ac:616: -1- AC_SUBST([LO_LIBS]) +m4trace:configure.ac:616: -1- AC_SUBST_TRACE([LO_LIBS]) +m4trace:configure.ac:616: -1- m4_pattern_allow([^LO_LIBS$]) +m4trace:configure.ac:627: -1- AC_SUBST([LO_CFLAGS]) +m4trace:configure.ac:627: -1- AC_SUBST_TRACE([LO_CFLAGS]) +m4trace:configure.ac:627: -1- m4_pattern_allow([^LO_CFLAGS$]) +m4trace:configure.ac:628: -1- AC_SUBST([LO_LIBS]) +m4trace:configure.ac:628: -1- AC_SUBST_TRACE([LO_LIBS]) +m4trace:configure.ac:628: -1- m4_pattern_allow([^LO_LIBS$]) +m4trace:configure.ac:629: -1- AC_DEFINE_TRACE_LITERAL([OSC_SUPPORT]) +m4trace:configure.ac:629: -1- m4_pattern_allow([^OSC_SUPPORT$]) +m4trace:configure.ac:629: -1- AH_OUTPUT([OSC_SUPPORT], [/* support for OSC */ +@%:@undef OSC_SUPPORT]) +m4trace:configure.ac:632: -1- AM_CONDITIONAL([OSC_SUPPORT], [test x$LO_LIB_FOUND = xyes]) +m4trace:configure.ac:632: -1- AC_SUBST([OSC_SUPPORT_TRUE]) +m4trace:configure.ac:632: -1- AC_SUBST_TRACE([OSC_SUPPORT_TRUE]) +m4trace:configure.ac:632: -1- m4_pattern_allow([^OSC_SUPPORT_TRUE$]) +m4trace:configure.ac:632: -1- AC_SUBST([OSC_SUPPORT_FALSE]) +m4trace:configure.ac:632: -1- AC_SUBST_TRACE([OSC_SUPPORT_FALSE]) +m4trace:configure.ac:632: -1- m4_pattern_allow([^OSC_SUPPORT_FALSE$]) +m4trace:configure.ac:632: -1- _AM_SUBST_NOTMAKE([OSC_SUPPORT_TRUE]) +m4trace:configure.ac:632: -1- _AM_SUBST_NOTMAKE([OSC_SUPPORT_FALSE]) +m4trace:configure.ac:686: -1- AC_DEFINE_TRACE_LITERAL([DSSI_SUPPORT]) +m4trace:configure.ac:686: -1- m4_pattern_allow([^DSSI_SUPPORT$]) +m4trace:configure.ac:686: -1- AH_OUTPUT([DSSI_SUPPORT], [/* support for DSSI + DSSI-Vst plugins */ +@%:@undef DSSI_SUPPORT]) +m4trace:configure.ac:690: -1- AM_CONDITIONAL([DSSI_SUPPORT], [test x$DSSI_FOUND = xyes]) +m4trace:configure.ac:690: -1- AC_SUBST([DSSI_SUPPORT_TRUE]) +m4trace:configure.ac:690: -1- AC_SUBST_TRACE([DSSI_SUPPORT_TRUE]) +m4trace:configure.ac:690: -1- m4_pattern_allow([^DSSI_SUPPORT_TRUE$]) +m4trace:configure.ac:690: -1- AC_SUBST([DSSI_SUPPORT_FALSE]) +m4trace:configure.ac:690: -1- AC_SUBST_TRACE([DSSI_SUPPORT_FALSE]) +m4trace:configure.ac:690: -1- m4_pattern_allow([^DSSI_SUPPORT_FALSE$]) +m4trace:configure.ac:690: -1- _AM_SUBST_NOTMAKE([DSSI_SUPPORT_TRUE]) +m4trace:configure.ac:690: -1- _AM_SUBST_NOTMAKE([DSSI_SUPPORT_FALSE]) +m4trace:configure.ac:707: -1- AC_DEFINE_TRACE_LITERAL([HAVE_AUDIO]) +m4trace:configure.ac:707: -1- m4_pattern_allow([^HAVE_AUDIO$]) +m4trace:configure.ac:707: -1- AH_OUTPUT([HAVE_AUDIO], [/* Make audio-specific code */ +@%:@undef HAVE_AUDIO]) +m4trace:configure.ac:708: -1- AM_CONDITIONAL([HAVE_AUDIO], [test "yes" = "yes"]) +m4trace:configure.ac:708: -1- AC_SUBST([HAVE_AUDIO_TRUE]) +m4trace:configure.ac:708: -1- AC_SUBST_TRACE([HAVE_AUDIO_TRUE]) +m4trace:configure.ac:708: -1- m4_pattern_allow([^HAVE_AUDIO_TRUE$]) +m4trace:configure.ac:708: -1- AC_SUBST([HAVE_AUDIO_FALSE]) +m4trace:configure.ac:708: -1- AC_SUBST_TRACE([HAVE_AUDIO_FALSE]) +m4trace:configure.ac:708: -1- m4_pattern_allow([^HAVE_AUDIO_FALSE$]) +m4trace:configure.ac:708: -1- _AM_SUBST_NOTMAKE([HAVE_AUDIO_TRUE]) +m4trace:configure.ac:708: -1- _AM_SUBST_NOTMAKE([HAVE_AUDIO_FALSE]) +m4trace:configure.ac:709: -1- AC_SUBST([MUSECXXFLAGS]) +m4trace:configure.ac:709: -1- AC_SUBST_TRACE([MUSECXXFLAGS]) +m4trace:configure.ac:709: -1- m4_pattern_allow([^MUSECXXFLAGS$]) +m4trace:configure.ac:710: -1- AC_SUBST([QTDIR_INC]) +m4trace:configure.ac:710: -1- AC_SUBST_TRACE([QTDIR_INC]) +m4trace:configure.ac:710: -1- m4_pattern_allow([^QTDIR_INC$]) +m4trace:configure.ac:711: -1- AC_SUBST([QT_LIBS]) +m4trace:configure.ac:711: -1- AC_SUBST_TRACE([QT_LIBS]) +m4trace:configure.ac:711: -1- m4_pattern_allow([^QT_LIBS$]) +m4trace:configure.ac:712: -1- AC_SUBST([QTDIR_BIN]) +m4trace:configure.ac:712: -1- AC_SUBST_TRACE([QTDIR_BIN]) +m4trace:configure.ac:712: -1- m4_pattern_allow([^QTDIR_BIN$]) +m4trace:configure.ac:720: -1- AC_CONFIG_FILES([ +Makefile +m4/Makefile +al/Makefile +doc/Makefile +xpm/Makefile +demos/Makefile +grepmidi/Makefile +packaging/Makefile +muse/Makefile +muse/widgets/Makefile +muse/master/Makefile +muse/midiedit/Makefile +muse/arranger/Makefile +muse/liste/Makefile +muse/driver/Makefile +muse/waveedit/Makefile +muse/ctrl/Makefile +muse/instruments/Makefile +muse/mixer/Makefile +muse/cliplist/Makefile +muse/marker/Makefile +muse/mplugins/Makefile +muse/remote/Makefile +share/Makefile +share/drummaps/Makefile +share/html/Makefile +share/locale/Makefile +share/wallpapers/Makefile +share/instruments/Makefile +share/plugins/Makefile +share/templates/Makefile +share/pybridge/Makefile +share/scripts/Makefile +synti/Makefile +synti/libsynti/Makefile +synti/fluidsynth/Makefile +synti/fluid/Makefile +synti/organ/Makefile +synti/s1/Makefile +synti/vam/Makefile +synti/deicsonze/Makefile +synti/simpledrums/Makefile +lib/Makefile +lib/synthi/Makefile +lib/plugins/Makefile +plugins/Makefile +plugins/freeverb/Makefile +plugins/pandelay/Makefile +plugins/doublechorus/Makefile +Doxyfile +utils/Makefile +]) +m4trace:configure.ac:720: -1- _m4_warn([obsolete], [AC_OUTPUT should be used without arguments. +You should run autoupdate.], []) +m4trace:configure.ac:720: -1- AC_SUBST([LIB@&t@OBJS], [$ac_libobjs]) +m4trace:configure.ac:720: -1- AC_SUBST_TRACE([LIB@&t@OBJS]) +m4trace:configure.ac:720: -1- m4_pattern_allow([^LIB@&t@OBJS$]) +m4trace:configure.ac:720: -1- AC_SUBST([LTLIBOBJS], [$ac_ltlibobjs]) +m4trace:configure.ac:720: -1- AC_SUBST_TRACE([LTLIBOBJS]) +m4trace:configure.ac:720: -1- m4_pattern_allow([^LTLIBOBJS$]) +m4trace:configure.ac:720: -1- AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"]) +m4trace:configure.ac:720: -1- AC_SUBST([am__EXEEXT_TRUE]) +m4trace:configure.ac:720: -1- AC_SUBST_TRACE([am__EXEEXT_TRUE]) +m4trace:configure.ac:720: -1- m4_pattern_allow([^am__EXEEXT_TRUE$]) +m4trace:configure.ac:720: -1- AC_SUBST([am__EXEEXT_FALSE]) +m4trace:configure.ac:720: -1- AC_SUBST_TRACE([am__EXEEXT_FALSE]) +m4trace:configure.ac:720: -1- m4_pattern_allow([^am__EXEEXT_FALSE$]) +m4trace:configure.ac:720: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_TRUE]) +m4trace:configure.ac:720: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_FALSE]) +m4trace:configure.ac:720: -1- AC_SUBST_TRACE([top_builddir]) +m4trace:configure.ac:720: -1- AC_SUBST_TRACE([top_build_prefix]) +m4trace:configure.ac:720: -1- AC_SUBST_TRACE([srcdir]) +m4trace:configure.ac:720: -1- AC_SUBST_TRACE([abs_srcdir]) +m4trace:configure.ac:720: -1- AC_SUBST_TRACE([top_srcdir]) +m4trace:configure.ac:720: -1- AC_SUBST_TRACE([abs_top_srcdir]) +m4trace:configure.ac:720: -1- AC_SUBST_TRACE([builddir]) +m4trace:configure.ac:720: -1- AC_SUBST_TRACE([abs_builddir]) +m4trace:configure.ac:720: -1- AC_SUBST_TRACE([abs_top_builddir]) +m4trace:configure.ac:720: -1- AC_SUBST_TRACE([INSTALL]) +m4trace:configure.ac:720: -1- AC_SUBST_TRACE([MKDIR_P]) +m4trace:configure.ac:720: -1- AC_REQUIRE_AUX_FILE([ltmain.sh]) diff --git a/muse2/autom4te.cache/traces.2 b/muse2/autom4te.cache/traces.2 new file mode 100644 index 00000000..21d0d3d4 --- /dev/null +++ b/muse2/autom4te.cache/traces.2 @@ -0,0 +1,3053 @@ +m4trace:/usr/share/aclocal/argz.m4:12: -1- AC_DEFUN([gl_FUNC_ARGZ], [gl_PREREQ_ARGZ + +AC_CHECK_HEADERS([argz.h], [], [], [AC_INCLUDES_DEFAULT]) + +AC_CHECK_TYPES([error_t], + [], + [AC_DEFINE([error_t], [int], + [Define to a type to use for `error_t' if it is not otherwise available.]) + AC_DEFINE([__error_t_defined], [1], [Define so that glibc/gnulib argp.h + does not typedef error_t.])], + [#if defined(HAVE_ARGZ_H) +# include +#endif]) + +ARGZ_H= +AC_CHECK_FUNCS([argz_add argz_append argz_count argz_create_sep argz_insert \ + argz_next argz_stringify], [], [ARGZ_H=argz.h; AC_LIBOBJ([argz])]) + +dnl if have system argz functions, allow forced use of +dnl libltdl-supplied implementation (and default to do so +dnl on "known bad" systems). Could use a runtime check, but +dnl (a) detecting malloc issues is notoriously unreliable +dnl (b) only known system that declares argz functions, +dnl provides them, yet they are broken, is cygwin +dnl releases prior to 16-Mar-2007 (1.5.24 and earlier) +dnl So, it's more straightforward simply to special case +dnl this for known bad systems. +AS_IF([test -z "$ARGZ_H"], + [AC_CACHE_CHECK( + [if argz actually works], + [lt_cv_sys_argz_works], + [[case $host_os in #( + *cygwin*) + lt_cv_sys_argz_works=no + if test "$cross_compiling" != no; then + lt_cv_sys_argz_works="guessing no" + else + lt_sed_extract_leading_digits='s/^\([0-9\.]*\).*/\1/' + save_IFS=$IFS + IFS=-. + set x `uname -r | sed -e "$lt_sed_extract_leading_digits"` + IFS=$save_IFS + lt_os_major=${2-0} + lt_os_minor=${3-0} + lt_os_micro=${4-0} + if test "$lt_os_major" -gt 1 \ + || { test "$lt_os_major" -eq 1 \ + && { test "$lt_os_minor" -gt 5 \ + || { test "$lt_os_minor" -eq 5 \ + && test "$lt_os_micro" -gt 24; }; }; }; then + lt_cv_sys_argz_works=yes + fi + fi + ;; #( + *) lt_cv_sys_argz_works=yes ;; + esac]]) + AS_IF([test $lt_cv_sys_argz_works = yes], + [AC_DEFINE([HAVE_WORKING_ARGZ], 1, + [This value is set to 1 to indicate that the system argz facility works])], + [ARGZ_H=argz.h + AC_LIBOBJ([argz])])]) + +AC_SUBST([ARGZ_H]) +]) +m4trace:/usr/share/aclocal/argz.m4:79: -1- AC_DEFUN([gl_PREREQ_ARGZ], [:]) +m4trace:/usr/share/aclocal/ltdl.m4:16: -1- AC_DEFUN([LT_CONFIG_LTDL_DIR], [AC_BEFORE([$0], [LTDL_INIT]) +_$0($*) +]) +m4trace:/usr/share/aclocal/ltdl.m4:68: -1- AC_DEFUN([LTDL_CONVENIENCE], [AC_BEFORE([$0], [LTDL_INIT])dnl +dnl Although the argument is deprecated and no longer documented, +dnl LTDL_CONVENIENCE used to take a DIRECTORY orgument, if we have one +dnl here make sure it is the same as any other declaration of libltdl's +dnl location! This also ensures lt_ltdl_dir is set when configure.ac is +dnl not yet using an explicit LT_CONFIG_LTDL_DIR. +m4_ifval([$1], [_LT_CONFIG_LTDL_DIR([$1])])dnl +_$0() +]) +m4trace:/usr/share/aclocal/ltdl.m4:81: -1- AU_DEFUN([AC_LIBLTDL_CONVENIENCE], [_LT_CONFIG_LTDL_DIR([m4_default([$1], [libltdl])]) +_LTDL_CONVENIENCE]) +m4trace:/usr/share/aclocal/ltdl.m4:81: -1- AC_DEFUN([AC_LIBLTDL_CONVENIENCE], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBLTDL_CONVENIENCE' is obsolete. +You should run autoupdate.])dnl +_LT_CONFIG_LTDL_DIR([m4_default([$1], [libltdl])]) +_LTDL_CONVENIENCE]) +m4trace:/usr/share/aclocal/ltdl.m4:124: -1- AC_DEFUN([LTDL_INSTALLABLE], [AC_BEFORE([$0], [LTDL_INIT])dnl +dnl Although the argument is deprecated and no longer documented, +dnl LTDL_INSTALLABLE used to take a DIRECTORY orgument, if we have one +dnl here make sure it is the same as any other declaration of libltdl's +dnl location! This also ensures lt_ltdl_dir is set when configure.ac is +dnl not yet using an explicit LT_CONFIG_LTDL_DIR. +m4_ifval([$1], [_LT_CONFIG_LTDL_DIR([$1])])dnl +_$0() +]) +m4trace:/usr/share/aclocal/ltdl.m4:137: -1- AU_DEFUN([AC_LIBLTDL_INSTALLABLE], [_LT_CONFIG_LTDL_DIR([m4_default([$1], [libltdl])]) +_LTDL_INSTALLABLE]) +m4trace:/usr/share/aclocal/ltdl.m4:137: -1- AC_DEFUN([AC_LIBLTDL_INSTALLABLE], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBLTDL_INSTALLABLE' is obsolete. +You should run autoupdate.])dnl +_LT_CONFIG_LTDL_DIR([m4_default([$1], [libltdl])]) +_LTDL_INSTALLABLE]) +m4trace:/usr/share/aclocal/ltdl.m4:213: -1- AC_DEFUN([_LT_LIBOBJ], [ + m4_pattern_allow([^_LT_LIBOBJS$]) + _LT_LIBOBJS="$_LT_LIBOBJS $1.$ac_objext" +]) +m4trace:/usr/share/aclocal/ltdl.m4:226: -1- AC_DEFUN([LTDL_INIT], [dnl Parse OPTIONS +_LT_SET_OPTIONS([$0], [$1]) + +dnl We need to keep our own list of libobjs separate from our parent project, +dnl and the easiest way to do that is redefine the AC_LIBOBJs macro while +dnl we look for our own LIBOBJs. +m4_pushdef([AC_LIBOBJ], m4_defn([_LT_LIBOBJ])) +m4_pushdef([AC_LIBSOURCES]) + +dnl If not otherwise defined, default to the 1.5.x compatible subproject mode: +m4_if(_LTDL_MODE, [], + [m4_define([_LTDL_MODE], m4_default([$2], [subproject])) + m4_if([-1], [m4_bregexp(_LTDL_MODE, [\(subproject\|\(non\)?recursive\)])], + [m4_fatal([unknown libltdl mode: ]_LTDL_MODE)])]) + +AC_ARG_WITH([included_ltdl], + [AS_HELP_STRING([--with-included-ltdl], + [use the GNU ltdl sources included here])]) + +if test "x$with_included_ltdl" != xyes; then + # We are not being forced to use the included libltdl sources, so + # decide whether there is a useful installed version we can use. + AC_CHECK_HEADER([ltdl.h], + [AC_CHECK_DECL([lt_dlinterface_register], + [AC_CHECK_LIB([ltdl], [lt_dladvise_preload], + [with_included_ltdl=no], + [with_included_ltdl=yes])], + [with_included_ltdl=yes], + [AC_INCLUDES_DEFAULT + #include ])], + [with_included_ltdl=yes], + [AC_INCLUDES_DEFAULT] + ) +fi + +dnl If neither LT_CONFIG_LTDL_DIR, LTDL_CONVENIENCE nor LTDL_INSTALLABLE +dnl was called yet, then for old times' sake, we assume libltdl is in an +dnl eponymous directory: +AC_PROVIDE_IFELSE([LT_CONFIG_LTDL_DIR], [], [_LT_CONFIG_LTDL_DIR([libltdl])]) + +AC_ARG_WITH([ltdl_include], + [AS_HELP_STRING([--with-ltdl-include=DIR], + [use the ltdl headers installed in DIR])]) + +if test -n "$with_ltdl_include"; then + if test -f "$with_ltdl_include/ltdl.h"; then : + else + AC_MSG_ERROR([invalid ltdl include directory: `$with_ltdl_include']) + fi +else + with_ltdl_include=no +fi + +AC_ARG_WITH([ltdl_lib], + [AS_HELP_STRING([--with-ltdl-lib=DIR], + [use the libltdl.la installed in DIR])]) + +if test -n "$with_ltdl_lib"; then + if test -f "$with_ltdl_lib/libltdl.la"; then : + else + AC_MSG_ERROR([invalid ltdl library directory: `$with_ltdl_lib']) + fi +else + with_ltdl_lib=no +fi + +case ,$with_included_ltdl,$with_ltdl_include,$with_ltdl_lib, in + ,yes,no,no,) + m4_case(m4_default(_LTDL_TYPE, [convenience]), + [convenience], [_LTDL_CONVENIENCE], + [installable], [_LTDL_INSTALLABLE], + [m4_fatal([unknown libltdl build type: ]_LTDL_TYPE)]) + ;; + ,no,no,no,) + # If the included ltdl is not to be used, then use the + # preinstalled libltdl we found. + AC_DEFINE([HAVE_LTDL], [1], + [Define this if a modern libltdl is already installed]) + LIBLTDL=-lltdl + LTDLDEPS= + LTDLINCL= + ;; + ,no*,no,*) + AC_MSG_ERROR([`--with-ltdl-include' and `--with-ltdl-lib' options must be used together]) + ;; + *) with_included_ltdl=no + LIBLTDL="-L$with_ltdl_lib -lltdl" + LTDLDEPS= + LTDLINCL="-I$with_ltdl_include" + ;; +esac +INCLTDL="$LTDLINCL" + +# Report our decision... +AC_MSG_CHECKING([where to find libltdl headers]) +AC_MSG_RESULT([$LTDLINCL]) +AC_MSG_CHECKING([where to find libltdl library]) +AC_MSG_RESULT([$LIBLTDL]) + +_LTDL_SETUP + +dnl restore autoconf definition. +m4_popdef([AC_LIBOBJ]) +m4_popdef([AC_LIBSOURCES]) + +AC_CONFIG_COMMANDS_PRE([ + _ltdl_libobjs= + _ltdl_ltlibobjs= + if test -n "$_LT_LIBOBJS"; then + # Remove the extension. + _lt_sed_drop_objext='s/\.o$//;s/\.obj$//' + for i in `for i in $_LT_LIBOBJS; do echo "$i"; done | sed "$_lt_sed_drop_objext" | sort -u`; do + _ltdl_libobjs="$_ltdl_libobjs $lt_libobj_prefix$i.$ac_objext" + _ltdl_ltlibobjs="$_ltdl_ltlibobjs $lt_libobj_prefix$i.lo" + done + fi + AC_SUBST([ltdl_LIBOBJS], [$_ltdl_libobjs]) + AC_SUBST([ltdl_LTLIBOBJS], [$_ltdl_ltlibobjs]) +]) + +# Only expand once: +m4_define([LTDL_INIT]) +]) +m4trace:/usr/share/aclocal/ltdl.m4:352: -1- AU_DEFUN([AC_LIB_LTDL], [LTDL_INIT($@)]) +m4trace:/usr/share/aclocal/ltdl.m4:352: -1- AC_DEFUN([AC_LIB_LTDL], [AC_DIAGNOSE([obsolete], [The macro `AC_LIB_LTDL' is obsolete. +You should run autoupdate.])dnl +LTDL_INIT($@)]) +m4trace:/usr/share/aclocal/ltdl.m4:353: -1- AU_DEFUN([AC_WITH_LTDL], [LTDL_INIT($@)]) +m4trace:/usr/share/aclocal/ltdl.m4:353: -1- AC_DEFUN([AC_WITH_LTDL], [AC_DIAGNOSE([obsolete], [The macro `AC_WITH_LTDL' is obsolete. +You should run autoupdate.])dnl +LTDL_INIT($@)]) +m4trace:/usr/share/aclocal/ltdl.m4:354: -1- AU_DEFUN([LT_WITH_LTDL], [LTDL_INIT($@)]) +m4trace:/usr/share/aclocal/ltdl.m4:354: -1- AC_DEFUN([LT_WITH_LTDL], [AC_DIAGNOSE([obsolete], [The macro `LT_WITH_LTDL' is obsolete. +You should run autoupdate.])dnl +LTDL_INIT($@)]) +m4trace:/usr/share/aclocal/ltdl.m4:367: -1- AC_DEFUN([_LTDL_SETUP], [AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([LT_SYS_MODULE_EXT])dnl +AC_REQUIRE([LT_SYS_MODULE_PATH])dnl +AC_REQUIRE([LT_SYS_DLSEARCH_PATH])dnl +AC_REQUIRE([LT_LIB_DLLOAD])dnl +AC_REQUIRE([LT_SYS_SYMBOL_USCORE])dnl +AC_REQUIRE([LT_FUNC_DLSYM_USCORE])dnl +AC_REQUIRE([LT_SYS_DLOPEN_DEPLIBS])dnl +AC_REQUIRE([gl_FUNC_ARGZ])dnl + +m4_require([_LT_CHECK_OBJDIR])dnl +m4_require([_LT_HEADER_DLFCN])dnl +m4_require([_LT_CHECK_DLPREOPEN])dnl +m4_require([_LT_DECL_SED])dnl + +dnl Don't require this, or it will be expanded earlier than the code +dnl that sets the variables it relies on: +_LT_ENABLE_INSTALL + +dnl _LTDL_MODE specific code must be called at least once: +_LTDL_MODE_DISPATCH + +# In order that ltdl.c can compile, find out the first AC_CONFIG_HEADERS +# the user used. This is so that ltdl.h can pick up the parent projects +# config.h file, The first file in AC_CONFIG_HEADERS must contain the +# definitions required by ltdl.c. +# FIXME: Remove use of undocumented AC_LIST_HEADERS (2.59 compatibility). +AC_CONFIG_COMMANDS_PRE([dnl +m4_pattern_allow([^LT_CONFIG_H$])dnl +m4_ifset([AH_HEADER], + [LT_CONFIG_H=AH_HEADER], + [m4_ifset([AC_LIST_HEADERS], + [LT_CONFIG_H=`echo "AC_LIST_HEADERS" | $SED 's,^[[ ]]*,,;s,[[ :]].*$,,'`], + [])])]) +AC_SUBST([LT_CONFIG_H]) + +AC_CHECK_HEADERS([unistd.h dl.h sys/dl.h dld.h mach-o/dyld.h dirent.h], + [], [], [AC_INCLUDES_DEFAULT]) + +AC_CHECK_FUNCS([closedir opendir readdir], [], [AC_LIBOBJ([lt__dirent])]) +AC_CHECK_FUNCS([strlcat strlcpy], [], [AC_LIBOBJ([lt__strl])]) + +AC_DEFINE_UNQUOTED([LT_LIBEXT],["$libext"],[The archive extension]) + +name=ltdl +LTDLOPEN=`eval "\\$ECHO \"$libname_spec\""` +AC_SUBST([LTDLOPEN]) +]) +m4trace:/usr/share/aclocal/ltdl.m4:437: -1- AC_DEFUN([LT_SYS_DLOPEN_DEPLIBS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_CACHE_CHECK([whether deplibs are loaded by dlopen], + [lt_cv_sys_dlopen_deplibs], + [# PORTME does your system automatically load deplibs for dlopen? + # or its logical equivalent (e.g. shl_load for HP-UX < 11) + # For now, we just catch OSes we know something about -- in the + # future, we'll try test this programmatically. + lt_cv_sys_dlopen_deplibs=unknown + case $host_os in + aix3*|aix4.1.*|aix4.2.*) + # Unknown whether this is true for these versions of AIX, but + # we want this `case' here to explicitly catch those versions. + lt_cv_sys_dlopen_deplibs=unknown + ;; + aix[[4-9]]*) + lt_cv_sys_dlopen_deplibs=yes + ;; + amigaos*) + case $host_cpu in + powerpc) + lt_cv_sys_dlopen_deplibs=no + ;; + esac + ;; + darwin*) + # Assuming the user has installed a libdl from somewhere, this is true + # If you are looking for one http://www.opendarwin.org/projects/dlcompat + lt_cv_sys_dlopen_deplibs=yes + ;; + freebsd* | dragonfly*) + lt_cv_sys_dlopen_deplibs=yes + ;; + gnu* | linux* | k*bsd*-gnu | kopensolaris*-gnu) + # GNU and its variants, using gnu ld.so (Glibc) + lt_cv_sys_dlopen_deplibs=yes + ;; + hpux10*|hpux11*) + lt_cv_sys_dlopen_deplibs=yes + ;; + interix*) + lt_cv_sys_dlopen_deplibs=yes + ;; + irix[[12345]]*|irix6.[[01]]*) + # Catch all versions of IRIX before 6.2, and indicate that we don't + # know how it worked for any of those versions. + lt_cv_sys_dlopen_deplibs=unknown + ;; + irix*) + # The case above catches anything before 6.2, and it's known that + # at 6.2 and later dlopen does load deplibs. + lt_cv_sys_dlopen_deplibs=yes + ;; + netbsd* | netbsdelf*-gnu) + lt_cv_sys_dlopen_deplibs=yes + ;; + openbsd*) + lt_cv_sys_dlopen_deplibs=yes + ;; + osf[[1234]]*) + # dlopen did load deplibs (at least at 4.x), but until the 5.x series, + # it did *not* use an RPATH in a shared library to find objects the + # library depends on, so we explicitly say `no'. + lt_cv_sys_dlopen_deplibs=no + ;; + osf5.0|osf5.0a|osf5.1) + # dlopen *does* load deplibs and with the right loader patch applied + # it even uses RPATH in a shared library to search for shared objects + # that the library depends on, but there's no easy way to know if that + # patch is installed. Since this is the case, all we can really + # say is unknown -- it depends on the patch being installed. If + # it is, this changes to `yes'. Without it, it would be `no'. + lt_cv_sys_dlopen_deplibs=unknown + ;; + osf*) + # the two cases above should catch all versions of osf <= 5.1. Read + # the comments above for what we know about them. + # At > 5.1, deplibs are loaded *and* any RPATH in a shared library + # is used to find them so we can finally say `yes'. + lt_cv_sys_dlopen_deplibs=yes + ;; + qnx*) + lt_cv_sys_dlopen_deplibs=yes + ;; + solaris*) + lt_cv_sys_dlopen_deplibs=yes + ;; + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + libltdl_cv_sys_dlopen_deplibs=yes + ;; + esac + ]) +if test "$lt_cv_sys_dlopen_deplibs" != yes; then + AC_DEFINE([LTDL_DLOPEN_DEPLIBS], [1], + [Define if the OS needs help to load dependent libraries for dlopen().]) +fi +]) +m4trace:/usr/share/aclocal/ltdl.m4:536: -1- AU_DEFUN([AC_LTDL_SYS_DLOPEN_DEPLIBS], [m4_if($#, 0, [LT_SYS_DLOPEN_DEPLIBS], [LT_SYS_DLOPEN_DEPLIBS($@)])]) +m4trace:/usr/share/aclocal/ltdl.m4:536: -1- AC_DEFUN([AC_LTDL_SYS_DLOPEN_DEPLIBS], [AC_DIAGNOSE([obsolete], [The macro `AC_LTDL_SYS_DLOPEN_DEPLIBS' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [LT_SYS_DLOPEN_DEPLIBS], [LT_SYS_DLOPEN_DEPLIBS($@)])]) +m4trace:/usr/share/aclocal/ltdl.m4:543: -1- AC_DEFUN([LT_SYS_MODULE_EXT], [m4_require([_LT_SYS_DYNAMIC_LINKER])dnl +AC_CACHE_CHECK([which extension is used for runtime loadable modules], + [libltdl_cv_shlibext], +[ +module=yes +eval libltdl_cv_shlibext=$shrext_cmds + ]) +if test -n "$libltdl_cv_shlibext"; then + m4_pattern_allow([LT_MODULE_EXT])dnl + AC_DEFINE_UNQUOTED([LT_MODULE_EXT], ["$libltdl_cv_shlibext"], + [Define to the extension used for runtime loadable modules, say, ".so".]) +fi +]) +m4trace:/usr/share/aclocal/ltdl.m4:559: -1- AU_DEFUN([AC_LTDL_SHLIBEXT], [m4_if($#, 0, [LT_SYS_MODULE_EXT], [LT_SYS_MODULE_EXT($@)])]) +m4trace:/usr/share/aclocal/ltdl.m4:559: -1- AC_DEFUN([AC_LTDL_SHLIBEXT], [AC_DIAGNOSE([obsolete], [The macro `AC_LTDL_SHLIBEXT' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [LT_SYS_MODULE_EXT], [LT_SYS_MODULE_EXT($@)])]) +m4trace:/usr/share/aclocal/ltdl.m4:566: -1- AC_DEFUN([LT_SYS_MODULE_PATH], [m4_require([_LT_SYS_DYNAMIC_LINKER])dnl +AC_CACHE_CHECK([which variable specifies run-time module search path], + [lt_cv_module_path_var], [lt_cv_module_path_var="$shlibpath_var"]) +if test -n "$lt_cv_module_path_var"; then + m4_pattern_allow([LT_MODULE_PATH_VAR])dnl + AC_DEFINE_UNQUOTED([LT_MODULE_PATH_VAR], ["$lt_cv_module_path_var"], + [Define to the name of the environment variable that determines the run-time module search path.]) +fi +]) +m4trace:/usr/share/aclocal/ltdl.m4:578: -1- AU_DEFUN([AC_LTDL_SHLIBPATH], [m4_if($#, 0, [LT_SYS_MODULE_PATH], [LT_SYS_MODULE_PATH($@)])]) +m4trace:/usr/share/aclocal/ltdl.m4:578: -1- AC_DEFUN([AC_LTDL_SHLIBPATH], [AC_DIAGNOSE([obsolete], [The macro `AC_LTDL_SHLIBPATH' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [LT_SYS_MODULE_PATH], [LT_SYS_MODULE_PATH($@)])]) +m4trace:/usr/share/aclocal/ltdl.m4:585: -1- AC_DEFUN([LT_SYS_DLSEARCH_PATH], [m4_require([_LT_SYS_DYNAMIC_LINKER])dnl +AC_CACHE_CHECK([for the default library search path], + [lt_cv_sys_dlsearch_path], + [lt_cv_sys_dlsearch_path="$sys_lib_dlsearch_path_spec"]) +if test -n "$lt_cv_sys_dlsearch_path"; then + sys_dlsearch_path= + for dir in $lt_cv_sys_dlsearch_path; do + if test -z "$sys_dlsearch_path"; then + sys_dlsearch_path="$dir" + else + sys_dlsearch_path="$sys_dlsearch_path$PATH_SEPARATOR$dir" + fi + done + m4_pattern_allow([LT_DLSEARCH_PATH])dnl + AC_DEFINE_UNQUOTED([LT_DLSEARCH_PATH], ["$sys_dlsearch_path"], + [Define to the system default library search path.]) +fi +]) +m4trace:/usr/share/aclocal/ltdl.m4:606: -1- AU_DEFUN([AC_LTDL_SYSSEARCHPATH], [m4_if($#, 0, [LT_SYS_DLSEARCH_PATH], [LT_SYS_DLSEARCH_PATH($@)])]) +m4trace:/usr/share/aclocal/ltdl.m4:606: -1- AC_DEFUN([AC_LTDL_SYSSEARCHPATH], [AC_DIAGNOSE([obsolete], [The macro `AC_LTDL_SYSSEARCHPATH' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [LT_SYS_DLSEARCH_PATH], [LT_SYS_DLSEARCH_PATH($@)])]) +m4trace:/usr/share/aclocal/ltdl.m4:632: -1- AC_DEFUN([LT_LIB_DLLOAD], [m4_pattern_allow([^LT_DLLOADERS$]) +LT_DLLOADERS= +AC_SUBST([LT_DLLOADERS]) + +AC_LANG_PUSH([C]) + +LIBADD_DLOPEN= +AC_SEARCH_LIBS([dlopen], [dl], + [AC_DEFINE([HAVE_LIBDL], [1], + [Define if you have the libdl library or equivalent.]) + if test "$ac_cv_search_dlopen" != "none required" ; then + LIBADD_DLOPEN="-ldl" + fi + libltdl_cv_lib_dl_dlopen="yes" + LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dlopen.la"], + [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#if HAVE_DLFCN_H +# include +#endif + ]], [[dlopen(0, 0);]])], + [AC_DEFINE([HAVE_LIBDL], [1], + [Define if you have the libdl library or equivalent.]) + libltdl_cv_func_dlopen="yes" + LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dlopen.la"], + [AC_CHECK_LIB([svld], [dlopen], + [AC_DEFINE([HAVE_LIBDL], [1], + [Define if you have the libdl library or equivalent.]) + LIBADD_DLOPEN="-lsvld" libltdl_cv_func_dlopen="yes" + LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dlopen.la"])])]) +if test x"$libltdl_cv_func_dlopen" = xyes || test x"$libltdl_cv_lib_dl_dlopen" = xyes +then + lt_save_LIBS="$LIBS" + LIBS="$LIBS $LIBADD_DLOPEN" + AC_CHECK_FUNCS([dlerror]) + LIBS="$lt_save_LIBS" +fi +AC_SUBST([LIBADD_DLOPEN]) + +LIBADD_SHL_LOAD= +AC_CHECK_FUNC([shl_load], + [AC_DEFINE([HAVE_SHL_LOAD], [1], + [Define if you have the shl_load function.]) + LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}shl_load.la"], + [AC_CHECK_LIB([dld], [shl_load], + [AC_DEFINE([HAVE_SHL_LOAD], [1], + [Define if you have the shl_load function.]) + LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}shl_load.la" + LIBADD_SHL_LOAD="-ldld"])]) +AC_SUBST([LIBADD_SHL_LOAD]) + +case $host_os in +darwin[[1567]].*) +# We only want this for pre-Mac OS X 10.4. + AC_CHECK_FUNC([_dyld_func_lookup], + [AC_DEFINE([HAVE_DYLD], [1], + [Define if you have the _dyld_func_lookup function.]) + LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dyld.la"]) + ;; +beos*) + LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}load_add_on.la" + ;; +cygwin* | mingw* | os2* | pw32*) + AC_CHECK_DECLS([cygwin_conv_path], [], [], [[#include ]]) + LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}loadlibrary.la" + ;; +esac + +AC_CHECK_LIB([dld], [dld_link], + [AC_DEFINE([HAVE_DLD], [1], + [Define if you have the GNU dld library.]) + LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dld_link.la"]) +AC_SUBST([LIBADD_DLD_LINK]) + +m4_pattern_allow([^LT_DLPREOPEN$]) +LT_DLPREOPEN= +if test -n "$LT_DLLOADERS" +then + for lt_loader in $LT_DLLOADERS; do + LT_DLPREOPEN="$LT_DLPREOPEN-dlpreopen $lt_loader " + done + AC_DEFINE([HAVE_LIBDLLOADER], [1], + [Define if libdlloader will be built on this platform]) +fi +AC_SUBST([LT_DLPREOPEN]) + +dnl This isn't used anymore, but set it for backwards compatibility +LIBADD_DL="$LIBADD_DLOPEN $LIBADD_SHL_LOAD" +AC_SUBST([LIBADD_DL]) + +AC_LANG_POP +]) +m4trace:/usr/share/aclocal/ltdl.m4:725: -1- AU_DEFUN([AC_LTDL_DLLIB], [m4_if($#, 0, [LT_LIB_DLLOAD], [LT_LIB_DLLOAD($@)])]) +m4trace:/usr/share/aclocal/ltdl.m4:725: -1- AC_DEFUN([AC_LTDL_DLLIB], [AC_DIAGNOSE([obsolete], [The macro `AC_LTDL_DLLIB' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [LT_LIB_DLLOAD], [LT_LIB_DLLOAD($@)])]) +m4trace:/usr/share/aclocal/ltdl.m4:733: -1- AC_DEFUN([LT_SYS_SYMBOL_USCORE], [m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl +AC_CACHE_CHECK([for _ prefix in compiled symbols], + [lt_cv_sys_symbol_underscore], + [lt_cv_sys_symbol_underscore=no + cat > conftest.$ac_ext <<_LT_EOF +void nm_test_func(){} +int main(){nm_test_func;return 0;} +_LT_EOF + if AC_TRY_EVAL(ac_compile); then + # Now try to grab the symbols. + ac_nlist=conftest.nm + if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $ac_nlist) && test -s "$ac_nlist"; then + # See whether the symbols have a leading underscore. + if grep '^. _nm_test_func' "$ac_nlist" >/dev/null; then + lt_cv_sys_symbol_underscore=yes + else + if grep '^. nm_test_func ' "$ac_nlist" >/dev/null; then + : + else + echo "configure: cannot find nm_test_func in $ac_nlist" >&AS_MESSAGE_LOG_FD + fi + fi + else + echo "configure: cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD + fi + else + echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD + cat conftest.c >&AS_MESSAGE_LOG_FD + fi + rm -rf conftest* + ]) + sys_symbol_underscore=$lt_cv_sys_symbol_underscore + AC_SUBST([sys_symbol_underscore]) +]) +m4trace:/usr/share/aclocal/ltdl.m4:770: -1- AU_DEFUN([AC_LTDL_SYMBOL_USCORE], [m4_if($#, 0, [LT_SYS_SYMBOL_USCORE], [LT_SYS_SYMBOL_USCORE($@)])]) +m4trace:/usr/share/aclocal/ltdl.m4:770: -1- AC_DEFUN([AC_LTDL_SYMBOL_USCORE], [AC_DIAGNOSE([obsolete], [The macro `AC_LTDL_SYMBOL_USCORE' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [LT_SYS_SYMBOL_USCORE], [LT_SYS_SYMBOL_USCORE($@)])]) +m4trace:/usr/share/aclocal/ltdl.m4:777: -1- AC_DEFUN([LT_FUNC_DLSYM_USCORE], [AC_REQUIRE([LT_SYS_SYMBOL_USCORE])dnl +if test x"$lt_cv_sys_symbol_underscore" = xyes; then + if test x"$libltdl_cv_func_dlopen" = xyes || + test x"$libltdl_cv_lib_dl_dlopen" = xyes ; then + AC_CACHE_CHECK([whether we have to add an underscore for dlsym], + [libltdl_cv_need_uscore], + [libltdl_cv_need_uscore=unknown + save_LIBS="$LIBS" + LIBS="$LIBS $LIBADD_DLOPEN" + _LT_TRY_DLOPEN_SELF( + [libltdl_cv_need_uscore=no], [libltdl_cv_need_uscore=yes], + [], [libltdl_cv_need_uscore=cross]) + LIBS="$save_LIBS" + ]) + fi +fi + +if test x"$libltdl_cv_need_uscore" = xyes; then + AC_DEFINE([NEED_USCORE], [1], + [Define if dlsym() requires a leading underscore in symbol names.]) +fi +]) +m4trace:/usr/share/aclocal/ltdl.m4:802: -1- AU_DEFUN([AC_LTDL_DLSYM_USCORE], [m4_if($#, 0, [LT_FUNC_DLSYM_USCORE], [LT_FUNC_DLSYM_USCORE($@)])]) +m4trace:/usr/share/aclocal/ltdl.m4:802: -1- AC_DEFUN([AC_LTDL_DLSYM_USCORE], [AC_DIAGNOSE([obsolete], [The macro `AC_LTDL_DLSYM_USCORE' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [LT_FUNC_DLSYM_USCORE], [LT_FUNC_DLSYM_USCORE($@)])]) +m4trace:/usr/share/aclocal/pkg.m4:26: -1- AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) +m4_pattern_allow([^PKG_CONFIG(_PATH)?$]) +AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])dnl +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) +fi +if test -n "$PKG_CONFIG"; then + _pkg_min_version=m4_default([$1], [0.9.0]) + AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + PKG_CONFIG="" + fi + +fi[]dnl +]) +m4trace:/usr/share/aclocal/pkg.m4:56: -1- AC_DEFUN([PKG_CHECK_EXISTS], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +if test -n "$PKG_CONFIG" && \ + AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then + m4_ifval([$2], [$2], [:]) +m4_ifvaln([$3], [else + $3])dnl +fi]) +m4trace:/usr/share/aclocal/pkg.m4:84: -1- AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi[]dnl +]) +m4trace:/usr/share/aclocal/pkg.m4:104: -1- AC_DEFUN([PKG_CHECK_MODULES], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl +AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl + +pkg_failed=no +AC_MSG_CHECKING([for $1]) + +_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) +_PKG_CONFIG([$1][_LIBS], [libs], [$2]) + +m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS +and $1[]_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details.]) + +if test $pkg_failed = yes; then + _PKG_SHORT_ERRORS_SUPPORTED + if test $_pkg_short_errors_supported = yes; then + $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$2"` + else + $1[]_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"` + fi + # Put the nasty error message in config.log where it belongs + echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD + + ifelse([$4], , [AC_MSG_ERROR(dnl +[Package requirements ($2) were not met: + +$$1_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +_PKG_TEXT +])], + [AC_MSG_RESULT([no]) + $4]) +elif test $pkg_failed = untried; then + ifelse([$4], , [AC_MSG_FAILURE(dnl +[The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +_PKG_TEXT + +To get pkg-config, see .])], + [$4]) +else + $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS + $1[]_LIBS=$pkg_cv_[]$1[]_LIBS + AC_MSG_RESULT([yes]) + ifelse([$3], , :, [$3]) +fi[]dnl +]) +m4trace:/usr/share/aclocal-1.11/amversion.m4:14: -1- AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.11' +dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to +dnl require some minimum version. Point them to the right macro. +m4_if([$1], [1.11.1], [], + [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl +]) +m4trace:/usr/share/aclocal-1.11/amversion.m4:33: -1- AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.11.1])dnl +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) +m4trace:/usr/share/aclocal-1.11/auxdir.m4:47: -1- AC_DEFUN([AM_AUX_DIR_EXPAND], [dnl Rely on autoconf to set up CDPATH properly. +AC_PREREQ([2.50])dnl +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` +]) +m4trace:/usr/share/aclocal-1.11/cond.m4:15: -1- AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ(2.52)dnl + ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +AC_SUBST([$1_TRUE])dnl +AC_SUBST([$1_FALSE])dnl +_AM_SUBST_NOTMAKE([$1_TRUE])dnl +_AM_SUBST_NOTMAKE([$1_FALSE])dnl +m4_define([_AM_COND_VALUE_$1], [$2])dnl +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi +AC_CONFIG_COMMANDS_PRE( +[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then + AC_MSG_ERROR([[conditional "$1" was never defined. +Usually this means the macro was only invoked conditionally.]]) +fi])]) +m4trace:/usr/share/aclocal-1.11/depend.m4:28: -1- AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl +AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl +AC_REQUIRE([AM_MAKE_INCLUDE])dnl +AC_REQUIRE([AM_DEP_TRACK])dnl + +ifelse([$1], CC, [depcc="$CC" am_compiler_list=], + [$1], CXX, [depcc="$CXX" am_compiler_list=], + [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], UPC, [depcc="$UPC" am_compiler_list=], + [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], + [depcc="$$1" am_compiler_list=]) + +AC_CACHE_CHECK([dependency style of $depcc], + [am_cv_$1_dependencies_compiler_type], +[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_$1_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` + fi + am__universal=false + m4_case([$1], [CC], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac], + [CXX], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac]) + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_$1_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_$1_dependencies_compiler_type=none +fi +]) +AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) +AM_CONDITIONAL([am__fastdep$1], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) +]) +m4trace:/usr/share/aclocal-1.11/depend.m4:163: -1- AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl +AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl +]) +m4trace:/usr/share/aclocal-1.11/depend.m4:171: -1- AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE(dependency-tracking, +[ --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors]) +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +AC_SUBST([AMDEPBACKSLASH])dnl +_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl +]) +m4trace:/usr/share/aclocal-1.11/depout.m4:14: -1- AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} +]) +m4trace:/usr/share/aclocal-1.11/depout.m4:75: -1- AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], + [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], + [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) +]) +m4trace:/usr/share/aclocal-1.11/header.m4:12: -1- AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)]) +m4trace:/usr/share/aclocal-1.11/header.m4:12: -1- AC_DEFUN([AM_CONFIG_HEADER], [AC_DIAGNOSE([obsolete], [The macro `AM_CONFIG_HEADER' is obsolete. +You should run autoupdate.])dnl +AC_CONFIG_HEADERS($@)]) +m4trace:/usr/share/aclocal-1.11/init.m4:26: -1- AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.62])dnl +dnl Autoconf wants to disallow AM_ names. We explicitly allow +dnl the ones we care about. +m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl +AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl +AC_REQUIRE([AC_PROG_INSTALL])dnl +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi +AC_SUBST([CYGPATH_W]) + +# Define the identity of the package. +dnl Distinguish between old-style and new-style calls. +m4_ifval([$2], +[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl + AC_SUBST([PACKAGE], [$1])dnl + AC_SUBST([VERSION], [$2])], +[_AM_SET_OPTIONS([$1])dnl +dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. +m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, + [m4_fatal([AC_INIT should be called with package and version arguments])])dnl + AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl + AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl + +_AM_IF_OPTION([no-define],, +[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) + AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl + +# Some tools Automake needs. +AC_REQUIRE([AM_SANITY_CHECK])dnl +AC_REQUIRE([AC_ARG_PROGRAM])dnl +AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) +AM_MISSING_PROG(AUTOCONF, autoconf) +AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) +AM_MISSING_PROG(AUTOHEADER, autoheader) +AM_MISSING_PROG(MAKEINFO, makeinfo) +AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl +AC_REQUIRE([AM_PROG_MKDIR_P])dnl +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([AC_PROG_MAKE_SET])dnl +AC_REQUIRE([AM_SET_LEADING_DOT])dnl +_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], + [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) +_AM_IF_OPTION([no-dependencies],, +[AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES(CC)], + [define([AC_PROG_CC], + defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES(CXX)], + [define([AC_PROG_CXX], + defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES(OBJC)], + [define([AC_PROG_OBJC], + defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl +]) +_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl +dnl The `parallel-tests' driver may need to know about EXEEXT, so add the +dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro +dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. +AC_CONFIG_COMMANDS_PRE(dnl +[m4_provide_if([_AM_COMPILER_EXEEXT], + [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl +]) +m4trace:/usr/share/aclocal-1.11/init.m4:126: -1- AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. +_am_arg=$1 +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) +m4trace:/usr/share/aclocal-1.11/install-sh.m4:11: -1- AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi +AC_SUBST(install_sh)]) +m4trace:/usr/share/aclocal-1.11/lead-dot.m4:12: -1- AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null +AC_SUBST([am__leading_dot])]) +m4trace:/usr/share/aclocal-1.11/make.m4:14: -1- AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +AC_MSG_CHECKING([for style of include used by $am_make]) +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi +AC_SUBST([am__include]) +AC_SUBST([am__quote]) +AC_MSG_RESULT([$_am_result]) +rm -f confinc confmf +]) +m4trace:/usr/share/aclocal-1.11/missing.m4:14: -1- AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) +$1=${$1-"${am_missing_run}$2"} +AC_SUBST($1)]) +m4trace:/usr/share/aclocal-1.11/missing.m4:24: -1- AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([missing])dnl +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + AC_MSG_WARN([`missing' script is too old or missing]) +fi +]) +m4trace:/usr/share/aclocal-1.11/mkdirp.m4:11: -1- AC_DEFUN([AM_PROG_MKDIR_P], [AC_PREREQ([2.60])dnl +AC_REQUIRE([AC_PROG_MKDIR_P])dnl +dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, +dnl while keeping a definition of mkdir_p for backward compatibility. +dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. +dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of +dnl Makefile.ins that do not define MKDIR_P, so we do our own +dnl adjustment using top_builddir (which is defined more often than +dnl MKDIR_P). +AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl +case $mkdir_p in + [[\\/$]]* | ?:[[\\/]]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac +]) +m4trace:/usr/share/aclocal-1.11/options.m4:13: -1- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) +m4trace:/usr/share/aclocal-1.11/options.m4:19: -1- AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), 1)]) +m4trace:/usr/share/aclocal-1.11/options.m4:25: -1- AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) +m4trace:/usr/share/aclocal-1.11/options.m4:31: -1- AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) +m4trace:/usr/share/aclocal-1.11/python.m4:35: -1- AC_DEFUN([AM_PATH_PYTHON], [ + dnl Find a Python interpreter. Python versions prior to 2.0 are not + dnl supported. (2.0 was released on October 16, 2000). + m4_define_default([_AM_PYTHON_INTERPRETER_LIST], + [python python2 python3 python3.0 python2.5 python2.4 python2.3 python2.2 dnl +python2.1 python2.0]) + + m4_if([$1],[],[ + dnl No version check is needed. + # Find any Python interpreter. + if test -z "$PYTHON"; then + AC_PATH_PROGS([PYTHON], _AM_PYTHON_INTERPRETER_LIST, :) + fi + am_display_PYTHON=python + ], [ + dnl A version check is needed. + if test -n "$PYTHON"; then + # If the user set $PYTHON, use it and don't search something else. + AC_MSG_CHECKING([whether $PYTHON version >= $1]) + AM_PYTHON_CHECK_VERSION([$PYTHON], [$1], + [AC_MSG_RESULT(yes)], + [AC_MSG_ERROR(too old)]) + am_display_PYTHON=$PYTHON + else + # Otherwise, try each interpreter until we find one that satisfies + # VERSION. + AC_CACHE_CHECK([for a Python interpreter with version >= $1], + [am_cv_pathless_PYTHON],[ + for am_cv_pathless_PYTHON in _AM_PYTHON_INTERPRETER_LIST none; do + test "$am_cv_pathless_PYTHON" = none && break + AM_PYTHON_CHECK_VERSION([$am_cv_pathless_PYTHON], [$1], [break]) + done]) + # Set $PYTHON to the absolute path of $am_cv_pathless_PYTHON. + if test "$am_cv_pathless_PYTHON" = none; then + PYTHON=: + else + AC_PATH_PROG([PYTHON], [$am_cv_pathless_PYTHON]) + fi + am_display_PYTHON=$am_cv_pathless_PYTHON + fi + ]) + + if test "$PYTHON" = :; then + dnl Run any user-specified action, or abort. + m4_default([$3], [AC_MSG_ERROR([no suitable Python interpreter found])]) + else + + dnl Query Python for its version number. Getting [:3] seems to be + dnl the best way to do this; it's what "site.py" does in the standard + dnl library. + + AC_CACHE_CHECK([for $am_display_PYTHON version], [am_cv_python_version], + [am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[[:3]])"`]) + AC_SUBST([PYTHON_VERSION], [$am_cv_python_version]) + + dnl Use the values of $prefix and $exec_prefix for the corresponding + dnl values of PYTHON_PREFIX and PYTHON_EXEC_PREFIX. These are made + dnl distinct variables so they can be overridden if need be. However, + dnl general consensus is that you shouldn't need this ability. + + AC_SUBST([PYTHON_PREFIX], ['${prefix}']) + AC_SUBST([PYTHON_EXEC_PREFIX], ['${exec_prefix}']) + + dnl At times (like when building shared libraries) you may want + dnl to know which OS platform Python thinks this is. + + AC_CACHE_CHECK([for $am_display_PYTHON platform], [am_cv_python_platform], + [am_cv_python_platform=`$PYTHON -c "import sys; sys.stdout.write(sys.platform)"`]) + AC_SUBST([PYTHON_PLATFORM], [$am_cv_python_platform]) + + + dnl Set up 4 directories: + + dnl pythondir -- where to install python scripts. This is the + dnl site-packages directory, not the python standard library + dnl directory like in previous automake betas. This behavior + dnl is more consistent with lispdir.m4 for example. + dnl Query distutils for this directory. distutils does not exist in + dnl Python 1.5, so we fall back to the hardcoded directory if it + dnl doesn't work. + AC_CACHE_CHECK([for $am_display_PYTHON script directory], + [am_cv_python_pythondir], + [if test "x$prefix" = xNONE + then + am_py_prefix=$ac_default_prefix + else + am_py_prefix=$prefix + fi + am_cv_python_pythondir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(0,0,prefix='$am_py_prefix'))" 2>/dev/null || + echo "$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages"` + case $am_cv_python_pythondir in + $am_py_prefix*) + am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'` + am_cv_python_pythondir=`echo "$am_cv_python_pythondir" | sed "s,^$am__strip_prefix,$PYTHON_PREFIX,"` + ;; + *) + case $am_py_prefix in + /usr|/System*) ;; + *) + am_cv_python_pythondir=$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages + ;; + esac + ;; + esac + ]) + AC_SUBST([pythondir], [$am_cv_python_pythondir]) + + dnl pkgpythondir -- $PACKAGE directory under pythondir. Was + dnl PYTHON_SITE_PACKAGE in previous betas, but this naming is + dnl more consistent with the rest of automake. + + AC_SUBST([pkgpythondir], [\${pythondir}/$PACKAGE]) + + dnl pyexecdir -- directory for installing python extension modules + dnl (shared libraries) + dnl Query distutils for this directory. distutils does not exist in + dnl Python 1.5, so we fall back to the hardcoded directory if it + dnl doesn't work. + AC_CACHE_CHECK([for $am_display_PYTHON extension module directory], + [am_cv_python_pyexecdir], + [if test "x$exec_prefix" = xNONE + then + am_py_exec_prefix=$am_py_prefix + else + am_py_exec_prefix=$exec_prefix + fi + am_cv_python_pyexecdir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(1,0,prefix='$am_py_exec_prefix'))" 2>/dev/null || + echo "$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages"` + case $am_cv_python_pyexecdir in + $am_py_exec_prefix*) + am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'` + am_cv_python_pyexecdir=`echo "$am_cv_python_pyexecdir" | sed "s,^$am__strip_prefix,$PYTHON_EXEC_PREFIX,"` + ;; + *) + case $am_py_exec_prefix in + /usr|/System*) ;; + *) + am_cv_python_pyexecdir=$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages + ;; + esac + ;; + esac + ]) + AC_SUBST([pyexecdir], [$am_cv_python_pyexecdir]) + + dnl pkgpyexecdir -- $(pyexecdir)/$(PACKAGE) + + AC_SUBST([pkgpyexecdir], [\${pyexecdir}/$PACKAGE]) + + dnl Run any user-specified action. + $2 + fi + +]) +m4trace:/usr/share/aclocal-1.11/python.m4:199: -1- AC_DEFUN([AM_PYTHON_CHECK_VERSION], [prog="import sys +# split strings by '.' and convert to numeric. Append some zeros +# because we need at least 4 digits for the hex conversion. +# map returns an iterator in Python 3.0 and a list in 2.x +minver = list(map(int, '$2'.split('.'))) + [[0, 0, 0]] +minverhex = 0 +# xrange is not present in Python 3.0 and range returns an iterator +for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[[i]] +sys.exit(sys.hexversion < minverhex)" + AS_IF([AM_RUN_LOG([$1 -c "$prog"])], [$3], [$4])]) +m4trace:/usr/share/aclocal-1.11/runlog.m4:12: -1- AC_DEFUN([AM_RUN_LOG], [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD + ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + (exit $ac_status); }]) +m4trace:/usr/share/aclocal-1.11/sanity.m4:14: -1- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) +# Just in case +sleep 1 +echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[[\\\"\#\$\&\'\`$am_lf]]*) + AC_MSG_ERROR([unsafe absolute working directory name]);; +esac +case $srcdir in + *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) + AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; +esac + +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + rm -f conftest.file + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken +alias in your environment]) + fi + + test "$[2]" = conftest.file + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +AC_MSG_RESULT(yes)]) +m4trace:/usr/share/aclocal-1.11/silent.m4:14: -1- AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], +[ --enable-silent-rules less verbose build output (undo: `make V=1') + --disable-silent-rules verbose build output (undo: `make V=0')]) +case $enable_silent_rules in +yes) AM_DEFAULT_VERBOSITY=0;; +no) AM_DEFAULT_VERBOSITY=1;; +*) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; +esac +AC_SUBST([AM_DEFAULT_VERBOSITY])dnl +AM_BACKSLASH='\' +AC_SUBST([AM_BACKSLASH])dnl +_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl +]) +m4trace:/usr/share/aclocal-1.11/strip.m4:17: -1- AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be `maybe'. +if test "$cross_compiling" != no; then + AC_CHECK_TOOL([STRIP], [strip], :) +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" +AC_SUBST([INSTALL_STRIP_PROGRAM])]) +m4trace:/usr/share/aclocal-1.11/substnot.m4:14: -1- AC_DEFUN([_AM_SUBST_NOTMAKE]) +m4trace:/usr/share/aclocal-1.11/substnot.m4:19: -1- AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) +m4trace:/usr/share/aclocal-1.11/tar.m4:24: -1- AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. +AM_MISSING_PROG([AMTAR], [tar]) +m4_if([$1], [v7], + [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], + [m4_case([$1], [ustar],, [pax],, + [m4_fatal([Unknown tar format])]) +AC_MSG_CHECKING([how to create a $1 tar archive]) +# Loop over all known methods to create a tar archive until one works. +_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' +_am_tools=${am_cv_prog_tar_$1-$_am_tools} +# Do not fold the above two line into one, because Tru64 sh and +# Solaris sh will not grok spaces in the rhs of `-'. +for _am_tool in $_am_tools +do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; + do + AM_RUN_LOG([$_am_tar --version]) && break + done + am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x $1 -w "$$tardir"' + am__tar_='pax -L -x $1 -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H $1 -L' + am__tar_='find "$tardir" -print | cpio -o -H $1 -L' + am__untar='cpio -i -H $1 -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac + + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_$1}" && break + + # tar/untar a dummy directory, and stop if the command works + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) + rm -rf conftest.dir + if test -s conftest.tar; then + AM_RUN_LOG([$am__untar /dev/null 2>&1 && break + fi +done +rm -rf conftest.dir + +AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) +AC_MSG_RESULT([$am_cv_prog_tar_$1])]) +AC_SUBST([am__tar]) +AC_SUBST([am__untar]) +]) +m4trace:m4/aclocal-include.m4:9: -1- AC_DEFUN([AM_ACLOCAL_INCLUDE], [ + AM_CONDITIONAL(INSIDE_GNOME_COMMON, test x = y) + + test -n "$ACLOCAL_FLAGS" && ACLOCAL="$ACLOCAL $ACLOCAL_FLAGS" + + for k in $1 ; do ACLOCAL="$ACLOCAL -I $k" ; done +]) +m4trace:m4/alsa.m4:15: -1- AC_DEFUN([AM_PATH_ALSA], [dnl Save the original CFLAGS, LDFLAGS, and LIBS +alsa_save_CFLAGS="$CFLAGS" +alsa_save_LDFLAGS="$LDFLAGS" +alsa_save_LIBS="$LIBS" +alsa_found=yes + +dnl +dnl Get the cflags and libraries for alsa +dnl +AC_ARG_WITH(alsa-prefix, +[ --with-alsa-prefix=PFX prefix where alsa library is installed (optional)], +[alsa_prefix="$withval"], [alsa_prefix=""]) + +AC_ARG_WITH(alsa-inc-prefix, +[ --with-alsa-inc-prefix=PFX prefix where include libraries are (optional)], +[alsa_inc_prefix="$withval"], [alsa_inc_prefix=""]) + +dnl FIXME: this is not yet implemented +AC_ARG_ENABLE(alsatest, +[ --disable-alsatest do not try to compile and run a test alsa program], +[enable_alsatest=no], +[enable_alsatest=yes]) + +dnl Add any special include directories +AC_MSG_CHECKING(for ALSA CFLAGS) +if test "$alsa_inc_prefix" != "" ; then + ALSA_CFLAGS="$ALSA_CFLAGS -I$alsa_inc_prefix" + CFLAGS="$CFLAGS -I$alsa_inc_prefix" +fi +AC_MSG_RESULT($ALSA_CFLAGS) + +dnl add any special lib dirs +AC_MSG_CHECKING(for ALSA LDFLAGS) +if test "$alsa_prefix" != "" ; then + ALSA_LIBS="$ALSA_LIBS -L$alsa_prefix" + LDFLAGS="$LDFLAGS $ALSA_LIBS" +fi + +dnl add the alsa library +ALSA_LIBS="$ALSA_LIBS -lasound -lm -ldl" +LIBS=`echo $LIBS | sed 's/-lm//'` +LIBS=`echo $LIBS | sed 's/-ldl//'` +LIBS=`echo $LIBS | sed 's/ //'` +LIBS="$ALSA_LIBS $LIBS" +AC_MSG_RESULT($ALSA_LIBS) + +dnl Check for a working version of libasound that is of the right version. +min_alsa_version=ifelse([$1], ,0.1.1,$1) +AC_MSG_CHECKING(for libasound headers version >= $min_alsa_version) +no_alsa="" + alsa_min_major_version=`echo $min_alsa_version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` + alsa_min_minor_version=`echo $min_alsa_version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` + alsa_min_micro_version=`echo $min_alsa_version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` + +AC_LANG_SAVE +AC_LANG_C +AC_TRY_COMPILE([ +#include +], [ +void main(void) +{ +/* ensure backward compatibility */ +#if !defined(SND_LIB_MAJOR) && defined(SOUNDLIB_VERSION_MAJOR) +#define SND_LIB_MAJOR SOUNDLIB_VERSION_MAJOR +#endif +#if !defined(SND_LIB_MINOR) && defined(SOUNDLIB_VERSION_MINOR) +#define SND_LIB_MINOR SOUNDLIB_VERSION_MINOR +#endif +#if !defined(SND_LIB_SUBMINOR) && defined(SOUNDLIB_VERSION_SUBMINOR) +#define SND_LIB_SUBMINOR SOUNDLIB_VERSION_SUBMINOR +#endif + +# if(SND_LIB_MAJOR > $alsa_min_major_version) + exit(0); +# else +# if(SND_LIB_MAJOR < $alsa_min_major_version) +# error not present +# endif + +# if(SND_LIB_MINOR > $alsa_min_minor_version) + exit(0); +# else +# if(SND_LIB_MINOR < $alsa_min_minor_version) +# error not present +# endif + +# if(SND_LIB_SUBMINOR < $alsa_min_micro_version) +# error not present +# endif +# endif +# endif +exit(0); +} +], + [AC_MSG_RESULT(found.)], + [AC_MSG_RESULT(not present.) + ifelse([$3], , [AC_MSG_ERROR(Sufficiently new version of libasound not found.)]) + alsa_found=no] +) +AC_LANG_RESTORE + +dnl Now that we know that we have the right version, let's see if we have the library and not just the headers. +AC_LANG_SAVE +AC_LANG_CPLUSPLUS +AC_CHECK_LIB([asound], [snd_seq_create_event],, + [ifelse([$3], , [AC_MSG_ERROR(No linkable libasound was found.)]) + alsa_found=no] +) +AC_LANG_RESTORE + +if test "x$alsa_found" = "xyes" ; then + ifelse([$2], , :, [$2]) + LIBS=`echo $LIBS | sed 's/-lasound//g'` + LIBS=`echo $LIBS | sed 's/ //'` + LIBS="-lasound $LIBS" +fi +if test "x$alsa_found" = "xno" ; then + ifelse([$3], , :, [$3]) + CFLAGS="$alsa_save_CFLAGS" + LDFLAGS="$alsa_save_LDFLAGS" + LIBS="$alsa_save_LIBS" + ALSA_CFLAGS="" + ALSA_LIBS="" +fi + +dnl That should be it. Now just export out symbols: +AC_SUBST(ALSA_CFLAGS) +AC_SUBST(ALSA_LIBS) +]) +m4trace:m4/docbook.m4:5: -1- AC_DEFUN([PGAC_PROG_JADE], [AC_CHECK_PROGS([JADE], [openjade jade])]) +m4trace:m4/docbook.m4:11: -1- AC_DEFUN([PGAC_PROG_NSGMLS], [AC_CHECK_PROGS([NSGMLS], [onsgmls nsgmls])]) +m4trace:m4/docbook.m4:17: -1- AC_DEFUN([PGAC_CHECK_DOCBOOK], [AC_REQUIRE([PGAC_PROG_NSGMLS]) +AC_CACHE_CHECK([for DocBook V$1], [pgac_cv_check_docbook], +[cat >conftest.sgml < + + test + + random + + testsect + text + + + +EOF + +${NSGMLS-false} -s conftest.sgml 1>&5 2>&1 +if test $? -eq 0; then + pgac_cv_check_docbook=yes +else + pgac_cv_check_docbook=no +fi +rm -f conftest.sgml]) + +have_docbook=$pgac_cv_check_docbook +AC_SUBST([have_docbook]) +]) +m4trace:m4/docbook.m4:50: -1- AC_DEFUN([PGAC_PATH_DOCBOOK_STYLESHEETS], [ +AC_MSG_CHECKING([for DocBook stylesheets]) +AC_ARG_WITH(docbook-stylesheets, + [ --with-docbook-stylesheets=DIR use DIR/html/docbook.dsl], + [muse_docbook_prefix="$withval"]) +AC_CACHE_VAL([pgac_cv_path_stylesheets], [ +if test -n "$muse_docbook_prefix"; then + if test -r "$muse_docbook_prefix/html/docbook.dsl" \ + && test -r "$muse_docbook_prefix/print/docbook.dsl"; then + pgac_cv_path_stylesheets="$muse_docbook_prefix" + fi +fi +if test -z "$pgac_cv_path_stylesheets"; then + if test -n "$DOCBOOKSTYLE"; then + if test -r "$DOCBOOKSTYLE/html/docbook.dsl" \ + && test -r "$DOCBOOKSTYLE/print/docbook.dsl"; then + pgac_cv_path_stylesheets="$DOCBOOKSTYLE" + fi + fi +fi +if test -z "$pgac_cv_path_stylesheets"; then + for pgac_prefix in /usr /usr/local /opt; do + for pgac_infix in share lib; do + for pgac_postfix in \ + sgml/stylesheets/nwalsh-modular \ + sgml/stylesheets/docbook \ + sgml/docbook/dsssl/modular \ + sgml/docbook/stylesheet/dsssl/modular + do + pgac_candidate=$pgac_prefix/$pgac_infix/$pgac_postfix + if test -r "$pgac_candidate/html/docbook.dsl" \ + && test -r "$pgac_candidate/print/docbook.dsl" + then + pgac_cv_path_stylesheets=$pgac_candidate + break 3 + fi + done + done + done +fi +]) +DOCBOOKSTYLE=$pgac_cv_path_stylesheets +AC_SUBST([DOCBOOKSTYLE]) +if test -n "$DOCBOOKSTYLE"; then + AC_MSG_RESULT([$DOCBOOKSTYLE]) +else + AC_MSG_RESULT(no) +fi]) +m4trace:m4/libtool.m4:67: -1- AC_DEFUN([LT_INIT], [AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT +AC_BEFORE([$0], [LT_LANG])dnl +AC_BEFORE([$0], [LT_OUTPUT])dnl +AC_BEFORE([$0], [LTDL_INIT])dnl +m4_require([_LT_CHECK_BUILDDIR])dnl + +dnl Autoconf doesn't catch unexpanded LT_ macros by default: +m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl +m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl +dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 +dnl unless we require an AC_DEFUNed macro: +AC_REQUIRE([LTOPTIONS_VERSION])dnl +AC_REQUIRE([LTSUGAR_VERSION])dnl +AC_REQUIRE([LTVERSION_VERSION])dnl +AC_REQUIRE([LTOBSOLETE_VERSION])dnl +m4_require([_LT_PROG_LTMAIN])dnl + +dnl Parse OPTIONS +_LT_SET_OPTIONS([$0], [$1]) + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ltmain" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' +AC_SUBST(LIBTOOL)dnl + +_LT_SETUP + +# Only expand once: +m4_define([LT_INIT]) +]) +m4trace:m4/libtool.m4:102: -1- AU_DEFUN([AC_PROG_LIBTOOL], [m4_if($#, 0, [LT_INIT], [LT_INIT($@)])]) +m4trace:m4/libtool.m4:102: -1- AC_DEFUN([AC_PROG_LIBTOOL], [AC_DIAGNOSE([obsolete], [The macro `AC_PROG_LIBTOOL' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [LT_INIT], [LT_INIT($@)])]) +m4trace:m4/libtool.m4:103: -1- AU_DEFUN([AM_PROG_LIBTOOL], [m4_if($#, 0, [LT_INIT], [LT_INIT($@)])]) +m4trace:m4/libtool.m4:103: -1- AC_DEFUN([AM_PROG_LIBTOOL], [AC_DIAGNOSE([obsolete], [The macro `AM_PROG_LIBTOOL' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [LT_INIT], [LT_INIT($@)])]) +m4trace:m4/libtool.m4:562: -1- AC_DEFUN([LT_OUTPUT], [: ${CONFIG_LT=./config.lt} +AC_MSG_NOTICE([creating $CONFIG_LT]) +cat >"$CONFIG_LT" <<_LTEOF +#! $SHELL +# Generated by $as_me. +# Run this file to recreate a libtool stub with the current configuration. + +lt_cl_silent=false +SHELL=\${CONFIG_SHELL-$SHELL} +_LTEOF + +cat >>"$CONFIG_LT" <<\_LTEOF +AS_SHELL_SANITIZE +_AS_PREPARE + +exec AS_MESSAGE_FD>&1 +exec AS_MESSAGE_LOG_FD>>config.log +{ + echo + AS_BOX([Running $as_me.]) +} >&AS_MESSAGE_LOG_FD + +lt_cl_help="\ +\`$as_me' creates a local libtool stub from the current configuration, +for use in further configure time tests before the real libtool is +generated. + +Usage: $[0] [[OPTIONS]] + + -h, --help print this help, then exit + -V, --version print version number, then exit + -q, --quiet do not print progress messages + -d, --debug don't remove temporary files + +Report bugs to ." + +lt_cl_version="\ +m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl +m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) +configured by $[0], generated by m4_PACKAGE_STRING. + +Copyright (C) 2008 Free Software Foundation, Inc. +This config.lt script is free software; the Free Software Foundation +gives unlimited permision to copy, distribute and modify it." + +while test $[#] != 0 +do + case $[1] in + --version | --v* | -V ) + echo "$lt_cl_version"; exit 0 ;; + --help | --h* | -h ) + echo "$lt_cl_help"; exit 0 ;; + --debug | --d* | -d ) + debug=: ;; + --quiet | --q* | --silent | --s* | -q ) + lt_cl_silent=: ;; + + -*) AC_MSG_ERROR([unrecognized option: $[1] +Try \`$[0] --help' for more information.]) ;; + + *) AC_MSG_ERROR([unrecognized argument: $[1] +Try \`$[0] --help' for more information.]) ;; + esac + shift +done + +if $lt_cl_silent; then + exec AS_MESSAGE_FD>/dev/null +fi +_LTEOF + +cat >>"$CONFIG_LT" <<_LTEOF +_LT_OUTPUT_LIBTOOL_COMMANDS_INIT +_LTEOF + +cat >>"$CONFIG_LT" <<\_LTEOF +AC_MSG_NOTICE([creating $ofile]) +_LT_OUTPUT_LIBTOOL_COMMANDS +AS_EXIT(0) +_LTEOF +chmod +x "$CONFIG_LT" + +# configure is writing to config.log, but config.lt does its own redirection, +# appending to config.log, which fails on DOS, as config.log is still kept +# open by configure. Here we exec the FD to /dev/null, effectively closing +# config.log, so it can be properly (re)opened and appended to by config.lt. +if test "$no_create" != yes; then + lt_cl_success=: + test "$silent" = yes && + lt_config_lt_args="$lt_config_lt_args --quiet" + exec AS_MESSAGE_LOG_FD>/dev/null + $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false + exec AS_MESSAGE_LOG_FD>>config.log + $lt_cl_success || AS_EXIT(1) +fi +]) +m4trace:m4/libtool.m4:757: -1- AC_DEFUN([LT_SUPPORTED_TAG], []) +m4trace:m4/libtool.m4:768: -1- AC_DEFUN([LT_LANG], [AC_BEFORE([$0], [LT_OUTPUT])dnl +m4_case([$1], + [C], [_LT_LANG(C)], + [C++], [_LT_LANG(CXX)], + [Java], [_LT_LANG(GCJ)], + [Fortran 77], [_LT_LANG(F77)], + [Fortran], [_LT_LANG(FC)], + [Windows Resource], [_LT_LANG(RC)], + [m4_ifdef([_LT_LANG_]$1[_CONFIG], + [_LT_LANG($1)], + [m4_fatal([$0: unsupported language: "$1"])])])dnl +]) +m4trace:m4/libtool.m4:830: -1- AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) +m4trace:m4/libtool.m4:830: -1- AC_DEFUN([AC_LIBTOOL_CXX], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_CXX' is obsolete. +You should run autoupdate.])dnl +LT_LANG(C++)]) +m4trace:m4/libtool.m4:831: -1- AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) +m4trace:m4/libtool.m4:831: -1- AC_DEFUN([AC_LIBTOOL_F77], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_F77' is obsolete. +You should run autoupdate.])dnl +LT_LANG(Fortran 77)]) +m4trace:m4/libtool.m4:832: -1- AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) +m4trace:m4/libtool.m4:832: -1- AC_DEFUN([AC_LIBTOOL_FC], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_FC' is obsolete. +You should run autoupdate.])dnl +LT_LANG(Fortran)]) +m4trace:m4/libtool.m4:833: -1- AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) +m4trace:m4/libtool.m4:833: -1- AC_DEFUN([AC_LIBTOOL_GCJ], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_GCJ' is obsolete. +You should run autoupdate.])dnl +LT_LANG(Java)]) +m4trace:m4/libtool.m4:1402: -1- AC_DEFUN([_LT_COMPILER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$3" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + fi + $RM conftest* +]) + +if test x"[$]$2" = xyes; then + m4_if([$5], , :, [$5]) +else + m4_if([$6], , :, [$6]) +fi +]) +m4trace:m4/libtool.m4:1444: -1- AU_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [m4_if($#, 0, [_LT_COMPILER_OPTION], [_LT_COMPILER_OPTION($@)])]) +m4trace:m4/libtool.m4:1444: -1- AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_COMPILER_OPTION' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [_LT_COMPILER_OPTION], [_LT_COMPILER_OPTION($@)])]) +m4trace:m4/libtool.m4:1453: -1- AC_DEFUN([_LT_LINKER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $3" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&AS_MESSAGE_LOG_FD + $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + else + $2=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" +]) + +if test x"[$]$2" = xyes; then + m4_if([$4], , :, [$4]) +else + m4_if([$5], , :, [$5]) +fi +]) +m4trace:m4/libtool.m4:1488: -1- AU_DEFUN([AC_LIBTOOL_LINKER_OPTION], [m4_if($#, 0, [_LT_LINKER_OPTION], [_LT_LINKER_OPTION($@)])]) +m4trace:m4/libtool.m4:1488: -1- AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_LINKER_OPTION' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [_LT_LINKER_OPTION], [_LT_LINKER_OPTION($@)])]) +m4trace:m4/libtool.m4:1495: -1- AC_DEFUN([LT_CMD_MAX_LEN], [AC_REQUIRE([AC_CANONICAL_HOST])dnl +# find the maximum length of command line arguments +AC_MSG_CHECKING([the maximum length of command line arguments]) +AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl + i=0 + teststring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8 ; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test "X"`$SHELL [$]0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \ + = "XX$teststring$teststring"; } >/dev/null 2>&1 && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac +]) +if test -n $lt_cv_sys_max_cmd_len ; then + AC_MSG_RESULT($lt_cv_sys_max_cmd_len) +else + AC_MSG_RESULT(none) +fi +max_cmd_len=$lt_cv_sys_max_cmd_len +_LT_DECL([], [max_cmd_len], [0], + [What is the maximum length of a command?]) +]) +m4trace:m4/libtool.m4:1623: -1- AU_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [m4_if($#, 0, [LT_CMD_MAX_LEN], [LT_CMD_MAX_LEN($@)])]) +m4trace:m4/libtool.m4:1623: -1- AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_SYS_MAX_CMD_LEN' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [LT_CMD_MAX_LEN], [LT_CMD_MAX_LEN($@)])]) +m4trace:m4/libtool.m4:1724: -1- AC_DEFUN([LT_SYS_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl +if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ]) + ;; + + *) + AC_CHECK_FUNC([shl_load], + [lt_cv_dlopen="shl_load"], + [AC_CHECK_LIB([dld], [shl_load], + [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], + [AC_CHECK_FUNC([dlopen], + [lt_cv_dlopen="dlopen"], + [AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], + [AC_CHECK_LIB([svld], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], + [AC_CHECK_LIB([dld], [dld_link], + [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) + ]) + ]) + ]) + ]) + ]) + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + AC_CACHE_CHECK([whether a program can dlopen itself], + lt_cv_dlopen_self, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, + lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) + ]) + + if test "x$lt_cv_dlopen_self" = xyes; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + AC_CACHE_CHECK([whether a statically linked program can dlopen itself], + lt_cv_dlopen_self_static, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, + lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) + ]) + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi +_LT_DECL([dlopen_support], [enable_dlopen], [0], + [Whether dlopen is supported]) +_LT_DECL([dlopen_self], [enable_dlopen_self], [0], + [Whether dlopen of programs is supported]) +_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], + [Whether dlopen of statically linked programs is supported]) +]) +m4trace:m4/libtool.m4:1841: -1- AU_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [m4_if($#, 0, [LT_SYS_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF($@)])]) +m4trace:m4/libtool.m4:1841: -1- AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_DLOPEN_SELF' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [LT_SYS_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF($@)])]) +m4trace:m4/libtool.m4:2741: -1- AC_DEFUN([_LT_PATH_TOOL_PREFIX], [m4_require([_LT_DECL_EGREP])dnl +AC_MSG_CHECKING([for $1]) +AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, +[case $MAGIC_CMD in +[[\\/*] | ?:[\\/]*]) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR +dnl $ac_dummy forces splitting on constant user-supplied paths. +dnl POSIX.2 word splitting is done only on the output of word expansions, +dnl not every word. This closes a longstanding sh security hole. + ac_dummy="m4_if([$2], , $PATH, [$2])" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$1; then + lt_cv_path_MAGIC_CMD="$ac_dir/$1" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac]) +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + AC_MSG_RESULT($MAGIC_CMD) +else + AC_MSG_RESULT(no) +fi +_LT_DECL([], [MAGIC_CMD], [0], + [Used to examine libraries when file_magic_cmd begins with "file"])dnl +]) +m4trace:m4/libtool.m4:2803: -1- AU_DEFUN([AC_PATH_TOOL_PREFIX], [m4_if($#, 0, [_LT_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX($@)])]) +m4trace:m4/libtool.m4:2803: -1- AC_DEFUN([AC_PATH_TOOL_PREFIX], [AC_DIAGNOSE([obsolete], [The macro `AC_PATH_TOOL_PREFIX' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [_LT_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX($@)])]) +m4trace:m4/libtool.m4:2826: -1- AC_DEFUN([LT_PATH_LD], [AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_DECL_EGREP])dnl + +AC_ARG_WITH([gnu-ld], + [AS_HELP_STRING([--with-gnu-ld], + [assume the C compiler uses GNU ld @<:@default=no@:>@])], + [test "$withval" = no || with_gnu_ld=yes], + [with_gnu_ld=no])dnl + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + AC_MSG_CHECKING([for ld used by $CC]) + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [[\\/]]* | ?:[[\\/]]*) + re_direlt='/[[^/]][[^/]]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + AC_MSG_CHECKING([for GNU ld]) +else + AC_MSG_CHECKING([for non-GNU ld]) +fi +AC_CACHE_VAL(lt_cv_path_LD, +[if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS="$lt_save_ifs" + done + : ${lt_cv_path_NM=no} +fi]) +if test "$lt_cv_path_NM" != "no"; then + NM="$lt_cv_path_NM" +else + # Didn't find any BSD compatible name lister, look for dumpbin. + AC_CHECK_TOOLS(DUMPBIN, ["dumpbin -symbols" "link -dump -symbols"], :) + AC_SUBST([DUMPBIN]) + if test "$DUMPBIN" != ":"; then + NM="$DUMPBIN" + fi +fi +test -z "$NM" && NM=nm +AC_SUBST([NM]) +_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl + +AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], + [lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:__oline__: $ac_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:__oline__: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:__oline__: output\"" >&AS_MESSAGE_LOG_FD) + cat conftest.out >&AS_MESSAGE_LOG_FD + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest*]) +]) +m4trace:m4/libtool.m4:3257: -1- AU_DEFUN([AM_PROG_NM], [m4_if($#, 0, [LT_PATH_NM], [LT_PATH_NM($@)])]) +m4trace:m4/libtool.m4:3257: -1- AC_DEFUN([AM_PROG_NM], [AC_DIAGNOSE([obsolete], [The macro `AM_PROG_NM' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [LT_PATH_NM], [LT_PATH_NM($@)])]) +m4trace:m4/libtool.m4:3258: -1- AU_DEFUN([AC_PROG_NM], [m4_if($#, 0, [LT_PATH_NM], [LT_PATH_NM($@)])]) +m4trace:m4/libtool.m4:3258: -1- AC_DEFUN([AC_PROG_NM], [AC_DIAGNOSE([obsolete], [The macro `AC_PROG_NM' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [LT_PATH_NM], [LT_PATH_NM($@)])]) +m4trace:m4/libtool.m4:3267: -1- AC_DEFUN([LT_LIB_M], [AC_REQUIRE([AC_CANONICAL_HOST])dnl +LIBM= +case $host in +*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*) + # These system don't have libm, or don't need it + ;; +*-ncr-sysv4.3*) + AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") + AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") + ;; +*) + AC_CHECK_LIB(m, cos, LIBM="-lm") + ;; +esac +AC_SUBST([LIBM]) +]) +m4trace:m4/libtool.m4:3286: -1- AU_DEFUN([AC_CHECK_LIBM], [m4_if($#, 0, [LT_LIB_M], [LT_LIB_M($@)])]) +m4trace:m4/libtool.m4:3286: -1- AC_DEFUN([AC_CHECK_LIBM], [AC_DIAGNOSE([obsolete], [The macro `AC_CHECK_LIBM' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [LT_LIB_M], [LT_LIB_M($@)])]) +m4trace:m4/libtool.m4:6987: -1- AC_DEFUN([LT_PROG_GCJ], [m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], + [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], + [AC_CHECK_TOOL(GCJ, gcj,) + test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" + AC_SUBST(GCJFLAGS)])])[]dnl +]) +m4trace:m4/libtool.m4:6996: -1- AU_DEFUN([LT_AC_PROG_GCJ], [m4_if($#, 0, [LT_PROG_GCJ], [LT_PROG_GCJ($@)])]) +m4trace:m4/libtool.m4:6996: -1- AC_DEFUN([LT_AC_PROG_GCJ], [AC_DIAGNOSE([obsolete], [The macro `LT_AC_PROG_GCJ' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [LT_PROG_GCJ], [LT_PROG_GCJ($@)])]) +m4trace:m4/libtool.m4:7003: -1- AC_DEFUN([LT_PROG_RC], [AC_CHECK_TOOL(RC, windres,) +]) +m4trace:m4/libtool.m4:7008: -1- AU_DEFUN([LT_AC_PROG_RC], [m4_if($#, 0, [LT_PROG_RC], [LT_PROG_RC($@)])]) +m4trace:m4/libtool.m4:7008: -1- AC_DEFUN([LT_AC_PROG_RC], [AC_DIAGNOSE([obsolete], [The macro `LT_AC_PROG_RC' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [LT_PROG_RC], [LT_PROG_RC($@)])]) +m4trace:m4/libtool.m4:7119: -1- AU_DEFUN([LT_AC_PROG_SED], [m4_if($#, 0, [AC_PROG_SED], [AC_PROG_SED($@)])]) +m4trace:m4/libtool.m4:7119: -1- AC_DEFUN([LT_AC_PROG_SED], [AC_DIAGNOSE([obsolete], [The macro `LT_AC_PROG_SED' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [AC_PROG_SED], [AC_PROG_SED($@)])]) +m4trace:m4/ltoptions.m4:13: -1- AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) +m4trace:m4/ltoptions.m4:110: -1- AU_DEFUN([AC_LIBTOOL_DLOPEN], [_LT_SET_OPTION([LT_INIT], [dlopen]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `dlopen' option into LT_INIT's first parameter.]) +]) +m4trace:m4/ltoptions.m4:110: -1- AC_DEFUN([AC_LIBTOOL_DLOPEN], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_DLOPEN' is obsolete. +You should run autoupdate.])dnl +_LT_SET_OPTION([LT_INIT], [dlopen]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `dlopen' option into LT_INIT's first parameter.]) +]) +m4trace:m4/ltoptions.m4:145: -1- AU_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_REQUIRE([AC_CANONICAL_HOST])dnl +_LT_SET_OPTION([LT_INIT], [win32-dll]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `win32-dll' option into LT_INIT's first parameter.]) +]) +m4trace:m4/ltoptions.m4:145: -1- AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_WIN32_DLL' is obsolete. +You should run autoupdate.])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +_LT_SET_OPTION([LT_INIT], [win32-dll]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `win32-dll' option into LT_INIT's first parameter.]) +]) +m4trace:m4/ltoptions.m4:194: -1- AC_DEFUN([AC_ENABLE_SHARED], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) +]) +m4trace:m4/ltoptions.m4:198: -1- AC_DEFUN([AC_DISABLE_SHARED], [_LT_SET_OPTION([LT_INIT], [disable-shared]) +]) +m4trace:m4/ltoptions.m4:202: -1- AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) +m4trace:m4/ltoptions.m4:202: -1- AC_DEFUN([AM_ENABLE_SHARED], [AC_DIAGNOSE([obsolete], [The macro `AM_ENABLE_SHARED' is obsolete. +You should run autoupdate.])dnl +AC_ENABLE_SHARED($@)]) +m4trace:m4/ltoptions.m4:203: -1- AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) +m4trace:m4/ltoptions.m4:203: -1- AC_DEFUN([AM_DISABLE_SHARED], [AC_DIAGNOSE([obsolete], [The macro `AM_DISABLE_SHARED' is obsolete. +You should run autoupdate.])dnl +AC_DISABLE_SHARED($@)]) +m4trace:m4/ltoptions.m4:248: -1- AC_DEFUN([AC_ENABLE_STATIC], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) +]) +m4trace:m4/ltoptions.m4:252: -1- AC_DEFUN([AC_DISABLE_STATIC], [_LT_SET_OPTION([LT_INIT], [disable-static]) +]) +m4trace:m4/ltoptions.m4:256: -1- AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) +m4trace:m4/ltoptions.m4:256: -1- AC_DEFUN([AM_ENABLE_STATIC], [AC_DIAGNOSE([obsolete], [The macro `AM_ENABLE_STATIC' is obsolete. +You should run autoupdate.])dnl +AC_ENABLE_STATIC($@)]) +m4trace:m4/ltoptions.m4:257: -1- AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) +m4trace:m4/ltoptions.m4:257: -1- AC_DEFUN([AM_DISABLE_STATIC], [AC_DIAGNOSE([obsolete], [The macro `AM_DISABLE_STATIC' is obsolete. +You should run autoupdate.])dnl +AC_DISABLE_STATIC($@)]) +m4trace:m4/ltoptions.m4:302: -1- AU_DEFUN([AC_ENABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the `fast-install' option into LT_INIT's first parameter.]) +]) +m4trace:m4/ltoptions.m4:302: -1- AC_DEFUN([AC_ENABLE_FAST_INSTALL], [AC_DIAGNOSE([obsolete], [The macro `AC_ENABLE_FAST_INSTALL' is obsolete. +You should run autoupdate.])dnl +_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the `fast-install' option into LT_INIT's first parameter.]) +]) +m4trace:m4/ltoptions.m4:309: -1- AU_DEFUN([AC_DISABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], [disable-fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the `disable-fast-install' option into LT_INIT's first parameter.]) +]) +m4trace:m4/ltoptions.m4:309: -1- AC_DEFUN([AC_DISABLE_FAST_INSTALL], [AC_DIAGNOSE([obsolete], [The macro `AC_DISABLE_FAST_INSTALL' is obsolete. +You should run autoupdate.])dnl +_LT_SET_OPTION([LT_INIT], [disable-fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the `disable-fast-install' option into LT_INIT's first parameter.]) +]) +m4trace:m4/ltoptions.m4:342: -1- AU_DEFUN([AC_LIBTOOL_PICMODE], [_LT_SET_OPTION([LT_INIT], [pic-only]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `pic-only' option into LT_INIT's first parameter.]) +]) +m4trace:m4/ltoptions.m4:342: -1- AC_DEFUN([AC_LIBTOOL_PICMODE], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_PICMODE' is obsolete. +You should run autoupdate.])dnl +_LT_SET_OPTION([LT_INIT], [pic-only]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `pic-only' option into LT_INIT's first parameter.]) +]) +m4trace:m4/ltsugar.m4:13: -1- AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) +m4trace:m4/ltversion.m4:18: -1- AC_DEFUN([LTVERSION_VERSION], [macro_version='2.2.6b' +macro_revision='1.3017' +_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) +_LT_DECL(, macro_revision, 0) +]) +m4trace:m4/lt~obsolete.m4:36: -1- AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) +m4trace:m4/lt~obsolete.m4:40: -1- AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH]) +m4trace:m4/lt~obsolete.m4:41: -1- AC_DEFUN([_LT_AC_SHELL_INIT]) +m4trace:m4/lt~obsolete.m4:42: -1- AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX]) +m4trace:m4/lt~obsolete.m4:44: -1- AC_DEFUN([_LT_AC_TAGVAR]) +m4trace:m4/lt~obsolete.m4:45: -1- AC_DEFUN([AC_LTDL_ENABLE_INSTALL]) +m4trace:m4/lt~obsolete.m4:46: -1- AC_DEFUN([AC_LTDL_PREOPEN]) +m4trace:m4/lt~obsolete.m4:47: -1- AC_DEFUN([_LT_AC_SYS_COMPILER]) +m4trace:m4/lt~obsolete.m4:48: -1- AC_DEFUN([_LT_AC_LOCK]) +m4trace:m4/lt~obsolete.m4:49: -1- AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE]) +m4trace:m4/lt~obsolete.m4:50: -1- AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF]) +m4trace:m4/lt~obsolete.m4:51: -1- AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O]) +m4trace:m4/lt~obsolete.m4:52: -1- AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS]) +m4trace:m4/lt~obsolete.m4:53: -1- AC_DEFUN([AC_LIBTOOL_OBJDIR]) +m4trace:m4/lt~obsolete.m4:54: -1- AC_DEFUN([AC_LTDL_OBJDIR]) +m4trace:m4/lt~obsolete.m4:55: -1- AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH]) +m4trace:m4/lt~obsolete.m4:56: -1- AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP]) +m4trace:m4/lt~obsolete.m4:57: -1- AC_DEFUN([AC_PATH_MAGIC]) +m4trace:m4/lt~obsolete.m4:58: -1- AC_DEFUN([AC_PROG_LD_GNU]) +m4trace:m4/lt~obsolete.m4:59: -1- AC_DEFUN([AC_PROG_LD_RELOAD_FLAG]) +m4trace:m4/lt~obsolete.m4:60: -1- AC_DEFUN([AC_DEPLIBS_CHECK_METHOD]) +m4trace:m4/lt~obsolete.m4:61: -1- AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI]) +m4trace:m4/lt~obsolete.m4:62: -1- AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE]) +m4trace:m4/lt~obsolete.m4:63: -1- AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC]) +m4trace:m4/lt~obsolete.m4:64: -1- AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS]) +m4trace:m4/lt~obsolete.m4:65: -1- AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP]) +m4trace:m4/lt~obsolete.m4:66: -1- AC_DEFUN([LT_AC_PROG_EGREP]) +m4trace:m4/lt~obsolete.m4:71: -1- AC_DEFUN([_AC_PROG_LIBTOOL]) +m4trace:m4/lt~obsolete.m4:72: -1- AC_DEFUN([AC_LIBTOOL_SETUP]) +m4trace:m4/lt~obsolete.m4:73: -1- AC_DEFUN([_LT_AC_CHECK_DLFCN]) +m4trace:m4/lt~obsolete.m4:74: -1- AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER]) +m4trace:m4/lt~obsolete.m4:75: -1- AC_DEFUN([_LT_AC_TAGCONFIG]) +m4trace:m4/lt~obsolete.m4:77: -1- AC_DEFUN([_LT_AC_LANG_CXX]) +m4trace:m4/lt~obsolete.m4:78: -1- AC_DEFUN([_LT_AC_LANG_F77]) +m4trace:m4/lt~obsolete.m4:79: -1- AC_DEFUN([_LT_AC_LANG_GCJ]) +m4trace:m4/lt~obsolete.m4:80: -1- AC_DEFUN([AC_LIBTOOL_RC]) +m4trace:m4/lt~obsolete.m4:81: -1- AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG]) +m4trace:m4/lt~obsolete.m4:82: -1- AC_DEFUN([_LT_AC_LANG_C_CONFIG]) +m4trace:m4/lt~obsolete.m4:83: -1- AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG]) +m4trace:m4/lt~obsolete.m4:84: -1- AC_DEFUN([_LT_AC_LANG_CXX_CONFIG]) +m4trace:m4/lt~obsolete.m4:85: -1- AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG]) +m4trace:m4/lt~obsolete.m4:86: -1- AC_DEFUN([_LT_AC_LANG_F77_CONFIG]) +m4trace:m4/lt~obsolete.m4:87: -1- AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG]) +m4trace:m4/lt~obsolete.m4:88: -1- AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG]) +m4trace:m4/lt~obsolete.m4:89: -1- AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG]) +m4trace:m4/lt~obsolete.m4:90: -1- AC_DEFUN([_LT_AC_LANG_RC_CONFIG]) +m4trace:m4/lt~obsolete.m4:91: -1- AC_DEFUN([AC_LIBTOOL_CONFIG]) +m4trace:m4/lt~obsolete.m4:92: -1- AC_DEFUN([_LT_AC_FILE_LTDLL_C]) +m4trace:configure.ac:5: -1- m4_pattern_forbid([^_?A[CHUM]_]) +m4trace:configure.ac:5: -1- m4_pattern_forbid([_AC_]) +m4trace:configure.ac:5: -1- m4_pattern_forbid([^LIBOBJS$], [do not use LIBOBJS directly, use AC_LIBOBJ (see section `AC_LIBOBJ vs LIBOBJS']) +m4trace:configure.ac:5: -1- m4_pattern_allow([^AS_FLAGS$]) +m4trace:configure.ac:5: -1- m4_pattern_forbid([^_?m4_]) +m4trace:configure.ac:5: -1- m4_pattern_forbid([^dnl$]) +m4trace:configure.ac:5: -1- m4_pattern_forbid([^_?AS_]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^SHELL$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^PATH_SEPARATOR$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^PACKAGE_NAME$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^PACKAGE_TARNAME$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^PACKAGE_VERSION$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^PACKAGE_STRING$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^PACKAGE_URL$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^exec_prefix$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^prefix$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^program_transform_name$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^bindir$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^sbindir$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^libexecdir$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^datarootdir$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^datadir$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^sysconfdir$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^sharedstatedir$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^localstatedir$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^includedir$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^oldincludedir$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^docdir$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^infodir$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^htmldir$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^dvidir$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^pdfdir$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^psdir$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^libdir$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^localedir$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^mandir$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^PACKAGE_NAME$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^PACKAGE_TARNAME$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^PACKAGE_VERSION$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^PACKAGE_STRING$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^PACKAGE_URL$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^DEFS$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^ECHO_C$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^ECHO_N$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^ECHO_T$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^LIBS$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^build_alias$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^host_alias$]) +m4trace:configure.ac:5: -1- m4_pattern_allow([^target_alias$]) +m4trace:configure.ac:7: -1- AM_INIT_AUTOMAKE([1.1]) +m4trace:configure.ac:7: -1- m4_pattern_allow([^AM_[A-Z]+FLAGS$]) +m4trace:configure.ac:7: -1- AM_SET_CURRENT_AUTOMAKE_VERSION +m4trace:configure.ac:7: -1- AM_AUTOMAKE_VERSION([1.11.1]) +m4trace:configure.ac:7: -1- _AM_AUTOCONF_VERSION([2.65]) +m4trace:configure.ac:7: -1- m4_pattern_allow([^INSTALL_PROGRAM$]) +m4trace:configure.ac:7: -1- m4_pattern_allow([^INSTALL_SCRIPT$]) +m4trace:configure.ac:7: -1- m4_pattern_allow([^INSTALL_DATA$]) +m4trace:configure.ac:7: -1- m4_pattern_allow([^am__isrc$]) +m4trace:configure.ac:7: -1- _AM_SUBST_NOTMAKE([am__isrc]) +m4trace:configure.ac:7: -1- m4_pattern_allow([^CYGPATH_W$]) +m4trace:configure.ac:7: -1- _AM_SET_OPTIONS([1.1]) +m4trace:configure.ac:7: -1- _AM_SET_OPTION([1.1]) +m4trace:configure.ac:7: -2- _AM_MANGLE_OPTION([1.1]) +m4trace:configure.ac:7: -1- m4_pattern_allow([^PACKAGE$]) +m4trace:configure.ac:7: -1- m4_pattern_allow([^VERSION$]) +m4trace:configure.ac:7: -1- _AM_IF_OPTION([no-define], [], [AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) + AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])]) +m4trace:configure.ac:7: -2- _AM_MANGLE_OPTION([no-define]) +m4trace:configure.ac:7: -1- m4_pattern_allow([^PACKAGE$]) +m4trace:configure.ac:7: -1- m4_pattern_allow([^VERSION$]) +m4trace:configure.ac:7: -1- AM_SANITY_CHECK +m4trace:configure.ac:7: -1- AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) +m4trace:configure.ac:7: -1- AM_MISSING_HAS_RUN +m4trace:configure.ac:7: -1- AM_AUX_DIR_EXPAND +m4trace:configure.ac:7: -1- m4_pattern_allow([^ACLOCAL$]) +m4trace:configure.ac:7: -1- AM_MISSING_PROG([AUTOCONF], [autoconf]) +m4trace:configure.ac:7: -1- m4_pattern_allow([^AUTOCONF$]) +m4trace:configure.ac:7: -1- AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) +m4trace:configure.ac:7: -1- m4_pattern_allow([^AUTOMAKE$]) +m4trace:configure.ac:7: -1- AM_MISSING_PROG([AUTOHEADER], [autoheader]) +m4trace:configure.ac:7: -1- m4_pattern_allow([^AUTOHEADER$]) +m4trace:configure.ac:7: -1- AM_MISSING_PROG([MAKEINFO], [makeinfo]) +m4trace:configure.ac:7: -1- m4_pattern_allow([^MAKEINFO$]) +m4trace:configure.ac:7: -1- AM_PROG_INSTALL_SH +m4trace:configure.ac:7: -1- m4_pattern_allow([^install_sh$]) +m4trace:configure.ac:7: -1- AM_PROG_INSTALL_STRIP +m4trace:configure.ac:7: -1- m4_pattern_allow([^STRIP$]) +m4trace:configure.ac:7: -1- m4_pattern_allow([^INSTALL_STRIP_PROGRAM$]) +m4trace:configure.ac:7: -1- AM_PROG_MKDIR_P +m4trace:configure.ac:7: -1- m4_pattern_allow([^MKDIR_P$]) +m4trace:configure.ac:7: -1- m4_pattern_allow([^mkdir_p$]) +m4trace:configure.ac:7: -1- m4_pattern_allow([^AWK$]) +m4trace:configure.ac:7: -1- m4_pattern_allow([^SET_MAKE$]) +m4trace:configure.ac:7: -1- AM_SET_LEADING_DOT +m4trace:configure.ac:7: -1- m4_pattern_allow([^am__leading_dot$]) +m4trace:configure.ac:7: -1- _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) +m4trace:configure.ac:7: -2- _AM_MANGLE_OPTION([tar-ustar]) +m4trace:configure.ac:7: -1- _AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])]) +m4trace:configure.ac:7: -2- _AM_MANGLE_OPTION([tar-pax]) +m4trace:configure.ac:7: -1- _AM_PROG_TAR([v7]) +m4trace:configure.ac:7: -1- AM_MISSING_PROG([AMTAR], [tar]) +m4trace:configure.ac:7: -1- m4_pattern_allow([^AMTAR$]) +m4trace:configure.ac:7: -1- m4_pattern_allow([^am__tar$]) +m4trace:configure.ac:7: -1- m4_pattern_allow([^am__untar$]) +m4trace:configure.ac:7: -1- _AM_IF_OPTION([no-dependencies], [], [AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES(CC)], + [define([AC_PROG_CC], + defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES(CXX)], + [define([AC_PROG_CXX], + defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES(OBJC)], + [define([AC_PROG_OBJC], + defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl +]) +m4trace:configure.ac:7: -2- _AM_MANGLE_OPTION([no-dependencies]) +m4trace:configure.ac:7: -1- _AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])]) +m4trace:configure.ac:7: -2- _AM_MANGLE_OPTION([silent-rules]) +m4trace:configure.ac:8: -1- AM_CONFIG_HEADER([config.h]) +m4trace:configure.ac:8: -1- _m4_warn([obsolete], [The macro `AM_CONFIG_HEADER' is obsolete. +You should run autoupdate.], [/usr/share/aclocal-1.11/header.m4:12: AM_CONFIG_HEADER is expanded from... +configure.ac:8: the top level]) +m4trace:configure.ac:10: -1- AM_ACLOCAL_INCLUDE([m4]) +m4trace:configure.ac:10: -1- AM_CONDITIONAL([INSIDE_GNOME_COMMON], [test x = y]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^INSIDE_GNOME_COMMON_TRUE$]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^INSIDE_GNOME_COMMON_FALSE$]) +m4trace:configure.ac:10: -1- _AM_SUBST_NOTMAKE([INSIDE_GNOME_COMMON_TRUE]) +m4trace:configure.ac:10: -1- _AM_SUBST_NOTMAKE([INSIDE_GNOME_COMMON_FALSE]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^CXX$]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^CXXFLAGS$]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^LDFLAGS$]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^LIBS$]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^CPPFLAGS$]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^CXX$]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^ac_ct_CXX$]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^EXEEXT$]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^OBJEXT$]) +m4trace:configure.ac:13: -1- _AM_DEPENDENCIES([CXX]) +m4trace:configure.ac:13: -1- AM_SET_DEPDIR +m4trace:configure.ac:13: -1- m4_pattern_allow([^DEPDIR$]) +m4trace:configure.ac:13: -1- AM_OUTPUT_DEPENDENCY_COMMANDS +m4trace:configure.ac:13: -1- AM_MAKE_INCLUDE +m4trace:configure.ac:13: -1- m4_pattern_allow([^am__include$]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^am__quote$]) +m4trace:configure.ac:13: -1- AM_DEP_TRACK +m4trace:configure.ac:13: -1- AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^AMDEP_TRUE$]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^AMDEP_FALSE$]) +m4trace:configure.ac:13: -1- _AM_SUBST_NOTMAKE([AMDEP_TRUE]) +m4trace:configure.ac:13: -1- _AM_SUBST_NOTMAKE([AMDEP_FALSE]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^AMDEPBACKSLASH$]) +m4trace:configure.ac:13: -1- _AM_SUBST_NOTMAKE([AMDEPBACKSLASH]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^CXXDEPMODE$]) +m4trace:configure.ac:13: -1- AM_CONDITIONAL([am__fastdepCXX], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CXX_dependencies_compiler_type" = gcc3]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^am__fastdepCXX_TRUE$]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^am__fastdepCXX_FALSE$]) +m4trace:configure.ac:13: -1- _AM_SUBST_NOTMAKE([am__fastdepCXX_TRUE]) +m4trace:configure.ac:13: -1- _AM_SUBST_NOTMAKE([am__fastdepCXX_FALSE]) +m4trace:configure.ac:14: -1- AC_PROG_LIBTOOL +m4trace:configure.ac:14: -1- _m4_warn([obsolete], [The macro `AC_PROG_LIBTOOL' is obsolete. +You should run autoupdate.], [m4/libtool.m4:102: AC_PROG_LIBTOOL is expanded from... +configure.ac:14: the top level]) +m4trace:configure.ac:14: -1- LT_INIT +m4trace:configure.ac:14: -1- m4_pattern_forbid([^_?LT_[A-Z_]+$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$]) +m4trace:configure.ac:14: -1- LTOPTIONS_VERSION +m4trace:configure.ac:14: -1- LTSUGAR_VERSION +m4trace:configure.ac:14: -1- LTVERSION_VERSION +m4trace:configure.ac:14: -1- LTOBSOLETE_VERSION +m4trace:configure.ac:14: -1- _LT_PROG_LTMAIN +m4trace:configure.ac:14: -1- m4_pattern_allow([^LIBTOOL$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^build$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^build_cpu$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^build_vendor$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^build_os$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^host$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^host_cpu$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^host_vendor$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^host_os$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^CC$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^CFLAGS$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^LDFLAGS$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^LIBS$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^CPPFLAGS$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^CC$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^CC$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^CC$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^CC$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^ac_ct_CC$]) +m4trace:configure.ac:14: -1- _AM_DEPENDENCIES([CC]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^CCDEPMODE$]) +m4trace:configure.ac:14: -1- AM_CONDITIONAL([am__fastdepCC], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^am__fastdepCC_TRUE$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^am__fastdepCC_FALSE$]) +m4trace:configure.ac:14: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_TRUE]) +m4trace:configure.ac:14: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_FALSE]) +m4trace:configure.ac:14: -1- LT_PATH_LD +m4trace:configure.ac:14: -1- m4_pattern_allow([^SED$]) +m4trace:configure.ac:14: -1- AC_PROG_EGREP +m4trace:configure.ac:14: -1- m4_pattern_allow([^GREP$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^EGREP$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^FGREP$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^GREP$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^LD$]) +m4trace:configure.ac:14: -1- LT_PATH_NM +m4trace:configure.ac:14: -1- m4_pattern_allow([^DUMPBIN$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^ac_ct_DUMPBIN$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^DUMPBIN$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^NM$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^LN_S$]) +m4trace:configure.ac:14: -1- LT_CMD_MAX_LEN +m4trace:configure.ac:14: -1- m4_pattern_allow([^OBJDUMP$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^OBJDUMP$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^AR$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^STRIP$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^RANLIB$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([LT_OBJDIR]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^LT_OBJDIR$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^lt_ECHO$]) +m4trace:configure.ac:14: -1- _LT_CC_BASENAME([$compiler]) +m4trace:configure.ac:14: -1- _LT_PATH_TOOL_PREFIX([${ac_tool_prefix}file], [/usr/bin$PATH_SEPARATOR$PATH]) +m4trace:configure.ac:14: -1- _LT_PATH_TOOL_PREFIX([file], [/usr/bin$PATH_SEPARATOR$PATH]) +m4trace:configure.ac:14: -1- LT_SUPPORTED_TAG([CC]) +m4trace:configure.ac:14: -1- _LT_COMPILER_BOILERPLATE +m4trace:configure.ac:14: -1- _LT_LINKER_BOILERPLATE +m4trace:configure.ac:14: -1- _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], [lt_cv_prog_compiler_rtti_exceptions], [-fno-rtti -fno-exceptions], [], [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, )="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, ) -fno-rtti -fno-exceptions"]) +m4trace:configure.ac:14: -1- _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, ) works], [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, )], [$_LT_TAGVAR(lt_prog_compiler_pic, )@&t@m4_if([],[],[ -DPIC],[m4_if([],[CXX],[ -DPIC],[])])], [], [case $_LT_TAGVAR(lt_prog_compiler_pic, ) in + "" | " "*) ;; + *) _LT_TAGVAR(lt_prog_compiler_pic, )=" $_LT_TAGVAR(lt_prog_compiler_pic, )" ;; + esac], [_LT_TAGVAR(lt_prog_compiler_pic, )= + _LT_TAGVAR(lt_prog_compiler_can_build_shared, )=no]) +m4trace:configure.ac:14: -1- _LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], [lt_cv_prog_compiler_static_works], [$lt_tmp_static_flag], [], [_LT_TAGVAR(lt_prog_compiler_static, )=]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^DSYMUTIL$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^NMEDIT$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^LIPO$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^OTOOL$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^OTOOL64$]) +m4trace:configure.ac:14: -1- LT_SYS_DLOPEN_SELF +m4trace:configure.ac:14: -1- m4_pattern_allow([^CPP$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^CPPFLAGS$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^CPP$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^STDC_HEADERS$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^HAVE_DLFCN_H$]) +m4trace:configure.ac:14: -1- LT_LANG([CXX]) +m4trace:configure.ac:14: -1- LT_SUPPORTED_TAG([CXX]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^CXX$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^CXXFLAGS$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^LDFLAGS$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^LIBS$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^CPPFLAGS$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^CXX$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^ac_ct_CXX$]) +m4trace:configure.ac:14: -1- _AM_DEPENDENCIES([CXX]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^CXXDEPMODE$]) +m4trace:configure.ac:14: -1- AM_CONDITIONAL([am__fastdepCXX], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CXX_dependencies_compiler_type" = gcc3]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^am__fastdepCXX_TRUE$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^am__fastdepCXX_FALSE$]) +m4trace:configure.ac:14: -1- _AM_SUBST_NOTMAKE([am__fastdepCXX_TRUE]) +m4trace:configure.ac:14: -1- _AM_SUBST_NOTMAKE([am__fastdepCXX_FALSE]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^CXXCPP$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^CPPFLAGS$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^CXXCPP$]) +m4trace:configure.ac:14: -1- _LT_COMPILER_BOILERPLATE +m4trace:configure.ac:14: -1- _LT_LINKER_BOILERPLATE +m4trace:configure.ac:14: -1- _LT_CC_BASENAME([$compiler]) +m4trace:configure.ac:14: -1- LT_PATH_LD +m4trace:configure.ac:14: -1- m4_pattern_allow([^LD$]) +m4trace:configure.ac:14: -1- _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, CXX) works], [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, CXX)], [$_LT_TAGVAR(lt_prog_compiler_pic, CXX)@&t@m4_if([CXX],[],[ -DPIC],[m4_if([CXX],[CXX],[ -DPIC],[])])], [], [case $_LT_TAGVAR(lt_prog_compiler_pic, CXX) in + "" | " "*) ;; + *) _LT_TAGVAR(lt_prog_compiler_pic, CXX)=" $_LT_TAGVAR(lt_prog_compiler_pic, CXX)" ;; + esac], [_LT_TAGVAR(lt_prog_compiler_pic, CXX)= + _LT_TAGVAR(lt_prog_compiler_can_build_shared, CXX)=no]) +m4trace:configure.ac:14: -1- _LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], [lt_cv_prog_compiler_static_works_CXX], [$lt_tmp_static_flag], [], [_LT_TAGVAR(lt_prog_compiler_static, CXX)=]) +m4trace:configure.ac:15: -1- m4_pattern_allow([^LN_S$]) +m4trace:configure.ac:20: -1- PGAC_PROG_JADE +m4trace:configure.ac:20: -1- m4_pattern_allow([^JADE$]) +m4trace:configure.ac:22: -1- PGAC_CHECK_DOCBOOK([4.1]) +m4trace:configure.ac:22: -1- PGAC_PROG_NSGMLS +m4trace:configure.ac:22: -1- m4_pattern_allow([^NSGMLS$]) +m4trace:configure.ac:22: -1- m4_pattern_allow([^have_docbook$]) +m4trace:configure.ac:24: -1- PGAC_PATH_DOCBOOK_STYLESHEETS +m4trace:configure.ac:24: -1- m4_pattern_allow([^DOCBOOKSTYLE$]) +m4trace:configure.ac:36: -1- m4_pattern_allow([^DOCBOOKTARGETS$]) +m4trace:configure.ac:41: -1- m4_pattern_allow([^DOXYGEN$]) +m4trace:configure.ac:42: -1- m4_pattern_allow([^DOXYGEN$]) +m4trace:configure.ac:47: -1- m4_pattern_allow([^DOT$]) +m4trace:configure.ac:48: -1- m4_pattern_allow([^DOT$]) +m4trace:configure.ac:55: -1- m4_pattern_allow([^HAVEDOT$]) +m4trace:configure.ac:56: -1- m4_pattern_allow([^DOTPATH$]) +m4trace:configure.ac:61: -1- m4_pattern_allow([^PERL$]) +m4trace:configure.ac:62: -1- m4_pattern_allow([^PERL$]) +m4trace:configure.ac:72: -1- m4_pattern_allow([^XMKMF$]) +m4trace:configure.ac:72: -1- m4_pattern_allow([^X_DISPLAY_MISSING$]) +m4trace:configure.ac:72: -1- m4_pattern_allow([^X_CFLAGS$]) +m4trace:configure.ac:72: -1- m4_pattern_allow([^X_PRE_LIBS$]) +m4trace:configure.ac:72: -1- m4_pattern_allow([^X_LIBS$]) +m4trace:configure.ac:72: -1- m4_pattern_allow([^X_EXTRA_LIBS$]) +m4trace:configure.ac:114: -1- m4_pattern_allow([^X_DISPLAY_MISSING$]) +m4trace:configure.ac:114: -1- m4_pattern_allow([^X_CFLAGS$]) +m4trace:configure.ac:114: -1- m4_pattern_allow([^X_PRE_LIBS$]) +m4trace:configure.ac:114: -1- m4_pattern_allow([^X_LIBS$]) +m4trace:configure.ac:114: -1- m4_pattern_allow([^X_EXTRA_LIBS$]) +m4trace:configure.ac:123: -1- AM_PATH_ALSA([0.9.0], [true], [as_fn_error "latest alsa (0.9.x) is required" "$LINENO" 5 +]) +m4trace:configure.ac:123: -1- _m4_warn([obsolete], [The macro `AC_LANG_SAVE' is obsolete. +You should run autoupdate.], [../../lib/autoconf/lang.m4:126: AC_LANG_SAVE is expanded from... +m4/alsa.m4:15: AM_PATH_ALSA is expanded from... +configure.ac:123: the top level]) +m4trace:configure.ac:123: -1- _m4_warn([obsolete], [The macro `AC_LANG_C' is obsolete. +You should run autoupdate.], [../../lib/autoconf/c.m4:73: AC_LANG_C is expanded from... +m4/alsa.m4:15: AM_PATH_ALSA is expanded from... +configure.ac:123: the top level]) +m4trace:configure.ac:123: -1- _m4_warn([obsolete], [The macro `AC_TRY_COMPILE' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:2581: AC_TRY_COMPILE is expanded from... +m4/alsa.m4:15: AM_PATH_ALSA is expanded from... +configure.ac:123: the top level]) +m4trace:configure.ac:123: -1- _m4_warn([obsolete], [The macro `AC_LANG_RESTORE' is obsolete. +You should run autoupdate.], [../../lib/autoconf/lang.m4:135: AC_LANG_RESTORE is expanded from... +m4/alsa.m4:15: AM_PATH_ALSA is expanded from... +configure.ac:123: the top level]) +m4trace:configure.ac:123: -1- _m4_warn([obsolete], [The macro `AC_LANG_SAVE' is obsolete. +You should run autoupdate.], [../../lib/autoconf/lang.m4:126: AC_LANG_SAVE is expanded from... +m4/alsa.m4:15: AM_PATH_ALSA is expanded from... +configure.ac:123: the top level]) +m4trace:configure.ac:123: -1- _m4_warn([obsolete], [The macro `AC_LANG_CPLUSPLUS' is obsolete. +You should run autoupdate.], [../../lib/autoconf/c.m4:252: AC_LANG_CPLUSPLUS is expanded from... +m4/alsa.m4:15: AM_PATH_ALSA is expanded from... +configure.ac:123: the top level]) +m4trace:configure.ac:123: -1- m4_pattern_allow([^HAVE_LIBASOUND$]) +m4trace:configure.ac:123: -1- _m4_warn([obsolete], [The macro `AC_LANG_RESTORE' is obsolete. +You should run autoupdate.], [../../lib/autoconf/lang.m4:135: AC_LANG_RESTORE is expanded from... +m4/alsa.m4:15: AM_PATH_ALSA is expanded from... +configure.ac:123: the top level]) +m4trace:configure.ac:123: -1- m4_pattern_allow([^ALSA_CFLAGS$]) +m4trace:configure.ac:123: -1- m4_pattern_allow([^ALSA_LIBS$]) +m4trace:configure.ac:152: -1- AM_CONDITIONAL([ENABLEFLUIDSYNTH], [test "$muse_enable_fluidlib" = "yes"]) +m4trace:configure.ac:152: -1- m4_pattern_allow([^ENABLEFLUIDSYNTH_TRUE$]) +m4trace:configure.ac:152: -1- m4_pattern_allow([^ENABLEFLUIDSYNTH_FALSE$]) +m4trace:configure.ac:152: -1- _AM_SUBST_NOTMAKE([ENABLEFLUIDSYNTH_TRUE]) +m4trace:configure.ac:152: -1- _AM_SUBST_NOTMAKE([ENABLEFLUIDSYNTH_FALSE]) +m4trace:configure.ac:153: -1- PKG_CHECK_MODULES([Fluidsynth], [fluidsynth], [FLUIDSYNTHDIRS="fluid fluidsynth"; AC_DEFINE(ENABLEFLUIDSYNTH, 1, [Compile fluidsynth])], [AC_MSG_WARN([libfluidsynth not found; disabling fluidsynth plugins]) ; + muse_enable_fluidlib="no" + ]) +m4trace:configure.ac:153: -1- PKG_PROG_PKG_CONFIG +m4trace:configure.ac:153: -1- m4_pattern_forbid([^_?PKG_[A-Z_]+$]) +m4trace:configure.ac:153: -1- m4_pattern_allow([^PKG_CONFIG(_PATH)?$]) +m4trace:configure.ac:153: -1- m4_pattern_allow([^PKG_CONFIG$]) +m4trace:configure.ac:153: -1- m4_pattern_allow([^PKG_CONFIG$]) +m4trace:configure.ac:153: -1- m4_pattern_allow([^Fluidsynth_CFLAGS$]) +m4trace:configure.ac:153: -1- m4_pattern_allow([^Fluidsynth_LIBS$]) +m4trace:configure.ac:153: -1- PKG_CHECK_EXISTS([fluidsynth], [pkg_cv_[]Fluidsynth_CFLAGS=`$PKG_CONFIG --[]cflags "fluidsynth" 2>/dev/null`], [pkg_failed=yes]) +m4trace:configure.ac:153: -1- PKG_CHECK_EXISTS([fluidsynth], [pkg_cv_[]Fluidsynth_LIBS=`$PKG_CONFIG --[]libs "fluidsynth" 2>/dev/null`], [pkg_failed=yes]) +m4trace:configure.ac:153: -1- _PKG_SHORT_ERRORS_SUPPORTED +m4trace:configure.ac:153: -1- m4_pattern_allow([^ENABLEFLUIDSYNTH$]) +m4trace:configure.ac:158: -1- m4_pattern_allow([^FLUIDSYNTHDIRS$]) +m4trace:configure.ac:159: -1- m4_pattern_allow([^synth_fluidsynth$]) +m4trace:configure.ac:160: -1- m4_pattern_allow([^synth_fluid$]) +m4trace:configure.ac:170: -1- PKG_CHECK_MODULES([SNDFILE], [sndfile >= 1.0.0], [true], [as_fn_error "need libsndfile >= 1.0.0" "$LINENO" 5 +]) +m4trace:configure.ac:170: -1- m4_pattern_allow([^SNDFILE_CFLAGS$]) +m4trace:configure.ac:170: -1- m4_pattern_allow([^SNDFILE_LIBS$]) +m4trace:configure.ac:170: -1- PKG_CHECK_EXISTS([sndfile >= 1.0.0], [pkg_cv_[]SNDFILE_CFLAGS=`$PKG_CONFIG --[]cflags "sndfile >= 1.0.0" 2>/dev/null`], [pkg_failed=yes]) +m4trace:configure.ac:170: -1- PKG_CHECK_EXISTS([sndfile >= 1.0.0], [pkg_cv_[]SNDFILE_LIBS=`$PKG_CONFIG --[]libs "sndfile >= 1.0.0" 2>/dev/null`], [pkg_failed=yes]) +m4trace:configure.ac:170: -1- _PKG_SHORT_ERRORS_SUPPORTED +m4trace:configure.ac:178: -1- PKG_CHECK_MODULES([SAMPLERATE], [samplerate >= 0.1.0], [true], [as_fn_error "need libsamplerate" "$LINENO" 5 +]) +m4trace:configure.ac:178: -1- m4_pattern_allow([^SAMPLERATE_CFLAGS$]) +m4trace:configure.ac:178: -1- m4_pattern_allow([^SAMPLERATE_LIBS$]) +m4trace:configure.ac:178: -1- PKG_CHECK_EXISTS([samplerate >= 0.1.0], [pkg_cv_[]SAMPLERATE_CFLAGS=`$PKG_CONFIG --[]cflags "samplerate >= 0.1.0" 2>/dev/null`], [pkg_failed=yes]) +m4trace:configure.ac:178: -1- PKG_CHECK_EXISTS([samplerate >= 0.1.0], [pkg_cv_[]SAMPLERATE_LIBS=`$PKG_CONFIG --[]libs "samplerate >= 0.1.0" 2>/dev/null`], [pkg_failed=yes]) +m4trace:configure.ac:178: -1- _PKG_SHORT_ERRORS_SUPPORTED +m4trace:configure.ac:196: -1- m4_pattern_allow([^UUID_CFLAGS$]) +m4trace:configure.ac:197: -1- m4_pattern_allow([^UUID_LIBS$]) +m4trace:configure.ac:208: -1- PKG_CHECK_MODULES([JACK], [jack >= 0.98.0], [true], [as_fn_error "need JACK >= 0.98.0" "$LINENO" 5 + ]) +m4trace:configure.ac:208: -1- m4_pattern_allow([^JACK_CFLAGS$]) +m4trace:configure.ac:208: -1- m4_pattern_allow([^JACK_LIBS$]) +m4trace:configure.ac:208: -1- PKG_CHECK_EXISTS([jack >= 0.98.0], [pkg_cv_[]JACK_CFLAGS=`$PKG_CONFIG --[]cflags "jack >= 0.98.0" 2>/dev/null`], [pkg_failed=yes]) +m4trace:configure.ac:208: -1- PKG_CHECK_EXISTS([jack >= 0.98.0], [pkg_cv_[]JACK_LIBS=`$PKG_CONFIG --[]libs "jack >= 0.98.0" 2>/dev/null`], [pkg_failed=yes]) +m4trace:configure.ac:208: -1- _PKG_SHORT_ERRORS_SUPPORTED +m4trace:configure.ac:234: -1- PKG_CHECK_MODULES([LASH], [lash-1.0 >= 0.2], [LASH_FOUND="yes"], [LASH_FOUND="no"]) +m4trace:configure.ac:234: -1- m4_pattern_allow([^LASH_CFLAGS$]) +m4trace:configure.ac:234: -1- m4_pattern_allow([^LASH_LIBS$]) +m4trace:configure.ac:234: -1- PKG_CHECK_EXISTS([lash-1.0 >= 0.2], [pkg_cv_[]LASH_CFLAGS=`$PKG_CONFIG --[]cflags "lash-1.0 >= 0.2" 2>/dev/null`], [pkg_failed=yes]) +m4trace:configure.ac:234: -1- PKG_CHECK_EXISTS([lash-1.0 >= 0.2], [pkg_cv_[]LASH_LIBS=`$PKG_CONFIG --[]libs "lash-1.0 >= 0.2" 2>/dev/null`], [pkg_failed=yes]) +m4trace:configure.ac:234: -1- _PKG_SHORT_ERRORS_SUPPORTED +m4trace:configure.ac:235: -1- m4_pattern_allow([^LASH_CFLAGS$]) +m4trace:configure.ac:236: -1- m4_pattern_allow([^LASH_LIBS$]) +m4trace:configure.ac:239: -1- m4_pattern_allow([^HAVE_LASH$]) +m4trace:configure.ac:241: -1- m4_pattern_allow([^LASH_VERSION$]) +m4trace:configure.ac:247: -1- AM_CONDITIONAL([HAVE_LASH], [test "$LASH_FOUND" = "yes"]) +m4trace:configure.ac:247: -1- m4_pattern_allow([^HAVE_LASH_TRUE$]) +m4trace:configure.ac:247: -1- m4_pattern_allow([^HAVE_LASH_FALSE$]) +m4trace:configure.ac:247: -1- _AM_SUBST_NOTMAKE([HAVE_LASH_TRUE]) +m4trace:configure.ac:247: -1- _AM_SUBST_NOTMAKE([HAVE_LASH_FALSE]) +m4trace:configure.ac:260: -1- m4_pattern_allow([^RTCAP$]) +m4trace:configure.ac:279: -1- AM_CONDITIONAL([RTCAP], [test "$report_rtcap" = "yes"]) +m4trace:configure.ac:279: -1- m4_pattern_allow([^RTCAP_TRUE$]) +m4trace:configure.ac:279: -1- m4_pattern_allow([^RTCAP_FALSE$]) +m4trace:configure.ac:279: -1- _AM_SUBST_NOTMAKE([RTCAP_TRUE]) +m4trace:configure.ac:279: -1- _AM_SUBST_NOTMAKE([RTCAP_FALSE]) +m4trace:configure.ac:280: -1- m4_pattern_allow([^GIVERTCAP$]) +m4trace:configure.ac:301: -1- m4_pattern_allow([^SUIDINSTALL$]) +m4trace:configure.ac:321: -1- m4_pattern_allow([^SUIDBUILD$]) +m4trace:configure.ac:344: -1- m4_pattern_allow([^DOXYGEN_TREEVIEW$]) +m4trace:configure.ac:409: -1- m4_pattern_allow([^PCH$]) +m4trace:configure.ac:409: -1- m4_pattern_allow([^PCH$]) +m4trace:configure.ac:425: -1- AM_CONDITIONAL([PCH], [test "$PCH" = "yes"]) +m4trace:configure.ac:425: -1- m4_pattern_allow([^PCH_TRUE$]) +m4trace:configure.ac:425: -1- m4_pattern_allow([^PCH_FALSE$]) +m4trace:configure.ac:425: -1- _AM_SUBST_NOTMAKE([PCH_TRUE]) +m4trace:configure.ac:425: -1- _AM_SUBST_NOTMAKE([PCH_FALSE]) +m4trace:configure.ac:452: -1- m4_pattern_allow([^USE_SSE$]) +m4trace:configure.ac:452: -1- m4_pattern_allow([^USE_SSE$]) +m4trace:configure.ac:469: -1- AM_CONDITIONAL([USE_SSE], [test "$USE_SSE" = "yes"]) +m4trace:configure.ac:469: -1- m4_pattern_allow([^USE_SSE_TRUE$]) +m4trace:configure.ac:469: -1- m4_pattern_allow([^USE_SSE_FALSE$]) +m4trace:configure.ac:469: -1- _AM_SUBST_NOTMAKE([USE_SSE_TRUE]) +m4trace:configure.ac:469: -1- _AM_SUBST_NOTMAKE([USE_SSE_FALSE]) +m4trace:configure.ac:502: -1- AM_PATH_PYTHON([], [], [:]) +m4trace:configure.ac:502: -1- m4_pattern_allow([^PYTHON$]) +m4trace:configure.ac:502: -1- m4_pattern_allow([^PYTHON_VERSION$]) +m4trace:configure.ac:502: -1- m4_pattern_allow([^PYTHON_PREFIX$]) +m4trace:configure.ac:502: -1- m4_pattern_allow([^PYTHON_EXEC_PREFIX$]) +m4trace:configure.ac:502: -1- m4_pattern_allow([^PYTHON_PLATFORM$]) +m4trace:configure.ac:502: -1- m4_pattern_allow([^pythondir$]) +m4trace:configure.ac:502: -1- m4_pattern_allow([^pkgpythondir$]) +m4trace:configure.ac:502: -1- m4_pattern_allow([^pyexecdir$]) +m4trace:configure.ac:502: -1- m4_pattern_allow([^pkgpyexecdir$]) +m4trace:configure.ac:539: -1- AM_CONDITIONAL([ENABLE_PYTHON], [test "$enable_python" = "yes"]) +m4trace:configure.ac:539: -1- m4_pattern_allow([^ENABLE_PYTHON_TRUE$]) +m4trace:configure.ac:539: -1- m4_pattern_allow([^ENABLE_PYTHON_FALSE$]) +m4trace:configure.ac:539: -1- _AM_SUBST_NOTMAKE([ENABLE_PYTHON_TRUE]) +m4trace:configure.ac:539: -1- _AM_SUBST_NOTMAKE([ENABLE_PYTHON_FALSE]) +m4trace:configure.ac:540: -1- m4_pattern_allow([^PYTHON_VERSION$]) +m4trace:configure.ac:541: -1- m4_pattern_allow([^PYTHON_INCLUDES$]) +m4trace:configure.ac:542: -1- m4_pattern_allow([^PYTHON_LIB$]) +m4trace:configure.ac:583: -1- PKG_CHECK_MODULES([FST], [libfst], [ vst_possible=yes ], [ vst_possible=no ]) +m4trace:configure.ac:583: -1- m4_pattern_allow([^FST_CFLAGS$]) +m4trace:configure.ac:583: -1- m4_pattern_allow([^FST_LIBS$]) +m4trace:configure.ac:583: -1- PKG_CHECK_EXISTS([libfst], [pkg_cv_[]FST_CFLAGS=`$PKG_CONFIG --[]cflags "libfst" 2>/dev/null`], [pkg_failed=yes]) +m4trace:configure.ac:583: -1- PKG_CHECK_EXISTS([libfst], [pkg_cv_[]FST_LIBS=`$PKG_CONFIG --[]libs "libfst" 2>/dev/null`], [pkg_failed=yes]) +m4trace:configure.ac:583: -1- _PKG_SHORT_ERRORS_SUPPORTED +m4trace:configure.ac:591: -1- m4_pattern_allow([^VST_SUPPORT$]) +m4trace:configure.ac:594: -1- AM_CONDITIONAL([VST_SUPPORT], [test x$vst_possible = xyes -a x$vst_requested = xyes]) +m4trace:configure.ac:594: -1- m4_pattern_allow([^VST_SUPPORT_TRUE$]) +m4trace:configure.ac:594: -1- m4_pattern_allow([^VST_SUPPORT_FALSE$]) +m4trace:configure.ac:594: -1- _AM_SUBST_NOTMAKE([VST_SUPPORT_TRUE]) +m4trace:configure.ac:594: -1- _AM_SUBST_NOTMAKE([VST_SUPPORT_FALSE]) +m4trace:configure.ac:616: -1- PKG_CHECK_MODULES([LO], [liblo], [ LO_LIB_FOUND=yes ], [ LO_LIB_FOUND=no ]) +m4trace:configure.ac:616: -1- m4_pattern_allow([^LO_CFLAGS$]) +m4trace:configure.ac:616: -1- m4_pattern_allow([^LO_LIBS$]) +m4trace:configure.ac:616: -1- PKG_CHECK_EXISTS([liblo], [pkg_cv_[]LO_CFLAGS=`$PKG_CONFIG --[]cflags "liblo" 2>/dev/null`], [pkg_failed=yes]) +m4trace:configure.ac:616: -1- PKG_CHECK_EXISTS([liblo], [pkg_cv_[]LO_LIBS=`$PKG_CONFIG --[]libs "liblo" 2>/dev/null`], [pkg_failed=yes]) +m4trace:configure.ac:616: -1- _PKG_SHORT_ERRORS_SUPPORTED +m4trace:configure.ac:627: -1- m4_pattern_allow([^LO_CFLAGS$]) +m4trace:configure.ac:628: -1- m4_pattern_allow([^LO_LIBS$]) +m4trace:configure.ac:629: -1- m4_pattern_allow([^OSC_SUPPORT$]) +m4trace:configure.ac:632: -1- AM_CONDITIONAL([OSC_SUPPORT], [test x$LO_LIB_FOUND = xyes]) +m4trace:configure.ac:632: -1- m4_pattern_allow([^OSC_SUPPORT_TRUE$]) +m4trace:configure.ac:632: -1- m4_pattern_allow([^OSC_SUPPORT_FALSE$]) +m4trace:configure.ac:632: -1- _AM_SUBST_NOTMAKE([OSC_SUPPORT_TRUE]) +m4trace:configure.ac:632: -1- _AM_SUBST_NOTMAKE([OSC_SUPPORT_FALSE]) +m4trace:configure.ac:686: -1- m4_pattern_allow([^DSSI_SUPPORT$]) +m4trace:configure.ac:690: -1- AM_CONDITIONAL([DSSI_SUPPORT], [test x$DSSI_FOUND = xyes]) +m4trace:configure.ac:690: -1- m4_pattern_allow([^DSSI_SUPPORT_TRUE$]) +m4trace:configure.ac:690: -1- m4_pattern_allow([^DSSI_SUPPORT_FALSE$]) +m4trace:configure.ac:690: -1- _AM_SUBST_NOTMAKE([DSSI_SUPPORT_TRUE]) +m4trace:configure.ac:690: -1- _AM_SUBST_NOTMAKE([DSSI_SUPPORT_FALSE]) +m4trace:configure.ac:707: -1- m4_pattern_allow([^HAVE_AUDIO$]) +m4trace:configure.ac:708: -1- AM_CONDITIONAL([HAVE_AUDIO], [test "yes" = "yes"]) +m4trace:configure.ac:708: -1- m4_pattern_allow([^HAVE_AUDIO_TRUE$]) +m4trace:configure.ac:708: -1- m4_pattern_allow([^HAVE_AUDIO_FALSE$]) +m4trace:configure.ac:708: -1- _AM_SUBST_NOTMAKE([HAVE_AUDIO_TRUE]) +m4trace:configure.ac:708: -1- _AM_SUBST_NOTMAKE([HAVE_AUDIO_FALSE]) +m4trace:configure.ac:709: -1- m4_pattern_allow([^MUSECXXFLAGS$]) +m4trace:configure.ac:710: -1- m4_pattern_allow([^QTDIR_INC$]) +m4trace:configure.ac:711: -1- m4_pattern_allow([^QT_LIBS$]) +m4trace:configure.ac:712: -1- m4_pattern_allow([^QTDIR_BIN$]) +m4trace:configure.ac:720: -1- _m4_warn([obsolete], [AC_OUTPUT should be used without arguments. +You should run autoupdate.], []) +m4trace:configure.ac:720: -1- m4_pattern_allow([^LIB@&t@OBJS$]) +m4trace:configure.ac:720: -1- m4_pattern_allow([^LTLIBOBJS$]) +m4trace:configure.ac:720: -1- AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"]) +m4trace:configure.ac:720: -1- m4_pattern_allow([^am__EXEEXT_TRUE$]) +m4trace:configure.ac:720: -1- m4_pattern_allow([^am__EXEEXT_FALSE$]) +m4trace:configure.ac:720: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_TRUE]) +m4trace:configure.ac:720: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_FALSE]) +m4trace:configure.ac:720: -1- _AC_AM_CONFIG_HEADER_HOOK(["$ac_file"]) +m4trace:configure.ac:720: -1- _AM_OUTPUT_DEPENDENCY_COMMANDS +m4trace:configure.ac:720: -1- _LT_PROG_LTMAIN diff --git a/muse2/common.am b/muse2/common.am new file mode 100644 index 00000000..919f8593 --- /dev/null +++ b/muse2/common.am @@ -0,0 +1,47 @@ +AM_CXXFLAGS = $(MUSECXXFLAGS) -I.. -I$(top_srcdir)/synti -I$(top_srcdir)/muse/widgets +AM_CXXFLAGS += -DQT_SHARED -DQT_THREAD_SUPPORT -DQT_PLUGIN $(QTDIR_INC) -DQT3_SUPPORT +AM_CPPFLAGS = +MOC = $(QTDIR_BIN)/moc +#UIC = $(QTDIR_BIN)/uic3 +UIC = /usr/bin/uic3 + +UIFILES = $(wildcard *.ui) + +MOCFILES = $(shell for h in $(filter %.h,$(SOURCES)); do \ + if grep -q Q_OBJECT $$h; then \ + echo $$h | sed "s/\(.*\)\.h/moc_\1.cpp/"; \ + fi; \ + done) + +BUILT_SOURCES = $(MOCFILES) $(UIFILES:%.ui=%.h) + +MOSTLYCLEANFILES = $(MOCFILES) $(UIFILES:%.ui=%.h) + +de: + @for base in $(MOCFILES); do echo -e "\t$${base}.cpp $${base}.h \\"; done + +nde: + @for base in $(MOCFILES); do echo -e "\tmoc_$${base}.cpp \\"; done + +SUFFIXES = .ui .h.gch + +.ui.o: %.h + $(UIC) -L $(top_srcdir)/muse/widgets -o $*.cpp -impl $*.h $*.ui + $(MOC) $*.h >> $*.cpp + $(CXXCOMPILE) -c $*.cpp -o $*.o + $(RM) $*.cpp moc_$*.cpp moc_$*.o + +.ui.lo: %.h + $(UIC) -L $(top_srcdir)/muse/widgets -o $*.cpp -impl $*.h $*.ui + $(MOC) $*.h >> $*.cpp + $(LTCXXCOMPILE) -c $*.cpp -o $*.lo + $(RM) $*.cpp moc_$*.cpp moc_$*.lo moc_$*.o + + +moc_%.cpp: %.h + $(MOC) $< -o $@ + +%.h: %.ui + $(UIC) -o $@ $< +# $(UIC) -L $(top_srcdir)/muse/widgets -o $@ $< + diff --git a/muse2/config.guess b/muse2/config.guess new file mode 120000 index 00000000..405bc323 --- /dev/null +++ b/muse2/config.guess @@ -0,0 +1 @@ +/usr/share/automake-1.11/config.guess \ No newline at end of file diff --git a/muse2/config.h.in b/muse2/config.h.in new file mode 100644 index 00000000..cd2d6948 --- /dev/null +++ b/muse2/config.h.in @@ -0,0 +1,98 @@ +/* config.h.in. Generated from configure.ac by autoheader. */ + +/* support for DSSI + DSSI-Vst plugins */ +#undef DSSI_SUPPORT + +/* Compile fluidsynth */ +#undef ENABLEFLUIDSYNTH + +/* Make audio-specific code */ +#undef HAVE_AUDIO + +/* Define to 1 if you have the header file. */ +#undef HAVE_DLFCN_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_INTTYPES_H + +/* whether or not we are supporting lash */ +#undef HAVE_LASH + +/* Define to 1 if you have the `asound' library (-lasound). */ +#undef HAVE_LIBASOUND + +/* Define to 1 if you have the header file. */ +#undef HAVE_MEMORY_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_UNISTD_H + +/* The version of lash we're compiling against */ +#undef LASH_VERSION + +/* Define to the sub-directory in which libtool stores uninstalled libraries. + */ +#undef LT_OBJDIR + +/* support for OSC */ +#undef OSC_SUPPORT + +/* Name of package */ +#undef PACKAGE + +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#undef PACKAGE_NAME + +/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING + +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the home page for this package. */ +#undef PACKAGE_URL + +/* Define to the version of this package. */ +#undef PACKAGE_VERSION + +/* whether or not we use precompiled headers */ +#undef PCH + +/* Use givertcap */ +#undef RTCAP + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* whether or not to enable SSE */ +#undef USE_SSE + +/* Version number of package */ +#undef VERSION + +/* support for VST/win plugins */ +#undef VST_SUPPORT + +/* Define to 1 if the X Window System is missing or not being used. */ +#undef X_DISPLAY_MISSING diff --git a/muse2/config.sub b/muse2/config.sub new file mode 120000 index 00000000..4d47fbcb --- /dev/null +++ b/muse2/config.sub @@ -0,0 +1 @@ +/usr/share/automake-1.11/config.sub \ No newline at end of file diff --git a/muse2/configure b/muse2/configure new file mode 100755 index 00000000..3af64d7b --- /dev/null +++ b/muse2/configure @@ -0,0 +1,20639 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.65 for MusE 1.1. +# +# +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in #( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : + # We cannot yet assume a decent shell, so we have to provide a + # neutralization value for shells without unset; and this also + # works around shells that cannot unset nonexistent variables. + BASH_ENV=/dev/null + ENV=/dev/null + (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, +$0: including any error possibly output before this +$0: message. Then install a modern shell, or manually run +$0: the script under such a shell if you do have one." + fi + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +# as_fn_error ERROR [LINENO LOG_FD] +# --------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with status $?, using 1 if that was 0. +as_fn_error () +{ + as_status=$?; test $as_status -eq 0 && as_status=1 + if test "$3"; then + as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 + fi + $as_echo "$as_me: error: $1" >&2 + as_fn_exit $as_status +} # as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + + + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in #( + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + + +# Check that we are running under the correct shell. +SHELL=${CONFIG_SHELL-/bin/sh} + +case X$lt_ECHO in +X*--fallback-echo) + # Remove one level of quotation (which was required for Make). + ECHO=`echo "$lt_ECHO" | sed 's,\\\\\$\\$0,'$0','` + ;; +esac + +ECHO=${lt_ECHO-echo} +if test "X$1" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift +elif test "X$1" = X--fallback-echo; then + # Avoid inline document here, it may be left over + : +elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then + # Yippee, $ECHO works! + : +else + # Restart under the correct shell. + exec $SHELL "$0" --no-reexec ${1+"$@"} +fi + +if test "X$1" = X--fallback-echo; then + # used as fallback echo + shift + cat <<_LT_EOF +$* +_LT_EOF + exit 0 +fi + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +if test -z "$lt_ECHO"; then + if test "X${echo_test_string+set}" != Xset; then + # find a string as large as possible, as long as the shell can cope with it + for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do + # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... + if { echo_test_string=`eval $cmd`; } 2>/dev/null && + { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null + then + break + fi + done + fi + + if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && + echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + : + else + # The Solaris, AIX, and Digital Unix default echo programs unquote + # backslashes. This makes it impossible to quote backslashes using + # echo "$something" | sed 's/\\/\\\\/g' + # + # So, first we look for a working echo in the user's PATH. + + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for dir in $PATH /usr/ucb; do + IFS="$lt_save_ifs" + if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && + test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + ECHO="$dir/echo" + break + fi + done + IFS="$lt_save_ifs" + + if test "X$ECHO" = Xecho; then + # We didn't find a better echo, so look for alternatives. + if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' && + echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # This shell has a builtin print -r that does the trick. + ECHO='print -r' + elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } && + test "X$CONFIG_SHELL" != X/bin/ksh; then + # If we have ksh, try running configure again with it. + ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} + export ORIGINAL_CONFIG_SHELL + CONFIG_SHELL=/bin/ksh + export CONFIG_SHELL + exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"} + else + # Try using printf. + ECHO='printf %s\n' + if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && + echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # Cool, printf works + : + elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL + export CONFIG_SHELL + SHELL="$CONFIG_SHELL" + export SHELL + ECHO="$CONFIG_SHELL $0 --fallback-echo" + elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + ECHO="$CONFIG_SHELL $0 --fallback-echo" + else + # maybe with a smaller string... + prev=: + + for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do + if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null + then + break + fi + prev="$cmd" + done + + if test "$prev" != 'sed 50q "$0"'; then + echo_test_string=`eval $prev` + export echo_test_string + exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"} + else + # Oops. We lost completely, so just stick with echo. + ECHO=echo + fi + fi + fi + fi + fi +fi + +# Copy echo and quote the copy suitably for passing to libtool from +# the Makefile, instead of quoting the original, which is used later. +lt_ECHO=$ECHO +if test "X$lt_ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then + lt_ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo" +fi + + + + +test -n "$DJDIR" || exec 7<&0 &1 + +# Name of the host. +# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIBOBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= + +# Identity of this package. +PACKAGE_NAME='MusE' +PACKAGE_TARNAME='muse' +PACKAGE_VERSION='1.1' +PACKAGE_STRING='MusE 1.1' +PACKAGE_BUGREPORT='' +PACKAGE_URL='' + +ac_unique_file="muse/app.cpp" +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif +#ifdef STDC_HEADERS +# include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include +# endif +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_INTTYPES_H +# include +#endif +#ifdef HAVE_STDINT_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#endif" + +ac_subst_vars='am__EXEEXT_FALSE +am__EXEEXT_TRUE +LTLIBOBJS +LIBOBJS +QTDIR_BIN +QT_LIBS +QTDIR_INC +MUSECXXFLAGS +HAVE_AUDIO_FALSE +HAVE_AUDIO_TRUE +DSSI_SUPPORT_FALSE +DSSI_SUPPORT_TRUE +OSC_SUPPORT_FALSE +OSC_SUPPORT_TRUE +LO_LIBS +LO_CFLAGS +VST_SUPPORT_FALSE +VST_SUPPORT_TRUE +FST_LIBS +FST_CFLAGS +PYTHON_LIB +PYTHON_INCLUDES +ENABLE_PYTHON_FALSE +ENABLE_PYTHON_TRUE +pkgpyexecdir +pyexecdir +pkgpythondir +pythondir +PYTHON_PLATFORM +PYTHON_EXEC_PREFIX +PYTHON_PREFIX +PYTHON_VERSION +PYTHON +USE_SSE_FALSE +USE_SSE_TRUE +USE_SSE +PCH_FALSE +PCH_TRUE +PCH +DOXYGEN_TREEVIEW +SUIDBUILD +SUIDINSTALL +GIVERTCAP +RTCAP_FALSE +RTCAP_TRUE +HAVE_LASH_FALSE +HAVE_LASH_TRUE +LASH_LIBS +LASH_CFLAGS +JACK_LIBS +JACK_CFLAGS +UUID_LIBS +UUID_CFLAGS +SAMPLERATE_LIBS +SAMPLERATE_CFLAGS +SNDFILE_LIBS +SNDFILE_CFLAGS +synth_fluid +synth_fluidsynth +FLUIDSYNTHDIRS +Fluidsynth_LIBS +Fluidsynth_CFLAGS +PKG_CONFIG +ENABLEFLUIDSYNTH_FALSE +ENABLEFLUIDSYNTH_TRUE +ALSA_LIBS +ALSA_CFLAGS +X_EXTRA_LIBS +X_LIBS +X_PRE_LIBS +X_CFLAGS +XMKMF +PERL +DOTPATH +HAVEDOT +DOT +DOXYGEN +DOCBOOKTARGETS +DOCBOOKSTYLE +have_docbook +NSGMLS +JADE +CXXCPP +CPP +OTOOL64 +OTOOL +LIPO +NMEDIT +DSYMUTIL +lt_ECHO +RANLIB +AR +OBJDUMP +LN_S +NM +ac_ct_DUMPBIN +DUMPBIN +LD +FGREP +EGREP +GREP +SED +am__fastdepCC_FALSE +am__fastdepCC_TRUE +CCDEPMODE +ac_ct_CC +CFLAGS +CC +host_os +host_vendor +host_cpu +host +build_os +build_vendor +build_cpu +build +LIBTOOL +am__fastdepCXX_FALSE +am__fastdepCXX_TRUE +CXXDEPMODE +AMDEPBACKSLASH +AMDEP_FALSE +AMDEP_TRUE +am__quote +am__include +DEPDIR +OBJEXT +EXEEXT +ac_ct_CXX +CPPFLAGS +LDFLAGS +CXXFLAGS +CXX +INSIDE_GNOME_COMMON_FALSE +INSIDE_GNOME_COMMON_TRUE +am__untar +am__tar +AMTAR +am__leading_dot +SET_MAKE +AWK +mkdir_p +MKDIR_P +INSTALL_STRIP_PROGRAM +STRIP +install_sh +MAKEINFO +AUTOHEADER +AUTOMAKE +AUTOCONF +ACLOCAL +VERSION +PACKAGE +CYGPATH_W +am__isrc +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' +ac_subst_files='' +ac_user_opts=' +enable_option_checking +enable_dependency_tracking +enable_shared +enable_static +with_pic +enable_fast_install +with_gnu_ld +enable_libtool_lock +with_docbook_stylesheets +with_x +with_alsa_prefix +with_alsa_inc_prefix +enable_alsatest +enable_fluidsynth +enable_lash +enable_rtcap +enable_suid_install +enable_suid_build +enable_doxy_treeview +enable_optimize +enable_debug +enable_pch +enable_arch +enable_sse +with_python +enable_vst +enable_osc +enable_dssi +' + ac_precious_vars='build_alias +host_alias +target_alias +CXX +CXXFLAGS +LDFLAGS +LIBS +CPPFLAGS +CCC +CC +CFLAGS +CPP +CXXCPP +DOXYGEN +DOT +PERL +XMKMF +PKG_CONFIG +Fluidsynth_CFLAGS +Fluidsynth_LIBS +SNDFILE_CFLAGS +SNDFILE_LIBS +SAMPLERATE_CFLAGS +SAMPLERATE_LIBS +JACK_CFLAGS +JACK_LIBS +LASH_CFLAGS +LASH_LIBS +FST_CFLAGS +FST_LIBS +LO_CFLAGS +LO_LIBS' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *) ac_optarg=yes ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; + + -without-* | --without-*) + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) as_fn_error "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information." + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error "invalid variable name: \`$ac_envvar'" ;; + esac + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + as_fn_error "missing argument to $ac_option" +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac +fi + +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir +do + eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + as_fn_error "expected an absolute directory name for --$ac_var: $ac_val" +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. + If a cross compiler is detected then cross compile mode will be used." >&2 + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + as_fn_error "working directory cannot be determined" +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + as_fn_error "pwd does not report name of working directory" + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + as_fn_error "cannot find sources ($ac_unique_file) in $srcdir" +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error "$ac_msg" + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures MusE 1.1 to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/muse] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF + +Program names: + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM run sed PROGRAM on installed program names + +X features: + --x-includes=DIR X include files are in DIR + --x-libraries=DIR X library files are in DIR + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of MusE 1.1:";; + esac + cat <<\_ACEOF + +Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors + --enable-shared[=PKGS] build shared libraries [default=yes] + --enable-static[=PKGS] build static libraries [default=yes] + --enable-fast-install[=PKGS] + optimize for fast installation [default=yes] + --disable-libtool-lock avoid locking (might break parallel builds) + --disable-alsatest do not try to compile and run a test alsa program + --disable-fluidsynth disable fluidsynth softsynth plugin + --enable-lash enable LASH support + --enable-rtcap (deprecated) use Tommi Ilmonen's "givertcap" to give + realtime capabilities + --enable-suid-install (deprecated) install MusE setuid root (with kernel 2.6, use realtime-lsm instead) + --enable-suid-build (deprecated) build MusE setuid root(with kernel 2.6, use realtime-lsm instead) + --disable-doxy-treeview stop Doxygen from generating java-ified + treeview menus in its HTML output + --enable-optimize ask the compiler for its best optimizations (possibly only i386) + --enable-debug disable optimizations + --enable-pch enable precompiled headers (gcc 3.4 required) + --enable-arch=ARCH use -march=ARCH and -mtune=ARCH argument to CXX + choose from any supported gcc architecture such as: + 386, 486, 586, 686, pentium, pentiumpro, k6, athlon... + --enable-sse enable SSE optimizations + --enable-vst (deprecated, use dssi) build VST/win support. (disabled by default) + --enable-osc build OSC support. (disabled by default) + --enable-dssi is also recommended! + --enable-dssi build DSSI + DSSI-Vst support. (disabled by default) + --enable-osc is also recommended! + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-pic try to use only PIC/non-PIC objects [default=use + both] + --with-gnu-ld assume the C compiler uses GNU ld [default=no] + --with-docbook-stylesheets=DIR use DIR/html/docbook.dsl + --with-x use the X Window System + --with-alsa-prefix=PFX prefix where alsa library is installed (optional) + --with-alsa-inc-prefix=PFX prefix where include libraries are (optional) + --enable-python Build python bindings (on) + +Some influential environment variables: + CXX C++ compiler command + CXXFLAGS C++ compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if + you have headers in a nonstandard directory + CC C compiler command + CFLAGS C compiler flags + CPP C preprocessor + CXXCPP C++ preprocessor + DOXYGEN Doxygen + DOT The "dot" program from graphviz + PERL Perl + XMKMF Path to xmkmf, Makefile generator for X Window System + PKG_CONFIG path to pkg-config utility + Fluidsynth_CFLAGS + C compiler flags for Fluidsynth, overriding pkg-config + Fluidsynth_LIBS + linker flags for Fluidsynth, overriding pkg-config + SNDFILE_CFLAGS + C compiler flags for SNDFILE, overriding pkg-config + SNDFILE_LIBS + linker flags for SNDFILE, overriding pkg-config + SAMPLERATE_CFLAGS + C compiler flags for SAMPLERATE, overriding pkg-config + SAMPLERATE_LIBS + linker flags for SAMPLERATE, overriding pkg-config + JACK_CFLAGS C compiler flags for JACK, overriding pkg-config + JACK_LIBS linker flags for JACK, overriding pkg-config + LASH_CFLAGS C compiler flags for LASH, overriding pkg-config + LASH_LIBS linker flags for LASH, overriding pkg-config + FST_CFLAGS C compiler flags for FST, overriding pkg-config + FST_LIBS linker flags for FST, overriding pkg-config + LO_CFLAGS C compiler flags for LO, overriding pkg-config + LO_LIBS linker flags for LO, overriding pkg-config + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +Report bugs to the package provider. +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive + else + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } + done +fi + +test -n "$ac_init_help" && exit $ac_status +if $ac_init_version; then + cat <<\_ACEOF +MusE configure 1.1 +generated by GNU Autoconf 2.65 + +Copyright (C) 2009 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi + +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## + +# ac_fn_cxx_try_compile LINENO +# ---------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_cxx_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} # ac_fn_cxx_try_compile + +# ac_fn_c_try_compile LINENO +# -------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} # ac_fn_c_try_compile + +# ac_fn_c_try_link LINENO +# ----------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} # ac_fn_c_try_link + +# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists and can be compiled using the include files in +# INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} # ac_fn_c_check_header_compile + +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp + +# ac_fn_c_try_run LINENO +# ---------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} # ac_fn_c_try_run + +# ac_fn_c_check_func LINENO FUNC VAR +# ---------------------------------- +# Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_c_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case declares $2. + For example, HP-UX 11i declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main () +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} # ac_fn_c_check_func + +# ac_fn_cxx_try_cpp LINENO +# ------------------------ +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_cxx_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } >/dev/null && { + test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} # ac_fn_cxx_try_cpp + +# ac_fn_cxx_try_link LINENO +# ------------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_cxx_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} # ac_fn_cxx_try_link + +# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists, giving a warning if it cannot be compiled using +# the include files in INCLUDES and setting the cache variable VAR +# accordingly. +ac_fn_c_check_header_mongrel () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 +$as_echo_n "checking $2 usability... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_header_compiler=yes +else + ac_header_compiler=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 +$as_echo_n "checking $2 presence... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <$2> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + ac_header_preproc=yes +else + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( + yes:no: ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; + no:yes:* ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=\$ac_header_compiler" +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} # ac_fn_c_check_header_mongrel +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by MusE $as_me 1.1, which was +generated by GNU Autoconf 2.65. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" + done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; + 2) + as_fn_append ac_configure_args1 " '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + as_fn_append ac_configure_args " '$ac_arg'" + ;; + esac + done +done +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + cat <<\_ASBOX +## ---------------- ## +## Cache variables. ## +## ---------------- ## +_ASBOX + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + cat <<\_ASBOX +## ----------------- ## +## Output variables. ## +## ----------------- ## +_ASBOX + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + cat <<\_ASBOX +## ------------------- ## +## File substitutions. ## +## ------------------- ## +_ASBOX + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + cat <<\_ASBOX +## ----------- ## +## confdefs.h. ## +## ----------- ## +_ASBOX + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + ac_site_file1=$CONFIG_SITE +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + +am__api_version='1.11' + +ac_aux_dir= +for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do + for ac_t in install-sh install.sh shtool; do + if test -f "$ac_dir/$ac_t"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/$ac_t -c" + break 2 + fi + done +done +if test -z "$ac_aux_dir"; then + as_fn_error "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if test "${ac_cv_path_install+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in #(( + ./ | .// | /[cC]/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac + + done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 +$as_echo_n "checking whether build environment is sane... " >&6; } +# Just in case +sleep 1 +echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[\\\"\#\$\&\'\`$am_lf]*) + as_fn_error "unsafe absolute working directory name" "$LINENO" 5;; +esac +case $srcdir in + *[\\\"\#\$\&\'\`$am_lf\ \ ]*) + as_fn_error "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; +esac + +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + rm -f conftest.file + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + as_fn_error "ls -t appears to fail. Make sure there is not a broken +alias in your environment" "$LINENO" 5 + fi + + test "$2" = conftest.file + ) +then + # Ok. + : +else + as_fn_error "newly created file is older than distributed files! +Check your system clock" "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +test "$program_prefix" != NONE && + program_transform_name="s&^&$program_prefix&;$program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s&\$&$program_suffix&;$program_transform_name" +# Double any \ or $. +# By default was `s,x,x', remove it if useless. +ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' +program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` + +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` + +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 +$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} +fi + +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi + +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 +$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } +if test -z "$MKDIR_P"; then + if test "${ac_cv_path_mkdir+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in mkdir gmkdir; do + for ac_exec_ext in '' $ac_executable_extensions; do + { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue + case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir (GNU coreutils) '* | \ + 'mkdir (coreutils) '* | \ + 'mkdir (fileutils) '4.1*) + ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + break 3;; + esac + done + done + done +IFS=$as_save_IFS + +fi + + test -d ./--version && rmdir ./--version + if test "${ac_cv_path_mkdir+set}" = set; then + MKDIR_P="$ac_cv_path_mkdir -p" + else + # As a last resort, use the slow shell script. Don't cache a + # value for MKDIR_P within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + MKDIR_P="$ac_install_sh -d" + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 +$as_echo "$MKDIR_P" >&6; } + +mkdir_p="$MKDIR_P" +case $mkdir_p in + [\\/$]* | ?:[\\/]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_AWK+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AWK="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + cat >conftest.make <<\_ACEOF +SHELL = /bin/sh +all: + @echo '@@@%%%=$(MAKE)=@@@%%%' +_ACEOF +# GNU make sometimes prints "make[1]: Entering...", which would confuse us. +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac +rm -f conftest.make +fi +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + SET_MAKE= +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi + +rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null + +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + am__isrc=' -I$(srcdir)' + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + as_fn_error "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi + + +# Define the identity of the package. + PACKAGE='muse' + VERSION='1.1' + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE "$PACKAGE" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define VERSION "$VERSION" +_ACEOF + +# Some tools Automake needs. + +ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} + + +AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} + + +AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} + + +AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} + + +MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} + +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +# Always define AMTAR for backward compatibility. + +AMTAR=${AMTAR-"${am_missing_run}tar"} + +am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' + + + + + +ac_config_headers="$ac_config_headers config.h" + +### AM_MAINTAINER_MODE + + if test x = y; then + INSIDE_GNOME_COMMON_TRUE= + INSIDE_GNOME_COMMON_FALSE='#' +else + INSIDE_GNOME_COMMON_TRUE='#' + INSIDE_GNOME_COMMON_FALSE= +fi + + + test -n "$ACLOCAL_FLAGS" && ACLOCAL="$ACLOCAL $ACLOCAL_FLAGS" + + for k in m4 ; do ACLOCAL="$ACLOCAL -I $k" ; done + + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +if test -z "$CXX"; then + if test -n "$CCC"; then + CXX=$CCC + else + if test -n "$ac_tool_prefix"; then + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CXX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CXX"; then + ac_cv_prog_CXX="$CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CXX=$ac_cv_prog_CXX +if test -n "$CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 +$as_echo "$CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CXX" && break + done +fi +if test -z "$CXX"; then + ac_ct_CXX=$CXX + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CXX"; then + ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CXX="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CXX=$ac_cv_prog_ac_ct_CXX +if test -n "$ac_ct_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 +$as_echo "$ac_ct_CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CXX" && break +done + + if test "x$ac_ct_CXX" = x; then + CXX="g++" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CXX=$ac_ct_CXX + fi +fi + + fi +fi +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C++ compiler works" >&5 +$as_echo_n "checking whether the C++ compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= + +else + ac_file='' +fi +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ as_fn_set_status 77 +as_fn_error "C++ compiler cannot create executables +See \`config.log' for more details." "$LINENO" 5; }; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler default output file name" >&5 +$as_echo_n "checking for C++ compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +ac_exeext=$ac_cv_exeext + +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." "$LINENO" 5; } +fi +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "cannot run C++ compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." "$LINENO" 5; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if test "${ac_cv_objext+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "cannot compute suffix of object files: cannot compile +See \`config.log' for more details." "$LINENO" 5; } +fi +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 +$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } +if test "${ac_cv_cxx_compiler_gnu+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_cxx_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 +$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GXX=yes +else + GXX= +fi +ac_test_CXXFLAGS=${CXXFLAGS+set} +ac_save_CXXFLAGS=$CXXFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 +$as_echo_n "checking whether $CXX accepts -g... " >&6; } +if test "${ac_cv_prog_cxx_g+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_save_cxx_werror_flag=$ac_cxx_werror_flag + ac_cxx_werror_flag=yes + ac_cv_prog_cxx_g=no + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +else + CXXFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + +else + ac_cxx_werror_flag=$ac_save_cxx_werror_flag + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cxx_werror_flag=$ac_save_cxx_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 +$as_echo "$ac_cv_prog_cxx_g" >&6; } +if test "$ac_test_CXXFLAGS" = set; then + CXXFLAGS=$ac_save_CXXFLAGS +elif test $ac_cv_prog_cxx_g = yes; then + if test "$GXX" = yes; then + CXXFLAGS="-g -O2" + else + CXXFLAGS="-g" + fi +else + if test "$GXX" = yes; then + CXXFLAGS="-O2" + else + CXXFLAGS= + fi +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +DEPDIR="${am__leading_dot}deps" + +ac_config_commands="$ac_config_commands depfiles" + + +am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 +$as_echo_n "checking for style of include used by $am_make... " >&6; } +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 +$as_echo "$_am_result" >&6; } +rm -f confinc confmf + +# Check whether --enable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then : + enableval=$enable_dependency_tracking; +fi + +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi + if test "x$enable_dependency_tracking" != xno; then + AMDEP_TRUE= + AMDEP_FALSE='#' +else + AMDEP_TRUE='#' + AMDEP_FALSE= +fi + + + +depcc="$CXX" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CXX_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CXX_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CXX_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } +CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then + am__fastdepCXX_TRUE= + am__fastdepCXX_FALSE='#' +else + am__fastdepCXX_TRUE='#' + am__fastdepCXX_FALSE= +fi + + +case `pwd` in + *\ * | *\ *) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 +$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; +esac + + + +macro_version='2.2.6b' +macro_revision='1.3017' + + + + + + + + + + + + + +ltmain="$ac_aux_dir/ltmain.sh" + +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + as_fn_error "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if test "${ac_cv_build+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + as_fn_error "cannot guess build type; you must specify one" "$LINENO" 5 +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + as_fn_error "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) as_fn_error "invalid value of canonical build" "$LINENO" 5;; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if test "${ac_cv_host+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + as_fn_error "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) as_fn_error "invalid value of canonical host" "$LINENO" 5;; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "no acceptable C compiler found in \$PATH +See \`config.log' for more details." "$LINENO" 5; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if test "${ac_cv_c_compiler_gnu+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if test "${ac_cv_prog_cc_g+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if test "${ac_cv_prog_cc_c89+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +depcc="$CC" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if test "${ac_cv_path_SED+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_SED_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + as_fn_error "no acceptable sed could be found in \$PATH" "$LINENO" 5 + fi +else + ac_cv_path_SED=$SED +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed + +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if test "${ac_cv_path_GREP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if test "${ac_cv_path_EGREP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 +$as_echo_n "checking for fgrep... " >&6; } +if test "${ac_cv_path_FGREP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 + then ac_cv_path_FGREP="$GREP -F" + else + if test -z "$FGREP"; then + ac_path_FGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in fgrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue +# Check for GNU ac_path_FGREP and select it if it is found. + # Check for GNU $ac_path_FGREP +case `"$ac_path_FGREP" --version 2>&1` in +*GNU*) + ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'FGREP' >> "conftest.nl" + "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_FGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_FGREP="$ac_path_FGREP" + ac_path_FGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_FGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_FGREP"; then + as_fn_error "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_FGREP=$FGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 +$as_echo "$ac_cv_path_FGREP" >&6; } + FGREP="$ac_cv_path_FGREP" + + +test -z "$GREP" && GREP=grep + + + + + + + + + + + + + + + + + + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if test "${lt_cv_path_LD+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && as_fn_error "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if test "${lt_cv_prog_gnu_ld+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 +$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } +if test "${lt_cv_path_NM+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_nm_to_check="${ac_tool_prefix}nm" + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/$lt_tmp_nm" + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS="$lt_save_ifs" + done + : ${lt_cv_path_NM=no} +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 +$as_echo "$lt_cv_path_NM" >&6; } +if test "$lt_cv_path_NM" != "no"; then + NM="$lt_cv_path_NM" +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$ac_tool_prefix"; then + for ac_prog in "dumpbin -symbols" "link -dump -symbols" + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_DUMPBIN+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DUMPBIN"; then + ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DUMPBIN=$ac_cv_prog_DUMPBIN +if test -n "$DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 +$as_echo "$DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$DUMPBIN" && break + done +fi +if test -z "$DUMPBIN"; then + ac_ct_DUMPBIN=$DUMPBIN + for ac_prog in "dumpbin -symbols" "link -dump -symbols" +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DUMPBIN"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN +if test -n "$ac_ct_DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 +$as_echo "$ac_ct_DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_DUMPBIN" && break +done + + if test "x$ac_ct_DUMPBIN" = x; then + DUMPBIN=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DUMPBIN=$ac_ct_DUMPBIN + fi +fi + + + if test "$DUMPBIN" != ":"; then + NM="$DUMPBIN" + fi +fi +test -z "$NM" && NM=nm + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 +$as_echo_n "checking the name lister ($NM) interface... " >&6; } +if test "${lt_cv_nm_interface+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:5167: $ac_compile\"" >&5) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&5 + (eval echo "\"\$as_me:5170: $NM \\\"conftest.$ac_objext\\\"\"" >&5) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&5 + (eval echo "\"\$as_me:5173: output\"" >&5) + cat conftest.out >&5 + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 +$as_echo "$lt_cv_nm_interface" >&6; } + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +$as_echo_n "checking whether ln -s works... " >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +$as_echo "no, using $LN_S" >&6; } +fi + +# find the maximum length of command line arguments +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 +$as_echo_n "checking the maximum length of command line arguments... " >&6; } +if test "${lt_cv_sys_max_cmd_len+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + i=0 + teststring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8 ; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test "X"`$SHELL $0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \ + = "XX$teststring$teststring"; } >/dev/null 2>&1 && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac + +fi + +if test -n $lt_cv_sys_max_cmd_len ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 +$as_echo "$lt_cv_sys_max_cmd_len" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 +$as_echo "none" >&6; } +fi +max_cmd_len=$lt_cv_sys_max_cmd_len + + + + + + +: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 +$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } +# Try some XSI features +xsi_shell=no +( _lt_dummy="a/b/c" + test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \ + = c,a/b,, \ + && eval 'test $(( 1 + 1 )) -eq 2 \ + && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ + && xsi_shell=yes +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 +$as_echo "$xsi_shell" >&6; } + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 +$as_echo_n "checking whether the shell understands \"+=\"... " >&6; } +lt_shell_append=no +( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ + >/dev/null 2>&1 \ + && lt_shell_append=yes +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 +$as_echo "$lt_shell_append" >&6; } + + +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi + + + + + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 +$as_echo_n "checking for $LD option to reload object files... " >&6; } +if test "${lt_cv_ld_reload_flag+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_reload_flag='-r' +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 +$as_echo "$lt_cv_ld_reload_flag" >&6; } +reload_flag=$lt_cv_ld_reload_flag +case $reload_flag in +"" | " "*) ;; +*) reload_flag=" $reload_flag" ;; +esac +reload_cmds='$LD$reload_flag -o $output$reload_objs' +case $host_os in + darwin*) + if test "$GCC" = yes; then + reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' + else + reload_cmds='$LD$reload_flag -o $output$reload_objs' + fi + ;; +esac + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. +set dummy ${ac_tool_prefix}objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OBJDUMP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + # Extract the first word of "objdump", so it can be a program name with args. +set dummy objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OBJDUMP="objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +$as_echo "$ac_ct_OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OBJDUMP" = x; then + OBJDUMP="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJDUMP=$ac_ct_OBJDUMP + fi +else + OBJDUMP="$ac_cv_prog_OBJDUMP" +fi + +test -z "$OBJDUMP" && OBJDUMP=objdump + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 +$as_echo_n "checking how to recognize dependent libraries... " >&6; } +if test "${lt_cv_deplibs_check_method+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# `unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# which responds to the $file_magic_cmd with a given extended regex. +# If you have `file' or equivalent on your system and you're not sure +# whether `pass_all' will *always* work, you probably want this one. + +case $host_os in +aix[4-9]*) + lt_cv_deplibs_check_method=pass_all + ;; + +beos*) + lt_cv_deplibs_check_method=pass_all + ;; + +bsdi[45]*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' + lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; + +cygwin*) + # func_win32_libid is a shell function defined in ltmain.sh + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + ;; + +mingw* | pw32*) + # Base MSYS/MinGW do not provide the 'file' command needed by + # func_win32_libid shell function, so use a weaker test based on 'objdump', + # unless we find 'file', for example because we are cross-compiling. + if ( file / ) >/dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]' + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[3-9]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 +$as_echo "$lt_cv_deplibs_check_method" >&6; } +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + + + + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_AR+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_AR+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + +test -z "$AR" && AR=ar +test -z "$AR_FLAGS" && AR_FLAGS=cru + + + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +test -z "$STRIP" && STRIP=: + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_RANLIB+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi + +test -z "$RANLIB" && RANLIB=: + + + + + + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# Check for command to grab the raw symbol name followed by C symbol from nm. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 +$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } +if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[BCDEGRST]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([_A-Za-z][_A-Za-z0-9]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[BCDT]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[ABCDGISTW]' + ;; +hpux*) + if test "$host_cpu" = ia64; then + symcode='[ABCDEGRST]' + fi + ;; +irix* | nonstopux*) + symcode='[BCDEGRST]' + ;; +osf*) + symcode='[BCDEGQRST]' + ;; +solaris*) + symcode='[BDRT]' + ;; +sco3.2v5*) + symcode='[DT]' + ;; +sysv4.2uw2*) + symcode='[DT]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[ABDT]' + ;; +sysv4) + symcode='[DFNSTU]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[ABCDGIRSTW]' ;; +esac + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function + # and D for any global variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK '"\ +" {last_section=section; section=\$ 3};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ +" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ +" s[1]~/^[@?]/{print s[1], s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + # Now try to grab the symbols. + nlist=conftest.nm + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\""; } >&5 + (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +const struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_save_LIBS="$LIBS" + lt_save_CFLAGS="$CFLAGS" + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext}; then + pipe_works=yes + fi + LIBS="$lt_save_LIBS" + CFLAGS="$lt_save_CFLAGS" + else + echo "cannot find nm_test_func in $nlist" >&5 + fi + else + echo "cannot find nm_test_var in $nlist" >&5 + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 + fi + else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done + +fi + +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 +$as_echo "failed" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 +$as_echo "ok" >&6; } +fi + + + + + + + + + + + + + + + + + + + + + + + +# Check whether --enable-libtool-lock was given. +if test "${enable_libtool_lock+set}" = set; then : + enableval=$enable_libtool_lock; +fi + +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '#line 6379 "configure"' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_i386" + ;; + ppc64-*linux*|powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + ppc*-*linux*|powerpc*-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 +$as_echo_n "checking whether the C compiler needs -belf... " >&6; } +if test "${lt_cv_cc_needs_belf+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_cc_needs_belf=yes +else + lt_cv_cc_needs_belf=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 +$as_echo "$lt_cv_cc_needs_belf" >&6; } + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; +sparc*-*solaris*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) LD="${LD-ld} -m elf64_sparc" ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks="$enable_libtool_lock" + + + case $host_os in + rhapsody* | darwin*) + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. +set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_DSYMUTIL+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DSYMUTIL"; then + ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DSYMUTIL=$ac_cv_prog_DSYMUTIL +if test -n "$DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 +$as_echo "$DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DSYMUTIL"; then + ac_ct_DSYMUTIL=$DSYMUTIL + # Extract the first word of "dsymutil", so it can be a program name with args. +set dummy dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DSYMUTIL"; then + ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL +if test -n "$ac_ct_DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 +$as_echo "$ac_ct_DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DSYMUTIL" = x; then + DSYMUTIL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DSYMUTIL=$ac_ct_DSYMUTIL + fi +else + DSYMUTIL="$ac_cv_prog_DSYMUTIL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. +set dummy ${ac_tool_prefix}nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_NMEDIT+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NMEDIT"; then + ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +NMEDIT=$ac_cv_prog_NMEDIT +if test -n "$NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 +$as_echo "$NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_NMEDIT"; then + ac_ct_NMEDIT=$NMEDIT + # Extract the first word of "nmedit", so it can be a program name with args. +set dummy nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_NMEDIT"; then + ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_NMEDIT="nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT +if test -n "$ac_ct_NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 +$as_echo "$ac_ct_NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_NMEDIT" = x; then + NMEDIT=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + NMEDIT=$ac_ct_NMEDIT + fi +else + NMEDIT="$ac_cv_prog_NMEDIT" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. +set dummy ${ac_tool_prefix}lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_LIPO+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LIPO"; then + ac_cv_prog_LIPO="$LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_LIPO="${ac_tool_prefix}lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LIPO=$ac_cv_prog_LIPO +if test -n "$LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 +$as_echo "$LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LIPO"; then + ac_ct_LIPO=$LIPO + # Extract the first word of "lipo", so it can be a program name with args. +set dummy lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_LIPO+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LIPO"; then + ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_LIPO="lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO +if test -n "$ac_ct_LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 +$as_echo "$ac_ct_LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LIPO" = x; then + LIPO=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LIPO=$ac_ct_LIPO + fi +else + LIPO="$ac_cv_prog_LIPO" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OTOOL+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL"; then + ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OTOOL="${ac_tool_prefix}otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL=$ac_cv_prog_OTOOL +if test -n "$OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 +$as_echo "$OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL"; then + ac_ct_OTOOL=$OTOOL + # Extract the first word of "otool", so it can be a program name with args. +set dummy otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_OTOOL+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL"; then + ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OTOOL="otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL +if test -n "$ac_ct_OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 +$as_echo "$ac_ct_OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL" = x; then + OTOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL=$ac_ct_OTOOL + fi +else + OTOOL="$ac_cv_prog_OTOOL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OTOOL64+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL64"; then + ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL64=$ac_cv_prog_OTOOL64 +if test -n "$OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 +$as_echo "$OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL64"; then + ac_ct_OTOOL64=$OTOOL64 + # Extract the first word of "otool64", so it can be a program name with args. +set dummy otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_OTOOL64+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL64"; then + ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OTOOL64="otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 +if test -n "$ac_ct_OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 +$as_echo "$ac_ct_OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL64" = x; then + OTOOL64=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL64=$ac_ct_OTOOL64 + fi +else + OTOOL64="$ac_cv_prog_OTOOL64" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 +$as_echo_n "checking for -single_module linker flag... " >&6; } +if test "${lt_cv_apple_cc_single_mod+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_apple_cc_single_mod=no + if test -z "${LT_MULTI_MODULE}"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&5 + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 +$as_echo "$lt_cv_apple_cc_single_mod" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 +$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } +if test "${lt_cv_ld_exported_symbols_list+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_ld_exported_symbols_list=yes +else + lt_cv_ld_exported_symbols_list=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 +$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } + case $host_os in + rhapsody* | darwin1.[012]) + _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[91]*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + 10.[012]*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test "$lt_cv_apple_cc_single_mod" = "yes"; then + _lt_dar_single_mod='$single_module' + fi + if test "$lt_cv_ld_exported_symbols_list" = "yes"; then + _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + if test "$DSYMUTIL" != ":"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if test "${ac_cv_prog_CPP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if test "${ac_cv_header_stdc+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "#define STDC_HEADERS 1" >>confdefs.h + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +for ac_header in dlfcn.h +do : + ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default +" +if test "x$ac_cv_header_dlfcn_h" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_DLFCN_H 1 +_ACEOF + +fi + +done + + + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +if test -z "$CXX"; then + if test -n "$CCC"; then + CXX=$CCC + else + if test -n "$ac_tool_prefix"; then + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CXX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CXX"; then + ac_cv_prog_CXX="$CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CXX=$ac_cv_prog_CXX +if test -n "$CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 +$as_echo "$CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CXX" && break + done +fi +if test -z "$CXX"; then + ac_ct_CXX=$CXX + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CXX"; then + ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CXX="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CXX=$ac_cv_prog_ac_ct_CXX +if test -n "$ac_ct_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 +$as_echo "$ac_ct_CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CXX" && break +done + + if test "x$ac_ct_CXX" = x; then + CXX="g++" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CXX=$ac_ct_CXX + fi +fi + + fi +fi +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 +$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } +if test "${ac_cv_cxx_compiler_gnu+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_cxx_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 +$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GXX=yes +else + GXX= +fi +ac_test_CXXFLAGS=${CXXFLAGS+set} +ac_save_CXXFLAGS=$CXXFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 +$as_echo_n "checking whether $CXX accepts -g... " >&6; } +if test "${ac_cv_prog_cxx_g+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_save_cxx_werror_flag=$ac_cxx_werror_flag + ac_cxx_werror_flag=yes + ac_cv_prog_cxx_g=no + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +else + CXXFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + +else + ac_cxx_werror_flag=$ac_save_cxx_werror_flag + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cxx_werror_flag=$ac_save_cxx_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 +$as_echo "$ac_cv_prog_cxx_g" >&6; } +if test "$ac_test_CXXFLAGS" = set; then + CXXFLAGS=$ac_save_CXXFLAGS +elif test $ac_cv_prog_cxx_g = yes; then + if test "$GXX" = yes; then + CXXFLAGS="-g -O2" + else + CXXFLAGS="-g" + fi +else + if test "$GXX" = yes; then + CXXFLAGS="-O2" + else + CXXFLAGS= + fi +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +depcc="$CXX" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CXX_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CXX_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CXX_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } +CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then + am__fastdepCXX_TRUE= + am__fastdepCXX_FALSE='#' +else + am__fastdepCXX_TRUE='#' + am__fastdepCXX_FALSE= +fi + + +if test -n "$CXX" && ( test "X$CXX" != "Xno" && + ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || + (test "X$CXX" != "Xg++"))) ; then + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 +$as_echo_n "checking how to run the C++ preprocessor... " >&6; } +if test -z "$CXXCPP"; then + if test "${ac_cv_prog_CXXCPP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CXXCPP needs to be expanded + for CXXCPP in "$CXX -E" "/lib/cpp" + do + ac_preproc_ok=false +for ac_cxx_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CXXCPP=$CXXCPP + +fi + CXXCPP=$ac_cv_prog_CXXCPP +else + ac_cv_prog_CXXCPP=$CXXCPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 +$as_echo "$CXXCPP" >&6; } +ac_preproc_ok=false +for ac_cxx_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +_lt_caught_CXX_error=yes; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +else + _lt_caught_CXX_error=yes +fi + + + + + +# Set options + + + + enable_dlopen=no + + + enable_win32_dll=no + + + # Check whether --enable-shared was given. +if test "${enable_shared+set}" = set; then : + enableval=$enable_shared; p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_shared=yes +fi + + + + + + + + + + # Check whether --enable-static was given. +if test "${enable_static+set}" = set; then : + enableval=$enable_static; p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_static=yes +fi + + + + + + + + + + +# Check whether --with-pic was given. +if test "${with_pic+set}" = set; then : + withval=$with_pic; pic_mode="$withval" +else + pic_mode=default +fi + + +test -z "$pic_mode" && pic_mode=default + + + + + + + + # Check whether --enable-fast-install was given. +if test "${enable_fast_install+set}" = set; then : + enableval=$enable_fast_install; p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_fast_install=yes +fi + + + + + + + + + + + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ltmain" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' + + + + + + + + + + + + + + + + + + + + + + + + + +test -z "$LN_S" && LN_S="ln -s" + + + + + + + + + + + + + + +if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 +$as_echo_n "checking for objdir... " >&6; } +if test "${lt_cv_objdir+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 +$as_echo "$lt_cv_objdir" >&6; } +objdir=$lt_cv_objdir + + + + + +cat >>confdefs.h <<_ACEOF +#define LT_OBJDIR "$lt_cv_objdir/" +_ACEOF + + + + + + + + + + + + + + + + + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='s/\(["`$\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld="$lt_cv_prog_gnu_ld" + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` + + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 +$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } +if test "${lt_cv_path_MAGIC_CMD+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/${ac_tool_prefix}file; then + lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + + +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 +$as_echo_n "checking for file... " >&6; } +if test "${lt_cv_path_MAGIC_CMD+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/file; then + lt_cv_path_MAGIC_CMD="$ac_dir/file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + else + MAGIC_CMD=: + fi +fi + + fi + ;; +esac + +# Use C for the default configuration in the libtool script + +lt_save_CC="$CC" +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +objext=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* + +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* + + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + +lt_prog_compiler_no_builtin_flag= + +if test "$GCC" = yes; then + lt_prog_compiler_no_builtin_flag=' -fno-builtin' + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } +if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_rtti_exceptions=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="-fno-rtti -fno-exceptions" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:8436: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:8440: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_rtti_exceptions=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } + +if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then + lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" +else + : +fi + +fi + + + + + + + lt_prog_compiler_wl= +lt_prog_compiler_pic= +lt_prog_compiler_static= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } + + if test "$GCC" = yes; then + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_static='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic='-fno-common' + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + ;; + + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic=-Kconform_pic + fi + ;; + + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + else + lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static='-non_shared' + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + # old Intel for x86_64 which still supported -KPIC. + ecc*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='--shared' + lt_prog_compiler_static='--static' + ;; + pgcc* | pgf77* | pgf90* | pgf95*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + ccc*) + lt_prog_compiler_wl='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + xl*) + # IBM XL C 8.0/Fortran 10.1 on PPC + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-qpic' + lt_prog_compiler_static='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C 5.9 + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Wl,' + ;; + *Sun\ F*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='' + ;; + esac + ;; + esac + ;; + + newsos6) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + + rdos*) + lt_prog_compiler_static='-non_shared' + ;; + + solaris*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + case $cc_basename in + f77* | f90* | f95*) + lt_prog_compiler_wl='-Qoption ld ';; + *) + lt_prog_compiler_wl='-Wl,';; + esac + ;; + + sunos4*) + lt_prog_compiler_wl='-Qoption ld ' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + lt_prog_compiler_pic='-Kconform_pic' + lt_prog_compiler_static='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + unicos*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_can_build_shared=no + ;; + + uts4*) + lt_prog_compiler_pic='-pic' + lt_prog_compiler_static='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared=no + ;; + esac + fi + +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic= + ;; + *) + lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5 +$as_echo "$lt_prog_compiler_pic" >&6; } + + + + + + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } +if test "${lt_cv_prog_compiler_pic_works+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_works=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic -DPIC" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:8775: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:8779: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 +$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } + +if test x"$lt_cv_prog_compiler_pic_works" = xyes; then + case $lt_prog_compiler_pic in + "" | " "*) ;; + *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; + esac +else + lt_prog_compiler_pic= + lt_prog_compiler_can_build_shared=no +fi + +fi + + + + + + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if test "${lt_cv_prog_compiler_static_works+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_static_works=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works=yes + fi + else + lt_cv_prog_compiler_static_works=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 +$as_echo "$lt_cv_prog_compiler_static_works" >&6; } + +if test x"$lt_cv_prog_compiler_static_works" = xyes; then + : +else + lt_prog_compiler_static= +fi + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test "${lt_cv_prog_compiler_c_o+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:8880: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:8884: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test "${lt_cv_prog_compiler_c_o+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:8935: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:8939: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } + if test "$hard_links" = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + + runpath_var= + allow_undefined_flag= + always_export_symbols=no + archive_cmds= + archive_expsym_cmds= + compiler_needs_object=no + enable_shared_with_static_runtimes=no + export_dynamic_flag_spec= + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + hardcode_automatic=no + hardcode_direct=no + hardcode_direct_absolute=no + hardcode_libdir_flag_spec= + hardcode_libdir_flag_spec_ld= + hardcode_libdir_separator= + hardcode_minus_L=no + hardcode_shlibpath_var=unsupported + inherit_rpath=no + link_all_deplibs=unknown + module_cmds= + module_expsym_cmds= + old_archive_from_new_cmds= + old_archive_from_expsyms_cmds= + thread_safe_flag_spec= + whole_archive_flag_spec= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; + linux* | k*bsd*-gnu) + link_all_deplibs=no + ;; + esac + + ld_shlibs=yes + if test "$with_gnu_ld" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + export_dynamic_flag_spec='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec= + fi + supports_anon_versioning=no + case `$LD -v 2>&1` in + *GNU\ gold*) supports_anon_versioning=yes ;; + *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[3-9]*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.9.1, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to modify your PATH +*** so that a non-GNU linker is found, and then restart. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + allow_undefined_flag=unsupported + always_export_symbols=no + enable_shared_with_static_runtimes=yes + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs=no + fi + ;; + + interix[3-9]*) + hardcode_direct=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + tmp_diet=no + if test "$host_os" = linux-dietlibc; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test "$tmp_diet" = no + then + tmp_addflag= + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + whole_archive_flag_spec= + tmp_sharedflag='--shared' ;; + xl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + compiler_needs_object=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + xlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' + hardcode_libdir_flag_spec= + hardcode_libdir_flag_spec_ld='-rpath $libdir' + archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + ld_shlibs=no + fi + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + ;; + + sunos4*) + archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + + if test "$ld_shlibs" = no; then + runpath_var= + hardcode_libdir_flag_spec= + export_dynamic_flag_spec= + whole_archive_flag_spec= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag=unsupported + always_export_symbols=yes + archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + + aix[4-9]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds='' + hardcode_direct=yes + hardcode_direct_absolute=yes + hardcode_libdir_separator=':' + link_all_deplibs=yes + file_list_spec='${wl}-f,' + + if test "$GCC" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + link_all_deplibs=no + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + export_dynamic_flag_spec='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag="-z nodefs" + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag=' ${wl}-bernotok' + allow_undefined_flag=' ${wl}-berok' + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec='$convenience' + archive_cmds_need_lc=yes + # This is similar to how AIX traditionally builds its shared libraries. + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + bsdi[45]*) + export_dynamic_flag_spec=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_from_new_cmds='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' + fix_srcfile_path='`cygpath -w "$srcfile"`' + enable_shared_with_static_runtimes=yes + ;; + + darwin* | rhapsody*) + + + archive_cmds_need_lc=no + hardcode_direct=no + hardcode_automatic=yes + hardcode_shlibpath_var=unsupported + whole_archive_flag_spec='' + link_all_deplibs=yes + allow_undefined_flag="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=echo + archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + + else + ld_shlibs=no + fi + + ;; + + dgux*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + freebsd1*) + ld_shlibs=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + hpux9*) + if test "$GCC" = yes; then + archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + export_dynamic_flag_spec='${wl}-E' + ;; + + hpux10*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_flag_spec_ld='+b $libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='${wl}-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + fi + ;; + + hpux11*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct=no + hardcode_shlibpath_var=no + ;; + *) + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int foo(void) {} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' + +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$save_LDFLAGS" + else + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + inherit_rpath=yes + link_all_deplibs=yes + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + newsos6) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_shlibpath_var=no + ;; + + *nto* | *qnx*) + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + hardcode_direct=yes + hardcode_shlibpath_var=no + hardcode_direct_absolute=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + else + case $host_os in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-R$libdir' + ;; + *) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + esac + fi + else + ld_shlibs=no + fi + ;; + + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec='-rpath $libdir' + fi + archive_cmds_need_lc='no' + hardcode_libdir_separator=: + ;; + + solaris*) + no_undefined_flag=' -z defs' + if test "$GCC" = yes; then + wlarc='${wl}' + archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='${wl}' + archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_shlibpath_var=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. GCC discards it without `$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test "$GCC" = yes; then + whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + else + whole_archive_flag_spec='-z allextract$convenience -z defaultextract' + fi + ;; + esac + link_all_deplibs=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds='$CC -r -o $output$reload_objs' + hardcode_direct=no + ;; + motorola) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var=no + ;; + + sysv4.3*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + export_dynamic_flag_spec='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag='${wl}-z,text' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag='${wl}-z,text' + allow_undefined_flag='${wl}-z,nodefs' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='${wl}-R,$libdir' + hardcode_libdir_separator=':' + link_all_deplibs=yes + export_dynamic_flag_spec='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + *) + ld_shlibs=no + ;; + esac + + if test x$host_vendor = xsni; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + export_dynamic_flag_spec='${wl}-Blargedynsym' + ;; + esac + fi + fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 +$as_echo "$ld_shlibs" >&6; } +test "$ld_shlibs" = no && can_build_shared=no + +with_gnu_ld=$with_gnu_ld + + + + + + + + + + + + + + + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl + pic_flag=$lt_prog_compiler_pic + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag + allow_undefined_flag= + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 + (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + then + archive_cmds_need_lc=no + else + archive_cmds_need_lc=yes + fi + allow_undefined_flag=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc" >&5 +$as_echo "$archive_cmds_need_lc" >&6; } + ;; + esac + fi + ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } + +if test "$GCC" = yes; then + case $host_os in + darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; + *) lt_awk_arg="/^libraries:/" ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'` + else + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary. + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path/$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" + else + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk ' +BEGIN {RS=" "; FS="/|\n";} { + lt_foo=""; + lt_count=0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo="/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[lt_foo]++; } + if (lt_freq[lt_foo] == 1) { print lt_foo; } +}'` + sys_lib_search_path_spec=`$ECHO $lt_search_path_spec` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[4-9]*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[123]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +interix[3-9]*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # Some binutils ld are patched to set DT_RUNPATH + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : + shlibpath_overrides_runpath=yes +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } +hardcode_action= +if test -n "$hardcode_libdir_flag_spec" || + test -n "$runpath_var" || + test "X$hardcode_automatic" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$hardcode_direct" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && + test "$hardcode_minus_L" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action=unsupported +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 +$as_echo "$hardcode_action" >&6; } + +if test "$hardcode_action" = relink || + test "$inherit_rpath" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if test "${ac_cv_lib_dl_dlopen+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + +fi + + ;; + + *) + ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" +if test "x$ac_cv_func_shl_load" = x""yes; then : + lt_cv_dlopen="shl_load" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 +$as_echo_n "checking for shl_load in -ldld... " >&6; } +if test "${ac_cv_lib_dld_shl_load+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shl_load (); +int +main () +{ +return shl_load (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_shl_load=yes +else + ac_cv_lib_dld_shl_load=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 +$as_echo "$ac_cv_lib_dld_shl_load" >&6; } +if test "x$ac_cv_lib_dld_shl_load" = x""yes; then : + lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" +else + ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" +if test "x$ac_cv_func_dlopen" = x""yes; then : + lt_cv_dlopen="dlopen" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if test "${ac_cv_lib_dl_dlopen+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 +$as_echo_n "checking for dlopen in -lsvld... " >&6; } +if test "${ac_cv_lib_svld_dlopen+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsvld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_svld_dlopen=yes +else + ac_cv_lib_svld_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 +$as_echo "$ac_cv_lib_svld_dlopen" >&6; } +if test "x$ac_cv_lib_svld_dlopen" = x""yes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 +$as_echo_n "checking for dld_link in -ldld... " >&6; } +if test "${ac_cv_lib_dld_dld_link+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dld_link (); +int +main () +{ +return dld_link (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_dld_link=yes +else + ac_cv_lib_dld_dld_link=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 +$as_echo "$ac_cv_lib_dld_dld_link" >&6; } +if test "x$ac_cv_lib_dld_dld_link" = x""yes; then : + lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" +fi + + +fi + + +fi + + +fi + + +fi + + +fi + + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 +$as_echo_n "checking whether a program can dlopen itself... " >&6; } +if test "${lt_cv_dlopen_self+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line 11319 "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 +$as_echo "$lt_cv_dlopen_self" >&6; } + + if test "x$lt_cv_dlopen_self" = xyes; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 +$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } +if test "${lt_cv_dlopen_self_static+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self_static=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line 11415 "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self_static=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 +$as_echo "$lt_cv_dlopen_self_static" >&6; } + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi + + + + + + + + + + + + + + + + + +striplib= +old_striplib= +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 +$as_echo_n "checking whether stripping libraries is possible... " >&6; } +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + fi + ;; + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + ;; + esac +fi + + + + + + + + + + + + + # Report which library types will actually be built + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 +$as_echo_n "checking if libtool supports shared libraries... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 +$as_echo "$can_build_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 +$as_echo_n "checking whether to build shared libraries... " >&6; } + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[4-9]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 +$as_echo "$enable_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 +$as_echo_n "checking whether to build static libraries... " >&6; } + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 +$as_echo "$enable_static" >&6; } + + + + +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC="$lt_save_CC" + + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +archive_cmds_need_lc_CXX=no +allow_undefined_flag_CXX= +always_export_symbols_CXX=no +archive_expsym_cmds_CXX= +compiler_needs_object_CXX=no +export_dynamic_flag_spec_CXX= +hardcode_direct_CXX=no +hardcode_direct_absolute_CXX=no +hardcode_libdir_flag_spec_CXX= +hardcode_libdir_flag_spec_ld_CXX= +hardcode_libdir_separator_CXX= +hardcode_minus_L_CXX=no +hardcode_shlibpath_var_CXX=unsupported +hardcode_automatic_CXX=no +inherit_rpath_CXX=no +module_cmds_CXX= +module_expsym_cmds_CXX= +link_all_deplibs_CXX=unknown +old_archive_cmds_CXX=$old_archive_cmds +no_undefined_flag_CXX= +whole_archive_flag_spec_CXX= +enable_shared_with_static_runtimes_CXX=no + +# Source file extension for C++ test sources. +ac_ext=cpp + +# Object file extension for compiled C++ test sources. +objext=o +objext_CXX=$objext + +# No sense in running all these tests if we already determined that +# the CXX compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_caught_CXX_error" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="int some_variable = 0;" + + # Code to be used in simple link tests + lt_simple_link_test_code='int main(int, char *[]) { return(0); }' + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + + # save warnings/boilerplate of simple test code + ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* + + ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* + + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_LD=$LD + lt_save_GCC=$GCC + GCC=$GXX + lt_save_with_gnu_ld=$with_gnu_ld + lt_save_path_LD=$lt_cv_path_LD + if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then + lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx + else + $as_unset lt_cv_prog_gnu_ld + fi + if test -n "${lt_cv_path_LDCXX+set}"; then + lt_cv_path_LD=$lt_cv_path_LDCXX + else + $as_unset lt_cv_path_LD + fi + test -z "${LDCXX+set}" || LD=$LDCXX + CC=${CXX-"c++"} + compiler=$CC + compiler_CXX=$CC + for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` + + + if test -n "$compiler"; then + # We don't want -fno-exception when compiling C++ code, so set the + # no_builtin_flag separately + if test "$GXX" = yes; then + lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' + else + lt_prog_compiler_no_builtin_flag_CXX= + fi + + if test "$GXX" = yes; then + # Set up default GNU C++ configuration + + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if test "${lt_cv_path_LD+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && as_fn_error "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if test "${lt_cv_prog_gnu_ld+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + + + + + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test "$with_gnu_ld" = yes; then + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + + # If archive_cmds runs LD, not CC, wlarc should be empty + # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to + # investigate it a little bit more. (MM) + wlarc='${wl}' + + # ancient GNU ld didn't support --whole-archive et. al. + if eval "`$CC -print-prog-name=ld` --help 2>&1" | + $GREP 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec_CXX= + fi + else + with_gnu_ld=no + wlarc= + + # A generic and very simple default shared library creation + # command for GNU C++ for the case where it uses the native + # linker, instead of GNU ld. If possible, this setting should + # overridden to take advantage of the native linker features on + # the platform it is being used on. + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + fi + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' + + else + GXX=no + with_gnu_ld=no + wlarc= + fi + + # PORTME: fill in a description of your system's C++ link characteristics + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + ld_shlibs_CXX=yes + case $host_os in + aix3*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aix[4-9]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds_CXX='' + hardcode_direct_CXX=yes + hardcode_direct_absolute_CXX=yes + hardcode_libdir_separator_CXX=':' + link_all_deplibs_CXX=yes + file_list_spec_CXX='${wl}-f,' + + if test "$GXX" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct_CXX=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L_CXX=yes + hardcode_libdir_flag_spec_CXX='-L$libdir' + hardcode_libdir_separator_CXX= + fi + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + export_dynamic_flag_spec_CXX='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to + # export. + always_export_symbols_CXX=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag_CXX='-berok' + # Determine the default libpath from the value encoded in an empty + # executable. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" + + archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag_CXX="-z nodefs" + archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag_CXX=' ${wl}-bernotok' + allow_undefined_flag_CXX=' ${wl}-berok' + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec_CXX='$convenience' + archive_cmds_need_lc_CXX=yes + # This is similar to how AIX traditionally builds its shared + # libraries. + archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag_CXX=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs_CXX=no + fi + ;; + + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec_CXX='-L$libdir' + allow_undefined_flag_CXX=unsupported + always_export_symbols_CXX=no + enable_shared_with_static_runtimes_CXX=yes + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs_CXX=no + fi + ;; + darwin* | rhapsody*) + + + archive_cmds_need_lc_CXX=no + hardcode_direct_CXX=no + hardcode_automatic_CXX=yes + hardcode_shlibpath_var_CXX=unsupported + whole_archive_flag_spec_CXX='' + link_all_deplibs_CXX=yes + allow_undefined_flag_CXX="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=echo + archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + if test "$lt_cv_apple_cc_single_mod" != "yes"; then + archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" + archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" + fi + + else + ld_shlibs_CXX=no + fi + + ;; + + dgux*) + case $cc_basename in + ec++*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + ghcx*) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + freebsd[12]*) + # C++ shared libraries reported to be fairly broken before + # switch to ELF + ld_shlibs_CXX=no + ;; + + freebsd-elf*) + archive_cmds_need_lc_CXX=no + ;; + + freebsd* | dragonfly*) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + ld_shlibs_CXX=yes + ;; + + gnu*) + ;; + + hpux9*) + hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_CXX=: + export_dynamic_flag_spec_CXX='${wl}-E' + hardcode_direct_CXX=yes + hardcode_minus_L_CXX=yes # Not in the search PATH, + # but as the default + # location of the library. + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aCC*) + archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + ;; + *) + if test "$GXX" = yes; then + archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + + hpux10*|hpux11*) + if test $with_gnu_ld = no; then + hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_CXX=: + + case $host_cpu in + hppa*64*|ia64*) + ;; + *) + export_dynamic_flag_spec_CXX='${wl}-E' + ;; + esac + fi + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct_CXX=no + hardcode_shlibpath_var_CXX=no + ;; + *) + hardcode_direct_CXX=yes + hardcode_direct_absolute_CXX=yes + hardcode_minus_L_CXX=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + esac + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aCC*) + case $host_cpu in + hppa*64*) + archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + ;; + *) + if test "$GXX" = yes; then + if test $with_gnu_ld = no; then + case $host_cpu in + hppa*64*) + archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + + interix[3-9]*) + hardcode_direct_CXX=no + hardcode_shlibpath_var_CXX=no + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + export_dynamic_flag_spec_CXX='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + irix5* | irix6*) + case $cc_basename in + CC*) + # SGI C++ + archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + + # Archives containing C++ object files must be created using + # "CC -ar", where "CC" is the IRIX C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test "$GXX" = yes; then + if test "$with_gnu_ld" = no; then + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib' + fi + fi + link_all_deplibs_CXX=yes + ;; + esac + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_CXX=: + inherit_rpath_CXX=yes + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc* | ecpc* ) + # Intel C++ + with_gnu_ld=yes + # version 8.0 and above of icpc choke on multiply defined symbols + # if we add $predep_objects and $postdep_objects, however 7.1 and + # earlier do not add the objects themselves. + case `$CC -V 2>&1` in + *"Version 7."*) + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 8.0 or newer + tmp_idyn= + case $host_cpu in + ia64*) tmp_idyn=' -i_dynamic';; + esac + archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + archive_cmds_need_lc_CXX=no + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + case `$CC -V` in + *pgCC\ [1-5]* | *pgcpp\ [1-5]*) + prelink_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ + compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"' + old_archive_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ + $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~ + $RANLIB $oldlib' + archive_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + archive_expsym_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + *) # Version 6 will use weak symbols + archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + esac + + hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + ;; + cxx*) + # Compaq C++ + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' + + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec_CXX='-rpath $libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + ;; + xl*) + # IBM XL 8.0 on PPC, with GNU ld + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + no_undefined_flag_CXX=' -zdefs' + archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' + hardcode_libdir_flag_spec_CXX='-R$libdir' + whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + compiler_needs_object_CXX=yes + + # Not sure whether something based on + # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 + # would be better. + output_verbose_link_cmd='echo' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' + ;; + esac + ;; + esac + ;; + + lynxos*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + m88k*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + mvs*) + case $cc_basename in + cxx*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + hardcode_libdir_flag_spec_CXX='-R$libdir' + hardcode_direct_CXX=yes + hardcode_shlibpath_var_CXX=no + fi + # Workaround some broken pre-1.5 toolchains + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' + ;; + + *nto* | *qnx*) + ld_shlibs_CXX=yes + ;; + + openbsd2*) + # C++ shared libraries are fairly broken + ld_shlibs_CXX=no + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + hardcode_direct_CXX=yes + hardcode_shlibpath_var_CXX=no + hardcode_direct_absolute_CXX=yes + archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' + export_dynamic_flag_spec_CXX='${wl}-E' + whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + fi + output_verbose_link_cmd=echo + else + ld_shlibs_CXX=no + fi + ;; + + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + hardcode_libdir_separator_CXX=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + case $host in + osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; + *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; + esac + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + cxx*) + case $host in + osf3*) + allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + ;; + *) + allow_undefined_flag_CXX=' -expect_unresolved \*' + archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~ + $RM $lib.exp' + hardcode_libdir_flag_spec_CXX='-rpath $libdir' + ;; + esac + + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' + case $host in + osf3*) + archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + *) + archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + esac + + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' + + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + + psos*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + lcc*) + # Lucid + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + solaris*) + case $cc_basename in + CC*) + # Sun C++ 4.2, 5.x and Centerline C++ + archive_cmds_need_lc_CXX=yes + no_undefined_flag_CXX=' -zdefs' + archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + hardcode_libdir_flag_spec_CXX='-R$libdir' + hardcode_shlibpath_var_CXX=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. + # Supported since Solaris 2.6 (maybe 2.5.1?) + whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract' + ;; + esac + link_all_deplibs_CXX=yes + + output_verbose_link_cmd='echo' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' + ;; + gcx*) + # Green Hills C++ Compiler + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + + # The C++ compiler must be used to create the archive. + old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + no_undefined_flag_CXX=' ${wl}-z ${wl}defs' + if $CC --version | $GREP -v '^2\.7' > /dev/null; then + archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' + else + # g++ 2.7 appears to require `-G' NOT `-shared' on this + # platform. + archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' + fi + + hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + ;; + esac + fi + ;; + esac + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag_CXX='${wl}-z,text' + archive_cmds_need_lc_CXX=no + hardcode_shlibpath_var_CXX=no + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag_CXX='${wl}-z,text' + allow_undefined_flag_CXX='${wl}-z,nodefs' + archive_cmds_need_lc_CXX=no + hardcode_shlibpath_var_CXX=no + hardcode_libdir_flag_spec_CXX='${wl}-R,$libdir' + hardcode_libdir_separator_CXX=':' + link_all_deplibs_CXX=yes + export_dynamic_flag_spec_CXX='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + vxworks*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 +$as_echo "$ld_shlibs_CXX" >&6; } + test "$ld_shlibs_CXX" = no && can_build_shared=no + + GCC_CXX="$GXX" + LD_CXX="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + # Dependencies to place before and after the object being linked: +predep_objects_CXX= +postdep_objects_CXX= +predeps_CXX= +postdeps_CXX= +compiler_lib_search_path_CXX= + +cat > conftest.$ac_ext <<_LT_EOF +class Foo +{ +public: + Foo (void) { a = 0; } +private: + int a; +}; +_LT_EOF + +if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + # Parse the compiler output and extract the necessary + # objects, libraries and library flags. + + # Sentinel used to keep track of whether or not we are before + # the conftest object file. + pre_test_object_deps_done=no + + for p in `eval "$output_verbose_link_cmd"`; do + case $p in + + -L* | -R* | -l*) + # Some compilers place space between "-{L,R}" and the path. + # Remove the space. + if test $p = "-L" || + test $p = "-R"; then + prev=$p + continue + else + prev= + fi + + if test "$pre_test_object_deps_done" = no; then + case $p in + -L* | -R*) + # Internal compiler library paths should come after those + # provided the user. The postdeps already come after the + # user supplied libs so there is no need to process them. + if test -z "$compiler_lib_search_path_CXX"; then + compiler_lib_search_path_CXX="${prev}${p}" + else + compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}" + fi + ;; + # The "-l" case would never come before the object being + # linked, so don't bother handling this case. + esac + else + if test -z "$postdeps_CXX"; then + postdeps_CXX="${prev}${p}" + else + postdeps_CXX="${postdeps_CXX} ${prev}${p}" + fi + fi + ;; + + *.$objext) + # This assumes that the test object file only shows up + # once in the compiler output. + if test "$p" = "conftest.$objext"; then + pre_test_object_deps_done=yes + continue + fi + + if test "$pre_test_object_deps_done" = no; then + if test -z "$predep_objects_CXX"; then + predep_objects_CXX="$p" + else + predep_objects_CXX="$predep_objects_CXX $p" + fi + else + if test -z "$postdep_objects_CXX"; then + postdep_objects_CXX="$p" + else + postdep_objects_CXX="$postdep_objects_CXX $p" + fi + fi + ;; + + *) ;; # Ignore the rest. + + esac + done + + # Clean up. + rm -f a.out a.exe +else + echo "libtool.m4: error: problem compiling CXX test program" +fi + +$RM -f confest.$objext + +# PORTME: override above test on systems where it is broken +case $host_os in +interix[3-9]*) + # Interix 3.5 installs completely hosed .la files for C++, so rather than + # hack all around it, let's just trust "g++" to DTRT. + predep_objects_CXX= + postdep_objects_CXX= + postdeps_CXX= + ;; + +linux*) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + if test "$solaris_use_stlport4" != yes; then + postdeps_CXX='-library=Cstd -library=Crun' + fi + ;; + esac + ;; + +solaris*) + case $cc_basename in + CC*) + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + # Adding this requires a known-good setup of shared libraries for + # Sun compiler versions before 5.6, else PIC objects from an old + # archive will be linked into the output, leading to subtle bugs. + if test "$solaris_use_stlport4" != yes; then + postdeps_CXX='-library=Cstd -library=Crun' + fi + ;; + esac + ;; +esac + + +case " $postdeps_CXX " in +*" -lc "*) archive_cmds_need_lc_CXX=no ;; +esac + compiler_lib_search_dirs_CXX= +if test -n "${compiler_lib_search_path_CXX}"; then + compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + lt_prog_compiler_wl_CXX= +lt_prog_compiler_pic_CXX= +lt_prog_compiler_static_CXX= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } + + # C++ specific cases for pic, static, wl, etc. + if test "$GXX" = yes; then + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_CXX='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic_CXX='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic_CXX='-DDLL_EXPORT' + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic_CXX='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + lt_prog_compiler_pic_CXX= + ;; + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic_CXX=-Kconform_pic + fi + ;; + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + ;; + *) + lt_prog_compiler_pic_CXX='-fPIC' + ;; + esac + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic_CXX='-fPIC -shared' + ;; + *) + lt_prog_compiler_pic_CXX='-fPIC' + ;; + esac + else + case $host_os in + aix[4-9]*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_CXX='-Bstatic' + else + lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68*) + # Green Hills C++ Compiler + # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" + ;; + esac + ;; + dgux*) + case $cc_basename in + ec++*) + lt_prog_compiler_pic_CXX='-KPIC' + ;; + ghcx*) + # Green Hills C++ Compiler + lt_prog_compiler_pic_CXX='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | dragonfly*) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' + if test "$host_cpu" != ia64; then + lt_prog_compiler_pic_CXX='+Z' + fi + ;; + aCC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic_CXX='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + interix*) + # This is c89, which is MS Visual C++ (no shared libs) + # Anyone wants to do a port? + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + KCC*) + # KAI C++ Compiler + lt_prog_compiler_wl_CXX='--backend -Wl,' + lt_prog_compiler_pic_CXX='-fPIC' + ;; + ecpc* ) + # old Intel C++ for x86_64 which still supported -KPIC. + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-static' + ;; + icpc* ) + # Intel C++, used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-fPIC' + lt_prog_compiler_static_CXX='-static' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-fpic' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + cxx*) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + lt_prog_compiler_pic_CXX= + lt_prog_compiler_static_CXX='-non_shared' + ;; + xlc* | xlC*) + # IBM XL 8.0 on PPC + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-qpic' + lt_prog_compiler_static_CXX='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + lt_prog_compiler_wl_CXX='-Qoption ld ' + ;; + esac + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx*) + lt_prog_compiler_pic_CXX='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd* | netbsdelf*-gnu) + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic_CXX='-fPIC -shared' + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + lt_prog_compiler_wl_CXX='--backend -Wl,' + ;; + RCC*) + # Rational C++ 2.4.1 + lt_prog_compiler_pic_CXX='-pic' + ;; + cxx*) + # Digital/Compaq C++ + lt_prog_compiler_wl_CXX='-Wl,' + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + lt_prog_compiler_pic_CXX= + lt_prog_compiler_static_CXX='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + solaris*) + case $cc_basename in + CC*) + # Sun C++ 4.2, 5.x and Centerline C++ + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + lt_prog_compiler_wl_CXX='-Qoption ld ' + ;; + gcx*) + # Green Hills C++ Compiler + lt_prog_compiler_pic_CXX='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + lt_prog_compiler_pic_CXX='-pic' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + lcc*) + # Lucid + lt_prog_compiler_pic_CXX='-pic' + ;; + *) + ;; + esac + ;; + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + lt_prog_compiler_pic_CXX='-KPIC' + ;; + *) + ;; + esac + ;; + vxworks*) + ;; + *) + lt_prog_compiler_can_build_shared_CXX=no + ;; + esac + fi + +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic_CXX= + ;; + *) + lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic_CXX" >&5 +$as_echo "$lt_prog_compiler_pic_CXX" >&6; } + + + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } +if test "${lt_cv_prog_compiler_pic_works_CXX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_works_CXX=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:13371: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:13375: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works_CXX=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; } + +if test x"$lt_cv_prog_compiler_pic_works_CXX" = xyes; then + case $lt_prog_compiler_pic_CXX in + "" | " "*) ;; + *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; + esac +else + lt_prog_compiler_pic_CXX= + lt_prog_compiler_can_build_shared_CXX=no +fi + +fi + + + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if test "${lt_cv_prog_compiler_static_works_CXX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_static_works_CXX=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works_CXX=yes + fi + else + lt_cv_prog_compiler_static_works_CXX=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; } + +if test x"$lt_cv_prog_compiler_static_works_CXX" = xyes; then + : +else + lt_prog_compiler_static_CXX= +fi + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o_CXX=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:13470: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:13474: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o_CXX=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o_CXX=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:13522: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:13526: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o_CXX=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } + + + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } + if test "$hard_links" = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + case $host_os in + aix[4-9]*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + export_symbols_cmds_CXX="$ltdll_cmds" + ;; + cygwin* | mingw* | cegcc*) + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;/^.*[ ]__nm__/s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' + ;; + linux* | k*bsd*-gnu) + link_all_deplibs_CXX=no + ;; + *) + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac + exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 +$as_echo "$ld_shlibs_CXX" >&6; } +test "$ld_shlibs_CXX" = no && can_build_shared=no + +with_gnu_ld_CXX=$with_gnu_ld + + + + + + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc_CXX" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc_CXX=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds_CXX in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl_CXX + pic_flag=$lt_prog_compiler_pic_CXX + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag_CXX + allow_undefined_flag_CXX= + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 + (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + then + archive_cmds_need_lc_CXX=no + else + archive_cmds_need_lc_CXX=yes + fi + allow_undefined_flag_CXX=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc_CXX" >&5 +$as_echo "$archive_cmds_need_lc_CXX" >&6; } + ;; + esac + fi + ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } + +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[4-9]*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[123]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +interix[3-9]*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # Some binutils ld are patched to set DT_RUNPATH + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\"" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : + shlibpath_overrides_runpath=yes +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } +hardcode_action_CXX= +if test -n "$hardcode_libdir_flag_spec_CXX" || + test -n "$runpath_var_CXX" || + test "X$hardcode_automatic_CXX" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$hardcode_direct_CXX" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" != no && + test "$hardcode_minus_L_CXX" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action_CXX=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action_CXX=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action_CXX=unsupported +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 +$as_echo "$hardcode_action_CXX" >&6; } + +if test "$hardcode_action_CXX" = relink || + test "$inherit_rpath_CXX" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + + fi # test -n "$compiler" + + CC=$lt_save_CC + LDCXX=$LD + LD=$lt_save_LD + GCC=$lt_save_GCC + with_gnu_ld=$lt_save_with_gnu_ld + lt_cv_path_LDCXX=$lt_cv_path_LD + lt_cv_path_LD=$lt_save_path_LD + lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld + lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld +fi # test "$_lt_caught_CXX_error" != yes + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + + + + + + + + + + + + ac_config_commands="$ac_config_commands libtool" + + + + +# Only expand once: + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +$as_echo_n "checking whether ln -s works... " >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +$as_echo "no, using $LN_S" >&6; } +fi + + +############### +### DocBook ### +############### +for ac_prog in openjade jade +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_JADE+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$JADE"; then + ac_cv_prog_JADE="$JADE" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_JADE="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +JADE=$ac_cv_prog_JADE +if test -n "$JADE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $JADE" >&5 +$as_echo "$JADE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$JADE" && break +done + +if test -n "$JADE"; then + for ac_prog in onsgmls nsgmls +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_NSGMLS+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NSGMLS"; then + ac_cv_prog_NSGMLS="$NSGMLS" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_NSGMLS="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +NSGMLS=$ac_cv_prog_NSGMLS +if test -n "$NSGMLS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NSGMLS" >&5 +$as_echo "$NSGMLS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$NSGMLS" && break +done + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for DocBook V4.1" >&5 +$as_echo_n "checking for DocBook V4.1... " >&6; } +if test "${pgac_cv_check_docbook+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat >conftest.sgml < + + test + + random + + testsect + text + + + +EOF + +${NSGMLS-false} -s conftest.sgml 1>&5 2>&1 +if test $? -eq 0; then + pgac_cv_check_docbook=yes +else + pgac_cv_check_docbook=no +fi +rm -f conftest.sgml +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_check_docbook" >&5 +$as_echo "$pgac_cv_check_docbook" >&6; } + +have_docbook=$pgac_cv_check_docbook + + + if test "$pgac_cv_check_docbook" = "yes"; then + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for DocBook stylesheets" >&5 +$as_echo_n "checking for DocBook stylesheets... " >&6; } + +# Check whether --with-docbook-stylesheets was given. +if test "${with_docbook_stylesheets+set}" = set; then : + withval=$with_docbook_stylesheets; muse_docbook_prefix="$withval" +fi + +if test "${pgac_cv_path_stylesheets+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + +if test -n "$muse_docbook_prefix"; then + if test -r "$muse_docbook_prefix/html/docbook.dsl" \ + && test -r "$muse_docbook_prefix/print/docbook.dsl"; then + pgac_cv_path_stylesheets="$muse_docbook_prefix" + fi +fi +if test -z "$pgac_cv_path_stylesheets"; then + if test -n "$DOCBOOKSTYLE"; then + if test -r "$DOCBOOKSTYLE/html/docbook.dsl" \ + && test -r "$DOCBOOKSTYLE/print/docbook.dsl"; then + pgac_cv_path_stylesheets="$DOCBOOKSTYLE" + fi + fi +fi +if test -z "$pgac_cv_path_stylesheets"; then + for pgac_prefix in /usr /usr/local /opt; do + for pgac_infix in share lib; do + for pgac_postfix in \ + sgml/stylesheets/nwalsh-modular \ + sgml/stylesheets/docbook \ + sgml/docbook/dsssl/modular \ + sgml/docbook/stylesheet/dsssl/modular + do + pgac_candidate=$pgac_prefix/$pgac_infix/$pgac_postfix + if test -r "$pgac_candidate/html/docbook.dsl" \ + && test -r "$pgac_candidate/print/docbook.dsl" + then + pgac_cv_path_stylesheets=$pgac_candidate + break 3 + fi + done + done + done +fi + +fi + +DOCBOOKSTYLE=$pgac_cv_path_stylesheets + +if test -n "$DOCBOOKSTYLE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DOCBOOKSTYLE" >&5 +$as_echo "$DOCBOOKSTYLE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + if test -n "$DOCBOOKSTYLE"; then + DOCBOOKTARGETS="book1.html" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: DocBook stylesheets not found or not usable - documentation will not be built" >&5 +$as_echo "$as_me: WARNING: DocBook stylesheets not found or not usable - documentation will not be built" >&2;} + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: DocBook 4.1 DTD not found or not usable - documentation will not be built" >&5 +$as_echo "$as_me: WARNING: DocBook 4.1 DTD not found or not usable - documentation will not be built" >&2;} + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: jade not found - documentation will not be built" >&5 +$as_echo "$as_me: WARNING: jade not found - documentation will not be built" >&2;} +fi + + +############### +### doxygen ### +############### + +# Extract the first word of "doxygen", so it can be a program name with args. +set dummy doxygen; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_DOXYGEN+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $DOXYGEN in + [\\/]* | ?:[\\/]*) + ac_cv_path_DOXYGEN="$DOXYGEN" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_DOXYGEN="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_DOXYGEN" && ac_cv_path_DOXYGEN="no" + ;; +esac +fi +DOXYGEN=$ac_cv_path_DOXYGEN +if test -n "$DOXYGEN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DOXYGEN" >&5 +$as_echo "$DOXYGEN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + +################ +### graphviz ### +################ + +# Extract the first word of "dot", so it can be a program name with args. +set dummy dot; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_DOT+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $DOT in + [\\/]* | ?:[\\/]*) + ac_cv_path_DOT="$DOT" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_DOT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_DOT" && ac_cv_path_DOT="no" + ;; +esac +fi +DOT=$ac_cv_path_DOT +if test -n "$DOT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DOT" >&5 +$as_echo "$DOT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +if test "$DOT" != "no"; then + HAVEDOT=YES + DOTPATH=$( dirname "$DOT" ) +else + HAVEDOT=NO +fi + + + +############ +### perl ### +############ + +# Extract the first word of "perl", so it can be a program name with args. +set dummy perl; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_PERL+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $PERL in + [\\/]* | ?:[\\/]*) + ac_cv_path_PERL="$PERL" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_PERL" && ac_cv_path_PERL="no" + ;; +esac +fi +PERL=$ac_cv_path_PERL +if test -n "$PERL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5 +$as_echo "$PERL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +if test "$PERL" == "no"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: you don't have perl installed! wierdo! (and doxygen might not like this)" >&5 +$as_echo "$as_me: WARNING: you don't have perl installed! wierdo! (and doxygen might not like this)" >&2;} +fi + + +######### +### X ### +######### +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for X" >&5 +$as_echo_n "checking for X... " >&6; } + + +# Check whether --with-x was given. +if test "${with_x+set}" = set; then : + withval=$with_x; +fi + +# $have_x is `yes', `no', `disabled', or empty when we do not yet know. +if test "x$with_x" = xno; then + # The user explicitly disabled X. + have_x=disabled +else + case $x_includes,$x_libraries in #( + *\'*) as_fn_error "cannot use X directory names containing '" "$LINENO" 5;; #( + *,NONE | NONE,*) if test "${ac_cv_have_x+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + # One or both of the vars are not set, and there is no cached value. +ac_x_includes=no ac_x_libraries=no +rm -f -r conftest.dir +if mkdir conftest.dir; then + cd conftest.dir + cat >Imakefile <<'_ACEOF' +incroot: + @echo incroot='${INCROOT}' +usrlibdir: + @echo usrlibdir='${USRLIBDIR}' +libdir: + @echo libdir='${LIBDIR}' +_ACEOF + if (export CC; ${XMKMF-xmkmf}) >/dev/null 2>/dev/null && test -f Makefile; then + # GNU make sometimes prints "make[1]: Entering...", which would confuse us. + for ac_var in incroot usrlibdir libdir; do + eval "ac_im_$ac_var=\`\${MAKE-make} $ac_var 2>/dev/null | sed -n 's/^$ac_var=//p'\`" + done + # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR. + for ac_extension in a so sl dylib la dll; do + if test ! -f "$ac_im_usrlibdir/libX11.$ac_extension" && + test -f "$ac_im_libdir/libX11.$ac_extension"; then + ac_im_usrlibdir=$ac_im_libdir; break + fi + done + # Screen out bogus values from the imake configuration. They are + # bogus both because they are the default anyway, and because + # using them would break gcc on systems where it needs fixed includes. + case $ac_im_incroot in + /usr/include) ac_x_includes= ;; + *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;; + esac + case $ac_im_usrlibdir in + /usr/lib | /usr/lib64 | /lib | /lib64) ;; + *) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;; + esac + fi + cd .. + rm -f -r conftest.dir +fi + +# Standard set of common directories for X headers. +# Check X11 before X11Rn because it is often a symlink to the current release. +ac_x_header_dirs=' +/usr/X11/include +/usr/X11R7/include +/usr/X11R6/include +/usr/X11R5/include +/usr/X11R4/include + +/usr/include/X11 +/usr/include/X11R7 +/usr/include/X11R6 +/usr/include/X11R5 +/usr/include/X11R4 + +/usr/local/X11/include +/usr/local/X11R7/include +/usr/local/X11R6/include +/usr/local/X11R5/include +/usr/local/X11R4/include + +/usr/local/include/X11 +/usr/local/include/X11R7 +/usr/local/include/X11R6 +/usr/local/include/X11R5 +/usr/local/include/X11R4 + +/usr/X386/include +/usr/x386/include +/usr/XFree86/include/X11 + +/usr/include +/usr/local/include +/usr/unsupported/include +/usr/athena/include +/usr/local/x11r5/include +/usr/lpp/Xamples/include + +/usr/openwin/include +/usr/openwin/share/include' + +if test "$ac_x_includes" = no; then + # Guess where to find include files, by looking for Xlib.h. + # First, try using that file with no special directory specified. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # We can compile using X headers with no special include directory. +ac_x_includes= +else + for ac_dir in $ac_x_header_dirs; do + if test -r "$ac_dir/X11/Xlib.h"; then + ac_x_includes=$ac_dir + break + fi +done +fi +rm -f conftest.err conftest.$ac_ext +fi # $ac_x_includes = no + +if test "$ac_x_libraries" = no; then + # Check for the libraries. + # See if we find them without any special options. + # Don't add to $LIBS permanently. + ac_save_LIBS=$LIBS + LIBS="-lX11 $LIBS" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +XrmInitialize () + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + LIBS=$ac_save_LIBS +# We can link X programs with no special library path. +ac_x_libraries= +else + LIBS=$ac_save_LIBS +for ac_dir in `$as_echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g` +do + # Don't even attempt the hair of trying to link an X program! + for ac_extension in a so sl dylib la dll; do + if test -r "$ac_dir/libX11.$ac_extension"; then + ac_x_libraries=$ac_dir + break 2 + fi + done +done +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi # $ac_x_libraries = no + +case $ac_x_includes,$ac_x_libraries in #( + no,* | *,no | *\'*) + # Didn't find X, or a directory has "'" in its name. + ac_cv_have_x="have_x=no";; #( + *) + # Record where we found X for the cache. + ac_cv_have_x="have_x=yes\ + ac_x_includes='$ac_x_includes'\ + ac_x_libraries='$ac_x_libraries'" +esac +fi +;; #( + *) have_x=yes;; + esac + eval "$ac_cv_have_x" +fi # $with_x != no + +if test "$have_x" != yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_x" >&5 +$as_echo "$have_x" >&6; } + no_x=yes +else + # If each of the values was on the command line, it overrides each guess. + test "x$x_includes" = xNONE && x_includes=$ac_x_includes + test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries + # Update the cache value to reflect the command line values. + ac_cv_have_x="have_x=yes\ + ac_x_includes='$x_includes'\ + ac_x_libraries='$x_libraries'" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: libraries $x_libraries, headers $x_includes" >&5 +$as_echo "libraries $x_libraries, headers $x_includes" >&6; } +fi + +if test "$no_x" = yes; then + # Not all programs may use this symbol, but it does not hurt to define it. + +$as_echo "#define X_DISPLAY_MISSING 1" >>confdefs.h + + X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS= +else + if test -n "$x_includes"; then + X_CFLAGS="$X_CFLAGS -I$x_includes" + fi + + # It would also be nice to do this for all -L options, not just this one. + if test -n "$x_libraries"; then + X_LIBS="$X_LIBS -L$x_libraries" + # For Solaris; some versions of Sun CC require a space after -R and + # others require no space. Words are not sufficient . . . . + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -R must be followed by a space" >&5 +$as_echo_n "checking whether -R must be followed by a space... " >&6; } + ac_xsave_LIBS=$LIBS; LIBS="$LIBS -R$x_libraries" + ac_xsave_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + X_LIBS="$X_LIBS -R$x_libraries" +else + LIBS="$ac_xsave_LIBS -R $x_libraries" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + X_LIBS="$X_LIBS -R $x_libraries" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: neither works" >&5 +$as_echo "neither works" >&6; } +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + ac_c_werror_flag=$ac_xsave_c_werror_flag + LIBS=$ac_xsave_LIBS + fi + + # Check for system-dependent libraries X programs must link with. + # Do this before checking for the system-independent R6 libraries + # (-lICE), since we may need -lsocket or whatever for X linking. + + if test "$ISC" = yes; then + X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet" + else + # Martyn Johnson says this is needed for Ultrix, if the X + # libraries were built with DECnet support. And Karl Berry says + # the Alpha needs dnet_stub (dnet does not exist). + ac_xsave_LIBS="$LIBS"; LIBS="$LIBS $X_LIBS -lX11" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char XOpenDisplay (); +int +main () +{ +return XOpenDisplay (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet" >&5 +$as_echo_n "checking for dnet_ntoa in -ldnet... " >&6; } +if test "${ac_cv_lib_dnet_dnet_ntoa+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldnet $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dnet_ntoa (); +int +main () +{ +return dnet_ntoa (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dnet_dnet_ntoa=yes +else + ac_cv_lib_dnet_dnet_ntoa=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_dnet_ntoa" >&5 +$as_echo "$ac_cv_lib_dnet_dnet_ntoa" >&6; } +if test "x$ac_cv_lib_dnet_dnet_ntoa" = x""yes; then : + X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet" +fi + + if test $ac_cv_lib_dnet_dnet_ntoa = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet_stub" >&5 +$as_echo_n "checking for dnet_ntoa in -ldnet_stub... " >&6; } +if test "${ac_cv_lib_dnet_stub_dnet_ntoa+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldnet_stub $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dnet_ntoa (); +int +main () +{ +return dnet_ntoa (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dnet_stub_dnet_ntoa=yes +else + ac_cv_lib_dnet_stub_dnet_ntoa=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5 +$as_echo "$ac_cv_lib_dnet_stub_dnet_ntoa" >&6; } +if test "x$ac_cv_lib_dnet_stub_dnet_ntoa" = x""yes; then : + X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub" +fi + + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LIBS="$ac_xsave_LIBS" + + # msh@cis.ufl.edu says -lnsl (and -lsocket) are needed for his 386/AT, + # to get the SysV transport functions. + # Chad R. Larson says the Pyramis MIS-ES running DC/OSx (SVR4) + # needs -lnsl. + # The nsl library prevents programs from opening the X display + # on Irix 5.2, according to T.E. Dickey. + # The functions gethostbyname, getservbyname, and inet_addr are + # in -lbsd on LynxOS 3.0.1/i386, according to Lars Hecking. + ac_fn_c_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname" +if test "x$ac_cv_func_gethostbyname" = x""yes; then : + +fi + + if test $ac_cv_func_gethostbyname = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl" >&5 +$as_echo_n "checking for gethostbyname in -lnsl... " >&6; } +if test "${ac_cv_lib_nsl_gethostbyname+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lnsl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char gethostbyname (); +int +main () +{ +return gethostbyname (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_nsl_gethostbyname=yes +else + ac_cv_lib_nsl_gethostbyname=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostbyname" >&5 +$as_echo "$ac_cv_lib_nsl_gethostbyname" >&6; } +if test "x$ac_cv_lib_nsl_gethostbyname" = x""yes; then : + X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl" +fi + + if test $ac_cv_lib_nsl_gethostbyname = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lbsd" >&5 +$as_echo_n "checking for gethostbyname in -lbsd... " >&6; } +if test "${ac_cv_lib_bsd_gethostbyname+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lbsd $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char gethostbyname (); +int +main () +{ +return gethostbyname (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_bsd_gethostbyname=yes +else + ac_cv_lib_bsd_gethostbyname=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bsd_gethostbyname" >&5 +$as_echo "$ac_cv_lib_bsd_gethostbyname" >&6; } +if test "x$ac_cv_lib_bsd_gethostbyname" = x""yes; then : + X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd" +fi + + fi + fi + + # lieder@skyler.mavd.honeywell.com says without -lsocket, + # socket/setsockopt and other routines are undefined under SCO ODT + # 2.0. But -lsocket is broken on IRIX 5.2 (and is not necessary + # on later versions), says Simon Leinen: it contains gethostby* + # variants that don't use the name server (or something). -lsocket + # must be given before -lnsl if both are needed. We assume that + # if connect needs -lnsl, so does gethostbyname. + ac_fn_c_check_func "$LINENO" "connect" "ac_cv_func_connect" +if test "x$ac_cv_func_connect" = x""yes; then : + +fi + + if test $ac_cv_func_connect = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for connect in -lsocket" >&5 +$as_echo_n "checking for connect in -lsocket... " >&6; } +if test "${ac_cv_lib_socket_connect+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsocket $X_EXTRA_LIBS $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char connect (); +int +main () +{ +return connect (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_socket_connect=yes +else + ac_cv_lib_socket_connect=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_connect" >&5 +$as_echo "$ac_cv_lib_socket_connect" >&6; } +if test "x$ac_cv_lib_socket_connect" = x""yes; then : + X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS" +fi + + fi + + # Guillermo Gomez says -lposix is necessary on A/UX. + ac_fn_c_check_func "$LINENO" "remove" "ac_cv_func_remove" +if test "x$ac_cv_func_remove" = x""yes; then : + +fi + + if test $ac_cv_func_remove = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for remove in -lposix" >&5 +$as_echo_n "checking for remove in -lposix... " >&6; } +if test "${ac_cv_lib_posix_remove+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lposix $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char remove (); +int +main () +{ +return remove (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_posix_remove=yes +else + ac_cv_lib_posix_remove=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_posix_remove" >&5 +$as_echo "$ac_cv_lib_posix_remove" >&6; } +if test "x$ac_cv_lib_posix_remove" = x""yes; then : + X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix" +fi + + fi + + # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay. + ac_fn_c_check_func "$LINENO" "shmat" "ac_cv_func_shmat" +if test "x$ac_cv_func_shmat" = x""yes; then : + +fi + + if test $ac_cv_func_shmat = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shmat in -lipc" >&5 +$as_echo_n "checking for shmat in -lipc... " >&6; } +if test "${ac_cv_lib_ipc_shmat+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lipc $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shmat (); +int +main () +{ +return shmat (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_ipc_shmat=yes +else + ac_cv_lib_ipc_shmat=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ipc_shmat" >&5 +$as_echo "$ac_cv_lib_ipc_shmat" >&6; } +if test "x$ac_cv_lib_ipc_shmat" = x""yes; then : + X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc" +fi + + fi + fi + + # Check for libraries that X11R6 Xt/Xaw programs need. + ac_save_LDFLAGS=$LDFLAGS + test -n "$x_libraries" && LDFLAGS="$LDFLAGS -L$x_libraries" + # SM needs ICE to (dynamically) link under SunOS 4.x (so we have to + # check for ICE first), but we must link in the order -lSM -lICE or + # we get undefined symbols. So assume we have SM if we have ICE. + # These have to be linked with before -lX11, unlike the other + # libraries we check for below, so use a different variable. + # John Interrante, Karl Berry + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for IceConnectionNumber in -lICE" >&5 +$as_echo_n "checking for IceConnectionNumber in -lICE... " >&6; } +if test "${ac_cv_lib_ICE_IceConnectionNumber+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lICE $X_EXTRA_LIBS $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char IceConnectionNumber (); +int +main () +{ +return IceConnectionNumber (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_ICE_IceConnectionNumber=yes +else + ac_cv_lib_ICE_IceConnectionNumber=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5 +$as_echo "$ac_cv_lib_ICE_IceConnectionNumber" >&6; } +if test "x$ac_cv_lib_ICE_IceConnectionNumber" = x""yes; then : + X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE" +fi + + LDFLAGS=$ac_save_LDFLAGS + +fi + +if test "$X_DISPLAY_MISSING" != ""; then + as_fn_error "X required" "$LINENO" 5 +fi + + + +########## +### QT ### +########## +#CONFIGURE_QT(3.2.0, , AC_MSG_ERROR([need qt >= 3.2.0])) +#if test "$muse_qttest" = "yes"; then +# AC_LANG_PUSH([C++]) +# muse_save_CFLAGS="$CFLAGS" +# CFLAGS="$CFLAGS $QT_CFLAGS" +# muse_save_CXXFLAGS="$CXXFLAGS" +# CXXFLAGS="$CXXFLAGS $QT_CFLAGS" +# muse_save_LDFLAGS="$LDFLAGS" +# LDFLAGS="$LDFLAGS $QT_LIBS" +# AC_CHECK_LIB(qt-mt, qt_selection_property, [ +# true +# ],[ +# AC_MSG_ERROR([ +# +# MusE requires thread enabled QT (qt-mt) >= 3.2.0 +# +# You can either compile your own version of QT (making sure you enable +# threading!) or install the appropriate package for your distribution. +#]) +# ]) +# CFLAGS="$muse_save_CFLAGS" +# CXXFLAGS="$muse_save_CXXFLAGS" +# LDFLAGS="$muse_save_LDFLAGS" +# unset muse_save_CFLAGS +# unset muse_save_CXXFLAGS +# unset muse_save_LDFLAGS +# AC_LANG_POP([C++]) +#fi + +QTDIR=/usr/share/qt4 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $QTDIR" >&5 +$as_echo "$QTDIR" >&6; } +if test "$no_x" = yes; then + # Not all programs may use this symbol, but it does not hurt to define it. + +$as_echo "#define X_DISPLAY_MISSING 1" >>confdefs.h + + X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS= +else + if test -n "$x_includes"; then + X_CFLAGS="$X_CFLAGS -I$x_includes" + fi + + # It would also be nice to do this for all -L options, not just this one. + if test -n "$x_libraries"; then + X_LIBS="$X_LIBS -L$x_libraries" + # For Solaris; some versions of Sun CC require a space after -R and + # others require no space. Words are not sufficient . . . . + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -R must be followed by a space" >&5 +$as_echo_n "checking whether -R must be followed by a space... " >&6; } + ac_xsave_LIBS=$LIBS; LIBS="$LIBS -R$x_libraries" + ac_xsave_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + X_LIBS="$X_LIBS -R$x_libraries" +else + LIBS="$ac_xsave_LIBS -R $x_libraries" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + X_LIBS="$X_LIBS -R $x_libraries" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: neither works" >&5 +$as_echo "neither works" >&6; } +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + ac_c_werror_flag=$ac_xsave_c_werror_flag + LIBS=$ac_xsave_LIBS + fi + + # Check for system-dependent libraries X programs must link with. + # Do this before checking for the system-independent R6 libraries + # (-lICE), since we may need -lsocket or whatever for X linking. + + if test "$ISC" = yes; then + X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet" + else + # Martyn Johnson says this is needed for Ultrix, if the X + # libraries were built with DECnet support. And Karl Berry says + # the Alpha needs dnet_stub (dnet does not exist). + ac_xsave_LIBS="$LIBS"; LIBS="$LIBS $X_LIBS -lX11" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char XOpenDisplay (); +int +main () +{ +return XOpenDisplay (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet" >&5 +$as_echo_n "checking for dnet_ntoa in -ldnet... " >&6; } +if test "${ac_cv_lib_dnet_dnet_ntoa+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldnet $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dnet_ntoa (); +int +main () +{ +return dnet_ntoa (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dnet_dnet_ntoa=yes +else + ac_cv_lib_dnet_dnet_ntoa=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_dnet_ntoa" >&5 +$as_echo "$ac_cv_lib_dnet_dnet_ntoa" >&6; } +if test "x$ac_cv_lib_dnet_dnet_ntoa" = x""yes; then : + X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet" +fi + + if test $ac_cv_lib_dnet_dnet_ntoa = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet_stub" >&5 +$as_echo_n "checking for dnet_ntoa in -ldnet_stub... " >&6; } +if test "${ac_cv_lib_dnet_stub_dnet_ntoa+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldnet_stub $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dnet_ntoa (); +int +main () +{ +return dnet_ntoa (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dnet_stub_dnet_ntoa=yes +else + ac_cv_lib_dnet_stub_dnet_ntoa=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5 +$as_echo "$ac_cv_lib_dnet_stub_dnet_ntoa" >&6; } +if test "x$ac_cv_lib_dnet_stub_dnet_ntoa" = x""yes; then : + X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub" +fi + + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LIBS="$ac_xsave_LIBS" + + # msh@cis.ufl.edu says -lnsl (and -lsocket) are needed for his 386/AT, + # to get the SysV transport functions. + # Chad R. Larson says the Pyramis MIS-ES running DC/OSx (SVR4) + # needs -lnsl. + # The nsl library prevents programs from opening the X display + # on Irix 5.2, according to T.E. Dickey. + # The functions gethostbyname, getservbyname, and inet_addr are + # in -lbsd on LynxOS 3.0.1/i386, according to Lars Hecking. + ac_fn_c_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname" +if test "x$ac_cv_func_gethostbyname" = x""yes; then : + +fi + + if test $ac_cv_func_gethostbyname = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl" >&5 +$as_echo_n "checking for gethostbyname in -lnsl... " >&6; } +if test "${ac_cv_lib_nsl_gethostbyname+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lnsl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char gethostbyname (); +int +main () +{ +return gethostbyname (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_nsl_gethostbyname=yes +else + ac_cv_lib_nsl_gethostbyname=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostbyname" >&5 +$as_echo "$ac_cv_lib_nsl_gethostbyname" >&6; } +if test "x$ac_cv_lib_nsl_gethostbyname" = x""yes; then : + X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl" +fi + + if test $ac_cv_lib_nsl_gethostbyname = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lbsd" >&5 +$as_echo_n "checking for gethostbyname in -lbsd... " >&6; } +if test "${ac_cv_lib_bsd_gethostbyname+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lbsd $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char gethostbyname (); +int +main () +{ +return gethostbyname (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_bsd_gethostbyname=yes +else + ac_cv_lib_bsd_gethostbyname=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bsd_gethostbyname" >&5 +$as_echo "$ac_cv_lib_bsd_gethostbyname" >&6; } +if test "x$ac_cv_lib_bsd_gethostbyname" = x""yes; then : + X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd" +fi + + fi + fi + + # lieder@skyler.mavd.honeywell.com says without -lsocket, + # socket/setsockopt and other routines are undefined under SCO ODT + # 2.0. But -lsocket is broken on IRIX 5.2 (and is not necessary + # on later versions), says Simon Leinen: it contains gethostby* + # variants that don't use the name server (or something). -lsocket + # must be given before -lnsl if both are needed. We assume that + # if connect needs -lnsl, so does gethostbyname. + ac_fn_c_check_func "$LINENO" "connect" "ac_cv_func_connect" +if test "x$ac_cv_func_connect" = x""yes; then : + +fi + + if test $ac_cv_func_connect = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for connect in -lsocket" >&5 +$as_echo_n "checking for connect in -lsocket... " >&6; } +if test "${ac_cv_lib_socket_connect+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsocket $X_EXTRA_LIBS $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char connect (); +int +main () +{ +return connect (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_socket_connect=yes +else + ac_cv_lib_socket_connect=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_connect" >&5 +$as_echo "$ac_cv_lib_socket_connect" >&6; } +if test "x$ac_cv_lib_socket_connect" = x""yes; then : + X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS" +fi + + fi + + # Guillermo Gomez says -lposix is necessary on A/UX. + ac_fn_c_check_func "$LINENO" "remove" "ac_cv_func_remove" +if test "x$ac_cv_func_remove" = x""yes; then : + +fi + + if test $ac_cv_func_remove = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for remove in -lposix" >&5 +$as_echo_n "checking for remove in -lposix... " >&6; } +if test "${ac_cv_lib_posix_remove+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lposix $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char remove (); +int +main () +{ +return remove (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_posix_remove=yes +else + ac_cv_lib_posix_remove=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_posix_remove" >&5 +$as_echo "$ac_cv_lib_posix_remove" >&6; } +if test "x$ac_cv_lib_posix_remove" = x""yes; then : + X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix" +fi + + fi + + # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay. + ac_fn_c_check_func "$LINENO" "shmat" "ac_cv_func_shmat" +if test "x$ac_cv_func_shmat" = x""yes; then : + +fi + + if test $ac_cv_func_shmat = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shmat in -lipc" >&5 +$as_echo_n "checking for shmat in -lipc... " >&6; } +if test "${ac_cv_lib_ipc_shmat+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lipc $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shmat (); +int +main () +{ +return shmat (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_ipc_shmat=yes +else + ac_cv_lib_ipc_shmat=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ipc_shmat" >&5 +$as_echo "$ac_cv_lib_ipc_shmat" >&6; } +if test "x$ac_cv_lib_ipc_shmat" = x""yes; then : + X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc" +fi + + fi + fi + + # Check for libraries that X11R6 Xt/Xaw programs need. + ac_save_LDFLAGS=$LDFLAGS + test -n "$x_libraries" && LDFLAGS="$LDFLAGS -L$x_libraries" + # SM needs ICE to (dynamically) link under SunOS 4.x (so we have to + # check for ICE first), but we must link in the order -lSM -lICE or + # we get undefined symbols. So assume we have SM if we have ICE. + # These have to be linked with before -lX11, unlike the other + # libraries we check for below, so use a different variable. + # John Interrante, Karl Berry + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for IceConnectionNumber in -lICE" >&5 +$as_echo_n "checking for IceConnectionNumber in -lICE... " >&6; } +if test "${ac_cv_lib_ICE_IceConnectionNumber+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lICE $X_EXTRA_LIBS $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char IceConnectionNumber (); +int +main () +{ +return IceConnectionNumber (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_ICE_IceConnectionNumber=yes +else + ac_cv_lib_ICE_IceConnectionNumber=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5 +$as_echo "$ac_cv_lib_ICE_IceConnectionNumber" >&6; } +if test "x$ac_cv_lib_ICE_IceConnectionNumber" = x""yes; then : + X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE" +fi + + LDFLAGS=$ac_save_LDFLAGS + +fi + +QT_LIBS="-Wl,-rpath,$QTDIR/lib -L$QTDIR/lib -lQtGui -lQtOpenGL -lQtCore -lQt3Support $X_LIBS -lX11 -lXext -lXmu -lXt -lXi $X_EXTRA_LIBS -lGLU -lGL -lpthread" +QTDIR_INC="-I$QTDIR/include -I$QTDIR/include/QtGui -I$QTDIR/include/QtCore -I$QTDIR/include/Qt3Support $X_CFLAGS -DQT_OPENGL_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED" +QTDIR_BIN="$QTDIR/bin" + + +############ +### ALSA ### +############ +alsa_save_CFLAGS="$CFLAGS" +alsa_save_LDFLAGS="$LDFLAGS" +alsa_save_LIBS="$LIBS" +alsa_found=yes + + +# Check whether --with-alsa-prefix was given. +if test "${with_alsa_prefix+set}" = set; then : + withval=$with_alsa_prefix; alsa_prefix="$withval" +else + alsa_prefix="" +fi + + + +# Check whether --with-alsa-inc-prefix was given. +if test "${with_alsa_inc_prefix+set}" = set; then : + withval=$with_alsa_inc_prefix; alsa_inc_prefix="$withval" +else + alsa_inc_prefix="" +fi + + +# Check whether --enable-alsatest was given. +if test "${enable_alsatest+set}" = set; then : + enableval=$enable_alsatest; enable_alsatest=no +else + enable_alsatest=yes +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ALSA CFLAGS" >&5 +$as_echo_n "checking for ALSA CFLAGS... " >&6; } +if test "$alsa_inc_prefix" != "" ; then + ALSA_CFLAGS="$ALSA_CFLAGS -I$alsa_inc_prefix" + CFLAGS="$CFLAGS -I$alsa_inc_prefix" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ALSA_CFLAGS" >&5 +$as_echo "$ALSA_CFLAGS" >&6; } + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ALSA LDFLAGS" >&5 +$as_echo_n "checking for ALSA LDFLAGS... " >&6; } +if test "$alsa_prefix" != "" ; then + ALSA_LIBS="$ALSA_LIBS -L$alsa_prefix" + LDFLAGS="$LDFLAGS $ALSA_LIBS" +fi + +ALSA_LIBS="$ALSA_LIBS -lasound -lm -ldl" +LIBS=`echo $LIBS | sed 's/-lm//'` +LIBS=`echo $LIBS | sed 's/-ldl//'` +LIBS=`echo $LIBS | sed 's/ //'` +LIBS="$ALSA_LIBS $LIBS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ALSA_LIBS" >&5 +$as_echo "$ALSA_LIBS" >&6; } + +min_alsa_version=0.9.0 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for libasound headers version >= $min_alsa_version" >&5 +$as_echo_n "checking for libasound headers version >= $min_alsa_version... " >&6; } +no_alsa="" + alsa_min_major_version=`echo $min_alsa_version | \ + sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'` + alsa_min_minor_version=`echo $min_alsa_version | \ + sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'` + alsa_min_micro_version=`echo $min_alsa_version | \ + sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'` + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include + +int +main () +{ + +void main(void) +{ +/* ensure backward compatibility */ +#if !defined(SND_LIB_MAJOR) && defined(SOUNDLIB_VERSION_MAJOR) +#define SND_LIB_MAJOR SOUNDLIB_VERSION_MAJOR +#endif +#if !defined(SND_LIB_MINOR) && defined(SOUNDLIB_VERSION_MINOR) +#define SND_LIB_MINOR SOUNDLIB_VERSION_MINOR +#endif +#if !defined(SND_LIB_SUBMINOR) && defined(SOUNDLIB_VERSION_SUBMINOR) +#define SND_LIB_SUBMINOR SOUNDLIB_VERSION_SUBMINOR +#endif + +# if(SND_LIB_MAJOR > $alsa_min_major_version) + exit(0); +# else +# if(SND_LIB_MAJOR < $alsa_min_major_version) +# error not present +# endif + +# if(SND_LIB_MINOR > $alsa_min_minor_version) + exit(0); +# else +# if(SND_LIB_MINOR < $alsa_min_minor_version) +# error not present +# endif + +# if(SND_LIB_SUBMINOR < $alsa_min_micro_version) +# error not present +# endif +# endif +# endif +exit(0); +} + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: found." >&5 +$as_echo "found." >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not present." >&5 +$as_echo "not present." >&6; } + + alsa_found=no + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for snd_seq_create_event in -lasound" >&5 +$as_echo_n "checking for snd_seq_create_event in -lasound... " >&6; } +if test "${ac_cv_lib_asound_snd_seq_create_event+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lasound $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char snd_seq_create_event (); +int +main () +{ +return snd_seq_create_event (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ac_cv_lib_asound_snd_seq_create_event=yes +else + ac_cv_lib_asound_snd_seq_create_event=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_asound_snd_seq_create_event" >&5 +$as_echo "$ac_cv_lib_asound_snd_seq_create_event" >&6; } +if test "x$ac_cv_lib_asound_snd_seq_create_event" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBASOUND 1 +_ACEOF + + LIBS="-lasound $LIBS" + +else + + alsa_found=no + +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +if test "x$alsa_found" = "xyes" ; then + true + LIBS=`echo $LIBS | sed 's/-lasound//g'` + LIBS=`echo $LIBS | sed 's/ //'` + LIBS="-lasound $LIBS" +fi +if test "x$alsa_found" = "xno" ; then + as_fn_error "latest alsa (0.9.x) is required" "$LINENO" 5 + + CFLAGS="$alsa_save_CFLAGS" + LDFLAGS="$alsa_save_LDFLAGS" + LIBS="$alsa_save_LIBS" + ALSA_CFLAGS="" + ALSA_LIBS="" +fi + + + + + +################# +### fluidsynth ### +################# +LIBFLUIDSYNTH= +muse_enable_fluidlib="yes" +synth_fluidsynth="fluidsynth" +synth_fluid="fluid" +# Check whether --enable-fluidsynth was given. +if test "${enable_fluidsynth+set}" = set; then : + enableval=$enable_fluidsynth; + case "$enableval" in + "yes") + synth_fluidsynth="fluidsynth" + synth_fluid="fluid" + ;; + "no") + muse_enable_fluidlib="no" + synth_fluidsynth="" + synth_fluid="" + ;; + *) + as_fn_error "must use --enable-fluidsynth(=yes/no) or --disable-fluidsynth" "$LINENO" 5 + ;; + esac + +fi + + + if test "$muse_enable_fluidlib" = "yes"; then + ENABLEFLUIDSYNTH_TRUE= + ENABLEFLUIDSYNTH_FALSE='#' +else + ENABLEFLUIDSYNTH_TRUE='#' + ENABLEFLUIDSYNTH_FALSE= +fi + + + +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_PKG_CONFIG+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PKG_CONFIG=$ac_cv_path_PKG_CONFIG +if test -n "$PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 +$as_echo "$PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_PKG_CONFIG"; then + ac_pt_PKG_CONFIG=$PKG_CONFIG + # Extract the first word of "pkg-config", so it can be a program name with args. +set dummy pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG +if test -n "$ac_pt_PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 +$as_echo "$ac_pt_PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_PKG_CONFIG" = x; then + PKG_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + PKG_CONFIG=$ac_pt_PKG_CONFIG + fi +else + PKG_CONFIG="$ac_cv_path_PKG_CONFIG" +fi + +fi +if test -n "$PKG_CONFIG"; then + _pkg_min_version=0.9.0 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 +$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + PKG_CONFIG="" + fi + +fi + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fluidsynth" >&5 +$as_echo_n "checking for Fluidsynth... " >&6; } + +if test -n "$PKG_CONFIG"; then + if test -n "$Fluidsynth_CFLAGS"; then + pkg_cv_Fluidsynth_CFLAGS="$Fluidsynth_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"fluidsynth\""; } >&5 + ($PKG_CONFIG --exists --print-errors "fluidsynth") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_Fluidsynth_CFLAGS=`$PKG_CONFIG --cflags "fluidsynth" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi +if test -n "$PKG_CONFIG"; then + if test -n "$Fluidsynth_LIBS"; then + pkg_cv_Fluidsynth_LIBS="$Fluidsynth_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"fluidsynth\""; } >&5 + ($PKG_CONFIG --exists --print-errors "fluidsynth") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_Fluidsynth_LIBS=`$PKG_CONFIG --libs "fluidsynth" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + Fluidsynth_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "fluidsynth"` + else + Fluidsynth_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "fluidsynth"` + fi + # Put the nasty error message in config.log where it belongs + echo "$Fluidsynth_PKG_ERRORS" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: libfluidsynth not found; disabling fluidsynth plugins" >&5 +$as_echo "$as_me: WARNING: libfluidsynth not found; disabling fluidsynth plugins" >&2;} ; + muse_enable_fluidlib="no" + +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: libfluidsynth not found; disabling fluidsynth plugins" >&5 +$as_echo "$as_me: WARNING: libfluidsynth not found; disabling fluidsynth plugins" >&2;} ; + muse_enable_fluidlib="no" + +else + Fluidsynth_CFLAGS=$pkg_cv_Fluidsynth_CFLAGS + Fluidsynth_LIBS=$pkg_cv_Fluidsynth_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + FLUIDSYNTHDIRS="fluid fluidsynth"; +$as_echo "#define ENABLEFLUIDSYNTH 1" >>confdefs.h + +fi + + + +if test "$muse_enable_fluidlib" = "no"; then + synth_fluidsynth="" + synth_fluid="" +fi + + +############### +### sndfile ### +############### + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for SNDFILE" >&5 +$as_echo_n "checking for SNDFILE... " >&6; } + +if test -n "$PKG_CONFIG"; then + if test -n "$SNDFILE_CFLAGS"; then + pkg_cv_SNDFILE_CFLAGS="$SNDFILE_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"sndfile >= 1.0.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "sndfile >= 1.0.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_SNDFILE_CFLAGS=`$PKG_CONFIG --cflags "sndfile >= 1.0.0" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi +if test -n "$PKG_CONFIG"; then + if test -n "$SNDFILE_LIBS"; then + pkg_cv_SNDFILE_LIBS="$SNDFILE_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"sndfile >= 1.0.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "sndfile >= 1.0.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_SNDFILE_LIBS=`$PKG_CONFIG --libs "sndfile >= 1.0.0" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + SNDFILE_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "sndfile >= 1.0.0"` + else + SNDFILE_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "sndfile >= 1.0.0"` + fi + # Put the nasty error message in config.log where it belongs + echo "$SNDFILE_PKG_ERRORS" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + as_fn_error "need libsndfile >= 1.0.0" "$LINENO" 5 + +elif test $pkg_failed = untried; then + as_fn_error "need libsndfile >= 1.0.0" "$LINENO" 5 + +else + SNDFILE_CFLAGS=$pkg_cv_SNDFILE_CFLAGS + SNDFILE_LIBS=$pkg_cv_SNDFILE_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + true +fi + +############### +### libsamplerate ### +############### + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for SAMPLERATE" >&5 +$as_echo_n "checking for SAMPLERATE... " >&6; } + +if test -n "$PKG_CONFIG"; then + if test -n "$SAMPLERATE_CFLAGS"; then + pkg_cv_SAMPLERATE_CFLAGS="$SAMPLERATE_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"samplerate >= 0.1.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "samplerate >= 0.1.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_SAMPLERATE_CFLAGS=`$PKG_CONFIG --cflags "samplerate >= 0.1.0" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi +if test -n "$PKG_CONFIG"; then + if test -n "$SAMPLERATE_LIBS"; then + pkg_cv_SAMPLERATE_LIBS="$SAMPLERATE_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"samplerate >= 0.1.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "samplerate >= 0.1.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_SAMPLERATE_LIBS=`$PKG_CONFIG --libs "samplerate >= 0.1.0" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + SAMPLERATE_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "samplerate >= 0.1.0"` + else + SAMPLERATE_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "samplerate >= 0.1.0"` + fi + # Put the nasty error message in config.log where it belongs + echo "$SAMPLERATE_PKG_ERRORS" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + as_fn_error "need libsamplerate" "$LINENO" 5 + +elif test $pkg_failed = untried; then + as_fn_error "need libsamplerate" "$LINENO" 5 + +else + SAMPLERATE_CFLAGS=$pkg_cv_SAMPLERATE_CFLAGS + SAMPLERATE_LIBS=$pkg_cv_SAMPLERATE_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + true +fi + +############### +### libuuid ### +############### +ac_fn_c_check_header_mongrel "$LINENO" "uuid/uuid.h" "ac_cv_header_uuid_uuid_h" "$ac_includes_default" +if test "x$ac_cv_header_uuid_uuid_h" = x""yes; then : + UUID_FOUND="yes" +else + UUID_FOUND="no" +fi + + +if test x$UUID_FOUND = xno; then + as_fn_error "Header file uuid.h, from the uuid-dev (sometimes in e2fsprogs) package, is required" "$LINENO" 5 +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for uuid_generate in -luuid" >&5 +$as_echo_n "checking for uuid_generate in -luuid... " >&6; } +if test "${ac_cv_lib_uuid_uuid_generate+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-luuid $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char uuid_generate (); +int +main () +{ +return uuid_generate (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_uuid_uuid_generate=yes +else + ac_cv_lib_uuid_uuid_generate=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_uuid_uuid_generate" >&5 +$as_echo "$ac_cv_lib_uuid_uuid_generate" >&6; } +if test "x$ac_cv_lib_uuid_uuid_generate" = x""yes; then : + UUID_FOUND="yes" +else + UUID_FOUND="no" +fi + +if test x$UUID_FOUND = xno; then + as_fn_error "libuuid (sometimes in e2fsprogs package) is required" "$LINENO" 5 +fi +UUID_LIBS="-luuid" + + + +## PKG_CHECK_MODULES(UUID, uuid >= 1.0, +## true, +## AC_MSG_ERROR([need libuuid >= 1.0 from e2fsprogs package]) +## ) + +############ +### JACK ### +############ + + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for JACK" >&5 +$as_echo_n "checking for JACK... " >&6; } + +if test -n "$PKG_CONFIG"; then + if test -n "$JACK_CFLAGS"; then + pkg_cv_JACK_CFLAGS="$JACK_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"jack >= 0.98.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "jack >= 0.98.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_JACK_CFLAGS=`$PKG_CONFIG --cflags "jack >= 0.98.0" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi +if test -n "$PKG_CONFIG"; then + if test -n "$JACK_LIBS"; then + pkg_cv_JACK_LIBS="$JACK_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"jack >= 0.98.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "jack >= 0.98.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_JACK_LIBS=`$PKG_CONFIG --libs "jack >= 0.98.0" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + JACK_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "jack >= 0.98.0"` + else + JACK_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "jack >= 0.98.0"` + fi + # Put the nasty error message in config.log where it belongs + echo "$JACK_PKG_ERRORS" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + as_fn_error "need JACK >= 0.98.0" "$LINENO" 5 + +elif test $pkg_failed = untried; then + as_fn_error "need JACK >= 0.98.0" "$LINENO" 5 + +else + JACK_CFLAGS=$pkg_cv_JACK_CFLAGS + JACK_LIBS=$pkg_cv_JACK_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + true +fi + +############## +### LASH ### +############## +muse_enable_lash="no" +# Check whether --enable-lash was given. +if test "${enable_lash+set}" = set; then : + enableval=$enable_lash; + case "$enableval" in + "yes") + muse_enable_lash="yes" + ;; + "no") + muse_enable_lash="no" + ;; + *) + as_fn_error "must use --enable-lash(=yes/no) or --disable-lash" "$LINENO" 5 + ;; + esac + +fi + + +if test "$muse_enable_lash" = "yes"; then + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LASH" >&5 +$as_echo_n "checking for LASH... " >&6; } + +if test -n "$PKG_CONFIG"; then + if test -n "$LASH_CFLAGS"; then + pkg_cv_LASH_CFLAGS="$LASH_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"lash-1.0 >= 0.2\""; } >&5 + ($PKG_CONFIG --exists --print-errors "lash-1.0 >= 0.2") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_LASH_CFLAGS=`$PKG_CONFIG --cflags "lash-1.0 >= 0.2" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi +if test -n "$PKG_CONFIG"; then + if test -n "$LASH_LIBS"; then + pkg_cv_LASH_LIBS="$LASH_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"lash-1.0 >= 0.2\""; } >&5 + ($PKG_CONFIG --exists --print-errors "lash-1.0 >= 0.2") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_LASH_LIBS=`$PKG_CONFIG --libs "lash-1.0 >= 0.2" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + LASH_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "lash-1.0 >= 0.2"` + else + LASH_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "lash-1.0 >= 0.2"` + fi + # Put the nasty error message in config.log where it belongs + echo "$LASH_PKG_ERRORS" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + LASH_FOUND="no" +elif test $pkg_failed = untried; then + LASH_FOUND="no" +else + LASH_CFLAGS=$pkg_cv_LASH_CFLAGS + LASH_LIBS=$pkg_cv_LASH_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + LASH_FOUND="yes" +fi + + + + if test "$LASH_FOUND" = "yes"; then + +$as_echo "#define HAVE_LASH 1" >>confdefs.h + + LASH_VERSION=$( pkg-config --modversion lash-1.0 ) + +cat >>confdefs.h <<_ACEOF +#define LASH_VERSION "$LASH_VERSION" +_ACEOF + + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: LASH support is disabled" >&5 +$as_echo "$as_me: WARNING: LASH support is disabled" >&2;} + LASH_FOUND="no" +fi + if test "$LASH_FOUND" = "yes"; then + HAVE_LASH_TRUE= + HAVE_LASH_FALSE='#' +else + HAVE_LASH_TRUE='#' + HAVE_LASH_FALSE= +fi + + + + + +################# +### givertcap ### +################# + +GIVERTCAP= +report_rtcap="no" +# Check whether --enable-rtcap was given. +if test "${enable_rtcap+set}" = set; then : + enableval=$enable_rtcap; + case "$enableval" in + "yes") + +$as_echo "#define RTCAP 1" >>confdefs.h + + MUSECXXFLAGS="$MUSECXXFLAGS -DRTCAP" + GIVERTCAP="givertcap" + + ac_fn_c_check_header_mongrel "$LINENO" "sys/capability.h" "ac_cv_header_sys_capability_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_capability_h" = x""yes; then : + report_rtcap="yes" +else + as_fn_error "Missing sys/capability.h" "$LINENO" 5 +fi + + + ;; + "no") + ;; + *) + as_fn_error "must use --enable-rtcap(=yes/no) or --disable-rtcap" "$LINENO" 5 + esac + +fi + + if test "$report_rtcap" = "yes"; then + RTCAP_TRUE= + RTCAP_FALSE='#' +else + RTCAP_TRUE='#' + RTCAP_FALSE= +fi + + + + +#################### +### suid-install ### +#################### + +SUIDINSTALL="no" +# Check whether --enable-suid-install was given. +if test "${enable_suid_install+set}" = set; then : + enableval=$enable_suid_install; + case "$enableval" in + "yes") + SUIDINSTALL="yes" + ;; + "no") + ;; + *) + as_fn_error "must use --enable-suid-install(=yes/no) or --disable-suid-install" "$LINENO" 5 + ;; + esac + +fi + + + +################## +### suid-build ### +################## +SUIDBUILD="no" +# Check whether --enable-suid-build was given. +if test "${enable_suid_build+set}" = set; then : + enableval=$enable_suid_build; + case "$enableval" in + "yes") + SUIDBUILD="yes" + ;; + "no") + SUIDBUILD="no" + ;; + *) + as_fn_error "must use --enable-suid-build(=yes/no) or --disable-suid-build" "$LINENO" 5 + ;; + esac + +fi + + + + +######################## +### doxygen-treeview ### +######################## +DOXYGEN_TREEVIEW="YES" +report_doxy_treeview="yes"; +# Check whether --enable-doxy-treeview was given. +if test "${enable_doxy_treeview+set}" = set; then : + enableval=$enable_doxy_treeview; + case "$enableval" in + "yes") + ;; + "no") + DOXYGEN_TREEVIEW="NO" + report_doxy_treeview="no"; + ;; + *) + as_fn_error "must use --enable-doxy-treeview(=yes/no) or --disable-doxy-treeview" "$LINENO" 5 + ;; + esac + +fi + + + +################ +### patchbay ### +################ +###PATCHBAY="no" +###AC_SUBST(PATCHBAY) +###AM_CONDITIONAL(PATCHBAY, test "$PATCHBAY" == "yes") + +## -DQT_NO_CAST_ASCII +MUSECXXFLAGS="-g -fno-exceptions -Wall -W -D_GNU_SOURCE -D_REENTRANT \ + -DQT_CLEAN_NAMESPACE -DQT_NO_COMPAT \ + -I\$(top_srcdir) -I\$(top_srcdir)/muse/widgets \$(QT_CFLAGS)" + +#MUSEOPTCXXFLAGS="-O6 -fomit-frame-pointer -ffast-math -fstrength-reduce \ +#-funroll-loops" +#MUSEOPTCXXFLAGS="-O2" +MUSEOPTCXXFLAGS="-O3 -fomit-frame-pointer -ffast-math -fstrength-reduce -funroll-loops" + +# -fmove-all-movables + +################ +### optimize ### +################ +report_optimise="no" +# Check whether --enable-optimize was given. +if test "${enable_optimize+set}" = set; then : + enableval=$enable_optimize; + case "$enableval" in + "yes") + report_optimise="yes" + CXXFLAGS="$( echo "$CXXFLAGS" | sed "s/-O. *//" )" + MUSECXXFLAGS="$MUSECXXFLAGS $MUSEOPTCXXFLAGS" + ;; + "no") + ;; + *) + as_fn_error "must use --enable-optimize(=yes/no) or --disable-optimize" "$LINENO" 5 + ;; + esac + +fi + + +############# +### debug ### +############# +report_debug="no" +# Check whether --enable-debug was given. +if test "${enable_debug+set}" = set; then : + enableval=$enable_debug; + case "$enableval" in + "yes") + report_debug="yes" + CXXFLAGS="" + ;; + "no") + ;; + *) + as_fn_error "must use --enable-debug(=yes/no) or --disable-debug" "$LINENO" 5 + ;; + esac + +fi + + +########################### +### PCH ### +### precompiled headers ### +########################### + +# Check whether --enable-pch was given. +if test "${enable_pch+set}" = set; then : + enableval=$enable_pch; + case "$enableval" in + "yes") + MUSECXXFLAGS="$MUSECXXFLAGS -Winvalid-pch" + PCH="yes" + + +$as_echo "#define PCH 1" >>confdefs.h + + ;; + "no") + ;; + *) + as_fn_error "must use --enable-pch(=yes/no) or --disable-pch" "$LINENO" 5 + ;; + esac + +fi + + if test "$PCH" = "yes"; then + PCH_TRUE= + PCH_FALSE='#' +else + PCH_TRUE='#' + PCH_FALSE= +fi + + +############ +### arch ### +############ + +report_march="none" +# Check whether --enable-arch was given. +if test "${enable_arch+set}" = set; then : + enableval=$enable_arch; + case "$enableval" in + "no") + ;; + *) + report_march="$enableval" + MUSECXXFLAGS="$MUSECXXFLAGS -mtune=$enableval -march=$enableval" + ;; + esac + +fi + + +########################### +### SSE ### +### SSE optimizations ### +########################### + +report_sse="no" +# Check whether --enable-sse was given. +if test "${enable_sse+set}" = set; then : + enableval=$enable_sse; + case "$enableval" in + "yes") + ## MUSECXXFLAGS="$MUSECXXFLAGS -Winvalid-pch" + report_sse="yes" + USE_SSE="yes" + + +$as_echo "#define USE_SSE 1" >>confdefs.h + + ;; + "no") + ;; + *) + as_fn_error "must use --enable-sse(=yes/no) or --disable-sse" "$LINENO" 5 + ;; + esac + +fi + + if test "$USE_SSE" = "yes"; then + USE_SSE_TRUE= + USE_SSE_FALSE='#' +else + USE_SSE_TRUE='#' + USE_SSE_FALSE= +fi + + +########## +# PYTHON # +########## +# python detection borrowed from libvirt (http://libvirt.org) + +# Check whether --with-python was given. +if test "${with_python+set}" = set; then : + withval=$with_python; +else + enable_python=yes +fi + + +PYTHON_VERSION= +PYTHON_INCLUDES= +if test "$enable_python" != "no" ; then + if test -x "$enable_python/bin/python" + then + { $as_echo "$as_me:${as_lineno-$LINENO}: Found python in $enable_python/bin/python" >&5 +$as_echo "$as_me: Found python in $enable_python/bin/python" >&6;} + PYTHON="$enable_python/bin/python" + enable_python=yes + else + if test -x "$enable_python" + then + { $as_echo "$as_me:${as_lineno-$LINENO}: Found python in $enable_python" >&5 +$as_echo "$as_me: Found python in $enable_python" >&6;} + PYTHON="$enable_python" + enable_python=yes + else + if test -x "$PYTHON" + then + { $as_echo "$as_me:${as_lineno-$LINENO}: Found python in environment PYTHON=$PYTHON" >&5 +$as_echo "$as_me: Found python in environment PYTHON=$PYTHON" >&6;} + enable_python=yes + fi + fi + fi + + if test "$enable_python" == "yes" ; then + + + + + # Find any Python interpreter. + if test -z "$PYTHON"; then + for ac_prog in python python2 python3 python3.0 python2.5 python2.4 python2.3 python2.2 python2.1 python2.0 +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_PYTHON+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $PYTHON in + [\\/]* | ?:[\\/]*) + ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_PYTHON="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PYTHON=$ac_cv_path_PYTHON +if test -n "$PYTHON"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 +$as_echo "$PYTHON" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$PYTHON" && break +done +test -n "$PYTHON" || PYTHON=":" + + fi + am_display_PYTHON=python + + + if test "$PYTHON" = :; then + : + else + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON version" >&5 +$as_echo_n "checking for $am_display_PYTHON version... " >&6; } +if test "${am_cv_python_version+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[:3])"` +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_version" >&5 +$as_echo "$am_cv_python_version" >&6; } + PYTHON_VERSION=$am_cv_python_version + + + + PYTHON_PREFIX='${prefix}' + + PYTHON_EXEC_PREFIX='${exec_prefix}' + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON platform" >&5 +$as_echo_n "checking for $am_display_PYTHON platform... " >&6; } +if test "${am_cv_python_platform+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + am_cv_python_platform=`$PYTHON -c "import sys; sys.stdout.write(sys.platform)"` +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_platform" >&5 +$as_echo "$am_cv_python_platform" >&6; } + PYTHON_PLATFORM=$am_cv_python_platform + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON script directory" >&5 +$as_echo_n "checking for $am_display_PYTHON script directory... " >&6; } +if test "${am_cv_python_pythondir+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "x$prefix" = xNONE + then + am_py_prefix=$ac_default_prefix + else + am_py_prefix=$prefix + fi + am_cv_python_pythondir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(0,0,prefix='$am_py_prefix'))" 2>/dev/null || + echo "$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages"` + case $am_cv_python_pythondir in + $am_py_prefix*) + am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'` + am_cv_python_pythondir=`echo "$am_cv_python_pythondir" | sed "s,^$am__strip_prefix,$PYTHON_PREFIX,"` + ;; + *) + case $am_py_prefix in + /usr|/System*) ;; + *) + am_cv_python_pythondir=$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages + ;; + esac + ;; + esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_pythondir" >&5 +$as_echo "$am_cv_python_pythondir" >&6; } + pythondir=$am_cv_python_pythondir + + + + pkgpythondir=\${pythondir}/$PACKAGE + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON extension module directory" >&5 +$as_echo_n "checking for $am_display_PYTHON extension module directory... " >&6; } +if test "${am_cv_python_pyexecdir+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "x$exec_prefix" = xNONE + then + am_py_exec_prefix=$am_py_prefix + else + am_py_exec_prefix=$exec_prefix + fi + am_cv_python_pyexecdir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(1,0,prefix='$am_py_exec_prefix'))" 2>/dev/null || + echo "$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages"` + case $am_cv_python_pyexecdir in + $am_py_exec_prefix*) + am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'` + am_cv_python_pyexecdir=`echo "$am_cv_python_pyexecdir" | sed "s,^$am__strip_prefix,$PYTHON_EXEC_PREFIX,"` + ;; + *) + case $am_py_exec_prefix in + /usr|/System*) ;; + *) + am_cv_python_pyexecdir=$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages + ;; + esac + ;; + esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_pyexecdir" >&5 +$as_echo "$am_cv_python_pyexecdir" >&6; } + pyexecdir=$am_cv_python_pyexecdir + + + + pkgpyexecdir=\${pyexecdir}/$PACKAGE + + + + fi + + + + if test "$PYTHON" != : ; then + PYTHON_CONFIG="$PYTHON-config" + + if test -x "$PYTHON_CONFIG" + then + PYTHON_INCLUDES=`$PYTHON_CONFIG --includes` + PYTHON_LIB=`$PYTHON_CONFIG --libs` + else + if test -r $PYTHON_EXEC_PREFIX/include/python$PYTHON_VERSION/Python.h + then + PYTHON_INCLUDES=-I$PYTHON_EXEC_PREFIX/include/python$PYTHON_VERSION + else + if test -r $prefix/include/python$PYTHON_VERSION/Python.h + then + PYTHON_INCLUDES=-I$prefix/include/python$PYTHON_VERSION + else + if test -r /usr/include/python$PYTHON_VERSION/Python.h + then + PYTHON_INCLUDES=-I/usr/include/python$PYTHON_VERSION + else + { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find python$PYTHON_VERSION/Python.h, disabling bindings" >&5 +$as_echo "$as_me: Could not find python$PYTHON_VERSION/Python.h, disabling bindings" >&6;} + enable_python=no + fi + fi + fi + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find python interpreter, disabling bindings" >&5 +$as_echo "$as_me: Could not find python interpreter, disabling bindings" >&6;} + enable_python=no + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find python in $enable_python, disabling bindings" >&5 +$as_echo "$as_me: Could not find python in $enable_python, disabling bindings" >&6;} + enable_python=no + fi +fi + if test "$enable_python" = "yes"; then + ENABLE_PYTHON_TRUE= + ENABLE_PYTHON_FALSE='#' +else + ENABLE_PYTHON_TRUE='#' + ENABLE_PYTHON_FALSE= +fi + + + + + +#AC_ARG_ENABLE(python, +#enable_python="yes" +# [ --disable-python disable python bindings for MusE],[ +# case "$enableval" in +# "no") +# enable_python="no" +# ;; +# *) +# AC_MSG_ERROR([must use --enable-python(=yes/no) or --disable-python]) +# ;; +# esac +# ]) +# +#if test "$enable_python" = "yes"; then +# AM_PATH_PYTHON +# PYTHON_INCLUDE_DIR="" +# if test -n "$PYTHON_INCLUDES" ; then +# PYTHON_INCLUDE_DIR=$PYTHON_INCLUDES +# python_bindings="yes" +# else +# python_bindings="no - devel pkg not found" +# fi +#fi +#AM_CONDITIONAL(ENABLE_PYTHON, test "$python_bindings" = "yes") + +################### +### vst plugins ### +################### + +vst_possible=no +VST="no" +# Check whether --enable-vst was given. +if test "${enable_vst+set}" = set; then : + enableval=$enable_vst; if test x$enable_vst = xyes ; then + vst_requested=yes; + fi + + +fi + + +if test x$vst_requested = xyes ; then + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for FST" >&5 +$as_echo_n "checking for FST... " >&6; } + +if test -n "$PKG_CONFIG"; then + if test -n "$FST_CFLAGS"; then + pkg_cv_FST_CFLAGS="$FST_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libfst\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libfst") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_FST_CFLAGS=`$PKG_CONFIG --cflags "libfst" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi +if test -n "$PKG_CONFIG"; then + if test -n "$FST_LIBS"; then + pkg_cv_FST_LIBS="$FST_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libfst\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libfst") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_FST_LIBS=`$PKG_CONFIG --libs "libfst" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + FST_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "libfst"` + else + FST_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "libfst"` + fi + # Put the nasty error message in config.log where it belongs + echo "$FST_PKG_ERRORS" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + vst_possible=no +elif test $pkg_failed = untried; then + vst_possible=no +else + FST_CFLAGS=$pkg_cv_FST_CFLAGS + FST_LIBS=$pkg_cv_FST_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + vst_possible=yes +fi +fi + +if test x$vst_possible = xyes -a x$vst_requested = xyes ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking support for VST/win plugins" >&5 +$as_echo_n "checking support for VST/win plugins... " >&6; } + VST_CFLAGS="$FST_CFLAGS" + VST_LIBS="$FST_LIBS" + VST="yes" + +$as_echo "#define VST_SUPPORT 1" >>confdefs.h + +fi + + if test x$vst_possible = xyes -a x$vst_requested = xyes; then + VST_SUPPORT_TRUE= + VST_SUPPORT_FALSE='#' +else + VST_SUPPORT_TRUE='#' + VST_SUPPORT_FALSE= +fi + + + +################### +### OSC support ### +################### + +osc_requested=no +LO_LIB_FOUND="no" +OSC="no" +# Check whether --enable-osc was given. +if test "${enable_osc+set}" = set; then : + enableval=$enable_osc; if test x$enable_osc = xyes ; then + osc_requested=yes; + fi + + +fi + + +if test x$osc_requested = xyes ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking support for OSC" >&5 +$as_echo_n "checking support for OSC... " >&6; } +## AC_CHECK_LIB(lo, lo_send, LO_LIB_FOUND="yes", LO_LIB_FOUND="no") +## PKG_CHECK_MODULES(LO, lo >= 0.2, LO_LIB_FOUND="yes", LO_LIB_FOUND="no") + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LO" >&5 +$as_echo_n "checking for LO... " >&6; } + +if test -n "$PKG_CONFIG"; then + if test -n "$LO_CFLAGS"; then + pkg_cv_LO_CFLAGS="$LO_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"liblo\""; } >&5 + ($PKG_CONFIG --exists --print-errors "liblo") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_LO_CFLAGS=`$PKG_CONFIG --cflags "liblo" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi +if test -n "$PKG_CONFIG"; then + if test -n "$LO_LIBS"; then + pkg_cv_LO_LIBS="$LO_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"liblo\""; } >&5 + ($PKG_CONFIG --exists --print-errors "liblo") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_LO_LIBS=`$PKG_CONFIG --libs "liblo" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + LO_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "liblo"` + else + LO_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "liblo"` + fi + # Put the nasty error message in config.log where it belongs + echo "$LO_PKG_ERRORS" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + LO_LIB_FOUND=no +elif test $pkg_failed = untried; then + LO_LIB_FOUND=no +else + LO_CFLAGS=$pkg_cv_LO_CFLAGS + LO_LIBS=$pkg_cv_LO_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + LO_LIB_FOUND=yes +fi + if test x$LO_LIB_FOUND = xno; then + as_fn_error "Library liblo from The Lightweight OSC Implementation is required" "$LINENO" 5 + fi +fi + +if test x$LO_LIB_FOUND = xyes ; then + LO_CFLAGS="$LO_CFLAGS" + ##LO_LIBS="$LO_LIBS" + LO_LIBS="-llo" + OSC="yes" + + + +$as_echo "#define OSC_SUPPORT 1" >>confdefs.h + +fi + + if test x$LO_LIB_FOUND = xyes; then + OSC_SUPPORT_TRUE= + OSC_SUPPORT_FALSE='#' +else + OSC_SUPPORT_TRUE='#' + OSC_SUPPORT_FALSE= +fi + + +## LO_LIBS="-llo" +## AC_SUBST(LO_CFLAGS) +## AC_SUBST(LO_LIBS) + +## PKG_CHECK_MODULES(LO, lo >= 0.23, +## true, +## AC_MSG_ERROR([need liblo >= 0.23 ]) +## ) + + + +################### +### dssi plugins ### +################### + +dssi_requested=no +## LO_LIB_FOUND="no" +DSSI_H_FOUND="no" +DSSI="no" +# Check whether --enable-dssi was given. +if test "${enable_dssi+set}" = set; then : + enableval=$enable_dssi; if test x$enable_dssi = xyes ; then + dssi_requested=yes; + fi + + +fi + + + +if test x$dssi_requested = xyes ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking support for DSSI + DSSI-Vst plugins" >&5 +$as_echo_n "checking support for DSSI + DSSI-Vst plugins... " >&6; } + ## AC_CHECK_LIB(lo, lo_send, LO_LIB_FOUND="yes", LO_LIB_FOUND="no") + ## PKG_CHECK_MODULES(LO, lo >= 0.2, LO_LIB_FOUND="yes", LO_LIB_FOUND="no") +## PKG_CHECK_MODULES(LO,liblo, [ LO_LIB_FOUND=yes ], [ LO_LIB_FOUND=no ]) +## if test x$LO_LIB_FOUND = xno; then +## AC_MSG_ERROR([Library liblo from The Lightweight OSC Implementation is required]) +## fi + + ac_fn_c_check_header_mongrel "$LINENO" "dssi.h" "ac_cv_header_dssi_h" "$ac_includes_default" +if test "x$ac_cv_header_dssi_h" = x""yes; then : + DSSI_FOUND="yes" +else + DSSI_FOUND="no" +fi + + + ## PKG_CHECK_MODULES(DSSI [ DSSI_FOUND=yes ], [ DSSI_FOUND=no ]) + if test x$DSSI_FOUND = xno; then + as_fn_error "Header file dssi.h from DSSI (Disposable Soft Synth Interface) is required" "$LINENO" 5 + fi +fi + +## if test x$LO_LIB_FOUND = xyes -a x$DSSI_FOUND = xyes ; then +if test x$DSSI_FOUND = xyes ; then +## LO_CFLAGS="$LO_CFLAGS" + ##LO_LIBS="$LO_LIBS" +## LO_LIBS="-llo" + DSSI="yes" +## AC_SUBST(LO_CFLAGS) +## AC_SUBST(LO_LIBS) + +$as_echo "#define DSSI_SUPPORT 1" >>confdefs.h + +fi + +## AM_CONDITIONAL(DSSI_SUPPORT, test x$LO_LIB_FOUND = xyes -a x$DSSI_FOUND = xyes) + if test x$DSSI_FOUND = xyes; then + DSSI_SUPPORT_TRUE= + DSSI_SUPPORT_FALSE='#' +else + DSSI_SUPPORT_TRUE='#' + DSSI_SUPPORT_FALSE= +fi + + +## LO_LIBS="-llo" +## AC_SUBST(LO_CFLAGS) +## AC_SUBST(LO_LIBS) + +## PKG_CHECK_MODULES(LO, lo >= 0.23, +## true, +## AC_MSG_ERROR([need liblo >= 0.23 ]) +## ) + + + + +###################################### + + + +$as_echo "#define HAVE_AUDIO 1" >>confdefs.h + + if test "yes" = "yes"; then + HAVE_AUDIO_TRUE= + HAVE_AUDIO_FALSE='#' +else + HAVE_AUDIO_TRUE='#' + HAVE_AUDIO_FALSE= +fi + + + + + + +if test -n "$GIVERTCAP"; then + SUIDINSTALL="no" + SUIDBUILD="no" + fi + + +ac_config_files="$ac_config_files Makefile m4/Makefile al/Makefile doc/Makefile xpm/Makefile demos/Makefile grepmidi/Makefile packaging/Makefile muse/Makefile muse/widgets/Makefile muse/master/Makefile muse/midiedit/Makefile muse/arranger/Makefile muse/liste/Makefile muse/driver/Makefile muse/waveedit/Makefile muse/ctrl/Makefile muse/instruments/Makefile muse/mixer/Makefile muse/cliplist/Makefile muse/marker/Makefile muse/mplugins/Makefile muse/remote/Makefile share/Makefile share/drummaps/Makefile share/html/Makefile share/locale/Makefile share/wallpapers/Makefile share/instruments/Makefile share/plugins/Makefile share/templates/Makefile share/pybridge/Makefile share/scripts/Makefile synti/Makefile synti/libsynti/Makefile synti/fluidsynth/Makefile synti/fluid/Makefile synti/organ/Makefile synti/s1/Makefile synti/vam/Makefile synti/deicsonze/Makefile synti/simpledrums/Makefile lib/Makefile lib/synthi/Makefile lib/plugins/Makefile plugins/Makefile plugins/freeverb/Makefile plugins/pandelay/Makefile plugins/doublechorus/Makefile Doxyfile utils/Makefile" + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + test "x$cache_file" != "x/dev/null" && + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + cat confcache >$cache_file + else + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +DEFS=-DHAVE_CONFIG_H + +ac_libobjs= +ac_ltlibobjs= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + + if test -n "$EXEEXT"; then + am__EXEEXT_TRUE= + am__EXEEXT_FALSE='#' +else + am__EXEEXT_TRUE='#' + am__EXEEXT_FALSE= +fi + +if test -z "${INSIDE_GNOME_COMMON_TRUE}" && test -z "${INSIDE_GNOME_COMMON_FALSE}"; then + as_fn_error "conditional \"INSIDE_GNOME_COMMON\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then + as_fn_error "conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then + as_fn_error "conditional \"am__fastdepCXX\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + as_fn_error "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then + as_fn_error "conditional \"am__fastdepCXX\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${ENABLEFLUIDSYNTH_TRUE}" && test -z "${ENABLEFLUIDSYNTH_FALSE}"; then + as_fn_error "conditional \"ENABLEFLUIDSYNTH\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${HAVE_LASH_TRUE}" && test -z "${HAVE_LASH_FALSE}"; then + as_fn_error "conditional \"HAVE_LASH\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${RTCAP_TRUE}" && test -z "${RTCAP_FALSE}"; then + as_fn_error "conditional \"RTCAP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${PCH_TRUE}" && test -z "${PCH_FALSE}"; then + as_fn_error "conditional \"PCH\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${USE_SSE_TRUE}" && test -z "${USE_SSE_FALSE}"; then + as_fn_error "conditional \"USE_SSE\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${ENABLE_PYTHON_TRUE}" && test -z "${ENABLE_PYTHON_FALSE}"; then + as_fn_error "conditional \"ENABLE_PYTHON\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${VST_SUPPORT_TRUE}" && test -z "${VST_SUPPORT_FALSE}"; then + as_fn_error "conditional \"VST_SUPPORT\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${OSC_SUPPORT_TRUE}" && test -z "${OSC_SUPPORT_FALSE}"; then + as_fn_error "conditional \"OSC_SUPPORT\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${DSSI_SUPPORT_TRUE}" && test -z "${DSSI_SUPPORT_FALSE}"; then + as_fn_error "conditional \"DSSI_SUPPORT\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${HAVE_AUDIO_TRUE}" && test -z "${HAVE_AUDIO_FALSE}"; then + as_fn_error "conditional \"HAVE_AUDIO\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi + +: ${CONFIG_STATUS=./config.status} +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false + +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +# as_fn_error ERROR [LINENO LOG_FD] +# --------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with status $?, using 1 if that was 0. +as_fn_error () +{ + as_status=$?; test $as_status -eq 0 && as_status=1 + if test "$3"; then + as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 + fi + $as_echo "$as_me: error: $1" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in #( + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by MusE $as_me 1.1, which was +generated by GNU Autoconf 2.65. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + +case $ac_config_headers in *" +"*) set x $ac_config_headers; shift; ac_config_headers=$*;; +esac + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" +config_headers="$ac_config_headers" +config_commands="$ac_config_commands" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +ac_cs_usage="\ +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. + +Usage: $0 [OPTION]... [TAG]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration commands: +$config_commands + +Report bugs to the package provider." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_version="\\ +MusE config.status 1.1 +configured by $0, generated by GNU Autoconf 2.65, + with options \\"\$ac_cs_config\\" + +Copyright (C) 2009 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +MKDIR_P='$MKDIR_P' +AWK='$AWK' +test -n "\$AWK" || AWK=awk +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_HEADERS " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + as_fn_error "ambiguous option: \`$1' +Try \`$0 --help' for more information.";; + --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) as_fn_error "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +if \$ac_cs_recheck; then + set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# +# INIT-COMMANDS +# +AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" + + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +macro_version='`$ECHO "X$macro_version" | $Xsed -e "$delay_single_quote_subst"`' +macro_revision='`$ECHO "X$macro_revision" | $Xsed -e "$delay_single_quote_subst"`' +enable_shared='`$ECHO "X$enable_shared" | $Xsed -e "$delay_single_quote_subst"`' +enable_static='`$ECHO "X$enable_static" | $Xsed -e "$delay_single_quote_subst"`' +pic_mode='`$ECHO "X$pic_mode" | $Xsed -e "$delay_single_quote_subst"`' +enable_fast_install='`$ECHO "X$enable_fast_install" | $Xsed -e "$delay_single_quote_subst"`' +host_alias='`$ECHO "X$host_alias" | $Xsed -e "$delay_single_quote_subst"`' +host='`$ECHO "X$host" | $Xsed -e "$delay_single_quote_subst"`' +host_os='`$ECHO "X$host_os" | $Xsed -e "$delay_single_quote_subst"`' +build_alias='`$ECHO "X$build_alias" | $Xsed -e "$delay_single_quote_subst"`' +build='`$ECHO "X$build" | $Xsed -e "$delay_single_quote_subst"`' +build_os='`$ECHO "X$build_os" | $Xsed -e "$delay_single_quote_subst"`' +SED='`$ECHO "X$SED" | $Xsed -e "$delay_single_quote_subst"`' +Xsed='`$ECHO "X$Xsed" | $Xsed -e "$delay_single_quote_subst"`' +GREP='`$ECHO "X$GREP" | $Xsed -e "$delay_single_quote_subst"`' +EGREP='`$ECHO "X$EGREP" | $Xsed -e "$delay_single_quote_subst"`' +FGREP='`$ECHO "X$FGREP" | $Xsed -e "$delay_single_quote_subst"`' +LD='`$ECHO "X$LD" | $Xsed -e "$delay_single_quote_subst"`' +NM='`$ECHO "X$NM" | $Xsed -e "$delay_single_quote_subst"`' +LN_S='`$ECHO "X$LN_S" | $Xsed -e "$delay_single_quote_subst"`' +max_cmd_len='`$ECHO "X$max_cmd_len" | $Xsed -e "$delay_single_quote_subst"`' +ac_objext='`$ECHO "X$ac_objext" | $Xsed -e "$delay_single_quote_subst"`' +exeext='`$ECHO "X$exeext" | $Xsed -e "$delay_single_quote_subst"`' +lt_unset='`$ECHO "X$lt_unset" | $Xsed -e "$delay_single_quote_subst"`' +lt_SP2NL='`$ECHO "X$lt_SP2NL" | $Xsed -e "$delay_single_quote_subst"`' +lt_NL2SP='`$ECHO "X$lt_NL2SP" | $Xsed -e "$delay_single_quote_subst"`' +reload_flag='`$ECHO "X$reload_flag" | $Xsed -e "$delay_single_quote_subst"`' +reload_cmds='`$ECHO "X$reload_cmds" | $Xsed -e "$delay_single_quote_subst"`' +OBJDUMP='`$ECHO "X$OBJDUMP" | $Xsed -e "$delay_single_quote_subst"`' +deplibs_check_method='`$ECHO "X$deplibs_check_method" | $Xsed -e "$delay_single_quote_subst"`' +file_magic_cmd='`$ECHO "X$file_magic_cmd" | $Xsed -e "$delay_single_quote_subst"`' +AR='`$ECHO "X$AR" | $Xsed -e "$delay_single_quote_subst"`' +AR_FLAGS='`$ECHO "X$AR_FLAGS" | $Xsed -e "$delay_single_quote_subst"`' +STRIP='`$ECHO "X$STRIP" | $Xsed -e "$delay_single_quote_subst"`' +RANLIB='`$ECHO "X$RANLIB" | $Xsed -e "$delay_single_quote_subst"`' +old_postinstall_cmds='`$ECHO "X$old_postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' +old_postuninstall_cmds='`$ECHO "X$old_postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_cmds='`$ECHO "X$old_archive_cmds" | $Xsed -e "$delay_single_quote_subst"`' +CC='`$ECHO "X$CC" | $Xsed -e "$delay_single_quote_subst"`' +CFLAGS='`$ECHO "X$CFLAGS" | $Xsed -e "$delay_single_quote_subst"`' +compiler='`$ECHO "X$compiler" | $Xsed -e "$delay_single_quote_subst"`' +GCC='`$ECHO "X$GCC" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_pipe='`$ECHO "X$lt_cv_sys_global_symbol_pipe" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_cdecl='`$ECHO "X$lt_cv_sys_global_symbol_to_cdecl" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`' +objdir='`$ECHO "X$objdir" | $Xsed -e "$delay_single_quote_subst"`' +SHELL='`$ECHO "X$SHELL" | $Xsed -e "$delay_single_quote_subst"`' +ECHO='`$ECHO "X$ECHO" | $Xsed -e "$delay_single_quote_subst"`' +MAGIC_CMD='`$ECHO "X$MAGIC_CMD" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_no_builtin_flag='`$ECHO "X$lt_prog_compiler_no_builtin_flag" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_wl='`$ECHO "X$lt_prog_compiler_wl" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_pic='`$ECHO "X$lt_prog_compiler_pic" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_static='`$ECHO "X$lt_prog_compiler_static" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_prog_compiler_c_o='`$ECHO "X$lt_cv_prog_compiler_c_o" | $Xsed -e "$delay_single_quote_subst"`' +need_locks='`$ECHO "X$need_locks" | $Xsed -e "$delay_single_quote_subst"`' +DSYMUTIL='`$ECHO "X$DSYMUTIL" | $Xsed -e "$delay_single_quote_subst"`' +NMEDIT='`$ECHO "X$NMEDIT" | $Xsed -e "$delay_single_quote_subst"`' +LIPO='`$ECHO "X$LIPO" | $Xsed -e "$delay_single_quote_subst"`' +OTOOL='`$ECHO "X$OTOOL" | $Xsed -e "$delay_single_quote_subst"`' +OTOOL64='`$ECHO "X$OTOOL64" | $Xsed -e "$delay_single_quote_subst"`' +libext='`$ECHO "X$libext" | $Xsed -e "$delay_single_quote_subst"`' +shrext_cmds='`$ECHO "X$shrext_cmds" | $Xsed -e "$delay_single_quote_subst"`' +extract_expsyms_cmds='`$ECHO "X$extract_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`' +archive_cmds_need_lc='`$ECHO "X$archive_cmds_need_lc" | $Xsed -e "$delay_single_quote_subst"`' +enable_shared_with_static_runtimes='`$ECHO "X$enable_shared_with_static_runtimes" | $Xsed -e "$delay_single_quote_subst"`' +export_dynamic_flag_spec='`$ECHO "X$export_dynamic_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' +whole_archive_flag_spec='`$ECHO "X$whole_archive_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' +compiler_needs_object='`$ECHO "X$compiler_needs_object" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_from_new_cmds='`$ECHO "X$old_archive_from_new_cmds" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_from_expsyms_cmds='`$ECHO "X$old_archive_from_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`' +archive_cmds='`$ECHO "X$archive_cmds" | $Xsed -e "$delay_single_quote_subst"`' +archive_expsym_cmds='`$ECHO "X$archive_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`' +module_cmds='`$ECHO "X$module_cmds" | $Xsed -e "$delay_single_quote_subst"`' +module_expsym_cmds='`$ECHO "X$module_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`' +with_gnu_ld='`$ECHO "X$with_gnu_ld" | $Xsed -e "$delay_single_quote_subst"`' +allow_undefined_flag='`$ECHO "X$allow_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`' +no_undefined_flag='`$ECHO "X$no_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec='`$ECHO "X$hardcode_libdir_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec_ld='`$ECHO "X$hardcode_libdir_flag_spec_ld" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_separator='`$ECHO "X$hardcode_libdir_separator" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_direct='`$ECHO "X$hardcode_direct" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_direct_absolute='`$ECHO "X$hardcode_direct_absolute" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_minus_L='`$ECHO "X$hardcode_minus_L" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_shlibpath_var='`$ECHO "X$hardcode_shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_automatic='`$ECHO "X$hardcode_automatic" | $Xsed -e "$delay_single_quote_subst"`' +inherit_rpath='`$ECHO "X$inherit_rpath" | $Xsed -e "$delay_single_quote_subst"`' +link_all_deplibs='`$ECHO "X$link_all_deplibs" | $Xsed -e "$delay_single_quote_subst"`' +fix_srcfile_path='`$ECHO "X$fix_srcfile_path" | $Xsed -e "$delay_single_quote_subst"`' +always_export_symbols='`$ECHO "X$always_export_symbols" | $Xsed -e "$delay_single_quote_subst"`' +export_symbols_cmds='`$ECHO "X$export_symbols_cmds" | $Xsed -e "$delay_single_quote_subst"`' +exclude_expsyms='`$ECHO "X$exclude_expsyms" | $Xsed -e "$delay_single_quote_subst"`' +include_expsyms='`$ECHO "X$include_expsyms" | $Xsed -e "$delay_single_quote_subst"`' +prelink_cmds='`$ECHO "X$prelink_cmds" | $Xsed -e "$delay_single_quote_subst"`' +file_list_spec='`$ECHO "X$file_list_spec" | $Xsed -e "$delay_single_quote_subst"`' +variables_saved_for_relink='`$ECHO "X$variables_saved_for_relink" | $Xsed -e "$delay_single_quote_subst"`' +need_lib_prefix='`$ECHO "X$need_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`' +need_version='`$ECHO "X$need_version" | $Xsed -e "$delay_single_quote_subst"`' +version_type='`$ECHO "X$version_type" | $Xsed -e "$delay_single_quote_subst"`' +runpath_var='`$ECHO "X$runpath_var" | $Xsed -e "$delay_single_quote_subst"`' +shlibpath_var='`$ECHO "X$shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`' +shlibpath_overrides_runpath='`$ECHO "X$shlibpath_overrides_runpath" | $Xsed -e "$delay_single_quote_subst"`' +libname_spec='`$ECHO "X$libname_spec" | $Xsed -e "$delay_single_quote_subst"`' +library_names_spec='`$ECHO "X$library_names_spec" | $Xsed -e "$delay_single_quote_subst"`' +soname_spec='`$ECHO "X$soname_spec" | $Xsed -e "$delay_single_quote_subst"`' +postinstall_cmds='`$ECHO "X$postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' +postuninstall_cmds='`$ECHO "X$postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' +finish_cmds='`$ECHO "X$finish_cmds" | $Xsed -e "$delay_single_quote_subst"`' +finish_eval='`$ECHO "X$finish_eval" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_into_libs='`$ECHO "X$hardcode_into_libs" | $Xsed -e "$delay_single_quote_subst"`' +sys_lib_search_path_spec='`$ECHO "X$sys_lib_search_path_spec" | $Xsed -e "$delay_single_quote_subst"`' +sys_lib_dlsearch_path_spec='`$ECHO "X$sys_lib_dlsearch_path_spec" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_action='`$ECHO "X$hardcode_action" | $Xsed -e "$delay_single_quote_subst"`' +enable_dlopen='`$ECHO "X$enable_dlopen" | $Xsed -e "$delay_single_quote_subst"`' +enable_dlopen_self='`$ECHO "X$enable_dlopen_self" | $Xsed -e "$delay_single_quote_subst"`' +enable_dlopen_self_static='`$ECHO "X$enable_dlopen_self_static" | $Xsed -e "$delay_single_quote_subst"`' +old_striplib='`$ECHO "X$old_striplib" | $Xsed -e "$delay_single_quote_subst"`' +striplib='`$ECHO "X$striplib" | $Xsed -e "$delay_single_quote_subst"`' +compiler_lib_search_dirs='`$ECHO "X$compiler_lib_search_dirs" | $Xsed -e "$delay_single_quote_subst"`' +predep_objects='`$ECHO "X$predep_objects" | $Xsed -e "$delay_single_quote_subst"`' +postdep_objects='`$ECHO "X$postdep_objects" | $Xsed -e "$delay_single_quote_subst"`' +predeps='`$ECHO "X$predeps" | $Xsed -e "$delay_single_quote_subst"`' +postdeps='`$ECHO "X$postdeps" | $Xsed -e "$delay_single_quote_subst"`' +compiler_lib_search_path='`$ECHO "X$compiler_lib_search_path" | $Xsed -e "$delay_single_quote_subst"`' +LD_CXX='`$ECHO "X$LD_CXX" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_cmds_CXX='`$ECHO "X$old_archive_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' +compiler_CXX='`$ECHO "X$compiler_CXX" | $Xsed -e "$delay_single_quote_subst"`' +GCC_CXX='`$ECHO "X$GCC_CXX" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "X$lt_prog_compiler_no_builtin_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_wl_CXX='`$ECHO "X$lt_prog_compiler_wl_CXX" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_pic_CXX='`$ECHO "X$lt_prog_compiler_pic_CXX" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_static_CXX='`$ECHO "X$lt_prog_compiler_static_CXX" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_prog_compiler_c_o_CXX='`$ECHO "X$lt_cv_prog_compiler_c_o_CXX" | $Xsed -e "$delay_single_quote_subst"`' +archive_cmds_need_lc_CXX='`$ECHO "X$archive_cmds_need_lc_CXX" | $Xsed -e "$delay_single_quote_subst"`' +enable_shared_with_static_runtimes_CXX='`$ECHO "X$enable_shared_with_static_runtimes_CXX" | $Xsed -e "$delay_single_quote_subst"`' +export_dynamic_flag_spec_CXX='`$ECHO "X$export_dynamic_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`' +whole_archive_flag_spec_CXX='`$ECHO "X$whole_archive_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`' +compiler_needs_object_CXX='`$ECHO "X$compiler_needs_object_CXX" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_from_new_cmds_CXX='`$ECHO "X$old_archive_from_new_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_from_expsyms_cmds_CXX='`$ECHO "X$old_archive_from_expsyms_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' +archive_cmds_CXX='`$ECHO "X$archive_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' +archive_expsym_cmds_CXX='`$ECHO "X$archive_expsym_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' +module_cmds_CXX='`$ECHO "X$module_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' +module_expsym_cmds_CXX='`$ECHO "X$module_expsym_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' +with_gnu_ld_CXX='`$ECHO "X$with_gnu_ld_CXX" | $Xsed -e "$delay_single_quote_subst"`' +allow_undefined_flag_CXX='`$ECHO "X$allow_undefined_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`' +no_undefined_flag_CXX='`$ECHO "X$no_undefined_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec_CXX='`$ECHO "X$hardcode_libdir_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec_ld_CXX='`$ECHO "X$hardcode_libdir_flag_spec_ld_CXX" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_separator_CXX='`$ECHO "X$hardcode_libdir_separator_CXX" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_direct_CXX='`$ECHO "X$hardcode_direct_CXX" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_direct_absolute_CXX='`$ECHO "X$hardcode_direct_absolute_CXX" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_minus_L_CXX='`$ECHO "X$hardcode_minus_L_CXX" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_shlibpath_var_CXX='`$ECHO "X$hardcode_shlibpath_var_CXX" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_automatic_CXX='`$ECHO "X$hardcode_automatic_CXX" | $Xsed -e "$delay_single_quote_subst"`' +inherit_rpath_CXX='`$ECHO "X$inherit_rpath_CXX" | $Xsed -e "$delay_single_quote_subst"`' +link_all_deplibs_CXX='`$ECHO "X$link_all_deplibs_CXX" | $Xsed -e "$delay_single_quote_subst"`' +fix_srcfile_path_CXX='`$ECHO "X$fix_srcfile_path_CXX" | $Xsed -e "$delay_single_quote_subst"`' +always_export_symbols_CXX='`$ECHO "X$always_export_symbols_CXX" | $Xsed -e "$delay_single_quote_subst"`' +export_symbols_cmds_CXX='`$ECHO "X$export_symbols_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' +exclude_expsyms_CXX='`$ECHO "X$exclude_expsyms_CXX" | $Xsed -e "$delay_single_quote_subst"`' +include_expsyms_CXX='`$ECHO "X$include_expsyms_CXX" | $Xsed -e "$delay_single_quote_subst"`' +prelink_cmds_CXX='`$ECHO "X$prelink_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' +file_list_spec_CXX='`$ECHO "X$file_list_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_action_CXX='`$ECHO "X$hardcode_action_CXX" | $Xsed -e "$delay_single_quote_subst"`' +compiler_lib_search_dirs_CXX='`$ECHO "X$compiler_lib_search_dirs_CXX" | $Xsed -e "$delay_single_quote_subst"`' +predep_objects_CXX='`$ECHO "X$predep_objects_CXX" | $Xsed -e "$delay_single_quote_subst"`' +postdep_objects_CXX='`$ECHO "X$postdep_objects_CXX" | $Xsed -e "$delay_single_quote_subst"`' +predeps_CXX='`$ECHO "X$predeps_CXX" | $Xsed -e "$delay_single_quote_subst"`' +postdeps_CXX='`$ECHO "X$postdeps_CXX" | $Xsed -e "$delay_single_quote_subst"`' +compiler_lib_search_path_CXX='`$ECHO "X$compiler_lib_search_path_CXX" | $Xsed -e "$delay_single_quote_subst"`' + +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# Quote evaled strings. +for var in SED \ +GREP \ +EGREP \ +FGREP \ +LD \ +NM \ +LN_S \ +lt_SP2NL \ +lt_NL2SP \ +reload_flag \ +OBJDUMP \ +deplibs_check_method \ +file_magic_cmd \ +AR \ +AR_FLAGS \ +STRIP \ +RANLIB \ +CC \ +CFLAGS \ +compiler \ +lt_cv_sys_global_symbol_pipe \ +lt_cv_sys_global_symbol_to_cdecl \ +lt_cv_sys_global_symbol_to_c_name_address \ +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ +SHELL \ +ECHO \ +lt_prog_compiler_no_builtin_flag \ +lt_prog_compiler_wl \ +lt_prog_compiler_pic \ +lt_prog_compiler_static \ +lt_cv_prog_compiler_c_o \ +need_locks \ +DSYMUTIL \ +NMEDIT \ +LIPO \ +OTOOL \ +OTOOL64 \ +shrext_cmds \ +export_dynamic_flag_spec \ +whole_archive_flag_spec \ +compiler_needs_object \ +with_gnu_ld \ +allow_undefined_flag \ +no_undefined_flag \ +hardcode_libdir_flag_spec \ +hardcode_libdir_flag_spec_ld \ +hardcode_libdir_separator \ +fix_srcfile_path \ +exclude_expsyms \ +include_expsyms \ +file_list_spec \ +variables_saved_for_relink \ +libname_spec \ +library_names_spec \ +soname_spec \ +finish_eval \ +old_striplib \ +striplib \ +compiler_lib_search_dirs \ +predep_objects \ +postdep_objects \ +predeps \ +postdeps \ +compiler_lib_search_path \ +LD_CXX \ +compiler_CXX \ +lt_prog_compiler_no_builtin_flag_CXX \ +lt_prog_compiler_wl_CXX \ +lt_prog_compiler_pic_CXX \ +lt_prog_compiler_static_CXX \ +lt_cv_prog_compiler_c_o_CXX \ +export_dynamic_flag_spec_CXX \ +whole_archive_flag_spec_CXX \ +compiler_needs_object_CXX \ +with_gnu_ld_CXX \ +allow_undefined_flag_CXX \ +no_undefined_flag_CXX \ +hardcode_libdir_flag_spec_CXX \ +hardcode_libdir_flag_spec_ld_CXX \ +hardcode_libdir_separator_CXX \ +fix_srcfile_path_CXX \ +exclude_expsyms_CXX \ +include_expsyms_CXX \ +file_list_spec_CXX \ +compiler_lib_search_dirs_CXX \ +predep_objects_CXX \ +postdep_objects_CXX \ +predeps_CXX \ +postdeps_CXX \ +compiler_lib_search_path_CXX; do + case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in reload_cmds \ +old_postinstall_cmds \ +old_postuninstall_cmds \ +old_archive_cmds \ +extract_expsyms_cmds \ +old_archive_from_new_cmds \ +old_archive_from_expsyms_cmds \ +archive_cmds \ +archive_expsym_cmds \ +module_cmds \ +module_expsym_cmds \ +export_symbols_cmds \ +prelink_cmds \ +postinstall_cmds \ +postuninstall_cmds \ +finish_cmds \ +sys_lib_search_path_spec \ +sys_lib_dlsearch_path_spec \ +old_archive_cmds_CXX \ +old_archive_from_new_cmds_CXX \ +old_archive_from_expsyms_cmds_CXX \ +archive_cmds_CXX \ +archive_expsym_cmds_CXX \ +module_cmds_CXX \ +module_expsym_cmds_CXX \ +export_symbols_cmds_CXX \ +prelink_cmds_CXX; do + case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Fix-up fallback echo if it was mangled by the above quoting rules. +case \$lt_ECHO in +*'\\\$0 --fallback-echo"') lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\$0 --fallback-echo"\$/\$0 --fallback-echo"/'\` + ;; +esac + +ac_aux_dir='$ac_aux_dir' +xsi_shell='$xsi_shell' +lt_shell_append='$lt_shell_append' + +# See if we are running on zsh, and set the options which allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + + + PACKAGE='$PACKAGE' + VERSION='$VERSION' + TIMESTAMP='$TIMESTAMP' + RM='$RM' + ofile='$ofile' + + + + + + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "m4/Makefile") CONFIG_FILES="$CONFIG_FILES m4/Makefile" ;; + "al/Makefile") CONFIG_FILES="$CONFIG_FILES al/Makefile" ;; + "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; + "xpm/Makefile") CONFIG_FILES="$CONFIG_FILES xpm/Makefile" ;; + "demos/Makefile") CONFIG_FILES="$CONFIG_FILES demos/Makefile" ;; + "grepmidi/Makefile") CONFIG_FILES="$CONFIG_FILES grepmidi/Makefile" ;; + "packaging/Makefile") CONFIG_FILES="$CONFIG_FILES packaging/Makefile" ;; + "muse/Makefile") CONFIG_FILES="$CONFIG_FILES muse/Makefile" ;; + "muse/widgets/Makefile") CONFIG_FILES="$CONFIG_FILES muse/widgets/Makefile" ;; + "muse/master/Makefile") CONFIG_FILES="$CONFIG_FILES muse/master/Makefile" ;; + "muse/midiedit/Makefile") CONFIG_FILES="$CONFIG_FILES muse/midiedit/Makefile" ;; + "muse/arranger/Makefile") CONFIG_FILES="$CONFIG_FILES muse/arranger/Makefile" ;; + "muse/liste/Makefile") CONFIG_FILES="$CONFIG_FILES muse/liste/Makefile" ;; + "muse/driver/Makefile") CONFIG_FILES="$CONFIG_FILES muse/driver/Makefile" ;; + "muse/waveedit/Makefile") CONFIG_FILES="$CONFIG_FILES muse/waveedit/Makefile" ;; + "muse/ctrl/Makefile") CONFIG_FILES="$CONFIG_FILES muse/ctrl/Makefile" ;; + "muse/instruments/Makefile") CONFIG_FILES="$CONFIG_FILES muse/instruments/Makefile" ;; + "muse/mixer/Makefile") CONFIG_FILES="$CONFIG_FILES muse/mixer/Makefile" ;; + "muse/cliplist/Makefile") CONFIG_FILES="$CONFIG_FILES muse/cliplist/Makefile" ;; + "muse/marker/Makefile") CONFIG_FILES="$CONFIG_FILES muse/marker/Makefile" ;; + "muse/mplugins/Makefile") CONFIG_FILES="$CONFIG_FILES muse/mplugins/Makefile" ;; + "muse/remote/Makefile") CONFIG_FILES="$CONFIG_FILES muse/remote/Makefile" ;; + "share/Makefile") CONFIG_FILES="$CONFIG_FILES share/Makefile" ;; + "share/drummaps/Makefile") CONFIG_FILES="$CONFIG_FILES share/drummaps/Makefile" ;; + "share/html/Makefile") CONFIG_FILES="$CONFIG_FILES share/html/Makefile" ;; + "share/locale/Makefile") CONFIG_FILES="$CONFIG_FILES share/locale/Makefile" ;; + "share/wallpapers/Makefile") CONFIG_FILES="$CONFIG_FILES share/wallpapers/Makefile" ;; + "share/instruments/Makefile") CONFIG_FILES="$CONFIG_FILES share/instruments/Makefile" ;; + "share/plugins/Makefile") CONFIG_FILES="$CONFIG_FILES share/plugins/Makefile" ;; + "share/templates/Makefile") CONFIG_FILES="$CONFIG_FILES share/templates/Makefile" ;; + "share/pybridge/Makefile") CONFIG_FILES="$CONFIG_FILES share/pybridge/Makefile" ;; + "share/scripts/Makefile") CONFIG_FILES="$CONFIG_FILES share/scripts/Makefile" ;; + "synti/Makefile") CONFIG_FILES="$CONFIG_FILES synti/Makefile" ;; + "synti/libsynti/Makefile") CONFIG_FILES="$CONFIG_FILES synti/libsynti/Makefile" ;; + "synti/fluidsynth/Makefile") CONFIG_FILES="$CONFIG_FILES synti/fluidsynth/Makefile" ;; + "synti/fluid/Makefile") CONFIG_FILES="$CONFIG_FILES synti/fluid/Makefile" ;; + "synti/organ/Makefile") CONFIG_FILES="$CONFIG_FILES synti/organ/Makefile" ;; + "synti/s1/Makefile") CONFIG_FILES="$CONFIG_FILES synti/s1/Makefile" ;; + "synti/vam/Makefile") CONFIG_FILES="$CONFIG_FILES synti/vam/Makefile" ;; + "synti/deicsonze/Makefile") CONFIG_FILES="$CONFIG_FILES synti/deicsonze/Makefile" ;; + "synti/simpledrums/Makefile") CONFIG_FILES="$CONFIG_FILES synti/simpledrums/Makefile" ;; + "lib/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;; + "lib/synthi/Makefile") CONFIG_FILES="$CONFIG_FILES lib/synthi/Makefile" ;; + "lib/plugins/Makefile") CONFIG_FILES="$CONFIG_FILES lib/plugins/Makefile" ;; + "plugins/Makefile") CONFIG_FILES="$CONFIG_FILES plugins/Makefile" ;; + "plugins/freeverb/Makefile") CONFIG_FILES="$CONFIG_FILES plugins/freeverb/Makefile" ;; + "plugins/pandelay/Makefile") CONFIG_FILES="$CONFIG_FILES plugins/pandelay/Makefile" ;; + "plugins/doublechorus/Makefile") CONFIG_FILES="$CONFIG_FILES plugins/doublechorus/Makefile" ;; + "Doxyfile") CONFIG_FILES="$CONFIG_FILES Doxyfile" ;; + "utils/Makefile") CONFIG_FILES="$CONFIG_FILES utils/Makefile" ;; + + *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= + trap 'exit_status=$? + { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -n "$tmp" && test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5 + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$tmp/subs1.awk" && +_ACEOF + + +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ + || as_fn_error "could not setup config files machinery" "$LINENO" 5 +_ACEOF + +# VPATH may cause trouble with some makes, so we remove $(srcdir), +# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=/{ +s/:*\$(srcdir):*/:/ +s/:*\${srcdir}:*/:/ +s/:*@srcdir@:*/:/ +s/^\([^=]*=[ ]*\):*/\1/ +s/:*$// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" + +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$tmp/defines.awk" <<\_ACAWK || +BEGIN { +_ACEOF + +# Transform confdefs.h into an awk script `defines.awk', embedded as +# here-document in config.status, that substitutes the proper values into +# config.h.in to produce config.h. + +# Create a delimiter string that does not exist in confdefs.h, to ease +# handling of long lines. +ac_delim='%!_!# ' +for ac_last_try in false false :; do + ac_t=`sed -n "/$ac_delim/p" confdefs.h` + if test -z "$ac_t"; then + break + elif $ac_last_try; then + as_fn_error "could not make $CONFIG_HEADERS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +# For the awk script, D is an array of macro values keyed by name, +# likewise P contains macro parameters if any. Preserve backslash +# newline sequences. + +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +sed -n ' +s/.\{148\}/&'"$ac_delim"'/g +t rset +:rset +s/^[ ]*#[ ]*define[ ][ ]*/ / +t def +d +:def +s/\\$// +t bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3"/p +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p +d +:bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3\\\\\\n"\\/p +t cont +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p +t cont +d +:cont +n +s/.\{148\}/&'"$ac_delim"'/g +t clear +:clear +s/\\$// +t bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/"/p +d +:bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p +b cont +' >$CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { + line = \$ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + as_fn_error "could not setup config headers machinery" "$LINENO" 5 +fi # test -n "$CONFIG_HEADERS" + + +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$tmp/stdin" \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir="$ac_dir"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + esac +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined." >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined." >&2;} + + rm -f "$tmp/stdin" + case $ac_file in + -) cat "$tmp/out" && rm -f "$tmp/out";; + *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; + esac \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 + ;; + :H) + # + # CONFIG_HEADER + # + if test x"$ac_file" != x-; then + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" + } >"$tmp/config.h" \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 + if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} + else + rm -f "$ac_file" + mv "$tmp/config.h" "$ac_file" \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 + fi + else + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error "could not create -" "$LINENO" 5 + fi +# Compute "$ac_file"'s index in $config_headers. +_am_arg="$ac_file" +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || +$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$_am_arg" : 'X\(//\)[^/]' \| \ + X"$_am_arg" : 'X\(//\)$' \| \ + X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$_am_arg" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'`/stamp-h$_am_stamp_count + ;; + + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "depfiles":C) test x"$AMDEP_TRUE" != x"" || { + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir=$dirpart/$fdir; as_fn_mkdir_p + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} + ;; + "libtool":C) + + # See if we are running on zsh, and set the options which allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + + cfgfile="${ofile}T" + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL + +# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008 Free Software Foundation, Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is part of GNU Libtool. +# +# GNU Libtool 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. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, or +# obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + +# The names of the tagged configurations supported by this script. +available_tags="CXX " + +# ### BEGIN LIBTOOL CONFIG + +# Which release of libtool.m4 was used? +macro_version=$macro_version +macro_revision=$macro_revision + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# What type of objects to build. +pic_mode=$pic_mode + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# The host system. +host_alias=$host_alias +host=$host +host_os=$host_os + +# The build system. +build_alias=$build_alias +build=$build +build_os=$build_os + +# A sed program that does not truncate output. +SED=$lt_SED + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="\$SED -e 1s/^X//" + +# A grep program that handles long lines. +GREP=$lt_GREP + +# An ERE matcher. +EGREP=$lt_EGREP + +# A literal string matcher. +FGREP=$lt_FGREP + +# A BSD- or MS-compatible name lister. +NM=$lt_NM + +# Whether we need soft or hard links. +LN_S=$lt_LN_S + +# What is the maximum length of a command? +max_cmd_len=$max_cmd_len + +# Object file suffix (normally "o"). +objext=$ac_objext + +# Executable file suffix (normally ""). +exeext=$exeext + +# whether the shell understands "unset". +lt_unset=$lt_unset + +# turn spaces into newlines. +SP2NL=$lt_lt_SP2NL + +# turn newlines into spaces. +NL2SP=$lt_lt_NL2SP + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# An object symbol dumper. +OBJDUMP=$lt_OBJDUMP + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method == "file_magic". +file_magic_cmd=$lt_file_magic_cmd + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# A symbol stripping program. +STRIP=$lt_STRIP + +# Commands used to install an old-style archive. +RANLIB=$lt_RANLIB +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# A C compiler. +LTCC=$lt_CC + +# LTCC compiler flags. +LTCFLAGS=$lt_CFLAGS + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration. +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair. +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# Transform the output of nm in a C name address pair when lib prefix is needed. +global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# An echo program that does not interpret backslashes. +ECHO=$lt_ECHO + +# Used to examine libraries when file_magic_cmd begins with "file". +MAGIC_CMD=$MAGIC_CMD + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# Tool to manipulate archived DWARF debug symbol files on Mac OS X. +DSYMUTIL=$lt_DSYMUTIL + +# Tool to change global to local symbols on Mac OS X. +NMEDIT=$lt_NMEDIT + +# Tool to manipulate fat objects and archives on Mac OS X. +LIPO=$lt_LIPO + +# ldd/readelf like tool for Mach-O binaries on Mac OS X. +OTOOL=$lt_OTOOL + +# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. +OTOOL64=$lt_OTOOL64 + +# Old archive suffix (normally "a"). +libext=$libext + +# Shared library suffix (normally ".so"). +shrext_cmds=$lt_shrext_cmds + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at link time. +variables_saved_for_relink=$lt_variables_saved_for_relink + +# Do we need the "lib" prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Library versioning type. +version_type=$version_type + +# Shared library runtime path variable. +runpath_var=$runpath_var + +# Shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Command to use after installation of a shared archive. +postinstall_cmds=$lt_postinstall_cmds + +# Command to use after uninstallation of a shared archive. +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# As "finish_cmds", except a single script fragment to be evaled but +# not shown. +finish_eval=$lt_finish_eval + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Compile-time system search path for libraries. +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries. +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + + +# The linker used to build libraries. +LD=$lt_LD + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds + +# A language specific compiler. +CC=$lt_compiler + +# Is the compiler the GNU compiler? +with_gcc=$GCC + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds +archive_expsym_cmds=$lt_archive_expsym_cmds + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds +module_expsym_cmds=$lt_module_expsym_cmds + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec + +# If ld is used when linking, flag to hardcode \$libdir into a binary +# during linking. This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \${shlibpath_var} if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path=$lt_fix_srcfile_path + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action + +# The directories searched by this compiler when creating a shared library. +compiler_lib_search_dirs=$lt_compiler_lib_search_dirs + +# Dependencies to place before and after the objects being linked to +# create a shared library. +predep_objects=$lt_predep_objects +postdep_objects=$lt_postdep_objects +predeps=$lt_predeps +postdeps=$lt_postdeps + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path + +# ### END LIBTOOL CONFIG + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + +ltmain="$ac_aux_dir/ltmain.sh" + + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + case $xsi_shell in + yes) + cat << \_LT_EOF >> "$cfgfile" + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac +} + +# func_basename file +func_basename () +{ + func_basename_result="${1##*/}" +} + +# func_dirname_and_basename file append nondir_replacement +# perform func_basename and func_dirname in a single function +# call: +# dirname: Compute the dirname of FILE. If nonempty, +# add APPEND to the result, otherwise set result +# to NONDIR_REPLACEMENT. +# value returned in "$func_dirname_result" +# basename: Compute filename of FILE. +# value retuned in "$func_basename_result" +# Implementation must be kept synchronized with func_dirname +# and func_basename. For efficiency, we do not delegate to +# those functions but instead duplicate the functionality here. +func_dirname_and_basename () +{ + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac + func_basename_result="${1##*/}" +} + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +func_stripname () +{ + # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are + # positional parameters, so assign one to ordinary parameter first. + func_stripname_result=${3} + func_stripname_result=${func_stripname_result#"${1}"} + func_stripname_result=${func_stripname_result%"${2}"} +} + +# func_opt_split +func_opt_split () +{ + func_opt_split_opt=${1%%=*} + func_opt_split_arg=${1#*=} +} + +# func_lo2o object +func_lo2o () +{ + case ${1} in + *.lo) func_lo2o_result=${1%.lo}.${objext} ;; + *) func_lo2o_result=${1} ;; + esac +} + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=${1%.*}.lo +} + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=$(( $* )) +} + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=${#1} +} + +_LT_EOF + ;; + *) # Bourne compatible functions. + cat << \_LT_EOF >> "$cfgfile" + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + # Extract subdirectory from the argument. + func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` + if test "X$func_dirname_result" = "X${1}"; then + func_dirname_result="${3}" + else + func_dirname_result="$func_dirname_result${2}" + fi +} + +# func_basename file +func_basename () +{ + func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` +} + + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +# func_strip_suffix prefix name +func_stripname () +{ + case ${2} in + .*) func_stripname_result=`$ECHO "X${3}" \ + | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;; + *) func_stripname_result=`$ECHO "X${3}" \ + | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;; + esac +} + +# sed scripts: +my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q' +my_sed_long_arg='1s/^-[^=]*=//' + +# func_opt_split +func_opt_split () +{ + func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"` + func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"` +} + +# func_lo2o object +func_lo2o () +{ + func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"` +} + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[^.]*$/.lo/'` +} + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=`expr "$@"` +} + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` +} + +_LT_EOF +esac + +case $lt_shell_append in + yes) + cat << \_LT_EOF >> "$cfgfile" + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "$1+=\$2" +} +_LT_EOF + ;; + *) + cat << \_LT_EOF >> "$cfgfile" + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "$1=\$$1\$2" +} + +_LT_EOF + ;; + esac + + + sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" + + + cat <<_LT_EOF >> "$ofile" + +# ### BEGIN LIBTOOL TAG CONFIG: CXX + +# The linker used to build libraries. +LD=$lt_LD_CXX + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds_CXX + +# A language specific compiler. +CC=$lt_compiler_CXX + +# Is the compiler the GNU compiler? +with_gcc=$GCC_CXX + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl_CXX + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic_CXX + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static_CXX + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc_CXX + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object_CXX + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds_CXX +archive_expsym_cmds=$lt_archive_expsym_cmds_CXX + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds_CXX +module_expsym_cmds=$lt_module_expsym_cmds_CXX + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld_CXX + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag_CXX + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag_CXX + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX + +# If ld is used when linking, flag to hardcode \$libdir into a binary +# during linking. This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct_CXX + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \${shlibpath_var} if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute_CXX + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L_CXX + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic_CXX + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath_CXX + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs_CXX + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path=$lt_fix_srcfile_path_CXX + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols_CXX + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds_CXX + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms_CXX + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms_CXX + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds_CXX + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec_CXX + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action_CXX + +# The directories searched by this compiler when creating a shared library. +compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX + +# Dependencies to place before and after the objects being linked to +# create a shared library. +predep_objects=$lt_predep_objects_CXX +postdep_objects=$lt_postdep_objects_CXX +predeps=$lt_predeps_CXX +postdeps=$lt_postdeps_CXX + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path_CXX + +# ### END LIBTOOL TAG CONFIG: CXX +_LT_EOF + + ;; + + esac +done # for ac_tag + + +as_fn_exit 0 +_ACEOF +ac_clean_files=$ac_clean_files_save + +test $ac_write_fail = 0 || + as_fn_error "write failure creating $CONFIG_STATUS" "$LINENO" 5 + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || as_fn_exit $? +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} +fi + + +######## Show a configuration report ######## +if test -n "$JADE"; then + jade_report="$JADE"; +else + jade_report="not present" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: + QTDIR $QTDIR + QTDIR_INC $QTDIR_INC + QTDIR_BIN $QTDIR_BIN + QT_LIBS $QT_LIBS + + MusE configured + + LASH support: $LASH_FOUND + OSC support: $OSC + DSSI support: $DSSI + FluidSynth: $muse_enable_fluidlib + + jade: $jade_report + doxygen: $DOXYGEN + graphviz: $DOT + perl: $PERL + treeviews in doxygen + html output: $report_doxy_treeview + + C++ compiler: $CXX + optimizing: $report_optimise + debug: $report_debug + optimise for arch: $report_march + SSE optimizations $report_sse + python bindings: $enable_python + + installation prefix: $prefix + + Deprecated: + --------------------------------------------------- + using rtcap: $report_rtcap + setuid root install: $SUIDINSTALL + setuid root build: $SUIDBUILD + VST/win support: $VST + +" >&5 +$as_echo "$as_me: + QTDIR $QTDIR + QTDIR_INC $QTDIR_INC + QTDIR_BIN $QTDIR_BIN + QT_LIBS $QT_LIBS + + MusE configured + + LASH support: $LASH_FOUND + OSC support: $OSC + DSSI support: $DSSI + FluidSynth: $muse_enable_fluidlib + + jade: $jade_report + doxygen: $DOXYGEN + graphviz: $DOT + perl: $PERL + treeviews in doxygen + html output: $report_doxy_treeview + + C++ compiler: $CXX + optimizing: $report_optimise + debug: $report_debug + optimise for arch: $report_march + SSE optimizations $report_sse + python bindings: $enable_python + + installation prefix: $prefix + + Deprecated: + --------------------------------------------------- + using rtcap: $report_rtcap + setuid root install: $SUIDINSTALL + setuid root build: $SUIDBUILD + VST/win support: $VST + +" >&6;} + diff --git a/muse2/configure.ac b/muse2/configure.ac new file mode 100644 index 00000000..7fa05361 --- /dev/null +++ b/muse2/configure.ac @@ -0,0 +1,817 @@ +dnl -------------------------------------------------- +dnl configure.ac for the MusE +dnl -------------------------------------------------- + +AC_INIT(MusE, 1.1) +AC_CONFIG_SRCDIR(muse/app.cpp) +AM_INIT_AUTOMAKE(1.1) +AM_CONFIG_HEADER(config.h) +### AM_MAINTAINER_MODE +AM_ACLOCAL_INCLUDE(m4) + +dnl ***** Check for programs ***** +AC_PROG_CXX +AC_PROG_LIBTOOL +AC_PROG_LN_S + +############### +### DocBook ### +############### +PGAC_PROG_JADE +if test -n "$JADE"; then + PGAC_CHECK_DOCBOOK(4.1) + if test "$pgac_cv_check_docbook" = "yes"; then + PGAC_PATH_DOCBOOK_STYLESHEETS + if test -n "$DOCBOOKSTYLE"; then + DOCBOOKTARGETS="book1.html" + else + AC_MSG_WARN([DocBook stylesheets not found or not usable - documentation will not be built]) + fi + else + AC_MSG_WARN([DocBook 4.1 DTD not found or not usable - documentation will not be built]) + fi +else + AC_MSG_WARN([jade not found - documentation will not be built]) +fi +AC_SUBST(DOCBOOKTARGETS) + +############### +### doxygen ### +############### +AC_ARG_VAR(DOXYGEN, Doxygen) +AC_PATH_PROG(DOXYGEN, doxygen, no) + +################ +### graphviz ### +################ +AC_ARG_VAR(DOT, The "dot" program from graphviz) +AC_PATH_PROG(DOT, dot, no) +if test "$DOT" != "no"; then + HAVEDOT=YES + DOTPATH=$( dirname "$DOT" ) +else + HAVEDOT=NO +fi +AC_SUBST(HAVEDOT) +AC_SUBST(DOTPATH) + +############ +### perl ### +############ +AC_ARG_VAR(PERL, Perl) +AC_PATH_PROG(PERL, perl, no) +if test "$PERL" == "no"; then + AC_MSG_WARN([you don't have perl installed! wierdo! (and doxygen might not like this)]) +fi + +dnl ***** Check for libraries ***** + +######### +### X ### +######### +AC_PATH_XTRA +if test "$X_DISPLAY_MISSING" != ""; then + AC_MSG_ERROR([X required]) +fi + + + +########## +### QT ### +########## +#CONFIGURE_QT(3.2.0, , AC_MSG_ERROR([need qt >= 3.2.0])) +#if test "$muse_qttest" = "yes"; then +# AC_LANG_PUSH([C++]) +# muse_save_CFLAGS="$CFLAGS" +# CFLAGS="$CFLAGS $QT_CFLAGS" +# muse_save_CXXFLAGS="$CXXFLAGS" +# CXXFLAGS="$CXXFLAGS $QT_CFLAGS" +# muse_save_LDFLAGS="$LDFLAGS" +# LDFLAGS="$LDFLAGS $QT_LIBS" +# AC_CHECK_LIB(qt-mt, qt_selection_property, [ +# true +# ],[ +# AC_MSG_ERROR([ +# +# MusE requires thread enabled QT (qt-mt) >= 3.2.0 +# +# You can either compile your own version of QT (making sure you enable +# threading!) or install the appropriate package for your distribution. +#]) +# ]) +# CFLAGS="$muse_save_CFLAGS" +# CXXFLAGS="$muse_save_CXXFLAGS" +# LDFLAGS="$muse_save_LDFLAGS" +# unset muse_save_CFLAGS +# unset muse_save_CXXFLAGS +# unset muse_save_LDFLAGS +# AC_LANG_POP([C++]) +#fi + +QTDIR=/usr/share/qt4 + +AC_MSG_RESULT($QTDIR) +AC_PATH_XTRA +QT_LIBS="-Wl,-rpath,$QTDIR/lib -L$QTDIR/lib -lQtGui -lQtOpenGL -lQtCore -lQt3Support $X_LIBS -lX11 -lXext -lXmu -lXt -lXi $X_EXTRA_LIBS -lGLU -lGL -lpthread" +QTDIR_INC="-I$QTDIR/include -I$QTDIR/include/QtGui -I$QTDIR/include/QtCore -I$QTDIR/include/Qt3Support $X_CFLAGS -DQT_OPENGL_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED" +QTDIR_BIN="$QTDIR/bin" + + +############ +### ALSA ### +############ +AM_PATH_ALSA(0.9.0, + true, + AC_MSG_ERROR([latest alsa (0.9.x) is required]) +) + +################# +### fluidsynth ### +################# +LIBFLUIDSYNTH= +muse_enable_fluidlib="yes" +synth_fluidsynth="fluidsynth" +synth_fluid="fluid" +AC_ARG_ENABLE(fluidsynth,[ --disable-fluidsynth disable fluidsynth softsynth plugin],[ + case "$enableval" in + "yes") + synth_fluidsynth="fluidsynth" + synth_fluid="fluid" + ;; + "no") + muse_enable_fluidlib="no" + synth_fluidsynth="" + synth_fluid="" + ;; + *) + AC_MSG_ERROR([must use --enable-fluidsynth(=yes/no) or --disable-fluidsynth]) + ;; + esac +]) + +AM_CONDITIONAL(ENABLEFLUIDSYNTH, test "$muse_enable_fluidlib" = "yes") +PKG_CHECK_MODULES(Fluidsynth, fluidsynth, + [FLUIDSYNTHDIRS="fluid fluidsynth"; AC_DEFINE(ENABLEFLUIDSYNTH, 1, [Compile fluidsynth])], + [AC_MSG_WARN([libfluidsynth not found; disabling fluidsynth plugins]) ; + muse_enable_fluidlib="no"] + ) +AC_SUBST(FLUIDSYNTHDIRS) +AC_SUBST(synth_fluidsynth) +AC_SUBST(synth_fluid) +if test "$muse_enable_fluidlib" = "no"; then + synth_fluidsynth="" + synth_fluid="" +fi + + +############### +### sndfile ### +############### +PKG_CHECK_MODULES(SNDFILE, sndfile >= 1.0.0, + true, + AC_MSG_ERROR([need libsndfile >= 1.0.0]) +) + +############### +### libsamplerate ### +############### +PKG_CHECK_MODULES(SAMPLERATE, samplerate >= 0.1.0, + true, + AC_MSG_ERROR([need libsamplerate]) +) + +############### +### libuuid ### +############### +AC_CHECK_HEADER(uuid/uuid.h, UUID_FOUND="yes", UUID_FOUND="no") +if test x$UUID_FOUND = xno; then + AC_MSG_ERROR([Header file uuid.h, from the uuid-dev (sometimes in e2fsprogs) package, is required]) +fi + +AC_CHECK_LIB(uuid, uuid_generate, UUID_FOUND="yes", UUID_FOUND="no") +if test x$UUID_FOUND = xno; then + AC_MSG_ERROR([libuuid (sometimes in e2fsprogs package) is required]) +fi +UUID_LIBS="-luuid" +AC_SUBST(UUID_CFLAGS) +AC_SUBST(UUID_LIBS) + +## PKG_CHECK_MODULES(UUID, uuid >= 1.0, +## true, +## AC_MSG_ERROR([need libuuid >= 1.0 from e2fsprogs package]) +## ) + +############ +### JACK ### +############ + +PKG_CHECK_MODULES(JACK, + jack >= 0.98.0, + true, + AC_MSG_ERROR([need JACK >= 0.98.0]) + ) + +############## +### LASH ### +############## +muse_enable_lash="no" +AC_ARG_ENABLE(lash, + [ --enable-lash enable LASH support],[ + case "$enableval" in + "yes") + muse_enable_lash="yes" + ;; + "no") + muse_enable_lash="no" + ;; + *) + AC_MSG_ERROR([must use --enable-lash(=yes/no) or --disable-lash]) + ;; + esac +]) + +if test "$muse_enable_lash" = "yes"; then + PKG_CHECK_MODULES(LASH, lash-1.0 >= 0.2, LASH_FOUND="yes", LASH_FOUND="no") + AC_SUBST(LASH_CFLAGS) + AC_SUBST(LASH_LIBS) + + if test "$LASH_FOUND" = "yes"; then + AC_DEFINE(HAVE_LASH, 1, [whether or not we are supporting lash]) + LASH_VERSION=$( pkg-config --modversion lash-1.0 ) + AC_DEFINE_UNQUOTED(LASH_VERSION, "$LASH_VERSION", [The version of lash we're compiling against]) + fi +else + AC_MSG_WARN([LASH support is disabled]) + LASH_FOUND="no" +fi +AM_CONDITIONAL(HAVE_LASH, test "$LASH_FOUND" = "yes") + + +dnl ***** Check for header files ***** + +dnl ***** Check for options ***** + +################# +### givertcap ### +################# + +GIVERTCAP= +report_rtcap="no" +AC_ARG_ENABLE(rtcap, + [ --enable-rtcap (deprecated) use Tommi Ilmonen's "givertcap" to give + realtime capabilities],[ + case "$enableval" in + "yes") + AC_DEFINE(RTCAP, 1, [Use givertcap]) + MUSECXXFLAGS="$MUSECXXFLAGS -DRTCAP" + GIVERTCAP="givertcap" + + AC_CHECK_HEADER(sys/capability.h, + report_rtcap="yes", + AC_MSG_ERROR([Missing sys/capability.h])) + ;; + "no") + ;; + *) + AC_MSG_ERROR([must use --enable-rtcap(=yes/no) or --disable-rtcap]) + esac +]) +AM_CONDITIONAL(RTCAP, test "$report_rtcap" = "yes") +AC_SUBST(GIVERTCAP) + + +#################### +### suid-install ### +#################### + +SUIDINSTALL="no" +AC_ARG_ENABLE(suid-install, + [ --enable-suid-install (deprecated) install MusE setuid root (with kernel 2.6, use realtime-lsm instead)],[ + case "$enableval" in + "yes") + SUIDINSTALL="yes" + ;; + "no") + ;; + *) + AC_MSG_ERROR([must use --enable-suid-install(=yes/no) or --disable-suid-install]) + ;; + esac +]) +AC_SUBST(SUIDINSTALL) + +################## +### suid-build ### +################## +SUIDBUILD="no" +AC_ARG_ENABLE(suid-build, + [ --enable-suid-build (deprecated) build MusE setuid root(with kernel 2.6, use realtime-lsm instead)],[ + case "$enableval" in + "yes") + SUIDBUILD="yes" + ;; + "no") + SUIDBUILD="no" + ;; + *) + AC_MSG_ERROR([must use --enable-suid-build(=yes/no) or --disable-suid-build]) + ;; + esac +]) +AC_SUBST(SUIDBUILD) + + +######################## +### doxygen-treeview ### +######################## +DOXYGEN_TREEVIEW="YES" +report_doxy_treeview="yes"; +AC_ARG_ENABLE(doxy-treeview, + [ --disable-doxy-treeview stop Doxygen from generating java-ified + treeview menus in its HTML output],[ + case "$enableval" in + "yes") + ;; + "no") + DOXYGEN_TREEVIEW="NO" + report_doxy_treeview="no"; + ;; + *) + AC_MSG_ERROR([must use --enable-doxy-treeview(=yes/no) or --disable-doxy-treeview]) + ;; + esac +]) +AC_SUBST(DOXYGEN_TREEVIEW) + +################ +### patchbay ### +################ +###PATCHBAY="no" +###AC_SUBST(PATCHBAY) +###AM_CONDITIONAL(PATCHBAY, test "$PATCHBAY" == "yes") + +## -DQT_NO_CAST_ASCII +MUSECXXFLAGS="-g -fno-exceptions -Wall -W -D_GNU_SOURCE -D_REENTRANT \ + -DQT_CLEAN_NAMESPACE -DQT_NO_COMPAT \ + -I\$(top_srcdir) -I\$(top_srcdir)/muse/widgets \$(QT_CFLAGS)" + +#MUSEOPTCXXFLAGS="-O6 -fomit-frame-pointer -ffast-math -fstrength-reduce \ +#-funroll-loops" +#MUSEOPTCXXFLAGS="-O2" +MUSEOPTCXXFLAGS="-O3 -fomit-frame-pointer -ffast-math -fstrength-reduce -funroll-loops" + +# -fmove-all-movables + +################ +### optimize ### +################ +report_optimise="no" +AC_ARG_ENABLE(optimize, + [ --enable-optimize ask the compiler for its best optimizations (possibly only i386)],[ + case "$enableval" in + "yes") + report_optimise="yes" + CXXFLAGS="$( echo "$CXXFLAGS" | sed "s/-O.[ ]*//" )" + MUSECXXFLAGS="$MUSECXXFLAGS $MUSEOPTCXXFLAGS" + ;; + "no") + ;; + *) + AC_MSG_ERROR([must use --enable-optimize(=yes/no) or --disable-optimize]) + ;; + esac + ]) + +############# +### debug ### +############# +report_debug="no" +AC_ARG_ENABLE(debug, + [ --enable-debug disable optimizations],[ + case "$enableval" in + "yes") + report_debug="yes" + CXXFLAGS="" + ;; + "no") + ;; + *) + AC_MSG_ERROR([must use --enable-debug(=yes/no) or --disable-debug]) + ;; + esac + ]) + +########################### +### PCH ### +### precompiled headers ### +########################### + +AC_ARG_ENABLE(pch, + [ --enable-pch enable precompiled headers (gcc 3.4 required)],[ + case "$enableval" in + "yes") + MUSECXXFLAGS="$MUSECXXFLAGS -Winvalid-pch" + PCH="yes" + AC_SUBST(PCH) + AC_DEFINE(PCH, 1, [whether or not we use precompiled headers]) + ;; + "no") + ;; + *) + AC_MSG_ERROR([must use --enable-pch(=yes/no) or --disable-pch]) + ;; + esac + ]) +AM_CONDITIONAL(PCH, test "$PCH" = "yes") + +############ +### arch ### +############ + +report_march="none" +AC_ARG_ENABLE(arch, +[ --enable-arch=ARCH use -march=ARCH and -mtune=ARCH argument to CXX + choose from any supported gcc architecture such as: + 386, 486, 586, 686, pentium, pentiumpro, k6, athlon...],[ + case "$enableval" in + "no") + ;; + *) + report_march="$enableval" + MUSECXXFLAGS="$MUSECXXFLAGS -mtune=$enableval -march=$enableval" + ;; + esac + ]) + +########################### +### SSE ### +### SSE optimizations ### +########################### + +report_sse="no" +AC_ARG_ENABLE(sse, + [ --enable-sse enable SSE optimizations],[ + case "$enableval" in + "yes") + ## MUSECXXFLAGS="$MUSECXXFLAGS -Winvalid-pch" + report_sse="yes" + USE_SSE="yes" + AC_SUBST(USE_SSE) + AC_DEFINE(USE_SSE, 1, [whether or not to enable SSE]) + ;; + "no") + ;; + *) + AC_MSG_ERROR([must use --enable-sse(=yes/no) or --disable-sse]) + ;; + esac + ]) +AM_CONDITIONAL(USE_SSE, test "$USE_SSE" = "yes") + +########## +# PYTHON # +########## +# python detection borrowed from libvirt (http://libvirt.org) +AC_ARG_WITH([python], +[ --enable-python Build python bindings (on)],[],[enable_python=yes]) + +PYTHON_VERSION= +PYTHON_INCLUDES= +if test "$enable_python" != "no" ; then + if test -x "$enable_python/bin/python" + then + AC_MSG_NOTICE(Found python in $enable_python/bin/python) + PYTHON="$enable_python/bin/python" + enable_python=yes + else + if test -x "$enable_python" + then + AC_MSG_NOTICE(Found python in $enable_python) + PYTHON="$enable_python" + enable_python=yes + else + if test -x "$PYTHON" + then + AC_MSG_NOTICE(Found python in environment PYTHON=$PYTHON) + enable_python=yes + fi + fi + fi + + if test "$enable_python" == "yes" ; then + AM_PATH_PYTHON(,, [:]) + + if test "$PYTHON" != : ; then + PYTHON_CONFIG="$PYTHON-config" + + if test -x "$PYTHON_CONFIG" + then + PYTHON_INCLUDES=`$PYTHON_CONFIG --includes` + PYTHON_LIB=`$PYTHON_CONFIG --libs` + else + if test -r $PYTHON_EXEC_PREFIX/include/python$PYTHON_VERSION/Python.h + then + PYTHON_INCLUDES=-I$PYTHON_EXEC_PREFIX/include/python$PYTHON_VERSION + else + if test -r $prefix/include/python$PYTHON_VERSION/Python.h + then + PYTHON_INCLUDES=-I$prefix/include/python$PYTHON_VERSION + else + if test -r /usr/include/python$PYTHON_VERSION/Python.h + then + PYTHON_INCLUDES=-I/usr/include/python$PYTHON_VERSION + else + AC_MSG_NOTICE([Could not find python$PYTHON_VERSION/Python.h, disabling bindings]) + enable_python=no + fi + fi + fi + fi + else + AC_MSG_NOTICE([Could not find python interpreter, disabling bindings]) + enable_python=no + fi + else + AC_MSG_NOTICE([Could not find python in $enable_python, disabling bindings]) + enable_python=no + fi +fi +AM_CONDITIONAL(ENABLE_PYTHON, test "$enable_python" = "yes") +AC_SUBST([PYTHON_VERSION]) +AC_SUBST([PYTHON_INCLUDES]) +AC_SUBST([PYTHON_LIB]) + +#AC_ARG_ENABLE(python, +#enable_python="yes" +# [ --disable-python disable python bindings for MusE],[ +# case "$enableval" in +# "no") +# enable_python="no" +# ;; +# *) +# AC_MSG_ERROR([must use --enable-python(=yes/no) or --disable-python]) +# ;; +# esac +# ]) +# +#if test "$enable_python" = "yes"; then +# AM_PATH_PYTHON +# PYTHON_INCLUDE_DIR="" +# if test -n "$PYTHON_INCLUDES" ; then +# PYTHON_INCLUDE_DIR=$PYTHON_INCLUDES +# python_bindings="yes" +# else +# python_bindings="no - devel pkg not found" +# fi +#fi +#AM_CONDITIONAL(ENABLE_PYTHON, test "$python_bindings" = "yes") + +################### +### vst plugins ### +################### + +vst_possible=no +VST="no" +AC_ARG_ENABLE(vst,[ --enable-vst (deprecated, use dssi) build VST/win support. (disabled by default) ], + [ if test x$enable_vst = xyes ; then + vst_requested=yes; + fi + ] +) + +if test x$vst_requested = xyes ; then + PKG_CHECK_MODULES(FST,libfst, [ vst_possible=yes ], [ vst_possible=no ]) +fi + +if test x$vst_possible = xyes -a x$vst_requested = xyes ; then + AC_MSG_CHECKING([support for VST/win plugins]) + VST_CFLAGS="$FST_CFLAGS" + VST_LIBS="$FST_LIBS" + VST="yes" + AC_DEFINE(VST_SUPPORT, 1, [support for VST/win plugins]) +fi + +AM_CONDITIONAL(VST_SUPPORT, test x$vst_possible = xyes -a x$vst_requested = xyes) + + +################### +### OSC support ### +################### + +osc_requested=no +LO_LIB_FOUND="no" +OSC="no" +AC_ARG_ENABLE(osc,[ --enable-osc build OSC support. (disabled by default) + --enable-dssi is also recommended! ], + [ if test x$enable_osc = xyes ; then + osc_requested=yes; + fi + ] +) + +if test x$osc_requested = xyes ; then + AC_MSG_CHECKING([support for OSC]) +## AC_CHECK_LIB(lo, lo_send, LO_LIB_FOUND="yes", LO_LIB_FOUND="no") +## PKG_CHECK_MODULES(LO, lo >= 0.2, LO_LIB_FOUND="yes", LO_LIB_FOUND="no") + PKG_CHECK_MODULES(LO,liblo, [ LO_LIB_FOUND=yes ], [ LO_LIB_FOUND=no ]) + if test x$LO_LIB_FOUND = xno; then + AC_MSG_ERROR([Library liblo from The Lightweight OSC Implementation is required]) + fi +fi + +if test x$LO_LIB_FOUND = xyes ; then + LO_CFLAGS="$LO_CFLAGS" + ##LO_LIBS="$LO_LIBS" + LO_LIBS="-llo" + OSC="yes" + AC_SUBST(LO_CFLAGS) + AC_SUBST(LO_LIBS) + AC_DEFINE(OSC_SUPPORT, 1, [support for OSC]) +fi + +AM_CONDITIONAL(OSC_SUPPORT, test x$LO_LIB_FOUND = xyes) + +## LO_LIBS="-llo" +## AC_SUBST(LO_CFLAGS) +## AC_SUBST(LO_LIBS) + +## PKG_CHECK_MODULES(LO, lo >= 0.23, +## true, +## AC_MSG_ERROR([need liblo >= 0.23 ]) +## ) + + + +################### +### dssi plugins ### +################### + +dssi_requested=no +## LO_LIB_FOUND="no" +DSSI_H_FOUND="no" +DSSI="no" +AC_ARG_ENABLE(dssi,[ --enable-dssi build DSSI + DSSI-Vst support. (disabled by default) + --enable-osc is also recommended! ], + [ if test x$enable_dssi = xyes ; then + dssi_requested=yes; + fi + ] +) + + +if test x$dssi_requested = xyes ; then + AC_MSG_CHECKING([support for DSSI + DSSI-Vst plugins]) + ## AC_CHECK_LIB(lo, lo_send, LO_LIB_FOUND="yes", LO_LIB_FOUND="no") + ## PKG_CHECK_MODULES(LO, lo >= 0.2, LO_LIB_FOUND="yes", LO_LIB_FOUND="no") +## PKG_CHECK_MODULES(LO,liblo, [ LO_LIB_FOUND=yes ], [ LO_LIB_FOUND=no ]) +## if test x$LO_LIB_FOUND = xno; then +## AC_MSG_ERROR([Library liblo from The Lightweight OSC Implementation is required]) +## fi + + AC_CHECK_HEADER(dssi.h, DSSI_FOUND="yes", DSSI_FOUND="no") + ## PKG_CHECK_MODULES(DSSI [ DSSI_FOUND=yes ], [ DSSI_FOUND=no ]) + if test x$DSSI_FOUND = xno; then + AC_MSG_ERROR([Header file dssi.h from DSSI (Disposable Soft Synth Interface) is required]) + fi +fi + +## if test x$LO_LIB_FOUND = xyes -a x$DSSI_FOUND = xyes ; then +if test x$DSSI_FOUND = xyes ; then +## LO_CFLAGS="$LO_CFLAGS" + ##LO_LIBS="$LO_LIBS" +## LO_LIBS="-llo" + DSSI="yes" +## AC_SUBST(LO_CFLAGS) +## AC_SUBST(LO_LIBS) + AC_DEFINE(DSSI_SUPPORT, 1, [support for DSSI + DSSI-Vst plugins]) +fi + +## AM_CONDITIONAL(DSSI_SUPPORT, test x$LO_LIB_FOUND = xyes -a x$DSSI_FOUND = xyes) +AM_CONDITIONAL(DSSI_SUPPORT, test x$DSSI_FOUND = xyes) + +## LO_LIBS="-llo" +## AC_SUBST(LO_CFLAGS) +## AC_SUBST(LO_LIBS) + +## PKG_CHECK_MODULES(LO, lo >= 0.23, +## true, +## AC_MSG_ERROR([need liblo >= 0.23 ]) +## ) + + + + +###################################### + + +AC_DEFINE(HAVE_AUDIO, 1, [Make audio-specific code]) +AM_CONDITIONAL(HAVE_AUDIO, test "yes" = "yes") +AC_SUBST(MUSECXXFLAGS) +AC_SUBST(QTDIR_INC) +AC_SUBST(QT_LIBS) +AC_SUBST(QTDIR_BIN) + +if test -n "$GIVERTCAP"; then + SUIDINSTALL="no" + SUIDBUILD="no" + fi + + +AC_OUTPUT([ +Makefile +m4/Makefile +al/Makefile +doc/Makefile +xpm/Makefile +demos/Makefile +grepmidi/Makefile +packaging/Makefile +muse/Makefile +muse/widgets/Makefile +muse/master/Makefile +muse/midiedit/Makefile +muse/arranger/Makefile +muse/liste/Makefile +muse/driver/Makefile +muse/waveedit/Makefile +muse/ctrl/Makefile +muse/instruments/Makefile +muse/mixer/Makefile +muse/cliplist/Makefile +muse/marker/Makefile +muse/mplugins/Makefile +muse/remote/Makefile +share/Makefile +share/drummaps/Makefile +share/html/Makefile +share/locale/Makefile +share/wallpapers/Makefile +share/instruments/Makefile +share/plugins/Makefile +share/templates/Makefile +share/pybridge/Makefile +share/scripts/Makefile +synti/Makefile +synti/libsynti/Makefile +synti/fluidsynth/Makefile +synti/fluid/Makefile +synti/organ/Makefile +synti/s1/Makefile +synti/vam/Makefile +synti/deicsonze/Makefile +synti/simpledrums/Makefile +lib/Makefile +lib/synthi/Makefile +lib/plugins/Makefile +plugins/Makefile +plugins/freeverb/Makefile +plugins/pandelay/Makefile +plugins/doublechorus/Makefile +Doxyfile +utils/Makefile +]) + +######## Show a configuration report ######## +if test -n "$JADE"; then + jade_report="$JADE"; +else + jade_report="not present" +fi +AC_MSG_NOTICE([ + QTDIR $QTDIR + QTDIR_INC $QTDIR_INC + QTDIR_BIN $QTDIR_BIN + QT_LIBS $QT_LIBS + + MusE configured + + LASH support: $LASH_FOUND + OSC support: $OSC + DSSI support: $DSSI + FluidSynth: $muse_enable_fluidlib + + jade: $jade_report + doxygen: $DOXYGEN + graphviz: $DOT + perl: $PERL + treeviews in doxygen + html output: $report_doxy_treeview + + C++ compiler: $CXX + optimizing: $report_optimise + debug: $report_debug + optimise for arch: $report_march + SSE optimizations $report_sse + python bindings: $enable_python + + installation prefix: $prefix + + Deprecated: + --------------------------------------------------- + using rtcap: $report_rtcap + setuid root install: $SUIDINSTALL + setuid root build: $SUIDBUILD + VST/win support: $VST + +]) + diff --git a/muse2/demos/Makefile.am b/muse2/demos/Makefile.am new file mode 100644 index 00000000..c0a4c0bb --- /dev/null +++ b/muse2/demos/Makefile.am @@ -0,0 +1 @@ +EXTRA_DIST = rasen.med diff --git a/muse2/demos/Makefile.in b/muse2/demos/Makefile.in new file mode 100644 index 00000000..5dde5fa7 --- /dev/null +++ b/muse2/demos/Makefile.in @@ -0,0 +1,415 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = demos +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal-include.m4 \ + $(top_srcdir)/m4/alsa.m4 $(top_srcdir)/m4/docbook.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DOCBOOKSTYLE = @DOCBOOKSTYLE@ +DOCBOOKTARGETS = @DOCBOOKTARGETS@ +DOT = @DOT@ +DOTPATH = @DOTPATH@ +DOXYGEN = @DOXYGEN@ +DOXYGEN_TREEVIEW = @DOXYGEN_TREEVIEW@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FLUIDSYNTHDIRS = @FLUIDSYNTHDIRS@ +FST_CFLAGS = @FST_CFLAGS@ +FST_LIBS = @FST_LIBS@ +Fluidsynth_CFLAGS = @Fluidsynth_CFLAGS@ +Fluidsynth_LIBS = @Fluidsynth_LIBS@ +GIVERTCAP = @GIVERTCAP@ +GREP = @GREP@ +HAVEDOT = @HAVEDOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_LIBS = @JACK_LIBS@ +JADE = @JADE@ +LASH_CFLAGS = @LASH_CFLAGS@ +LASH_LIBS = @LASH_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LO_CFLAGS = @LO_CFLAGS@ +LO_LIBS = @LO_LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MUSECXXFLAGS = @MUSECXXFLAGS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NSGMLS = @NSGMLS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PCH = @PCH@ +PERL = @PERL@ +PKG_CONFIG = @PKG_CONFIG@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIB = @PYTHON_LIB@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QTDIR_BIN = @QTDIR_BIN@ +QTDIR_INC = @QTDIR_INC@ +QT_LIBS = @QT_LIBS@ +RANLIB = @RANLIB@ +SAMPLERATE_CFLAGS = @SAMPLERATE_CFLAGS@ +SAMPLERATE_LIBS = @SAMPLERATE_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ +SNDFILE_LIBS = @SNDFILE_LIBS@ +STRIP = @STRIP@ +SUIDBUILD = @SUIDBUILD@ +SUIDINSTALL = @SUIDINSTALL@ +USE_SSE = @USE_SSE@ +UUID_CFLAGS = @UUID_CFLAGS@ +UUID_LIBS = @UUID_LIBS@ +VERSION = @VERSION@ +XMKMF = @XMKMF@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +have_docbook = @have_docbook@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +synth_fluid = @synth_fluid@ +synth_fluidsynth = @synth_fluidsynth@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +EXTRA_DIST = rasen.med +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu demos/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu demos/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + distclean distclean-generic distclean-libtool distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/muse2/demos/rasen.med b/muse2/demos/rasen.med new file mode 100644 index 00000000..244a2158 --- /dev/null +++ b/muse2/demos/rasen.med @@ -0,0 +1,377 @@ + + + + + + 128 + 1 + Maestro3 + Maestro3 + 1 + 384 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 127 + 127 + Windows + Arial,10,-1,5,50,0,0,0,0,0 + arial,8,-1,5,50,0,0,0,0,0 + arial,10,-1,5,50,0,0,0,0,0 + arial,10,-1,5,75,0,0,0,0,0 + arial,8,-1,5,75,0,0,0,0,0 + Lucidatypewriter,14,-1,5,75,0,0,0,0,0 + + 0 + 1 + -1 + 1 + 00:00:00:00:00 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + + /usr/kde2/share/wallpapers/Paper01.jpg + + + lpr - + gv %s & + mops.ps + + + + + + + + + + + + serial1 + /dev/cua/0 + 1 + 15 + 0 + 1 + + + 1 + 347 247 + +
7 6 5 4 3 2 1 0 8
+
+ 3 + 5 + /usr/share/muse/wallpapers/stone1.gif + 0 + 355 + 0 + 1 + 0 +
+ + + 2 + 63 + 127 + 63 + 70 + 9 + 0 + 1 + 1 + 4 + 4 + 0 + 0 + 1 + 0 + + 0 + 28 + 31 + 33 + 29 + + + 2 + Master + 0.000000 + 0.000000 + 0 + 0 + 0 + 0 + + + + + 2 + Master + 0.000000 + 0.000000 + 0 + 0 + 0 + 0 + + + + + 2 + Master + 0.000000 + 0.000000 + 0 + 0 + 1 + 0 + + + + + 2 + Master + 0.000000 + 0.000000 + 0 + 0 + 1 + 0 + + + + + 2 + 1.000000 + 0.000000 + 0 + 0 + 1 + 0 + + + + + 2 + Master + 0.000000 + 0.000000 + 1 + 0 + 0 + 0 + + + + + 96 + 96 + 600 + 400 + + + 96 + 96 + 80 + 50 + 0 + 0 + 600 + 400 + 0 + + + 0 + + + 96 + 96 + + + + 600 + 400 + +
+ + Auf dem grünen Rasen + Kinderlied + + + + + + + 0 + 1 + 210.000000 + 297.000000 + 10.000000 + 10.000000 + 10.000000 + 10.000000 + 4 + 1.000000 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 12288 + 1 + + + 0 + 0 + 1 + 0 + piano + 0 + 1 + + thats all + + 1 + 0 + + + Auf + + + dem + + + + grü + + + nen + + + + Ra- + + + sen, + + + + wo + + + die + + + + Veil- + + + chen + + + + blühn, + + + + geht + + + mein + + + + Schäf + + + chen + + + + gra- + + + + sen, + + + + in + + + dem + + + + fri- + + + schen + + + + Grün. + + + + + 0 + 0 + + + 4 + 0 + + 384 + 384 + 1 + 60 + 0 + 0 + 0 + 100 + 100 + 0 + 0 + 1 + 0 + + + + 0 + 500000 + + + + + 0 + 4 + 4 + + + Master + + 3840 + 12288 + 0 + + +
diff --git a/muse2/depcomp b/muse2/depcomp new file mode 120000 index 00000000..b0ad20c0 --- /dev/null +++ b/muse2/depcomp @@ -0,0 +1 @@ +/usr/share/automake-1.11/depcomp \ No newline at end of file diff --git a/muse2/doc/Makefile.am b/muse2/doc/Makefile.am new file mode 100644 index 00000000..50a9d8d8 --- /dev/null +++ b/muse2/doc/Makefile.am @@ -0,0 +1,13 @@ +EXTRA_DIST = midieditfunctions.png muse.sgm + +CLEANFILES = $(wildcard *.html) $(wildcard *.fot) doxygen-stamp + +all-local: @DOCBOOKTARGETS@ + +manual: book1.html + +book1.html: muse.sgm + $(JADE) -t sgml -d @DOCBOOKSTYLE@/html/docbook.dsl muse.sgm + +distclean-local: + rm -rf html/ diff --git a/muse2/doc/Makefile.in b/muse2/doc/Makefile.in new file mode 100644 index 00000000..bc152692 --- /dev/null +++ b/muse2/doc/Makefile.in @@ -0,0 +1,428 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = doc +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal-include.m4 \ + $(top_srcdir)/m4/alsa.m4 $(top_srcdir)/m4/docbook.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DOCBOOKSTYLE = @DOCBOOKSTYLE@ +DOCBOOKTARGETS = @DOCBOOKTARGETS@ +DOT = @DOT@ +DOTPATH = @DOTPATH@ +DOXYGEN = @DOXYGEN@ +DOXYGEN_TREEVIEW = @DOXYGEN_TREEVIEW@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FLUIDSYNTHDIRS = @FLUIDSYNTHDIRS@ +FST_CFLAGS = @FST_CFLAGS@ +FST_LIBS = @FST_LIBS@ +Fluidsynth_CFLAGS = @Fluidsynth_CFLAGS@ +Fluidsynth_LIBS = @Fluidsynth_LIBS@ +GIVERTCAP = @GIVERTCAP@ +GREP = @GREP@ +HAVEDOT = @HAVEDOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_LIBS = @JACK_LIBS@ +JADE = @JADE@ +LASH_CFLAGS = @LASH_CFLAGS@ +LASH_LIBS = @LASH_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LO_CFLAGS = @LO_CFLAGS@ +LO_LIBS = @LO_LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MUSECXXFLAGS = @MUSECXXFLAGS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NSGMLS = @NSGMLS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PCH = @PCH@ +PERL = @PERL@ +PKG_CONFIG = @PKG_CONFIG@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIB = @PYTHON_LIB@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QTDIR_BIN = @QTDIR_BIN@ +QTDIR_INC = @QTDIR_INC@ +QT_LIBS = @QT_LIBS@ +RANLIB = @RANLIB@ +SAMPLERATE_CFLAGS = @SAMPLERATE_CFLAGS@ +SAMPLERATE_LIBS = @SAMPLERATE_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ +SNDFILE_LIBS = @SNDFILE_LIBS@ +STRIP = @STRIP@ +SUIDBUILD = @SUIDBUILD@ +SUIDINSTALL = @SUIDINSTALL@ +USE_SSE = @USE_SSE@ +UUID_CFLAGS = @UUID_CFLAGS@ +UUID_LIBS = @UUID_LIBS@ +VERSION = @VERSION@ +XMKMF = @XMKMF@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +have_docbook = @have_docbook@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +synth_fluid = @synth_fluid@ +synth_fluidsynth = @synth_fluidsynth@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +EXTRA_DIST = midieditfunctions.png muse.sgm +CLEANFILES = $(wildcard *.html) $(wildcard *.fot) doxygen-stamp +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu doc/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile all-local +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-local + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: all all-am all-local check check-am clean clean-generic \ + clean-libtool distclean distclean-generic distclean-libtool \ + distclean-local distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + uninstall uninstall-am + + +all-local: @DOCBOOKTARGETS@ + +manual: book1.html + +book1.html: muse.sgm + $(JADE) -t sgml -d @DOCBOOKSTYLE@/html/docbook.dsl muse.sgm + +distclean-local: + rm -rf html/ + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/muse2/doc/midieditfunctions.png b/muse2/doc/midieditfunctions.png new file mode 100644 index 00000000..d3c7676a Binary files /dev/null and b/muse2/doc/midieditfunctions.png differ diff --git a/muse2/doc/muse.sgm b/muse2/doc/muse.sgm new file mode 100644 index 00000000..4fbfd19a --- /dev/null +++ b/muse2/doc/muse.sgm @@ -0,0 +1,493 @@ + + + + +Einführung + Sequencer + + gibt einen kurzen Überblick über MusE; was ist MusE + und was kann man damit machen; zeigt den grundsätzlichen + Aufbau von Songfile <-> Sequencer/Editor <-> Tongenerator + + + + + + + + + + Stichworte: + + Sequencer + Midifiles + Kompositionstool + Editor + + + + + Midi + + gibt eine kurze Einführung in Midi, soweit wie + für das Verständnis der nachfolgenden Kapitel + erforderlich + + + + Song + + Ein Song besteht in MusE aus Spuren (Tracks). Es gibt + mehrere verschiedene Spurklassen: + + + Midispuren + + + + Schlagzeugspuren + + Eine Schlagzeugspur ist eine Midispur, die + Schlagzeug Noten enthält. + + + Audiospuren + + eine Audiospur enthält Audiodaten + + + + + Eine Spur ist in "Parts" unterteilt. Ein Part enthält + wiederum "Events". + + + + + Konfiguration + Midi Ports + + Jeder Midispur von MusE muß ein Midigerät zugewiesen werden, + damit Events ausgegeben werden können. Dies geschieht nicht + direkt, sondern über eine Midi Port Liste. Die Portliste + verweist erst auf das eigentliche Midigerät. Dieser Mechanismus + erlaubt es, durch einfaches umkonfigurieren eines Midi Ports + auf ein anderes Midigerät, einen kompletten Song auf einen + anderen Ausgang umzuleiten, ohne jede Spur einzeln umändern + zu müssen. + + + MusE erlaubt die Konfiguration von bis zu 16 Midi Ports. + Ports werden von 0-15 gezählt. + Um überhaupt Midi spielen zu können muß mindestens ein + Port mit einem Midigerät konfiguriert werden. + + + start MusE + + öffne Pulldown Menu Config->MidiPorts + + click in Spalte Name + um die Midi Treiberliste zu bekommen + + Miditreiber auswählen + + prüfen der Spalte State + auf OK + + wird in State ein + device + + + + + + + + + + + + + + Erste Schritte + Abspielen eines Midi Files + + + Erstellen eines neuen Songs + + + + + + +Arranger Funktionen + Übersicht + + Arranger Window (Main-Window) + - Part Canvas + - Trackliste + - Trackinfo + - Channelinfo + + + + Tracks + + die Trackliste + - Bedeutung der Spalten + Trackinfo + - Bedeutung der Werte + Channelinfo + - Bedeutung der Werte + - Wie funktionieren Initialwerte? + + Tracks editieren + - markieren + - umbenennen + - verschieben + - löschen + - neue Tracks erstellen + + + + Parts + + Parts erstellen + Parts löschen + Parts editieren + - markieren + - verschieben + - verlängern/verkürzen + - dublizieren + - schneiden + - kleben + - umbenennen + + + + + +Der Sequencer + Die Zeitachse + + Stickworte: ticks, beats, bar, resolution, + tempo, smpte zeit + + + Transportfunktionen + + - Transportwindow + - start, stop, forward, rewind, ToStart, record + - marker: left, right, current + - loop, punchin, punchout + + + + Textmarker + + + + + +Die Midi Editoren + Raster und Quantisierung + + + Pianoroll Editor + + + Drum Editor + + + Kontroller Editor + + Beim Start eines Songs sind zunächst alle Midi Kontroller + undefiniert. Für Kontroller im ChannelInfo wird dies durch + den Wert "off" angezeigt. Wird ein Kontroller im ChannelInfo + auf einen Anfangswert gesetzt, so wird dieser Wert jeweils + beim Start des Songs gesendet. + + + -- erklären Timing-Probleme bei zu dicht gesetzten + kontrollern --- + + Midi Kontroller Typen + Velocity + + Die Anschlagstärke für ein Notenevent ist eigentlich + kein Midi Kontroller Wert, kann jedoch im Kontroller + Editor verändert werden. Die Anschlagstärke wird dabei + für jeden Ton als Strich dargestellt. + + + 7 Bit Kontroller + + + 14 Bit Kontroller + + + RPN + + + NRPN + + + XG SysEx + + XG SysEx Controller sind z.Z. noch nicht implementiert. + + + SysEx + + SysEx Controller sind z.Z. noch nicht implementiert. + + + + Editieren von Kontroller Events + + + Einfügen von neuen Events + + + Konfiguration von Kontroller Typen + + + + Score Editor + + + List Editor + + + Mastertrack Editor + Tempo + + + Taktart + + + + + Midi Editor Funktionen + + + + + + + + Quantize + + + Modify Gate Time + + Mit der "Modify Gate Time" Funktion kann die Länge der + ausgewählten Noten absolut und relativ geändert werden. + + + Rate (0% ... 200%): Alle Gate Time-Werte werden mit diesem + Betrag multipliziert (relative Änderung). Wird 100% gewählt, + dann bleibt die Notenlänge erhalten. Größere Werte verlängern + Noten, kleinere Werte verkürzen Noten. Der Wert 0% stellt + die Länge der Note auf 1. + + + Offset (-999...+999): Der hier eingegebene Wert verlängert + eine Note um entsprechend viele Ticks. + + + Die beide Parameter "Rate" und "Offset" können getrennt oder + gemeinsam eingesetzt werden. Die Länge einer Note wird + zunächst mit dem "Rate"-Quotienten multipliziert. Erst + danach wird der Offset-Wert addiert. + + + Modify Velocity + + + Crescendo + + + Transpose + + + Thin Out + + + Erase Event + + + Note Shift + + + Move Clock + + + Copy Measure + + + Erase Measure + + + Delete Measure + + + Create Measure + + + Remove Overlaps + + + + + + +Midi Recording + Realtime Recording + Punchin und Punchout + + + Loop Recording + + + Metronome + + + Midi Fernsteuerung + + + + Step Recording + + + Midi Input Filter + + + Midi Input Transformator + + + Midi Mixer + + + + +Midi Sync + Master Mode + + + Slave Mode + + + + +Device Konfiguration + + MusE benutzt für die Midi Ein- Ausgabe Midi Raw Devices. + Dies gibt MusE die volle Kontrolle über das + Midi Timing. Dies ist im wesentlichen der Grund, warum + MusE das RTC-Device benötigt. + MusE nutzt _nicht_ den OSS sequencer /dev/sequencer. + Bei ALSA nutzt MusE lediglich die Routing Funktionen + des ALSA Sequencers, nicht jedoch die Möglichkeit, + Events zu schedulen. + + Midi Devices + Serielle Geräte + + + OSS + + + ALSA + + + Pipes + + + virtuelle Ports + + + + Audio Devices + ALSA + + + OSS + + + aRts + + + + + +Dateien + Midifile Import/Export + + + Muse Songfiles *.med + + + das globale Konfigurationsfile + + + das globale Konfigurationsfile + + + Drummaps + + + + +Eine Einführung in Midi + Das Midi Protokoll + + + Die Midi Hardware + + + GM + + + GS + + + XG + + + Standard Midi Files + + + Midi Timing + + + MTC + + + MMC + + + + +MusE Installation + Systemvorraussetzungen + + + Wo gibt es MusE + + + Kompilieren + + + Installation + + + + +Liste der Tastaturabkürzungen + + + + + diff --git a/muse2/grepmidi/Makefile.am b/muse2/grepmidi/Makefile.am new file mode 100644 index 00000000..8d77beea --- /dev/null +++ b/muse2/grepmidi/Makefile.am @@ -0,0 +1,8 @@ +include $(top_srcdir)/common.am + +ACLOCAL_AMFLAGS = -I m4 + +bin_PROGRAMS = grepmidi + +grepmidi_SOURCES = grepmidi.cpp + diff --git a/muse2/grepmidi/Makefile.in b/muse2/grepmidi/Makefile.in new file mode 100644 index 00000000..0fec1ed1 --- /dev/null +++ b/muse2/grepmidi/Makefile.in @@ -0,0 +1,618 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/common.am +bin_PROGRAMS = grepmidi$(EXEEXT) +subdir = grepmidi +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal-include.m4 \ + $(top_srcdir)/m4/alsa.m4 $(top_srcdir)/m4/docbook.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__installdirs = "$(DESTDIR)$(bindir)" +PROGRAMS = $(bin_PROGRAMS) +am_grepmidi_OBJECTS = grepmidi.$(OBJEXT) +grepmidi_OBJECTS = $(am_grepmidi_OBJECTS) +grepmidi_LDADD = $(LDADD) +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +CXXLD = $(CXX) +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(grepmidi_SOURCES) +DIST_SOURCES = $(grepmidi_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DOCBOOKSTYLE = @DOCBOOKSTYLE@ +DOCBOOKTARGETS = @DOCBOOKTARGETS@ +DOT = @DOT@ +DOTPATH = @DOTPATH@ +DOXYGEN = @DOXYGEN@ +DOXYGEN_TREEVIEW = @DOXYGEN_TREEVIEW@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FLUIDSYNTHDIRS = @FLUIDSYNTHDIRS@ +FST_CFLAGS = @FST_CFLAGS@ +FST_LIBS = @FST_LIBS@ +Fluidsynth_CFLAGS = @Fluidsynth_CFLAGS@ +Fluidsynth_LIBS = @Fluidsynth_LIBS@ +GIVERTCAP = @GIVERTCAP@ +GREP = @GREP@ +HAVEDOT = @HAVEDOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_LIBS = @JACK_LIBS@ +JADE = @JADE@ +LASH_CFLAGS = @LASH_CFLAGS@ +LASH_LIBS = @LASH_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LO_CFLAGS = @LO_CFLAGS@ +LO_LIBS = @LO_LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MUSECXXFLAGS = @MUSECXXFLAGS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NSGMLS = @NSGMLS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PCH = @PCH@ +PERL = @PERL@ +PKG_CONFIG = @PKG_CONFIG@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIB = @PYTHON_LIB@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QTDIR_BIN = @QTDIR_BIN@ +QTDIR_INC = @QTDIR_INC@ +QT_LIBS = @QT_LIBS@ +RANLIB = @RANLIB@ +SAMPLERATE_CFLAGS = @SAMPLERATE_CFLAGS@ +SAMPLERATE_LIBS = @SAMPLERATE_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ +SNDFILE_LIBS = @SNDFILE_LIBS@ +STRIP = @STRIP@ +SUIDBUILD = @SUIDBUILD@ +SUIDINSTALL = @SUIDINSTALL@ +USE_SSE = @USE_SSE@ +UUID_CFLAGS = @UUID_CFLAGS@ +UUID_LIBS = @UUID_LIBS@ +VERSION = @VERSION@ +XMKMF = @XMKMF@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +have_docbook = @have_docbook@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +synth_fluid = @synth_fluid@ +synth_fluidsynth = @synth_fluidsynth@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AM_CXXFLAGS = $(MUSECXXFLAGS) -I.. -I$(top_srcdir)/synti \ + -I$(top_srcdir)/muse/widgets -DQT_SHARED -DQT_THREAD_SUPPORT \ + -DQT_PLUGIN $(QTDIR_INC) -DQT3_SUPPORT +AM_CPPFLAGS = +MOC = $(QTDIR_BIN)/moc +#UIC = $(QTDIR_BIN)/uic3 +UIC = /usr/bin/uic3 +UIFILES = $(wildcard *.ui) +MOCFILES = $(shell for h in $(filter %.h,$(SOURCES)); do \ + if grep -q Q_OBJECT $$h; then \ + echo $$h | sed "s/\(.*\)\.h/moc_\1.cpp/"; \ + fi; \ + done) + +BUILT_SOURCES = $(MOCFILES) $(UIFILES:%.ui=%.h) +MOSTLYCLEANFILES = $(MOCFILES) $(UIFILES:%.ui=%.h) +SUFFIXES = .ui .h.gch +ACLOCAL_AMFLAGS = -I m4 +grepmidi_SOURCES = grepmidi.cpp +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: .ui .h.gch .cpp .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/common.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu grepmidi/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu grepmidi/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p || test -f $$p1; \ + then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files + +clean-binPROGRAMS: + @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list +grepmidi$(EXEEXT): $(grepmidi_OBJECTS) $(grepmidi_DEPENDENCIES) + @rm -f grepmidi$(EXEEXT) + $(CXXLINK) $(grepmidi_OBJECTS) $(grepmidi_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/grepmidi.Po@am__quote@ + +.cpp.o: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< + +.cpp.obj: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.cpp.lo: +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-am +all-am: Makefile $(PROGRAMS) +installdirs: + for dir in "$(DESTDIR)$(bindir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +clean: clean-am + +clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-binPROGRAMS + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-binPROGRAMS + +.MAKE: all check install install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ + clean-generic clean-libtool ctags distclean distclean-compile \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-binPROGRAMS install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags uninstall uninstall-am \ + uninstall-binPROGRAMS + + +de: + @for base in $(MOCFILES); do echo -e "\t$${base}.cpp $${base}.h \\"; done + +nde: + @for base in $(MOCFILES); do echo -e "\tmoc_$${base}.cpp \\"; done + +.ui.o: %.h + $(UIC) -L $(top_srcdir)/muse/widgets -o $*.cpp -impl $*.h $*.ui + $(MOC) $*.h >> $*.cpp + $(CXXCOMPILE) -c $*.cpp -o $*.o + $(RM) $*.cpp moc_$*.cpp moc_$*.o + +.ui.lo: %.h + $(UIC) -L $(top_srcdir)/muse/widgets -o $*.cpp -impl $*.h $*.ui + $(MOC) $*.h >> $*.cpp + $(LTCXXCOMPILE) -c $*.cpp -o $*.lo + $(RM) $*.cpp moc_$*.cpp moc_$*.lo moc_$*.o + +moc_%.cpp: %.h + $(MOC) $< -o $@ + +%.h: %.ui + $(UIC) -o $@ $< +# $(UIC) -L $(top_srcdir)/muse/widgets -o $@ $< + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/muse2/grepmidi/grepmidi.cpp b/muse2/grepmidi/grepmidi.cpp new file mode 100644 index 00000000..1d33b4ac --- /dev/null +++ b/muse2/grepmidi/grepmidi.cpp @@ -0,0 +1,348 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: grepmidi.cpp,v 1.1.1.1.2.1 2009/03/09 02:05:17 terminator356 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; +const 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(const char* name) + { + curName = name; + const 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; + const 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/muse2/grid.med b/muse2/grid.med new file mode 100644 index 00000000..8beb9b13 --- /dev/null +++ b/muse2/grid.med @@ -0,0 +1,467 @@ + + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 00:00:00:00:00 + 1 + 0 + 0 + 0 + 0 + 0 + + + + 1 + 440 526 + +
7 6 5 4 3 2 1 0
+
+ 0 + 266 + 1 +
+ + + 2 + 63 + 127 + 63 + 70 + 9 + 0 + 0 + 0 + 4 + 4 + 0 + 0 + 1 + 0 + + 0 + 28 + 31 + 33 + 29 + + generic midi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + 0 + 0 + 1 + + + + + + + + + Track 1 + 0 + 0 + 0 + 0 + 0 + 20 + 0 + 0 + 0 + 4294967295 + 65535 + 0 + 1 + 0 + 0 + 0 + 100 + 100 + 1 + + + Track 2 + 0 + 0 + 0 + 0 + 0 + 20 + 0 + 0 + 0 + 4294967295 + 65535 + 0 + 1 + 0 + 0 + 0 + 100 + 100 + 1 + + + Track 3 + 0 + 0 + 0 + 0 + 0 + 20 + 0 + 0 + 0 + 4294967295 + 65535 + 0 + 1 + 0 + 0 + 0 + 100 + 100 + 1 + + + Track 4 + 0 + 0 + 0 + 0 + 0 + 20 + 0 + 0 + 0 + 4294967295 + 65535 + 0 + 1 + 0 + 0 + 0 + 100 + 100 + 1 + + + Track 5 + 0 + 0 + 0 + 0 + 0 + 20 + 0 + 0 + 9 + 4294967295 + 65535 + 0 + 1 + 0 + 0 + 0 + 100 + 100 + 1 + + + Track 6 + 0 + 0 + 0 + 0 + 2 + 20 + 0 + 0 + 0 + 1 + + + + + + + + + Out 2 + 0 + 0 + 0 + 0 + 2 + 20 + 0 + 0 + 0 + 1 + + + + + + + + + Out 3 + 0 + 0 + 0 + 0 + 2 + 20 + 0 + 0 + 0 + 1 + + + + + + + + + Input 1 + 0 + 1 + 0 + 0 + 2 + 20 + 0 + 1 + 0 + 0 + 1 + + + + + + + + + Track 6 + Out 1 + + + Input 1 + Out 1 + + + + 0 + 500000 + + + + + 0 + 4 + 4 + + + + + + + +
diff --git a/muse2/install-sh b/muse2/install-sh new file mode 120000 index 00000000..205f21c6 --- /dev/null +++ b/muse2/install-sh @@ -0,0 +1 @@ +/usr/share/automake-1.11/install-sh \ No newline at end of file diff --git a/muse2/lib/Makefile.am b/muse2/lib/Makefile.am new file mode 100644 index 00000000..7cd3c5dd --- /dev/null +++ b/muse2/lib/Makefile.am @@ -0,0 +1 @@ +SUBDIRS = synthi plugins diff --git a/muse2/lib/Makefile.in b/muse2/lib/Makefile.in new file mode 100644 index 00000000..7bf5ba06 --- /dev/null +++ b/muse2/lib/Makefile.in @@ -0,0 +1,617 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = lib +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal-include.m4 \ + $(top_srcdir)/m4/alsa.m4 $(top_srcdir)/m4/docbook.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +ACLOCAL = @ACLOCAL@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DOCBOOKSTYLE = @DOCBOOKSTYLE@ +DOCBOOKTARGETS = @DOCBOOKTARGETS@ +DOT = @DOT@ +DOTPATH = @DOTPATH@ +DOXYGEN = @DOXYGEN@ +DOXYGEN_TREEVIEW = @DOXYGEN_TREEVIEW@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FLUIDSYNTHDIRS = @FLUIDSYNTHDIRS@ +FST_CFLAGS = @FST_CFLAGS@ +FST_LIBS = @FST_LIBS@ +Fluidsynth_CFLAGS = @Fluidsynth_CFLAGS@ +Fluidsynth_LIBS = @Fluidsynth_LIBS@ +GIVERTCAP = @GIVERTCAP@ +GREP = @GREP@ +HAVEDOT = @HAVEDOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_LIBS = @JACK_LIBS@ +JADE = @JADE@ +LASH_CFLAGS = @LASH_CFLAGS@ +LASH_LIBS = @LASH_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LO_CFLAGS = @LO_CFLAGS@ +LO_LIBS = @LO_LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MUSECXXFLAGS = @MUSECXXFLAGS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NSGMLS = @NSGMLS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PCH = @PCH@ +PERL = @PERL@ +PKG_CONFIG = @PKG_CONFIG@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIB = @PYTHON_LIB@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QTDIR_BIN = @QTDIR_BIN@ +QTDIR_INC = @QTDIR_INC@ +QT_LIBS = @QT_LIBS@ +RANLIB = @RANLIB@ +SAMPLERATE_CFLAGS = @SAMPLERATE_CFLAGS@ +SAMPLERATE_LIBS = @SAMPLERATE_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ +SNDFILE_LIBS = @SNDFILE_LIBS@ +STRIP = @STRIP@ +SUIDBUILD = @SUIDBUILD@ +SUIDINSTALL = @SUIDINSTALL@ +USE_SSE = @USE_SSE@ +UUID_CFLAGS = @UUID_CFLAGS@ +UUID_LIBS = @UUID_LIBS@ +VERSION = @VERSION@ +XMKMF = @XMKMF@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +have_docbook = @have_docbook@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +synth_fluid = @synth_fluid@ +synth_fluidsynth = @synth_fluidsynth@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +SUBDIRS = synthi plugins +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu lib/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu lib/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ + install-am install-strip tags-recursive + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/muse2/lib/plugins/Makefile.am b/muse2/lib/plugins/Makefile.am new file mode 100644 index 00000000..8b6c0ce2 --- /dev/null +++ b/muse2/lib/plugins/Makefile.am @@ -0,0 +1,23 @@ +all-local: link + +PLUGINDIRS = $(shell find ../../plugins -type d \ + \( -not -name obj \ + -not -name CVS \ + -not -name ".*" \ + -not -name plugins \)) + +PLUGINS = $(notdir $(PLUGINDIRS)) + +link: + find -type l -exec rm {} \; + for plugin in $(PLUGINS); do \ + if test -e ../../plugins/$${plugin}/$${plugin}; then \ + ln -s ../../plugins/$${plugin}/$${plugin} .; \ + fi; \ + if test -e ../../plugins/$${plugin}/$${plugin}.so; then \ + ln -s ../../plugins/$${plugin}/$${plugin}.so .; \ + fi; \ + done + +CLEANFILES = $(PLUGINS) $(PLUGINS:%=%.so) + diff --git a/muse2/lib/plugins/Makefile.in b/muse2/lib/plugins/Makefile.in new file mode 100644 index 00000000..e9673a29 --- /dev/null +++ b/muse2/lib/plugins/Makefile.in @@ -0,0 +1,436 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = lib/plugins +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal-include.m4 \ + $(top_srcdir)/m4/alsa.m4 $(top_srcdir)/m4/docbook.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DOCBOOKSTYLE = @DOCBOOKSTYLE@ +DOCBOOKTARGETS = @DOCBOOKTARGETS@ +DOT = @DOT@ +DOTPATH = @DOTPATH@ +DOXYGEN = @DOXYGEN@ +DOXYGEN_TREEVIEW = @DOXYGEN_TREEVIEW@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FLUIDSYNTHDIRS = @FLUIDSYNTHDIRS@ +FST_CFLAGS = @FST_CFLAGS@ +FST_LIBS = @FST_LIBS@ +Fluidsynth_CFLAGS = @Fluidsynth_CFLAGS@ +Fluidsynth_LIBS = @Fluidsynth_LIBS@ +GIVERTCAP = @GIVERTCAP@ +GREP = @GREP@ +HAVEDOT = @HAVEDOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_LIBS = @JACK_LIBS@ +JADE = @JADE@ +LASH_CFLAGS = @LASH_CFLAGS@ +LASH_LIBS = @LASH_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LO_CFLAGS = @LO_CFLAGS@ +LO_LIBS = @LO_LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MUSECXXFLAGS = @MUSECXXFLAGS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NSGMLS = @NSGMLS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PCH = @PCH@ +PERL = @PERL@ +PKG_CONFIG = @PKG_CONFIG@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIB = @PYTHON_LIB@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QTDIR_BIN = @QTDIR_BIN@ +QTDIR_INC = @QTDIR_INC@ +QT_LIBS = @QT_LIBS@ +RANLIB = @RANLIB@ +SAMPLERATE_CFLAGS = @SAMPLERATE_CFLAGS@ +SAMPLERATE_LIBS = @SAMPLERATE_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ +SNDFILE_LIBS = @SNDFILE_LIBS@ +STRIP = @STRIP@ +SUIDBUILD = @SUIDBUILD@ +SUIDINSTALL = @SUIDINSTALL@ +USE_SSE = @USE_SSE@ +UUID_CFLAGS = @UUID_CFLAGS@ +UUID_LIBS = @UUID_LIBS@ +VERSION = @VERSION@ +XMKMF = @XMKMF@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +have_docbook = @have_docbook@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +synth_fluid = @synth_fluid@ +synth_fluidsynth = @synth_fluidsynth@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +PLUGINDIRS = $(shell find ../../plugins -type d \ + \( -not -name obj \ + -not -name CVS \ + -not -name ".*" \ + -not -name plugins \)) + +PLUGINS = $(notdir $(PLUGINDIRS)) +CLEANFILES = $(PLUGINS) $(PLUGINS:%=%.so) +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu lib/plugins/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu lib/plugins/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile all-local +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: all all-am all-local check check-am clean clean-generic \ + clean-libtool distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + uninstall uninstall-am + +all-local: link + +link: + find -type l -exec rm {} \; + for plugin in $(PLUGINS); do \ + if test -e ../../plugins/$${plugin}/$${plugin}; then \ + ln -s ../../plugins/$${plugin}/$${plugin} .; \ + fi; \ + if test -e ../../plugins/$${plugin}/$${plugin}.so; then \ + ln -s ../../plugins/$${plugin}/$${plugin}.so .; \ + fi; \ + done + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/muse2/lib/synthi/Makefile.am b/muse2/lib/synthi/Makefile.am new file mode 100644 index 00000000..37137dd2 --- /dev/null +++ b/muse2/lib/synthi/Makefile.am @@ -0,0 +1,23 @@ +all-local: link + +SOFTSYNTHDIRS = $(shell find ../../synti -type d \ + \( -not -name obj \ + -not -name CVS \ + -not -name ".*" \ + -not -name synti \)) + +SOFTSYNTHS = $(notdir $(SOFTSYNTHDIRS)) + +link: + find -type l -exec rm {} \; + for synth in $(SOFTSYNTHS); do \ + if test -e ../../synti/$${synth}/$${synth}; then \ + ln -s ../../synti/$${synth}/$${synth} .; \ + fi; \ + if test -e ../../synti/$${synth}/$${synth}.so; then \ + ln -s ../../synti/$${synth}/$${synth}.so .; \ + fi; \ + done + +CLEANFILES = $(SOFTSYNTHS) $(SOFTSYNTHS:%=%.so) + diff --git a/muse2/lib/synthi/Makefile.in b/muse2/lib/synthi/Makefile.in new file mode 100644 index 00000000..ab8820a4 --- /dev/null +++ b/muse2/lib/synthi/Makefile.in @@ -0,0 +1,436 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = lib/synthi +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal-include.m4 \ + $(top_srcdir)/m4/alsa.m4 $(top_srcdir)/m4/docbook.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DOCBOOKSTYLE = @DOCBOOKSTYLE@ +DOCBOOKTARGETS = @DOCBOOKTARGETS@ +DOT = @DOT@ +DOTPATH = @DOTPATH@ +DOXYGEN = @DOXYGEN@ +DOXYGEN_TREEVIEW = @DOXYGEN_TREEVIEW@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FLUIDSYNTHDIRS = @FLUIDSYNTHDIRS@ +FST_CFLAGS = @FST_CFLAGS@ +FST_LIBS = @FST_LIBS@ +Fluidsynth_CFLAGS = @Fluidsynth_CFLAGS@ +Fluidsynth_LIBS = @Fluidsynth_LIBS@ +GIVERTCAP = @GIVERTCAP@ +GREP = @GREP@ +HAVEDOT = @HAVEDOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_LIBS = @JACK_LIBS@ +JADE = @JADE@ +LASH_CFLAGS = @LASH_CFLAGS@ +LASH_LIBS = @LASH_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LO_CFLAGS = @LO_CFLAGS@ +LO_LIBS = @LO_LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MUSECXXFLAGS = @MUSECXXFLAGS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NSGMLS = @NSGMLS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PCH = @PCH@ +PERL = @PERL@ +PKG_CONFIG = @PKG_CONFIG@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIB = @PYTHON_LIB@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QTDIR_BIN = @QTDIR_BIN@ +QTDIR_INC = @QTDIR_INC@ +QT_LIBS = @QT_LIBS@ +RANLIB = @RANLIB@ +SAMPLERATE_CFLAGS = @SAMPLERATE_CFLAGS@ +SAMPLERATE_LIBS = @SAMPLERATE_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ +SNDFILE_LIBS = @SNDFILE_LIBS@ +STRIP = @STRIP@ +SUIDBUILD = @SUIDBUILD@ +SUIDINSTALL = @SUIDINSTALL@ +USE_SSE = @USE_SSE@ +UUID_CFLAGS = @UUID_CFLAGS@ +UUID_LIBS = @UUID_LIBS@ +VERSION = @VERSION@ +XMKMF = @XMKMF@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +have_docbook = @have_docbook@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +synth_fluid = @synth_fluid@ +synth_fluidsynth = @synth_fluidsynth@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +SOFTSYNTHDIRS = $(shell find ../../synti -type d \ + \( -not -name obj \ + -not -name CVS \ + -not -name ".*" \ + -not -name synti \)) + +SOFTSYNTHS = $(notdir $(SOFTSYNTHDIRS)) +CLEANFILES = $(SOFTSYNTHS) $(SOFTSYNTHS:%=%.so) +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu lib/synthi/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu lib/synthi/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile all-local +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: all all-am all-local check check-am clean clean-generic \ + clean-libtool distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + uninstall uninstall-am + +all-local: link + +link: + find -type l -exec rm {} \; + for synth in $(SOFTSYNTHS); do \ + if test -e ../../synti/$${synth}/$${synth}; then \ + ln -s ../../synti/$${synth}/$${synth} .; \ + fi; \ + if test -e ../../synti/$${synth}/$${synth}.so; then \ + ln -s ../../synti/$${synth}/$${synth}.so .; \ + fi; \ + done + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/muse2/ltmain.sh b/muse2/ltmain.sh new file mode 120000 index 00000000..41599586 --- /dev/null +++ b/muse2/ltmain.sh @@ -0,0 +1 @@ +/usr/share/libtool/config/ltmain.sh \ No newline at end of file diff --git a/muse2/m4/Makefile.am b/muse2/m4/Makefile.am new file mode 100644 index 00000000..f7870828 --- /dev/null +++ b/muse2/m4/Makefile.am @@ -0,0 +1 @@ +EXTRA_DIST = $(wildcard *.m4) \ No newline at end of file diff --git a/muse2/m4/Makefile.in b/muse2/m4/Makefile.in new file mode 100644 index 00000000..3ae01121 --- /dev/null +++ b/muse2/m4/Makefile.in @@ -0,0 +1,415 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = m4 +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal-include.m4 \ + $(top_srcdir)/m4/alsa.m4 $(top_srcdir)/m4/docbook.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DOCBOOKSTYLE = @DOCBOOKSTYLE@ +DOCBOOKTARGETS = @DOCBOOKTARGETS@ +DOT = @DOT@ +DOTPATH = @DOTPATH@ +DOXYGEN = @DOXYGEN@ +DOXYGEN_TREEVIEW = @DOXYGEN_TREEVIEW@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FLUIDSYNTHDIRS = @FLUIDSYNTHDIRS@ +FST_CFLAGS = @FST_CFLAGS@ +FST_LIBS = @FST_LIBS@ +Fluidsynth_CFLAGS = @Fluidsynth_CFLAGS@ +Fluidsynth_LIBS = @Fluidsynth_LIBS@ +GIVERTCAP = @GIVERTCAP@ +GREP = @GREP@ +HAVEDOT = @HAVEDOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_LIBS = @JACK_LIBS@ +JADE = @JADE@ +LASH_CFLAGS = @LASH_CFLAGS@ +LASH_LIBS = @LASH_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LO_CFLAGS = @LO_CFLAGS@ +LO_LIBS = @LO_LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MUSECXXFLAGS = @MUSECXXFLAGS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NSGMLS = @NSGMLS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PCH = @PCH@ +PERL = @PERL@ +PKG_CONFIG = @PKG_CONFIG@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIB = @PYTHON_LIB@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QTDIR_BIN = @QTDIR_BIN@ +QTDIR_INC = @QTDIR_INC@ +QT_LIBS = @QT_LIBS@ +RANLIB = @RANLIB@ +SAMPLERATE_CFLAGS = @SAMPLERATE_CFLAGS@ +SAMPLERATE_LIBS = @SAMPLERATE_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ +SNDFILE_LIBS = @SNDFILE_LIBS@ +STRIP = @STRIP@ +SUIDBUILD = @SUIDBUILD@ +SUIDINSTALL = @SUIDINSTALL@ +USE_SSE = @USE_SSE@ +UUID_CFLAGS = @UUID_CFLAGS@ +UUID_LIBS = @UUID_LIBS@ +VERSION = @VERSION@ +XMKMF = @XMKMF@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +have_docbook = @have_docbook@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +synth_fluid = @synth_fluid@ +synth_fluidsynth = @synth_fluidsynth@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +EXTRA_DIST = $(wildcard *.m4) +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu m4/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu m4/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + distclean distclean-generic distclean-libtool distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/muse2/m4/aclocal-include.m4 b/muse2/m4/aclocal-include.m4 new file mode 100644 index 00000000..abf6533f --- /dev/null +++ b/muse2/m4/aclocal-include.m4 @@ -0,0 +1,16 @@ +# aclocal-include.m4 +# +# This macro adds the name macrodir to the set of directories +# that `aclocal' searches for macros. + +# serial 1 + +dnl AM_ACLOCAL_INCLUDE(macrodir) +AC_DEFUN([AM_ACLOCAL_INCLUDE], +[ + AM_CONDITIONAL(INSIDE_GNOME_COMMON, test x = y) + + test -n "$ACLOCAL_FLAGS" && ACLOCAL="$ACLOCAL $ACLOCAL_FLAGS" + + for k in $1 ; do ACLOCAL="$ACLOCAL -I $k" ; done +]) diff --git a/muse2/m4/alsa.m4 b/muse2/m4/alsa.m4 new file mode 100644 index 00000000..da57ad4f --- /dev/null +++ b/muse2/m4/alsa.m4 @@ -0,0 +1,148 @@ +dnl Configure Paths for Alsa +dnl Some modifications by Richard Boulton +dnl Christopher Lansdown +dnl Jaroslav Kysela +dnl Last modification: 07/01/2001 +dnl AM_PATH_ALSA([MINIMUM-VERSION [, ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]]) +dnl Test for libasound, and define ALSA_CFLAGS and ALSA_LIBS as appropriate. +dnl enables arguments --with-alsa-prefix= +dnl --with-alsa-enc-prefix= +dnl --disable-alsatest (this has no effect, as yet) +dnl +dnl For backwards compatibility, if ACTION_IF_NOT_FOUND is not specified, +dnl and the alsa libraries are not found, a fatal AC_MSG_ERROR() will result. +dnl +AC_DEFUN([AM_PATH_ALSA], +[dnl Save the original CFLAGS, LDFLAGS, and LIBS +alsa_save_CFLAGS="$CFLAGS" +alsa_save_LDFLAGS="$LDFLAGS" +alsa_save_LIBS="$LIBS" +alsa_found=yes + +dnl +dnl Get the cflags and libraries for alsa +dnl +AC_ARG_WITH(alsa-prefix, +[ --with-alsa-prefix=PFX prefix where alsa library is installed (optional)], +[alsa_prefix="$withval"], [alsa_prefix=""]) + +AC_ARG_WITH(alsa-inc-prefix, +[ --with-alsa-inc-prefix=PFX prefix where include libraries are (optional)], +[alsa_inc_prefix="$withval"], [alsa_inc_prefix=""]) + +dnl FIXME: this is not yet implemented +AC_ARG_ENABLE(alsatest, +[ --disable-alsatest do not try to compile and run a test alsa program], +[enable_alsatest=no], +[enable_alsatest=yes]) + +dnl Add any special include directories +AC_MSG_CHECKING(for ALSA CFLAGS) +if test "$alsa_inc_prefix" != "" ; then + ALSA_CFLAGS="$ALSA_CFLAGS -I$alsa_inc_prefix" + CFLAGS="$CFLAGS -I$alsa_inc_prefix" +fi +AC_MSG_RESULT($ALSA_CFLAGS) + +dnl add any special lib dirs +AC_MSG_CHECKING(for ALSA LDFLAGS) +if test "$alsa_prefix" != "" ; then + ALSA_LIBS="$ALSA_LIBS -L$alsa_prefix" + LDFLAGS="$LDFLAGS $ALSA_LIBS" +fi + +dnl add the alsa library +ALSA_LIBS="$ALSA_LIBS -lasound -lm -ldl" +LIBS=`echo $LIBS | sed 's/-lm//'` +LIBS=`echo $LIBS | sed 's/-ldl//'` +LIBS=`echo $LIBS | sed 's/ //'` +LIBS="$ALSA_LIBS $LIBS" +AC_MSG_RESULT($ALSA_LIBS) + +dnl Check for a working version of libasound that is of the right version. +min_alsa_version=ifelse([$1], ,0.1.1,$1) +AC_MSG_CHECKING(for libasound headers version >= $min_alsa_version) +no_alsa="" + alsa_min_major_version=`echo $min_alsa_version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` + alsa_min_minor_version=`echo $min_alsa_version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` + alsa_min_micro_version=`echo $min_alsa_version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` + +AC_LANG_SAVE +AC_LANG_C +AC_TRY_COMPILE([ +#include +], [ +void main(void) +{ +/* ensure backward compatibility */ +#if !defined(SND_LIB_MAJOR) && defined(SOUNDLIB_VERSION_MAJOR) +#define SND_LIB_MAJOR SOUNDLIB_VERSION_MAJOR +#endif +#if !defined(SND_LIB_MINOR) && defined(SOUNDLIB_VERSION_MINOR) +#define SND_LIB_MINOR SOUNDLIB_VERSION_MINOR +#endif +#if !defined(SND_LIB_SUBMINOR) && defined(SOUNDLIB_VERSION_SUBMINOR) +#define SND_LIB_SUBMINOR SOUNDLIB_VERSION_SUBMINOR +#endif + +# if(SND_LIB_MAJOR > $alsa_min_major_version) + exit(0); +# else +# if(SND_LIB_MAJOR < $alsa_min_major_version) +# error not present +# endif + +# if(SND_LIB_MINOR > $alsa_min_minor_version) + exit(0); +# else +# if(SND_LIB_MINOR < $alsa_min_minor_version) +# error not present +# endif + +# if(SND_LIB_SUBMINOR < $alsa_min_micro_version) +# error not present +# endif +# endif +# endif +exit(0); +} +], + [AC_MSG_RESULT(found.)], + [AC_MSG_RESULT(not present.) + ifelse([$3], , [AC_MSG_ERROR(Sufficiently new version of libasound not found.)]) + alsa_found=no] +) +AC_LANG_RESTORE + +dnl Now that we know that we have the right version, let's see if we have the library and not just the headers. +AC_LANG_SAVE +AC_LANG_CPLUSPLUS +AC_CHECK_LIB([asound], [snd_seq_create_event],, + [ifelse([$3], , [AC_MSG_ERROR(No linkable libasound was found.)]) + alsa_found=no] +) +AC_LANG_RESTORE + +if test "x$alsa_found" = "xyes" ; then + ifelse([$2], , :, [$2]) + LIBS=`echo $LIBS | sed 's/-lasound//g'` + LIBS=`echo $LIBS | sed 's/ //'` + LIBS="-lasound $LIBS" +fi +if test "x$alsa_found" = "xno" ; then + ifelse([$3], , :, [$3]) + CFLAGS="$alsa_save_CFLAGS" + LDFLAGS="$alsa_save_LDFLAGS" + LIBS="$alsa_save_LIBS" + ALSA_CFLAGS="" + ALSA_LIBS="" +fi + +dnl That should be it. Now just export out symbols: +AC_SUBST(ALSA_CFLAGS) +AC_SUBST(ALSA_LIBS) +]) + diff --git a/muse2/m4/docbook.m4 b/muse2/m4/docbook.m4 new file mode 100644 index 00000000..eed96346 --- /dev/null +++ b/muse2/m4/docbook.m4 @@ -0,0 +1,97 @@ +# $Header: /cvsroot/lmuse/muse/m4/docbook.m4,v 1.1.1.1 2003/10/27 18:51:13 wschweer Exp $ + +# PGAC_PROG_JADE +# -------------- +AC_DEFUN([PGAC_PROG_JADE], +[AC_CHECK_PROGS([JADE], [openjade jade])]) + + +# PGAC_PROG_NSGMLS +# ---------------- +AC_DEFUN([PGAC_PROG_NSGMLS], +[AC_CHECK_PROGS([NSGMLS], [onsgmls nsgmls])]) + + +# PGAC_CHECK_DOCBOOK(VERSION) +# --------------------------- +AC_DEFUN([PGAC_CHECK_DOCBOOK], +[AC_REQUIRE([PGAC_PROG_NSGMLS]) +AC_CACHE_CHECK([for DocBook V$1], [pgac_cv_check_docbook], +[cat >conftest.sgml < + + test + + random + + testsect + text + + + +EOF + +${NSGMLS-false} -s conftest.sgml 1>&5 2>&1 +if test $? -eq 0; then + pgac_cv_check_docbook=yes +else + pgac_cv_check_docbook=no +fi +rm -f conftest.sgml]) + +have_docbook=$pgac_cv_check_docbook +AC_SUBST([have_docbook]) +]) +# PGAC_CHECK_DOCBOOK + + +# PGAC_PATH_DOCBOOK_STYLESHEETS +# ----------------------------- +AC_DEFUN([PGAC_PATH_DOCBOOK_STYLESHEETS], [ +AC_MSG_CHECKING([for DocBook stylesheets]) +AC_ARG_WITH(docbook-stylesheets, + [ --with-docbook-stylesheets=DIR use DIR/html/docbook.dsl], + [muse_docbook_prefix="$withval"]) +AC_CACHE_VAL([pgac_cv_path_stylesheets], [ +if test -n "$muse_docbook_prefix"; then + if test -r "$muse_docbook_prefix/html/docbook.dsl" \ + && test -r "$muse_docbook_prefix/print/docbook.dsl"; then + pgac_cv_path_stylesheets="$muse_docbook_prefix" + fi +fi +if test -z "$pgac_cv_path_stylesheets"; then + if test -n "$DOCBOOKSTYLE"; then + if test -r "$DOCBOOKSTYLE/html/docbook.dsl" \ + && test -r "$DOCBOOKSTYLE/print/docbook.dsl"; then + pgac_cv_path_stylesheets="$DOCBOOKSTYLE" + fi + fi +fi +if test -z "$pgac_cv_path_stylesheets"; then + for pgac_prefix in /usr /usr/local /opt; do + for pgac_infix in share lib; do + for pgac_postfix in \ + sgml/stylesheets/nwalsh-modular \ + sgml/stylesheets/docbook \ + sgml/docbook/dsssl/modular \ + sgml/docbook/stylesheet/dsssl/modular + do + pgac_candidate=$pgac_prefix/$pgac_infix/$pgac_postfix + if test -r "$pgac_candidate/html/docbook.dsl" \ + && test -r "$pgac_candidate/print/docbook.dsl" + then + pgac_cv_path_stylesheets=$pgac_candidate + break 3 + fi + done + done + done +fi +]) +DOCBOOKSTYLE=$pgac_cv_path_stylesheets +AC_SUBST([DOCBOOKSTYLE]) +if test -n "$DOCBOOKSTYLE"; then + AC_MSG_RESULT([$DOCBOOKSTYLE]) +else + AC_MSG_RESULT(no) +fi]) # PGAC_PATH_DOCBOOK_STYLESHEETS diff --git a/muse2/m4/libtool.m4 b/muse2/m4/libtool.m4 new file mode 120000 index 00000000..f3504e92 --- /dev/null +++ b/muse2/m4/libtool.m4 @@ -0,0 +1 @@ +/usr/share/aclocal/libtool.m4 \ No newline at end of file diff --git a/muse2/m4/ltoptions.m4 b/muse2/m4/ltoptions.m4 new file mode 120000 index 00000000..b81279e3 --- /dev/null +++ b/muse2/m4/ltoptions.m4 @@ -0,0 +1 @@ +/usr/share/aclocal/ltoptions.m4 \ No newline at end of file diff --git a/muse2/m4/ltsugar.m4 b/muse2/m4/ltsugar.m4 new file mode 120000 index 00000000..4d76cc70 --- /dev/null +++ b/muse2/m4/ltsugar.m4 @@ -0,0 +1 @@ +/usr/share/aclocal/ltsugar.m4 \ No newline at end of file diff --git a/muse2/m4/ltversion.m4 b/muse2/m4/ltversion.m4 new file mode 120000 index 00000000..5eb474fd --- /dev/null +++ b/muse2/m4/ltversion.m4 @@ -0,0 +1 @@ +/usr/share/aclocal/ltversion.m4 \ No newline at end of file diff --git a/muse2/m4/lt~obsolete.m4 b/muse2/m4/lt~obsolete.m4 new file mode 120000 index 00000000..de0b9f94 --- /dev/null +++ b/muse2/m4/lt~obsolete.m4 @@ -0,0 +1 @@ +/usr/share/aclocal/lt~obsolete.m4 \ No newline at end of file diff --git a/muse2/m4/qt.m4 b/muse2/m4/qt.m4 new file mode 100644 index 00000000..5aceb294 --- /dev/null +++ b/muse2/m4/qt.m4 @@ -0,0 +1,246 @@ +dnl +dnl CONFIGURE_QT([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]]) +dnl \author J.E. Hoffmann +dnl +AC_DEFUN([CONFIGURE_QT], +[ + qt_error="no" + + QT_CFLAGS="" + QT_LIBS="" + MOC="moc" + UIC="uic" + qt_includes="/usr/include/qt" + qt_libraries="" + qt_binaries="" + + if test "$qt_error" = "no"; then + AC_MSG_CHECKING([for QT environment variable QTDIR]) + if test -z "$QTDIR"; then + AC_MSG_RESULT(no) + AC_MSG_WARN([ + + ***************** WARNING ***************** + +YOU HAVE NOT SET YOUR 'QTDIR' ENVIRONMENT VARIABLE!!! + +This is the source of most people's problems when +configuring muse. If the configuration fails to find +qt, try setting your QTDIR environment variable to +the directory where qt is installed. + + ******************************************* + +]) + echo -ne "\a" + echo -ne "\a" + echo -ne "\a" + sleep 7 + else + AC_MSG_RESULT(yes) + qt_includes="$QTDIR/include" + qt_libraries="$QTDIR/lib" + qt_binaries="$QTDIR/bin" + MOC="$qt_binaries/moc"; + UIC="$qt_binaries/uic"; + fi + fi + + muse_qttest="yes" + AC_ARG_ENABLE(qttest, + [ --disable-qttest do not try to compile and run a test libqt program],[ + case "$enableval" in + "yes") + muse_qttest="yes" + ;; + "no") + muse_qttest="no" + ;; + *) + AC_MSG_ERROR([must use --enable-qttest(=yes/no) or --disable-qttest]) + ;; + esac + ]) + + + AC_ARG_WITH(qt-prefix, + [ --with-qt-prefix=PFX where the root of Qt is installed ], + [ + qt_includes="$withval/include" + qt_libraries="$withval/lib" + qt_binaries="$withval/bin" + MOC="$qt_binaries/moc"; + UIC="$qt_binaries/uic"; + ]) + + AC_ARG_WITH(qt-includes, + [ --with-qt-includes=DIR where the Qt includes are installed ], + [ + qt_includes="$withval" + ]) + + AC_ARG_WITH(qt-libraries, + [ --with-qt-libraries=DIR where the Qt libraries are installed.], + [ + qt_libraries="$withval" + ]) + + AC_ARG_WITH(qt-binaries, + [ --with-qt-binaries=DIR where the Qt binaries are installed.], + [ + qt_binaries="$withval" + MOC="$qt_binaries/moc"; + UIC="$qt_binaries/uic"; + ]) + + AC_ARG_WITH(qt-moc, + [ --with-qt-moc=PROG where the Qt meta object compiler is installed.], + [ + MOC="$withval" + ]) + + AC_ARG_WITH(qt-uic, + [ --with-qt-uic=PROG where the Qt user interface compiler is installed.], + [ + UIC="$withval" + ]) + + if test "$qt_error" = "no"; then + saved_CPPFLAGS="$CPPFLAGS" + saved_LIBS="$LIBS" + CPPFLAGS="$saved_CPPFLAGS -I$qt_includes" + if test -n "$qt_libraries"; then + LIBS="$saved_LIBS -L$qt_libraries -lqt-mt -lqui" + QT_LIBS="-L$qt_libraries -lqt-mt -lqui" + else + LIBS="$saved_LIBS -lqt-mt -lqui -lm $X11_LIBS" + QT_LIBS="-lqt-mt -lqui" + fi + AC_MSG_CHECKING([for QT includes ($qt_includes)]) + AC_CACHE_VAL(qt_includes_found, + [ + AC_LANG_PUSH(C++) + AC_TRY_CPP([#include ], + qt_includes_found=yes, qt_includes_found=no) + AC_LANG_POP(C++) + if test "$qt_includes_found" = "yes"; then + QT_CFLAGS="-I$qt_includes" + AC_MSG_RESULT(yes) + else + qt_error=yes + AC_MSG_RESULT(no) + fi + ]) + + AC_MSG_CHECKING([for QT libraries ($qt_libraries)]) + AC_CACHE_VAL(qt_libraries_found, + [ + AC_LANG_SAVE + AC_LANG_CPLUSPLUS + saved_CXXFLAGS="$CXXFLAGS" + saved_LIBS="$LIBS" + CXXFLAGS="$QT_CFLAGS $LIBS" + LIBS="$QT_LIBS $LIBS" + + + if test "$muse_qttest" = "yes"; then + AC_TRY_RUN([ + #include + int main(int argc, char **argv) + { + QApplication app(argc, argv, false); + + } + ],[ + AC_MSG_RESULT(yes) + ],[ + AC_MSG_RESULT(no) + qt_error="yes" + ], + AC_MSG_ERROR([cross compiling unsupported]) + ) + else + AC_MSG_RESULT([yes (assumed due to --disable-qttest)]) + fi + + LIBS="$saved_LIBS" + CXXFLAGS="$saved_CXXFLAGS" + AC_LANG_RESTORE + ]) + + AC_MSG_CHECKING([for QT moc ($MOC)]) + output=`eval "$MOC --help 2>&1 | grep Qt"` + if test -z "$output"; then + AC_MSG_RESULT(no) + qt_error="yes" + else + AC_MSG_RESULT(yes) + fi + + AC_MSG_CHECKING([for QT uic ($UIC)]) + output=`eval "$UIC --help 2>&1 | grep Qt"` + if test -z "$output"; then + AC_MSG_RESULT(no) + qt_error="yes" + else + AC_MSG_RESULT(yes) + fi + CPPFLAGS="$saved_CPPFLAGS" + LIBS="$saved_LIBS" + fi + + if test "$qt_error" = "no"; then + AC_MSG_CHECKING([for QT version >= $1]) + qt_major_version=`echo $1 | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` + qt_minor_version=`echo $1 | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` + qt_micro_version=`echo $1 | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` + qt_version="$qt_major_version$qt_minor_version$qt_micro_version" + + AC_LANG_SAVE + AC_LANG_CPLUSPLUS + saved_CXXFLAGS="$CXXFLAGS" + saved_LIBS="$LIBS" + CXXFLAGS="$QT_CFLAGS $LIBS" + LIBS="$QT_LIBS $LIBS" + + if test "$muse_qttest" = "yes"; then + AC_TRY_RUN([ + #include + int main() + { + int version = ($qt_major_version << 16) + + ($qt_minor_version << 8) + + $qt_micro_version; + if (QT_VERSION < version) return(1); + return(0); + } + ],[ + AC_MSG_RESULT(yes) + ],[ + AC_MSG_RESULT(no) + qt_error="yes" + ], + AC_MSG_ERROR([cross compiling unsupported]) + ) + else + AC_MSG_RESULT([yes (assumed due to --disable-qttest)]) + fi + + LIBS="$saved_LIBS" + CXXFLAGS="$saved_CXXFLAGS" + AC_LANG_RESTORE + fi + + AC_SUBST(QT_CFLAGS) + AC_SUBST(QT_LIBS) + AC_SUBST(MOC) + AC_SUBST(UIC) + if test "$qt_error" = "no"; then + ifelse([$2], , :, [$2]) + else + ifelse([$3], , :, [$3]) + fi +]) diff --git a/muse2/missing b/muse2/missing new file mode 120000 index 00000000..20bc5b0e --- /dev/null +++ b/muse2/missing @@ -0,0 +1 @@ +/usr/share/automake-1.11/missing \ No newline at end of file diff --git a/muse2/muse.prj b/muse2/muse.prj new file mode 100644 index 00000000..233830cb --- /dev/null +++ b/muse2/muse.prj @@ -0,0 +1,697 @@ +;; -*- Prcs -*- +(Created-By-Prcs-Version 1 2 15) +(Project-Description "") +(Project-Version muse 0 7) +(Parent-Version muse 0 6) +(Version-Log "") +(New-Version-Log "") +(Checkin-Time "Mon, 27 Oct 2003 19:28:49 +0100") +(Checkin-Login ws) +(Populate-Ignore ("^\\." "/\\." "\\.o$" "\\.lo$" "^core$" + "^autom4te.cache/" "moc_" "mops" "klops" + "Makefile$" "Makefile.in$" "\\.la$" + "\\.non-libtool\\.cpp$" "~$" + "^config.h.in$" "^config.h$" "^stamp.h1$" "^configure$" + "^config.log$" "^config.status$" + "\\.so$" + )) +(Project-Keywords) +(Files + (ChangeLog (muse/l/38_ChangeLog 1.1 644)) + (NEWS (muse/l/39_NEWS 1.1 644)) + (TODO (muse/l/40_TODO 1.1 644)) + (Doxyfile.in (muse/l/41_Doxyfile.i 1.1 644)) + (AUTHORS (muse/l/42_AUTHORS 1.1 644)) + (README (muse/l/43_README 1.1 644)) + (README.de (muse/l/44_README.de 1.1 644)) + (SECURITY (muse/l/45_SECURITY 1.1 644)) + (README.shortcuts (muse/l/46_README.sho 1.1 644)) + (README.CVS (muse/l/47_README.CVS 1.1 644)) + (README.softsynth (muse/l/48_README.sof 1.1 644)) + (README.ladspaguis (muse/l/49_README.lad 1.1 644)) + (Makefile.am (muse/l/50_Makefile.a 1.1 644)) + (README.instruments (muse/l/51_README.ins 1.1 644)) + (autogen.sh (muse/m/0_autogen.sh 1.1 755)) + (configure.ac (muse/m/1_configure. 1.1 644)) + (README.translate (muse/m/2_README.tra 1.1 644)) + (libtool (muse/m/3_libtool 1.2 755)) + (common.am (muse/m/4_common.am 1.1 644)) + (aclocal.m4 (muse/m/5_aclocal.m4 1.1 644)) + (COPYING (/usr/share/automake-1.7/COPYING) :symlink) + (INSTALL (/usr/share/automake-1.7/INSTALL) :symlink) + (config.sub (/usr/share/automake-1.7/config.sub) :symlink) + (config.guess (/usr/share/automake-1.7/config.guess) :symlink) + (ltmain.sh (/usr/share/libtool/ltmain.sh) :symlink) + + (grepmidi/grepmidi.cpp (muse/m/6_grepmidi.c 1.1 644)) + (grepmidi/Makefile.am (muse/m/7_Makefile.a 1.1 644)) + + (plugins/freeverb/denormals.h (muse/m/8_denormals. 1.1 644)) + (plugins/freeverb/tuning.h (muse/m/9_tuning.h 1.1 644)) + (plugins/freeverb/readme.txt (muse/m/10_readme.txt 1.1 644)) + (plugins/freeverb/revmodel.h (muse/m/11_revmodel.h 1.1 644)) + (plugins/freeverb/Makefile.am (muse/m/12_Makefile.a 1.1 644)) + (plugins/freeverb/comb.h (muse/m/13_comb.h 1.1 644)) + (plugins/freeverb/freeverb.cpp (muse/m/14_freeverb.c 1.1 644)) + (plugins/freeverb/allpass.h (muse/m/15_allpass.h 1.1 644)) + (plugins/freeverb/revmodel.cpp (muse/m/16_revmodel.c 1.1 644)) + (plugins/Makefile.am (muse/m/17_Makefile.a 1.1 644)) + + (plugins/plugins-install.am (muse/m/18_plugins-in 1.1 644)) + + (synti/Makefile.am (muse/m/19_Makefile.a 1.1 644)) + (synti/synti-install.am (muse/m/20_synti-inst 1.1 644)) + (synti/organ/organ.cpp (muse/m/21_organ.cpp 1.1 644)) + (synti/organ/organ.h (muse/m/22_organ.h 1.1 644)) + (synti/organ/organguibase.ui (muse/m/23_organguiba 1.1 644)) + (synti/organ/Makefile.am (muse/m/24_Makefile.a 1.1 644)) + (synti/organ/fdialogbuttons.h (muse/m/25_fdialogbut 1.2 644)) + (synti/organ/organgui.h (muse/m/26_organgui.h 1.1 644)) + (synti/organ/fdialogbuttons.ui (muse/m/27_fdialogbut 1.1 644)) + (synti/organ/organgui.cpp (muse/m/28_organgui.c 1.1 644)) + (synti/organ/organguibase.h (muse/m/29_organguiba 1.2 644)) + (synti/fluid/fluidgui.cpp (muse/m/30_fluidgui.c 1.1 644)) + (synti/fluid/fluidguibase.ui (muse/m/31_fluidguiba 1.1 644)) + (synti/fluid/synth.cpp (muse/m/32_synth.cpp 1.1 644)) + (synti/fluid/Makefile.am (muse/m/33_Makefile.a 1.1 644)) + (synti/fluid/synth.h (muse/m/34_synth.h 1.1 644)) + + (synti/fluid/fluid.cpp (muse/m/35_fluid.cpp 1.1 644)) + (synti/fluid/fluidgui.h (muse/m/36_fluidgui.h 1.1 644)) + + (synti/vam/vamgui.cpp (muse/m/37_vamgui.cpp 1.1 644)) + (synti/vam/COPYING (muse/m/38_COPYING 1.1 644)) + (synti/vam/ChangeLog (muse/m/39_ChangeLog 1.1 644)) + (synti/vam/vamgui.h (muse/m/40_vamgui.h 1.1 644)) + (synti/vam/vam.cpp (muse/m/41_vam.cpp 1.1 644)) + (synti/vam/Makefile.am (muse/m/42_Makefile.a 1.1 644)) + (synti/vam/fdialogbuttons.h (muse/m/43_fdialogbut 1.1 644)) + (synti/vam/fdialogbuttons.ui (muse/m/44_fdialogbut 1.1 644)) + (synti/vam/vamguibase.h (muse/m/45_vamguibase 1.1 644)) + (synti/vam/README (muse/m/46_README 1.1 644)) + (synti/vam/vam.h (muse/m/47_vam.h 1.1 644)) + (synti/vam/vamguibase.ui (muse/m/48_vamguibase 1.1 644)) + (synti/vam/TODO (muse/m/49_TODO 1.1 644)) + + (synti/s1/s1.cpp (muse/m/50_s1.cpp 1.1 644)) + (synti/s1/Makefile.am (muse/m/51_Makefile.a 1.1 644)) + + (share/plugins/1050.ui (muse/n/0_1050.ui 1.1 644)) + (share/plugins/Makefile.am (muse/n/1_Makefile.a 1.1 644)) + + (share/instruments/Yamaha-P50m.idf (muse/n/2_Yamaha-P50 1.1 644)) + (share/instruments/ns5r.idf (muse/n/3_ns5r.idf 1.1 644)) + (share/instruments/Roland-XP30.idf (muse/n/4_Roland-XP3 1.1 644)) + (share/instruments/MC303.idf (muse/n/5_MC303.idf 1.1 644)) + (share/instruments/Makefile.am (muse/n/6_Makefile.a 1.1 644)) + (share/instruments/gm.idf (muse/n/7_gm.idf 1.1 644)) + (share/instruments/Yamaha-S90.idf (muse/n/8_Yamaha-S90 1.1 644)) + (share/instruments/AlesisQS6.idf (muse/n/9_AlesisQS6. 1.1 644)) + (share/instruments/xg.idf (muse/x/29_xg.idf 1.1 644)) + (share/instruments/gs.idf (muse/x/30_gs.idf 1.1 644)) + + (share/drummaps/Makefile.am (muse/n/10_Makefile.a 1.1 644)) + (share/drummaps/sc88-pc1.map (muse/n/11_sc88-pc1.m 1.1 644)) + + (share/locale/muse_sv_SE.ts (muse/n/12_muse_sv_SE 1.1 644)) + (share/locale/muse_sv_SE.qm (muse/n/13_muse_sv_SE 1.1 644) :no-keywords) + (share/locale/Makefile.am (muse/n/14_Makefile.a 1.1 644)) + (share/locale/muse_ru.ts (muse/n/15_muse_ru.ts 1.1 644)) + (share/locale/muse_ru.qm (muse/n/16_muse_ru.qm 1.1 644) :no-keywords) + (share/locale/muse_fr.ts (muse/n/17_muse_fr.ts 1.1 644)) + (share/locale/muse_fr.qm (muse/n/18_muse_fr.qm 1.1 644) :no-keywords) + (share/locale/muse_es.ts (muse/n/19_muse_es.ts 1.1 644)) + (share/locale/muse_es.qm (muse/n/20_muse_es.qm 1.1 644) :no-keywords) + (share/locale/muse_de.ts (muse/n/21_muse_de.ts 1.1 644)) + (share/locale/muse_de.qm (muse/n/22_muse_de.qm 1.1 644) :no-keywords) + + (share/Makefile.am (muse/n/23_Makefile.a 1.1 644)) + (share/wallpapers/paper1.jpg (muse/n/24_paper1.jpg 1.1 644) :no-keywords) + (share/wallpapers/Makefile.am (muse/n/25_Makefile.a 1.1 644)) + (share/wallpapers/gray_rock.gif (muse/n/26_gray_rock. 1.1 644) :no-keywords) + (share/wallpapers/gray.gif (muse/n/27_gray.gif 1.1 644) :no-keywords) + (share/wallpapers/gray_stucco.gif (muse/n/28_gray_stucc 1.1 644) :no-keywords) + (share/wallpapers/stone1.gif (muse/n/29_stone1.gif 1.1 644) :no-keywords) + (share/html/invocation.html (muse/n/30_invocation 1.1 644)) + (share/html/left_pane.jpg (muse/n/31_left_pane. 1.1 644) :no-keywords) + (share/html/styles.css (muse/n/32_styles.css 1.1 644)) + (share/html/button_bar.jpg (muse/n/33_button_bar 1.1 644) :no-keywords) + (share/html/COPYING.html (muse/n/34_COPYING.ht 1.1 644)) + (share/html/main_window.jpg (muse/n/35_main_windo 1.1 644) :no-keywords) + (share/html/toc_.txt (muse/n/36_toc_.txt 1.1 644)) + (share/html/Makefile.am (muse/n/37_Makefile.a 1.1 644)) + (share/html/track_info.jpg (muse/n/38_track_info 1.1 644) :no-keywords) + (share/html/getting_started.html (muse/n/39_getting_st 1.1 644)) + (share/html/index.html (muse/n/40_index.html 1.1 644)) + (share/html/window_ref.html (muse/n/41_window_ref 1.1 644)) + (share/html/installation.html (muse/n/42_installati 1.1 644)) + (share/html/main_window_track_info.jpg (muse/n/43_main_windo 1.1 644) :no-keywords) + (share/html/right_pane.jpg (muse/n/44_right_pane 1.1 644) :no-keywords) + + (demos/Makefile.am (muse/n/45_Makefile.a 1.1 644)) + (demos/rasen.med (muse/n/46_rasen.med 1.1 644)) + + (muse/Makefile.am (muse/n/47_Makefile.a 1.1 644)) + + (muse/helper.h (muse/n/48_helper.h 1.1 644)) + (muse/tempo.cpp (muse/n/49_tempo.cpp 1.1 644)) + (muse/memory.h (muse/n/50_memory.h 1.1 644)) + (muse/help.cpp (muse/n/51_help.cpp 1.1 644)) + (muse/cliplist/cliplist.cpp (muse/o/0_cliplist.c 1.1 644)) + (muse/cliplist/Makefile.am (muse/o/1_Makefile.a 1.1 644)) + (muse/cliplist/cliplist.h (muse/o/2_cliplist.h 1.1 644)) + (muse/thread.cpp (muse/o/3_thread.cpp 1.2 644)) + (muse/globals.cpp (muse/o/4_globals.cp 1.2 644)) + (muse/pos.cpp (muse/o/5_pos.cpp 1.2 644)) + (muse/track.cpp (muse/o/6_track.cpp 1.1 644)) + (muse/midictrl.h (muse/o/7_midictrl.h 1.2 644)) + (muse/node.cpp (muse/o/8_node.cpp 1.2 644)) + + (muse/widgets/mmath.cpp (muse/o/9_mmath.cpp 1.1 644)) + (muse/widgets/dimap.cpp (muse/o/10_dimap.cpp 1.1 644)) + (muse/widgets/utils.cpp (muse/o/11_utils.cpp 1.1 644)) + (muse/widgets/sclif.cpp (muse/o/12_sclif.cpp 1.1 644)) + (muse/widgets/filedialog.cpp (muse/o/13_filedialog 1.1 644)) + (muse/widgets/citem.h (muse/o/14_citem.h 1.1 644)) + (muse/widgets/bigtime.cpp (muse/o/15_bigtime.cp 1.1 644)) + (muse/widgets/velocitybase.h (muse/o/16_velocityba 1.2 644)) + (muse/widgets/view.cpp (muse/o/17_view.cpp 1.1 644)) + (muse/widgets/scldraw.h (muse/o/18_scldraw.h 1.1 644)) + (muse/widgets/sliderbase.h (muse/o/19_sliderbase 1.1 644)) + (muse/widgets/hitscale.cpp (muse/o/20_hitscale.c 1.1 644)) + (muse/widgets/itransformbase.ui (muse/o/21_itransform 1.1 644)) + (muse/widgets/header.cpp (muse/o/22_header.cpp 1.1 644)) + (muse/widgets/.cvsignore (muse/o/23_.cvsignore 1.1 644)) + (muse/widgets/mittransposebase.h (muse/o/24_mittranspo 1.2 644)) + (muse/widgets/tempolabel.h (muse/o/25_tempolabel 1.1 644)) + (muse/widgets/velocity.cpp (muse/o/26_velocity.c 1.1 644)) + (muse/widgets/midirawbase.ui (muse/o/27_midirawbas 1.1 644)) + (muse/widgets/drange.cpp (muse/o/28_drange.cpp 1.1 644)) + (muse/widgets/header.h (muse/o/29_header.h 1.1 644)) + (muse/widgets/mlabel.h (muse/o/30_mlabel.h 1.1 644)) + (muse/widgets/spinboxFP.cpp (muse/o/31_spinboxFP. 1.1 644)) + (muse/widgets/mlabel.cpp (muse/o/32_mlabel.cpp 1.1 644)) + (muse/widgets/metronome.cpp (muse/o/33_metronome. 1.1 644)) + (muse/widgets/ctrlcombo.cw (muse/o/34_ctrlcombo. 1.1 644)) + (muse/widgets/sigedit.h (muse/o/35_sigedit.h 1.1 644)) + (muse/widgets/intlabel.h (muse/o/36_intlabel.h 1.1 644)) + (muse/widgets/comment.cpp (muse/o/37_comment.cp 1.1 644)) + (muse/widgets/ctrlcombo.cpp (muse/o/38_ctrlcombo. 1.1 644)) + (muse/widgets/mixdowndialog.cpp (muse/o/39_mixdowndia 1.1 644)) + (muse/widgets/mtrackinfobase.h (muse/o/40_mtrackinfo 1.2 644)) + (muse/widgets/fontsel.cpp (muse/o/41_fontsel.cp 1.1 644)) + (muse/widgets/hitscale.h (muse/o/42_hitscale.h 1.1 644)) + (muse/widgets/posedit.cpp (muse/o/43_posedit.cp 1.1 644)) + (muse/widgets/audioconfbase.ui (muse/o/44_audioconfb 1.2 644)) + (muse/widgets/utils.h (muse/o/45_utils.h 1.1 644)) + (muse/widgets/splitter.cpp (muse/o/46_splitter.c 1.1 644)) + (muse/widgets/editctrl7dialogbase.ui (muse/o/47_editctrl7d 1.1 644)) + (muse/widgets/doublelabel.h (muse/o/48_doublelabe 1.1 644)) + (muse/widgets/noteinfo.h (muse/o/49_noteinfo.h 1.1 644)) + (muse/widgets/sigscale.h (muse/o/50_sigscale.h 1.1 644)) + (muse/widgets/canvas.cpp (muse/o/51_canvas.cpp 1.1 644)) + (muse/widgets/view.h (muse/p/0_view.h 1.1 644)) + (muse/widgets/audioconf.h (muse/p/1_audioconf. 1.2 644)) + (muse/widgets/transposebase.ui (muse/p/2_transposeb 1.1 644)) + (muse/widgets/spinboxFP.h (muse/p/3_spinboxFP. 1.1 644)) + (muse/widgets/mtscale.h (muse/p/4_mtscale.h 1.1 644)) + (muse/widgets/wtrackinfobase.h (muse/p/5_wtrackinfo 1.2 644)) + (muse/widgets/editsysexdialogbase.h (muse/p/6_editsysexd 1.2 644)) + (muse/widgets/editmetadialogbase.h (muse/p/7_editmetadi 1.2 644)) + (muse/widgets/nentry.cpp (muse/p/8_nentry.cpp 1.1 644)) + (muse/widgets/siglabel.h (muse/p/9_siglabel.h 1.1 644)) + (muse/widgets/transformbase.ui (muse/p/10_transformb 1.1 644)) + (muse/widgets/mittransposebase.ui (muse/p/11_mittranspo 1.1 644)) + (muse/widgets/dentry.h (muse/p/12_dentry.h 1.1 644)) + (muse/widgets/slider.h (muse/p/13_slider.h 1.1 644)) + (muse/widgets/wtscale.cpp (muse/p/14_wtscale.cp 1.1 644)) + (muse/widgets/action.h (muse/p/15_action.h 1.1 644)) + (muse/widgets/audioconfbase.h (muse/p/16_audioconfb 1.2 644)) + (muse/widgets/nentry.h (muse/p/17_nentry.h 1.1 644)) + (muse/widgets/ttoolbar.h (muse/p/18_ttoolbar.h 1.1 644)) + (muse/widgets/comboQuant.cpp (muse/p/19_comboQuant 1.1 644)) + (muse/widgets/midisyncimpl.h (muse/p/20_midisyncim 1.1 644)) + (muse/widgets/sliderbase.cpp (muse/p/21_sliderbase 1.1 644)) + (muse/widgets/genset.cpp (muse/p/22_genset.cpp 1.1 644)) + (muse/widgets/mktest (muse/p/23_mktest 1.1 644)) + (muse/widgets/velocity.h (muse/p/24_velocity.h 1.1 644)) + (muse/widgets/poslabel.h (muse/p/25_poslabel.h 1.1 644)) + (muse/widgets/knob.h (muse/p/26_knob.h 1.1 644)) + (muse/widgets/cliplisteditorbase.ui (muse/p/27_cliplisted 1.1 644)) + (muse/widgets/splitter.h (muse/p/28_splitter.h 1.1 644)) + (muse/widgets/sigedit.cpp (muse/p/29_sigedit.cp 1.1 644)) + (muse/widgets/audioconf.cpp (muse/p/30_audioconf. 1.2 644)) + (muse/widgets/itransformbase.h (muse/p/31_itransform 1.2 644)) + (muse/widgets/swidget.h (muse/p/32_swidget.h 1.1 644)) + (muse/widgets/tools.h (muse/p/33_tools.h 1.1 644)) + (muse/widgets/pitchlabel.h (muse/p/34_pitchlabel 1.1 644)) + (muse/widgets/Makefile.am (muse/p/35_Makefile.a 1.1 644)) + (muse/widgets/intlabel.cpp (muse/p/36_intlabel.c 1.1 644)) + (muse/widgets/citem.cpp (muse/p/37_citem.cpp 1.1 644)) + (muse/widgets/canvas.h (muse/p/38_canvas.h 1.1 644)) + (muse/widgets/doublelabel.cpp (muse/p/39_doublelabe 1.1 644)) + (muse/widgets/slider.cpp (muse/p/40_slider.cpp 1.1 644)) + (muse/widgets/mmath.h (muse/p/41_mmath.h 1.1 644)) + (muse/widgets/wtscale.h (muse/p/42_wtscale.h 1.1 644)) + (muse/widgets/genset.h (muse/p/43_genset.h 1.1 644)) + (muse/widgets/posedit.h (muse/p/44_posedit.h 1.1 644)) + (muse/widgets/velocitybase.ui (muse/p/45_velocityba 1.1 644)) + (muse/widgets/ttoolbar.cpp (muse/p/46_ttoolbar.c 1.1 644)) + (muse/widgets/scrollscale.cpp (muse/p/47_scrollscal 1.1 644)) + (muse/widgets/mtscale.cpp (muse/p/48_mtscale.cp 1.1 644)) + (muse/widgets/fdialogbuttons.h (muse/p/49_fdialogbut 1.2 644)) + (muse/widgets/noteinfo.cpp (muse/p/50_noteinfo.c 1.1 644)) + (muse/widgets/lcombo.cpp (muse/p/51_lcombo.cpp 1.1 644)) + (muse/widgets/appearancebase.ui (muse/q/0_appearance 1.1 644)) + (muse/widgets/vscale.h (muse/q/1_vscale.h 1.1 644)) + (muse/widgets/scldiv.h (muse/q/2_scldiv.h 1.1 644)) + (muse/widgets/drange.h (muse/q/3_drange.h 1.1 644)) + (muse/widgets/midirawbase.h (muse/q/4_midirawbas 1.2 644)) + (muse/widgets/midisync.ui (muse/q/5_midisync.u 1.1 644)) + (muse/widgets/wtrackinfobase.ui (muse/q/6_wtrackinfo 1.1 644)) + (muse/widgets/vscale.cpp (muse/q/7_vscale.cpp 1.1 644)) + (muse/widgets/editsysexdialogbase.ui (muse/q/8_editsysexd 1.1 644)) + (muse/widgets/cliplisteditorbase.h (muse/q/9_cliplisted 1.2 644)) + (muse/widgets/gatetimebase.ui (muse/q/10_gatetimeba 1.1 644)) + (muse/widgets/editmetadialogbase.ui (muse/q/11_editmetadi 1.1 644)) + (muse/widgets/sigscale.cpp (muse/q/12_sigscale.c 1.1 644)) + (muse/widgets/mtrackinfobase.ui (muse/q/13_mtrackinfo 1.2 644)) + (muse/widgets/metronome.h (muse/q/14_metronome. 1.1 644)) + (muse/widgets/mixdowndialogbase.h (muse/q/15_mixdowndia 1.2 644)) + (muse/widgets/synthconfigbase.h (muse/q/16_synthconfi 1.2 644)) + (muse/widgets/gatetime.cpp (muse/q/17_gatetime.c 1.1 644)) + (muse/widgets/tb1.cpp (muse/q/18_tb1.cpp 1.1 644)) + (muse/widgets/gensetbase.ui (muse/q/19_gensetbase 1.1 644)) + (muse/widgets/editctrl7dialogbase.h (muse/q/20_editctrl7d 1.2 644)) + (muse/widgets/scldraw.cpp (muse/q/21_scldraw.cp 1.1 644)) + (muse/widgets/bigtime.h (muse/q/22_bigtime.h 1.1 644)) + (muse/widgets/poslabel.cpp (muse/q/23_poslabel.c 1.1 644)) + (muse/widgets/metronomebase.ui (muse/q/24_metronomeb 1.1 644)) + (muse/widgets/scrollscale.h (muse/q/25_scrollscal 1.1 644)) + (muse/widgets/fdialogbuttons.ui (muse/q/26_fdialogbut 1.1 644)) + (muse/widgets/sclif.h (muse/q/27_sclif.h 1.1 644)) + (muse/widgets/tools.cpp (muse/q/28_tools.cpp 1.1 644)) + (muse/widgets/metronomebase.h (muse/q/29_metronomeb 1.2 644)) + (muse/widgets/filedialog.h (muse/q/30_filedialog 1.1 644)) + (muse/widgets/pitchlabel.cpp (muse/q/31_pitchlabel 1.1 644)) + (muse/widgets/scldiv.cpp (muse/q/32_scldiv.cpp 1.1 644)) + (muse/widgets/musewidgetsplug.cpp (muse/q/33_musewidget 1.1 644)) + (muse/widgets/midisyncimpl.cpp (muse/q/34_midisyncim 1.1 644)) + (muse/widgets/commentbase.ui (muse/q/35_commentbas 1.1 644)) + (muse/widgets/dentry.cpp (muse/q/36_dentry.cpp 1.1 644)) + (muse/widgets/comment.h (muse/q/37_comment.h 1.1 644)) + (muse/widgets/ctrlcombo.h (muse/q/38_ctrlcombo. 1.1 644)) + (muse/widgets/comboQuant.h (muse/q/39_comboQuant 1.1 644)) + (muse/widgets/gatetime.h (muse/q/40_gatetime.h 1.1 644)) + (muse/widgets/tb1.h (muse/q/41_tb1.h 1.1 644)) + (muse/widgets/editnotedialogbase.ui (muse/q/42_editnotedi 1.1 644)) + (muse/widgets/pitchedit.h (muse/q/43_pitchedit. 1.1 644)) + (muse/widgets/lcombo.h (muse/q/44_lcombo.h 1.1 644)) + (muse/widgets/appearancebase.h (muse/q/45_appearance 1.2 644)) + (muse/widgets/midisync.h (muse/q/46_midisync.h 1.2 644)) + (muse/widgets/fontsel.h (muse/q/47_fontsel.h 1.1 644)) + (muse/widgets/gatetimebase.h (muse/q/48_gatetimeba 1.2 644)) + (muse/widgets/tempolabel.cpp (muse/q/49_tempolabel 1.1 644)) + (muse/widgets/gensetbase.h (muse/q/50_gensetbase 1.2 644)) + (muse/widgets/knob.cpp (muse/q/51_knob.cpp 1.1 644)) + (muse/widgets/dimap.h (muse/r/0_dimap.h 1.1 644)) + (muse/widgets/pitchedit.cpp (muse/r/1_pitchedit. 1.1 644)) + (muse/widgets/siglabel.cpp (muse/r/2_siglabel.c 1.1 644)) + (muse/widgets/mixdowndialog.h (muse/r/3_mixdowndia 1.1 644)) + (muse/widgets/transposebase.h (muse/r/4_transposeb 1.2 644)) + (muse/widgets/transformbase.h (muse/r/5_transformb 1.2 644)) + (muse/widgets/mixdowndialogbase.ui (muse/r/6_mixdowndia 1.1 644)) + (muse/widgets/synthconfigbase.ui (muse/r/7_synthconfi 1.1 644)) + (muse/widgets/swidget.cpp (muse/r/8_swidget.cp 1.1 644)) + (muse/widgets/section.h (muse/r/9_section.h 1.1 644)) + (muse/widgets/commentbase.h (muse/r/10_commentbas 1.2 644)) + (muse/widgets/editnotedialogbase.h (muse/r/11_editnotedi 1.2 644)) + (muse/transport.h (muse/r/12_transport. 1.1 644)) + (muse/transpose.h (muse/r/13_transpose. 1.1 644)) + (muse/seqmsg.cpp (muse/r/14_seqmsg.cpp 1.2 644)) + (muse/audio.h (muse/r/15_audio.h 1.2 644)) + (muse/globals.h (muse/r/16_globals.h 1.2 644)) + (muse/arranger/pcanvas.h (muse/r/17_pcanvas.h 1.1 644)) + (muse/arranger/alayout.h (muse/r/18_alayout.h 1.1 644)) + (muse/arranger/tlist.cpp (muse/r/19_tlist.cpp 1.1 644)) + (muse/arranger/arranger.h (muse/r/20_arranger.h 1.2 644)) + (muse/arranger/alayout.cpp (muse/r/21_alayout.cp 1.2 644)) + (muse/arranger/Makefile.am (muse/r/22_Makefile.a 1.1 644)) + (muse/arranger/tlist.h (muse/r/23_tlist.h 1.1 644)) + (muse/arranger/pcanvas.cpp (muse/r/24_pcanvas.cp 1.1 644)) + (muse/arranger/arranger.cpp (muse/r/25_arranger.c 1.2 644)) + (muse/app.cpp (muse/r/26_app.cpp 1.2 644)) + (muse/thread.h (muse/r/27_thread.h 1.1 644)) + (muse/icons.h (muse/r/28_icons.h 1.1 644)) + + (muse/instruments/editinstrument.h (muse/r/29_editinstru 1.1 644)) + (muse/instruments/ccontrolbase.h (muse/r/30_ccontrolba 1.2 644)) + (muse/instruments/ccontrolbase.ui (muse/r/31_ccontrolba 1.1 644)) + (muse/instruments/midictrledit.cpp (muse/r/32_midictrled 1.1 644)) + (muse/instruments/minstrument.h (muse/r/33_minstrumen 1.2 644)) + (muse/instruments/Makefile.am (muse/r/34_Makefile.a 1.1 644)) + (muse/instruments/midictrledit.h (muse/r/35_midictrled 1.1 644)) + (muse/instruments/editinstrument.cpp (muse/r/36_editinstru 1.1 644)) + (muse/instruments/minstrument.cpp (muse/r/37_minstrumen 1.2 644)) + (muse/instruments/editinstrumentbase.ui (muse/r/38_editinstru 1.1 644)) + (muse/instruments/editinstrumentbase.h (muse/r/39_editinstru 1.2 644)) + (muse/device.h (muse/r/40_device.h 1.1 644)) + (muse/icons.cpp (muse/r/41_icons.cpp 1.1 644)) + (muse/wave.h (muse/r/42_wave.h 1.1 644)) + (muse/ladspa.h (muse/r/43_ladspa.h 1.1 644)) + (muse/stamp-h1 (muse/r/44_stamp-h1 1.1 644)) + (muse/undo.h (muse/r/45_undo.h 1.1 644)) + (muse/sync.h (muse/r/46_sync.h 1.1 644)) + (muse/stamp-chown (muse/r/47_stamp-chow 1.1 644)) + + (muse/waveevent.cpp (muse/r/48_waveevent. 1.1 644)) + (muse/song.h (muse/r/49_song.h 1.2 644)) + (muse/synth.cpp (muse/r/50_synth.cpp 1.1 644)) + (muse/value.cpp (muse/r/51_value.cpp 1.1 644)) + (muse/midiport.cpp (muse/s/0_midiport.c 1.3 644)) + (muse/givertcap.c (muse/s/1_givertcap. 1.1 644)) + (muse/value.h (muse/s/2_value.h 1.1 644)) + (muse/part.h (muse/s/3_part.h 1.1 644)) + (muse/node.h (muse/s/4_node.h 1.1 644)) + (muse/synthconfig.h (muse/s/5_synthconfi 1.1 644)) + (muse/cobject.cpp (muse/s/6_cobject.cp 1.1 644)) + + (muse/mplugins/midifilterimpl.cpp (muse/s/7_midifilter 1.1 644)) + (muse/mplugins/rhythm.cpp (muse/s/8_rhythm.cpp 1.1 644)) + (muse/mplugins/.cvsignore (muse/s/9_.cvsignore 1.1 644)) + (muse/mplugins/rhythmbase.ui (muse/s/10_rhythmbase 1.1 644)) + (muse/mplugins/midifilter.ui (muse/s/11_midifilter 1.1 644)) + (muse/mplugins/mitplugin.h (muse/s/12_mitplugin. 1.1 644)) + (muse/mplugins/rhythm.h (muse/s/13_rhythm.h 1.1 644)) + (muse/mplugins/midifilter.h (muse/s/14_midifilter 1.2 644)) + (muse/mplugins/midiitransform.h (muse/s/15_midiitrans 1.1 644)) + (muse/mplugins/mittranspose.cpp (muse/s/16_mittranspo 1.1 644)) + (muse/mplugins/mrconfigbase.ui (muse/s/17_mrconfigba 1.1 644)) + (muse/mplugins/mrconfig.cpp (muse/s/18_mrconfig.c 1.1 644)) + (muse/mplugins/mrconfig.h (muse/s/19_mrconfig.h 1.1 644)) + (muse/mplugins/Makefile.am (muse/s/20_Makefile.a 1.1 644)) + (muse/mplugins/random.h (muse/s/21_random.h 1.1 644)) + (muse/mplugins/midiitransform.cpp (muse/s/22_midiitrans 1.1 644)) + (muse/mplugins/mrconfigbase.h (muse/s/23_mrconfigba 1.2 644)) + (muse/mplugins/mittranspose.h (muse/s/24_mittranspo 1.1 644)) + (muse/mplugins/rhythmbase.h (muse/s/25_rhythmbase 1.2 644)) + (muse/mplugins/mitplugin.cpp (muse/s/26_mitplugin. 1.1 644)) + (muse/mplugins/midifilterimpl.h (muse/s/27_midifilter 1.1 644)) + (muse/mplugins/random.cpp (muse/s/28_random.cpp 1.1 644)) + (muse/waveedit/Makefile.am (muse/s/29_Makefile.a 1.1 644)) + (muse/waveedit/waveview.h (muse/s/30_waveview.h 1.1 644)) + (muse/waveedit/waveedit.cpp (muse/s/31_waveedit.c 1.1 644)) + (muse/waveedit/waveedit.h (muse/s/32_waveedit.h 1.1 644)) + (muse/waveedit/waveview.cpp (muse/s/33_waveview.c 1.1 644)) + (muse/midieditor.cpp (muse/s/34_midieditor 1.1 644)) + (muse/wave.cpp (muse/s/35_wave.cpp 1.1 644)) + (muse/midi.h (muse/s/36_midi.h 1.1 644)) + (muse/mess.h (muse/s/37_mess.h 1.1 644)) + (muse/sync.cpp (muse/s/38_sync.cpp 1.1 644)) + (muse/master/masteredit.cpp (muse/s/39_masteredit 1.1 644)) + (muse/master/lmaster.cpp (muse/s/40_lmaster.cp 1.1 644)) + (muse/master/tscale.cpp (muse/s/41_tscale.cpp 1.1 644)) + (muse/master/Makefile.am (muse/s/42_Makefile.a 1.1 644)) + (muse/master/master.h (muse/s/43_master.h 1.1 644)) + (muse/master/masteredit.h (muse/s/44_masteredit 1.1 644)) + (muse/master/lmaster.h (muse/s/45_lmaster.h 1.1 644)) + (muse/master/tscale.h (muse/s/46_tscale.h 1.1 644)) + (muse/master/master.cpp (muse/s/47_master.cpp 1.1 644)) + (muse/marker/Makefile.am (muse/s/48_Makefile.a 1.1 644)) + (muse/marker/marker.h (muse/s/49_marker.h 1.1 644)) + (muse/marker/markerview.cpp (muse/s/50_markerview 1.1 644)) + (muse/marker/markerview.h (muse/s/51_markerview 1.1 644)) + (muse/marker/marker.cpp (muse/t/0_marker.cpp 1.1 644)) + (muse/track.h (muse/t/1_track.h 1.1 644)) + (muse/mtc.cpp (muse/t/2_mtc.cpp 1.1 644)) + (muse/cobject.h (muse/t/3_cobject.h 1.1 644)) + (muse/synth.h (muse/t/4_synth.h 1.2 644)) + (muse/songfile.cpp (muse/t/5_songfile.c 1.1 644)) + (muse/midictrl.cpp (muse/t/6_midictrl.c 1.2 644)) + (muse/mpevent.h (muse/t/7_mpevent.h 1.1 644)) + + (muse/driver/audiodev.h (muse/t/8_audiodev.h 1.1 644)) + (muse/driver/midiserial.h (muse/t/9_midiserial 1.1 644)) + + (muse/driver/midirawin.h (muse/t/10_midirawin. 1.1 644)) + (muse/driver/midirawdev.h (muse/t/11_midirawdev 1.2 644)) + (muse/driver/alsamidi.cpp (muse/t/12_alsamidi.c 1.3 644)) + (muse/driver/alsamidi.h (muse/t/13_alsamidi.h 1.3 644)) + (muse/driver/Makefile.am (muse/t/14_Makefile.a 1.1 644)) + (muse/driver/jack.cpp (muse/t/15_jack.cpp 1.2 644)) + (muse/driver/midirawin.cpp (muse/t/16_midirawin. 1.1 644)) + (muse/driver/alsaaudio.h (muse/t/17_alsaaudio. 1.2 644)) + (muse/driver/midiserial.cpp (muse/t/18_midiserial 1.1 644)) + (muse/driver/alsaaudio.cpp (muse/t/19_alsaaudio. 1.2 644)) + (muse/driver/midirawdev.cpp (muse/t/20_midirawdev 1.2 644)) + (muse/driver/jackaudio.h (muse/t/21_jackaudio. 1.2 644)) + + (muse/conf.cpp (muse/t/22_conf.cpp 1.2 644)) + (muse/conf.h (muse/t/23_conf.h 1.1 644)) + (muse/midiedit/drummap.cpp (muse/t/24_drummap.cp 1.1 644)) + (muse/midiedit/dcanvas.h (muse/t/25_dcanvas.h 1.1 644)) + (muse/midiedit/piano.h (muse/t/26_piano.h 1.1 644)) + (muse/midiedit/drummap.h (muse/t/27_drummap.h 1.1 644)) + (muse/midiedit/drumedit.h (muse/t/28_drumedit.h 1.1 644)) + (muse/midiedit/prcanvas.cpp (muse/t/29_prcanvas.c 1.1 644)) + (muse/midiedit/dcanvas.cpp (muse/t/30_dcanvas.cp 1.1 644)) + (muse/midiedit/Makefile.am (muse/t/31_Makefile.a 1.1 644)) + (muse/midiedit/dlist.cpp (muse/t/32_dlist.cpp 1.1 644)) + (muse/midiedit/pianoroll.cpp (muse/t/33_pianoroll. 1.1 644)) + (muse/midiedit/ecanvas.h (muse/t/34_ecanvas.h 1.1 644)) + (muse/midiedit/quantconfig.h (muse/t/35_quantconfi 1.1 644)) + (muse/midiedit/quantconfig.cpp (muse/t/36_quantconfi 1.1 644)) + (muse/midiedit/ecanvas.cpp (muse/t/37_ecanvas.cp 1.1 644)) + (muse/midiedit/piano.cpp (muse/t/38_piano.cpp 1.1 644)) + (muse/midiedit/prcanvas.h (muse/t/39_prcanvas.h 1.1 644)) + (muse/midiedit/drumedit.cpp (muse/t/40_drumedit.c 1.1 644)) + (muse/midiedit/dlist.h (muse/t/41_dlist.h 1.1 644)) + (muse/midiedit/cmd.h (muse/t/42_cmd.h 1.1 644)) + (muse/midiedit/pianoroll.h (muse/t/43_pianoroll. 1.1 644)) + (muse/event.cpp (muse/t/44_event.cpp 1.1 644)) + (muse/midi.cpp (muse/t/45_midi.cpp 1.2 644)) + (muse/waveevent.h (muse/t/46_waveevent. 1.1 644)) + (muse/event.h (muse/t/47_event.h 1.1 644)) + (muse/audioprefetch.h (muse/t/48_audioprefe 1.1 644)) + (muse/mpevent.cpp (muse/t/49_mpevent.cp 1.3 644)) + (muse/appearance.cpp (muse/t/50_appearance 1.1 644)) + (muse/tempo.h (muse/t/51_tempo.h 1.1 644)) + (muse/muse.pro (muse/u/0_muse.pro 1.1 644)) + (muse/muse.log (muse/u/1_muse.log 1.1 644)) + (muse/patchbay/Makefile.am (muse/u/2_Makefile.a 1.1 644)) + (muse/patchbay/patchbay.cpp (muse/u/3_patchbay.c 1.1 644)) + (muse/patchbay/patchbaybase.ui (muse/u/4_patchbayba 1.1 644)) + (muse/patchbay/patchbay.h (muse/u/5_patchbay.h 1.1 644)) + (muse/part.cpp (muse/u/6_part.cpp 1.1 644)) + (muse/make.inc (muse/u/7_make.inc 1.1 644)) + (muse/confmport.h (muse/u/8_confmport. 1.1 644)) + (muse/audio.cpp (muse/u/9_audio.cpp 1.3 644)) + (muse/confmport.cpp (muse/u/10_confmport. 1.1 644)) + (muse/synthconfig.cpp (muse/u/11_synthconfi 1.1 644)) + (muse/cfprint.h (muse/u/12_cfprint.h 1.1 644)) + (muse/eventlist.h (muse/u/13_eventlist. 1.1 644)) + (muse/sig.cpp (muse/u/14_sig.cpp 1.1 644)) + + (muse/midieditor.h (muse/u/15_midieditor 1.1 644)) + (muse/midievent.h (muse/u/16_midievent. 1.2 644)) + (muse/appearance.h (muse/u/17_appearance 1.1 644)) + (muse/globaldefs.h (muse/u/18_globaldefs 1.1 644)) + + (muse/miditransform.cpp (muse/u/19_miditransf 1.1 644)) + (muse/helper.cpp (muse/u/20_helper.cpp 1.1 644)) + (muse/miditransform.h (muse/u/21_miditransf 1.1 644)) + (muse/audioprefetch.cpp (muse/u/22_audioprefe 1.1 644)) + (muse/transport.cpp (muse/u/23_transport. 1.1 644)) + (muse/eventlist.cpp (muse/u/24_eventlist. 1.1 644)) + (muse/transpose.cpp (muse/u/25_transpose. 1.1 644)) + (muse/xml.h (muse/u/26_xml.h 1.1 644)) + (muse/sig.h (muse/u/27_sig.h 1.1 644)) + + (muse/pos.h (muse/u/28_pos.h 1.2 644)) + (muse/mtc.h (muse/u/29_mtc.h 1.1 644)) + (muse/mixer/amixer.h (muse/u/30_amixer.h 1.1 644)) + (muse/mixer/meter.cpp (muse/u/31_meter.cpp 1.1 644)) + (muse/mixer/mixer.cpp (muse/u/32_mixer.cpp 1.1 644)) + (muse/mixer/routecombo.cpp (muse/u/33_routecombo 1.1 644)) + (muse/mixer/volslider.h (muse/u/34_volslider. 1.1 644)) + (muse/mixer/rack.h (muse/u/35_rack.h 1.1 644)) + (muse/mixer/Makefile.am (muse/u/36_Makefile.a 1.1 644)) + (muse/mixer/mixer.h (muse/u/37_mixer.h 1.1 644)) + (muse/mixer/panknob.h (muse/u/38_panknob.h 1.1 644)) + (muse/mixer/panknob.cpp (muse/u/39_panknob.cp 1.1 644)) + (muse/mixer/amixer.cpp (muse/u/40_amixer.cpp 1.1 644)) + (muse/mixer/meter.h (muse/u/41_meter.h 1.1 644)) + (muse/mixer/rack.cpp (muse/u/42_rack.cpp 1.1 644)) + (muse/mixer/routecombo.h (muse/u/43_routecombo 1.1 644)) + (muse/mixer/audionodebutton.h (muse/u/44_audionodeb 1.1 644)) + (muse/mixer/dot.xpm (muse/u/45_dot.xpm 1.1 644)) + (muse/mixer/volslider.cpp (muse/u/46_volslider. 1.1 644)) + (muse/mixer/audionodebutton.cpp (muse/u/47_audionodeb 1.1 644)) + (muse/liste/editevent.cpp (muse/u/48_editevent. 1.1 644)) + (muse/liste/editctrlbase.h (muse/u/49_editctrlba 1.2 644)) + (muse/liste/editevent.h (muse/u/50_editevent. 1.1 644)) + (muse/liste/Makefile.am (muse/u/51_Makefile.a 1.1 644)) + (muse/liste/listedit.h (muse/v/0_listedit.h 1.1 644)) + (muse/liste/listedit.cpp (muse/v/1_listedit.c 1.2 644)) + (muse/liste/editctrlbase.ui (muse/v/2_editctrlba 1.1 644)) + (muse/key.h (muse/v/3_key.h 1.1 644)) + (muse/app.h (muse/v/4_app.h 1.2 644)) + (muse/song.cpp (muse/v/5_song.cpp 1.2 644)) + (muse/key.cpp (muse/v/6_key.cpp 1.1 644)) + (muse/memory.cpp (muse/v/7_memory.cpp 1.2 644)) + (muse/midiport.h (muse/v/8_midiport.h 1.2 644)) + (muse/xml.cpp (muse/v/9_xml.cpp 1.1 644)) + (muse/midievent.cpp (muse/v/10_midievent. 1.2 644)) + (muse/undo.cpp (muse/v/11_undo.cpp 1.1 644)) + (muse/debug.h (muse/v/12_debug.h 1.1 644)) + (muse/ctrl/ctrlcanvas.cpp (muse/v/13_ctrlcanvas 1.1 644)) + (muse/ctrl/ctrlpanel.h (muse/v/14_ctrlpanel. 1.1 644)) + (muse/ctrl/ctrlcanvas.h (muse/v/15_ctrlcanvas 1.1 644)) + (muse/ctrl/ctrledit.h (muse/v/16_ctrledit.h 1.1 644)) + (muse/ctrl/Makefile.am (muse/v/17_Makefile.a 1.1 644)) + (muse/ctrl/ctrledit.cpp (muse/v/18_ctrledit.c 1.1 644)) + (muse/ctrl/ctrlpanel.cpp (muse/v/19_ctrlpanel. 1.1 644)) + (muse/cfprint.cpp (muse/v/20_cfprint.cp 1.1 644)) + + (xpm/darkreddot.xpm (muse/v/21_darkreddot 1.1 644)) + (xpm/editmuteS.xpm (muse/v/22_editmuteS. 1.1 644)) + (xpm/midiin.xpm (muse/v/23_midiin.xpm 1.1 644)) + (xpm/editpasteS.xpm (muse/v/24_editpasteS 1.1 644)) + (xpm/pitch.xpm (muse/v/25_pitch.xpm 1.1 644)) + (xpm/italic.xpm (muse/v/26_italic.xpm 1.1 644)) + (xpm/redo.xpm (muse/v/27_redo.xpm 1.1 644)) + (xpm/filesaveS.xpm (muse/v/28_filesaveS. 1.1 644)) + (xpm/scoreS.xpm (muse/v/29_scoreS.xpm 1.1 644)) + (xpm/exit.xpm (muse/v/30_exit.xpm 1.1 644)) + (xpm/rmark.xpm (muse/v/31_rmark.xpm 1.1 644)) + (xpm/frewind.xpm (muse/v/32_frewind.xp 1.1 644)) + (xpm/stop.xpm (muse/v/33_stop.xpm 1.1 644)) + (xpm/graydot.xpm (muse/v/34_graydot.xp 1.1 644)) + (xpm/loop.xpm (muse/v/35_loop.xpm 1.1 644)) + (xpm/steprec.xpm (muse/v/36_steprec.xp 1.1 644)) + (xpm/recordoffbutton.xpm (muse/v/37_recordoffb 1.1 644)) + (xpm/filenewS.xpm (muse/v/38_filenewS.x 1.1 644)) + (xpm/bold.xpm (muse/v/39_bold.xpm 1.1 644)) + (xpm/fileopen.xpm (muse/v/40_fileopen.x 1.1 644)) + (xpm/editpaste.xpm (muse/v/41_editpaste. 1.1 644)) + (xpm/speaker.xpm (muse/v/42_speaker.xp 1.1 644)) + (xpm/delete.xpm (muse/v/43_delete.xpm 1.1 644)) + (xpm/pianoS.xpm (muse/v/44_pianoS.xpm 1.1 644)) + (xpm/start.xpm (muse/v/45_start.xpm 1.1 644)) + (xpm/punchin.xpm (muse/v/46_punchin.xp 1.1 644)) + (xpm/fileprint.xpm (muse/v/47_fileprint. 1.1 644)) + (xpm/editcopy.xpm (muse/v/48_editcopy.x 1.1 644)) + (xpm/play.xpm (muse/v/49_play.xpm 1.1 644)) + (xpm/filesaveasS.xpm (muse/v/50_filesaveas 1.1 644)) + (xpm/stick.xpm (muse/v/51_stick.xpm 1.1 644)) + (xpm/fforward.xpm (muse/w/0_fforward.x 1.1 644)) + (xpm/lock.xpm (muse/w/1_lock.xpm 1.1 644)) + (xpm/back.xpm (muse/w/2_back.xpm 1.1 644)) + (xpm/up.xpm (muse/w/3_up.xpm 1.1 644)) + (xpm/cafter.xpm (muse/w/4_cafter.xpm 1.1 644)) + (xpm/recordonbutton.xpm (muse/w/5_recordonbu 1.1 644)) + (xpm/flag.xpm (muse/w/6_flag.xpm 1.1 644)) + (xpm/off.xpm (muse/w/7_off.xpm 1.1 644)) + (xpm/editcutS.xpm (muse/w/8_editcutS.x 1.1 644)) + (xpm/editmute.xpm (muse/w/9_editmute.x 1.1 644)) + (xpm/pencil.xpm (muse/w/10_pencil.xpm 1.1 644)) + (xpm/pointer.xpm (muse/w/11_pointer.xp 1.1 644)) + (xpm/wave.xpm (muse/w/12_wave.xpm 1.1 644)) + (xpm/undoS.xpm (muse/w/13_undoS.xpm 1.1 644)) + (xpm/loop1.xpm (muse/w/14_loop1.xpm 1.1 644)) + (xpm/score.xpm (muse/w/15_score.xpm 1.1 644)) + (xpm/glue.xpm (muse/w/16_glue.xpm 1.1 644)) + (xpm/Makefile.am (muse/w/17_Makefile.a 1.1 644)) + (xpm/gv.xpm (muse/w/18_gv.xpm 1.1 644)) + (xpm/redoS.xpm (muse/w/19_redoS.xpm 1.1 644)) + (xpm/toc.xpm (muse/w/20_toc.xpm 1.1 644)) + (xpm/greendot.xpm (muse/w/21_greendot.x 1.1 644)) + (xpm/configure.xpm (muse/w/22_configure. 1.1 644)) + (xpm/forward.xpm (muse/w/23_forward.xp 1.1 644)) + (xpm/underlined.xpm (muse/w/24_underlined 1.1 644)) + (xpm/home.xpm (muse/w/25_home.xpm 1.1 644)) + (xpm/record1.xpm (muse/w/26_record1.xp 1.1 644)) + (xpm/lmark.xpm (muse/w/27_lmark.xpm 1.1 644)) + (xpm/record.xpm (muse/w/28_record.xpm 1.1 644)) + (xpm/mute.xpm (muse/w/29_mute.xpm 1.1 644)) + (xpm/darkgreendot.xpm (muse/w/30_darkgreend 1.1 644)) + (xpm/find.xpm (muse/w/31_find.xpm 1.1 644)) + (xpm/reddot.xpm (muse/w/32_reddot.xpm 1.1 644)) + (xpm/punchout.xpm (muse/w/33_punchout.x 1.1 644)) + (xpm/panic.xpm (muse/w/34_panic.xpm 1.1 644)) + (xpm/fileprintS.xpm (muse/w/35_fileprintS 1.1 644)) + (xpm/draw.xpm (muse/w/36_draw.xpm 1.1 644)) + (xpm/filesave.xpm (muse/w/37_filesave.x 1.1 644)) + (xpm/filenew.xpm (muse/w/38_filenew.xp 1.1 644)) + (xpm/piano.xpm (muse/w/39_piano.xpm 1.1 644)) + (xpm/solobutton.xpm (muse/w/40_solobutton 1.1 644)) + (xpm/punchin1.xpm (muse/w/41_punchin1.x 1.1 644)) + (xpm/idea.xpm (muse/w/42_idea.xpm 1.1 644)) + (xpm/editcut.xpm (muse/w/43_editcut.xp 1.1 644)) + (xpm/editcopyS.xpm (muse/w/44_editcopyS. 1.1 644)) + (xpm/cmark.xpm (muse/w/45_cmark.xpm 1.1 644)) + (xpm/fileopenS.xpm (muse/w/46_fileopenS. 1.1 644)) + (xpm/ctrl.xpm (muse/w/47_ctrl.xpm 1.1 644)) + (xpm/note1.xpm (muse/w/48_note1.xpm 1.1 644)) + (xpm/context_help.xpm (muse/w/49_context_he 1.1 644)) + (xpm/exitS.xpm (muse/w/50_exitS.xpm 1.1 644)) + (xpm/flagS.xpm (muse/w/51_flagS.xpm 1.1 644)) + (xpm/iiwusynth.xpm (muse/x/0_iiwusynth. 1.1 644)) + (xpm/sysex.xpm (muse/x/1_sysex.xpm 1.1 644)) + (xpm/down.xpm (muse/x/2_down.xpm 1.1 644)) + (xpm/dot.xpm (muse/x/3_dot.xpm 1.1 644)) + (xpm/quant.xpm (muse/x/4_quant.xpm 1.1 644)) + (xpm/doth.xpm (muse/x/5_doth.xpm 1.1 644)) + (xpm/punchout1.xpm (muse/x/6_punchout1. 1.1 644)) + (xpm/cut.xpm (muse/x/7_cut.xpm 1.1 644)) + (xpm/note.xpm (muse/x/8_note.xpm 1.1 644)) + (xpm/buttondown.xpm (muse/x/9_buttondown 1.1 644)) + (xpm/dot1.xpm (muse/x/10_dot1.xpm 1.1 644)) + (xpm/meta.xpm (muse/x/11_meta.xpm 1.1 644)) + (xpm/undo.xpm (muse/x/12_undo.xpm 1.1 644)) + (xpm/master.xpm (muse/x/13_master.xpm 1.1 644)) + (xpm/bluedot.xpm (muse/x/14_bluedot.xp 1.1 644)) + (xpm/newmutebutton.xpm (muse/x/15_newmutebut 1.1 644)) + (xpm/pafter.xpm (muse/x/16_pafter.xpm 1.1 644)) + + (lib/plugins/Makefile.am (muse/x/17_Makefile.a 1.1 644)) + (lib/synthi/Makefile.am (muse/x/18_Makefile.a 1.1 644)) + (lib/Makefile.am (muse/x/19_Makefile.a 1.1 644)) + + (doc/midieditfunctions.png (muse/x/20_midieditfu 1.1 644) :no-keywords) + (doc/Makefile.am (muse/x/21_Makefile.a 1.1 644)) + (doc/muse.sgm (muse/x/22_muse.sgm 1.1 644)) + + (m4/alsa.m4 (muse/x/23_alsa.m4 1.1 644)) + (m4/docbook.m4 (muse/x/24_docbook.m4 1.1 644)) + (m4/Makefile.am (muse/x/25_Makefile.a 1.1 644)) + (m4/aclocal-include.m4 (muse/x/26_aclocal-in 1.1 644)) + (m4/qt.m4 (muse/x/27_qt.m4 1.1 644)) + +;; Files added by populate at Thu, 16 Oct 2003 12:04:05 +0200, +;; to version 0.0(w), by ws: + + (Doxyfile (muse/x/28_Doxyfile 1.1 644)) + (mkinstalldirs (/usr/share/automake-1.7/mkinstalldirs) :symlink) + (missing (/usr/share/automake-1.7/missing) :symlink) + (depcomp (/usr/share/automake-1.7/depcomp) :symlink) + (install-sh (/usr/share/automake-1.7/install-sh) :symlink) + + (muse/plugin.h (muse/x/31_plugin.h 1.1 644)) + (muse/importmidi.cpp (muse/x/32_importmidi 1.2 644)) + (muse/midifile.h (muse/x/33_midifile.h 1.2 644)) + (muse/midiseq.h (muse/x/34_midiseq.h 1.1 644)) + (muse/mididev.h (muse/x/35_mididev.h 1.2 644)) + (muse/mididev.cpp (muse/x/36_mididev.cp 1.3 644)) + (muse/widgets/synthwizardbase.h (muse/x/37_synthwizar 1.2 644)) + (muse/widgets/synthwizardbase.ui (muse/x/38_synthwizar 1.1 644)) + (muse/instruments/instr (muse/x/39_instr 1.1 755) :no-keywords) + (muse/exportmidi.cpp (muse/x/40_exportmidi 1.1 644)) + (muse/midifile.cpp (muse/x/41_midifile.c 1.2 644)) + (muse/evdata.h (muse/x/42_evdata.h 1.1 644)) + (muse/plugin.cpp (muse/x/43_plugin.cpp 1.1 644)) + (muse/midiseq.cpp (muse/x/44_midiseq.cp 1.2 644)) + (muse/TODO (muse/x/45_TODO 1.2 644)) +) +(Merge-Parents) +(New-Merge-Parents) diff --git a/muse2/muse.pro b/muse2/muse.pro new file mode 100644 index 00000000..364ab42b --- /dev/null +++ b/muse2/muse.pro @@ -0,0 +1,688 @@ +HEADERS = \ +./muse/midictrl.h \ +./muse/driver/timerdev.h \ +./muse/driver/audiodev.h \ +./muse/driver/jackmidi.h \ +./muse/driver/alsamidi.h \ +./muse/driver/jackaudio.h \ +./muse/driver/rtctimer.h \ +./muse/driver/alsatimer.h \ +./muse/gconfig.h \ +./muse/remote/pyapi.h \ +./muse/part.h \ +./muse/app.h \ +./muse/plugin.h \ +./muse/synth.h \ +./muse/song.h \ +./muse/instruments/minstrument.h \ +./muse/instruments/editinstrument.h \ +./muse/instruments/ccontrolbase.h \ +./muse/instruments/editinstrumentbase.h \ +./muse/instruments/midictrledit.h \ +./muse/midievent.h \ +./muse/dssihost.h \ +./muse/master/master.h \ +./muse/master/tscale.h \ +./muse/master/masteredit.h \ +./muse/master/lmaster.h \ +./muse/stringparam.h \ +./muse/conf.h \ +./muse/key.h \ +./muse/thread.h \ +./muse/sig.h \ +./muse/arranger/alayout.h \ +./muse/arranger/arranger.h \ +./muse/arranger/trackautomationview.h \ +./muse/arranger/pcanvas.h \ +./muse/arranger/tlist.h \ +./muse/globaldefs.h \ +./muse/midi.h \ +./muse/osc.h \ +./muse/mpevent.h \ +./muse/pos.h \ +./muse/waveevent.h \ +./muse/audioprefetch.h \ +./muse/transpose.h \ +./muse/waveedit/waveview.h \ +./muse/waveedit/waveedit.h \ +./muse/waveedit/editgain.h \ +./muse/waveedit/editgainbase.h \ +./muse/mtc.h \ +./muse/patchbay/patchbay.h \ +./muse/default_click.h \ +./muse/ctrl.h \ +./muse/tempo.h \ +./muse/ctrl/ctrlcanvas.h \ +./muse/ctrl/ctrlpanel.h \ +./muse/ctrl/ctrledit.h \ +./muse/eventbase.h \ +./muse/debug.h \ +./muse/ticksynth.h \ +./muse/ladspa.h \ +./muse/midifile.h \ +./muse/audioconvert.h \ +./muse/transport.h \ +./muse/cobject.h \ +./muse/fastlog.h \ +./muse/cliplist/cliplist.h \ +./muse/mididev.h \ +./muse/value.h \ +./muse/miditransform.h \ +./muse/appearance.h \ +./muse/undo.h \ +./muse/widgets/tb1.h \ +./muse/widgets/canvas.h \ +./muse/widgets/sclif.h \ +./muse/widgets/citem.h \ +./muse/widgets/lcombo.h \ +./muse/widgets/aboutbox_impl.h \ +./muse/widgets/appearancebase.h \ +./muse/widgets/mixdowndialogbase.h \ +./muse/widgets/pitchedit.h \ +./muse/widgets/intlabel.h \ +./muse/widgets/songinfo.h \ +./muse/widgets/nentry.h \ +./muse/widgets/fdialogbuttons.h \ +./muse/widgets/wtscale.h \ +./muse/widgets/posedit.h \ +./muse/widgets/sigscale.h \ +./muse/widgets/metronome.h \ +./muse/widgets/slider.h \ +./muse/widgets/checkbox.h \ +./muse/widgets/aboutbox.h \ +./muse/widgets/siglabel.h \ +./muse/widgets/shortcutconfigbase.h \ +./muse/widgets/scrollscale.h \ +./muse/widgets/drange.h \ +./muse/widgets/editmetadialogbase.h \ +./muse/widgets/cliplisteditorbase.h \ +./muse/widgets/genset.h \ +./muse/widgets/synthconfigbase.h \ +./muse/widgets/ttoolbar.h \ +./muse/widgets/gatetime.h \ +./muse/widgets/editctrl7dialogbase.h \ +./muse/widgets/scldiv.h \ +./muse/widgets/shortcutcapturedialog.h \ +./muse/widgets/didyouknow.h \ +./muse/widgets/splitter.h \ +./muse/widgets/mixdowndialog.h \ +./muse/widgets/knob.h \ +./muse/widgets/shortcutcapturedialogbase.h \ +./muse/widgets/editnotedialogbase.h \ +./muse/widgets/tools.h \ +./muse/widgets/bigtime.h \ +./muse/widgets/gatetimebase.h \ +./muse/widgets/mlabel.h \ +./muse/widgets/synthwizardbase.h \ +./muse/widgets/scldraw.h \ +./muse/widgets/velocitybase.h \ +./muse/widgets/midisync.h \ +./muse/widgets/action.h \ +./muse/widgets/spinbox.h \ +./muse/widgets/sliderbase.h \ +./muse/widgets/ctrlcombo.h \ +./muse/widgets/section.h \ +./muse/widgets/velocity.h \ +./muse/widgets/pitchlabel.h \ +./muse/widgets/fontsel.h \ +./muse/widgets/doublelabel.h \ +./muse/widgets/hitscale.h \ +./muse/widgets/editsysexdialogbase.h \ +./muse/widgets/utils.h \ +./muse/widgets/dimap.h \ +./muse/widgets/filedialog.h \ +./muse/widgets/shortcutconfig.h \ +./muse/widgets/comment.h \ +./muse/widgets/mmath.h \ +./muse/widgets/comboQuant.h \ +./muse/widgets/spinboxFP.h \ +./muse/widgets/mtrackinfobase.h \ +./muse/widgets/configmidifilebase.h \ +./muse/widgets/swidget.h \ +./muse/widgets/ttoolbutton.h \ +./muse/widgets/metronomebase.h \ +./muse/widgets/header.h \ +./muse/widgets/gensetbase.h \ +./muse/widgets/itransformbase.h \ +./muse/widgets/view.h \ +./muse/widgets/combobox.h \ +./muse/widgets/mittransposebase.h \ +./muse/widgets/transformbase.h \ +./muse/widgets/midisyncimpl.h \ +./muse/widgets/vscale.h \ +./muse/widgets/wtrackinfobase.h \ +./muse/widgets/poslabel.h \ +./muse/widgets/menutitleitem.h \ +./muse/widgets/listitem.h \ +./muse/widgets/popupmenu.h \ +./muse/widgets/sigedit.h \ +./muse/widgets/commentbase.h \ +./muse/widgets/tempolabel.h \ +./muse/widgets/noteinfo.h \ +./muse/widgets/mtscale.h \ +./muse/widgets/transposebase.h \ +./muse/widgets/dentry.h \ +./muse/event.h \ +./muse/sync.h \ +./muse/confmport.h \ +./muse/icons.h \ +./muse/route.h \ +./muse/xml.h \ +./muse/track.h \ +./muse/audio.h \ +./muse/vst.h \ +./muse/mixer/astrip.h \ +./muse/mixer/panknob.h \ +./muse/mixer/routedialogbase.h \ +./muse/mixer/strip.h \ +./muse/mixer/meter.h \ +./muse/mixer/mstrip.h \ +./muse/mixer/rack.h \ +./muse/mixer/amixer.h \ +./muse/mixer/auxknob.h \ +./muse/mixer/midiportroutebase.h \ +./muse/mixer/routedialog.h \ +./muse/marker/markerview.h \ +./muse/marker/marker.h \ +./muse/midiseq.h \ +./muse/memory.h \ +./muse/liste/editevent.h \ +./muse/liste/listedit.h \ +./muse/liste/editctrlbase.h \ +./muse/evdata.h \ +./muse/node.h \ +./muse/midiedit/pianoroll.h \ +./muse/midiedit/piano.h \ +./muse/midiedit/prcanvas.h \ +./muse/midiedit/dlist.h \ +./muse/midiedit/cmd.h \ +./muse/midiedit/drummap.h \ +./muse/midiedit/dcanvas.h \ +./muse/midiedit/quantconfig.h \ +./muse/midiedit/drumedit.h \ +./muse/midiedit/ecanvas.h \ +./muse/helper.h \ +./muse/globals.h \ +./muse/mplugins/rhythm.h \ +./muse/mplugins/midiitransform.h \ +./muse/mplugins/mittranspose.h \ +./muse/mplugins/mrconfig.h \ +./muse/mplugins/midifilter.h \ +./muse/mplugins/mitplugin.h \ +./muse/mplugins/mrconfigbase.h \ +./muse/mplugins/random.h \ +./muse/mplugins/midifilterimpl.h \ +./muse/mplugins/rhythmbase.h \ +./muse/wave.h \ +./muse/shortcuts.h \ +./muse/midieditor.h \ +./muse/midiport.h \ +./muse/device.h \ +./plugins/freeverb/denormals.h \ +./plugins/freeverb/comb.h \ +./plugins/freeverb/tuning.h \ +./plugins/freeverb/revmodel.h \ +./plugins/freeverb/allpass.h \ +./plugins/doublechorus/simplechorusmodel.h \ +./plugins/doublechorus/doublechorusmodel.h \ +./plugins/pandelay/ladspapandelay.h \ +./plugins/pandelay/pandelaymodel.h \ +./config.h \ +./synti/deicsonze/newpreset.h \ +./synti/deicsonze/deicsonze.h \ +./synti/deicsonze/deicsonzeguibase.h \ +./synti/deicsonze/deicsonzegui.h \ +./synti/deicsonze2/deicsonzeplugin.h \ +./synti/deicsonze2/deicsonzefilter.h \ +./synti/deicsonze2/deicsonze.h \ +./synti/deicsonze2/deicsonzeguibase.h \ +./synti/deicsonze2/deicsonzepreset.h \ +./synti/deicsonze2/deicsonzegui.h \ +./synti/fluid/fluidgui.h \ +./synti/fluid/fluidguibase.h \ +./synti/fluid/fluid.h \ +./synti/vam/vamguibase.h \ +./synti/vam/vamgui.h \ +./synti/vam/vam.h \ +./synti/organ/organguibase.h \ +./synti/organ/fdialogbuttons.h \ +./synti/organ/organ.h \ +./synti/organ/organgui.h \ +./synti/libsynti/mono.h \ +./synti/libsynti/mpevent.h \ +./synti/libsynti/poly.h \ +./synti/libsynti/gui.h \ +./synti/libsynti/mess.h \ +./synti/libsynti/evdata.h \ +./synti/simpledrums/common.h \ +./synti/simpledrums/simpledrums.h \ +./synti/simpledrums/sspluginchooserbase.h \ +./synti/simpledrums/simpledrumsgui.h \ +./synti/simpledrums/simpledrumsguibase.h \ +./synti/simpledrums/ssplugin.h \ +./synti/simpledrums/ssplugingui.h \ +./synti/fluidsynth/fluidsynthgui.h \ +./synti/fluidsynth/fluidsynthguibase.h \ +./synti/fluidsynth/fluidsynti.h + + +SOURCES = \ +./al/dspSSE.cpp \ +./al/dspXMM.cpp \ +./al/al.cpp \ +./al/dsp.cpp \ +./muse/sig.cpp \ +./muse/seqmsg.cpp \ +./muse/dssihost.cpp \ +./muse/driver/rtctimer.cpp \ +./muse/driver/jackmidi.cpp \ +./muse/driver/alsamidi.cpp \ +./muse/driver/dummyaudio.cpp \ +./muse/driver/jack.cpp \ +./muse/driver/alsatimer.cpp \ +./muse/key.cpp \ +./muse/moc_midieditor.cpp \ +./muse/remote/pyapi.cpp \ +./muse/moc_conf.cpp \ +./muse/gconfig.cpp \ +./muse/waveevent.cpp \ +./muse/moc_appearance.cpp \ +./muse/moc_transpose.cpp \ +./muse/instruments/editinstrument.cpp \ +./muse/instruments/moc_editinstrument.cpp \ +./muse/instruments/minstrument.cpp \ +./muse/instruments/midictrledit.cpp \ +./muse/ticksynth.cpp \ +./muse/master/moc_lmaster.cpp \ +./muse/master/lmaster.cpp \ +./muse/master/tscale.cpp \ +./muse/master/masteredit.cpp \ +./muse/master/master.cpp \ +./muse/master/moc_master.cpp \ +./muse/master/moc_tscale.cpp \ +./muse/master/moc_masteredit.cpp \ +./muse/midifile.cpp \ +./muse/undo.cpp \ +./muse/arranger/moc_pcanvas.cpp \ +./muse/arranger/tlist.cpp \ +./muse/arranger/pcanvas.cpp \ +./muse/arranger/moc_alayout.cpp \ +./muse/arranger/trackinfo.cpp \ +./muse/arranger/alayout.cpp \ +./muse/arranger/arranger.cpp \ +./muse/arranger/moc_tlist.cpp \ +./muse/arranger/trackautomationview.cpp \ +./muse/arranger/moc_arranger.cpp \ +./muse/moc_cobject.cpp \ +./muse/songfile.cpp \ +./muse/xml.cpp \ +./muse/midiport.cpp \ +./muse/tempo.cpp \ +./muse/exportmidi.cpp \ +./muse/thread.cpp \ +./muse/moc_confmport.cpp \ +./muse/waveedit/moc_waveedit.cpp \ +./muse/waveedit/waveview.cpp \ +./muse/waveedit/moc_editgain.cpp \ +./muse/waveedit/waveedit.cpp \ +./muse/waveedit/moc_waveview.cpp \ +./muse/waveedit/editgain.cpp \ +./muse/synth.cpp \ +./muse/patchbay/patchbay.cpp \ +./muse/pos.cpp \ +./muse/midievent.cpp \ +./muse/value.cpp \ +./muse/event.cpp \ +./muse/midictrl.cpp \ +./muse/audioprefetch.cpp \ +./muse/ctrl/ctrledit.cpp \ +./muse/ctrl/moc_ctrledit.cpp \ +./muse/ctrl/ctrlpanel.cpp \ +./muse/ctrl/moc_ctrlcanvas.cpp \ +./muse/ctrl/moc_ctrlpanel.cpp \ +./muse/ctrl/ctrlcanvas.cpp \ +./muse/moc_value.cpp \ +./muse/stringparam.cpp \ +./muse/icons.cpp \ +./muse/conf.cpp \ +./muse/miditransform.cpp \ +./muse/osc.cpp \ +./muse/midi.cpp \ +./muse/helper.cpp \ +./muse/mpevent.cpp \ +./muse/appearance.cpp \ +./muse/song.cpp \ +./muse/moc_app.cpp \ +./muse/eventlist.cpp \ +./muse/memory.cpp \ +./muse/moc_miditransform.cpp \ +./muse/wave.cpp \ +./muse/cliplist/cliplist.cpp \ +./muse/cliplist/moc_cliplist.cpp \ +./muse/mididev.cpp \ +./muse/midieditor.cpp \ +./muse/wavetrack.cpp \ +./muse/confmport.cpp \ +./muse/transpose.cpp \ +./muse/plugin.cpp \ +./muse/importmidi.cpp \ +./muse/widgets/slider.non-libtool.cpp \ +./muse/widgets/moc_bigtime.cpp \ +./muse/widgets/sigedit.cpp \ +./muse/widgets/moc_mixdowndialog.cpp \ +./muse/widgets/sigscale.cpp \ +./muse/widgets/mmath.non-libtool.cpp \ +./muse/widgets/moc_popupmenu.cpp \ +./muse/widgets/moc_didyouknow.cpp \ +./muse/widgets/moc_swidget.cpp \ +./muse/widgets/moc_sliderbase.non-libtool.cpp \ +./muse/widgets/doublelabel.non-libtool.cpp \ +./muse/widgets/moc_tb1.cpp \ +./muse/widgets/moc_slider.non-libtool.cpp \ +./muse/widgets/moc_songinfo.cpp \ +./muse/widgets/moc_tempolabel.cpp \ +./muse/widgets/sigedit.non-libtool.cpp \ +./muse/widgets/moc_sigedit.non-libtool.cpp \ +./muse/widgets/moc_dentry.cpp \ +./muse/widgets/aboutbox_impl.cpp \ +./muse/widgets/scldiv.non-libtool.cpp \ +./muse/widgets/moc_splitter.cpp \ +./muse/widgets/musewidgetsplug.cpp \ +./muse/widgets/comboQuant.cpp \ +./muse/widgets/moc_mlabel.cpp \ +./muse/widgets/shortcutconfig.cpp \ +./muse/widgets/scldraw.non-libtool.cpp \ +./muse/widgets/moc_spinboxFP.cpp \ +./muse/widgets/poslabel.cpp \ +./muse/widgets/vscale.cpp \ +./muse/widgets/tb1.cpp \ +./muse/widgets/hitscale.cpp \ +./muse/widgets/sliderbase.cpp \ +./muse/widgets/moc_shortcutcapturedialog.cpp \ +./muse/widgets/mixdowndialog.cpp \ +./muse/widgets/moc_doublelabel.cpp \ +./muse/widgets/moc_combobox.cpp \ +./muse/widgets/moc_spinbox.cpp \ +./muse/widgets/moc_mtscale.cpp \ +./muse/widgets/mtscale.cpp \ +./muse/widgets/ttoolbutton.cpp \ +./muse/widgets/spinbox.cpp \ +./muse/widgets/drange.cpp \ +./muse/widgets/posedit.non-libtool.cpp \ +./muse/widgets/pitchedit.non-libtool.cpp \ +./muse/widgets/citem.cpp \ +./muse/widgets/moc_canvas.cpp \ +./muse/widgets/moc_slider.cpp \ +./muse/widgets/knob.cpp \ +./muse/widgets/utils.cpp \ +./muse/widgets/metronome.cpp \ +./muse/widgets/gatetime.cpp \ +./muse/widgets/checkbox.cpp \ +./muse/widgets/moc_lcombo.cpp \ +./muse/widgets/moc_filedialog.cpp \ +./muse/widgets/moc_hitscale.cpp \ +./muse/widgets/moc_checkbox.non-libtool.cpp \ +./muse/widgets/velocity.cpp \ +./muse/widgets/ttoolbar.cpp \ +./muse/widgets/moc_shortcutconfig.cpp \ +./muse/widgets/wtscale.cpp \ +./muse/widgets/moc_intlabel.cpp \ +./muse/widgets/moc_fontsel.cpp \ +./muse/widgets/moc_header.cpp \ +./muse/widgets/moc_comboQuant.cpp \ +./muse/widgets/doublelabel.cpp \ +./muse/widgets/view.cpp \ +./muse/widgets/moc_action.cpp \ +./muse/widgets/poslabel.non-libtool.cpp \ +./muse/widgets/pitchedit.cpp \ +./muse/widgets/moc_checkbox.cpp \ +./muse/widgets/moc_posedit.non-libtool.cpp \ +./muse/widgets/moc_midisyncimpl.cpp \ +./muse/widgets/scldiv.cpp \ +./muse/widgets/moc_velocity.cpp \ +./muse/widgets/slider.cpp \ +./muse/widgets/pitchlabel.cpp \ +./muse/widgets/header.cpp \ +./muse/widgets/moc_ttoolbutton.cpp \ +./muse/widgets/sliderbase.non-libtool.cpp \ +./muse/widgets/moc_sigedit.cpp \ +./muse/widgets/nentry.cpp \ +./muse/widgets/fontsel.cpp \ +./muse/widgets/siglabel.cpp \ +./muse/widgets/moc_doublelabel.non-libtool.cpp \ +./muse/widgets/scldraw.cpp \ +./muse/widgets/moc_pitchedit.non-libtool.cpp \ +./muse/widgets/moc_comment.cpp \ +./muse/widgets/canvas.cpp \ +./muse/widgets/dimap.cpp \ +./muse/widgets/moc_noteinfo.cpp \ +./muse/widgets/moc_scrollscale.cpp \ +./muse/widgets/moc_tempolabel.non-libtool.cpp \ +./muse/widgets/dentry.cpp \ +./muse/widgets/swidget.cpp \ +./muse/widgets/checkbox.non-libtool.cpp \ +./muse/widgets/moc_siglabel.cpp \ +./muse/widgets/combobox.non-libtool.cpp \ +./muse/widgets/posedit.cpp \ +./muse/widgets/combobox.cpp \ +./muse/widgets/noteinfo.cpp \ +./muse/widgets/ctrlcombo.cpp \ +./muse/widgets/moc_pitchedit.cpp \ +./muse/widgets/moc_ctrlcombo.cpp \ +./muse/widgets/moc_posedit.cpp \ +./muse/widgets/moc_poslabel.non-libtool.cpp \ +./muse/widgets/moc_tools.cpp \ +./muse/widgets/moc_gatetime.cpp \ +./muse/widgets/moc_dentry.non-libtool.cpp \ +./muse/widgets/bigtime.cpp \ +./muse/widgets/comment.cpp \ +./muse/widgets/moc_genset.cpp \ +./muse/widgets/moc_knob.cpp \ +./muse/widgets/shortcutcapturedialog.cpp \ +./muse/widgets/sclif.cpp \ +./muse/widgets/sclif.non-libtool.cpp \ +./muse/widgets/midisyncimpl.cpp \ +./muse/widgets/moc_sigscale.cpp \ +./muse/widgets/moc_aboutbox.cpp \ +./muse/widgets/moc_pitchlabel.cpp \ +./muse/widgets/tools.cpp \ +./muse/widgets/drange.non-libtool.cpp \ +./muse/widgets/dimap.non-libtool.cpp \ +./muse/widgets/moc_view.cpp \ +./muse/widgets/lcombo.cpp \ +./muse/widgets/scrollscale.cpp \ +./muse/widgets/mlabel.cpp \ +./muse/widgets/moc_vscale.cpp \ +./muse/widgets/genset.cpp \ +./muse/widgets/moc_pitchlabel.non-libtool.cpp \ +./muse/widgets/filedialog.cpp \ +./muse/widgets/tempolabel.non-libtool.cpp \ +./muse/widgets/splitter.cpp \ +./muse/widgets/moc_aboutbox_impl.cpp \ +./muse/widgets/intlabel.cpp \ +./muse/widgets/tempolabel.cpp \ +./muse/widgets/moc_poslabel.cpp \ +./muse/widgets/pitchlabel.non-libtool.cpp \ +./muse/widgets/spinboxFP.cpp \ +./muse/widgets/popupmenu.cpp \ +./muse/widgets/moc_metronome.cpp \ +./muse/widgets/mmath.cpp \ +./muse/widgets/dentry.non-libtool.cpp \ +./muse/widgets/moc_nentry.cpp \ +./muse/widgets/moc_combobox.non-libtool.cpp \ +./muse/widgets/moc_sliderbase.cpp \ +./muse/widgets/moc_ttoolbar.cpp \ +./muse/help.cpp \ +./muse/audioconvert.cpp \ +./muse/globals.cpp \ +./muse/route.cpp \ +./muse/transport.cpp \ +./muse/moc_plugin.cpp \ +./muse/part.cpp \ +./muse/audio.cpp \ +./muse/mixer/panknob.cpp \ +./muse/mixer/routedialog.cpp \ +./muse/mixer/auxknob.cpp \ +./muse/mixer/moc_amixer.cpp \ +./muse/mixer/moc_routedialog.cpp \ +./muse/mixer/moc_auxknob.cpp \ +./muse/mixer/meter.cpp \ +./muse/mixer/moc_meter.cpp \ +./muse/mixer/mstrip.cpp \ +./muse/mixer/moc_rack.cpp \ +./muse/mixer/moc_panknob.cpp \ +./muse/mixer/moc_strip.cpp \ +./muse/mixer/strip.cpp \ +./muse/mixer/astrip.cpp \ +./muse/mixer/amixer.cpp \ +./muse/mixer/moc_mstrip.cpp \ +./muse/mixer/moc_astrip.cpp \ +./muse/mixer/rack.cpp \ +./muse/moc_transport.cpp \ +./muse/marker/marker.cpp \ +./muse/marker/markerview.cpp \ +./muse/marker/moc_markerview.cpp \ +./muse/moc_song.cpp \ +./muse/audiotrack.cpp \ +./muse/track.cpp \ +./muse/liste/moc_editevent.cpp \ +./muse/liste/listedit.cpp \ +./muse/liste/moc_listedit.cpp \ +./muse/liste/editevent.cpp \ +./muse/vst.cpp \ +./muse/midiedit/drumedit.cpp \ +./muse/midiedit/moc_pianoroll.cpp \ +./muse/midiedit/moc_drumedit.cpp \ +./muse/midiedit/dlist.cpp \ +./muse/midiedit/piano.cpp \ +./muse/midiedit/moc_piano.cpp \ +./muse/midiedit/dcanvas.cpp \ +./muse/midiedit/moc_quantconfig.cpp \ +./muse/midiedit/moc_dcanvas.cpp \ +./muse/midiedit/pianoroll.cpp \ +./muse/midiedit/moc_prcanvas.cpp \ +./muse/midiedit/drummap.cpp \ +./muse/midiedit/moc_dlist.cpp \ +./muse/midiedit/ecanvas.cpp \ +./muse/midiedit/prcanvas.cpp \ +./muse/midiedit/quantconfig.cpp \ +./muse/midiedit/moc_ecanvas.cpp \ +./muse/app.cpp \ +./muse/cobject.cpp \ +./muse/midiseq.cpp \ +./muse/mplugins/mitplugin.cpp \ +./muse/mplugins/moc_mittranspose.cpp \ +./muse/mplugins/random.cpp \ +./muse/mplugins/rhythm.cpp \ +./muse/mplugins/moc_rhythm.cpp \ +./muse/mplugins/moc_mrconfig.cpp \ +./muse/mplugins/moc_midifilterimpl.cpp \ +./muse/mplugins/moc_midiitransform.cpp \ +./muse/mplugins/midiitransform.cpp \ +./muse/mplugins/midifilterimpl.cpp \ +./muse/mplugins/mrconfig.cpp \ +./muse/mplugins/mittranspose.cpp \ +./muse/mtc.cpp \ +./muse/node.cpp \ +./muse/ctrl.cpp \ +./muse/shortcuts.cpp \ +./muse/sync.cpp \ +./plugins/freeverb/freeverb.cpp \ +./plugins/freeverb/revmodel.cpp \ +./plugins/doublechorus/simplechorusmodel.cpp \ +./plugins/doublechorus/doublechorusmodel.cpp \ +./plugins/doublechorus/doublechorus.cpp \ +./plugins/pandelay/ladspapandelay.cpp \ +./plugins/pandelay/pandelaymodel.cpp \ +./plugins/pandelay/pandelay.cpp \ +./grepmidi/grepmidi.cpp \ +./synti/deicsonze/moc_deicsonzegui.cpp \ +./synti/deicsonze/deicsonze.cpp \ +./synti/deicsonze/deicsonzegui.cpp \ +./synti/deicsonze2/deicsonzepreset.cpp \ +./synti/deicsonze2/deicsonze.cpp \ +./synti/deicsonze2/deicsonzegui.cpp \ +./synti/deicsonze2/deicsonzeplugin.cpp \ +./synti/deicsonze2/deicsonzefilter.cpp \ +./synti/fluid/fluidgui.cpp \ +./synti/fluid/fluid.cpp \ +./synti/fluid/moc_fluidgui.cpp \ +./synti/s1/s1.cpp \ +./synti/vam/vamgui.cpp \ +./synti/vam/moc_vamgui.cpp \ +./synti/vam/vam.cpp \ +./synti/organ/organgui.cpp \ +./synti/organ/moc_organgui.cpp \ +./synti/organ/organ.cpp \ +./synti/libsynti/poly.cpp \ +./synti/libsynti/mono.cpp \ +./synti/libsynti/gui.cpp \ +./synti/libsynti/mpevent.cpp \ +./synti/libsynti/mess.cpp \ +./synti/simpledrums/simpledrums.cpp \ +./synti/simpledrums/moc_ssplugingui.cpp \ +./synti/simpledrums/ssplugin.cpp \ +./synti/simpledrums/ssplugingui.cpp \ +./synti/simpledrums/moc_simpledrumsgui.cpp \ +./synti/simpledrums/simpledrumsgui.cpp \ +./synti/fluidsynth/fluidsynthgui.cpp \ +./synti/fluidsynth/moc_fluidsynthgui.cpp \ +./synti/fluidsynth/fluidsynti.cpp + + +#The following line was changed from FORMS to FORMS3 by qt3to4 +FORMS3 = \ +./muse/instruments/ccontrolbase.ui \ +./muse/instruments/editinstrumentbase.ui \ +./muse/waveedit/editgainbase.ui \ +./muse/patchbay/patchbaybase.ui \ +./muse/widgets/transposebase.ui \ +./muse/widgets/configmidifilebase.ui \ +./muse/widgets/wtrackinfobase.ui \ +./muse/widgets/itransformbase.ui \ +./muse/widgets/mixdowndialogbase.ui \ +./muse/widgets/gatetimebase.ui \ +./muse/widgets/shortcutcapturedialogbase.ui \ +./muse/widgets/didyouknow.ui \ +./muse/widgets/appearancebase.ui \ +./muse/widgets/shortcutconfigbase.ui \ +./muse/widgets/editmetadialogbase.ui \ +./muse/widgets/fdialogbuttons.ui \ +./muse/widgets/songinfo.ui \ +./muse/widgets/mtrackinfobase.ui \ +./muse/widgets/synthconfigbase.ui \ +./muse/widgets/velocitybase.ui \ +./muse/widgets/transformbase.ui \ +./muse/widgets/metronomebase.ui \ +./muse/widgets/aboutbox.ui \ +./muse/widgets/gensetbase.ui \ +./muse/widgets/editsysexdialogbase.ui \ +./muse/widgets/editctrl7dialogbase.ui \ +./muse/widgets/editnotedialogbase.ui \ +./muse/widgets/commentbase.ui \ +./muse/widgets/mittransposebase.ui \ +./muse/widgets/midisync.ui \ +./muse/widgets/cliplisteditorbase.ui \ +./muse/mixer/midiportroutebase.ui \ +./muse/mixer/routedialogbase.ui \ +./muse/liste/editctrlbase.ui \ +./muse/mplugins/mrconfigbase.ui \ +./muse/mplugins/rhythmbase.ui \ +./muse/mplugins/midifilter.ui \ +./share/plugins/1050.ui \ +./share/plugins/2142.ui \ +./synti/deicsonze/newpreset.ui \ +./synti/deicsonze/deicsonzeguibase.ui \ +./synti/deicsonze2/deicsonzegui.ui \ +./synti/fluid/fluidguibase.ui \ +./synti/vam/vamguibase.ui \ +./synti/organ/organguibase.ui \ +./synti/organ/fdialogbuttons.ui \ +./synti/simpledrums/simpledrumsguibase.ui \ +./synti/simpledrums/sspluginchooserbase.ui \ +./synti/fluidsynth/fluidsynthguibase.ui +#The following line was inserted by qt3to4 +QT += xml qt3support +#The following line was inserted by qt3to4 +CONFIG += uic3 + diff --git a/muse2/muse/Makefile.am b/muse2/muse/Makefile.am new file mode 100644 index 00000000..253add16 --- /dev/null +++ b/muse2/muse/Makefile.am @@ -0,0 +1,168 @@ +include $(top_srcdir)/common.am + +ACLOCAL_AMFLAGS = -I m4 + +AM_CPPFLAGS += -Imidiedit -Iarranger -Iliste \ + -Iwidgets -Imixer -Idriver -Iwaveedit -Implugins -Iinstruments -Iremote\ + -DINSTPREFIX=\"$(prefix)\" -DINSTLIBDIR=\"$(libdir)\" + +SUBDIRS = widgets master midiedit mixer arranger \ + liste driver waveedit ctrl cliplist \ + instruments marker mplugins + +if PCH +AM_CXXFLAGS += $(LASH_CFLAGS) -include $(top_srcdir)/all.h +else +AM_CXXFLAGS += $(LASH_CFLAGS) +endif + +if ENABLE_PYTHON +AM_CPPFLAGS += -DENABLE_PYTHON +SUBDIRS += remote +PYLIBS=$(PYTHON_LIB) remote/libremote.a +endif +AM_CXXFLAGS +=-DSVNVERSION=\"$(shell svnversion)\" + + +EXTRA_PROGRAMS = givertcap +bin_PROGRAMS = muse @GIVERTCAP@ + +givertcap_LDADD = -lcap + +dist_muse_SOURCES = \ + ticksynth.h ticksynth.cpp \ + vst.h vst.cpp \ + dssihost.h dssihost.cpp \ + osc.cpp osc.h \ + stringparam.cpp stringparam.h \ + synth.h synth.cpp \ + plugin.cpp plugin.h \ + mtc.cpp mtc.h \ + thread.cpp thread.h \ + audio.cpp audio.h \ + audioprefetch.cpp audioprefetch.h \ + audioconvert.cpp audioconvert.h \ + globals.cpp globals.h \ + sync.cpp sync.h \ + midiport.cpp midiport.h \ + part.cpp part.h \ + tempo.cpp tempo.h \ + pos.cpp pos.h \ + sig.cpp sig.h \ + key.cpp key.h \ + undo.cpp undo.h \ + songfile.cpp \ + midi.cpp midi.h \ + importmidi.cpp \ + exportmidi.cpp \ + midifile.h midifile.cpp \ + xml.cpp xml.h \ + icons.cpp icons.h \ + event.cpp event.h eventbase.h evdata.h \ + eventlist.cpp \ + midievent.h midievent.cpp \ + waveevent.h waveevent.cpp \ + mpevent.cpp mpevent.h \ + track.cpp track.h \ + audiotrack.cpp wavetrack.cpp \ + wave.cpp wave.h \ + seqmsg.cpp \ + device.h \ + globaldefs.h \ + ladspa.h \ + app.cpp app.h \ + song.cpp song.h \ + transport.cpp transport.h \ + conf.cpp conf.h \ + confmport.cpp confmport.h \ + help.cpp \ + midieditor.cpp midieditor.h \ + cobject.cpp cobject.h \ + value.cpp value.h \ + midictrl.cpp midictrl.h \ + transpose.cpp transpose.h \ + miditransform.cpp miditransform.h \ + appearance.cpp appearance.h \ + node.cpp node.h \ + midiseq.cpp midiseq.h \ + helper.cpp helper.h \ + debug.h memory.h memory.cpp \ + mididev.h mididev.cpp \ + route.h route.cpp\ + shortcuts.h shortcuts.cpp \ + ctrl.cpp ctrl.h \ + gconfig.h gconfig.cpp \ + fastlog.h \ + default_click.h + +nodist_muse_SOURCES = \ + moc_plugin.cpp \ + moc_app.cpp \ + moc_song.cpp \ + moc_transport.cpp \ + moc_conf.cpp \ + moc_confmport.cpp \ + moc_midieditor.cpp \ + moc_cobject.cpp \ + moc_value.cpp \ + moc_transpose.cpp \ + moc_miditransform.cpp \ + moc_appearance.cpp + +muse_LDADD = $(X_LIBS) $(QT_LIBS) -lasound $(SNDFILE_LIBS) $(SAMPLERATE_LIBS) $(JACK_LIBS) $(PYLIBS) \ + $(LASH_LIBS) $(FST_LIBS) $(UUID_LIBS) $(LO_LIBS) midiedit/libmidiedit.a ctrl/libctrl.a \ + liste/libliste.a mixer/libmixer.a driver/libdriver.a marker/libmarker.a \ + master/libmaster.a waveedit/libwaveedit.a mplugins/libmplugins.a arranger/libarranger.a \ + cliplist/libcliplist.a instruments/libinstruments.a widgets/libwidgets.a \ + ../synti/libsynti/libsynti.la ../al/libal.a +muse_LDFLAGS = -fno_exceptions + + + +CLEANFILES = stamp-chown + +DISTCLEANFILES = .muse.bin.bak + +MAINTAINERCLEANFILES = depcomp config.guess \ + install-sh config.sub missing mkinstalldirs INSTALL COPYING + +EXTRA_DIST = + +all-local: stamp-chown .muse.bin.bak + +stamp-chown: muse @GIVERTCAP@ + if test "$(SUIDBUILD)" = "yes"; then \ + su -c "chown root muse; chmod +s muse"; \ + fi +if RTCAP + su -c "chown root givertcap; chmod +s givertcap"; +endif + touch stamp-chown + +install-exec-local: + if test "$(SUIDINSTALL)" = "yes"; then \ + su -c "chown root $(bindir)/muse; chmod +s $(bindir)/muse"; \ + fi +if RTCAP + su -c "chown root $(bindir)/givertcap; chmod +s $(bindir)/givertcap"; +endif + +update_translations: + genpro > muse.pro + lupdate muse.pro + +release_translations: + lrelease muse.pro + +.muse.bin.bak: + if test -e muse; then cp muse .muse.bin.bak; fi + +clean-local: + if test -e .muse.bin.bak; then cp .muse.bin.bak muse; fi + + +dox: stamp-doxygen + +stamp-doxygen: $(shell find -name "*.cpp" -or -name "*.h") + $(DOXYGEN) Doxyfile + touch stamp-doxygen diff --git a/muse2/muse/Makefile.in b/muse2/muse/Makefile.in new file mode 100644 index 00000000..927c49c5 --- /dev/null +++ b/muse2/muse/Makefile.in @@ -0,0 +1,1067 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/common.am +@PCH_TRUE@am__append_1 = $(LASH_CFLAGS) -include $(top_srcdir)/all.h +@PCH_FALSE@am__append_2 = $(LASH_CFLAGS) +@ENABLE_PYTHON_TRUE@am__append_3 = -DENABLE_PYTHON +@ENABLE_PYTHON_TRUE@am__append_4 = remote +EXTRA_PROGRAMS = givertcap$(EXEEXT) +bin_PROGRAMS = muse$(EXEEXT) @GIVERTCAP@ +subdir = muse +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal-include.m4 \ + $(top_srcdir)/m4/alsa.m4 $(top_srcdir)/m4/docbook.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__installdirs = "$(DESTDIR)$(bindir)" +PROGRAMS = $(bin_PROGRAMS) +givertcap_SOURCES = givertcap.c +givertcap_OBJECTS = givertcap.$(OBJEXT) +givertcap_DEPENDENCIES = +dist_muse_OBJECTS = ticksynth.$(OBJEXT) vst.$(OBJEXT) \ + dssihost.$(OBJEXT) osc.$(OBJEXT) stringparam.$(OBJEXT) \ + synth.$(OBJEXT) plugin.$(OBJEXT) mtc.$(OBJEXT) \ + thread.$(OBJEXT) audio.$(OBJEXT) audioprefetch.$(OBJEXT) \ + audioconvert.$(OBJEXT) globals.$(OBJEXT) sync.$(OBJEXT) \ + midiport.$(OBJEXT) part.$(OBJEXT) tempo.$(OBJEXT) \ + pos.$(OBJEXT) sig.$(OBJEXT) key.$(OBJEXT) undo.$(OBJEXT) \ + songfile.$(OBJEXT) midi.$(OBJEXT) importmidi.$(OBJEXT) \ + exportmidi.$(OBJEXT) midifile.$(OBJEXT) xml.$(OBJEXT) \ + icons.$(OBJEXT) event.$(OBJEXT) eventlist.$(OBJEXT) \ + midievent.$(OBJEXT) waveevent.$(OBJEXT) mpevent.$(OBJEXT) \ + track.$(OBJEXT) audiotrack.$(OBJEXT) wavetrack.$(OBJEXT) \ + wave.$(OBJEXT) seqmsg.$(OBJEXT) app.$(OBJEXT) song.$(OBJEXT) \ + transport.$(OBJEXT) conf.$(OBJEXT) confmport.$(OBJEXT) \ + help.$(OBJEXT) midieditor.$(OBJEXT) cobject.$(OBJEXT) \ + value.$(OBJEXT) midictrl.$(OBJEXT) transpose.$(OBJEXT) \ + miditransform.$(OBJEXT) appearance.$(OBJEXT) node.$(OBJEXT) \ + midiseq.$(OBJEXT) helper.$(OBJEXT) memory.$(OBJEXT) \ + mididev.$(OBJEXT) route.$(OBJEXT) shortcuts.$(OBJEXT) \ + ctrl.$(OBJEXT) gconfig.$(OBJEXT) +nodist_muse_OBJECTS = moc_plugin.$(OBJEXT) moc_app.$(OBJEXT) \ + moc_song.$(OBJEXT) moc_transport.$(OBJEXT) moc_conf.$(OBJEXT) \ + moc_confmport.$(OBJEXT) moc_midieditor.$(OBJEXT) \ + moc_cobject.$(OBJEXT) moc_value.$(OBJEXT) \ + moc_transpose.$(OBJEXT) moc_miditransform.$(OBJEXT) \ + moc_appearance.$(OBJEXT) +muse_OBJECTS = $(dist_muse_OBJECTS) $(nodist_muse_OBJECTS) +am__DEPENDENCIES_1 = +@ENABLE_PYTHON_TRUE@am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) \ +@ENABLE_PYTHON_TRUE@ remote/libremote.a +muse_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + midiedit/libmidiedit.a ctrl/libctrl.a liste/libliste.a \ + mixer/libmixer.a driver/libdriver.a marker/libmarker.a \ + master/libmaster.a waveedit/libwaveedit.a \ + mplugins/libmplugins.a arranger/libarranger.a \ + cliplist/libcliplist.a instruments/libinstruments.a \ + widgets/libwidgets.a ../synti/libsynti/libsynti.la \ + ../al/libal.a +muse_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) \ + $(muse_LDFLAGS) $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +CXXLD = $(CXX) +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = givertcap.c $(dist_muse_SOURCES) $(nodist_muse_SOURCES) +DIST_SOURCES = givertcap.c $(dist_muse_SOURCES) +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = widgets master midiedit mixer arranger liste driver \ + waveedit ctrl cliplist instruments marker mplugins remote +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +ACLOCAL = @ACLOCAL@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DOCBOOKSTYLE = @DOCBOOKSTYLE@ +DOCBOOKTARGETS = @DOCBOOKTARGETS@ +DOT = @DOT@ +DOTPATH = @DOTPATH@ +DOXYGEN = @DOXYGEN@ +DOXYGEN_TREEVIEW = @DOXYGEN_TREEVIEW@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FLUIDSYNTHDIRS = @FLUIDSYNTHDIRS@ +FST_CFLAGS = @FST_CFLAGS@ +FST_LIBS = @FST_LIBS@ +Fluidsynth_CFLAGS = @Fluidsynth_CFLAGS@ +Fluidsynth_LIBS = @Fluidsynth_LIBS@ +GIVERTCAP = @GIVERTCAP@ +GREP = @GREP@ +HAVEDOT = @HAVEDOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_LIBS = @JACK_LIBS@ +JADE = @JADE@ +LASH_CFLAGS = @LASH_CFLAGS@ +LASH_LIBS = @LASH_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LO_CFLAGS = @LO_CFLAGS@ +LO_LIBS = @LO_LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MUSECXXFLAGS = @MUSECXXFLAGS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NSGMLS = @NSGMLS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PCH = @PCH@ +PERL = @PERL@ +PKG_CONFIG = @PKG_CONFIG@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIB = @PYTHON_LIB@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QTDIR_BIN = @QTDIR_BIN@ +QTDIR_INC = @QTDIR_INC@ +QT_LIBS = @QT_LIBS@ +RANLIB = @RANLIB@ +SAMPLERATE_CFLAGS = @SAMPLERATE_CFLAGS@ +SAMPLERATE_LIBS = @SAMPLERATE_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ +SNDFILE_LIBS = @SNDFILE_LIBS@ +STRIP = @STRIP@ +SUIDBUILD = @SUIDBUILD@ +SUIDINSTALL = @SUIDINSTALL@ +USE_SSE = @USE_SSE@ +UUID_CFLAGS = @UUID_CFLAGS@ +UUID_LIBS = @UUID_LIBS@ +VERSION = @VERSION@ +XMKMF = @XMKMF@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +have_docbook = @have_docbook@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +synth_fluid = @synth_fluid@ +synth_fluidsynth = @synth_fluidsynth@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AM_CXXFLAGS = $(MUSECXXFLAGS) -I.. -I$(top_srcdir)/synti \ + -I$(top_srcdir)/muse/widgets -DQT_SHARED -DQT_THREAD_SUPPORT \ + -DQT_PLUGIN $(QTDIR_INC) -DQT3_SUPPORT $(am__append_1) \ + $(am__append_2) -DSVNVERSION=\"$(shell svnversion)\" +AM_CPPFLAGS = -Imidiedit -Iarranger -Iliste -Iwidgets -Imixer -Idriver \ + -Iwaveedit -Implugins -Iinstruments -Iremote \ + -DINSTPREFIX=\"$(prefix)\" -DINSTLIBDIR=\"$(libdir)\" \ + $(am__append_3) +MOC = $(QTDIR_BIN)/moc +#UIC = $(QTDIR_BIN)/uic3 +UIC = /usr/bin/uic3 +UIFILES = $(wildcard *.ui) +MOCFILES = $(shell for h in $(filter %.h,$(SOURCES)); do \ + if grep -q Q_OBJECT $$h; then \ + echo $$h | sed "s/\(.*\)\.h/moc_\1.cpp/"; \ + fi; \ + done) + +BUILT_SOURCES = $(MOCFILES) $(UIFILES:%.ui=%.h) +MOSTLYCLEANFILES = $(MOCFILES) $(UIFILES:%.ui=%.h) +SUFFIXES = .ui .h.gch +ACLOCAL_AMFLAGS = -I m4 +SUBDIRS = widgets master midiedit mixer arranger liste driver waveedit \ + ctrl cliplist instruments marker mplugins $(am__append_4) +@ENABLE_PYTHON_TRUE@PYLIBS = $(PYTHON_LIB) remote/libremote.a +givertcap_LDADD = -lcap +dist_muse_SOURCES = \ + ticksynth.h ticksynth.cpp \ + vst.h vst.cpp \ + dssihost.h dssihost.cpp \ + osc.cpp osc.h \ + stringparam.cpp stringparam.h \ + synth.h synth.cpp \ + plugin.cpp plugin.h \ + mtc.cpp mtc.h \ + thread.cpp thread.h \ + audio.cpp audio.h \ + audioprefetch.cpp audioprefetch.h \ + audioconvert.cpp audioconvert.h \ + globals.cpp globals.h \ + sync.cpp sync.h \ + midiport.cpp midiport.h \ + part.cpp part.h \ + tempo.cpp tempo.h \ + pos.cpp pos.h \ + sig.cpp sig.h \ + key.cpp key.h \ + undo.cpp undo.h \ + songfile.cpp \ + midi.cpp midi.h \ + importmidi.cpp \ + exportmidi.cpp \ + midifile.h midifile.cpp \ + xml.cpp xml.h \ + icons.cpp icons.h \ + event.cpp event.h eventbase.h evdata.h \ + eventlist.cpp \ + midievent.h midievent.cpp \ + waveevent.h waveevent.cpp \ + mpevent.cpp mpevent.h \ + track.cpp track.h \ + audiotrack.cpp wavetrack.cpp \ + wave.cpp wave.h \ + seqmsg.cpp \ + device.h \ + globaldefs.h \ + ladspa.h \ + app.cpp app.h \ + song.cpp song.h \ + transport.cpp transport.h \ + conf.cpp conf.h \ + confmport.cpp confmport.h \ + help.cpp \ + midieditor.cpp midieditor.h \ + cobject.cpp cobject.h \ + value.cpp value.h \ + midictrl.cpp midictrl.h \ + transpose.cpp transpose.h \ + miditransform.cpp miditransform.h \ + appearance.cpp appearance.h \ + node.cpp node.h \ + midiseq.cpp midiseq.h \ + helper.cpp helper.h \ + debug.h memory.h memory.cpp \ + mididev.h mididev.cpp \ + route.h route.cpp\ + shortcuts.h shortcuts.cpp \ + ctrl.cpp ctrl.h \ + gconfig.h gconfig.cpp \ + fastlog.h \ + default_click.h + +nodist_muse_SOURCES = \ + moc_plugin.cpp \ + moc_app.cpp \ + moc_song.cpp \ + moc_transport.cpp \ + moc_conf.cpp \ + moc_confmport.cpp \ + moc_midieditor.cpp \ + moc_cobject.cpp \ + moc_value.cpp \ + moc_transpose.cpp \ + moc_miditransform.cpp \ + moc_appearance.cpp + +muse_LDADD = $(X_LIBS) $(QT_LIBS) -lasound $(SNDFILE_LIBS) $(SAMPLERATE_LIBS) $(JACK_LIBS) $(PYLIBS) \ + $(LASH_LIBS) $(FST_LIBS) $(UUID_LIBS) $(LO_LIBS) midiedit/libmidiedit.a ctrl/libctrl.a \ + liste/libliste.a mixer/libmixer.a driver/libdriver.a marker/libmarker.a \ + master/libmaster.a waveedit/libwaveedit.a mplugins/libmplugins.a arranger/libarranger.a \ + cliplist/libcliplist.a instruments/libinstruments.a widgets/libwidgets.a \ + ../synti/libsynti/libsynti.la ../al/libal.a + +muse_LDFLAGS = -fno_exceptions +CLEANFILES = stamp-chown +DISTCLEANFILES = .muse.bin.bak +MAINTAINERCLEANFILES = depcomp config.guess \ + install-sh config.sub missing mkinstalldirs INSTALL COPYING + +EXTRA_DIST = +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-recursive + +.SUFFIXES: +.SUFFIXES: .ui .h.gch .c .cpp .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/common.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu muse/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu muse/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p || test -f $$p1; \ + then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files + +clean-binPROGRAMS: + @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list +givertcap$(EXEEXT): $(givertcap_OBJECTS) $(givertcap_DEPENDENCIES) + @rm -f givertcap$(EXEEXT) + $(LINK) $(givertcap_OBJECTS) $(givertcap_LDADD) $(LIBS) +muse$(EXEEXT): $(muse_OBJECTS) $(muse_DEPENDENCIES) + @rm -f muse$(EXEEXT) + $(muse_LINK) $(muse_OBJECTS) $(muse_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/app.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/appearance.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audio.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audioconvert.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audioprefetch.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audiotrack.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cobject.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/conf.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/confmport.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ctrl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dssihost.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/event.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eventlist.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/exportmidi.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gconfig.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/givertcap.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/globals.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/help.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/helper.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/icons.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/importmidi.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/key.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memory.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/midi.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/midictrl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mididev.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/midieditor.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/midievent.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/midifile.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/midiport.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/midiseq.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/miditransform.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/moc_app.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/moc_appearance.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/moc_cobject.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/moc_conf.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/moc_confmport.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/moc_midieditor.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/moc_miditransform.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/moc_plugin.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/moc_song.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/moc_transport.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/moc_transpose.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/moc_value.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mpevent.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mtc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/node.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/osc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/part.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/plugin.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pos.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/route.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/seqmsg.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/shortcuts.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sig.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/song.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/songfile.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stringparam.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sync.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/synth.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tempo.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/thread.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ticksynth.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/track.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/transport.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/transpose.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/undo.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/value.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vst.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wave.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/waveevent.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wavetrack.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xml.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +.cpp.o: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< + +.cpp.obj: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.cpp.lo: +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-recursive +all-am: Makefile $(PROGRAMS) all-local +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(bindir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-recursive + +clean-am: clean-binPROGRAMS clean-generic clean-libtool clean-local \ + mostlyclean-am + +distclean: distclean-recursive + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: install-binPROGRAMS install-exec-local + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-binPROGRAMS + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all check \ + ctags-recursive install install-am install-strip \ + tags-recursive + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am all-local check check-am clean clean-binPROGRAMS \ + clean-generic clean-libtool clean-local ctags ctags-recursive \ + distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-binPROGRAMS \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-exec-local install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am uninstall-binPROGRAMS + + +de: + @for base in $(MOCFILES); do echo -e "\t$${base}.cpp $${base}.h \\"; done + +nde: + @for base in $(MOCFILES); do echo -e "\tmoc_$${base}.cpp \\"; done + +.ui.o: %.h + $(UIC) -L $(top_srcdir)/muse/widgets -o $*.cpp -impl $*.h $*.ui + $(MOC) $*.h >> $*.cpp + $(CXXCOMPILE) -c $*.cpp -o $*.o + $(RM) $*.cpp moc_$*.cpp moc_$*.o + +.ui.lo: %.h + $(UIC) -L $(top_srcdir)/muse/widgets -o $*.cpp -impl $*.h $*.ui + $(MOC) $*.h >> $*.cpp + $(LTCXXCOMPILE) -c $*.cpp -o $*.lo + $(RM) $*.cpp moc_$*.cpp moc_$*.lo moc_$*.o + +moc_%.cpp: %.h + $(MOC) $< -o $@ + +%.h: %.ui + $(UIC) -o $@ $< +# $(UIC) -L $(top_srcdir)/muse/widgets -o $@ $< + +all-local: stamp-chown .muse.bin.bak + +stamp-chown: muse @GIVERTCAP@ + if test "$(SUIDBUILD)" = "yes"; then \ + su -c "chown root muse; chmod +s muse"; \ + fi +@RTCAP_TRUE@ su -c "chown root givertcap; chmod +s givertcap"; + touch stamp-chown + +install-exec-local: + if test "$(SUIDINSTALL)" = "yes"; then \ + su -c "chown root $(bindir)/muse; chmod +s $(bindir)/muse"; \ + fi +@RTCAP_TRUE@ su -c "chown root $(bindir)/givertcap; chmod +s $(bindir)/givertcap"; + +update_translations: + genpro > muse.pro + lupdate muse.pro + +release_translations: + lrelease muse.pro + +.muse.bin.bak: + if test -e muse; then cp muse .muse.bin.bak; fi + +clean-local: + if test -e .muse.bin.bak; then cp .muse.bin.bak muse; fi + +dox: stamp-doxygen + +stamp-doxygen: $(shell find -name "*.cpp" -or -name "*.h") + $(DOXYGEN) Doxyfile + touch stamp-doxygen + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/muse2/muse/app.cpp b/muse2/muse/app.cpp new file mode 100644 index 00000000..707c3734 --- /dev/null +++ b/muse2/muse/app.cpp @@ -0,0 +1,4767 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: app.cpp,v 1.113.2.68 2009/12/21 14:51:51 spamatica Exp $ +// +// (C) Copyright 1999-2004 Werner Schweer (ws@seh.de) +//========================================================= + +#include "config.h" + +#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 +//Added by qt3to4: +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "app.h" +#include "popupmenu.h" +#include "transport.h" +#include "bigtime.h" +#include "arranger.h" +#include "pianoroll.h" +#include "xml.h" +#include "midi.h" +#include "conf.h" +#include "listedit.h" +#include "master/masteredit.h" +#include "master/lmaster.h" +#include "drumedit.h" +#include "ttoolbar.h" +#include "amixer.h" +#include "cliplist/cliplist.h" +#include "midiport.h" +#include "audiodev.h" +#include "mididev.h" +#include "waveedit.h" +#include "icons.h" +#include "minstrument.h" +#include "mixdowndialog.h" +#include "midictrl.h" +#include "filedialog.h" +#include "plugin.h" +#include "marker/markerview.h" +#include "transpose.h" +#include "appearance.h" +#include "gatetime.h" +#include "metronome.h" +#include "debug.h" +#include "event.h" +#include "audio.h" +#include "midiseq.h" +#include "audioprefetch.h" +#include "wave.h" +#include "shortcutconfig.h" +#include "gconfig.h" +#include "driver/jackaudio.h" +#include "track.h" +#include "ticksynth.h" +#include "instruments/editinstrument.h" +#include "synth.h" +#include "remote/pyapi.h" +#include "al/dsp.h" + +#ifdef DSSI_SUPPORT +#include "dssihost.h" +#endif + +#ifdef VST_SUPPORT +#include "vst.h" +#endif + +#include +#include "songinfo.h" +#include "didyouknow.h" +#include + +//extern void cacheJackRouteNames(); + +static pthread_t watchdogThread; +//ErrorHandler *error; +static const char* fileOpenText = + QT_TR_NOOP("Click this button to open a new song.
" + "You can also select the Open command from the File menu."); +static const char* fileSaveText = + QT_TR_NOOP("Click this button to save the song you are " + "editing. You will be prompted for a file name.\n" + "You can also select the Save command from the File menu."); +static const char* fileNewText = QT_TR_NOOP("Create New Song"); + +static const char* infoLoopButton = QT_TR_NOOP("loop between left mark and right mark"); +static const char* infoPunchinButton = QT_TR_NOOP("record starts at left mark"); +static const char* infoPunchoutButton = QT_TR_NOOP("record stops at right mark"); +static const char* infoStartButton = QT_TR_NOOP("rewind to start position"); +static const char* infoRewindButton = QT_TR_NOOP("rewind current position"); +static const char* infoForwardButton = QT_TR_NOOP("move current position"); +static const char* infoStopButton = QT_TR_NOOP("stop sequencer"); +static const char* infoPlayButton = QT_TR_NOOP("start sequencer play"); +static const char* infoRecordButton = QT_TR_NOOP("to record press record and then play"); +static const char* infoPanicButton = QT_TR_NOOP("send note off to all midi channels"); + +#define PROJECT_LIST_LEN 6 +static QString* projectList[PROJECT_LIST_LEN]; + +extern void initIcons(); +extern void initMidiSynth(); +extern bool initJackAudio(); +extern void exitJackAudio(); +extern bool initDummyAudio(); +extern void exitDummyAudio(); +extern void initVST_fst_init(); +extern void initVST(); +extern void initDSSI(); +// p3.3.39 +extern void initOSC(); +extern void exitOSC(); + +#ifdef HAVE_LASH +#include +lash_client_t * lash_client = 0; +extern snd_seq_t * alsaSeq; +#endif /* HAVE_LASH */ + +int watchAudio, watchAudioPrefetch, watchMidi; +pthread_t splashThread; + + +//PyScript *pyscript; +// void MusE::runPythonScript() +// { +// QString script("test.py"); +// // pyscript->runPythonScript(script); +// } + +//--------------------------------------------------------- +// getCapabilities +//--------------------------------------------------------- + +static void getCapabilities() + { +#ifdef RTCAP +#ifdef __linux__ + const char* napp = getenv("GIVERTCAP"); + if (napp == 0) + napp = "givertcap"; + int pid = fork(); + if (pid == 0) { + if (execlp(napp, napp, 0) == -1) + perror("exec givertcap failed"); + } + else if (pid == -1) { + perror("fork givertcap failed"); + } + else { + waitpid(pid, 0, 0); + } +#endif // __linux__ +#endif + } + + +//--------------------------------------------------------- +// sleep function +//--------------------------------------------------------- +void microSleep(long msleep) +{ + bool sleepOk=-1; + + while(sleepOk==-1) + sleepOk=usleep(msleep); +} + +// Removed p3.3.17 +/* +//--------------------------------------------------------- +// watchdog thread +//--------------------------------------------------------- + +static void* watchdog(void*) + { + doSetuid(); + + struct sched_param rt_param; + memset(&rt_param, 0, sizeof(rt_param)); + rt_param.sched_priority = sched_get_priority_max(SCHED_FIFO); + int rv = pthread_setschedparam(pthread_self(), SCHED_FIFO, &rt_param); + if (rv != 0) + perror("Set realtime scheduler"); + + int policy; + if (pthread_getschedparam(pthread_self(), &policy, &rt_param)!= 0) { + printf("Cannot get current client scheduler: %s\n", strerror(errno)); + } + if (policy != SCHED_FIFO) + printf("watchdog process %d _NOT_ running SCHED_FIFO\n", getpid()); + else if (debugMsg) + printf("watchdog set to SCHED_FIFO priority %d\n", + sched_get_priority_max(SCHED_FIFO)); + + undoSetuid(); + int fatal = 0; + for (;;) { + watchAudio = 0; + watchMidi = 0; + static const int WD_TIMEOUT = 3; + + // sleep can be interrpted by signals: + int to = WD_TIMEOUT; + while (to > 0) + to = sleep(to); + + bool timeout = false; + if (midiSeqRunning && watchMidi == 0) + { + printf("midiSeqRunning = %i watchMidi %i\n", midiSeqRunning, watchMidi); + timeout = true; + } + if (watchAudio == 0) + timeout = true; + if (watchAudio > 500000) + timeout = true; + if (timeout) + ++fatal; + else + fatal = 0; + if (fatal >= 3) { + printf("WatchDog: fatal error, realtime task timeout\n"); + printf(" (%d,%d-%d) - stopping all services\n", + watchMidi, watchAudio, fatal); + break; + } +// printf("wd %d %d %d\n", watchMidi, watchAudio, fatal); + } + audio->stop(true); + audioPrefetch->stop(true); + printf("watchdog exit\n"); + exit(-1); + } +*/ + +//--------------------------------------------------------- +// seqStart +//--------------------------------------------------------- + +bool MusE::seqStart() + { + // Changed by Tim. p3.3.17 + + /* + if (audio->isRunning()) { + printf("seqStart(): already running\n"); + return true; + } + + if (realTimeScheduling) { + // + // create watchdog thread with max priority + // + doSetuid(); + struct sched_param rt_param; + memset(&rt_param, 0, sizeof(rt_param)); + rt_param.sched_priority = realTimePriority +1;//sched_get_priority_max(SCHED_FIFO); + + pthread_attr_t* attributes = (pthread_attr_t*) malloc(sizeof(pthread_attr_t)); + pthread_attr_init(attributes); + +// if (pthread_attr_setschedpolicy(attributes, SCHED_FIFO)) { +// printf("MusE: cannot set FIFO scheduling class for RT thread\n"); +// } +// if (pthread_attr_setschedparam (attributes, &rt_param)) { +// // printf("Cannot set scheduling priority for RT thread (%s)\n", strerror(errno)); +// } +// if (pthread_attr_setscope (attributes, PTHREAD_SCOPE_SYSTEM)) { +// printf("MusE: Cannot set scheduling scope for RT thread\n"); +// } + if (pthread_create(&watchdogThread, attributes, ::watchdog, 0)) + perror("MusE: creating watchdog thread failed:"); + pthread_attr_destroy(attributes); + undoSetuid(); + } + audioPrefetch->start(); + audioPrefetch->msgSeek(0, true); // force + midiSeqRunning = !midiSeq->start(); + + if (!audio->start()) { + QMessageBox::critical( muse, tr(QString("Failed to start audio!")), + tr(QString("Was not able to start audio, check if jack is running.\n"))); + return false; + } + + return true; + */ + + if (audio->isRunning()) { + printf("seqStart(): already running\n"); + return true; + } + + if (!audio->start()) { + QMessageBox::critical( muse, tr(QString("Failed to start audio!")), + tr(QString("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) + if(audio->isRunning()) + break; + sleep(1); + } + //if (audioState != AUDIO_START2) { + if(!audio->isRunning()) + { + QMessageBox::critical( muse, tr("Failed to start audio!"), + tr("Timeout waiting for audio to run. Check if jack is running.\n")); + } + // + // now its safe to ask the driver for realtime + // priority + + realTimePriority = audioDevice->realtimePriority(); + if(debugMsg) + printf("MusE::seqStart: getting audio driver realTimePriority:%d\n", realTimePriority); + + // Disabled by Tim. p3.3.22 + /* + if(realTimeScheduling) + { + // + // create watchdog thread with max priority + // + doSetuid(); + struct sched_param rt_param; + memset(&rt_param, 0, sizeof(rt_param)); + rt_param.sched_priority = realTimePriority + 1;//sched_get_priority_max(SCHED_FIFO); + + pthread_attr_t* attributes = (pthread_attr_t*) malloc(sizeof(pthread_attr_t)); + pthread_attr_init(attributes); + +// if (pthread_attr_setschedpolicy(attributes, SCHED_FIFO)) { +// printf("MusE: cannot set FIFO scheduling class for RT thread\n"); +// } +// if (pthread_attr_setschedparam (attributes, &rt_param)) { +// // printf("Cannot set scheduling priority for RT thread (%s)\n", strerror(errno)); +// } +// if (pthread_attr_setscope (attributes, PTHREAD_SCOPE_SYSTEM)) { +// printf("MusE: Cannot set scheduling scope for RT thread\n"); +// } + if (pthread_create(&watchdogThread, attributes, ::watchdog, 0)) + perror("MusE: creating watchdog thread failed"); + pthread_attr_destroy(attributes); + undoSetuid(); + } + */ + + //int policy; + //if ((policy = sched_getscheduler (0)) < 0) { + // printf("Cannot get current client scheduler: %s\n", strerror(errno)); + // } + //if (policy != SCHED_FIFO) + // printf("midi thread %d _NOT_ running SCHED_FIFO\n", getpid()); + + + //audioState = AUDIO_RUNNING; + // Changed by Tim. p3.3.22 + /* + //if(realTimePriority) + if(realTimeScheduling) + { + int pr = realTimePriority; + if(pr > 5) + pr -= 5; + else + pr = 0; + audioPrefetch->start(pr); + //audioWriteback->start(realTimePriority - 5); + } + else + { + audioPrefetch->start(0); + //audioWriteback->start(0); + } + */ + + int pfprio = 0; + int midiprio = 0; + + // NOTE: realTimeScheduling can be true (gotten using jack_is_realtime()), + // while the determined realTimePriority can be 0. + // realTimePriority is gotten using pthread_getschedparam() on the client thread + // in JackAudioDevice::realtimePriority() which is a bit flawed - it reports there's no RT... + if(realTimeScheduling) + { + //if(realTimePriority < 5) + // printf("MusE: WARNING: Recommend setting audio realtime priority to a higher value!\n"); + /* + if(realTimePriority == 0) + { + pfprio = 1; + midiprio = 2; + } + else + if(realTimePriority == 1) + { + pfprio = 2; + midiprio = 3; + } + else + if(realTimePriority == 2) + { + pfprio = 1; + midiprio = 3; + } + else + if(realTimePriority == 3) + { + pfprio = 1; + //midiprio = 2; + // p3.3.37 + midiprio = 4; + } + else + if(realTimePriority == 4) + { + pfprio = 1; + //midiprio = 3; + // p3.3.37 + midiprio = 5; + } + else + if(realTimePriority == 5) + { + pfprio = 1; + //midiprio = 3; + // p3.3.37 + midiprio = 6; + } + else + */ + { + //pfprio = realTimePriority - 5; + // p3.3.40 + pfprio = realTimePriority + 1; + + //midiprio = realTimePriority - 2; + // p3.3.37 + //midiprio = realTimePriority + 1; + // p3.3.40 + midiprio = realTimePriority + 2; + } + } + + if(midiRTPrioOverride > 0) + midiprio = midiRTPrioOverride; + + // FIXME FIXME: The realTimePriority of the Jack thread seems to always be 5 less than the value passed to jackd command. + //if(midiprio == realTimePriority) + // printf("MusE: WARNING: Midi realtime priority %d is the same as audio realtime priority %d. Try a different setting.\n", + // midiprio, realTimePriority); + //if(midiprio == pfprio) + // printf("MusE: WARNING: Midi realtime priority %d is the same as audio prefetch realtime priority %d. Try a different setting.\n", + // midiprio, pfprio); + + audioPrefetch->start(pfprio); + + audioPrefetch->msgSeek(0, true); // force + + //midiSeqRunning = !midiSeq->start(realTimeScheduling ? realTimePriority : 0); + // Changed by Tim. p3.3.22 + //midiSeq->start(realTimeScheduling ? realTimePriority : 0); + midiSeq->start(midiprio); + + int counter=0; + while (++counter) { + //if (counter > 10) { + if (counter > 1000) { + fprintf(stderr,"midi sequencer thread does not start!? Exiting...\n"); + exit(33); + } + midiSeqRunning = midiSeq->isRunning(); + if (midiSeqRunning) + break; + usleep(1000); + printf("looping waiting for sequencer thread to start\n"); + } + if(!midiSeqRunning) + { + fprintf(stderr, "midiSeq is not running! Exiting...\n"); + exit(33); + } + return true; + } + +//--------------------------------------------------------- +// stop +//--------------------------------------------------------- + +void MusE::seqStop() + { + // label sequencer as disabled before it actually happened to minimize race condition + midiSeqRunning = false; + + song->setStop(true); + song->setStopPlay(false); + midiSeq->stop(true); + audio->stop(true); + audioPrefetch->stop(true); + if (realTimeScheduling && watchdogThread) + pthread_cancel(watchdogThread); + } + +//--------------------------------------------------------- +// seqRestart +//--------------------------------------------------------- + +bool MusE::seqRestart() +{ + bool restartSequencer = audio->isRunning(); + if (restartSequencer) { + if (audio->isPlaying()) { + audio->msgPlay(false); + while (audio->isPlaying()) + qApp->processEvents(); + } + seqStop(); + } + if(!seqStart()) + return false; + + audioDevice->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); + } + +//--------------------------------------------------------- +// populateAddSynth +//--------------------------------------------------------- + +/* +struct addSynth_cmp_str +{ + bool operator()(std::string a, std::string b) + { + return (a < b); + } +}; +*/ + +Q3PopupMenu* populateAddSynth(QWidget* parent, QObject* obj = 0, const char* slot = 0) +{ + Q3PopupMenu* synp = new Q3PopupMenu(parent); + + //typedef std::multimap asmap; + typedef std::multimap asmap; + + //typedef std::multimap::iterator imap; + typedef std::multimap::iterator imap; + + MessSynth* synMESS = 0; + Q3PopupMenu* synpMESS = 0; + asmap mapMESS; + + #ifdef DSSI_SUPPORT + DssiSynth* synDSSI = 0; + Q3PopupMenu* synpDSSI = 0; + asmap mapDSSI; + #endif + + #ifdef VST_SUPPORT + VstSynth* synVST = 0; + Q3PopupMenu* synpVST = 0; + asmap mapVST; + #endif + + // Not necessary, but what the heck. + Q3PopupMenu* synpOther = 0; + asmap mapOther; + + //const int synth_base_id = 0x1000; + int ii = 0; + for(std::vector::iterator i = synthis.begin(); i != synthis.end(); ++i) + { + synMESS = dynamic_cast(*i); + if(synMESS) + { + mapMESS.insert( std::pair (std::string(synMESS->description().lower().latin1()), ii) ); + } + else + { + + #ifdef DSSI_SUPPORT + synDSSI = dynamic_cast(*i); + if(synDSSI) + { + mapDSSI.insert( std::pair (std::string(synDSSI->description().lower().latin1()), ii) ); + } + else + #endif + + { + #ifdef VST_SUPPORT + synVST = dynamic_cast(*i); + if(synVST) + { + mapVST.insert( std::pair (std::string(synVST->description().lower().latin1()), ii) ); + } + else + #endif + + { + mapOther.insert( std::pair (std::string((*i)->description().lower().latin1()), ii) ); + } + } + } + + ++ii; + } + + int sz = synthis.size(); + for(imap i = mapMESS.begin(); i != mapMESS.end(); ++i) + { + int idx = i->second; + if(idx > sz) // Sanity check + continue; + Synth* s = synthis[idx]; + if(s) + { + // No MESS sub-menu yet? Create it now. + if(!synpMESS) + synpMESS = new Q3PopupMenu(parent); + synpMESS->insertItem(QT_TR_NOOP(s->description()) + " <" + QT_TR_NOOP(s->name()) + ">", MENU_ADD_SYNTH_ID_BASE + idx); + } + } + + #ifdef DSSI_SUPPORT + for(imap i = mapDSSI.begin(); i != mapDSSI.end(); ++i) + { + int idx = i->second; + if(idx > sz) + continue; + Synth* s = synthis[idx]; + if(s) + { + // No DSSI sub-menu yet? Create it now. + if(!synpDSSI) + synpDSSI = new Q3PopupMenu(parent); + synpDSSI->insertItem(QT_TR_NOOP(s->description()) + " <" + QT_TR_NOOP(s->name()) + ">", MENU_ADD_SYNTH_ID_BASE + idx); + } + } + #endif + + #ifdef VST_SUPPORT + for(imap i = mapVST.begin(); i != mapVST.end(); ++i) + { + int idx = i->second; + if(idx > sz) + continue; + Synth* s = synthis[idx]; + if(s) + { + // No VST sub-menu yet? Create it now. + if(!synpVST) + synpVST = new Q3PopupMenu(parent); + synpVST->insertItem(QT_TR_NOOP(s->description()) + " <" + QT_TR_NOOP(s->name()) + ">", MENU_ADD_SYNTH_ID_BASE + idx); + } + } + #endif + + for(imap i = mapOther.begin(); i != mapOther.end(); ++i) + { + int idx = i->second; + if(idx > sz) + continue; + Synth* s = synthis[idx]; + // No Other sub-menu yet? Create it now. + if(!synpOther) + synpOther = new Q3PopupMenu(parent); + synpOther->insertItem(QT_TR_NOOP(s->description()) + " <" + QT_TR_NOOP(s->name()) + ">", MENU_ADD_SYNTH_ID_BASE + idx); + } + + if(synpMESS) + { + synp->insertItem(*synthIcon, QT_TR_NOOP("MESS"), synpMESS, Track::AUDIO_SOFTSYNTH); + if(obj && slot) + QObject::connect(synpMESS, SIGNAL(activated(int)), obj, slot); + } + + #ifdef DSSI_SUPPORT + if(synpDSSI) + { + synp->insertItem(*synthIcon, QT_TR_NOOP("DSSI"), synpDSSI, Track::AUDIO_SOFTSYNTH); + if(obj && slot) + QObject::connect(synpDSSI, SIGNAL(activated(int)), obj, slot); + } + #endif + + #ifdef VST_SUPPORT + if(synpVST) + { + synp->insertItem(*synthIcon, QT_TR_NOOP("FST"), synpVST, Track::AUDIO_SOFTSYNTH); + if(obj && slot) + QObject::connect(synpVST, SIGNAL(activated(int)), obj, slot); + } + #endif + + if(synpOther) + { + synp->insertItem(*synthIcon, QObject::tr("Other"), synpOther, Track::AUDIO_SOFTSYNTH); + if(obj && slot) + QObject::connect(synpOther, SIGNAL(activated(int)), obj, slot); + } + + return synp; +} + +//--------------------------------------------------------- +// populateAddTrack +// this is also used in "mixer" +//--------------------------------------------------------- + +void populateAddTrack(Q3PopupMenu* addTrack) + { + addTrack->insertItem(QIcon(*addtrack_addmiditrackIcon), + QT_TR_NOOP("Add Midi Track"), Track::MIDI); + addTrack->insertItem(QIcon(*addtrack_drumtrackIcon), + QT_TR_NOOP("Add Drum Track"), Track::DRUM); + addTrack->insertItem(QIcon(*addtrack_wavetrackIcon), + QT_TR_NOOP("Add Wave Track"), Track::WAVE); + addTrack->insertItem(QIcon(*addtrack_audiooutputIcon), + QT_TR_NOOP("Add Audio Output"), Track::AUDIO_OUTPUT); + addTrack->insertItem(QIcon(*addtrack_audiogroupIcon), + QT_TR_NOOP("Add Audio Group"), Track::AUDIO_GROUP); + addTrack->insertItem(QIcon(*addtrack_audioinputIcon), + QT_TR_NOOP("Add Audio Input"), Track::AUDIO_INPUT); + addTrack->insertItem(QIcon(*addtrack_auxsendIcon), + QT_TR_NOOP("Add Aux Send"), Track::AUDIO_AUX); + + // Create a sub-menu and fill it with found synth types. Make addTrack the owner. + Q3PopupMenu* synp = populateAddSynth(addTrack, song, SLOT(addNewTrack(int))); + // Add the sub-menu to the given menu. + addTrack->insertItem(*synthIcon, QT_TR_NOOP("Add Synth"), synp, Track::AUDIO_SOFTSYNTH); + + //addTrack->connect(addTrack, SIGNAL(activated(int)), song, SLOT(addTrack(int))); + addTrack->connect(addTrack, SIGNAL(activated(int)), song, SLOT(addNewTrack(int))); + //synp->connect(synp, SIGNAL(activated(int)), song, SLOT(addNewTrack(int))); + } + +//--------------------------------------------------------- +// MusE +//--------------------------------------------------------- + +MusE::MusE(int argc, char** argv) : Q3MainWindow(0, "mainwindow") + { + // By T356. For LADSPA plugins in plugin.cpp + // QWidgetFactory::addWidgetFactory( new PluginWidgetFactory ); ddskrjo + + setFocusPolicy(Qt::WheelFocus); + muse = this; // hack + clipListEdit = 0; + midiSyncConfig = 0; + midiRemoteConfig = 0; + midiPortConfig = 0; + metronomeConfig = 0; + audioConfig = 0; + midiFileConfig = 0; + midiFilterConfig = 0; + midiInputTransform = 0; + midiRhythmGenerator = 0; + globalSettingsConfig = 0; + markerView = 0; + softSynthesizerConfig = 0; + midiTransformerDialog = 0; + shortcutConfig = 0; + appearance = 0; + //audioMixer = 0; + mixer1 = 0; + mixer2 = 0; + watchdogThread = 0; + editInstrument = 0; + routingPopupMenu = 0; + + appName = QString("MusE"); + + song = new Song("song"); + song->blockSignals(true); + heartBeatTimer = new QTimer(this, "timer"); + connect(heartBeatTimer, SIGNAL(timeout()), song, SLOT(beat())); + +#ifdef ENABLE_PYTHON + //--------------------------------------------------- + // Python bridge + //--------------------------------------------------- + // Uncomment in order to enable MusE Python bridge: + if (usePythonBridge) { + printf("Initializing python bridge!\n"); + if (initPythonBridge() == false) { + printf("Could not initialize Python bridge\n"); + exit(1); + } + } +#endif + + //--------------------------------------------------- + // undo/redo + //--------------------------------------------------- + undoRedo = new Q3ActionGroup(this, tr("UndoRedo"), false); + undoAction = new Q3Action(tr("undo"), QIcon(*undoIconS), tr("Und&o"), // ddskrjo + Qt::CTRL+Qt::Key_Z, undoRedo, "undo"); + redoAction = new Q3Action(tr("redo"), QIcon(*redoIconS), tr("Re&do"), // ddskrjo + Qt::CTRL+Qt::Key_Y, undoRedo, "redo"); + undoAction->setWhatsThis(tr("undo last change to song")); + redoAction->setWhatsThis(tr("redo last undo")); + undoAction->setEnabled(false); + redoAction->setEnabled(false); + connect(redoAction, SIGNAL(activated()), song, SLOT(redo())); + connect(undoAction, SIGNAL(activated()), song, SLOT(undo())); + + //--------------------------------------------------- + // Transport + //--------------------------------------------------- + + transportAction = new Q3ActionGroup(this, tr("Transport"), false); + + loopAction = new Q3Action(tr("loop"), QIcon(*loop1Icon), + tr("Loop"), 0, transportAction, "loop", true); + loopAction->setWhatsThis(tr(infoLoopButton)); + connect(loopAction, SIGNAL(toggled(bool)), song, SLOT(setLoop(bool))); + + punchinAction = new Q3Action(tr("punchin"), QIcon(*punchin1Icon), + tr("Punchin"), 0, transportAction, "Punchin", true); + punchinAction->setWhatsThis(tr(infoPunchinButton)); + connect(punchinAction, SIGNAL(toggled(bool)), song, SLOT(setPunchin(bool))); + + punchoutAction = new Q3Action(tr("punchout"), QIcon(*punchout1Icon), + tr("Punchout"), 0, transportAction, "punchout", true); + punchoutAction->setWhatsThis(tr(infoPunchoutButton)); + connect(punchoutAction, SIGNAL(toggled(bool)), song, SLOT(setPunchout(bool))); + + transportAction->addSeparator(); + + startAction = new Q3Action(tr("start"), QIcon(*startIcon), + tr("Start"), 0, transportAction, "start"); + startAction->setWhatsThis(tr(infoStartButton)); + connect(startAction, SIGNAL(activated()), song, SLOT(rewindStart())); + + rewindAction = new Q3Action(tr("rewind"), QIcon(*frewindIcon), + tr("Rewind"), 0, transportAction, "rewind"); + rewindAction->setWhatsThis(tr(infoRewindButton)); + connect(rewindAction, SIGNAL(activated()), song, SLOT(rewind())); + + forwardAction = new Q3Action(tr("forward"), QIcon(*fforwardIcon), + tr("Forward"), 0, transportAction, "forward"); + forwardAction->setWhatsThis(tr(infoForwardButton)); + connect(forwardAction, SIGNAL(activated()), song, SLOT(forward())); + + stopAction = new Q3Action(tr("stop"), QIcon(*stopIcon), + tr("Stop"), 0, transportAction, "stop", true); + stopAction->setWhatsThis(tr(infoStopButton)); + stopAction->setOn(true); + connect(stopAction, SIGNAL(toggled(bool)), song, SLOT(setStop(bool))); + + playAction = new Q3Action(tr("play"), QIcon(*playIcon), + tr("Play"), 0, transportAction, "play", true); + playAction->setWhatsThis(tr(infoPlayButton)); + playAction->setOn(false); + connect(playAction, SIGNAL(toggled(bool)), song, SLOT(setPlay(bool))); + + recordAction = new Q3Action(tr("record"), QIcon(*recordIcon), + tr("Record"), 0, transportAction, "record", true); + recordAction->setWhatsThis(tr(infoRecordButton)); + connect(recordAction, SIGNAL(toggled(bool)), song, SLOT(setRecord(bool))); + + panicAction = new Q3Action(tr("panic"), QIcon(*panicIcon), + tr("Panic"), 0, 0, "panic", false); + panicAction->setWhatsThis(tr(infoPanicButton)); + connect(panicAction, SIGNAL(activated()), song, SLOT(panic())); + + initMidiInstruments(); + initMidiPorts(); + ::initMidiDevices(); + + //----Actions + + fileNewAction = new Q3Action(tr("new"), + QIcon(*filenewIcon), tr("&New"), 0, this, "new"); // ddskrjo + fileNewAction->setToolTip(tr(fileNewText)); + fileNewAction->setWhatsThis(tr(fileNewText)); + + fileOpenAction = new Q3Action(tr("open"), + QIcon(*openIcon), tr("&Open"), 0, this, "open"); // ddskrjo + fileOpenAction->setToolTip(tr(fileOpenText)); + fileOpenAction->setWhatsThis(tr(fileOpenText)); + + fileSaveAction = new Q3Action(tr("save"), + QIcon(*saveIcon), tr("&Save"), 0, this, "save"); // ddskrjo + fileSaveAction->setToolTip(tr(fileSaveText)); + fileSaveAction->setWhatsThis(tr(fileSaveText)); + + pianoAction = new Q3Action(tr("pianoroll"), + *pianoIconSet, tr("Pianoroll"), 0, this, "pianoroll"); + connect(pianoAction, SIGNAL(activated()), SLOT(startPianoroll())); + +// markerAction = new QAction(tr("marker"), QIconSet(*view_markerIcon), tr("Marker"), +// 0, this, "marker"); +// connect(markerAction, SIGNAL(activated()), SLOT(startMarkerView())); + + connect(fileNewAction, SIGNAL(activated()), SLOT(loadTemplate())); + connect(fileOpenAction, SIGNAL(activated()), SLOT(loadProject())); + connect(fileSaveAction, SIGNAL(activated()), SLOT(save())); + + //-------------------------------------------------- + // Toolbar + //-------------------------------------------------- + + tools = new Q3ToolBar(tr("File Buttons"), this); + fileNewAction->addTo(tools); + fileOpenAction->addTo(tools); + fileSaveAction->addTo(tools); + + // + // Whats This + // + Q3WhatsThis::whatsThisButton(tools); + + tools->addSeparator(); + undoRedo->addTo(tools); + + tools1 = new EditToolBar(this, arrangerTools); + + Q3ToolBar* transportToolbar = new Q3ToolBar(this); + transportAction->addTo(transportToolbar); + + Q3ToolBar* panicToolbar = new Q3ToolBar(this); + panicAction->addTo(panicToolbar); + + if (realTimePriority < sched_get_priority_min(SCHED_FIFO)) + realTimePriority = sched_get_priority_min(SCHED_FIFO); + else if (realTimePriority > sched_get_priority_max(SCHED_FIFO)) + realTimePriority = sched_get_priority_max(SCHED_FIFO); + + // If we requested to force the midi thread priority... + if(midiRTPrioOverride > 0) + { + if (midiRTPrioOverride < sched_get_priority_min(SCHED_FIFO)) + midiRTPrioOverride = sched_get_priority_min(SCHED_FIFO); + else if (midiRTPrioOverride > sched_get_priority_max(SCHED_FIFO)) + midiRTPrioOverride = sched_get_priority_max(SCHED_FIFO); + } + + // Changed by Tim. p3.3.17 + //midiSeq = new MidiSeq(realTimeScheduling ? realTimePriority : 0, "Midi"); + midiSeq = new MidiSeq("Midi"); + audio = new Audio(); + //audioPrefetch = new AudioPrefetch(0, "Disc"); + audioPrefetch = new AudioPrefetch("Prefetch"); + + //--------------------------------------------------- + // Popups + //--------------------------------------------------- + +// QPopupMenu *foo = new QPopupMenu(this); +// testAction = new QAction(foo,"testPython"); +// testAction->addTo(foo); +// menuBar()->insertItem(tr("&testpython"), foo); +// connect(testAction, SIGNAL(activated()), this, SLOT(runPythonScript())); + + + //------------------------------------------------------------- + // popup File + //------------------------------------------------------------- + + menu_file = new Q3PopupMenu(this); + menuBar()->insertItem(tr("&File"), menu_file); + fileNewAction->addTo(menu_file); + fileOpenAction->addTo(menu_file); + openRecent = new Q3PopupMenu(menu_file); + connect(openRecent, SIGNAL(aboutToShow()), this, SLOT(openRecentMenu())); + connect(openRecent, SIGNAL(activated(int)), this, SLOT(selectProject(int))); + menu_ids[CMD_OPEN_RECENT] = menu_file->insertItem(tr("Open &Recent"), openRecent, 0); + menu_file->insertSeparator(); + fileSaveAction->addTo(menu_file); + menu_ids[CMD_SAVE_AS] = menu_file->insertItem(tr("Save &As"), this, SLOT(saveAs()), 0, -2); + menu_file->insertSeparator(); + menu_ids[CMD_IMPORT_MIDI] = menu_file->insertItem(*openIconS, tr("Import Midifile"), this, SLOT(importMidi()), 0, -2); + menu_ids[CMD_EXPORT_MIDI] = menu_file->insertItem(*saveIconS, tr("Export Midifile"), this, SLOT(exportMidi()), 0, -2); + menu_ids[CMD_IMPORT_PART] = menu_file->insertItem(*openIconS, tr("Import Part"), this, SLOT(importPart()), 0, -2); + menu_file->insertSeparator(); + menu_ids[CMD_IMPORT_AUDIO] = menu_file->insertItem(*openIconS, tr("Import Wave File"), this, SLOT(importWave()), 0, -2); + + + menu_file->insertSeparator(); + menu_ids[CMD_QUIT] = menu_file->insertItem(*exitIconS, tr("&Quit"), this, SLOT(quitDoc()), 0, -2); + menu_file->insertSeparator(); + + //------------------------------------------------------------- + // popup Edit + //------------------------------------------------------------- + + menuEdit = new Q3PopupMenu(this); + undoRedo->addTo(menuEdit); + menuEdit->insertSeparator(); + menuBar()->insertItem(tr("&Edit"), menuEdit); + + menuEdit->insertItem(*editcutIconSet, tr("C&ut"), CMD_CUT); + menuEdit->setAccel(Qt::CTRL+Qt::Key_X, CMD_CUT); + menuEdit->insertItem(*editcopyIconSet, tr("&Copy"), CMD_COPY); + menuEdit->setAccel(Qt::CTRL+Qt::Key_C, CMD_COPY); + menuEdit->insertItem(*editpasteIconSet, tr("&Paste"), CMD_PASTE); + menuEdit->setAccel(Qt::CTRL+Qt::Key_V, CMD_PASTE); + menuEdit->insertItem(*editpasteIconSet, tr("&Insert"), CMD_INSERT); + menuEdit->setAccel(Qt::CTRL+Qt::SHIFT+Qt::Key_I, CMD_INSERT); + menuEdit->insertItem(*editpasteCloneIconSet, tr("Paste c&lone"), CMD_PASTE_CLONE); + menuEdit->setAccel(Qt::CTRL+Qt::SHIFT+Qt::Key_V, CMD_PASTE_CLONE); + menuEdit->insertItem(*editpaste2TrackIconSet, tr("Paste to &track"), CMD_PASTE_TO_TRACK); + menuEdit->setAccel(Qt::CTRL+Qt::Key_B, CMD_PASTE_TO_TRACK); + menuEdit->insertItem(*editpasteClone2TrackIconSet, tr("Paste clone to trac&k"), CMD_PASTE_CLONE_TO_TRACK); + menuEdit->setAccel(Qt::CTRL+Qt::SHIFT+Qt::Key_B, CMD_PASTE_CLONE_TO_TRACK); + + menuEdit->insertItem(*editpasteIconSet, tr("&Insert empty measure"), CMD_INSERTMEAS); + menuEdit->setAccel(Qt::CTRL+Qt::SHIFT+Qt::Key_X, CMD_INSERTMEAS); + menuEdit->insertSeparator(); + menuEdit->insertItem(QIcon(*edit_track_delIcon), + tr("Delete Selected Tracks"), CMD_DELETE_TRACK); + + addTrack = new Q3PopupMenu(this); + // Moved below. Have to wait until synths are available... + //populateAddTrack(addTrack); + + menuEdit->insertItem(QIcon(*edit_track_addIcon), + tr("Add Track"), addTrack); + + select = new Q3PopupMenu(this); + select->insertItem(QIcon(*select_allIcon), + tr("Select &All"), CMD_SELECT_ALL); + select->insertItem(QIcon(*select_deselect_allIcon), + tr("&Deselect All"), CMD_SELECT_NONE); + menuEdit->insertSeparator(); + select->insertItem(QIcon(*select_invert_selectionIcon), + tr("Invert &Selection"), CMD_SELECT_INVERT); + select->insertItem(QIcon(*select_inside_loopIcon), + tr("&Inside Loop"), CMD_SELECT_ILOOP); + select->insertItem(QIcon(*select_outside_loopIcon), + tr("&Outside Loop"), CMD_SELECT_OLOOP); + select->insertItem(QIcon(*select_all_parts_on_trackIcon), + tr("All &Parts on Track"), CMD_SELECT_PARTS); + menuEdit->insertItem(QIcon(*selectIcon), + tr("Select"), select); + menuEdit->insertSeparator(); + + pianoAction->addTo(menuEdit); + menu_ids[CMD_OPEN_DRUMS] = menuEdit->insertItem( + QIcon(*edit_drummsIcon), tr("Drums"), this, SLOT(startDrumEditor()), 0); + menu_ids[CMD_OPEN_LIST] = menuEdit->insertItem( + QIcon(*edit_listIcon), tr("List"), this, SLOT(startListEditor()), 0); + menu_ids[CMD_OPEN_WAVE] = menuEdit->insertItem( + QIcon(*edit_waveIcon), tr("Wave"), this, SLOT(startWaveEditor()), 0); + + master = new Q3PopupMenu(this); + master->setCheckable(false); + menu_ids[CMD_OPEN_GRAPHIC_MASTER] = master->insertItem( + QIcon(*mastertrack_graphicIcon),tr("Graphic"), this, SLOT(startMasterEditor()), 0); + menu_ids[CMD_OPEN_LIST_MASTER] = master->insertItem( + QIcon(*mastertrack_listIcon),tr("List"), this, SLOT(startLMasterEditor()), 0); + menuEdit->insertItem(QIcon(*edit_mastertrackIcon), + tr("Mastertrack"), master, Qt::Key_F); + + menuEdit->insertSeparator(); + connect(menuEdit, SIGNAL(activated(int)), SLOT(cmd(int))); + connect(select, SIGNAL(activated(int)), SLOT(cmd(int))); + + midiEdit = new Q3PopupMenu(this); + midiEdit->setCheckable(false); +#if 0 // TODO + menu_ids[CMD_OPEN_MIDI_TRANSFORM] = midiEdit->insertItem( + QIcon(*midi_transformIcon), tr("Midi &Transform"), this, SLOT(startMidiTransformer()), 0); + 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 + menu_ids[CMD_TRANSPOSE] = midiEdit->insertItem( + QIcon(*midi_transposeIcon), tr("Transpose"), this, SLOT(transpose()), 0); + menuEdit->insertItem( + QIcon(*edit_midiIcon), tr("Midi"), midiEdit); + + menuEdit->insertSeparator(); + menuEdit->insertItem( + QIcon(*edit_listIcon), tr("Song info"), this, SLOT(startSongInfo()), 0); + //------------------------------------------------------------- + // popup View + //------------------------------------------------------------- + + menuView = new Q3PopupMenu(this); + menuView->setCheckable(true); + menuBar()->insertItem(tr("View"), menuView); + + tr_id = menuView->insertItem( + QIcon(*view_transport_windowIcon), tr("Transport Panel"), this, SLOT(toggleTransport()), 0); + bt_id = menuView->insertItem( + QIcon(*view_bigtime_windowIcon), tr("Bigtime window"), this, SLOT(toggleBigTime()), 0); + //aid1 = menuView->insertItem( + // QIconSet(*mixerSIcon), tr("Mixer"), this, SLOT(toggleMixer()), 0); + aid1a = menuView->insertItem( + QIcon(*mixerSIcon), tr("Mixer A"), this, SLOT(toggleMixer1()), 0); + aid1b = menuView->insertItem( + QIcon(*mixerSIcon), tr("Mixer B"), this, SLOT(toggleMixer2()), 0); + // p3.2.24 + aid2 = menuView->insertItem( + QIcon(*cliplistSIcon), tr("Cliplist"), this, SLOT(startClipList()), 0); + mr_id = menuView->insertItem( + QIcon(*view_markerIcon), tr("Marker View"), this, SLOT(toggleMarker()), 0); + //markerAction->addTo(menuView); + + + //------------------------------------------------------------- + // popup Structure + //------------------------------------------------------------- + + menuStructure = new Q3PopupMenu(this); + menuStructure->setCheckable(false); + menuBar()->insertItem(tr("&Structure"), menuStructure); + menu_ids[CMD_GLOBAL_CUT] = menuStructure->insertItem(tr("Global Cut"), this, SLOT(globalCut()), 0); + menu_ids[CMD_GLOBAL_INSERT] = menuStructure->insertItem(tr("Global Insert"), this, SLOT(globalInsert()), 0); + menu_ids[CMD_GLOBAL_SPLIT] = menuStructure->insertItem(tr("Global Split"), this, SLOT(globalSplit()), 0); + menu_ids[CMD_COPY_RANGE] = menuStructure->insertItem(tr("Copy Range"), this, SLOT(copyRange()), 0); + menuStructure->setItemEnabled(menu_ids[CMD_COPY_RANGE], false); + menuStructure->insertSeparator(); + menu_ids[CMD_CUT_EVENTS] = menuStructure->insertItem(tr("Cut Events"), this, SLOT(cutEvents()), 0); + menuStructure->setItemEnabled(menu_ids[CMD_CUT_EVENTS], false); + + //------------------------------------------------------------- + // popup Midi + //------------------------------------------------------------- + + midiInputPlugins = new Q3PopupMenu(this); + midiInputPlugins->setCheckable(false); + mpid0 = midiInputPlugins->insertItem( + QIcon(*midi_inputplugins_transposeIcon), tr("Transpose"), 0); + mpid1 = midiInputPlugins->insertItem( + QIcon(*midi_inputplugins_midi_input_transformIcon), tr("Midi Input Transform"), 1); + mpid2 = midiInputPlugins->insertItem( + QIcon(*midi_inputplugins_midi_input_filterIcon), tr("Midi Input Filter"), 2); + mpid3 = midiInputPlugins->insertItem( + QIcon(*midi_inputplugins_remote_controlIcon), tr("Midi Remote Control"), 3); +/* +** mpid4 = midiInputPlugins->insertItem( +** QIconSet(*midi_inputplugins_random_rhythm_generatorIcon), tr("Random Rhythm Generator"), 4); +*/ + connect(midiInputPlugins, SIGNAL(activated(int)), SLOT(startMidiInputPlugin(int))); + +// midiInputPlugins->setItemEnabled(mpid4, false); + + menu_functions = new Q3PopupMenu(this); + menu_functions->setCheckable(true); + menuBar()->insertItem(tr("&Midi"), menu_functions); + menu_functions->setCaption(tr("Midi")); + + menuScriptPlugins = new Q3PopupMenu(this); + song->populateScriptMenu(menuScriptPlugins, this); + menu_functions->insertItem(tr("&Plugins"), menuScriptPlugins); + + menu_ids[CMD_MIDI_EDIT_INSTRUMENTS] = menu_functions->insertItem( + QIcon(*midi_edit_instrumentIcon), tr("Edit Instrument"), this, SLOT(startEditInstrument()), 0); + menu_functions->insertItem( + QIcon(*midi_inputpluginsIcon), tr("Input Plugins"), midiInputPlugins, Qt::Key_P); + menu_functions->insertSeparator(); + menu_ids[CMD_MIDI_RESET] = menu_functions->insertItem( + QIcon(*midi_reset_instrIcon), tr("Reset Instr."), this, SLOT(resetMidiDevices()), 0); + menu_ids[CMD_MIDI_INIT] = menu_functions->insertItem( + QIcon(*midi_init_instrIcon), tr("Init Instr."), this, SLOT(initMidiDevices()), 0); + menu_ids[CMD_MIDI_LOCAL_OFF] = menu_functions->insertItem( + QIcon(*midi_local_offIcon), tr("local off"), this, SLOT(localOff()), 0); + + //------------------------------------------------------------- + // popup Audio + //------------------------------------------------------------- + + menu_audio = new Q3PopupMenu(this); + menu_audio->setCheckable(true); + menuBar()->insertItem(tr("&Audio"), menu_audio); + menu_ids[CMD_AUDIO_BOUNCE_TO_TRACK] = menu_audio->insertItem( + QIcon(*audio_bounce_to_trackIcon), tr("Bounce to Track"), this, SLOT(bounceToTrack()), 0); + menu_ids[CMD_AUDIO_BOUNCE_TO_FILE] = menu_audio->insertItem( + QIcon(*audio_bounce_to_fileIcon), tr("Bounce to File"), this, SLOT(bounceToFile()), 0); + menu_audio->insertSeparator(); + menu_ids[CMD_AUDIO_RESTART] = menu_audio->insertItem( + QIcon(*audio_restartaudioIcon), tr("Restart Audio"), this, SLOT(seqRestart()), 0); + + //------------------------------------------------------------- + // popup Automation + //------------------------------------------------------------- + + menuAutomation = new Q3PopupMenu(this); + menuAutomation->setCheckable(true); + menuBar()->insertItem(tr("Automation"), menuAutomation); + autoId = menuAutomation->insertItem( + QIcon(*automation_mixerIcon), tr("Mixer Automation"), this, SLOT(switchMixerAutomation()), 0); + menuAutomation->insertSeparator(); + menu_ids[CMD_MIXER_SNAPSHOT] = menuAutomation->insertItem( + QIcon(*automation_take_snapshotIcon), tr("Take Snapshot"), this, SLOT(takeAutomationSnapshot()), 0); + menu_ids[CMD_MIXER_AUTOMATION_CLEAR] = menuAutomation->insertItem( + QIcon(*automation_clear_dataIcon), tr("Clear Automation Data"), this, SLOT(clearAutomation()), 0); + menuAutomation->setItemEnabled(menu_ids[CMD_MIXER_AUTOMATION_CLEAR], false); + + //------------------------------------------------------------- + // popup Settings + //------------------------------------------------------------- + + follow = new Q3PopupMenu(this); + follow->setCheckable(false); + fid0 = follow->insertItem(tr("dont follow Song"), CMD_FOLLOW_NO); + fid1 = follow->insertItem(tr("follow page"), CMD_FOLLOW_JUMP); + fid2 = follow->insertItem(tr("follow continuous"), CMD_FOLLOW_CONTINUOUS); + follow->setItemChecked(fid1, true); + connect(follow, SIGNAL(activated(int)), SLOT(cmd(int))); + + menuSettings = new Q3PopupMenu(this); + menuSettings->setCheckable(false); + menuBar()->insertItem(tr("Settings"), menuSettings); + menu_ids[CMD_GLOBAL_CONFIG] = menuSettings->insertItem( + QIcon(*settings_globalsettingsIcon), tr("Global Settings"), this, SLOT(configGlobalSettings()),0); + menu_ids[CMD_CONFIG_SHORTCUTS] = menuSettings->insertItem( + QIcon(*settings_configureshortcutsIcon), tr("Configure shortcuts"), this, SLOT(configShortCuts()), 0); + menuSettings->insertItem( + QIcon(*settings_follow_songIcon), tr("follow song"), follow, Qt::Key_F); + menu_ids[CMD_CONFIG_METRONOME] = menuSettings->insertItem( + QIcon(*settings_metronomeIcon), tr("Metronome"), this, SLOT(configMetronome()), 0); + menuSettings->insertSeparator(); + menu_ids[CMD_CONFIG_MIDISYNC] = menuSettings->insertItem( + QIcon(*settings_midisyncIcon), tr("Midi Sync"), this, SLOT(configMidiSync()), 0); + menu_ids[CMD_MIDI_FILE_CONFIG] = menuSettings->insertItem( + QIcon(*settings_midifileexportIcon), tr("Midi File Import/Export"), this, SLOT(configMidiFile()), 0); + menuSettings->insertSeparator(); + menu_ids[CMD_APPEARANCE_SETTINGS] = menuSettings->insertItem( + QIcon(*settings_appearance_settingsIcon), tr("Appearance settings"), this, SLOT(configAppearance()), 0); + menuSettings->insertSeparator(); + menu_ids[CMD_CONFIG_MIDI_PORTS] = menuSettings->insertItem( + QIcon(*settings_midiport_softsynthsIcon), tr("Midi Ports / Soft Synth"), this, SLOT(configMidiPorts()), 0); + + //--------------------------------------------------- + // popup Help + //--------------------------------------------------- + + menuBar()->insertSeparator(); + menu_help = new Q3PopupMenu(this); + menu_help->setCheckable(false); + menuBar()->insertItem(tr("&Help"), menu_help); + + menu_ids[CMD_OPEN_HELP] = menu_help->insertItem(tr("&Manual"), this, SLOT(startHelpBrowser()), 0); + menu_ids[CMD_OPEN_HOMEPAGE] = menu_help->insertItem(tr("&MusE homepage"), this, SLOT(startHomepageBrowser()), 0); + menu_help->insertSeparator(); + menu_ids[CMD_OPEN_BUG] = menu_help->insertItem(tr("&Report Bug..."), this, SLOT(startBugBrowser()), 0); + menu_help->insertSeparator(); + menu_help->insertItem(tr("&About MusE"), this, SLOT(about())); + //menu_help->insertItem(tr("About&Qt"), this, SLOT(aboutQt())); + //menu_help->insertSeparator(); + //menu_ids[CMD_START_WHATSTHIS] = menu_help->insertItem(tr("What's &This?"), this, SLOT(whatsThis()), 0); + + //--------------------------------------------------- + // Central Widget + //--------------------------------------------------- + + arranger = new Arranger(this, "arranger"); + setCentralWidget(arranger); + + connect(tools1, SIGNAL(toolChanged(int)), arranger, SLOT(setTool(int))); + connect(arranger, SIGNAL(editPart(Track*)), SLOT(startEditor(Track*))); + connect(arranger, SIGNAL(dropSongFile(const QString&)), SLOT(loadProjectFile(const QString&))); + connect(arranger, SIGNAL(dropMidiFile(const QString&)), SLOT(importMidi(const QString&))); + connect(arranger, SIGNAL(startEditor(PartList*,int)), SLOT(startEditor(PartList*,int))); + connect(arranger, SIGNAL(toolChanged(int)), tools1, SLOT(set(int))); + connect(this, SIGNAL(configChanged()), arranger, SLOT(configChanged())); + + connect(arranger, SIGNAL(setUsedTool(int)), SLOT(setUsedTool(int))); + + //--------------------------------------------------- + // read list of "Recent Projects" + //--------------------------------------------------- + + QString prjPath(getenv("HOME")); + prjPath += QString("/.musePrj"); + FILE* f = fopen(prjPath.latin1(), "r"); + if (f == 0) { + perror("open projectfile"); + 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(); + + populateAddTrack(addTrack); + + transport = new Transport(this, "transport"); + bigtime = 0; + + QClipboard* cb = QApplication::clipboard(); + connect(cb, SIGNAL(dataChanged()), SLOT(clipboardChanged())); + connect(cb, SIGNAL(selectionChanged()), SLOT(clipboardChanged())); + connect(arranger, SIGNAL(selectionChanged()), SLOT(selectionChanged())); + + //--------------------------------------------------- + // load project + // if no songname entered on command line: + // startMode: 0 - load last song + // 1 - load default template + // 2 - load configured start song + //--------------------------------------------------- + + QString name; + bool useTemplate = false; + if (argc >= 2) + name = argv[0]; + else if (config.startMode == 0) { + if (argc < 2) + name = projectList[0] ? *projectList[0] : QString("untitled"); + else + name = argv[0]; + printf("starting with selected song %s\n", config.startSong.latin1()); + } + else if (config.startMode == 1) { + printf("starting with default template\n"); + name = museGlobalShare + QString("/templates/default.med"); + useTemplate = true; + } + else if (config.startMode == 2) { + printf("starting with pre configured song %s\n", config.startSong.latin1()); + name = config.startSong; + } + song->blockSignals(false); + loadProjectFile(name, useTemplate, true); + changeConfig(false); + + song->update(); + } + +//--------------------------------------------------------- +// setHeartBeat +//--------------------------------------------------------- + +void MusE::setHeartBeat() + { + heartBeatTimer->start(1000/config.guiRefresh); + } + +//--------------------------------------------------------- +// resetDevices +//--------------------------------------------------------- + +void MusE::resetMidiDevices() + { + audio->msgResetMidiDevices(); + } + +//--------------------------------------------------------- +// initMidiDevices +//--------------------------------------------------------- + +void MusE::initMidiDevices() + { + // Added by T356 + //audio->msgIdle(true); + + audio->msgInitMidiDevices(); + + // Added by T356 + //audio->msgIdle(false); + } + +//--------------------------------------------------------- +// localOff +//--------------------------------------------------------- + +void MusE::localOff() + { + audio->msgLocalOff(); + } + +//--------------------------------------------------------- +// loadProjectFile +// load *.med, *.mid, *.kar +// +// template - if true, load file but do not change +// project name +//--------------------------------------------------------- + +// for drop: +void MusE::loadProjectFile(const QString& name) + { + loadProjectFile(name, false, false); + } + +void MusE::loadProjectFile(const QString& name, bool songTemplate, bool loadAll) + { + // + // stop audio threads if running + // + bool restartSequencer = audio->isRunning(); + if (restartSequencer) { + if (audio->isPlaying()) { + audio->msgPlay(false); + while (audio->isPlaying()) + qApp->processEvents(); + } + seqStop(); + } + microSleep(200000); + loadProjectFile1(name, songTemplate, loadAll); + microSleep(200000); + if (restartSequencer) + seqStart(); + + if (song->getSongInfo().length()>0) + startSongInfo(false); + } + +//--------------------------------------------------------- +// loadProjectFile +// load *.med, *.mid, *.kar +// +// template - if true, load file but do not change +// project name +// loadAll - load song data + configuration data +//--------------------------------------------------------- + +void MusE::loadProjectFile1(const QString& name, bool songTemplate, bool loadAll) + { + //if (audioMixer) + // audioMixer->clear(); + if (mixer1) + mixer1->clear(); + if (mixer2) + mixer2->clear(); + arranger->clear(); // clear track info + if (clearSong()) + return; + + QFileInfo fi(name); + if (songTemplate) { + if (!fi.isReadable()) { + QMessageBox::critical(this, QString("MusE"), + tr("Cannot read template")); + return; + } + project.setFile("untitled"); + } + else { + printf("Setting project path to %s\n", fi.dirPath(true).latin1()); + museProject = fi.dirPath(true); + project.setFile(name); + } + // Changed by T356. 01/19/2010. We want the complete extension here. + //QString ex = fi.extension(false).lower(); + //if (ex.length() == 3) + // ex += "."; + //ex = ex.left(4); + QString ex = fi.extension(true).lower(); + QString mex = ex.section('.', -1, -1); + if((mex == "gz") || (mex == "bz2")) + mex = ex.section('.', -2, -2); + + //if (ex.isEmpty() || ex == "med.") { + if (ex.isEmpty() || mex == "med") { + // + // read *.med file + // + bool popenFlag; + FILE* f = fileOpen(this, fi.filePath(), QString(".med"), "r", popenFlag, true); + if (f == 0) { + if (errno != ENOENT) { + QMessageBox::critical(this, QString("MusE"), + tr("File open error")); + setUntitledProject(); + } + else + setConfigDefaults(); + } + else { + Xml xml(f); + read(xml, !loadAll); + bool fileError = ferror(f); + popenFlag ? pclose(f) : fclose(f); + if (fileError) { + QMessageBox::critical(this, QString("MusE"), + tr("File read error")); + setUntitledProject(); + } + } + } + //else if (ex == "mid." || ex == "kar.") { + else if (mex == "mid" || mex == "kar") { + setConfigDefaults(); + if (!importMidi(name, false)) + setUntitledProject(); + } + else { + QMessageBox::critical(this, QString("MusE"), + tr("Unknown File Format: ") + ex); + setUntitledProject(); + } + if (!songTemplate) { + addProject(project.absFilePath()); + setCaption(QString("MusE: Song: ") + project.baseName(true)); + } + song->dirty = false; + + menuView->setItemChecked(tr_id, config.transportVisible); + menuView->setItemChecked(bt_id, config.bigTimeVisible); + menuView->setItemChecked(mr_id, config.markerVisible); + menuAutomation->setItemChecked(autoId, automation); + + if (loadAll) { + showBigtime(config.bigTimeVisible); + //showMixer(config.mixerVisible); + showMixer1(config.mixer1Visible); + showMixer2(config.mixer2Visible); + + // Added p3.3.43 Make sure the geometry is correct because showMixerX() will NOT + // set the geometry if the mixer has already been created. + if(mixer1) + { + //if(mixer1->geometry().size() != config.mixer1.geometry.size()) // p3.3.53 Moved below + // mixer1->resize(config.mixer1.geometry.size()); + + if(mixer1->geometry().topLeft() != config.mixer1.geometry.topLeft()) + mixer1->move(config.mixer1.geometry.topLeft()); + } + if(mixer2) + { + //if(mixer2->geometry().size() != config.mixer2.geometry.size()) // p3.3.53 Moved below + // mixer2->resize(config.mixer2.geometry.size()); + + if(mixer2->geometry().topLeft() != config.mixer2.geometry.topLeft()) + mixer2->move(config.mixer2.geometry.topLeft()); + } + + showMarker(config.markerVisible); + resize(config.geometryMain.size()); + move(config.geometryMain.topLeft()); + + if (config.transportVisible) + transport->show(); + transport->move(config.geometryTransport.topLeft()); + showTransport(config.transportVisible); + } + + transport->setMasterFlag(song->masterFlag()); + punchinAction->setOn(song->punchin()); + punchoutAction->setOn(song->punchout()); + loopAction->setOn(song->loop()); + song->update(); + song->updatePos(); + clipboardChanged(); // enable/disable "Paste" + selectionChanged(); // enable/disable "Copy" & "Paste" + + // p3.3.53 Try this AFTER the song update above which does a mixer update... Tested OK - mixers resize properly now. + if (loadAll) + { + if(mixer1) + { + if(mixer1->geometry().size() != config.mixer1.geometry.size()) + { + //printf("MusE::loadProjectFile1 resizing mixer1 x:%d y:%d w:%d h:%d\n", config.mixer1.geometry.x(), + // config.mixer1.geometry.y(), + // config.mixer1.geometry.width(), + // config.mixer1.geometry.height() + // ); + mixer1->resize(config.mixer1.geometry.size()); + } + } + if(mixer2) + { + if(mixer2->geometry().size() != config.mixer2.geometry.size()) + { + //printf("MusE::loadProjectFile1 resizing mixer2 x:%d y:%d w:%d h:%d\n", config.mixer2.geometry.x(), + // config.mixer2.geometry.y(), + // config.mixer2.geometry.width(), + // config.mixer2.geometry.height() + // ); + mixer2->resize(config.mixer2.geometry.size()); + } + } + } + + } + +//--------------------------------------------------------- +// setUntitledProject +//--------------------------------------------------------- + +void MusE::setUntitledProject() + { + setConfigDefaults(); + QString name("untitled"); + museProject = QFileInfo(name).dirPath(true); + project.setFile(name); + setCaption(tr("MusE: Song: ") + project.baseName(true)); + } + +//--------------------------------------------------------- +// setConfigDefaults +//--------------------------------------------------------- + +void MusE::setConfigDefaults() + { + readConfiguration(); // used for reading midi files +#if 0 + if (readConfiguration()) { + // + // failed to load config file + // set buildin defaults + // + configTransportVisible = false; + configBigTimeVisible = false; + + for (int channel = 0; channel < 2; ++channel) + song->addTrack(Track::AUDIO_GROUP); + AudioTrack* out = (AudioTrack*)song->addTrack(Track::AUDIO_OUTPUT); + AudioTrack* in = (AudioTrack*)song->addTrack(Track::AUDIO_INPUT); + + // set some default routes + std::list il = audioDevice->inputPorts(); + int channel = 0; + for (std::list::iterator i = il.begin(); i != il.end(); ++i, ++channel) { + if (channel == 2) + break; + audio->msgAddRoute(Route(out,channel), Route(*i,channel)); + } + channel = 0; + std::list ol = audioDevice->outputPorts(); + for (std::list::iterator i = ol.begin(); i != ol.end(); ++i, ++channel) { + if (channel == 2) + break; + audio->msgAddRoute(Route(*i, channel), Route(in,channel)); + } + } +#endif + song->dirty = false; + } + +//--------------------------------------------------------- +// setFollow +//--------------------------------------------------------- + +void MusE::setFollow() + { + Song::FollowMode fm = song->follow(); + follow->setItemChecked(fid0, fm == Song::NO); + follow->setItemChecked(fid1, fm == Song::JUMP); + follow->setItemChecked(fid2, fm == Song::CONTINUOUS); + } + +//--------------------------------------------------------- +// MusE::loadProject +//--------------------------------------------------------- + +void MusE::loadProject() + { + bool loadAll; + QString fn = getOpenFileName(QString(""), med_file_pattern, this, + tr("MusE: load project"), &loadAll); + if (!fn.isEmpty()) { + museProject = QFileInfo(fn).dirPath(true); + loadProjectFile(fn, false, loadAll); + } + } + +//--------------------------------------------------------- +// loadTemplate +//--------------------------------------------------------- + +void MusE::loadTemplate() + { + QString fn = getOpenFileName(QString("templates"), med_file_pattern, this, + tr("MusE: load template"), 0); + if (!fn.isEmpty()) { + // museProject = QFileInfo(fn).dirPath(true); + loadProjectFile(fn, true, true); + setUntitledProject(); + } + } + +//--------------------------------------------------------- +// save +//--------------------------------------------------------- + +bool MusE::save() + { + if (project.baseName(true) == "untitled") + return saveAs(); + else + return save(project.filePath(), false); + } + +//--------------------------------------------------------- +// save +//--------------------------------------------------------- + +bool MusE::save(const QString& name, bool overwriteWarn) + { + QString backupCommand; + + // By T356. Cache the jack in/out route names BEFORE saving. + // Because jack often shuts down during save, causing the routes to be lost in the file. + // Not required any more... + //cacheJackRouteNames(); + + if (QFile::exists(name)) { + backupCommand.sprintf("cp \"%s\" \"%s.backup\"", name.latin1(), name.latin1()); + } + else if (QFile::exists(name + QString(".med"))) { + backupCommand.sprintf("cp \"%s.med\" \"%s.med.backup\"", name.latin1(), name.latin1()); + } + if (!backupCommand.isEmpty()) + system(backupCommand.latin1()); + + bool popenFlag; + FILE* f = fileOpen(this, name, QString(".med"), "w", popenFlag, false, overwriteWarn); + if (f == 0) + return false; + Xml xml(f); + write(xml); + if (ferror(f)) { + QString s = "Write File\n" + name + "\nfailed: " + + strerror(errno); + QMessageBox::critical(this, + tr("MusE: Write File failed"), s); + popenFlag? pclose(f) : fclose(f); + unlink(name.latin1()); + return false; + } + else { + popenFlag? pclose(f) : fclose(f); + song->dirty = false; + return true; + } + } + +//--------------------------------------------------------- +// quitDoc +//--------------------------------------------------------- + +void MusE::quitDoc() + { + close(true); + } + +//--------------------------------------------------------- +// closeEvent +//--------------------------------------------------------- + +void MusE::closeEvent(QCloseEvent*) + { + song->setStop(true); + // + // wait for sequencer + // + while (audio->isPlaying()) { + qApp->processEvents(); + } + 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("&Skip"), tr("&Abort"), 0, 2); + if (n == 0) { + if (!save()) // dont quit if save failed + return; + } + else if (n == 2) + return; + } + seqStop(); + + WaveTrackList* wt = song->waves(); + for (iWaveTrack iwt = wt->begin(); iwt != wt->end(); ++iwt) { + WaveTrack* t = *iwt; + if (t->recFile() && t->recFile()->samples() == 0) { + t->recFile()->remove(); + } + } + + // save "Open Recent" list + QString prjPath(getenv("HOME")); + prjPath += "/.musePrj"; + FILE* f = fopen(prjPath.latin1(), "w"); + if (f) { + for (int i = 0; i < PROJECT_LIST_LEN; ++i) { + fprintf(f, "%s\n", projectList[i] ? projectList[i]->latin1() : ""); + } + fclose(f); + } + if(debugMsg) + printf("Muse: Exiting JackAudio\n"); + exitJackAudio(); + if(debugMsg) + printf("Muse: Exiting DummyAudio\n"); + exitDummyAudio(); + if(debugMsg) + printf("Muse: Exiting Metronome\n"); + exitMetronome(); + + // p3.3.47 + // Make sure to clear the menu, which deletes any sub menus. + if(routingPopupMenu) + routingPopupMenu->clear(); + + // Changed by Tim. p3.3.14 + //SynthIList* sl = song->syntis(); + //for (iSynthI i = sl->begin(); i != sl->end(); ++i) + // delete *i; + song->cleanupForQuit(); + + if(debugMsg) + printf("Muse: Cleaning up temporary wavefiles + peakfiles\n"); + // 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(true) + ".wca"); + } + + // Added by Tim. p3.3.14 + +#ifdef HAVE_LASH + // Disconnect gracefully from LASH. + if(lash_client) + { + if(debugMsg) + printf("Muse: Disconnecting from LASH\n"); + lash_event_t* lashev = lash_event_new_with_type (LASH_Quit); + lash_send_event(lash_client, lashev); + } +#endif + + if(debugMsg) + printf("Muse: Exiting Dsp\n"); + AL::exitDsp(); + + if(debugMsg) + printf("Muse: Exiting OSC\n"); + exitOSC(); + + // p3.3.47 + delete audioPrefetch; + delete audio; + delete midiSeq; + delete song; + + qApp->quit(); + } + +//--------------------------------------------------------- +// toggleMarker +//--------------------------------------------------------- + +void MusE::toggleMarker() + { + showMarker(!menuView->isItemChecked(mr_id)); + } + +//--------------------------------------------------------- +// showMarker +//--------------------------------------------------------- + +void MusE::showMarker(bool flag) + { + //printf("showMarker %d\n",flag); + if (markerView == 0) { + markerView = new MarkerView(this); + + // Removed p3.3.43 + // Song::addMarker() already emits a 'markerChanged'. + //connect(arranger, SIGNAL(addMarker(int)), markerView, SLOT(addMarker(int))); + + connect(markerView, SIGNAL(closed()), SLOT(markerClosed())); + toplevels.push_back(Toplevel(Toplevel::MARKER, (unsigned long)(markerView), markerView)); + markerView->show(); + } + + markerView->setShown(flag); + menuView->setItemChecked(mr_id, flag); + } + +//--------------------------------------------------------- +// markerClosed +//--------------------------------------------------------- + +void MusE::markerClosed() + { + menuView->setItemChecked(mr_id, false); + } + +//--------------------------------------------------------- +// toggleTransport +//--------------------------------------------------------- + +void MusE::toggleTransport() + { + showTransport(!menuView->isItemChecked(tr_id)); + } + +//--------------------------------------------------------- +// showTransport +//--------------------------------------------------------- + +void MusE::showTransport(bool flag) + { + transport->setShown(flag); + menuView->setItemChecked(tr_id, flag); + } + +//--------------------------------------------------------- +// getRoutingPopupMenu +//--------------------------------------------------------- + +PopupMenu* MusE::getRoutingPopupMenu() +{ + if(!routingPopupMenu) + routingPopupMenu = new PopupMenu(this); + return routingPopupMenu; +} + +//--------------------------------------------------------- +// updateRouteMenus +//--------------------------------------------------------- + +//void MusE::updateRouteMenus(Track* track) +void MusE::updateRouteMenus(Track* track, QObject* master) // p3.3.50 +{ + //if(!track || track != gRoutingPopupMenuMaster || track->type() == Track::AUDIO_AUX) + //if(!track || track->type() == Track::AUDIO_AUX) + if(!track || gRoutingPopupMenuMaster != master) // p3.3.50 + return; + + //QPopupMenu* pup = muse->getORoutesPopup(); + PopupMenu* pup = getRoutingPopupMenu(); + + if(pup->count() == 0) + return; + + //AudioTrack* t = (AudioTrack*)track; + RouteList* rl = gIsOutRoutingPopupMenu ? track->outRoutes() : track->inRoutes(); + + /* + iRoute iorl = orl->begin(); + for(; iorl != orl->end(); ++iorl) + { + iRouteMenuMap imm = ormm->begin(); + for(; imm != ormm->end(); ++imm) + { + if(*iorl == imm->second) + { + orpup->setItemChecked(imm->first, true); + break; + } + } + //if(imm == ormm->end()) + //{ + //} + + } + //if (iorl == orl->end()) + //{ + //} + */ + + iRouteMenuMap imm = gRoutingMenuMap.begin(); + for(; imm != gRoutingMenuMap.end(); ++imm) + { + // p3.3.50 Ignore the 'toggle' items. + if(imm->second.type == Route::MIDI_PORT_ROUTE && + imm->first >= (MIDI_PORTS * MIDI_CHANNELS) && imm->first < (MIDI_PORTS * MIDI_CHANNELS + MIDI_PORTS)) + continue; + + //bool found = false; + iRoute irl = rl->begin(); + for(; irl != rl->end(); ++irl) + { + if(imm->second.type == Route::MIDI_PORT_ROUTE) // p3.3.50 Is the map route a midi port route? + { + if(irl->type == Route::MIDI_PORT_ROUTE && irl->midiPort == imm->second.midiPort // Is the track route a midi port route? + && (irl->channel & imm->second.channel) == imm->second.channel) // Is the exact channel mask bit(s) set? + { + //found = true; + break; + } + } + else + if(*irl == imm->second) + { + //found = true; + break; + } + } + //pup->setItemChecked(imm->first, found); + pup->setItemChecked(imm->first, irl != rl->end()); + } + + + return; +} + +//--------------------------------------------------------- +// routingPopupMenuActivated +//--------------------------------------------------------- + +void MusE::routingPopupMenuActivated(Track* track, int n) +{ + //if(!track || (track != gRoutingPopupMenuMaster)) + if(!track) + return; + + if(track->isMidiTrack()) + { + PopupMenu* pup = getRoutingPopupMenu(); + + //printf("MusE::routingPopupMenuActivated midi n:%d count:%d\n", n, pup->count()); + + if(pup->count() == 0) + return; + + //MidiTrack* t = (MidiTrack*)track; + RouteList* rl = gIsOutRoutingPopupMenu ? track->outRoutes() : track->inRoutes(); + + if(n == -1) + { + //printf("MusE::routingPopupMenuActivated midi n = -1\n"); + ///delete pup; + ///pup = 0; + return; + } + else + { + //int mdidx = n / MIDI_CHANNELS; + //int ch = n % MIDI_CHANNELS; + //int chbit = 1 << ch; // p3.3.50 + //int chmask = 0; + + //if(n >= MIDI_PORTS * MIDI_CHANNELS) // p3.3.50 Toggle channels. + //{ + //for (int i = 0; i < MIDI_CHANNELS; i++) + //muse->routingPopupMenuActivated(selected, i + MIDI_CHANNELS * (n-1000)); + //muse->routingPopupMenuActivated(selected, i + MIDI_CHANNELS * (n - MIDI_PORTS * MIDI_CHANNELS)); // p3.3.50 + // chbit = (1 << MIDI_CHANNELS) - 1; + //} + //if(debugMsg) + //printf("MusE::routingPopupMenuActivated mdidx:%d ch:%d\n", mdidx, ch); + + // p3.3.50 + iRouteMenuMap imm = gRoutingMenuMap.find(n); + if(imm == gRoutingMenuMap.end()) + return; + if(imm->second.type != Route::MIDI_PORT_ROUTE) + return; + Route &aRoute = imm->second; + int chbit = aRoute.channel; + Route bRoute(track, chbit); + int mdidx = aRoute.midiPort; + + MidiPort* mp = &midiPorts[mdidx]; + MidiDevice* md = mp->device(); + if(!md) + { + ///delete pup; + return; + } + + //if(!(md->rwFlags() & 2)) + if(!(md->rwFlags() & (gIsOutRoutingPopupMenu ? 1 : 2))) + { + ///delete pup; + return; + } + + //QString s(pup->text(n)); + //QT_TR_NOOP(md->name()) + + //Route srcRoute(s, false, -1); + + //Route aRoute(md, ch); + //Route aRoute(mdidx, ch); // p3.3.49 + //Route aRoute(mdidx, chbit); // p3.3.50 In accordance with new channel mask, use the bit position. + + //Route srcRoute(md, -1); + //Route dstRoute(track, -1); + //Route bRoute(track, ch); + //Route bRoute(track, chbit); // p3.3.50 + + //if (track->type() == Track::AUDIO_INPUT) + // srcRoute.channel = dstRoute.channel = n & 0xf; + + int chmask = 0; + iRoute iir = rl->begin(); + for (; iir != rl->end(); ++iir) + { + //if(*iir == (dst ? bRoute : aRoute)) + //if(*iir == aRoute) + if(iir->type == Route::MIDI_PORT_ROUTE && iir->midiPort == mdidx) // p3.3.50 Is there already a route to this port? + { + chmask = iir->channel; // p3.3.50 Grab the channel mask. + break; + } + } + //if (iir != rl->end()) + if ((chmask & chbit) == chbit) // p3.3.50 Is the channel's bit(s) set? + { + // disconnect + if(gIsOutRoutingPopupMenu) + { + //printf("MusE::routingPopupMenuActivated removing route src track name: %s dst device name: %s\n", track->name().latin1(), md->name().latin1()); + audio->msgRemoveRoute(bRoute, aRoute); + } + else + { + //printf("MusE::routingPopupMenuActivated removing route src device name: %s dst track name: %s\n", md->name().latin1(), track->name().latin1()); + audio->msgRemoveRoute(aRoute, bRoute); + } + } + else + { + // connect + if(gIsOutRoutingPopupMenu) + { + //printf("MusE::routingPopupMenuActivated adding route src track name: %s dst device name: %s\n", track->name().latin1(), md->name().latin1()); + audio->msgAddRoute(bRoute, aRoute); + } + else + { + //printf("MusE::routingPopupMenuActivated adding route src device name: %s dst track name: %s\n", md->name().latin1(), track->name().latin1()); + audio->msgAddRoute(aRoute, bRoute); + } + } + + //printf("MusE::routingPopupMenuActivated calling msgUpdateSoloStates\n"); + audio->msgUpdateSoloStates(); + //printf("MusE::routingPopupMenuActivated calling song->update\n"); + song->update(SC_ROUTE); + } + } + else + { + // TODO: Try to move code from AudioStrip::routingPopupMenuActivated into here. + + /* + PopupMenu* pup = getRoutingPopupMenu(); + + printf("MusE::routingPopupMenuActivated audio n:%d count:%d\n", n, pup->count()); + + if(pup->count() == 0) + return; + + AudioTrack* t = (AudioTrack*)track; + RouteList* rl = gIsOutRoutingPopupMenu ? t->outRoutes() : t->inRoutes(); + + //QPoint ppt = QCursor::pos(); + + if(n == -1) + { + //printf("MusE::routingPopupMenuActivated audio n = -1 deleting popup...\n"); + printf("MusE::routingPopupMenuActivated audio n = -1\n"); + ///delete pup; + ///pup = 0; + return; + } + else + //if(n == 0) + //{ + //printf("MusE::routingPopupMenuActivated audio n = 0 = tearOffHandle\n"); + //oR->setDown(false); + // return; + //} + //else + { + if(gIsOutRoutingPopupMenu) + { + QString s(pup->text(n)); + + //printf("AudioStrip::routingPopupMenuActivated audio text:%s\n", s.latin1()); + + if(track->type() == Track::AUDIO_OUTPUT) + { + ///delete orpup; + + int chan = n & 0xf; + + //Route srcRoute(t, -1); + //Route srcRoute(t, chan, chans); + //Route srcRoute(t, chan, 1); + Route srcRoute(t, chan); + + //Route dstRoute(s, true, -1); + Route dstRoute(s, true, -1, Route::JACK_ROUTE); + //Route dstRoute(s, true, 0, Route::JACK_ROUTE); + + //srcRoute.channel = dstRoute.channel = chan; + dstRoute.channel = chan; + //dstRoute.channels = 1; + + // check if route src->dst exists: + iRoute irl = rl->begin(); + for (; irl != rl->end(); ++irl) { + if (*irl == dstRoute) + break; + } + if (irl != rl->end()) { + // disconnect if route exists + audio->msgRemoveRoute(srcRoute, dstRoute); + } + else { + // connect if route does not exist + audio->msgAddRoute(srcRoute, dstRoute); + } + audio->msgUpdateSoloStates(); + song->update(SC_ROUTE); + + // p3.3.47 + //pup->popup(ppt, 0); + + //oR->setDown(false); + return; + + // p3.3.46 + ///goto _redisplay; + } + + iRouteMenuMap imm = gRoutingMenuMap.find(n); + if(imm == gRoutingMenuMap.end()) + { + ///delete orpup; + //oR->setDown(false); // orpup->exec() catches mouse release event + return; + } + + //int chan = n >> 16; + //int chans = (chan >> 15) + 1; // Bit 31 MSB: Mono or stereo. + //chan &= 0xffff; + //int chan = imm->second.channel; + //int chans = imm->second.channels; + + //Route srcRoute(t, -1); + //srcRoute.remoteChannel = chan; + //Route srcRoute(t, chan, chans); + Route srcRoute(t, imm->second.channel, imm->second.channels); + //Route srcRoute(t, imm->second.channel); + srcRoute.remoteChannel = imm->second.remoteChannel; + + //Route dstRoute(s, true, -1); + //Route dstRoute(s, true, -1, Route::TRACK_ROUTE); + Route &dstRoute = imm->second; + + // check if route src->dst exists: + iRoute irl = rl->begin(); + for (; irl != rl->end(); ++irl) { + if (*irl == dstRoute) + break; + } + if (irl != rl->end()) { + // disconnect if route exists + audio->msgRemoveRoute(srcRoute, dstRoute); + } + else { + // connect if route does not exist + audio->msgAddRoute(srcRoute, dstRoute); + } + audio->msgUpdateSoloStates(); + song->update(SC_ROUTE); + + // p3.3.46 + //oR->setDown(false); + ///goto _redisplay; + + // p3.3.47 + //pup->popup(ppt, 0); + } + else + { + QString s(pup->text(n)); + + if(track->type() == Track::AUDIO_INPUT) + { + ///delete pup; + int chan = n & 0xf; + + Route srcRoute(s, false, -1, Route::JACK_ROUTE); + Route dstRoute(t, chan); + + srcRoute.channel = chan; + + iRoute irl = rl->begin(); + for(; irl != rl->end(); ++irl) + { + if(*irl == srcRoute) + break; + } + if(irl != rl->end()) + // disconnect + audio->msgRemoveRoute(srcRoute, dstRoute); + else + // connect + audio->msgAddRoute(srcRoute, dstRoute); + + audio->msgUpdateSoloStates(); + song->update(SC_ROUTE); + //iR->setDown(false); // pup->exec() catches mouse release event + return; + + // p3.3.46 + ///goto _redisplay; + } + + iRouteMenuMap imm = gRoutingMenuMap.find(n); + if(imm == gRoutingMenuMap.end()) + { + //delete pup; + //iR->setDown(false); // pup->exec() catches mouse release event + return; + } + + //int chan = n >> 16; + //int chans = (chan >> 15) + 1; // Bit 31 MSB: Mono or stereo. + //chan &= 0xffff; + //int chan = imm->second.channel; + //int chans = imm->second.channels; + + //Route srcRoute(s, false, -1); + //Route srcRoute(s, false, -1, Route::TRACK_ROUTE); + Route &srcRoute = imm->second; + + //Route dstRoute(t, -1); + //Route dstRoute(t, chan, chans); + Route dstRoute(t, imm->second.channel, imm->second.channels); + //Route dstRoute(t, imm->second.channel); + dstRoute.remoteChannel = imm->second.remoteChannel; + + iRoute irl = rl->begin(); + for (; irl != rl->end(); ++irl) { + if (*irl == srcRoute) + break; + } + if (irl != rl->end()) { + // disconnect + audio->msgRemoveRoute(srcRoute, dstRoute); + } + else { + // connect + audio->msgAddRoute(srcRoute, dstRoute); + } + audio->msgUpdateSoloStates(); + song->update(SC_ROUTE); + + // p3.3.46 + //iR->setDown(false); + ///goto _redisplay; + + + + + } + + } + */ + + } + //else + //{ + //} + + ///delete pup; + //oR->setDown(false); +} + +//--------------------------------------------------------- +// routingPopupMenuAboutToHide +//--------------------------------------------------------- + +void MusE::routingPopupMenuAboutToHide() +{ + // p3.3.47 + //printf("MusE::routingPopupMenuAboutToHide\n"); + //if(track) + // printf("%s", track->name().latin1()); + //printf("\n"); + + // Hmm, can't do this? Sub-menus stay open with this. Re-arranged, testing... Nope. + //PopupMenu* pup = muse->getRoutingPopupMenu(); + //pup->disconnect(); + //pup->clear(); + gRoutingMenuMap.clear(); + gRoutingPopupMenuMaster = 0; +} + +//--------------------------------------------------------- +// prepareRoutingPopupMenu +//--------------------------------------------------------- + +PopupMenu* MusE::prepareRoutingPopupMenu(Track* track, bool dst) +{ + if(!track) + return 0; + + //QPoint ppt = QCursor::pos(); + + if(track->isMidiTrack()) + { + + //QPoint ppt = parent->rect().bottomLeft(); + + //if(dst) + //{ + // TODO + + //} + //else + //{ + RouteList* rl = dst ? track->outRoutes() : track->inRoutes(); + //Route dst(track, -1); + + ///QPopupMenu* pup = new QPopupMenu(parent); + + PopupMenu* pup = getRoutingPopupMenu(); + pup->disconnect(); + //connect(pup, SIGNAL(activated(int)), SLOT(routingPopupMenuActivated(int))); + //connect(pup, SIGNAL(aboutToHide()), SLOT(routingPopupMenuAboutToHide())); + + pup->setCheckable(true); + + int gid = 0; + //int n; + + // Routes can't be re-read until the message sent from msgAddRoute1() + // has had time to be sent and actually affected the routes. + ///_redisplay: + + pup->clear(); + gRoutingMenuMap.clear(); + gid = 0; + + //MidiInPortList* tl = song->midiInPorts(); + //for(iMidiInPort i = tl->begin();i != tl->end(); ++i) + for(int i = 0; i < MIDI_PORTS; ++i) + { + //MidiInPort* track = *i; + // NOTE: Could possibly list all devices, bypassing ports, but no, let's stick with ports. + MidiPort* mp = &midiPorts[i]; + MidiDevice* md = mp->device(); + if(!md) + continue; + + if(!(md->rwFlags() & (dst ? 1 : 2))) + continue; + + //printf("MusE::prepareRoutingPopupMenu adding submenu portnum:%d\n", i); + + //QMenu* m = menu->addMenu(track->name()); + //QPopupMenu* subp = new QPopupMenu(parent); + //PopupMenu* subp = new PopupMenu(this); + PopupMenu* subp = new PopupMenu(); + connect(subp, SIGNAL(activated(int)), pup, SIGNAL(activated(int))); + //connect(subp, SIGNAL(aboutToHide()), pup, SIGNAL(aboutToHide())); + + int chanmask = 0; + // p3.3.50 To reduce number of routes required, from one per channel to just one containing a channel mask. + // Look for the first route to this midi port. There should always be only a single route for each midi port, now. + for(iRoute ir = rl->begin(); ir != rl->end(); ++ir) + { + if(ir->type == Route::MIDI_PORT_ROUTE && ir->midiPort == i) + { + // We have a route to the midi port. Grab the channel mask. + chanmask = ir->channel; + break; + } + } + + for(int ch = 0; ch < MIDI_CHANNELS; ++ch) + { + //QAction* a = m->addAction(QString("Channel %1").arg(ch+1)); + //subp->insertItem(QT_TR_NOOP(QString("Channel %1").arg(ch+1)), i * MIDI_CHANNELS + ch); + gid = i * MIDI_CHANNELS + ch; + + //printf("MusE::prepareRoutingPopupMenu inserting gid:%d\n", gid); + + subp->insertItem(QString("Channel %1").arg(ch+1), gid); + //a->setCheckable(true); + //Route src(track, ch, RouteNode::TRACK); + //Route src(md, ch); + //Route r = Route(src, dst); + //a->setData(QVariant::fromValue(r)); + //a->setChecked(rl->indexOf(r) != -1); + + //Route srcRoute(md, ch); + //Route srcRoute(i, ch); // p3.3.49 New: Midi port route. + int chbit = 1 << ch; + Route srcRoute(i, chbit); // p3.3.50 In accordance with new channel mask, use the bit position. + + gRoutingMenuMap.insert( pRouteMenuMap(gid, srcRoute) ); + + //for(iRoute ir = rl->begin(); ir != rl->end(); ++ir) // p3.3.50 Removed. + //{ + //if(*ir == dst) + // if(*ir == srcRoute) + // { + // subp->setItemChecked(id, true); + // break; + // } + //} + if(chanmask & chbit) // p3.3.50 Is the channel already set? Show item check mark. + subp->setItemChecked(gid, true); + } + //subp->insertItem(QString("Toggle all"), 1000+i); + // p3.3.50 One route with all channel bits set. + gid = MIDI_PORTS * MIDI_CHANNELS + i; // Make sure each 'toggle' item gets a unique id. + subp->insertItem(QString("Toggle all"), gid); + Route togRoute(i, (1 << MIDI_CHANNELS) - 1); // Set all channel bits. + gRoutingMenuMap.insert( pRouteMenuMap(gid, togRoute) ); + + pup->insertItem(QT_TR_NOOP(md->name()), subp); + } + + /* + QPopupMenu* pup = new QPopupMenu(iR); + pup->setCheckable(true); + //MidiTrack* t = (MidiTrack*)track; + RouteList* irl = track->inRoutes(); + + MidiTrack* t = (MidiTrack*)track; + int gid = 0; + for (int i = 0; i < channel; ++i) + { + char buffer[128]; + snprintf(buffer, 128, "%s %d", tr("Channel").latin1(), i+1); + MenuTitleItem* titel = new MenuTitleItem(QString(buffer)); + pup->insertItem(titel); + + if (!checkAudioDevice()) return; + std::list ol = audioDevice->outputPorts(); + for (std::list::iterator ip = ol.begin(); ip != ol.end(); ++ip) { + int id = pup->insertItem(*ip, (gid * 16) + i); + Route dst(*ip, true, i); + ++gid; + for (iRoute ir = irl->begin(); ir != irl->end(); ++ir) { + if (*ir == dst) { + pup->setItemChecked(id, true); + break; + } + } + } + if (i+1 != channel) + pup->insertSeparator(); + } + */ + + if(pup->count() == 0) + { + ///delete pup; + gRoutingPopupMenuMaster = 0; + //pup->clear(); + //pup->disconnect(); + gRoutingMenuMap.clear(); + //oR->setDown(false); + return 0; + } + + gIsOutRoutingPopupMenu = dst; + return pup; + } + + return 0; +} + +//--------------------------------------------------------- +// saveAs +//--------------------------------------------------------- + +bool MusE::saveAs() + { +// QString name = getSaveFileName(museProject, med_file_pattern, this, +// QString name = getSaveFileName(QString(""), med_file_pattern, this, + QString name = getSaveFileName(QString(""), med_file_save_pattern, this, + tr("MusE: Save As")); + bool ok = false; + if (!name.isEmpty()) { + QString tempOldProj = museProject; + museProject = QFileInfo(name).dirPath(true); + ok = save(name, true); + if (ok) { + project.setFile(name); + setCaption(tr("MusE: Song: ") + project.baseName(true)); + addProject(name); + } + else + museProject = tempOldProj; + } + + return ok; + } + +//--------------------------------------------------------- +// printVersion +//--------------------------------------------------------- + +static void printVersion(const char* prog) + { + fprintf(stderr, "%s: Linux Music Editor; Version %s, (svn revision %s)\n", prog, VERSION, SVNVERSION); + } + +//--------------------------------------------------------- +// startEditor +//--------------------------------------------------------- + +void MusE::startEditor(PartList* pl, int type) + { + switch (type) { + case 0: startPianoroll(pl); break; + case 1: startListEditor(pl); break; + case 3: startDrumEditor(pl); break; + case 4: startWaveEditor(pl); break; + } + } + +//--------------------------------------------------------- +// startEditor +//--------------------------------------------------------- + +void MusE::startEditor(Track* t) + { + switch (t->type()) { + case Track::MIDI: startPianoroll(); break; + case Track::DRUM: startDrumEditor(); break; + case Track::WAVE: startWaveEditor(); break; + default: + break; + } + } + +//--------------------------------------------------------- +// getMidiPartsToEdit +//--------------------------------------------------------- + +PartList* MusE::getMidiPartsToEdit() + { + PartList* pl = song->getSelectedMidiParts(); + if (pl->empty()) { + QMessageBox::critical(this, QString("MusE"), tr("Nothing to edit")); + 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, this, 0, arranger->cursorValue()); + pianoroll->show(); + toplevels.push_back(Toplevel(Toplevel::PIANO_ROLL, (unsigned long)(pianoroll), pianoroll)); + connect(pianoroll, SIGNAL(deleted(unsigned long)), SLOT(toplevelDeleted(unsigned long))); + connect(muse, SIGNAL(configChanged()), pianoroll, SLOT(configChanged())); + } + +//--------------------------------------------------------- +// startListenEditor +//--------------------------------------------------------- + +void MusE::startListEditor() + { + PartList* pl = getMidiPartsToEdit(); + if (pl == 0) + return; + startListEditor(pl); + } + +void MusE::startListEditor(PartList* pl) + { + ListEdit* listEditor = new ListEdit(pl); + listEditor->show(); + toplevels.push_back(Toplevel(Toplevel::LISTE, (unsigned long)(listEditor), listEditor)); + connect(listEditor, SIGNAL(deleted(unsigned long)), SLOT(toplevelDeleted(unsigned long))); + connect(muse,SIGNAL(configChanged()), listEditor, SLOT(configChanged())); + } + +//--------------------------------------------------------- +// startMasterEditor +//--------------------------------------------------------- + +void MusE::startMasterEditor() + { + MasterEdit* masterEditor = new MasterEdit(); + masterEditor->show(); + toplevels.push_back(Toplevel(Toplevel::MASTER, (unsigned long)(masterEditor), masterEditor)); + connect(masterEditor, SIGNAL(deleted(unsigned long)), SLOT(toplevelDeleted(unsigned long))); + } + +//--------------------------------------------------------- +// startLMasterEditor +//--------------------------------------------------------- + +void MusE::startLMasterEditor() + { + LMaster* lmaster = new LMaster(); + lmaster->show(); + toplevels.push_back(Toplevel(Toplevel::LMASTER, (unsigned long)(lmaster), lmaster)); + connect(lmaster, SIGNAL(deleted(unsigned long)), SLOT(toplevelDeleted(unsigned long))); + connect(muse, SIGNAL(configChanged()), lmaster, SLOT(configChanged())); + } + +//--------------------------------------------------------- +// startDrumEditor +//--------------------------------------------------------- + +void MusE::startDrumEditor() + { + PartList* pl = getMidiPartsToEdit(); + if (pl == 0) + return; + startDrumEditor(pl); + } + +void MusE::startDrumEditor(PartList* pl) + { + + DrumEdit* drumEditor = new DrumEdit(pl, this, 0, arranger->cursorValue()); + drumEditor->show(); + toplevels.push_back(Toplevel(Toplevel::DRUM, (unsigned long)(drumEditor), drumEditor)); + connect(drumEditor, SIGNAL(deleted(unsigned long)), SLOT(toplevelDeleted(unsigned long))); + 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")); + return; + } + startWaveEditor(pl); + } + +void MusE::startWaveEditor(PartList* pl) + { + WaveEdit* waveEditor = new WaveEdit(pl); + waveEditor->show(); + connect(muse, SIGNAL(configChanged()), waveEditor, SLOT(configChanged())); + toplevels.push_back(Toplevel(Toplevel::WAVE, (unsigned long)(waveEditor), waveEditor)); + connect(waveEditor, SIGNAL(deleted(unsigned long)), SLOT(toplevelDeleted(unsigned long))); + } + + +//--------------------------------------------------------- +// startSongInfo +//--------------------------------------------------------- +void MusE::startSongInfo(bool editable) + { + printf("startSongInfo!!!!\n"); + SongInfo info; + info.songInfoText->setText(song->getSongInfo()); + info.songInfoText->setReadOnly(!editable); + info.show(); + if( info.exec() == QDialog::Accepted) { + if (editable) + song->setSongInfo(info.songInfoText->text()); + } + + } + +//--------------------------------------------------------- +// showDidYouKnowDialog +//--------------------------------------------------------- +void MusE::showDidYouKnowDialog() + { + if ((bool)config.showDidYouKnow == true) { + printf("show did you know dialog!!!!\n"); + DidYouKnow dyk; + dyk.tipText->setText("To get started with MusE why don't you try some demo songs available at http://demos.muse-sequencer.org/"); + dyk.show(); + if( dyk.exec()) { + if (dyk.dontShowCheckBox->isChecked()) { + printf("disables dialog!\n"); + config.showDidYouKnow=false; + muse->changeConfig(true); // save settings + } + } + } + } +//--------------------------------------------------------- +// startDefineController +//--------------------------------------------------------- + + +//--------------------------------------------------------- +// startClipList +//--------------------------------------------------------- + +void MusE::startClipList() + { + if (clipListEdit == 0) { + clipListEdit = new ClipListEdit(); + toplevels.push_back(Toplevel(Toplevel::CLIPLIST, (unsigned long)(clipListEdit), clipListEdit)); + connect(clipListEdit, SIGNAL(deleted(unsigned long)), SLOT(toplevelDeleted(unsigned long))); + } + clipListEdit->show(); + menu_audio->setItemChecked(aid2, true); + } + +//--------------------------------------------------------- +// 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]->latin1(); + const char* p = strrchr(path, '/'); + if (p == 0) + p = path; + else + ++p; + openRecent->insertItem(QString(p), i); + } + } + +//--------------------------------------------------------- +// selectProject +//--------------------------------------------------------- + +void MusE::selectProject(int id) + { + if (id < 0) + return; + assert(id < PROJECT_LIST_LEN); + QString* name = projectList[id]; + if (name == 0) + return; + loadProjectFile(*name, false, true); + } + +//--------------------------------------------------------- +// toplevelDeleted +//--------------------------------------------------------- + +void MusE::toplevelDeleted(unsigned long tl) + { + for (iToplevel i = toplevels.begin(); i != toplevels.end(); ++i) { + if (i->object() == tl) { + switch(i->type()) { + case Toplevel::MARKER: + break; + case Toplevel::CLIPLIST: + menu_audio->setItemChecked(aid2, false); + return; + // the followin editors can exist in more than + // one instantiation: + case Toplevel::PIANO_ROLL: + case Toplevel::LISTE: + case Toplevel::DRUM: + case Toplevel::MASTER: + case Toplevel::WAVE: + case Toplevel::LMASTER: + break; + } + toplevels.erase(i); + return; + } + } + printf("topLevelDeleted: top level %lx not found\n", tl); + //assert(false); + } + +//--------------------------------------------------------- +// ctrlChanged +// midi ctrl value changed +//--------------------------------------------------------- + +#if 0 +void MusE::ctrlChanged() + { + arranger->updateInspector(); + } +#endif + +//--------------------------------------------------------- +// kbAccel +//--------------------------------------------------------- + +void MusE::kbAccel(int key) + { + if (key == shortcuts[SHRT_TOGGLE_METRO].key) { + song->setClick(!song->click()); + } + else if (key == shortcuts[SHRT_PLAY_TOGGLE].key) { + if (audio->isPlaying()) + //song->setStopPlay(false); + song->setStop(true); + else if (!config.useOldStyleStopShortCut) + song->setPlay(true); + else if (song->cpos() != song->lpos()) + song->setPos(0, song->lPos()); + else { + Pos p(0, true); + song->setPos(0, p); + } + } + else if (key == shortcuts[SHRT_STOP].key) { + //song->setPlay(false); + song->setStop(true); + } + else if (key == shortcuts[SHRT_GOTO_START].key) { + Pos p(0, true); + song->setPos(0, p); + } + else if (key == shortcuts[SHRT_PLAY_SONG].key ) { + song->setPlay(true); + } + else if (key == shortcuts[SHRT_GOTO_LEFT].key) { + if (!song->record()) + song->setPos(0, song->lPos()); + } + else if (key == shortcuts[SHRT_GOTO_RIGHT].key) { + if (!song->record()) + song->setPos(0, song->rPos()); + } + else if (key == shortcuts[SHRT_TOGGLE_LOOP].key) { + song->setLoop(!song->loop()); + } + else if (key == shortcuts[SHRT_START_REC].key) { + if (!audio->isPlaying()) { + song->setRecord(!song->record()); + } + } + else if (key == shortcuts[SHRT_REC_CLEAR].key) { + if (!audio->isPlaying()) { + song->clearTrackRec(); + } + } + else if (key == shortcuts[SHRT_OPEN_TRANSPORT].key) { + toggleTransport(); + } + else if (key == shortcuts[SHRT_OPEN_BIGTIME].key) { + toggleBigTime(); + } + //else if (key == shortcuts[SHRT_OPEN_MIXER].key) { + // toggleMixer(); + // } + else if (key == shortcuts[SHRT_OPEN_MIXER].key) { + toggleMixer1(); + } + else if (key == shortcuts[SHRT_OPEN_MIXER2].key) { + toggleMixer2(); + } + else if (key == shortcuts[SHRT_NEXT_MARKER].key) { + if (markerView) + markerView->nextMarker(); + } + else if (key == shortcuts[SHRT_PREV_MARKER].key) { + if (markerView) + markerView->prevMarker(); + } + else { + if (debugMsg) + printf("unknown kbAccel 0x%x\n", key); + } + } + +//--------------------------------------------------------- +// MuseApplication +//--------------------------------------------------------- + +class MuseApplication : public QApplication { + MusE* muse; + + public: + MuseApplication(int& argc, char** argv) + : QApplication(argc, argv) + { + muse = 0; + } + + + void setMuse(MusE* m) { + muse = m; +#ifdef HAVE_LASH + if(useLASH) + startTimer (300); +#endif + } + + bool notify(QObject* receiver, QEvent* event) { + bool flag = QApplication::notify(receiver, event); + if (event->type() == QEvent::KeyPress) { + QKeyEvent* ke = (QKeyEvent*)event; + globalKeyState = ke->stateAfter(); + bool accepted = ke->isAccepted(); + if (!accepted) { + int key = ke->key(); + if (ke->state() & Qt::ShiftModifier) + key += Qt::SHIFT; + if (ke->state() & Qt::AltModifier) + key += Qt::ALT; + if (ke->state() & Qt::ControlModifier) + key+= Qt::CTRL; + muse->kbAccel(key); + return true; + } + } + if (event->type() == QEvent::KeyRelease) { + QKeyEvent* ke = (QKeyEvent*)event; + globalKeyState = ke->stateAfter(); + } + + return flag; + } + +#ifdef HAVE_LASH + virtual void timerEvent (QTimerEvent * /* e */) { + if(useLASH) + muse->lash_idle_cb (); + } +#endif /* HAVE_LASH */ + + }; + +//--------------------------------------------------------- +// usage +//--------------------------------------------------------- + +static void usage(const char* prog, const char* txt) + { + fprintf(stderr, "%s: %s\nusage: %s flags midifile\n Flags:\n", + prog, txt, prog); + fprintf(stderr, " -h this help\n"); + fprintf(stderr, " -v print version\n"); + fprintf(stderr, " -d debug mode: no threads, no RT\n"); + fprintf(stderr, " -D debug mode: enable some debug messages\n"); + fprintf(stderr, " -m debug mode: trace midi Input\n"); + fprintf(stderr, " -M debug mode: trace midi Output\n"); + fprintf(stderr, " -s debug mode: trace sync\n"); + fprintf(stderr, " -a no audio\n"); + //fprintf(stderr, " -P n set real time priority to n (default: 50)\n"); + fprintf(stderr, " -P n set audio driver real time priority to n (Dummy only, default 40. Else fixed by Jack.)\n"); + fprintf(stderr, " -Y n force midi real time priority to n (default: audio driver prio +2)\n"); + fprintf(stderr, " -p don't load LADSPA plugins\n"); +#ifdef ENABLE_PYTHON + fprintf(stderr, " -y enable Python control support\n"); +#endif +#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 +#ifdef HAVE_LASH + fprintf(stderr, " -L don't use LASH\n"); +#endif + fprintf(stderr, "useful environment variables:\n"); + fprintf(stderr, " MUSE override library and shared directories location\n"); + fprintf(stderr, " MUSEHOME override user home directory (HOME/)\n"); + fprintf(stderr, " MUSEINSTRUMENTS override user instrument directory (MUSEHOME/muse_instruments)\n"); + } + +//--------------------------------------------------------- +// 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 + +//--------------------------------------------------------- +// main +//--------------------------------------------------------- + +int main(int argc, char* argv[]) + { + +// error = ErrorHandler::create(argv[0]); + ruid = getuid(); + euid = geteuid(); + undoSetuid(); + getCapabilities(); + int noAudio = false; + + const char* mu = getenv("MUSEHOME"); + if(mu) + museUser = QString(mu); + if(museUser.isEmpty()) + museUser = QString(getenv("HOME")); + + QString museGlobal; + const char* p = getenv("MUSE"); + if (p) + museGlobal = p; + + if (museGlobal.isEmpty()) { + QString museGlobal(INSTPREFIX); + QString museGlobalLibDir(INSTLIBDIR); + museGlobalLib = museGlobalLibDir + "/muse"; + museGlobalShare = museGlobal + "/share/muse"; + } + else { + museGlobalLib = museGlobal + "/lib"; + museGlobalShare = museGlobal + "/share"; + } + museProject = museProjectInitPath; //getcwd(0, 0); + configName = QString(getenv("HOME")) + QString("/.MusE"); + + museInstruments = museGlobalShare + QString("/instruments"); + + const char* ins = getenv("MUSEINSTRUMENTS"); + if(ins) + museUserInstruments = QString(ins); + if(museUserInstruments.isEmpty()) + museUserInstruments = museUser + QString("/muse_instruments"); + +#ifdef HAVE_LASH + lash_args_t * lash_args = 0; + if(useLASH) + lash_args = lash_extract_args (&argc, &argv); +#endif + + srand(time(0)); // initialize random number generator +// signal(SIGCHLD, catchSignal); // interferes with initVST() + initMidiController(); + QApplication::setColorSpec(QApplication::ManyColor); + MuseApplication app(argc, argv); + + initShortCuts(); + readConfiguration(); + + if (config.useDenormalBias) + printf("Denormal protection enabled.\n"); + // SHOW MUSE SPLASH SCREEN + if (config.showSplashScreen) { + QPixmap splsh(museGlobalShare + "/splash.png"); + + if (!splsh.isNull()) { + QSplashScreen* muse_splash = new QSplashScreen(splsh, + Qt::WStyle_StaysOnTop | Qt::WDestructiveClose); + muse_splash->show(); + QTimer* stimer = new QTimer(0); + muse_splash->connect(stimer, SIGNAL(timeout()), muse_splash, SLOT(close())); + stimer->start(6000, true); + } + } + int i; + + QString optstr("ahvdDmMsP:Y:py"); +#ifdef VST_SUPPORT + optstr += QString("V"); +#endif +#ifdef DSSI_SUPPORT + optstr += QString("I"); +#endif +#ifdef HAVE_LASH + optstr += QString("L"); +#endif + +//#ifdef VST_SUPPORT +// while ((i = getopt(argc, argv, "ahvdDmMsVP:py")) != EOF) { +//#else +// while ((i = getopt(argc, argv, "ahvdDmMsP:py")) != EOF) { +//#endif + + while ((i = getopt(argc, argv, optstr.latin1())) != EOF) { + char c = (char)i; + switch (c) { + case 'v': printVersion(argv[0]); return 0; + case 'd': + debugMode = true; + realTimeScheduling = false; + break; + case 'a': + noAudio = true; + break; + case 'D': debugMsg = true; break; + case 'm': midiInputTrace = true; break; + case 'M': midiOutputTrace = true; break; + case 's': debugSync = true; break; + case 'P': realTimePriority = atoi(optarg); break; + case 'Y': midiRTPrioOverride = atoi(optarg); break; + case 'p': loadPlugins = false; break; + case 'V': loadVST = false; break; + case 'I': loadDSSI = false; break; + case 'L': useLASH = false; break; + case 'y': usePythonBridge = true; break; + case 'h': usage(argv[0], argv[1]); return -1; + default: usage(argv[0], "bad argument"); return -1; + } + } + + AL::initDsp(); + + if (debugMsg) + printf("Start euid: %d ruid: %d, Now euid %d\n", + euid, ruid, geteuid()); + if (debugMode) { + initDummyAudio(); + realTimeScheduling = false; + } + else if (noAudio) { + initDummyAudio(); + realTimeScheduling = true; + //if (debugMode) { // ?? + // realTimeScheduling = false; + // } + } + else if (initJackAudio()) { + if (!debugMode) + { + QMessageBox::critical(NULL, "MusE fatal error", "MusE failed to find a Jack audio server.

" + "MusE will continue without audio support (-a switch)!

" + "If this was not intended check that Jack was started. " + "If Jack was started check that it was\n" + "started as the same user as MusE.\n"); + + initDummyAudio(); + noAudio = true; + realTimeScheduling = true; + if (debugMode) { + realTimeScheduling = false; + } + } + 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"); + initDummyAudio(); + //realTimeScheduling = audioDevice->isRealtime(); + } + realTimeScheduling = true; + } + else + realTimeScheduling = audioDevice->isRealtime(); + + useJackTransport.setValue(true); + // setup the prefetch fifo length now that the segmentSize is known + // Changed by Tim. p3.3.17 + // Changed to 4 *, JUST FOR TEST!!! + fifoLength = 131072/segmentSize; + //fifoLength = (131072/segmentSize) * 4; + + + argc -= optind; + ++argc; + + if (debugMsg) { + printf("global lib: <%s>\n", museGlobalLib.latin1()); + printf("global share: <%s>\n", museGlobalShare.latin1()); + printf("muse home: <%s>\n", museUser.latin1()); + printf("project dir: <%s>\n", museProject.latin1()); + printf("user instruments: <%s>\n", museUserInstruments.latin1()); + } + + static QTranslator translator(0); + QString locale(QTextCodec::locale()); + if (locale != "C") { + QString loc("muse_"); + loc += QString(QTextCodec::locale()); + if (translator.load(loc, QString(".")) == false) { + QString lp(museGlobalShare); + lp += QString("/locale"); + if (translator.load(loc, lp) == false) { + printf("no locale <%s>/<%s>\n", loc.latin1(), lp.latin1()); + } + } + app.installTranslator(&translator); + } + + if (locale == "de") { + printf("locale de\n"); + hIsB = false; + } + + if (loadPlugins) + initPlugins(); + + if (loadVST) + initVST(); + + if(loadDSSI) + initDSSI(); + + // p3.3.39 + initOSC(); + + initIcons(); + + initMetronome(); + //QApplication::clipboard()->setSelectionMode(false); ddskrjo + + QApplication::addLibraryPath(museGlobalLib + "/qtplugins"); + if (debugMsg) { + QStringList list = app.libraryPaths(); + QStringList::Iterator it = list.begin(); + printf("QtLibraryPath:\n"); + while(it != list.end()) { + printf(" <%s>\n", (*it).latin1()); + ++it; + } + } + + muse = new MusE(argc, &argv[optind]); + app.setMuse(muse); + muse->setIcon(*museIcon); + // Added by Tim. p3.3.22 + if (!debugMode) { + if (mlockall(MCL_CURRENT | MCL_FUTURE)) + perror("WARNING: Cannot lock memory:"); + } + + muse->show(); + muse->seqStart(); + +#ifdef HAVE_LASH + { + if(useLASH) + { + int lash_flags = LASH_Config_File; + const char *muse_name = PACKAGE_NAME; + lash_client = lash_init (lash_args, muse_name, lash_flags, LASH_PROTOCOL(2,0)); + lash_alsa_client_id (lash_client, snd_seq_client_id (alsaSeq)); + if (!noAudio) { + // p3.3.38 + //char *jack_name = ((JackAudioDevice*)audioDevice)->getJackName(); + const char *jack_name = audioDevice->clientName(); + lash_jack_client_name (lash_client, jack_name); + } + } + } +#endif /* HAVE_LASH */ + QTimer::singleShot(100, muse, SLOT(showDidYouKnowDialog())); + + return app.exec(); + // p3.3.47 + //int rv = app.exec(); + // FIXME: Can't do, seg fault at MarkerView::~MarkerView() + // due to already deleted undoRedo. + //delete muse; + //return rv; + + } + +#if 0 +//--------------------------------------------------------- +// configPart +//--------------------------------------------------------- + +void MusE::configPart(int id) + { + if (id < 3) { + partConfig->setItemChecked(0, id == 0); + partConfig->setItemChecked(1, id == 1); + partConfig->setItemChecked(2, id == 2); + arranger->setShowPartType(id); + for (int i = 3; i < 10; ++i) { + partConfig->setItemEnabled(i, id == 2); + } + } + else { + bool flag = !partConfig->isItemChecked(id); + partConfig->setItemChecked(id, flag); + int val = arranger->showPartEvent(); + if (flag) { + val |= 1 << (id-3); + } + else { + val &= ~(1 << (id-3)); + } + arranger->setShowPartEvent(val); + } + } +#endif + +//--------------------------------------------------------- +// cmd +// some cmd's from pulldown menu +//--------------------------------------------------------- + +void MusE::cmd(int cmd) + { + TrackList* tracks = song->tracks(); + int l = song->lpos(); + int r = song->rpos(); + + switch(cmd) { + case CMD_CUT: + arranger->cmd(Arranger::CMD_CUT_PART); + break; + case CMD_COPY: + arranger->cmd(Arranger::CMD_COPY_PART); + break; + case CMD_PASTE: + arranger->cmd(Arranger::CMD_PASTE_PART); + break; + case CMD_PASTE_CLONE: + arranger->cmd(Arranger::CMD_PASTE_CLONE_PART); + break; + case CMD_PASTE_TO_TRACK: + arranger->cmd(Arranger::CMD_PASTE_PART_TO_TRACK); + break; + case CMD_PASTE_CLONE_TO_TRACK: + arranger->cmd(Arranger::CMD_PASTE_CLONE_PART_TO_TRACK); + break; + case CMD_INSERT: + arranger->cmd(Arranger::CMD_INSERT_PART); + break; + case CMD_INSERTMEAS: + arranger->cmd(Arranger::CMD_INSERT_EMPTYMEAS); + break; + case CMD_DELETE: + song->startUndo(); + if (song->msgRemoveParts()) { + song->endUndo(SC_PART_REMOVED); + break; + } + else + audio->msgRemoveTracks(); + song->endUndo(SC_TRACK_REMOVED); + break; + case CMD_DELETE_TRACK: + song->startUndo(); + audio->msgRemoveTracks(); + song->endUndo(SC_TRACK_REMOVED); + audio->msgUpdateSoloStates(); + break; + + case CMD_SELECT_ALL: + case CMD_SELECT_NONE: + case CMD_SELECT_INVERT: + case CMD_SELECT_ILOOP: + case CMD_SELECT_OLOOP: + 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)); + switch(cmd) { + case CMD_SELECT_INVERT: + f = !p->second->selected(); + break; + case CMD_SELECT_NONE: + f = false; + break; + case CMD_SELECT_ALL: + f = true; + break; + case CMD_SELECT_ILOOP: + f = inside; + break; + case CMD_SELECT_OLOOP: + f = !inside; + break; + } + p->second->setSelected(f); + } + } + song->update(); + break; + + case CMD_SELECT_PARTS: + 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(); + break; + case CMD_FOLLOW_NO: + song->setFollow(Song::NO); + setFollow(); + break; + case CMD_FOLLOW_JUMP: + song->setFollow(Song::JUMP); + setFollow(); + break; + case CMD_FOLLOW_CONTINUOUS: + song->setFollow(Song::CONTINUOUS); + setFollow(); + break; + } + } + +//--------------------------------------------------------- +// clipboardChanged +//--------------------------------------------------------- + +void MusE::clipboardChanged() + { + Q3CString subtype("partlist"); + QMimeSource* ms = QApplication::clipboard()->data(QClipboard::Clipboard); + if (ms == 0) + return; + bool flag = false; + for (int i = 0; ms->format(i); ++i) { +// printf("Format <%s\n", ms->format(i)); + if ((strncmp(ms->format(i), "text/midipartlist", 17) == 0) + || (strncmp(ms->format(i), "text/wavepartlist", 17) == 0) + // Added by T356. Support mixed .mpt files. + || (strncmp(ms->format(i), "text/mixedpartlist", 18) == 0)) { + flag = true; + break; + } + } + menuEdit->setItemEnabled(CMD_PASTE, flag); + menuEdit->setItemEnabled(CMD_INSERT, flag); + menuEdit->setItemEnabled(CMD_PASTE_CLONE, flag); + menuEdit->setItemEnabled(CMD_PASTE_TO_TRACK, flag); + menuEdit->setItemEnabled(CMD_PASTE_CLONE_TO_TRACK, flag); + } + +//--------------------------------------------------------- +// selectionChanged +//--------------------------------------------------------- + +void MusE::selectionChanged() + { + bool flag = arranger->isSingleSelection(); + menuEdit->setItemEnabled(CMD_CUT, flag); + //menuEdit->setItemEnabled(CMD_COPY, flag); // Now possible + } + +//--------------------------------------------------------- +// transpose +//--------------------------------------------------------- + +void MusE::transpose() + { + Transpose *w = new Transpose(); + w->show(); + } + +//--------------------------------------------------------- +// modifyGateTime +//--------------------------------------------------------- + +void MusE::modifyGateTime() + { + 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(); + if(appearance->isVisible()) { + appearance->raise(); + appearance->setActiveWindow(); + } + else + appearance->show(); + } + +//--------------------------------------------------------- +// loadTheme +//--------------------------------------------------------- + +void MusE::loadTheme(QString s) + { + if (style()->name() != s) + QApplication::setStyle(s); + } + +//--------------------------------------------------------- +// 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(); + loadTheme(config.style); + QApplication::setFont(config.fonts[0], true); + // Added by Tim. p3.3.6 + //printf("MusE::changeConfig writeFlag:%d emitting configChanged\n", writeFlag); + + emit configChanged(); + updateConfiguration(); + } + +//--------------------------------------------------------- +// configMetronome +//--------------------------------------------------------- + +void MusE::configMetronome() + { + if (!metronomeConfig) + metronomeConfig = new MetronomeConfig(this, "metronome"); + + if(metronomeConfig->isVisible()) { + metronomeConfig->raise(); + metronomeConfig->setActiveWindow(); + } + else + metronomeConfig->show(); + } + + +//--------------------------------------------------------- +// configShortCuts +//--------------------------------------------------------- + +void MusE::configShortCuts() + { + if (!shortcutConfig) + shortcutConfig = new ShortcutConfig(this, "shortcutconfig"); + 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(); + TrackList* tracks = song->tracks(); + for (iTrack it = tracks->begin(); it != tracks->end(); ++it) { + MidiTrack* track = dynamic_cast(*it); + if (track == 0 || track->mute()) + continue; + PartList* pl = track->parts(); + for (iPart p = pl->begin(); p != pl->end(); ++p) { + Part* part = p->second; + int t = part->tick(); + int l = part->lenTick(); + if (t + l <= lpos) + continue; + if ((t >= lpos) && ((t+l) <= rpos)) { + audio->msgRemovePart(part, false); + } + else if ((t < lpos) && ((t+l) > lpos) && ((t+l) <= rpos)) { + // remove part tail + int len = lpos - t; + MidiPart* nPart = new MidiPart(*(MidiPart*)part); + nPart->setLenTick(len); + // + // cut Events in nPart + EventList* el = nPart->events(); + iEvent ie = el->lower_bound(t + len); + for (; ie != el->end();) { + iEvent i = ie; + ++ie; + // Indicate no undo, and do not do port controller values and clone parts. + //audio->msgDeleteEvent(i->second, nPart, false); + audio->msgDeleteEvent(i->second, nPart, false, false, false); + } + // Indicate no undo, and do port controller values and clone parts. + //audio->msgChangePart(part, nPart, false); + audio->msgChangePart(part, nPart, false, true, true); + } + else if ((t < lpos) && ((t+l) > lpos) && ((t+l) > rpos)) { + //---------------------- + // remove part middle + //---------------------- + + MidiPart* nPart = new MidiPart(*(MidiPart*)part); + EventList* el = nPart->events(); + iEvent is = el->lower_bound(lpos); + iEvent ie = el->upper_bound(rpos); + for (iEvent i = is; i != ie;) { + iEvent ii = i; + ++i; + // Indicate no undo, and do not do port controller values and clone parts. + //audio->msgDeleteEvent(ii->second, nPart, false); + audio->msgDeleteEvent(ii->second, nPart, false, false, false); + } + + ie = el->lower_bound(rpos); + for (; ie != el->end();) { + iEvent i = ie; + ++ie; + Event event = i->second; + Event nEvent = event.clone(); + nEvent.setTick(nEvent.tick() - (rpos-lpos)); + // Indicate no undo, and do not do port controller values and clone parts. + //audio->msgChangeEvent(event, nEvent, nPart, false); + audio->msgChangeEvent(event, nEvent, nPart, false, false, false); + } + nPart->setLenTick(l - (rpos-lpos)); + // Indicate no undo, and do port controller values and clone parts. + //audio->msgChangePart(part, nPart, false); + audio->msgChangePart(part, nPart, false, true, true); + } + else if ((t >= lpos) && (t < rpos) && (t+l) > rpos) { + // TODO: remove part head + } + else if (t >= rpos) { + MidiPart* nPart = new MidiPart(*(MidiPart*)part); + int nt = part->tick(); + nPart->setTick(nt - (rpos -lpos)); + // Indicate no undo, and do port controller values but not clone parts. + //audio->msgChangePart(part, nPart, false); + audio->msgChangePart(part, nPart, false, true, false); + } + } + } + // TODO: cut tempo track + // TODO: process marker + song->endUndo(SC_TRACK_MODIFIED | SC_PART_MODIFIED | SC_PART_REMOVED); + } + +//--------------------------------------------------------- +// globalInsert +// - insert empty space at left locator position upto +// right locator +// - do not touch muted track +// - insert in master track +//--------------------------------------------------------- + +void MusE::globalInsert() + { + unsigned lpos = song->lpos(); + unsigned rpos = song->rpos(); + if (lpos >= rpos) + return; + + song->startUndo(); + TrackList* tracks = song->tracks(); + for (iTrack it = tracks->begin(); it != tracks->end(); ++it) { + MidiTrack* track = dynamic_cast(*it); + // + // process only non muted midi tracks + // + if (track == 0 || track->mute()) + continue; + PartList* pl = track->parts(); + for (iPart p = pl->begin(); p != pl->end(); ++p) { + Part* part = p->second; + unsigned t = part->tick(); + int l = part->lenTick(); + if (t + l <= lpos) + continue; + if (lpos >= t && lpos < (t+l)) { + MidiPart* nPart = new MidiPart(*(MidiPart*)part); + nPart->setLenTick(l + (rpos-lpos)); + EventList* el = nPart->events(); + + iEvent i = el->end(); + while (i != el->begin()) { + --i; + if (i->first < lpos) + break; + Event event = i->second; + Event nEvent = i->second.clone(); + nEvent.setTick(nEvent.tick() + (rpos-lpos)); + // Indicate no undo, and do not do port controller values and clone parts. + //audio->msgChangeEvent(event, nEvent, nPart, false); + audio->msgChangeEvent(event, nEvent, nPart, false, false, false); + } + // Indicate no undo, and do port controller values and clone parts. + //audio->msgChangePart(part, nPart, false); + audio->msgChangePart(part, nPart, false, true, true); + } + else if (t > lpos) { + MidiPart* nPart = new MidiPart(*(MidiPart*)part); + nPart->setTick(t + (rpos -lpos)); + // Indicate no undo, and do port controller values but not clone parts. + //audio->msgChangePart(part, nPart, false); + audio->msgChangePart(part, nPart, false, true, false); + } + } + } + // TODO: process tempo track + // TODO: process marker + song->endUndo(SC_TRACK_MODIFIED | SC_PART_MODIFIED | SC_PART_REMOVED); + } + +//--------------------------------------------------------- +// globalSplit +// - split all parts at the song position pointer +// - do not touch muted track +//--------------------------------------------------------- + +void MusE::globalSplit() + { + int pos = song->cpos(); + song->startUndo(); + TrackList* tracks = song->tracks(); + for (iTrack it = tracks->begin(); it != tracks->end(); ++it) { + Track* track = *it; + PartList* pl = track->parts(); + for (iPart p = pl->begin(); p != pl->end(); ++p) { + Part* part = p->second; + int p1 = part->tick(); + int l0 = part->lenTick(); + if (pos > p1 && pos < (p1+l0)) { + Part* p1; + Part* p2; + track->splitPart(part, pos, p1, p2); + // Indicate no undo, and do port controller values but not clone parts. + //audio->msgChangePart(part, p1, false); + audio->msgChangePart(part, p1, false, true, false); + audio->msgAddPart(p2, false); + break; + } + } + } + song->endUndo(SC_TRACK_MODIFIED | SC_PART_MODIFIED | SC_PART_INSERTED); + } + +//--------------------------------------------------------- +// copyRange +// - copy space between left and right locator position +// to song position pointer +// - dont process muted tracks +// - create a new part for every track containing the +// copied events +//--------------------------------------------------------- + +void MusE::copyRange() + { + QMessageBox::critical(this, + tr("MusE: Copy Range"), + tr("not implemented") + ); + } + +//--------------------------------------------------------- +// cutEvents +// - make sure that all events in a part end where the +// part ends +// - process only marked parts +//--------------------------------------------------------- + +void MusE::cutEvents() + { + QMessageBox::critical(this, + tr("MusE: Cut Events"), + tr("not implemented") + ); + } + +//--------------------------------------------------------- +// checkRegionNotNull +// return true if (rPos - lPos) <= 0 +//--------------------------------------------------------- + +bool MusE::checkRegionNotNull() + { + int start = song->lPos().frame(); + int end = song->rPos().frame(); + if (end - start <= 0) { + QMessageBox::critical(this, + tr("MusE: Bounce"), + tr("set left/right marker for bounce range") + ); + return true; + } + return false; + } + +#if 0 +//--------------------------------------------------------- +// openAudioFileManagement +//--------------------------------------------------------- +void MusE::openAudioFileManagement() + { + if (!audioFileManager) { + audioFileManager = new AudioFileManager(this, "audiofilemanager", false); + audioFileManager->show(); + } + audioFileManager->setShown(true); + } +#endif +//--------------------------------------------------------- +// bounceToTrack +//--------------------------------------------------------- + +void MusE::bounceToTrack() + { + if(audio->bounce()) + return; + + song->bounceOutput = 0; + + if(song->waves()->empty()) + { + QMessageBox::critical(this, + tr("MusE: Bounce to Track"), + tr("No wave tracks found") + ); + return; + } + + OutputList* ol = song->outputs(); + if(ol->empty()) + { + QMessageBox::critical(this, + tr("MusE: Bounce to Track"), + tr("No audio output tracks found") + ); + return; + } + + if(checkRegionNotNull()) + return; + + AudioOutput* out = 0; + // If only one output, pick it, else pick the first selected. + if(ol->size() == 1) + out = ol->front(); + else + { + for(iAudioOutput iao = ol->begin(); iao != ol->end(); ++iao) + { + AudioOutput* o = *iao; + if(o->selected()) + { + if(out) + { + out = 0; + break; + } + out = o; + } + } + if(!out) + { + QMessageBox::critical(this, + tr("MusE: Bounce to Track"), + tr("Select one audio output track,\nand one target wave track") + ); + 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(t->type() != Track::WAVE && t->type() != Track::AUDIO_OUTPUT) { + track = 0; + break; + } + if(t->type() == Track::WAVE) + { + if(track) + { + track = 0; + break; + } + track = (WaveTrack*)t; + } + + } + } + + if (track == 0) { + if(ol->size() == 1) { + QMessageBox::critical(this, + tr("MusE: Bounce to Track"), + tr("Select one target wave track") + ); + return; + } + else + { + QMessageBox::critical(this, + tr("MusE: Bounce to Track"), + tr("Select one target wave track,\nand one audio output track") + ); + return; + } + } + song->bounceOutput = out; + song->bounceTrack = track; + song->setRecord(true); + song->setRecordFlag(track, true); + audio->msgBounce(); + } + +//--------------------------------------------------------- +// bounceToFile +//--------------------------------------------------------- + +void MusE::bounceToFile(AudioOutput* ao) + { + if(audio->bounce()) + return; + song->bounceOutput = 0; + if(!ao) + { + OutputList* ol = song->outputs(); + if(ol->empty()) + { + QMessageBox::critical(this, + tr("MusE: Bounce to Track"), + tr("No audio output tracks found") + ); + return; + } + // If only one output, pick it, else pick the first selected. + if(ol->size() == 1) + ao = ol->front(); + else + { + for(iAudioOutput iao = ol->begin(); iao != ol->end(); ++iao) + { + AudioOutput* o = *iao; + if(o->selected()) + { + if(ao) + { + ao = 0; + break; + } + ao = o; + } + } + if (ao == 0) { + QMessageBox::critical(this, + tr("MusE: Bounce to File"), + tr("Select one audio output track") + ); + return; + } + } + } + + if (checkRegionNotNull()) + return; + + SndFile* sf = getSndFile(0, this, 0); + if (sf == 0) + return; + + song->bounceOutput = ao; + ao->setRecFile(sf); + song->setRecord(true, false); + song->setRecordFlag(ao, true); + audio->msgBounce(); + } + +#ifdef HAVE_LASH +//--------------------------------------------------------- +// lash_idle_cb +//--------------------------------------------------------- +#include +void +MusE::lash_idle_cb () +{ + lash_event_t * event; + if (!lash_client) + return; + + while ( (event = lash_get_event (lash_client)) ) + { + switch (lash_event_get_type (event)) + { + case LASH_Save_File: + { + /* save file */ + QString ss = QString(lash_event_get_string(event)) + QString("/lash-project-muse.med"); + int ok = save (ss.ascii(), false); + if (ok) { + project.setFile(ss.ascii()); + setCaption(tr("MusE: Song: ") + project.baseName(true)); + addProject(ss.ascii()); + museProject = QFileInfo(ss.ascii()).dirPath(true); + } + lash_send_event (lash_client, event); + } + break; + + case LASH_Restore_File: + { + /* load file */ + QString sr = QString(lash_event_get_string(event)) + QString("/lash-project-muse.med"); + loadProjectFile(sr.ascii(), false, true); + lash_send_event (lash_client, event); + } + break; + + case LASH_Quit: + { + /* quit muse */ + std::cout << "MusE::lash_idle_cb Received LASH_Quit" + << std::endl; + lash_event_destroy (event); + } + break; + + default: + { + std::cout << "MusE::lash_idle_cb Received unknown LASH event of type " + << lash_event_get_type (event) + << std::endl; + lash_event_destroy (event); + } + break; + } + } +} +#endif /* HAVE_LASH */ + +//--------------------------------------------------------- +// clearSong +// return true if operation aborted +// called with sequencer stopped +//--------------------------------------------------------- + +bool MusE::clearSong() + { + if (song->dirty) { + int n = 0; + n = QMessageBox::warning(this, appName, + tr("The current Project contains unsaved data\n" + "Load overwrites current Project:\n" + "Save Current Project?"), + tr("&Save"), tr("&Skip"), tr("&Abort"), 0, 2); + switch (n) { + case 0: + if (!save()) // abort if save failed + return true; + break; + case 1: + break; + case 2: + return true; + default: + printf("InternalError: gibt %d\n", n); + } + } + if (audio->isPlaying()) { + audio->msgPlay(false); + while (audio->isPlaying()) + qApp->processEvents(); + } + +again: + for (iToplevel i = toplevels.begin(); i != toplevels.end(); ++i) { + Toplevel tl = *i; + unsigned long obj = tl.object(); + switch (tl.type()) { + case Toplevel::CLIPLIST: + case Toplevel::MARKER: + break; + case Toplevel::PIANO_ROLL: + case Toplevel::LISTE: + case Toplevel::DRUM: + case Toplevel::MASTER: + case Toplevel::WAVE: + case Toplevel::LMASTER: + ((QWidget*)(obj))->close(true); + goto again; + } + } + song->clear(false); + return false; + } + +//--------------------------------------------------------- +// startEditInstrument +//--------------------------------------------------------- + +void MusE::startEditInstrument() + { + if(editInstrument == 0) + { + editInstrument = new EditInstrument(this); + editInstrument->show(); + } + else + { + if(editInstrument->isShown()) + editInstrument->hide(); + else + editInstrument->show(); + } + + } + +//--------------------------------------------------------- +// switchMixerAutomation +//--------------------------------------------------------- + +void MusE::switchMixerAutomation() + { + automation = !automation; + // Clear all pressed and touched and rec event lists. + song->clearRecAutomation(true); + +printf("automation = %d\n", automation); + menuAutomation->setItemChecked(autoId, automation); + } + +//--------------------------------------------------------- +// clearAutomation +//--------------------------------------------------------- + +void MusE::clearAutomation() + { + printf("not implemented\n"); + } + +//--------------------------------------------------------- +// takeAutomationSnapshot +//--------------------------------------------------------- + +void MusE::takeAutomationSnapshot() + { + int frame = song->cPos().frame(); + TrackList* tracks = song->tracks(); + for (iTrack i = tracks->begin(); i != tracks->end(); ++i) { + if ((*i)->isMidiTrack()) + continue; + AudioTrack* track = (AudioTrack*)*i; + CtrlListList* cll = track->controller(); + for (iCtrlList icl = cll->begin(); icl != cll->end(); ++icl) { + double val = icl->second->curVal(); + icl->second->add(frame, val); + } + } + } + +//--------------------------------------------------------- +// updateConfiguration +// called whenever the configuration has changed +//--------------------------------------------------------- + +void MusE::updateConfiguration() + { + fileOpenAction->setAccel(shortcuts[SHRT_OPEN].key); + fileNewAction->setAccel(shortcuts[SHRT_NEW].key); + fileSaveAction->setAccel(shortcuts[SHRT_SAVE].key); + + menu_file->setAccel(shortcuts[SHRT_OPEN_RECENT].key, menu_ids[CMD_OPEN_RECENT]); + menu_file->setAccel(shortcuts[SHRT_LOAD_TEMPLATE].key, menu_ids[CMD_LOAD_TEMPLATE]); + menu_file->setAccel(shortcuts[SHRT_SAVE_AS].key, menu_ids[CMD_SAVE_AS]); + menu_file->setAccel(shortcuts[SHRT_IMPORT_MIDI].key, menu_ids[CMD_IMPORT_MIDI]); + menu_file->setAccel(shortcuts[SHRT_EXPORT_MIDI].key, menu_ids[CMD_EXPORT_MIDI]); + menu_file->setAccel(shortcuts[SHRT_IMPORT_PART].key, menu_ids[CMD_IMPORT_PART]); + menu_file->setAccel(shortcuts[SHRT_IMPORT_AUDIO].key, menu_ids[CMD_IMPORT_AUDIO]); + menu_file->setAccel(shortcuts[SHRT_QUIT].key, menu_ids[CMD_QUIT]); + + menuEdit->setAccel(Qt::Key_Delete, CMD_DELETE); + menuEdit->setAccel(shortcuts[SHRT_OPEN_DRUMS].key, menu_ids[CMD_OPEN_DRUMS]); + menuEdit->setAccel(shortcuts[SHRT_OPEN_LIST].key, menu_ids[CMD_OPEN_LIST]); + menuEdit->setAccel(shortcuts[SHRT_OPEN_WAVE].key, menu_ids[CMD_OPEN_WAVE]); + menuEdit->setAccel(shortcuts[SHRT_OPEN_MIDI_TRANSFORM].key, menu_ids[CMD_OPEN_MIDI_TRANSFORM]); + + midiEdit->setAccel(shortcuts[SHRT_TRANSPOSE].key, menu_ids[CMD_TRANSPOSE]); + + master->setAccel(shortcuts[SHRT_OPEN_GRAPHIC_MASTER].key, menu_ids[CMD_OPEN_GRAPHIC_MASTER]); + master->setAccel(shortcuts[SHRT_OPEN_LIST_MASTER].key, menu_ids[CMD_OPEN_LIST_MASTER]); + + menuStructure->setAccel(shortcuts[SHRT_GLOBAL_CUT].key, menu_ids[CMD_GLOBAL_CUT]); + menuStructure->setAccel(shortcuts[SHRT_GLOBAL_INSERT].key, menu_ids[CMD_GLOBAL_INSERT]); + menuStructure->setAccel(shortcuts[SHRT_GLOBAL_SPLIT].key, menu_ids[CMD_GLOBAL_SPLIT]); + menuStructure->setAccel(shortcuts[SHRT_COPY_RANGE].key, menu_ids[CMD_COPY_RANGE]); + menuStructure->setAccel(shortcuts[SHRT_CUT_EVENTS].key, menu_ids[CMD_CUT_EVENTS]); + + menuView->setAccel(shortcuts[SHRT_OPEN_TRANSPORT].key, tr_id); + menuView->setAccel(shortcuts[SHRT_OPEN_BIGTIME].key, bt_id); + //menuView->setAccel(shortcuts[SHRT_OPEN_MIXER].key, aid1); + menuView->setAccel(shortcuts[SHRT_OPEN_MIXER].key, aid1a); + menuView->setAccel(shortcuts[SHRT_OPEN_MIXER2].key, aid1b); +// menuView->setAccel(shortcuts[SHRT_OPEN_CLIPS].key, aid2); +// markerAction->setAccel(shortcuts[SHRT_OPEN_MARKER].key ); + menuView->setAccel(shortcuts[SHRT_OPEN_MARKER].key, mr_id ); + + menuSettings->setAccel(shortcuts[SHRT_GLOBAL_CONFIG].key, menu_ids[CMD_GLOBAL_CONFIG]); + menuSettings->setAccel(shortcuts[SHRT_CONFIG_SHORTCUTS].key, menu_ids[CMD_CONFIG_SHORTCUTS]); + menuSettings->setAccel(shortcuts[SHRT_CONFIG_METRONOME].key, menu_ids[CMD_CONFIG_METRONOME]); + menuSettings->setAccel(shortcuts[SHRT_CONFIG_MIDISYNC].key, menu_ids[CMD_CONFIG_MIDISYNC]); + menuSettings->setAccel(shortcuts[SHRT_APPEARANCE_SETTINGS].key, menu_ids[CMD_APPEARANCE_SETTINGS]); + menuSettings->setAccel(shortcuts[SHRT_CONFIG_MIDI_PORTS].key, menu_ids[CMD_CONFIG_MIDI_PORTS]); + menuSettings->setAccel(shortcuts[SHRT_CONFIG_AUDIO_PORTS].key, menu_ids[CMD_CONFIG_AUDIO_PORTS]); + +// menu_functions->setAccel(shortcuts[SHRT_MIDI_EDIT_INSTRUMENTS].key, menu_ids[CMD_MIDI_EDIT_INSTRUMENTS]); + menu_functions->setAccel(shortcuts[SHRT_MIDI_RESET].key, menu_ids[CMD_MIDI_RESET]); + menu_functions->setAccel(shortcuts[SHRT_MIDI_INIT].key, menu_ids[CMD_MIDI_INIT]); + menu_functions->setAccel(shortcuts[SHRT_MIDI_LOCAL_OFF].key, menu_ids[CMD_MIDI_LOCAL_OFF]); + + menu_audio->setAccel(shortcuts[SHRT_AUDIO_BOUNCE_TO_TRACK].key, menu_ids[CMD_AUDIO_BOUNCE_TO_TRACK]); + menu_audio->setAccel(shortcuts[SHRT_AUDIO_BOUNCE_TO_FILE].key , menu_ids[CMD_AUDIO_BOUNCE_TO_FILE]); + menu_audio->setAccel(shortcuts[SHRT_AUDIO_RESTART].key, menu_ids[CMD_AUDIO_RESTART]); + + menuAutomation->setAccel(shortcuts[SHRT_MIXER_AUTOMATION].key, autoId); + menuAutomation->setAccel(shortcuts[SHRT_MIXER_SNAPSHOT].key, menu_ids[CMD_MIXER_SNAPSHOT]); + menuAutomation->setAccel(shortcuts[SHRT_MIXER_AUTOMATION_CLEAR].key, menu_ids[CMD_MIXER_AUTOMATION_CLEAR]); + + menu_help->setAccel(menu_ids[CMD_OPEN_HELP], shortcuts[SHRT_OPEN_HELP].key); + menu_help->setAccel(menu_ids[CMD_START_WHATSTHIS], shortcuts[SHRT_START_WHATSTHIS].key); + pianoAction->setAccel(shortcuts[SHRT_OPEN_PIANO].key); + + select->setAccel(shortcuts[SHRT_SELECT_ALL].key, CMD_SELECT_ALL); + +// select->setAccel(shortcuts[SHRT_DESEL_PARTS].key, CMD_SELECT_NONE); + select->setAccel(shortcuts[SHRT_SELECT_NONE].key, CMD_SELECT_NONE); + + select->setAccel(shortcuts[SHRT_SELECT_INVERT].key, CMD_SELECT_INVERT); + select->setAccel(shortcuts[SHRT_SELECT_ILOOP].key, CMD_SELECT_ILOOP); + select->setAccel(shortcuts[SHRT_SELECT_OLOOP].key, CMD_SELECT_OLOOP); + select->setAccel(shortcuts[SHRT_SELECT_PRTSTRACK].key, CMD_SELECT_PARTS); + follow->setAccel(shortcuts[SHRT_FOLLOW_JUMP].key, CMD_FOLLOW_JUMP); + follow->setAccel(shortcuts[SHRT_FOLLOW_NO].key, CMD_FOLLOW_NO); + follow->setAccel(shortcuts[SHRT_FOLLOW_CONTINUOUS].key, CMD_FOLLOW_CONTINUOUS); + midiInputPlugins->setAccel(shortcuts[SHRT_MIDI_INPUT_TRANSPOSE].key, 0); + midiInputPlugins->setAccel(shortcuts[SHRT_MIDI_INPUT_TRANSFORM].key, 1); + midiInputPlugins->setAccel(shortcuts[SHRT_MIDI_INPUT_FILTER].key, 2); + midiInputPlugins->setAccel(shortcuts[SHRT_MIDI_REMOTE_CONTROL].key, 3); + midiInputPlugins->setAccel(shortcuts[SHRT_RANDOM_RHYTHM_GENERATOR].key, 4); + + addTrack->setAccel(shortcuts[SHRT_ADD_MIDI_TRACK].key, Track::MIDI); + addTrack->setAccel(shortcuts[SHRT_ADD_DRUM_TRACK].key, Track::DRUM); + addTrack->setAccel(shortcuts[SHRT_ADD_WAVE_TRACK].key, Track::WAVE); + addTrack->setAccel(shortcuts[SHRT_ADD_AUDIO_OUTPUT].key, Track::AUDIO_OUTPUT); + addTrack->setAccel(shortcuts[SHRT_ADD_AUDIO_GROUP].key, Track::AUDIO_GROUP); + addTrack->setAccel(shortcuts[SHRT_ADD_AUDIO_INPUT].key, Track::AUDIO_INPUT); + addTrack->setAccel(shortcuts[SHRT_ADD_AUDIO_AUX].key, Track::AUDIO_AUX); + } + +//--------------------------------------------------------- +// 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, unsigned, bool)), bigtime, SLOT(setPos(int, unsigned, 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); + menuView->setItemChecked(bt_id, on); + } + +//--------------------------------------------------------- +// toggleBigTime +//--------------------------------------------------------- + +void MusE::toggleBigTime() + { + showBigtime(!menuView->isItemChecked(bt_id)); + } + +//--------------------------------------------------------- +// bigtimeClosed +//--------------------------------------------------------- + +void MusE::bigtimeClosed() + { + menuView->setItemChecked(bt_id, false); + } + +//--------------------------------------------------------- +// showMixer +//--------------------------------------------------------- + +/* +void MusE::showMixer(bool on) + { + if (on && audioMixer == 0) { + audioMixer = new AudioMixerApp(this); + connect(audioMixer, SIGNAL(closed()), SLOT(mixerClosed())); + audioMixer->resize(config.geometryMixer.size()); + audioMixer->move(config.geometryMixer.topLeft()); + } + if (audioMixer) + audioMixer->setShown(on); + menuView->setItemChecked(aid1, on); + } +*/ + +//--------------------------------------------------------- +// showMixer1 +//--------------------------------------------------------- + +void MusE::showMixer1(bool on) + { + if (on && mixer1 == 0) { + mixer1 = new AudioMixerApp(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); + menuView->setItemChecked(aid1a, on); + } + +//--------------------------------------------------------- +// showMixer2 +//--------------------------------------------------------- + +void MusE::showMixer2(bool on) + { + if (on && mixer2 == 0) { + mixer2 = new AudioMixerApp(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); + menuView->setItemChecked(aid1b, on); + } + +//--------------------------------------------------------- +// toggleMixer +//--------------------------------------------------------- + +/* +void MusE::toggleMixer() + { + showMixer(!menuView->isItemChecked(aid1)); + } +*/ + +//--------------------------------------------------------- +// toggleMixer1 +//--------------------------------------------------------- + +void MusE::toggleMixer1() + { + printf("toggle mixer1\n"); + //showMixer1(!menuView->isItemChecked(aid1a)); + showMixer1(true); + } + +//--------------------------------------------------------- +// toggleMixer2 +//--------------------------------------------------------- + +void MusE::toggleMixer2() + { + showMixer2(!menuView->isItemChecked(aid1b)); + } + +//--------------------------------------------------------- +// mixerClosed +//--------------------------------------------------------- + +/* +void MusE::mixerClosed() + { + menuView->setItemChecked(aid1, false); + } +*/ + +//--------------------------------------------------------- +// mixer1Closed +//--------------------------------------------------------- + +void MusE::mixer1Closed() + { + //aid1a->setChecked(false); + menuView->setItemChecked(aid1a, false); + } + +//--------------------------------------------------------- +// mixer2Closed +//--------------------------------------------------------- + +void MusE::mixer2Closed() + { + //aid1b->setChecked(false); + menuView->setItemChecked(aid1b, false); + } + + +//QWidget* MusE::mixerWindow() { return audioMixer; } +QWidget* MusE::mixer1Window() { return mixer1; } +QWidget* MusE::mixer2Window() { return mixer2; } + +QWidget* MusE::transportWindow() { return transport; } +QWidget* MusE::bigtimeWindow() { return bigtime; } + +//--------------------------------------------------------- +// focusInEvent +//--------------------------------------------------------- + +void MusE::focusInEvent(QFocusEvent* ev) + { + //if (audioMixer) + // audioMixer->raise(); + if (mixer1) + mixer1->raise(); + if (mixer2) + mixer2->raise(); + raise(); + Q3MainWindow::focusInEvent(ev); + } + +//--------------------------------------------------------- +// setUsedTool +//--------------------------------------------------------- + +void MusE::setUsedTool(int tool) + { + tools1->set(tool); + } + + +//--------------------------------------------------------- +// execDeliveredScript +//--------------------------------------------------------- +void MusE::execDeliveredScript(int id) +{ + //QString scriptfile = QString(INSTPREFIX) + SCRIPTSSUFFIX + deliveredScriptNames[id]; + song->executeScript(song->getScriptPath(id, true), song->getSelectedMidiParts(), 0, false); // TODO: get quant from arranger +} +//--------------------------------------------------------- +// execUserScript +//--------------------------------------------------------- +void MusE::execUserScript(int id) +{ + song->executeScript(song->getScriptPath(id, false), song->getSelectedMidiParts(), 0, false); // TODO: get quant from arranger +} + diff --git a/muse2/muse/app.cpp.orig b/muse2/muse/app.cpp.orig new file mode 100644 index 00000000..219f59bd --- /dev/null +++ b/muse2/muse/app.cpp.orig @@ -0,0 +1,3969 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: app.cpp,v 1.113.2.68 2009/12/21 14:51:51 spamatica Exp $ +// +// (C) Copyright 1999-2004 Werner Schweer (ws@seh.de) +//========================================================= + +#include "config.h" + +#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 "app.h" +#include "transport.h" +#include "bigtime.h" +#include "arranger.h" +#include "pianoroll.h" +#include "xml.h" +#include "midi.h" +#include "conf.h" +#include "listedit.h" +#include "master/masteredit.h" +#include "master/lmaster.h" +#include "drumedit.h" +#include "ttoolbar.h" +#include "amixer.h" +#include "cliplist/cliplist.h" +#include "midiport.h" +#include "audiodev.h" +#include "mididev.h" +#include "waveedit.h" +#include "icons.h" +#include "minstrument.h" +#include "mixdowndialog.h" +#include "midictrl.h" +#include "filedialog.h" +#include "plugin.h" +#include "marker/markerview.h" +#include "transpose.h" +#include "appearance.h" +#include "gatetime.h" +#include "metronome.h" +#include "debug.h" +#include "event.h" +#include "audio.h" +#include "midiseq.h" +#include "audioprefetch.h" +#include "wave.h" +#include "shortcutconfig.h" +#include "gconfig.h" +#include "driver/jackaudio.h" +#include "track.h" +#include "ticksynth.h" +#include "instruments/editinstrument.h" +#include "synth.h" +#include "remote/pyapi.h" +#include "al/dsp.h" + +#ifdef DSSI_SUPPORT +#include "dssihost.h" +#endif + +#ifdef VST_SUPPORT +#include "vst.h" +#endif + +#include +#include "songinfo.h" +#include "didyouknow.h" +#include + +//extern void cacheJackRouteNames(); + +static pthread_t watchdogThread; +//ErrorHandler *error; +static const char* fileOpenText = + QT_TR_NOOP("Click this button to open a new song.
" + "You can also select the Open command from the File menu."); +static const char* fileSaveText = + QT_TR_NOOP("Click this button to save the song you are " + "editing. You will be prompted for a file name.\n" + "You can also select the Save command from the File menu."); +static const char* fileNewText = QT_TR_NOOP("Create New Song"); + +static const char* infoLoopButton = QT_TR_NOOP("loop between left mark and right mark"); +static const char* infoPunchinButton = QT_TR_NOOP("record starts at left mark"); +static const char* infoPunchoutButton = QT_TR_NOOP("record stops at right mark"); +static const char* infoStartButton = QT_TR_NOOP("rewind to start position"); +static const char* infoRewindButton = QT_TR_NOOP("rewind current position"); +static const char* infoForwardButton = QT_TR_NOOP("move current position"); +static const char* infoStopButton = QT_TR_NOOP("stop sequencer"); +static const char* infoPlayButton = QT_TR_NOOP("start sequencer play"); +static const char* infoRecordButton = QT_TR_NOOP("to record press record and then play"); +static const char* infoPanicButton = QT_TR_NOOP("send note off to all midi channels"); + +#define PROJECT_LIST_LEN 6 +static QString* projectList[PROJECT_LIST_LEN]; + +extern void initIcons(); +extern void initMidiSynth(); +extern bool initJackAudio(); +extern void exitJackAudio(); +extern bool initDummyAudio(); +extern void exitDummyAudio(); +extern void initVST_fst_init(); +extern void initVST(); +extern void initDSSI(); + +#ifdef HAVE_LASH +#include +lash_client_t * lash_client = 0; +extern snd_seq_t * alsaSeq; +#endif /* HAVE_LASH */ + +int watchAudio, watchAudioPrefetch, watchMidi; +pthread_t splashThread; + + +//PyScript *pyscript; +// void MusE::runPythonScript() +// { +// QString script("test.py"); +// // pyscript->runPythonScript(script); +// } + +//--------------------------------------------------------- +// getCapabilities +//--------------------------------------------------------- + +static void getCapabilities() + { +#ifdef RTCAP +#ifdef __linux__ + const char* napp = getenv("GIVERTCAP"); + if (napp == 0) + napp = "givertcap"; + int pid = fork(); + if (pid == 0) { + if (execlp(napp, napp, 0) == -1) + perror("exec givertcap failed"); + } + else if (pid == -1) { + perror("fork givertcap failed"); + } + else { + waitpid(pid, 0, 0); + } +#endif // __linux__ +#endif + } + + +//--------------------------------------------------------- +// sleep function +//--------------------------------------------------------- +void microSleep(long msleep) +{ + bool sleepOk=-1; + + while(sleepOk==-1) + sleepOk=usleep(msleep); +} + +// Removed p3.3.17 +/* +//--------------------------------------------------------- +// watchdog thread +//--------------------------------------------------------- + +static void* watchdog(void*) + { + doSetuid(); + + struct sched_param rt_param; + memset(&rt_param, 0, sizeof(rt_param)); + rt_param.sched_priority = sched_get_priority_max(SCHED_FIFO); + int rv = pthread_setschedparam(pthread_self(), SCHED_FIFO, &rt_param); + if (rv != 0) + perror("Set realtime scheduler"); + + int policy; + if (pthread_getschedparam(pthread_self(), &policy, &rt_param)!= 0) { + printf("Cannot get current client scheduler: %s\n", strerror(errno)); + } + if (policy != SCHED_FIFO) + printf("watchdog process %d _NOT_ running SCHED_FIFO\n", getpid()); + else if (debugMsg) + printf("watchdog set to SCHED_FIFO priority %d\n", + sched_get_priority_max(SCHED_FIFO)); + + undoSetuid(); + int fatal = 0; + for (;;) { + watchAudio = 0; + watchMidi = 0; + static const int WD_TIMEOUT = 3; + + // sleep can be interrpted by signals: + int to = WD_TIMEOUT; + while (to > 0) + to = sleep(to); + + bool timeout = false; + if (midiSeqRunning && watchMidi == 0) + { + printf("midiSeqRunning = %i watchMidi %i\n", midiSeqRunning, watchMidi); + timeout = true; + } + if (watchAudio == 0) + timeout = true; + if (watchAudio > 500000) + timeout = true; + if (timeout) + ++fatal; + else + fatal = 0; + if (fatal >= 3) { + printf("WatchDog: fatal error, realtime task timeout\n"); + printf(" (%d,%d-%d) - stopping all services\n", + watchMidi, watchAudio, fatal); + break; + } +// printf("wd %d %d %d\n", watchMidi, watchAudio, fatal); + } + audio->stop(true); + audioPrefetch->stop(true); + printf("watchdog exit\n"); + exit(-1); + } +*/ + +//--------------------------------------------------------- +// seqStart +//--------------------------------------------------------- + +bool MusE::seqStart() + { + // Changed by Tim. p3.3.17 + + /* + if (audio->isRunning()) { + printf("seqStart(): already running\n"); + return true; + } + + if (realTimeScheduling) { + // + // create watchdog thread with max priority + // + doSetuid(); + struct sched_param rt_param; + memset(&rt_param, 0, sizeof(rt_param)); + rt_param.sched_priority = realTimePriority +1;//sched_get_priority_max(SCHED_FIFO); + + pthread_attr_t* attributes = (pthread_attr_t*) malloc(sizeof(pthread_attr_t)); + pthread_attr_init(attributes); + +// if (pthread_attr_setschedpolicy(attributes, SCHED_FIFO)) { +// printf("MusE: cannot set FIFO scheduling class for RT thread\n"); +// } +// if (pthread_attr_setschedparam (attributes, &rt_param)) { +// // printf("Cannot set scheduling priority for RT thread (%s)\n", strerror(errno)); +// } +// if (pthread_attr_setscope (attributes, PTHREAD_SCOPE_SYSTEM)) { +// printf("MusE: Cannot set scheduling scope for RT thread\n"); +// } + if (pthread_create(&watchdogThread, attributes, ::watchdog, 0)) + perror("MusE: creating watchdog thread failed:"); + pthread_attr_destroy(attributes); + undoSetuid(); + } + audioPrefetch->start(); + audioPrefetch->msgSeek(0, true); // force + midiSeqRunning = !midiSeq->start(); + + if (!audio->start()) { + QMessageBox::critical( muse, tr(QString("Failed to start audio!")), + tr(QString("Was not able to start audio, check if jack is running.\n"))); + return false; + } + + return true; + */ + + if (audio->isRunning()) { + printf("seqStart(): already running\n"); + return true; + } + + if (!audio->start()) { + QMessageBox::critical( muse, tr(QString("Failed to start audio!")), + tr(QString("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) + if(audio->isRunning()) + break; + sleep(1); + } + //if (audioState != AUDIO_START2) { + if(!audio->isRunning()) + { + QMessageBox::critical( muse, tr("Failed to start audio!"), + tr("Timeout waiting for audio to run. Check if jack is running.\n")); + } + // + // now its safe to ask the driver for realtime + // priority + + realTimePriority = audioDevice->realtimePriority(); + if(debugMsg) + printf("MusE::seqStart: getting audio driver realTimePriority:%d\n", realTimePriority); + + // Disabled by Tim. p3.3.22 + /* + if(realTimeScheduling) + { + // + // create watchdog thread with max priority + // + doSetuid(); + struct sched_param rt_param; + memset(&rt_param, 0, sizeof(rt_param)); + rt_param.sched_priority = realTimePriority + 1;//sched_get_priority_max(SCHED_FIFO); + + pthread_attr_t* attributes = (pthread_attr_t*) malloc(sizeof(pthread_attr_t)); + pthread_attr_init(attributes); + +// if (pthread_attr_setschedpolicy(attributes, SCHED_FIFO)) { +// printf("MusE: cannot set FIFO scheduling class for RT thread\n"); +// } +// if (pthread_attr_setschedparam (attributes, &rt_param)) { +// // printf("Cannot set scheduling priority for RT thread (%s)\n", strerror(errno)); +// } +// if (pthread_attr_setscope (attributes, PTHREAD_SCOPE_SYSTEM)) { +// printf("MusE: Cannot set scheduling scope for RT thread\n"); +// } + if (pthread_create(&watchdogThread, attributes, ::watchdog, 0)) + perror("MusE: creating watchdog thread failed"); + pthread_attr_destroy(attributes); + undoSetuid(); + } + */ + + //int policy; + //if ((policy = sched_getscheduler (0)) < 0) { + // printf("Cannot get current client scheduler: %s\n", strerror(errno)); + // } + //if (policy != SCHED_FIFO) + // printf("midi thread %d _NOT_ running SCHED_FIFO\n", getpid()); + + + //audioState = AUDIO_RUNNING; + // Changed by Tim. p3.3.22 + /* + //if(realTimePriority) + if(realTimeScheduling) + { + int pr = realTimePriority; + if(pr > 5) + pr -= 5; + else + pr = 0; + audioPrefetch->start(pr); + //audioWriteback->start(realTimePriority - 5); + } + else + { + audioPrefetch->start(0); + //audioWriteback->start(0); + } + */ + int pfprio = 0; + int midiprio = 0; + if(realTimeScheduling) + { + if(realTimePriority < 5) + printf("MusE: WARNING: Recommend setting audio realtime priority to at least 5!\n"); + if(realTimePriority == 1) + { + pfprio = 2; + midiprio = 3; + } + else + if(realTimePriority == 2) + { + pfprio = 1; + midiprio = 3; + } + else + if(realTimePriority == 3) + { + pfprio = 1; + //midiprio = 2; + // p3.3.37 + midiprio = 4; + } + else + if(realTimePriority == 4) + { + pfprio = 1; + //midiprio = 3; + // p3.3.37 + midiprio = 5; + } + else + if(realTimePriority == 5) + { + pfprio = 1; + //midiprio = 3; + // p3.3.37 + midiprio = 6; + } + else + { + pfprio = realTimePriority - 5; + //midiprio = realTimePriority - 2; + // p3.3.37 + midiprio = realTimePriority + 1; + } + } + + if(midiRTPrioOverride > 0) + midiprio = midiRTPrioOverride; + + // FIXME FIXME: The realTimePriority of the Jack thread seems to always be 5 less than the value passed to jackd command. + //if(midiprio == realTimePriority) + // printf("MusE: WARNING: Midi realtime priority %d is the same as audio realtime priority %d. Try a different setting.\n", + // midiprio, realTimePriority); + //if(midiprio == pfprio) + // printf("MusE: WARNING: Midi realtime priority %d is the same as audio prefetch realtime priority %d. Try a different setting.\n", + // midiprio, pfprio); + + audioPrefetch->start(pfprio); + + audioPrefetch->msgSeek(0, true); // force + + //midiSeqRunning = !midiSeq->start(realTimeScheduling ? realTimePriority : 0); + // Changed by Tim. p3.3.22 + //midiSeq->start(realTimeScheduling ? realTimePriority : 0); + midiSeq->start(midiprio); + + int counter=0; + while (++counter) { + //if (counter > 10) { + if (counter > 1000) { + fprintf(stderr,"midi sequencer thread does not start!? Exiting...\n"); + exit(33); + } + midiSeqRunning = midiSeq->isRunning(); + if (midiSeqRunning) + break; + usleep(1000); + printf("looping waiting for sequencer thread to start\n"); + } + if(!midiSeqRunning) + { + fprintf(stderr, "midiSeq is not running! Exiting...\n"); + exit(33); + } + return true; + } + +//--------------------------------------------------------- +// stop +//--------------------------------------------------------- + +void MusE::seqStop() + { + // label sequencer as disabled before it actually happened to minimize race condition + midiSeqRunning = false; + + song->setStop(true); + song->setStopPlay(false); + midiSeq->stop(true); + audio->stop(true); + audioPrefetch->stop(true); + if (realTimeScheduling && watchdogThread) + pthread_cancel(watchdogThread); + } + +//--------------------------------------------------------- +// seqRestart +//--------------------------------------------------------- + +bool MusE::seqRestart() +{ + bool restartSequencer = audio->isRunning(); + if (restartSequencer) { + if (audio->isPlaying()) { + audio->msgPlay(false); + while (audio->isPlaying()) + qApp->processEvents(); + } + seqStop(); + } + if(!seqStart()) + return false; + + audioDevice->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); + } + +//--------------------------------------------------------- +// populateAddSynth +//--------------------------------------------------------- + +/* +struct addSynth_cmp_str +{ + bool operator()(std::string a, std::string b) + { + return (a < b); + } +}; +*/ + +QPopupMenu* populateAddSynth(QWidget* parent, QObject* obj = 0, const char* slot = 0) +{ + QPopupMenu* synp = new QPopupMenu(parent); + + //typedef std::multimap asmap; + typedef std::multimap asmap; + + //typedef std::multimap::iterator imap; + typedef std::multimap::iterator imap; + + MessSynth* synMESS = 0; + QPopupMenu* synpMESS = 0; + asmap mapMESS; + + #ifdef DSSI_SUPPORT + DssiSynth* synDSSI = 0; + QPopupMenu* synpDSSI = 0; + asmap mapDSSI; + #endif + + #ifdef VST_SUPPORT + VstSynth* synVST = 0; + QPopupMenu* synpVST = 0; + asmap mapVST; + #endif + + // Not neccessary, but what the heck. + QPopupMenu* synpOther = 0; + asmap mapOther; + + //const int synth_base_id = 0x1000; + int ii = 0; + for(std::vector::iterator i = synthis.begin(); i != synthis.end(); ++i) + { + synMESS = dynamic_cast(*i); + if(synMESS) + { + mapMESS.insert( std::pair (std::string(synMESS->description().lower().latin1()), ii) ); + } + else + { + + #ifdef DSSI_SUPPORT + synDSSI = dynamic_cast(*i); + if(synDSSI) + { + mapDSSI.insert( std::pair (std::string(synDSSI->description().lower().latin1()), ii) ); + } + else + #endif + + { + #ifdef VST_SUPPORT + synVST = dynamic_cast(*i); + if(synVST) + { + mapVST.insert( std::pair (std::string(synVST->description().lower().latin1()), ii) ); + } + else + #endif + + { + mapOther.insert( std::pair (std::string((*i)->description().lower().latin1()), ii) ); + } + } + } + + ++ii; + } + + int sz = synthis.size(); + for(imap i = mapMESS.begin(); i != mapMESS.end(); ++i) + { + int idx = i->second; + if(idx > sz) // Sanity check + continue; + Synth* s = synthis[idx]; + if(s) + { + // No MESS sub-menu yet? Create it now. + if(!synpMESS) + synpMESS = new QPopupMenu(parent); + synpMESS->insertItem(QT_TR_NOOP(s->description()) + " <" + QT_TR_NOOP(s->name()) + ">", MENU_ADD_SYNTH_ID_BASE + idx); + } + } + + #ifdef DSSI_SUPPORT + for(imap i = mapDSSI.begin(); i != mapDSSI.end(); ++i) + { + int idx = i->second; + if(idx > sz) + continue; + Synth* s = synthis[idx]; + if(s) + { + // No DSSI sub-menu yet? Create it now. + if(!synpDSSI) + synpDSSI = new QPopupMenu(parent); + synpDSSI->insertItem(QT_TR_NOOP(s->description()) + " <" + QT_TR_NOOP(s->name()) + ">", MENU_ADD_SYNTH_ID_BASE + idx); + } + } + #endif + + #ifdef VST_SUPPORT + for(imap i = mapVST.begin(); i != mapVST.end(); ++i) + { + int idx = i->second; + if(idx > sz) + continue; + Synth* s = synthis[idx]; + if(s) + { + // No VST sub-menu yet? Create it now. + if(!synpVST) + synpVST = new QPopupMenu(parent); + synpVST->insertItem(QT_TR_NOOP(s->description()) + " <" + QT_TR_NOOP(s->name()) + ">", MENU_ADD_SYNTH_ID_BASE + idx); + } + } + #endif + + for(imap i = mapOther.begin(); i != mapOther.end(); ++i) + { + int idx = i->second; + if(idx > sz) + continue; + Synth* s = synthis[idx]; + // No Other sub-menu yet? Create it now. + if(!synpOther) + synpOther = new QPopupMenu(parent); + synpOther->insertItem(QT_TR_NOOP(s->description()) + " <" + QT_TR_NOOP(s->name()) + ">", MENU_ADD_SYNTH_ID_BASE + idx); + } + + if(synpMESS) + { + synp->insertItem(*synthIcon, QT_TR_NOOP("MESS"), synpMESS, Track::AUDIO_SOFTSYNTH); + if(obj && slot) + QObject::connect(synpMESS, SIGNAL(activated(int)), obj, slot); + } + + #ifdef DSSI_SUPPORT + if(synpDSSI) + { + synp->insertItem(*synthIcon, QT_TR_NOOP("DSSI"), synpDSSI, Track::AUDIO_SOFTSYNTH); + if(obj && slot) + QObject::connect(synpDSSI, SIGNAL(activated(int)), obj, slot); + } + #endif + + #ifdef VST_SUPPORT + if(synpVST) + { + synp->insertItem(*synthIcon, QT_TR_NOOP("FST"), synpVST, Track::AUDIO_SOFTSYNTH); + if(obj && slot) + QObject::connect(synpVST, SIGNAL(activated(int)), obj, slot); + } + #endif + + if(synpOther) + { + synp->insertItem(*synthIcon, QObject::tr("Other"), synpOther, Track::AUDIO_SOFTSYNTH); + if(obj && slot) + QObject::connect(synpOther, SIGNAL(activated(int)), obj, slot); + } + + return synp; +} + +//--------------------------------------------------------- +// populateAddTrack +// this is also used in "mixer" +//--------------------------------------------------------- + +void populateAddTrack(QPopupMenu* addTrack) + { + addTrack->insertItem(QIconSet(*addtrack_addmiditrackIcon), + QT_TR_NOOP("Add Midi Track"), Track::MIDI); + addTrack->insertItem(QIconSet(*addtrack_drumtrackIcon), + QT_TR_NOOP("Add Drum Track"), Track::DRUM); + addTrack->insertItem(QIconSet(*addtrack_wavetrackIcon), + QT_TR_NOOP("Add Wave Track"), Track::WAVE); + addTrack->insertItem(QIconSet(*addtrack_audiooutputIcon), + QT_TR_NOOP("Add Audio Output"), Track::AUDIO_OUTPUT); + addTrack->insertItem(QIconSet(*addtrack_audiogroupIcon), + QT_TR_NOOP("Add Audio Group"), Track::AUDIO_GROUP); + addTrack->insertItem(QIconSet(*addtrack_audioinputIcon), + QT_TR_NOOP("Add Audio Input"), Track::AUDIO_INPUT); + addTrack->insertItem(QIconSet(*addtrack_auxsendIcon), + QT_TR_NOOP("Add Aux Send"), Track::AUDIO_AUX); + + // Create a sub-menu and fill it with found synth types. Make addTrack the owner. + QPopupMenu* synp = populateAddSynth(addTrack, song, SLOT(addNewTrack(int))); + // Add the sub-menu to the given menu. + addTrack->insertItem(*synthIcon, QT_TR_NOOP("Add Synth"), synp, Track::AUDIO_SOFTSYNTH); + + //addTrack->connect(addTrack, SIGNAL(activated(int)), song, SLOT(addTrack(int))); + addTrack->connect(addTrack, SIGNAL(activated(int)), song, SLOT(addNewTrack(int))); + //synp->connect(synp, SIGNAL(activated(int)), song, SLOT(addNewTrack(int))); + } + +//--------------------------------------------------------- +// MusE +//--------------------------------------------------------- + +MusE::MusE(int argc, char** argv) : QMainWindow(0, "mainwindow") + { + // By T356. For LADSPA plugins in plugin.cpp + QWidgetFactory::addWidgetFactory( new PluginWidgetFactory ); + + setFocusPolicy(WheelFocus); + muse = this; // hack + clipListEdit = 0; + midiSyncConfig = 0; + midiRemoteConfig = 0; + midiPortConfig = 0; + metronomeConfig = 0; + audioConfig = 0; + midiFileConfig = 0; + midiFilterConfig = 0; + midiInputTransform = 0; + midiRhythmGenerator = 0; + globalSettingsConfig = 0; + markerView = 0; + softSynthesizerConfig = 0; + midiTransformerDialog = 0; + shortcutConfig = 0; + appearance = 0; + //audioMixer = 0; + mixer1 = 0; + mixer2 = 0; + watchdogThread = 0; + editInstrument = 0; + + appName = QString("MusE"); + + song = new Song("song"); + song->blockSignals(true); + heartBeatTimer = new QTimer(this, "timer"); + connect(heartBeatTimer, SIGNAL(timeout()), song, SLOT(beat())); + +#ifdef ENABLE_PYTHON + //--------------------------------------------------- + // Python bridge + //--------------------------------------------------- + // Uncomment in order to enable MusE Python bridge: + if (usePythonBridge) { + printf("Initializing python bridge!\n"); + if (initPythonBridge() == false) { + printf("Could not initialize Python bridge\n"); + exit(1); + } + } +#endif + + //--------------------------------------------------- + // undo/redo + //--------------------------------------------------- + undoRedo = new QActionGroup(this, tr("UndoRedo"), false); + undoAction = new QAction(tr("undo"), QIconSet(*undoIconS, *undoIcon), tr("Und&o"), + CTRL+Key_Z, undoRedo, "undo"); + redoAction = new QAction(tr("redo"), QIconSet(*redoIconS, *redoIcon), tr("Re&do"), + CTRL+Key_Y, undoRedo, "redo"); + undoAction->setWhatsThis(tr("undo last change to song")); + redoAction->setWhatsThis(tr("redo last undo")); + undoAction->setEnabled(false); + redoAction->setEnabled(false); + connect(redoAction, SIGNAL(activated()), song, SLOT(redo())); + connect(undoAction, SIGNAL(activated()), song, SLOT(undo())); + + //--------------------------------------------------- + // Transport + //--------------------------------------------------- + + transportAction = new QActionGroup(this, tr("Transport"), false); + + loopAction = new QAction(tr("loop"), QIconSet(*loop1Icon), + tr("Loop"), 0, transportAction, "loop", true); + loopAction->setWhatsThis(tr(infoLoopButton)); + connect(loopAction, SIGNAL(toggled(bool)), song, SLOT(setLoop(bool))); + + punchinAction = new QAction(tr("punchin"), QIconSet(*punchin1Icon), + tr("Punchin"), 0, transportAction, "Punchin", true); + punchinAction->setWhatsThis(tr(infoPunchinButton)); + connect(punchinAction, SIGNAL(toggled(bool)), song, SLOT(setPunchin(bool))); + + punchoutAction = new QAction(tr("punchout"), QIconSet(*punchout1Icon), + tr("Punchout"), 0, transportAction, "punchout", true); + punchoutAction->setWhatsThis(tr(infoPunchoutButton)); + connect(punchoutAction, SIGNAL(toggled(bool)), song, SLOT(setPunchout(bool))); + + transportAction->addSeparator(); + + startAction = new QAction(tr("start"), QIconSet(*startIcon), + tr("Start"), 0, transportAction, "start"); + startAction->setWhatsThis(tr(infoStartButton)); + connect(startAction, SIGNAL(activated()), song, SLOT(rewindStart())); + + rewindAction = new QAction(tr("rewind"), QIconSet(*frewindIcon), + tr("Rewind"), 0, transportAction, "rewind"); + rewindAction->setWhatsThis(tr(infoRewindButton)); + connect(rewindAction, SIGNAL(activated()), song, SLOT(rewind())); + + forwardAction = new QAction(tr("forward"), QIconSet(*fforwardIcon), + tr("Forward"), 0, transportAction, "forward"); + forwardAction->setWhatsThis(tr(infoForwardButton)); + connect(forwardAction, SIGNAL(activated()), song, SLOT(forward())); + + stopAction = new QAction(tr("stop"), QIconSet(*stopIcon), + tr("Stop"), 0, transportAction, "stop", true); + stopAction->setWhatsThis(tr(infoStopButton)); + stopAction->setOn(true); + connect(stopAction, SIGNAL(toggled(bool)), song, SLOT(setStop(bool))); + + playAction = new QAction(tr("play"), QIconSet(*playIcon), + tr("Play"), 0, transportAction, "play", true); + playAction->setWhatsThis(tr(infoPlayButton)); + playAction->setOn(false); + connect(playAction, SIGNAL(toggled(bool)), song, SLOT(setPlay(bool))); + + recordAction = new QAction(tr("record"), QIconSet(*recordIcon), + tr("Record"), 0, transportAction, "record", true); + recordAction->setWhatsThis(tr(infoRecordButton)); + connect(recordAction, SIGNAL(toggled(bool)), song, SLOT(setRecord(bool))); + + panicAction = new QAction(tr("panic"), QIconSet(*panicIcon), + tr("Panic"), 0, 0, "panic", false); + panicAction->setWhatsThis(tr(infoPanicButton)); + connect(panicAction, SIGNAL(activated()), song, SLOT(panic())); + + initMidiInstruments(); + initMidiPorts(); + ::initMidiDevices(); + + //----Actions + + fileNewAction = new QAction(tr("new"), + QIconSet(*filenewIconS, *filenewIcon), tr("&New"), 0, this, "new"); + fileNewAction->setToolTip(tr(fileNewText)); + fileNewAction->setWhatsThis(tr(fileNewText)); + + fileOpenAction = new QAction(tr("open"), + QIconSet(*openIconS, *openIcon), tr("&Open"), 0, this, "open"); + fileOpenAction->setToolTip(tr(fileOpenText)); + fileOpenAction->setWhatsThis(tr(fileOpenText)); + + fileSaveAction = new QAction(tr("save"), + QIconSet(*saveIconS, *saveIcon), tr("&Save"), 0, this, "save"); + fileSaveAction->setToolTip(tr(fileSaveText)); + fileSaveAction->setWhatsThis(tr(fileSaveText)); + + pianoAction = new QAction(tr("pianoroll"), + *pianoIconSet, tr("Pianoroll"), 0, this, "pianoroll"); + connect(pianoAction, SIGNAL(activated()), SLOT(startPianoroll())); + +// markerAction = new QAction(tr("marker"), QIconSet(*view_markerIcon), tr("Marker"), +// 0, this, "marker"); +// connect(markerAction, SIGNAL(activated()), SLOT(startMarkerView())); + + connect(fileNewAction, SIGNAL(activated()), SLOT(loadTemplate())); + connect(fileOpenAction, SIGNAL(activated()), SLOT(loadProject())); + connect(fileSaveAction, SIGNAL(activated()), SLOT(save())); + + //-------------------------------------------------- + // Toolbar + //-------------------------------------------------- + + tools = new QToolBar(tr("File Buttons"), this); + fileNewAction->addTo(tools); + fileOpenAction->addTo(tools); + fileSaveAction->addTo(tools); + + // + // Whats This + // + QWhatsThis::whatsThisButton(tools); + + tools->addSeparator(); + undoRedo->addTo(tools); + + tools1 = new EditToolBar(this, arrangerTools); + + QToolBar* transportToolbar = new QToolBar(this); + transportAction->addTo(transportToolbar); + + QToolBar* panicToolbar = new QToolBar(this); + panicAction->addTo(panicToolbar); + + if (realTimePriority < sched_get_priority_min(SCHED_FIFO)) + realTimePriority = sched_get_priority_min(SCHED_FIFO); + else if (realTimePriority > sched_get_priority_max(SCHED_FIFO)) + realTimePriority = sched_get_priority_max(SCHED_FIFO); + + // If we requested to force the midi thread priority... + if(midiRTPrioOverride > 0) + { + if (midiRTPrioOverride < sched_get_priority_min(SCHED_FIFO)) + midiRTPrioOverride = sched_get_priority_min(SCHED_FIFO); + else if (midiRTPrioOverride > sched_get_priority_max(SCHED_FIFO)) + midiRTPrioOverride = sched_get_priority_max(SCHED_FIFO); + } + + // Changed by Tim. p3.3.17 + //midiSeq = new MidiSeq(realTimeScheduling ? realTimePriority : 0, "Midi"); + midiSeq = new MidiSeq("Midi"); + audio = new Audio(); + //audioPrefetch = new AudioPrefetch(0, "Disc"); + audioPrefetch = new AudioPrefetch("Prefetch"); + + //--------------------------------------------------- + // Popups + //--------------------------------------------------- + +// QPopupMenu *foo = new QPopupMenu(this); +// testAction = new QAction(foo,"testPython"); +// testAction->addTo(foo); +// menuBar()->insertItem(tr("&testpython"), foo); +// connect(testAction, SIGNAL(activated()), this, SLOT(runPythonScript())); + + + //------------------------------------------------------------- + // popup File + //------------------------------------------------------------- + + menu_file = new QPopupMenu(this); + menuBar()->insertItem(tr("&File"), menu_file); + fileNewAction->addTo(menu_file); + fileOpenAction->addTo(menu_file); + openRecent = new QPopupMenu(menu_file); + connect(openRecent, SIGNAL(aboutToShow()), this, SLOT(openRecentMenu())); + connect(openRecent, SIGNAL(activated(int)), this, SLOT(selectProject(int))); + menu_ids[CMD_OPEN_RECENT] = menu_file->insertItem(tr("Open &Recent"), openRecent, 0); + menu_file->insertSeparator(); + fileSaveAction->addTo(menu_file); + menu_ids[CMD_SAVE_AS] = menu_file->insertItem(tr("Save &As"), this, SLOT(saveAs()), 0, -2); + menu_file->insertSeparator(); + menu_ids[CMD_IMPORT_MIDI] = menu_file->insertItem(*openIconS, tr("Import Midifile"), this, SLOT(importMidi()), 0, -2); + menu_ids[CMD_EXPORT_MIDI] = menu_file->insertItem(*saveIconS, tr("Export Midifile"), this, SLOT(exportMidi()), 0, -2); + menu_ids[CMD_IMPORT_PART] = menu_file->insertItem(*openIconS, tr("Import Part"), this, SLOT(importPart()), 0, -2); + menu_file->insertSeparator(); + menu_ids[CMD_IMPORT_AUDIO] = menu_file->insertItem(*openIconS, tr("Import Wave File"), this, SLOT(importWave()), 0, -2); + + + menu_file->insertSeparator(); + menu_ids[CMD_QUIT] = menu_file->insertItem(*exitIconS, tr("&Quit"), this, SLOT(quitDoc()), 0, -2); + menu_file->insertSeparator(); + + //------------------------------------------------------------- + // popup Edit + //------------------------------------------------------------- + + menuEdit = new QPopupMenu(this); + undoRedo->addTo(menuEdit); + menuEdit->insertSeparator(); + menuBar()->insertItem(tr("&Edit"), menuEdit); + + menuEdit->insertItem(*editcutIconSet, tr("C&ut"), CMD_CUT); + menuEdit->setAccel(CTRL+Key_X, CMD_CUT); + menuEdit->insertItem(*editcopyIconSet, tr("&Copy"), CMD_COPY); + menuEdit->setAccel(CTRL+Key_C, CMD_COPY); + menuEdit->insertItem(*editpasteIconSet, tr("&Paste"), CMD_PASTE); + menuEdit->setAccel(CTRL+Key_V, CMD_PASTE); + menuEdit->insertItem(*editpasteCloneIconSet, tr("Paste c&lone"), CMD_PASTE_CLONE); + menuEdit->setAccel(CTRL+SHIFT+Key_V, CMD_PASTE_CLONE); + menuEdit->insertItem(*editpaste2TrackIconSet, tr("Paste to &track"), CMD_PASTE_TO_TRACK); + menuEdit->setAccel(CTRL+Key_B, CMD_PASTE_TO_TRACK); + menuEdit->insertItem(*editpasteClone2TrackIconSet, tr("Paste clone to trac&k"), CMD_PASTE_CLONE_TO_TRACK); + menuEdit->setAccel(CTRL+SHIFT+Key_B, CMD_PASTE_CLONE_TO_TRACK); + + menuEdit->insertSeparator(); + menuEdit->insertItem(QIconSet(*edit_track_delIcon), + tr("Delete Selected Tracks"), CMD_DELETE_TRACK); + + addTrack = new QPopupMenu(this); + // Moved below. Have to wait until synths are available... + //populateAddTrack(addTrack); + + menuEdit->insertItem(QIconSet(*edit_track_addIcon), + tr("Add Track"), addTrack); + + select = new QPopupMenu(this); + select->insertItem(QIconSet(*select_allIcon), + tr("Select &All"), CMD_SELECT_ALL); + select->insertItem(QIconSet(*select_deselect_allIcon), + tr("&Deselect All"), CMD_SELECT_NONE); + menuEdit->insertSeparator(); + select->insertItem(QIconSet(*select_invert_selectionIcon), + tr("Invert &Selection"), CMD_SELECT_INVERT); + select->insertItem(QIconSet(*select_inside_loopIcon), + tr("&Inside Loop"), CMD_SELECT_ILOOP); + select->insertItem(QIconSet(*select_outside_loopIcon), + tr("&Outside Loop"), CMD_SELECT_OLOOP); + select->insertItem(QIconSet(*select_all_parts_on_trackIcon), + tr("All &Parts on Track"), CMD_SELECT_PARTS); + menuEdit->insertItem(QIconSet(*selectIcon), + tr("Select"), select); + menuEdit->insertSeparator(); + + pianoAction->addTo(menuEdit); + menu_ids[CMD_OPEN_DRUMS] = menuEdit->insertItem( + QIconSet(*edit_drummsIcon), tr("Drums"), this, SLOT(startDrumEditor()), 0); + menu_ids[CMD_OPEN_LIST] = menuEdit->insertItem( + QIconSet(*edit_listIcon), tr("List"), this, SLOT(startListEditor()), 0); + menu_ids[CMD_OPEN_WAVE] = menuEdit->insertItem( + QIconSet(*edit_waveIcon), tr("Wave"), this, SLOT(startWaveEditor()), 0); + + master = new QPopupMenu(this); + master->setCheckable(false); + menu_ids[CMD_OPEN_GRAPHIC_MASTER] = master->insertItem( + QIconSet(*mastertrack_graphicIcon),tr("Graphic"), this, SLOT(startMasterEditor()), 0); + menu_ids[CMD_OPEN_LIST_MASTER] = master->insertItem( + QIconSet(*mastertrack_listIcon),tr("List"), this, SLOT(startLMasterEditor()), 0); + menuEdit->insertItem(QIconSet(*edit_mastertrackIcon), + tr("Mastertrack"), master, Key_F); + + menuEdit->insertSeparator(); + connect(menuEdit, SIGNAL(activated(int)), SLOT(cmd(int))); + connect(select, SIGNAL(activated(int)), SLOT(cmd(int))); + + midiEdit = new QPopupMenu(this); + midiEdit->setCheckable(false); +#if 0 // TODO + menu_ids[CMD_OPEN_MIDI_TRANSFORM] = midiEdit->insertItem( + QIconSet(*midi_transformIcon), tr("Midi &Transform"), this, SLOT(startMidiTransformer()), 0); + 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 + menu_ids[CMD_TRANSPOSE] = midiEdit->insertItem( + QIconSet(*midi_transposeIcon), tr("Transpose"), this, SLOT(transpose()), 0); + menuEdit->insertItem( + QIconSet(*edit_midiIcon), tr("Midi"), midiEdit); + + menuEdit->insertSeparator(); + menuEdit->insertItem( + QIconSet(*edit_listIcon), tr("Song info"), this, SLOT(startSongInfo()), 0); + //------------------------------------------------------------- + // popup View + //------------------------------------------------------------- + + menuView = new QPopupMenu(this); + menuView->setCheckable(true); + menuBar()->insertItem(tr("View"), menuView); + + tr_id = menuView->insertItem( + QIconSet(*view_transport_windowIcon), tr("Transport Panel"), this, SLOT(toggleTransport()), 0); + bt_id = menuView->insertItem( + QIconSet(*view_bigtime_windowIcon), tr("Bigtime window"), this, SLOT(toggleBigTime()), 0); + //aid1 = menuView->insertItem( + // QIconSet(*mixerSIcon), tr("Mixer"), this, SLOT(toggleMixer()), 0); + aid1a = menuView->insertItem( + QIconSet(*mixerSIcon), tr("Mixer A"), this, SLOT(toggleMixer1()), 0); + aid1b = menuView->insertItem( + QIconSet(*mixerSIcon), tr("Mixer B"), this, SLOT(toggleMixer2()), 0); + // p3.2.24 + aid2 = menuView->insertItem( + QIconSet(*cliplistSIcon), tr("Cliplist"), this, SLOT(startClipList()), 0); + mr_id = menuView->insertItem( + QIconSet(*view_markerIcon), tr("Marker View"), this, SLOT(toggleMarker()), 0); + //markerAction->addTo(menuView); + + + //------------------------------------------------------------- + // popup Structure + //------------------------------------------------------------- + + menuStructure = new QPopupMenu(this); + menuStructure->setCheckable(false); + menuBar()->insertItem(tr("&Structure"), menuStructure); + menu_ids[CMD_GLOBAL_CUT] = menuStructure->insertItem(tr("Global Cut"), this, SLOT(globalCut()), 0); + menu_ids[CMD_GLOBAL_INSERT] = menuStructure->insertItem(tr("Global Insert"), this, SLOT(globalInsert()), 0); + menu_ids[CMD_GLOBAL_SPLIT] = menuStructure->insertItem(tr("Global Split"), this, SLOT(globalSplit()), 0); + menu_ids[CMD_COPY_RANGE] = menuStructure->insertItem(tr("Copy Range"), this, SLOT(copyRange()), 0); + menuStructure->setItemEnabled(menu_ids[CMD_COPY_RANGE], false); + menuStructure->insertSeparator(); + menu_ids[CMD_CUT_EVENTS] = menuStructure->insertItem(tr("Cut Events"), this, SLOT(cutEvents()), 0); + menuStructure->setItemEnabled(menu_ids[CMD_CUT_EVENTS], false); + + //------------------------------------------------------------- + // popup Midi + //------------------------------------------------------------- + + midiInputPlugins = new QPopupMenu(this); + midiInputPlugins->setCheckable(false); + mpid0 = midiInputPlugins->insertItem( + QIconSet(*midi_inputplugins_transposeIcon), tr("Transpose"), 0); + mpid1 = midiInputPlugins->insertItem( + QIconSet(*midi_inputplugins_midi_input_transformIcon), tr("Midi Input Transform"), 1); + mpid2 = midiInputPlugins->insertItem( + QIconSet(*midi_inputplugins_midi_input_filterIcon), tr("Midi Input Filter"), 2); + mpid3 = midiInputPlugins->insertItem( + QIconSet(*midi_inputplugins_remote_controlIcon), tr("Midi Remote Control"), 3); +/* +** mpid4 = midiInputPlugins->insertItem( +** QIconSet(*midi_inputplugins_random_rhythm_generatorIcon), tr("Random Rhythm Generator"), 4); +*/ + connect(midiInputPlugins, SIGNAL(activated(int)), SLOT(startMidiInputPlugin(int))); + +// midiInputPlugins->setItemEnabled(mpid4, false); + + menu_functions = new QPopupMenu(this); + menu_functions->setCheckable(true); + menuBar()->insertItem(tr("&Midi"), menu_functions); + menu_functions->setCaption(tr("Midi")); + + menuScriptPlugins = new QPopupMenu(this); + song->populateScriptMenu(menuScriptPlugins, this); + menu_functions->insertItem(tr("&Plugins"), menuScriptPlugins); + + menu_ids[CMD_MIDI_EDIT_INSTRUMENTS] = menu_functions->insertItem( + QIconSet(*midi_edit_instrumentIcon), tr("Edit Instrument"), this, SLOT(startEditInstrument()), 0); + menu_functions->insertItem( + QIconSet(*midi_inputpluginsIcon), tr("Input Plugins"), midiInputPlugins, Key_P); + menu_functions->insertSeparator(); + menu_ids[CMD_MIDI_RESET] = menu_functions->insertItem( + QIconSet(*midi_reset_instrIcon), tr("Reset Instr."), this, SLOT(resetMidiDevices()), 0); + menu_ids[CMD_MIDI_INIT] = menu_functions->insertItem( + QIconSet(*midi_init_instrIcon), tr("Init Instr."), this, SLOT(initMidiDevices()), 0); + menu_ids[CMD_MIDI_LOCAL_OFF] = menu_functions->insertItem( + QIconSet(*midi_local_offIcon), tr("local off"), this, SLOT(localOff()), 0); + + //------------------------------------------------------------- + // popup Audio + //------------------------------------------------------------- + + menu_audio = new QPopupMenu(this); + menu_audio->setCheckable(true); + menuBar()->insertItem(tr("&Audio"), menu_audio); + menu_ids[CMD_AUDIO_BOUNCE_TO_TRACK] = menu_audio->insertItem( + QIconSet(*audio_bounce_to_trackIcon), tr("Bounce to Track"), this, SLOT(bounceToTrack()), 0); + menu_ids[CMD_AUDIO_BOUNCE_TO_FILE] = menu_audio->insertItem( + QIconSet(*audio_bounce_to_fileIcon), tr("Bounce to File"), this, SLOT(bounceToFile()), 0); + menu_audio->insertSeparator(); + menu_ids[CMD_AUDIO_RESTART] = menu_audio->insertItem( + QIconSet(*audio_restartaudioIcon), tr("Restart Audio"), this, SLOT(seqRestart()), 0); + + //------------------------------------------------------------- + // popup Automation + //------------------------------------------------------------- + + menuAutomation = new QPopupMenu(this); + menuAutomation->setCheckable(true); + menuBar()->insertItem(tr("Automation"), menuAutomation); + autoId = menuAutomation->insertItem( + QIconSet(*automation_mixerIcon), tr("Mixer Automation"), this, SLOT(switchMixerAutomation()), 0); + menuAutomation->insertSeparator(); + menu_ids[CMD_MIXER_SNAPSHOT] = menuAutomation->insertItem( + QIconSet(*automation_take_snapshotIcon), tr("Take Snapshot"), this, SLOT(takeAutomationSnapshot()), 0); + menu_ids[CMD_MIXER_AUTOMATION_CLEAR] = menuAutomation->insertItem( + QIconSet(*automation_clear_dataIcon), tr("Clear Automation Data"), this, SLOT(clearAutomation()), 0); + menuAutomation->setItemEnabled(menu_ids[CMD_MIXER_AUTOMATION_CLEAR], false); + + //------------------------------------------------------------- + // popup Settings + //------------------------------------------------------------- + + follow = new QPopupMenu(this); + follow->setCheckable(false); + fid0 = follow->insertItem(tr("dont follow Song"), CMD_FOLLOW_NO); + fid1 = follow->insertItem(tr("follow page"), CMD_FOLLOW_JUMP); + fid2 = follow->insertItem(tr("follow continuous"), CMD_FOLLOW_CONTINUOUS); + follow->setItemChecked(fid1, true); + connect(follow, SIGNAL(activated(int)), SLOT(cmd(int))); + + menuSettings = new QPopupMenu(this); + menuSettings->setCheckable(false); + menuBar()->insertItem(tr("Settings"), menuSettings); + menu_ids[CMD_GLOBAL_CONFIG] = menuSettings->insertItem( + QIconSet(*settings_globalsettingsIcon), tr("Global Settings"), this, SLOT(configGlobalSettings()),0); + menu_ids[CMD_CONFIG_SHORTCUTS] = menuSettings->insertItem( + QIconSet(*settings_configureshortcutsIcon), tr("Configure shortcuts"), this, SLOT(configShortCuts()), 0); + menuSettings->insertItem( + QIconSet(*settings_follow_songIcon), tr("follow song"), follow, Key_F); + menu_ids[CMD_CONFIG_METRONOME] = menuSettings->insertItem( + QIconSet(*settings_metronomeIcon), tr("Metronome"), this, SLOT(configMetronome()), 0); + menuSettings->insertSeparator(); + menu_ids[CMD_CONFIG_MIDISYNC] = menuSettings->insertItem( + QIconSet(*settings_midisyncIcon), tr("Midi Sync"), this, SLOT(configMidiSync()), 0); + menu_ids[CMD_MIDI_FILE_CONFIG] = menuSettings->insertItem( + QIconSet(*settings_midifileexportIcon), tr("Midi File Import/Export"), this, SLOT(configMidiFile()), 0); + menuSettings->insertSeparator(); + menu_ids[CMD_APPEARANCE_SETTINGS] = menuSettings->insertItem( + QIconSet(*settings_appearance_settingsIcon), tr("Appearance settings"), this, SLOT(configAppearance()), 0); + menuSettings->insertSeparator(); + menu_ids[CMD_CONFIG_MIDI_PORTS] = menuSettings->insertItem( + QIconSet(*settings_midiport_softsynthsIcon), tr("Midi Ports / Soft Synth"), this, SLOT(configMidiPorts()), 0); + + //--------------------------------------------------- + // popup Help + //--------------------------------------------------- + + menuBar()->insertSeparator(); + menu_help = new QPopupMenu(this); + menu_help->setCheckable(false); + menuBar()->insertItem(tr("&Help"), menu_help); + + menu_ids[CMD_OPEN_HELP] = menu_help->insertItem(tr("&Manual"), this, SLOT(startHelpBrowser()), 0); + menu_ids[CMD_OPEN_HOMEPAGE] = menu_help->insertItem(tr("&MusE homepage"), this, SLOT(startHomepageBrowser()), 0); + menu_help->insertSeparator(); + menu_ids[CMD_OPEN_BUG] = menu_help->insertItem(tr("&Report Bug..."), this, SLOT(startBugBrowser()), 0); + menu_help->insertSeparator(); + menu_help->insertItem(tr("&About MusE"), this, SLOT(about())); + menu_help->insertItem(tr("About&Qt"), this, SLOT(aboutQt())); + menu_help->insertSeparator(); + menu_ids[CMD_START_WHATSTHIS] = menu_help->insertItem(tr("What's &This?"), this, SLOT(whatsThis()), 0); + + //--------------------------------------------------- + // Central Widget + //--------------------------------------------------- + + arranger = new Arranger(this, "arranger"); + setCentralWidget(arranger); + + connect(tools1, SIGNAL(toolChanged(int)), arranger, SLOT(setTool(int))); + connect(arranger, SIGNAL(editPart(Track*)), SLOT(startEditor(Track*))); + connect(arranger, SIGNAL(dropSongFile(const QString&)), SLOT(loadProjectFile(const QString&))); + connect(arranger, SIGNAL(dropMidiFile(const QString&)), SLOT(importMidi(const QString&))); + connect(arranger, SIGNAL(startEditor(PartList*,int)), SLOT(startEditor(PartList*,int))); + connect(arranger, SIGNAL(toolChanged(int)), tools1, SLOT(set(int))); + connect(this, SIGNAL(configChanged()), arranger, SLOT(configChanged())); + + connect(arranger, SIGNAL(setUsedTool(int)), SLOT(setUsedTool(int))); + + //--------------------------------------------------- + // read list of "Recent Projects" + //--------------------------------------------------- + + QString prjPath(getenv("HOME")); + prjPath += QString("/.musePrj"); + FILE* f = fopen(prjPath.latin1(), "r"); + if (f == 0) { + perror("open projectfile"); + 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(); + + populateAddTrack(addTrack); + + transport = new Transport(this, "transport"); + bigtime = 0; + + QClipboard* cb = QApplication::clipboard(); + connect(cb, SIGNAL(dataChanged()), SLOT(clipboardChanged())); + connect(cb, SIGNAL(selectionChanged()), SLOT(clipboardChanged())); + connect(arranger, SIGNAL(selectionChanged()), SLOT(selectionChanged())); + + //--------------------------------------------------- + // load project + // if no songname entered on command line: + // startMode: 0 - load last song + // 1 - load default template + // 2 - load configured start song + //--------------------------------------------------- + + QString name; + bool useTemplate = false; + if (argc >= 2) + name = argv[0]; + else if (config.startMode == 0) { + if (argc < 2) + name = projectList[0] ? *projectList[0] : QString("untitled"); + else + name = argv[0]; + printf("starting with selected song %s\n", config.startSong.latin1()); + } + else if (config.startMode == 1) { + printf("starting with default template\n"); + name = museGlobalShare + QString("/templates/default.med"); + useTemplate = true; + } + else if (config.startMode == 2) { + printf("starting with pre configured song %s\n", config.startSong.latin1()); + name = config.startSong; + } + song->blockSignals(false); + loadProjectFile(name, useTemplate, true); + changeConfig(false); + + song->update(); + } + +//--------------------------------------------------------- +// setHeartBeat +//--------------------------------------------------------- + +void MusE::setHeartBeat() + { + heartBeatTimer->start(1000/config.guiRefresh); + } + +//--------------------------------------------------------- +// resetDevices +//--------------------------------------------------------- + +void MusE::resetMidiDevices() + { + audio->msgResetMidiDevices(); + } + +//--------------------------------------------------------- +// initMidiDevices +//--------------------------------------------------------- + +void MusE::initMidiDevices() + { + // Added by T356 + //audio->msgIdle(true); + + audio->msgInitMidiDevices(); + + // Added by T356 + //audio->msgIdle(false); + } + +//--------------------------------------------------------- +// localOff +//--------------------------------------------------------- + +void MusE::localOff() + { + audio->msgLocalOff(); + } + +//--------------------------------------------------------- +// loadProjectFile +// load *.med, *.mid, *.kar +// +// template - if true, load file but do not change +// project name +//--------------------------------------------------------- + +// for drop: +void MusE::loadProjectFile(const QString& name) + { + loadProjectFile(name, false, false); + } + +void MusE::loadProjectFile(const QString& name, bool songTemplate, bool loadAll) + { + // + // stop audio threads if running + // + bool restartSequencer = audio->isRunning(); + if (restartSequencer) { + if (audio->isPlaying()) { + audio->msgPlay(false); + while (audio->isPlaying()) + qApp->processEvents(); + } + seqStop(); + } + microSleep(200000); + loadProjectFile1(name, songTemplate, loadAll); + microSleep(200000); + if (restartSequencer) + seqStart(); + + if (song->getSongInfo().length()>0) + startSongInfo(false); + } + +//--------------------------------------------------------- +// loadProjectFile +// load *.med, *.mid, *.kar +// +// template - if true, load file but do not change +// project name +// loadAll - load song data + configuration data +//--------------------------------------------------------- + +void MusE::loadProjectFile1(const QString& name, bool songTemplate, bool loadAll) + { + //if (audioMixer) + // audioMixer->clear(); + if (mixer1) + mixer1->clear(); + if (mixer2) + mixer2->clear(); + arranger->clear(); // clear track info + if (clearSong()) + return; + + QFileInfo fi(name); + if (songTemplate) { + if (!fi.isReadable()) { + QMessageBox::critical(this, QString("MusE"), + tr("Cannot read template")); + return; + } + project.setFile("untitled"); + } + else { + printf("Setting project path to %s\n", fi.dirPath(true).latin1()); + museProject = fi.dirPath(true); + project.setFile(name); + } + // Changed by T356. 01/19/2010. We want the complete extension here. + //QString ex = fi.extension(false).lower(); + //if (ex.length() == 3) + // ex += "."; + //ex = ex.left(4); + QString ex = fi.extension(true).lower(); + QString mex = ex.section('.', -1, -1); + if((mex == "gz") || (mex == "bz2")) + mex = ex.section('.', -2, -2); + + //if (ex.isEmpty() || ex == "med.") { + if (ex.isEmpty() || mex == "med") { + // + // read *.med file + // + bool popenFlag; + FILE* f = fileOpen(this, fi.filePath(), QString(".med"), "r", popenFlag, true); + if (f == 0) { + if (errno != ENOENT) { + QMessageBox::critical(this, QString("MusE"), + tr("File open error")); + setUntitledProject(); + } + else + setConfigDefaults(); + } + else { + Xml xml(f); + read(xml, !loadAll); + bool fileError = ferror(f); + popenFlag ? pclose(f) : fclose(f); + if (fileError) { + QMessageBox::critical(this, QString("MusE"), + tr("File read error")); + setUntitledProject(); + } + } + } + //else if (ex == "mid." || ex == "kar.") { + else if (mex == "mid" || mex == "kar") { + setConfigDefaults(); + if (!importMidi(name, false)) + setUntitledProject(); + } + else { + QMessageBox::critical(this, QString("MusE"), + tr("Unknown File Format: ") + ex); + setUntitledProject(); + } + if (!songTemplate) { + addProject(project.absFilePath()); + setCaption(QString("MusE: Song: ") + project.baseName(true)); + } + song->dirty = false; + + menuView->setItemChecked(tr_id, config.transportVisible); + menuView->setItemChecked(bt_id, config.bigTimeVisible); + menuView->setItemChecked(mr_id, config.markerVisible); + menuAutomation->setItemChecked(autoId, automation); + + if (loadAll) { + showBigtime(config.bigTimeVisible); + //showMixer(config.mixerVisible); + showMixer1(config.mixer1Visible); + showMixer2(config.mixer1Visible); + showMarker(config.markerVisible); + resize(config.geometryMain.size()); + move(config.geometryMain.topLeft()); + + if (config.transportVisible) + transport->show(); + transport->move(config.geometryTransport.topLeft()); + showTransport(config.transportVisible); + } + + transport->setMasterFlag(song->masterFlag()); + punchinAction->setOn(song->punchin()); + punchoutAction->setOn(song->punchout()); + loopAction->setOn(song->loop()); + song->update(); + song->updatePos(); + clipboardChanged(); // enable/disable "Paste" + selectionChanged(); // enable/disable "Copy" & "Paste" + } + +//--------------------------------------------------------- +// setUntitledProject +//--------------------------------------------------------- + +void MusE::setUntitledProject() + { + setConfigDefaults(); + QString name("untitled"); + museProject = QFileInfo(name).dirPath(true); + project.setFile(name); + setCaption(tr("MusE: Song: ") + project.baseName(true)); + } + +//--------------------------------------------------------- +// setConfigDefaults +//--------------------------------------------------------- + +void MusE::setConfigDefaults() + { + readConfiguration(); // used for reading midi files +#if 0 + if (readConfiguration()) { + // + // failed to load config file + // set buildin defaults + // + configTransportVisible = false; + configBigTimeVisible = false; + + for (int channel = 0; channel < 2; ++channel) + song->addTrack(Track::AUDIO_GROUP); + AudioTrack* out = (AudioTrack*)song->addTrack(Track::AUDIO_OUTPUT); + AudioTrack* in = (AudioTrack*)song->addTrack(Track::AUDIO_INPUT); + + // set some default routes + std::list il = audioDevice->inputPorts(); + int channel = 0; + for (std::list::iterator i = il.begin(); i != il.end(); ++i, ++channel) { + if (channel == 2) + break; + audio->msgAddRoute(Route(out,channel), Route(*i,channel)); + } + channel = 0; + std::list ol = audioDevice->outputPorts(); + for (std::list::iterator i = ol.begin(); i != ol.end(); ++i, ++channel) { + if (channel == 2) + break; + audio->msgAddRoute(Route(*i, channel), Route(in,channel)); + } + } +#endif + song->dirty = false; + } + +//--------------------------------------------------------- +// setFollow +//--------------------------------------------------------- + +void MusE::setFollow() + { + Song::FollowMode fm = song->follow(); + follow->setItemChecked(fid0, fm == Song::NO); + follow->setItemChecked(fid1, fm == Song::JUMP); + follow->setItemChecked(fid2, fm == Song::CONTINUOUS); + } + +//--------------------------------------------------------- +// MusE::loadProject +//--------------------------------------------------------- + +void MusE::loadProject() + { + bool loadAll; + QString fn = getOpenFileName(QString(""), med_file_pattern, this, + tr("MusE: load project"), &loadAll); + if (!fn.isEmpty()) { + museProject = QFileInfo(fn).dirPath(true); + loadProjectFile(fn, false, loadAll); + } + } + +//--------------------------------------------------------- +// loadTemplate +//--------------------------------------------------------- + +void MusE::loadTemplate() + { + QString fn = getOpenFileName(QString("templates"), med_file_pattern, this, + tr("MusE: load template"), 0); + if (!fn.isEmpty()) { + // museProject = QFileInfo(fn).dirPath(true); + loadProjectFile(fn, true, true); + setUntitledProject(); + } + } + +//--------------------------------------------------------- +// save +//--------------------------------------------------------- + +bool MusE::save() + { + if (project.baseName(true) == "untitled") + return saveAs(); + else + return save(project.filePath(), false); + } + +//--------------------------------------------------------- +// save +//--------------------------------------------------------- + +bool MusE::save(const QString& name, bool overwriteWarn) + { + QString backupCommand; + + // By T356. Cache the jack in/out route names BEFORE saving. + // Because jack often shuts down during save, causing the routes to be lost in the file. + // Not required any more... + //cacheJackRouteNames(); + + if (QFile::exists(name)) { + backupCommand.sprintf("cp \"%s\" \"%s.backup\"", name.latin1(), name.latin1()); + } + else if (QFile::exists(name + QString(".med"))) { + backupCommand.sprintf("cp \"%s.med\" \"%s.med.backup\"", name.latin1(), name.latin1()); + } + if (!backupCommand.isEmpty()) + system(backupCommand.latin1()); + + bool popenFlag; + FILE* f = fileOpen(this, name, QString(".med"), "w", popenFlag, false, overwriteWarn); + if (f == 0) + return false; + Xml xml(f); + write(xml); + if (ferror(f)) { + QString s = "Write File\n" + name + "\nfailed: " + + strerror(errno); + QMessageBox::critical(this, + tr("MusE: Write File failed"), s); + popenFlag? pclose(f) : fclose(f); + unlink(name.latin1()); + return false; + } + else { + popenFlag? pclose(f) : fclose(f); + song->dirty = false; + return true; + } + } + +//--------------------------------------------------------- +// quitDoc +//--------------------------------------------------------- + +void MusE::quitDoc() + { + close(true); + } + +//--------------------------------------------------------- +// closeEvent +//--------------------------------------------------------- + +void MusE::closeEvent(QCloseEvent*) + { + song->setStop(true); + // + // wait for sequencer + // + while (audio->isPlaying()) { + qApp->processEvents(); + } + 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("&Skip"), tr("&Abort"), 0, 2); + if (n == 0) { + if (!save()) // dont quit if save failed + return; + } + else if (n == 2) + return; + } + seqStop(); + + WaveTrackList* wt = song->waves(); + for (iWaveTrack iwt = wt->begin(); iwt != wt->end(); ++iwt) { + WaveTrack* t = *iwt; + if (t->recFile() && t->recFile()->samples() == 0) { + t->recFile()->remove(); + } + } + + // save "Open Recent" list + QString prjPath(getenv("HOME")); + prjPath += "/.musePrj"; + FILE* f = fopen(prjPath.latin1(), "w"); + if (f) { + for (int i = 0; i < PROJECT_LIST_LEN; ++i) { + fprintf(f, "%s\n", projectList[i] ? projectList[i]->latin1() : ""); + } + fclose(f); + } + if(debugMsg) + printf("Muse: Exiting JackAudio\n"); + exitJackAudio(); + if(debugMsg) + printf("Muse: Exiting DummyAudio\n"); + exitDummyAudio(); + if(debugMsg) + printf("Muse: Exiting Metronome\n"); + exitMetronome(); + + // Changed by Tim. p3.3.14 + //SynthIList* sl = song->syntis(); + //for (iSynthI i = sl->begin(); i != sl->end(); ++i) + // delete *i; + song->cleanupForQuit(); + + if(debugMsg) + printf("Muse: Cleaning up temporary wavefiles + peakfiles\n"); + // 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(true) + ".wca"); + } + + // Added by Tim. p3.3.14 + +#ifdef HAVE_LASH + // Disconnect gracefully from LASH. + if(lash_client) + { + if(debugMsg) + printf("Muse: Disconnecting from LASH\n"); + lash_event_t* lashev = lash_event_new_with_type (LASH_Quit); + lash_send_event(lash_client, lashev); + } +#endif + + if(debugMsg) + printf("Muse: Exiting Dsp\n"); + AL::exitDsp(); + + qApp->quit(); + } + +//--------------------------------------------------------- +// toggleMarker +//--------------------------------------------------------- + +void MusE::toggleMarker() + { + showMarker(!menuView->isItemChecked(mr_id)); + } + +//--------------------------------------------------------- +// showMarker +//--------------------------------------------------------- + +void MusE::showMarker(bool flag) + { + //printf("showMarker %d\n",flag); + if (markerView == 0) { + markerView = new MarkerView(this); + + connect(arranger, SIGNAL(addMarker(int)), markerView, SLOT(addMarker(int))); + connect(markerView, SIGNAL(closed()), SLOT(markerClosed())); + toplevels.push_back(Toplevel(Toplevel::MARKER, (unsigned long)(markerView), markerView)); + markerView->show(); + } + + markerView->setShown(flag); + menuView->setItemChecked(mr_id, flag); + } + +//--------------------------------------------------------- +// markerClosed +//--------------------------------------------------------- + +void MusE::markerClosed() + { + menuView->setItemChecked(mr_id, false); + } + +//--------------------------------------------------------- +// toggleTransport +//--------------------------------------------------------- + +void MusE::toggleTransport() + { + showTransport(!menuView->isItemChecked(tr_id)); + } + +//--------------------------------------------------------- +// showTransport +//--------------------------------------------------------- + +void MusE::showTransport(bool flag) + { + transport->setShown(flag); + menuView->setItemChecked(tr_id, flag); + } + +//--------------------------------------------------------- +// saveAs +//--------------------------------------------------------- + +bool MusE::saveAs() + { +// QString name = getSaveFileName(museProject, med_file_pattern, this, +// QString name = getSaveFileName(QString(""), med_file_pattern, this, + QString name = getSaveFileName(QString(""), med_file_save_pattern, this, + tr("MusE: Save As")); + bool ok = false; + if (!name.isEmpty()) { + QString tempOldProj = museProject; + museProject = QFileInfo(name).dirPath(true); + ok = save(name, true); + if (ok) { + project.setFile(name); + setCaption(tr("MusE: Song: ") + project.baseName(true)); + addProject(name); + } + else + museProject = tempOldProj; + } + + return ok; + } + +//--------------------------------------------------------- +// 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 3: startDrumEditor(pl); break; + case 4: startWaveEditor(pl); break; + } + } + +//--------------------------------------------------------- +// startEditor +//--------------------------------------------------------- + +void MusE::startEditor(Track* t) + { + switch (t->type()) { + case Track::MIDI: startPianoroll(); break; + case Track::DRUM: startDrumEditor(); break; + case Track::WAVE: startWaveEditor(); break; + default: + break; + } + } + +//--------------------------------------------------------- +// getMidiPartsToEdit +//--------------------------------------------------------- + +PartList* MusE::getMidiPartsToEdit() + { + PartList* pl = song->getSelectedMidiParts(); + if (pl->empty()) { + QMessageBox::critical(this, QString("MusE"), tr("Nothing to edit")); + 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, this, 0, arranger->cursorValue()); + pianoroll->show(); + toplevels.push_back(Toplevel(Toplevel::PIANO_ROLL, (unsigned long)(pianoroll), pianoroll)); + connect(pianoroll, SIGNAL(deleted(unsigned long)), SLOT(toplevelDeleted(unsigned long))); + connect(muse, SIGNAL(configChanged()), pianoroll, SLOT(configChanged())); + } + +//--------------------------------------------------------- +// startListenEditor +//--------------------------------------------------------- + +void MusE::startListEditor() + { + PartList* pl = getMidiPartsToEdit(); + if (pl == 0) + return; + startListEditor(pl); + } + +void MusE::startListEditor(PartList* pl) + { + ListEdit* listEditor = new ListEdit(pl); + listEditor->show(); + toplevels.push_back(Toplevel(Toplevel::LISTE, (unsigned long)(listEditor), listEditor)); + connect(listEditor, SIGNAL(deleted(unsigned long)), SLOT(toplevelDeleted(unsigned long))); + connect(muse,SIGNAL(configChanged()), listEditor, SLOT(configChanged())); + } + +//--------------------------------------------------------- +// startMasterEditor +//--------------------------------------------------------- + +void MusE::startMasterEditor() + { + MasterEdit* masterEditor = new MasterEdit(); + masterEditor->show(); + toplevels.push_back(Toplevel(Toplevel::MASTER, (unsigned long)(masterEditor), masterEditor)); + connect(masterEditor, SIGNAL(deleted(unsigned long)), SLOT(toplevelDeleted(unsigned long))); + } + +//--------------------------------------------------------- +// startLMasterEditor +//--------------------------------------------------------- + +void MusE::startLMasterEditor() + { + LMaster* lmaster = new LMaster(); + lmaster->show(); + toplevels.push_back(Toplevel(Toplevel::LMASTER, (unsigned long)(lmaster), lmaster)); + connect(lmaster, SIGNAL(deleted(unsigned long)), SLOT(toplevelDeleted(unsigned long))); + connect(muse, SIGNAL(configChanged()), lmaster, SLOT(configChanged())); + } + +//--------------------------------------------------------- +// startDrumEditor +//--------------------------------------------------------- + +void MusE::startDrumEditor() + { + PartList* pl = getMidiPartsToEdit(); + if (pl == 0) + return; + startDrumEditor(pl); + } + +void MusE::startDrumEditor(PartList* pl) + { + + DrumEdit* drumEditor = new DrumEdit(pl, this, 0, arranger->cursorValue()); + drumEditor->show(); + toplevels.push_back(Toplevel(Toplevel::DRUM, (unsigned long)(drumEditor), drumEditor)); + connect(drumEditor, SIGNAL(deleted(unsigned long)), SLOT(toplevelDeleted(unsigned long))); + 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")); + return; + } + startWaveEditor(pl); + } + +void MusE::startWaveEditor(PartList* pl) + { + WaveEdit* waveEditor = new WaveEdit(pl); + waveEditor->show(); + connect(muse, SIGNAL(configChanged()), waveEditor, SLOT(configChanged())); + toplevels.push_back(Toplevel(Toplevel::WAVE, (unsigned long)(waveEditor), waveEditor)); + connect(waveEditor, SIGNAL(deleted(unsigned long)), SLOT(toplevelDeleted(unsigned long))); + } + + +//--------------------------------------------------------- +// startSongInfo +//--------------------------------------------------------- +void MusE::startSongInfo(bool editable) + { + printf("startSongInfo!!!!\n"); + SongInfo info; + info.songInfoText->setText(song->getSongInfo()); + info.songInfoText->setReadOnly(!editable); + info.show(); + if( info.exec() == QDialog::Accepted) { + if (editable) + song->setSongInfo(info.songInfoText->text()); + } + + } + +//--------------------------------------------------------- +// showDidYouKnowDialog +//--------------------------------------------------------- +void MusE::showDidYouKnowDialog() + { + if ((bool)config.showDidYouKnow == true) { + printf("show did you know dialog!!!!\n"); + DidYouKnow dyk; + dyk.tipText->setText("To get started with MusE why don't you try some demo songs available at http://demos.muse-sequencer.org/"); + dyk.show(); + if( dyk.exec()) { + if (dyk.dontShowCheckBox->isChecked()) { + printf("disables dialog!\n"); + config.showDidYouKnow=false; + muse->changeConfig(true); // save settings + } + } + } + } +//--------------------------------------------------------- +// startDefineController +//--------------------------------------------------------- + + +//--------------------------------------------------------- +// startClipList +//--------------------------------------------------------- + +void MusE::startClipList() + { + if (clipListEdit == 0) { + clipListEdit = new ClipListEdit(); + toplevels.push_back(Toplevel(Toplevel::CLIPLIST, (unsigned long)(clipListEdit), clipListEdit)); + connect(clipListEdit, SIGNAL(deleted(unsigned long)), SLOT(toplevelDeleted(unsigned long))); + } + clipListEdit->show(); + menu_audio->setItemChecked(aid2, true); + } + +//--------------------------------------------------------- +// 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]->latin1(); + const char* p = strrchr(path, '/'); + if (p == 0) + p = path; + else + ++p; + openRecent->insertItem(QString(p), i); + } + } + +//--------------------------------------------------------- +// selectProject +//--------------------------------------------------------- + +void MusE::selectProject(int id) + { + if (id < 0) + return; + assert(id < PROJECT_LIST_LEN); + QString* name = projectList[id]; + if (name == 0) + return; + loadProjectFile(*name, false, true); + } + +//--------------------------------------------------------- +// toplevelDeleted +//--------------------------------------------------------- + +void MusE::toplevelDeleted(unsigned long tl) + { + for (iToplevel i = toplevels.begin(); i != toplevels.end(); ++i) { + if (i->object() == tl) { + switch(i->type()) { + case Toplevel::MARKER: + break; + case Toplevel::CLIPLIST: + menu_audio->setItemChecked(aid2, false); + return; + // the followin editors can exist in more than + // one instantiation: + case Toplevel::PIANO_ROLL: + case Toplevel::LISTE: + case Toplevel::DRUM: + case Toplevel::MASTER: + case Toplevel::WAVE: + case Toplevel::LMASTER: + break; + } + toplevels.erase(i); + return; + } + } + printf("topLevelDeleted: top level %lx not found\n", tl); + //assert(false); + } + +//--------------------------------------------------------- +// ctrlChanged +// midi ctrl value changed +//--------------------------------------------------------- + +#if 0 +void MusE::ctrlChanged() + { + arranger->updateInspector(); + } +#endif + +//--------------------------------------------------------- +// kbAccel +//--------------------------------------------------------- + +void MusE::kbAccel(int key) + { + if (key == shortcuts[SHRT_TOGGLE_METRO].key) { + song->setClick(!song->click()); + } + else if (key == shortcuts[SHRT_PLAY_TOGGLE].key) { + if (audio->isPlaying()) + //song->setStopPlay(false); + song->setStop(true); + else if (!config.useOldStyleStopShortCut) + song->setPlay(true); + else if (song->cpos() != song->lpos()) + song->setPos(0, song->lPos()); + else { + Pos p(0, true); + song->setPos(0, p); + } + } + else if (key == shortcuts[SHRT_STOP].key) { + //song->setPlay(false); + song->setStop(true); + } + else if (key == shortcuts[SHRT_GOTO_START].key) { + Pos p(0, true); + song->setPos(0, p); + } + else if (key == shortcuts[SHRT_PLAY_SONG].key ) { + song->setPlay(true); + } + else if (key == shortcuts[SHRT_GOTO_LEFT].key) { + if (!song->record()) + song->setPos(0, song->lPos()); + } + else if (key == shortcuts[SHRT_GOTO_RIGHT].key) { + if (!song->record()) + song->setPos(0, song->rPos()); + } + else if (key == shortcuts[SHRT_TOGGLE_LOOP].key) { + song->setLoop(!song->loop()); + } + else if (key == shortcuts[SHRT_START_REC].key) { + if (!audio->isPlaying()) { + song->setRecord(!song->record()); + } + } + else if (key == shortcuts[SHRT_OPEN_TRANSPORT].key) { + toggleTransport(); + } + else if (key == shortcuts[SHRT_OPEN_BIGTIME].key) { + toggleBigTime(); + } + //else if (key == shortcuts[SHRT_OPEN_MIXER].key) { + // toggleMixer(); + // } + else if (key == shortcuts[SHRT_OPEN_MIXER].key) { + toggleMixer1(); + } + else if (key == shortcuts[SHRT_OPEN_MIXER2].key) { + toggleMixer2(); + } + else if (key == shortcuts[SHRT_NEXT_MARKER].key) { + if (markerView) + markerView->nextMarker(); + } + else if (key == shortcuts[SHRT_PREV_MARKER].key) { + if (markerView) + markerView->prevMarker(); + } + else { + if (debugMsg) + printf("unknown kbAccel 0x%x\n", key); + } + } + +//--------------------------------------------------------- +// MuseApplication +//--------------------------------------------------------- + +class MuseApplication : public QApplication { + MusE* muse; + + public: + MuseApplication(int& argc, char** argv) + : QApplication(argc, argv) + { + muse = 0; + } + + + void setMuse(MusE* m) { + muse = m; +#ifdef HAVE_LASH + if(useLASH) + startTimer (300); +#endif + } + + bool notify(QObject* receiver, QEvent* event) { + bool flag = QApplication::notify(receiver, event); + if (event->type() == QEvent::KeyPress) { + QKeyEvent* ke = (QKeyEvent*)event; + globalKeyState = ke->stateAfter(); + bool accepted = ke->isAccepted(); + if (!accepted) { + muse->kbAccel(ke->key()); + return true; + } + } + if (event->type() == QEvent::KeyRelease) { + QKeyEvent* ke = (QKeyEvent*)event; + globalKeyState = ke->stateAfter(); + } + + return flag; + } + +#ifdef HAVE_LASH + virtual void timerEvent (QTimerEvent * /* e */) { + if(useLASH) + muse->lash_idle_cb (); + } +#endif /* HAVE_LASH */ + + }; + +//--------------------------------------------------------- +// usage +//--------------------------------------------------------- + +static void usage(const char* prog, const char* txt) + { + fprintf(stderr, "%s: %s\nusage: %s flags midifile\n Flags:\n", + prog, txt, prog); + fprintf(stderr, " -h this help\n"); + fprintf(stderr, " -v print version\n"); + fprintf(stderr, " -d debug mode: no threads, no RT\n"); + fprintf(stderr, " -D debug mode: enable some debug messages\n"); + fprintf(stderr, " -m debug mode: trace midi Input\n"); + fprintf(stderr, " -M debug mode: trace midi Output\n"); + fprintf(stderr, " -s debug mode: trace sync\n"); + fprintf(stderr, " -a no audio\n"); + //fprintf(stderr, " -P n set real time priority to n (default: 50)\n"); + fprintf(stderr, " -P n set audio driver real time priority to n (Dummy only, default 40. Else fixed by Jack.)\n"); + fprintf(stderr, " -Y n force midi real time priority to n (default: audio driver prio +1)\n"); + fprintf(stderr, " -p don't load LADSPA plugins\n"); +#ifdef ENABLE_PYTHON + fprintf(stderr, " -y enable Python control support\n"); +#endif +#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 +#ifdef HAVE_LASH + fprintf(stderr, " -L don't use LASH\n"); +#endif + fprintf(stderr, "useful environment variables:\n"); + fprintf(stderr, " MUSE override library and shared directories location\n"); + fprintf(stderr, " MUSEHOME override user home directory (HOME/)\n"); + fprintf(stderr, " MUSEINSTRUMENTS override user instrument directory (MUSEHOME/muse_instruments)\n"); + } + +//--------------------------------------------------------- +// 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 + +//--------------------------------------------------------- +// main +//--------------------------------------------------------- + +int main(int argc, char* argv[]) + { + +// error = ErrorHandler::create(argv[0]); + ruid = getuid(); + euid = geteuid(); + undoSetuid(); + getCapabilities(); + int noAudio = false; + + const char* mu = getenv("MUSEHOME"); + if(mu) + museUser = QString(mu); + if(museUser.isEmpty()) + museUser = QString(getenv("HOME")); + + QString museGlobal; + const char* p = getenv("MUSE"); + if (p) + museGlobal = p; + + if (museGlobal.isEmpty()) { + QString museGlobal(INSTPREFIX); + museGlobalLib = museGlobal + "/lib/muse"; + museGlobalShare = museGlobal + "/share/muse"; + } + else { + museGlobalLib = museGlobal + "/lib"; + museGlobalShare = museGlobal + "/share"; + } + museProject = museProjectInitPath; //getcwd(0, 0); + configName = QString(getenv("HOME")) + QString("/.MusE"); + + museInstruments = museGlobalShare + QString("/instruments"); + + const char* ins = getenv("MUSEINSTRUMENTS"); + if(ins) + museUserInstruments = QString(ins); + if(museUserInstruments.isEmpty()) + museUserInstruments = museUser + QString("/muse_instruments"); + +#ifdef HAVE_LASH + lash_args_t * lash_args = 0; + if(useLASH) + lash_args = lash_extract_args (&argc, &argv); +#endif + + srand(time(0)); // initialize random number generator +// signal(SIGCHLD, catchSignal); // interferes with initVST() + initMidiController(); + QApplication::setColorSpec(QApplication::ManyColor); + MuseApplication app(argc, argv); + + initShortCuts(); + readConfiguration(); + + if (config.useDenormalBias) + printf("Denormal protection enabled.\n"); + // SHOW MUSE SPLASH SCREEN + if (config.showSplashScreen) { + QPixmap splsh(museGlobalShare + "/splash.png"); + + if (!splsh.isNull()) { + QSplashScreen* muse_splash = new QSplashScreen(splsh, + Qt::WStyle_StaysOnTop | Qt::WDestructiveClose); + muse_splash->show(); + QTimer* stimer = new QTimer(0); + muse_splash->connect(stimer, SIGNAL(timeout()), muse_splash, SLOT(close())); + stimer->start(6000, true); + } + } + int i; + + QString optstr("ahvdDmMsP:Y:py"); +#ifdef VST_SUPPORT + optstr += QString("V"); +#endif +#ifdef DSSI_SUPPORT + optstr += QString("I"); +#endif +#ifdef HAVE_LASH + optstr += QString("L"); +#endif + +//#ifdef VST_SUPPORT +// while ((i = getopt(argc, argv, "ahvdDmMsVP:py")) != EOF) { +//#else +// while ((i = getopt(argc, argv, "ahvdDmMsP:py")) != EOF) { +//#endif + + while ((i = getopt(argc, argv, optstr.latin1())) != EOF) { + char c = (char)i; + switch (c) { + case 'v': printVersion(argv[0]); return 0; + case 'd': + debugMode = true; + realTimeScheduling = false; + break; + case 'a': + noAudio = true; + break; + case 'D': debugMsg = true; break; + case 'm': midiInputTrace = true; break; + case 'M': midiOutputTrace = true; break; + case 's': debugSync = true; break; + case 'P': realTimePriority = atoi(optarg); break; + case 'Y': midiRTPrioOverride = atoi(optarg); break; + case 'p': loadPlugins = false; break; + case 'V': loadVST = false; break; + case 'I': loadDSSI = false; break; + case 'L': useLASH = false; break; + case 'y': usePythonBridge = true; break; + case 'h': usage(argv[0], argv[1]); return -1; + default: usage(argv[0], "bad argument"); return -1; + } + } + + AL::initDsp(); + + if (debugMsg) + printf("Start euid: %d ruid: %d, Now euid %d\n", + euid, ruid, geteuid()); + if (debugMode) { + initDummyAudio(); + realTimeScheduling = false; + } + else if (noAudio) { + initDummyAudio(); + realTimeScheduling = true; + //if (debugMode) { // ?? + // realTimeScheduling = false; + // } + } + else if (initJackAudio()) { + if (!debugMode) + { + QMessageBox::critical(NULL, "MusE fatal error", "MusE failed to find a Jack audio server.

" + "MusE will continue without audio support (-a switch)!

" + "If this was not intended check that Jack was started. " + "If Jack was started check that it was\n" + "started as the same user as MusE.\n"); + + initDummyAudio(); + noAudio = true; + realTimeScheduling = true; + if (debugMode) { + realTimeScheduling = false; + } + } + 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"); + initDummyAudio(); + //realTimeScheduling = audioDevice->isRealtime(); + } + realTimeScheduling = true; + } + else + realTimeScheduling = audioDevice->isRealtime(); + + // setup the prefetch fifo length now that the segmentSize is known + // Changed by Tim. p3.3.17 + // Changed to 4 *, JUST FOR TEST!!! + fifoLength = 131072/segmentSize; + //fifoLength = (131072/segmentSize) * 4; + + + argc -= optind; + ++argc; + + if (debugMsg) { + printf("global lib: <%s>\n", museGlobalLib.latin1()); + printf("global share: <%s>\n", museGlobalShare.latin1()); + printf("muse home: <%s>\n", museUser.latin1()); + printf("project dir: <%s>\n", museProject.latin1()); + printf("user instruments: <%s>\n", museUserInstruments.latin1()); + } + + static QTranslator translator(0); + QString locale(QTextCodec::locale()); + if (locale != "C") { + QString loc("muse_"); + loc += QString(QTextCodec::locale()); + if (translator.load(loc, QString(".")) == false) { + QString lp(museGlobalShare); + lp += QString("/locale"); + if (translator.load(loc, lp) == false) { + printf("no locale <%s>/<%s>\n", loc.latin1(), lp.latin1()); + } + } + app.installTranslator(&translator); + } + + if (locale == "de") { + printf("locale de\n"); + hIsB = false; + } + + if (loadPlugins) + initPlugins(); + + if (loadVST) + initVST(); + + if(loadDSSI) + initDSSI(); + + initIcons(); + + initMetronome(); + QApplication::clipboard()->setSelectionMode(false); + + QApplication::addLibraryPath(museGlobalLib + "/qtplugins"); + if (debugMsg) { + QStringList list = app.libraryPaths(); + QStringList::Iterator it = list.begin(); + printf("QtLibraryPath:\n"); + while(it != list.end()) { + printf(" <%s>\n", (*it).latin1()); + ++it; + } + } + + muse = new MusE(argc, &argv[optind]); + app.setMuse(muse); + muse->setIcon(*museIcon); + // Added by Tim. p3.3.22 + if (!debugMode) { + if (mlockall(MCL_CURRENT | MCL_FUTURE)) + perror("WARNING: Cannot lock memory:"); + } + + muse->show(); + muse->seqStart(); + +#ifdef HAVE_LASH + { + if(useLASH) + { + int lash_flags = LASH_Config_File; + const char *muse_name = PACKAGE_NAME; + lash_client = lash_init (lash_args, muse_name, lash_flags, LASH_PROTOCOL(2,0)); + lash_alsa_client_id (lash_client, snd_seq_client_id (alsaSeq)); + if (!noAudio) { + // p3.3.38 + //char *jack_name = ((JackAudioDevice*)audioDevice)->getJackName(); + const char *jack_name = audioDevice->clientName(); + lash_jack_client_name (lash_client, jack_name); + } + } + } +#endif /* HAVE_LASH */ + QTimer::singleShot(100, muse, SLOT(showDidYouKnowDialog())); + return app.exec(); + } + +#if 0 +//--------------------------------------------------------- +// configPart +//--------------------------------------------------------- + +void MusE::configPart(int id) + { + if (id < 3) { + partConfig->setItemChecked(0, id == 0); + partConfig->setItemChecked(1, id == 1); + partConfig->setItemChecked(2, id == 2); + arranger->setShowPartType(id); + for (int i = 3; i < 10; ++i) { + partConfig->setItemEnabled(i, id == 2); + } + } + else { + bool flag = !partConfig->isItemChecked(id); + partConfig->setItemChecked(id, flag); + int val = arranger->showPartEvent(); + if (flag) { + val |= 1 << (id-3); + } + else { + val &= ~(1 << (id-3)); + } + arranger->setShowPartEvent(val); + } + } +#endif + +//--------------------------------------------------------- +// cmd +// some cmd's from pulldown menu +//--------------------------------------------------------- + +void MusE::cmd(int cmd) + { + TrackList* tracks = song->tracks(); + int l = song->lpos(); + int r = song->rpos(); + + switch(cmd) { + case CMD_CUT: + arranger->cmd(Arranger::CMD_CUT_PART); + break; + case CMD_COPY: + arranger->cmd(Arranger::CMD_COPY_PART); + break; + case CMD_PASTE: + arranger->cmd(Arranger::CMD_PASTE_PART); + break; + case CMD_PASTE_CLONE: + arranger->cmd(Arranger::CMD_PASTE_CLONE_PART); + break; + case CMD_PASTE_TO_TRACK: + arranger->cmd(Arranger::CMD_PASTE_PART_TO_TRACK); + break; + case CMD_PASTE_CLONE_TO_TRACK: + arranger->cmd(Arranger::CMD_PASTE_CLONE_PART_TO_TRACK); + break; + case CMD_DELETE: + song->startUndo(); + if (song->msgRemoveParts()) { + song->endUndo(SC_PART_REMOVED); + break; + } + else + audio->msgRemoveTracks(); + song->endUndo(SC_TRACK_REMOVED); + break; + case CMD_DELETE_TRACK: + song->startUndo(); + audio->msgRemoveTracks(); + song->endUndo(SC_TRACK_REMOVED); + audio->msgUpdateSoloStates(); + break; + + case CMD_SELECT_ALL: + case CMD_SELECT_NONE: + case CMD_SELECT_INVERT: + case CMD_SELECT_ILOOP: + case CMD_SELECT_OLOOP: + 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)); + switch(cmd) { + case CMD_SELECT_INVERT: + f = !p->second->selected(); + break; + case CMD_SELECT_NONE: + f = false; + break; + case CMD_SELECT_ALL: + f = true; + break; + case CMD_SELECT_ILOOP: + f = inside; + break; + case CMD_SELECT_OLOOP: + f = !inside; + break; + } + p->second->setSelected(f); + } + } + song->update(); + break; + + case CMD_SELECT_PARTS: + 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(); + break; + case CMD_FOLLOW_NO: + song->setFollow(Song::NO); + setFollow(); + break; + case CMD_FOLLOW_JUMP: + song->setFollow(Song::JUMP); + setFollow(); + break; + case CMD_FOLLOW_CONTINUOUS: + song->setFollow(Song::CONTINUOUS); + setFollow(); + break; + } + } + +//--------------------------------------------------------- +// clipboardChanged +//--------------------------------------------------------- + +void MusE::clipboardChanged() + { + QCString subtype("partlist"); + QMimeSource* ms = QApplication::clipboard()->data(QClipboard::Clipboard); + if (ms == 0) + return; + bool flag = false; + for (int i = 0; ms->format(i); ++i) { +// printf("Format <%s\n", ms->format(i)); + if ((strncmp(ms->format(i), "text/midipartlist", 17) == 0) + || (strncmp(ms->format(i), "text/wavepartlist", 17) == 0) + // Added by T356. Support mixed .mpt files. + || (strncmp(ms->format(i), "text/mixedpartlist", 18) == 0)) { + flag = true; + break; + } + } + menuEdit->setItemEnabled(CMD_PASTE, flag); + menuEdit->setItemEnabled(CMD_PASTE_CLONE, flag); + menuEdit->setItemEnabled(CMD_PASTE_TO_TRACK, flag); + menuEdit->setItemEnabled(CMD_PASTE_CLONE_TO_TRACK, flag); + } + +//--------------------------------------------------------- +// selectionChanged +//--------------------------------------------------------- + +void MusE::selectionChanged() + { + bool flag = arranger->isSingleSelection(); + menuEdit->setItemEnabled(CMD_CUT, flag); + //menuEdit->setItemEnabled(CMD_COPY, flag); // Now possible + } + +//--------------------------------------------------------- +// transpose +//--------------------------------------------------------- + +void MusE::transpose() + { + Transpose *w = new Transpose(); + w->show(); + } + +//--------------------------------------------------------- +// modifyGateTime +//--------------------------------------------------------- + +void MusE::modifyGateTime() + { + 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(); + if(appearance->isVisible()) { + appearance->raise(); + appearance->setActiveWindow(); + } + else + appearance->show(); + } + +//--------------------------------------------------------- +// loadTheme +//--------------------------------------------------------- + +void MusE::loadTheme(QString s) + { + if (style().name() != s) + QApplication::setStyle(s); + } + +//--------------------------------------------------------- +// 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(); + loadTheme(config.style); + QApplication::setFont(config.fonts[0], true); + // Added by Tim. p3.3.6 + //printf("MusE::changeConfig writeFlag:%d emitting configChanged\n", writeFlag); + + emit configChanged(); + updateConfiguration(); + } + +//--------------------------------------------------------- +// configMetronome +//--------------------------------------------------------- + +void MusE::configMetronome() + { + if (!metronomeConfig) + metronomeConfig = new MetronomeConfig(this, "metronome"); + + if(metronomeConfig->isVisible()) { + metronomeConfig->raise(); + metronomeConfig->setActiveWindow(); + } + else + metronomeConfig->show(); + } + + +//--------------------------------------------------------- +// configShortCuts +//--------------------------------------------------------- + +void MusE::configShortCuts() + { + if (!shortcutConfig) + shortcutConfig = new ShortcutConfig(this, "shortcutconfig"); + 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(); + TrackList* tracks = song->tracks(); + for (iTrack it = tracks->begin(); it != tracks->end(); ++it) { + MidiTrack* track = dynamic_cast(*it); + if (track == 0 || track->mute()) + continue; + PartList* pl = track->parts(); + for (iPart p = pl->begin(); p != pl->end(); ++p) { + Part* part = p->second; + int t = part->tick(); + int l = part->lenTick(); + if (t + l <= lpos) + continue; + if ((t >= lpos) && ((t+l) <= rpos)) { + audio->msgRemovePart(part, false); + } + else if ((t < lpos) && ((t+l) > lpos) && ((t+l) <= rpos)) { + // remove part tail + int len = lpos - t; + MidiPart* nPart = new MidiPart(*(MidiPart*)part); + nPart->setLenTick(len); + // + // cut Events in nPart + EventList* el = nPart->events(); + iEvent ie = el->lower_bound(t + len); + for (; ie != el->end();) { + iEvent i = ie; + ++ie; + // Indicate no undo, and do not do port controller values and clone parts. + //audio->msgDeleteEvent(i->second, nPart, false); + audio->msgDeleteEvent(i->second, nPart, false, false, false); + } + // Indicate no undo, and do port controller values and clone parts. + //audio->msgChangePart(part, nPart, false); + audio->msgChangePart(part, nPart, false, true, true); + } + else if ((t < lpos) && ((t+l) > lpos) && ((t+l) > rpos)) { + //---------------------- + // remove part middle + //---------------------- + + MidiPart* nPart = new MidiPart(*(MidiPart*)part); + EventList* el = nPart->events(); + iEvent is = el->lower_bound(lpos); + iEvent ie = el->upper_bound(rpos); + for (iEvent i = is; i != ie;) { + iEvent ii = i; + ++i; + // Indicate no undo, and do not do port controller values and clone parts. + //audio->msgDeleteEvent(ii->second, nPart, false); + audio->msgDeleteEvent(ii->second, nPart, false, false, false); + } + + ie = el->lower_bound(rpos); + for (; ie != el->end();) { + iEvent i = ie; + ++ie; + Event event = i->second; + Event nEvent = event.clone(); + nEvent.setTick(nEvent.tick() - (rpos-lpos)); + // Indicate no undo, and do not do port controller values and clone parts. + //audio->msgChangeEvent(event, nEvent, nPart, false); + audio->msgChangeEvent(event, nEvent, nPart, false, false, false); + } + nPart->setLenTick(l - (rpos-lpos)); + // Indicate no undo, and do port controller values and clone parts. + //audio->msgChangePart(part, nPart, false); + audio->msgChangePart(part, nPart, false, true, true); + } + else if ((t >= lpos) && (t < rpos) && (t+l) > rpos) { + // TODO: remove part head + } + else if (t >= rpos) { + MidiPart* nPart = new MidiPart(*(MidiPart*)part); + int nt = part->tick(); + nPart->setTick(nt - (rpos -lpos)); + // Indicate no undo, and do port controller values but not clone parts. + //audio->msgChangePart(part, nPart, false); + audio->msgChangePart(part, nPart, false, true, false); + } + } + } + // TODO: cut tempo track + // TODO: process marker + song->endUndo(SC_TRACK_MODIFIED | SC_PART_MODIFIED | SC_PART_REMOVED); + } + +//--------------------------------------------------------- +// globalInsert +// - insert empty space at left locator position upto +// right locator +// - do not touch muted track +// - insert in master track +//--------------------------------------------------------- + +void MusE::globalInsert() + { + unsigned lpos = song->lpos(); + unsigned rpos = song->rpos(); + if (lpos >= rpos) + return; + + song->startUndo(); + TrackList* tracks = song->tracks(); + for (iTrack it = tracks->begin(); it != tracks->end(); ++it) { + MidiTrack* track = dynamic_cast(*it); + // + // process only non muted midi tracks + // + if (track == 0 || track->mute()) + continue; + PartList* pl = track->parts(); + for (iPart p = pl->begin(); p != pl->end(); ++p) { + Part* part = p->second; + unsigned t = part->tick(); + int l = part->lenTick(); + if (t + l <= lpos) + continue; + if (lpos >= t && lpos < (t+l)) { + MidiPart* nPart = new MidiPart(*(MidiPart*)part); + nPart->setLenTick(l + (rpos-lpos)); + EventList* el = nPart->events(); + + iEvent i = el->end(); + while (i != el->begin()) { + --i; + if (i->first < lpos) + break; + Event event = i->second; + Event nEvent = i->second.clone(); + nEvent.setTick(nEvent.tick() + (rpos-lpos)); + // Indicate no undo, and do not do port controller values and clone parts. + //audio->msgChangeEvent(event, nEvent, nPart, false); + audio->msgChangeEvent(event, nEvent, nPart, false, false, false); + } + // Indicate no undo, and do port controller values and clone parts. + //audio->msgChangePart(part, nPart, false); + audio->msgChangePart(part, nPart, false, true, true); + } + else if (t > lpos) { + MidiPart* nPart = new MidiPart(*(MidiPart*)part); + nPart->setTick(t + (rpos -lpos)); + // Indicate no undo, and do port controller values but not clone parts. + //audio->msgChangePart(part, nPart, false); + audio->msgChangePart(part, nPart, false, true, false); + } + } + } + // TODO: process tempo track + // TODO: process marker + song->endUndo(SC_TRACK_MODIFIED | SC_PART_MODIFIED | SC_PART_REMOVED); + } + +//--------------------------------------------------------- +// globalSplit +// - split all parts at the song position pointer +// - do not touch muted track +//--------------------------------------------------------- + +void MusE::globalSplit() + { + int pos = song->cpos(); + song->startUndo(); + TrackList* tracks = song->tracks(); + for (iTrack it = tracks->begin(); it != tracks->end(); ++it) { + Track* track = *it; + PartList* pl = track->parts(); + for (iPart p = pl->begin(); p != pl->end(); ++p) { + Part* part = p->second; + int p1 = part->tick(); + int l0 = part->lenTick(); + if (pos > p1 && pos < (p1+l0)) { + Part* p1; + Part* p2; + track->splitPart(part, pos, p1, p2); + // Indicate no undo, and do port controller values but not clone parts. + //audio->msgChangePart(part, p1, false); + audio->msgChangePart(part, p1, false, true, false); + audio->msgAddPart(p2, false); + break; + } + } + } + song->endUndo(SC_TRACK_MODIFIED | SC_PART_MODIFIED | SC_PART_INSERTED); + } + +//--------------------------------------------------------- +// copyRange +// - copy space between left and right locator position +// to song position pointer +// - dont process muted tracks +// - create a new part for every track containing the +// copied events +//--------------------------------------------------------- + +void MusE::copyRange() + { + QMessageBox::critical(this, + tr("MusE: Copy Range"), + tr("not implemented") + ); + } + +//--------------------------------------------------------- +// cutEvents +// - make sure that all events in a part end where the +// part ends +// - process only marked parts +//--------------------------------------------------------- + +void MusE::cutEvents() + { + QMessageBox::critical(this, + tr("MusE: Cut Events"), + tr("not implemented") + ); + } + +//--------------------------------------------------------- +// checkRegionNotNull +// return true if (rPos - lPos) <= 0 +//--------------------------------------------------------- + +bool MusE::checkRegionNotNull() + { + int start = song->lPos().frame(); + int end = song->rPos().frame(); + if (end - start <= 0) { + QMessageBox::critical(this, + tr("MusE: Bounce"), + tr("set left/right marker for bounce range") + ); + return true; + } + return false; + } + +#if 0 +//--------------------------------------------------------- +// openAudioFileManagement +//--------------------------------------------------------- +void MusE::openAudioFileManagement() + { + if (!audioFileManager) { + audioFileManager = new AudioFileManager(this, "audiofilemanager", false); + audioFileManager->show(); + } + audioFileManager->setShown(true); + } +#endif +//--------------------------------------------------------- +// bounceToTrack +//--------------------------------------------------------- + +void MusE::bounceToTrack() + { + if(audio->bounce()) + return; + + song->bounceOutput = 0; + + if(song->waves()->empty()) + { + QMessageBox::critical(this, + tr("MusE: Bounce to Track"), + tr("No wave tracks found") + ); + return; + } + + OutputList* ol = song->outputs(); + if(ol->empty()) + { + QMessageBox::critical(this, + tr("MusE: Bounce to Track"), + tr("No audio output tracks found") + ); + return; + } + + if(checkRegionNotNull()) + return; + + AudioOutput* out = 0; + // If only one output, pick it, else pick the first selected. + if(ol->size() == 1) + out = ol->front(); + else + { + for(iAudioOutput iao = ol->begin(); iao != ol->end(); ++iao) + { + AudioOutput* o = *iao; + if(o->selected()) + { + if(out) + { + out = 0; + break; + } + out = o; + } + } + if(!out) + { + QMessageBox::critical(this, + tr("MusE: Bounce to Track"), + tr("Select one audio output track,\nand one target wave track") + ); + 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(t->type() != Track::WAVE && t->type() != Track::AUDIO_OUTPUT) { + track = 0; + break; + } + if(t->type() == Track::WAVE) + { + if(track) + { + track = 0; + break; + } + track = (WaveTrack*)t; + } + + } + } + + if (track == 0) { + if(ol->size() == 1) { + QMessageBox::critical(this, + tr("MusE: Bounce to Track"), + tr("Select one target wave track") + ); + return; + } + else + { + QMessageBox::critical(this, + tr("MusE: Bounce to Track"), + tr("Select one target wave track,\nand one audio output track") + ); + return; + } + } + song->bounceOutput = out; + song->bounceTrack = track; + song->setRecord(true); + song->setRecordFlag(track, true); + audio->msgBounce(); + } + +//--------------------------------------------------------- +// bounceToFile +//--------------------------------------------------------- + +void MusE::bounceToFile(AudioOutput* ao) + { + if(audio->bounce()) + return; + song->bounceOutput = 0; + if(!ao) + { + OutputList* ol = song->outputs(); + if(ol->empty()) + { + QMessageBox::critical(this, + tr("MusE: Bounce to Track"), + tr("No audio output tracks found") + ); + return; + } + // If only one output, pick it, else pick the first selected. + if(ol->size() == 1) + ao = ol->front(); + else + { + for(iAudioOutput iao = ol->begin(); iao != ol->end(); ++iao) + { + AudioOutput* o = *iao; + if(o->selected()) + { + if(ao) + { + ao = 0; + break; + } + ao = o; + } + } + if (ao == 0) { + QMessageBox::critical(this, + tr("MusE: Bounce to File"), + tr("Select one audio output track") + ); + return; + } + } + } + + if (checkRegionNotNull()) + return; + + SndFile* sf = getSndFile(0, this, 0); + if (sf == 0) + return; + + song->bounceOutput = ao; + ao->setRecFile(sf); + song->setRecord(true, false); + song->setRecordFlag(ao, true); + audio->msgBounce(); + } + +#ifdef HAVE_LASH +//--------------------------------------------------------- +// lash_idle_cb +//--------------------------------------------------------- +#include +void +MusE::lash_idle_cb () +{ + lash_event_t * event; + if (!lash_client) + return; + + while ( (event = lash_get_event (lash_client)) ) + { + switch (lash_event_get_type (event)) + { + case LASH_Save_File: + { + /* save file */ + QString ss = QString(lash_event_get_string(event)) + QString("/lash-project-muse.med"); + int ok = save (ss.ascii(), false); + if (ok) { + project.setFile(ss.ascii()); + setCaption(tr("MusE: Song: ") + project.baseName(true)); + addProject(ss.ascii()); + museProject = QFileInfo(ss.ascii()).dirPath(true); + } + lash_send_event (lash_client, event); + } + break; + + case LASH_Restore_File: + { + /* load file */ + QString sr = QString(lash_event_get_string(event)) + QString("/lash-project-muse.med"); + loadProjectFile(sr.ascii(), false, true); + lash_send_event (lash_client, event); + } + break; + + case LASH_Quit: + { + /* quit muse */ + std::cout << "MusE::lash_idle_cb Received LASH_Quit" + << std::endl; + lash_event_destroy (event); + } + break; + + default: + { + std::cout << "MusE::lash_idle_cb Received unknown LASH event of type " + << lash_event_get_type (event) + << std::endl; + lash_event_destroy (event); + } + break; + } + } +} +#endif /* HAVE_LASH */ + +//--------------------------------------------------------- +// clearSong +// return true if operation aborted +// called with sequencer stopped +//--------------------------------------------------------- + +bool MusE::clearSong() + { + if (song->dirty) { + int n = 0; + n = QMessageBox::warning(this, appName, + tr("The current Project contains unsaved data\n" + "Load overwrites current Project:\n" + "Save Current Project?"), + tr("&Save"), tr("&Skip"), tr("&Abort"), 0, 2); + switch (n) { + case 0: + if (!save()) // abort if save failed + return true; + break; + case 1: + break; + case 2: + return true; + default: + printf("InternalError: gibt %d\n", n); + } + } + if (audio->isPlaying()) { + audio->msgPlay(false); + while (audio->isPlaying()) + qApp->processEvents(); + } + +again: + for (iToplevel i = toplevels.begin(); i != toplevels.end(); ++i) { + Toplevel tl = *i; + unsigned long obj = tl.object(); + switch (tl.type()) { + case Toplevel::CLIPLIST: + case Toplevel::MARKER: + break; + case Toplevel::PIANO_ROLL: + case Toplevel::LISTE: + case Toplevel::DRUM: + case Toplevel::MASTER: + case Toplevel::WAVE: + case Toplevel::LMASTER: + ((QWidget*)(obj))->close(true); + goto again; + } + } + song->clear(false); + return false; + } + +//--------------------------------------------------------- +// startEditInstrument +//--------------------------------------------------------- + +void MusE::startEditInstrument() + { + if(editInstrument == 0) + { + editInstrument = new EditInstrument(this); + editInstrument->show(); + } + else + { + if(editInstrument->isShown()) + editInstrument->hide(); + else + editInstrument->show(); + } + + } + +//--------------------------------------------------------- +// switchMixerAutomation +//--------------------------------------------------------- + +void MusE::switchMixerAutomation() + { + automation = !automation; + // Clear all pressed and touched and rec event lists. + song->clearRecAutomation(true); + +printf("automation = %d\n", automation); + menuAutomation->setItemChecked(autoId, automation); + } + +//--------------------------------------------------------- +// clearAutomation +//--------------------------------------------------------- + +void MusE::clearAutomation() + { + printf("not implemented\n"); + } + +//--------------------------------------------------------- +// takeAutomationSnapshot +//--------------------------------------------------------- + +void MusE::takeAutomationSnapshot() + { + int frame = song->cPos().frame(); + TrackList* tracks = song->tracks(); + for (iTrack i = tracks->begin(); i != tracks->end(); ++i) { + if ((*i)->isMidiTrack()) + continue; + AudioTrack* track = (AudioTrack*)*i; + CtrlListList* cll = track->controller(); + for (iCtrlList icl = cll->begin(); icl != cll->end(); ++icl) { + double val = icl->second->curVal(); + icl->second->add(frame, val); + } + } + } + +//--------------------------------------------------------- +// updateConfiguration +// called whenever the configuration has changed +//--------------------------------------------------------- + +void MusE::updateConfiguration() + { + fileOpenAction->setAccel(shortcuts[SHRT_OPEN].key); + fileNewAction->setAccel(shortcuts[SHRT_NEW].key); + fileSaveAction->setAccel(shortcuts[SHRT_SAVE].key); + + menu_file->setAccel(shortcuts[SHRT_OPEN_RECENT].key, menu_ids[CMD_OPEN_RECENT]); + menu_file->setAccel(shortcuts[SHRT_LOAD_TEMPLATE].key, menu_ids[CMD_LOAD_TEMPLATE]); + menu_file->setAccel(shortcuts[SHRT_SAVE_AS].key, menu_ids[CMD_SAVE_AS]); + menu_file->setAccel(shortcuts[SHRT_IMPORT_MIDI].key, menu_ids[CMD_IMPORT_MIDI]); + menu_file->setAccel(shortcuts[SHRT_EXPORT_MIDI].key, menu_ids[CMD_EXPORT_MIDI]); + menu_file->setAccel(shortcuts[SHRT_IMPORT_PART].key, menu_ids[CMD_IMPORT_PART]); + menu_file->setAccel(shortcuts[SHRT_IMPORT_AUDIO].key, menu_ids[CMD_IMPORT_AUDIO]); + menu_file->setAccel(shortcuts[SHRT_QUIT].key, menu_ids[CMD_QUIT]); + + menuEdit->setAccel(Key_Delete, CMD_DELETE); + menuEdit->setAccel(shortcuts[SHRT_OPEN_DRUMS].key, menu_ids[CMD_OPEN_DRUMS]); + menuEdit->setAccel(shortcuts[SHRT_OPEN_LIST].key, menu_ids[CMD_OPEN_LIST]); + menuEdit->setAccel(shortcuts[SHRT_OPEN_WAVE].key, menu_ids[CMD_OPEN_WAVE]); + menuEdit->setAccel(shortcuts[SHRT_OPEN_MIDI_TRANSFORM].key, menu_ids[CMD_OPEN_MIDI_TRANSFORM]); + + midiEdit->setAccel(shortcuts[SHRT_TRANSPOSE].key, menu_ids[CMD_TRANSPOSE]); + + master->setAccel(shortcuts[SHRT_OPEN_GRAPHIC_MASTER].key, menu_ids[CMD_OPEN_GRAPHIC_MASTER]); + master->setAccel(shortcuts[SHRT_OPEN_LIST_MASTER].key, menu_ids[CMD_OPEN_LIST_MASTER]); + + menuStructure->setAccel(shortcuts[SHRT_GLOBAL_CUT].key, menu_ids[CMD_GLOBAL_CUT]); + menuStructure->setAccel(shortcuts[SHRT_GLOBAL_INSERT].key, menu_ids[CMD_GLOBAL_INSERT]); + menuStructure->setAccel(shortcuts[SHRT_GLOBAL_SPLIT].key, menu_ids[CMD_GLOBAL_SPLIT]); + menuStructure->setAccel(shortcuts[SHRT_COPY_RANGE].key, menu_ids[CMD_COPY_RANGE]); + menuStructure->setAccel(shortcuts[SHRT_CUT_EVENTS].key, menu_ids[CMD_CUT_EVENTS]); + + menuView->setAccel(shortcuts[SHRT_OPEN_TRANSPORT].key, tr_id); + menuView->setAccel(shortcuts[SHRT_OPEN_BIGTIME].key, bt_id); + //menuView->setAccel(shortcuts[SHRT_OPEN_MIXER].key, aid1); + menuView->setAccel(shortcuts[SHRT_OPEN_MIXER].key, aid1a); + menuView->setAccel(shortcuts[SHRT_OPEN_MIXER2].key, aid1b); +// menuView->setAccel(shortcuts[SHRT_OPEN_CLIPS].key, aid2); +// markerAction->setAccel(shortcuts[SHRT_OPEN_MARKER].key ); + menuView->setAccel(shortcuts[SHRT_OPEN_MARKER].key, mr_id ); + + menuSettings->setAccel(shortcuts[SHRT_GLOBAL_CONFIG].key, menu_ids[CMD_GLOBAL_CONFIG]); + menuSettings->setAccel(shortcuts[SHRT_CONFIG_SHORTCUTS].key, menu_ids[CMD_CONFIG_SHORTCUTS]); + menuSettings->setAccel(shortcuts[SHRT_CONFIG_METRONOME].key, menu_ids[CMD_CONFIG_METRONOME]); + menuSettings->setAccel(shortcuts[SHRT_CONFIG_MIDISYNC].key, menu_ids[CMD_CONFIG_MIDISYNC]); + menuSettings->setAccel(shortcuts[SHRT_APPEARANCE_SETTINGS].key, menu_ids[CMD_APPEARANCE_SETTINGS]); + menuSettings->setAccel(shortcuts[SHRT_CONFIG_MIDI_PORTS].key, menu_ids[CMD_CONFIG_MIDI_PORTS]); + menuSettings->setAccel(shortcuts[SHRT_CONFIG_AUDIO_PORTS].key, menu_ids[CMD_CONFIG_AUDIO_PORTS]); + +// menu_functions->setAccel(shortcuts[SHRT_MIDI_EDIT_INSTRUMENTS].key, menu_ids[CMD_MIDI_EDIT_INSTRUMENTS]); + menu_functions->setAccel(shortcuts[SHRT_MIDI_RESET].key, menu_ids[CMD_MIDI_RESET]); + menu_functions->setAccel(shortcuts[SHRT_MIDI_INIT].key, menu_ids[CMD_MIDI_INIT]); + menu_functions->setAccel(shortcuts[SHRT_MIDI_LOCAL_OFF].key, menu_ids[CMD_MIDI_LOCAL_OFF]); + + menu_audio->setAccel(shortcuts[SHRT_AUDIO_BOUNCE_TO_TRACK].key, menu_ids[CMD_AUDIO_BOUNCE_TO_TRACK]); + menu_audio->setAccel(shortcuts[SHRT_AUDIO_BOUNCE_TO_FILE].key , menu_ids[CMD_AUDIO_BOUNCE_TO_FILE]); + menu_audio->setAccel(shortcuts[SHRT_AUDIO_RESTART].key, menu_ids[CMD_AUDIO_RESTART]); + + menuAutomation->setAccel(shortcuts[SHRT_MIXER_AUTOMATION].key, autoId); + menuAutomation->setAccel(shortcuts[SHRT_MIXER_SNAPSHOT].key, menu_ids[CMD_MIXER_SNAPSHOT]); + menuAutomation->setAccel(shortcuts[SHRT_MIXER_AUTOMATION_CLEAR].key, menu_ids[CMD_MIXER_AUTOMATION_CLEAR]); + + menu_help->setAccel(menu_ids[CMD_OPEN_HELP], shortcuts[SHRT_OPEN_HELP].key); + menu_help->setAccel(menu_ids[CMD_START_WHATSTHIS], shortcuts[SHRT_START_WHATSTHIS].key); + pianoAction->setAccel(shortcuts[SHRT_OPEN_PIANO].key); + + select->setAccel(shortcuts[SHRT_SELECT_ALL].key, CMD_SELECT_ALL); + +// select->setAccel(shortcuts[SHRT_DESEL_PARTS].key, CMD_SELECT_NONE); + select->setAccel(shortcuts[SHRT_SELECT_NONE].key, CMD_SELECT_NONE); + + select->setAccel(shortcuts[SHRT_SELECT_INVERT].key, CMD_SELECT_INVERT); + select->setAccel(shortcuts[SHRT_SELECT_ILOOP].key, CMD_SELECT_ILOOP); + select->setAccel(shortcuts[SHRT_SELECT_OLOOP].key, CMD_SELECT_OLOOP); + select->setAccel(shortcuts[SHRT_SELECT_PRTSTRACK].key, CMD_SELECT_PARTS); + follow->setAccel(shortcuts[SHRT_FOLLOW_JUMP].key, CMD_FOLLOW_JUMP); + follow->setAccel(shortcuts[SHRT_FOLLOW_NO].key, CMD_FOLLOW_NO); + follow->setAccel(shortcuts[SHRT_FOLLOW_CONTINUOUS].key, CMD_FOLLOW_CONTINUOUS); + midiInputPlugins->setAccel(shortcuts[SHRT_MIDI_INPUT_TRANSPOSE].key, 0); + midiInputPlugins->setAccel(shortcuts[SHRT_MIDI_INPUT_TRANSFORM].key, 1); + midiInputPlugins->setAccel(shortcuts[SHRT_MIDI_INPUT_FILTER].key, 2); + midiInputPlugins->setAccel(shortcuts[SHRT_MIDI_REMOTE_CONTROL].key, 3); + midiInputPlugins->setAccel(shortcuts[SHRT_RANDOM_RHYTHM_GENERATOR].key, 4); + + addTrack->setAccel(shortcuts[SHRT_ADD_MIDI_TRACK].key, Track::MIDI); + addTrack->setAccel(shortcuts[SHRT_ADD_DRUM_TRACK].key, Track::DRUM); + addTrack->setAccel(shortcuts[SHRT_ADD_WAVE_TRACK].key, Track::WAVE); + addTrack->setAccel(shortcuts[SHRT_ADD_AUDIO_OUTPUT].key, Track::AUDIO_OUTPUT); + addTrack->setAccel(shortcuts[SHRT_ADD_AUDIO_GROUP].key, Track::AUDIO_GROUP); + addTrack->setAccel(shortcuts[SHRT_ADD_AUDIO_INPUT].key, Track::AUDIO_INPUT); + addTrack->setAccel(shortcuts[SHRT_ADD_AUDIO_AUX].key, Track::AUDIO_AUX); + } + +//--------------------------------------------------------- +// 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, unsigned, bool)), bigtime, SLOT(setPos(int, unsigned, 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); + menuView->setItemChecked(bt_id, on); + } + +//--------------------------------------------------------- +// toggleBigTime +//--------------------------------------------------------- + +void MusE::toggleBigTime() + { + showBigtime(!menuView->isItemChecked(bt_id)); + } + +//--------------------------------------------------------- +// bigtimeClosed +//--------------------------------------------------------- + +void MusE::bigtimeClosed() + { + menuView->setItemChecked(bt_id, false); + } + +//--------------------------------------------------------- +// showMixer +//--------------------------------------------------------- + +/* +void MusE::showMixer(bool on) + { + if (on && audioMixer == 0) { + audioMixer = new AudioMixerApp(this); + connect(audioMixer, SIGNAL(closed()), SLOT(mixerClosed())); + audioMixer->resize(config.geometryMixer.size()); + audioMixer->move(config.geometryMixer.topLeft()); + } + if (audioMixer) + audioMixer->setShown(on); + menuView->setItemChecked(aid1, on); + } +*/ + +//--------------------------------------------------------- +// showMixer1 +//--------------------------------------------------------- + +void MusE::showMixer1(bool on) + { + if (on && mixer1 == 0) { + mixer1 = new AudioMixerApp(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); + menuView->setItemChecked(aid1a, on); + } + +//--------------------------------------------------------- +// showMixer2 +//--------------------------------------------------------- + +void MusE::showMixer2(bool on) + { + if (on && mixer2 == 0) { + mixer2 = new AudioMixerApp(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); + menuView->setItemChecked(aid1b, on); + } + +//--------------------------------------------------------- +// toggleMixer +//--------------------------------------------------------- + +/* +void MusE::toggleMixer() + { + showMixer(!menuView->isItemChecked(aid1)); + } +*/ + +//--------------------------------------------------------- +// toggleMixer1 +//--------------------------------------------------------- + +void MusE::toggleMixer1() + { + showMixer1(!menuView->isItemChecked(aid1a)); + } + +//--------------------------------------------------------- +// toggleMixer2 +//--------------------------------------------------------- + +void MusE::toggleMixer2() + { + showMixer2(!menuView->isItemChecked(aid1b)); + } + +//--------------------------------------------------------- +// mixerClosed +//--------------------------------------------------------- + +/* +void MusE::mixerClosed() + { + menuView->setItemChecked(aid1, false); + } +*/ + +//--------------------------------------------------------- +// mixer1Closed +//--------------------------------------------------------- + +void MusE::mixer1Closed() + { + //aid1a->setChecked(false); + menuView->setItemChecked(aid1a, false); + } + +//--------------------------------------------------------- +// mixer2Closed +//--------------------------------------------------------- + +void MusE::mixer2Closed() + { + //aid1b->setChecked(false); + menuView->setItemChecked(aid1b, false); + } + + +//QWidget* MusE::mixerWindow() { return audioMixer; } +QWidget* MusE::mixer1Window() { return mixer1; } +QWidget* MusE::mixer2Window() { return mixer2; } + +QWidget* MusE::transportWindow() { return transport; } +QWidget* MusE::bigtimeWindow() { return bigtime; } + +//--------------------------------------------------------- +// focusInEvent +//--------------------------------------------------------- + +void MusE::focusInEvent(QFocusEvent* ev) + { + //if (audioMixer) + // audioMixer->raise(); + if (mixer1) + mixer1->raise(); + if (mixer2) + mixer2->raise(); + raise(); + QMainWindow::focusInEvent(ev); + } + +//--------------------------------------------------------- +// setUsedTool +//--------------------------------------------------------- + +void MusE::setUsedTool(int tool) + { + tools1->set(tool); + } + + +//--------------------------------------------------------- +// execDeliveredScript +//--------------------------------------------------------- +void MusE::execDeliveredScript(int id) +{ + //QString scriptfile = QString(INSTPREFIX) + SCRIPTSSUFFIX + deliveredScriptNames[id]; + song->executeScript(song->getScriptPath(id, true), song->getSelectedMidiParts(), 0, false); // TODO: get quant from arranger +} +//--------------------------------------------------------- +// execUserScript +//--------------------------------------------------------- +void MusE::execUserScript(int id) +{ + song->executeScript(song->getScriptPath(id, false), song->getSelectedMidiParts(), 0, false); // TODO: get quant from arranger +} + diff --git a/muse2/muse/app.h b/muse2/muse/app.h new file mode 100644 index 00000000..3e0d36a6 --- /dev/null +++ b/muse2/muse/app.h @@ -0,0 +1,327 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: app.h,v 1.34.2.14 2009/11/16 11:29:33 lunar_shuttle Exp $ +// +// (C) Copyright 1999-2004 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __APP_H__ +#define __APP_H__ + +#include "config.h" + +#include +#include +//Added by qt3to4: +#include +#include +#include +#include +#include "cobject.h" +#include "tools.h" +#include + +class Part; +class PartList; +class Q3ToolBar; +class Q3PopupMenu; +class Transport; +class BigTime; +class Arranger; +class Instrument; +class Q3ListView; +class Q3ListViewItem; +class QPoint; +class QToolButton; +class PopupMenu; +class Track; +class PrinterConfig; +class MidiSyncConfig; +class MRConfig; +class MetronomeConfig; +class AudioConf; +class Xml; +class AudioMixerApp; +class ClipListEdit; +class AudioRecord; +class MidiFileConfig; +class MidiFilterConfig; +class MarkerView; +class GlobalSettingsConfig; +class MidiControllerEditDialog; +class MidiInputTransformDialog; +class MidiTransformerDialog; +class SynthI; +class RhythmGen; +class MidiTrack; +class MidiInstrument; +class MidiPort; +class ShortcutConfig; +class Appearance; +class WaveTrack; +class AudioOutput; +class EditInstrument; + +#define MENU_ADD_SYNTH_ID_BASE 0x1000 + +//--------------------------------------------------------- +// MusE +//--------------------------------------------------------- + +class MusE : public Q3MainWindow + { + Q_OBJECT + enum {CMD_CUT, CMD_COPY, CMD_PASTE, CMD_INSERT, CMD_INSERTMEAS, CMD_PASTE_CLONE, + CMD_PASTE_TO_TRACK, CMD_PASTE_CLONE_TO_TRACK, CMD_DELETE, + CMD_SELECT_ALL, CMD_SELECT_NONE, CMD_SELECT_INVERT, + CMD_SELECT_ILOOP, CMD_SELECT_OLOOP, CMD_SELECT_PARTS, + CMD_FOLLOW_NO, CMD_FOLLOW_JUMP, CMD_FOLLOW_CONTINUOUS , + CMD_DELETE_TRACK + }; + + //File menu items: + enum { CMD_OPEN_RECENT=0, CMD_LOAD_TEMPLATE, CMD_SAVE_AS, CMD_IMPORT_MIDI, + CMD_EXPORT_MIDI, CMD_IMPORT_PART, CMD_IMPORT_AUDIO, CMD_QUIT, CMD_OPEN_DRUMS, CMD_OPEN_WAVE, + CMD_OPEN_LIST, CMD_OPEN_LIST_MASTER, CMD_GLOBAL_CONFIG, + CMD_OPEN_GRAPHIC_MASTER, CMD_OPEN_MIDI_TRANSFORM, CMD_TRANSPOSE, + CMD_GLOBAL_CUT, CMD_GLOBAL_INSERT, CMD_GLOBAL_SPLIT, CMD_COPY_RANGE, + CMD_CUT_EVENTS, CMD_CONFIG_SHORTCUTS, CMD_CONFIG_METRONOME, CMD_CONFIG_MIDISYNC, + CMD_MIDI_FILE_CONFIG, CMD_APPEARANCE_SETTINGS, CMD_CONFIG_MIDI_PORTS, CMD_CONFIG_AUDIO_PORTS, + CMD_MIDI_EDIT_INSTRUMENTS, CMD_MIDI_RESET, CMD_MIDI_INIT, CMD_MIDI_LOCAL_OFF, + CMD_MIXER_SNAPSHOT, CMD_MIXER_AUTOMATION_CLEAR, CMD_OPEN_HELP, CMD_OPEN_HOMEPAGE, + CMD_OPEN_BUG, CMD_START_WHATSTHIS, + CMD_AUDIO_BOUNCE_TO_FILE, CMD_AUDIO_BOUNCE_TO_TRACK, CMD_AUDIO_RESTART, + CMD_LAST }; + + int menu_ids[CMD_LAST]; + Q3Action *fileSaveAction, *fileOpenAction, *pianoAction, *fileNewAction, /* *markerAction,*/ *testAction; + QString appName; + + QFileInfo project; + Q3ToolBar *tools; + EditToolBar *tools1; + + Transport* transport; + BigTime* bigtime; + EditInstrument* editInstrument; + + Q3PopupMenu *menu_file, *menuView, *menuSettings, *menu_help; + Q3PopupMenu *menuEdit, *menuStructure; + Q3PopupMenu* menu_audio, *menuAutomation; + Q3PopupMenu* menu_functions, *menuScriptPlugins; + Q3PopupMenu* select, *master, *midiEdit, *addTrack; + + // Special 'stay-open' menu for routes. + PopupMenu* routingPopupMenu; + + int aid1a, aid1b, aid2, aid3, autoId; + int tr_id, bt_id, mr_id; + int cc_id; + Q3PopupMenu* follow; + int fid0, fid1, fid2; + Q3PopupMenu* midiInputPlugins; + int mpid0, mpid1, mpid2, mpid3, mpid4; + + QWidget* midiPortConfig; + QWidget* softSynthesizerConfig; + MidiSyncConfig* midiSyncConfig; + MRConfig* midiRemoteConfig; + RhythmGen* midiRhythmGenerator; + MetronomeConfig* metronomeConfig; + AudioConf* audioConfig; + MidiFileConfig* midiFileConfig; + GlobalSettingsConfig* globalSettingsConfig; + MidiFilterConfig* midiFilterConfig; + MidiInputTransformDialog* midiInputTransform; + ShortcutConfig* shortcutConfig; + Appearance* appearance; + AudioMixerApp* mixer1; + AudioMixerApp* mixer2; + + ToplevelList toplevels; + ClipListEdit* clipListEdit; + MarkerView* markerView; + MidiTransformerDialog* midiTransformerDialog; + Q3PopupMenu* openRecent; + + bool readMidi(FILE*); + void read(Xml& xml, bool skipConfig); + void processTrack(MidiTrack* track); + + void write(Xml& xml) const; + bool clearSong(); + bool save(const QString&, bool); + void setUntitledProject(); + void setConfigDefaults(); + + void setFollow(); + void readConfigParts(Xml& xml); + void readMidiport(Xml& xml); + void readMidichannel(Xml& xml, int port); + void readCtrl(Xml& xml, int port, int channel); + void readToplevels(Xml& xml); + PartList* getMidiPartsToEdit(); + Part* readPart(Xml& xml); + bool checkRegionNotNull(); + void loadProjectFile1(const QString&, bool songTemplate, bool loadAll); + void writeGlobalConfiguration(int level, Xml&) const; + void writeConfiguration(int level, Xml&) const; + void updateConfiguration(); + + virtual void focusInEvent(QFocusEvent*); + + signals: + void configChanged(); + + private slots: + //void runPythonScript(); + void loadProject(); + bool save(); + void configGlobalSettings(); + void quitDoc(); + void about(); + void aboutQt(); + void startHelpBrowser(); + void startHomepageBrowser(); + void startBugBrowser(); + void launchBrowser(QString &whereTo); + void importMidi(); + void importWave(); + void importPart(); + void exportMidi(); + + void toggleTransport(); + void toggleMarker(); + void toggleBigTime(); + //void toggleMixer(); + void toggleMixer1(); + void toggleMixer2(); + + void configMidiPorts(); + void configMidiSync(); + void configMidiFile(); + void configShortCuts(); + void configMetronome(); + void configAppearance(); + void startEditor(PartList*, int); + void startMasterEditor(); + void startLMasterEditor(); + void startListEditor(); + void startListEditor(PartList*); + void startDrumEditor(); + void startDrumEditor(PartList*); + void startEditor(Track*); + void startPianoroll(); + void startPianoroll(PartList* pl); + void startWaveEditor(); + void startWaveEditor(PartList*); + void startSongInfo(bool editable=true); + + void startMidiTransformer(); + void writeGlobalConfiguration() const; + void startEditInstrument(); + void startClipList(); + + void openRecentMenu(); + void selectProject(int id); + void cmd(int); + void clipboardChanged(); + void selectionChanged(); + 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 startMidiInputPlugin(int); + void hideMitPluginTranspose(); + void hideMidiInputTransform(); + void hideMidiFilterConfig(); + void hideMidiRemoteConfig(); + void hideMidiRhythmGenerator(); + void globalCut(); + void globalInsert(); + void globalSplit(); + void copyRange(); + void cutEvents(); + void bounceToTrack(); + void resetMidiDevices(); + void initMidiDevices(); + void localOff(); + void switchMixerAutomation(); + void takeAutomationSnapshot(); + void clearAutomation(); + void bigtimeClosed(); + //void mixerClosed(); + void mixer1Closed(); + void mixer2Closed(); + void markerClosed(); + + void execDeliveredScript(int); + void execUserScript(int); + + public slots: + bool saveAs(); + void bounceToFile(AudioOutput* ao = 0); + void closeEvent(QCloseEvent*e); + void loadProjectFile(const QString&); + void loadProjectFile(const QString&, bool songTemplate, bool loadAll); + void toplevelDeleted(unsigned long tl); + void loadTheme(QString); + bool seqRestart(); + void loadTemplate(); + void showBigtime(bool); + //void showMixer(bool); + void showMixer1(bool); + void showMixer2(bool); + void showMarker(bool); + void importMidi(const QString &file); + void setUsedTool(int); + void showDidYouKnowDialog(); + + void routingPopupMenuAboutToHide(); + + public: + MusE(int argc, char** argv); + Arranger* arranger; + QRect configGeometryMain; + bool importMidi(const QString name, bool merge); + void kbAccel(int); + void changeConfig(bool writeFlag); + + void seqStop(); + bool seqStart(); + void setHeartBeat(); + void importController(int, MidiPort*, int); + //QWidget* mixerWindow(); + QWidget* mixer1Window(); + QWidget* mixer2Window(); + QWidget* transportWindow(); + QWidget* bigtimeWindow(); + bool importWaveToTrack(QString& name, unsigned tick=0, Track* track=NULL); + void importPartToTrack(QString& filename, unsigned tick, Track* track); + + void showTransport(bool flag); + + // Special 'stay-open' menu for routes. + PopupMenu* getRoutingPopupMenu(); + PopupMenu* prepareRoutingPopupMenu(Track* /*track*/, bool /*dst*/); + void routingPopupMenuActivated(Track* /*track*/, int /*id*/); + void updateRouteMenus(Track* /*track*/, QObject* /*master*/); + +#ifdef HAVE_LASH + void lash_idle_cb (); +#endif + }; + +extern void addProject(const QString& name); +#endif + diff --git a/muse2/muse/appearance.cpp b/muse2/muse/appearance.cpp new file mode 100644 index 00000000..201d0c4b --- /dev/null +++ b/muse2/muse/appearance.cpp @@ -0,0 +1,718 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: appearance.cpp,v 1.11.2.5 2009/11/14 03:37:48 terminator356 Exp $ +//========================================================= + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "icons.h" +#include "appearance.h" +#include "track.h" +#include "app.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" + +//--------------------------------------------------------- +// IdListViewItem +//--------------------------------------------------------- + +class IdListViewItem : public Q3ListViewItem { + int _id; + + public: + IdListViewItem(int id, Q3ListViewItem* parent, QString s) + : Q3ListViewItem(parent, s) + { + _id = id; + } + IdListViewItem(int id, Q3ListView* parent, QString s) + : Q3ListViewItem(parent, s) + { + _id = id; + } + int id() const { return _id; } + }; + +//--------------------------------------------------------- +// Appearance +//--------------------------------------------------------- + +Appearance::Appearance(Arranger* a, QWidget* parent, const char* name) + : AppearanceDialogBase(parent, name) + { + arr = a; + color = 0; + config = new GlobalConfigValues; + + QToolTip::add(fontName0, tr("Main application font, and default font for any\n controls not defined here.")); + QToolTip::add(fontName1, tr("For small controls like mixer strips.\nAlso timescale small numbers, arranger part name overlay,\n and effects rack.")); + QToolTip::add(fontName2, tr("Midi track info panel. Transport controls.")); + QToolTip::add(fontName3, tr("Controller graph and S/X buttons. Large numbers for time\n and tempo scale, and time signature.")); + QToolTip::add(fontName4, tr("Time scale markers.")); + QToolTip::add(fontName5, tr("List editor: meta event edit dialog multi-line edit box.")); + QToolTip::add(fontName6, tr("Mixer label font. Auto-font-sizing up to chosen font size.\nWord-breaking but only with spaces.")); + QToolTip::add(fontSize6, tr("Maximum mixer label auto-font-sizing font size.")); + + // ARRANGER + + /* + currentBg = ::config.canvasBgPixmap; + if (currentBg.isEmpty()) + currentBg = ""; + 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 + IdListViewItem* id; + IdListViewItem* aid; + itemList->clear(); + aid = new IdListViewItem(0, itemList, "Arranger"); + id = new IdListViewItem(0, aid, "PartColors"); + new IdListViewItem(0x400, id, "Default"); + new IdListViewItem(0x401, id, "Refrain"); + new IdListViewItem(0x402, id, "Bridge"); + new IdListViewItem(0x403, id, "Intro"); + new IdListViewItem(0x404, id, "Coda"); + new IdListViewItem(0x405, id, "Chorus"); + new IdListViewItem(0x406, id, "Solo"); + new IdListViewItem(0x407, id, "Brass"); + new IdListViewItem(0x408, id, "Percussion"); + new IdListViewItem(0x409, id, "Drums"); + new IdListViewItem(0x40a, id, "Guitar"); + new IdListViewItem(0x40b, id, "Bass"); + new IdListViewItem(0x40c, id, "Flute"); + new IdListViewItem(0x40d, id, "Strings"); + new IdListViewItem(0x40e, id, "Keyboard"); + new IdListViewItem(0x40f, id, "Piano"); + new IdListViewItem(0x410, id, "Saxophon"); + new IdListViewItem(0x41c, aid, "part canvas background"); + id = new IdListViewItem(0, aid, "Track List"); + new IdListViewItem(0x411, id, "background"); + new IdListViewItem(0x412, id, "midi background"); + new IdListViewItem(0x413, id, "drum background"); + new IdListViewItem(0x414, id, "wave background"); + new IdListViewItem(0x415, id, "output background"); + new IdListViewItem(0x416, id, "input background"); + new IdListViewItem(0x417, id, "group background"); + new IdListViewItem(0x418, id, "aux background"); + new IdListViewItem(0x419, id, "synth background"); + new IdListViewItem(0x41a, id, "selected track background"); + new IdListViewItem(0x41b, id, "selected track foreground"); + id = new IdListViewItem(0, itemList, "BigTime"); + new IdListViewItem(0x100, id, "background"); + new IdListViewItem(0x101, id, "foreground"); + id = new IdListViewItem(0, itemList, "Transport"); + new IdListViewItem(0x200, id, "handle"); + id = new IdListViewItem(0, itemList, "Midi Editor"); + new IdListViewItem(0x41d, id, "controller graph"); + id = new IdListViewItem(0, itemList, "Wave Editor"); + new IdListViewItem(0x300, id, "background"); + + connect(itemList, SIGNAL(selectionChanged()), SLOT(colorItemSelectionChanged())); + connect(aPalette, SIGNAL(clicked(int)), SLOT(paletteClicked(int))); + connect(rslider, SIGNAL(valueChanged(int)), SLOT(rsliderChanged(int))); + connect(gslider, SIGNAL(valueChanged(int)), SLOT(gsliderChanged(int))); + connect(bslider, SIGNAL(valueChanged(int)), SLOT(bsliderChanged(int))); + 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(rval, SIGNAL(valueChanged(int)), SLOT(rsliderChanged(int))); + connect(gval, SIGNAL(valueChanged(int)), SLOT(gsliderChanged(int))); + connect(bval, SIGNAL(valueChanged(int)), SLOT(bsliderChanged(int))); + connect(hval, SIGNAL(valueChanged(int)), SLOT(hsliderChanged(int))); + connect(sval, SIGNAL(valueChanged(int)), SLOT(ssliderChanged(int))); + connect(vval, SIGNAL(valueChanged(int)), SLOT(vsliderChanged(int))); + + connect(addToPalette, SIGNAL(clicked()), SLOT(addToPaletteClicked())); + + //--------------------------------------------------- + // STYLE + //--------------------------------------------------- + + /* + themeComboBox->clear(); + QString cs = muse->style().name(); + cs = cs.lower(); + + themeComboBox->insertStringList(QStyleFactory::keys()); + for (int i = 0; i < themeComboBox->count(); ++i) { + if (themeComboBox->text(i).lower() == cs) { + themeComboBox->setCurrentItem(i); + } + } + */ + + //--------------------------------------------------- + // Fonts + //--------------------------------------------------- + + fontBrowse0->setPixmap(*openIcon); + fontBrowse1->setPixmap(*openIcon); + fontBrowse2->setPixmap(*openIcon); + fontBrowse3->setPixmap(*openIcon); + fontBrowse4->setPixmap(*openIcon); + fontBrowse5->setPixmap(*openIcon); + fontBrowse6->setPixmap(*openIcon); + connect(fontBrowse0, SIGNAL(clicked()), SLOT(browseFont0())); + connect(fontBrowse1, SIGNAL(clicked()), SLOT(browseFont1())); + connect(fontBrowse2, SIGNAL(clicked()), SLOT(browseFont2())); + connect(fontBrowse3, SIGNAL(clicked()), SLOT(browseFont3())); + connect(fontBrowse4, SIGNAL(clicked()), SLOT(browseFont4())); + connect(fontBrowse5, SIGNAL(clicked()), SLOT(browseFont5())); + connect(fontBrowse6, SIGNAL(clicked()), SLOT(browseFont6())); + + connect(applyButton, SIGNAL(clicked()), SLOT(apply())); + connect(okButton, SIGNAL(clicked()), SLOT(ok())); + connect(cancelButton, SIGNAL(clicked()), SLOT(cancel())); + connect(selectBgButton, SIGNAL(clicked()), SLOT(configBackground())); + connect(clearBgButton, SIGNAL(clicked()), SLOT(clearBackground())); + connect(partShowevents, SIGNAL(toggled(bool)), eventButtonGroup, SLOT(setEnabled(bool))); + //updateColor(); + } + +//--------------------------------------------------------- +// resetValues +//--------------------------------------------------------- + +void Appearance::resetValues() + { + *config = ::config; // init with global config values + updateFonts(); + palette0->setPaletteBackgroundColor(config->palette[0]); + palette1->setPaletteBackgroundColor(config->palette[1]); + palette2->setPaletteBackgroundColor(config->palette[2]); + palette3->setPaletteBackgroundColor(config->palette[3]); + palette4->setPaletteBackgroundColor(config->palette[4]); + palette5->setPaletteBackgroundColor(config->palette[5]); + palette6->setPaletteBackgroundColor(config->palette[6]); + palette7->setPaletteBackgroundColor(config->palette[7]); + palette8->setPaletteBackgroundColor(config->palette[8]); + palette9->setPaletteBackgroundColor(config->palette[9]); + palette10->setPaletteBackgroundColor(config->palette[10]); + palette11->setPaletteBackgroundColor(config->palette[11]); + palette12->setPaletteBackgroundColor(config->palette[12]); + palette13->setPaletteBackgroundColor(config->palette[13]); + palette14->setPaletteBackgroundColor(config->palette[14]); + palette15->setPaletteBackgroundColor(config->palette[15]); + + currentBg = ::config.canvasBgPixmap; + if (currentBg.isEmpty()) + currentBg = tr(""); + 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); + eventButtonGroup->setEnabled(config->canvasShowPartType & 2); + arrGrid->setChecked(config->canvasShowGrid); + + themeComboBox->clear(); + QString cs = muse->style()->name(); + cs = cs.lower(); + + themeComboBox->insertStringList(QStyleFactory::keys()); + for (int i = 0; i < themeComboBox->count(); ++i) { + if (themeComboBox->text(i).lower() == cs) { + themeComboBox->setCurrentItem(i); + } + } + + updateColor(); + + } + +//--------------------------------------------------------- +// Appearance +//--------------------------------------------------------- + +Appearance::~Appearance() + { + delete config; + } + +//--------------------------------------------------------- +// updateFonts +//--------------------------------------------------------- + +void Appearance::updateFonts() + { + fontSize0->setValue(config->fonts[0].pointSize()); + fontName0->setText(config->fonts[0].family()); + italic0->setChecked(config->fonts[0].italic()); + bold0->setChecked(config->fonts[0].bold()); + + fontSize1->setValue(config->fonts[1].pointSize()); + fontName1->setText(config->fonts[1].family()); + italic1->setChecked(config->fonts[1].italic()); + bold1->setChecked(config->fonts[1].bold()); + + fontSize2->setValue(config->fonts[2].pointSize()); + fontName2->setText(config->fonts[2].family()); + italic2->setChecked(config->fonts[2].italic()); + bold2->setChecked(config->fonts[2].bold()); + + fontSize3->setValue(config->fonts[3].pointSize()); + fontName3->setText(config->fonts[3].family()); + italic3->setChecked(config->fonts[3].italic()); + bold3->setChecked(config->fonts[3].bold()); + + fontSize4->setValue(config->fonts[4].pointSize()); + fontName4->setText(config->fonts[4].family()); + italic4->setChecked(config->fonts[4].italic()); + bold4->setChecked(config->fonts[4].bold()); + + fontSize5->setValue(config->fonts[5].pointSize()); + fontName5->setText(config->fonts[5].family()); + italic5->setChecked(config->fonts[5].italic()); + bold5->setChecked(config->fonts[5].bold()); + + fontSize6->setValue(config->fonts[6].pointSize()); + fontName6->setText(config->fonts[6].family()); + italic6->setChecked(config->fonts[6].italic()); + bold6->setChecked(config->fonts[6].bold()); + } + +//--------------------------------------------------------- +// apply +//--------------------------------------------------------- + +void Appearance::apply() + { + int showPartEvent = 0; + int showPartType = 0; + + if (partShownames->isChecked()) + showPartType |= 1; + if (partShowevents->isChecked()) + showPartType |= 2; + //if (partShowCakes->isChecked()) + // showPartType |= 4; + + config->canvasShowPartType = showPartType; + + 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->canvasShowPartEvent = showPartEvent; + + if (currentBg == tr("")) + config->canvasBgPixmap = QString(); + else + config->canvasBgPixmap = currentBg; + + // Added by Tim. p3.3.9 + config->fonts[0].setFamily(fontName0->text()); + + config->fonts[0].setPointSize(fontSize0->value()); + config->fonts[0].setItalic(italic0->isChecked()); + config->fonts[0].setBold(bold0->isChecked()); + QApplication::setFont(config->fonts[0], true); + + config->fonts[1].setFamily(fontName1->text()); + config->fonts[1].setPointSize(fontSize1->value()); + config->fonts[1].setItalic(italic1->isChecked()); + config->fonts[1].setBold(bold1->isChecked()); + + config->fonts[2].setFamily(fontName2->text()); + config->fonts[2].setPointSize(fontSize2->value()); + config->fonts[2].setItalic(italic2->isChecked()); + config->fonts[2].setBold(bold2->isChecked()); + + config->fonts[3].setFamily(fontName3->text()); + config->fonts[3].setPointSize(fontSize3->value()); + config->fonts[3].setItalic(italic3->isChecked()); + config->fonts[3].setBold(bold3->isChecked()); + + config->fonts[4].setFamily(fontName4->text()); + config->fonts[4].setPointSize(fontSize4->value()); + config->fonts[4].setItalic(italic4->isChecked()); + config->fonts[4].setBold(bold4->isChecked()); + + config->fonts[5].setFamily(fontName5->text()); + config->fonts[5].setPointSize(fontSize5->value()); + config->fonts[5].setItalic(italic5->isChecked()); + config->fonts[5].setBold(bold5->isChecked()); + + config->fonts[6].setFamily(fontName6->text()); + config->fonts[6].setPointSize(fontSize6->value()); + config->fonts[6].setItalic(italic6->isChecked()); + config->fonts[6].setBold(bold6->isChecked()); + + config->style = themeComboBox->currentText(); + // setting up a new theme might change the fontsize, so re-read + fontSize0->setValue(QApplication::font().pointSize()); + + config->canvasShowGrid = arrGrid->isChecked(); + + // set colors... + ::config = *config; + muse->changeConfig(true); + } + +//--------------------------------------------------------- +// ok +//--------------------------------------------------------- + +void Appearance::ok() + { + apply(); + close(false); + } + +//--------------------------------------------------------- +// cancel +//--------------------------------------------------------- + +void Appearance::cancel() + { + close(false); + } + +//--------------------------------------------------------- +// configBackground +//--------------------------------------------------------- + +void Appearance::configBackground() + { + QString cur(currentBg); + if (cur == tr("")) + cur = museGlobalShare + "/wallpapers"; + currentBg = getImageFileName(cur, image_file_pattern, this, + tr("MusE: load image")); + if (currentBg.isEmpty()) + currentBg = tr(""); + currentBgLabel->setText(currentBg); + } + +//--------------------------------------------------------- +// clearBackground +//--------------------------------------------------------- + +void Appearance::clearBackground() + { + currentBg = tr(""); + currentBgLabel->setText(currentBg); + } + +//--------------------------------------------------------- +// selectionChanged +//--------------------------------------------------------- + +void Appearance::colorItemSelectionChanged() + { + IdListViewItem* item = (IdListViewItem*)itemList->selectedItem(); + QString txt = item->text(0); + int id = item->id(); + if (id == 0) { + color = 0; + return; + } + switch(id) { + case 0x400: // "Default" + case 0x401: // "Refrain" + case 0x402: // "Bridge" + case 0x403: // "Intro" + case 0x404: // "Coda" + case 0x405: // "Chorus" + case 0x406: // "Solo" + case 0x407: // "Brass" + case 0x408: // "Percussion" + case 0x409: // "Drums" + case 0x40a: // "Guitar" + case 0x40b: // "Bass" + case 0x40c: // "Flute" + case 0x40d: // "Strings + case 0x40e: // "Keyboard + case 0x40f: // "Piano + case 0x410: // "Saxophon + 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 0x411: color = &config->trackBg; break; + case 0x412: color = &config->midiTrackBg; break; + case 0x413: color = &config->drumTrackBg; break; + case 0x414: color = &config->waveTrackBg; break; + case 0x415: color = &config->outputTrackBg; break; + case 0x416: color = &config->inputTrackBg; break; + case 0x417: color = &config->groupTrackBg; break; + case 0x418: color = &config->auxTrackBg; break; + case 0x419: color = &config->synthTrackBg; break; + case 0x41a: color = &config->selectTrackBg; break; + case 0x41b: color = &config->selectTrackFg; break; + case 0x41c: color = &config->partCanvasBg; break; + case 0x41d: color = &config->ctrlGraphFg; break; + + default: + color = 0; + break; + } + updateColor(); + } + +void Appearance::updateColor() + { + int r, g, b, h, s, v; + rslider->setEnabled(color); + gslider->setEnabled(color); + bslider->setEnabled(color); + hslider->setEnabled(color); + sslider->setEnabled(color); + vslider->setEnabled(color); + rval->setEnabled(color); + gval->setEnabled(color); + bval->setEnabled(color); + hval->setEnabled(color); + sval->setEnabled(color); + vval->setEnabled(color); + if (color == 0) + return; + colorframe->setBackgroundColor(*color); + color->getRgb(&r, &g, &b); + color->getHsv(&h, &s, &v); + + rslider->blockSignals(true); + gslider->blockSignals(true); + bslider->blockSignals(true); + hslider->blockSignals(true); + sslider->blockSignals(true); + vslider->blockSignals(true); + rval->blockSignals(true); + gval->blockSignals(true); + bval->blockSignals(true); + hval->blockSignals(true); + sval->blockSignals(true); + vval->blockSignals(true); + + rslider->setValue(r); + gslider->setValue(g); + bslider->setValue(b); + hslider->setValue(h); + sslider->setValue(s); + vslider->setValue(v); + rval->setValue(r); + gval->setValue(g); + bval->setValue(b); + hval->setValue(h); + sval->setValue(s); + vval->setValue(v); + + rslider->blockSignals(false); + gslider->blockSignals(false); + bslider->blockSignals(false); + hslider->blockSignals(false); + sslider->blockSignals(false); + vslider->blockSignals(false); + rval->blockSignals(false); + gval->blockSignals(false); + bval->blockSignals(false); + hval->blockSignals(false); + sval->blockSignals(false); + vval->blockSignals(false); + } + +void Appearance::rsliderChanged(int val) + { + int r, g, b; + if (color) { + color->getRgb(&r, &g, &b); + color->setRgb(val, g, b); + } + updateColor(); + } + +void Appearance::gsliderChanged(int val) + { + int r, g, b; + if (color) { + color->getRgb(&r, &g, &b); + color->setRgb(r, val, b); + } + updateColor(); + } + +void Appearance::bsliderChanged(int val) + { + int r, g, b; + if (color) { + color->getRgb(&r, &g, &b); + color->setRgb(r, g, val); + } + updateColor(); + } + +void Appearance::hsliderChanged(int val) + { + int h, s, v; + if (color) { + color->getHsv(&h, &s, &v); + color->setHsv(val, s, v); + } + updateColor(); + } + +void Appearance::ssliderChanged(int val) + { + int h, s, v; + if (color) { + color->getHsv(&h, &s, &v); + color->setHsv(h, val, v); + } + updateColor(); + } + +void Appearance::vsliderChanged(int val) + { + int h, s, v; + if (color) { + color->getHsv(&h, &s, &v); + color->setHsv(h, s, val); + } + updateColor(); + } + +//--------------------------------------------------------- +// addToPaletteClicked +//--------------------------------------------------------- + +void Appearance::addToPaletteClicked() + { + if (!color) + return; + Q3Button* button = (Q3Button*)aPalette->selected(); // ddskrjo + int r, g, b; + QColor c; + if (button) { + int id = aPalette->id(button); + c = config->palette[id]; + c.getRgb(&r, &g, &b); + } + if (button == 0 || r != 0xff || g != 0xff || b != 0xff) { + for (int i = 0; i < 16; ++i) { + c = config->palette[i]; + c.getRgb(&r, &g, &b); + if (r == 0xff && g == 0xff && b == 0xff) { + // found empty slot + aPalette->setButton(i); + //aPalette->moveFocus(i); ddskrjo + button = (Q3Button*)aPalette->find(i); // ddskrjo + break; + } + } + } + if (button) { + int id = aPalette->id(button); + config->palette[id] = *color; + button->setPaletteBackgroundColor(*color); + button->update(); //?? + } + } + +//--------------------------------------------------------- +// paletteClicked +//--------------------------------------------------------- + +void Appearance::paletteClicked(int id) + { + if (!color) + return; + Q3Button* button = (Q3Button*)aPalette->find(id); // ddskrjo + if (button) { + QColor c = button->paletteBackgroundColor(); + 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(); + } + } + +//--------------------------------------------------------- +// browseFont +//--------------------------------------------------------- + +void Appearance::browseFont0() { browseFont(0); } +void Appearance::browseFont1() { browseFont(1); } +void Appearance::browseFont2() { browseFont(2); } +void Appearance::browseFont3() { browseFont(3); } +void Appearance::browseFont4() { browseFont(4); } +void Appearance::browseFont5() { browseFont(5); } +void Appearance::browseFont6() { browseFont(6); } + +void Appearance::browseFont(int n) + { + bool ok; + QFont font = QFontDialog::getFont(&ok, config->fonts[n], this, "browseFont"); + if (ok) { + config->fonts[n] = font; + updateFonts(); + } + } + diff --git a/muse2/muse/appearance.h b/muse2/muse/appearance.h new file mode 100644 index 00000000..1225d96a --- /dev/null +++ b/muse2/muse/appearance.h @@ -0,0 +1,56 @@ +#ifndef __APPEARANCE_H__ +#define __APPEARANCE_H__ + +#include "appearancebase.h" +#include + +class MusE; +class Arranger; +class QColor; +class GlobalConfigValues; + +//--------------------------------------------------------- +// Appearance Dialog +//--------------------------------------------------------- + +class Appearance : public AppearanceDialogBase { + Arranger* arr; + QColor* color; + QString currentBg; + GlobalConfigValues* config; + + Q_OBJECT + void updateFonts(); + void updateColor(); + + private slots: + void apply(); + void ok(); + void cancel(); + void configBackground(); + void clearBackground(); + void colorItemSelectionChanged(); + void browseFont(int); + void browseFont0(); + void browseFont1(); + void browseFont2(); + void browseFont3(); + void browseFont4(); + void browseFont5(); + void browseFont6(); + void rsliderChanged(int); + void gsliderChanged(int); + void bsliderChanged(int); + void hsliderChanged(int); + void ssliderChanged(int); + void vsliderChanged(int); + void addToPaletteClicked(); + void paletteClicked(int); + + public: + Appearance(Arranger*, QWidget* parent=0, const char* name=0); + ~Appearance(); + void resetValues(); + }; + +#endif diff --git a/muse2/muse/arranger/Makefile.am b/muse2/muse/arranger/Makefile.am new file mode 100644 index 00000000..7b99b4c4 --- /dev/null +++ b/muse2/muse/arranger/Makefile.am @@ -0,0 +1,20 @@ +include $(top_srcdir)/common.am + +noinst_LIBRARIES = libarranger.a + +if PCH +AM_CXXFLAGS += -include $(top_srcdir)/all.h +endif + +dist_libarranger_a_SOURCES = \ + arranger.cpp arranger.h \ + pcanvas.cpp pcanvas.h \ + tlist.cpp tlist.h \ + alayout.cpp alayout.h \ + trackinfo.cpp trackautomationview.h + +nodist_libarranger_a_SOURCES = \ + moc_arranger.cpp \ + moc_pcanvas.cpp \ + moc_tlist.cpp \ + moc_alayout.cpp diff --git a/muse2/muse/arranger/Makefile.in b/muse2/muse/arranger/Makefile.in new file mode 100644 index 00000000..02bb5920 --- /dev/null +++ b/muse2/muse/arranger/Makefile.in @@ -0,0 +1,612 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/common.am +@PCH_TRUE@am__append_1 = -include $(top_srcdir)/all.h +subdir = muse/arranger +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal-include.m4 \ + $(top_srcdir)/m4/alsa.m4 $(top_srcdir)/m4/docbook.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +LIBRARIES = $(noinst_LIBRARIES) +ARFLAGS = cru +libarranger_a_AR = $(AR) $(ARFLAGS) +libarranger_a_LIBADD = +dist_libarranger_a_OBJECTS = arranger.$(OBJEXT) pcanvas.$(OBJEXT) \ + tlist.$(OBJEXT) alayout.$(OBJEXT) trackinfo.$(OBJEXT) +nodist_libarranger_a_OBJECTS = moc_arranger.$(OBJEXT) \ + moc_pcanvas.$(OBJEXT) moc_tlist.$(OBJEXT) \ + moc_alayout.$(OBJEXT) +libarranger_a_OBJECTS = $(dist_libarranger_a_OBJECTS) \ + $(nodist_libarranger_a_OBJECTS) +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +CXXLD = $(CXX) +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(dist_libarranger_a_SOURCES) \ + $(nodist_libarranger_a_SOURCES) +DIST_SOURCES = $(dist_libarranger_a_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DOCBOOKSTYLE = @DOCBOOKSTYLE@ +DOCBOOKTARGETS = @DOCBOOKTARGETS@ +DOT = @DOT@ +DOTPATH = @DOTPATH@ +DOXYGEN = @DOXYGEN@ +DOXYGEN_TREEVIEW = @DOXYGEN_TREEVIEW@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FLUIDSYNTHDIRS = @FLUIDSYNTHDIRS@ +FST_CFLAGS = @FST_CFLAGS@ +FST_LIBS = @FST_LIBS@ +Fluidsynth_CFLAGS = @Fluidsynth_CFLAGS@ +Fluidsynth_LIBS = @Fluidsynth_LIBS@ +GIVERTCAP = @GIVERTCAP@ +GREP = @GREP@ +HAVEDOT = @HAVEDOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_LIBS = @JACK_LIBS@ +JADE = @JADE@ +LASH_CFLAGS = @LASH_CFLAGS@ +LASH_LIBS = @LASH_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LO_CFLAGS = @LO_CFLAGS@ +LO_LIBS = @LO_LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MUSECXXFLAGS = @MUSECXXFLAGS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NSGMLS = @NSGMLS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PCH = @PCH@ +PERL = @PERL@ +PKG_CONFIG = @PKG_CONFIG@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIB = @PYTHON_LIB@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QTDIR_BIN = @QTDIR_BIN@ +QTDIR_INC = @QTDIR_INC@ +QT_LIBS = @QT_LIBS@ +RANLIB = @RANLIB@ +SAMPLERATE_CFLAGS = @SAMPLERATE_CFLAGS@ +SAMPLERATE_LIBS = @SAMPLERATE_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ +SNDFILE_LIBS = @SNDFILE_LIBS@ +STRIP = @STRIP@ +SUIDBUILD = @SUIDBUILD@ +SUIDINSTALL = @SUIDINSTALL@ +USE_SSE = @USE_SSE@ +UUID_CFLAGS = @UUID_CFLAGS@ +UUID_LIBS = @UUID_LIBS@ +VERSION = @VERSION@ +XMKMF = @XMKMF@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +have_docbook = @have_docbook@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +synth_fluid = @synth_fluid@ +synth_fluidsynth = @synth_fluidsynth@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AM_CXXFLAGS = $(MUSECXXFLAGS) -I.. -I$(top_srcdir)/synti \ + -I$(top_srcdir)/muse/widgets -DQT_SHARED -DQT_THREAD_SUPPORT \ + -DQT_PLUGIN $(QTDIR_INC) -DQT3_SUPPORT $(am__append_1) +AM_CPPFLAGS = +MOC = $(QTDIR_BIN)/moc +#UIC = $(QTDIR_BIN)/uic3 +UIC = /usr/bin/uic3 +UIFILES = $(wildcard *.ui) +MOCFILES = $(shell for h in $(filter %.h,$(SOURCES)); do \ + if grep -q Q_OBJECT $$h; then \ + echo $$h | sed "s/\(.*\)\.h/moc_\1.cpp/"; \ + fi; \ + done) + +BUILT_SOURCES = $(MOCFILES) $(UIFILES:%.ui=%.h) +MOSTLYCLEANFILES = $(MOCFILES) $(UIFILES:%.ui=%.h) +SUFFIXES = .ui .h.gch +noinst_LIBRARIES = libarranger.a +dist_libarranger_a_SOURCES = \ + arranger.cpp arranger.h \ + pcanvas.cpp pcanvas.h \ + tlist.cpp tlist.h \ + alayout.cpp alayout.h \ + trackinfo.cpp trackautomationview.h + +nodist_libarranger_a_SOURCES = \ + moc_arranger.cpp \ + moc_pcanvas.cpp \ + moc_tlist.cpp \ + moc_alayout.cpp + +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: .ui .h.gch .cpp .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/common.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu muse/arranger/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu muse/arranger/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-noinstLIBRARIES: + -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) +libarranger.a: $(libarranger_a_OBJECTS) $(libarranger_a_DEPENDENCIES) + -rm -f libarranger.a + $(libarranger_a_AR) libarranger.a $(libarranger_a_OBJECTS) $(libarranger_a_LIBADD) + $(RANLIB) libarranger.a + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/alayout.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arranger.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/moc_alayout.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/moc_arranger.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/moc_pcanvas.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/moc_tlist.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcanvas.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tlist.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/trackinfo.Po@am__quote@ + +.cpp.o: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< + +.cpp.obj: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.cpp.lo: +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-am +all-am: Makefile $(LIBRARIES) +installdirs: +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +clean: clean-am + +clean-am: clean-generic clean-libtool clean-noinstLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: all check install install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-noinstLIBRARIES ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags uninstall uninstall-am + + +de: + @for base in $(MOCFILES); do echo -e "\t$${base}.cpp $${base}.h \\"; done + +nde: + @for base in $(MOCFILES); do echo -e "\tmoc_$${base}.cpp \\"; done + +.ui.o: %.h + $(UIC) -L $(top_srcdir)/muse/widgets -o $*.cpp -impl $*.h $*.ui + $(MOC) $*.h >> $*.cpp + $(CXXCOMPILE) -c $*.cpp -o $*.o + $(RM) $*.cpp moc_$*.cpp moc_$*.o + +.ui.lo: %.h + $(UIC) -L $(top_srcdir)/muse/widgets -o $*.cpp -impl $*.h $*.ui + $(MOC) $*.h >> $*.cpp + $(LTCXXCOMPILE) -c $*.cpp -o $*.lo + $(RM) $*.cpp moc_$*.cpp moc_$*.lo moc_$*.o + +moc_%.cpp: %.h + $(MOC) $< -o $@ + +%.h: %.ui + $(UIC) -o $@ $< +# $(UIC) -L $(top_srcdir)/muse/widgets -o $@ $< + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/muse2/muse/arranger/alayout.cpp b/muse2/muse/arranger/alayout.cpp new file mode 100644 index 00000000..04665b24 --- /dev/null +++ b/muse2/muse/arranger/alayout.cpp @@ -0,0 +1,161 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: alayout.cpp,v 1.8 2004/02/28 14:58:24 wschweer Exp $ +// (C) Copyright 2002 Werner Schweer (ws@seh.de) +//========================================================= + +#include "alayout.h" +#include +//Added by qt3to4: +#include + +#include "arranger.h" + +//--------------------------------------------------------- +// wadd +//--------------------------------------------------------- + +void TLLayout::wadd(int idx, QWidget* w) + { + li[idx] = new QWidgetItem(w); + if (idx == 0) + stack = (WidgetStack*)w; + if (idx == 1) + sb = (QScrollBar*)w; + addItem(li[idx]); + } + +//--------------------------------------------------------- +// TLLayoutIterator +//--------------------------------------------------------- + +class TLLayoutIterator // : public QGLayoutIterator ddskrjo + { + int idx; + Q3PtrList *list; + + public: + TLLayoutIterator(Q3PtrList *l) : idx(0), list(l) {} + QLayoutItem *current() { return idx < int(list->count()) ? list->at(idx) : 0; } + QLayoutItem *next() { idx++; return current(); } + QLayoutItem *takeCurrent() { return list->take( idx ); } + }; + +//--------------------------------------------------------- +// iterator +//--------------------------------------------------------- + +QLayoutIterator TLLayout::iterator() + { + return QLayoutIterator(0); //new TLLayoutIterator(&ilist)); ddskrjo + } + +void TLLayout::addItem(QLayoutItem *item) + { + ilist.append(item); + } + +TLLayout::~TLLayout() + { + deleteAllItems(); + } + +//--------------------------------------------------------- +// setGeometry +// perform geometry management for tracklist: +// +// 0 1 2 +// +-----------+--------+---------+ +// | Trackinfo | scroll | header 2| +// | | bar +---------+ y1 +// | ^ | | ^ | +// | | | | +// | 0 | 1 | 3 | +// +-----------+--------+---------+ y2 +// | hline 4 | +// +----------+-------------------+ y3 +// | button 5 | | +// +----------+-------------------+ +//--------------------------------------------------------- + +void TLLayout::setGeometry(const QRect &rect) + { + int w = rect.width(); + int h = rect.height(); + + QSize s0; + if (stack->visibleWidget()) { + s0 = stack->visibleWidget()->minimumSizeHint(); + if (!s0.isValid()) // widget has no geometry management + s0 = stack->visibleWidget()->size(); + } + else + s0 = stack->minimumSizeHint(); + + QSize s1 = li[1]->sizeHint(); + QSize s2 = li[2]->sizeHint(); + QSize s3 = li[3]->sizeHint(); + QSize s4 = li[4]->sizeHint(); + QSize s5 = li[5]->sizeHint(); + + int y1 = 30; // fixed header height + int ah = h - s5.height() - s4.height() - y1; // list height + int aw = w - s1.width() - s0.width(); // list width + + int y2 = ah + s2.height(); + int y3 = y2 + s4.height(); + int x1 = s0.width(); + int x2 = x1 + s1.width(); + + li[0]->setGeometry(QRect(0, 0, s0.width(), y2)); + + QWidget* widget = stack->visibleWidget(); + int range = s0.height() - y2; + if (range < 0) + range = 0; + sb->setShown(range != 0); + if (range) + sb->setMaxValue(range); + + if (widget) { + QSize r(s0.width(), y2); + widget->setGeometry(0, 0, r.width(), r.height()); + } + + li[1]->setGeometry(QRect(x1, 0, s1.width(), y2)); + li[2]->setGeometry(QRect(x2, 0, aw, s2.height())); + li[3]->setGeometry(QRect(x2, y1, aw, ah)); + li[4]->setGeometry(QRect(0, y2, w, s4.height())); + li[5]->setGeometry(QRect(3, y3, s5.width(), s5.height())); + } + +//--------------------------------------------------------- +// sizeHint +//--------------------------------------------------------- + +QSize TLLayout::sizeHint() const + { + return QSize(150, 100); + } + +//--------------------------------------------------------- +// minimumSize +//--------------------------------------------------------- + +QSize TLLayout::minimumSize() const + { + int w = stack->minimumSizeHint().width(); + w += li[1]->sizeHint().width(); + return QSize(w, 50); + } + +//--------------------------------------------------------- +// maximumSize +//--------------------------------------------------------- + +QSize TLLayout::maximumSize() const + { + return QSize(440, 100000); + } + diff --git a/muse2/muse/arranger/alayout.h b/muse2/muse/arranger/alayout.h new file mode 100644 index 00000000..1a1d5ee2 --- /dev/null +++ b/muse2/muse/arranger/alayout.h @@ -0,0 +1,48 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: alayout.h,v 1.3.2.1 2008/01/19 13:33:46 wschweer Exp $ +// (C) Copyright 2002 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __ALAYOUT_H__ +#define __ALAYOUT_H__ + +#include +#include + +class QScrollBar; +class WidgetStack; + +//--------------------------------------------------------- +// TLLayout +// arranger trackList layout manager +//--------------------------------------------------------- + +class TLLayout : public QLayout + { + Q_OBJECT + + Q3PtrList ilist; + QLayoutItem* li[6]; + QScrollBar* sb; + WidgetStack* stack; + + public: + TLLayout(QWidget *parent) : QLayout(parent, 0, -1) {} + ~TLLayout(); + + void addItem(QLayoutItem *item); + + void wadd(int idx, QWidget* w); + virtual QSize sizeHint() const; + virtual QSize minimumSize() const; + virtual QSize maximumSize() const; + QLayoutIterator iterator(); + void setGeometry(const QRect &rect); + + virtual QLayoutItem* itemAt(int) const { return 0;} // ddskrjo, is pure virtual, overridden + virtual QLayoutItem* takeAt(int) { return 0;} // ddskrjo, is pure virtual, overridden + virtual int count() const { return ilist.count(); } // ddskrjo, is pure virtual, overridden + }; +#endif diff --git a/muse2/muse/arranger/arranger.cpp b/muse2/muse/arranger/arranger.cpp new file mode 100644 index 00000000..d25911cd --- /dev/null +++ b/muse2/muse/arranger/arranger.cpp @@ -0,0 +1,971 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: arranger.cpp,v 1.33.2.21 2009/11/17 22:08:22 terminator356 Exp $ +// (C) Copyright 1999-2004 Werner Schweer (ws@seh.de) +//========================================================= + +#include "config.h" + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//Added by qt3to4: +#include +#include +#include +#include +#include +#include + +#include "arranger.h" +#include "song.h" +#include "mtscale.h" +#include "scrollscale.h" +#include "pcanvas.h" +#include "poslabel.h" +#include "xml.h" +#include "splitter.h" +#include "lcombo.h" +#include "midiport.h" +#include "mididev.h" +#include "utils.h" +#include "globals.h" +#include "tlist.h" +#include "icons.h" +#include "mtrackinfobase.h" +#include "header.h" +#include "utils.h" +#include "alayout.h" +#include "audio.h" +#include "event.h" +#include "midiseq.h" +#include "midictrl.h" +#include "mpevent.h" +#include "gconfig.h" +#include "mixer/astrip.h" +#include "spinbox.h" +//--------------------------------------------------------- +// TWhatsThis::text +//--------------------------------------------------------- + +QString TWhatsThis::text(const QPoint& pos) + { + int section = header->sectionAt(pos.x()); + if (section == -1) + return QString::null; + switch(section) { + case COL_RECORD: return Q3Header::tr("Enable recording. Click to toggle."); break; + case COL_MUTE: return Q3Header::tr("Mute indicator. Click to toggle.\nRight-click to toggle track on/off.\nMute is designed for rapid, repeated action.\nOn/Off is not!"); break; + case COL_SOLO: return Q3Header::tr("Solo indicator. Click to toggle.\nConnected tracks are also 'phantom' soloed,\n indicated by a dark square."); break; + case COL_CLASS: return Q3Header::tr("Track type. Right-click to change\n midi and drum track types."); break; + case COL_NAME: return Q3Header::tr("Track name. Double-click to edit.\nRight-click for more options."); break; + case COL_OCHANNEL: return Q3Header::tr("Midi/drum track: Output channel number.\nAudio track: Channels.\nMid/right-click to change."); break; + case COL_OPORT: return Q3Header::tr("Midi/drum track: Output port.\nSynth track: Assigned midi port.\nLeft-click to change.\nRight-click to show GUI."); break; + case COL_TIMELOCK: return Q3Header::tr("Time lock"); break; + default: break; + } + return QString::null; + } + +//--------------------------------------------------------- +// Arranger +// is the central widget in app +//--------------------------------------------------------- + +Arranger::Arranger(Q3MainWindow* parent, const char* name) + : QWidget(parent, name) + { + _raster = 0; // measure + selected = 0; + // Since program covers 3 controls at once, it is in 'midi controller' units rather than 'gui control' units. + //program = -1; + program = CTRL_VAL_UNKNOWN; + pan = -65; + volume = -1; + setMinimumSize(600, 50); + showTrackinfoFlag = true; + + cursVal = MAXINT; + //--------------------------------------------------- + // ToolBar + // create toolbar in toplevel widget + //--------------------------------------------------- + + Q3ToolBar* toolbar = new Q3ToolBar(tr("Arranger"), parent); + + QLabel* label = new QLabel(tr("Cursor"), toolbar, "Cursor"); + label->setAlignment(Qt::AlignRight|Qt::AlignVCenter); + label->setIndent(3); + cursorPos = new PosLabel(toolbar); + cursorPos->setEnabled(false); + + const char* rastval[] = { + QT_TR_NOOP("Off"), QT_TR_NOOP("Bar"), "1/2", "1/4", "1/8", "1/16" + }; + label = new QLabel(tr("Snap"), toolbar, "Snap"); + label->setAlignment(Qt::AlignRight|Qt::AlignVCenter); + label->setIndent(3); + QComboBox* raster = new QComboBox(toolbar); + for (int i = 0; i < 6; i++) + raster->insertItem(tr(rastval[i]), i); + raster->setCurrentItem(1); + connect(raster, SIGNAL(activated(int)), SLOT(_setRaster(int))); + raster->setFocusPolicy(Qt::NoFocus); + + // Song len + label = new QLabel(tr("Len"), toolbar, "Len"); + label->setAlignment(Qt::AlignRight|Qt::AlignVCenter); + label->setIndent(3); + + // song length is limited to 10000 bars; the real song len is limited + // by overflows in tick computations + // + lenEntry = new SpinBox(1, 10000, 1, toolbar); + lenEntry->setValue(song->len()); + connect(lenEntry, SIGNAL(valueChanged(int)), SLOT(songlenChanged(int))); + QToolTip::add(lenEntry, tr("song length - bars")); + Q3WhatsThis::add(lenEntry, tr("song length - bars")); + + typeBox = new LabelCombo(tr("Type"), toolbar); + typeBox->insertItem(tr("NO"), 0); + typeBox->insertItem(tr("GM"), 1); + typeBox->insertItem(tr("GS"), 2); + typeBox->insertItem(tr("XG"), 3); + typeBox->setCurrentItem(0); + connect(typeBox, SIGNAL(activated(int)), SLOT(modeChange(int))); + QToolTip::add(typeBox, tr("midi song type")); + Q3WhatsThis::add(typeBox, tr("midi song type")); + typeBox->setFocusPolicy(Qt::NoFocus); + + label = new QLabel(tr("Pitch"), toolbar, "Pitch"); + label->setAlignment(Qt::AlignRight|Qt::AlignVCenter); + label->setIndent(3); + globalPitchSpinBox = new SpinBox(-127, 127, 1, toolbar); + globalPitchSpinBox->setValue(song->globalPitchShift()); + QToolTip::add(globalPitchSpinBox, tr("midi pitch")); + Q3WhatsThis::add(globalPitchSpinBox, tr("global midi pitch shift")); + connect(globalPitchSpinBox, SIGNAL(valueChanged(int)), SLOT(globalPitchChanged(int))); + label = new QLabel(tr("Tempo"), toolbar, "Tempo"); + label->setAlignment(Qt::AlignRight|Qt::AlignVCenter); + label->setIndent(3); + globalTempoSpinBox = new SpinBox(50, 200, 1, toolbar); + globalTempoSpinBox->setSuffix(QString("%")); + globalTempoSpinBox->setValue(tempomap.globalTempo()); + QToolTip::add(globalTempoSpinBox, tr("midi tempo")); + Q3WhatsThis::add(globalTempoSpinBox, tr("midi tempo")); + connect(globalTempoSpinBox, SIGNAL(valueChanged(int)), SLOT(globalTempoChanged(int))); + QToolButton* tempo50 = new QToolButton(toolbar, "tempo50"); + tempo50->setText(QString("50%")); + connect(tempo50, SIGNAL(clicked()), SLOT(setTempo50())); + QToolButton* tempo100 = new QToolButton(toolbar, "tempo100"); + tempo100->setText(tr("N")); + connect(tempo100, SIGNAL(clicked()), SLOT(setTempo100())); + QToolButton* tempo200 = new QToolButton(toolbar, "tempo200"); + tempo200->setText(QString("200%")); + connect(tempo200, SIGNAL(clicked()), SLOT(setTempo200())); + + Q3VBoxLayout* box = new Q3VBoxLayout(this); + box->addWidget(hLine(this), Qt::AlignTop); + + //--------------------------------------------------- + // Tracklist + //--------------------------------------------------- + + int xscale = -100; + int yscale = 1; + + split = new Splitter(Qt::Horizontal, this, "split"); + split->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding)); + box->addWidget(split, 1000); + + QWidget* tracklist = new QWidget(split); + split->setResizeMode(tracklist, QSplitter::KeepSize); + tracklist->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding, 0, 100)); + + QWidget* editor = new QWidget(split); + split->setResizeMode(editor, QSplitter::Stretch); + editor->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding, + // Changed by T356. Was causing "large int implicitly truncated" warning. These are UCHAR values... + //1000, 100)); + //232, 100)); // 232 is what it was being truncated to, but what is the right value?... + 255, 100)); + + //--------------------------------------------------- + // Track Info + //--------------------------------------------------- + + infoScroll = new QScrollBar(Qt::Vertical, tracklist, "infoScrollBar"); + genTrackInfo(tracklist); + + // Track-Info Button + ib = new QToolButton(tracklist); + ib->setText(tr("TrackInfo")); + ib->setToggleButton(true); + ib->setOn(showTrackinfoFlag); + + connect(ib, SIGNAL(toggled(bool)), SLOT(showTrackInfo(bool))); + + // Changed by T356 Mar 8 2008. Did someone accidentally change to header1 recently? + // Muse was saying Tlist: unknown tag
at line 32 + //header = new Header(tracklist, "header1"); + header = new Header(tracklist, "header"); + + header->setFixedHeight(30); + + QFontMetrics fm1(header->font()); + int fw = 8; + + header->addLabel(tr("R"), fm1.width('R')+fw); + header->addLabel(tr("M"), fm1.width('M')+fw); + header->addLabel(tr("S"), fm1.width('S')+fw); + header->addLabel(tr("C"), fm1.width('C')+fw); + header->addLabel(tr("Track"), 100); + //header->addLabel(tr("O-Port"), 60); + header->addLabel(tr("Port"), 60); + header->addLabel(tr("Ch"), 30); + header->addLabel(tr("T"), fm1.width('T')+fw); + //header->addLabel(tr("Automation"),30); + header->setResizeEnabled(false, COL_RECORD); + header->setResizeEnabled(false, COL_MUTE); + header->setResizeEnabled(false, COL_SOLO); + header->setResizeEnabled(false, COL_CLASS); + header->setResizeEnabled(false, COL_OCHANNEL); + header->setResizeEnabled(false, COL_TIMELOCK); + //header->setResizeEnabled(true, COL_AUTOMATION); + header->setResizeEnabled(true, COL_NAME); + header->setResizeEnabled(true, COL_OPORT); + + header->setTracking(true); + + new THeaderTip(header); + new TWhatsThis(header, header); + + list = new TList(header, tracklist, "tracklist"); + + connect(list, SIGNAL(selectionChanged()), SLOT(trackSelectionChanged())); + connect(header, SIGNAL(sizeChange(int,int,int)), list, SLOT(redraw())); + connect(header, SIGNAL(moved(int,int)), list, SLOT(redraw())); + connect(header, SIGNAL(moved(int,int)), this, SLOT(headerMoved())); + + // tracklist: + // + // 0 1 2 + // +-----------+--------+---------+ + // | Trackinfo | scroll | Header | 0 + // | | bar +---------+ + // | | | TList | 1 + // +-----------+--------+---------+ + // | hline | 2 + // +-----+------------------------+ + // | ib | | 3 + // +-----+------------------------+ + + connect(infoScroll, SIGNAL(valueChanged(int)), SLOT(trackInfoScroll(int))); + tgrid = new TLLayout(tracklist); // layout manager for this + tgrid->wadd(0, trackInfo); + tgrid->wadd(1, infoScroll); + tgrid->wadd(2, header); + tgrid->wadd(3, list); + tgrid->wadd(4, hLine(tracklist)); + tgrid->wadd(5, ib); + + //--------------------------------------------------- + // Editor + //--------------------------------------------------- + + int offset = sigmap.ticksMeasure(0); + hscroll = new ScrollScale(-1000, -10, xscale, song->len(), Qt::Horizontal, editor, -offset); + ib->setFixedHeight(hscroll->sizeHint().height()); + + // Changed p3.3.43 Too small steps for me... + //vscroll = new QScrollBar(1, 20*20, 1, 5, 0, Vertical, editor); + vscroll = new QScrollBar(1, 20*20, 5, 25, 0, Qt::Vertical, editor); + + list->setScroll(vscroll); + + Q3ValueList vallist; + vallist.append(tgrid->maximumSize().width()); + split->setSizes(vallist); + + Q3GridLayout* egrid = new Q3GridLayout(editor); + egrid->setColStretch(0, 50); + egrid->setRowStretch(2, 50); + + time = new MTScale(&_raster, editor, xscale); + time->setOrigin(-offset, 0); + canvas = new PartCanvas(&_raster, editor, xscale, yscale); + canvas->setBg(config.partCanvasBg); + canvas->setCanvasTools(arrangerTools); + canvas->setOrigin(-offset, 0); + canvas->setFocus(); + connect(canvas, SIGNAL(setUsedTool(int)), this, SIGNAL(setUsedTool(int))); + connect(canvas, SIGNAL(trackChanged(Track*)), list, SLOT(selectTrack(Track*))); + connect(list, SIGNAL(keyPressExt(QKeyEvent*)), canvas, SLOT(redirKeypress(QKeyEvent*))); + connect(canvas, SIGNAL(selectTrackAbove()), list, SLOT(selectTrackAbove())); + connect(canvas, SIGNAL(selectTrackBelow()), list, SLOT(selectTrackBelow())); + + connect(this, SIGNAL(redirectWheelEvent(QWheelEvent*)), canvas, SLOT(redirectedWheelEvent(QWheelEvent*))); + connect(list, SIGNAL(redirectWheelEvent(QWheelEvent*)), canvas, SLOT(redirectedWheelEvent(QWheelEvent*))); + + egrid->addMultiCellWidget(time, 0, 0, 0, 1); + egrid->addMultiCellWidget(hLine(editor), 1, 1, 0, 1); + egrid->addWidget(canvas, 2, 0); + egrid->addWidget(vscroll, 2, 1); + egrid->addWidget(hscroll, 3, 0, Qt::AlignBottom); + + connect(vscroll, SIGNAL(valueChanged(int)), canvas, SLOT(setYPos(int))); + connect(hscroll, SIGNAL(scrollChanged(int)), canvas, SLOT(setXPos(int))); + connect(hscroll, SIGNAL(scaleChanged(int)), canvas, SLOT(setXMag(int))); + connect(vscroll, SIGNAL(valueChanged(int)), list, SLOT(setYPos(int))); + connect(hscroll, SIGNAL(scrollChanged(int)), time, SLOT(setXPos(int))); + connect(hscroll, SIGNAL(scaleChanged(int)), time, SLOT(setXMag(int))); + connect(canvas, SIGNAL(timeChanged(unsigned)), SLOT(setTime(unsigned))); + connect(canvas, SIGNAL(verticalScroll(unsigned)),SLOT(verticalScrollSetYpos(unsigned))); + connect(canvas, SIGNAL(horizontalScroll(unsigned)),hscroll, SLOT(setPos(unsigned))); + connect(canvas, SIGNAL(horizontalScrollNoLimit(unsigned)),hscroll, SLOT(setPosNoLimit(unsigned))); + connect(time, SIGNAL(timeChanged(unsigned)), SLOT(setTime(unsigned))); + + connect(canvas, SIGNAL(tracklistChanged()), list, SLOT(tracklistChanged())); + connect(canvas, SIGNAL(dclickPart(Track*)), SIGNAL(editPart(Track*))); + connect(canvas, SIGNAL(startEditor(PartList*,int)), SIGNAL(startEditor(PartList*, int))); + + connect(song, SIGNAL(songChanged(int)), SLOT(songChanged(int))); + connect(canvas, SIGNAL(followEvent(int)), hscroll, SLOT(setOffset(int))); + connect(canvas, SIGNAL(selectionChanged()), SIGNAL(selectionChanged())); + connect(canvas, SIGNAL(dropSongFile(const QString&)), SIGNAL(dropSongFile(const QString&))); + connect(canvas, SIGNAL(dropMidiFile(const QString&)), SIGNAL(dropMidiFile(const QString&))); + + connect(canvas, SIGNAL(toolChanged(int)), SIGNAL(toolChanged(int))); +// connect(song, SIGNAL(posChanged(int, unsigned, bool)), SLOT(seek())); + + // Removed p3.3.43 + // Song::addMarker() already emits a 'markerChanged'. + //connect(time, SIGNAL(addMarker(int)), SIGNAL(addMarker(int))); + + configChanged(); // set configuration values + showTrackInfo(showTrackinfoFlag); + } + +//--------------------------------------------------------- +// updateHScrollRange +//--------------------------------------------------------- + +//void Arranger::updateHScrollRange() +//{ +// int s = 0, e = song->len(); + // Show one more measure. +// e += sigmap.ticksMeasure(e); + // Show another quarter measure due to imprecise drawing at canvas end point. +// e += sigmap.ticksMeasure(e) / 4; + // Compensate for the fixed vscroll width. +// e += canvas->rmapxDev(-vscroll->width()); +// int s1, e1; +// hscroll->range(&s1, &e1); +// if(s != s1 || e != e1) +// hscroll->setRange(s, e); +//} + +//--------------------------------------------------------- +// headerMoved +//--------------------------------------------------------- + +void Arranger::headerMoved() + { + header->setStretchEnabled(true, COL_NAME); + } + +//--------------------------------------------------------- +// setTime +//--------------------------------------------------------- + +void Arranger::setTime(unsigned tick) + { + if (tick == MAXINT) + cursorPos->setEnabled(false); + else { + cursVal = tick; + cursorPos->setEnabled(true); + cursorPos->setValue(tick); + time->setPos(3, tick, false); + } + } + +//--------------------------------------------------------- +// toolChange +//--------------------------------------------------------- + +void Arranger::setTool(int t) + { + canvas->setTool(t); + } + +//--------------------------------------------------------- +// dclickPart +//--------------------------------------------------------- + +void Arranger::dclickPart(Track* t) + { + emit editPart(t); + } + +//--------------------------------------------------------- +// configChanged +//--------------------------------------------------------- + +void Arranger::configChanged() + { + // Added by Tim. p3.3.6 + //printf("Arranger::configChanged\n"); + + if (config.canvasBgPixmap.isEmpty()) { + canvas->setBg(config.partCanvasBg); + canvas->setBg(QPixmap()); + //printf("Arranger::configChanged - no bitmap!\n"); + } + else { + + //printf("Arranger::configChanged - bitmap %s!\n", config.canvasBgPixmap.ascii()); + canvas->setBg(QPixmap(config.canvasBgPixmap)); + } + midiTrackInfo->setFont(config.fonts[2]); + //updateTrackInfo(type); + } + +//--------------------------------------------------------- +// songlenChanged +//--------------------------------------------------------- + +void Arranger::songlenChanged(int n) + { + int newLen = sigmap.bar2tick(n, 0, 0); + song->setLen(newLen); + } +//--------------------------------------------------------- +// songChanged +//--------------------------------------------------------- + +void Arranger::songChanged(int type) + { + // Is it simply a midi controller value adjustment? Forget it. + if(type != SC_MIDI_CONTROLLER) + { + unsigned endTick = song->len(); + int offset = sigmap.ticksMeasure(endTick); + hscroll->setRange(-offset, endTick + offset); //DEBUG + canvas->setOrigin(-offset, 0); + time->setOrigin(-offset, 0); + + int bar, beat; + unsigned tick; + sigmap.tickValues(endTick, &bar, &beat, &tick); + if (tick || beat) + ++bar; + lenEntry->blockSignals(true); + lenEntry->setValue(bar); + lenEntry->blockSignals(false); + + trackSelectionChanged(); + canvas->partsChanged(); + typeBox->setCurrentItem(int(song->mtype())); + if (type & SC_SIG) + time->redraw(); + if (type & SC_TEMPO) + setGlobalTempo(tempomap.globalTempo()); + + if(type & SC_TRACK_REMOVED) + { + AudioStrip* w = (AudioStrip*)(trackInfo->getWidget(2)); + if(w) + { + Track* t = w->getTrack(); + if(t) + { + TrackList* tl = song->tracks(); + iTrack it = tl->find(t); + if(it == tl->end()) + { + delete w; + trackInfo->addWidget(0, 2); + selected = 0; + } + } + } + } + } + + updateTrackInfo(type); + } + +//--------------------------------------------------------- +// trackSelectionChanged +//--------------------------------------------------------- + +void Arranger::trackSelectionChanged() + { + TrackList* tracks = song->tracks(); + Track* track = 0; + for (iTrack t = tracks->begin(); t != tracks->end(); ++t) { + if ((*t)->selected()) { + track = *t; + break; + } + } + if (track == selected) + return; + selected = track; + updateTrackInfo(-1); + } + +//--------------------------------------------------------- +// modeChange +//--------------------------------------------------------- + +void Arranger::modeChange(int mode) + { + song->setMType(MType(mode)); + updateTrackInfo(-1); + } + +//--------------------------------------------------------- +// setMode +//--------------------------------------------------------- + +void Arranger::setMode(int mode) + { + typeBox->setCurrentItem(mode); + } + +//--------------------------------------------------------- +// writeStatus +//--------------------------------------------------------- + +void Arranger::writeStatus(int level, Xml& xml) + { + xml.tag(level++, "arranger"); + xml.intTag(level, "info", ib->isOn()); + split->writeStatus(level, xml); + list->writeStatus(level, xml, "list"); + + xml.intTag(level, "xpos", hscroll->pos()); + xml.intTag(level, "xmag", hscroll->mag()); + xml.intTag(level, "ypos", vscroll->value()); + xml.etag(level, "arranger"); + } + +//--------------------------------------------------------- +// readStatus +//--------------------------------------------------------- + +void Arranger::readStatus(Xml& xml) + { + for (;;) { + Xml::Token token(xml.parse()); + const QString& tag(xml.s1()); + switch (token) { + case Xml::Error: + case Xml::End: + return; + case Xml::TagStart: + if (tag == "info") + showTrackinfoFlag = xml.parseInt(); + else if (tag == split->name()) + split->readStatus(xml); + else if (tag == "list") + list->readStatus(xml, "list"); + else if (tag == "xmag") + hscroll->setMag(xml.parseInt()); + else if (tag == "xpos") { + int hpos = xml.parseInt(); + hscroll->setPos(hpos); + } + else if (tag == "ypos") + vscroll->setValue(xml.parseInt()); + else + xml.unknown("Arranger"); + break; + case Xml::TagEnd: + if (tag == "arranger") { + ib->setOn(showTrackinfoFlag); + return; + } + default: + break; + } + } + } + +//--------------------------------------------------------- +// setRaster +//--------------------------------------------------------- + +void Arranger::_setRaster(int index) + { + static int rasterTable[] = { + 1, 0, 768, 384, 192, 96 + }; + _raster = rasterTable[index]; + // Set the audio record part snapping. + song->setRecRaster(_raster); + canvas->redraw(); + } + +//--------------------------------------------------------- +// reset +//--------------------------------------------------------- + +void Arranger::reset() + { + canvas->setXPos(0); + canvas->setYPos(0); + hscroll->setPos(0); + vscroll->setValue(0); + time->setXPos(0); + time->setYPos(0); + } + +//--------------------------------------------------------- +// cmd +//--------------------------------------------------------- + +void Arranger::cmd(int cmd) + { + int ncmd; + switch (cmd) { + case CMD_CUT_PART: + ncmd = PartCanvas::CMD_CUT_PART; + break; + case CMD_COPY_PART: + ncmd = PartCanvas::CMD_COPY_PART; + break; + case CMD_PASTE_PART: + ncmd = PartCanvas::CMD_PASTE_PART; + break; + case CMD_PASTE_CLONE_PART: + ncmd = PartCanvas::CMD_PASTE_CLONE_PART; + break; + case CMD_PASTE_PART_TO_TRACK: + ncmd = PartCanvas::CMD_PASTE_PART_TO_TRACK; + break; + case CMD_PASTE_CLONE_PART_TO_TRACK: + ncmd = PartCanvas::CMD_PASTE_CLONE_PART_TO_TRACK; + break; + case CMD_INSERT_PART: + ncmd = PartCanvas::CMD_INSERT_PART; + break; + case CMD_INSERT_EMPTYMEAS: + ncmd = PartCanvas::CMD_INSERT_EMPTYMEAS; + break; + default: + return; + } + canvas->cmd(ncmd); + } + +//--------------------------------------------------------- +// globalPitchChanged +//--------------------------------------------------------- + +void Arranger::globalPitchChanged(int val) + { + song->setGlobalPitchShift(val); + } + +//--------------------------------------------------------- +// globalTempoChanged +//--------------------------------------------------------- + +void Arranger::globalTempoChanged(int val) + { + audio->msgSetGlobalTempo(val); + song->tempoChanged(); + } + +//--------------------------------------------------------- +// setTempo50 +//--------------------------------------------------------- + +void Arranger::setTempo50() + { + setGlobalTempo(50); + } + +//--------------------------------------------------------- +// setTempo100 +//--------------------------------------------------------- + +void Arranger::setTempo100() + { + setGlobalTempo(100); + } + +//--------------------------------------------------------- +// setTempo200 +//--------------------------------------------------------- + +void Arranger::setTempo200() + { + setGlobalTempo(200); + } + +//--------------------------------------------------------- +// setGlobalTempo +//--------------------------------------------------------- + +void Arranger::setGlobalTempo(int val) + { + if(val != globalTempoSpinBox->value()) + globalTempoSpinBox->setValue(val); + } + +//--------------------------------------------------------- +// verticalScrollSetYpos +//--------------------------------------------------------- +void Arranger::verticalScrollSetYpos(unsigned ypos) + { + vscroll->setValue(ypos); + } + +//--------------------------------------------------------- +// progRecClicked +//--------------------------------------------------------- + +void Arranger::progRecClicked() + { + MidiTrack* track = (MidiTrack*)selected; + int portno = track->outPort(); + int channel = track->outChannel(); + MidiPort* port = &midiPorts[portno]; + int program = port->hwCtrlState(channel, CTRL_PROGRAM); + if(program == CTRL_VAL_UNKNOWN || program == 0xffffff) + return; + + unsigned tick = song->cpos(); + Event a(Controller); + a.setTick(tick); + a.setA(CTRL_PROGRAM); + a.setB(program); + + song->recordEvent(track, a); + } + +//--------------------------------------------------------- +// volRecClicked +//--------------------------------------------------------- + +void Arranger::volRecClicked() + { + MidiTrack* track = (MidiTrack*)selected; + int portno = track->outPort(); + int channel = track->outChannel(); + MidiPort* port = &midiPorts[portno]; + int volume = port->hwCtrlState(channel, CTRL_VOLUME); + if(volume == CTRL_VAL_UNKNOWN) + return; + + unsigned tick = song->cpos(); + Event a(Controller); + a.setTick(tick); + a.setA(CTRL_VOLUME); + a.setB(volume); + + song->recordEvent(track, a); + } + +//--------------------------------------------------------- +// panRecClicked +//--------------------------------------------------------- + +void Arranger::panRecClicked() + { + MidiTrack* track = (MidiTrack*)selected; + int portno = track->outPort(); + int channel = track->outChannel(); + MidiPort* port = &midiPorts[portno]; + int pan = port->hwCtrlState(channel, CTRL_PANPOT); + if(pan == CTRL_VAL_UNKNOWN) + return; + + unsigned tick = song->cpos(); + Event a(Controller); + a.setTick(tick); + a.setA(CTRL_PANPOT); + a.setB(pan); + + song->recordEvent(track, a); + } + +//--------------------------------------------------------- +// recordClicked +//--------------------------------------------------------- + +void Arranger::recordClicked() + { + MidiTrack* track = (MidiTrack*)selected; + int portno = track->outPort(); + int channel = track->outChannel(); + MidiPort* port = &midiPorts[portno]; + unsigned tick = song->cpos(); + + int program = port->hwCtrlState(channel, CTRL_PROGRAM); + if(program != CTRL_VAL_UNKNOWN && program != 0xffffff) + { + Event a(Controller); + a.setTick(tick); + a.setA(CTRL_PROGRAM); + a.setB(program); + song->recordEvent(track, a); + } + int volume = port->hwCtrlState(channel, CTRL_VOLUME); + if(volume != CTRL_VAL_UNKNOWN) + { + Event a(Controller); + a.setTick(tick); + a.setA(CTRL_VOLUME); + a.setB(volume); + song->recordEvent(track, a); + } + int pan = port->hwCtrlState(channel, CTRL_PANPOT); + if(pan != CTRL_VAL_UNKNOWN) + { + Event a(Controller); + a.setTick(tick); + a.setA(CTRL_PANPOT); + a.setB(pan); + song->recordEvent(track, a); + } + } + +//--------------------------------------------------------- +// trackInfoScroll +//--------------------------------------------------------- + +void Arranger::trackInfoScroll(int y) + { + if (trackInfo->visibleWidget()) + trackInfo->visibleWidget()->move(0, -y); + } + +//--------------------------------------------------------- +// WidgetStack +//--------------------------------------------------------- + +WidgetStack::WidgetStack(QWidget* parent, const char* name) + : QWidget(parent, name) + { + top = -1; + } + +//--------------------------------------------------------- +// raiseWidget +//--------------------------------------------------------- + +void WidgetStack::raiseWidget(int idx) + { + if (top != -1) { + if (stack[top]) + stack[top]->hide(); + } + top = idx; + if (idx == -1) + return; + int n = stack.size(); + if (idx >= n) + return; + if (stack[idx]) + stack[idx]->show(); + } + +//--------------------------------------------------------- +// addWidget +//--------------------------------------------------------- + +void WidgetStack::addWidget(QWidget* w, unsigned int n) + { + if (w) + w->hide(); + if (stack.size() <= n ) + stack.push_back(w); + else + stack[n] = w; + } + +QWidget* WidgetStack::getWidget(unsigned int n) + { + if (stack.size() <= n ) + return 0; + return stack[n]; + } + +//--------------------------------------------------------- +// visibleWidget +//--------------------------------------------------------- + +QWidget* WidgetStack::visibleWidget() const + { + if (top != -1) + return stack[top]; + return 0; + } + +//--------------------------------------------------------- +// minimumSizeHint +//--------------------------------------------------------- + +QSize WidgetStack::minimumSizeHint() const + { + if (top == -1) + return (QSize(0, 0)); + QSize s(0,0); + for (unsigned int i = 0; i < stack.size(); ++i) { + if (stack[i]) { + QSize ss = stack[i]->minimumSizeHint(); + if (!ss.isValid()) + ss = stack[i]->minimumSize(); + s = s.expandedTo(ss); + } + } + return s; + } + +//--------------------------------------------------------- +// clear +//--------------------------------------------------------- + +void Arranger::clear() + { + AudioStrip* w = (AudioStrip*)(trackInfo->getWidget(2)); + if (w) + delete w; + trackInfo->addWidget(0, 2); + selected = 0; + } + +void Arranger::wheelEvent(QWheelEvent* ev) + { + emit redirectWheelEvent(ev); + } + +void Arranger::controllerChanged(Track *t) +{ + canvas->controllerChanged(t); +} diff --git a/muse2/muse/arranger/arranger.h b/muse2/muse/arranger/arranger.h new file mode 100644 index 00000000..b96a5602 --- /dev/null +++ b/muse2/muse/arranger/arranger.h @@ -0,0 +1,227 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: arranger.h,v 1.17.2.15 2009/11/14 03:37:48 terminator356 Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __ARRANGER_H__ +#define __ARRANGER_H__ + +#include + +#include +#include +#include +//Added by qt3to4: +#include +#include + +#include "midieditor.h" +#include "pcanvas.h" +#include "mtrackinfobase.h" +#include "trackautomationview.h" + +class Q3MainWindow; +class QToolButton; +class Header; +class TList; +class ScrollScale; +class QScrollBar; +class MTScale; +class Track; +class Xml; +class Splitter; +class LabelCombo; +class PosLabel; +class QCheckBox; +class MidiTrackInfoBase; +class WaveTrackInfoBase; +class TLLayout; +class WidgetStack; +class AudioStrip; +class SpinBox; +//--------------------------------------------------------- +// TWhatsThis +//--------------------------------------------------------- + +class TWhatsThis : public Q3WhatsThis { + Header* header; + protected: + QString text(const QPoint&); + public: + TWhatsThis(QWidget* parent, Header* h) : Q3WhatsThis(parent) { + header = h; + } + }; + +//--------------------------------------------------------- +// WidgetStack +//--------------------------------------------------------- + +class WidgetStack : public QWidget { + Q_OBJECT + std::vector stack; + int top; + + public: + WidgetStack(QWidget* parent, const char* name = 0); + void raiseWidget(int idx); + void addWidget(QWidget* w, unsigned int idx); + QWidget* getWidget(unsigned int idx); + QWidget* visibleWidget() const; + int curIdx() const { return top; } + QSize minimumSizeHint() const; + }; + +//--------------------------------------------------------- +// MidiTrackInfo +//--------------------------------------------------------- + +class MidiTrackInfo : public MidiTrackInfoBase { + public: + bool _midiDetect; + MidiTrackInfo(QWidget* parent) : MidiTrackInfoBase(parent) { _midiDetect = false; } + }; + +//--------------------------------------------------------- +// Arranger +//--------------------------------------------------------- + +class Arranger : public QWidget { + Q_OBJECT + + int _quant, _raster; + PartCanvas* canvas; + ScrollScale* hscroll; + QScrollBar* vscroll; + TList* list; + Header* header; + MTScale* time; + SpinBox* lenEntry; + bool showTrackinfoFlag; + WidgetStack* trackInfo; + QScrollBar* infoScroll; + //MidiTrackInfoBase* midiTrackInfo; + MidiTrackInfo* midiTrackInfo; + AudioStrip* waveTrackInfo; + QWidget* noTrackInfo; + TLLayout* tgrid; + + Track* selected; + + LabelCombo* typeBox; + QToolButton* ib; + int trackInfoType; + Splitter* split; + Q3PopupMenu* pop; + int songType; + PosLabel* cursorPos; + SpinBox* globalTempoSpinBox; + SpinBox* globalPitchSpinBox; + int program, pan, volume; + + unsigned cursVal; + void genTrackInfo(QWidget* parent); + void genMidiTrackInfo(); + void genWaveTrackInfo(); + void updateMidiTrackInfo(int flags); + void switchInfo(int); + + private slots: + void _setRaster(int); + void songlenChanged(int); + void showTrackInfo(bool); + void trackSelectionChanged(); + void trackInfoScroll(int); + + //void iNameChanged(); + ///void iInputChannelChanged(const QString&); + void iOutputChannelChanged(int); + ///void iInputPortChanged(const QString&); + void iOutputPortChanged(int); + void iProgHBankChanged(); + void iProgLBankChanged(); + void iProgramChanged(); + void iProgramDoubleClicked(); + void iLautstChanged(int); + void iLautstDoubleClicked(); + void iTranspChanged(int); + void iAnschlChanged(int); + void iVerzChanged(int); + void iLenChanged(int); + void iKomprChanged(int); + void iPanChanged(int); + void iPanDoubleClicked(); + void songChanged(int); + void modeChange(int); + void instrPopup(); + void setTime(unsigned); + void headerMoved(); + void globalPitchChanged(int); + void globalTempoChanged(int); + void setTempo50(); + void setTempo100(); + void setTempo200(); + //void seek(); + void recordClicked(); + void progRecClicked(); + void volRecClicked(); + void panRecClicked(); + void recEchoToggled(bool); + void verticalScrollSetYpos(unsigned); + void inRoutesPressed(); + void outRoutesPressed(); + void routingPopupMenuActivated(int /*id*/); + + signals: + void redirectWheelEvent(QWheelEvent*); + void editPart(Track*); + void selectionChanged(); + void dropSongFile(const QString&); + void dropMidiFile(const QString&); + void startEditor(PartList*, int); + void toolChanged(int); + //void addMarker(int); + void setUsedTool(int); + + + protected: + + virtual void wheelEvent(QWheelEvent* e); + + protected slots: + virtual void midiTrackInfoHeartBeat(); + + public slots: + void dclickPart(Track*); + void setTool(int); + void updateTrackInfo(int flags); + void configChanged(); + void controllerChanged(Track *t); + + public: + enum { CMD_CUT_PART, CMD_COPY_PART, CMD_PASTE_PART, CMD_PASTE_CLONE_PART, CMD_PASTE_PART_TO_TRACK, CMD_PASTE_CLONE_PART_TO_TRACK, + CMD_INSERT_PART, CMD_INSERT_EMPTYMEAS }; + + Arranger(Q3MainWindow* parent, const char* name = 0); + void setMode(int); + void reset(); + + void setTrackInfoLabelText(); + void setTrackInfoLabelFont(); + + void writeStatus(int level, Xml&); + void readStatus(Xml&); + + Track* curTrack() const { return selected; } + void cmd(int); + bool isSingleSelection() { return canvas->isSingleSelection(); } + void setGlobalTempo(int); + void clear(); + + unsigned cursorValue() { return cursVal; } + }; + +#endif + diff --git a/muse2/muse/arranger/pcanvas.cpp b/muse2/muse/arranger/pcanvas.cpp new file mode 100644 index 00000000..0569f03d --- /dev/null +++ b/muse2/muse/arranger/pcanvas.cpp @@ -0,0 +1,2825 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: pcanvas.cpp,v 1.48.2.26 2009/11/22 11:08:33 spamatica Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//Added by qt3to4: +#include +#include +#include +#include +#include +#include +#include +#include + +#include "widgets/tools.h" +#include "pcanvas.h" +#include "midieditor.h" +#include "globals.h" +#include "icons.h" +#include "event.h" +#include "xml.h" +#include "wave.h" +#include "audio.h" +#include "shortcuts.h" +#include "gconfig.h" +#include "app.h" +#include "filedialog.h" +#include "marker/marker.h" + +const char* partColorNames[] = { + "Default", + "Refrain", + "Bridge", + "Intro", + "Coda", + "Chorus", + "Solo", + "Brass", + "Percussion", + "Drums", + "Guitar", + "Bass", + "Flute", + "Strings", + "Keyboard", + "Piano", + "Saxophon", + }; + +//--------------------------------------------------------- +// ColorListItem +//--------------------------------------------------------- + +class ColorListItem { //: public QCustomMenuItem { ddskrjo + QColor color; + int h; + int fontheight; + QString label; + virtual QSize sizeHint() { return QSize(80, h); } + virtual void paint(QPainter* p, const QColorGroup&, bool /*act*/, bool /*enabled*/, int x, int y, int /*w*/, int h) + { + p->fillRect(x+5, y+2, h-4, h-4, QBrush(color)); + p->drawText(x+5 + h - 4 + 3, y+(fontheight * 3) / 4, label); + } + + public: + ColorListItem(const QColor& c, int _h, int _fh, const char* txt) + : color(c), h(_h), fontheight(_fh), label(txt) { + } + QString text() const { return QString("PartColor"); } + }; + +//--------------------------------------------------------- +// NPart +//--------------------------------------------------------- + +NPart::NPart(Part* e) : CItem(Event(), e) + { + int th = track()->height(); + int y = track()->y(); + setPos(QPoint(e->tick(), y + 1)); + setBBox(QRect(e->tick(), y + 1, e->lenTick(), th)); + } + +//--------------------------------------------------------- +// PartCanvas +//--------------------------------------------------------- + +PartCanvas::PartCanvas(int* r, QWidget* parent, int sx, int sy) + : Canvas(parent, sx, sy) + { + setAcceptDrops(true); + _raster = r; + + setFocusPolicy(Qt::StrongFocus); + // Defaults: + lineEditor = 0; + editMode = false; + + tracks = song->tracks(); + setMouseTracking(true); + drag = DRAG_OFF; + curColorIndex = 0; + partsChanged(); + } + +//--------------------------------------------------------- +// y2pitch +//--------------------------------------------------------- + +int PartCanvas::y2pitch(int y) const + { + TrackList* tl = song->tracks(); + int yy = 0; + int idx = 0; + for (iTrack it = tl->begin(); it != tl->end(); ++it, ++idx) { + int h = (*it)->height(); + // if ((y >= yy) && (y < yy+h)) + if (y < yy+h) + break; + yy += h; + } + return idx; + } + +//--------------------------------------------------------- +// pitch2y +//--------------------------------------------------------- + +int PartCanvas::pitch2y(int p) const + { + TrackList* tl = song->tracks(); + int yy = 0; + int idx = 0; + for (iTrack it = tl->begin(); it != tl->end(); ++it, ++idx) { + if (idx == p) + break; + yy += (*it)->height(); + } + return yy; + } + +//--------------------------------------------------------- +// leaveEvent +//--------------------------------------------------------- + +void PartCanvas::leaveEvent(QEvent*) + { + emit timeChanged(MAXINT); + } + +//--------------------------------------------------------- +// returnPressed +//--------------------------------------------------------- + +void PartCanvas::returnPressed() + { + lineEditor->hide(); + Part* oldPart = editPart->part(); + Part* newPart = oldPart->clone(); + // Added by Tim. p3.3.6 + //printf("PartCanvas::returnPressed before msgChangePart oldPart refs:%d Arefs:%d newPart refs:%d Arefs:%d\n", oldPart->events()->refCount(), oldPart->events()->arefCount(), newPart->events()->refCount(), newPart->events()->arefCount()); + + newPart->setName(lineEditor->text()); + // Indicate do undo, and do port controller values but not clone parts. + //audio->msgChangePart(oldPart, newPart); + audio->msgChangePart(oldPart, newPart, true, true, false); + // Added by Tim. p3.3.6 + //printf("PartCanvas::returnPressed after msgChangePart oldPart refs:%d Arefs:%d newPart refs:%d Arefs:%d\n", oldPart->events()->refCount(), oldPart->events()->arefCount(), newPart->events()->refCount(), newPart->events()->arefCount()); + + editMode = false; + } + +//--------------------------------------------------------- +// viewMouseDoubleClick +//--------------------------------------------------------- + +void PartCanvas::viewMouseDoubleClickEvent(QMouseEvent* event) + { + if (_tool != PointerTool) { + viewMousePressEvent(event); + return; + } + QPoint cpos = event->pos(); + curItem = items.find(cpos); + bool shift = event->state() & Qt::ShiftButton; + if (curItem) { + if (event->button() == Qt::LeftButton && shift) { + editPart = (NPart*)curItem; + QRect r = map(curItem->bbox()); + if (lineEditor == 0) { + lineEditor = new QLineEdit(this); + lineEditor->setFrame(true); + } + editMode = true; + lineEditor->setGeometry(r); + lineEditor->setText(editPart->name()); + lineEditor->setFocus(); + lineEditor->show(); + } + else if (event->button() == Qt::LeftButton) { + deselectAll(); + selectItem(curItem, true); + emit dclickPart(((NPart*)(curItem))->track()); + } + } + // + // double click creates new part between left and + // right mark + + else { + TrackList* tl = song->tracks(); + iTrack it; + int yy = 0; + int y = event->y(); + for (it = tl->begin(); it != tl->end(); ++it) { + int h = (*it)->height(); + if (y >= yy && y < (yy + h)) + break; + yy += h; + } + if (pos[2] - pos[1] > 0 && it != tl->end()) { + Track* track = *it; + switch(track->type()) { + case Track::MIDI: + case Track::DRUM: + { + MidiPart* part = new MidiPart((MidiTrack*)track); + part->setTick(pos[1]); + part->setLenTick(pos[2]-pos[1]); + part->setName(track->name()); + NPart* np = new NPart(part); + items.add(np); + deselectAll(); + part->setSelected(true); + audio->msgAddPart(part); + } + break; + case Track::WAVE: + case Track::AUDIO_OUTPUT: + case Track::AUDIO_INPUT: + case Track::AUDIO_GROUP: + case Track::AUDIO_AUX: + case Track::AUDIO_SOFTSYNTH: + break; + } + } + } + } + +//--------------------------------------------------------- +// startUndo +//--------------------------------------------------------- + +void PartCanvas::startUndo(DragType) + { + song->startUndo(); + } + +//--------------------------------------------------------- +// endUndo +//--------------------------------------------------------- + +void PartCanvas::endUndo(DragType t, int flags) + { + song->endUndo(flags | ((t == MOVE_COPY || t == MOVE_CLONE) + ? SC_PART_INSERTED : SC_PART_MODIFIED)); + } + +//--------------------------------------------------------- +// moveCanvasItems +//--------------------------------------------------------- + +void PartCanvas::moveCanvasItems(CItemList& items, int dp, int dx, DragType dtype, int*) +{ + /* + if(editor->parts()->empty()) + return; + + //struct p2c + //{ + // Part* newp; + // int xdiff; + //} + + //std::set parts2change; + //typedef std::set::iterator iptc; + std::map parts2change; + typedef std::map::iterator iP2C; + + int modified = 0; + for(iPart ip = editor->parts()->begin(); ip != editor->parts()->end(); ++ip) + { + Part* part = ip->second; + if(!part) + continue; + + int npartoffset = 0; + for(iCItem ici = items.begin(); ici != items.end(); ++ici) + { + CItem* ci = ici->second; + //Part* pt = ci->part(); + //if(!pt) + if(ci->part() != part) + continue; + + int x = ci->pos().x() + dx; + int y = pitch2y(y2pitch(ci->pos().y()) + dp); + QPoint newpos = raster(QPoint(x, y)); + + // Test moving the item... + + //int offset = testMoveItem(ci, newpos, dragtype); + NEvent* nevent = (NEvent*) ci; + Event event = nevent->event(); + //int npitch = y2pitch(newpos.y()); + x = newpos.x(); + if (x < 0) + x = 0; + + int ntick = editor->rasterVal(x) - part->tick(); + if (ntick < 0) + ntick = 0; + int diff = ntick + event.lenTick() - part->lenTick(); + + // If moving the item would require a new part size... + if(diff > npartoffset) + npartoffset = diff; + } + + if(npartoffset > 0) + { + // Create new part... + // if there are several events that are moved outside the part, it will be recreated for each + // so the part _in_ the event will not be valid, ask the authority. + Part* newPart = part->clone(); + //Part* newPart = Canvas::part()->clone(); + + newPart->setLenTick(newPart->lenTick() + npartoffset); + audio->msgChangePart(part, newPart,false); + + modified = SC_PART_MODIFIED; + + // BUG FIX: #1650953 + // Added by T356. + // Fixes posted "select and drag past end of part - crashing" bug + for(iPart ip = editor->parts()->begin(); ip != editor->parts()->end(); ++ip) + { + if(ip->second == part) + { + editor->parts()->erase(ip); + break; + } + } + + editor->parts()->add(newPart); + if(parts2change.find(part) == parts2change.end()) + parts2change.insert(std::pair (part, newPart)); + +// part = newPart; // reassign +// item->setPart(part); +// item->setEvent(newEvent); +// curPart = part; +// curPartId = curPart->sn(); + + } + } +*/ + +// int modified = 0; + for(iCItem ici = items.begin(); ici != items.end(); ++ici) + { + CItem* ci = ici->second; + + // If this item's part is in the parts2change list, change the item's part to the new part. + //Part* pt = ci->part(); + //iP2C ip2c = parts2change.find(pt); + //if(ip2c != parts2change.end()) + // ci->setPart(ip2c->second); + + int x = ci->pos().x(); + int y = ci->pos().y(); + int nx = x + dx; + int ny = pitch2y(y2pitch(y) + dp); + QPoint newpos = raster(QPoint(nx, ny)); + selectItem(ci, true); + + if(moveItem(ci, newpos, dtype)) + ci->move(newpos); + if(moving.size() == 1) { + itemReleased(curItem, newpos); + } + if(dtype == MOVE_COPY || dtype == MOVE_CLONE) + selectItem(ci, false); + } + + + //if(pflags) + // *pflags = modified; +} + +//--------------------------------------------------------- +// moveItem +// return false, if copy/move not allowed +//--------------------------------------------------------- + +// Changed by T356. +//bool PartCanvas::moveItem(CItem* item, const QPoint& newpos, DragType t, int*) +bool PartCanvas::moveItem(CItem* item, const QPoint& newpos, DragType t) + { + NPart* npart = (NPart*) item; + Part* spart = npart->part(); + Track* track = npart->track(); + unsigned dtick = newpos.x(); + unsigned ntrack = y2pitch(item->mp().y()); + Track::TrackType type = track->type(); + if (tracks->index(track) == ntrack && (dtick == spart->tick())) { + return false; + } + if (ntrack >= tracks->size()) { + ntrack = tracks->size(); + Track* newTrack = song->addTrack(int(type)); + if (type == Track::WAVE) { + WaveTrack* st = (WaveTrack*) track; + WaveTrack* dt = (WaveTrack*) newTrack; + dt->setChannels(st->channels()); + } + emit tracklistChanged(); + } + Track* dtrack = tracks->index(ntrack); + + if (dtrack->type() != type) { + QMessageBox::critical(this, QString("MusE"), + tr("Cannot copy/move/clone to different Track-Type")); + return false; + } + + Part* dpart; + //bool clone = (t == MOVE_CLONE) || (spart->events()->arefCount() > 1); + //bool clone = (t == MOVE_CLONE); + bool clone = (t == MOVE_CLONE || (t == MOVE_COPY && spart->events()->arefCount() > 1)); + + if(t == MOVE_MOVE) + { + // This doesn't increment aref count, and doesn't chain clones. + // It also gives the new part a new serial number, but it is + // overwritten with the old one by Song::changePart(), from Audio::msgChangePart() below. + dpart = spart->clone(); + dpart->setTrack(dtrack); + } + else + // This increments aref count if cloned, and chains clones. + // It also gives the new part a new serial number. + dpart = dtrack->newPart(spart, clone); + + dpart->setTick(dtick); + + // Added by Tim. p3.3.6 + //printf("PartCanvas::moveItem before add/changePart clone:%d spart:%p events:%p refs:%d Arefs:%d sn:%d dpart:%p events:%p refs:%d Arefs:%d sn:%d\n", clone, spart, spart->events(), spart->events()->refCount(), spart->events()->arefCount(), spart->sn(), dpart, dpart->events(), dpart->events()->refCount(), dpart->events()->arefCount(), dpart->sn()); + + if(t == MOVE_MOVE) + item->setPart(dpart); + //if (!clone) { + if (t == MOVE_COPY && !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); + } + } + if (t == MOVE_COPY || t == MOVE_CLONE) { + // These will not increment ref count, and will not chain clones... + if (dtrack->type() == Track::WAVE) + audio->msgAddPart((WavePart*)dpart,false); + else + audio->msgAddPart(dpart,false); + } + else if (t == MOVE_MOVE) { + dpart->setSelected(spart->selected()); + // These will increment ref count if not a clone, and will chain clones... + if (dtrack->type() == Track::WAVE) + // Indicate no undo, and do not do port controller values and clone parts. + //audio->msgChangePart((WavePart*)spart, (WavePart*)dpart,false); + audio->msgChangePart((WavePart*)spart, (WavePart*)dpart, false, false, false); + else + // Indicate no undo, and do port controller values but not clone parts. + //audio->msgChangePart(spart, dpart, false); + audio->msgChangePart(spart, dpart, false, true, false); + + spart->setSelected(false); + } + // Added by Tim. p3.3.6 + //printf("PartCanvas::moveItem after add/changePart spart:%p events:%p refs:%d Arefs:%d dpart:%p events:%p refs:%d Arefs:%d\n", spart, spart->events(), spart->events()->refCount(), spart->events()->arefCount(), dpart, dpart->events(), dpart->events()->refCount(), dpart->events()->arefCount()); + + if (song->len() < (dpart->lenTick() + dpart->tick())) + song->setLen(dpart->lenTick() + dpart->tick()); + //endUndo(t); + return true; + } + +//--------------------------------------------------------- +// raster +//--------------------------------------------------------- + +QPoint PartCanvas::raster(const QPoint& p) const + { + int y = pitch2y(y2pitch(p.y())); + int x = p.x(); + if (x < 0) + x = 0; + x = sigmap.raster(x, *_raster); + if (x < 0) + x = 0; + return QPoint(x, y); + } + +//--------------------------------------------------------- +// partsChanged +//--------------------------------------------------------- + +void PartCanvas::partsChanged() + { + items.clear(); + int idx = 0; + for (iTrack t = tracks->begin(); t != tracks->end(); ++t) { + PartList* pl = (*t)->parts(); + for (iPart i = pl->begin(); i != pl->end(); ++i) { + NPart* np = new NPart(i->second); + items.add(np); + if (i->second->selected()) { + selectItem(np, true); + } + } + ++idx; + } + redraw(); + } + +//--------------------------------------------------------- +// updateSelection +//--------------------------------------------------------- + +void PartCanvas::updateSelection() + { + for (iCItem i = items.begin(); i != items.end(); ++i) { + NPart* part = (NPart*)(i->second); + part->part()->setSelected(i->second->isSelected()); + } + emit selectionChanged(); + redraw(); + } + +//--------------------------------------------------------- +// resizeItem +//--------------------------------------------------------- + +void PartCanvas::resizeItem(CItem* i, bool noSnap) + { + Track* t = ((NPart*)(i))->track(); + Part* p = ((NPart*)(i))->part(); + + int pos = p->tick() + i->width(); + int snappedpos = p->tick(); + if (!noSnap) { + snappedpos = sigmap.raster(pos, *_raster); + } + unsigned int newwidth = snappedpos - p->tick(); + if (newwidth == 0) + newwidth = sigmap.rasterStep(p->tick(), *_raster); + + song->cmdResizePart(t, p, newwidth); + } + +//--------------------------------------------------------- +// newItem +// first create local Item +//--------------------------------------------------------- + +CItem* PartCanvas::newItem(const QPoint& pos, int) + { + int x = pos.x(); + if (x < 0) + x = 0; + x = sigmap.raster(x, *_raster); + unsigned trackIndex = y2pitch(pos.y()); + if (trackIndex >= tracks->size()) + return 0; + Track* track = tracks->index(trackIndex); + if(!track) + return 0; + + Part* pa = 0; + NPart* np = 0; + switch(track->type()) { + case Track::MIDI: + case Track::DRUM: + pa = new MidiPart((MidiTrack*)track); + pa->setTick(x); + pa->setLenTick(0); + break; + case Track::WAVE: + pa = new WavePart((WaveTrack*)track); + pa->setTick(x); + pa->setLenTick(0); + break; + case Track::AUDIO_OUTPUT: + case Track::AUDIO_INPUT: + case Track::AUDIO_GROUP: + case Track::AUDIO_AUX: + case Track::AUDIO_SOFTSYNTH: + return 0; + } + pa->setName(track->name()); + pa->setColorIndex(curColorIndex); + np = new NPart(pa); + return np; + } + +//--------------------------------------------------------- +// newItem +//--------------------------------------------------------- + +void PartCanvas::newItem(CItem* i, bool noSnap) + { + Part* p = ((NPart*)(i))->part(); + + int len = i->width(); + if (!noSnap) + len = sigmap.raster(len, *_raster); + if (len == 0) + len = sigmap.rasterStep(p->tick(), *_raster); + p->setLenTick(len); + p->setSelected(true); + audio->msgAddPart(p); + } + +//--------------------------------------------------------- +// deleteItem +//--------------------------------------------------------- + +bool PartCanvas::deleteItem(CItem* i) + { + Part* p = ((NPart*)(i))->part(); + audio->msgRemovePart(p); //Invokes songChanged which calls partsChanged which makes it difficult to delete them there + return true; + } + +//--------------------------------------------------------- +// splitItem +//--------------------------------------------------------- + +void PartCanvas::splitItem(CItem* item, const QPoint& pt) + { + NPart* np = (NPart*) item; + Track* t = np->track(); + Part* p = np->part(); + int x = pt.x(); + if (x < 0) + x = 0; + song->cmdSplitPart(t, p, sigmap.raster(x, *_raster)); + } + +//--------------------------------------------------------- +// glueItem +//--------------------------------------------------------- + +void PartCanvas::glueItem(CItem* item) + { + NPart* np = (NPart*) item; + Track* t = np->track(); + Part* p = np->part(); + song->cmdGluePart(t, p); + } + +//--------------------------------------------------------- +// genItemPopup +//--------------------------------------------------------- + +Q3PopupMenu* PartCanvas::genItemPopup(CItem* item) + { + NPart* npart = (NPart*) item; + Track::TrackType trackType = npart->track()->type(); + + Q3PopupMenu* partPopup = new Q3PopupMenu(this); + + partPopup->insertItem(*editcutIconSet, tr("C&ut"), 4); + partPopup->setAccel(Qt::CTRL+Qt::Key_X, 4); + + partPopup->insertItem(*editcopyIconSet, tr("&Copy"), 5); + partPopup->setAccel(Qt::CTRL+Qt::Key_C, 5); + + partPopup->insertSeparator(); + int rc = npart->part()->events()->arefCount(); + QString st = QString(tr("s&elect ")); + if(rc > 1) + st += (QString().setNum(rc) + QString(" ")); + st += QString(tr("clones")); + partPopup->insertItem(st, 18); + + partPopup->insertSeparator(); + partPopup->insertItem(tr("rename"), 0); + Q3PopupMenu* colorPopup = new Q3PopupMenu(this); + partPopup->insertItem(tr("color"), colorPopup); + + // part color selection + const QFontMetrics& fm = colorPopup->fontMetrics(); + int h = fm.lineSpacing(); + + for (int i = 0; i < NUM_PARTCOLORS; ++i) { + ColorListItem* item = new ColorListItem(config.partColors[i], h, fontMetrics().height(), partColorNames[i]); + //colorPopup->insertItem(item, 20+i); ddskrjo + } + + partPopup->insertItem(QIcon(*deleteIcon), tr("delete"), 1); // ddskrjo added QIcon to all + partPopup->insertItem(QIcon(*cutIcon), tr("split"), 2); + partPopup->insertItem(QIcon(*glueIcon), tr("glue"), 3); + partPopup->insertItem(tr("de-clone"), 15); + + partPopup->insertSeparator(); + switch(trackType) { + case Track::MIDI: + partPopup->insertItem(QIcon(*pianoIconSet), tr("pianoroll"), 10); + partPopup->insertItem(QIcon(*edit_listIcon), tr("list"), 12); + partPopup->insertItem(tr("export"), 16); + break; + case Track::DRUM: + partPopup->insertItem(QIcon(*edit_listIcon), tr("list"), 12); + partPopup->insertItem(QIcon(*edit_drummsIcon), tr("drums"), 13); + partPopup->insertItem(tr("export"), 16); + break; + case Track::WAVE: + partPopup->insertItem(QIcon(*edit_waveIcon), tr("wave edit"), 14); + partPopup->insertItem(tr("export"), 16); + partPopup->insertItem(tr("file info"), 17); + break; + case Track::AUDIO_OUTPUT: + case Track::AUDIO_INPUT: + case Track::AUDIO_GROUP: + case Track::AUDIO_AUX: + case Track::AUDIO_SOFTSYNTH: + break; + } + + partPopup->setItemEnabled(18, rc > 1); + partPopup->setItemEnabled(1, true); + partPopup->setItemEnabled(4, true); + partPopup->setItemEnabled(15, rc > 1); + + return partPopup; + } + +//--------------------------------------------------------- +// itemPopup +//--------------------------------------------------------- + +void PartCanvas::itemPopup(CItem* item, int n, const QPoint& pt) + { + PartList* pl = new PartList; + NPart* npart = (NPart*)(item); + pl->add(npart->part()); + switch(n) { + case 0: // rename + { + editPart = npart; + QRect r = map(curItem->bbox()); + if (lineEditor == 0) { + lineEditor = new QLineEdit(this); + lineEditor->setFrame(true); + } + lineEditor->setText(editPart->name()); + lineEditor->setFocus(); + lineEditor->show(); + lineEditor->setGeometry(r); + editMode = true; + } + break; + case 1: // delete + deleteItem(item); + break; + case 2: // split + splitItem(item, pt); + break; + case 3: // glue + glueItem(item); + break; + case 4: + copy(pl); + audio->msgRemovePart(npart->part()); + break; + case 5: + copy(pl); + break; + case 10: // pianoroll edit + emit startEditor(pl, 0); + return; + case 12: // list edit + emit startEditor(pl, 1); + return; + case 13: // drum edit + emit startEditor(pl, 3); + return; + case 14: // wave edit + { + // Changed to allow multiple selected parts to be shown. By T356 + // Slightly inefficient to add (above), then clear here. + // Should really only add npart->part() to pl only if NOT here. + // Removed. Added wave editor menu item instead. + //pl->clear(); + //PartList* ptl = npart->track()->parts(); + //for(ciPart pi = ptl->begin(); pi != ptl->end(); pi++) + //{ + // if(pi->second->selected()) + // pl->add(pi->second); + //} + emit startEditor(pl, 4); + } + return; + case 15: // declone + { + Part* spart = npart->part(); + Track* track = npart->track(); + Part* dpart = track->newPart(spart, false); + // Added by Tim. p3.3.6 + //printf("PartCanvas::itemPopup: #1 spart %s %p next:%s %p prev:%s %p\n", spart->name().latin1(), spart, spart->nextClone()->name().latin1(), spart->nextClone(), spart->prevClone()->name().latin1(), spart->prevClone()); + //printf("PartCanvas::itemPopup: #1 dpart %s %p next:%s %p prev:%s %p\n", dpart->name().latin1(), dpart, dpart->nextClone()->name().latin1(), dpart->nextClone(), dpart->prevClone()->name().latin1(), dpart->prevClone()); + + 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); + } + song->startUndo(); + // Indicate no undo, and do port controller values but not clone parts. + //audio->msgChangePart(spart, dpart, false); + audio->msgChangePart(spart, dpart, false, true, false); + // Added by Tim. p3.3.6 + //printf("PartCanvas::itemPopup: #2 spart %s %p next:%s %p prev:%s %p\n", spart->name().latin1(), spart, spart->nextClone()->name().latin1(), spart->nextClone(), spart->prevClone()->name().latin1(), spart->prevClone()); + //printf("PartCanvas::itemPopup: #2 dpart %s %p next:%s %p prev:%s %p\n", dpart->name().latin1(), dpart, dpart->nextClone()->name().latin1(), dpart->nextClone(), dpart->prevClone()->name().latin1(), dpart->prevClone()); + + song->endUndo(SC_PART_MODIFIED); + break; // Has to be break here, right? + } + case 16: // Export to file + { + const Part* part = item->part(); + bool popenFlag = false; + //QString fn = getSaveFileName(QString(""), part_file_pattern, this, tr("MusE: save part")); + QString fn = getSaveFileName(QString(""), part_file_save_pattern, this, tr("MusE: save part")); + if (!fn.isEmpty()) { + FILE* fp = fileOpen(this, fn, ".mpt", "w", popenFlag, false, false); + if (fp) { + Xml tmpXml = Xml(fp); + //part->write(0, tmpXml); + // Write the part. Indicate that it's a copy operation - to add special markers, + // and force full wave paths. + part->write(0, tmpXml, true, true); + fclose(fp); + } + } + break; + } + + case 17: // File info + { + Part* p = item->part(); + EventList* el = p->events(); + QString str = tr("Part name") + ": " + p->name() + "\n" + tr("Files") + ":"; + for (iEvent e = el->begin(); e != el->end(); ++e) + { + Event event = e->second; + SndFileR f = event.sndFile(); + if (f.isNull()) + continue; + //str.append("\n" + f.path()); + str.append(QString("\n@") + QString().setNum(event.tick()) + QString(" len:") + + QString().setNum(event.lenTick()) + QString(" ") + f.path()); + } + QMessageBox::information(this, "File info", str, "Ok", 0); + break; + } + case 18: // Select clones + { + Part* part = item->part(); + + // Traverse and process the clone chain ring until we arrive at the same part again. + // The loop is a safety net. + Part* p = part; + int j = part->cevents()->arefCount(); + if(j > 0) + { + for(int i = 0; i < j; ++i) + { + // Added by Tim. p3.3.6 + //printf("PartCanvas::itemPopup i:%d %s %p events %p refs:%d arefs:%d\n", i, p->name().latin1(), p, part->cevents(), part->cevents()->refCount(), j); + + p->setSelected(true); + p = p->nextClone(); + if(p == part) + break; + } + //song->update(); + song->update(SC_SELECTION); + } + + break; + } + case 20 ... NUM_PARTCOLORS+20: + { + curColorIndex = n - 20; + bool selfound = false; + //Loop through all parts and set color on selected: + for (iCItem i = items.begin(); i != items.end(); i++) { + if (i->second->isSelected()) { + selfound = true; + i->second->part()->setColorIndex(curColorIndex); + } + } + + // If no items selected, use the one clicked on. + if(!selfound) + item->part()->setColorIndex(curColorIndex); + + redraw(); + break; + } + default: + printf("unknown action %d\n", n); + break; + } + delete pl; + } + +//--------------------------------------------------------- +// viewMousePressEvent +//--------------------------------------------------------- + +void PartCanvas::mousePress(QMouseEvent* event) + { + if (event->state() & Qt::ShiftButton) { + return; + } + QPoint pt = event->pos(); + CItem* item = items.find(pt); + if (item == 0) + return; + switch (_tool) { + default: + emit trackChanged(item->part()->track()); + break; + case CutTool: + splitItem(item, pt); + break; + case GlueTool: + glueItem(item); + break; + case MuteTool: + { + NPart* np = (NPart*) item; + Part* p = np->part(); + p->setMute(!p->mute()); + redraw(); + break; + } + } + } + +//--------------------------------------------------------- +// viewMouseReleaseEvent +//--------------------------------------------------------- + +void PartCanvas::mouseRelease(const QPoint&) + { + } + +//--------------------------------------------------------- +// viewMouseMoveEvent +//--------------------------------------------------------- + +void PartCanvas::mouseMove(const QPoint& pos) + { + int x = pos.x(); + if (x < 0) + x = 0; + emit timeChanged(sigmap.raster(x, *_raster)); + } + +//--------------------------------------------------------- +// y2Track +//--------------------------------------------------------- + +Track* PartCanvas::y2Track(int y) const + { + TrackList* l = song->tracks(); + int ty = 0; + for (iTrack it = l->begin(); it != l->end(); ++it) { + int h = (*it)->height(); + if (y >= ty && y < ty + h) + return *it; + ty += h; + } + return 0; + } + +//--------------------------------------------------------- +// keyPress +//--------------------------------------------------------- + +void PartCanvas::keyPress(QKeyEvent* event) + { + int key = event->key(); + if (editMode) { + returnPressed(); + return; + } + + if (event->state() & Qt::ShiftButton) + key += Qt::SHIFT; + if (event->state() & Qt::AltButton) + key += Qt::ALT; + if (event->state() & Qt::ControlButton) + key += Qt::CTRL; + + if (key == shortcuts[SHRT_DELETE].key) { + if (getCurrentDrag()) { + //printf("dragging!!\n"); + return; + } + + song->startUndo(); + song->msgRemoveParts(); + song->endUndo(SC_PART_REMOVED); + return; + } + else if (key == shortcuts[SHRT_POS_DEC].key) { + int frames = pos[0] - sigmap.rasterStep(pos[0], *_raster); + if (frames < 0) + frames = 0; + Pos p(frames,true); + song->setPos(0, p, true, true, true); + return; + } + else if (key == shortcuts[SHRT_POS_INC].key) { + Pos p(pos[0] + sigmap.rasterStep(pos[0], *_raster), true); + song->setPos(0, p, true, true, true); //CDW + return; + } + else if (key == shortcuts[SHRT_TOOL_POINTER].key) { + emit setUsedTool(PointerTool); + return; + } + else if (key == shortcuts[SHRT_TOOL_PENCIL].key) { + emit setUsedTool(PencilTool); + return; + } + else if (key == shortcuts[SHRT_TOOL_RUBBER].key) { + emit setUsedTool(RubberTool); + return; + } + else if (key == shortcuts[SHRT_TOOL_SCISSORS].key) { + emit setUsedTool(CutTool); + return; + } + else if (key == shortcuts[SHRT_TOOL_GLUE].key) { + emit setUsedTool(GlueTool); + return; + } + else if (key == shortcuts[SHRT_TOOL_MUTE].key) { + emit setUsedTool(MuteTool); + return; + } + else if (key == shortcuts[SHRT_SEL_TRACK_ABOVE].key) { + emit selectTrackAbove(); + return; + } + else if (key == shortcuts[SHRT_SEL_TRACK_BELOW].key) { + emit selectTrackBelow(); + return; + } + + // + // Shortcuts that require selected parts from here + // + if (!curItem) { + if (items.size()==0) { + return; + } + for (iCItem i = items.begin(); i != items.end(); ++i) { + NPart* part = (NPart*)(i->second); + if (part->isSelected()) { + curItem=part; + break; + } + } + if (!curItem) + curItem = (NPart*)items.begin()->second; // just grab the first part + } + + CItem* newItem = 0; + bool singleSelection = isSingleSelection(); + bool add = false; + //Locators to selection + if (key == shortcuts[SHRT_LOCATORS_TO_SELECTION].key) { + CItem *leftmost = 0, *rightmost = 0; + for (iCItem i = items.begin(); i != items.end(); i++) { + if (i->second->isSelected()) { + // Check leftmost: + if (!leftmost) + leftmost = i->second; + else + if (leftmost->x() > i->second->x()) + leftmost = i->second; + + // Check rightmost: + if (!rightmost) + rightmost = i->second; + else + if (rightmost->x() < i->second->x()) + rightmost = i->second; + } + } + + int left_tick = leftmost->part()->tick(); + int right_tick = rightmost->part()->tick() + rightmost->part()->lenTick(); + Pos p1(left_tick, true); + Pos p2(right_tick, true); + song->setPos(1, p1); + song->setPos(2, p2); + return; + } + + // Select part to the right + else if (key == shortcuts[SHRT_SEL_RIGHT].key || key == shortcuts[SHRT_SEL_RIGHT_ADD].key) { + if (key == shortcuts[SHRT_SEL_RIGHT_ADD].key) + add = true; + + Part* part = curItem->part(); + Track* track = part->track(); + unsigned int tick = part->tick(); + bool afterthis = false; + for (iCItem i = items.begin(); i != items.end(); ++i) { + NPart* npart = (NPart*)(i->second); + Part* ipart = npart->part(); + if (ipart->track() != track) + continue; + if (ipart->tick() < tick) + continue; + if (ipart == part) + { + afterthis = true; + continue; + } + if(afterthis) + { + newItem = i->second; + break; + } + } + } + // Select part to the left + else if (key == shortcuts[SHRT_SEL_LEFT].key || key == shortcuts[SHRT_SEL_LEFT_ADD].key) { + if (key == shortcuts[SHRT_SEL_LEFT_ADD].key) + add = true; + + Part* part = curItem->part(); + Track* track = part->track(); + unsigned int tick = part->tick(); + + for (iCItem i = items.begin(); i != items.end(); ++i) { + NPart* npart = (NPart*)(i->second); + Part* ipart = npart->part(); + + if (ipart->track() != track) + continue; + if (ipart->tick() > tick) + continue; + if (ipart == part) + break; + newItem = i->second; + } + } + + // Select nearest part on track above + else if (key == shortcuts[SHRT_SEL_ABOVE].key || key == shortcuts[SHRT_SEL_ABOVE_ADD].key) { + if (key == shortcuts[SHRT_SEL_ABOVE_ADD].key) + add = true; + //To get an idea of which track is above us: + int stepsize = rmapxDev(1); + Track* track = curItem->part()->track();//top->part()->track(); + track = y2Track(track->y() - 1); + + //If we're at topmost, leave + if (!track) { + printf("no track above!\n"); + return; + } + int middle = curItem->x() + curItem->part()->lenTick()/2; + CItem *aboveL = 0, *aboveR = 0; + //Upper limit: song end, lower limit: song start + int ulimit = song->len(); + int llimit = 0; + + while (newItem == 0) { + int y = track->y() + 2; + int xoffset = 0; + int xleft = middle - xoffset; + int xright = middle + xoffset; + while ((xleft > llimit || xright < ulimit) && (aboveL == 0) && (aboveR == 0)) { + xoffset += stepsize; + xleft = middle - xoffset; + xright = middle + xoffset; + if (xleft >= 0) + aboveL = items.find(QPoint(xleft,y)); + if (xright <= ulimit) + aboveR = items.find(QPoint(xright,y)); + } + + if ((aboveL || aboveR) != 0) { //We've hit something + CItem* above = 0; + above = (aboveL !=0) ? aboveL : aboveR; + newItem = above; + } + else { //We didn't hit anything. Move to track above, if there is one + track = y2Track(track->y() - 1); + if (track == 0) + return; + } + } + emit trackChanged(track); + } + // Select nearest part on track below + else if (key == shortcuts[SHRT_SEL_BELOW].key || key == shortcuts[SHRT_SEL_BELOW_ADD].key) { + if (key == shortcuts[SHRT_SEL_BELOW_ADD].key) + add = true; + + //To get an idea of which track is below us: + int stepsize = rmapxDev(1); + Track* track = curItem->part()->track();//bottom->part()->track(); + track = y2Track(track->y() + track->height() + 1 ); + int middle = curItem->x() + curItem->part()->lenTick()/2; + //If we're at bottommost, leave + if (!track) + return; + + CItem *belowL = 0, *belowR = 0; + //Upper limit: song end , lower limit: song start + int ulimit = song->len(); + int llimit = 0; + while (newItem == 0) { + int y = track->y() + 1; + int xoffset = 0; + int xleft = middle - xoffset; + int xright = middle + xoffset; + while ((xleft > llimit || xright < ulimit) && (belowL == 0) && (belowR == 0)) { + xoffset += stepsize; + xleft = middle - xoffset; + xright = middle + xoffset; + if (xleft >= 0) + belowL = items.find(QPoint(xleft,y)); + if (xright <= ulimit) + belowR = items.find(QPoint(xright,y)); + } + + if ((belowL || belowR) != 0) { //We've hit something + CItem* below = 0; + below = (belowL !=0) ? belowL : belowR; + newItem = below; + } + else { + //Get next track below, or abort if this is the lowest + track = y2Track(track->y() + track->height() + 1 ); + if (track == 0) + return; + } + } + emit trackChanged(track); + } + else if (key == shortcuts[SHRT_EDIT_PART].key && curItem) { //This should be the other way around - singleSelection first. + if (!singleSelection) { + event->ignore(); + return; + } + PartList* pl = new PartList; + NPart* npart = (NPart*)(curItem); + Track* track = npart->part()->track(); + pl->add(npart->part()); + int type = 0; + + // Check if track is wave or drum, + // else track is midi + + switch (track->type()) { + case Track::DRUM: + type = 3; + break; + + case Track::WAVE: + type = 4; + break; + + case Track::MIDI: + case Track::AUDIO_OUTPUT: + case Track::AUDIO_INPUT: + case Track::AUDIO_GROUP: + case Track::AUDIO_AUX: + case Track::AUDIO_SOFTSYNTH: //TODO + break; + } + emit startEditor(pl, type); + } + else { + event->ignore(); // give global accelerators a chance + return; + } + + + // Check if anything happened to the selected parts + if (newItem) { + //If this is a single selection, toggle previous item + if (singleSelection && !add) + selectItem(curItem, false); + else if(!add) + deselectAll(); + + curItem = newItem; + selectItem(newItem, true); + + //Check if we've hit the upper or lower boundaries of the window. If so, set a new position + if (newItem->x() < mapxDev(0)) { + int curpos = pos[0]; + setPos(0,newItem->x(),true); + setPos(0,curpos,false); //Dummy to put the current position back once we've scrolled + } + else if (newItem->x() > mapxDev(width())) { + int curpos = pos[0]; + setPos(0,newItem->x(),true); + setPos(0,curpos,false); //Dummy to put the current position back once we've scrolled + } + redraw(); + } + } + +//--------------------------------------------------------- +// drawPart +// draws a part +//--------------------------------------------------------- + +void PartCanvas::drawItem(QPainter& p, const CItem* item, const QRect& rect) + { + int from = rect.x(); + int to = from + rect.width(); + + //printf("from %d to %d\n", from,to); + Part* part = ((NPart*)item)->part(); + int pTick = part->tick(); + from -= pTick; + to -= pTick; + if(from < 0) + from = 0; + if((unsigned int)to > part->lenTick()) + to = part->lenTick(); + + QRect r = item->bbox(); + //QRect r = item->bbox().intersect(rect); + int i = part->colorIndex(); + + //printf("part start tick %d part start pixel %d\n", part->tick(), r.x()); + + // Added by Tim. p3.3.6 + //printf("PartCanvas::drawItem %s evRefs:%d pTick:%d pLen:%d bb.x:%d bb.w:%d rect.x:%d rect.w:%d r.x:%d r.w:%d\n", part->name().latin1(), part->events()->arefCount(), pTick, part->lenTick(), item->bbox().x(), item->bbox().width(), rect.x(), rect.width(), r.x(), r.width()); + + // Must be reasonable about very low negative x values! With long songs > 15min + // and with high horizontal magnification, 'ghost' drawings appeared, + // apparently the result of truncation later (xp = -65006 caused ghosting + // at bar 245 with magnification at max.), even with correct clipping region + // applied to painter in View::paint(). Tim. Apr 5 2009 + // Quote: "Warning: Note that QPainter does not attempt to work around + // coordinate limitations in the underlying window system. Some platforms may + // behave incorrectly with coordinates as small as +/-4000." + //if(r.isEmpty()) + // return; + + p.setPen(Qt::black); + if (part->mute()) { + p.setBrush(Qt::gray); + p.drawRect(r); + return; + } + if (item->isMoving()) { + p.setBrush(Qt::gray); + p.drawRect(r); + } + //else if (part->mute()) + // return; + else if (part->selected()) { + bool clone = part->events()->arefCount() > 1; + //p.setPen(config.partColors[i]); + p.setPen(QPen(config.partColors[i], 2, clone ? Qt::DashLine : Qt::SolidLine)); + p.setBrush(Qt::black); + p.drawRect(r); + } + else { + bool clone = part->events()->arefCount() > 1; + p.setPen(QPen(Qt::black, 2, clone ? Qt::DashLine : Qt::SolidLine)); + p.setBrush(config.partColors[i]); + p.drawRect(r); + } + + MidiPart* mp = 0; + WavePart* wp = 0; + Track::TrackType type = part->track()->type(); + if (type == Track::WAVE) { + wp =(WavePart*)part; + } + else { + mp = (MidiPart*)part; + } + + if (config.canvasShowPartType & 2) { // show events + if (mp) + { + // Do not allow this, causes segfault. + if(from <= to) + { + p.setPen(Qt::darkGray); + EventList* events = mp->events(); + iEvent ito(events->lower_bound(to)); + + 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 = i->first + pTick; + int th = part->track()->height(); + if(t >= r.left() && t <= r.right()) + p.drawLine(t, r.y()+2, t, r.y()+th-4); + } + } + } + } + else if (wp) + drawWavePart(p, rect, wp, r); + } + + else { // show Cakewalk Style + if (mp) { + p.setPen(Qt::darkGray); + EventList* events = mp->events(); + iEvent ito(events->lower_bound(to)); + //printf("PartCanvas::drawItem pTick:%d from:%d to:%d part len:%d\n", pTick, from, to, part->lenTick()); + + for (iEvent i = events->begin(); i != ito; ++i) { + int t = i->first + pTick; + int te = t + i->second.lenTick(); + + if (t > (to + pTick)) + { + printf("PartCanvas::drawItem t:%d > to:%d + pTick:%d i->first:%d\n", t, to, pTick, i->first); + + break; + } + + if (te < (from + pTick)) + continue; + + if (te > (to + pTick)) + te = to + pTick; + + EventType type = i->second.type(); + if (type == Note) { + int pitch = i->second.pitch(); + int th = int(part->track()->height() * 0.75); // only draw on three quarters + int hoffset = (part->track()->height() - th ) / 2; // offset from bottom + int y = hoffset + (r.y() + th - (pitch * (th) / 127)); + p.drawLine(t, y, te, y); + } + } + } + else if (wp) + drawWavePart(p, rect, wp, r); + } + if (config.canvasShowPartType & 1) { // show names + // draw name + // FN: Set text color depending on part color (black / white) + int part_r, part_g, part_b, brightness; + config.partColors[i].getRgb(&part_r, &part_g, &part_b); + brightness = part_r*29 + part_g*59 + part_b*12; + if (brightness < 12000 || part->selected()) + p.setPen(Qt::white); /* too dark: use white for text color */ + else + p.setPen(Qt::black); /* otherwise use black */ + QRect rr = map(r); + rr.setX(rr.x() + 3); + p.save(); + p.setFont(config.fonts[1]); + p.setWorldXForm(false); + p.drawText(rr, Qt::AlignVCenter|Qt::AlignLeft, part->name()); + p.restore(); + } + } + +//--------------------------------------------------------- +// drawMoving +// draws moving items +//--------------------------------------------------------- + +void PartCanvas::drawMoving(QPainter& p, const CItem* item, const QRect&) + { + //if(!item->isMoving()) + // return; + p.setPen( Qt::black); + p.setBrush( Qt::NoBrush); + p.drawRect(item->mp().x(), item->mp().y()+1, item->width(), item->height()); + } + +//--------------------------------------------------------- +// drawWavePart +// bb - bounding box of paint area +// pr - part rectangle +//--------------------------------------------------------- + +void PartCanvas::drawWavePart(QPainter& p, + const QRect& bb, WavePart* wp, const QRect& _pr) + { + QRect rr = p.worldMatrix().map(bb); + QRect pr = p.worldMatrix().map(_pr); + + p.save(); + p.resetXForm(); + + int x2 = 1; + int x1 = rr.x() > pr.x() ? rr.x() : pr.x(); + x2 += rr.right() < pr.right() ? rr.right() : pr.right(); + + if (x1 < 0) + x1 = 0; + if (x2 > width()) + x2 = width(); + int hh = pr.height(); + int h = hh/2; + int y = pr.y() + h; + + EventList* el = wp->events(); + for (iEvent e = el->begin(); e != el->end(); ++e) { + int cc = hh % 2 ? 0 : 1; + 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.name().latin1()); + continue; + } + + int xScale; + int pos; + int tickstep = rmapxDev(1); + int postick = tempomap.frame2tick(wp->frame() + event.frame()); + int eventx = mapx(postick); + int drawoffset; + if((x1 - eventx) < 0) + drawoffset = 0; + else + drawoffset = rmapxDev(x1 - eventx); + postick += drawoffset; + pos = event.spos() + tempomap.tick2frame(postick) - wp->frame() - event.frame(); + + int i; + if(x1 < eventx) + i = eventx; + else + i = x1; + int ex = mapx(tempomap.frame2tick(wp->frame() + event.frame() + event.lenFrame())); + if(ex > x2) + ex = x2; + if (h < 20) { + // + // combine multi channels into one waveform + // + for (; i < ex; i++) { + SampleV sa[channels]; + xScale = tempomap.deltaTick2frame(postick, postick + tickstep); + f.read(sa, xScale, pos); + postick += tickstep; + pos += 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 * (hh-2)) >> 9; + rms = (rms * (hh-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 + // + int hm = hh / (channels * 2); + int cc = hh % (channels * 2) ? 0 : 1; + for (; i < ex; i++) { + y = pr.y() + hm; + SampleV sa[channels]; + xScale = tempomap.deltaTick2frame(postick, postick + tickstep); + f.read(sa, xScale, pos); + postick += tickstep; + pos += xScale; + for (unsigned k = 0; k < channels; ++k) { + int peak = (sa[k].peak * (hm - 1)) >> 8; + int rms = (sa[k].rms * (hm - 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 * hm; + } + } + } + } + p.restore(); + } +//--------------------------------------------------------- +// cmd +//--------------------------------------------------------- + +void PartCanvas::cmd(int cmd) + { + PartList pl; + for (iCItem i = items.begin(); i != items.end(); ++i) { + if (!i->second->isSelected()) + continue; + NPart* npart = (NPart*)(i->second); + pl.add(npart->part()); + } + switch (cmd) { + case CMD_CUT_PART: + copy(&pl); + song->startUndo(); + + bool loop; + do + { + loop = false; + for (iCItem i = items.begin(); i != items.end(); ++i) { + if (!i->second->isSelected()) + continue; + NPart* p = (NPart*)(i->second); + Part* part = p->part(); + audio->msgRemovePart(part); + + loop = true; + break; + } + } while (loop); + song->endUndo(SC_PART_REMOVED); + break; + case CMD_COPY_PART: + copy(&pl); + break; + case CMD_PASTE_PART: + paste(false, false); + break; + case CMD_PASTE_CLONE_PART: + paste(true, false); + break; + case CMD_PASTE_PART_TO_TRACK: + paste(); + break; + case CMD_PASTE_CLONE_PART_TO_TRACK: + paste(true); + break; + case CMD_INSERT_PART: + paste(false, false, true); + break; + case CMD_INSERT_EMPTYMEAS: + song->startUndo(); + int startPos=song->vcpos(); + int oneMeas=sigmap.ticksMeasure(startPos); + movePartsTotheRight(startPos,oneMeas); + song->endUndo(SC_PART_INSERTED); + break; + } + } + +//--------------------------------------------------------- +// copy +// cut copy paste +//--------------------------------------------------------- + +void PartCanvas::copy(PartList* pl) + { + //printf("void PartCanvas::copy(PartList* pl)\n"); + if (pl->empty()) + return; + // Changed by T356. Support mixed .mpt files. + //bool isWave = pl->begin()->second->track()->type() == Track::WAVE; + bool wave = false; + bool midi = false; + for(ciPart p = pl->begin(); p != pl->end(); ++p) + { + if(p->second->track()->isMidiTrack()) + midi = true; + else + if(p->second->track()->type() == Track::WAVE) + wave = true; + if(midi && wave) + break; + } + if(!(midi || wave)) + return; + + //--------------------------------------------------- + // write parts as XML into tmp file + //--------------------------------------------------- + + FILE* tmp = tmpfile(); + if (tmp == 0) { + fprintf(stderr, "PartCanvas::copy() fopen failed: %s\n", + strerror(errno)); + return; + } + Xml xml(tmp); + + // Clear the copy clone list. + cloneList.clear(); + //copyCloneList.clear(); + + int level = 0; + int tick = 0; + for (ciPart p = pl->begin(); p != pl->end(); ++p) { + // Indicate this is a copy operation. Also force full wave paths. + //p->second->write(level, xml); + p->second->write(level, xml, true, true); + + int endTick = p->second->endTick(); + if (endTick > tick) + tick = endTick; + } + Pos p(tick, true); + song->setPos(0, p); + + //--------------------------------------------------- + // read tmp file into QTextDrag Object + //--------------------------------------------------- + + fflush(tmp); + struct stat f_stat; + if (fstat(fileno(tmp), &f_stat) == -1) { + fprintf(stderr, "PartCanvas::copy() fstat failed:<%s>\n", + strerror(errno)); + fclose(tmp); + return; + } + int n = f_stat.st_size; + char* fbuf = (char*)mmap(0, n+1, PROT_READ|PROT_WRITE, + MAP_PRIVATE, fileno(tmp), 0); + fbuf[n] = 0; + Q3TextDrag* drag = new Q3TextDrag(QString(fbuf)); + // Changed by T356. Support mixed .mpt files. + //drag->setSubtype(QCString(isWave ? "wavepartlist" : "midipartlist")); + if(midi && wave) + drag->setSubtype(Q3CString("mixedpartlist")); + else + if(midi) + drag->setSubtype(Q3CString("midipartlist")); + else + if(wave) + drag->setSubtype(Q3CString("wavepartlist")); + + QApplication::clipboard()->setData(drag, QClipboard::Clipboard); + munmap(fbuf, n); + fclose(tmp); + } + +//--------------------------------------------------------- +// pasteAt +//--------------------------------------------------------- + +int PartCanvas::pasteAt(const QString& pt, Track* track, int pos, bool clone, bool toTrack) + { + //printf("int PartCanvas::pasteAt(const QString& pt, Track* track, int pos)\n"); + const char* ptxt = pt.latin1(); + Xml xml(ptxt); + bool firstPart=true; + int posOffset=0; + //int finalPos=0; + int finalPos = pos; + int notDone = 0; + int done = 0; + bool end = false; + + //song->startUndo(); + for (;;) { + Xml::Token token = xml.parse(); + const QString& tag = xml.s1(); + switch (token) { + case Xml::Error: + case Xml::End: + end = true; + break; + case Xml::TagStart: + if (tag == "part") { + /* + Part* p = 0; + if(clone) + { + if(!(p = readClone(xml, track, toTrack))) + break; + } + else + { + if (track->type() == Track::MIDI || track->type() == Track::DRUM) + p = new MidiPart((MidiTrack*)track); + else if (track->type() == Track::WAVE) + p = new WavePart((WaveTrack*)track); + else + break; + p->read(xml, 0, toTrack); + } + */ + + // Read the part. + Part* p = 0; + p = readXmlPart(xml, track, clone, toTrack); + // If it could not be created... + if(!p) + { + // Increment the number of parts not done and break. + ++notDone; + break; + } + + // Increment the number of parts done. + ++done; + + if (firstPart) { + firstPart=false; + posOffset=pos-p->tick(); + } + p->setTick(p->tick()+posOffset); + if (p->tick()+p->lenTick()>finalPos) { + finalPos=p->tick()+p->lenTick(); + } + //pos += p->lenTick(); + audio->msgAddPart(p,false); + } + else + xml.unknown("PartCanvas::pasteAt"); + break; + case Xml::TagEnd: + break; + default: + end = true; + break; + } + if(end) + break; + } + + //song->endUndo(SC_PART_INSERTED); + //return pos; + + if(notDone) + { + int tot = notDone + done; + QMessageBox::critical(this, QString("MusE"), + QString().setNum(notDone) + (tot > 1 ? (tr(" out of ") + QString().setNum(tot)) : QString("")) + + (tot > 1 ? tr(" parts") : tr(" part")) + + tr(" could not be pasted.\nLikely the selected track is the wrong type.")); + } + + return finalPos; + } + +/* +//--------------------------------------------------------- +// PartCanvas::readPart +//--------------------------------------------------------- + +Part* PartCanvas::readPart(Xml& xml, Track* track, bool doClone, bool toTrack) + { + int id = -1; + Part* npart = 0; + uuid_t uuid; + uuid_clear(uuid); + bool uuidvalid = false; + bool clone = true; + + for (;;) { + Xml::Token token = xml.parse(); + const QString& tag = xml.s1(); + switch (token) { + case Xml::Error: + case Xml::End: + return npart; + case Xml::TagStart: + // If the part has not been created yet... + if(!npart) + { + // Attribute section did not create a clone from any matching part. Create a non-clone part now. + if(!track) + { + xml.skip("part"); + return 0; + } + if (track->type() == Track::MIDI || track->type() == Track::DRUM) + npart = new MidiPart((MidiTrack*)track); + else if (track->type() == Track::WAVE) + npart = new WavePart((WaveTrack*)track); + else + { + xml.skip("part"); + return 0; + } + + // Signify a new non-clone part was created. + // Even if the original part was itself a clone, clear this because the + // attribute section did not create a clone from any matching part. + clone = false; + + // If an id or uuid was found, add the part to the clone list + // so that subsequent parts can look it up and clone from it... + if(id != -1) + { + ClonePart ncp(npart, id); + cloneList.push_back(ncp); + } + else + if(uuidvalid) + { + ClonePart ncp(npart); + // New ClonePart creates its own uuid, but we need to replace it. + uuid_copy(ncp.uuid, uuid); + cloneList.push_back(ncp); + } + } + + if (tag == "name") + npart->setName(xml.parse1()); + else if (tag == "poslen") { + ((PosLen*)npart)->read(xml, "poslen"); + } + else if (tag == "pos") { + Pos pos; + pos.read(xml, "pos"); // obsolete + npart->setTick(pos.tick()); + } + else if (tag == "len") { + Pos len; + len.read(xml, "len"); // obsolete + npart->setLenTick(len.tick()); + } + else if (tag == "selected") + npart->setSelected(xml.parseInt()); + else if (tag == "color") + npart->setColorIndex(xml.parseInt()); + else if (tag == "mute") + npart->setMute(xml.parseInt()); + else if (tag == "event") + { + // If a new non-clone part was created, accept the events... + if(!clone) + { + EventType type = Wave; + if(track->isMidiTrack()) + type = Note; + Event e(type); + e.read(xml); + // stored tickpos for event has absolute value. However internally + // tickpos is relative to start of part, we substract tick(). + // TODO: better handling for wave event + e.move( -npart->tick() ); + int tick = e.tick(); + + // Do not discard events belonging to clone parts, + // at least not yet. A later clone might have a longer, + // fully accommodating part length! + //if ((tick < 0) || (tick >= (int) lenTick())) { + //if ((tick < 0) || ( id == -1 && !clone && (tick >= (int)lenTick()) )) + // No way to tell at the moment whether there will be clones referencing this... + // No choice but to accept all events past 0. + if(tick < 0) + { + //printf("readClone: warning: event not in part: %d - %d -%d, discarded\n", + printf("readClone: warning: event at tick:%d not in part:%s, discarded\n", + tick, npart->name().latin1()); + } + else + { + npart->events()->add(e); + } + } + else + // ...Otherwise a clone was created, so we don't need the events. + xml.skip(tag); + } + else + xml.unknown("PartCanvas::readClone"); + break; + case Xml::Attribut: + if (tag == "cloneId") + { + id = xml.s2().toInt(); + if(id != -1) + { + for(iClone i = cloneList.begin(); i != cloneList.end(); ++i) + { + // Is a matching part found in the clone list? + if(i->id == id) + { + // If it's a regular paste (not paste clone), and the original part is + // not a clone, defer so that a new copy is created in TagStart above. + if(!doClone && i->cp->cevents()->arefCount() <= 1) + break; + + // This makes a clone, chains the part, and increases ref counts. + npart = track->newPart((Part*)i->cp, true); + break; + } + } + } + } + else if (tag == "uuid") + { + uuid_parse(xml.s2().latin1(), uuid); + if(!uuid_is_null(uuid)) + { + uuidvalid = true; + for(iClone i = cloneList.begin(); i != cloneList.end(); ++i) + { + // Is a matching part found in the clone list? + if(uuid_compare(uuid, i->uuid) == 0) + { + Track* cpt = i->cp->track(); + // If we want to paste to the given track... + if(toTrack) + { + // If the given track type is not the same as the part's + // original track type, we can't continue. Just return. + if(!track || cpt->type() != track->type()) + { + xml.skip("part"); + return 0; + } + } + else + // ...else we want to paste to the part's original track. + { + // Make sure the track exists (has not been deleted). + if((cpt->isMidiTrack() && song->midis()->find(cpt) != song->midis()->end()) || + (cpt->type() == Track::WAVE && song->waves()->find(cpt) != song->waves()->end())) + track = cpt; + else + // Track was not found. Try pasting to the given track, as above... + { + if(!track || cpt->type() != track->type()) + { + // No luck. Just return. + xml.skip("part"); + return 0; + } + } + } + + // If it's a regular paste (not paste clone), and the original part is + // not a clone, defer so that a new copy is created in TagStart above. + if(!doClone && i->cp->cevents()->arefCount() <= 1) + break; + + // This makes a clone, chains the part, and increases ref counts. + npart = track->newPart((Part*)i->cp, true); + break; + } + } + } + } + //else if(tag == "isclone") // Ignore + // clone = xml.s2().toInt(); + break; + case Xml::TagEnd: + if (tag == "part") + return npart; + default: + break; + } + } + return npart; +} +*/ + +/* +//--------------------------------------------------------- +// PartCanvas::readClone +//--------------------------------------------------------- + +Part* PartCanvas::readClone(Xml& xml, Track* track, bool toTrack) + { + int id = -1; + Part* npart = 0; + uuid_t uuid; + uuid_clear(uuid); + bool uuidvalid = false; + bool clone = true; + + for (;;) { + Xml::Token token = xml.parse(); + const QString& tag = xml.s1(); + switch (token) { + case Xml::Error: + case Xml::End: + return npart; + case Xml::TagStart: + // If the part has not been created yet... + if(!npart) + { + // Attribute section did not create a clone from any matching part. Create a non-clone part now. + if (track->type() == Track::MIDI || track->type() == Track::DRUM) + npart = new MidiPart((MidiTrack*)track); + else if (track->type() == Track::WAVE) + npart = new WavePart((WaveTrack*)track); + else + return 0; + + // Signify a new non-clone part was created. + // Even if the original part was itself a clone, clear this because the + // attribute section did not create a clone from any matching part. + clone = false; + + // If an id or uuid was found, add the part to the clone list + // so that subsequent parts can look it up and clone from it... + if(id != -1) + { + ClonePart ncp(npart, id); + cloneList.push_back(ncp); + } + else + if(uuidvalid) + { + ClonePart ncp(npart); + // New ClonePart creates its own uuid, but we need to replace it. + uuid_copy(ncp.uuid, uuid); + cloneList.push_back(ncp); + } + } + + if (tag == "name") + npart->setName(xml.parse1()); + else if (tag == "poslen") { + ((PosLen*)npart)->read(xml, "poslen"); + } + else if (tag == "pos") { + Pos pos; + pos.read(xml, "pos"); // obsolete + npart->setTick(pos.tick()); + } + else if (tag == "len") { + Pos len; + len.read(xml, "len"); // obsolete + npart->setLenTick(len.tick()); + } + else if (tag == "selected") + npart->setSelected(xml.parseInt()); + else if (tag == "color") + npart->setColorIndex(xml.parseInt()); + else if (tag == "mute") + npart->setMute(xml.parseInt()); + else if (tag == "event") + { + // If a new non-clone part was created, accept the events... + if(!clone) + { + EventType type = Wave; + if(track->isMidiTrack()) + type = Note; + Event e(type); + e.read(xml); + // stored tickpos for event has absolute value. However internally + // tickpos is relative to start of part, we substract tick(). + // TODO: better handling for wave event + e.move( -npart->tick() ); + int tick = e.tick(); + + // Do not discard events belonging to clone parts, + // at least not yet. A later clone might have a longer, + // fully accommodating part length! + //if ((tick < 0) || (tick >= (int) lenTick())) { + //if ((tick < 0) || ( id == -1 && !clone && (tick >= (int)lenTick()) )) + // No way to tell at the moment whether there will be clones referencing this... + // No choice but to accept all events past 0. + if(tick < 0) + { + //printf("readClone: warning: event not in part: %d - %d -%d, discarded\n", + printf("readClone: warning: event at tick:%d not in part:%s, discarded\n", + tick, npart->name().latin1()); + } + else + { + npart->events()->add(e); + } + } + else + // ...Otherwise a clone was created, so we don't need the events. + xml.skip(tag); + } + else + xml.unknown("PartCanvas::readClone"); + break; + case Xml::Attribut: + if (tag == "cloneId") + { + id = xml.s2().toInt(); + if(id != -1) + { + for(iClone i = cloneList.begin(); i != cloneList.end(); ++i) + { + // Is a matching part found in the clone list? + if(i->id == id) + { + // This makes a clone, chains the part, and increases ref counts. + npart = track->newPart((Part*)i->cp, true); + break; + } + } + } + } + else if (tag == "uuid") + { + uuid_parse(xml.s2().latin1(), uuid); + if(!uuid_is_null(uuid)) + { + uuidvalid = true; + for(iClone i = cloneList.begin(); i != cloneList.end(); ++i) + { + // Is a matching part found in the clone list? + if(uuid_compare(uuid, i->uuid) == 0) + { + // If we want to paste to the part's original track... + if(!toTrack) + { + // Make sure the track exists (has not been deleted). + if((i->cp->track()->isMidiTrack() && song->midis()->find(i->cp->track()) != song->midis()->end()) || + (i->cp->track()->type() == Track::WAVE && song->waves()->find(i->cp->track()) != song->waves()->end())) + track = i->cp->track(); + } + // This makes a clone, chains the part, and increases ref counts. + npart = track->newPart((Part*)i->cp, true); + break; + } + } + } + } + //else if(tag == "isclone") // Ignore + // clone = xml.s2().toInt(); + break; + case Xml::TagEnd: + if (tag == "part") + return npart; + default: + break; + } + } + return npart; +} +*/ + +//--------------------------------------------------------- +// paste +// paste part to current selected track at cpos +//--------------------------------------------------------- + +//void PartCanvas::paste() +void PartCanvas::paste(bool clone, bool toTrack, bool doInsert) +{ + Track* track = 0; + + if (doInsert) // logic depends on keeping track of newly selected tracks + deselectAll(); + + + // If we want to paste to a selected track... + if(toTrack) + { + TrackList* tl = song->tracks(); + for (iTrack i = tl->begin(); i != tl->end(); ++i) { + if ((*i)->selected()) { + if (track) { + QMessageBox::critical(this, QString("MusE"), + tr("Cannot paste: multiple tracks selected")); + return; + } + else + track = *i; + } + } + if (track == 0) { + QMessageBox::critical(this, QString("MusE"), + tr("Cannot paste: no track selected")); + return; + } + } + + QClipboard* cb = QApplication::clipboard(); + QMimeSource* ms = cb->data(QClipboard::Clipboard); + + bool midiPart = false; + bool wavePart = false; + + // If we want to paste to a selected track... + if(toTrack) + { + for (int i = 0; const char* format = ms->format(i); ++i) { + format = ms->format(i); + if (strcmp(format, "text/midipartlist") == 0) { + if (!track->isMidiTrack()) { + QMessageBox::critical(this, QString("MusE"), + tr("Can only paste to midi/drum track")); + return; + } + midiPart = true; + } + else if (strcmp(format, "text/wavepartlist") == 0) { + if (track->type() != Track::WAVE) { + QMessageBox::critical(this, QString("MusE"), + tr("Can only paste to wave track")); + return; + } + wavePart = true; + } + // Added by T356. Support mixed .mpt files. + else if (strcmp(format, "text/mixedpartlist") == 0) { + if (!track->isMidiTrack() && track->type() != Track::WAVE) { + QMessageBox::critical(this, QString("MusE"), + tr("Can only paste to midi or wave track")); + return; + } + midiPart = true; + wavePart = true; + } + } + + if (!(midiPart || wavePart)) { + QMessageBox::critical(this, QString("MusE"), + tr("Cannot paste: wrong data type")); + return; + } + } + + QString subtype = 0; + QString txt = cb->text(subtype); + int endPos=0; + int startPos=song->vcpos(); + if (!txt.isEmpty()) + { + song->startUndo(); + endPos=pasteAt(txt, track, startPos, clone, toTrack); + Pos p(endPos, true); + song->setPos(0, p); + if (!doInsert) + song->endUndo(SC_PART_INSERTED); + + } + + if (doInsert) { + int offset = endPos-startPos; + movePartsTotheRight(startPos, offset); + song->endUndo(SC_PART_INSERTED); + } + } + +//--------------------------------------------------------- +// movePartsToTheRight +//--------------------------------------------------------- +void PartCanvas::movePartsTotheRight(int startTicks, int length) +{ + // all parts that start after the pasted parts will be moved the entire length of the pasted parts + for (iCItem i = items.begin(); i != items.end(); ++i) { + if (!i->second->isSelected()) { + Part* part = i->second->part(); + if (part->tick() >= startTicks) { + //void Audio::msgChangePart(Part* oldPart, Part* newPart, bool doUndoFlag, bool doCtrls, bool doClones) + Part *newPart = part->clone(); + newPart->setTick(newPart->tick()+length); + if (part->track()->type() == Track::WAVE) { + audio->msgChangePart((WavePart*)part,(WavePart*)newPart,false,false,false); + } else { + audio->msgChangePart(part,newPart,false,false,false); + } + + } + } + } + // perhaps ask if markers should be moved? + MarkerList *markerlist = song->marker(); + for(iMarker i = markerlist->begin(); i != markerlist->end(); ++i) + { + Marker* m = &i->second; + if (m->tick() >= startTicks) { + Marker *oldMarker = new Marker(); + *oldMarker = *m; + m->setTick(m->tick()+length); + song->undoOp(UndoOp::ModifyMarker,oldMarker, m); + } + } +} +//--------------------------------------------------------- +// startDrag +//--------------------------------------------------------- + +void PartCanvas::startDrag(CItem* item, DragType t) + { + //printf("PartCanvas::startDrag(CItem* item, DragType t)\n"); + NPart* p = (NPart*)(item); + Part* part = p->part(); + + //--------------------------------------------------- + // write part as XML into tmp file + //--------------------------------------------------- + + FILE* tmp = tmpfile(); + if (tmp == 0) { + fprintf(stderr, "PartCanvas::startDrag() fopen failed: %s\n", + strerror(errno)); + return; + } + Xml xml(tmp); + int level = 0; + part->write(level, xml); + + //--------------------------------------------------- + // read tmp file into QTextDrag Object + //--------------------------------------------------- + + fflush(tmp); + struct stat f_stat; + if (fstat(fileno(tmp), &f_stat) == -1) { + fprintf(stderr, "PartCanvas::startDrag fstat failed:<%s>\n", + strerror(errno)); + fclose(tmp); + return; + } + int n = f_stat.st_size + 1; + char* fbuf = (char*)mmap(0, n, PROT_READ|PROT_WRITE, + MAP_PRIVATE, fileno(tmp), 0); + fbuf[n] = 0; + Q3TextDrag* drag = new Q3TextDrag(QString(fbuf), this); + drag->setSubtype("partlist"); + if (t == MOVE_COPY || t == MOVE_CLONE) + drag->dragCopy(); + else + drag->dragMove(); + munmap(fbuf, n); + fclose(tmp); + } + +//--------------------------------------------------------- +// dragEnterEvent +//--------------------------------------------------------- + +void PartCanvas::dragEnterEvent(QDragEnterEvent* event) + { + event->accept(Q3TextDrag::canDecode(event)); + } + +//--------------------------------------------------------- +// dragMoveEvent +//--------------------------------------------------------- + +void PartCanvas::dragMoveEvent(QDragMoveEvent*) + { +// printf("drag move %x\n", this); + } + +//--------------------------------------------------------- +// dragLeaveEvent +//--------------------------------------------------------- + +void PartCanvas::dragLeaveEvent(QDragLeaveEvent*) + { +// printf("drag leave\n"); + } + +//--------------------------------------------------------- +// dropEvent +//--------------------------------------------------------- + +void PartCanvas::viewDropEvent(QDropEvent* event) + { + //printf("void PartCanvas::viewDropEvent(QDropEvent* event)\n"); + if (event->source() == this) { + printf("no local DROP\n"); + return; + } + int type = 0; // 0 = unknown, 1 = partlist, 2 = uri-list + QString text; + for (int i = 0; ; ++i) { + const char* p= event->format(i); + if (p == 0) + break; + if (strncmp(p, "text/partlist", 13) == 0) { + type = 1; + break; + } + else if (strcmp(p, "text/uri-list") == 0) { + type = 2; + break; + } + else { + if (debugMsg) + printf("unknown drop format <%s>\n", p); + } + } + if (type == 0) + return; + + // Make a backup of the current clone list, to retain any 'copy' items, + // so that pasting works properly after. + CloneList copyCloneList = cloneList; + // Clear the clone list to prevent any dangerous associations with + // current non-original parts. + cloneList.clear(); + + if (Q3TextDrag::decode(event, text)) { + if (type == 1) { + int x = sigmap.raster(event->pos().x(), *_raster); + if (x < 0) + x = 0; + unsigned trackNo = y2pitch(event->pos().y()); + Track* track = 0; + if (trackNo < tracks->size()) + track = tracks->index(trackNo); + if (track) { + song->startUndo(); + pasteAt(text, track, x); + song->endUndo(SC_PART_INSERTED); + } + } + else if (type == 2) { + text = text.stripWhiteSpace(); + if (text.endsWith(".wav",false) || text.endsWith(".ogg",false) || text.endsWith(".mpt", false) ) + { + int x = sigmap.raster(event->pos().x(), *_raster); + if (x < 0) + x = 0; + unsigned trackNo = y2pitch(event->pos().y()); + Track* track = 0; + if (trackNo < tracks->size()) + track = tracks->index(trackNo); + if (track) + { + Q3Url url(text); + QString newPath = url.path(); + if (track->type() == Track::WAVE && (text.endsWith(".wav", false) || (text.endsWith(".ogg", false)))) + { + unsigned tick = x; + muse->importWaveToTrack(newPath, tick, track); + } + // Changed by T356. Support mixed .mpt files. + //else if ((track->type() == Track::MIDI || track->type() == Track::DRUM) && text.endsWith(".mpt", false)) + else if ((track->isMidiTrack() || track->type() == Track::WAVE) && text.endsWith(".mpt", false)) + { + unsigned tick = x; + muse->importPartToTrack(newPath, tick, track); + } + } + } + else if(text.endsWith(".med",false)) + { + Q3Url url(text); + emit dropSongFile(url.path()); + } + else if(text.endsWith(".mid",false)) + { + Q3Url url(text); + emit dropMidiFile(url.path()); + } + else + { + printf("dropped... something... no hable...\n"); + } + } + } + // Restore backup of the clone list, to retain any 'copy' items, + // so that pasting works properly after. + cloneList.clear(); + cloneList = copyCloneList; + } + +//--------------------------------------------------------- +// drawCanvas +//--------------------------------------------------------- + +void PartCanvas::drawCanvas(QPainter& p, const QRect& rect) +{ + int x = rect.x(); + int y = rect.y(); + int w = rect.width(); + int h = rect.height(); + + ////////// + // GRID // + ////////// + QColor baseColor(config.partCanvasBg.light(104)); + p.setPen(baseColor); + + //-------------------------------- + // vertical lines + //------------------------------- + //printf("raster=%d\n", *_raster); + if (config.canvasShowGrid) { + int bar, beat; + unsigned tick; + + sigmap.tickValues(x, &bar, &beat, &tick); + for (;;) { + int xt = sigmap.bar2tick(bar++, 0, 0); + if (xt >= x + w) + break; + if (!((bar-1) % 4)) + p.setPen(baseColor.dark(115)); + else + p.setPen(baseColor); + p.drawLine(xt, y, xt, y+h); + + // append + int noDivisors=0; + if (*_raster == config.division *2) // 1/2 + noDivisors=2; + else if (*_raster== config.division) // 1/4 + noDivisors=4; + else if (*_raster==config.division/2) // 1/8 + noDivisors=8; + else if (*_raster==config.division/4) // 1/16 + noDivisors=16; + else if (*_raster==config.division/8) // 1/16 + noDivisors=32; + else if (*_raster==config.division/16) // 1/16 + noDivisors=64; + + int r = *_raster; + int rr = rmapx(r); + if (*_raster > 1) { + while (rr < 4) { + r *= 2; + rr = rmapx(r); + noDivisors=noDivisors/2; + } + p.setPen(baseColor); + for (int t=1;t< noDivisors;t++) + p.drawLine(xt+r*t, y, xt+r*t, y+h); + } + } + } + //-------------------------------- + // horizontal lines + //-------------------------------- + + TrackList* tl = song->tracks(); + int yy = 0; + for (iTrack it = tl->begin(); it != tl->end(); ++it) { + if (yy > y + h) + break; + Track* track = *it; + if (/*config.canvasShowGrid ||*/ !track->isMidiTrack()) { + p.setPen(baseColor.dark(130)); + p.drawLine(x, yy, x + w, yy); + p.setPen(baseColor); + } + if (!track->isMidiTrack() && (track->type() != Track::WAVE)) { + QRect r = rect & QRect(x, yy, w, track->height()); + drawAudioTrack(p, r, (AudioTrack*)track); + p.setPen(baseColor); + } + if (!track->isMidiTrack()) { // draw automation + QRect r = rect & QRect(x, yy, w, track->height()); + drawAutomation(p, r, (AudioTrack*)track); + p.setPen(baseColor); + + } + yy += track->height(); + } +} + +//--------------------------------------------------------- +// drawAudioTrack +//--------------------------------------------------------- + +void PartCanvas::drawAudioTrack(QPainter& p, const QRect& r, AudioTrack *t) +{ + p.setPen(QPen(Qt::black, 2, Qt::SolidLine)); + p.setBrush(Qt::gray); + p.drawRect(r); +} + +//--------------------------------------------------------- +// drawAutomation +//--------------------------------------------------------- + +void PartCanvas::drawAutomation(QPainter& p, const QRect& r, AudioTrack *t) +{ +// printf("drawAudioTrack %d x %d y %d w %d h %d\n",t, r.x(), r.y(), r.width(), r.height()); + //int v2=r.x()+r.width(); + //printf("v2=%d mapx=%d rmapx=%d mapxdev=%d rmapxdev=%d\n",v2, mapx(v2),rmapx(v2),mapxDev(v2),rmapxDev(v2)); + return; + + p.setPen(QPen(Qt::black, 2, Qt::SolidLine)); + int height=r.bottom()-r.top()-4; // limit height + + CtrlListList* cll = t->controller(); + QColor cols[10]; + cols[0]=Qt::white; + cols[1]=Qt::red; + cols[2]=Qt::yellow; + cols[3]=Qt::black; + cols[4]=Qt::blue; + int colIndex=0; + bool firstRun=true; + for(CtrlListList::iterator icll =cll->begin();icll!=cll->end();++icll) + { + //iCtrlList *icl = icll->second; + CtrlList *cl = icll->second; + double prevVal; + iCtrl ic=cl->begin(); + p.setPen(QPen(cols[colIndex++],1,Qt::SolidLine)); + + if (ic!=cl->end()) { // if there are no automation values we don't draw at all + CtrlVal cvFirst = ic->second; + ic++; + int prevPos=cvFirst.frame; + prevVal = cvFirst.val; + if (cl->id() == AC_VOLUME ) { // use db scale for volume + prevVal = (20.0*log10(cvFirst.val)+60) / 70.0; // represent volume between 0 and 1 + if (prevVal < 0) prevVal = 0.0; + } + else { + // we need to set curVal between 0 and 1 + double min, max; + cl->range(&min,&max); + prevVal = (prevVal- min)/(max-min); + } + for (; ic !=cl->end(); ++ic) + { + CtrlVal cv = ic->second; + double nextVal = cv.val; // was curVal + if (cl->id() == AC_VOLUME ) { // use db scale for volume + nextVal = (20.0*log10(cv.val)+60) / 70.0; // represent volume between 0 and 1 + if (nextVal < 0) nextVal = 0.0; + } + else { + // we need to set curVal between 0 and 1 + double min, max; + cl->range(&min,&max); + nextVal = (nextVal- min)/(max-min); + } + //printf("volume automation event %d %f %f %d\n",cv.frame,cv.val, tempomap.frame2tick(cv.frame)); + //p.drawLine(r.x(),(r.bottom()-2)-lastVal*height,r.x()+r.width(),(r.bottom()-2)-curVal*height); // debuggingtest + int leftX=tempomap.frame2tick(prevPos); + if (firstRun && leftX>r.x()) { + printf("first run\n"); + leftX=r.x(); + } + + printf("inner draw\n"); + p.drawLine(leftX,(r.bottom()-2)-prevVal*height,tempomap.frame2tick(cv.frame),(r.bottom()-2)-prevVal*height); + firstRun=false; + //printf("draw line: %d %f %d %f\n",tempomap.frame2tick(lastPos),r.bottom()-lastVal*height,tempomap.frame2tick(cv.frame),r.bottom()-curVal*height); + prevPos=cv.frame; + prevVal=nextVal; + } + printf("outer draw %f\n", cvFirst.val); + p.drawLine(tempomap.frame2tick(prevPos),(r.bottom()-2)-prevVal*height,tempomap.frame2tick(prevPos)+r.width(),(r.bottom()-2)-prevVal*height); + //printf("draw last line: %d %f %d %f\n",tempomap.frame2tick(lastPos),r.bottom()-lastVal*height,150000,r.bottom()-lastVal*height); + } +// if (height >100) { +// p.drawText(tempomap.frame2tick(0)+1000,40,"FOOO"); +// printf("drawText %s\n", cl->name().latin1()); +// } + } +} + + +void PartCanvas::controllerChanged(Track *t) +{ + redraw(); +} diff --git a/muse2/muse/arranger/pcanvas.h b/muse2/muse/arranger/pcanvas.h new file mode 100644 index 00000000..b8f133fe --- /dev/null +++ b/muse2/muse/arranger/pcanvas.h @@ -0,0 +1,139 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: pcanvas.h,v 1.11.2.4 2009/05/24 21:43:44 terminator356 Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __PCANVAS_H__ +#define __PCANVAS_H__ + +#include "song.h" +#include "canvas.h" +#include "trackautomationview.h" +//Added by qt3to4: +#include +#include +#include +#include +#include +#include +#include +#include +#define beats 4 + +//--------------------------------------------------------- +// NPart +// ''visual'' Part +// wraps Parts with additional information needed +// for displaying +//--------------------------------------------------------- + +class NPart : public CItem { + public: + NPart(Part* e); + const QString name() const { return part()->name(); } + void setName(const QString& s) { part()->setName(s); } + Track* track() const { return part()->track(); } + }; + +class QLineEdit; +class MidiEditor; +class Q3PopupMenu; +class Xml; + +//--------------------------------------------------------- +// PartCanvas +//--------------------------------------------------------- + +class PartCanvas : public Canvas { + int* _raster; + TrackList* tracks; + + Part* resizePart; + QLineEdit* lineEditor; + NPart* editPart; + int curColorIndex; + bool editMode; + + std::vector automationViews; + Q_OBJECT + virtual void keyPress(QKeyEvent*); + virtual void mousePress(QMouseEvent*); + virtual void mouseMove(const QPoint&); + virtual void mouseRelease(const QPoint&); + virtual void viewMouseDoubleClickEvent(QMouseEvent*); + virtual void leaveEvent(QEvent*e); + virtual void drawItem(QPainter&, const CItem*, const QRect&); + virtual void drawMoving(QPainter&, const CItem*, const QRect&); + virtual void updateSelection(); + virtual QPoint raster(const QPoint&) const; + virtual int y2pitch(int y) const; + virtual int pitch2y(int p) const; + + virtual void moveCanvasItems(CItemList&, int, int, DragType, int*); + // Changed by T356. + //virtual bool moveItem(CItem*, const QPoint&, DragType, int*); + virtual bool moveItem(CItem*, const QPoint&, DragType); + virtual CItem* newItem(const QPoint&, int); + virtual void resizeItem(CItem*,bool); + virtual void newItem(CItem*,bool); + virtual bool deleteItem(CItem*); + virtual void startUndo(DragType); + + virtual void endUndo(DragType, int); + virtual void startDrag(CItem*, DragType); + virtual void dragEnterEvent(QDragEnterEvent*); + virtual void dragMoveEvent(QDragMoveEvent*); + virtual void dragLeaveEvent(QDragLeaveEvent*); + virtual void viewDropEvent(QDropEvent*); + + virtual Q3PopupMenu* genItemPopup(CItem*); + virtual void itemPopup(CItem*, int, const QPoint&); + + void glueItem(CItem* item); + void splitItem(CItem* item, const QPoint&); + + void copy(PartList*); + void paste(bool clone = false, bool toTrack = true, bool doInsert=false); + int pasteAt(const QString&, Track*, int, bool clone = false, bool toTrack = true); + void movePartsTotheRight(int startTick, int length); + //Part* readClone(Xml&, Track*, bool toTrack = true); + void drawWavePart(QPainter&, const QRect&, WavePart*, const QRect&); + Track* y2Track(int) const; + void drawAudioTrack(QPainter& p, const QRect& r, AudioTrack* track); + void drawAutomation(QPainter& p, const QRect& r, AudioTrack* track); + + + protected: + virtual void drawCanvas(QPainter&, const QRect&); + + signals: + void timeChanged(unsigned); + void tracklistChanged(); + void dclickPart(Track*); + void selectionChanged(); + void dropSongFile(const QString&); + void dropMidiFile(const QString&); + void setUsedTool(int); + void trackChanged(Track*); + void selectTrackAbove(); + void selectTrackBelow(); + + void startEditor(PartList*, int); + + private slots: + void returnPressed(); + + public: + enum { CMD_CUT_PART, CMD_COPY_PART, CMD_PASTE_PART, CMD_PASTE_CLONE_PART, CMD_PASTE_PART_TO_TRACK, CMD_PASTE_CLONE_PART_TO_TRACK, + CMD_INSERT_PART, CMD_INSERT_EMPTYMEAS }; + + PartCanvas(int* raster, QWidget* parent, int, int); + void partsChanged(); + void cmd(int); + void controllerChanged(Track *t); + public slots: + void redirKeypress(QKeyEvent* e) { keyPress(e); } + }; +#endif diff --git a/muse2/muse/arranger/tlist.cpp b/muse2/muse/arranger/tlist.cpp new file mode 100644 index 00000000..618dc2e6 --- /dev/null +++ b/muse2/muse/arranger/tlist.cpp @@ -0,0 +1,1555 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: tlist.cpp,v 1.31.2.31 2009/12/15 03:39:58 terminator356 Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +//#include "config.h" + +#include + +#include +#include +#include +#include +#include +#include +#include +//Added by qt3to4: +#include +#include +#include +#include +#include +#include + +#include "globals.h" +#include "icons.h" +#include "scrollscale.h" +#include "tlist.h" +#include "xml.h" +#include "mididev.h" +#include "midiport.h" +#include "midiseq.h" +#include "comment.h" +#include "track.h" +#include "song.h" +#include "header.h" +#include "node.h" +#include "audio.h" +#include "instruments/minstrument.h" +#include "app.h" +#include "gconfig.h" +#include "event.h" +#include "midiedit/drummap.h" +#include "synth.h" +#include "config.h" + +#ifdef DSSI_SUPPORT +#include "dssihost.h" +#endif + +extern Q3PopupMenu* populateAddSynth(QWidget* parent, QObject* obj = 0, const char* slot = 0); + +static const int MIN_TRACKHEIGHT = 20; +static const int WHEEL_DELTA = 120; + +//--------------------------------------------------------- +// THeaderTip::maybeTip +//--------------------------------------------------------- + +void THeaderTip::maybeTip(const QPoint &pos) + { +#if 0 //ddskrjo + Header* w = (Header*)parentWidget(); + int section = w->sectionAt(pos.x()); + if (section == -1) + return; + QRect r(w->sectionPos(section), 0, w->sectionSize(section), + w->height()); + QString p; + switch (section) { + case COL_RECORD: p = Q3Header::tr("Enable Recording"); break; + case COL_MUTE: p = Q3Header::tr("Mute/Off Indicator"); break; + case COL_SOLO: p = Q3Header::tr("Solo Indicator"); break; + case COL_CLASS: p = Q3Header::tr("Track Type"); break; + case COL_NAME: p = Q3Header::tr("Track Name"); break; + case COL_OCHANNEL: p = Q3Header::tr("Midi output channel number or audio channels"); break; + //case COL_OPORT: p = QHeader::tr("Output Port"); break; + case COL_OPORT: p = Q3Header::tr("Midi output port or synth midi port"); break; + case COL_TIMELOCK: p = Q3Header::tr("Time Lock"); break; +// case COL_AUTOMATION: p = QHeader::tr("Automation parameter selection"); break; + default: return; + } + tip(r, p); +#endif + } + +//--------------------------------------------------------- +// TList +//--------------------------------------------------------- + +TList::TList(Header* hdr, QWidget* parent, const char* name) + : QWidget(parent, name, Qt::WNoAutoErase | Qt::WResizeNoErase) + { + ypos = 0; + editMode = false; + setFocusPolicy(Qt::StrongFocus); + setMouseTracking(true); + header = hdr; + + scroll = 0; + editTrack = 0; + editor = 0; + mode = NORMAL; + + setBackgroundMode(Qt::NoBackground); + resizeFlag = false; + + connect(song, SIGNAL(songChanged(int)), SLOT(songChanged(int))); + connect(muse, SIGNAL(configChanged()), SLOT(redraw())); + } + +//--------------------------------------------------------- +// songChanged +//--------------------------------------------------------- + +void TList::songChanged(int flags) + { + if (flags & (SC_MUTE | SC_SOLO | SC_RECFLAG | SC_TRACK_INSERTED + | SC_TRACK_REMOVED | SC_TRACK_MODIFIED | SC_ROUTE | SC_CHANNELS | SC_MIDI_CHANNEL)) + redraw(); + if (flags & (SC_TRACK_INSERTED | SC_TRACK_REMOVED | SC_TRACK_MODIFIED)) + adjustScrollbar(); + } + +//--------------------------------------------------------- +// drawCenteredPixmap +// small helper function for "draw()" below +//--------------------------------------------------------- + +static void drawCenteredPixmap(QPainter& p, const QPixmap* pm, const QRect& r) + { + p.drawPixmap(r.x() + (r.width() - pm->width())/2, r.y() + (r.height() - pm->height())/2, *pm); + } + +//--------------------------------------------------------- +// paintEvent +//--------------------------------------------------------- + +void TList::paintEvent(QPaintEvent* ev) + { + if (!pmValid) + paint(ev->rect()); + bitBlt(this, ev->rect().topLeft(), &pm, ev->rect(), true); //CopyROP, true); ddskrjo + } + +//--------------------------------------------------------- +// redraw +//--------------------------------------------------------- + +void TList::redraw() + { + paint(QRect(0, 0, pm.width(), pm.height())); + update(); + } + +//--------------------------------------------------------- +// redraw +//--------------------------------------------------------- + +void TList::redraw(const QRect& r) + { + paint(r); + update(r); + } + +//--------------------------------------------------------- +// paint +//--------------------------------------------------------- + +void TList::paint(const QRect& r) + { + if (!isVisible()) + return; + QRect rect(r); + if (!pmValid) { + pmValid = true; + rect = QRect(0, 0, pm.width(), pm.height()); + } + QPainter p(&pm); + + if (bgPixmap.isNull()) + p.fillRect(rect, config.trackBg); + else + p.drawTiledPixmap(rect, bgPixmap, QPoint(rect.x(), ypos + rect.y())); + p.setClipRegion(rect); + + //printf("TList::paint hasClipping:%d\n", p.hasClipping()); // Tested true. + + int y = rect.y(); + int w = rect.width(); + int h = rect.height(); + int x1 = rect.x(); + int x2 = rect.x() + w; + + //--------------------------------------------------- + // Tracks + //--------------------------------------------------- + + TrackList* l = song->tracks(); + int idx = 0; + int yy = -ypos; + for (iTrack i = l->begin(); i != l->end(); ++idx, yy += (*i)->height(), ++i) { + Track* track = *i; + Track::TrackType type = track->type(); + int trackHeight = track->height(); + if (yy >= (y + h)) + break; + if ((yy + trackHeight) < y) + continue; + // + // clear one row + // + QColor bg; + if (track->selected()) { + bg = config.selectTrackBg; + p.setPen(config.selectTrackFg); + } + else { + switch(type) { + case Track::MIDI: + bg = config.midiTrackBg; + break; + case Track::DRUM: + bg = config.drumTrackBg; + break; + case Track::WAVE: + bg = config.waveTrackBg; + break; + case Track::AUDIO_OUTPUT: + bg = config.outputTrackBg; + break; + case Track::AUDIO_INPUT: + bg = config.inputTrackBg; + break; + case Track::AUDIO_GROUP: + bg = config.groupTrackBg; + break; + case Track::AUDIO_AUX: + bg = config.auxTrackBg; + break; + case Track::AUDIO_SOFTSYNTH: + bg = config.synthTrackBg; + break; + } + p.setPen(palette().active().text()); + } + p.fillRect(x1, yy, w, trackHeight, bg); + + int x = 0; + for (int index = 0; index < header->count(); ++index) { + int section = header->mapToSection(index); + int w = header->sectionSize(section); + QRect r = p.xForm(QRect(x+2, yy, w-4, trackHeight)); + + switch (section) { + case COL_RECORD: + if (track->canRecord()) { + drawCenteredPixmap(p, + track->recordFlag() ? record_on_Icon : record_off_Icon, r); + } + break; + case COL_CLASS: + { + const QPixmap* pm = 0; + switch(type) { + case Track::MIDI: + pm = addtrack_addmiditrackIcon; + break; + case Track::DRUM: + pm = addtrack_drumtrackIcon; + break; + case Track::WAVE: + pm = addtrack_wavetrackIcon; + break; + case Track::AUDIO_OUTPUT: + pm = addtrack_audiooutputIcon; + break; + case Track::AUDIO_INPUT: + pm = addtrack_audioinputIcon; + break; + case Track::AUDIO_GROUP: + pm = addtrack_audiogroupIcon; + break; + case Track::AUDIO_AUX: + pm = addtrack_auxsendIcon; + break; + case Track::AUDIO_SOFTSYNTH: + //pm = waveIcon; + pm = synthIcon; + break; + } + drawCenteredPixmap(p, pm, r); + } + break; + case COL_MUTE: + if (track->off()) + drawCenteredPixmap(p, offIcon, r); + else if (track->mute()) + drawCenteredPixmap(p, editmuteSIcon, r); + break; + case COL_SOLO: + if(track->solo() && track->internalSolo()) + drawCenteredPixmap(p, blacksqcheckIcon, r); + else + if(track->internalSolo()) + drawCenteredPixmap(p, blacksquareIcon, r); + else + if (track->solo()) + drawCenteredPixmap(p, bluedotIcon, r); + break; + case COL_TIMELOCK: + if (track->isMidiTrack() + && track->locked()) { + drawCenteredPixmap(p, lockIcon, r); + } + break; + case COL_NAME: + p.drawText(r, Qt::AlignVCenter|Qt::AlignLeft, track->name()); + break; + case COL_OCHANNEL: + { + QString s; + int n; + if (track->isMidiTrack()) { + n = ((MidiTrack*)track)->outChannel() + 1; + } + else { + // show number of ports + n = ((WaveTrack*)track)->channels(); + } + s.setNum(n); + p.drawText(r, Qt::AlignVCenter|Qt::AlignHCenter, s); + } + break; + case COL_OPORT: + { + QString s; + if (track->isMidiTrack()) { + int outport = ((MidiTrack*)track)->outPort(); + s.sprintf("%d:%s", outport+1, midiPorts[outport].portname().latin1()); + } + // Added by Tim. p3.3.9 + + else + if(track->type() == Track::AUDIO_SOFTSYNTH) + { + MidiDevice* md = dynamic_cast(track); + if(md) + { + int outport = md->midiPort(); + if((outport >= 0) && (outport < MIDI_PORTS)) + s.sprintf("%d:%s", outport+1, midiPorts[outport].portname().latin1()); + else + s = tr(""); + } + } + + p.drawText(r, Qt::AlignVCenter|Qt::AlignLeft, s); + } + break; +// case COL_AUTOMATION: +// { +// QString s="-"; +// +// if (!track->isMidiTrack()) { +// int count = ((AudioTrack*)track)->controller()->size(); +// s.sprintf("%d", count); +// } +// +// +// p.drawText(r, Qt::AlignVCenter|Qt::AlignLeft, s); +// } +// break; + default: + break; + } + x += header->sectionSize(section); + } + p.setPen(Qt::gray); + p.drawLine(x1, yy, x2, yy); + } + p.drawLine(x1, yy, x2, yy); + + if (mode == DRAG) { + int yy = curY - dragYoff; + p.setPen(Qt::green); + p.drawLine(x1, yy, x2, yy); + p.drawLine(x1, yy + dragHeight, x2, yy+dragHeight); + } + + //--------------------------------------------------- + // draw vertical lines + //--------------------------------------------------- + + int n = header->count(); + int xpos = 0; + p.setPen(Qt::gray); + for (int index = 0; index < n; index++) { + int section = header->mapToSection(index); + xpos += header->sectionSize(section); + p.drawLine(xpos, 0, xpos, height()); + } + } + +//--------------------------------------------------------- +// returnPressed +//--------------------------------------------------------- + +void TList::returnPressed() + { + editor->hide(); + if (editor->text() != editTrack->name()) { + TrackList* tl = song->tracks(); + for (iTrack i = tl->begin(); i != tl->end(); ++i) { + if ((*i)->name() == editor->text()) { + QMessageBox::critical(this, + tr("MusE: bad trackname"), + tr("please choose a unique track name"), + QMessageBox::Ok, + Qt::NoButton, + Qt::NoButton); + editTrack = 0; + setFocus(); + return; + } + } + //Track* track = editTrack->clone(); + Track* track = editTrack->clone(false); + editTrack->setName(editor->text()); + audio->msgChangeTrack(track, editTrack); + } + editTrack = 0; + editMode = false; + setFocus(); + } + +//--------------------------------------------------------- +// adjustScrollbar +//--------------------------------------------------------- + +void TList::adjustScrollbar() + { + int h = 0; + TrackList* l = song->tracks(); + for (iTrack it = l->begin(); it != l->end(); ++it) + h += (*it)->height(); + scroll->setMaxValue(h +30); + redraw(); + } + +//--------------------------------------------------------- +// y2Track +//--------------------------------------------------------- + +Track* TList::y2Track(int y) const + { + TrackList* l = song->tracks(); + int ty = 0; + for (iTrack it = l->begin(); it != l->end(); ++it) { + int h = (*it)->height(); + if (y >= ty && y < ty + h) + return *it; + ty += h; + } + return 0; + } + +//--------------------------------------------------------- +// viewMouseDoubleClickEvent +//--------------------------------------------------------- + +void TList::mouseDoubleClickEvent(QMouseEvent* ev) + { + int x = ev->x(); + int section = header->sectionAt(x); + if (section == -1) + return; + + Track* t = y2Track(ev->y() + ypos); + + if (t) { + int colx = header->sectionPos(section); + int colw = header->sectionSize(section); + int coly = t->y() - ypos; + int colh = t->height(); + + if (section == COL_NAME) { + editTrack = t; + if (editor == 0) { + editor = new QLineEdit(this); + /*connect(editor, SIGNAL(returnPressed()), + SLOT(returnPressed()));*/ + editor->setFrame(true); + } + editor->setText(editTrack->name()); + editor->end(false); + editor->setGeometry(colx, coly, colw, colh); + editMode = true; + editor->show(); + } + else + mousePressEvent(ev); + } + } + +//--------------------------------------------------------- +// portsPopupMenu +//--------------------------------------------------------- + +void TList::portsPopupMenu(Track* t, int x, int y) + { + switch(t->type()) { + case Track::MIDI: + case Track::DRUM: + case Track::AUDIO_SOFTSYNTH: + { + MidiTrack* track = (MidiTrack*)t; + + //QPopupMenu* p = midiPortsPopup(0); + MidiDevice* md = 0; + int port = -1; + if(t->type() == Track::AUDIO_SOFTSYNTH) + { + //MidiDevice* md = dynamic_cast((SynthI*)t); + md = dynamic_cast(t); + if(md) + port = md->midiPort(); + } + else + port = track->outPort(); + + Q3PopupMenu* p = midiPortsPopup(0, port); + int n = p->exec(mapToGlobal(QPoint(x, y)), 0); + if (n != -1) { + // Changed by T356. + //track->setOutPort(n); + //audio->msgSetTrackOutPort(track, n); + + //song->update(); + if (t->type() == Track::DRUM) { + bool change = QMessageBox::question(this, tr("Update drummap?"), + tr("Do you want to use same port for all instruments in the drummap?"), + tr("&Yes"), tr("&No"), QString::null, 0, 1); + audio->msgIdle(true); + if (!change) + { + // Delete all port controller events. + //audio->msgChangeAllPortDrumCtrlEvents(false); + song->changeAllPortDrumCtrlEvents(false); + track->setOutPort(n); + + for (int i=0; ioutPort(); + // Add all port controller events. + //audio->msgChangeAllPortDrumCtrlEvents(true); + song->changeAllPortDrumCtrlEvents(true); + } + else + { + //audio->msgSetTrackOutPort(track, n); + track->setOutPortAndUpdate(n); + } + audio->msgIdle(false); + song->update(); + } + else + if (t->type() == Track::AUDIO_SOFTSYNTH) + { + if(md != 0) + { + // Idling is already handled in msgSetMidiDevice. + //audio->msgIdle(true); + + // Compiler complains if simple cast from Track to SynthI... + midiSeq->msgSetMidiDevice(&midiPorts[n], (midiPorts[n].device() == md) ? 0 : md); + muse->changeConfig(true); // save configuration file + + //audio->msgIdle(false); + song->update(); + } + } + else + { + audio->msgIdle(true); + //audio->msgSetTrackOutPort(track, n); + track->setOutPortAndUpdate(n); + audio->msgIdle(false); + song->update(); + } + } + delete p; + } + break; + + case Track::WAVE: + case Track::AUDIO_OUTPUT: + case Track::AUDIO_INPUT: + case Track::AUDIO_GROUP: + case Track::AUDIO_AUX: //TODO + break; + } + } + +//--------------------------------------------------------- +// oportPropertyPopupMenu +//--------------------------------------------------------- + +void TList::oportPropertyPopupMenu(Track* t, int x, int y) + { + // Added by Tim. p3.3.9 + if(t->type() == Track::AUDIO_SOFTSYNTH) + { + SynthI* synth = (SynthI*)t; + + Q3PopupMenu* p = new Q3PopupMenu(this); + p->setCheckable(true); + p->insertItem(tr("Show Gui"), 0); + printf("synth hasgui %d, gui visible %d\n",synth->hasGui(), synth->guiVisible()); + p->setItemEnabled(0, synth->hasGui()); + p->setItemChecked(0, synth->guiVisible()); + + #ifndef OSC_SUPPORT + #ifdef DSSI_SUPPORT + if(dynamic_cast(synth->sif())) + { + printf("entering this wierd if statement\n"); + p->setItemChecked(0, false); + p->setItemEnabled(0, false); + } + #endif + #endif + + int n = p->exec(mapToGlobal(QPoint(x, y)), 0); + if (n == 0) { + bool show = !synth->guiVisible(); + audio->msgShowInstrumentGui(synth, show); + } + delete p; + return; + } + + + if (t->type() != Track::MIDI && t->type() != Track::DRUM) + return; + int oPort = ((MidiTrack*)t)->outPort(); + MidiPort* port = &midiPorts[oPort]; + + Q3PopupMenu* p = new Q3PopupMenu(this); + p->setCheckable(true); + p->insertItem(tr("Show Gui"), 0); + + p->setItemEnabled(0, port->hasGui()); + p->setItemChecked(0, port->guiVisible()); + + #ifndef OSC_SUPPORT + #ifdef DSSI_SUPPORT + MidiDevice* dev = port->device(); + if(dev && dev->isSynti() && (dynamic_cast(((SynthI*)dev)->sif()))) + { + p->setItemChecked(0, false); + p->setItemEnabled(0, false); + } + #endif + #endif + + int n = p->exec(mapToGlobal(QPoint(x, y)), 0); + if (n == 0) { + bool show = !port->guiVisible(); + audio->msgShowInstrumentGui(port->instrument(), show); + } + delete p; + + } + +//--------------------------------------------------------- +// tracklistChanged +//--------------------------------------------------------- + +void TList::tracklistChanged() + { + redraw(); + } + +//--------------------------------------------------------- +// keyPressEvent +//--------------------------------------------------------- + +void TList::keyPressEvent(QKeyEvent* e) + { + if (editMode) { + // First time we get a keypress event when lineedit is open is on the return key: + returnPressed(); + return; + } + emit keyPressExt(e); //redirect keypress events to main app + e->ignore(); + /* + int key = e->key(); + switch (key) { + case Key_Up: + moveSelection(-1); + break; + case Key_Down: + moveSelection(1); + break; + default: + + break; + } + */ + } + +//--------------------------------------------------------- +// moveSelection +//--------------------------------------------------------- + +void TList::moveSelection(int n) + { + TrackList* tracks = song->tracks(); + + // check for single selection + int nselect = 0; + for (iTrack t = tracks->begin(); t != tracks->end(); ++t) + if ((*t)->selected()) + ++nselect; + if (nselect != 1) + return; + for (iTrack t = tracks->begin(); t != tracks->end(); ++t) { + iTrack s = t; + if ((*t)->selected()) { + if (n > 0) { + while (n--) { + ++t; + if (t == tracks->end()) { + --t; + break; + } + } + } + else { + while (n++ != 0) { + if (t == tracks->begin()) + break; + --t; + } + } + (*s)->setSelected(false); + (*t)->setSelected(true); + + // rec enable track if expected + TrackList recd = getRecEnabledTracks(); + if (recd.size() == 1 && config.moveArmedCheckBox) { // one rec enabled track, move rec enabled with selection + song->setRecordFlag((Track*)recd.front(),false); + song->setRecordFlag((*t),true); + } + + if (editTrack && editTrack != *t) + returnPressed(); + redraw(); + break; + } + } + emit selectionChanged(); + } + +TrackList TList::getRecEnabledTracks() +{ + //printf("getRecEnabledTracks\n"); + TrackList recEnabled; + TrackList* tracks = song->tracks(); + for (iTrack t = tracks->begin(); t != tracks->end(); ++t) { + if ((*t)->recordFlag()) { + //printf("rec enabled track\n"); + recEnabled.push_back(*t); + } + } + return recEnabled; +} + +//--------------------------------------------------------- +// mousePressEvent +//--------------------------------------------------------- + +void TList::mousePressEvent(QMouseEvent* ev) + { + int x = ev->x(); + int y = ev->y(); + int button = ev->button(); + bool shift = ev->state() & Qt::ShiftModifier; + + Track* t = y2Track(y + ypos); + + TrackColumn col = TrackColumn(header->sectionAt(x)); + if (t == 0) { + if (button == Qt::RightButton) { + Q3PopupMenu* p = new Q3PopupMenu(this); + p->clear(); + p->insertItem(*addtrack_addmiditrackIcon, + tr("Add Midi Track"), Track::MIDI, 0); + p->insertItem(*addtrack_drumtrackIcon, + tr("Add Drum Track"),Track::DRUM, 1); + p->insertItem(*addtrack_wavetrackIcon, + tr("Add Wave Track"), Track::WAVE, 2); + p->insertItem(*addtrack_audiooutputIcon, + tr("Add Output"), Track::AUDIO_OUTPUT, 3); + p->insertItem(*addtrack_audiogroupIcon, + tr("Add Group"), Track::AUDIO_GROUP, 4); + p->insertItem(*addtrack_audioinputIcon, + tr("Add Input"), Track::AUDIO_INPUT, 5); + p->insertItem(*addtrack_auxsendIcon, + tr("Add Aux Send"), Track::AUDIO_AUX, 6); + + // Create a sub-menu and fill it with found synth types. Make p the owner. + Q3PopupMenu* synp = populateAddSynth(p); + // Add the 'Add Synth' sub-menu to the menu. + p->insertItem(*synthIcon, tr("Add Synth"), synp, Track::AUDIO_SOFTSYNTH); + + // Show the menu + int n = p->exec(ev->globalPos(), 0); + + // Valid click? + if((n >= 0) && ((Track::TrackType)n != Track::AUDIO_SOFTSYNTH)) + { + // Synth sub-menu id? + if(n >= MENU_ADD_SYNTH_ID_BASE) + { + n -= MENU_ADD_SYNTH_ID_BASE; + //if(n < synthis.size()) + // t = song->createSynthI(synthis[n]->baseName()); + //if((n - MENU_ADD_SYNTH_ID_BASE) < (int)synthis.size()) + if(n < (int)synthis.size()) + { + //t = song->createSynthI(synp->text(n)); + //t = song->createSynthI(synthis[n]->name()); + t = song->createSynthI(synthis[n]->baseName(), synthis[n]->name()); + + if(t) + { + // Add instance last in midi device list. + for (int i = 0; i < MIDI_PORTS; ++i) + { + MidiPort* port = &midiPorts[i]; + MidiDevice* dev = port->device(); + if (dev==0) + { + midiSeq->msgSetMidiDevice(port, (SynthI*)t); + muse->changeConfig(true); // save configuration file + song->update(); + break; + } + } + } + } + } + // Normal track. + else + t = song->addTrack((Track::TrackType)n); + + if(t) + { + song->deselectTracks(); + t->setSelected(true); + + emit selectionChanged(); + adjustScrollbar(); + } + } + + // Just delete p, and all its children will go too, right? + //delete synp; + delete p; + } + return; + } + + TrackList* tracks = song->tracks(); + dragYoff = y - (t->y() - ypos); + startY = y; + + if (resizeFlag) { + mode = RESIZE; + int y = ev->y(); + int ty = -ypos; + sTrack = 0; + for (iTrack it = tracks->begin(); it != tracks->end(); ++it, ++sTrack) { + int h = (*it)->height(); + ty += h; + if (y >= (ty-2)) { + + if ( (*it) == tracks->back() && y > ty ) { + //printf("tracks->back() && y > ty\n"); + } + else if ( y > (ty+2) ) { + //printf(" y > (ty+2) \n"); + } + else { + //printf("ogga ogga\n"); + + break; + } + + + //&& y < (ty)) + // break; + } + } + + return; + } + mode = START_DRAG; + + switch (col) { + case COL_RECORD: + { + bool val = !(t->recordFlag()); + if (!t->isMidiTrack()) { + if (t->type() == Track::AUDIO_OUTPUT) { + if (val && t->recordFlag() == false) { + muse->bounceToFile((AudioOutput*)t); + } + audio->msgSetRecord((AudioOutput*)t, val); + if (!((AudioOutput*)t)->recFile()) + val = false; + else + return; + } + song->setRecordFlag(t, val); + } + else + song->setRecordFlag(t, val); + } + break; + case COL_NONE: + break; + case COL_CLASS: + if (t->isMidiTrack()) + classesPopupMenu(t, x, t->y() - ypos); + break; + case COL_OPORT: + // Changed by Tim. p3.3.9 + // Reverted. + if (button == Qt::LeftButton) + portsPopupMenu(t, x, t->y() - ypos); + else if (button == Qt::RightButton) + oportPropertyPopupMenu(t, x, t->y() - ypos); + //if(((button == QMouseEvent::LeftButton) && (t->type() == Track::AUDIO_SOFTSYNTH)) || (button == QMouseEvent::RightButton)) + // oportPropertyPopupMenu(t, x, t->y() - ypos); + //else + //if(button == QMouseEvent::LeftButton) + // portsPopupMenu(t, x, t->y() - ypos); + + break; + case COL_MUTE: + // p3.3.29 + if ((button == Qt::RightButton) || (ev->state() & Qt::ControlModifier)) + t->setOff(!t->off()); + else + { + if (t->off()) + t->setOff(false); + else + t->setMute(!t->mute()); + } + song->update(SC_MUTE); + break; + case COL_SOLO: + audio->msgSetSolo(t, !t->solo()); + song->update(SC_SOLO); + break; + + case COL_NAME: + if (button == Qt::LeftButton) { + if (!shift) { + song->deselectTracks(); + t->setSelected(true); + + // rec enable track if expected + TrackList recd = getRecEnabledTracks(); + if (recd.size() == 1 && config.moveArmedCheckBox) { // one rec enabled track, move rec enabled with selection + song->setRecordFlag((Track*)recd.front(),false); + song->setRecordFlag(t,true); + } + } + else + t->setSelected(!t->selected()); + if (editTrack && editTrack != t) + returnPressed(); + emit selectionChanged(); + } + else if (button == Qt::RightButton) { + mode = NORMAL; + Q3PopupMenu* p = new Q3PopupMenu(this); + p->clear(); + p->insertItem(QIcon(*automation_clear_dataIcon), tr("Delete Track"), 0); // ddskrjo + p->insertItem(QIcon(*track_commentIcon), tr("Track Comment"), 1); + int n = p->exec(ev->globalPos(), 0); + if (n != -1) { + switch (n) { + case 0: // delete track + song->removeTrack0(t); + audio->msgUpdateSoloStates(); + break; + + case 1: // show track comment + { + TrackComment* tc = new TrackComment(t, 0); + tc->show(); + //QToolTip::add( this, "FOOOOOOOOOOOOO" ); + } + break; + + default: + printf("action %d\n", n); + break; + } + + } + delete p; + } + break; + + case COL_TIMELOCK: + t->setLocked(!t->locked()); + break; + + case COL_OCHANNEL: + { + int delta = 0; + if (button == Qt::RightButton) + delta = 1; + else if (button == Qt::MidButton) + delta = -1; + if (t->isMidiTrack()) + { + MidiTrack* mt = dynamic_cast(t); + if (mt == 0) + break; + + int channel = mt->outChannel(); + channel += delta; + if(channel >= MIDI_CHANNELS) + channel = MIDI_CHANNELS - 1; + if(channel < 0) + channel = 0; + //if (channel != ((MidiTrack*)t)->outChannel()) + if (channel != mt->outChannel()) + { + // Changed by T356. + //mt->setOutChannel(channel); + audio->msgIdle(true); + //audio->msgSetTrackOutChannel(mt, channel); + mt->setOutChanAndUpdate(channel); + audio->msgIdle(false); + + /* --- I really don't like this, you can mess up the whole map "as easy as dell" + if (mt->type() == MidiTrack::DRUM) {//Change channel on all drum instruments + for (int i=0; iupdate(-1); + //song->update(SC_CHANNELS); + song->update(SC_MIDI_CHANNEL); + } + } + else + { + if(t->type() != Track::AUDIO_SOFTSYNTH) + { + AudioTrack* at = dynamic_cast(t); + if (at == 0) + break; + + int n = t->channels() + delta; + if (n > MAX_CHANNELS) + n = MAX_CHANNELS; + else if (n < 1) + n = 1; + if (n != t->channels()) { + audio->msgSetChannels(at, n); + song->update(SC_CHANNELS); + } + } + } + } + break; + } + redraw(); + } + +//--------------------------------------------------------- +// selectTrack +//--------------------------------------------------------- +void TList::selectTrack(Track* tr) + { + song->deselectTracks(); + tr->setSelected(true); + + + // rec enable track if expected + TrackList recd = getRecEnabledTracks(); + if (recd.size() == 1 && config.moveArmedCheckBox) { // one rec enabled track, move rec enabled with selection + song->setRecordFlag((Track*)recd.front(),false); + song->setRecordFlag(tr,true); + } + + // By T356. Force a redraw for wave tracks, since it does not seem to happen. + //if(!tr->isMidiTrack()) + redraw(); + emit selectionChanged(); + } + +//--------------------------------------------------------- +// selectTrackAbove +//--------------------------------------------------------- +void TList::selectTrackAbove() +{ + moveSelection(-1); +} +//--------------------------------------------------------- +// selectTrackBelow +//--------------------------------------------------------- +void TList::selectTrackBelow() +{ + moveSelection(1); +} + +//--------------------------------------------------------- +// mouseMoveEvent +//--------------------------------------------------------- + +void TList::mouseMoveEvent(QMouseEvent* ev) + { + if (ev->state() == 0) { + int y = ev->y(); + int ty = -ypos; + TrackList* tracks = song->tracks(); + iTrack it; + for (it = tracks->begin(); it != tracks->end(); ++it) { + int h = (*it)->height(); + ty += h; + if (y >= (ty-2)) { + if ( (*it) == tracks->back() && y >= ty ) { + // outside last track don't change to splitVCursor + } + else if ( y > (ty+2) ) { + //printf(" y > (ty+2) \n"); + } + else { + if (!resizeFlag) { + resizeFlag = true; + setCursor(QCursor(Qt::splitVCursor)); + } + break; + } + } + } + if (it == tracks->end() && resizeFlag) { + setCursor(QCursor(Qt::arrowCursor)); + resizeFlag = false; + } + return; + } + curY = ev->y(); + int delta = curY - startY; + switch (mode) { + case START_DRAG: + if (delta < 0) + delta = -delta; + if (delta <= 2) + break; + { + Track* t = y2Track(startY + ypos); + if (t == 0) + mode = NORMAL; + else { + mode = DRAG; + dragHeight = t->height(); + sTrack = song->tracks()->index(t); + setCursor(QCursor(Qt::sizeVerCursor)); + redraw(); + } + } + break; + case NORMAL: + break; + case DRAG: + redraw(); + break; + case RESIZE: + { + if(sTrack >= 0 && sTrack < song->tracks()->size()) + { + Track* t = song->tracks()->index(sTrack); + if(t) + { + int h = t->height() + delta; + startY = curY; + if (h < MIN_TRACKHEIGHT) + h = MIN_TRACKHEIGHT; + t->setHeight(h); + song->update(SC_TRACK_MODIFIED); + } + } + } + break; + } + } + +//--------------------------------------------------------- +// mouseReleaseEvent +//--------------------------------------------------------- + +void TList::mouseReleaseEvent(QMouseEvent* ev) + { + if (mode == DRAG) { + Track* t = y2Track(ev->y() + ypos); + if (t) { + int dTrack = song->tracks()->index(t); + audio->msgMoveTrack(sTrack, dTrack); + } + } + if (mode != NORMAL) { + mode = NORMAL; + setCursor(QCursor(Qt::arrowCursor)); + redraw(); + } + if (editTrack) + editor->setFocus(); + adjustScrollbar(); + } + +//--------------------------------------------------------- +// wheelEvent +//--------------------------------------------------------- + +void TList::wheelEvent(QWheelEvent* ev) + { + int x = ev->x(); + int y = ev->y(); + Track* t = y2Track(y + ypos); + if (t == 0) { + emit redirectWheelEvent(ev); + return; + } + TrackColumn col = TrackColumn(header->sectionAt(x)); + int delta = ev->delta() / WHEEL_DELTA; + ev->accept(); + + switch (col) { + case COL_RECORD: + case COL_NONE: + case COL_CLASS: + case COL_NAME: + //case COL_AUTOMATION: + break; + case COL_MUTE: + // p3.3.29 + if (ev->state() & Qt::ControlModifier) + t->setOff(!t->off()); + else + { + if (t->off()) + t->setOff(false); + else + t->setMute(!t->mute()); + } + song->update(SC_MUTE); + break; + + case COL_SOLO: + audio->msgSetSolo(t, !t->solo()); + song->update(SC_SOLO); + break; + + case COL_TIMELOCK: + t->setLocked(!t->locked()); + break; + + case COL_OPORT: + if (t->isMidiTrack()) { + MidiTrack* mt = (MidiTrack*)t; + int port = mt->outPort() + delta; + + if (port >= MIDI_PORTS) + port = MIDI_PORTS-1; + else if (port < 0) + port = 0; + if (port != ((MidiTrack*)t)->outPort()) { + // Changed by T356. + //mt->setOutPort(port); + audio->msgIdle(true); + //audio->msgSetTrackOutPort(mt, port); + mt->setOutPortAndUpdate(port); + audio->msgIdle(false); + + song->update(SC_ROUTE); + } + } + break; + + case COL_OCHANNEL: + if (t->isMidiTrack()) { + MidiTrack* mt = (MidiTrack*)t; + int channel = mt->outChannel() + delta; + + if (channel >= MIDI_CHANNELS) + channel = MIDI_CHANNELS-1; + else if (channel < 0) + channel = 0; + if (channel != ((MidiTrack*)t)->outChannel()) { + // Changed by T356. + //mt->setOutChannel(channel); + audio->msgIdle(true); + //audio->msgSetTrackOutChannel(mt, channel); + mt->setOutChanAndUpdate(channel); + audio->msgIdle(false); + + // may result in adding/removing mixer strip: + //song->update(-1); + song->update(SC_MIDI_CHANNEL); + } + } + else { + int n = t->channels() + delta; + if (n > MAX_CHANNELS) + n = MAX_CHANNELS; + else if (n < 1) + n = 1; + if (n != t->channels()) { + audio->msgSetChannels((AudioTrack*)t, n); + song->update(SC_CHANNELS); + } + } + break; + default: + break; + } + } + +//--------------------------------------------------------- +// writeStatus +//--------------------------------------------------------- + +void TList::writeStatus(int level, Xml& xml, const char* name) const + { + xml.tag(level++, name); + header->writeStatus(level, xml); + xml.etag(level, name); + } + +//--------------------------------------------------------- +// readStatus +//--------------------------------------------------------- + +void TList::readStatus(Xml& xml, const char* name) + { + for (;;) { + Xml::Token token(xml.parse()); + const QString& tag(xml.s1()); + switch (token) { + case Xml::Error: + case Xml::End: + return; + case Xml::TagStart: + if (tag == header->name()) + header->readStatus(xml); + else + xml.unknown("Tlist"); + break; + case Xml::TagEnd: + if (tag == name) + return; + default: + break; + } + } + } + +//--------------------------------------------------------- +// setYPos +//--------------------------------------------------------- + +void TList::setYPos(int y) + { + int delta = ypos - y; // - -> shift up + ypos = y; + if (pm.isNull()) + return; + if (!pmValid) { + //printf("TList::setYPos y:%d delta:%d pmValid is false - redrawing...\n", y, delta); + redraw(); + return; + } + int w = width(); + int h = height(); + QRect r; + //printf("TList::setYPos y:%d delta:%d w:%d h:%d\n", y, delta, w, h); + + if (delta >= h || delta <= -h) + { + //printf("TList::setYPos delta >= h || delta <= -h\n"); + r = QRect(0, 0, w, h); + } + else if (delta < 0) { // shift up + //printf("TList::setYPos delta < 0 : shift up\n"); + bitBlt(&pm, 0, 0, &pm, 0, -delta, w, h + delta, true); //CopyROP, true); ddskrjo + r = QRect(0, h + delta, w, -delta); + } + else { // shift down + //printf("TList::setYPos delta !< 0 : shift down\n"); + bitBlt(&pm, 0, delta, &pm, 0, 0, w, h-delta, true); //CopyROP, true); ddskrjo + + // NOTE: June 2 2010: On my machine with an old NV V8200 + prop drivers (curr 96.43.11), + // this is a problem. There is severe graphical corruption. + // Not just here but several other windows (ex. ladspa browser), + // and I believe (?) other QT3 apps. QT4 apps don't do it. + // Neither does it happen when xorg drivers used. + // + // FIXME: This change cures it for me, but we shouldn't leave this in - shouldn't need to do this... + // + //r = QRect(0, 0, w, delta); + // Changed p3.3.43 + r = QRect(0, 0, w, h); + + } + paint(r); + update(); + } + +//--------------------------------------------------------- +// resizeEvent +//--------------------------------------------------------- + +void TList::resizeEvent(QResizeEvent* ev) + { + pm.resize(ev->size()); + pmValid = false; + } + +//--------------------------------------------------------- +// classesPopupMenu +//--------------------------------------------------------- + +void TList::classesPopupMenu(Track* t, int x, int y) + { + Q3PopupMenu p(this); + p.clear(); + p.insertItem(QIcon(*addtrack_addmiditrackIcon), tr("Midi"), Track::MIDI); + p.insertItem(QIcon(*addtrack_drumtrackIcon), tr("Drum"), Track::DRUM); + int n = p.exec(mapToGlobal(QPoint(x, y)), 0); + + if (n == -1) + return; + + if (Track::TrackType(n) == Track::MIDI && t->type() == Track::DRUM) { + // + // Drum -> Midi + // + audio->msgIdle(true); + PartList* pl = t->parts(); + MidiTrack* m = (MidiTrack*) t; + for (iPart ip = pl->begin(); ip != pl->end(); ++ip) { + EventList* el = ip->second->events(); + for (iEvent ie = el->begin(); ie != el->end(); ++ie) { + Event ev = ie->second; + if(ev.type() == Note) + { + int pitch = ev.pitch(); + // Changed by T356. + // Tested: Notes were being mixed up switching back and forth between midi and drum. + //pitch = drumMap[pitch].anote; + pitch = drumMap[pitch].enote; + + ev.setPitch(pitch); + } + else + if(ev.type() == Controller) + { + int ctl = ev.dataA(); + // Is it a drum controller event, according to the track port's instrument? + MidiController *mc = midiPorts[m->outPort()].drumController(ctl); + if(mc) + // Change the controller event's index into the drum map to an instrument note. + ev.setA((ctl & ~0xff) | drumMap[ctl & 0x7f].enote); + } + + } + } + t->setType(Track::MIDI); + audio->msgIdle(false); + } + else if (Track::TrackType(n) == Track::DRUM && t->type() == Track::MIDI) { + // + // Midi -> Drum + // + bool change = QMessageBox::question(this, tr("Update drummap?"), + tr("Do you want to use same port and channel for all instruments in the drummap?"), + tr("&Yes"), tr("&No"), QString::null, 0, 1); + + audio->msgIdle(true); + // Delete all port controller events. + //audio->msgChangeAllPortDrumCtrlEvents(false); + song->changeAllPortDrumCtrlEvents(false); + + if (!change) { + MidiTrack* m = (MidiTrack*) t; + for (int i=0; ioutChannel(); + drumMap[i].port = m->outPort(); + } + } + + //audio->msgIdle(true); + PartList* pl = t->parts(); + MidiTrack* m = (MidiTrack*) t; + for (iPart ip = pl->begin(); ip != pl->end(); ++ip) { + EventList* el = ip->second->events(); + for (iEvent ie = el->begin(); ie != el->end(); ++ie) { + Event ev = ie->second; + if (ev.type() == Note) + { + int pitch = ev.pitch(); + pitch = drumInmap[pitch]; + ev.setPitch(pitch); + } + else + { + if(ev.type() == Controller) + { + int ctl = ev.dataA(); + // Is it a drum controller event, according to the track port's instrument? + MidiController *mc = midiPorts[m->outPort()].drumController(ctl); + if(mc) + // Change the controller event's instrument note to an index into the drum map. + ev.setA((ctl & ~0xff) | drumInmap[ctl & 0x7f]); + } + + } + + } + } + t->setType(Track::DRUM); + + // Add all port controller events. + //audio->msgChangeAllPortDrumCtrlEvents(true); + song->changeAllPortDrumCtrlEvents(true); + + audio->msgIdle(false); + } + } + diff --git a/muse2/muse/arranger/tlist.h b/muse2/muse/arranger/tlist.h new file mode 100644 index 00000000..147a61e2 --- /dev/null +++ b/muse2/muse/arranger/tlist.h @@ -0,0 +1,131 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: tlist.h,v 1.8.2.5 2008/01/19 13:33:46 wschweer Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __TLIST_H__ +#define __TLIST_H__ + +#include +#include +#include +//Added by qt3to4: +#include +#include +#include +#include +#include +#include +#include "track.h" + +class QPainter; +class ScrollScale; +class QScrollBar; +class QLineEdit; +class Track; +class Xml; +class Header; + +enum TrackColumn { + COL_RECORD = 0, + COL_MUTE, + COL_SOLO, + COL_CLASS, + COL_NAME, + COL_OPORT, + COL_OCHANNEL, + COL_TIMELOCK, + COL_NONE = -1 + }; +// COL_AUTOMATION, -- not enabled + +//---------------------------------------------------------- +// THeaderTip +//---------------------------------------------------------- + +class THeaderTip { //: public QToolTip { ddskrjo + + public: + THeaderTip(QWidget * parent) {} //: QToolTip(parent) {} ddskrjo + virtual ~THeaderTip() {} + protected: + void maybeTip(const QPoint &); + }; + +//--------------------------------------------------------- +// TList +//--------------------------------------------------------- + +class TList : public QWidget { + Q_OBJECT + + int ypos; + bool editMode; + + QPixmap pm; // for double buffering + bool pmValid; + QPixmap bgPixmap; // background Pixmap + + bool resizeFlag; // true if resize cursor is shown + + Header* header; + QScrollBar* scroll; + QLineEdit* editor; + Track* editTrack; + + int startY; + int curY; + int sTrack; + int dragHeight; + int dragYoff; + + enum { NORMAL, START_DRAG, DRAG, RESIZE} mode; + + virtual void paintEvent(QPaintEvent*); + virtual void mousePressEvent(QMouseEvent* event); + virtual void mouseDoubleClickEvent(QMouseEvent*); + virtual void mouseMoveEvent(QMouseEvent*); + virtual void mouseReleaseEvent(QMouseEvent*); + virtual void keyPressEvent(QKeyEvent* e); + virtual void wheelEvent(QWheelEvent* e); + + void portsPopupMenu(Track*, int, int); + void oportPropertyPopupMenu(Track*, int x, int y); + void moveSelection(int n); + void adjustScrollbar(); + void paint(const QRect& r); + virtual void resizeEvent(QResizeEvent*); + void redraw(const QRect& r); + Track* y2Track(int) const; + void classesPopupMenu(Track*, int x, int y); + TrackList getRecEnabledTracks(); + + private slots: + void returnPressed(); + void songChanged(int flags); + + signals: + void selectionChanged(); + void keyPressExt(QKeyEvent*); + void redirectWheelEvent(QWheelEvent*); + + public slots: + void tracklistChanged(); + void setYPos(int); + void redraw(); + void selectTrack(Track*); + void selectTrackAbove(); + void selectTrackBelow(); + + public: + TList(Header*, QWidget* parent, const char* name); + void setScroll(QScrollBar* s) { scroll = s; } + Track* track() const { return editTrack; } + void writeStatus(int level, Xml&, const char* name) const; + void readStatus(Xml&, const char* name); + }; + +#endif + diff --git a/muse2/muse/arranger/trackautomationview.cpp b/muse2/muse/arranger/trackautomationview.cpp new file mode 100644 index 00000000..43abcc69 --- /dev/null +++ b/muse2/muse/arranger/trackautomationview.cpp @@ -0,0 +1,53 @@ +#include "trackautomationview.h" +#include "math.h" +#include +#include +#include +//Added by qt3to4: +#include +#include "track.h" + +TrackAutomationView::TrackAutomationView(QWidget *parent, Track *t) : QWidget(parent) +{ + printf("created trackautomationview\n"); + _t = t; + //show(); +} + +void TrackAutomationView::paintEvent(QPaintEvent* e) +{ + QPainter p(this); + const QRect &r = e->rect(); + + // temporary solution, audio track drawing moved here. + // best would be to get transparency to work correctly + p.setPen(QPen(Qt::black, 2, Qt::SolidLine)); + p.setBrush(Qt::gray); + p.drawRect(r); + + int height=r.bottom()-r.top(); + if( _t->type()>1) { // audio type + double volume = ((AudioTrack*)_t)->volume(); + double dbvolume = (20.0*log10(volume)+60) /70.0; // represent volume between 0 and 1 + if (dbvolume < 0) dbvolume =0.0; + printf("height=%d volume=%f dbvolume=%f\n", height, volume, dbvolume); + p.setPen(QPen(Qt::yellow,1,Qt::SolidLine)); + p.drawLine(r.left(),r.bottom()-dbvolume*height,r.right(),r.bottom()-dbvolume*height); + + } + + + + printf("paintEvent\n"); +} + +void TrackAutomationView::collectAutomationData() +{ + // here we should collect all automation data that is currently selected for viewing and + // prepare an event list that is easy to draw in paintEvent + // the main reason being that the event list in it's entirety likely contains too much data to + // be processed in the paintEvent. Better to preprocess. + +// CtrlListList cll =((AudioTrack*)_t)->controller(); +// cll.count() +} diff --git a/muse2/muse/arranger/trackautomationview.h b/muse2/muse/arranger/trackautomationview.h new file mode 100644 index 00000000..2631035e --- /dev/null +++ b/muse2/muse/arranger/trackautomationview.h @@ -0,0 +1,21 @@ +#ifndef TRACKAUTOMATIONVIEW_H +#define TRACKAUTOMATIONVIEW_H + +#include +//Added by qt3to4: +#include + +#include "track.h" + +class TrackAutomationView : public QWidget +{ + Track *_t; + void paintEvent(QPaintEvent *e); + std::map automationList; +public: + TrackAutomationView(QWidget *parent, Track *t); + Track *track() { return _t; } + void collectAutomationData(); +}; + +#endif // TRACKAUTOMATIONVIEW_H diff --git a/muse2/muse/arranger/trackinfo.cpp b/muse2/muse/arranger/trackinfo.cpp new file mode 100644 index 00000000..a6bf0a4e --- /dev/null +++ b/muse2/muse/arranger/trackinfo.cpp @@ -0,0 +1,1570 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: trackinfo.cpp,v 1.10.2.15 2009/11/14 03:37:48 terminator356 Exp $ +// (C) Copyright 1999-2004 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//Added by qt3to4: +#include +#include +#include + +#include "song.h" +#include "globals.h" +#include "spinbox.h" +#include "config.h" +#include "gconfig.h" +#include "arranger.h" +#include "midiport.h" +#include "mididev.h" +#include "utils.h" +#include "tlist.h" +//#include "mtrackinfobase.h" +#include "alayout.h" +#include "audio.h" +#include "mixer/amixer.h" +#include "midi.h" +#include "midictrl.h" +#include "xpm/muse_leftside_logo.xpm" +#include "mixer/astrip.h" +#include "icons.h" +#include "app.h" +#include "route.h" +#include "popupmenu.h" + + +//--------------------------------------------------------- +// midiTrackInfoHeartBeat +//--------------------------------------------------------- + +void Arranger::midiTrackInfoHeartBeat() +{ + if(!showTrackinfoFlag || !selected) + return; + switch(selected->type()) + { + case Track::MIDI: + case Track::DRUM: + { + MidiTrack* track = (MidiTrack*)selected; + + int outChannel = track->outChannel(); + int outPort = track->outPort(); + ///int ichMask = track->inChannelMask(); + //int iptMask = track->inPortMask(); + ///unsigned int iptMask = track->inPortMask(); + + MidiPort* mp = &midiPorts[outPort]; + + // Set record echo. + if(midiTrackInfo->recEchoButton->isOn() != track->recEcho()) + { + midiTrackInfo->recEchoButton->blockSignals(true); + midiTrackInfo->recEchoButton->setOn(track->recEcho()); + midiTrackInfo->recEchoButton->blockSignals(false); + } + + // Check for detection of midi general activity on chosen channels... + int mpt = 0; + //int mch = 0; + RouteList* rl = track->inRoutes(); + + ciRoute r = rl->begin(); + //for( ; mpt < MIDI_PORTS; ++mpt) + for( ; r != rl->end(); ++r) + { + //if(!r->isValid() || ((r->type != Route::ALSA_MIDI_ROUTE) && (r->type != Route::JACK_MIDI_ROUTE))) + //if(!r->isValid() || (r->type != Route::MIDI_DEVICE_ROUTE)) + if(!r->isValid() || (r->type != Route::MIDI_PORT_ROUTE)) // p3.3.49 + continue; + + // NOTE: TODO: Code for channelless events like sysex, ** IF we end up using the 'special channel 17' method. + //if(r->channel == -1) + if(r->channel == -1 || r->channel == 0) // p3.3.50 + continue; + + // No port assigned to the device? + //mpt = r->device->midiPort(); + mpt = r->midiPort; // p3.3.49 + if(mpt < 0 || mpt >= MIDI_PORTS) + continue; + + //for(; mch < MIDI_CHANNELS; ++mch) + //{ + //if(midiPorts[mpt].syncInfo().actDetect(mch) && (iptMask & (1 << mpt)) && (ichMask & (1 << mch)) ) + //if((iptMask & bitShiftLU[mpt]) && (midiPorts[mpt].syncInfo().actDetectBits() & ichMask) ) + //if(midiPorts[mpt].syncInfo().actDetectBits() & bitShiftLU[r->channel]) + if(midiPorts[mpt].syncInfo().actDetectBits() & r->channel) // p3.3.50 Use new channel mask. + { + //if(midiTrackInfo->iChanTextLabel->paletteBackgroundColor() != green) + // midiTrackInfo->iChanTextLabel->setPaletteBackgroundColor(green); + //if(midiTrackInfo->iChanDetectLabel->pixmap() != greendotIcon) + if(!midiTrackInfo->_midiDetect) + { + //printf("Arranger::midiTrackInfoHeartBeat setting green icon\n"); + + midiTrackInfo->_midiDetect = true; + //midiTrackInfo->iChanDetectLabel->setPixmap(*greendotIcon); + midiTrackInfo->iChanDetectLabel->setPixmap(*redLedIcon); + } + break; + } + //} + } + // No activity detected? + //if(mch == MIDI_CHANNELS) + //if(mpt == MIDI_PORTS) + if(r == rl->end()) + { + //if(midiTrackInfo->iChanTextLabel->paletteBackgroundColor() != darkGreen) + // midiTrackInfo->iChanTextLabel->setPaletteBackgroundColor(darkGreen); + //if(midiTrackInfo->iChanDetectLabel->pixmap() != darkgreendotIcon) + if(midiTrackInfo->_midiDetect) + { + //printf("Arranger::midiTrackInfoHeartBeat setting darkgreen icon\n"); + + midiTrackInfo->_midiDetect = false; + //midiTrackInfo->iChanDetectLabel->setPixmap(*darkgreendotIcon); + midiTrackInfo->iChanDetectLabel->setPixmap(*darkRedLedIcon); + } + } + + int nprogram = mp->hwCtrlState(outChannel, CTRL_PROGRAM); + if(nprogram == CTRL_VAL_UNKNOWN) + { + if(program != CTRL_VAL_UNKNOWN) + { + //printf("Arranger::midiTrackInfoHeartBeat setting program to unknown\n"); + + program = CTRL_VAL_UNKNOWN; + if(midiTrackInfo->iHBank->value() != 0) + { + midiTrackInfo->iHBank->blockSignals(true); + midiTrackInfo->iHBank->setValue(0); + midiTrackInfo->iHBank->blockSignals(false); + } + if(midiTrackInfo->iLBank->value() != 0) + { + midiTrackInfo->iLBank->blockSignals(true); + midiTrackInfo->iLBank->setValue(0); + midiTrackInfo->iLBank->blockSignals(false); + } + if(midiTrackInfo->iProgram->value() != 0) + { + midiTrackInfo->iProgram->blockSignals(true); + midiTrackInfo->iProgram->setValue(0); + midiTrackInfo->iProgram->blockSignals(false); + } + } + + nprogram = mp->lastValidHWCtrlState(outChannel, CTRL_PROGRAM); + if(nprogram == CTRL_VAL_UNKNOWN) + { + //const char* n = ""; + const QString n(tr("")); + //if(strcmp(midiTrackInfo->iPatch->text().latin1(), n) != 0) + if(midiTrackInfo->iPatch->text() != n) + { + //printf("Arranger::midiTrackInfoHeartBeat setting patch \n"); + + midiTrackInfo->iPatch->setText(n); + } + } + else + { + MidiInstrument* instr = mp->instrument(); + const char* name = instr->getPatchName(outChannel, nprogram, song->mtype(), track->type() == Track::DRUM); + if(!name) + { + if(midiTrackInfo->iPatch->text() != ("???")) + midiTrackInfo->iPatch->setText("???"); + } + else + if(strcmp(midiTrackInfo->iPatch->text().latin1(), name) != 0) + { + //printf("Arranger::midiTrackInfoHeartBeat setting patch name\n"); + + midiTrackInfo->iPatch->setText(name); + } + } + } + else + if(program != nprogram) + { + program = nprogram; + + //int hb, lb, pr; + //if (program == CTRL_VAL_UNKNOWN) { + // hb = lb = pr = 0; + // iPatch->setText("---"); + // } + //else + //{ + MidiInstrument* instr = mp->instrument(); + const char* name = instr->getPatchName(outChannel, program, song->mtype(), track->type() == Track::DRUM); + if(strcmp(midiTrackInfo->iPatch->text().latin1(), name) != 0) + midiTrackInfo->iPatch->setText(QString(name)); + + int hb = ((program >> 16) & 0xff) + 1; + if (hb == 0x100) + hb = 0; + int lb = ((program >> 8) & 0xff) + 1; + if (lb == 0x100) + lb = 0; + int pr = (program & 0xff) + 1; + if (pr == 0x100) + pr = 0; + //} + + //printf("Arranger::midiTrackInfoHeartBeat setting program\n"); + + if(midiTrackInfo->iHBank->value() != hb) + { + midiTrackInfo->iHBank->blockSignals(true); + midiTrackInfo->iHBank->setValue(hb); + midiTrackInfo->iHBank->blockSignals(false); + } + if(midiTrackInfo->iLBank->value() != lb) + { + midiTrackInfo->iLBank->blockSignals(true); + midiTrackInfo->iLBank->setValue(lb); + midiTrackInfo->iLBank->blockSignals(false); + } + if(midiTrackInfo->iProgram->value() != pr) + { + midiTrackInfo->iProgram->blockSignals(true); + midiTrackInfo->iProgram->setValue(pr); + midiTrackInfo->iProgram->blockSignals(false); + } + + } + + MidiController* mc = mp->midiController(CTRL_VOLUME); + int mn = mc->minVal(); + int v = mp->hwCtrlState(outChannel, CTRL_VOLUME); + if(v == CTRL_VAL_UNKNOWN) + //{ + //v = mc->initVal(); + //if(v == CTRL_VAL_UNKNOWN) + // v = 0; + v = mn - 1; + //} + else + // Auto bias... + v -= mc->bias(); + if(volume != v) + { + volume = v; + if(midiTrackInfo->iLautst->value() != v) + { + //printf("Arranger::midiTrackInfoHeartBeat setting volume\n"); + + midiTrackInfo->iLautst->blockSignals(true); + //midiTrackInfo->iLautst->setRange(mn - 1, mc->maxVal()); + midiTrackInfo->iLautst->setValue(v); + midiTrackInfo->iLautst->blockSignals(false); + } + } + + mc = mp->midiController(CTRL_PANPOT); + mn = mc->minVal(); + v = mp->hwCtrlState(outChannel, CTRL_PANPOT); + if(v == CTRL_VAL_UNKNOWN) + //{ + //v = mc->initVal(); + //if(v == CTRL_VAL_UNKNOWN) + // v = 0; + v = mn - 1; + //} + else + // Auto bias... + v -= mc->bias(); + if(pan != v) + { + pan = v; + if(midiTrackInfo->iPan->value() != v) + { + //printf("Arranger::midiTrackInfoHeartBeat setting pan\n"); + + midiTrackInfo->iPan->blockSignals(true); + //midiTrackInfo->iPan->setRange(mn - 1, mc->maxVal()); + midiTrackInfo->iPan->setValue(v); + midiTrackInfo->iPan->blockSignals(false); + } + } + + // Does it include a midi controller value adjustment? Then handle it... + //if(flags & SC_MIDI_CONTROLLER) + // seek(); + + /* + if(midiTrackInfo->iTransp->value() != track->transposition) + midiTrackInfo->iTransp->setValue(track->transposition); + if(midiTrackInfo->iAnschl->value() != track->velocity) + midiTrackInfo->iAnschl->setValue(track->velocity); + if(midiTrackInfo->iVerz->value() != track->delay) + midiTrackInfo->iVerz->setValue(track->delay); + if(midiTrackInfo->iLen->value() != track->len) + midiTrackInfo->iLen->setValue(track->len); + if(midiTrackInfo->iKompr->value() != track->compression) + midiTrackInfo->iKompr->setValue(track->compression); + */ + } + break; + + case Track::WAVE: + case Track::AUDIO_OUTPUT: + case Track::AUDIO_INPUT: + case Track::AUDIO_GROUP: + case Track::AUDIO_AUX: + case Track::AUDIO_SOFTSYNTH: + break; + } +} + +//--------------------------------------------------------- +// showTrackInfo +//--------------------------------------------------------- + +void Arranger::showTrackInfo(bool flag) + { + showTrackinfoFlag = flag; + trackInfo->setShown(flag); + infoScroll->setShown(flag); + updateTrackInfo(-1); + } + +//--------------------------------------------------------- +// genTrackInfo +//--------------------------------------------------------- + +void Arranger::genTrackInfo(QWidget* parent) + { + trackInfo = new WidgetStack(parent, "trackInfoStack"); + + noTrackInfo = new QWidget(trackInfo); + QPixmap *noInfoPix = new QPixmap(160, 1000); //muse_leftside_logo_xpm); + const QPixmap *logo = new QPixmap(muse_leftside_logo_xpm); + noInfoPix->fill(noTrackInfo->paletteBackgroundColor() ); + copyBlt(noInfoPix, 10, 0, logo, 0,0, logo->width(), logo->height()); + noTrackInfo->setPaletteBackgroundPixmap(*noInfoPix); + noTrackInfo->setGeometry(0, 0, 65, 200); + noTrackInfo->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding)); + + midiTrackInfo = new MidiTrackInfo(trackInfo); + trackInfo->addWidget(noTrackInfo, 0); + trackInfo->addWidget(midiTrackInfo, 1); + trackInfo->addWidget(0, 2); + + genMidiTrackInfo(); + } + +//--------------------------------------------------------- +// updateTrackInfo +//--------------------------------------------------------- + +void Arranger::updateTrackInfo(int flags) + { + if (!showTrackinfoFlag) { + switchInfo(-1); + return; + } + if (selected == 0) { + switchInfo(0); + return; + } + if (selected->isMidiTrack()) { + switchInfo(1); + updateMidiTrackInfo(flags); + } + else { + switchInfo(2); + } + } + +//--------------------------------------------------------- +// switchInfo +//--------------------------------------------------------- + +void Arranger::switchInfo(int n) + { + if (n == 2) { + AudioStrip* w = (AudioStrip*)(trackInfo->getWidget(2)); + if (w == 0 || selected != w->getTrack()) { + if (w) + delete w; + w = new AudioStrip(trackInfo, (AudioTrack*)selected); + connect(song, SIGNAL(songChanged(int)), w, SLOT(songChanged(int))); + connect(muse, SIGNAL(configChanged()), w, SLOT(configChanged())); + w->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed)); + trackInfo->addWidget(w, 2); + w->show(); + tgrid->activate(); + } + } + if (trackInfo->curIdx() == n) + return; + trackInfo->raiseWidget(n); + tgrid->activate(); + } + +//--------------------------------------------------------- +// setTrackInfoLabelText +//--------------------------------------------------------- + +void Arranger::setTrackInfoLabelText() +{ + MidiTrack* track = (MidiTrack*)selected; + if(track) + midiTrackInfo->trackNameLabel->setText(track->name()); + else + midiTrackInfo->trackNameLabel->setText(QString()); +} + +//--------------------------------------------------------- +// setTrackInfoLabelFont +//--------------------------------------------------------- + +void Arranger::setTrackInfoLabelFont() +{ + MidiTrack* track = (MidiTrack*)selected; + if(!track) + return; + + // Use the new font #6 I created just for these labels (so far). + // Set the label's font. + midiTrackInfo->trackNameLabel->setFont(config.fonts[6]); + // Dealing with a horizontally constrained label. Ignore vertical. Use a minimum readable point size. + //autoAdjustFontSize(midiTrackInfo->trackNameLabel, midiTrackInfo->trackNameLabel->text(), false, true, config.fonts[6].pointSize(), 5); ddskrjo +} + +// Removed by Tim. p3.3.9 + +/* +//--------------------------------------------------------- +// iNameChanged +//--------------------------------------------------------- + +void Arranger::iNameChanged() + { + QString txt = midiTrackInfo->iName->text(); + if (txt == selected->name()) + return; + + TrackList* tl = song->tracks(); + for(iTrack i = tl->begin(); i != tl->end(); ++i) + { + if((*i)->name() == txt) + { + // Restore the text. + midiTrackInfo->iName->blockSignals(true); + midiTrackInfo->iName->setText(selected->name()); + midiTrackInfo->iName->blockSignals(false); + + QMessageBox::critical(this, + tr("MusE: bad trackname"), + tr("please choose a unique track name"), + QMessageBox::Ok, + QMessageBox::NoButton, + QMessageBox::NoButton); + + midiTrackInfo->iName->setFocus(); + return; + } + } + + //Track* track = selected->clone(); + Track* track = selected->clone(false); + selected->setName(txt); + audio->msgChangeTrack(track, selected); + } +*/ + +//--------------------------------------------------------- +// iOutputChannelChanged +//--------------------------------------------------------- + +void Arranger::iOutputChannelChanged(int channel) + { + --channel; + MidiTrack* track = (MidiTrack*)selected; + if (channel != track->outChannel()) { + // Changed by T356. + //track->setOutChannel(channel); + audio->msgIdle(true); + //audio->msgSetTrackOutChannel(track, channel); + track->setOutChanAndUpdate(channel); + audio->msgIdle(false); + + // may result in adding/removing mixer strip: + //song->update(-1); + song->update(SC_MIDI_CHANNEL); + } + } + +/* +//--------------------------------------------------------- +// iKanalChanged +//--------------------------------------------------------- + +void Arranger::iInputChannelChanged(const QString& s) + { + MidiTrack* track = (MidiTrack*)selected; + int val = string2bitmap(s); + if (val != track->inChannelMask()) { + track->setInChannelMask(val); + list->redraw(); + } + } +*/ + +//--------------------------------------------------------- +// iOutputPortChanged +//--------------------------------------------------------- + +void Arranger::iOutputPortChanged(int index) + { + MidiTrack* track = (MidiTrack*)selected; + if (index == track->outPort()) + return; + // Changed by T356. + //track->setOutPort(index); + audio->msgIdle(true); + //audio->msgSetTrackOutPort(track, index); + track->setOutPortAndUpdate(index); + audio->msgIdle(false); + + list->redraw(); + } + +/* +//--------------------------------------------------------- +// iInputPortChanged +//--------------------------------------------------------- + +void Arranger::iInputPortChanged(const QString& s) + { + // Changed by Tim. p3.3.8 + //int val = string2bitmap(s); + unsigned int val = string2u32bitmap(s); + + MidiTrack* track = (MidiTrack*)selected; + if (val == track->inPortMask()) + return; + track->setInPortMask(val); + list->redraw(); + } +*/ + +//--------------------------------------------------------- +// routingPopupMenuActivated +//--------------------------------------------------------- + +void Arranger::routingPopupMenuActivated(int n) +{ + //if(gRoutingPopupMenuMaster != this || !track || !track->isMidiTrack()) + if(!midiTrackInfo || gRoutingPopupMenuMaster != midiTrackInfo || !selected || !selected->isMidiTrack()) + return; + //if (n > 999) { + //if (n >= MIDI_PORTS * MIDI_CHANNELS) { // p3.3.50 + // for (int i = 0; i < MIDI_CHANNELS; i++) + //muse->routingPopupMenuActivated(selected, i + MIDI_CHANNELS * (n-1000)); + // muse->routingPopupMenuActivated(selected, i + MIDI_CHANNELS * (n - MIDI_PORTS * MIDI_CHANNELS)); // p3.3.50 + //} + //else { + muse->routingPopupMenuActivated(selected, n); + //} +} + +//--------------------------------------------------------- +// inRoutesPressed +//--------------------------------------------------------- + +void Arranger::inRoutesPressed() +{ + if(!selected) + return; + + ///song->chooseMidiRoutes(midiTrackInfo->iRButton, (MidiTrack*)selected, false); + + if(!selected->isMidiTrack()) + return; + + //song->chooseMidiRoutes(iR, (MidiTrack*)track, false); + PopupMenu* pup = muse->prepareRoutingPopupMenu(selected, false); + if(!pup) + return; + + //pup->disconnect(); + //gRoutingPopupMenuMaster = this; + gRoutingPopupMenuMaster = midiTrackInfo; + connect(pup, SIGNAL(activated(int)), SLOT(routingPopupMenuActivated(int))); + // Nope, can't clear menu and mm list in there, sub-menus stay open. Never mind for now... + connect(pup, SIGNAL(aboutToHide()), muse, SLOT(routingPopupMenuAboutToHide())); + pup->popup(QCursor::pos(), 0); + midiTrackInfo->iRButton->setDown(false); + return; +} + +//--------------------------------------------------------- +// outRoutesPressed +//--------------------------------------------------------- + +void Arranger::outRoutesPressed() +{ + if(!selected) + return; + + ///song->chooseMidiRoutes(midiTrackInfo->oRButton, (MidiTrack*)selected, true); + + if(!selected->isMidiTrack()) + return; + + //song->chooseMidiRoutes(iR, (MidiTrack*)track, false); + PopupMenu* pup = muse->prepareRoutingPopupMenu(selected, true); + if(!pup) + return; + + //pup->disconnect(); + //gRoutingPopupMenuMaster = this; + gRoutingPopupMenuMaster = midiTrackInfo; + connect(pup, SIGNAL(activated(int)), SLOT(routingPopupMenuActivated(int))); + // Nope, can't clear menu and mm list in there, sub-menus stay open. Never mind for now... + connect(pup, SIGNAL(aboutToHide()), muse, SLOT(routingPopupMenuAboutToHide())); + pup->popup(QCursor::pos(), 0); + midiTrackInfo->oRButton->setDown(false); + return; +} + +//--------------------------------------------------------- +// iProgHBankChanged +//--------------------------------------------------------- + +void Arranger::iProgHBankChanged() + { + MidiTrack* track = (MidiTrack*)selected; + int channel = track->outChannel(); + int port = track->outPort(); + int hbank = midiTrackInfo->iHBank->value(); + int lbank = midiTrackInfo->iLBank->value(); + int prog = midiTrackInfo->iProgram->value(); + + if (hbank > 0 && hbank < 129) + hbank -= 1; + else + hbank = 0xff; + if (lbank > 0 && lbank < 129) + lbank -= 1; + else + lbank = 0xff; + if (prog > 0 && prog < 129) + prog -= 1; + else + prog = 0xff; + + MidiPort* mp = &midiPorts[port]; + if(prog == 0xff && hbank == 0xff && lbank == 0xff) + { + program = CTRL_VAL_UNKNOWN; + if(mp->hwCtrlState(channel, CTRL_PROGRAM) != CTRL_VAL_UNKNOWN) + audio->msgSetHwCtrlState(mp, channel, CTRL_PROGRAM, CTRL_VAL_UNKNOWN); + return; + } + + int np = mp->hwCtrlState(channel, CTRL_PROGRAM); + if(np == CTRL_VAL_UNKNOWN) + { + np = mp->lastValidHWCtrlState(channel, CTRL_PROGRAM); + if(np != CTRL_VAL_UNKNOWN) + { + lbank = (np & 0xff00) >> 8; + prog = np & 0xff; + if(prog == 0xff) + prog = 0; + int ilbnk = lbank; + int iprog = prog; + if(ilbnk == 0xff) + ilbnk = -1; + ++ilbnk; + ++iprog; + midiTrackInfo->iLBank->blockSignals(true); + midiTrackInfo->iProgram->blockSignals(true); + midiTrackInfo->iLBank->setValue(ilbnk); + midiTrackInfo->iProgram->setValue(iprog); + midiTrackInfo->iLBank->blockSignals(false); + midiTrackInfo->iProgram->blockSignals(false); + } + } + + if(prog == 0xff && (hbank != 0xff || lbank != 0xff)) + { + prog = 0; + midiTrackInfo->iProgram->blockSignals(true); + midiTrackInfo->iProgram->setValue(1); + midiTrackInfo->iProgram->blockSignals(false); + } + program = (hbank << 16) + (lbank << 8) + prog; + MidiPlayEvent ev(0, port, channel, ME_CONTROLLER, CTRL_PROGRAM, program); + audio->msgPlayMidiEvent(&ev); + + MidiInstrument* instr = mp->instrument(); + const char* name = instr->getPatchName(channel, program, song->mtype(), track->type() == Track::DRUM); + midiTrackInfo->iPatch->setText(QString(name)); +// updateTrackInfo(); + } + +//--------------------------------------------------------- +// iProgLBankChanged +//--------------------------------------------------------- + +void Arranger::iProgLBankChanged() + { + MidiTrack* track = (MidiTrack*)selected; + int channel = track->outChannel(); + int port = track->outPort(); + int hbank = midiTrackInfo->iHBank->value(); + int lbank = midiTrackInfo->iLBank->value(); + int prog = midiTrackInfo->iProgram->value(); + + if (hbank > 0 && hbank < 129) + hbank -= 1; + else + hbank = 0xff; + if (lbank > 0 && lbank < 129) + lbank -= 1; + else + lbank = 0xff; + if (prog > 0 && prog < 129) + prog -= 1; + else + prog = 0xff; + + MidiPort* mp = &midiPorts[port]; + if(prog == 0xff && hbank == 0xff && lbank == 0xff) + { + program = CTRL_VAL_UNKNOWN; + if(mp->hwCtrlState(channel, CTRL_PROGRAM) != CTRL_VAL_UNKNOWN) + audio->msgSetHwCtrlState(mp, channel, CTRL_PROGRAM, CTRL_VAL_UNKNOWN); + return; + } + + int np = mp->hwCtrlState(channel, CTRL_PROGRAM); + if(np == CTRL_VAL_UNKNOWN) + { + np = mp->lastValidHWCtrlState(channel, CTRL_PROGRAM); + if(np != CTRL_VAL_UNKNOWN) + { + hbank = (np & 0xff0000) >> 16; + prog = np & 0xff; + if(prog == 0xff) + prog = 0; + int ihbnk = hbank; + int iprog = prog; + if(ihbnk == 0xff) + ihbnk = -1; + ++ihbnk; + ++iprog; + midiTrackInfo->iHBank->blockSignals(true); + midiTrackInfo->iProgram->blockSignals(true); + midiTrackInfo->iHBank->setValue(ihbnk); + midiTrackInfo->iProgram->setValue(iprog); + midiTrackInfo->iHBank->blockSignals(false); + midiTrackInfo->iProgram->blockSignals(false); + } + } + + if(prog == 0xff && (hbank != 0xff || lbank != 0xff)) + { + prog = 0; + midiTrackInfo->iProgram->blockSignals(true); + midiTrackInfo->iProgram->setValue(1); + midiTrackInfo->iProgram->blockSignals(false); + } + program = (hbank << 16) + (lbank << 8) + prog; + MidiPlayEvent ev(0, port, channel, ME_CONTROLLER, CTRL_PROGRAM, program); + audio->msgPlayMidiEvent(&ev); + + MidiInstrument* instr = mp->instrument(); + const char* name = instr->getPatchName(channel, program, song->mtype(), track->type() == Track::DRUM); + midiTrackInfo->iPatch->setText(QString(name)); +// updateTrackInfo(); + } + +//--------------------------------------------------------- +// iProgramChanged +//--------------------------------------------------------- + +void Arranger::iProgramChanged() + { + MidiTrack* track = (MidiTrack*)selected; + int channel = track->outChannel(); + int port = track->outPort(); + int hbank = midiTrackInfo->iHBank->value(); + int lbank = midiTrackInfo->iLBank->value(); + int prog = midiTrackInfo->iProgram->value(); + + if (hbank > 0 && hbank < 129) + hbank -= 1; + else + hbank = 0xff; + if (lbank > 0 && lbank < 129) + lbank -= 1; + else + lbank = 0xff; + if (prog > 0 && prog < 129) + prog -= 1; + else + prog = 0xff; + + MidiPort *mp = &midiPorts[port]; + if(prog == 0xff) + { + program = CTRL_VAL_UNKNOWN; + midiTrackInfo->iHBank->blockSignals(true); + midiTrackInfo->iLBank->blockSignals(true); + midiTrackInfo->iHBank->setValue(0); + midiTrackInfo->iLBank->setValue(0); + midiTrackInfo->iHBank->blockSignals(false); + midiTrackInfo->iLBank->blockSignals(false); + + if(mp->hwCtrlState(channel, CTRL_PROGRAM) != CTRL_VAL_UNKNOWN) + audio->msgSetHwCtrlState(mp, channel, CTRL_PROGRAM, CTRL_VAL_UNKNOWN); + return; + } + else + { + int np = mp->hwCtrlState(channel, CTRL_PROGRAM); + if(np == CTRL_VAL_UNKNOWN) + { + np = mp->lastValidHWCtrlState(channel, CTRL_PROGRAM); + if(np != CTRL_VAL_UNKNOWN) + { + hbank = (np & 0xff0000) >> 16; + lbank = (np & 0xff00) >> 8; + int ihbnk = hbank; + int ilbnk = lbank; + if(ihbnk == 0xff) + ihbnk = -1; + if(ilbnk == 0xff) + ilbnk = -1; + ++ihbnk; + ++ilbnk; + midiTrackInfo->iHBank->blockSignals(true); + midiTrackInfo->iLBank->blockSignals(true); + midiTrackInfo->iHBank->setValue(ihbnk); + midiTrackInfo->iLBank->setValue(ilbnk); + midiTrackInfo->iHBank->blockSignals(false); + midiTrackInfo->iLBank->blockSignals(false); + } + } + program = (hbank << 16) + (lbank << 8) + prog; + MidiPlayEvent ev(0, port, channel, ME_CONTROLLER, CTRL_PROGRAM, program); + audio->msgPlayMidiEvent(&ev); + + MidiInstrument* instr = mp->instrument(); + const char* name = instr->getPatchName(channel, program, song->mtype(), track->type() == Track::DRUM); + midiTrackInfo->iPatch->setText(QString(name)); + } + +// updateTrackInfo(); + } + +//--------------------------------------------------------- +// iLautstChanged +//--------------------------------------------------------- + +void Arranger::iLautstChanged(int val) + { + MidiTrack* track = (MidiTrack*)selected; + int outPort = track->outPort(); + int chan = track->outChannel(); + MidiPort* mp = &midiPorts[outPort]; + MidiController* mctl = mp->midiController(CTRL_VOLUME); + if((val < mctl->minVal()) || (val > mctl->maxVal())) + { + if(mp->hwCtrlState(chan, CTRL_VOLUME) != CTRL_VAL_UNKNOWN) + audio->msgSetHwCtrlState(mp, chan, CTRL_VOLUME, CTRL_VAL_UNKNOWN); + } + else + { + val += mctl->bias(); + + MidiPlayEvent ev(0, outPort, chan, + ME_CONTROLLER, CTRL_VOLUME, val); + audio->msgPlayMidiEvent(&ev); + } + song->update(SC_MIDI_CONTROLLER); + } + +//--------------------------------------------------------- +// iTranspChanged +//--------------------------------------------------------- + +void Arranger::iTranspChanged(int val) + { + MidiTrack* track = (MidiTrack*)selected; + track->transposition = val; + } + +//--------------------------------------------------------- +// iAnschlChanged +//--------------------------------------------------------- + +void Arranger::iAnschlChanged(int val) + { + MidiTrack* track = (MidiTrack*)selected; + track->velocity = val; + } + +//--------------------------------------------------------- +// iVerzChanged +//--------------------------------------------------------- + +void Arranger::iVerzChanged(int val) + { + MidiTrack* track = (MidiTrack*)selected; + track->delay = val; + } + +//--------------------------------------------------------- +// iLenChanged +//--------------------------------------------------------- + +void Arranger::iLenChanged(int val) + { + MidiTrack* track = (MidiTrack*)selected; + track->len = val; + } + +//--------------------------------------------------------- +// iKomprChanged +//--------------------------------------------------------- + +void Arranger::iKomprChanged(int val) + { + MidiTrack* track = (MidiTrack*)selected; + track->compression = val; + } + +//--------------------------------------------------------- +// iPanChanged +//--------------------------------------------------------- + +void Arranger::iPanChanged(int val) + { + MidiTrack* track = (MidiTrack*)selected; + int port = track->outPort(); + int chan = track->outChannel(); + MidiPort* mp = &midiPorts[port]; + MidiController* mctl = mp->midiController(CTRL_PANPOT); + if((val < mctl->minVal()) || (val > mctl->maxVal())) + { + if(mp->hwCtrlState(chan, CTRL_PANPOT) != CTRL_VAL_UNKNOWN) + audio->msgSetHwCtrlState(mp, chan, CTRL_PANPOT, CTRL_VAL_UNKNOWN); + } + else + { + val += mctl->bias(); + + // Realtime Change: + MidiPlayEvent ev(0, port, chan, + ME_CONTROLLER, CTRL_PANPOT, val); + audio->msgPlayMidiEvent(&ev); + } + song->update(SC_MIDI_CONTROLLER); + } + +//--------------------------------------------------------- +// instrPopup +//--------------------------------------------------------- + +void Arranger::instrPopup() + { + MidiTrack* track = (MidiTrack*)selected; + int channel = track->outChannel(); + int port = track->outPort(); + MidiInstrument* instr = midiPorts[port].instrument(); + instr->populatePatchPopup(pop, channel, song->mtype(), track->type() == Track::DRUM); + + if(pop->count() == 0) + return; + int rv = pop->exec(midiTrackInfo->iPatch->mapToGlobal(QPoint(10,5))); + if (rv != -1) { + MidiPlayEvent ev(0, port, channel, ME_CONTROLLER, CTRL_PROGRAM, rv); + audio->msgPlayMidiEvent(&ev); + updateTrackInfo(-1); + } + } + +//--------------------------------------------------------- +// recEchoToggled +//--------------------------------------------------------- + +void Arranger::recEchoToggled(bool v) +{ + MidiTrack* track = (MidiTrack*)selected; + track->setRecEcho(v); + + //song->update(SC_???); +} + +//--------------------------------------------------------- +// iProgramDoubleClicked +//--------------------------------------------------------- + +void Arranger::iProgramDoubleClicked() +{ + MidiTrack* track = (MidiTrack*)selected; + int port = track->outPort(); + int chan = track->outChannel(); + MidiPort* mp = &midiPorts[port]; + MidiController* mctl = mp->midiController(CTRL_PROGRAM); + + if(!track || !mctl) + return; + + int lastv = mp->lastValidHWCtrlState(chan, CTRL_PROGRAM); + int curv = mp->hwCtrlState(chan, CTRL_PROGRAM); + + if(curv == CTRL_VAL_UNKNOWN) + { + // If no value has ever been set yet, use the current knob value + // (or the controller's initial value?) to 'turn on' the controller. + if(lastv == CTRL_VAL_UNKNOWN) + { + int kiv = mctl->initVal(); + //int kiv = lrint(_knob->value()); + if(kiv == CTRL_VAL_UNKNOWN) + kiv = 0; + //else + //{ + //if(kiv < mctrl->minVal()) + // kiv = mctrl->minVal(); + //if(kiv > mctrl->maxVal()) + // kiv = mctrl->maxVal(); + //kiv += mctrl->bias(); + //} + + //MidiPlayEvent ev(0, port, chan, ME_CONTROLLER, num, kiv); + MidiPlayEvent ev(0, port, chan, ME_CONTROLLER, CTRL_PROGRAM, kiv); + audio->msgPlayMidiEvent(&ev); + } + else + { + MidiPlayEvent ev(0, port, chan, ME_CONTROLLER, CTRL_PROGRAM, lastv); + audio->msgPlayMidiEvent(&ev); + } + } + else + { + if(mp->hwCtrlState(chan, CTRL_PROGRAM) != CTRL_VAL_UNKNOWN) + audio->msgSetHwCtrlState(mp, chan, CTRL_PROGRAM, CTRL_VAL_UNKNOWN); + } + + song->update(SC_MIDI_CONTROLLER); +} + +//--------------------------------------------------------- +// iLautstDoubleClicked +//--------------------------------------------------------- + +void Arranger::iLautstDoubleClicked() +{ + MidiTrack* track = (MidiTrack*)selected; + int port = track->outPort(); + int chan = track->outChannel(); + MidiPort* mp = &midiPorts[port]; + MidiController* mctl = mp->midiController(CTRL_VOLUME); + + if(!track || !mctl) + return; + + int lastv = mp->lastValidHWCtrlState(chan, CTRL_VOLUME); + int curv = mp->hwCtrlState(chan, CTRL_VOLUME); + + if(curv == CTRL_VAL_UNKNOWN) + { + // If no value has ever been set yet, use the current knob value + // (or the controller's initial value?) to 'turn on' the controller. + if(lastv == CTRL_VAL_UNKNOWN) + { + int kiv = mctl->initVal(); + //int kiv = lrint(_knob->value()); + if(kiv == CTRL_VAL_UNKNOWN) + // Set volume to 78% of range, so that if range is 0 - 127, then value is 100. + kiv = lround(double(mctl->maxVal() - mctl->minVal()) * 0.7874); + else + { + if(kiv < mctl->minVal()) + kiv = mctl->minVal(); + if(kiv > mctl->maxVal()) + kiv = mctl->maxVal(); + kiv += mctl->bias(); + } + + MidiPlayEvent ev(0, port, chan, ME_CONTROLLER, CTRL_VOLUME, kiv); + audio->msgPlayMidiEvent(&ev); + } + else + { + MidiPlayEvent ev(0, port, chan, ME_CONTROLLER, CTRL_VOLUME, lastv); + audio->msgPlayMidiEvent(&ev); + } + } + else + { + if(mp->hwCtrlState(chan, CTRL_VOLUME) != CTRL_VAL_UNKNOWN) + audio->msgSetHwCtrlState(mp, chan, CTRL_VOLUME, CTRL_VAL_UNKNOWN); + } + + song->update(SC_MIDI_CONTROLLER); +} + +//--------------------------------------------------------- +// iPanDoubleClicked +//--------------------------------------------------------- + +void Arranger::iPanDoubleClicked() +{ + MidiTrack* track = (MidiTrack*)selected; + int port = track->outPort(); + int chan = track->outChannel(); + MidiPort* mp = &midiPorts[port]; + MidiController* mctl = mp->midiController(CTRL_PANPOT); + + if(!track || !mctl) + return; + + int lastv = mp->lastValidHWCtrlState(chan, CTRL_PANPOT); + int curv = mp->hwCtrlState(chan, CTRL_PANPOT); + + if(curv == CTRL_VAL_UNKNOWN) + { + // If no value has ever been set yet, use the current knob value + // (or the controller's initial value?) to 'turn on' the controller. + if(lastv == CTRL_VAL_UNKNOWN) + { + int kiv = mctl->initVal(); + //int kiv = lrint(_knob->value()); + if(kiv == CTRL_VAL_UNKNOWN) + // Set volume to 50% of range, so that if range is 0 - 127, then value is 64. + kiv = lround(double(mctl->maxVal() - mctl->minVal()) * 0.5); + else + { + if(kiv < mctl->minVal()) + kiv = mctl->minVal(); + if(kiv > mctl->maxVal()) + kiv = mctl->maxVal(); + kiv += mctl->bias(); + } + + MidiPlayEvent ev(0, port, chan, ME_CONTROLLER, CTRL_PANPOT, kiv); + audio->msgPlayMidiEvent(&ev); + } + else + { + MidiPlayEvent ev(0, port, chan, ME_CONTROLLER, CTRL_PANPOT, lastv); + audio->msgPlayMidiEvent(&ev); + } + } + else + { + if(mp->hwCtrlState(chan, CTRL_PANPOT) != CTRL_VAL_UNKNOWN) + audio->msgSetHwCtrlState(mp, chan, CTRL_PANPOT, CTRL_VAL_UNKNOWN); + } + + song->update(SC_MIDI_CONTROLLER); +} + +//--------------------------------------------------------- +// genMidiTrackInfo +//--------------------------------------------------------- + +void Arranger::genMidiTrackInfo() + { + //midiTrackInfo->iChanDetectLabel->setPixmap(*darkgreendotIcon); + midiTrackInfo->iChanDetectLabel->setPixmap(*darkRedLedIcon); + + QIcon recEchoIconSet; + recEchoIconSet.setPixmap(*recEchoIconOn, QIcon::Automatic, QIcon::Normal, QIcon::On); + recEchoIconSet.setPixmap(*recEchoIconOff, QIcon::Automatic, QIcon::Normal, QIcon::Off); + midiTrackInfo->recEchoButton->setIconSet(recEchoIconSet); + + //midiTrackInfo->trackNameLabel->setAlignment(AlignCenter | WordBreak); + //midiTrackInfo->trackNameLabel->setSizePolicy(QSizePolicy(QSizePolicy::Ignored, QSizePolicy::Minimum)); + //frameShape WinPanel + //frameShadow Raised + //lineWidth 1 + //midLineWidth 0 + midiTrackInfo->trackNameLabel->setBackgroundColor(QColor(0, 160, 255)); // Med blue + + // Added by Tim. p3.3.9 + setTrackInfoLabelText(); + setTrackInfoLabelFont(); + + + connect(midiTrackInfo->iPatch, SIGNAL(released()), SLOT(instrPopup())); + + pop = new Q3PopupMenu(midiTrackInfo->iPatch); + pop->setCheckable(false); + + // Removed by Tim. p3.3.9 + //connect(midiTrackInfo->iName, SIGNAL(returnPressed()), SLOT(iNameChanged())); + + connect(midiTrackInfo->iOutputChannel, SIGNAL(valueChanged(int)), SLOT(iOutputChannelChanged(int))); + ///connect(midiTrackInfo->iInputChannel, SIGNAL(textChanged(const QString&)), SLOT(iInputChannelChanged(const QString&))); + connect(midiTrackInfo->iHBank, SIGNAL(valueChanged(int)), SLOT(iProgHBankChanged())); + connect(midiTrackInfo->iLBank, SIGNAL(valueChanged(int)), SLOT(iProgLBankChanged())); + connect(midiTrackInfo->iProgram, SIGNAL(valueChanged(int)), SLOT(iProgramChanged())); + connect(midiTrackInfo->iHBank, SIGNAL(doubleClicked()), SLOT(iProgramDoubleClicked())); + connect(midiTrackInfo->iLBank, SIGNAL(doubleClicked()), SLOT(iProgramDoubleClicked())); + connect(midiTrackInfo->iProgram, SIGNAL(doubleClicked()), SLOT(iProgramDoubleClicked())); + connect(midiTrackInfo->iLautst, SIGNAL(valueChanged(int)), SLOT(iLautstChanged(int))); + connect(midiTrackInfo->iLautst, SIGNAL(doubleClicked()), SLOT(iLautstDoubleClicked())); + connect(midiTrackInfo->iTransp, SIGNAL(valueChanged(int)), SLOT(iTranspChanged(int))); + connect(midiTrackInfo->iAnschl, SIGNAL(valueChanged(int)), SLOT(iAnschlChanged(int))); + connect(midiTrackInfo->iVerz, SIGNAL(valueChanged(int)), SLOT(iVerzChanged(int))); + connect(midiTrackInfo->iLen, SIGNAL(valueChanged(int)), SLOT(iLenChanged(int))); + connect(midiTrackInfo->iKompr, SIGNAL(valueChanged(int)), SLOT(iKomprChanged(int))); + connect(midiTrackInfo->iPan, SIGNAL(valueChanged(int)), SLOT(iPanChanged(int))); + connect(midiTrackInfo->iPan, SIGNAL(doubleClicked()), SLOT(iPanDoubleClicked())); + connect(midiTrackInfo->iOutput, SIGNAL(activated(int)), SLOT(iOutputPortChanged(int))); + ///connect(midiTrackInfo->iInput, SIGNAL(textChanged(const QString&)), SLOT(iInputPortChanged(const QString&))); + connect(midiTrackInfo->recordButton, SIGNAL(clicked()), SLOT(recordClicked())); + connect(midiTrackInfo->progRecButton, SIGNAL(clicked()), SLOT(progRecClicked())); + connect(midiTrackInfo->volRecButton, SIGNAL(clicked()), SLOT(volRecClicked())); + connect(midiTrackInfo->panRecButton, SIGNAL(clicked()), SLOT(panRecClicked())); + connect(midiTrackInfo->recEchoButton, SIGNAL(toggled(bool)), SLOT(recEchoToggled(bool))); + connect(midiTrackInfo->iRButton, SIGNAL(pressed()), SLOT(inRoutesPressed())); + + // TODO: Works OK, but disabled for now, until we figure out what to do about multiple out routes and display values... + midiTrackInfo->oRButton->setEnabled(false); + connect(midiTrackInfo->oRButton, SIGNAL(pressed()), SLOT(outRoutesPressed())); + + connect(heartBeatTimer, SIGNAL(timeout()), SLOT(midiTrackInfoHeartBeat())); + } + +//--------------------------------------------------------- +// updateMidiTrackInfo +//--------------------------------------------------------- + +void Arranger::updateMidiTrackInfo(int flags) +{ + MidiTrack* track = (MidiTrack*)selected; + + // Is it simply a midi controller value adjustment? Forget it. + if(flags == SC_MIDI_CONTROLLER) + return; + + // p3.3.47 Update the routing popup menu if anything relevant changes. + //if(gRoutingPopupMenuMaster == midiTrackInfo && selected && (flags & (SC_ROUTE | SC_CHANNELS | SC_CONFIG))) + if(flags & (SC_ROUTE | SC_CHANNELS | SC_CONFIG)) // p3.3.50 + // Use this handy shared routine. + //muse->updateRouteMenus(selected); + muse->updateRouteMenus(selected, midiTrackInfo); // p3.3.50 + + // Added by Tim. p3.3.9 + setTrackInfoLabelText(); + setTrackInfoLabelFont(); + + //{ + int outChannel = track->outChannel(); + ///int inChannel = track->inChannelMask(); + int outPort = track->outPort(); + //int inPort = track->inPortMask(); + ///unsigned int inPort = track->inPortMask(); + + //midiTrackInfo->iInput->clear(); + midiTrackInfo->iOutput->clear(); + + for (int i = 0; i < MIDI_PORTS; ++i) { + QString name; + name.sprintf("%d:%s", i+1, midiPorts[i].portname().latin1()); + midiTrackInfo->iOutput->insertItem(name, i); + if (i == outPort) + midiTrackInfo->iOutput->setCurrentItem(i); + } + //midiTrackInfo->iInput->setText(bitmap2String(inPort)); + ///midiTrackInfo->iInput->setText(u32bitmap2String(inPort)); + + //midiTrackInfo->iInputChannel->setText(bitmap2String(inChannel)); + + // Removed by Tim. p3.3.9 + //if (midiTrackInfo->iName->text() != selected->name()) { + // midiTrackInfo->iName->setText(selected->name()); + // midiTrackInfo->iName->home(false); + // } + + midiTrackInfo->iOutputChannel->setValue(outChannel+1); + ///midiTrackInfo->iInputChannel->setText(bitmap2String(inChannel)); + + // Set record echo. + if(midiTrackInfo->recEchoButton->isOn() != track->recEcho()) + { + midiTrackInfo->recEchoButton->blockSignals(true); + midiTrackInfo->recEchoButton->setOn(track->recEcho()); + midiTrackInfo->recEchoButton->blockSignals(false); + } + + MidiPort* mp = &midiPorts[outPort]; + int nprogram = mp->hwCtrlState(outChannel, CTRL_PROGRAM); + if(nprogram == CTRL_VAL_UNKNOWN) + { + midiTrackInfo->iHBank->blockSignals(true); + midiTrackInfo->iLBank->blockSignals(true); + midiTrackInfo->iProgram->blockSignals(true); + midiTrackInfo->iHBank->setValue(0); + midiTrackInfo->iLBank->setValue(0); + midiTrackInfo->iProgram->setValue(0); + midiTrackInfo->iHBank->blockSignals(false); + midiTrackInfo->iLBank->blockSignals(false); + midiTrackInfo->iProgram->blockSignals(false); + + program = CTRL_VAL_UNKNOWN; + nprogram = mp->lastValidHWCtrlState(outChannel, CTRL_PROGRAM); + if(nprogram == CTRL_VAL_UNKNOWN) + //midiTrackInfo->iPatch->setText(QString("")); + midiTrackInfo->iPatch->setText(tr("")); + else + { + MidiInstrument* instr = mp->instrument(); + const char* name = instr->getPatchName(outChannel, nprogram, song->mtype(), track->type() == Track::DRUM); + midiTrackInfo->iPatch->setText(QString(name)); + } + } + else + //if (program != nprogram) + { + program = nprogram; + + //int hb, lb, pr; + //if (program == CTRL_VAL_UNKNOWN) { + // hb = lb = pr = 0; + // midiTrackInfo->iPatch->setText("---"); + // } + //else + //{ + MidiInstrument* instr = mp->instrument(); + const char* name = instr->getPatchName(outChannel, program, song->mtype(), track->type() == Track::DRUM); + midiTrackInfo->iPatch->setText(QString(name)); + + int hb = ((program >> 16) & 0xff) + 1; + if (hb == 0x100) + hb = 0; + int lb = ((program >> 8) & 0xff) + 1; + if (lb == 0x100) + lb = 0; + int pr = (program & 0xff) + 1; + if (pr == 0x100) + pr = 0; + //} + midiTrackInfo->iHBank->blockSignals(true); + midiTrackInfo->iLBank->blockSignals(true); + midiTrackInfo->iProgram->blockSignals(true); + + midiTrackInfo->iHBank->setValue(hb); + midiTrackInfo->iLBank->setValue(lb); + midiTrackInfo->iProgram->setValue(pr); + + midiTrackInfo->iHBank->blockSignals(false); + midiTrackInfo->iLBank->blockSignals(false); + midiTrackInfo->iProgram->blockSignals(false); + } + + MidiController* mc = mp->midiController(CTRL_VOLUME); + int mn = mc->minVal(); + int v = mp->hwCtrlState(outChannel, CTRL_VOLUME); + volume = v; + if(v == CTRL_VAL_UNKNOWN) + //{ + //v = mc->initVal(); + //if(v == CTRL_VAL_UNKNOWN) + // v = 0; + v = mn - 1; + //} + else + // Auto bias... + v -= mc->bias(); + midiTrackInfo->iLautst->blockSignals(true); + midiTrackInfo->iLautst->setRange(mn - 1, mc->maxVal()); + midiTrackInfo->iLautst->setValue(v); + midiTrackInfo->iLautst->blockSignals(false); + + mc = mp->midiController(CTRL_PANPOT); + mn = mc->minVal(); + v = mp->hwCtrlState(outChannel, CTRL_PANPOT); + pan = v; + if(v == CTRL_VAL_UNKNOWN) + //{ + //v = mc->initVal(); + //if(v == CTRL_VAL_UNKNOWN) + // v = 0; + v = mn - 1; + //} + else + // Auto bias... + v -= mc->bias(); + midiTrackInfo->iPan->blockSignals(true); + midiTrackInfo->iPan->setRange(mn - 1, mc->maxVal()); + midiTrackInfo->iPan->setValue(v); + midiTrackInfo->iPan->blockSignals(false); + //} + + + // Does it include a midi controller value adjustment? Then handle it... + //if(flags & SC_MIDI_CONTROLLER) + // seek(); + + // Is it simply a midi controller value adjustment? Forget it. + //if(flags != SC_MIDI_CONTROLLER) + //{ + midiTrackInfo->iTransp->setValue(track->transposition); + midiTrackInfo->iAnschl->setValue(track->velocity); + midiTrackInfo->iVerz->setValue(track->delay); + midiTrackInfo->iLen->setValue(track->len); + midiTrackInfo->iKompr->setValue(track->compression); + //} +} + +/* +//--------------------------------------------------------- +// seek +// change values akkording to seek position +//--------------------------------------------------------- + +void Arranger::seek() + { + if (!showTrackinfoFlag || !selected) + return; + switch(selected->type()) { + case Track::MIDI: + case Track::DRUM: + { + MidiTrack* track = (MidiTrack*)selected; + int outPort = track->outPort(); + int outChannel = track->outChannel(); + MidiPort* mp = &midiPorts[outPort]; + + // int nprogram = mp->getCtrl(outChannel, tick, CTRL_PROGRAM); + int nprogram = mp->hwCtrlState(outChannel, CTRL_PROGRAM); + if(nprogram == CTRL_VAL_UNKNOWN) + { + midiTrackInfo->iHBank->blockSignals(true); + midiTrackInfo->iLBank->blockSignals(true); + midiTrackInfo->iProgram->blockSignals(true); + midiTrackInfo->iHBank->setValue(0); + midiTrackInfo->iLBank->setValue(0); + midiTrackInfo->iProgram->setValue(0); + midiTrackInfo->iHBank->blockSignals(false); + midiTrackInfo->iLBank->blockSignals(false); + midiTrackInfo->iProgram->blockSignals(false); + + program = CTRL_VAL_UNKNOWN; + nprogram = mp->lastValidHWCtrlState(outChannel, CTRL_PROGRAM); + if(nprogram == CTRL_VAL_UNKNOWN) + midiTrackInfo->iPatch->setText(QString("")); + else + { + MidiInstrument* instr = mp->instrument(); + const char* name = instr->getPatchName(outChannel, nprogram, song->mtype(), track->type() == Track::DRUM); + midiTrackInfo->iPatch->setText(QString(name)); + } + } + else + if (program != nprogram) { + program = nprogram; + + //int hb, lb, pr; + //if (program == CTRL_VAL_UNKNOWN) { + // hb = lb = pr = 0; + // midiTrackInfo->iPatch->setText("---"); + // } + //else + //{ + MidiInstrument* instr = mp->instrument(); + const char* name = instr->getPatchName(outChannel, program, song->mtype(), track->type() == Track::DRUM); + midiTrackInfo->iPatch->setText(QString(name)); + + int hb = ((program >> 16) & 0xff) + 1; + if (hb == 0x100) + hb = 0; + int lb = ((program >> 8) & 0xff) + 1; + if (lb == 0x100) + lb = 0; + int pr = (program & 0xff) + 1; + if (pr == 0x100) + pr = 0; + //} + midiTrackInfo->iHBank->blockSignals(true); + midiTrackInfo->iLBank->blockSignals(true); + midiTrackInfo->iProgram->blockSignals(true); + + midiTrackInfo->iHBank->setValue(hb); + midiTrackInfo->iLBank->setValue(lb); + midiTrackInfo->iProgram->setValue(pr); + + midiTrackInfo->iHBank->blockSignals(false); + midiTrackInfo->iLBank->blockSignals(false); + midiTrackInfo->iProgram->blockSignals(false); + } + + //int nvolume = midiPorts[outPort].getCtrl(outChannel, tick, CTRL_VOLUME); + // int npan = midiPorts[outPort].getCtrl(outChannel, tick, CTRL_PANPOT); + MidiController* mc = mp->midiController(CTRL_VOLUME); + int v = mp->hwCtrlState(outChannel, CTRL_VOLUME); + if(v != volume) + { + volume = v; + if(v == CTRL_VAL_UNKNOWN) + v = mc->minVal() - 1; + else + v -= mc->bias(); + midiTrackInfo->iLautst->blockSignals(true); + midiTrackInfo->iLautst->setValue(v); + midiTrackInfo->iLautst->blockSignals(false); + } + mc = mp->midiController(CTRL_PANPOT); + v = mp->hwCtrlState(outChannel, CTRL_PANPOT); + if(v != pan) + { + pan = v; + if(v == CTRL_VAL_UNKNOWN) + //{ + //v = mc->initVal(); + //if(v == CTRL_VAL_UNKNOWN) + // v = 0; + v = mc->minVal() - 1; + //} + else + // Auto bias... + v -= mc->bias(); + midiTrackInfo->iPan->blockSignals(true); + midiTrackInfo->iPan->setValue(v); + midiTrackInfo->iPan->blockSignals(false); + } + + } + break; + case Track::WAVE: + case Track::AUDIO_OUTPUT: + case Track::AUDIO_INPUT: + case Track::AUDIO_GROUP: + case Track::AUDIO_AUX: + case Track::AUDIO_SOFTSYNTH: + break; + } + } +*/ diff --git a/muse2/muse/audio.cpp b/muse2/muse/audio.cpp new file mode 100644 index 00000000..9a7029db --- /dev/null +++ b/muse2/muse/audio.cpp @@ -0,0 +1,1431 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: audio.cpp,v 1.59.2.30 2009/12/20 05:00:35 terminator356 Exp $ +// +// (C) Copyright 2001-2004 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include + +#include + +#include "app.h" +#include "song.h" +#include "node.h" +#include "audiodev.h" +#include "mididev.h" +#include "alsamidi.h" +#include "synth.h" +#include "audioprefetch.h" +#include "plugin.h" +#include "audio.h" +#include "wave.h" +#include "midictrl.h" +#include "midiseq.h" +#include "sync.h" +#include "midi.h" +#include "event.h" +#include "gconfig.h" +#include "pos.h" +#include "ticksynth.h" + +extern double curTime(); +Audio* audio; +AudioDevice* audioDevice; // current audio device in use + +// p3.3.25 +extern unsigned int volatile midiExtSyncTicks; + + +//static const unsigned char mmcDeferredPlayMsg[] = { 0x7f, 0x7f, 0x06, 0x03 }; +//static const unsigned char mmcStopMsg[] = { 0x7f, 0x7f, 0x06, 0x01 }; + +const char* seqMsgList[] = { + "SEQM_ADD_TRACK", "SEQM_REMOVE_TRACK", "SEQM_CHANGE_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", "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", "SEQM_PANIC", + "SEQM_MIDI_LOCAL_OFF", + "SEQM_SET_MIDI_DEVICE", + "SEQM_PLAY_MIDI_EVENT", + "SEQM_SET_HW_CTRL_STATE", + "SEQM_SET_HW_CTRL_STATES", + "SEQM_SET_TRACK_OUT_PORT", + "SEQM_SET_TRACK_OUT_CHAN", + "SEQM_REMAP_PORT_DRUM_CTL_EVS", + "SEQM_CHANGE_ALL_PORT_DRUM_CTL_EVS", + "SEQM_SCAN_ALSA_MIDI_PORTS", + "SEQM_SET_AUX", + "SEQM_UPDATE_SOLO_STATES", + "MIDI_SHOW_INSTR_GUI", + "AUDIO_RECORD", + "AUDIO_ROUTEADD", "AUDIO_ROUTEREMOVE", + "AUDIO_VOL", "AUDIO_PAN", + "AUDIO_ADDPLUGIN", + "AUDIO_SET_SEG_SIZE", + "AUDIO_SET_PREFADER", "AUDIO_SET_CHANNELS", + "AUDIO_SET_PLUGIN_CTRL_VAL", + "AUDIO_SWAP_CONTROLLER_IDX", + "AUDIO_CLEAR_CONTROLLER_EVENTS", + "AUDIO_SEEK_PREV_AC_EVENT", + "AUDIO_SEEK_NEXT_AC_EVENT", + "AUDIO_ERASE_AC_EVENT", + "AUDIO_ERASE_RANGE_AC_EVENTS", + "AUDIO_ADD_AC_EVENT", + "AUDIO_SET_SOLO", "AUDIO_SET_SEND_METRONOME", + "MS_PROCESS", "MS_STOP", "MS_SET_RTC", "MS_UPDATE_POLL_FD", + "SEQM_IDLE", "SEQM_SEEK" + }; + +const char* audioStates[] = { + "STOP", "START_PLAY", "PLAY", "LOOP1", "LOOP2", "SYNC", "PRECOUNT" + }; + + +//--------------------------------------------------------- +// Audio +//--------------------------------------------------------- + +Audio::Audio() + { + _running = false; + recording = false; + idle = false; + _freewheel = false; + _bounce = false; + //loopPassed = false; + _loopFrame = 0; + _loopCount = 0; + + _pos.setType(Pos::FRAMES); + _pos.setFrame(0); + curTickPos = 0; + + midiClick = 0; + clickno = 0; + clicksMeasure = 0; + ticksBeat = 0; + + syncTime = 0.0; + syncFrame = 0; + frameOffset = 0; + + state = STOP; + msg = 0; + + // Changed by Tim. p3.3.8 + //startRecordPos.setType(Pos::TICKS); + //endRecordPos.setType(Pos::TICKS); + startRecordPos.setType(Pos::FRAMES); + endRecordPos.setType(Pos::FRAMES); + + _audioMonitor = 0; + _audioMaster = 0; + + //--------------------------------------------------- + // establish pipes/sockets + //--------------------------------------------------- + + int filedes[2]; // 0 - reading 1 - writing + if (pipe(filedes) == -1) { + perror("creating pipe0"); + exit(-1); + } + fromThreadFdw = filedes[1]; + fromThreadFdr = filedes[0]; + int rv = fcntl(fromThreadFdw, F_SETFL, O_NONBLOCK); + if (rv == -1) + perror("set pipe O_NONBLOCK"); + + if (pipe(filedes) == -1) { + perror("creating pipe1"); + exit(-1); + } + 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 +//--------------------------------------------------------- + +extern bool initJackAudio(); + +bool Audio::start() + { + //process(segmentSize); // warm up caches + state = STOP; + _loopCount = 0; + muse->setHeartBeat(); + if (audioDevice) { + // Added by Tim. p3.3.6 + //_running = true; + + //audioDevice->start(); + } + else { + if(false == initJackAudio()) { + // Added by Tim. p3.3.6 + //_running = true; + + InputList* itl = song->inputs(); + for (iAudioInput i = itl->begin(); i != itl->end(); ++i) { + //printf("reconnecting input %s\n", (*i)->name().ascii()); + for (int x=0; x < (*i)->channels();x++) + (*i)->setJackPort(x,0); + (*i)->setName((*i)->name()); // restore jack connection + } + + OutputList* otl = song->outputs(); + for (iAudioOutput i = otl->begin(); i != otl->end(); ++i) { + //printf("reconnecting output %s\n", (*i)->name().ascii()); + for (int x=0; x < (*i)->channels();x++) + (*i)->setJackPort(x,0); + //printf("name=%s\n",(*i)->name().latin1()); + (*i)->setName((*i)->name()); // restore jack connection + } + //audioDevice->start(); + } + else { + printf("Failed to init audio!\n"); + return false; + } + } + + audioDevice->start(realTimePriority); + + _running = true; + + // shall we really stop JACK transport and locate to + // saved position? + + audioDevice->stopTransport(); + //audioDevice->seekTransport(song->cPos().frame()); + audioDevice->seekTransport(song->cPos()); + return true; + } + +//--------------------------------------------------------- +// stop +// stop audio processing +//--------------------------------------------------------- + +void Audio::stop(bool) + { + if (audioDevice) + audioDevice->stop(); + _running = false; + } + +//--------------------------------------------------------- +// sync +// return true if sync is completed +//--------------------------------------------------------- + +bool Audio::sync(int jackState, unsigned frame) + { + +// Changed by Tim. p3.3.24 +/* + bool done = true; + if (state == LOOP1) + state = LOOP2; + else { + if (_pos.frame() != frame) { + Pos p(frame, false); + seek(p); + } + state = State(jackState); + if (!_freewheel) + //done = audioPrefetch->seekDone; + done = audioPrefetch->seekDone(); + } + + return done; +*/ + 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); + Pos p(frame, false); + seek(p); + if (!_freewheel) + done = audioPrefetch->seekDone(); + if (s == START_PLAY) + state = START_PLAY; + } + else { + //if (frame != _seqTime.pos.frame()) { + if (frame != _pos.frame()) { + // seek during seek + //seek(Pos(frame, AL::FRAMES)); + seek(Pos(frame, false)); + } + done = audioPrefetch->seekDone(); + } + } + return done; + + } + +//--------------------------------------------------------- +// setFreewheel +//--------------------------------------------------------- + +void Audio::setFreewheel(bool val) + { +// printf("JACK: freewheel callback %d\n", val); + _freewheel = val; + } + +//--------------------------------------------------------- +// shutdown +//--------------------------------------------------------- + +void Audio::shutdown() + { + _running = false; + printf("Audio::shutdown()\n"); + write(sigFd, "S", 1); + } + +//--------------------------------------------------------- +// process +// process one audio buffer at position "_pos " +// of size "frames" +//--------------------------------------------------------- + +void Audio::process(unsigned frames) + { + // Disabled by Tim. p3.3.22 +// extern int watchAudio; +// ++watchAudio; // make a simple watchdog happy + + if (!checkAudioDevice()) return; + if (msg) { + processMsg(msg); + int sn = msg->serialNo; + msg = 0; // dont process again + int rv = write(fromThreadFdw, &sn, sizeof(int)); + if (rv != sizeof(int)) { + fprintf(stderr, "audio: write(%d) pipe failed: %s\n", + fromThreadFdw, strerror(errno)); + } + } + + OutputList* ol = song->outputs(); + if (idle) { + // deliver no audio + for (iAudioOutput i = ol->begin(); i != ol->end(); ++i) + (*i)->silence(frames); + return; + } + + int jackState = audioDevice->getState(); + + //if(debugMsg) + // printf("Audio::process Current state:%s jackState:%s\n", audioStates[state], audioStates[jackState]); + + if (state == START_PLAY && jackState == PLAY) { + _loopCount = 0; + startRolling(); + if (_bounce) + write(sigFd, "f", 1); + } + else if (state == LOOP2 && jackState == PLAY) { + ++_loopCount; // Number of times we have looped so far + Pos newPos(_loopFrame, false); + seek(newPos); + startRolling(); + } + else if (isPlaying() && jackState == STOP) { + // p3.3.43 Make sure to stop bounce and freewheel mode, for example if user presses stop + // in QJackCtl before right-hand marker is reached (which is handled below). + //printf("Audio::process isPlaying() && jackState == STOP\n"); + //if (_bounce) + //{ + //printf(" stopping bounce...\n"); + // _bounce = false; + // write(sigFd, "F", 1); + //} + + stopRolling(); + } + else if (state == START_PLAY && jackState == STOP) { + state = STOP; + if (_bounce) { + audioDevice->startTransport(); + } + else + write(sigFd, "3", 1); // abort rolling + } + else if (state == STOP && jackState == PLAY) { + _loopCount = 0; + startRolling(); + } + else if (state == LOOP1 && jackState == PLAY) + ; // treat as play + else if (state == LOOP2 && jackState == START_PLAY) { + ; // sync cycle + } + else if (state != jackState) + printf("JACK: state transition %s -> %s ?\n", + audioStates[state], audioStates[jackState]); + +// printf("p %s %s %d\n", audioStates[jackState], audioStates[state], _pos.frame()); + + // + // clear aux send buffers + // + AuxList* al = song->auxs(); + for (unsigned i = 0; i < al->size(); ++i) { + AudioAux* a = (AudioAux*)((*al)[i]); + float** dst = a->sendBuffer(); + for (int ch = 0; ch < a->channels(); ++ch) + memset(dst[ch], 0, sizeof(float) * segmentSize); + } + + for (iAudioOutput i = ol->begin(); i != ol->end(); ++i) + (*i)->processInit(frames); + int samplePos = _pos.frame(); + int offset = 0; // buffer offset in audio buffers + + if (isPlaying()) { + if (!freewheel()) + audioPrefetch->msgTick(); + + if (_bounce && _pos >= song->rPos()) { + _bounce = false; + write(sigFd, "F", 1); + return; + } + + // + // check for end of song + // + if ((curTickPos >= song->len()) + && !(song->record() + || _bounce + || song->loop())) { + //if(debugMsg) + // printf("Audio::process curTickPos >= song->len\n"); + + audioDevice->stopTransport(); + return; + } + + // + // check for loop end + // + if (state == PLAY && song->loop() && !_bounce && !extSyncFlag.value()) { + const Pos& loop = song->rPos(); + unsigned n = loop.frame() - samplePos - (3 * frames); + if (n < frames) { + // loop end in current cycle + unsigned lpos = song->lPos().frame(); + // adjust loop start so we get exact loop len + if (n > lpos) + n = 0; + state = LOOP1; + _loopFrame = lpos - n; + + // clear sustain + for (int i = 0; i < MIDI_PORTS; ++i) { + MidiPort* mp = &midiPorts[i]; + for (int ch = 0; ch < MIDI_CHANNELS; ++ch) { + if (mp->hwCtrlState(ch, CTRL_SUSTAIN) == 127) { + if (mp->device()!=NULL) { + //printf("send clear sustain!!!!!!!! port %d ch %d\n", i,ch); + MidiPlayEvent ev(0, i, ch, ME_CONTROLLER, CTRL_SUSTAIN, 0); + // may cause problems, called from audio thread + mp->device()->putEvent(ev); + } + } + } + } + + //audioDevice->seekTransport(_loopFrame); + Pos lp(_loopFrame, false); + audioDevice->seekTransport(lp); + + +// printf(" process: seek to %d, end %d\n", _loopFrame, loop.frame()); + } + } + + + // p3.3.25 + if(extSyncFlag.value()) + { + nextTickPos = curTickPos + midiExtSyncTicks; + // Probably not good - interfere with midi thread. + midiExtSyncTicks = 0; + } + else + { + + Pos ppp(_pos); + ppp += frames; + nextTickPos = ppp.tick(); + } + } + // + // resync with audio interface + // + syncFrame = audioDevice->framePos(); + syncTime = curTime(); + frameOffset = syncFrame - samplePos; + + //printf("Audio::process calling process1:\n"); + + process1(samplePos, offset, frames); + for (iAudioOutput i = ol->begin(); i != ol->end(); ++i) + (*i)->processWrite(); + if (isPlaying()) { + _pos += frames; + curTickPos = nextTickPos; + } + } + +//--------------------------------------------------------- +// process1 +//--------------------------------------------------------- + +void Audio::process1(unsigned samplePos, unsigned offset, unsigned frames) + { + if (midiSeqRunning) { + processMidi(); + } + //midiSeq->msgProcess(); + + // + // process not connected tracks + // to animate meter display + // + TrackList* tl = song->tracks(); + AudioTrack* track; + int channels; + for(ciTrack it = tl->begin(); it != tl->end(); ++it) + { + if((*it)->isMidiTrack()) + continue; + track = (AudioTrack*)(*it); + + // Added by T356. + // For audio track types, synths etc. which need some kind of non-audio + // (but possibly audio-affecting) processing always, even if their output path + // is ultimately unconnected. + // Example: A fluidsynth instance whose output path ultimately led to nowhere + // would not allow us to load a font. Since process() was driven by audio output, + // in this case there was nothing driving the process() function which responds to + // such gui commands. So I separated the events processing from process(), into this. + // It should be used for things like midi events, gui events etc. - things which need to + // be done BEFORE all the AudioOutput::process() are called below. That does NOT include + // audio processing, because THAT is done at the very end of this routine. + // This will also reset the track's processed flag. + track->preProcessAlways(); + + // Removed by T356 + /* + if (track->noOutRoute() && !track->noInRoute() && + track->type() != Track::AUDIO_AUX && track->type() != Track::AUDIO_OUTPUT) { + channels = track->channels(); + float* buffer[channels]; + float data[frames * channels]; + for (int i = 0; i < channels; ++i) + buffer[i] = data + i * frames; + track->copyData(samplePos, channels, frames, buffer); + } + */ + + } + // Pre-process the metronome. + ((AudioTrack*)metronome)->preProcessAlways(); + + OutputList* ol = song->outputs(); + for (ciAudioOutput i = ol->begin(); i != ol->end(); ++i) + (*i)->process(samplePos, offset, frames); + + // Removed by T356 + /* + AuxList* auxl = song->auxs(); + for (ciAudioAux ia = auxl->begin(); ia != auxl->end(); ++ia) { + track = (AudioTrack*)(*ia); + if (track->noOutRoute()) { + channels = track->channels(); + float* buffer[channels]; + float data[frames * channels]; + for (int i = 0; i < channels; ++i) + buffer[i] = data + i * frames; + track->copyData(samplePos, channels, frames, buffer); + } + } + */ + + // Added by T356. + // Were ANY tracks unprocessed as a result of processing all the AudioOutputs, above? + // Not just unconnected ones, as previously done, but ones whose output path ultimately leads nowhere. + // Those tracks were missed, until this fix. + // Do them now. This will animate meters, and 'quietly' process some audio which needs to be done - + // for example synths really need to be processed, 'quietly' or not, otherwise the next time + // processing is 'turned on', if there was a backlog of events while it was off, then they all happen at once. + for(ciTrack it = tl->begin(); it != tl->end(); ++it) + { + if((*it)->isMidiTrack()) + continue; + track = (AudioTrack*)(*it); + // Ignore unprocessed tracks which have an output route, because they will be processed by + // whatever track(s) they are routed to. + if(!track->processed() && track->noOutRoute() && (track->type() != Track::AUDIO_OUTPUT)) + { + channels = track->channels(); + // Just a dummy buffer. + float* buffer[channels]; + float data[frames * channels]; + for (int i = 0; i < channels; ++i) + buffer[i] = data + i * frames; + //printf("Audio::process1 calling track->copyData for track:%s\n", track->name().latin1()); + + // p3.3.38 + //track->copyData(samplePos, channels, frames, buffer); + track->copyData(samplePos, channels, -1, -1, frames, buffer); + } + } + } + +//--------------------------------------------------------- +// processMsg +//--------------------------------------------------------- + +void Audio::processMsg(AudioMsg* msg) + { + switch(msg->id) { + case AUDIO_RECORD: + msg->snode->setRecordFlag2(msg->ival); + break; + case AUDIO_ROUTEADD: + addRoute(msg->sroute, msg->droute); + break; + case AUDIO_ROUTEREMOVE: + removeRoute(msg->sroute, msg->droute); + break; + case AUDIO_VOL: + msg->snode->setVolume(msg->dval); + break; + case AUDIO_PAN: + msg->snode->setPan(msg->dval); + break; + case SEQM_SET_AUX: + msg->snode->setAuxSend(msg->ival, msg->dval); + break; + case AUDIO_SET_PREFADER: + msg->snode->setPrefader(msg->ival); + break; + case AUDIO_SET_CHANNELS: + msg->snode->setChannels(msg->ival); + break; + case AUDIO_ADDPLUGIN: + msg->snode->addPlugin(msg->plugin, msg->ival); + break; + case AUDIO_SET_PLUGIN_CTRL_VAL: + //msg->plugin->track()->setPluginCtrlVal(msg->ival, msg->dval); + // p3.3.43 + msg->snode->setPluginCtrlVal(msg->ival, msg->dval); + break; + case AUDIO_SWAP_CONTROLLER_IDX: + msg->snode->swapControllerIDX(msg->a, msg->b); + break; + case AUDIO_CLEAR_CONTROLLER_EVENTS: + msg->snode->clearControllerEvents(msg->ival); + break; + case AUDIO_SEEK_PREV_AC_EVENT: + msg->snode->seekPrevACEvent(msg->ival); + break; + case AUDIO_SEEK_NEXT_AC_EVENT: + msg->snode->seekNextACEvent(msg->ival); + break; + case AUDIO_ERASE_AC_EVENT: + msg->snode->eraseACEvent(msg->ival, msg->a); + break; + case AUDIO_ERASE_RANGE_AC_EVENTS: + msg->snode->eraseRangeACEvents(msg->ival, msg->a, msg->b); + break; + case AUDIO_ADD_AC_EVENT: + msg->snode->addACEvent(msg->ival, msg->a, msg->dval); + break; + case AUDIO_SET_SOLO: + msg->track->setSolo((bool)msg->ival); + break; + + case AUDIO_SET_SEND_METRONOME: + msg->snode->setSendMetronome((bool)msg->ival); + break; + + case AUDIO_SET_SEG_SIZE: + segmentSize = msg->ival; + 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_RESET_DEVICES: + for (int i = 0; i < MIDI_PORTS; ++i) + midiPorts[i].instrument()->reset(i, song->mtype()); + break; + case SEQM_INIT_DEVICES: + initDevices(); + break; + case SEQM_MIDI_LOCAL_OFF: + sendLocalOff(); + break; + case SEQM_PANIC: + panic(); + break; + case SEQM_PLAY_MIDI_EVENT: + { + MidiPlayEvent* ev = (MidiPlayEvent*)(msg->p1); + midiPorts[ev->port()].sendEvent(*ev); + // Record?? + } + break; + case SEQM_SET_HW_CTRL_STATE: + { + MidiPort* port = (MidiPort*)(msg->p1); + port->setHwCtrlState(msg->a, msg->b, msg->c); + } + break; + case SEQM_SET_HW_CTRL_STATES: + { + MidiPort* port = (MidiPort*)(msg->p1); + port->setHwCtrlStates(msg->a, msg->b, msg->c, msg->ival); + } + break; + case SEQM_SCAN_ALSA_MIDI_PORTS: + alsaScanMidiPorts(); + break; + case MIDI_SHOW_INSTR_GUI: + midiSeq->msgUpdatePollFd(); + break; + case SEQM_ADD_TEMPO: + case SEQM_REMOVE_TEMPO: + case SEQM_SET_GLOBAL_TEMPO: + case SEQM_SET_TEMPO: + song->processMsg(msg); + if (isPlaying()) { + if (!checkAudioDevice()) return; + _pos.setTick(curTickPos); + int samplePos = _pos.frame(); + syncFrame = audioDevice->framePos(); + syncTime = curTime(); + frameOffset = syncFrame - samplePos; + } + break; + case SEQM_ADD_TRACK: + case SEQM_REMOVE_TRACK: + case SEQM_CHANGE_TRACK: + case SEQM_ADD_PART: + case SEQM_REMOVE_PART: + case SEQM_CHANGE_PART: + case SEQM_SET_TRACK_OUT_CHAN: + case SEQM_SET_TRACK_OUT_PORT: + case SEQM_REMAP_PORT_DRUM_CTL_EVS: + case SEQM_CHANGE_ALL_PORT_DRUM_CTL_EVS: + midiSeq->sendMsg(msg); + break; + + case SEQM_IDLE: + idle = msg->a; + midiSeq->sendMsg(msg); + break; + + default: + song->processMsg(msg); + break; + } + } + +//--------------------------------------------------------- +// seek +// - called before start play +// - initiated from gui +//--------------------------------------------------------- + +void Audio::seek(const Pos& p) + { + if (_pos == p) { + if(debugMsg) + printf("Audio::seek already there\n"); + return; + } + + // p3.3.23 + //printf("Audio::seek frame:%d\n", p.frame()); + _pos = p; + if (!checkAudioDevice()) return; + syncFrame = audioDevice->framePos(); + frameOffset = syncFrame - _pos.frame(); + curTickPos = _pos.tick(); + + midiSeq->msgSeek(); // handle stuck notes and set + // controller for new position + + // p3.3.31 + // Don't send if external sync is on. The master, and our sync routing system will take care of that. + if(!extSyncFlag.value()) + { + + for(int port = 0; port < MIDI_PORTS; ++port) + { + MidiPort* mp = &midiPorts[port]; + MidiDevice* dev = mp->device(); + //if(!dev || !mp->syncInfo().MCOut()) + if(!dev || !mp->syncInfo().MRTOut()) + continue; + + // Added by T356: Shall we check for device write open flag to see if it's ok to send?... + // This means obey what the user has chosen for read/write in the midi port config dialog, + // which already takes into account whether the device is writable or not. + //if(!(dev->rwFlags() & 0x1) || !(dev->openFlags() & 1)) + //if(!(dev->openFlags() & 1)) + // continue; + + //int port = dev->midiPort(); + + // By checking for no port here (-1), (and out of bounds), it means + // the device must be assigned to a port for these MMC commands to be sent. + // Without this check, interesting sync things can be done by the user without ever + // assigning any devices to ports ! + //if(port < 0 || port > MIDI_PORTS) + //if(port < -1 || port > MIDI_PORTS) + // continue; + + int beat = (curTickPos * 4) / config.division; + + bool isPlaying=false; + if(state == PLAY) + isPlaying = true; + + mp->sendStop(); + mp->sendSongpos(beat); + if(isPlaying) + mp->sendContinue(); + } + } + + /* + if(genMCSync) + { + for(iMidiDevice imd = midiDevices.begin(); imd != midiDevices.end(); ++imd) + { + MidiDevice* dev = (*imd); + if(!dev->syncInfo().MCOut()) + continue; + + // Added by T356: Shall we check for device write open flag to see if it's ok to send?... + // This means obey what the user has chosen for read/write in the midi port config dialog, + // which already takes into account whether the device is writable or not. + //if(!(dev->rwFlags() & 0x1) || !(dev->openFlags() & 1)) + //if(!(dev->openFlags() & 1)) + // continue; + + int port = dev->midiPort(); + + // By checking for no port here (-1), (and out of bounds), it means + // the device must be assigned to a port for these MMC commands to be sent. + // Without this check, interesting sync things can be done by the user without ever + // assigning any devices to ports ! + //if(port < 0 || port > MIDI_PORTS) + if(port < -1 || port > MIDI_PORTS) + continue; + + int beat = (curTickPos * 4) / config.division; + + bool isPlaying=false; + if(state == PLAY) + isPlaying = true; + + if(port == -1) + // Send straight to the device... Copied from MidiPort. + { + MidiPlayEvent event(0, 0, 0, ME_STOP, 0, 0); + dev->putEvent(event); + + event.setType(ME_SONGPOS); + event.setA(beat); + dev->putEvent(event); + + if(isPlaying) + { + event.setType(ME_CONTINUE); + event.setA(0); + dev->putEvent(event); + } + } + else + // Go through the port... + { + MidiPort* mp = &midiPorts[port]; + + mp->sendStop(); + mp->sendSongpos(beat); + if(isPlaying) + mp->sendContinue(); + } + } + } + */ + + //loopPassed = true; // for record loop mode + if (state != LOOP2 && !freewheel()) + { + // Changed by T356 08/17/08. We need to force prefetch to update, + // to ensure the most recent data. Things can happen to a part + // before play is pressed - such as part muting, part moving etc. + // Without a force, the wrong data was being played. + //audioPrefetch->msgSeek(_pos.frame()); + audioPrefetch->msgSeek(_pos.frame(), true); + } + + write(sigFd, "G", 1); // signal seek to gui + } + +//--------------------------------------------------------- +// writeTick +// called from audio prefetch thread context +// write another buffer to soundfile +//--------------------------------------------------------- + +void Audio::writeTick() + { + AudioOutput* ao = song->bounceOutput; + if(ao && song->outputs()->find(ao) != song->outputs()->end()) + { + 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(); + } + } + +//--------------------------------------------------------- +// startRolling +//--------------------------------------------------------- + +void Audio::startRolling() + { + // Changed by Tim. p3.3.8 + //startRecordPos = _pos; + if(_loopCount == 0) + startRecordPos = _pos; + + if (song->record()) { + recording = true; + TrackList* tracks = song->tracks(); + for (iTrack i = tracks->begin(); i != tracks->end(); ++i) { + if ((*i)->isMidiTrack()) + continue; + if ((*i)->type() == Track::WAVE) + ((WaveTrack*)(*i))->resetMeter(); + } + } + state = PLAY; + write(sigFd, "1", 1); // Play + + // p3.3.31 + // Don't send if external sync is on. The master, and our sync routing system will take care of that. + if(!extSyncFlag.value()) + { + + // Changed by Tim. p3.3.6 + //if (genMMC) + // midiPorts[txSyncPort].sendSysex(mmcDeferredPlayMsg, sizeof(mmcDeferredPlayMsg)); + //if (genMCSync) { + // if (curTickPos) + // midiPorts[txSyncPort].sendContinue(); + // else + // midiPorts[txSyncPort].sendStart(); + // } + for(int port = 0; port < MIDI_PORTS; ++port) + { + MidiPort* mp = &midiPorts[port]; + MidiDevice* dev = mp->device(); + if(!dev) + continue; + + // Shall we check open flags? + //if(!(dev->rwFlags() & 0x1) || !(dev->openFlags() & 1)) + //if(!(dev->openFlags() & 1)) + // continue; + + MidiSyncInfo& si = mp->syncInfo(); + + //if(genMMC && si.MMCOut()) + if(si.MMCOut()) + //mp->sendSysex(mmcDeferredPlayMsg, sizeof(mmcDeferredPlayMsg)); + mp->sendMMCDeferredPlay(); + + //if(genMCSync && si.MCOut()) + //if(si.MCOut()) + if(si.MRTOut()) + { + if(curTickPos) + mp->sendContinue(); + else + mp->sendStart(); + } + } + } + + /* + for(iMidiDevice imd = midiDevices.begin(); imd != midiDevices.end(); ++imd) + { + MidiDevice* dev = (*imd); + + // Shall we check open flags? + //if(!(dev->rwFlags() & 0x1) || !(dev->openFlags() & 1)) + //if(!(dev->openFlags() & 1)) + // continue; + + int port = dev->midiPort(); + + // Without this -1 check, interesting sync things can be done by the user without ever + // assigning any devices to ports ! + //if(port < 0 || port > MIDI_PORTS) + if(port < -1 || port > MIDI_PORTS) + continue; + + MidiSyncInfo& si = dev->syncInfo(); + + if(port == -1) + // Send straight to the device... Copied from MidiPort. + { + if(genMMC && si.MMCOut()) + { + MidiPlayEvent event(0, 0, ME_SYSEX, mmcDeferredPlayMsg, sizeof(mmcDeferredPlayMsg)); + dev->putEvent(event); + } + + if(genMCSync && si.MCOut()) + { + if(curTickPos) + { + MidiPlayEvent event(0, 0, 0, ME_CONTINUE, 0, 0); + dev->putEvent(event); + } + else + { + MidiPlayEvent event(0, 0, 0, ME_START, 0, 0); + dev->putEvent(event); + } + } + } + else + // Go through the port... + { + MidiPort* mp = &midiPorts[port]; + + if(genMMC && si.MMCOut()) + mp->sendSysex(mmcDeferredPlayMsg, sizeof(mmcDeferredPlayMsg)); + + if(genMCSync && si.MCOut()) + { + if(curTickPos) + mp->sendContinue(); + else + mp->sendStart(); + } + } + } + */ + + if (precountEnableFlag + && song->click() + && !extSyncFlag.value() + && song->record()) { +#if 0 + state = PRECOUNT; + int z, n; + if (precountFromMastertrackFlag) + sigmap.timesig(playTickPos, z, n); + else { + z = precountSigZ; + n = precountSigN; + } + clickno = z * preMeasures; + clicksMeasure = z; + ticksBeat = (division * 4)/n; +#endif + } + else { + // + // compute next midi metronome click position + // + int bar, beat; + unsigned tick; + sigmap.tickValues(curTickPos, &bar, &beat, &tick); + if (tick) + beat += 1; + midiClick = sigmap.bar2tick(bar, beat, 0); + } + + // reenable sustain + for (int i = 0; i < MIDI_PORTS; ++i) { + MidiPort* mp = &midiPorts[i]; + for (int ch = 0; ch < MIDI_CHANNELS; ++ch) { + if (mp->hwCtrlState(ch, CTRL_SUSTAIN) == 127) { + if(mp->device() != NULL) { + //printf("send enable sustain!!!!!!!! port %d ch %d\n", i,ch); + MidiPlayEvent ev(0, i, ch, ME_CONTROLLER, CTRL_SUSTAIN, 127); + + // may cause problems, called from audio thread + mp->device()->playEvents()->add(ev); + } + } + } + } + + //tempomap.clearExtTempoList(); + } + +//--------------------------------------------------------- +// stopRolling +//--------------------------------------------------------- + +void Audio::stopRolling() + { + // Added by Tim. p3.3.20 + //if(debugMsg) + // printf("Audio::stopRolling state %s\n", audioStates[state]); + + state = STOP; + midiSeq->msgStop(); + +#if 1 //TODO + //--------------------------------------------------- + // reset sustain + //--------------------------------------------------- + + + // clear sustain + for (int i = 0; i < MIDI_PORTS; ++i) { + MidiPort* mp = &midiPorts[i]; + for (int ch = 0; ch < MIDI_CHANNELS; ++ch) { + if (mp->hwCtrlState(ch, CTRL_SUSTAIN) == 127) { + if(mp->device()!=NULL) { + //printf("send clear sustain!!!!!!!! port %d ch %d\n", i,ch); + MidiPlayEvent ev(0, i, ch, ME_CONTROLLER, CTRL_SUSTAIN, 0); + // may cause problems, called from audio thread + mp->device()->putEvent(ev); + } + } + } + } + +#endif + + // p3.3.31 + // Don't send if external sync is on. The master, and our sync routing system will take care of that. + if(!extSyncFlag.value()) + { + + // Changed by Tim. p3.3.6 + //MidiPort* syncPort = &midiPorts[txSyncPort]; + //if (genMMC) { + // unsigned char mmcPos[] = { + // 0x7f, 0x7f, 0x06, 0x44, 0x06, 0x01, + // 0, 0, 0, 0, 0 + // }; + // int frame = tempomap.tick2frame(curTickPos); + // MTC mtc(double(frame) / double(sampleRate)); + // mmcPos[6] = mtc.h() | (mtcType << 5); + // mmcPos[7] = mtc.m(); + // mmcPos[8] = mtc.s(); + // mmcPos[9] = mtc.f(); + // mmcPos[10] = mtc.sf(); + // syncPort->sendSysex(mmcStopMsg, sizeof(mmcStopMsg)); + // syncPort->sendSysex(mmcPos, sizeof(mmcPos)); + // } + //if (genMCSync) { // Midi Clock + // send STOP and + // "set song position pointer" + // syncPort->sendStop(); + // syncPort->sendSongpos(curTickPos * 4 / config.division); + // } + for(int port = 0; port < MIDI_PORTS; ++port) + { + MidiPort* mp = &midiPorts[port]; + MidiDevice* dev = mp->device(); + if(!dev) + continue; + + // Shall we check open flags? + //if(!(dev->rwFlags() & 0x1) || !(dev->openFlags() & 1)) + //if(!(dev->openFlags() & 1)) + // continue; + + MidiSyncInfo& si = mp->syncInfo(); + + //if(genMMC && si.MMCOut()) + if(si.MMCOut()) + { + //unsigned char mmcPos[] = { + // 0x7f, 0x7f, 0x06, 0x44, 0x06, 0x01, + // 0, 0, 0, 0, 0 + // }; + + // p3.3.31 + /* + int frame = tempomap.tick2frame(curTickPos); + MTC mtc(double(frame) / double(sampleRate)); + */ + + //mmcPos[6] = mtc.h() | (mtcType << 5); + //mmcPos[7] = mtc.m(); + //mmcPos[8] = mtc.s(); + //mmcPos[9] = mtc.f(); + //mmcPos[10] = mtc.sf(); + + //mp->sendSysex(mmcStopMsg, sizeof(mmcStopMsg)); + mp->sendMMCStop(); + //mp->sendSysex(mmcPos, sizeof(mmcPos)); + + // p3.3.31 + // Added check of option send continue not start. + // Hmm, is this required? Seems to make other devices unhappy. + /* + if(!si.sendContNotStart()) + mp->sendMMCLocate(mtc.h() | (mtcType << 5), + mtc.m(), mtc.s(), mtc.f(), mtc.sf()); + */ + + } + + //if(genMCSync && si.MCOut()) // Midi Clock + //if(si.MCOut()) // Midi Clock + if(si.MRTOut()) // + { + // send STOP and + // "set song position pointer" + mp->sendStop(); + + // p3.3.31 + // Added check of option send continue not start. + // Hmm, is this required? Seems to make other devices unhappy. + /* + if(!si.sendContNotStart()) + mp->sendSongpos(curTickPos * 4 / config.division); + */ + + } + } + } + + /* + for(iMidiDevice imd = midiDevices.begin(); imd != midiDevices.end(); ++imd) + { + MidiDevice* dev = (*imd); + + // Shall we check open flags? + //if(!(dev->rwFlags() & 0x1) || !(dev->openFlags() & 1)) + //if(!(dev->openFlags() & 1)) + // continue; + + int port = dev->midiPort(); + + // Without this -1 check, interesting sync things can be done by the user without ever + // assigning any devices to ports ! + //if(port < 0 || port > MIDI_PORTS) + if(port < -1 || port > MIDI_PORTS) + continue; + + MidiSyncInfo& si = dev->syncInfo(); + + MidiPort* mp = 0; + if(port != -1) + mp = &midiPorts[port]; + + if(genMMC && si.MMCOut()) + { + unsigned char mmcPos[] = { + 0x7f, 0x7f, 0x06, 0x44, 0x06, 0x01, + 0, 0, 0, 0, 0 + }; + int frame = tempomap.tick2frame(curTickPos); + MTC mtc(double(frame) / double(sampleRate)); + mmcPos[6] = mtc.h() | (mtcType << 5); + mmcPos[7] = mtc.m(); + mmcPos[8] = mtc.s(); + mmcPos[9] = mtc.f(); + mmcPos[10] = mtc.sf(); + + if(mp) + // Go through the port... + { + mp->sendSysex(mmcStopMsg, sizeof(mmcStopMsg)); + mp->sendSysex(mmcPos, sizeof(mmcPos)); + } + else + // Send straight to the device... Copied from MidiPort. + { + MidiPlayEvent event(0, 0, ME_SYSEX, mmcStopMsg, sizeof(mmcStopMsg)); + dev->putEvent(event); + + event.setData(mmcPos, sizeof(mmcPos)); + dev->putEvent(event); + } + } + + if(genMCSync && si.MCOut()) // Midi Clock + { + // send STOP and + // "set song position pointer" + if(mp) + // Go through the port... + { + mp->sendStop(); + mp->sendSongpos(curTickPos * 4 / config.division); + } + else + // Send straight to the device... Copied from MidiPort. + { + MidiPlayEvent event(0, 0, 0, ME_STOP, 0, 0); + dev->putEvent(event); + event.setType(ME_SONGPOS); + event.setA(curTickPos * 4 / config.division); + dev->putEvent(event); + } + } + } + */ + + WaveTrackList* tracks = song->waves(); + for (iWaveTrack i = tracks->begin(); i != tracks->end(); ++i) { + WaveTrack* track = *i; + track->resetMeter(); + } + recording = false; + endRecordPos = _pos; + write(sigFd, "0", 1); // STOP + } + +//--------------------------------------------------------- +// recordStop +// execution environment: gui thread +//--------------------------------------------------------- + +void Audio::recordStop() + { + audio->msgIdle(true); // gain access to all data structures + + song->startUndo(); + WaveTrackList* wl = song->waves(); + + for (iWaveTrack it = wl->begin(); it != wl->end(); ++it) { + WaveTrack* track = *it; + if (track->recordFlag() || song->bounceTrack == track) { + song->cmdAddRecordedWave(track, startRecordPos, endRecordPos); + // The track's _recFile pointer may have been kept and turned + // into a SndFileR and added to a new part. + // Or _recFile may have been discarded (no new recorded part created). + // Regardless, we are done with the pointer itself. Set to zero so + // song->setRecordFlag knows about it... + track->setRecFile(0); + song->setRecordFlag(track, false); + } + } + MidiTrackList* ml = song->midis(); + for (iMidiTrack it = ml->begin(); it != ml->end(); ++it) { + MidiTrack* mt = *it; + MPEventList* mpel = mt->mpevents(); + EventList* el = mt->events(); + + //--------------------------------------------------- + // resolve NoteOff events, Controller etc. + //--------------------------------------------------- + + //buildMidiEventList(el, mpel, mt, config.division, true); + // Do SysexMeta. Do loops. + buildMidiEventList(el, mpel, mt, config.division, true, true); + song->cmdAddRecordedEvents(mt, el, startRecordPos.tick()); + el->clear(); + mpel->clear(); + } + + // + // bounce to file operates on the only + // selected output port + // + + AudioOutput* ao = song->bounceOutput; + if(ao && song->outputs()->find(ao) != song->outputs()->end()) + { + if(ao->recordFlag()) + { + song->bounceOutput = 0; + SndFile* sf = ao->recFile(); + if (sf) + delete sf; // close + ao->setRecFile(0); + ao->setRecordFlag1(false); + msgSetRecord(ao, false); + } + } + audio->msgIdle(false); + song->endUndo(0); + song->setRecord(false); + } + +//--------------------------------------------------------- +// curFrame +// extrapolates current play frame on syncTime/syncFrame +//--------------------------------------------------------- + +unsigned int Audio::curFrame() const + { + return lrint((curTime() - syncTime) * sampleRate) + syncFrame; + } + +//--------------------------------------------------------- +// timestamp +//--------------------------------------------------------- + +int Audio::timestamp() const + { + int t = curFrame() - frameOffset; + return t; + } + +//--------------------------------------------------------- +// sendMsgToGui +//--------------------------------------------------------- + +void Audio::sendMsgToGui(char c) + { + write(sigFd, &c, 1); + } + diff --git a/muse2/muse/audio.h b/muse2/muse/audio.h new file mode 100644 index 00000000..fb51ca03 --- /dev/null +++ b/muse2/muse/audio.h @@ -0,0 +1,299 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: audio.h,v 1.25.2.13 2009/12/20 05:00:35 terminator356 Exp $ +// +// (C) Copyright 2001 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __AUDIO_H__ +#define __AUDIO_H__ + +#include "thread.h" +#include "pos.h" +#include "mpevent.h" +#include "route.h" +#include "event.h" + +class SndFile; +class PluginI; +class SynthI; +class MidiDevice; +class AudioDevice; +class Track; +class AudioTrack; +class Part; +class Event; +class MidiPlayEvent; +class Event; +class MidiPort; +class EventList; +class MidiInstrument; +class MidiTrack; + +//--------------------------------------------------------- +// AudioMsgId +// this are the messages send from the GUI thread to +// the midi thread +//--------------------------------------------------------- + +enum { + SEQM_ADD_TRACK, SEQM_REMOVE_TRACK, SEQM_CHANGE_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, 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, SEQM_PANIC, + SEQM_MIDI_LOCAL_OFF, + SEQM_SET_MIDI_DEVICE, + SEQM_PLAY_MIDI_EVENT, + SEQM_SET_HW_CTRL_STATE, + SEQM_SET_HW_CTRL_STATES, + SEQM_SET_TRACK_OUT_PORT, + SEQM_SET_TRACK_OUT_CHAN, + SEQM_REMAP_PORT_DRUM_CTL_EVS, + SEQM_CHANGE_ALL_PORT_DRUM_CTL_EVS, + SEQM_SCAN_ALSA_MIDI_PORTS, + SEQM_SET_AUX, + SEQM_UPDATE_SOLO_STATES, + MIDI_SHOW_INSTR_GUI, + AUDIO_RECORD, + AUDIO_ROUTEADD, AUDIO_ROUTEREMOVE, + AUDIO_VOL, AUDIO_PAN, + AUDIO_ADDPLUGIN, + AUDIO_SET_SEG_SIZE, + AUDIO_SET_PREFADER, AUDIO_SET_CHANNELS, + AUDIO_SET_PLUGIN_CTRL_VAL, + AUDIO_SWAP_CONTROLLER_IDX, + AUDIO_CLEAR_CONTROLLER_EVENTS, + AUDIO_SEEK_PREV_AC_EVENT, + AUDIO_SEEK_NEXT_AC_EVENT, + AUDIO_ERASE_AC_EVENT, + AUDIO_ERASE_RANGE_AC_EVENTS, + AUDIO_ADD_AC_EVENT, + AUDIO_SET_SOLO, AUDIO_SET_SEND_METRONOME, + MS_PROCESS, MS_STOP, MS_SET_RTC, MS_UPDATE_POLL_FD, + SEQM_IDLE, SEQM_SEEK, + }; + +extern const char* seqMsgList[]; // for debug + +//--------------------------------------------------------- +// Msg +//--------------------------------------------------------- + +struct AudioMsg : public ThreadMsg { // this should be an union + int serialNo; + SndFile* downmix; + AudioTrack* snode; + AudioTrack* dnode; + Route sroute, droute; + AudioDevice* device; + int ival; + int iival; + double dval; + PluginI* plugin; + SynthI* synth; + Part* spart; + Part* dpart; + Track* track; + + const void *p1, *p2, *p3; + Event ev1, ev2; + char port, channel, ctrl; + int a, b, c; + Pos pos; + }; + +class AudioOutput; + +//--------------------------------------------------------- +// Audio +//--------------------------------------------------------- + +class Audio { + public: + enum State {STOP, START_PLAY, PLAY, LOOP1, LOOP2, SYNC, PRECOUNT}; + + private: + bool _running; // audio is active + bool recording; // recording is active + bool idle; // do nothing in idle mode + bool _freewheel; + bool _bounce; + //bool loopPassed; + unsigned _loopFrame; // Startframe of loop if in LOOP mode. Not quite the same as left marker ! + int _loopCount; // Number of times we have looped so far + + 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 + + //metronome values + unsigned midiClick; + int clickno; // precount values + int clicksMeasure; + int ticksBeat; + + double syncTime; // wall clock at last sync point + unsigned syncFrame; // corresponding frame no. to syncTime + int frameOffset; // offset to free running hw frame counter + + State state; + + AudioMsg* msg; + int fromThreadFdw, fromThreadFdr; // message pipe + + int sigFd; // pipe fd for messages to gui + + // record values: + Pos startRecordPos; + Pos endRecordPos; + + // + AudioOutput* _audioMaster; + AudioOutput* _audioMonitor; + + void sendLocalOff(); + bool filterEvent(const MidiPlayEvent* event, int type, bool thru); + + void startRolling(); + void stopRolling(); + + void panic(); + void processMsg(AudioMsg* msg); + void process1(unsigned samplePos, unsigned offset, unsigned samples); + + void collectEvents(MidiTrack*, unsigned int startTick, unsigned int endTick); + + public: + Audio(); + virtual ~Audio() {} + + void process(unsigned frames); + bool sync(int state, unsigned frame); + void shutdown(); + void writeTick(); + + // transport: + bool start(); + void stop(bool); + void seek(const Pos& pos); + + bool isPlaying() const { return state == PLAY || state == LOOP1 || state == LOOP2; } + bool isRecording() const { return state == PLAY && recording; } + void setRunning(bool val) { _running = val; } + bool isRunning() const { return _running; } + + //----------------------------------------- + // message interface + //----------------------------------------- + + void msgSeek(const Pos&); + void msgPlay(bool val); + + void msgRemoveTrack(Track*, bool u = true); + void msgRemoveTracks(); + void msgChangeTrack(Track* oldTrack, Track* newTrack, bool u = true); + void msgMoveTrack(int idx1, int dx2, bool u = true); + void msgAddPart(Part*, bool u = true); + void msgRemovePart(Part*, bool u = true); + //void msgChangePart(Part* oldPart, Part* newPart, bool u = true); + void msgChangePart(Part* oldPart, Part* newPart, bool u = true, bool doCtrls = true, bool doClones = false); + //void msgAddEvent(Event&, Part*, bool u = true); + void msgAddEvent(Event&, Part*, bool u = true, bool doCtrls = true, bool doClones = false); + //void msgDeleteEvent(Event&, Part*, bool u = true); + void msgDeleteEvent(Event&, Part*, bool u = true, bool doCtrls = true, bool doClones = false); + //void msgChangeEvent(Event&, Event&, Part*, bool u = true); + void msgChangeEvent(Event&, Event&, Part*, bool u = true, bool doCtrls = true, bool doClones = false); + void msgScanAlsaMidiPorts(); + void msgAddTempo(int tick, int tempo, bool doUndoFlag = true); + void msgSetTempo(int tick, int tempo, bool doUndoFlag = true); + void msgUpdateSoloStates(); + void msgSetAux(AudioTrack*, int, double); + void msgSetGlobalTempo(int val); + void msgDeleteTempo(int tick, int tempo, bool doUndoFlag = true); + void msgAddSig(int tick, int z, int n, bool doUndoFlag = true); + void msgRemoveSig(int tick, int z, int n, bool doUndoFlag = true); + void msgShowInstrumentGui(MidiInstrument*, bool); + void msgPanic(); + void sendMsg(AudioMsg*); + bool sendMessage(AudioMsg* m, bool doUndo); + void msgRemoveRoute(Route, Route); + void msgRemoveRoute1(Route, Route); + void msgAddRoute(Route, Route); + void msgAddRoute1(Route, Route); + void msgAddPlugin(AudioTrack*, int idx, PluginI* plugin); + void msgSetMute(AudioTrack*, bool val); + void msgSetVolume(AudioTrack*, double val); + void msgSetPan(AudioTrack*, double val); + void msgAddSynthI(SynthI* synth); + void msgRemoveSynthI(SynthI* synth); + void msgSetSegSize(int, int); + void msgSetPrefader(AudioTrack*, int); + void msgSetChannels(AudioTrack*, int); + void msgSetOff(AudioTrack*, bool); + void msgSetRecord(AudioTrack*, bool); + void msgUndo(); + void msgRedo(); + void msgLocalOff(); + void msgInitMidiDevices(); + void msgResetMidiDevices(); + void msgIdle(bool); + void msgBounce(); + //void msgSetPluginCtrlVal(PluginI* /*plugin*/, int /*param*/, double /*val*/); + void msgSetPluginCtrlVal(AudioTrack*, int /*param*/, double /*val*/); + void msgSwapControllerIDX(AudioTrack*, int, int); + void msgClearControllerEvents(AudioTrack*, int); + void msgSeekPrevACEvent(AudioTrack*, int); + void msgSeekNextACEvent(AudioTrack*, int); + void msgEraseACEvent(AudioTrack*, int, int); + void msgEraseRangeACEvents(AudioTrack*, int, int, int); + void msgAddACEvent(AudioTrack*, int, int, double); + void msgSetSolo(Track*, bool); + void msgSetHwCtrlState(MidiPort*, int, int, int); + void msgSetHwCtrlStates(MidiPort*, int, int, int, int); + void msgSetTrackOutChannel(MidiTrack*, int); + void msgSetTrackOutPort(MidiTrack*, int); + void msgRemapPortDrumCtlEvents(int, int, int, int); + void msgChangeAllPortDrumCtrlEvents(bool, bool); + void msgSetSendMetronome(AudioTrack*, bool); + + void msgPlayMidiEvent(const MidiPlayEvent* event); + void rescanAlsaPorts(); + + void midiPortsChanged(); + + const Pos& pos() const { return _pos; } + const Pos& getStartRecordPos() const { return startRecordPos; } + const Pos& getEndRecordPos() const { return endRecordPos; } + int loopCount() { return _loopCount; } // Number of times we have looped so far + unsigned loopFrame() { return _loopFrame; } + + int tickPos() const { return curTickPos; } + int timestamp() const; + void processMidi(); + unsigned curFrame() const; + void recordStop(); + bool freewheel() const { return _freewheel; } + void setFreewheel(bool val); + int getFrameOffset() const { return frameOffset; } + void initDevices(); + + AudioOutput* audioMaster() const { return _audioMaster; } + AudioOutput* audioMonitor() const { return _audioMonitor; } + void setMaster(AudioOutput* track) { _audioMaster = track; } + void setMonitor(AudioOutput* track) { _audioMonitor = track; } + void sendMsgToGui(char c); + bool bounce() const { return _bounce; } + }; + +extern int processAudio(unsigned long, void*); +extern void processAudio1(void*, void*); + +extern Audio* audio; +extern AudioDevice* audioDevice; // current audio device in use +#endif + diff --git a/muse2/muse/audioconvert.cpp b/muse2/muse/audioconvert.cpp new file mode 100644 index 00000000..878bc8e7 --- /dev/null +++ b/muse2/muse/audioconvert.cpp @@ -0,0 +1,886 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: audioconvert.cpp,v 1.1.1.1 2009/12/28 16:07:33 terminator356 Exp $ +// +// (C) Copyright 1999-2009 Werner Schweer (ws@seh.de) +// +// Audio converter module created by Tim terminator356 +//========================================================= + +#include + +#include "wave.h" +#include "globals.h" +#include "audioconvert.h" +#include "eventbase.h" + +//#define AUDIOCONVERT_DEBUG +//#define AUDIOCONVERT_DEBUG_PRC + +//--------------------------------------------------------- +// AudioConvertMap +//--------------------------------------------------------- + +void AudioConvertMap::remapEvents(const EventList* el) +{ + +} + +iAudioConvertMap AudioConvertMap::addEvent(EventBase* eb) +{ + iAudioConvertMap iacm = getConverter(eb); + if(iacm == end()) + { + AudioConverter* cv = 0; + if(!eb->sndFile().isNull()) + cv = new SRCAudioConverter(eb->sndFile().channels(), SRC_SINC_MEDIUM_QUALITY); + + // Use insert with hint for speed. + return insert(iacm, std::pair (eb, cv)); + } + else + // Adopt a policy of returning an already existing item to enforce no-duplicates. + return iacm; +} + +void AudioConvertMap::removeEvent(EventBase* eb) +{ + iAudioConvertMap iacm = find(eb); + if(iacm != end()) + { + AudioConverter* cv = iacm->second; + if(cv) + delete cv; + erase(iacm); + } +} + +iAudioConvertMap AudioConvertMap::getConverter(EventBase* eb) +{ + return find(eb); +} + +//--------------------------------------------------------- +// AudioConverter +//--------------------------------------------------------- + +AudioConverter::AudioConverter() +{ + #ifdef AUDIOCONVERT_DEBUG + printf("AudioConverter::AudioConverter this:%p\n", this); + #endif + + _refCount = 1; + _sfCurFrame = 0; +} + +AudioConverter::~AudioConverter() +{ + #ifdef AUDIOCONVERT_DEBUG + printf("AudioConverter::~AudioConverter this:%p\n", this); + #endif +} + +AudioConverter* AudioConverter::reference() +{ + _refCount += 1; + #ifdef AUDIOCONVERT_DEBUG + printf("AudioConverter::reference this:%p current refcount:%d\n", this, _refCount); + #endif + return this; +} + +AudioConverter* AudioConverter::release(AudioConverter* cv) +{ + if(!cv) + return 0; + //if(cv->incRefCount(-1) <= 0) + cv->_refCount -= 1; + #ifdef AUDIOCONVERT_DEBUG + printf("AudioConverter::release converter:%p current refcount:%d\n", cv, cv->_refCount); + #endif + if(cv->_refCount <= 0) + { + #ifdef AUDIOCONVERT_DEBUG + printf("AudioConverter::release deleting converter:%p\n", cv); + #endif + delete cv; + cv = 0; + } + return cv; +} + +//off_t AudioConverter::readAudio(SndFileR& f, off_t sfCurFrame, unsigned offset, float** buffer, int channel, int n, bool doSeek, bool overwrite) +off_t AudioConverter::readAudio(SndFileR& f, unsigned offset, float** buffer, int channel, int n, bool doSeek, bool overwrite) +{ + if(f.isNull()) + return _sfCurFrame; + + // Added by Tim. p3.3.17 + //#ifdef AUDIOCONVERT_DEBUG_PRC + //printf("AudioConverter::process %s audConv:%p sfCurFrame:%ld offset:%u channel:%d fchan:%d n:%d\n", + // f.name().latin1(), this, sfCurFrame, offset, channel, f.channels(), n); + //#endif + + off_t frame = offset; // _spos is added before the call. + unsigned fsrate = f.samplerate(); + bool resample = isValid() && ((unsigned)sampleRate != fsrate); + + // No resampling needed? + if(!resample) + { + // Sample rates are the same. Just a regular seek + read, no conversion. + _sfCurFrame = f.seek(frame, 0); + return _sfCurFrame + f.read(channel, buffer, n, overwrite); + } + + // Is a 'transport' seek requested? (Not to be requested with every read! Should only be for 'first read' seeks, or positional 'transport' seeks.) + // Due to the support of sound file references in MusE, seek must ALWAYS be done before read, as before, + // except now we alter the seek position if sample rate conversion is being used and remember the seek positions. + if(doSeek) + { + // Sample rates are different. Seek to a calculated 'sample rate ratio factored' position. + + double srcratio = (double)fsrate / (double)sampleRate; + //long inSize = long((double)frames * _src_ratio) + 1 // From MusE-2 file converter. + off_t newfr = (off_t)floor(((double)frame * srcratio)); // From simplesynth. + + _sfCurFrame = f.seek(newfr, 0); + + // Added by Tim. p3.3.17 + //#ifdef AUDIOCONVERT_DEBUG_PRC + //printf("AudioConverter::process Seek frame:%ld converted to frame:%ld sfCurFrame:%ld\n", frame, newfr, sfCurFrame); + //#endif + + // Reset the converter. Its current state is meaningless now. + reset(); + } + else + { + // No seek requested. + // Added by Tim. p3.3.17 + //#ifdef AUDIOCONVERT_DEBUG_PRC + //printf("AudioConverter::process No 'transport' seek, rates different. Seeking to sfCurFrame:%ld\n", sfCurFrame); + //#endif + + // Sample rates are different. We can't just tell seek to go to an absolute calculated position, + // since the last position can vary - it might not be what the calculated position is. + // We must use the last position left by SRC conversion, ie. let the file position progress on its own. + _sfCurFrame = f.seek(_sfCurFrame, 0); + } + + /* + int fchan = f.channels(); + long outFrames = n; + long outSize = outFrames * fchan; + float outbuffer[outSize]; + */ + + //sfCurFrame = process(f, sfCurFrame, offset, &outbuffer[0], channel, n); +// sfCurFrame = process(f, sfCurFrame, outbuffer, channel, n); + //sfCurFrame = process(f, sfCurFrame, buffer, channel, n, overwrite); + _sfCurFrame = process(f, buffer, channel, n, overwrite); + + /* + float* poutbuf = &outbuffer[0]; + if(fchan == channel) + { + if(overwrite) + //for (size_t i = 0; i < rn; ++i) + for (int i = 0; i < n; ++i) + { + for(int ch = 0; ch < channel; ++ch) + *(buffer[ch] + i) = *poutbuf++; + } + else + //for(size_t i = 0; i < rn; ++i) + for(int i = 0; i < n; ++i) + { + for(int ch = 0; ch < channel; ++ch) + *(buffer[ch] + i) += *poutbuf++; + } + } + else if((fchan == 2) && (channel == 1)) + { + // stereo to mono + if(overwrite) + //for(size_t i = 0; i < rn; ++i) + for(int i = 0; i < n; ++i) + *(buffer[0] + i) = poutbuf[i + i] + poutbuf[i + i + 1]; + else + //for(size_t i = 0; i < rn; ++i) + for(int i = 0; i < n; ++i) + *(buffer[0] + i) += poutbuf[i + i] + poutbuf[i + i + 1]; + } + else if((fchan == 1) && (channel == 2)) + { + // mono to stereo + if(overwrite) + //for(size_t i = 0; i < rn; ++i) + for(int i = 0; i < n; ++i) + { + float data = *poutbuf++; + *(buffer[0]+i) = data; + *(buffer[1]+i) = data; + } + else + //for(size_t i = 0; i < rn; ++i) + for(int i = 0; i < n; ++i) + { + float data = *poutbuf++; + *(buffer[0]+i) += data; + *(buffer[1]+i) += data; + } + } + else + { + #ifdef AUDIOCONVERT_DEBUG + printf("AudioConverter::readAudio Channel mismatch: source chans:%d -> dst chans:%d\n", fchan, channel); + #endif + } + */ + + return _sfCurFrame; +} + +//--------------------------------------------------------- +// SRCAudioConverter +//--------------------------------------------------------- + +SRCAudioConverter::SRCAudioConverter(int channels, int type) : AudioConverter() +{ + #ifdef AUDIOCONVERT_DEBUG + printf("SRCAudioConverter::SRCAudioConverter this:%p channels:%d type:%d\n", this, channels, type); + #endif + + _type = type; + _src_state = 0; + _channels = channels; + + int srcerr; + #ifdef AUDIOCONVERT_DEBUG + printf("SRCAudioConverter::SRCaudioConverter Creating samplerate converter type:%d with %d channels\n", _type, _channels); + #endif + _src_state = src_new(_type, _channels, &srcerr); + if(!_src_state) + printf("SRCAudioConverter::SRCaudioConverter Creation of samplerate converter type:%d with %d channels failed:%s\n", _type, _channels, src_strerror(srcerr)); +} + +SRCAudioConverter::~SRCAudioConverter() +{ + #ifdef AUDIOCONVERT_DEBUG + printf("SRCAudioConverter::~SRCAudioConverter this:%p\n", this); + #endif + if(_src_state) + src_delete(_src_state); +} + +void SRCAudioConverter::setChannels(int ch) +{ + #ifdef AUDIOCONVERT_DEBUG + printf("SRCAudioConverter::setChannels this:%p channels:%d\n", this, ch); + #endif + if(_src_state) + src_delete(_src_state); + _src_state = 0; + + _channels = ch; + int srcerr; + #ifdef AUDIOCONVERT_DEBUG + printf("SRCAudioConverter::setChannels Creating samplerate converter type:%d with %d channels\n", _type, ch); + #endif + _src_state = src_new(_type, ch, &srcerr); + if(!_src_state) + printf("SRCAudioConverter::setChannels of samplerate converter type:%d with %d channels failed:%s\n", _type, ch, src_strerror(srcerr)); + return; +} + +void SRCAudioConverter::reset() +{ + if(!_src_state) + return; + #ifdef AUDIOCONVERT_DEBUG + printf("SRCAudioConverter::reset this:%p\n", this); + #endif + int srcerr = src_reset(_src_state); + if(srcerr != 0) + printf("SRCAudioConverter::reset Converter reset failed: %s\n", src_strerror(srcerr)); + return; +} + +//off_t SRCAudioConverter::process(SndFileR& f, off_t sfCurFrame, float** buffer, int channel, int n, bool overwrite) +off_t SRCAudioConverter::process(SndFileR& f, float** buffer, int channel, int n, bool overwrite) +{ + //return src_process(_src_state, sd); + + if(f.isNull()) + //return; + return _sfCurFrame; + + // Added by Tim. p3.3.17 + //#ifdef AUDIOCONVERT_DEBUG_PRC + //printf("AudioConverter::process %s audConv:%p sfCurFrame:%ld offset:%u channel:%d fchan:%d n:%d\n", + // f.name().latin1(), this, sfCurFrame, offset, channel, f.channels(), n); + //#endif + +// off_t frame = offset; // _spos is added before the call. + unsigned fsrate = f.samplerate(); + //bool resample = src_state && ((unsigned)sampleRate != fsrate); +// bool resample = isValid() && ((unsigned)sampleRate != fsrate); + + if((sampleRate == 0) || (fsrate == 0)) + { + #ifdef AUDIOCONVERT_DEBUG + printf("SRCAudioConverter::process Error: sampleRate or file samplerate is zero!\n"); + #endif + return _sfCurFrame; + } + + SRC_DATA srcdata; + int fchan = f.channels(); + // Ratio is defined as output sample rate over input samplerate. + double srcratio = (double)sampleRate / (double)fsrate; + // Extra input compensation. + long inComp = 1; + + long outFrames = n; + //long outSize = outFrames * channel; + long outSize = outFrames * fchan; + + //long inSize = long(outSize * srcratio) + 1 // From MusE-2 file converter. + //long inSize = (long)floor(((double)outSize / srcratio)); // From simplesynth. + //long inFrames = (long)floor(((double)outFrames / srcratio)); // From simplesynth. + long inFrames = (long)ceil(((double)outFrames / srcratio)) + inComp; // From simplesynth. + //long inFrames = (long)floor(double(outFrames * sfinfo.samplerate) / double(sampleRate)); // From simplesynth. + + long inSize = inFrames * fchan; + //long inSize = inFrames * channel; + + // Start with buffers at expected sizes. We won't need anything larger than this, but add 4 for good luck. + float inbuffer[inSize + 4]; + float outbuffer[outSize]; + + //size_t sfTotalRead = 0; + size_t rn = 0; + long totalOutFrames = 0; + + srcdata.data_in = inbuffer; + srcdata.data_out = outbuffer; +// srcdata.data_out = buffer; + + // Set some kind of limit on the number of attempts to completely fill the output buffer, + // in case something is really screwed up - we don't want to get stuck in a loop here. + int attempts = 10; + for(int attempt = 0; attempt < attempts; ++attempt) + { + rn = f.readDirect(inbuffer, inFrames); + //sfTotalRead += rn; + + // convert + //srcdata.data_in = inbuffer; + //srcdata.data_out = outbuffer; + //srcdata.data_out = poutbuf; + //srcdata.input_frames = inSize; + srcdata.input_frames = rn; + srcdata.output_frames = outFrames; + srcdata.end_of_input = ((long)rn != inFrames); + srcdata.src_ratio = srcratio; + + //#ifdef AUDIOCONVERT_DEBUG_PRC + //printf("AudioConverter::process attempt:%d inFrames:%ld outFrames:%ld rn:%d data in:%p out:%p", + // attempt, inFrames, outFrames, rn, srcdata.data_in, srcdata.data_out); + //#endif + + int srcerr = src_process(_src_state, &srcdata); + if(srcerr != 0) + { + printf("\nSRCAudioConverter::process SampleRate converter process failed: %s\n", src_strerror(srcerr)); + return _sfCurFrame += rn; + } + + totalOutFrames += srcdata.output_frames_gen; + + //#ifdef AUDIOCONVERT_DEBUG_PRC + //printf(" frames used in:%ld out:%ld totalOutFrames:%ld data in:%p out:%p\n", srcdata.input_frames_used, srcdata.output_frames_gen, totalOutFrames, srcdata.data_in, srcdata.data_out); + //#endif + + #ifdef AUDIOCONVERT_DEBUG + if(srcdata.output_frames_gen != outFrames) + printf("SRCAudioConverter::process %s output_frames_gen:%ld != outFrames:%ld inFrames:%ld srcdata.input_frames_used:%ld rn:%d\n", + f.name().latin1(), srcdata.output_frames_gen, outFrames, inFrames, srcdata.input_frames_used, rn); + #endif + + // If the number of frames read by the soundfile equals the input frames, go back. + // Otherwise we have reached the end of the file, so going back is useless since + // there shouldn't be any further calls. + if((long)rn == inFrames) + { + // Go back by the amount of unused frames. + sf_count_t seekn = inFrames - srcdata.input_frames_used; + if(seekn != 0) + { + #ifdef AUDIOCONVERT_DEBUG_PRC + printf("SRCAudioConverter::process Seek-back by:%d\n", seekn); + #endif + _sfCurFrame = f.seek(-seekn, SEEK_CUR); + } + else + _sfCurFrame += rn; + + if(totalOutFrames == n) + { + // We got our desired number of output frames. Stop attempting. + break; + } + else + { + // No point in continuing if on last attempt. + if(attempt == (attempts - 1)) + break; + + #ifdef AUDIOCONVERT_DEBUG + printf("SRCAudioConverter::process %s attempt:%d totalOutFrames:%ld != n:%d try again\n", f.name().latin1(), attempt, totalOutFrames, n); + #endif + + // SRC didn't give us the number of frames we requested. + // This can occasionally be radically different from the requested frames, or zero, + // even when ample excess input frames are supplied. + // Move the src output pointer to a new position. + srcdata.data_out += srcdata.output_frames_gen * channel; + // Set new number of maximum out frames. + outFrames -= srcdata.output_frames_gen; + // Calculate the new number of file input frames required. + inFrames = (long)ceil(((double)outFrames / srcratio)) + inComp; + // Keep trying. + continue; + } + } + else + { + _sfCurFrame += rn; + #ifdef AUDIOCONVERT_DEBUG + printf("SRCAudioConverter::process %s rn:%zd != inFrames:%ld output_frames_gen:%ld outFrames:%ld srcdata.input_frames_used:%ld\n", + f.name().latin1(), rn, inFrames, srcdata.output_frames_gen, outFrames, srcdata.input_frames_used); + #endif + + // We've reached the end of the file. Convert the number of frames read. + //rn = (double)rn * srcratio + 1; + //rn = (long)floor((double)rn * srcratio); + //if(rn > (size_t)outFrames) + // rn = outFrames; + // Stop attempting. + break; + } + } + + // If we still didn't get the desired number of output frames. + if(totalOutFrames != n) + { + #ifdef AUDIOCONVERT_DEBUG + printf("SRCAudioConverter::process %s totalOutFrames:%ld != n:%d\n", f.name().latin1(), totalOutFrames, n); + #endif + + // Let's zero the rest of it. + long b = totalOutFrames * channel; + long e = n * channel; + for(long i = b; i < e; ++i) + outbuffer[i] = 0.0f; + //buffer[i] = 0.0f; + } + + //float* poutbuf = &outbuffer[0]; + float* poutbuf = outbuffer; + if(fchan == channel) + { + if(overwrite) + //for (size_t i = 0; i < rn; ++i) + for (int i = 0; i < n; ++i) + { + for(int ch = 0; ch < channel; ++ch) + *(buffer[ch] + i) = *poutbuf++; + } + else + //for(size_t i = 0; i < rn; ++i) + for(int i = 0; i < n; ++i) + { + for(int ch = 0; ch < channel; ++ch) + *(buffer[ch] + i) += *poutbuf++; + } + } + else if((fchan == 2) && (channel == 1)) + { + // stereo to mono + if(overwrite) + //for(size_t i = 0; i < rn; ++i) + for(int i = 0; i < n; ++i) + *(buffer[0] + i) = poutbuf[i + i] + poutbuf[i + i + 1]; + else + //for(size_t i = 0; i < rn; ++i) + for(int i = 0; i < n; ++i) + *(buffer[0] + i) += poutbuf[i + i] + poutbuf[i + i + 1]; + } + else if((fchan == 1) && (channel == 2)) + { + // mono to stereo + if(overwrite) + //for(size_t i = 0; i < rn; ++i) + for(int i = 0; i < n; ++i) + { + float data = *poutbuf++; + *(buffer[0]+i) = data; + *(buffer[1]+i) = data; + } + else + //for(size_t i = 0; i < rn; ++i) + for(int i = 0; i < n; ++i) + { + float data = *poutbuf++; + *(buffer[0]+i) += data; + *(buffer[1]+i) += data; + } + } + else + { + #ifdef AUDIOCONVERT_DEBUG + printf("SRCAudioConverter::process Channel mismatch: source chans:%d -> dst chans:%d\n", fchan, channel); + #endif + } + + return _sfCurFrame; +} + +#ifdef RUBBERBAND_SUPPORT + +//--------------------------------------------------------- +// RubberBandAudioConverter +//--------------------------------------------------------- + +RubberBandAudioConverter::RubberBandAudioConverter(int channels, int options) : AudioConverter() +{ + #ifdef AUDIOCONVERT_DEBUG + printf("RubberBandAudioConverter::RubberBandAudioConverter this:%p channels:%d options:%x\n", this, channels, options); + #endif + + _options = options; + _rbs = 0; + _channels = channels; + + _rbs = new RubberBandStretcher(sampleRate, _channels, _options); // , initialTimeRatio = 1.0, initialPitchScale = 1.0 +} + +RubberBandAudioConverter::~RubberBandAudioConverter() +{ + #ifdef AUDIOCONVERT_DEBUG + printf("RubberBandAudioConverter::~RubberBandAudioConverter this:%p\n", this); + #endif + if(_rbs) + delete _rbs; +} + +void RubberBandAudioConverter::setChannels(int ch) +{ + #ifdef AUDIOCONVERT_DEBUG + printf("RubberBandAudioConverter::setChannels this:%p channels:%d\n", this, ch); + #endif + if(_rbs) + delete _rbs; + _rbs = 0; + + _channels = ch; + _rbs = new RubberBandStretcher(sampleRate, _channels, _options); // , initialTimeRatio = 1.0, initialPitchScale = 1.0 +} + +void RubberBandAudioConverter::reset() +{ + if(!_rbs) + return; + #ifdef AUDIOCONVERT_DEBUG + printf("RubberBandAudioConverter::reset this:%p\n", this); + #endif + _rbs->reset(); + return; +} + +///////////////////////////////// +// TODO: Not finished yet.. +//////////////////////////////// +//off_t RubberBandAudioConverter::process(SndFileR& f, off_t sfCurFrame, float** buffer, int channel, int n, bool overwrite) +off_t RubberBandAudioConverter::process(SndFileR& f, float** buffer, int channel, int n, bool overwrite) +{ + //return src_process(_src_state, sd); + + if(f.isNull()) + //return; + return _sfCurFrame; + + // Added by Tim. p3.3.17 + //#ifdef AUDIOCONVERT_DEBUG_PRC + //printf("AudioConverter::process %s audConv:%p sfCurFrame:%ld offset:%u channel:%d fchan:%d n:%d\n", + // f.name().latin1(), this, sfCurFrame, offset, channel, f.channels(), n); + //#endif + +// off_t frame = offset; // _spos is added before the call. + unsigned fsrate = f.samplerate(); + //bool resample = src_state && ((unsigned)sampleRate != fsrate); +// bool resample = isValid() && ((unsigned)sampleRate != fsrate); + + if((sampleRate == 0) || (fsrate == 0)) + { + #ifdef AUDIOCONVERT_DEBUG + printf("RubberBandAudioConverter::process Error: sampleRate or file samplerate is zero!\n"); + #endif + return _sfCurFrame; + } + +// SRC_DATA srcdata; + int fchan = f.channels(); + // Ratio is defined as output sample rate over input samplerate. + double srcratio = (double)sampleRate / (double)fsrate; + // Extra input compensation. + long inComp = 1; + + long outFrames = n; + //long outSize = outFrames * channel; + long outSize = outFrames * fchan; + + //long inSize = long(outSize * srcratio) + 1 // From MusE-2 file converter. + //long inSize = (long)floor(((double)outSize / srcratio)); // From simplesynth. + //long inFrames = (long)floor(((double)outFrames / srcratio)); // From simplesynth. + long inFrames = (long)ceil(((double)outFrames / srcratio)) + inComp; // From simplesynth. + //long inFrames = (long)floor(double(outFrames * sfinfo.samplerate) / double(sampleRate)); // From simplesynth. + + long inSize = inFrames * fchan; + //long inSize = inFrames * channel; + + // Start with buffers at expected sizes. We won't need anything larger than this, but add 4 for good luck. + float inbuffer[inSize]; // +4 +// float outbuffer[outSize]; + + //float* rbinbuffer[fchan]; + //float rbindata[inSize]; + //for (int i = 0; i < fchan; ++i) + // rbinbuffer[i] = rbindata + i * inFrames; + + float* rboutbuffer[fchan]; + float rboutdata[outSize]; + for (int i = 0; i < fchan; ++i) + rboutbuffer[i] = rboutdata + i * outFrames; + + //size_t sfTotalRead = 0; + size_t rn = 0; + long totalOutFrames = 0; + +// srcdata.data_in = inbuffer; + //srcdata.data_out = outbuffer; +// srcdata.data_out = buffer; + float** data_out = rboutbuffer; + + // For just sample rate conversion, apply same ratio to both time and pitch. + _rbs->setTimeRatio(srcratio); + _rbs->setPitchScale(srcratio); + + // Set some kind of limit on the number of attempts to completely fill the output buffer, + // in case something is really screwed up - we don't want to get stuck in a loop here. + int attempts = 10; + for(int attempt = 0; attempt < attempts; ++attempt) + { + size_t sreq = _rbs->getSamplesRequired(); + + size_t rbinSize = sreq * fchan; + float* rbinbuffer[fchan]; + float rbindata[rbinSize]; + for(int i = 0; i < fchan; ++i) + rbinbuffer[i] = rbindata + i * sreq; + +// rn = f.readDirect(inbuffer, inFrames); + rn = f.readDirect(inbuffer, sreq); + //sfTotalRead += rn; + + // Must de-interleave soundfile data to feed to rubberband. + for(size_t i = 0; i < rn; ++i) + { + for(int ch = 0; ch < fchan; ++ch) + *(rbinbuffer[ch] + i) = *inbuffer++; + } + + _rbs->process(rbinbuffer, rn, (long)rn != inFrames); + + // "This function returns -1 if all data has been fully processed and all output read, and the stretch process is now finished." + int savail = _rbs->available(); + + + // convert + //srcdata.data_in = inbuffer; + //srcdata.data_out = outbuffer; + //srcdata.data_out = poutbuf; + //srcdata.input_frames = inSize; + srcdata.input_frames = rn; + srcdata.output_frames = outFrames; + srcdata.end_of_input = ((long)rn != inFrames); + srcdata.src_ratio = srcratio; + + //#ifdef AUDIOCONVERT_DEBUG_PRC + //printf("AudioConverter::process attempt:%d inFrames:%ld outFrames:%ld rn:%d data in:%p out:%p", + // attempt, inFrames, outFrames, rn, srcdata.data_in, srcdata.data_out); + //#endif + + int srcerr = src_process(_src_state, &srcdata); + if(srcerr != 0) + { + printf("\RubberBandAudioConverter::process SampleRate converter process failed: %s\n", src_strerror(srcerr)); + return _sfCurFrame += rn; + } + + totalOutFrames += srcdata.output_frames_gen; + + //#ifdef AUDIOCONVERT_DEBUG_PRC + //printf(" frames used in:%ld out:%ld totalOutFrames:%ld data in:%p out:%p\n", srcdata.input_frames_used, srcdata.output_frames_gen, totalOutFrames, srcdata.data_in, srcdata.data_out); + //#endif + + #ifdef AUDIOCONVERT_DEBUG + if(srcdata.output_frames_gen != outFrames) + printf("RubberBandAudioConverter::process %s output_frames_gen:%ld != outFrames:%ld inFrames:%ld srcdata.input_frames_used:%ld rn:%d\n", + f.name().latin1(), srcdata.output_frames_gen, outFrames, inFrames, srcdata.input_frames_used, rn); + #endif + + // If the number of frames read by the soundfile equals the input frames, go back. + // Otherwise we have reached the end of the file, so going back is useless since + // there shouldn't be any further calls. + if((long)rn == inFrames) + { + // Go back by the amount of unused frames. + sf_count_t seekn = inFrames - srcdata.input_frames_used; + if(seekn != 0) + { + #ifdef AUDIOCONVERT_DEBUG_PRC + printf("RubberBandAudioConverter::process Seek-back by:%d\n", seekn); + #endif + _sfCurFrame = f.seek(-seekn, SEEK_CUR); + } + else + _sfCurFrame += rn; + + if(totalOutFrames == n) + { + // We got our desired number of output frames. Stop attempting. + break; + } + else + { + // No point in continuing if on last attempt. + if(attempt == (attempts - 1)) + break; + + #ifdef AUDIOCONVERT_DEBUG + printf("RubberBandAudioConverter::process %s attempt:%d totalOutFrames:%ld != n:%d try again\n", f.name().latin1(), attempt, totalOutFrames, n); + #endif + + // We didn't get the number of frames we requested. + // This can occasionally be radically different from the requested frames, or zero, + // even when ample excess input frames are supplied. + // Move the src output pointer to a new position. + srcdata.data_out += srcdata.output_frames_gen * channel; + // Set new number of maximum out frames. + outFrames -= srcdata.output_frames_gen; + // Calculate the new number of file input frames required. + inFrames = (long)ceil(((double)outFrames / srcratio)) + inComp; + // Keep trying. + continue; + } + } + else + { + _sfCurFrame += rn; + #ifdef AUDIOCONVERT_DEBUG + printf("RubberBandAudioConverter::process %s rn:%zd != inFrames:%ld output_frames_gen:%ld outFrames:%ld srcdata.input_frames_used:%ld\n", + f.name().latin1(), rn, inFrames, srcdata.output_frames_gen, outFrames, srcdata.input_frames_used); + #endif + + // We've reached the end of the file. Convert the number of frames read. + //rn = (double)rn * srcratio + 1; + //rn = (long)floor((double)rn * srcratio); + //if(rn > (size_t)outFrames) + // rn = outFrames; + // Stop attempting. + break; + } + } + + // If we still didn't get the desired number of output frames. + if(totalOutFrames != n) + { + #ifdef AUDIOCONVERT_DEBUG + printf("RubberBandAudioConverter::process %s totalOutFrames:%ld != n:%d\n", f.name().latin1(), totalOutFrames, n); + #endif + + // Let's zero the rest of it. + long b = totalOutFrames * channel; + long e = n * channel; + for(long i = b; i < e; ++i) + //outbuffer[i] = 0.0f; + buffer[i] = 0.0f; + } + + //float* poutbuf = &outbuffer[0]; + float* poutbuf = outbuffer; + if(fchan == channel) + { + if(overwrite) + //for (size_t i = 0; i < rn; ++i) + for (int i = 0; i < n; ++i) + { + for(int ch = 0; ch < channel; ++ch) + *(buffer[ch] + i) = *poutbuf++; + } + else + //for(size_t i = 0; i < rn; ++i) + for(int i = 0; i < n; ++i) + { + for(int ch = 0; ch < channel; ++ch) + *(buffer[ch] + i) += *poutbuf++; + } + } + else if((fchan == 2) && (channel == 1)) + { + // stereo to mono + if(overwrite) + //for(size_t i = 0; i < rn; ++i) + for(int i = 0; i < n; ++i) + *(buffer[0] + i) = poutbuf[i + i] + poutbuf[i + i + 1]; + else + //for(size_t i = 0; i < rn; ++i) + for(int i = 0; i < n; ++i) + *(buffer[0] + i) += poutbuf[i + i] + poutbuf[i + i + 1]; + } + else if((fchan == 1) && (channel == 2)) + { + // mono to stereo + if(overwrite) + //for(size_t i = 0; i < rn; ++i) + for(int i = 0; i < n; ++i) + { + float data = *poutbuf++; + *(buffer[0]+i) = data; + *(buffer[1]+i) = data; + } + else + //for(size_t i = 0; i < rn; ++i) + for(int i = 0; i < n; ++i) + { + float data = *poutbuf++; + *(buffer[0]+i) += data; + *(buffer[1]+i) += data; + } + } + else + { + #ifdef AUDIOCONVERT_DEBUG + printf("RubberBandAudioConverter::process Channel mismatch: source chans:%d -> dst chans:%d\n", fchan, channel); + #endif + } + + return _sfCurFrame; +} + +#endif // RUBBERBAND_SUPPORT diff --git a/muse2/muse/audioconvert.h b/muse2/muse/audioconvert.h new file mode 100644 index 00000000..039af912 --- /dev/null +++ b/muse2/muse/audioconvert.h @@ -0,0 +1,129 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: audioconvert.h,v 1.1.1.1 2009/12/28 16:07:33 terminator356 Exp $ +// +// (C) Copyright 1999-2009 Werner Schweer (ws@seh.de) +// +// Audio converter module created by Tim terminator356 +//========================================================= + +#ifndef __AUDIOCONVERT_H__ +#define __AUDIOCONVERT_H__ + +#include + +#ifdef RUBBERBAND_SUPPORT +#include +#endif + +#include +#include + +//#include "eventbase.h" +class EventBase; +class EventList; + +class SndFileR; + +//--------------------------------------------------------- +// AudioConverter +//--------------------------------------------------------- + +class AudioConverter +{ + protected: + int _refCount; + off_t _sfCurFrame; + + public: + AudioConverter(); + ~AudioConverter(); + + AudioConverter* reference(); + static AudioConverter* release(AudioConverter* cv); + + //off_t readAudio(SndFileR& /*sf*/, off_t /*sfCurFrame*/, unsigned /*offset*/, float** /*buffer*/, + // int /*channels*/, int /*frames*/, bool /*doSeek*/, bool /*overwrite*/); + off_t readAudio(SndFileR& /*sf*/, unsigned /*offset*/, float** /*buffer*/, + int /*channels*/, int /*frames*/, bool /*doSeek*/, bool /*overwrite*/); + + virtual bool isValid() = 0; + virtual void reset() = 0; + virtual void setChannels(int ch) = 0; + //virtual off_t process(SndFileR& /*sf*/, off_t /*sfCurFrame*/, float** /*buffer*/, + // int /*channels*/, int /*frames*/, bool /*overwrite*/) = 0; // Interleaved buffer if stereo. + virtual off_t process(SndFileR& /*sf*/, float** /*buffer*/, + int /*channels*/, int /*frames*/, bool /*overwrite*/) = 0; // Interleaved buffer if stereo. +}; + +//--------------------------------------------------------- +// SRCAudioConverter +//--------------------------------------------------------- + +class SRCAudioConverter : public AudioConverter +{ + int _type; + int _channels; + SRC_STATE* _src_state; + + public: + SRCAudioConverter(int channels, int type); + ~SRCAudioConverter(); + + virtual bool isValid() { return _src_state != 0; } + virtual void reset(); + virtual void setChannels(int ch); + //virtual off_t process(SndFileR& /*sf*/, off_t /*sfCurFrame*/, float** /*buffer*/, + // int /*channels*/, int /*frames*/, bool /*overwrite*/); // Interleaved buffer if stereo. + virtual off_t process(SndFileR& /*sf*/, float** /*buffer*/, + int /*channels*/, int /*frames*/, bool /*overwrite*/); // Interleaved buffer if stereo. +}; + +#ifdef RUBBERBAND_SUPPORT + +//--------------------------------------------------------- +// RubberBandAudioConverter +//--------------------------------------------------------- + +class RubberBandAudioConverter : public AudioConverter +{ + int _options; + int _channels; + RubberBandStretcher* _rbs; + + public: + RubberBandAudioConverter(int channels, int options); + ~RubberBandAudioConverter(); + + virtual bool isValid() { return _rbs != 0; } + virtual void reset(); + virtual void setChannels(int ch); + //virtual off_t process(SndFileR& /*sf*/, off_t /*sfCurFrame*/, float** /*buffer*/, + // int /*channels*/, int /*frames*/, bool /*overwrite*/); // Interleaved buffer if stereo. + virtual off_t process(SndFileR& /*sf*/, float** /*buffer*/, + int /*channels*/, int /*frames*/, bool /*overwrite*/); // Interleaved buffer if stereo. +}; + +#endif // RUBBERBAND_SUPPORT + +//--------------------------------------------------------- +// AudioConvertMap +//--------------------------------------------------------- + +typedef std::map >::iterator iAudioConvertMap; +typedef std::map >::const_iterator ciAudioConvertMap; + +//typedef std::map > AudioConvertMap; +class AudioConvertMap : public std::map > +{ + public: + void remapEvents(const EventList*); + iAudioConvertMap addEvent(EventBase*); + void removeEvent(EventBase*); + //AudioConverter* getConverter(const EventBase*); + iAudioConvertMap getConverter(EventBase*); +}; + +#endif + diff --git a/muse2/muse/audioprefetch.cpp b/muse2/muse/audioprefetch.cpp new file mode 100644 index 00000000..b2ddab8c --- /dev/null +++ b/muse2/muse/audioprefetch.cpp @@ -0,0 +1,262 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: audioprefetch.cpp,v 1.14.2.7 2009/12/20 05:00:35 terminator356 Exp $ +// +// (C) Copyright 2001 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include +#include +#include + +#include "audioprefetch.h" +#include "globals.h" +#include "track.h" +#include "song.h" +#include "audio.h" +#include "sync.h" + +// Added by Tim. p3.3.20 +//#define AUDIOPREFETCH_DEBUG + +enum { PREFETCH_TICK, PREFETCH_SEEK + }; + +//--------------------------------------------------------- +// PrefetchMsg +//--------------------------------------------------------- + +struct PrefetchMsg : public ThreadMsg { + int pos; + }; + +AudioPrefetch* audioPrefetch; + +//--------------------------------------------------------- +// AudioPrefetch +//--------------------------------------------------------- + +//AudioPrefetch::AudioPrefetch(int prio, const char* name) +// : Thread(prio,name) +AudioPrefetch::AudioPrefetch(const char* name) + : Thread(name) + { + seekPos = ~0; + writePos = ~0; + //seekDone = true; + seekCount = 0; + } + +//--------------------------------------------------------- +// readMsg +//--------------------------------------------------------- + +static void readMsgP(void* p, void*) + { + AudioPrefetch* at = (AudioPrefetch*)p; + at->readMsg1(sizeof(PrefetchMsg)); + } + +//--------------------------------------------------------- +// start +//--------------------------------------------------------- + +//void AudioPrefetch::start() +void AudioPrefetch::start(int priority) + { + clearPollFd(); + addPollFd(toThreadFdr, POLLIN, ::readMsgP, this, 0); + //Thread::start(); + Thread::start(priority); + } + +//--------------------------------------------------------- +// ~AudioPrefetch +//--------------------------------------------------------- + +AudioPrefetch::~AudioPrefetch() + { + } + +//--------------------------------------------------------- +// processMsg +//--------------------------------------------------------- + +void AudioPrefetch::processMsg1(const void* m) + { + const PrefetchMsg* msg = (PrefetchMsg*)m; + switch(msg->id) { + case PREFETCH_TICK: + if (audio->isRecording()) { + //puts("writeTick"); + audio->writeTick(); + } + // Indicate do not seek file before each read. + // Changed by Tim. p3.3.17 + //prefetch(); + prefetch(false); + + seekPos = ~0; // invalidate cached last seek position + break; + case PREFETCH_SEEK: + #ifdef AUDIOPREFETCH_DEBUG + printf("AudioPrefetch::processMsg1 PREFETCH_SEEK msg->pos:%d\n", msg->pos); + #endif + + // process seek in background + seek(msg->pos); + break; + default: + printf("AudioPrefetch::processMsg1: unknown message\n"); + } + } + +//--------------------------------------------------------- +// msgTick +//--------------------------------------------------------- + +void AudioPrefetch::msgTick() + { + 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, bool force) + { + if (samplePos == seekPos && !force) { + //seekDone = true; + return; + } + + ++seekCount; + //seekDone = false; + + #ifdef AUDIOPREFETCH_DEBUG + printf("AudioPrefetch::msgSeek samplePos:%u force:%d seekCount:%d\n", samplePos, force, seekCount); + #endif + + PrefetchMsg msg; + msg.id = PREFETCH_SEEK; + msg.pos = samplePos; + while (sendMsg1(&msg, sizeof(msg))) { + printf("AudioPrefetch::msgSeek::sleep(1)\n"); + sleep(1); + } + } + +//--------------------------------------------------------- +// prefetch +//--------------------------------------------------------- + +//void AudioPrefetch::prefetch() +void AudioPrefetch::prefetch(bool doSeek) + { + if (writePos == ~0U) { + printf("AudioPrefetch::prefetch: invalid write position\n"); + return; + } + if (song->loop() && !audio->bounce() && !extSyncFlag.value()) { + const Pos& loop = song->rPos(); + unsigned n = loop.frame() - writePos; + if (n < segmentSize) { + unsigned lpos = song->lPos().frame(); + // adjust loop start so we get exact loop len + if (n > lpos) + n = 0; +// printf("prefetch seek %d\n", writePos); + writePos = lpos - n; + } + } + WaveTrackList* tl = song->waves(); + for (iWaveTrack it = tl->begin(); it != tl->end(); ++it) { + WaveTrack* track = *it; + // p3.3.29 + // Save time. Don't bother if track is off. Track On/Off not designed for rapid repeated response (but mute is). + if(track->off()) + continue; + + int ch = track->channels(); + float* bp[ch]; +// printf("prefetch %d\n", writePos); + if (track->prefetchFifo()->getWriteBuffer(ch, segmentSize, bp, writePos)) { + // printf("AudioPrefetch::prefetch No write buffer!\n"); // p3.3.46 Was getting this... + continue; + } + //track->fetchData(writePos, segmentSize, bp); + track->fetchData(writePos, segmentSize, bp, doSeek); + + // p3.3.41 + //fprintf(stderr, "AudioPrefetch::prefetch data: segmentSize:%ld %e %e %e %e\n", segmentSize, bp[0][0], bp[0][1], bp[0][2], bp[0][3]); + + } + writePos += segmentSize; + } + +//--------------------------------------------------------- +// seek +//--------------------------------------------------------- + +void AudioPrefetch::seek(unsigned seekTo) + { +// printf("seek %d\n", seekTo); + #ifdef AUDIOPREFETCH_DEBUG + printf("AudioPrefetch::seek to:%u seekCount:%d\n", seekTo, seekCount); + #endif + + // Speedup: More than one seek message pending? + // Eat up seek messages until we get to the very LATEST one, + // because all the rest which came before it are irrelevant now, + // and processing them all was taking extreme time, especially with + // resampling enabled. + // In particular, when the user 'slides' the play cursor back and forth + // there are MANY seek messages in the pipe, and with resampling enabled + // it was taking minutes to finish seeking. If the user hit play during that time, + // things were messed up (FIFO underruns, choppy intermittent sound etc). + // Added by Tim. p3.3.20 + if(seekCount > 1) + { + --seekCount; + return; + } + + writePos = seekTo; + WaveTrackList* tl = song->waves(); + for (iWaveTrack it = tl->begin(); it != tl->end(); ++it) { + WaveTrack* track = *it; + track->clearPrefetchFifo(); + } + + bool isFirstPrefetch = true; + for (unsigned int i = 0; i < (fifoLength)-1; ++i)//prevent compiler warning: comparison of signed/unsigned + { + // Indicate do a seek command before read, but only on the first pass. + // Changed by Tim. p3.3.17 + //prefetch(); + prefetch(isFirstPrefetch); + + isFirstPrefetch = false; + + // To help speed things up even more, check the count again. Return if more seek messages are pending. + // Added by Tim. p3.3.20 + if(seekCount > 1) + { + --seekCount; + return; + } + } + + seekPos = seekTo; + //seekDone = true; + --seekCount; + } + diff --git a/muse2/muse/audioprefetch.h b/muse2/muse/audioprefetch.h new file mode 100644 index 00000000..dda4d895 --- /dev/null +++ b/muse2/muse/audioprefetch.h @@ -0,0 +1,46 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: audioprefetch.h,v 1.3.2.2 2009/12/20 05:00:35 terminator356 Exp $ +// +// (C) Copyright 2001 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __AUDIOPREFETCH_H__ +#define __AUDIOPREFETCH_H__ + +#include "thread.h" + +//--------------------------------------------------------- +// AudioPrefetch +//--------------------------------------------------------- + +class AudioPrefetch : public Thread { + unsigned writePos; + unsigned seekPos; // remember last seek to optimize seeks + + virtual void processMsg1(const void*); + //void prefetch(); + void prefetch(bool doSeek); + void seek(unsigned pos); + + volatile int seekCount; + + public: + //AudioPrefetch(int prio, const char* name); + AudioPrefetch(const char* name); + + ~AudioPrefetch(); + //virtual void start(); + virtual void start(int); + + void msgTick(); + void msgSeek(unsigned samplePos, bool force=false); + + //volatile bool seekDone; + bool seekDone() const { return seekCount == 0; } + }; + +extern AudioPrefetch* audioPrefetch; + +#endif diff --git a/muse2/muse/audiotrack.cpp b/muse2/muse/audiotrack.cpp new file mode 100644 index 00000000..189e39d1 --- /dev/null +++ b/muse2/muse/audiotrack.cpp @@ -0,0 +1,1639 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: audiotrack.cpp,v 1.14.2.21 2009/12/20 05:00:35 terminator356 Exp $ +// +// (C) Copyright 2004 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include +#include +#include +#include "track.h" +#include "event.h" +#include "song.h" +#include "audio.h" +#include "wave.h" +#include "xml.h" +#include "plugin.h" +#include "audiodev.h" + +// By T356. For caching jack in/out routing names BEFORE file save. +// Jack often shuts down during file save, causing the routes to be lost in the file. +// cacheJackRouteNames() is ONLY called from MusE::save() in app.cpp +// Update: Not required any more because the real problem was Jack RT priority, which has been fixed. +/* +typedef std::multimap jackRouteNameMap; +std::map jackRouteNameCache; +typedef std::multimap ::const_iterator ciJackRouteNameMap; +typedef std::map ::const_iterator ciJackRouteNameCache; +void cacheJackRouteNames() +{ + jackRouteNameCache.clear(); + const InputList* il = song->inputs(); + for(ciAudioInput iai = il->begin(); iai != il->end(); ++iai) + { + const RouteList* rl = (*iai)->inRoutes(); + if(!rl->empty()) + { + jackRouteNameMap rm = jackRouteNameMap(); + for(ciRoute r = rl->begin(); r != rl->end(); ++r) + rm.insert(std::pair(r->channel, r->name())); + jackRouteNameCache.insert(std::pair(*iai, rm)); + } + } + const OutputList* ol = song->outputs(); + for(ciAudioOutput iao = ol->begin(); iao != ol->end(); ++iao) + { + const RouteList* rl = (*iao)->outRoutes(); + if(!rl->empty()) + { + jackRouteNameMap rm = jackRouteNameMap(); + for(ciRoute r = rl->begin(); r != rl->end(); ++r) + rm.insert(std::pair(r->channel, r->name())); + jackRouteNameCache.insert(std::pair(*iao, rm)); + } + } +} +*/ + +//--------------------------------------------------------- +// AudioTrack +//--------------------------------------------------------- + +AudioTrack::AudioTrack(TrackType t) +//AudioTrack::AudioTrack(TrackType t, int num_out_bufs) + : Track(t) + { + //_totalOutChannels = num_out_bufs; // Is either parameter-default MAX_CHANNELS, or custom value passed (used by syntis). + _processed = false; + _haveData = false; + _sendMetronome = false; + _prefader = false; + _efxPipe = new Pipeline(); + _recFile = 0; + _channels = 0; + _automationType = AUTO_OFF; + //setChannels(1); + setChannels(2); + addController(new CtrlList(AC_VOLUME,"Volume",0.0,1.0)); + addController(new CtrlList(AC_PAN, "Pan", -1.0, 1.0)); + addController(new CtrlList(AC_MUTE,"Mute",0.0,1.0)); + + // Changed by Tim. p3.3.15 + //outBuffers = new float*[MAX_CHANNELS]; + //for (int i = 0; i < MAX_CHANNELS; ++i) + // outBuffers[i] = new float[segmentSize]; + //for (int i = 0; i < MAX_CHANNELS; ++i) + // posix_memalign((void**)(outBuffers + i), 16, sizeof(float) * segmentSize); + + // Let's allocate it all in one block, and just point the remaining buffer pointers into the block + // which allows faster one-shot buffer copying. + // Nope. Nice but interferes with possibility we don't know if other buffers are contiguous (jack buffers, local stack buffers etc.). + //posix_memalign((void**)(outBuffers), 16, sizeof(float) * segmentSize * MAX_CHANNELS); + //for (int i = 0; i < MAX_CHANNELS; ++i) + // *(outBuffers + i) = sizeof(float) * segmentSize * i; + + // p3.3.38 + // Easy way, less desirable... Start out with enough for MAX_CHANNELS. Then multi-channel syntis can re-allocate, + // via a call to (a modified!) setChannels(). + // Hard way, more desirable... Creating a synti instance passes the total channels to this constructor, overriding MAX_CHANNELS. + _totalOutChannels = MAX_CHANNELS; + outBuffers = new float*[_totalOutChannels]; + for (int i = 0; i < _totalOutChannels; ++i) + posix_memalign((void**)&outBuffers[i], 16, sizeof(float) * segmentSize); + + // This is only set by multi-channel syntis... + _totalInChannels = 0; + + bufferPos = MAXINT; + + setVolume(1.0); + } + +//AudioTrack::AudioTrack(const AudioTrack& t) +// : Track(t) +AudioTrack::AudioTrack(const AudioTrack& t, bool cloneParts) + : Track(t, cloneParts) + { + _totalOutChannels = t._totalOutChannels; // Is either MAX_CHANNELS, or custom value (used by syntis). + _processed = false; + _haveData = false; + _sendMetronome = t._sendMetronome; + _controller = t._controller; + _prefader = t._prefader; + _auxSend = t._auxSend; + _efxPipe = new Pipeline(*(t._efxPipe)); + _automationType = t._automationType; + _inRoutes = t._inRoutes; + _outRoutes = t._outRoutes; + // Changed by Tim. p3.3.15 + //outBuffers = new float*[MAX_CHANNELS]; + //for (int i = 0; i < MAX_CHANNELS; ++i) + // outBuffers[i] = new float[segmentSize]; + //for (int i = 0; i < MAX_CHANNELS; ++i) + // posix_memalign((void**)(outBuffers + i), 16, sizeof(float) * segmentSize); + + // p3.3.38 + int chans = _totalOutChannels; + // Number of allocated buffers is always MAX_CHANNELS or more, even if _totalOutChannels is less. + if(chans < MAX_CHANNELS) + chans = MAX_CHANNELS; + outBuffers = new float*[chans]; + for (int i = 0; i < chans; ++i) + posix_memalign((void**)&outBuffers[i], 16, sizeof(float) * segmentSize); + + bufferPos = MAXINT; + _recFile = t._recFile; + } + +AudioTrack::~AudioTrack() +{ + delete _efxPipe; + //for (int i = 0; i < MAX_CHANNELS; ++i) + // delete[] outBuffers[i]; + //delete[] outBuffers; + + // p3.3.15 + //for(int i = 0; i < MAX_CHANNELS; ++i) + //{ + // if(outBuffers[i]) + // free(outBuffers[i]); + //} + + // p3.3.38 + int chans = _totalOutChannels; + // Number of allocated buffers is always MAX_CHANNELS or more, even if _totalOutChannels is less. + if(chans < MAX_CHANNELS) + chans = MAX_CHANNELS; + for(int i = 0; i < chans; ++i) + { + if(outBuffers[i]) + free(outBuffers[i]); + } + delete[] outBuffers; + +} + +//--------------------------------------------------------- +// deleteAllEfxGuis +//--------------------------------------------------------- + +void AudioTrack::deleteAllEfxGuis() +{ + if(_efxPipe) + _efxPipe->deleteAllGuis(); +} + +//--------------------------------------------------------- +// clearEfxList +//--------------------------------------------------------- + +void AudioTrack::clearEfxList() +{ + if(_efxPipe) + for(int i = 0; i < PipelineDepth; i++) + (*_efxPipe)[i] = 0; +} + +//--------------------------------------------------------- +// newPart +//--------------------------------------------------------- + +Part* AudioTrack::newPart(Part*, bool /*clone*/) + { + return 0; + } + +//--------------------------------------------------------- +// addPlugin +//--------------------------------------------------------- + +void AudioTrack::addPlugin(PluginI* plugin, int idx) +{ + if (plugin == 0) + { + PluginI* oldPlugin = (*_efxPipe)[idx]; + if (oldPlugin) + { + oldPlugin->setID(-1); + oldPlugin->setTrack(0); + + int controller = oldPlugin->parameters(); + for (int i = 0; i < controller; ++i) + { + int id = genACnum(idx, i); + removeController(id); + } + } + } + efxPipe()->insert(plugin, idx); + if (plugin) + { + plugin->setID(idx); + plugin->setTrack(this); + + int controller = plugin->parameters(); + for (int i = 0; i < controller; ++i) + { + int id = genACnum(idx, i); + const char* name = plugin->paramName(i); + float min, max; + plugin->range(i, &min, &max); + CtrlValueType t = plugin->valueType(); + CtrlList* cl = new CtrlList(id); + cl->setRange(min, max); + cl->setName(QString(name)); + cl->setValueType(t); + LADSPA_PortRangeHint range = plugin->range(i); + if(LADSPA_IS_HINT_TOGGLED(range.HintDescriptor)) + cl->setMode(CtrlList::DISCRETE); + else + cl->setMode(CtrlList::INTERPOLATE); + cl->setCurVal(plugin->param(i)); + addController(cl); + } + } +} + +//--------------------------------------------------------- +// addAuxSend +//--------------------------------------------------------- + +void AudioTrack::addAuxSend(int n) + { + int nn = _auxSend.size(); + for (int i = nn; i < n; ++i) { + _auxSend.push_back(0.0); + _auxSend[i] = 0.0; //?? + } + } + +//--------------------------------------------------------- +// addController +//--------------------------------------------------------- + +void AudioTrack::addController(CtrlList* list) + { + _controller.add(list); + } + +//--------------------------------------------------------- +// removeController +//--------------------------------------------------------- + +void AudioTrack::removeController(int id) + { + iCtrlList i = _controller.find(id); + if (i == _controller.end()) { + printf("AudioTrack::removeController id %d not found\n", id); + return; + } + _controller.erase(i); + } + +//--------------------------------------------------------- +// swapControllerIDX +//--------------------------------------------------------- + +void AudioTrack::swapControllerIDX(int idx1, int idx2) +{ + // FIXME This code is ugly. + // At best we would like to modify the keys (IDXs) in-place and + // do some kind of deferred re-sort, but it can't be done... + + if(idx1 == idx2) + return; + + if(idx1 < 0 || idx2 < 0 || idx1 >= PipelineDepth || idx2 >= PipelineDepth) + return; + + CtrlList *cl; + CtrlList *newcl; + int id1 = (idx1 + 1) * AC_PLUGIN_CTL_BASE; + int id2 = (idx2 + 1) * AC_PLUGIN_CTL_BASE; + int i, j; + + CtrlListList tmpcll; + CtrlVal cv(0, 0.0); + + for(ciCtrlList icl = _controller.begin(); icl != _controller.end(); ++icl) + { + cl = icl->second; + i = cl->id() & AC_PLUGIN_CTL_ID_MASK; + j = cl->id() & ~((unsigned long)AC_PLUGIN_CTL_ID_MASK); + if(j == id1 || j == id2) + { + newcl = new CtrlList(i | (j == id1 ? id2 : id1)); + newcl->setMode(cl->mode()); + newcl->setValueType(cl->valueType()); + newcl->setName(cl->name()); + double min, max; + cl->range(&min, &max); + newcl->setRange(min, max); + newcl->setCurVal(cl->curVal()); + newcl->setDefault(cl->getDefault()); + for(iCtrl ic = cl->begin(); ic != cl->end(); ++ic) + { + cv = ic->second; + newcl->insert(std::pair(cv.frame, cv)); + } + tmpcll.insert(std::pair(newcl->id(), newcl)); + } + else + { + newcl = new CtrlList(); + *newcl = *cl; + tmpcll.insert(std::pair(newcl->id(), newcl)); + } + } + + for(iCtrlList ci = _controller.begin(); ci != _controller.end(); ++ci) + delete (*ci).second; + + _controller.clear(); + + for(ciCtrlList icl = tmpcll.begin(); icl != tmpcll.end(); ++icl) + { + newcl = icl->second; + _controller.insert(std::pair(newcl->id(), newcl)); + } + + + /* + unsigned int idmask = ~AC_PLUGIN_CTL_ID_MASK; + + CtrlList* cl; + CtrlList* ctl1 = 0; + CtrlList* ctl2 = 0; + CtrlList* newcl1 = 0; + CtrlList* newcl2 = 0; + CtrlVal cv(0, 0.0); + int id1 = (idx1 + 1) * AC_PLUGIN_CTL_BASE; + int id2 = (idx2 + 1) * AC_PLUGIN_CTL_BASE; + int i, j; + double min, max; + + for(ciCtrlList icl = _controller.begin(); icl != _controller.end(); ++icl) + { + cl = icl->second; + i = cl->id() & AC_PLUGIN_CTL_ID_MASK; + j = cl->id() & idmask; + + if(j == id1) + { + ctl1 = cl; + newcl1 = new CtrlList( i | id2 ); + newcl1->setMode(cl->mode()); + newcl1->setValueType(cl->valueType()); + newcl1->setName(cl->name()); + cl->range(&min, &max); + newcl1->setRange(min, max); + newcl1->setCurVal(cl->curVal()); + newcl1->setDefault(cl->getDefault()); + for(iCtrl ic = cl->begin(); ic != cl->end(); ++ic) + { + cv = ic->second; + newcl1->insert(std::pair(cv.frame, cv)); + } + } + //else + if(j == id2) + { + ctl2 = cl; + newcl2 = new CtrlList( i | id1 ); + newcl2->setMode(cl->mode()); + newcl2->setValueType(cl->valueType()); + newcl2->setName(cl->name()); + cl->range(&min, &max); + newcl2->setRange(min, max); + newcl2->setCurVal(cl->curVal()); + newcl2->setDefault(cl->getDefault()); + for(iCtrl ic = cl->begin(); ic != cl->end(); ++ic) + { + cv = ic->second; + newcl2->insert(std::pair(cv.frame, cv)); + } + } + } + if(ctl1) + _controller.erase(ctl1->id()); + if(ctl2) + _controller.erase(ctl2->id()); + if(newcl1) + //_controller.add(newcl1); + _controller.insert(std::pair(newcl1->id(), newcl1)); + if(newcl2) + _controller.insert(std::pair(newcl2->id(), newcl2)); + //_controller.add(newcl2); + */ +} + +//--------------------------------------------------------- +// setAutomationType +//--------------------------------------------------------- + +void AudioTrack::setAutomationType(AutomationType t) +{ + // Clear pressed and touched and rec event list. + clearRecAutomation(true); + + // Now set the type. + _automationType = t; +} + +//--------------------------------------------------------- +// processAutomationEvents +//--------------------------------------------------------- + +void AudioTrack::processAutomationEvents() +{ + if (_automationType != AUTO_TOUCH && _automationType != AUTO_WRITE) + return; + + for (iCtrlList icl = _controller.begin(); icl != _controller.end(); ++icl) + { + CtrlList* cl = icl->second; + int id = cl->id(); + + // Remove old events from record region. + if (_automationType == AUTO_WRITE) + { + int start = audio->getStartRecordPos().frame(); + int end = audio->getEndRecordPos().frame(); + iCtrl s = cl->lower_bound(start); + iCtrl e = cl->lower_bound(end); + + // Erase old events only if there were recorded events. + for(iCtrlRec icr = _recEvents.begin(); icr != _recEvents.end(); ++icr) + { + if(icr->id == id) // && icr->type == ARVT_VAL && icr->frame >= s->frame && icr->frame <= e->frame) + { + cl->erase(s, e); + break; + } + } + } + else + { // type AUTO_TOUCH + for (iCtrlRec icr = _recEvents.begin(); icr != _recEvents.end(); ++icr) + { + // Don't bother looking for start, it's OK, just take the first one. + // Needed for mousewheel and paging etc. + //if (icr->id == id && icr->type == ARVT_START) + if (icr->id == id) + { + int start = icr->frame; + + if(icr == _recEvents.end()) + { + int end = audio->getEndRecordPos().frame(); + iCtrl s = cl->lower_bound(start); + iCtrl e = cl->lower_bound(end); + cl->erase(s, e); + break; + } + + iCtrlRec icrlast = icr; + ++icr; + for(; ; ++icr) + { + if(icr == _recEvents.end()) + { + int end = icrlast->frame; + iCtrl s = cl->lower_bound(start); + iCtrl e = cl->lower_bound(end); + cl->erase(s, e); + break; + } + + if(icr->id == id && icr->type == ARVT_STOP) + { + int end = icr->frame; + // Erase everything up to, not including, this stop event's frame. + // Because an event was already stored directly when slider released. + if(end > start) + --end; + + iCtrl s = cl->lower_bound(start); + iCtrl e = cl->lower_bound(end); + + cl->erase(s, e); + + break; + } + + if(icr->id == id) + icrlast = icr; + } + if (icr == _recEvents.end()) + break; + } + } + } + + // Extract all recorded events for controller "id" + // from CtrlRecList and put into cl. + for (iCtrlRec icr = _recEvents.begin(); icr != _recEvents.end(); ++icr) + { + if (icr->id == id && (icr->type == ARVT_VAL || icr->type == ARVT_START)) + cl->add(icr->frame, icr->val); + } + } + + // Done with the recorded automation event list. Clear it. + _recEvents.clear(); + + // Try muse without this, so that the user can remain in automation write mode + // after a stop. + /* + if (automationType() == AUTO_WRITE) + { + setAutomationType(AUTO_READ); + song->update(SC_AUTOMATION); + } + */ + +} + +//--------------------------------------------------------- +// setControllerMode +//--------------------------------------------------------- + +void AudioTrack::setControllerMode(int ctlID, CtrlList::Mode m) + { + ciCtrlList cl = _controller.find(ctlID); + if(cl == _controller.end()) + return; + + cl->second->setMode(m); + } + +//--------------------------------------------------------- +// clearControllerEvents +//--------------------------------------------------------- + +void AudioTrack::clearControllerEvents(int id) +{ + ciCtrlList icl = _controller.find(id); + if(icl == _controller.end()) + return; + + CtrlList* cl = icl->second; + cl->clear(); + return; +} + +//--------------------------------------------------------- +// seekPrevACEvent +//--------------------------------------------------------- + +void AudioTrack::seekPrevACEvent(int id) +{ + ciCtrlList icl = _controller.find(id); + if(icl == _controller.end()) + return; + + CtrlList* cl = icl->second; + if(cl->empty()) + return; + + iCtrl s = cl->lower_bound(song->cPos().frame()); + if(s != cl->begin()) + --s; + song->setPos(Song::CPOS, Pos(s->second.frame, false), true, false, true); + return; +} + +//--------------------------------------------------------- +// seekNextACEvent +//--------------------------------------------------------- + +void AudioTrack::seekNextACEvent(int id) +{ + ciCtrlList icl = _controller.find(id); + if(icl == _controller.end()) + return; + + CtrlList* cl = icl->second; + if(cl->empty()) + return; + + iCtrl s = cl->upper_bound(song->cPos().frame()); + if(s == cl->end()) + { + --s; + } + + song->setPos(Song::CPOS, Pos(s->second.frame, false), true, false, true); + return; +} + +//--------------------------------------------------------- +// eraseACEvent +//--------------------------------------------------------- + +void AudioTrack::eraseACEvent(int id, int frame) +{ + ciCtrlList icl = _controller.find(id); + if(icl == _controller.end()) + return; + + CtrlList* cl = icl->second; + if(cl->empty()) + return; + + iCtrl s = cl->find(frame); + if(s != cl->end()) + cl->erase(s); + return; +} + +//--------------------------------------------------------- +// eraseRangeACEvents +//--------------------------------------------------------- + +void AudioTrack::eraseRangeACEvents(int id, int frame1, int frame2) +{ + ciCtrlList icl = _controller.find(id); + if(icl == _controller.end()) + return; + + CtrlList* cl = icl->second; + if(cl->empty()) + return; + + iCtrl s = cl->lower_bound(frame1); + iCtrl e = cl->lower_bound(frame2); + cl->erase(s, e); + return; +} + +//--------------------------------------------------------- +// addACEvent +//--------------------------------------------------------- + +void AudioTrack::addACEvent(int id, int frame, double val) +{ + ciCtrlList icl = _controller.find(id); + if(icl == _controller.end()) + return; + + CtrlList* cl = icl->second; + + // Add will replace if found. + cl->add(frame, val); + return; +} + +//--------------------------------------------------------- +// volume +//--------------------------------------------------------- + +double AudioTrack::volume() const + { + ciCtrlList cl = _controller.find(AC_VOLUME); + if (cl == _controller.end()) + return 0.0; + + if (automation && + automationType() != AUTO_OFF && _volumeEnCtrl && _volumeEn2Ctrl ) + return cl->second->value(song->cPos().frame()); + else + return cl->second->curVal(); + } + +//--------------------------------------------------------- +// setVolume +//--------------------------------------------------------- + +void AudioTrack::setVolume(double val) + { + iCtrlList cl = _controller.find(AC_VOLUME); + if (cl == _controller.end()) { + printf("no volume controller %s %zd\n", + name().latin1(), _controller.size()); + return; + } + cl->second->setCurVal(val); + } + +//--------------------------------------------------------- +// pan +//--------------------------------------------------------- + +double AudioTrack::pan() const + { + ciCtrlList cl = _controller.find(AC_PAN); + if (cl == _controller.end()) + return 0.0; + + if (automation && + automationType() != AUTO_OFF && _panEnCtrl && _panEn2Ctrl ) + return cl->second->value(song->cPos().frame()); + else + return cl->second->curVal(); + } + +//--------------------------------------------------------- +// setPan +//--------------------------------------------------------- + +void AudioTrack::setPan(double val) + { + iCtrlList cl = _controller.find(AC_PAN); + if (cl == _controller.end()) { + printf("no pan controller\n"); + return; + } + cl->second->setCurVal(val); + } + +//--------------------------------------------------------- +// pluginCtrlVal +//--------------------------------------------------------- + +double AudioTrack::pluginCtrlVal(int ctlID) const + { + ciCtrlList cl = _controller.find(ctlID); + if (cl == _controller.end()) + return 0.0; + + if (automation && (automationType() != AUTO_OFF)) + return cl->second->value(song->cPos().frame()); + else + return cl->second->curVal(); + } + +//--------------------------------------------------------- +// setPluginCtrlVal +//--------------------------------------------------------- + +void AudioTrack::setPluginCtrlVal(int param, double val) +{ + iCtrlList cl = _controller.find(param); + if (cl == _controller.end()) + return; + + cl->second->setCurVal(val); +} + +void AudioTrack::recordAutomation(int n, double v) + { + if(!automation) + return; + if(audio->isPlaying()) + _recEvents.push_back(CtrlRecVal(song->cPos().frame(), n, v)); + else + { + if(automationType() == AUTO_WRITE) + _recEvents.push_back(CtrlRecVal(song->cPos().frame(), n, v)); + else + if(automationType() == AUTO_TOUCH) + // In touch mode and not playing. Send directly to controller list. + { + iCtrlList cl = _controller.find(n); + if (cl == _controller.end()) + return; + // Add will replace if found. + cl->second->add(song->cPos().frame(), v); + } + } + } + +void AudioTrack::startAutoRecord(int n, double v) + { + if(!automation) + return; + if(audio->isPlaying()) + { + if(automationType() == AUTO_TOUCH) + _recEvents.push_back(CtrlRecVal(song->cPos().frame(), n, v, ARVT_START)); + else + if(automationType() == AUTO_WRITE) + _recEvents.push_back(CtrlRecVal(song->cPos().frame(), n, v)); + } + else + { + if(automationType() == AUTO_TOUCH) + // In touch mode and not playing. Send directly to controller list. + { + iCtrlList cl = _controller.find(n); + if (cl == _controller.end()) + return; + // Add will replace if found. + cl->second->add(song->cPos().frame(), v); + } + else + if(automationType() == AUTO_WRITE) + _recEvents.push_back(CtrlRecVal(song->cPos().frame(), n, v)); + } + } + +void AudioTrack::stopAutoRecord(int n, double v) + { + if(!automation) + return; + if(audio->isPlaying()) + { + if(automationType() == AUTO_TOUCH) + { + audio->msgAddACEvent(this, n, song->cPos().frame(), v); + _recEvents.push_back(CtrlRecVal(song->cPos().frame(), n, v, ARVT_STOP)); + } + } + } + +//--------------------------------------------------------- +// AudioTrack::writeProperties +//--------------------------------------------------------- + +void AudioTrack::writeProperties(int level, Xml& xml) const + { + Track::writeProperties(level, xml); + xml.intTag(level, "prefader", prefader()); + xml.intTag(level, "sendMetronome", sendMetronome()); + xml.intTag(level, "automation", int(automationType())); + if (hasAuxSend()) { + int naux = song->auxs()->size(); + for (int idx = 0; idx < naux; ++idx) { + QString s("%2\n"); + xml.nput(level, s.arg(idx).arg(_auxSend[idx])); + } + } + for (ciPluginI ip = _efxPipe->begin(); ip != _efxPipe->end(); ++ip) { + if (*ip) + (*ip)->writeConfiguration(level, xml); + } + for (ciCtrlList icl = _controller.begin(); icl != _controller.end(); ++icl) { + const CtrlList* cl = icl->second; + QString s("controller id=\"%1\" cur=\"%2\""); + xml.tag(level++, s.arg(cl->id()).arg(cl->curVal())); + int i = 0; + for (ciCtrl ic = cl->begin(); ic != cl->end(); ++ic) { + QString s("%1 %2, "); + xml.nput(level, s.arg(ic->second.frame).arg(ic->second.val)); + ++i; + if (i >= 4) { + xml.put(level, ""); + i = 0; + } + } + if (i) + xml.put(level, ""); + xml.etag(level--, "controller"); + } + } + +//--------------------------------------------------------- +// readAuxSend +//--------------------------------------------------------- + +void AudioTrack::readAuxSend(Xml& xml) + { + unsigned idx = 0; + double val; + for (;;) { + Xml::Token token = xml.parse(); + const QString& tag = xml.s1(); + switch (token) { + case Xml::Error: + case Xml::End: + return; + case Xml::Attribut: + if (tag == "idx") + idx = xml.s2().toInt(); + break; + case Xml::Text: + val = tag.toDouble(); + break; + case Xml::TagEnd: + if (xml.s1() == "auxSend") { + if (_auxSend.size() < idx+1) + _auxSend.push_back(val); + else + _auxSend[idx] = val; + return; + } + default: + break; + } + } + } + +//--------------------------------------------------------- +// AudioTrack::readProperties +//--------------------------------------------------------- + +bool AudioTrack::readProperties(Xml& xml, const QString& tag) + { + if (tag == "plugin") + { + int rackpos; + for(rackpos = 0; rackpos < PipelineDepth; ++rackpos) + { + if(!(*_efxPipe)[rackpos]) + break; + } + if(rackpos < PipelineDepth) + { + PluginI* pi = new PluginI(); + pi->setTrack(this); + pi->setID(rackpos); + if(pi->readConfiguration(xml, false)) + delete pi; + else + (*_efxPipe)[rackpos] = pi; + } + else + printf("can't load plugin - plugin rack is already full\n"); + } + else if (tag == "auxSend") + readAuxSend(xml); + else if (tag == "prefader") + _prefader = xml.parseInt(); + else if (tag == "sendMetronome") + _sendMetronome = xml.parseInt(); + else if (tag == "automation") + setAutomationType(AutomationType(xml.parseInt())); + // Removed by T356 + // "recfile" tag not saved anymore + //else if (tag == "recfile") + // readRecfile(xml); + else if (tag == "controller") { + CtrlList* l = new CtrlList(); + l->read(xml); + + // Since (until now) muse wrote a 'zero' for plugin controller current value + // in the XML file, we can't use that value, now that plugin automation is added. + // We must take the value from the plugin control value. + // Otherwise we break all existing .med files with plugins, because the gui + // controls would all be set to zero. + // But we will allow for the (unintended, useless) possibility of a controller + // with no matching plugin control. + PluginI* p = 0; + bool ctlfound = false; + int m = l->id() & AC_PLUGIN_CTL_ID_MASK; + int n = (l->id() >> AC_PLUGIN_CTL_BASE_POW) - 1; + if(n >= 0 && n < PipelineDepth) + { + p = (*_efxPipe)[n]; + if(p && m < p->parameters()) + ctlfound = true; + } + + iCtrlList icl = _controller.find(l->id()); + if (icl == _controller.end()) + _controller.add(l); + else { + CtrlList* d = icl->second; + for (iCtrl i = l->begin(); i != l->end(); ++i) + d->insert(std::pair (i->first, i->second)); + + if(!ctlfound) + d->setCurVal(l->curVal()); + + d->setDefault(l->getDefault()); + delete l; + l = d; + } + + if(ctlfound) + { + l->setCurVal(p->param(m)); + LADSPA_PortRangeHint range = p->range(m); + if(LADSPA_IS_HINT_TOGGLED(range.HintDescriptor)) + l->setMode(CtrlList::DISCRETE); + else + l->setMode(CtrlList::INTERPOLATE); + } + } + else + return Track::readProperties(xml, tag); + return false; + } + +//--------------------------------------------------------- +// showPendingPluginNativeGuis +// This is needed because OSC needs all tracks with plugins to be already +// added to their track lists so it can find them and show their native guis. +//--------------------------------------------------------- + +void AudioTrack::showPendingPluginNativeGuis() +{ + for(int idx = 0; idx < PipelineDepth; ++idx) + { + PluginI* p = (*_efxPipe)[idx]; + if(!p) + continue; + + if(p->isShowNativeGuiPending()) + p->showNativeGui(true); + } +} + +//--------------------------------------------------------- +// mapRackPluginsToControllers +//--------------------------------------------------------- + +void AudioTrack::mapRackPluginsToControllers() +{ + // Iterate all possible plugin controller indexes... + for(int idx = PipelineDepth - 1; idx >= 0; idx--) + { + iCtrlList icl = _controller.lower_bound((idx + 1) * AC_PLUGIN_CTL_BASE); + if(icl == _controller.end() || ((icl->second->id() >> AC_PLUGIN_CTL_BASE_POW) - 1) != idx) + continue; + + // We found some controllers with that index. Now iterate the plugin rack... + for(int i = idx; i >= 0; i--) + { + PluginI* p = (*_efxPipe)[i]; + if(!p) + continue; + + // We found a plugin at a rack position. If the rack position is not the same as the controller index... + if(i != idx) + { + (*_efxPipe)[i] = 0; + (*_efxPipe)[idx] = p; + } + p->setID(idx); + + // It is now safe to update the controllers. + p->updateControllers(); + + break; + } + } + + // No matter of the outcome of the above - rack position is not too critical - + // making sure that each control has a controller is important. Otherwise they + // are stuck at zero can't be adjusted. + // Muse med files created before the automation patches (before 0.9pre1) may have broken + // controller sections, so this will allow more tolerance of them. + for(int idx = 0; idx < PipelineDepth; idx++) + { + PluginI* p = (*_efxPipe)[idx]; + if(!p) + continue; + + if(p->id() != idx) + p->setID(idx); + + int j = p->parameters(); + + for(int i = 0; i < j; i++) + { + int id = genACnum(idx, i); + CtrlList* l = 0; + + ciCtrlList icl = _controller.find(id); + if(icl == _controller.end()) + { + l = new CtrlList(id); + addController(l); + } + else + l = icl->second; + + // Force all of these now, even though they may have already been set. With a pre- + // 0.9pre1 med file with broken controller sections they may not be set correct. + float min, max; + p->range(i, &min, &max); + CtrlValueType t = p->valueType(); + l->setRange(min, max); + l->setName(QString(p->paramName(i))); + l->setValueType(t); + LADSPA_PortRangeHint rh = p->range(i); + if(LADSPA_IS_HINT_TOGGLED(rh.HintDescriptor)) + l->setMode(CtrlList::DISCRETE); + else + l->setMode(CtrlList::INTERPOLATE); + l->setCurVal(p->param(i)); + //l->setDefault(p->defaultValue(i)); + } + } + + // The loop is a safe way to delete while iterating 'non-linear' lists. + bool loop; + do + { + loop = false; + for(ciCtrlList icl = _controller.begin(); icl != _controller.end(); ++icl) + { + CtrlList* l = icl->second; + int id = l->id(); + // Ignore volume, pan, mute etc. + if(id < AC_PLUGIN_CTL_BASE) + continue; + int param = id & AC_PLUGIN_CTL_ID_MASK; + int idx = (id >> AC_PLUGIN_CTL_BASE_POW) - 1; + PluginI* p = (*_efxPipe)[idx]; + // If there's no plugin at that rack position, or the param is out of range of + // the number of controls in the plugin, then it's a stray controller. Delete it. + // Future: Leave room for possible bypass controller at AC_PLUGIN_CTL_ID_MASK -1. + //if(!p || (param >= p->parameters() && (param != AC_PLUGIN_CTL_ID_MASK -1))) + if(!p || (param >= p->parameters())) + { + _controller.erase(id); + + loop = true; + break; + } + } + } + while (loop); + + + // Although this tested OK, and is the 'official' way to erase while iterating, + // I don't trust it. I'm weary of this method. The technique didn't work + // in Audio::msgRemoveTracks(), see comments there. + /* + + // Now delete any stray controllers which don't belong to anything. + for(iCtrlList icl = _controller.begin(); icl != _controller.end(); ) + { + CtrlList* l = icl->second; + int id = l->id(); + // Ignore volume, pan, mute etc. + if(id < AC_PLUGIN_CTL_BASE) + { + ++icl; + continue; + } + int param = id & AC_PLUGIN_CTL_ID_MASK; + int idx = (id >> AC_PLUGIN_CTL_BASE_POW) - 1; + PluginI* p = (*_efxPipe)[idx]; + // If there's no plugin at that rack position, or the param is out of range of + // the number of controls in the plugin, then it's a stray controller. Delete it. + // Future: Leave room for possible bypass controller at AC_PLUGIN_CTL_ID_MASK -1. + //if(!p || (param >= p->parameters() && (param != AC_PLUGIN_CTL_ID_MASK -1))) + if(!p || (param >= p->parameters())) + _controller.erase(icl++); + else + ++icl; + } + */ +} + +/* +//--------------------------------------------------------- +// writeRouting +//--------------------------------------------------------- + +void AudioTrack::writeRouting(int level, Xml& xml) const +{ + QString n; + if (type() == Track::AUDIO_INPUT) { + ciJackRouteNameCache circ = jackRouteNameCache.find(this); + if(circ != jackRouteNameCache.end()) + { + jackRouteNameMap rm = circ->second; + for(ciJackRouteNameMap cirm = rm.begin(); cirm != rm.end(); ++cirm) + { + n = cirm->second; + if(!n.isEmpty()) + { + Route dst(name(), true, cirm->first); + xml.tag(level++, "Route"); + xml.strTag(level, "srcNode", n); + xml.strTag(level, "dstNode", dst.name()); + xml.etag(level--, "Route"); + } + } + } + } + if(type() == Track::AUDIO_OUTPUT) + { + ciJackRouteNameCache circ = jackRouteNameCache.find(this); + if(circ != jackRouteNameCache.end()) + { + jackRouteNameMap rm = circ->second; + for(ciJackRouteNameMap cirm = rm.begin(); cirm != rm.end(); ++cirm) + { + n = cirm->second; + if(!n.isEmpty()) + { + Route src(name(), false, cirm->first); + xml.tag(level++, "Route"); + xml.strTag(level, "srcNode", src.name()); + xml.strTag(level, "dstNode", n); + xml.etag(level--, "Route"); + } + } + } + } + else + { + const RouteList* rl = &_outRoutes; + for (ciRoute r = rl->begin(); r != rl->end(); ++r) { + if(!r->name().isEmpty()) + { + xml.tag(level++, "Route"); + xml.strTag(level, "srcNode", name()); + xml.strTag(level, "dstNode", r->name()); + xml.etag(level--, "Route"); + } + } + } +} +*/ + +//--------------------------------------------------------- +// AudioInput +//--------------------------------------------------------- + +AudioInput::AudioInput() + : AudioTrack(AUDIO_INPUT) + { + // set Default for Input Ports: + _mute = true; + //setVolume(1.0); + for (int i = 0; i < MAX_CHANNELS; ++i) + jackPorts[i] = 0; + //_channels = 0; + //setChannels(2); + } + +//AudioInput::AudioInput(const AudioInput& t) +// : AudioTrack(t) +AudioInput::AudioInput(const AudioInput& t, bool cloneParts) + : AudioTrack(t, cloneParts) + { + for (int i = 0; i < MAX_CHANNELS; ++i) + jackPorts[i] = t.jackPorts[i]; + } + +//--------------------------------------------------------- +// ~AudioInput +//--------------------------------------------------------- + +AudioInput::~AudioInput() + { + if (!checkAudioDevice()) return; + for (int i = 0; i < _channels; ++i) + if(jackPorts[i]) + audioDevice->unregisterPort(jackPorts[i]); + } + +//--------------------------------------------------------- +// write +//--------------------------------------------------------- + +void AudioInput::write(int level, Xml& xml) const + { + xml.tag(level++, "AudioInput"); + AudioTrack::writeProperties(level, xml); + xml.etag(level, "AudioInput"); + } + +//--------------------------------------------------------- +// read +//--------------------------------------------------------- + +void AudioInput::read(Xml& xml) + { + for (;;) { + Xml::Token token = xml.parse(); + const QString& tag = xml.s1(); + switch (token) { + case Xml::Error: + case Xml::End: + return; + case Xml::TagStart: + if (AudioTrack::readProperties(xml, tag)) + xml.unknown("AudioInput"); + break; + case Xml::Attribut: + break; + case Xml::TagEnd: + if (tag == "AudioInput") { + setName(name()); // allocate jack ports + mapRackPluginsToControllers(); + return; + } + default: + break; + } + } + } + +//--------------------------------------------------------- +// AudioOutput +//--------------------------------------------------------- + +AudioOutput::AudioOutput() + : AudioTrack(AUDIO_OUTPUT) + { + for (int i = 0; i < MAX_CHANNELS; ++i) + jackPorts[i] = 0; + //_channels = 0; + //setChannels(2); + } + +//AudioOutput::AudioOutput(const AudioOutput& t) +// : AudioTrack(t) +AudioOutput::AudioOutput(const AudioOutput& t, bool cloneParts) + : AudioTrack(t, cloneParts) + { + for (int i = 0; i < MAX_CHANNELS; ++i) + jackPorts[i] = t.jackPorts[i]; + _nframes = t._nframes; + } + +//--------------------------------------------------------- +// ~AudioOutput +//--------------------------------------------------------- + +AudioOutput::~AudioOutput() + { + if (!checkAudioDevice()) return; + for (int i = 0; i < _channels; ++i) + if(jackPorts[i]) + audioDevice->unregisterPort(jackPorts[i]); + } + +//--------------------------------------------------------- +// write +//--------------------------------------------------------- + +void AudioOutput::write(int level, Xml& xml) const + { + xml.tag(level++, "AudioOutput"); + AudioTrack::writeProperties(level, xml); + xml.etag(level, "AudioOutput"); + } + +//--------------------------------------------------------- +// read +//--------------------------------------------------------- + +void AudioOutput::read(Xml& xml) + { + for (;;) { + Xml::Token token = xml.parse(); + const QString& tag = xml.s1(); + switch (token) { + case Xml::Error: + case Xml::End: + return; + case Xml::TagStart: + if (AudioTrack::readProperties(xml, tag)) + xml.unknown("AudioOutput"); + break; + case Xml::Attribut: + break; + case Xml::TagEnd: + if (tag == "AudioOutput") { + setName(name()); // allocate jack ports + mapRackPluginsToControllers(); + return; + } + default: + break; + } + } + } + +//--------------------------------------------------------- +// write +//--------------------------------------------------------- + +void AudioGroup::write(int level, Xml& xml) const + { + xml.tag(level++, "AudioGroup"); + AudioTrack::writeProperties(level, xml); + xml.etag(level, "AudioGroup"); + } + +//--------------------------------------------------------- +// read +//--------------------------------------------------------- + +void AudioGroup::read(Xml& xml) + { + for (;;) { + Xml::Token token = xml.parse(); + const QString& tag = xml.s1(); + switch (token) { + case Xml::Error: + case Xml::End: + return; + case Xml::TagStart: + if (AudioTrack::readProperties(xml, tag)) + xml.unknown("AudioGroup"); + break; + case Xml::Attribut: + break; + case Xml::TagEnd: + if (tag == "AudioGroup") + { + mapRackPluginsToControllers(); + return; + } + default: + break; + } + } + } + +//--------------------------------------------------------- +// write +//--------------------------------------------------------- + +void AudioAux::write(int level, Xml& xml) const + { + xml.tag(level++, "AudioAux"); + AudioTrack::writeProperties(level, xml); + xml.etag(level, "AudioAux"); + } + +//--------------------------------------------------------- +// AudioAux +//--------------------------------------------------------- + +AudioAux::AudioAux() + : AudioTrack(AUDIO_AUX) +{ + //_channels = 0; + //setChannels(2); + // Changed by Tim. p3.3.15 + //for (int i = 0; i < MAX_CHANNELS; ++i) + // buffer[i] = (i < channels()) ? new float[segmentSize] : 0; + for(int i = 0; i < MAX_CHANNELS; ++i) + { + if(i < channels()) + posix_memalign((void**)(buffer + i), 16, sizeof(float) * segmentSize); + else + buffer[i] = 0; + } +} + +//--------------------------------------------------------- +// AudioAux +//--------------------------------------------------------- + +AudioAux::~AudioAux() + { + // Changed by Tim. p3.3.15 + //for (int i = 0; i < channels(); ++i) + // delete[] buffer[i]; + for (int i = 0; i < MAX_CHANNELS; ++i) { + if (buffer[i]) + free(buffer[i]); + } + } + +//--------------------------------------------------------- +// read +//--------------------------------------------------------- + +void AudioAux::read(Xml& xml) + { + for (;;) { + Xml::Token token = xml.parse(); + const QString& tag = xml.s1(); + switch (token) { + case Xml::Error: + case Xml::End: + return; + case Xml::TagStart: + if (AudioTrack::readProperties(xml, tag)) + xml.unknown("AudioAux"); + break; + case Xml::Attribut: + break; + case Xml::TagEnd: + if (tag == "AudioAux") + { + mapRackPluginsToControllers(); + return; + } + default: + break; + } + } + } + +//--------------------------------------------------------- +// getData +//--------------------------------------------------------- + +bool AudioAux::getData(unsigned /*pos*/, int ch, unsigned /*samples*/, float** data) + { + for (int i = 0; i < ch; ++i) + data[i] = buffer[i % channels()]; + return true; + } + +//--------------------------------------------------------- +// setChannels +//--------------------------------------------------------- + +void AudioAux::setChannels(int n) +{ + if(n > channels()) + { + // Changed by Tim. p3.3.15 + //for (int i = channels(); i < n; ++i) + // buffer[i] = new float[segmentSize]; + for(int i = channels(); i < n; ++i) + posix_memalign((void**)(buffer + i), 16, sizeof(float) * segmentSize); + } + else if(n < channels()) + { + // Changed by Tim. p3.3.15 + //for (int i = n; i < channels(); ++i) + // delete[] buffer[i]; + for(int i = n; i < channels(); ++i) + { + if(buffer[i]) + free(buffer[i]); + } + } + AudioTrack::setChannels(n); +} + +//--------------------------------------------------------- +// setRecordFlag1 +// gui part (executed in gui thread) +//--------------------------------------------------------- + +bool AudioTrack::setRecordFlag1(bool f) + { + if (f == _recordFlag) + return true; + if (f) { + if (_recFile == 0) { + // + // create soundfile for recording + // + char buffer[128]; + QFile fil; + for (;;++recFileNumber) { + sprintf(buffer, "%s/rec%d.wav", + museProject.latin1(), + recFileNumber); + fil.setName(QString(buffer)); + if (!fil.exists()) + break; + } + _recFile = new SndFile(QString(buffer)); + _recFile->setFormat( + SF_FORMAT_WAV | SF_FORMAT_FLOAT, + _channels, sampleRate); + } + if(_recFile->openWrite()) + { + QMessageBox::critical(NULL, "MusE write error.", "Error creating target wave file\n" + "Check your configuration."); + return false; + + } + if (debugMsg) + printf("AudioNode::setRecordFlag1: create internal file %s\n", + _recFile->path().latin1()); + } + else { + if (_recFile) { + // this file has not been processed and can be + // deleted + // We should only arrive here if going from a 'record-armed' state + // to a non record-armed state. Because otherwise after actually + // recording, the _recFile pointer is made into an event, + // then _recFile is made zero before this function is called. + QString s = _recFile->path(); + // Added by Tim. p3.3.8 + delete _recFile; + setRecFile(0); + + remove(s.latin1()); + if(debugMsg) + printf("AudioNode::setRecordFlag1: remove file %s\n", s.latin1()); + //_recFile = 0; + } + } + return true; + } +double AudioTrack::auxSend(int idx) const + { + if (unsigned(idx) >= _auxSend.size()) { + printf("%s auxSend: bad index: %d >= %zd\n", + name().latin1(), idx, _auxSend.size()); + return 0.0; + } + return _auxSend[idx]; + } + +void AudioTrack::setAuxSend(int idx, double v) + { + if (unsigned(idx) >= _auxSend.size()) { + printf("%s setAuxSend: bad index: %d >= %zd\n", + name().latin1(), idx, _auxSend.size()); + return; + } + _auxSend[idx] = v; + } + diff --git a/muse2/muse/cliplist/Makefile.am b/muse2/muse/cliplist/Makefile.am new file mode 100644 index 00000000..7e28b9ef --- /dev/null +++ b/muse2/muse/cliplist/Makefile.am @@ -0,0 +1,14 @@ +include $(top_srcdir)/common.am + +if PCH +AM_CXXFLAGS += -include $(top_srcdir)/all.h +endif + +noinst_LIBRARIES = libcliplist.a + +dist_libcliplist_a_SOURCES = \ + cliplist.cpp \ + cliplist.h + +nodist_libcliplist_a_SOURCES = \ + moc_cliplist.cpp diff --git a/muse2/muse/cliplist/Makefile.in b/muse2/muse/cliplist/Makefile.in new file mode 100644 index 00000000..e1cad35c --- /dev/null +++ b/muse2/muse/cliplist/Makefile.in @@ -0,0 +1,596 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/common.am +@PCH_TRUE@am__append_1 = -include $(top_srcdir)/all.h +subdir = muse/cliplist +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal-include.m4 \ + $(top_srcdir)/m4/alsa.m4 $(top_srcdir)/m4/docbook.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +LIBRARIES = $(noinst_LIBRARIES) +ARFLAGS = cru +libcliplist_a_AR = $(AR) $(ARFLAGS) +libcliplist_a_LIBADD = +dist_libcliplist_a_OBJECTS = cliplist.$(OBJEXT) +nodist_libcliplist_a_OBJECTS = moc_cliplist.$(OBJEXT) +libcliplist_a_OBJECTS = $(dist_libcliplist_a_OBJECTS) \ + $(nodist_libcliplist_a_OBJECTS) +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +CXXLD = $(CXX) +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(dist_libcliplist_a_SOURCES) \ + $(nodist_libcliplist_a_SOURCES) +DIST_SOURCES = $(dist_libcliplist_a_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DOCBOOKSTYLE = @DOCBOOKSTYLE@ +DOCBOOKTARGETS = @DOCBOOKTARGETS@ +DOT = @DOT@ +DOTPATH = @DOTPATH@ +DOXYGEN = @DOXYGEN@ +DOXYGEN_TREEVIEW = @DOXYGEN_TREEVIEW@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FLUIDSYNTHDIRS = @FLUIDSYNTHDIRS@ +FST_CFLAGS = @FST_CFLAGS@ +FST_LIBS = @FST_LIBS@ +Fluidsynth_CFLAGS = @Fluidsynth_CFLAGS@ +Fluidsynth_LIBS = @Fluidsynth_LIBS@ +GIVERTCAP = @GIVERTCAP@ +GREP = @GREP@ +HAVEDOT = @HAVEDOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_LIBS = @JACK_LIBS@ +JADE = @JADE@ +LASH_CFLAGS = @LASH_CFLAGS@ +LASH_LIBS = @LASH_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LO_CFLAGS = @LO_CFLAGS@ +LO_LIBS = @LO_LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MUSECXXFLAGS = @MUSECXXFLAGS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NSGMLS = @NSGMLS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PCH = @PCH@ +PERL = @PERL@ +PKG_CONFIG = @PKG_CONFIG@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIB = @PYTHON_LIB@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QTDIR_BIN = @QTDIR_BIN@ +QTDIR_INC = @QTDIR_INC@ +QT_LIBS = @QT_LIBS@ +RANLIB = @RANLIB@ +SAMPLERATE_CFLAGS = @SAMPLERATE_CFLAGS@ +SAMPLERATE_LIBS = @SAMPLERATE_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ +SNDFILE_LIBS = @SNDFILE_LIBS@ +STRIP = @STRIP@ +SUIDBUILD = @SUIDBUILD@ +SUIDINSTALL = @SUIDINSTALL@ +USE_SSE = @USE_SSE@ +UUID_CFLAGS = @UUID_CFLAGS@ +UUID_LIBS = @UUID_LIBS@ +VERSION = @VERSION@ +XMKMF = @XMKMF@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +have_docbook = @have_docbook@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +synth_fluid = @synth_fluid@ +synth_fluidsynth = @synth_fluidsynth@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AM_CXXFLAGS = $(MUSECXXFLAGS) -I.. -I$(top_srcdir)/synti \ + -I$(top_srcdir)/muse/widgets -DQT_SHARED -DQT_THREAD_SUPPORT \ + -DQT_PLUGIN $(QTDIR_INC) -DQT3_SUPPORT $(am__append_1) +AM_CPPFLAGS = +MOC = $(QTDIR_BIN)/moc +#UIC = $(QTDIR_BIN)/uic3 +UIC = /usr/bin/uic3 +UIFILES = $(wildcard *.ui) +MOCFILES = $(shell for h in $(filter %.h,$(SOURCES)); do \ + if grep -q Q_OBJECT $$h; then \ + echo $$h | sed "s/\(.*\)\.h/moc_\1.cpp/"; \ + fi; \ + done) + +BUILT_SOURCES = $(MOCFILES) $(UIFILES:%.ui=%.h) +MOSTLYCLEANFILES = $(MOCFILES) $(UIFILES:%.ui=%.h) +SUFFIXES = .ui .h.gch +noinst_LIBRARIES = libcliplist.a +dist_libcliplist_a_SOURCES = \ + cliplist.cpp \ + cliplist.h + +nodist_libcliplist_a_SOURCES = \ + moc_cliplist.cpp + +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: .ui .h.gch .cpp .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/common.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu muse/cliplist/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu muse/cliplist/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-noinstLIBRARIES: + -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) +libcliplist.a: $(libcliplist_a_OBJECTS) $(libcliplist_a_DEPENDENCIES) + -rm -f libcliplist.a + $(libcliplist_a_AR) libcliplist.a $(libcliplist_a_OBJECTS) $(libcliplist_a_LIBADD) + $(RANLIB) libcliplist.a + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cliplist.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/moc_cliplist.Po@am__quote@ + +.cpp.o: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< + +.cpp.obj: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.cpp.lo: +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-am +all-am: Makefile $(LIBRARIES) +installdirs: +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +clean: clean-am + +clean-am: clean-generic clean-libtool clean-noinstLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: all check install install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-noinstLIBRARIES ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags uninstall uninstall-am + + +de: + @for base in $(MOCFILES); do echo -e "\t$${base}.cpp $${base}.h \\"; done + +nde: + @for base in $(MOCFILES); do echo -e "\tmoc_$${base}.cpp \\"; done + +.ui.o: %.h + $(UIC) -L $(top_srcdir)/muse/widgets -o $*.cpp -impl $*.h $*.ui + $(MOC) $*.h >> $*.cpp + $(CXXCOMPILE) -c $*.cpp -o $*.o + $(RM) $*.cpp moc_$*.cpp moc_$*.o + +.ui.lo: %.h + $(UIC) -L $(top_srcdir)/muse/widgets -o $*.cpp -impl $*.h $*.ui + $(MOC) $*.h >> $*.cpp + $(LTCXXCOMPILE) -c $*.cpp -o $*.lo + $(RM) $*.cpp moc_$*.cpp moc_$*.lo moc_$*.o + +moc_%.cpp: %.h + $(MOC) $< -o $@ + +%.h: %.ui + $(UIC) -o $@ $< +# $(UIC) -L $(top_srcdir)/muse/widgets -o $@ $< + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/muse2/muse/cliplist/cliplist.cpp b/muse2/muse/cliplist/cliplist.cpp new file mode 100644 index 00000000..92002032 --- /dev/null +++ b/muse2/muse/cliplist/cliplist.cpp @@ -0,0 +1,260 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: cliplist.cpp,v 1.6.2.3 2008/08/18 00:15:24 terminator356 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" + +#include +#include +#include +#include +#include +//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, Qt::AlignRight); + + QFontMetrics fm(editor->view->font()); + int fw = style()->pixelMetric(QStyle::PM_DefaultFrameWidth,0, this); // ddskrjo 0 + int w = 2 + fm.width('9') * 9 + fm.width(':') * 3 + fw * 4; + editor->view->setColumnAlignment(COL_POS, Qt::AlignRight); + editor->view->setColumnWidth(COL_POS, w); + editor->view->setColumnAlignment(COL_LEN, Qt::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((unsigned long)this); + e->accept(); + } + +//--------------------------------------------------------- +// songChanged +//--------------------------------------------------------- + +void ClipListEdit::songChanged(int type) + { + // Is it simply a midi controller value adjustment? Forget it. + if(type == SC_MIDI_CONTROLLER) + return; + + updateList(); + } + +//--------------------------------------------------------- +// readStatus +//--------------------------------------------------------- + +void ClipListEdit::readStatus(Xml& xml) + { + 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; + } + } + } + +//--------------------------------------------------------- +// writeStatus +//--------------------------------------------------------- + +void ClipListEdit::writeStatus(int level, Xml& xml) const + { + xml.tag(level++, "cliplist"); + TopWin::writeStatus(level, xml); + xml.etag(level, "cliplist"); + } + +//--------------------------------------------------------- +// startChanged +//--------------------------------------------------------- + +void ClipListEdit::startChanged(const Pos& /*pos*/)//prevent compiler warning: unsused parameter + { +// editor->view->triggerUpdate(); + } + +//--------------------------------------------------------- +// lenChanged +//--------------------------------------------------------- + +void ClipListEdit::lenChanged(const Pos& /*pos*/) //prevent compiler warning: unsused parameter + { +// 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/muse2/muse/cliplist/cliplist.h b/muse2/muse/cliplist/cliplist.h new file mode 100644 index 00000000..3f13d586 --- /dev/null +++ b/muse2/muse/cliplist/cliplist.h @@ -0,0 +1,51 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: cliplist.h,v 1.3.2.1 2005/12/11 21:29:23 spamatica Exp $ +// +// (C) Copyright 2000 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __CLIPLIST_H__ +#define __CLIPLIST_H__ + +#include "../cobject.h" +#include "event.h" +//Added by qt3to4: +#include + +class Q3ListView; +class Q3ListViewItem; +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(unsigned long); + + public: + ClipListEdit(); + virtual void readStatus(Xml&); + virtual void writeStatus(int, Xml&) const; + }; + +#endif + diff --git a/muse2/muse/cobject.cpp b/muse2/muse/cobject.cpp new file mode 100644 index 00000000..bf7d7e98 --- /dev/null +++ b/muse2/muse/cobject.cpp @@ -0,0 +1,62 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: cobject.cpp,v 1.4 2004/02/02 12:10:09 wschweer Exp $ +// +// (C) Copyright 1999/2000 Werner Schweer (ws@seh.de) +//========================================================= + +#include "cobject.h" +#include "xml.h" + +//--------------------------------------------------------- +// readStatus +//--------------------------------------------------------- + +void TopWin::readStatus(Xml& xml) + { + for (;;) { + Xml::Token token = xml.parse(); + if (token == Xml::Error || token == Xml::End) + break; + QString tag = xml.s1(); + switch (token) { + case Xml::TagStart: + if (tag == "geometry") { + QRect r(readGeometry(xml, tag)); + resize(r.size()); + move(r.topLeft()); + } + else + xml.unknown("TopWin"); + break; + case Xml::TagEnd: + if (tag == "topwin") + return; + default: + break; + } + } + } + +//--------------------------------------------------------- +// writeStatus +//--------------------------------------------------------- + +void TopWin::writeStatus(int level, Xml& xml) const + { + xml.tag(level++, "topwin"); + xml.tag(level++, "geometry x=\"%d\" y=\"%d\" w=\"%d\" h=\"%d\"", + geometry().x(), + geometry().y(), + geometry().width(), + geometry().height()); + xml.tag(level--, "/geometry"); + xml.tag(level, "/topwin"); + } + +TopWin::TopWin(QWidget* parent, const char* name, + Qt::WFlags f) : Q3MainWindow(parent, name, f) + { + } + diff --git a/muse2/muse/cobject.h b/muse2/muse/cobject.h new file mode 100644 index 00000000..15c687fc --- /dev/null +++ b/muse2/muse/cobject.h @@ -0,0 +1,66 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: cobject.h,v 1.3.2.1 2005/12/11 21:29:24 spamatica Exp $ +// +// (C) Copyright 1999/2000 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __COBJECT_H__ +#define __COBJECT_H__ + +#include "config.h" + +#include +#include + +class Xml; + +//--------------------------------------------------------- +// TopWin +//--------------------------------------------------------- + +class TopWin : public Q3MainWindow + { + Q_OBJECT + + public: + virtual void readStatus(Xml&); + virtual void writeStatus(int, Xml&) const; + TopWin(QWidget* parent=0, const char* name=0, + Qt::WFlags f = Qt::WType_TopLevel|Qt::WDestructiveClose); + }; + +//--------------------------------------------------------- +// Toplevel +//--------------------------------------------------------- + +class Toplevel { + public: + enum ToplevelType { PIANO_ROLL, LISTE, DRUM, MASTER, WAVE, + LMASTER, CLIPLIST, MARKER +#ifdef PATCHBAY + , M_PATCHBAY +#endif /* PATCHBAY */ + }; + Toplevel(ToplevelType t, unsigned long obj, TopWin* cobj) { + _type = t; + _object = obj; + _cobject = cobj; + } + ToplevelType type() const { return _type; } + unsigned long object() const { return _object; } + TopWin* cobject() const { return _cobject; } + + private: + ToplevelType _type; + unsigned long _object; + TopWin* _cobject; + }; + +typedef std::list ToplevelList; +typedef ToplevelList::iterator iToplevel; +typedef ToplevelList::const_iterator ciToplevel; + +#endif + diff --git a/muse2/muse/conf.cpp b/muse2/muse/conf.cpp new file mode 100644 index 00000000..c44665e1 --- /dev/null +++ b/muse2/muse/conf.cpp @@ -0,0 +1,1499 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: conf.cpp,v 1.33.2.18 2009/12/01 03:52:40 terminator356 Exp $ +// +// (C) Copyright 1999-2003 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "app.h" +#include "icons.h" +#include "globals.h" +#include "drumedit.h" +#include "pianoroll.h" +#include "master/masteredit.h" +#include "transport.h" +#include "bigtime.h" +#include "arranger.h" +#include "conf.h" +#include "gconfig.h" +#include "pitchedit.h" +#include "midiport.h" +#include "mididev.h" +#include "driver/audiodev.h" +#include "driver/jackmidi.h" +#include "xml.h" +#include "waveedit.h" +#include "midi.h" +#include "midisyncimpl.h" +#include "midifilterimpl.h" +#include "midictrl.h" +#include "ctrlcombo.h" +#include "genset.h" +#include "midiitransform.h" +#include "synth.h" +#include "audio.h" +#include "sync.h" +#include "wave.h" +#include "midiseq.h" +#include "amixer.h" + +extern void writeMidiTransforms(int level, Xml& xml); +extern void readMidiTransform(Xml&); + +extern void writeMidiInputTransforms(int level, Xml& xml); +extern void readMidiInputTransform(Xml&); + +//--------------------------------------------------------- +// readGeometry +//--------------------------------------------------------- + +QRect readGeometry(Xml& xml, const QString& name) + { + QRect r(0, 0, 50, 50); + int val; + + for (;;) { + Xml::Token token = xml.parse(); + if (token == Xml::Error || token == Xml::End) + break; + QString tag = xml.s1(); + switch (token) { + case Xml::TagStart: + xml.parse1(); + break; + case Xml::Attribut: + val = xml.s2().toInt(); + if (tag == "x") + r.setX(val); + else if (tag == "y") + r.setY(val); + else if (tag == "w") + r.setWidth(val); + else if (tag == "h") + r.setHeight(val); + break; + case Xml::TagEnd: + if (tag == name) + return r; + default: + break; + } + } + return r; + } + + +//--------------------------------------------------------- +// readColor +//--------------------------------------------------------- + +QColor readColor(Xml& xml) + { + int val, r=0, g=0, b=0; + + for (;;) { + Xml::Token token = xml.parse(); + if (token != Xml::Attribut) + break; + QString tag = xml.s1(); + switch (token) { + case Xml::Attribut: + val = xml.s2().toInt(); + if (tag == "r") + r = val; + else if (tag == "g") + g = val; + else if (tag == "b") + b = val; + break; + default: + break; + } + } + + return QColor(r, g, b); + } + +//--------------------------------------------------------- +// readController +//--------------------------------------------------------- + +static void readController(Xml& xml, int midiPort, int channel) + { + int id = 0; + int val = CTRL_VAL_UNKNOWN; + + for (;;) { + Xml::Token token = xml.parse(); + QString tag = xml.s1(); + switch (token) { + case Xml::TagStart: + if (tag == "val") + val = xml.parseInt(); + else + xml.unknown("controller"); + break; + case Xml::Attribut: + if (tag == "id") + id = xml.s2().toInt(); + break; + case Xml::TagEnd: + if (tag == "controller") { + MidiPort* port = &midiPorts[midiPort]; + //port->addManagedController(channel, id); + val = port->limitValToInstrCtlRange(id, val); + // The value here will actually be sent to the device LATER, in MidiPort::setMidiDevice() + port->setHwCtrlState(channel, id, val); + return; + } + default: + return; + } + } + } + +//--------------------------------------------------------- +// readPortChannel +//--------------------------------------------------------- + +static void readPortChannel(Xml& xml, int midiPort) + { + int idx = 0; //torbenh + for (;;) { + Xml::Token token = xml.parse(); + if (token == Xml::Error || token == Xml::End) + break; + QString tag = xml.s1(); + switch (token) { + case Xml::TagStart: + if (tag == "controller") { + readController(xml, midiPort, idx); + } + else + xml.unknown("MidiDevice"); + break; + case Xml::Attribut: + if (tag == "idx") + idx = xml.s2().toInt(); + break; + case Xml::TagEnd: + if (tag == "channel") + return; + default: + break; + } + } + } + +//--------------------------------------------------------- +// readConfigMidiPort +//--------------------------------------------------------- + +static void readConfigMidiPort(Xml& xml) + { + int idx = 0; + QString device; + QString instrument; + int openFlags = 1; + bool thruFlag = false; + MidiSyncInfo tmpSi; + int type = MidiDevice::ALSA_MIDI; + + for (;;) { + Xml::Token token = xml.parse(); + if (token == Xml::Error || token == Xml::End) + break; + QString tag = xml.s1(); + switch (token) { + case Xml::TagStart: + if (tag == "name") + device = xml.parse1(); + else if (tag == "type") + type = xml.parseInt(); + else if (tag == "record") { // old + bool f = xml.parseInt(); + if (f) + openFlags |= 2; + } + else if (tag == "openFlags") + openFlags = xml.parseInt(); + else if (tag == "midiSyncInfo") + tmpSi.read(xml); + else if (tag == "instrument") { + instrument = xml.parse1(); + midiPorts[idx].setInstrument( + registerMidiInstrument(instrument) + ); + } + else if (tag == "midithru") + thruFlag = xml.parseInt(); // obsolete + else if (tag == "channel") { + readPortChannel(xml, idx); + } + else + xml.unknown("MidiDevice"); + break; + case Xml::Attribut: + if (tag == "idx") { + idx = xml.s2().toInt(); + } + break; + case Xml::TagEnd: + if (tag == "midiport") { + //if (idx > MIDI_PORTS) { + if (idx < 0 || idx >= MIDI_PORTS) { + fprintf(stderr, "bad midi port %d (>%d)\n", + idx, MIDI_PORTS); + idx = 0; + } + + MidiDevice* dev = midiDevices.find(device); + + //if(debugMsg && !dev) + // fprintf(stderr, "readConfigMidiPort: device not found %s\n", device.latin1()); + + if(!dev && type == MidiDevice::JACK_MIDI) + { + if(debugMsg) + fprintf(stderr, "readConfigMidiPort: creating jack midi device %s\n", device.latin1()); + dev = MidiJackDevice::createJackMidiDevice(device, openFlags); + } + + if(debugMsg && !dev) + fprintf(stderr, "readConfigMidiPort: device not found %s\n", device.latin1()); + + MidiPort* mp = &midiPorts[idx]; + mp->syncInfo().copyParams(tmpSi); + // p3.3.50 Indicate the port was found in the song file, even if no device is assigned to it. + mp->setFoundInSongFile(true); + + if (dev) { + dev->setOpenFlags(openFlags); + midiSeq->msgSetMidiDevice(mp, dev); + } + return; + } + default: + break; + } + } + } + +/* +//--------------------------------------------------------- +// readConfigMidiSyncInfo +//--------------------------------------------------------- + +static void readConfigMidiSyncInfo(Xml& xml) +{ + QString device; + int idOut = 127; + int idIn = 127; + bool sendMC = false; + bool sendMMC = false; + bool sendMTC = false; + bool recMC = false; + bool recMMC = false; + bool recMTC = false; + + for (;;) { + Xml::Token token = xml.parse(); + if (token == Xml::Error || token == Xml::End) + break; + QString tag = xml.s1(); + switch (token) { + case Xml::TagStart: + if (tag == "device") + device = xml.parse1(); + else if (tag == "idOut") + idOut = (xml.parseInt()); + else if (tag == "idIn") + idIn = xml.parseInt(); + else if (tag == "sendMC") + sendMC = xml.parseInt(); + else if (tag == "sendMMC") + sendMMC = xml.parseInt(); + else if (tag == "sendMTC") + sendMTC = xml.parseInt(); + else if (tag == "recMC") + recMC = xml.parseInt(); + else if (tag == "recMMC") + recMMC = xml.parseInt(); + else if (tag == "recMTC") + recMTC = xml.parseInt(); + else + xml.unknown("midiSyncInfo"); + break; + case Xml::Attribut: + break; + case Xml::TagEnd: + if(tag == "midiSyncInfo") + { + MidiDevice* dev = midiDevices.find(device); + if(dev) + { + MidiSyncInfo& si = dev->syncInfo(); + si.setIdIn(idIn); + si.setIdOut(idOut); + + si.setMCIn(recMC); + si.setMMCIn(recMMC); + si.setMTCIn(recMTC); + + si.setMCOut(sendMC); + si.setMMCOut(sendMMC); + si.setMTCOut(sendMTC); + } + else + fprintf(stderr, "Read configuration: Sync device: %s not found\n", device.latin1()); + + return; + } + default: + break; + } + } +} +*/ + +//--------------------------------------------------------- +// loadConfigMetronom +//--------------------------------------------------------- + +static void loadConfigMetronom(Xml& xml) + { + for (;;) { + Xml::Token token = xml.parse(); + if (token == Xml::Error || token == Xml::End) + break; + QString tag = xml.s1(); + switch (token) { + case Xml::TagStart: + if (tag == "premeasures") + preMeasures = xml.parseInt(); + else if (tag == "measurepitch") + measureClickNote = xml.parseInt(); + else if (tag == "measurevelo") + measureClickVelo = xml.parseInt(); + else if (tag == "beatpitch") + beatClickNote = xml.parseInt(); + else if (tag == "beatvelo") + beatClickVelo = xml.parseInt(); + else if (tag == "channel") + clickChan = xml.parseInt(); + else if (tag == "port") + clickPort = xml.parseInt(); + else if (tag == "precountEnable") + precountEnableFlag = xml.parseInt(); + else if (tag == "fromMastertrack") + precountFromMastertrackFlag = xml.parseInt(); + else if (tag == "signatureZ") + precountSigZ = xml.parseInt(); + else if (tag == "signatureN") + precountSigN = xml.parseInt(); + else if (tag == "prerecord") + precountPrerecord = xml.parseInt(); + else if (tag == "preroll") + precountPreroll = xml.parseInt(); + else if (tag == "midiClickEnable") + midiClickFlag = xml.parseInt(); + else if (tag == "audioClickEnable") + audioClickFlag = xml.parseInt(); + else if (tag == "audioClickVolume") + audioClickVolume = xml.parseFloat(); + else + xml.unknown("Metronome"); + break; + case Xml::TagEnd: + if (tag == "metronom") + return; + default: + break; + } + } + } + +//--------------------------------------------------------- +// readSeqConfiguration +//--------------------------------------------------------- + +static void readSeqConfiguration(Xml& xml) + { + for (;;) { + Xml::Token token = xml.parse(); + if (token == Xml::Error || token == Xml::End) + break; + const QString& tag = xml.s1(); + switch (token) { + case Xml::TagStart: + if (tag == "metronom") + loadConfigMetronom(xml); + else if (tag == "midiport") + readConfigMidiPort(xml); + else if (tag == "rcStop") + rcStopNote = xml.parseInt(); + else if (tag == "rcEnable") + rcEnable = xml.parseInt(); + else if (tag == "rcRecord") + rcRecordNote = xml.parseInt(); + else if (tag == "rcGotoLeft") + rcGotoLeftMarkNote = xml.parseInt(); + else if (tag == "rcPlay") + rcPlayNote = xml.parseInt(); + else + xml.unknown("Seq"); + break; + case Xml::TagEnd: + if (tag == "sequencer") { + return; + } + default: + break; + } + } + } + +//--------------------------------------------------------- +// readConfiguration +//--------------------------------------------------------- + +void readConfiguration(Xml& xml, bool readOnlySequencer) + { + int mixers = 0; + for (;;) { + Xml::Token token = xml.parse(); + if (token == Xml::Error || token == Xml::End) + break; + QString tag = xml.s1(); + switch (token) { + case Xml::TagStart: + /* the reading of configuration is split in two; read + "sequencer" and read ALL. The reason is that it is + possible to load a song without configuration. In + this case the chapter in the song + file should be skipped. However the sub part + contains elements that are necessary + to preserve composition consistency. Mainly + midiport configuration and VOLUME. + */ + if (tag == "sequencer") { + readSeqConfiguration(xml); + break; + } + else if (readOnlySequencer) { + xml.skip(tag); + break; + } + + if (tag == "theme") + config.style = xml.parse1(); + else if (tag == "useOldStyleStopShortCut") + config.useOldStyleStopShortCut = xml.parseInt(); + else if (tag == "moveArmedCheckBox") + config.moveArmedCheckBox = xml.parseInt(); + else if (tag == "externalWavEditor") + config.externalWavEditor = xml.parse1(); + else if (tag == "font0") + config.fonts[0].fromString(xml.parse1()); + else if (tag == "font1") + config.fonts[1].fromString(xml.parse1()); + else if (tag == "font2") + config.fonts[2].fromString(xml.parse1()); + else if (tag == "font3") + config.fonts[3].fromString(xml.parse1()); + else if (tag == "font4") + config.fonts[4].fromString(xml.parse1()); + else if (tag == "font5") + config.fonts[5].fromString(xml.parse1()); + else if (tag == "font6") + config.fonts[6].fromString(xml.parse1()); + else if (tag == "palette0") + config.palette[0] = readColor(xml); + else if (tag == "palette1") + config.palette[1] = readColor(xml); + else if (tag == "palette2") + config.palette[2] = readColor(xml); + else if (tag == "palette3") + config.palette[3] = readColor(xml); + else if (tag == "palette4") + config.palette[4] = readColor(xml); + else if (tag == "palette5") + config.palette[5] = readColor(xml); + else if (tag == "palette6") + config.palette[6] = readColor(xml); + else if (tag == "palette7") + config.palette[7] = readColor(xml); + else if (tag == "palette8") + config.palette[8] = readColor(xml); + else if (tag == "palette9") + config.palette[9] = readColor(xml); + else if (tag == "palette10") + config.palette[10] = readColor(xml); + else if (tag == "palette11") + config.palette[11] = readColor(xml); + else if (tag == "palette12") + config.palette[12] = readColor(xml); + else if (tag == "palette13") + config.palette[13] = readColor(xml); + else if (tag == "palette14") + config.palette[14] = readColor(xml); + else if (tag == "palette15") + config.palette[15] = readColor(xml); + else if (tag == "palette16") + config.palette[16] = readColor(xml); + else if (tag == "trackBg") + config.trackBg = readColor(xml); + else if (tag == "selectTrackBg") + config.selectTrackBg = readColor(xml); + else if (tag == "selectTrackFg") + config.selectTrackFg = readColor(xml); + else if (tag == "midiTrackBg") + config.midiTrackBg = readColor(xml); + else if (tag == "ctrlGraphFg") + config.ctrlGraphFg = readColor(xml); + else if (tag == "drumTrackBg") + config.drumTrackBg = readColor(xml); + else if (tag == "waveTrackBg") + config.waveTrackBg = readColor(xml); + else if (tag == "outputTrackBg") + config.outputTrackBg = readColor(xml); + else if (tag == "inputTrackBg") + config.inputTrackBg = readColor(xml); + else if (tag == "groupTrackBg") + config.groupTrackBg = readColor(xml); + else if (tag == "auxTrackBg") + config.auxTrackBg = readColor(xml); + else if (tag == "synthTrackBg") + config.synthTrackBg = readColor(xml); + else if (tag == "extendedMidi") + config.extendedMidi = xml.parseInt(); + else if (tag == "midiExportDivision") + config.midiDivision = xml.parseInt(); + else if (tag == "copyright") + config.copyright = xml.parse1(); + else if (tag == "smfFormat") + config.smfFormat = xml.parseInt(); + else if (tag == "exp2ByteTimeSigs") + config.exp2ByteTimeSigs = xml.parseInt(); + else if (tag == "expOptimNoteOffs") + config.expOptimNoteOffs = xml.parseInt(); + else if (tag == "importMidiSplitParts") + config.importMidiSplitParts = xml.parseInt(); + else if (tag == "midiInputDevice") + midiInputPorts = xml.parseInt(); + else if (tag == "midiInputChannel") + midiInputChannel = xml.parseInt(); + else if (tag == "midiRecordType") + midiRecordType = xml.parseInt(); + else if (tag == "midiThruType") + midiThruType = xml.parseInt(); + else if (tag == "midiFilterCtrl1") + midiFilterCtrl1 = xml.parseInt(); + else if (tag == "midiFilterCtrl2") + midiFilterCtrl2 = xml.parseInt(); + else if (tag == "midiFilterCtrl3") + midiFilterCtrl3 = xml.parseInt(); + else if (tag == "midiFilterCtrl4") + midiFilterCtrl4 = xml.parseInt(); + else if (tag == "bigtimeVisible") + config.bigTimeVisible = xml.parseInt(); + else if (tag == "transportVisible") + config.transportVisible = xml.parseInt(); + else if (tag == "markerVisible") + config.markerVisible = xml.parseInt(); + + else if (tag == "mixerVisible") + // config.mixerVisible = xml.parseInt(); // Obsolete + xml.skip(tag); + else if (tag == "mixer1Visible") + config.mixer1Visible = xml.parseInt(); + else if (tag == "mixer2Visible") + config.mixer2Visible = xml.parseInt(); + + else if (tag == "showSplashScreen") + config.showSplashScreen = xml.parseInt(); + else if (tag == "canvasShowPartType") + config.canvasShowPartType = xml.parseInt(); + else if (tag == "canvasShowPartEvent") + config.canvasShowPartEvent = xml.parseInt(); + else if (tag == "canvasShowGrid") + config.canvasShowGrid = xml.parseInt(); + else if (tag == "canvasBgPixmap") + config.canvasBgPixmap = xml.parse1(); + else if (tag == "geometryMain") + config.geometryMain = readGeometry(xml, tag); + else if (tag == "geometryTransport") + config.geometryTransport = readGeometry(xml, tag); + else if (tag == "geometryBigTime") + config.geometryBigTime = readGeometry(xml, tag); + else if (tag == "geometryPianoroll") + config.geometryPianoroll = readGeometry(xml, tag); + else if (tag == "geometryDrumedit") + config.geometryDrumedit = readGeometry(xml, tag); + + else if (tag == "geometryMixer") + // config.geometryMixer = readGeometry(xml, tag); // Obsolete + xml.skip(tag); + //else if (tag == "mixer1") + // config.mixer1.read(xml); + //else if (tag == "mixer2") + // config.mixer2.read(xml); + else if (tag == "Mixer") + { + if(mixers == 0) + config.mixer1.read(xml); + else + config.mixer2.read(xml); + ++mixers; + } + + else if (tag == "bigtimeForegroundcolor") + config.bigTimeForegroundColor = readColor(xml); + else if (tag == "bigtimeBackgroundcolor") + config.bigTimeBackgroundColor = readColor(xml); + else if (tag == "transportHandleColor") + config.transportHandleColor = readColor(xml); + else if (tag == "txDeviceId") + //txDeviceId = xml.parseInt(); + xml.parseInt(); + else if (tag == "rxDeviceId") + //rxDeviceId = xml.parseInt(); + xml.parseInt(); + else if (tag == "txSyncPort") + //txSyncPort= xml.parseInt(); + xml.parseInt(); + else if (tag == "rxSyncPort") + //rxSyncPort= xml.parseInt(); + xml.parseInt(); + else if (tag == "mtctype") + mtcType= xml.parseInt(); + else if (tag == "sendClockDelay") + syncSendFirstClockDelay = xml.parseUInt(); + else if (tag == "extSync") + extSyncFlag.setValue(xml.parseInt()); + else if (tag == "useJackTransport") + { + useJackTransport.setValue(xml.parseInt()); + } + else if (tag == "jackTransportMaster") + { + jackTransportMaster = xml.parseInt(); + if(audioDevice) + audioDevice->setMaster(jackTransportMaster); + } + else if (tag == "syncgentype") { + // for compatibility + //int syncGenType= xml.parseInt(); + //genMTCSync = syncGenType == 1; + //genMCSync = syncGenType == 2; + xml.parseInt(); + } + else if (tag == "genMTCSync") + //genMTCSync = xml.parseInt(); + xml.parseInt(); + else if (tag == "genMCSync") + //genMCSync = xml.parseInt(); + xml.parseInt(); + else if (tag == "genMMC") + //genMMC = xml.parseInt(); + xml.parseInt(); + else if (tag == "acceptMTC") + //acceptMTC = xml.parseInt(); + xml.parseInt(); + else if (tag == "acceptMMC") + //acceptMMC = xml.parseInt(); + xml.parseInt(); + else if (tag == "acceptMC") + //acceptMC = xml.parseInt(); + xml.parseInt(); + else if (tag == "mtcoffset") { + QString qs(xml.parse1()); + const char* str = qs.latin1(); + int h, m, s, f, sf; + sscanf(str, "%d:%d:%d:%d:%d", &h, &m, &s, &f, &sf); + mtcOffset = MTC(h, m, s, f, sf); + } + //else if (tag == "midiSyncInfo") + // readConfigMidiSyncInfo(xml); + else if (tag == "arranger") { + if (muse && muse->arranger) + muse->arranger->readStatus(xml); + else + xml.skip(tag); + } + else if (tag == "drumedit") + DrumEdit::readConfiguration(xml); + else if (tag == "pianoroll") + PianoRoll::readConfiguration(xml); + else if (tag == "masteredit") + MasterEdit::readConfiguration(xml); + else if (tag == "waveedit") + WaveEdit::readConfiguration(xml); + else if (tag == "shortcuts") + readShortCuts(xml); + else if (tag == "division") + config.division = xml.parseInt(); + else if (tag == "guiDivision") + config.guiDivision = xml.parseInt(); + else if (tag == "samplerate") + xml.parseInt(); + else if (tag == "segmentsize") + xml.parseInt(); + else if (tag == "segmentcount") + xml.parseInt(); + else if (tag == "rtcTicks") + config.rtcTicks = xml.parseInt(); + else if (tag == "minMeter") + config.minMeter = xml.parseInt(); + else if (tag == "minSlider") + config.minSlider = xml.parseDouble(); + else if (tag == "freewheelMode") + config.freewheelMode = xml.parseInt(); + else if (tag == "denormalProtection") + config.useDenormalBias = xml.parseInt(); + else if (tag == "didYouKnow") + config.showDidYouKnow = xml.parseInt(); + else if (tag == "outputLimiter") + config.useOutputLimiter = xml.parseInt(); + else if (tag == "vstInPlace") + config.vstInPlace = xml.parseInt(); + else if (tag == "dummyAudioSampleRate") + config.dummyAudioSampleRate = xml.parseInt(); + else if (tag == "dummyAudioBufSize") + config.dummyAudioBufSize = xml.parseInt(); + else if (tag == "guiRefresh") + config.guiRefresh = xml.parseInt(); + else if (tag == "helpBrowser") + { + QString tmp = xml.parse1(); + if (tmp.isNull()) {tmp = "";} + config.helpBrowser = tmp; + } + else if (tag == "midiTransform") + readMidiTransform(xml); + else if (tag == "midiInputTransform") + readMidiInputTransform(xml); + else if (tag == "startMode") + config.startMode = xml.parseInt(); + else if (tag == "startSong") + config.startSong = xml.parse1(); + else + xml.unknown("configuration"); + break; + case Xml::Text: + printf("text <%s>\n", xml.s1().latin1()); + break; + case Xml::Attribut: + if (readOnlySequencer) + break; + if (tag == "version") { + int major = xml.s2().section('.', 0, 0).toInt(); + int minor = xml.s2().section('.', 1, 1).toInt(); + xml.setVersion(major, minor); + } + break; + case Xml::TagEnd: + if (tag == "configuration") { + return; + } + break; + case Xml::Proc: + default: + break; + } + } + } + +//--------------------------------------------------------- +// 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 mozilla-firefox > /dev/null")) + { + config.helpBrowser = QString("mozilla-firefox"); + } + else if (!system("which firefox > /dev/null")) + { + config.helpBrowser = QString("firefox"); + } + else if (!system("which mozilla > /dev/null")) + { + config.helpBrowser = QString("mozilla"); + } + else + { + config.helpBrowser = QString(""); + // was not able to find a browser + } + // More preconfiguration + } + +//--------------------------------------------------------- +// readConfiguration +//--------------------------------------------------------- + +bool readConfiguration() + { + FILE* f = fopen(configName.latin1(), "r"); + if (f == 0) { + if (debugMsg || debugMode) + fprintf(stderr, "NO Config File <%s> found\n", configName.latin1()); + + // if the config file does not exist launch probeMachineSpecificConfiguration + probeMachineSpecificConfiguration(); + return true; + } + Xml xml(f); + bool skipmode = true; + for (;;) { + Xml::Token token = xml.parse(); + const QString& tag = xml.s1(); + switch (token) { + case Xml::Error: + case Xml::End: + fclose(f); + return true; + case Xml::TagStart: + if (skipmode && tag == "muse") + skipmode = false; + else if (skipmode) + break; + else if (tag == "configuration") + readConfiguration(xml,false); + else + xml.unknown("muse config"); + break; + case Xml::Attribut: + if (tag == "version") { + int major = xml.s2().section('.', 0, 0).toInt(); + int minor = xml.s2().section('.', 1, 1).toInt(); + xml.setVersion(major, minor); + } + break; + case Xml::TagEnd: + if (!skipmode && tag == "muse") { + fclose(f); + return false; + } + default: + break; + } + } + fclose(f); + return true; + } + +//--------------------------------------------------------- +// writeSeqConfiguration +//--------------------------------------------------------- + +static void writeSeqConfiguration(int level, Xml& xml, bool writePortInfo) + { + xml.tag(level++, "sequencer"); + + xml.tag(level++, "metronom"); + xml.intTag(level, "premeasures", preMeasures); + xml.intTag(level, "measurepitch", measureClickNote); + xml.intTag(level, "measurevelo", measureClickVelo); + xml.intTag(level, "beatpitch", beatClickNote); + xml.intTag(level, "beatvelo", beatClickVelo); + xml.intTag(level, "channel", clickChan); + xml.intTag(level, "port", clickPort); + + xml.intTag(level, "precountEnable", precountEnableFlag); + xml.intTag(level, "fromMastertrack", precountFromMastertrackFlag); + xml.intTag(level, "signatureZ", precountSigZ); + xml.intTag(level, "signatureN", precountSigN); + xml.intTag(level, "prerecord", precountPrerecord); + xml.intTag(level, "preroll", precountPreroll); + xml.intTag(level, "midiClickEnable", midiClickFlag); + xml.intTag(level, "audioClickEnable", audioClickFlag); + xml.floatTag(level, "audioClickVolume", audioClickVolume); + xml.tag(level--, "/metronom"); + + xml.intTag(level, "rcEnable", rcEnable); + xml.intTag(level, "rcStop", rcStopNote); + xml.intTag(level, "rcRecord", rcRecordNote); + xml.intTag(level, "rcGotoLeft", rcGotoLeftMarkNote); + xml.intTag(level, "rcPlay", rcPlayNote); + + if (writePortInfo) { + // + // write information about all midi ports, their assigned + // instruments and all managed midi controllers + // + for (int i = 0; i < MIDI_PORTS; ++i) { + bool used = false; + MidiTrackList* tl = song->midis(); + for (iMidiTrack it = tl->begin(); it != tl->end(); ++it) { + MidiTrack* t = *it; + if (t->outPort() == i) { + used = true; + break; + } + } + MidiPort* mport = &midiPorts[i]; + MidiDevice* dev = mport->device(); + if (!used && !dev) + continue; + xml.tag(level++, "midiport idx=\"%d\"", i); + xml.strTag(level, "instrument", mport->instrument()->iname()); + if (dev) { + xml.strTag(level, "name", dev->name()); + + // p3.3.38 + //if(dynamic_cast(dev)) + if(dev->deviceType() != MidiDevice::ALSA_MIDI) + //xml.intTag(level, "type", MidiDevice::JACK_MIDI); + xml.intTag(level, "type", dev->deviceType()); + + // Changed by T356. "record" is old and by mistake written as rwFlags here. + // openFlags was read before, but never written here. + //xml.intTag(level, "record", dev->rwFlags() & 0x2 ? 1 : 0); + xml.intTag(level, "openFlags", dev->openFlags()); + } + mport->syncInfo().write(level, xml); + // write out registered controller for all channels + MidiCtrlValListList* vll = mport->controller(); + for (int k = 0; k < MIDI_CHANNELS; ++k) { + int min = k << 24; + int max = min + 0x100000; + xml.tag(level++, "channel idx=\"%d\"", k); + iMidiCtrlValList s = vll->lower_bound(min); + iMidiCtrlValList e = vll->lower_bound(max); + if (s != e) { + for (iMidiCtrlValList i = s; i != e; ++i) { + xml.tag(level++, "controller id=\"%d\"", i->second->num()); + if (i->second->hwVal() != CTRL_VAL_UNKNOWN) + xml.intTag(level, "val", i->second->hwVal()); + xml.etag(level--, "controller"); + } + } + xml.etag(level--, "channel"); + } + xml.etag(level--, "midiport"); + } + } + xml.tag(level, "/sequencer"); + } + +//--------------------------------------------------------- +// writeGlobalConfiguration +//--------------------------------------------------------- + +void MusE::writeGlobalConfiguration() const + { + FILE* f = fopen(configName.latin1(), "w"); + if (f == 0) { + printf("save configuration to <%s> failed: %s\n", + configName.latin1(), strerror(errno)); + return; + } + Xml xml(f); + xml.header(); + xml.tag(0, "muse version=\"2.0\""); + writeGlobalConfiguration(1, xml); + xml.tag(1, "/muse"); + fclose(f); + } + +void MusE::writeGlobalConfiguration(int level, Xml& xml) const + { + xml.tag(level++, "configuration"); + + xml.intTag(level, "division", config.division); + xml.intTag(level, "rtcTicks", config.rtcTicks); + xml.intTag(level, "minMeter", config.minMeter); + xml.doubleTag(level, "minSlider", config.minSlider); + xml.intTag(level, "freewheelMode", config.freewheelMode); + xml.intTag(level, "denormalProtection", config.useDenormalBias); + xml.intTag(level, "didYouKnow", config.showDidYouKnow); + xml.intTag(level, "outputLimiter", config.useOutputLimiter); + xml.intTag(level, "vstInPlace", config.vstInPlace); + xml.intTag(level, "dummyAudioBufSize", config.dummyAudioBufSize); + xml.intTag(level, "dummyAudioSampleRate", config.dummyAudioSampleRate); + + xml.intTag(level, "guiRefresh", config.guiRefresh); + xml.strTag(level, "helpBrowser", config.helpBrowser); + xml.intTag(level, "extendedMidi", config.extendedMidi); + xml.intTag(level, "midiExportDivision", config.midiDivision); + xml.intTag(level, "guiDivision", config.guiDivision); + xml.strTag(level, "copyright", config.copyright); + xml.intTag(level, "smfFormat", config.smfFormat); + xml.intTag(level, "exp2ByteTimeSigs", config.exp2ByteTimeSigs); + xml.intTag(level, "expOptimNoteOffs", config.expOptimNoteOffs); + xml.intTag(level, "importMidiSplitParts", config.importMidiSplitParts); + xml.intTag(level, "startMode", config.startMode); + xml.strTag(level, "startSong", config.startSong); + + xml.intTag(level, "midiInputDevice", midiInputPorts); + xml.intTag(level, "midiInputChannel", midiInputChannel); + xml.intTag(level, "midiRecordType", midiRecordType); + xml.intTag(level, "midiThruType", midiThruType); + xml.intTag(level, "midiFilterCtrl1", midiFilterCtrl1); + xml.intTag(level, "midiFilterCtrl2", midiFilterCtrl2); + xml.intTag(level, "midiFilterCtrl3", midiFilterCtrl3); + xml.intTag(level, "midiFilterCtrl4", midiFilterCtrl4); + // Removed by Tim. p3.3.6 + + //xml.intTag(level, "txDeviceId", txDeviceId); + //xml.intTag(level, "rxDeviceId", rxDeviceId); + xml.strTag(level, "theme", config.style); + xml.strTag(level, "externalWavEditor", config.externalWavEditor); + xml.intTag(level, "useOldStyleStopShortCut", config.useOldStyleStopShortCut); + xml.intTag(level, "moveArmedCheckBox", config.moveArmedCheckBox); + + //for (int i = 0; i < 6; ++i) { + for (int i = 0; i < NUM_FONTS; ++i) { + char buffer[32]; + sprintf(buffer, "font%d", i); + xml.strTag(level, buffer, config.fonts[i].toString()); + } + for (int i = 0; i < 16; ++i) { + char buffer[32]; + sprintf(buffer, "palette%d", i); + xml.colorTag(level, buffer, config.palette[i]); + } + + xml.colorTag(level, "trackBg", config.trackBg); + xml.colorTag(level, "selectTrackBg", config.selectTrackBg); + xml.colorTag(level, "selectTrackFg", config.selectTrackFg); + xml.colorTag(level, "midiTrackBg", config.midiTrackBg); + xml.colorTag(level, "ctrlGraphFg", config.ctrlGraphFg); + xml.colorTag(level, "drumTrackBg", config.drumTrackBg); + xml.colorTag(level, "waveTrackBg", config.waveTrackBg); + xml.colorTag(level, "outputTrackBg", config.outputTrackBg); + xml.colorTag(level, "inputTrackBg", config.inputTrackBg); + xml.colorTag(level, "groupTrackBg", config.groupTrackBg); + xml.colorTag(level, "auxTrackBg", config.auxTrackBg); + xml.colorTag(level, "synthTrackBg", config.synthTrackBg); + + // Changed by Tim. p3.3.6 + + //xml.intTag(level, "txSyncPort", txSyncPort); + /* + // To keep old muse versions happy... + bool mcsync = mmc = mtc = false; + for(int sp = 0; sp < MIDI_PORTS; ++sp) + { + MidiSyncTxPort* txPort = &midiSyncTxPorts[sp]; + if(txPort->doMCSync() || txPort->doMMC() || txPort->doMTC()) + { + if(txPort->doMCSync()) + mcsync = true; + if(txPort->doMMC()) + mmc = true; + if(txPort->doMTC()) + mtc = true; + xml.intTag(level, "txSyncPort", sp); + break; + } + } + */ + + // Added by Tim. p3.3.6 + + //xml.tag(level++, "midiSyncInfo"); + //for(iMidiDevice id = midiDevices.begin(); id != midiDevices.end(); ++id) + //{ + // MidiDevice* md = *id; + // (*id)->syncInfo().write(level, xml, md); + //} + //xml.etag(level, "midiSyncInfo"); + + //xml.intTag(level, "rxSyncPort", rxSyncPort); + xml.intTag(level, "mtctype", mtcType); + xml.nput(level, "%02d:%02d:%02d:%02d:%02d\n", + mtcOffset.h(), mtcOffset.m(), mtcOffset.s(), + mtcOffset.f(), mtcOffset.sf()); + //xml.uintTag(level, "sendClockDelay", syncSendFirstClockDelay); + //xml.intTag(level, "useJackTransport", useJackTransport); + //xml.intTag(level, "jackTransportMaster", jackTransportMaster); + extSyncFlag.save(level, xml); + +// xml.intTag(level, "genMTCSync", genMTCSync); +// xml.intTag(level, "genMCSync", genMCSync); +// xml.intTag(level, "genMMC", genMMC); +// xml.intTag(level, "acceptMTC", acceptMTC); +// xml.intTag(level, "acceptMMC", acceptMMC); +// xml.intTag(level, "acceptMC", acceptMC); + + xml.qrectTag(level, "geometryMain", config.geometryMain); + xml.qrectTag(level, "geometryTransport", config.geometryTransport); + xml.qrectTag(level, "geometryBigTime", config.geometryBigTime); + xml.qrectTag(level, "geometryPianoroll", config.geometryPianoroll); + xml.qrectTag(level, "geometryDrumedit", config.geometryDrumedit); + //xml.qrectTag(level, "geometryMixer", config.geometryMixer); // Obsolete + + xml.intTag(level, "bigtimeVisible", config.bigTimeVisible); + xml.intTag(level, "transportVisible", config.transportVisible); + + //xml.intTag(level, "mixerVisible", config.mixerVisible); // Obsolete + xml.intTag(level, "mixer1Visible", config.mixer1Visible); + xml.intTag(level, "mixer2Visible", config.mixer2Visible); + //config.mixer1.write(level, xml, "mixer1"); + //config.mixer2.write(level, xml, "mixer2"); + config.mixer1.write(level, xml); + config.mixer2.write(level, xml); + + xml.intTag(level, "showSplashScreen", config.showSplashScreen); + xml.intTag(level, "canvasShowPartType", config.canvasShowPartType); + xml.intTag(level, "canvasShowPartEvent", config.canvasShowPartEvent); + xml.intTag(level, "canvasShowGrid", config.canvasShowGrid); + xml.strTag(level, "canvasBgPixmap", config.canvasBgPixmap); + + xml.colorTag(level, "transportHandleColor", config.transportHandleColor); + xml.colorTag(level, "bigtimeForegroundcolor", config.bigTimeForegroundColor); + xml.colorTag(level, "bigtimeBackgroundcolor", config.bigTimeBackgroundColor); + + writeSeqConfiguration(level, xml, false); + + DrumEdit::writeConfiguration(level, xml); + PianoRoll::writeConfiguration(level, xml); + MasterEdit::writeConfiguration(level, xml); + WaveEdit::writeConfiguration(level, xml); + + writeShortCuts(level, xml); + xml.etag(level, "configuration"); + } + +//--------------------------------------------------------- +// writeConfiguration +// write song specific configuration +//--------------------------------------------------------- + +void MusE::writeConfiguration(int level, Xml& xml) const + { + xml.tag(level++, "configuration"); + + xml.intTag(level, "midiInputDevice", midiInputPorts); + xml.intTag(level, "midiInputChannel", midiInputChannel); + xml.intTag(level, "midiRecordType", midiRecordType); + xml.intTag(level, "midiThruType", midiThruType); + xml.intTag(level, "midiFilterCtrl1", midiFilterCtrl1); + xml.intTag(level, "midiFilterCtrl2", midiFilterCtrl2); + xml.intTag(level, "midiFilterCtrl3", midiFilterCtrl3); + xml.intTag(level, "midiFilterCtrl4", midiFilterCtrl4); + // Removed by Tim. p3.3.6 + + //xml.intTag(level, "txDeviceId", txDeviceId); + //xml.intTag(level, "rxDeviceId", rxDeviceId); + + // Changed by Tim. p3.3.6 + + //xml.intTag(level, "txSyncPort", txSyncPort); + /* + // To keep old muse versions happy... + bool mcsync = mmc = mtc = false; + for(int sp = 0; sp < MIDI_PORTS; ++sp) + { + MidiSyncTxPort* txPort = &midiSyncTxPorts[sp]; + if(txPort->doMCSync() || txPort->doMMC() || txPort->doMTC()) + { + if(txPort->doMCSync()) + mcsync = true; + if(txPort->doMMC()) + mmc = true; + if(txPort->doMTC()) + mtc = true; + xml.intTag(level, "txSyncPort", sp); + break; + } + } + */ + + // Added by Tim. p3.3.6 + + //xml.tag(level++, "midiSyncInfo"); + //for(iMidiDevice id = midiDevices.begin(); id != midiDevices.end(); ++id) + //{ + // MidiDevice* md = *id; + // md->syncInfo().write(level, xml, md); + //} + //xml.etag(level, "midiSyncInfo"); + + //xml.intTag(level, "rxSyncPort", rxSyncPort); + xml.intTag(level, "mtctype", mtcType); + xml.nput(level, "%02d:%02d:%02d:%02d:%02d\n", + mtcOffset.h(), mtcOffset.m(), mtcOffset.s(), + mtcOffset.f(), mtcOffset.sf()); + xml.uintTag(level, "sendClockDelay", syncSendFirstClockDelay); + xml.intTag(level, "useJackTransport", useJackTransport.value()); + xml.intTag(level, "jackTransportMaster", jackTransportMaster); + extSyncFlag.save(level, xml); + +// xml.intTag(level, "genMTCSync", genMTCSync); +// xml.intTag(level, "genMCSync", genMCSync); +// xml.intTag(level, "genMMC", genMMC); +// xml.intTag(level, "acceptMTC", acceptMTC); +// xml.intTag(level, "acceptMMC", acceptMMC); +// xml.intTag(level, "acceptMC", acceptMC); + + xml.intTag(level, "bigtimeVisible", menuView->isItemChecked(bt_id)); + xml.intTag(level, "transportVisible", menuView->isItemChecked(tr_id)); + xml.intTag(level, "markerVisible", menuView->isItemChecked(mr_id)); + //xml.intTag(level, "mixerVisible", menuView->isItemChecked(aid1)); // Obsolete + + xml.geometryTag(level, "geometryMain", this); + if (transport) + xml.geometryTag(level, "geometryTransport", transport); + if (bigtime) + xml.geometryTag(level, "geometryBigTime", bigtime); + + //if (audioMixer) + // xml.geometryTag(level, "geometryMixer", audioMixer); // Obsolete + xml.intTag(level, "mixer1Visible", menuView->isItemChecked(aid1a)); + xml.intTag(level, "mixer2Visible", menuView->isItemChecked(aid1b)); + if (mixer1) + //mixer1->write(level, xml, "mixer1"); + mixer1->write(level, xml); + if (mixer2) + //mixer2->write(level, xml, "mixer2"); + mixer2->write(level, xml); + + arranger->writeStatus(level, xml); + writeSeqConfiguration(level, xml, true); + + DrumEdit::writeConfiguration(level, xml); + PianoRoll::writeConfiguration(level, xml); + MasterEdit::writeConfiguration(level, xml); + WaveEdit::writeConfiguration(level, xml); + + writeMidiTransforms(level, xml); + writeMidiInputTransforms(level, xml); + xml.etag(level, "configuration"); + } + +//--------------------------------------------------------- +// configMidiSync +//--------------------------------------------------------- + +void MusE::configMidiSync() + { + if (!midiSyncConfig) + //midiSyncConfig = new MidiSyncConfig(this); + midiSyncConfig = new MidiSyncConfig(0, (char*) "midiSyncConfig"); + + if (midiSyncConfig->isVisible()) { + midiSyncConfig->raise(); + midiSyncConfig->setActiveWindow(); + } + else + midiSyncConfig->show(); + } + +//--------------------------------------------------------- +// configMidiFile +//--------------------------------------------------------- + +void MusE::configMidiFile() + { + if (!midiFileConfig) + midiFileConfig = new MidiFileConfig(); + midiFileConfig->updateValues(); + + if (midiFileConfig->isVisible()) { + midiFileConfig->raise(); + midiFileConfig->setActiveWindow(); + } + else + midiFileConfig->show(); + } + +//--------------------------------------------------------- +// MidiFileConfig +// config properties of exported midi files +//--------------------------------------------------------- + +MidiFileConfig::MidiFileConfig() + : ConfigMidiFileBase() + { + 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->setCurrentItem(divisionIdx); + formatCombo->setCurrentItem(config.smfFormat); + extendedFormat->setChecked(config.extendedMidi); + copyrightEdit->setText(config.copyright); + optNoteOffs->setChecked(config.expOptimNoteOffs); + twoByteTimeSigs->setChecked(config.exp2ByteTimeSigs); + splitPartsCheckBox->setChecked(config.importMidiSplitParts); + } + +//--------------------------------------------------------- +// okClicked +//--------------------------------------------------------- + +void MidiFileConfig::okClicked() + { + int divisionIdx = divisionCombo->currentItem(); + + int divisions[3] = { 96, 192, 384 }; + if (divisionIdx >= 0 && divisionIdx < 3) + config.midiDivision = divisions[divisionIdx]; + config.extendedMidi = extendedFormat->isChecked(); + config.smfFormat = formatCombo->currentItem(); + config.copyright = copyrightEdit->text(); + config.expOptimNoteOffs = optNoteOffs->isChecked(); + config.exp2ByteTimeSigs = twoByteTimeSigs->isChecked(); + config.importMidiSplitParts = splitPartsCheckBox->isChecked(); + + 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(); + globalSettingsConfig->setActiveWindow(); + } + else + globalSettingsConfig->show(); + } + + +//--------------------------------------------------------- +// write +//--------------------------------------------------------- + +//void MixerConfig::write(Xml& xml, const char* name) +void MixerConfig::write(int level, Xml& xml) +//void MixerConfig::write(int level, Xml& xml, const char* name) + { + //xml.stag(QString(name)); + //xml.tag(level++, name.latin1()); + xml.tag(level++, "Mixer"); + //xml.tag(level++, name); + + xml.strTag(level, "name", name); + + //xml.tag("geometry", geometry); + xml.qrectTag(level, "geometry", geometry); + + xml.intTag(level, "showMidiTracks", showMidiTracks); + xml.intTag(level, "showDrumTracks", showDrumTracks); + xml.intTag(level, "showInputTracks", showInputTracks); + xml.intTag(level, "showOutputTracks", showOutputTracks); + xml.intTag(level, "showWaveTracks", showWaveTracks); + xml.intTag(level, "showGroupTracks", showGroupTracks); + xml.intTag(level, "showAuxTracks", showAuxTracks); + xml.intTag(level, "showSyntiTracks", showSyntiTracks); + + //xml.etag(name); + //xml.etag(level, name.latin1()); + xml.etag(level, "Mixer"); + //xml.etag(level, name); + } + +//--------------------------------------------------------- +// read +//--------------------------------------------------------- + +//void MixerConfig::read(QDomNode node) +void MixerConfig::read(Xml& xml) +//void MixerConfig::read(Xml& xml, const QString& name) + { + for (;;) { + Xml::Token token(xml.parse()); + const QString& tag(xml.s1()); + switch (token) { + case Xml::Error: + case Xml::End: + return; + case Xml::TagStart: + if (tag == "name") + name = xml.parse1(); + else if (tag == "geometry") + geometry = readGeometry(xml, tag); + else if (tag == "showMidiTracks") + showMidiTracks = xml.parseInt(); + else if (tag == "showDrumTracks") + showDrumTracks = xml.parseInt(); + else if (tag == "showInputTracks") + showInputTracks = xml.parseInt(); + else if (tag == "showOutputTracks") + showOutputTracks = xml.parseInt(); + else if (tag == "showWaveTracks") + showWaveTracks = xml.parseInt(); + else if (tag == "showGroupTracks") + showGroupTracks = xml.parseInt(); + else if (tag == "showAuxTracks") + showAuxTracks = xml.parseInt(); + else if (tag == "showSyntiTracks") + showSyntiTracks = xml.parseInt(); + else + //xml.unknown(name.latin1()); + xml.unknown("Mixer"); + break; + case Xml::TagEnd: + //if (tag == name) + if (tag == "Mixer") + return; + default: + break; + } + } + + } + diff --git a/muse2/muse/conf.h b/muse2/muse/conf.h new file mode 100644 index 00000000..285f5e98 --- /dev/null +++ b/muse2/muse/conf.h @@ -0,0 +1,38 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: conf.h,v 1.4.2.1 2006/09/28 19:22:25 spamatica Exp $ +// +// (C) Copyright 1999-2003 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __CONF_H__ +#define __CONF_H__ + +#include +#include "configmidifilebase.h" + +class QLineEdit; + +//--------------------------------------------------------- +// MidiFileConfig +// config properties of exported midi files +//--------------------------------------------------------- + +class MidiFileConfig : public ConfigMidiFileBase { + Q_OBJECT + + private slots: + void okClicked(); + void cancelClicked(); + + public: + MidiFileConfig(); + void updateValues(); + }; + +class Xml; +extern bool readConfiguration(); +extern void readConfiguration(Xml&, bool readOnlySequencer); +#endif + diff --git a/muse2/muse/confmport.cpp b/muse2/muse/confmport.cpp new file mode 100644 index 00000000..bea2e714 --- /dev/null +++ b/muse2/muse/confmport.cpp @@ -0,0 +1,897 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: confmport.cpp,v 1.9.2.10 2009/12/15 03:39:58 terminator356 Exp $ +// +// (C) Copyright 2000 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +//Added by qt3to4: +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "confmport.h" +#include "app.h" +#include "icons.h" +#include "globals.h" +#include "transport.h" +#include "arranger.h" +#include "midiport.h" +#include "mididev.h" +#include "xml.h" +#include "midisyncimpl.h" +#include "midifilterimpl.h" +#include "ctrlcombo.h" +#include "minstrument.h" +#include "synth.h" +#include "audio.h" +#include "midiseq.h" +#include "driver/alsamidi.h" +#include "driver/jackmidi.h" +#include "audiodev.h" +#include "menutitleitem.h" + +extern std::vector synthis; + +enum { DEVCOL_NO = 0, DEVCOL_GUI, DEVCOL_REC, DEVCOL_PLAY, DEVCOL_INSTR, DEVCOL_NAME, + //DEVCOL_STATE }; + DEVCOL_ROUTES, DEVCOL_STATE }; + +//--------------------------------------------------------- +// mdevViewItemRenamed +//--------------------------------------------------------- + +void MPConfig::mdevViewItemRenamed(Q3ListViewItem* item, int col, const QString& s) +{ + //printf("MPConfig::mdevViewItemRenamed col:%d txt:%s\n", col, s.latin1()); + if(item == 0) + return; + switch(col) + { + case DEVCOL_NAME: + { + QString id = item->text(DEVCOL_NO); + int no = atoi(id.latin1()) - 1; + if(no < 0 || no >= MIDI_PORTS) + return; + + MidiPort* port = &midiPorts[no]; + MidiDevice* dev = port->device(); + // Only Jack midi devices. + if(!dev || dev->deviceType() != MidiDevice::JACK_MIDI) + return; + if(dev->name() == s) + return; + + if(midiDevices.find(s)) + { + QMessageBox::critical(this, + tr("MusE: bad device name"), + tr("please choose a unique device name"), + QMessageBox::Ok, + Qt::NoButton, + Qt::NoButton); + songChanged(-1); + return; + } + dev->setName(s); + song->update(); + } + break; + default: + printf("MPConfig::mdevViewItemRenamed unknown column clicked col:%d txt:%s\n", col, s.latin1()); + break; + } +} + +//--------------------------------------------------------- +// rbClicked +//--------------------------------------------------------- + +void MPConfig::rbClicked(Q3ListViewItem* item, const QPoint& cpt, int col) + { + if (item == 0) + return; + QString id = item->text(DEVCOL_NO); + int no = atoi(id.latin1()) - 1; + if (no < 0 || no >= MIDI_PORTS) + return; + + int n; + MidiPort* port = &midiPorts[no]; + MidiDevice* dev = port->device(); + int rwFlags = dev ? dev->rwFlags() : 0; + int openFlags = dev ? dev->openFlags() : 0; + Q3ListView* listView = item->listView(); + //printf("MPConfig::rbClicked cpt x:%d y:%d\n", cpt.x(), cpt.y()); + //printf("MPConfig::rbClicked new cpt x:%d y:%d\n", cpt.x(), cpt.y()); + //printf("MPConfig::rbClicked new mapped cpt x:%d y:%d\n", cpt.x(), cpt.y()); + QPoint ppt = listView->itemRect(item).bottomLeft(); + //printf("MPConfig::rbClicked ppt x:%d y:%d\n", ppt.x(), ppt.y()); + ppt += QPoint(listView->header()->sectionPos(col), listView->header()->height()); + //printf("MPConfig::rbClicked new ppt x:%d y:%d\n", ppt.x(), ppt.y()); + ppt = listView->mapToGlobal(ppt); + //printf("MPConfig::rbClicked new mapped ppt x:%d y:%d\n", ppt.x(), ppt.y()); + + switch (col) { + case DEVCOL_GUI: + if (dev == 0) + //break; + return; + if (port->hasGui()) + { + port->instrument()->showGui(!port->guiVisible()); + item->setPixmap(DEVCOL_GUI, port->guiVisible() ? *dotIcon : *dothIcon); + } + //break; + return; + + case DEVCOL_REC: + if (dev == 0 || !(rwFlags & 2)) + //break; + return; + openFlags ^= 0x2; + dev->setOpenFlags(openFlags); + midiSeq->msgSetMidiDevice(port, dev); // reopen device + item->setPixmap(DEVCOL_REC, openFlags & 2 ? *dotIcon : *dothIcon); + //break; + return; + + case DEVCOL_PLAY: + if (dev == 0 || !(rwFlags & 1)) + //break; + return; + openFlags ^= 0x1; + dev->setOpenFlags(openFlags); + midiSeq->msgSetMidiDevice(port, dev); // reopen device + item->setPixmap(DEVCOL_PLAY, openFlags & 1 ? *dotIcon : *dothIcon); + //break; + return; + + case DEVCOL_ROUTES: + { + if(!checkAudioDevice()) + return; + + if(audioDevice->deviceType() != AudioDevice::JACK_AUDIO) // p3.3.52 Only if Jack is running. + return; + + if(!dev) + return; + + // Only Jack midi devices. + //MidiJackDevice* mjd = dynamic_cast(dev); + //if(!mjd) + if(dev->deviceType() != MidiDevice::JACK_MIDI) + return; + + if(!dev->rwFlags() & 3) + return; + + RouteList* rl = (dev->rwFlags() & 1) ? dev->outRoutes() : dev->inRoutes(); + + Q3PopupMenu* pup = 0; + int gid = 0; + std::list sl; + + pup = new Q3PopupMenu(this); + pup->setCheckable(true); + + _redisplay: + pup->clear(); + gid = 0; + + // Jack input ports if device is writable, and jack output ports if device is readable. + sl = (dev->rwFlags() & 1) ? audioDevice->inputPorts(true, _showAliases) : audioDevice->outputPorts(true, _showAliases); + + //for (int i = 0; i < channel; ++i) + //{ + //char buffer[128]; + //snprintf(buffer, 128, "%s %d", tr("Channel").latin1(), i+1); + //MenuTitleItem* titel = new MenuTitleItem(QString(buffer)); + //pup->insertItem(titel); + + pup->insertItem(tr("Show first aliases"), gid); + pup->setItemChecked(gid, (_showAliases == 0)); + ++gid; + pup->insertItem(tr("Show second aliases"), gid); + pup->setItemChecked(gid, (_showAliases == 1)); + ++gid; + pup->insertSeparator(); + + for(std::list::iterator ip = sl.begin(); ip != sl.end(); ++ip) + { + //int id = pup->insertItem(*ip, gid); + pup->insertItem(*ip, gid); + //Route dst(*ip, true, i); + Route rt(*ip, (dev->rwFlags() & 1), -1, Route::JACK_ROUTE); + for(iRoute ir = rl->begin(); ir != rl->end(); ++ir) + { + if (*ir == rt) + { + //pup->setItemChecked(id, true); + pup->setItemChecked(gid, true); + break; + } + } + ++gid; + } + //if (i+1 != channel) + // pup->insertSeparator(); + //} + + n = pup->exec(ppt, 0); + if (n != -1) + { + if(n == 0) // Show first aliases + { + ///delete pup; + if(_showAliases == 0) + _showAliases = -1; + else + _showAliases = 0; + goto _redisplay; // Go back + } + else + if(n == 1) // Show second aliases + { + ///delete pup; + if(_showAliases == 1) + _showAliases = -1; + else + _showAliases = 1; + goto _redisplay; // Go back + } + + QString s(pup->text(n)); + + if(dev->rwFlags() & 1) // Writable + { + Route srcRoute(dev, -1); + Route dstRoute(s, true, -1, Route::JACK_ROUTE); + + iRoute iir = rl->begin(); + for(; iir != rl->end(); ++iir) + { + if(*iir == dstRoute) + break; + } + if(iir != rl->end()) + // disconnect + audio->msgRemoveRoute(srcRoute, dstRoute); + else + // connect + audio->msgAddRoute(srcRoute, dstRoute); + } + else + if(dev->rwFlags() & 2) // Readable + { + Route srcRoute(s, false, -1, Route::JACK_ROUTE); + Route dstRoute(dev, -1); + + iRoute iir = rl->begin(); + for(; iir != rl->end(); ++iir) + { + if(*iir == srcRoute) + break; + } + if(iir != rl->end()) + // disconnect + audio->msgRemoveRoute(srcRoute, dstRoute); + else + // connect + audio->msgAddRoute(srcRoute, dstRoute); + } + + audio->msgUpdateSoloStates(); + song->update(SC_ROUTE); + + // p3.3.46 + //delete pup; + // FIXME: + // Routes can't be re-read until the message sent from msgAddRoute1() + // has had time to be sent and actually affected the routes. + ///goto _redisplay; // Go back + + } + delete pup; + //iR->setDown(false); // pup->exec() catches mouse release event + + } + //break; + return; + + case DEVCOL_NAME: + { + //printf("MPConfig::rbClicked DEVCOL_NAME\n"); + + // Did we click in the text area? + if((cpt.x() - ppt.x()) > buttondownIcon->width()) + { + //printf("MPConfig::rbClicked starting item rename... enabled?:%d\n", item->renameEnabled(DEVCOL_NAME)); + // Start the renaming of the cell... + if(item->renameEnabled(DEVCOL_NAME)) + item->startRename(DEVCOL_NAME); + + return; + } + else + // We clicked the 'down' button. + { + Q3PopupMenu* pup = new Q3PopupMenu(this); + + pup->setCheckable(true); + + pup->insertItem(tr("Create") + QT_TR_NOOP(" Jack") + tr(" input"), 0); + pup->insertItem(tr("Create") + QT_TR_NOOP(" Jack") + tr(" output"), 1); + + typedef std::map asmap; + typedef std::map::iterator imap; + + asmap mapALSA; + asmap mapJACK; + asmap mapSYNTH; + + int aix = 2; + int jix = 0x10000000; + int six = 0x20000000; + for(iMidiDevice i = midiDevices.begin(); i != midiDevices.end(); ++i) + { + //devALSA = dynamic_cast(*i); + //if(devALSA) + if((*i)->deviceType() == MidiDevice::ALSA_MIDI) + { + //mapALSA.insert( std::pair (std::string(devALSA->name().lower().latin1()), ii) ); + mapALSA.insert( std::pair (std::string((*i)->name().latin1()), aix) ); + ++aix; + } + else + if((*i)->deviceType() == MidiDevice::JACK_MIDI) + { + //devJACK = dynamic_cast(*i); + //if(devJACK) + //mapJACK.insert( std::pair (std::string(devJACK->name().lower().latin1()), ii) ); + mapJACK.insert( std::pair (std::string((*i)->name().latin1()), jix) ); + ++jix; + } + else + if((*i)->deviceType() == MidiDevice::SYNTH_MIDI) + { + mapSYNTH.insert( std::pair (std::string((*i)->name().latin1()), six) ); + ++six; + } + else + printf("MPConfig::rbClicked unknown midi device: %s\n", (*i)->name().latin1()); + } + + //int sz = midiDevices.size(); + if(!mapALSA.empty()) + { + pup->insertSeparator(); + // pup->insertItem(new MenuTitleItem(QT_TR_NOOP("ALSA:"))); ddskrjo + + for(imap i = mapALSA.begin(); i != mapALSA.end(); ++i) + { + int idx = i->second; + //if(idx > sz) // Sanity check + // continue; + QString s(i->first.c_str()); + MidiDevice* md = midiDevices.find(s, MidiDevice::ALSA_MIDI); + if(md) + { + //if(!dynamic_cast(md)) + if(md->deviceType() != MidiDevice::ALSA_MIDI) + continue; + + //pup->insertItem(QT_TR_NOOP(md->name()), idx + 3); + pup->insertItem(QT_TR_NOOP(md->name()), idx); + + //for(int k = 0; k < MIDI_PORTS; ++k) + //{ + //MidiDevice* dev = midiPorts[k].device(); + //if(dev && s == dev->name()) + if(md == dev) + { + //pup->setItemEnabled(idx + 3, false); + //pup->setItemChecked(idx + 3, true); + pup->setItemChecked(idx, true); + //break; + } + //} + } + } + } + + if(!mapJACK.empty()) + { + pup->insertSeparator(); + //pup->insertItem(new MenuTitleItem(QT_TR_NOOP("JACK:"))); ddskrjo + + for(imap i = mapJACK.begin(); i != mapJACK.end(); ++i) + { + int idx = i->second; + //if(idx > sz) + // continue; + QString s(i->first.c_str()); + MidiDevice* md = midiDevices.find(s, MidiDevice::JACK_MIDI); + if(md) + { + //if(!dynamic_cast(md)) + if(md->deviceType() != MidiDevice::JACK_MIDI) + continue; + + //pup->insertItem(QT_TR_NOOP(md->name()), idx + 3); + pup->insertItem(QT_TR_NOOP(md->name()), idx); + + //for(int k = 0; k < MIDI_PORTS; ++k) + //{ + //MidiDevice* dev = midiPorts[k].device(); + //if(dev && s == dev->name()) + if(md == dev) + { + //pup->setItemEnabled(idx + 3, false); + //pup->setItemChecked(idx + 3, true); + pup->setItemChecked(idx, true); + //break; + } + //} + } + } + } + + if(!mapSYNTH.empty()) + { + pup->insertSeparator(); + //pup->insertItem(new MenuTitleItem(QT_TR_NOOP("SYNTH:"))); ddskrjo + + for(imap i = mapSYNTH.begin(); i != mapSYNTH.end(); ++i) + { + int idx = i->second; + //if(idx > sz) + // continue; + QString s(i->first.c_str()); + MidiDevice* md = midiDevices.find(s, MidiDevice::SYNTH_MIDI); + if(md) + { + //if(!dynamic_cast(md)) + if(md->deviceType() != MidiDevice::SYNTH_MIDI) + continue; + + //pup->insertItem(QT_TR_NOOP(md->name()), idx + 3); + pup->insertItem(QT_TR_NOOP(md->name()), idx); + + //for(int k = 0; k < MIDI_PORTS; ++k) + //{ + //MidiDevice* dev = midiPorts[k].device(); + //if(dev && s == dev->name()) + if(md == dev) + { + //pup->setItemEnabled(idx + 3, false); + //pup->setItemChecked(idx + 3, true); + pup->setItemChecked(idx, true); + //break; + } + //} + } + } + } + + n = pup->exec(ppt, 0); + if(n == -1) + { + delete pup; + //break; + return; + } + + //printf("MPConfig::rbClicked n:%d\n", n); + + MidiDevice* sdev = 0; + if(n < 2) + { + delete pup; + if(n == 0) + sdev = MidiJackDevice::createJackMidiDevice(QString(), 2); // 2: Readable. + else + if(n == 1) + sdev = MidiJackDevice::createJackMidiDevice(QString(), 1); // 1:Writable. + } + else + { + int typ = MidiDevice::ALSA_MIDI; + if(n >= 0x10000000) + typ = MidiDevice::JACK_MIDI; + if(n >= 0x20000000) + typ = MidiDevice::SYNTH_MIDI; + + sdev = midiDevices.find(pup->text(n), typ); + delete pup; + // Is it the current device? Reset it to . + if(sdev == dev) + sdev = 0; + } + + midiSeq->msgSetMidiDevice(port, sdev); + muse->changeConfig(true); // save configuration file + song->update(); + } + } + //break; + return; + + case DEVCOL_INSTR: + { + if (dev && dev->isSynti()) + //break; + return; + if (instrPopup == 0) + instrPopup = new Q3PopupMenu(this); + instrPopup->clear(); + for (iMidiInstrument i = midiInstruments.begin(); i + != midiInstruments.end(); ++i) + { + // By T356. + // Do not list synths. Although it is possible to assign a synth + // as an instrument to a non-synth device, we should not allow this. + // (One reason is that the 'show gui' column is then enabled, which + // makes no sense for a non-synth device). + SynthI* si = dynamic_cast(*i); + if(!si) + instrPopup->insertItem((*i)->iname()); + } + n = instrPopup->exec(ppt, 0); + if (n == -1) + //break; + return; + QString s = instrPopup->text(n); + item->setText(DEVCOL_INSTR, s); + for (iMidiInstrument i = midiInstruments.begin(); i + != midiInstruments.end(); ++i) { + if ((*i)->iname() == s) { + port->setInstrument(*i); + break; + } + } + song->update(); + } + //break; + return; + } + //songChanged(-1); + } + +//--------------------------------------------------------- +// MPHeaderTip::maybeTip +//--------------------------------------------------------- + +void MPHeaderTip::maybeTip(const QPoint &pos) + { +#if 0 // ddskrjo + Q3Header* w = (Q3Header*)parentWidget(); + int section = w->sectionAt(pos.x()); + if (section == -1) + return; + QRect r(w->sectionPos(section), 0, w->sectionSize(section), + w->height()); + QString p; + switch (section) { + case DEVCOL_NO: p = Q3Header::tr("Port Number"); break; + case DEVCOL_GUI: p = Q3Header::tr("Enable gui"); break; + case DEVCOL_REC: p = Q3Header::tr("Enable reading"); break; + case DEVCOL_PLAY: p = Q3Header::tr("Enable writing"); break; + case DEVCOL_INSTR: p = Q3Header::tr("Port instrument"); break; + case DEVCOL_NAME: p = Q3Header::tr("Midi device name. Click to edit (Jack)"); break; + case DEVCOL_ROUTES: p = Q3Header::tr("Jack midi ports"); break; + case DEVCOL_STATE: p = Q3Header::tr("Device state"); break; + default: return; + } + tip(r, p); +#endif + } + +//--------------------------------------------------------- +// MPWhatsThis::text +//--------------------------------------------------------- + +QString MPWhatsThis::text(const QPoint& pos) + { + int n = header->cellAt(pos.x()); + if (n == -1) + return QString::null; + switch (header->mapToLogical(n)) { + case DEVCOL_NO: + return Q3Header::tr("Port Number"); + case DEVCOL_GUI: + return Q3Header::tr("Enable gui for device"); + case DEVCOL_REC: + return Q3Header::tr("Enable reading from device"); + case DEVCOL_PLAY: + return Q3Header::tr("Enable writing to device"); + case DEVCOL_NAME: + return Q3Header::tr("Name of the midi device associated with" + " this port number. Click to edit Jack midi name."); + case DEVCOL_INSTR: + return Q3Header::tr("Instrument connected to port"); + case DEVCOL_ROUTES: + return Q3Header::tr("Jack midi ports"); + case DEVCOL_STATE: + return Q3Header::tr("State: result of opening the device"); + default: + break; + } + return QString::null; + } + +//--------------------------------------------------------- +// MPConfig +// Midi Port Config +//--------------------------------------------------------- + +MPConfig::MPConfig(QWidget* parent, char* name) + : SynthConfigBase(parent, name) + { + _mptooltip = 0; + popup = 0; + instrPopup = 0; + _showAliases = -1; // 0: Show first aliases, if available. Nah, stick with -1: none at first. + + mdevView->setSorting(-1); + mdevView->setAllColumnsShowFocus(true); + mdevView->addColumn(tr("Port")); + mdevView->addColumn(tr("GUI")); + mdevView->addColumn(tr("I")); + mdevView->addColumn(tr("O")); + mdevView->addColumn(tr("Instrument"), 120); + mdevView->addColumn(tr("Device Name"), 120); + mdevView->addColumn(tr("Routing"), 80); + mdevView->addColumn(tr("State")); + mdevView->setFocusPolicy(Qt::NoFocus); + + mdevView->setColumnAlignment(DEVCOL_NO, Qt::AlignHCenter); + mdevView->setColumnAlignment(DEVCOL_GUI, Qt::AlignCenter); + mdevView->setColumnAlignment(DEVCOL_REC, Qt::AlignCenter); + mdevView->setColumnAlignment(DEVCOL_PLAY, Qt::AlignCenter); + mdevView->header()->setResizeEnabled(false, DEVCOL_NO); + mdevView->header()->setResizeEnabled(false, DEVCOL_REC); + mdevView->header()->setResizeEnabled(false, DEVCOL_GUI); + mdevView->setResizeMode(Q3ListView::LastColumn); + + instanceList->setColumnAlignment(1, Qt::AlignHCenter); + + new MPWhatsThis(mdevView, mdevView->header()); + _mptooltip = new MPHeaderTip(mdevView->header()); + + connect(mdevView, SIGNAL(pressed(Q3ListViewItem*,const QPoint&,int)), + this, SLOT(rbClicked(Q3ListViewItem*,const QPoint&,int))); + connect(mdevView, SIGNAL(itemRenamed(Q3ListViewItem*,int,const QString&)), + this, SLOT(mdevViewItemRenamed(Q3ListViewItem*,int,const QString&))); + connect(song, SIGNAL(songChanged(int)), SLOT(songChanged(int))); + + connect(synthList, SIGNAL(selectionChanged()), SLOT(selectionChanged())); + connect(instanceList, SIGNAL(selectionChanged()), SLOT(selectionChanged())); + + connect(addInstance, SIGNAL(clicked()), SLOT(addInstanceClicked())); + connect(removeInstance, SIGNAL(clicked()), SLOT(removeInstanceClicked())); + songChanged(0); + } + + +MPConfig::~MPConfig() +{ + delete _mptooltip; +} + +//--------------------------------------------------------- +// selectionChanged +//--------------------------------------------------------- + +void MPConfig::selectionChanged() + { + addInstance->setEnabled(synthList->selectedItem()); + removeInstance->setEnabled(instanceList->selectedItem()); + } + +//--------------------------------------------------------- +// songChanged +//--------------------------------------------------------- + +void MPConfig::songChanged(int flags) + { + // Is it simply a midi controller value adjustment? Forget it. + if(flags == SC_MIDI_CONTROLLER) + return; + + // Get currently selected index... + int no = -1; + Q3ListViewItem* sitem = mdevView->selectedItem(); + if(sitem) + { + QString id = sitem->text(DEVCOL_NO); + no = atoi(id.latin1()) - 1; + if(no < 0 || no >= MIDI_PORTS) + no = -1; + } + + sitem = 0; + mdevView->clear(); + for (int i = MIDI_PORTS-1; i >= 0; --i) + { + MidiPort* port = &midiPorts[i]; + MidiDevice* dev = port->device(); + QString s; + s.setNum(i+1); + Q3ListViewItem* item = new Q3ListViewItem(mdevView); + item->setText(DEVCOL_NO, s); + item->setText(DEVCOL_STATE, port->state()); + if (port->instrument()) + item->setText(DEVCOL_INSTR, port->instrument()->iname() ); + else + item->setText(DEVCOL_INSTR, tr("")); + if (dev) { + item->setText(DEVCOL_NAME, dev->name()); + // Is it a Jack midi device? Allow renaming. + //if(dynamic_cast(dev)) + if(dev->deviceType() == MidiDevice::JACK_MIDI) + item->setRenameEnabled(DEVCOL_NAME, true); + + if (dev->rwFlags() & 0x2) + item->setPixmap(DEVCOL_REC, dev->openFlags() & 2 ? *dotIcon : *dothIcon); + else + item->setPixmap(DEVCOL_REC, QPixmap()); + if (dev->rwFlags() & 0x1) + item->setPixmap(DEVCOL_PLAY, dev->openFlags() & 1 ? *dotIcon : *dothIcon); + else + item->setPixmap(DEVCOL_PLAY, QPixmap()); + } + else { + item->setText(DEVCOL_NAME, tr("")); + item->setPixmap(DEVCOL_GUI, *dothIcon); + item->setPixmap(DEVCOL_REC, QPixmap()); + item->setPixmap(DEVCOL_PLAY, QPixmap()); + } + if (port->hasGui()) { + item->setPixmap(DEVCOL_GUI, port->guiVisible() ? *dotIcon : *dothIcon); + } + else { + item->setPixmap(DEVCOL_GUI, QPixmap()); + } + if (!(dev && dev->isSynti())) + item->setPixmap(DEVCOL_INSTR, *buttondownIcon); + item->setPixmap(DEVCOL_NAME, *buttondownIcon); + + //if(dev && dynamic_cast(dev)) + if(dev && dev->deviceType() == MidiDevice::JACK_MIDI) + { + item->setPixmap(DEVCOL_ROUTES, *buttondownIcon); + item->setText(DEVCOL_ROUTES, tr("routes")); + } + + mdevView->insertItem(item); + if(i == no) + sitem = item; + } + if(sitem) + { + mdevView->setSelected(sitem, true); + mdevView->ensureItemVisible(sitem); + } + + QString s; + synthList->clear(); + for (std::vector::iterator i = synthis.begin(); + i != synthis.end(); ++i) { + //s = (*i)->baseName(); + //s = (*i)->name(); + + Q3ListViewItem* item = new Q3ListViewItem(synthList); + //item->setText(0, s); + item->setText(0, QString((*i)->baseName())); + s.setNum((*i)->instances()); + item->setText(1, s); + //item->setText(2, QString((*i)->baseName())); + item->setText(2, QString((*i)->name())); + + item->setText(3, QString((*i)->version())); + item->setText(4, QString((*i)->description())); + } + instanceList->clear(); + SynthIList* sl = song->syntis(); + for (iSynthI si = sl->begin(); si != sl->end(); ++si) { + Q3ListViewItem* iitem = new Q3ListViewItem(instanceList); + iitem->setText(0, (*si)->name()); + if ((*si)->midiPort() == -1) + s = tr(""); + else + s.setNum((*si)->midiPort() + 1); + iitem->setText(1, s); + } + selectionChanged(); + } + +//--------------------------------------------------------- +// addInstanceClicked +//--------------------------------------------------------- + +void MPConfig::addInstanceClicked() + { + Q3ListViewItem* item = synthList->selectedItem(); + if (item == 0) + return; + //SynthI *si = song->createSynthI(item->text(2)); + SynthI *si = song->createSynthI(item->text(0), item->text(2)); + if(!si) + return; + + // add instance last in midi device list + for (int i = 0; i < MIDI_PORTS; ++i) { + MidiPort* port = &midiPorts[i]; + MidiDevice* dev = port->device(); + if (dev==0) { + midiSeq->msgSetMidiDevice(port, si); + muse->changeConfig(true); // save configuration file + song->update(); + break; + } + } + } + +//--------------------------------------------------------- +// removeInstanceClicked +//--------------------------------------------------------- + +void MPConfig::removeInstanceClicked() + { + Q3ListViewItem* item = instanceList->selectedItem(); + if (item == 0) + return; + SynthIList* sl = song->syntis(); + iSynthI ii; + for (ii = sl->begin(); ii != sl->end(); ++ii) { + if ((*ii)->iname() == item->text(0)) + break; + } + if (ii == sl->end()) { + printf("synthesizerConfig::removeInstanceClicked(): synthi not found\n"); + return; + } + audio->msgRemoveTrack(*ii); + } + +//--------------------------------------------------------- +// configMidiPorts +//--------------------------------------------------------- + +void MusE::configMidiPorts() + { + if (!midiPortConfig) + midiPortConfig = new MPConfig(0, (char*) "midiPortConfig"); + if (midiPortConfig->isVisible()) { + midiPortConfig->raise(); + midiPortConfig->setActiveWindow(); + } + else + midiPortConfig->show(); + } + diff --git a/muse2/muse/confmport.h b/muse2/muse/confmport.h new file mode 100644 index 00000000..77683a3c --- /dev/null +++ b/muse2/muse/confmport.h @@ -0,0 +1,83 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: confmport.h,v 1.3 2004/01/25 11:20:31 wschweer Exp $ +// +// (C) Copyright 2000 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __CONFMPORT_H__ +#define __CONFMPORT_H__ + +#include +#include +#include +//Added by qt3to4: +#include + +#include "synthconfigbase.h" + +class Q3ListView; +class Q3ListViewItem; +class QPoint; +class Q3PopupMenu; +class Q3Header; +class Xml; + +//---------------------------------------------------------- +// MPHeaderTip +//---------------------------------------------------------- + +class MPHeaderTip { // : public QToolTip { ddskrjo + + public: + MPHeaderTip(QWidget * parent) {} // : QToolTip(parent) {} ddskrjo + virtual ~MPHeaderTip() {} + protected: + void maybeTip(const QPoint &); + }; + +//--------------------------------------------------------- +// MPWhatsThis +//--------------------------------------------------------- + +class MPWhatsThis : public Q3WhatsThis { + Q3Header* header; + + protected: + QString text(const QPoint&); + + public: + MPWhatsThis(QWidget* parent, Q3Header* h) : Q3WhatsThis(parent) { + header = h; + } + }; + +//--------------------------------------------------------- +// MPConfig +// Midi Port Config +//--------------------------------------------------------- + +class MPConfig : public SynthConfigBase { + MPHeaderTip* _mptooltip; + Q3PopupMenu* popup; + Q3PopupMenu* instrPopup; + + int _showAliases; // -1: None. 0: First aliases. 1: Second aliases etc. + + Q_OBJECT + + private slots: + void rbClicked(Q3ListViewItem*, const QPoint&,int); + void mdevViewItemRenamed(Q3ListViewItem*, int, const QString&); + void songChanged(int); + void selectionChanged(); + void addInstanceClicked(); + void removeInstanceClicked(); + + public: + MPConfig(QWidget* parent, char* name); + ~MPConfig(); + }; + +#endif diff --git a/muse2/muse/ctrl.cpp b/muse2/muse/ctrl.cpp new file mode 100644 index 00000000..fa7e5bd7 --- /dev/null +++ b/muse2/muse/ctrl.cpp @@ -0,0 +1,297 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: ctrl.cpp,v 1.1.2.4 2009/06/10 00:34:59 terminator356 Exp $ +// +// controller handling for mixer automation +// +// (C) Copyright 2003 Werner Schweer (ws@seh.de) +//========================================================= + + +#include +//#include +#include "globals.h" +#include "ctrl.h" +#include "xml.h" +// #include "audio.h" + +//--------------------------------------------------------- +// CtrlList +//--------------------------------------------------------- + +CtrlList::CtrlList(int id) + { + _id = id; + _default = 0.0; + _curVal = 0.0; + _mode = INTERPOLATE; + } +//--------------------------------------------------------- +// CtrlList +//--------------------------------------------------------- +CtrlList::CtrlList(int id, QString name, double min, double max) +{ + _id = id; + _default = 0.0; + _curVal = 0.0; + _mode = INTERPOLATE; + _name = name; + _min = min; + _max = max; +} +//--------------------------------------------------------- +// CtrlList +//--------------------------------------------------------- + +CtrlList::CtrlList() + { + _id = 0; + _default = 0.0; + _curVal = 0.0; + _mode = INTERPOLATE; + } + +//--------------------------------------------------------- +// value +//--------------------------------------------------------- + +double CtrlList::value(int frame) + { + if (!automation || empty()) { + return _curVal; + } + ciCtrl i = upper_bound(frame); + if (i == end()) { + ciCtrl i = end(); + --i; + const CtrlVal& val = i->second; + _curVal = val.val; + } + else + if(_mode == DISCRETE) + { + if(i == begin()) + _curVal = _default; + else + { + --i; + const CtrlVal& val = i->second; + _curVal = val.val; + } + } + else { + int frame2 = i->second.frame; + double val2 = i->second.val; + int frame1; + double val1; + if (i == begin()) { + frame1 = 0; + val1 = _default; + } + else { + --i; + frame1 = i->second.frame; + val1 = i->second.val; + } + frame -= frame1; + val2 -= val1; + frame2 -= frame1; + val1 += (frame * val2)/frame2; + _curVal = val1; + } +// printf("autoVal %d %f\n", frame, _curVal); + return _curVal; + } + + +//--------------------------------------------------------- +// setCurVal +//--------------------------------------------------------- +void CtrlList::setCurVal(double val) +{ + _curVal = val; + if (size() < 2) { + add(0,val); + } +} + +//--------------------------------------------------------- +// add +//--------------------------------------------------------- + +void CtrlList::add(int frame, double val) + { +// printf("add %d %f\n", frame, val); + iCtrl e = find(frame); + if (e != end()) + e->second.val = val; + else + insert(std::pair (frame, CtrlVal(frame, val))); + } + +//--------------------------------------------------------- +// del +//--------------------------------------------------------- + +void CtrlList::del(int /* frame*/) + { + /* + iCtrl e = find(frame); + if (e == end()) { + printf("CtrlList::del(%d): not found\n", frame); + return; + } + erase(e); + */ + } + +//--------------------------------------------------------- +// read +//--------------------------------------------------------- + +void CtrlList::read(Xml& xml) + { + QLocale loc = QLocale::c(); + bool ok; + for (;;) { + Xml::Token token = xml.parse(); + const QString& tag = xml.s1(); + switch (token) { + case Xml::Error: + case Xml::End: + return; + case Xml::Attribut: + if (tag == "id") + { + //_id = xml.s2().toInt(); + _id = loc.toInt(xml.s2(), &ok); + if(!ok) + printf("CtrlList::read failed reading _id string: %s\n", xml.s2().latin1()); + } + else if (tag == "cur") + { + //_curVal = xml.s2().toDouble(); + _curVal = loc.toDouble(xml.s2(), &ok); + if(!ok) + printf("CtrlList::read failed reading _curVal string: %s\n", xml.s2().latin1()); + } + else + printf("unknown tag %s\n", tag.latin1()); + break; + case Xml::Text: + { + // Changed by Tim. Users in some locales reported corrupt reading, + // because of the way floating point is represented (2,3456 not 2.3456). + /* + const char* s = tag.latin1(); + int frame; + double val; + + for (;;) { + char* endp; + while (*s == ' ' || *s == '\n') + ++s; + if (*s == 0) + break; + frame = strtol(s, &endp, 10); + s = endp; + while (*s == ' ' || *s == '\n') + ++s; + val = strtod(s, &endp); + add(frame, val); + s = endp; + ++s; + } + */ + + // Added by Tim. p3.3.6 + //printf("CtrlList::read tag:%s\n", tag.latin1()); + + int len = tag.length(); + int frame; + double val; + + int i = 0; + for(;;) + { + while(i < len && (tag[i] == ',' || tag[i] == ' ' || tag[i] == '\n')) + ++i; + if(i == len) + break; + + QString fs; + while(i < len && tag[i] != ' ') + { + fs.append(tag[i]); + ++i; + } + if(i == len) + break; + + // Works OK, but only because if current locale fails it falls back on 'C' locale. + // So, let's skip the fallback and force use of 'C' locale. + //frame = fs.toInt(&ok); + frame = loc.toInt(fs, &ok); + if(!ok) + { + printf("CtrlList::read failed reading frame string: %s\n", fs.latin1()); + break; + } + + while(i < len && (tag[i] == ' ' || tag[i] == '\n')) + ++i; + if(i == len) + break; + + QString vs; + while(i < len && tag[i] != ' ' && tag[i] != ',') + { + vs.append(tag[i]); + ++i; + } + + // Works OK, but only because if current locale fails it falls back on 'C' locale. + // So, let's skip the fallback and force use of 'C' locale. + //val = vs.toDouble(&ok); + val = loc.toDouble(vs, &ok); + if(!ok) + { + printf("CtrlList::read failed reading value string: %s\n", vs.latin1()); + break; + } + + // Added by Tim. p3.3.6 + //printf("CtrlList::read i:%d len:%d fs:%s frame %d: vs:%s val %f \n", i, len, fs.latin1(), frame, vs.latin1(), val); + + add(frame, val); + + if(i == len) + break; + } + } + break; + case Xml::TagEnd: + if (xml.s1() == "controller") + { + // Added by Tim. p3.3.6 + //printf("CtrlList::read _id:%d _curVal:%f\n", _id, _curVal); + + return; + } + default: + break; + } + } + } + +//--------------------------------------------------------- +// add +//--------------------------------------------------------- + +void CtrlListList::add(CtrlList* vl) + { +// printf("CtrlListList(%p)::add(id=%d) size %d\n", this, vl->id(), size()); + insert(std::pair(vl->id(), vl)); + } + diff --git a/muse2/muse/ctrl.h b/muse2/muse/ctrl.h new file mode 100644 index 00000000..99767b55 --- /dev/null +++ b/muse2/muse/ctrl.h @@ -0,0 +1,144 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: ctrl.h,v 1.4.2.2 2006/10/29 07:54:51 terminator356 Exp $ +// +// controller for mixer automation +// +// (C) Copyright 2003-2004 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __CTRL_H__ +#define __CTRL_H__ + +#include +#include + +const int AC_VOLUME = 0; +const int AC_PAN = 1; +const int AC_MUTE = 2; + +#define AC_PLUGIN_CTL_BASE 0x1000 +#define AC_PLUGIN_CTL_BASE_POW 12 +#define AC_PLUGIN_CTL_ID_MASK 0xFFF + +inline int genACnum(int plugin, int ctrl) { return (plugin + 1) * AC_PLUGIN_CTL_BASE + ctrl; } + +class Xml; + +enum CtrlValueType { VAL_LOG, VAL_LINEAR, VAL_INT, VAL_BOOL }; +enum CtrlRecValueType { ARVT_VAL, ARVT_START, ARVT_STOP }; + +//--------------------------------------------------------- +// CtrlVal +// controller "event" +//--------------------------------------------------------- + +struct CtrlVal { + int frame; + double val; + CtrlVal(int f, double v) { + frame = f; + val = v; + } + }; + +//--------------------------------------------------------- +// CtrlRecVal +// recorded controller event, mixer automation +//--------------------------------------------------------- + +struct CtrlRecVal : public CtrlVal { + int id; + CtrlRecValueType type; // 0 - ctrlVal, 1 - start, 2 - end + CtrlRecVal(int f, int n, double v) : CtrlVal(f, v), id(n), type(ARVT_VAL) {} + CtrlRecVal(int f, int n, double v, CtrlRecValueType t) : CtrlVal(f, v), id(n), type(t) {} + }; + +//--------------------------------------------------------- +// CtrlRecList +//--------------------------------------------------------- + +class CtrlRecList : public std::list { + public: + }; + +typedef CtrlRecList::iterator iCtrlRec; + +//--------------------------------------------------------- +// CtrlList +// arrange controller events of a specific type in a +// list for easy retrieval +//--------------------------------------------------------- + +typedef std::map >::iterator iCtrl; +typedef std::map >::const_iterator ciCtrl; + +class CtrlList : public std::map > { + public: + enum Mode { INTERPOLATE, DISCRETE}; + + private: + Mode _mode; + int _id; + double _default; + double _curVal; + void del(CtrlVal); + QString _name; + double _min, _max; + CtrlValueType _valueType; + + public: + CtrlList(); + CtrlList(int id); + CtrlList(int id, QString name, double min, double max); + + Mode mode() const { return _mode; } + void setMode(Mode m) { _mode = m; } + double getDefault() const { return _default; } + void setDefault(double val) { _default = val; } + double curVal() const { return _curVal; } + void setCurVal(double val); // { _curVal = val; } + int id() const { return _id; } + QString name() const { return _name; } + void setName(const QString& s) { _name = s; } + void setRange(double min, double max) { + _min = min; + _max = max; + } + void range(double* min, double* max) const { + *min = _min; + *max = _max; + } + CtrlValueType valueType() const { return _valueType; } + void setValueType(CtrlValueType t) { _valueType = t; } + + double value(int frame); + void add(int tick, double value); + void del(int tick); + void read(Xml& xml); + }; + +//--------------------------------------------------------- +// CtrlListList +// List of controller value lists. +// This list represents the controller state of a +// mixer strip +//--------------------------------------------------------- + +typedef std::map >::iterator iCtrlList; +typedef std::map >::const_iterator ciCtrlList; + +class CtrlListList : public std::map > { + public: + void add(CtrlList* vl); + iCtrlList find(int id) { + return std::map >::find(id); + } + ciCtrlList find(int id) const { + return std::map >::find(id); + } + }; + +#endif + diff --git a/muse2/muse/ctrl/Makefile.am b/muse2/muse/ctrl/Makefile.am new file mode 100644 index 00000000..3aac8577 --- /dev/null +++ b/muse2/muse/ctrl/Makefile.am @@ -0,0 +1,17 @@ +include $(top_srcdir)/common.am + +if PCH +AM_CXXFLAGS += -include $(top_srcdir)/all.h +endif + +noinst_LIBRARIES = libctrl.a + +dist_libctrl_a_SOURCES = \ + ctrledit.cpp ctrledit.h \ + ctrlcanvas.cpp ctrlcanvas.h \ + ctrlpanel.cpp ctrlpanel.h + +nodist_libctrl_a_SOURCES = \ + moc_ctrledit.cpp \ + moc_ctrlcanvas.cpp \ + moc_ctrlpanel.cpp diff --git a/muse2/muse/ctrl/Makefile.in b/muse2/muse/ctrl/Makefile.in new file mode 100644 index 00000000..09912657 --- /dev/null +++ b/muse2/muse/ctrl/Makefile.in @@ -0,0 +1,604 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/common.am +@PCH_TRUE@am__append_1 = -include $(top_srcdir)/all.h +subdir = muse/ctrl +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal-include.m4 \ + $(top_srcdir)/m4/alsa.m4 $(top_srcdir)/m4/docbook.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +LIBRARIES = $(noinst_LIBRARIES) +ARFLAGS = cru +libctrl_a_AR = $(AR) $(ARFLAGS) +libctrl_a_LIBADD = +dist_libctrl_a_OBJECTS = ctrledit.$(OBJEXT) ctrlcanvas.$(OBJEXT) \ + ctrlpanel.$(OBJEXT) +nodist_libctrl_a_OBJECTS = moc_ctrledit.$(OBJEXT) \ + moc_ctrlcanvas.$(OBJEXT) moc_ctrlpanel.$(OBJEXT) +libctrl_a_OBJECTS = $(dist_libctrl_a_OBJECTS) \ + $(nodist_libctrl_a_OBJECTS) +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +CXXLD = $(CXX) +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(dist_libctrl_a_SOURCES) $(nodist_libctrl_a_SOURCES) +DIST_SOURCES = $(dist_libctrl_a_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DOCBOOKSTYLE = @DOCBOOKSTYLE@ +DOCBOOKTARGETS = @DOCBOOKTARGETS@ +DOT = @DOT@ +DOTPATH = @DOTPATH@ +DOXYGEN = @DOXYGEN@ +DOXYGEN_TREEVIEW = @DOXYGEN_TREEVIEW@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FLUIDSYNTHDIRS = @FLUIDSYNTHDIRS@ +FST_CFLAGS = @FST_CFLAGS@ +FST_LIBS = @FST_LIBS@ +Fluidsynth_CFLAGS = @Fluidsynth_CFLAGS@ +Fluidsynth_LIBS = @Fluidsynth_LIBS@ +GIVERTCAP = @GIVERTCAP@ +GREP = @GREP@ +HAVEDOT = @HAVEDOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_LIBS = @JACK_LIBS@ +JADE = @JADE@ +LASH_CFLAGS = @LASH_CFLAGS@ +LASH_LIBS = @LASH_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LO_CFLAGS = @LO_CFLAGS@ +LO_LIBS = @LO_LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MUSECXXFLAGS = @MUSECXXFLAGS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NSGMLS = @NSGMLS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PCH = @PCH@ +PERL = @PERL@ +PKG_CONFIG = @PKG_CONFIG@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIB = @PYTHON_LIB@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QTDIR_BIN = @QTDIR_BIN@ +QTDIR_INC = @QTDIR_INC@ +QT_LIBS = @QT_LIBS@ +RANLIB = @RANLIB@ +SAMPLERATE_CFLAGS = @SAMPLERATE_CFLAGS@ +SAMPLERATE_LIBS = @SAMPLERATE_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ +SNDFILE_LIBS = @SNDFILE_LIBS@ +STRIP = @STRIP@ +SUIDBUILD = @SUIDBUILD@ +SUIDINSTALL = @SUIDINSTALL@ +USE_SSE = @USE_SSE@ +UUID_CFLAGS = @UUID_CFLAGS@ +UUID_LIBS = @UUID_LIBS@ +VERSION = @VERSION@ +XMKMF = @XMKMF@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +have_docbook = @have_docbook@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +synth_fluid = @synth_fluid@ +synth_fluidsynth = @synth_fluidsynth@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AM_CXXFLAGS = $(MUSECXXFLAGS) -I.. -I$(top_srcdir)/synti \ + -I$(top_srcdir)/muse/widgets -DQT_SHARED -DQT_THREAD_SUPPORT \ + -DQT_PLUGIN $(QTDIR_INC) -DQT3_SUPPORT $(am__append_1) +AM_CPPFLAGS = +MOC = $(QTDIR_BIN)/moc +#UIC = $(QTDIR_BIN)/uic3 +UIC = /usr/bin/uic3 +UIFILES = $(wildcard *.ui) +MOCFILES = $(shell for h in $(filter %.h,$(SOURCES)); do \ + if grep -q Q_OBJECT $$h; then \ + echo $$h | sed "s/\(.*\)\.h/moc_\1.cpp/"; \ + fi; \ + done) + +BUILT_SOURCES = $(MOCFILES) $(UIFILES:%.ui=%.h) +MOSTLYCLEANFILES = $(MOCFILES) $(UIFILES:%.ui=%.h) +SUFFIXES = .ui .h.gch +noinst_LIBRARIES = libctrl.a +dist_libctrl_a_SOURCES = \ + ctrledit.cpp ctrledit.h \ + ctrlcanvas.cpp ctrlcanvas.h \ + ctrlpanel.cpp ctrlpanel.h + +nodist_libctrl_a_SOURCES = \ + moc_ctrledit.cpp \ + moc_ctrlcanvas.cpp \ + moc_ctrlpanel.cpp + +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: .ui .h.gch .cpp .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/common.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu muse/ctrl/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu muse/ctrl/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-noinstLIBRARIES: + -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) +libctrl.a: $(libctrl_a_OBJECTS) $(libctrl_a_DEPENDENCIES) + -rm -f libctrl.a + $(libctrl_a_AR) libctrl.a $(libctrl_a_OBJECTS) $(libctrl_a_LIBADD) + $(RANLIB) libctrl.a + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ctrlcanvas.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ctrledit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ctrlpanel.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/moc_ctrlcanvas.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/moc_ctrledit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/moc_ctrlpanel.Po@am__quote@ + +.cpp.o: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< + +.cpp.obj: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.cpp.lo: +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-am +all-am: Makefile $(LIBRARIES) +installdirs: +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +clean: clean-am + +clean-am: clean-generic clean-libtool clean-noinstLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: all check install install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-noinstLIBRARIES ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags uninstall uninstall-am + + +de: + @for base in $(MOCFILES); do echo -e "\t$${base}.cpp $${base}.h \\"; done + +nde: + @for base in $(MOCFILES); do echo -e "\tmoc_$${base}.cpp \\"; done + +.ui.o: %.h + $(UIC) -L $(top_srcdir)/muse/widgets -o $*.cpp -impl $*.h $*.ui + $(MOC) $*.h >> $*.cpp + $(CXXCOMPILE) -c $*.cpp -o $*.o + $(RM) $*.cpp moc_$*.cpp moc_$*.o + +.ui.lo: %.h + $(UIC) -L $(top_srcdir)/muse/widgets -o $*.cpp -impl $*.h $*.ui + $(MOC) $*.h >> $*.cpp + $(LTCXXCOMPILE) -c $*.cpp -o $*.lo + $(RM) $*.cpp moc_$*.cpp moc_$*.lo moc_$*.o + +moc_%.cpp: %.h + $(MOC) $< -o $@ + +%.h: %.ui + $(UIC) -o $@ $< +# $(UIC) -L $(top_srcdir)/muse/widgets -o $@ $< + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/muse2/muse/ctrl/ctrlcanvas.cpp b/muse2/muse/ctrl/ctrlcanvas.cpp new file mode 100644 index 00000000..6a7e0720 --- /dev/null +++ b/muse2/muse/ctrl/ctrlcanvas.cpp @@ -0,0 +1,1533 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: ctrlcanvas.cpp,v 1.15.2.10 2009/11/14 03:37:48 terminator356 Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include + +#include +#include +#include +#include +#include +#include +//Added by qt3to4: +#include +#include + +#include "globals.h" +#include "ctrledit.h" +#include "midieditor.h" +#include "icons.h" +#include "midiport.h" +#include "song.h" +#include "midictrl.h" +#include "audio.h" +#include "gconfig.h" +#include "ctrlpanel.h" +#include "midiedit/drummap.h" + +extern void drawTickRaster(QPainter& p, int x, int y, + int w, int h, int quant); + +static MidiCtrlValList veloList(CTRL_VELOCITY); // dummy + +//--------------------------------------------------------- +// computeVal +//--------------------------------------------------------- + +static int computeVal(MidiController* mc, int y, int height) + { + int min; int max; + if(mc->num() == CTRL_PROGRAM) + { + min = 1; + max = 128; + } + else + { + min = mc->minVal(); + max = mc->maxVal(); + } + int val = max - (y * (max-min) / height); + if (val < min) + val = min; + if (val > max) + val = max; + if(mc->num() != CTRL_PROGRAM) + val += mc->bias(); + return val; + } + +//--------------------------------------------------------- +// CEvent +//--------------------------------------------------------- + +CEvent::CEvent(Event e, MidiPart* pt, int v) + { + _event = e; + _part = pt; + _val = v; + ex = !e.empty() ? e.tick() : 0; + } + +//--------------------------------------------------------- +// contains +//--------------------------------------------------------- + +bool CEvent::contains(int x1, int x2) const + { + int tick1 = !_event.empty() ? _event.tick() + _part->tick() : 0; + if(ex == -1) + return (tick1 < x2); + + int tick2 = ex + _part->tick(); + return ((tick1 >= x1 && tick1 < x2) + //|| (tick2 >= x1 && tick2 < x2) + || (tick2 > x1 && tick2 < x2) + || (tick1 < x1 && tick2 >= x2)); + } + +//--------------------------------------------------------- +// clearDelete +//--------------------------------------------------------- + +void CEventList::clearDelete() +{ + for(ciCEvent i = begin(); i != end(); ++i) + { + CEvent* ce = *i; + if(ce) + delete ce; + } + clear(); +} + +//--------------------------------------------------------- +// CtrlCanvas +//--------------------------------------------------------- + +CtrlCanvas::CtrlCanvas(MidiEditor* e, QWidget* parent, int xmag, + const char* name, CtrlPanel* pnl) : View(parent, xmag, 1, name) + { + setBg(Qt::white); + editor = e; + drag = DRAG_OFF; + tool = PointerTool; + pos[0] = 0; + pos[1] = 0; + pos[2] = 0; + noEvents=false; + + ctrl = &veloList; + _controller = &veloCtrl; + _panel = pnl; + _cnum = CTRL_VELOCITY; + _dnum = CTRL_VELOCITY; + _didx = CTRL_VELOCITY; + connect(song, SIGNAL(posChanged(int, unsigned, bool)), this, SLOT(setPos(int, unsigned, bool))); + + setMouseTracking(true); + if (editor->parts()->empty()) { + curPart = 0; + curTrack = 0; + } + else { + setCurTrackAndPart(); + } + connect(song, SIGNAL(songChanged(int)), SLOT(songChanged(int))); + + curDrumInstrument = editor->curDrumInstrument(); + //printf("CtrlCanvas::CtrlCanvas curDrumInstrument:%d\n", curDrumInstrument); + + connect(editor, SIGNAL(curDrumInstrumentChanged(int)), SLOT(setCurDrumInstrument(int))); + updateItems(); + } + +//--------------------------------------------------------- +// setPos +// set one of three markers +// idx - 0-cpos 1-lpos 2-rpos +// flag - emit followEvent() +//--------------------------------------------------------- + +void CtrlCanvas::setPos(int idx, unsigned val, bool adjustScrollbar) + { + if (pos[idx] == val) + return; + + int opos = mapx(pos[idx]); + int npos = mapx(val); + + if (adjustScrollbar && idx == 0) { + switch (song->follow()) { + case Song::NO: + break; + case Song::JUMP: + if (npos >= width()) { + int ppos = val - rmapxDev(width()/4); + if (ppos < 0) + ppos = 0; + emit followEvent(ppos); + opos = mapx(pos[idx]); + npos = mapx(val); + } + else if (npos < 0) { + int ppos = val - rmapxDev(width()*3/4); + if (ppos < 0) + ppos = 0; + emit followEvent(ppos); + opos = mapx(pos[idx]); + npos = mapx(val); + } + break; + case Song::CONTINUOUS: + if (npos > (width()*5)/8) { + int ppos = pos[idx] - rmapxDev(width()*5/8); + if (ppos < 0) + ppos = 0; + emit followEvent(ppos); + opos = mapx(pos[idx]); + npos = mapx(val); + } + else if (npos < (width()*3)/8) { + int ppos = pos[idx] - rmapxDev(width()*3/8); + if (ppos < 0) + ppos = 0; + emit followEvent(ppos); + opos = mapx(pos[idx]); + npos = mapx(val); + } + break; + } + } + + int x; + int w = 1; + if (opos > npos) { + w += opos - npos; + x = npos; + } + else { + w += npos - opos; + x = opos; + } + pos[idx] = val; + redraw(QRect(x, 0, w, height())); + } + +//--------------------------------------------------------- +// setMidiController +//--------------------------------------------------------- + +void CtrlCanvas::setMidiController(int num) + { + _cnum = num; + partControllers(curPart, _cnum, &_dnum, &_didx, &_controller, &ctrl); + if(_panel) + { + if(_cnum == CTRL_VELOCITY) + _panel->setHWController(curTrack, &veloCtrl); + else + _panel->setHWController(curTrack, _controller); + } + } + +//--------------------------------------------------------- +// leaveEvent +//--------------------------------------------------------- + +void CtrlCanvas::leaveEvent(QEvent*) + { + emit xposChanged(MAXINT); + emit yposChanged(-1); + } + +//--------------------------------------------------------- +// raster +//--------------------------------------------------------- + +QPoint CtrlCanvas::raster(const QPoint& p) const + { + return p; + } + +//--------------------------------------------------------- +// deselectAll +//--------------------------------------------------------- + +void CtrlCanvas::deselectAll() + { +// for (iCEvent i = selection.begin(); i != selection.end(); ++i) +// (*i)->setState(CEvent::Normal); +// selection.clear(); +// update(); + } + +//--------------------------------------------------------- +// selectItem +//--------------------------------------------------------- + +void CtrlCanvas::selectItem(CEvent*) + { +// e->setState(CEvent::Selected); +// selection.push_back(e); +// update(); + } + +//--------------------------------------------------------- +// deselectItem +//--------------------------------------------------------- + +void CtrlCanvas::deselectItem(CEvent*) + { +/* e->setState(CEvent::Normal); + for (iCEvent i = selection.begin(); i != selection.end(); ++i) { + if (*i == e) { + selection.erase(i); + break; + } + } + update(); + */ + } + +//--------------------------------------------------------- +// setController +//--------------------------------------------------------- + +void CtrlCanvas::setController(int num) +{ + setMidiController(num); + updateItems(); +} + + +//--------------------------------------------------------- +// setCurTrackAndPart +//--------------------------------------------------------- + +bool CtrlCanvas::setCurTrackAndPart() +{ + bool changed = false; + MidiPart* part = 0; + MidiTrack* track = 0; + + if(!editor->parts()->empty()) + { + Part* pt = editor->curCanvasPart(); + if(pt && pt->track()) + { + if(pt->track()->isMidiTrack()) + { + part = (MidiPart*)pt; + track = part->track(); + } + } + } + + if(part != curPart) + { + curPart = part; + changed = true; + } + + if(track != curTrack) + { + curTrack = track; + changed = true; + } + + return changed; +} + +//--------------------------------------------------------- +// songChanged +// all marked parts are added to the internal event list +//--------------------------------------------------------- + +void CtrlCanvas::songChanged(int type) +{ + // Is it simply a midi controller value adjustment? Forget it. + if(type == SC_MIDI_CONTROLLER) + return; + + bool changed = false; + if(type & (SC_CONFIG | SC_PART_MODIFIED | SC_SELECTION)) + changed = setCurTrackAndPart(); + + // Although changing the instrument/device in the + // config window generates a type of -1, we can eliminate + // some other useless calls using SC_CONFIG, which was not used + // anywhere else in muse before now, except song header. + if((type & (SC_CONFIG | SC_DRUMMAP)) || ((type & (SC_PART_MODIFIED | SC_SELECTION)) && changed)) + { + setMidiController(_cnum); + //return; + } + + updateItems(); + +} + +//--------------------------------------------------------- +// partControllers +//--------------------------------------------------------- + +void CtrlCanvas::partControllers(const MidiPart* part, int num, int* dnum, int* didx, MidiController** mc, MidiCtrlValList** mcvl) +{ + if(num == CTRL_VELOCITY) // special case + { + if(mcvl) + *mcvl = &veloList; + if(mc) + *mc = &veloCtrl; + if(dnum) + *dnum = num; + if(didx) + *didx = num; + } + else + { + MidiTrack* mt = part->track(); + MidiPort* mp; + int di; + int n; + + if((mt->type() != Track::DRUM) && curDrumInstrument != -1) + printf("keyfilter != -1 in non drum track?\n"); + + if((mt->type() == Track::DRUM) && (curDrumInstrument != -1) && ((num & 0xff) == 0xff)) + { + di = (num & ~0xff) | curDrumInstrument; + n = (num & ~0xff) | drumMap[curDrumInstrument].anote; // construct real controller number + //num = (num & ~0xff) | curDrumInstrument); // construct real controller number + mp = &midiPorts[drumMap[curDrumInstrument].port]; + } + else + { + di = num; + n = num; + mp = &midiPorts[mt->outPort()]; + } + + if(dnum) + *dnum = n; + + if(didx) + *didx = di; + + if(mc) + *mc = mp->midiController(n); + + if(mcvl) + { + MidiCtrlValList* tmcvl = 0; + MidiCtrlValListList* cvll = mp->controller(); + for(iMidiCtrlValList i = cvll->begin(); i != cvll->end(); ++i) + { + if(i->second->num() == n) + { + tmcvl = i->second; + break; + } + } + *mcvl = tmcvl; + + // Removed by T356. + // MidiCtrlValList not found is now an acceptable state (for multiple part editing). + //if (i == cvll->end()) { + // printf("CtrlCanvas::setController(0x%x): not found\n", num); + // for (i = cvll->begin(); i != cvll->end(); ++i) + // printf(" 0x%x\n", i->second->num()); + // return; + // } + } + } +} + +//--------------------------------------------------------- +// updateItems +//--------------------------------------------------------- + +void CtrlCanvas::updateItems() + { + items.clearDelete(); + + /* + if(ctrl) + { + for(ciMidiCtrlVal imcv = ctrl->begin(); imcv != ctrl->end(); ++imcv) + { + MidiPart* part = (MidiPart*)imcv->part; + int val = imcv->val; + + bool edpart = false; + if(editor->parts()->index(part) != -1) + edpart = true; + + MidiController* mc; + MidiCtrlValList* mcvl; + partControllers(part, _cnum, 0, 0, &mc, &mcvl); + + Event e(Controller); + + if(_cnum == CTRL_VELOCITY && e.type() == Note) + { + items.add(new CEvent(e, part, e.velo())); + + } + + } + } + */ + + /* + MidiTrackList* mtl = song->midis(); + for(ciMidiTrack imt = mtl->begin(); imt != mtl->end(); ++imt) + { + //MidiTrack* mt = *imt; + PartList* pl = (*imt)->parts(); + for(ciPart p = pl->begin(); p != pl->end(); ++p) + { + MidiPart* part = (MidiPart*)(p->second); + + bool edpart = false; + if(editor->parts()->index(part) != -1) + edpart = true; + + EventList* el = part->events(); + MidiController* mc; + MidiCtrlValList* mcvl; + partControllers(part, _cnum, 0, 0, &mc, &mcvl); + + for(iEvent i = el->begin(); i != el->end(); ++i) + { + Event e = i->second; + if(_cnum == CTRL_VELOCITY && e.type() == Note) + { + if(curDrumInstrument == -1) + { + items.add(new CEvent(e, part, e.velo())); + } + else if (e.dataA() == curDrumInstrument) //same note + items.add(new CEvent(e, part, e.velo())); + } + else if (e.type() == Controller && e.dataA() == _didx) + { + if(mcvl && last.empty()) + { + Event le(Controller); + //le.setType(Controller); + le.setA(_didx); + //le.setB(e.dataB()); + le.setB(CTRL_VAL_UNKNOWN); + //lastce = new CEvent(Event(), part, mcvl->value(part->tick(), part)); + //lastce = new CEvent(le, part, mcvl->value(part->tick(), part)); + lastce = new CEvent(le, part, mcvl->value(part->tick())); + items.add(lastce); + } + if (lastce) + lastce->setEX(e.tick()); + lastce = new CEvent(e, part, e.dataB()); + items.add(lastce); + last = e; + } + } + } + } + */ + + + + + + if(!editor->parts()->empty()) + { + //Event last; + //CEvent* lastce = 0; + + for (iPart p = editor->parts()->begin(); p != editor->parts()->end(); ++p) + { + Event last; + CEvent* lastce = 0; + + MidiPart* part = (MidiPart*)(p->second); + EventList* el = part->events(); + MidiController* mc; + MidiCtrlValList* mcvl; + partControllers(part, _cnum, 0, 0, &mc, &mcvl); + unsigned len = part->lenTick(); + + for (iEvent i = el->begin(); i != el->end(); ++i) + { + Event e = i->second; + // Added by T356. Do not add events which are past the end of the part. + if(e.tick() >= len) + break; + + if(_cnum == CTRL_VELOCITY && e.type() == Note) + { + //printf("CtrlCanvas::updateItems CTRL_VELOCITY curDrumInstrument:%d\n", curDrumInstrument); + if(curDrumInstrument == -1) + { + // This is interesting - it would allow ALL drum note velocities to be shown. + // But currently the drum list ALWAYS has a selected item so this is not supposed to happen. + items.add(new CEvent(e, part, e.velo())); + } + else if (e.dataA() == curDrumInstrument) //same note + items.add(new CEvent(e, part, e.velo())); + } + else if (e.type() == Controller && e.dataA() == _didx) + { + if(mcvl && last.empty()) + { + lastce = new CEvent(Event(), part, mcvl->value(part->tick())); + items.add(lastce); + } + if (lastce) + lastce->setEX(e.tick()); + lastce = new CEvent(e, part, e.dataB()); + lastce->setEX(-1); + items.add(lastce); + last = e; + } + } + } + } + + + redraw(); + } + +//--------------------------------------------------------- +// viewMousePressEvent +//--------------------------------------------------------- + +void CtrlCanvas::viewMousePressEvent(QMouseEvent* event) + { + start = event->pos(); + Tool activeTool = tool; + bool shift = event->state() & Qt::ShiftButton; + + int xpos = start.x(); + int ypos = start.y(); + + MidiController::ControllerType type = midiControllerType(_controller->num()); + + switch (activeTool) { + case PointerTool: + drag = DRAG_LASSO_START; + break; + + case PencilTool: + if (shift) { + if (type != MidiController::Velo) { + drag = DRAG_NEW; + song->startUndo(); + newVal(xpos, xpos, ypos); + } + } + else { + drag = DRAG_RESIZE; + song->startUndo(); + changeVal(xpos, xpos, ypos); + } + break; + + case RubberTool: + if (type != MidiController::Velo) { + drag = DRAG_DELETE; + song->startUndo(); + deleteVal(xpos, xpos, ypos); + } + break; + + case DrawTool: + if (drawLineMode) { + line2x = xpos; + line2y = ypos; + if (shift) + newValRamp(line1x, line1y, line2x, line2y); + else + changeValRamp(line1x, line1y, line2x, line2y); + drawLineMode = false; + } + else { + line2x = line1x = xpos; + line2y = line1y = ypos; + drawLineMode = true; + } + redraw(); + break; + + default: + break; + } + } + +//--------------------------------------------------------- +// newValRamp +//--------------------------------------------------------- + +void CtrlCanvas::newValRamp(int x1, int y1, int x2, int y2) + { + int xx1 = editor->rasterVal1(x1); + int xx2 = editor->rasterVal2(x2); + int type = _controller->num(); + + int raster = editor->raster(); + if (raster == 1) // set reasonable raster + raster = config.division/4; + + song->startUndo(); + + // delete existing events + + int lastpv = CTRL_VAL_UNKNOWN; + for (ciCEvent i = items.begin(); i != items.end(); ++i) { + CEvent* ev = *i; + if(ev->part() != curPart) + continue; + Event event = ev->event(); + if (event.empty()) + continue; + int x = event.tick() + curPart->tick(); + // Added by Tim. p3.3.6 + //printf("CtrlCanvas::newValRamp x:%d xx1:%d xx2:%d len:%d\n", x, xx1, xx2, curPart->lenTick()); + + if (x < xx1) + { + // if(event.dataB() != CTRL_VAL_UNKNOWN) + // lastpv = event.dataB(); + continue; + } + //if (x <= xx1) + //{ + // if(type == CTRL_PROGRAM && event.dataB() != CTRL_VAL_UNKNOWN && ((event.dataB() & 0xffffff) != 0xffffff)) + // lastpv = event.dataB(); + // if (x < xx1) + // continue; + //} + if (x >= xx2) + break; + + // Indicate no undo, and do port controller values and clone parts. + //audio->msgDeleteEvent(event, ev->part(), false); + audio->msgDeleteEvent(event, curPart, false, true, true); + } + + //if(type == CTRL_PROGRAM && lastpv == CTRL_VAL_UNKNOWN) + if(ctrl) + lastpv = ctrl->hwVal(); + + // insert new events + for (int x = xx1; x < xx2; x += raster) { + int y = (x2==x1) ? y1 : (((y2-y1)*(x-x1))/(x2-x1))+y1; + int nval = computeVal(_controller, y, height()); + int tick = x - curPart->tick(); + // Do not add events which are past the end of the part. + if((unsigned)tick >= curPart->lenTick()) + break; + Event event(Controller); + event.setTick(tick); + event.setA(_didx); + if(type == CTRL_PROGRAM) + { + if(lastpv == CTRL_VAL_UNKNOWN) + { + if(song->mtype() == MT_GM) + event.setB(0xffff00 | (nval - 1)); + else + event.setB(nval - 1); + } + else + event.setB((lastpv & 0xffff00) | (nval - 1)); + } + else + event.setB(nval); + + // Indicate no undo, and do port controller values and clone parts. + //audio->msgAddEvent(event, curPart, false); + audio->msgAddEvent(event, curPart, false, true, true); + } + + song->update(0); + redraw(); + song->endUndo(SC_EVENT_MODIFIED | SC_EVENT_INSERTED | SC_EVENT_REMOVED); + } + +//--------------------------------------------------------- +// changeValRamp +//--------------------------------------------------------- + +void CtrlCanvas::changeValRamp(int x1, int y1, int x2, int y2) + { + int h = height(); + bool changed = false; + int type = _controller->num(); + //int xx1 = editor->rasterVal1(x1); + + song->startUndo(); + for (ciCEvent i = items.begin(); i != items.end(); ++i) { + if ((*i)->contains(x1, x2)) { + //if ((*i)->contains(xx1, x2)) { + CEvent* ev = *i; + if(ev->part() != curPart) + continue; + Event event = ev->event(); + if (event.empty()) + continue; + + //MidiPart* part = ev->part(); + //int x = event.tick() + ev->part()->tick(); + int x = event.tick() + curPart->tick(); + int y = (x2==x1) ? y1 : (((y2-y1)*(x-x1))/(x2-x1))+y1; + int nval = computeVal(_controller, y, h); + if(type == CTRL_PROGRAM) + { + if(event.dataB() == CTRL_VAL_UNKNOWN) + { + --nval; + if(song->mtype() == MT_GM) + nval |= 0xffff00; + } + else + nval = (event.dataB() & 0xffff00) | (nval - 1); + } + + ev->setVal(nval); + + //MidiController::ControllerType type = midiControllerType(_controller->num()); + //if (type == MidiController::Velo) { + if (type == CTRL_VELOCITY) { + if ((event.velo() != nval)) { + Event newEvent = event.clone(); + newEvent.setVelo(nval); + // Indicate no undo, and do not do port controller values and clone parts. + //audio->msgChangeEvent(event, newEvent, part, false); + audio->msgChangeEvent(event, newEvent, curPart, false, false, false); + ev->setEvent(newEvent); + changed = true; + } + } + else { + if (!event.empty()) { + if ((event.dataB() != nval)) { + Event newEvent = event.clone(); + newEvent.setB(nval); + // Indicate no undo, and do port controller values and clone parts. + //audio->msgChangeEvent(event, newEvent, part, false); + audio->msgChangeEvent(event, newEvent, curPart, false, true, true); + ev->setEvent(newEvent); + changed = true; + } + } + else { + //if(!ctrl) + //{ + // ctrl = + //} + + // Removed by T356. Never gets here? A good thing, don't wan't auto-create values. + //int oval = ctrl->value(0); + //if (oval != nval) { + // Changed by T356. + //ctrl->add(0, nval); + // ctrl->add(0, nval, part); + // changed = true; + // } + + } + } + } + } + if (changed) + redraw(); + song->endUndo(SC_EVENT_MODIFIED); + } + +//--------------------------------------------------------- +// viewMouseMoveEvent +//--------------------------------------------------------- + +void CtrlCanvas::viewMouseMoveEvent(QMouseEvent* event) + { + QPoint pos = event->pos(); + QPoint dist = pos - start; + bool moving = dist.y() >= 3 || dist.y() <= 3 || dist.x() >= 3 || dist.x() <= 3; + switch (drag) { + case DRAG_LASSO_START: + if (!moving) + break; + drag = DRAG_LASSO; + // weiter mit DRAG_LASSO: + case DRAG_LASSO: + lasso.setRect(start.x(), start.y(), dist.x(), dist.y()); + redraw(); + break; + case DRAG_RESIZE: + changeVal(start.x(), pos.x(), pos.y()); + start = pos; + break; + + case DRAG_NEW: + newVal(start.x(), pos.x(), pos.y()); + start = pos; + break; + + case DRAG_DELETE: + deleteVal(start.x(), pos.x(), pos.y()); + start = pos; + break; + + default: + break; + } + if (tool == DrawTool && drawLineMode) { + line2x = pos.x(); + line2y = pos.y(); + redraw(); + } + emit xposChanged(pos.x()); + + + int val = computeVal(_controller, pos.y(), height()); + emit yposChanged(val); + } + +//--------------------------------------------------------- +// viewMouseReleaseEvent +//--------------------------------------------------------- + +void CtrlCanvas::viewMouseReleaseEvent(QMouseEvent* event) + { + bool shift = event->state() & Qt::ShiftButton; + + switch (drag) { + case DRAG_RESIZE: + case DRAG_NEW: + case DRAG_DELETE: + song->endUndo(SC_EVENT_MODIFIED | SC_EVENT_INSERTED); + break; + + case DRAG_LASSO_START: + lasso.setRect(-1, -1, -1, -1); + + case DRAG_LASSO: + if (!shift) + deselectAll(); + lasso = lasso.normalize(); + for (iCEvent i = items.begin(); i != items.end(); ++i) { +#if 0 + if ((*i)->intersects(lasso)) { + if (shift && (*i)->isSelected()) + deselectItem(*i); + else + selectItem(*i); + } +#endif + } + drag = DRAG_OFF; + redraw(); + break; + + default: + break; + } + drag = DRAG_OFF; + } + +//--------------------------------------------------------- +// changeVal +//--------------------------------------------------------- + +void CtrlCanvas::changeVal(int x1, int x2, int y) + { + bool changed = false; + int newval = computeVal(_controller, y, height()); + int type = _controller->num(); + //int xx1 = editor->rasterVal1(x1); + + for (ciCEvent i = items.begin(); i != items.end(); ++i) { + if (!(*i)->contains(x1, x2)) + //if (!(*i)->contains(xx1, x2)) + continue; + CEvent* ev = *i; + if(ev->part() != curPart) + continue; + Event event = ev->event(); + //if(event.tick() >= curPart->lenTick()) + // break; + + //MidiPart* part = ev->part(); + //int nval = newval; + //if(type == CTRL_PROGRAM) + //{ + // if(event.dataB() == CTRL_VAL_UNKNOWN) + // { + // --nval; + // if(song->mtype() == MT_GM) + // nval |= 0xffff00; + // } + // else + // nval = (event.dataB() & 0xffff00) | (nval - 1); + //} + //ev->setVal(nval); + + //MidiController::ControllerType type = midiControllerType(_controller->num()); + //if (type == MidiController::Velo) { + if (type == CTRL_VELOCITY) { + if ((event.velo() != newval)) { + ev->setVal(newval); + Event newEvent = event.clone(); + newEvent.setVelo(newval); + // Indicate no undo, and do not do port controller values and clone parts. + //audio->msgChangeEvent(event, newEvent, part, false); + audio->msgChangeEvent(event, newEvent, curPart, false, false, false); + ev->setEvent(newEvent); + changed = true; + } + } + else { + if (!event.empty()) { + int nval = newval; + if(type == CTRL_PROGRAM) + { + if(event.dataB() == CTRL_VAL_UNKNOWN) + { + --nval; + if(song->mtype() == MT_GM) + nval |= 0xffff00; + } + else + nval = (event.dataB() & 0xffff00) | (nval - 1); + } + ev->setVal(nval); + + if ((event.dataB() != nval)) { + Event newEvent = event.clone(); + newEvent.setB(nval); + // Indicate no undo, and do port controller values and clone parts. + //audio->msgChangeEvent(event, newEvent, part, false); + audio->msgChangeEvent(event, newEvent, curPart, false, true, true); + ev->setEvent(newEvent); + changed = true; + } + } + else { + //if(!ctrl) + //{ + // ctrl = + //} + + // Removed by T356. Never gets here? A good thing, don't wan't auto-create values. + //int oval = ctrl->value(0); + //if (oval != nval) { + // Changed by T356. + //ctrl->add(0, nval); + // ctrl->add(0, nval, part); + // changed = true; + // } + } + } + } + if (changed) + redraw(); + } + +//--------------------------------------------------------- +// newVal +//--------------------------------------------------------- + +void CtrlCanvas::newVal(int x1, int x2, int y) + { + int xx1 = editor->rasterVal1(x1); + int xx2 = editor->rasterVal2(x2); + int newval = computeVal(_controller, y, height()); + int type = _controller->num(); + + bool found = false; + bool song_changed = false; + + int lastpv = CTRL_VAL_UNKNOWN; + if(ctrl) + lastpv = ctrl->hwVal(); + + for (ciCEvent i = items.begin(); i != items.end(); ++i) { + CEvent* ev = *i; + if(ev->part() != curPart) + continue; + //int partTick = ev->part()->tick(); + int partTick = curPart->tick(); + Event event = ev->event(); + if (event.empty()) + continue; + int ax = event.tick() + partTick; + // Added by Tim. p3.3.6 + //printf("CtrlCanvas::newVal ax:%d xx1:%d xx2:%d len:%d\n", ax, xx1, xx2, curPart->lenTick()); + + if (ax < xx1) + continue; + //if(ax <= xx1) + //{ + // if(type == CTRL_PROGRAM && event.dataB() != CTRL_VAL_UNKNOWN && ((event.dataB() & 0xffffff) != 0xffffff)) + // lastpv = event.dataB(); + // if(ax < xx1) + // continue; + //} + if (ax >= xx2) + break; + + // Added by T356. Do not add events which are past the end of the part. + //if(event.tick() >= curPart->lenTick()) + // break; + + int nval = newval; + if(type == CTRL_PROGRAM) + { + if(event.dataB() == CTRL_VAL_UNKNOWN) + { + //if(lastpv == CTRL_VAL_UNKNOWN) + // lastpv = ctrl->hwVal(); + + if(lastpv == CTRL_VAL_UNKNOWN) + { + --nval; + if(song->mtype() == MT_GM) + nval |= 0xffff00; + } + else + nval = (lastpv & 0xffff00) | (nval - 1); + } + else + nval = (event.dataB() & 0xffff00) | (nval - 1); + } + + if (ax == xx1) { + // change event + found = true; + ev->setVal(nval); + if ((event.dataB() != nval)) { + Event newEvent = event.clone(); + newEvent.setB(nval); + // Added by Tim. p3.3.6 + //printf("CtrlCanvas::newVal change xx1:%d xx2:%d len:%d\n", xx1, xx2, curPart->lenTick()); + + // Indicate no undo, and do port controller values and clone parts. + //audio->msgChangeEvent(event, newEvent, ev->part(), false); + audio->msgChangeEvent(event, newEvent, curPart, false, true, true); + + ev->setEvent(newEvent); + song_changed = true; + } + } + else if (ax < xx2) { + // delete event + // Added by Tim. p3.3.6 + //printf("CtrlCanvas::newVal delete xx1:%d xx2:%d len:%d\n", xx1, xx2, curPart->lenTick()); + + // Indicate no undo, and do port controller values and clone parts. + //audio->msgDeleteEvent(event, ev->part(), false); + audio->msgDeleteEvent(event, curPart, false, true, true); + + song_changed = true; + } + } + if (!found) { + // new event + int tick = xx1 - curPart->tick(); + // Do not add events which are past the end of the part. + if((unsigned)tick < curPart->lenTick()) + { + Event event(Controller); + event.setTick(tick); + event.setA(_didx); + if(type == CTRL_PROGRAM) + { + if(lastpv == CTRL_VAL_UNKNOWN) + { + if(song->mtype() == MT_GM) + event.setB(0xffff00 | (newval - 1)); + else + event.setB(newval - 1); + } + else + event.setB((lastpv & 0xffff00) | (newval - 1)); + } + else + event.setB(newval); + + // Indicate no undo, and do port controller values and clone parts. + //audio->msgAddEvent(event, curPart, false); + audio->msgAddEvent(event, curPart, false, true, true); + + song_changed = true; + } + } + if (song_changed) { + songChanged(0); + return; + } + redraw(); + } + +//--------------------------------------------------------- +// deleteVal +//--------------------------------------------------------- + +void CtrlCanvas::deleteVal(int x1, int x2, int) + { + int xx1 = editor->rasterVal1(x1); + int xx2 = editor->rasterVal2(x2); + + int partTick = curPart->tick(); + xx1 -= partTick; + xx2 -= partTick; + + bool song_changed = false; + for (ciCEvent i = items.begin(); i != items.end(); ++i) { + CEvent* ev = *i; + if(ev->part() != curPart) + continue; + Event event = ev->event(); + if (event.empty()) + continue; + int x = event.tick(); + if (x < xx1) + continue; + if (x >= xx2) + break; + if (!event.empty()) { + // Indicate no undo, and do port controller values and clone parts. + //audio->msgDeleteEvent(event, ev->part(), false); + audio->msgDeleteEvent(event, curPart, false, true, true); + song_changed = true; + } + } + if (song_changed) { + songChanged(0); + return; + } + } + +//--------------------------------------------------------- +// setTool +//--------------------------------------------------------- + +void CtrlCanvas::setTool(int t) + { + if (tool == Tool(t)) + return; + tool = Tool(t); + switch(tool) { + case PencilTool: + setCursor(QCursor(*pencilIcon, 4, 15)); + break; + case DrawTool: + drawLineMode = false; + break; + default: + setCursor(QCursor(Qt::arrowCursor)); + break; + } + } + +//--------------------------------------------------------- +// pdrawItems +//--------------------------------------------------------- + +void CtrlCanvas::pdrawItems(QPainter& p, const QRect& rect, const MidiPart* part, bool velo, bool fg) +{ + int x = rect.x() - 1; // compensate for 3 pixel line width + int w = rect.width() + 2; + int wh = height(); + + if(velo) + { + for(iCEvent i = items.begin(); i != items.end(); ++i) + { + CEvent* e = *i; + // Draw selected part velocity events on top of unselected part events. + //if((fg && e->part() != part) || (!fg && e->part() == part)) + if(e->part() != part) + continue; + int tick = mapx(e->event().tick() + e->part()->tick()); + if (tick <= x) + continue; + if (tick > x+w) + break; + int y1 = wh - (e->val() * wh / 128); + // fg means 'draw selected parts'. + if(fg) + p.setPen(QPen(config.ctrlGraphFg, 3)); + else + p.setPen(QPen(Qt::darkGray, 3)); + p.drawLine(tick, wh, tick, y1); + } + } + else + { + MidiTrack* mt = part->track(); + MidiPort* mp; + + if((mt->type() == Track::DRUM) && (curDrumInstrument != -1) && ((_cnum & 0xff) == 0xff)) + mp = &midiPorts[drumMap[curDrumInstrument].port]; + else + mp = &midiPorts[mt->outPort()]; + + MidiController* mc = mp->midiController(_cnum); + + int min; + int max; + int bias; + if(_cnum == CTRL_PROGRAM) + { + min = 1; + max = 128; + bias = 0; + } + else + { + min = mc->minVal(); + max = mc->maxVal(); + bias = mc->bias(); + } + int x1 = rect.x(); + int lval = CTRL_VAL_UNKNOWN; + noEvents=false; + for (iCEvent i = items.begin(); i != items.end(); ++i) + { + CEvent* e = *i; + // Draw unselected part controller events (lines) on top of selected part events (bars). + //if((fg && (e->part() == part)) || (!fg && (e->part() != part))) + if(e->part() != part) + { + continue; + } + Event ev = e->event(); + int tick = mapx(!ev.empty() ? ev.tick() + e->part()->tick() : 0); + int val = e->val(); + int pval = val; + if(_cnum == CTRL_PROGRAM) + { + if((val & 0xff) == 0xff) + // What to do here? prog = 0xff should not be allowed, but may still be encountered. + pval = 1; + else + pval = (val & 0x7f) + 1; + } + if (tick <= x) { + if (val == CTRL_VAL_UNKNOWN) + lval = CTRL_VAL_UNKNOWN; + else + { + if(_cnum == CTRL_PROGRAM) + lval = wh - ((pval - min - bias) * wh / (max - min)); + else + lval = wh - ((val - min - bias) * wh / (max - min)); + } + continue; + } + if (tick > x+w) + break; + if (lval == CTRL_VAL_UNKNOWN) + { + // fg means 'draw unselected parts'. + if(!fg) + p.fillRect(x1, 0, tick - x1, wh, Qt::darkGray); + } + else + { + if(fg) + { + p.setPen(Qt::gray); + p.drawLine(x1, lval, tick, lval); + } + else + p.fillRect(x1, lval, tick - x1, wh - lval, config.ctrlGraphFg); + } + + + x1 = tick; + if (val == CTRL_VAL_UNKNOWN) + lval = CTRL_VAL_UNKNOWN; + else + { + if(_cnum == CTRL_PROGRAM) + lval = wh - ((pval - min - bias) * wh / (max - min)); + else + lval = wh - ((val - min - bias) * wh / (max - min)); + } + } + if (lval == CTRL_VAL_UNKNOWN) + { + if(!fg) { + p.fillRect(x1, 0, (x+w) - x1, wh, Qt::darkGray); + noEvents=true; + } + } + else + { + if(fg) + { + p.setPen(Qt::gray); + p.drawLine(x1, lval, x + w, lval); + } + else + p.fillRect(x1, lval, (x+w) - x1, wh - lval, config.ctrlGraphFg); + } + } +} + +//--------------------------------------------------------- +// pdraw +//--------------------------------------------------------- + +void CtrlCanvas::pdraw(QPainter& p, const QRect& rect) + { + + int x = rect.x() - 1; // compensate for 3 pixel line width + int y = rect.y(); + int w = rect.width() + 2; + int h = rect.height(); + + + //--------------------------------------------------- + // draw Canvas Items + //--------------------------------------------------- + + bool velo = (midiControllerType(_controller->num()) == MidiController::Velo); + if(!velo) + { + pdrawItems(p, rect, curPart, false, false); + } + for(iPart ip = editor->parts()->begin(); ip != editor->parts()->end(); ++ip) + { + MidiPart* part = (MidiPart*)(ip->second); + //if((velo && part == curPart) || (!velo && part != curPart)) + if(part == curPart) + continue; + pdrawItems(p, rect, part, velo, !velo); + } + if(velo) + { + pdrawItems(p, rect, curPart, true, true); + } + + p.save(); + View::pdraw(p, rect); + p.restore(); + + //--------------------------------------------------- + // draw marker + //--------------------------------------------------- + + int xp = mapx(pos[0]); + if (xp >= x && xp < x+w) { + p.setPen(Qt::red); + p.drawLine(xp, y, xp, y+h); + } + xp = mapx(pos[1]); + if (xp >= x && xp < x+w) { + p.setPen(Qt::blue); + p.drawLine(xp, y, xp, y+h); + } + xp = mapx(pos[2]); + if (xp >= x && xp < x+w) { + p.setPen(Qt::blue); + p.drawLine(xp, y, xp, y+h); + } + + //--------------------------------------------------- + // draw lasso + //--------------------------------------------------- + + if (drag == DRAG_LASSO) { + setPainter(p); + p.setPen(Qt::blue); + p.setBrush(Qt::NoBrush); + p.drawRect(lasso); + } + } + +//--------------------------------------------------------- +// drawOverlay +//--------------------------------------------------------- + +void CtrlCanvas::drawOverlay(QPainter& p) + { + QString s(_controller->name()); + p.setFont(config.fonts[3]); + p.setPen(Qt::black); + QFontMetrics fm(config.fonts[3]); + int y = fm.lineSpacing() + 2; + p.drawText(2, y, s); + if (noEvents) { + p.setFont(config.fonts[3]); + p.setPen(Qt::black); + p.drawText(width()/2-100,height()/2-10, "Use shift + pencil or line tool to draw new events"); + //p.drawText(2 , y * 2, "Use shift + pencil or line tool to draw new events"); + } + } + +//--------------------------------------------------------- +// overlayRect +// returns geometry of overlay rectangle +//--------------------------------------------------------- + +QRect CtrlCanvas::overlayRect() const + { + QFontMetrics fm(config.fonts[3]); + QRect r(fm.boundingRect(_controller ? _controller->name() : QString(""))); + r.moveBy(2, 2); // top/left margin + return r; + } + +//--------------------------------------------------------- +// draw +//--------------------------------------------------------- + +void CtrlCanvas::draw(QPainter& p, const QRect& rect) + { + drawTickRaster(p, rect.x(), rect.y(), + //rect.width(), rect.height(), editor->quant()); + rect.width(), rect.height(), editor->raster()); + + //--------------------------------------------------- + // draw line tool + //--------------------------------------------------- + + if (drawLineMode && (tool == DrawTool)) { + p.setPen(Qt::black); + p.drawLine(line1x, line1y, line2x, line2y); + } + } + +//--------------------------------------------------------- +// setCurDrumInstrument +//--------------------------------------------------------- + +void CtrlCanvas::setCurDrumInstrument(int di) + { + curDrumInstrument = di; + //printf("CtrlCanvas::setCurDrumInstrument curDrumInstrument:%d\n", curDrumInstrument); + + // + // check if current controller is only valid for + // a specific drum instrument + // + // Removed by T356. + //if(curTrack && (curTrack->type() == Track::DRUM) && ((_controller->num() & 0xff) == 0xff)) { + //if(curTrack && (curTrack->type() == Track::DRUM) && ((_cnum & 0xff) == 0xff)) { + // reset to default + // TODO: check, if new drum instrument has a similar controller + // configured + // _cnum = CTRL_VELOCITY; + // } + // Removed by T356 + //songChanged(-1); + } diff --git a/muse2/muse/ctrl/ctrlcanvas.h b/muse2/muse/ctrl/ctrlcanvas.h new file mode 100644 index 00000000..bb17fafb --- /dev/null +++ b/muse2/muse/ctrl/ctrlcanvas.h @@ -0,0 +1,165 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: ctrlcanvas.h,v 1.7.2.4 2009/06/01 20:15:53 spamatica Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __CTRLCANVAS_H__ +#define __CTRLCANVAS_H__ + +#include + + +#include "view.h" +#include "tools.h" +#include "midictrl.h" +#include "event.h" +//Added by qt3to4: +#include +#include + +class Event; +class MidiPart; +class PartList; +class MidiTrack; +class MidiEditor; +class QWidget; +class CtrlPanel; + +//--------------------------------------------------------- +// CEvent +// ''visual'' Controller Event +//--------------------------------------------------------- + +class CEvent { + Event _event; + int _val; + MidiPart* _part; + int ex; + + public: + CEvent(Event e, MidiPart* part, int v); + Event event() const { return _event; } + void setEvent(Event& ev) { _event = ev; } + int val() const { return _val; } + void setVal(int v) { _val = v; } + void setEX(int v) { ex = v; } + MidiPart* part() const { return _part; } + bool contains(int x1, int x2) const; + int x() { return ex; } + }; + +typedef std::list::iterator iCEvent; +typedef std::list::const_iterator ciCEvent; + +//--------------------------------------------------------- +// CEventList +// Controller Item List +//--------------------------------------------------------- + +class CEventList: public std::list { + public: + void add(CEvent* item) { push_back(item); } + + void clearDelete(); + }; + +//--------------------------------------------------------- +// CtrlCanvas +//--------------------------------------------------------- + +class CtrlCanvas : public View { + MidiEditor* editor; + MidiTrack* curTrack; + MidiPart* curPart; + MidiCtrlValList* ctrl; + MidiController* _controller; + CtrlPanel* _panel; + int _cnum; + // Current real drum controller number (anote). + int _dnum; + // Current real drum controller index. + int _didx; + int line1x; + int line1y; + int line2x; + int line2y; + bool drawLineMode; + bool noEvents; + + void viewMousePressEvent(QMouseEvent* event); + void viewMouseMoveEvent(QMouseEvent*); + void viewMouseReleaseEvent(QMouseEvent*); + + virtual void draw(QPainter&, const QRect&); + virtual void pdraw(QPainter&, const QRect&); + virtual void drawOverlay(QPainter& p); + virtual QRect overlayRect() const; + + void changeValRamp(int x1, int x2, int y1, int y2); + void newValRamp(int x1, int y1, int x2, int y2); + void changeVal(int x1, int x2, int y); + void newVal(int x1, int x2, int y); + void deleteVal(int x1, int x2, int y); + + bool setCurTrackAndPart(); + void pdrawItems(QPainter&, const QRect&, const MidiPart*, bool, bool); + void partControllers(const MidiPart*, int, int*, int*, MidiController**, MidiCtrlValList**); + + Q_OBJECT + + protected: + enum DragMode { DRAG_OFF, DRAG_NEW, DRAG_MOVE_START, DRAG_MOVE, + DRAG_DELETE, DRAG_COPY_START, DRAG_COPY, + DRAG_RESIZE, DRAG_LASSO_START, DRAG_LASSO + }; + + CEventList items; + CEventList selection; + CEventList moving; + CEvent* curItem; + + DragMode drag; + QRect lasso; + QPoint start; + Tool tool; + unsigned pos[3]; + int curDrumInstrument; //Used by the drum-editor to view velocity of only one key (one drum) + + void leaveEvent(QEvent*e); + QPoint raster(const QPoint&) const; + + // selection + bool isSingleSelection() { return selection.size() == 1; } + void deselectAll(); + void selectItem(CEvent* e); + void deselectItem(CEvent* e); + + void setMidiController(int); + void updateItems(); + + private slots: + void songChanged(int type); + void setCurDrumInstrument(int); + + public slots: + void setTool(int t); + void setPos(int, unsigned, bool adjustScrollbar); + void setController(int ctrl); + + signals: + void followEvent(int); + void xposChanged(unsigned); + void yposChanged(int); + + public: + CtrlCanvas(MidiEditor*, QWidget* parent, int, + const char* name = 0, CtrlPanel* pnl = 0); + void setPanel(CtrlPanel* pnl) { _panel = pnl; } + MidiCtrlValList* ctrlValList() { return ctrl; } + MidiController* controller() { return _controller; } + MidiTrack* track() const { return curTrack; } + }; +#endif + diff --git a/muse2/muse/ctrl/ctrledit.cpp b/muse2/muse/ctrl/ctrledit.cpp new file mode 100644 index 00000000..bca9d550 --- /dev/null +++ b/muse2/muse/ctrl/ctrledit.cpp @@ -0,0 +1,134 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: ctrledit.cpp,v 1.4.2.2 2009/02/02 21:38:00 terminator356 Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include "ctrledit.h" +#include "ctrlcanvas.h" +#include "midieditor.h" +#include "xml.h" +#include "vscale.h" +#include "ctrlpanel.h" +#include "globals.h" +#include "midiport.h" +#include "instruments/minstrument.h" +#include "gconfig.h" + +#include +#include +#include +#include +#include +//Added by qt3to4: +#include + +//--------------------------------------------------------- +// setTool +//--------------------------------------------------------- + +void CtrlEdit::setTool(int t) + { + canvas->setTool(t); + } + +//--------------------------------------------------------- +// CtrlEdit +//--------------------------------------------------------- + +CtrlEdit::CtrlEdit(QWidget* parent, MidiEditor* e, int xmag, + bool expand, const char* name) : QWidget(parent, name) + { + Q3HBoxLayout* hbox = new Q3HBoxLayout(this); + panel = new CtrlPanel(this, e, "panel"); + canvas = new CtrlCanvas(e, this, xmag, "ctrlcanvas", panel); + QWidget* vscale = new VScale(this); + + canvas->setOrigin(-(config.division/4), 0); + + canvas->setMinimumHeight(50); + + panel->setFixedWidth(CTRL_PANEL_FIXED_WIDTH); + hbox->addWidget(panel, expand ? 100 : 0, Qt::AlignRight); + hbox->addWidget(canvas, 100); + hbox->addWidget(vscale, 0); + + connect(panel, SIGNAL(destroyPanel()), SLOT(destroy())); + connect(panel, SIGNAL(controllerChanged(int)), canvas, SLOT(setController(int))); + connect(canvas, SIGNAL(xposChanged(unsigned)), SIGNAL(timeChanged(unsigned))); + connect(canvas, SIGNAL(yposChanged(int)), SIGNAL(yposChanged(int))); + } + +//--------------------------------------------------------- +// writeStatus +//--------------------------------------------------------- + +void CtrlEdit::writeStatus(int level, Xml& xml) + { + if (canvas->controller()) { + xml.tag(level++, "ctrledit"); + xml.strTag(level, "ctrl", canvas->controller()->name()); + xml.tag(level, "/ctrledit"); + } + } + +//--------------------------------------------------------- +// readStatus +//--------------------------------------------------------- + +void CtrlEdit::readStatus(Xml& xml) + { + for (;;) { + Xml::Token token = xml.parse(); + const QString& tag = xml.s1(); + switch (token) { + case Xml::Error: + case Xml::End: + return; + case Xml::TagStart: + if (tag == "ctrl") { + QString name = xml.parse1(); + int portno = canvas->track()->outPort(); + MidiPort* port = &midiPorts[portno]; + MidiInstrument* instr = port->instrument(); + MidiControllerList* mcl = instr->controller(); + + for (iMidiController ci = mcl->begin(); ci != mcl->end(); ++ci) { + if (ci->second->name() == name) { + canvas->setController(ci->second->num()); + break; + } + } + } + else + xml.unknown("CtrlEdit"); + break; + case Xml::TagEnd: + if (tag == "ctrledit") + return; + default: + break; + } + } + } + +//--------------------------------------------------------- +// destroy +//--------------------------------------------------------- + +void CtrlEdit::destroy() + { + emit destroyedCtrl(this); + close(true); // close and destroy widget + } + +//--------------------------------------------------------- +// setCanvasWidth +//--------------------------------------------------------- + +void CtrlEdit::setCanvasWidth(int w) +{ + canvas->setFixedWidth(w); +} diff --git a/muse2/muse/ctrl/ctrledit.h b/muse2/muse/ctrl/ctrledit.h new file mode 100644 index 00000000..2af7c528 --- /dev/null +++ b/muse2/muse/ctrl/ctrledit.h @@ -0,0 +1,56 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: ctrledit.h,v 1.4.2.1 2008/05/21 00:28:53 terminator356 Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __CTRL_EDIT_H__ +#define __CTRL_EDIT_H__ + +#include +//Added by qt3to4: +#include +#include "ctrlcanvas.h" +#include "song.h" + +class MidiEditor; +class QLabel; +class QToolButton; +class CtrlView; +class CtrlPanel; +class Xml; + +#define CTRL_PANEL_FIXED_WIDTH 40 +//--------------------------------------------------------- +// CtrlEdit +//--------------------------------------------------------- + +class CtrlEdit : public QWidget { + CtrlCanvas* canvas; + CtrlPanel* panel; + Q_OBJECT + + private slots: + void destroy(); + + public slots: + void setTool(int tool); + void setXPos(int val) { canvas->setXPos(val); } + void setXMag(int val) { canvas->setXMag(val); } + void setCanvasWidth(int w); + signals: + void timeChanged(unsigned); + void destroyedCtrl(CtrlEdit*); + void enterCanvas(); + void yposChanged(int); + + public: + CtrlEdit(QWidget*, MidiEditor* e, int xmag, + bool expand = false, const char* name = 0); + void readStatus(Xml&); + void writeStatus(int, Xml&); + }; + +#endif + diff --git a/muse2/muse/ctrl/ctrlpanel.cpp b/muse2/muse/ctrl/ctrlpanel.cpp new file mode 100644 index 00000000..820e6428 --- /dev/null +++ b/muse2/muse/ctrl/ctrlpanel.cpp @@ -0,0 +1,694 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: ctrlpanel.cpp,v 1.10.2.9 2009/06/14 05:24:45 terminator356 Exp $ +// (C) Copyright 1999-2004 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include + +#include "ctrlpanel.h" +#include "ctrlcanvas.h" + +#include +#include +#include +#include +#include +#include +#include +//Added by qt3to4: +#include +#include +#include + +#include "globals.h" +#include "midictrl.h" +#include "instruments/minstrument.h" +#include "midiport.h" +#include "xml.h" +#include "icons.h" +#include "event.h" +#include "midieditor.h" +#include "track.h" +#include "part.h" +#include "midiedit/drummap.h" +#include "gconfig.h" +#include "song.h" +#include "knob.h" +#include "doublelabel.h" +#include "midi.h" +#include "audio.h" + +//--------------------------------------------------------- +// CtrlPanel +//--------------------------------------------------------- + +CtrlPanel::CtrlPanel(QWidget* parent, MidiEditor* e, const char* name) + : QWidget(parent, name) + { + inHeartBeat = true; + editor = e; + setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding)); + Q3VBoxLayout* vbox = new Q3VBoxLayout(this); + Q3HBoxLayout* bbox = new Q3HBoxLayout(vbox); + vbox->addStretch(); + Q3HBoxLayout* kbox = new Q3HBoxLayout(vbox); + Q3HBoxLayout* dbox = new Q3HBoxLayout(vbox); + vbox->addStretch(); + selCtrl = new QPushButton(tr("S"), this, "selCtrl"); + selCtrl->setFont(config.fonts[3]); + selCtrl->setFixedHeight(20); + selCtrl->setSizePolicy( + QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed)); + QToolTip::add(selCtrl, tr("select controller")); + pop = new Q3PopupMenu(selCtrl); + + // destroy button + QPushButton* destroy = new QPushButton(tr("X"), this, "destroy"); + destroy->setFont(config.fonts[3]); + destroy->setFixedHeight(20); + destroy->setSizePolicy( + QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed)); + QToolTip::add(destroy, tr("remove panel")); + // Cursor Position + connect(selCtrl, SIGNAL(clicked()), SLOT(ctrlPopup())); + connect(destroy, SIGNAL(clicked()), SIGNAL(destroyPanel())); + + _track = 0; + _ctrl = 0; + _val = CTRL_VAL_UNKNOWN; + _dnum = -1; + + _knob = new Knob(this); + _knob->setFixedWidth(25); + _knob->setFixedHeight(25); + QToolTip::add(_knob, tr("manual adjust")); + _knob->setRange(0.0, 127.0, 1.0); + _knob->setValue(0.0); + _knob->setEnabled(false); + _knob->hide(); + _knob->setAltFaceColor(Qt::red); + + _dl = new DoubleLabel(-1.0, 0.0, +127.0, this); + _dl->setPrecision(0); + QToolTip::add(_dl, tr("double click on/off")); + _dl->setSpecialText(tr("off")); + _dl->setFont(config.fonts[1]); + _dl->setBackgroundMode(Qt::PaletteMid); + _dl->setFrame(true); + _dl->setFixedWidth(36); + _dl->setFixedHeight(15); + _dl->setEnabled(false); + _dl->hide(); + + connect(_knob, SIGNAL(sliderMoved(double,int)), SLOT(ctrlChanged(double))); + connect(_knob, SIGNAL(sliderRightClicked(const QPoint&, int)), SLOT(ctrlRightClicked(const QPoint&, int))); + //connect(_knob, SIGNAL(sliderReleased(int)), SLOT(ctrlReleased(int))); + connect(_dl, SIGNAL(valueChanged(double,int)), SLOT(ctrlChanged(double))); + connect(_dl, SIGNAL(doubleClicked(int)), SLOT(labelDoubleClicked())); + + bbox->addStretch(); + bbox->addWidget(selCtrl); + bbox->addWidget(destroy); + bbox->addStretch(); + kbox->addStretch(); + kbox->addWidget(_knob); + kbox->addStretch(); + dbox->addStretch(); + dbox->addWidget(_dl); + dbox->addStretch(); + connect(heartBeatTimer, SIGNAL(timeout()), SLOT(heartBeat())); + inHeartBeat = false; + } +//--------------------------------------------------------- +// heartBeat +//--------------------------------------------------------- + +void CtrlPanel::heartBeat() +{ + inHeartBeat = true; + + if(_track && _ctrl && _dnum != -1) + { + //if(_dnum != CTRL_VELOCITY && _dnum != CTRL_PROGRAM) + if(_dnum != CTRL_VELOCITY) + { + int outport; + int chan; + int cdi = editor->curDrumInstrument(); + if(_track->type() == Track::DRUM && ((_ctrl->num() & 0xff) == 0xff) && cdi != -1) + { + outport = drumMap[cdi].port; + chan = drumMap[cdi].channel; + } + else + { + outport = _track->outPort(); + chan = _track->outChannel(); + } + MidiPort* mp = &midiPorts[outport]; + + int v = mp->hwCtrlState(chan, _dnum); + if(v == CTRL_VAL_UNKNOWN) + { + // DoubleLabel ignores the value if already set... + _dl->setValue(_dl->off() - 1.0); + _val = CTRL_VAL_UNKNOWN; + v = mp->lastValidHWCtrlState(chan, _dnum); + if(v != CTRL_VAL_UNKNOWN && ((_dnum != CTRL_PROGRAM) || ((v & 0xff) != 0xff) )) + { + if(_dnum == CTRL_PROGRAM) + v = (v & 0x7f) + 1; + else + // Auto bias... + v -= _ctrl->bias(); + if(double(v) != _knob->value()) + { + // Added by Tim. p3.3.6 + //printf("CtrlPanel::heartBeat setting knob\n"); + + _knob->setValue(double(v)); + } + } + } + else + if(v != _val) + { + _val = v; + if(v == CTRL_VAL_UNKNOWN || ((_dnum == CTRL_PROGRAM) && ((v & 0xff) == 0xff) )) + { + // DoubleLabel ignores the value if already set... + //_dl->setValue(double(_ctrl->minVal() - 1)); + _dl->setValue(_dl->off() - 1.0); + } + else + { + if(_dnum == CTRL_PROGRAM) + v = (v & 0x7f) + 1; + else + // Auto bias... + v -= _ctrl->bias(); + + // Added by Tim. p3.3.6 + //printf("CtrlPanel::heartBeat setting knob and label\n"); + + _knob->setValue(double(v)); + _dl->setValue(double(v)); + } + } + } + } + + inHeartBeat = false; +} + +//--------------------------------------------------------- +// labelDoubleClicked +//--------------------------------------------------------- + +void CtrlPanel::labelDoubleClicked() +{ + if(!_track || !_ctrl || _dnum == -1) + return; + + int outport; + int chan; + int cdi = editor->curDrumInstrument(); + if(_track->type() == Track::DRUM && ((_ctrl->num() & 0xff) == 0xff) && cdi != -1) + { + outport = drumMap[cdi].port; + chan = drumMap[cdi].channel; + } + else + { + outport = _track->outPort(); + chan = _track->outChannel(); + } + MidiPort* mp = &midiPorts[outport]; + int lastv = mp->lastValidHWCtrlState(chan, _dnum); + + int curv = mp->hwCtrlState(chan, _dnum); + + if(_dnum == CTRL_PROGRAM) + { + if(curv == CTRL_VAL_UNKNOWN || ((curv & 0xffffff) == 0xffffff)) + { + // If no value has ever been set yet, use the current knob value + // (or the controller's initial value?) to 'turn on' the controller. + if(lastv == CTRL_VAL_UNKNOWN || ((lastv & 0xffffff) == 0xffffff)) + { + //int kiv = _ctrl->initVal()); + int kiv = lrint(_knob->value()); + --kiv; + kiv &= 0x7f; + kiv |= 0xffff00; + //MidiPlayEvent ev(song->cpos(), outport, chan, ME_CONTROLLER, _dnum, kiv); + MidiPlayEvent ev(0, outport, chan, ME_CONTROLLER, _dnum, kiv); + audio->msgPlayMidiEvent(&ev); + } + else + { + //MidiPlayEvent ev(song->cpos(), outport, chan, ME_CONTROLLER, _dnum, lastv); + MidiPlayEvent ev(0, outport, chan, ME_CONTROLLER, _dnum, lastv); + audio->msgPlayMidiEvent(&ev); + } + } + else + { + //if((curv & 0xffff00) == 0xffff00) + //{ + ////if(mp->hwCtrlState(chan, _dnum) != CTRL_VAL_UNKNOWN) + audio->msgSetHwCtrlState(mp, chan, _dnum, CTRL_VAL_UNKNOWN); + //} + //else + //{ + // MidiPlayEvent ev(song->cpos(), outport, chan, ME_CONTROLLER, _dnum, (curv & 0xffff00) | 0xff); + // audio->msgPlayMidiEvent(&ev); + //} + } + } + else + { + if(curv == CTRL_VAL_UNKNOWN) + { + // If no value has ever been set yet, use the current knob value + // (or the controller's initial value?) to 'turn on' the controller. + if(lastv == CTRL_VAL_UNKNOWN) + { + //int kiv = _ctrl->initVal()); + int kiv = lrint(_knob->value()); + if(kiv < _ctrl->minVal()) + kiv = _ctrl->minVal(); + if(kiv > _ctrl->maxVal()) + kiv = _ctrl->maxVal(); + kiv += _ctrl->bias(); + //MidiPlayEvent ev(song->cpos(), outport, chan, ME_CONTROLLER, _dnum, kiv); + MidiPlayEvent ev(0, outport, chan, ME_CONTROLLER, _dnum, kiv); + audio->msgPlayMidiEvent(&ev); + } + else + { + //MidiPlayEvent ev(song->cpos(), outport, chan, ME_CONTROLLER, _dnum, lastv); + MidiPlayEvent ev(0, outport, chan, ME_CONTROLLER, _dnum, lastv); + audio->msgPlayMidiEvent(&ev); + } + } + else + { + //if(mp->hwCtrlState(chan, _dnum) != CTRL_VAL_UNKNOWN) + audio->msgSetHwCtrlState(mp, chan, _dnum, CTRL_VAL_UNKNOWN); + } + } + song->update(SC_MIDI_CONTROLLER); +} + +//--------------------------------------------------------- +// ctrlChanged +//--------------------------------------------------------- + +void CtrlPanel::ctrlChanged(double val) + { + if (inHeartBeat) + return; + if(!_track || !_ctrl || _dnum == -1) + return; + + int ival = lrint(val); + + int outport; + int chan; + int cdi = editor->curDrumInstrument(); + if(_track->type() == Track::DRUM && ((_ctrl->num() & 0xff) == 0xff) && cdi != -1) + { + outport = drumMap[cdi].port; + chan = drumMap[cdi].channel; + } + else + { + outport = _track->outPort(); + chan = _track->outChannel(); + } + MidiPort* mp = &midiPorts[outport]; + int curval = mp->hwCtrlState(chan, _dnum); + + if(_dnum == CTRL_PROGRAM) + { + --ival; + ival &= 0x7f; + + if(curval == CTRL_VAL_UNKNOWN) + ival |= 0xffff00; + else + ival |= (curval & 0xffff00); + //MidiPlayEvent ev(song->cpos(), outport, chan, ME_CONTROLLER, _dnum, ival); + MidiPlayEvent ev(0, outport, chan, ME_CONTROLLER, _dnum, ival); + audio->msgPlayMidiEvent(&ev); + } + else + // Shouldn't happen, but... + if((ival < _ctrl->minVal()) || (ival > _ctrl->maxVal())) + { + //if(mp->hwCtrlState(chan, _dnum) != CTRL_VAL_UNKNOWN) + if(curval != CTRL_VAL_UNKNOWN) + audio->msgSetHwCtrlState(mp, chan, _dnum, CTRL_VAL_UNKNOWN); + } + else + { + // Auto bias... + ival += _ctrl->bias(); + + //MidiPlayEvent ev(song->cpos(), outport, chan, ME_CONTROLLER, _dnum, ival); + MidiPlayEvent ev(0, outport, chan, ME_CONTROLLER, _dnum, ival); + audio->msgPlayMidiEvent(&ev); + } + song->update(SC_MIDI_CONTROLLER); + } + +//--------------------------------------------------------- +// setHWController +//--------------------------------------------------------- + +void CtrlPanel::setHWController(MidiTrack* t, MidiController* ctrl) +{ + inHeartBeat = true; + + _track = t; _ctrl = ctrl; + + if(!_track || !_ctrl) + { + _knob->setEnabled(false); + _dl->setEnabled(false); + _knob->hide(); + _dl->hide(); + inHeartBeat = false; + return; + } + + MidiPort* mp; + int ch; + int cdi = editor->curDrumInstrument(); + _dnum = _ctrl->num(); + if(_track->type() == Track::DRUM && ((_dnum & 0xff) == 0xff) && cdi != -1) + { + _dnum = (_dnum & ~0xff) | drumMap[cdi].anote; + mp = &midiPorts[drumMap[cdi].port]; + ch = drumMap[cdi].channel; + } + else + { + mp = &midiPorts[_track->outPort()]; + ch = _track->outChannel(); + } + + //if(_dnum == CTRL_VELOCITY || _dnum == CTRL_PROGRAM) + if(_dnum == CTRL_VELOCITY) + { + _knob->setEnabled(false); + _dl->setEnabled(false); + _knob->hide(); + _dl->hide(); + } + else + { + _knob->setEnabled(true); + _dl->setEnabled(true); + double dlv; + int mn; int mx; int v; + if(_dnum == CTRL_PROGRAM) + { + mn = 1; + mx = 128; + v = mp->hwCtrlState(ch, _dnum); + _val = v; + _knob->setRange(double(mn), double(mx), 1.0); + _dl->setRange(double(mn), double(mx)); + //_dl->setOff(double(mn - 1)); + if(v == CTRL_VAL_UNKNOWN || ((v & 0xffffff) == 0xffffff)) + { + int lastv = mp->lastValidHWCtrlState(ch, _dnum); + if(lastv == CTRL_VAL_UNKNOWN || ((lastv & 0xffffff) == 0xffffff)) + { + int initv = _ctrl->initVal(); + if(initv == CTRL_VAL_UNKNOWN || ((initv & 0xffffff) == 0xffffff)) + v = 1; + else + v = (initv + 1) & 0xff; + } + else + v = (lastv + 1) & 0xff; + + if(v > 128) + v = 128; + //dlv = mn - 1; + dlv = _dl->off() - 1.0; + } + else + { + v = (v + 1) & 0xff; + if(v > 128) + v = 128; + dlv = double(v); + } + } + else + { + mn = _ctrl->minVal(); + mx = _ctrl->maxVal(); + v = mp->hwCtrlState(ch, _dnum); + _val = v; + _knob->setRange(double(mn), double(mx), 1.0); + _dl->setRange(double(mn), double(mx)); + //_dl->setOff(double(mn - 1)); + if(v == CTRL_VAL_UNKNOWN) + { + int lastv = mp->lastValidHWCtrlState(ch, _dnum); + if(lastv == CTRL_VAL_UNKNOWN) + { + if(_ctrl->initVal() == CTRL_VAL_UNKNOWN) + v = 0; + else + v = _ctrl->initVal(); + } + else + v = lastv - _ctrl->bias(); + //dlv = mn - 1; + dlv = _dl->off() - 1.0; + } + else + { + // Auto bias... + v -= _ctrl->bias(); + dlv = double(v); + } + } + _knob->setValue(double(v)); + _dl->setValue(dlv); + + _knob->show(); + _dl->show(); + // Incomplete drawing sometimes. Update fixes it. + _knob->update(); + _dl->update(); + } + + inHeartBeat = false; +} + +//--------------------------------------------------------- +// setHeight +//--------------------------------------------------------- + +void CtrlPanel::setHeight(int h) + { + setFixedHeight(h); + } + +struct CI { + QString s; + bool used; + CI(const QString& ss, bool u) : s(ss), used(u) {} + }; + +//--------------------------------------------------------- +// ctrlPopup +//--------------------------------------------------------- + +void CtrlPanel::ctrlPopup() + { + //--------------------------------------------------- + // build list of midi controllers for current + // MidiPort/channel + //--------------------------------------------------- + + PartList* parts = editor->parts(); + Part* part = editor->curCanvasPart(); + MidiTrack* track = (MidiTrack*)(part->track()); + int channel = track->outChannel(); + MidiPort* port = &midiPorts[track->outPort()]; + int curDrumInstrument = editor->curDrumInstrument(); + bool isDrum = track->type() == Track::DRUM; + + pop->clear(); + pop->insertItem(tr("Velocity"), 1); + + MidiCtrlValListList* cll = port->controller(); + int min = channel << 24; + int max = min + 0x1000000; + + std::list sList; + typedef std::list::iterator isList; + + for (iMidiCtrlValList i = cll->lower_bound(min); i != cll->lower_bound(max); ++i) { + MidiCtrlValList* cl = i->second; + MidiController* c = port->midiController(cl->num()); + // dont show drum specific controller if not a drum track + if ((c->num() & 0xff) == 0xff) { + if (!isDrum) + continue; + // only show controller for curDrumInstrument: + if ((cl->num() & 0xff) != drumMap[curDrumInstrument].anote) { + continue; + } + } + isList i = sList.begin(); + for (; i != sList.end(); ++i) { + if (i->s == c->name()) + break; + } + if (i == sList.end()) { + bool used = false; + for (iPart ip = parts->begin(); ip != parts->end(); ++ip) { + EventList* el = ip->second->events(); + for (iEvent ie = el->begin(); ie != el->end(); ++ie) { + Event e = ie->second; + if ((e.type() == Controller) && (e.dataA() == cl->num())) { + used = true; + break; + } + } + if (used) + break; + } + sList.push_back(CI(c->name(), used)); + } + } + for (isList i = sList.begin(); i != sList.end(); ++i) { + if (i->used) + pop->insertItem(QIcon(*greendotIcon), i->s); + else + pop->insertItem(i->s); + } + + pop->insertItem(QIcon(*configureIcon), tr("add new ..."), 2); + int rv = pop->exec(selCtrl->mapToGlobal(QPoint(0,0))); + selCtrl->setDown(false); + + if (rv == -1) + return; + + QString s = pop->text(rv); + if (rv == 1) { // special case velocity + emit controllerChanged(CTRL_VELOCITY); + } + else if (rv == 2) { + // + // add new controller + // + Q3PopupMenu* pop1 = new Q3PopupMenu(this); + pop1->setCheckable(false); + // + // populate popup with all controllers available for + // current instrument + // + MidiInstrument* instr = port->instrument(); + MidiControllerList* mcl = instr->controller(); + for (iMidiController ci = mcl->begin(); ci != mcl->end(); ++ci) + { + int num = ci->second->num(); + if (isDrum && ((num & 0xff) == 0xff)) + num = (num & ~0xff) + drumMap[curDrumInstrument].anote; + + if(cll->find(channel, num) == cll->end()) + pop1->insertItem(ci->second->name()); + } + int rv = pop1->exec(selCtrl->mapToGlobal(QPoint(0,0))); + if (rv != -1) { + QString s = pop1->text(rv); + MidiController* c; + for (iMidiController ci = mcl->begin(); ci != mcl->end(); ++ci) { + c = ci->second; + if (c->name() == s) { + int num = c->num(); + if (isDrum && ((num & 0xff) == 0xff)) + num = (num & ~0xff) + drumMap[curDrumInstrument].anote; + + if(cll->find(channel, num) == cll->end()) + { + MidiCtrlValList* vl = new MidiCtrlValList(num); + + cll->add(channel, vl); + emit controllerChanged(c->num()); + //song->update(SC_MIDI_CONTROLLER_ADD); + } + else + emit controllerChanged(c->num()); + break; + } + } + } + } + else if (rv == -1) + return; + else { + QString s = pop->text(rv); + iMidiCtrlValList i = cll->begin(); + for (; i != cll->end(); ++i) { + MidiCtrlValList* cl = i->second; + MidiController* c = port->midiController(cl->num()); + if (c->name() == s) { + emit controllerChanged(c->num()); + break; + } + } + if (i == cll->end()) { + printf("CtrlPanel: controller %s not found!", s.latin1()); + } + } + } + +//--------------------------------------------------------- +// ctrlRightClicked +//--------------------------------------------------------- + +void CtrlPanel::ctrlRightClicked(const QPoint& p, int /*id*/) +{ + //if(!_knob->selectedFaceColor()) + // _knob->selectFaceColor(true); + //if(_dnum == -1) + // return; + if(!editor->curCanvasPart()) + return; + + int cdi = editor->curDrumInstrument(); + int ctlnum = _ctrl->num(); + if(_track->type() == Track::DRUM && ((ctlnum & 0xff) == 0xff) && cdi != -1) + //ctlnum = (ctlnum & ~0xff) | drumMap[cdi].enote; + ctlnum = (ctlnum & ~0xff) | cdi; + + MidiPart* part = dynamic_cast(editor->curCanvasPart()); + song->execMidiAutomationCtlPopup(0, part, p, ctlnum); +} + +/* +//--------------------------------------------------------- +// ctrlReleased +//--------------------------------------------------------- + +void CtrlPanel::ctrlReleased(int id) +{ + //if(_knob->selectedFaceColor()) + // _knob->selectFaceColor(false); +} +*/ diff --git a/muse2/muse/ctrl/ctrlpanel.h b/muse2/muse/ctrl/ctrlpanel.h new file mode 100644 index 00000000..8d3379c0 --- /dev/null +++ b/muse2/muse/ctrl/ctrlpanel.h @@ -0,0 +1,66 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: ctrlpanel.h,v 1.2.2.5 2009/06/10 00:34:59 terminator356 Exp $ +// (C) Copyright 1999-2001 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __CTRL_PANEL_H__ +#define __CTRL_PANEL_H__ + +#include +//Added by qt3to4: +#include +#include + +class MidiController; +class QLabel; +class Q3PopupMenu; +class QPushButton; +class MidiEditor; +class Knob; +class DoubleLabel; +class MidiPort; +class MidiTrack; + +//--------------------------------------------------------- +// CtrlPanel +//--------------------------------------------------------- + +class CtrlPanel: public QWidget { + Q3PopupMenu* pop; + QPushButton* selCtrl; + MidiEditor* editor; + + MidiTrack* _track; + MidiController* _ctrl; + int _dnum; + bool inHeartBeat; + Knob* _knob; + DoubleLabel* _dl; + int _val; + + Q_OBJECT + + signals: + void destroyPanel(); + void controllerChanged(int); + + private slots: + void ctrlChanged(double val); + void labelDoubleClicked(); + void ctrlRightClicked(const QPoint& p, int id); + //void ctrlReleased(int id); + + protected slots: + virtual void heartBeat(); + + public slots: + void setHeight(int); + void ctrlPopup(); + + public: + CtrlPanel(QWidget*, MidiEditor*, const char* name = 0); + void setHWController(MidiTrack* t, MidiController* ctrl); + }; +#endif diff --git a/muse2/muse/debug.h b/muse2/muse/debug.h new file mode 100644 index 00000000..7339a613 --- /dev/null +++ b/muse2/muse/debug.h @@ -0,0 +1,31 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: debug.h,v 1.1.1.1 2003/10/27 18:51:20 wschweer Exp $ +//========================================================= + +#ifndef __MUSE_DEBUG_H__ +#define __MUSE_DEBUG_H__ + +#include +#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/muse2/muse/default_click.h b/muse2/muse/default_click.h new file mode 100644 index 00000000..7f074350 --- /dev/null +++ b/muse2/muse/default_click.h @@ -0,0 +1,1213 @@ +/* + 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 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. + + $Id: default_click.h,v 1.1.2.1 2004/11/15 23:25:51 spamatica Exp $ +*/ + +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/muse2/muse/device.h b/muse2/muse/device.h new file mode 100644 index 00000000..f039fc11 --- /dev/null +++ b/muse2/muse/device.h @@ -0,0 +1,46 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: device.h,v 1.1.1.1 2003/10/27 18:51:58 wschweer Exp $ +// +// (C) Copyright 1999/2000 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __DEVICE_H__ +#define __DEVICE_H__ + +#include + +//--------------------------------------------------------- +// 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/muse2/muse/driver/Makefile.am b/muse2/muse/driver/Makefile.am new file mode 100644 index 00000000..da3eba07 --- /dev/null +++ b/muse2/muse/driver/Makefile.am @@ -0,0 +1,10 @@ +include $(top_srcdir)/common.am + +noinst_LIBRARIES = libdriver.a + +AM_CXXFLAGS += $(JACK_CFLAGS) + +libdriver_a_SOURCES = audiodev.h alsamidi.cpp alsamidi.h jack.cpp jackaudio.h \ + dummyaudio.cpp alsatimer.cpp alsatimer.h timerdev.h rtctimer.cpp rtctimer.h \ + jackmidi.cpp jackmidi.h + diff --git a/muse2/muse/driver/Makefile.in b/muse2/muse/driver/Makefile.in new file mode 100644 index 00000000..8c773db5 --- /dev/null +++ b/muse2/muse/driver/Makefile.in @@ -0,0 +1,595 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/common.am +subdir = muse/driver +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal-include.m4 \ + $(top_srcdir)/m4/alsa.m4 $(top_srcdir)/m4/docbook.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +LIBRARIES = $(noinst_LIBRARIES) +ARFLAGS = cru +libdriver_a_AR = $(AR) $(ARFLAGS) +libdriver_a_LIBADD = +am_libdriver_a_OBJECTS = alsamidi.$(OBJEXT) jack.$(OBJEXT) \ + dummyaudio.$(OBJEXT) alsatimer.$(OBJEXT) rtctimer.$(OBJEXT) \ + jackmidi.$(OBJEXT) +libdriver_a_OBJECTS = $(am_libdriver_a_OBJECTS) +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +CXXLD = $(CXX) +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(libdriver_a_SOURCES) +DIST_SOURCES = $(libdriver_a_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DOCBOOKSTYLE = @DOCBOOKSTYLE@ +DOCBOOKTARGETS = @DOCBOOKTARGETS@ +DOT = @DOT@ +DOTPATH = @DOTPATH@ +DOXYGEN = @DOXYGEN@ +DOXYGEN_TREEVIEW = @DOXYGEN_TREEVIEW@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FLUIDSYNTHDIRS = @FLUIDSYNTHDIRS@ +FST_CFLAGS = @FST_CFLAGS@ +FST_LIBS = @FST_LIBS@ +Fluidsynth_CFLAGS = @Fluidsynth_CFLAGS@ +Fluidsynth_LIBS = @Fluidsynth_LIBS@ +GIVERTCAP = @GIVERTCAP@ +GREP = @GREP@ +HAVEDOT = @HAVEDOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_LIBS = @JACK_LIBS@ +JADE = @JADE@ +LASH_CFLAGS = @LASH_CFLAGS@ +LASH_LIBS = @LASH_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LO_CFLAGS = @LO_CFLAGS@ +LO_LIBS = @LO_LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MUSECXXFLAGS = @MUSECXXFLAGS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NSGMLS = @NSGMLS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PCH = @PCH@ +PERL = @PERL@ +PKG_CONFIG = @PKG_CONFIG@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIB = @PYTHON_LIB@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QTDIR_BIN = @QTDIR_BIN@ +QTDIR_INC = @QTDIR_INC@ +QT_LIBS = @QT_LIBS@ +RANLIB = @RANLIB@ +SAMPLERATE_CFLAGS = @SAMPLERATE_CFLAGS@ +SAMPLERATE_LIBS = @SAMPLERATE_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ +SNDFILE_LIBS = @SNDFILE_LIBS@ +STRIP = @STRIP@ +SUIDBUILD = @SUIDBUILD@ +SUIDINSTALL = @SUIDINSTALL@ +USE_SSE = @USE_SSE@ +UUID_CFLAGS = @UUID_CFLAGS@ +UUID_LIBS = @UUID_LIBS@ +VERSION = @VERSION@ +XMKMF = @XMKMF@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +have_docbook = @have_docbook@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +synth_fluid = @synth_fluid@ +synth_fluidsynth = @synth_fluidsynth@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AM_CXXFLAGS = $(MUSECXXFLAGS) -I.. -I$(top_srcdir)/synti \ + -I$(top_srcdir)/muse/widgets -DQT_SHARED -DQT_THREAD_SUPPORT \ + -DQT_PLUGIN $(QTDIR_INC) -DQT3_SUPPORT $(JACK_CFLAGS) +AM_CPPFLAGS = +MOC = $(QTDIR_BIN)/moc +#UIC = $(QTDIR_BIN)/uic3 +UIC = /usr/bin/uic3 +UIFILES = $(wildcard *.ui) +MOCFILES = $(shell for h in $(filter %.h,$(SOURCES)); do \ + if grep -q Q_OBJECT $$h; then \ + echo $$h | sed "s/\(.*\)\.h/moc_\1.cpp/"; \ + fi; \ + done) + +BUILT_SOURCES = $(MOCFILES) $(UIFILES:%.ui=%.h) +MOSTLYCLEANFILES = $(MOCFILES) $(UIFILES:%.ui=%.h) +SUFFIXES = .ui .h.gch +noinst_LIBRARIES = libdriver.a +libdriver_a_SOURCES = audiodev.h alsamidi.cpp alsamidi.h jack.cpp jackaudio.h \ + dummyaudio.cpp alsatimer.cpp alsatimer.h timerdev.h rtctimer.cpp rtctimer.h \ + jackmidi.cpp jackmidi.h + +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: .ui .h.gch .cpp .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/common.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu muse/driver/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu muse/driver/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-noinstLIBRARIES: + -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) +libdriver.a: $(libdriver_a_OBJECTS) $(libdriver_a_DEPENDENCIES) + -rm -f libdriver.a + $(libdriver_a_AR) libdriver.a $(libdriver_a_OBJECTS) $(libdriver_a_LIBADD) + $(RANLIB) libdriver.a + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/alsamidi.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/alsatimer.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dummyaudio.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jack.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jackmidi.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rtctimer.Po@am__quote@ + +.cpp.o: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< + +.cpp.obj: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.cpp.lo: +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-am +all-am: Makefile $(LIBRARIES) +installdirs: +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +clean: clean-am + +clean-am: clean-generic clean-libtool clean-noinstLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: all check install install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-noinstLIBRARIES ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags uninstall uninstall-am + + +de: + @for base in $(MOCFILES); do echo -e "\t$${base}.cpp $${base}.h \\"; done + +nde: + @for base in $(MOCFILES); do echo -e "\tmoc_$${base}.cpp \\"; done + +.ui.o: %.h + $(UIC) -L $(top_srcdir)/muse/widgets -o $*.cpp -impl $*.h $*.ui + $(MOC) $*.h >> $*.cpp + $(CXXCOMPILE) -c $*.cpp -o $*.o + $(RM) $*.cpp moc_$*.cpp moc_$*.o + +.ui.lo: %.h + $(UIC) -L $(top_srcdir)/muse/widgets -o $*.cpp -impl $*.h $*.ui + $(MOC) $*.h >> $*.cpp + $(LTCXXCOMPILE) -c $*.cpp -o $*.lo + $(RM) $*.cpp moc_$*.cpp moc_$*.lo moc_$*.o + +moc_%.cpp: %.h + $(MOC) $< -o $@ + +%.h: %.ui + $(UIC) -o $@ $< +# $(UIC) -L $(top_srcdir)/muse/widgets -o $@ $< + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/muse2/muse/driver/alsamidi.cpp b/muse2/muse/driver/alsamidi.cpp new file mode 100644 index 00000000..3b15fc6f --- /dev/null +++ b/muse2/muse/driver/alsamidi.cpp @@ -0,0 +1,917 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: alsamidi.cpp,v 1.8.2.7 2009/11/19 04:20:33 terminator356 Exp $ +// (C) Copyright 2000-2001 Werner Schweer (ws@seh.de) +//========================================================= + +#include + +#include "alsamidi.h" +#include "globals.h" +#include "midi.h" +#include "mididev.h" +#include "../midiport.h" +#include "../midiseq.h" +#include "../midictrl.h" +#include "../audio.h" +#include "mpevent.h" +//#include "sync.h" +#include "utils.h" +#include "audiodev.h" +#include "xml.h" + +static int alsaSeqFdi = -1; +static int alsaSeqFdo = -1; + +snd_seq_t* alsaSeq; +static snd_seq_addr_t musePort; + +//--------------------------------------------------------- +// MidiAlsaDevice +//--------------------------------------------------------- + +MidiAlsaDevice::MidiAlsaDevice(const snd_seq_addr_t& a, const QString& n) + : MidiDevice(n) + { + adr = a; + init(); + } + +//--------------------------------------------------------- +// selectWfd +//--------------------------------------------------------- + +int MidiAlsaDevice::selectWfd() + { + return alsaSeqFdo; + } + +//--------------------------------------------------------- +// open +//--------------------------------------------------------- + +QString MidiAlsaDevice::open() +{ + _openFlags &= _rwFlags; // restrict to available bits + snd_seq_port_subscribe_t* subs; + // Allocated on stack, no need to call snd_seq_port_subscribe_free() later. + snd_seq_port_subscribe_alloca(&subs); + + QString estr; + int wer = 0; + int rer = 0; + + // subscribe for writing + if (_openFlags & 1) + { + snd_seq_port_subscribe_set_sender(subs, &musePort); + snd_seq_port_subscribe_set_dest(subs, &adr); + // Not already subscribed (or error)? Then try subscribing. + if(snd_seq_get_port_subscription(alsaSeq, subs) < 0) + { + //int error = snd_seq_subscribe_port(alsaSeq, subs); + wer = snd_seq_subscribe_port(alsaSeq, subs); + //if (error < 0) + if(wer < 0) + //return QString("Play: ")+QString(snd_strerror(error)); + estr += (QString("Play: ") + QString(snd_strerror(wer)) + QString(" ")); + } + if(!wer) + _writeEnable = true; + } + + // subscribe for reading + if (_openFlags & 2) + { + snd_seq_port_subscribe_set_dest(subs, &musePort); + snd_seq_port_subscribe_set_sender(subs, &adr); + // Not already subscribed (or error)? Then try subscribing. + if(snd_seq_get_port_subscription(alsaSeq, subs) < 0) + { + //int error = snd_seq_subscribe_port(alsaSeq, subs); + rer = snd_seq_subscribe_port(alsaSeq, subs); + //if (error < 0) + if(rer < 0) + //return QString("Rec: ") + QString(snd_strerror(error)); + estr += (QString("Rec: ") + QString(snd_strerror(rer))); + } + if(!rer) + _readEnable = true; + } + + + if(wer < 0 || rer < 0) + return estr; + + return QString("OK"); +} + +//--------------------------------------------------------- +// close +//--------------------------------------------------------- + +void MidiAlsaDevice::close() +{ + snd_seq_port_subscribe_t* subs; + // Allocated on stack, no need to call snd_seq_port_subscribe_free() later. + snd_seq_port_subscribe_alloca(&subs); + + // Changed by T356. This function appears to be called only by MidiPort::setMidiDevice(), + // which closes then opens the device. + // Because the open flags are set BEFORE setMidiDevice() is called, we must ignore the flags. + // + // NOTE: Tested: The read unsubscribe works ok but not the write. + // As viewed in say, qjackctl, the connection is clearly lost, + // but strangely the events are still accepted, ie, playback notes + // are still heard etc. Tried an alsa midi device AND external fluidsynth inst. + // + // Also, jack running and with jack midi disabled, we get messages like + // MidiAlsaDevice::0x84512c0 putEvent(): midi write error: No such device + // dst 16:0 + // only sometimes (not when playing notes), but with jack midi turned on, + // we don't get the messages. With jack stopped we get the messages + // no matter if jack midi is turned on or not. + + //if (_openFlags & 1) { + //if (!(_openFlags & 1)) + { + snd_seq_port_subscribe_set_sender(subs, &musePort); + snd_seq_port_subscribe_set_dest(subs, &adr); + + // Already subscribed? Then unsubscribe. + if(!snd_seq_get_port_subscription(alsaSeq, subs)) + { + if(!snd_seq_unsubscribe_port(alsaSeq, subs)) + _writeEnable = false; + else + printf("MidiAlsaDevice::close Error unsubscribing alsa midi port for writing\n"); + } + else + _writeEnable = false; + } + + //if (_openFlags & 2) { + //if (!(_openFlags & 2)) + { + snd_seq_port_subscribe_set_dest(subs, &musePort); + snd_seq_port_subscribe_set_sender(subs, &adr); + + // Already subscribed? Then unsubscribe. + if(!snd_seq_get_port_subscription(alsaSeq, subs)) + { + if(!snd_seq_unsubscribe_port(alsaSeq, subs)) + _readEnable = false; + else + printf("MidiAlsaDevice::close Error unsubscribing alsa midi port for reading\n"); + } + else + _readEnable = false; + } +} + +//--------------------------------------------------------- +// writeRouting +//--------------------------------------------------------- + +void MidiAlsaDevice::writeRouting(int level, Xml& xml) const +{ + // p3.3.45 + // If this device is not actually in use by the song, do not write any routes. + // This prevents bogus routes from being saved and propagated in the med file. + if(midiPort() == -1) + return; + + QString s; + /* + //if(rwFlags() & 2) // Readable + { + //RouteList* rl = _inRoutes; + //for (ciRoute r = rl->begin(); r != rl->end(); ++r) + for (ciRoute r = _inRoutes.begin(); r != _inRoutes.end(); ++r) + { + // Since an ALSA midi device supports read + write, this is the only way we can tell if this route is using the device as input. + if(r->type == Route::TRACK_ROUTE) + continue; + + if(!r->name().isEmpty()) + { + xml.tag(level++, "Route"); + + //xml.strTag(level, "srcNode", r->name()); + xml.tag(level, "source type=\"%d\" name=\"%s\"/", r->type, r->name().latin1()); + + //xml.strTag(level, "dstNode", name()); + xml.tag(level, "dest type=\"%d\" name=\"%s\"/", Route::ALSA_MIDI_ROUTE, name().latin1()); + + xml.etag(level--, "Route"); + } + } + } + */ + + for (ciRoute r = _outRoutes.begin(); r != _outRoutes.end(); ++r) + { + //if(r->type != Route::TRACK_ROUTE) + //{ + // printf("MidiAlsaDevice::writeRouting Warning out route is not TRACK_ROUTE type\n"); + // continue; + //} + + if(!r->name().isEmpty()) + { + //xml.tag(level++, "Route"); + + s = QT_TR_NOOP("Route"); + if(r->channel != -1) + s += QString(QT_TR_NOOP(" channel=\"%1\"")).arg(r->channel); + xml.tag(level++, s); + + /* + //xml.strTag(level, "srcNode", name()); + if(r->channel != -1) + //xml.tag(level, "source type=\"%d\" channel=\"%d\" name=\"%s\"/", Route::ALSA_MIDI_ROUTE, r->channel, name().latin1()); + //xml.tag(level, "source type=\"%d\" channel=\"%d\" name=\"%s\"/", Route::MIDI_DEVICE_ROUTE, r->channel, name().latin1()); + xml.tag(level, "source devtype=\"%d\" channel=\"%d\" name=\"%s\"/", MidiDevice::ALSA_MIDI, r->channel, name().latin1()); + else + //xml.tag(level, "source type=\"%d\" name=\"%s\"/", Route::ALSA_MIDI_ROUTE, name().latin1()); + //xml.tag(level, "source type=\"%d\" name=\"%s\"/", Route::MIDI_DEVICE_ROUTE, name().latin1()); + */ + //xml.tag(level, "source devtype=\"%d\" name=\"%s\"/", MidiDevice::ALSA_MIDI, name().latin1()); + xml.tag(level, "source devtype=\"%d\" name=\"%s\"/", MidiDevice::ALSA_MIDI, Xml::xmlString(name()).latin1()); + + /* + //xml.strTag(level, "dstNode", r->name()); + if(r->channel != -1) + { + if(r->type == Route::MIDI_DEVICE_ROUTE) + xml.tag(level, "dest devtype=\"%d\" channel=\"%d\" name=\"%s\"/", r->device->deviceType(), r->channel, r->name().latin1()); + else + xml.tag(level, "dest type=\"%d\" channel=\"%d\" name=\"%s\"/", r->type, r->channel, r->name().latin1()); + } + else + { + if(r->type == Route::MIDI_DEVICE_ROUTE) + xml.tag(level, "dest devtype=\"%d\" name=\"%s\"/", r->device->deviceType(), r->name().latin1()); + else + xml.tag(level, "dest type=\"%d\" name=\"%s\"/", r->type, r->name().latin1()); + } + */ + + s = QT_TR_NOOP("dest"); + if(r->type == Route::MIDI_DEVICE_ROUTE) + s += QString(QT_TR_NOOP(" devtype=\"%1\"")).arg(r->device->deviceType()); + else + if(r->type != Route::TRACK_ROUTE) + s += QString(QT_TR_NOOP(" type=\"%1\"")).arg(r->type); + //s += QString(QT_TR_NOOP(" name=\"%1\"/")).arg(r->name()); + s += QString(QT_TR_NOOP(" name=\"%1\"/")).arg(Xml::xmlString(r->name())); + xml.tag(level, s); + + xml.etag(level--, "Route"); + } + } +} + +//--------------------------------------------------------- +// putEvent +//--------------------------------------------------------- + +bool MidiAlsaDevice::putMidiEvent(const MidiPlayEvent& e) + { + if (midiOutputTrace) { + printf("MidiOut: midiAlsa: "); + e.dump(); + } + int chn = e.channel(); + int a = e.dataA(); + int b = e.dataB(); + + snd_seq_event_t event; + memset(&event, 0, sizeof(event)); + event.queue = SND_SEQ_QUEUE_DIRECT; + event.source = musePort; + event.dest = adr; + + switch(e.type()) { + case ME_NOTEON: + snd_seq_ev_set_noteon(&event, chn, a, b); + break; + case ME_NOTEOFF: + snd_seq_ev_set_noteoff(&event, chn, a, 0); + break; + case ME_PROGRAM: + snd_seq_ev_set_pgmchange(&event, chn, a); + break; + case ME_CONTROLLER: +#if 1 + snd_seq_ev_set_controller(&event, chn, a, b); +#else + { + int a = e.dataA(); + int b = e.dataB(); + int chn = e.channel(); + // p3.3.37 + //if (a < 0x1000) { // 7 Bit Controller + if (a < CTRL_14_OFFSET) { // 7 Bit Controller + snd_seq_ev_set_controller(&event, chn, a, b); + } + //else if (a < 0x20000) { // 14 bit high resolution controller + else if (a < CTRL_RPN_OFFSET) { // 14 bit high resolution controller + int ctrlH = (a >> 8) & 0x7f; + int ctrlL = a & 0x7f; + a = (ctrlH << 7) + ctrlL; + snd_seq_ev_set_controller(&event, chn, a, b); + event.type = SND_SEQ_EVENT_CONTROL14; + } + //else if (a < 0x30000) { // RPN 7-Bit Controller + else if (a < CTRL_NRPN_OFFSET) { // RPN 7-Bit Controller + int ctrlH = (a >> 8) & 0x7f; + int ctrlL = a & 0x7f; + a = (ctrlH << 7) + ctrlL; + b <<= 7; + snd_seq_ev_set_controller(&event, chn, a, b); + event.type = SND_SEQ_EVENT_REGPARAM; + } + //else if (a < 0x40000) { // NRPN 7-Bit Controller + else if (a < CTRL_INTERNAL_OFFSET) { // NRPN 7-Bit Controller + int ctrlH = (a >> 8) & 0x7f; + int ctrlL = a & 0x7f; + a = (ctrlH << 7) + ctrlL; + b <<= 7; + snd_seq_ev_set_controller(&event, chn, a, b); + event.type = SND_SEQ_EVENT_NONREGPARAM; + } + //else if (a < 0x60000) { // RPN14 Controller + else if (a < CTRL_NRPN14_OFFSET) { // RPN14 Controller + int ctrlH = (a >> 8) & 0x7f; + int ctrlL = a & 0x7f; + a = (ctrlH << 7) + ctrlL; + snd_seq_ev_set_controller(&event, chn, a, b); + event.type = SND_SEQ_EVENT_REGPARAM; + } + //else if (a < 0x70000) { // NRPN14 Controller + else if (a < CTRL_NONE_OFFSET) { // NRPN14 Controller + int ctrlH = (a >> 8) & 0x7f; + int ctrlL = a & 0x7f; + a = (ctrlH << 7) + ctrlL; + snd_seq_ev_set_controller(&event, chn, a, b); + event.type = SND_SEQ_EVENT_NONREGPARAM; + } + else { + printf("putEvent: unknown controller type 0x%x\n", a); + } + } +#endif + break; + case ME_PITCHBEND: + snd_seq_ev_set_pitchbend(&event, chn, a); + break; + case ME_POLYAFTER: + // chnEvent2(chn, 0xa0, a, b); + break; + case ME_AFTERTOUCH: + snd_seq_ev_set_chanpress(&event, chn, a); + break; + case ME_SYSEX: + { + const unsigned char* p = e.data(); + int n = e.len(); + int len = n + sizeof(event) + 2; + char buf[len]; + event.type = SND_SEQ_EVENT_SYSEX; + event.flags = SND_SEQ_EVENT_LENGTH_VARIABLE; + event.data.ext.len = n + 2; + event.data.ext.ptr = (void*)(buf + sizeof(event)); + memcpy(buf, &event, sizeof(event)); + char* pp = buf + sizeof(event); + *pp++ = 0xf0; + memcpy(pp, p, n); + pp += n; + *pp = 0xf7; + return putEvent(&event); + } + case ME_SONGPOS: + event.data.control.value = a; + event.type = SND_SEQ_EVENT_SONGPOS; + break; + case ME_CLOCK: + event.type = SND_SEQ_EVENT_CLOCK; + break; + case ME_START: + event.type = SND_SEQ_EVENT_START; + break; + case ME_CONTINUE: + event.type = SND_SEQ_EVENT_CONTINUE; + break; + case ME_STOP: + event.type = SND_SEQ_EVENT_STOP; + break; + default: + printf("MidiAlsaDevice::putEvent(): event type %d not implemented\n", + e.type()); + return true; + } + return putEvent(&event); + } + +//--------------------------------------------------------- +// putEvent +// return false if event is delivered +//--------------------------------------------------------- + +bool MidiAlsaDevice::putEvent(snd_seq_event_t* event) + { + int error; + + do { + error = snd_seq_event_output_direct(alsaSeq, event); + int len = snd_seq_event_length(event); + if (error == len) { +// printf(".");fflush(stdout); + return false; + } + if (error < 0) { + if (error == -12) { +// printf("?");fflush(stdout); + return true; + } + else { + fprintf(stderr, "MidiAlsaDevice::%p putEvent(): midi write error: %s\n", + this, snd_strerror(error)); + fprintf(stderr, " dst %d:%d\n", adr.client, adr.port); + //exit(-1); + } + } + else + fprintf(stderr, "MidiAlsaDevice::putEvent(): midi write returns %d, expected %d: %s\n", + error, len, snd_strerror(error)); + } while (error == -12); + return true; + } + +//--------------------------------------------------------- +// initMidiAlsa +// return true on error +//--------------------------------------------------------- + +bool initMidiAlsa() + { + if (debugMsg) + printf("initMidiAlsa\n"); + int error = snd_seq_open(&alsaSeq, "hw", SND_SEQ_OPEN_DUPLEX, SND_SEQ_NONBLOCK); + if (error < 0) { + fprintf(stderr, "Could not open ALSA sequencer: %s\n", + snd_strerror(error)); + return true; + } + const int inCap = SND_SEQ_PORT_CAP_SUBS_READ; + const int outCap = SND_SEQ_PORT_CAP_SUBS_WRITE; + + snd_seq_client_info_t *cinfo; + snd_seq_client_info_alloca(&cinfo); + snd_seq_client_info_set_client(cinfo, -1); + + while (snd_seq_query_next_client(alsaSeq, cinfo) >= 0) { + snd_seq_port_info_t *pinfo; + snd_seq_port_info_alloca(&pinfo); + snd_seq_port_info_set_client(pinfo, snd_seq_client_info_get_client(cinfo)); + snd_seq_port_info_set_port(pinfo, -1); + + while (snd_seq_query_next_port(alsaSeq, pinfo) >= 0) { + unsigned int capability = snd_seq_port_info_get_capability(pinfo); + if ((capability & outCap) == 0) { + const char *name = snd_seq_port_info_get_name(pinfo); + if (strcmp("Timer", name) == 0 || + strcmp("Announce", name) == 0 || + strcmp("Receiver", name) == 0) + continue; + } + snd_seq_addr_t adr = *snd_seq_port_info_get_addr(pinfo); + MidiAlsaDevice* dev = new MidiAlsaDevice(adr, QString(snd_seq_port_info_get_name(pinfo))); + int flags = 0; + if (capability & outCap) + flags |= 1; + if (capability & inCap) + flags |= 2; + dev->setrwFlags(flags); + if (debugMsg) + printf("ALSA port add: <%s>, %d:%d flags %d 0x%0x\n", + snd_seq_port_info_get_name(pinfo), + adr.client, adr.port, + flags, capability); + midiDevices.add(dev); + + /* + // Experimental... Need to list 'sensible' devices first and ignore unwanted ones... + // Add instance last in midi device list. + for(int i = 0; i < MIDI_PORTS; ++i) + { + MidiPort* mp = &midiPorts[i]; + if(mp->device() == 0) + { + // midiSeq might not be initialzed yet! + //midiSeq->msgSetMidiDevice(mp, dev); + mp->setMidiDevice(dev); + + //muse->changeConfig(true); // save configuration file + //update(); + break; + } + } + */ + + } + } + + // p3.3.38 + //snd_seq_set_client_name(alsaSeq, "MusE Sequencer"); + snd_seq_set_client_name(alsaSeq, audioDevice->clientName()); + + int ci = snd_seq_poll_descriptors_count(alsaSeq, POLLIN); + int co = snd_seq_poll_descriptors_count(alsaSeq, POLLOUT); + + if (ci > 1 || co > 1) { + printf("ALSA midi: cannot handle more than one poll fd\n"); + abort(); + } + + struct pollfd pfdi[ci]; + struct pollfd pfdo[co]; + snd_seq_poll_descriptors(alsaSeq, pfdi, ci, POLLIN); + snd_seq_poll_descriptors(alsaSeq, pfdo, co, POLLOUT); + alsaSeqFdo = pfdo[0].fd; + alsaSeqFdi = pfdi[0].fd; + + int port = snd_seq_create_simple_port(alsaSeq, "MusE Port 0", + inCap | outCap | SND_SEQ_PORT_CAP_READ | SND_SEQ_PORT_CAP_WRITE, + SND_SEQ_PORT_TYPE_APPLICATION); + if (port < 0) { + perror("create port"); + exit(1); + } + musePort.port = port; + musePort.client = snd_seq_client_id(alsaSeq); + + //----------------------------------------- + // subscribe to "Announce" + // this enables callbacks for any + // alsa port changes + //----------------------------------------- + + snd_seq_addr_t aadr; + aadr.client = SND_SEQ_CLIENT_SYSTEM; + aadr.port = SND_SEQ_PORT_SYSTEM_ANNOUNCE; + + snd_seq_port_subscribe_t* subs; + snd_seq_port_subscribe_alloca(&subs); + snd_seq_port_subscribe_set_dest(subs, &musePort); + snd_seq_port_subscribe_set_sender(subs, &aadr); + error = snd_seq_subscribe_port(alsaSeq, subs); + if (error < 0) { + printf("Alsa: Subscribe System failed: %s", snd_strerror(error)); + return true; + } + return false; + } + +struct AlsaPort { + snd_seq_addr_t adr; + char* name; + int flags; + AlsaPort(snd_seq_addr_t a, const char* s, int f) { + adr = a; + name = strdup(s); + flags = f; + } + }; + +static std::list portList; + +//--------------------------------------------------------- +// alsaScanMidiPorts +//--------------------------------------------------------- + +void alsaScanMidiPorts() + { +// printf("alsa scan midi ports\n"); + const int inCap = SND_SEQ_PORT_CAP_SUBS_READ; + const int outCap = SND_SEQ_PORT_CAP_SUBS_WRITE; + + portList.clear(); + + snd_seq_client_info_t* cinfo; + snd_seq_client_info_alloca(&cinfo); + snd_seq_client_info_set_client(cinfo, 0); + + while (snd_seq_query_next_client(alsaSeq, cinfo) >= 0) { + snd_seq_port_info_t *pinfo; + snd_seq_port_info_alloca(&pinfo); + snd_seq_port_info_set_client(pinfo, snd_seq_client_info_get_client(cinfo)); + snd_seq_port_info_set_port(pinfo, -1); + while (snd_seq_query_next_port(alsaSeq, pinfo) >= 0) { + unsigned int capability = snd_seq_port_info_get_capability(pinfo); + if (((capability & outCap) == 0) + && ((capability & inCap) == 0)) + continue; + snd_seq_addr_t adr; + const char* name; + adr = *snd_seq_port_info_get_addr(pinfo); + name = snd_seq_port_info_get_name(pinfo); + if (adr.client == musePort.client && adr.port == musePort.port) + continue; + int flags = 0; + if (capability & outCap) + flags |= 1; + if (capability & inCap) + flags |= 2; +// printf("ALSA port add: <%s>, flags %d\n", name, flags); + portList.push_back(AlsaPort(adr, name, flags)); + } + } + // + // check for devices to delete + // + for (iMidiDevice i = midiDevices.begin(); i != midiDevices.end();) { + MidiAlsaDevice* d = dynamic_cast(*i); + if (d == 0) { + ++i; + continue; + } + std::list::iterator k = portList.begin(); + for (; k != portList.end(); ++k) { + if (k->adr.client == d->adr.client + && k->adr.port == d->adr.port) { + break; + } + } + if (k == portList.end()) { + if (d->midiPort() != -1) + midiPorts[d->midiPort()].setMidiDevice(0); + iMidiDevice k = i; +// printf("erase device\n"); + ++i; + midiDevices.erase(k); + } + else { + ++i; + } + } + // + // check for devices to add + // + for (std::list::iterator k = portList.begin(); k != portList.end(); ++k) { + iMidiDevice i = midiDevices.begin(); +// printf("ALSA port: <%s>\n", k->name); + for (;i != midiDevices.end(); ++i) { + MidiAlsaDevice* d = dynamic_cast(*i); + if (d == 0) + continue; + if ((k->adr.client == d->adr.client) && (k->adr.port == d->adr.port)) { + break; + } + } + if (i == midiDevices.end()) { + // add device + MidiAlsaDevice* dev = new MidiAlsaDevice(k->adr, + QString(k->name)); + dev->setrwFlags(k->flags); + midiDevices.add(dev); +// printf("add device\n"); + } + } + } + +//--------------------------------------------------------- +// alsaSelectRfd +//--------------------------------------------------------- + +int alsaSelectRfd() + { + return alsaSeqFdi; + } + +//--------------------------------------------------------- +// alsaSelectWfd +//--------------------------------------------------------- + +int alsaSelectWfd() + { + return alsaSeqFdo; + } + +//--------------------------------------------------------- +// processInput +//--------------------------------------------------------- + +void alsaProcessMidiInput() +{ + MidiRecordEvent event; + snd_seq_event_t* ev; + + for (;;) + { + int rv = snd_seq_event_input(alsaSeq, &ev); +// printf("AlsaInput %d\n", rv); + if (rv < 0) { +// printf("AlsaMidi: read error %s\n", snd_strerror(rv)); + return; + } + switch(ev->type) { + case SND_SEQ_EVENT_PORT_SUBSCRIBED: + case SND_SEQ_EVENT_PORT_UNSUBSCRIBED: + return; + case SND_SEQ_EVENT_CLIENT_START: + case SND_SEQ_EVENT_CLIENT_EXIT: + // return; + // on first start of a software synthesizer we only + // get CLIENT_START event and no PORT_START, why? + + case SND_SEQ_EVENT_PORT_START: + case SND_SEQ_EVENT_PORT_EXIT: + alsaScanMidiPorts(); + audio->midiPortsChanged(); // signal gui + snd_seq_free_event(ev); + return; + } + + int curPort = -1; + MidiAlsaDevice* mdev = 0; + // + // find real source device + // + for (iMidiDevice i = midiDevices.begin(); i != midiDevices.end(); ++i) { + MidiAlsaDevice* d = dynamic_cast(*i); + if (d && d->adr.client == ev->source.client + && d->adr.port == ev->source.port) { + curPort = d->midiPort(); + mdev = d; + } + } + + if (mdev == 0 || curPort == -1) { + if (debugMsg) { + fprintf(stderr, "no port %d:%d found for received alsa event\n", + ev->source.client, ev->source.port); + } + snd_seq_free_event(ev); + return; + } + + /* + if(curPort == -1) + { + if(mdev == 0) + { + if (debugMsg) + { + fprintf(stderr, "no port %d:%d found for received alsa event\n", + ev->source.client, ev->source.port); + } + } + else + { + // Allow the sync detect mechanisms to work, even if device is not assigned to a port. + if(ev->type == SND_SEQ_EVENT_CLOCK) + mdev->syncInfo().trigMCSyncDetect(); + else + if(ev->type == SND_SEQ_EVENT_TICK) + mdev->syncInfo().trigTickDetect(); + } + snd_seq_free_event(ev); + return; + } + */ + + event.setType(0); // mark as unused + event.setPort(curPort); + event.setB(0); + + switch(ev->type) + { + case SND_SEQ_EVENT_NOTEON: + case SND_SEQ_EVENT_KEYPRESS: + event.setChannel(ev->data.note.channel); + event.setType(ME_NOTEON); + event.setA(ev->data.note.note); + event.setB(ev->data.note.velocity); + break; + + case SND_SEQ_EVENT_NOTEOFF: + event.setChannel(ev->data.note.channel); + event.setType(ME_NOTEOFF); + event.setA(ev->data.note.note); + event.setB(ev->data.note.velocity); + break; + + case SND_SEQ_EVENT_CHANPRESS: + event.setChannel(ev->data.control.channel); + event.setType(ME_AFTERTOUCH); + event.setA(ev->data.control.value); + break; + + case SND_SEQ_EVENT_PGMCHANGE: + event.setChannel(ev->data.control.channel); + event.setType(ME_PROGRAM); + event.setA(ev->data.control.value); + break; + + case SND_SEQ_EVENT_PITCHBEND: + event.setChannel(ev->data.control.channel); + event.setType(ME_PITCHBEND); + event.setA(ev->data.control.value); + break; + + case SND_SEQ_EVENT_CONTROLLER: + event.setChannel(ev->data.control.channel); + event.setType(ME_CONTROLLER); + event.setA(ev->data.control.param); + event.setB(ev->data.control.value); + break; + + case SND_SEQ_EVENT_CLOCK: + midiSeq->realtimeSystemInput(curPort, ME_CLOCK); + //mdev->syncInfo().trigMCSyncDetect(); + break; + + case SND_SEQ_EVENT_START: + midiSeq->realtimeSystemInput(curPort, ME_START); + break; + + case SND_SEQ_EVENT_CONTINUE: + midiSeq->realtimeSystemInput(curPort, ME_CONTINUE); + break; + + case SND_SEQ_EVENT_STOP: + midiSeq->realtimeSystemInput(curPort, ME_STOP); + break; + + case SND_SEQ_EVENT_TICK: + midiSeq->realtimeSystemInput(curPort, ME_TICK); + //mdev->syncInfo().trigTickDetect(); + break; + + case SND_SEQ_EVENT_SYSEX: + + // TODO: Deal with large sysex, which are broken up into chunks! + // For now, do not accept if the first byte is not SYSEX or the last byte is not EOX, + // meaning it's a chunk, possibly with more chunks to follow. + if((*((unsigned char*)ev->data.ext.ptr) != ME_SYSEX) || + (*(((unsigned char*)ev->data.ext.ptr) + ev->data.ext.len - 1) != ME_SYSEX_END)) + { + printf("MusE: alsaProcessMidiInput sysex chunks not supported!\n"); + break; + } + + event.setTime(0); // mark as used + event.setType(ME_SYSEX); + event.setData((unsigned char*)(ev->data.ext.ptr)+1, + ev->data.ext.len-2); + break; + case SND_SEQ_EVENT_PORT_SUBSCRIBED: + case SND_SEQ_EVENT_PORT_UNSUBSCRIBED: // write port is released + break; + case SND_SEQ_EVENT_SONGPOS: + midiSeq->setSongPosition(curPort, ev->data.control.value); + break; + case SND_SEQ_EVENT_SENSING: + break; + case SND_SEQ_EVENT_QFRAME: + midiSeq->mtcInputQuarter(curPort, ev->data.control.value); + break; + // case SND_SEQ_EVENT_CLIENT_START: + // case SND_SEQ_EVENT_CLIENT_EXIT: + // case SND_SEQ_EVENT_CLIENT_CHANGE: + // case SND_SEQ_EVENT_PORT_CHANGE: + // case SND_SEQ_EVENT_SONGSEL: + // case SND_SEQ_EVENT_TIMESIGN: + // case SND_SEQ_EVENT_KEYSIGN: + // case SND_SEQ_EVENT_SETPOS_TICK: + // case SND_SEQ_EVENT_SETPOS_TIME: + // case SND_SEQ_EVENT_TEMPO: + // case SND_SEQ_EVENT_TUNE_REQUEST: + // case SND_SEQ_EVENT_RESET: + + // case SND_SEQ_EVENT_NOTE: + // case SND_SEQ_EVENT_CONTROL14: + // case SND_SEQ_EVENT_NONREGPARAM: + // case SND_SEQ_EVENT_REGPARAM: + default: + printf("ALSA Midi input: type %d not handled\n", ev->type); + break; + } + if(event.type()) + { + mdev->recordEvent(event); + // p3.3.26 1/23/10 Moved to MidiDevice now. Anticipating Jack midi support, so don't make it ALSA specific. Tim. + //if(ev->type != SND_SEQ_EVENT_SYSEX) + // Trigger general activity indicator detector. Sysex has no channel, don't trigger. + // midiPorts[curPort].syncInfo().trigActDetect(event.channel()); + } + + snd_seq_free_event(ev); + if (rv == 0) + break; + } +} + diff --git a/muse2/muse/driver/alsamidi.h b/muse2/muse/driver/alsamidi.h new file mode 100644 index 00000000..6c19ff0d --- /dev/null +++ b/muse2/muse/driver/alsamidi.h @@ -0,0 +1,53 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: alsamidi.h,v 1.2 2004/01/14 09:06:43 wschweer Exp $ +// (C) Copyright 2001 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __ALSAMIDI_H__ +#define __ALSAMIDI_H__ + +#include +#include + +#include "mididev.h" + +class Xml; + +//--------------------------------------------------------- +// MidiAlsaDevice +//--------------------------------------------------------- + +class MidiAlsaDevice : public MidiDevice { + public: + snd_seq_addr_t adr; + + private: + virtual QString open(); + virtual void close(); + virtual void processInput() {} + virtual int selectRfd() { return -1; } + virtual int selectWfd(); + + bool putEvent(snd_seq_event_t*); + virtual bool putMidiEvent(const MidiPlayEvent&); + + public: + MidiAlsaDevice() {} + MidiAlsaDevice(const snd_seq_addr_t&, const QString& name); + virtual ~MidiAlsaDevice() {} + virtual void* clientPort() { return (void*)&adr; } + virtual void writeRouting(int, Xml&) const; + virtual inline int deviceType() { return ALSA_MIDI; } + }; + +extern bool initMidiAlsa(); +extern int alsaSelectRfd(); +extern int alsaSelectWfd(); +extern void alsaProcessMidiInput(); +extern void alsaScanMidiPorts(); + +#endif + + diff --git a/muse2/muse/driver/alsatimer.cpp b/muse2/muse/driver/alsatimer.cpp new file mode 100644 index 00000000..d851410d --- /dev/null +++ b/muse2/muse/driver/alsatimer.cpp @@ -0,0 +1,225 @@ + //========================================================= + // MusE + // Linux Music Editor + // $Id: alsatimer.cpp,v 1.1.2.9 2009/03/28 01:46:10 terminator356 Exp $ + // + // Plenty of code borrowed from timer.c example in + // alsalib 1.0.7 + // + // (C) Copyright 2004 Robert Jonsson (rj@spamatica.se) + //========================================================= + + #include "alsatimer.h" + #include + +#define TIMER_DEBUG 0 + + AlsaTimer::AlsaTimer() + { + if(TIMER_DEBUG) + fprintf(stderr,"AlsaTimer::AlsaTimer(this=%p) called\n",this); + handle = NULL; + id = NULL; + info = NULL; + params = NULL; + findBest = true; + } + + AlsaTimer::~AlsaTimer() + { + if(TIMER_DEBUG) + fprintf(stderr,"AlsaTimer::~AlsaTimer(this=%p) called\n",this); + if (handle) + snd_timer_close(handle); + if (id) snd_timer_id_free(id); + if (info) snd_timer_info_free(info); + if (params) snd_timer_params_free(params); + } + + signed int AlsaTimer::initTimer() + { + if(TIMER_DEBUG) + printf("AlsaTimer::initTimer(this=%p)\n",this); + + int err; + int devclass = SND_TIMER_CLASS_GLOBAL; + int sclass = SND_TIMER_CLASS_NONE; + int card = 0; + int device = SND_TIMER_GLOBAL_SYSTEM; + int subdevice = 0; + int test_ids[] = { SND_TIMER_GLOBAL_SYSTEM + , SND_TIMER_GLOBAL_RTC +#ifdef SND_TIMER_GLOBAL_HPET + , SND_TIMER_GLOBAL_HPET +#endif + }; + int max_ids = sizeof(test_ids) / sizeof(int); + long best_res = LONG_MAX; + //int best_dev = -1; // SND_TIMER_GLOBAL_SYSTEM; + int best_dev = SND_TIMER_GLOBAL_SYSTEM; // p3.3.51 + int i; + + if (id || info || params) { + fprintf(stderr,"AlsaTimer::initTimer(): called on initialised timer!\n"); + return fds->fd; + } + snd_timer_id_malloc(&id); + snd_timer_info_malloc(&info); + snd_timer_params_malloc(¶ms); + + if (findBest) { + for (i = 0; i < max_ids; ++i) { + device = test_ids[i]; + sprintf(timername, "hw:CLASS=%i,SCLASS=%i,CARD=%i,DEV=%i,SUBDEV=%i", devclass, sclass, card, device, subdevice); + if ((err = snd_timer_open(&handle, timername, SND_TIMER_OPEN_NONBLOCK)) < 0) { + continue; + } + if ((err = snd_timer_info(handle, info)) < 0) { + snd_timer_close(handle); + continue; + } + // select a non slave timer with the lowest resolution value + int is_slave = snd_timer_info_is_slave(info); + long res = snd_timer_info_get_resolution(info); + if ((is_slave == 0) && (best_res > res)) { + best_res = res; + best_dev = device; + } + snd_timer_close(handle); + } + device = best_dev; + } + + // p3.3.51 Removed. + //if(best_dev==-1) + // return -1; // no working timer found + + sprintf(timername, "hw:CLASS=%i,SCLASS=%i,CARD=%i,DEV=%i,SUBDEV=%i", devclass, sclass, card, device, subdevice); + if ((err = snd_timer_open(&handle, timername, SND_TIMER_OPEN_NONBLOCK))<0) { + fprintf(stderr, "AlsaTimer::initTimer(): timer open %i (%s)\n", err, snd_strerror(err)); + return -1; // p3.3.51 + } + + if ((err = snd_timer_info(handle, info)) < 0) { + fprintf(stderr, "AlsaTimer::initTimer(): timer info %i (%s)\n", err, snd_strerror(err)); + return -1; + } + + //if(debugMsg) + fprintf(stderr, "AlsaTimer::initTimer(): best available ALSA timer: %s\n", snd_timer_info_get_name(info)); + + snd_timer_params_set_auto_start(params, 1); + snd_timer_params_set_ticks(params, 1); + + if ((err = snd_timer_params(handle, params)) < 0) { + fprintf(stderr, "AlsaTimer::initTimer(): timer params %i (%s)\n", err, snd_strerror(err)); + return -1; + } + + count = snd_timer_poll_descriptors_count(handle); + fds = (pollfd *)calloc(count, sizeof(pollfd)); + if (fds == NULL) { + fprintf(stderr, "AlsaTimer::initTimer(): malloc error\n"); + return -1; + } + if ((err = snd_timer_poll_descriptors(handle, fds, count)) < 0) { + fprintf(stderr, "AlsaTimer::initTimer(): snd_timer_poll_descriptors error: %s\n", snd_strerror(err)); + return -1; + } + return fds->fd; + } + + unsigned int AlsaTimer::setTimerResolution(unsigned int resolution) + { + if(TIMER_DEBUG) + printf("AlsaTimer::setTimerResolution(%d)\n",resolution); + /* Resolution of an AlsaTimer is fixed - it cannot be set */ + return 0; + } + + unsigned int AlsaTimer::setTimerFreq(unsigned int freq) + { + signed int err; + unsigned int setTick, actFreq; + + if(TIMER_DEBUG) + printf("AlsaTimer::setTimerFreq(this=%p)\n",this); + + setTick = (1000000000 / snd_timer_info_get_resolution(info)) / freq; + + if (setTick == 0) { + // return, print error if freq is below 500 (timing will suffer) + if (((1000000000.0 / snd_timer_info_get_resolution(info)) / snd_timer_params_get_ticks(params)) < 500) { + fprintf(stderr,"AlsaTimer::setTimerTicks(): requested freq %u Hz too high for timer (max is %g)\n", + freq, 1000000000.0 / snd_timer_info_get_resolution(info)); + fprintf(stderr," freq stays at %ld Hz\n", + (long int)((1000000000.0 / snd_timer_info_get_resolution(info)) / snd_timer_params_get_ticks(params))); + } + + return 0; + } + actFreq = (1000000000 / snd_timer_info_get_resolution(info)) / setTick; + if (actFreq != freq) { + fprintf(stderr,"AlsaTimer::setTimerTicks(): warning: requested %u Hz, actual freq is %u Hz\n", + freq, actFreq); + } + if(TIMER_DEBUG) + printf("AlsaTimer::setTimerFreq(): Setting ticks (period) to %d ticks\n", setTick); + snd_timer_params_set_auto_start(params, 1); + snd_timer_params_set_ticks(params, setTick); + if ((err = snd_timer_params(handle, params)) < 0) { + fprintf(stderr, "AlsaTimer::setTimerFreq(): timer params %i (%s)\n", err, snd_strerror(err)); + return 0; + } + + return actFreq; + } + + unsigned int AlsaTimer::getTimerResolution() + { + return snd_timer_info_get_resolution(info); + } + + unsigned int AlsaTimer::getTimerFreq() + { + return (1000000000 / snd_timer_info_get_resolution(info)) / snd_timer_params_get_ticks(params); + } + + bool AlsaTimer::startTimer() + { + if(TIMER_DEBUG) + printf("AlsaTimer::startTimer(this=%p): handle=%p\n",this,handle); + int err; + if ((err = snd_timer_start(handle)) < 0) { + fprintf(stderr, "AlsaTimer::startTimer(): timer start %i (%s)\n", err, snd_strerror(err)); + return false; + } + return true; + } + + bool AlsaTimer::stopTimer() + { + int err; + if(TIMER_DEBUG) + printf("AlsaTimer::stopTimer(this=%p): handle=%p\n",this,handle); + if ((err = snd_timer_stop(handle)) < 0) { + fprintf(stderr, "AlsaTimer::stopTimer(): timer stop %i (%s)\n", err, snd_strerror(err)); + return false; + } + return true; + } + + unsigned int AlsaTimer::getTimerTicks(bool printTicks) + { + //if(TIMER_DEBUG) + // printf("AlsaTimer::getTimerTicks\n"); + snd_timer_read_t tr; + tr.ticks = 0; + while (snd_timer_read(handle, &tr, sizeof(tr)) == sizeof(tr)) { + if (printTicks) { + printf("TIMER: resolution = %uns, ticks = %u\n", + tr.resolution, tr.ticks); + } + } + return tr.ticks; + } diff --git a/muse2/muse/driver/alsatimer.h b/muse2/muse/driver/alsatimer.h new file mode 100644 index 00000000..211ba5ec --- /dev/null +++ b/muse2/muse/driver/alsatimer.h @@ -0,0 +1,52 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: alsatimer.h,v 1.1.2.4 2009/03/09 02:05:18 terminator356 Exp $ +// +// Plenty of code borrowed from timer.c example in +// alsalib 1.0.7 +// +// (C) Copyright 2004 Robert Jonsson (rj@spamatica.se) +//========================================================= + +#ifndef __ALSATIMER_H__ +#define __ALSATIMER_H__ + +#include "alsa/asoundlib.h" +#include "timerdev.h" + + +//--------------------------------------------------------- +// AlsaTimer +//--------------------------------------------------------- + +class AlsaTimer : public Timer{ + + snd_timer_t *handle; + snd_timer_id_t *id; + snd_timer_info_t *info; + snd_timer_params_t *params; + struct pollfd *fds; + char timername[64]; + signed int count; + unsigned int ticks; + bool findBest; + + public: + AlsaTimer(); + virtual ~AlsaTimer(); + + virtual signed int initTimer(); + virtual unsigned int setTimerResolution(unsigned int resolution); + virtual unsigned int getTimerResolution(); + virtual unsigned int setTimerFreq(unsigned int freq); + virtual unsigned int getTimerFreq(); + + virtual bool startTimer(); + virtual bool stopTimer(); + virtual unsigned int getTimerTicks(bool printTicks=false); + + void setFindBestTimer(bool b) { findBest = b; } +}; + +#endif //__ALSATIMER_H__ diff --git a/muse2/muse/driver/audiodev.h b/muse2/muse/driver/audiodev.h new file mode 100644 index 00000000..39ff822e --- /dev/null +++ b/muse2/muse/driver/audiodev.h @@ -0,0 +1,74 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: audiodev.h,v 1.5.2.2 2009/12/20 05:00:35 terminator356 Exp $ +// +// (C) Copyright 1999/2000 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __AUDIODEV_H__ +#define __AUDIODEV_H__ + +#include +#include + +class MidiPlayEvent; + +//--------------------------------------------------------- +// AudioDevice +//--------------------------------------------------------- + +class AudioDevice { + + public: + enum { DUMMY_AUDIO=0, JACK_AUDIO=1 }; // p3.3.52 + + AudioDevice() {} + virtual ~AudioDevice() {} + + virtual int deviceType() = 0; // p3.3.52 + + //virtual void start() = 0; + virtual void start(int priority) = 0; + + virtual void stop () = 0; + virtual int framePos() const = 0; + virtual unsigned frameTime() const = 0; + + virtual float* getBuffer(void* port, unsigned long nframes) = 0; + + virtual std::list outputPorts(bool midi = false, int aliases = -1) = 0; + virtual std::list inputPorts(bool midi = false, int aliases = -1) = 0; + + virtual void registerClient() = 0; + + virtual const char* clientName() = 0; + + //virtual void* registerOutPort(const char* name) = 0; + //virtual void* registerInPort(const char* name) = 0; + virtual void* registerOutPort(const char* /*name*/, bool /*midi*/) = 0; + virtual void* registerInPort(const char* /*name*/, bool /*midi*/) = 0; + + virtual void unregisterPort(void*) = 0; + virtual void connect(void*, void*) = 0; + virtual void disconnect(void*, void*) = 0; + virtual int connections(void* /*clientPort*/) = 0; + virtual void setPortName(void* p, const char* n) = 0; + virtual void* findPort(const char* name) = 0; + virtual QString portName(void* port) = 0; + virtual int getState() = 0; + virtual unsigned getCurFrame() = 0; + virtual bool isRealtime() = 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 seekTransport(const Pos &p) = 0; + virtual void setFreewheel(bool f) = 0; + virtual void graphChanged() {} + virtual void registrationChanged() {} + virtual int setMaster(bool f) = 0; + }; + +#endif + diff --git a/muse2/muse/driver/dummyaudio.cpp b/muse2/muse/driver/dummyaudio.cpp new file mode 100644 index 00000000..a17a99e7 --- /dev/null +++ b/muse2/muse/driver/dummyaudio.cpp @@ -0,0 +1,454 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: dummyaudio.cpp,v 1.3.2.16 2009/12/20 05:00:35 terminator356 Exp $ +// (C) Copyright 2002-2003 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "config.h" +#include "audio.h" +#include "audiodev.h" +#include "globals.h" +#include "song.h" +#include "driver/alsatimer.h" +#include "pos.h" +#include "gconfig.h" +#include "utils.h" + +class MidiPlayEvent; + +#define DEBUG_DUMMY 0 +//--------------------------------------------------------- +// DummyAudioDevice +//--------------------------------------------------------- + +//static const unsigned dummyFrames = 1024; + +enum Cmd { +trSeek, +trStart, +trStop +}; + +struct Msg { + enum Cmd cmd; + int arg; +}; + + +class DummyAudioDevice : public AudioDevice { + pthread_t dummyThread; + // Changed by Tim. p3.3.15 + //float buffer[1024]; + float* buffer; + int _realTimePriority; + + public: + std::list cmdQueue; + Audio::State state; + int _framePos; + int playPos; + bool realtimeFlag; + + DummyAudioDevice(); + virtual ~DummyAudioDevice() + { + // Added by Tim. p3.3.15 + free(buffer); + } + + virtual inline int deviceType() { return DUMMY_AUDIO; } // p3.3.52 + + //virtual void start(); + virtual void start(int); + + virtual void stop (); + virtual int framePos() const { + if(DEBUG_DUMMY) + printf("DummyAudioDevice::framePos %d\n", _framePos); + return _framePos; + } + + virtual float* getBuffer(void* /*port*/, unsigned long nframes) + { + // p3.3.30 + //if (nframes > dummyFrames) { + //printf("error: segment size > 1024\n"); + if (nframes > segmentSize) { + printf("DummyAudioDevice::getBuffer nframes > segment size\n"); + + exit(-1); + } + return buffer; + } + + virtual std::list outputPorts(bool midi = false, int aliases = -1); + virtual std::list inputPorts(bool midi = false, int aliases = -1); + + virtual void registerClient() {} + + virtual const char* clientName() { return "MusE"; } + + //virtual void* registerOutPort(const char*) { + virtual void* registerOutPort(const char*, bool) { + return (void*)1; + } + //virtual void* registerInPort(const char*) { + virtual void* registerInPort(const char*, bool) { + return (void*)2; + } + virtual void unregisterPort(void*) {} + virtual void connect(void*, void*) {} + virtual void disconnect(void*, void*) {} + virtual int connections(void* /*clientPort*/) { return 0; } + virtual void setPortName(void*, const char*) {} + virtual void* findPort(const char*) { return 0;} + virtual QString portName(void*) { + return QString("mops"); + } + virtual int getState() { +// if(DEBUG_DUMMY) +// printf("DummyAudioDevice::getState %d\n", state); + + return state; } + virtual unsigned getCurFrame() { + if(DEBUG_DUMMY) + printf("DummyAudioDevice::getCurFrame %d\n", _framePos); + + return _framePos; } + virtual unsigned frameTime() const { + return lrint(curTime() * sampleRate); + } + virtual bool isRealtime() { return realtimeFlag; } + //virtual int realtimePriority() const { return 40; } + virtual int realtimePriority() const { return _realTimePriority; } + virtual void startTransport() { + if(DEBUG_DUMMY) + printf("DummyAudioDevice::startTransport playPos=%d\n", playPos); + Msg trcmd; + trcmd.cmd = trStart; + trcmd.arg = playPos; + cmdQueue.push_front(trcmd); +/* state = Audio::START_PLAY; + audio->sync(state, playPos); + state = Audio::PLAY;*/ + } + virtual void stopTransport() { + if(DEBUG_DUMMY) + printf("DummyAudioDevice::stopTransport, playPos=%d\n", playPos); + state = Audio::STOP; + } + virtual int setMaster(bool) { return 1; } + + virtual void seekTransport(const Pos &p) + { + if(DEBUG_DUMMY) + printf("DummyAudioDevice::seekTransport frame=%d topos=%d\n",playPos, p.frame()); + Msg trcmd; + trcmd.cmd = trSeek; + trcmd.arg = p.frame(); + cmdQueue.push_front(trcmd); + playPos = p.frame(); + } + virtual void seekTransport(unsigned pos) { + if(DEBUG_DUMMY) + printf("DummyAudioDevice::seekTransport frame=%d topos=%d\n",playPos,pos); + Msg trcmd; + trcmd.cmd = trSeek; + trcmd.arg = pos; + cmdQueue.push_front(trcmd); + playPos = pos; +/* + Audio::State tempState = state; + state = Audio::START_PLAY; + audio->sync(state, playPos); + state = tempState;*/ + } + virtual void setFreewheel(bool) {} + void setRealTime() { realtimeFlag = true; } + }; + +DummyAudioDevice* dummyAudio = 0; + +DummyAudioDevice::DummyAudioDevice() + { + // Added by Tim. p3.3.15 + // p3.3.30 + //posix_memalign((void**)&buffer, 16, sizeof(float) * dummyFrames); + posix_memalign((void**)&buffer, 16, sizeof(float) * config.dummyAudioBufSize); + + realtimeFlag = false; + state = Audio::STOP; + _framePos = 0; + playPos = 0; + cmdQueue.clear(); + } + +//--------------------------------------------------------- +// exitDummyAudio +//--------------------------------------------------------- + +void exitDummyAudio() +{ + if(dummyAudio) + delete dummyAudio; + dummyAudio = NULL; + audioDevice = NULL; +} + +//--------------------------------------------------------- +// initDummyAudio +//--------------------------------------------------------- + +bool initDummyAudio() + { + dummyAudio = new DummyAudioDevice(); + audioDevice = dummyAudio; + return false; + } + +//--------------------------------------------------------- +// outputPorts +//--------------------------------------------------------- + +std::list DummyAudioDevice::outputPorts(bool midi, int /*aliases*/) + { + std::list clientList; + if(!midi) + { + clientList.push_back(QString("output1")); + clientList.push_back(QString("output2")); + } + return clientList; + } + +//--------------------------------------------------------- +// inputPorts +//--------------------------------------------------------- + +std::list DummyAudioDevice::inputPorts(bool midi, int /*aliases*/) + { + std::list clientList; + if(!midi) + { + clientList.push_back(QString("input1")); + clientList.push_back(QString("input2")); + } + return clientList; + } + +//--------------------------------------------------------- +// dummyLoop +//--------------------------------------------------------- + +static void* dummyLoop(void* ptr) + { + //unsigned int tickRate = 25; + + // p3.3.30 + //sampleRate = 25600; + sampleRate = config.dummyAudioSampleRate; + //segmentSize = dummyFrames; + segmentSize = config.dummyAudioBufSize; + //unsigned int tickRate = sampleRate / dummyFrames; + unsigned int tickRate = sampleRate / segmentSize; + + AlsaTimer timer; + fprintf(stderr, "Get alsa timer for dummy driver:\n"); + timer.setFindBestTimer(false); + int fd = timer.initTimer(); + if (fd==-1) { + // QMessageBox::critical( 0, /*tr*/(QString("Failed to start timer for dummy audio driver!")), + // /*tr*/(QString("No functional timer was available.\n" + // "Alsa timer not available, check if module snd_timer is available and /dev/snd/timer is available"))); + fprintf(stderr, "Failed to start timer for dummy audio driver! No functional timer was available.\n" + "Alsa timer not available, check if module snd_timer is available and /dev/snd/timer is available\n"); + pthread_exit(0); + } + + /* Depending on nature of the timer, the requested tickRate might not + * be available. The return value is the nearest available frequency, + * so use this to reset our dummpy sampleRate to keep everything + * consistent. + */ + tickRate = timer.setTimerFreq( /*250*/ tickRate ); + + // p3.3.31 + // If it didn't work, get the actual rate. + if(tickRate == 0) + tickRate = timer.getTimerFreq(); + + sampleRate = tickRate * segmentSize; + timer.startTimer(); + + DummyAudioDevice *drvPtr = (DummyAudioDevice *)ptr; + + pollfd myPollFd; + + myPollFd.fd = fd; + myPollFd.events = POLLIN; + + /* + doSetuid(); + struct sched_param rt_param; + int rv; + memset(&rt_param, 0, sizeof(sched_param)); + int type; + rv = pthread_getschedparam(pthread_self(), &type, &rt_param); + if (rv != 0) + perror("get scheduler parameter"); + if (type != SCHED_FIFO) { + fprintf(stderr, "Driver thread not running SCHED_FIFO, trying to set...\n"); + + memset(&rt_param, 0, sizeof(sched_param)); + //rt_param.sched_priority = 1; + rt_param.sched_priority = realtimePriority(); + rv = pthread_setschedparam(pthread_self(), SCHED_FIFO, &rt_param); + if (rv != 0) + perror("set realtime scheduler"); + memset(&rt_param, 0, sizeof(sched_param)); + rv = pthread_getschedparam(pthread_self(), &type, &rt_param); + if (rv != 0) + perror("get scheduler parameter"); + if (type == SCHED_FIFO) { + drvPtr->setRealTime(); + fprintf(stderr, "Thread succesfully set to SCHED_FIFO\n"); + } + else { + fprintf(stderr, "Unable to set thread to SCHED_FIFO\n"); + } + } + undoSetuid(); + */ + +#ifndef __APPLE__ + doSetuid(); + //if (realTimePriority) { + if (realTimeScheduling) { + // + // 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); + } + } + } + undoSetuid(); +#endif + + /* unsigned long tick = 0;*/ // prevent compiler warning: unused variable + for (;;) { + int _pollWait = 10; // ms + unsigned long count = 0; + while (count < 1 /*250/tickRate*/) // will loop until the next tick occurs + { + /*int n = */ poll(&myPollFd, 1 /* npfd */, _pollWait); + count += timer.getTimerTicks(); + while (drvPtr->cmdQueue.size()) + { + Msg &msg = drvPtr->cmdQueue.back(); + drvPtr->cmdQueue.pop_back(); + switch(msg.cmd) { + case trSeek: + { + //printf("trSeek\n"); + drvPtr->playPos = msg.arg; + Audio::State tempState = drvPtr->state; + drvPtr->state = Audio::START_PLAY; + audio->sync(drvPtr->state, msg.arg); + drvPtr->state = tempState; + } + break; + case trStart: + { + //printf("trStart\n"); + drvPtr->state = Audio::START_PLAY; + audio->sync(drvPtr->state, msg.arg); + drvPtr->state = Audio::PLAY; + } + break; + case trStop: + break; + default: + printf("dummyLoop: Unknown command!\n"); + } + } + } + audio->process(segmentSize); + int increment = segmentSize; // 1 //tickRate / sampleRate * segmentSize; + drvPtr->_framePos+=increment; + if (drvPtr->state == Audio::PLAY) + { + drvPtr->playPos+=increment; + } + } + timer.stopTimer(); + pthread_exit(0); + } + +//void DummyAudioDevice::start() +void DummyAudioDevice::start(int priority) + { + //realTimePriority = priority; + _realTimePriority = priority; + pthread_attr_t* attributes = 0; + + //if (priority) { + if (realTimeScheduling && priority > 0) { + 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)); + } + } + + //pthread_attr_t* attributes = (pthread_attr_t*) malloc(sizeof(pthread_attr_t)); + //pthread_attr_init(attributes); + if (pthread_create(&dummyThread, attributes, ::dummyLoop, this)) + perror("creating thread failed:"); + if (priority) + pthread_attr_destroy(attributes); + } + +void DummyAudioDevice::stop () + { + pthread_cancel(dummyThread); + pthread_join(dummyThread, 0); + dummyThread = 0; + } + diff --git a/muse2/muse/driver/jack.cpp b/muse2/muse/driver/jack.cpp new file mode 100644 index 00000000..2c5081fc --- /dev/null +++ b/muse2/muse/driver/jack.cpp @@ -0,0 +1,2173 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: jack.cpp,v 1.30.2.17 2009/12/20 05:00:35 terminator356 Exp $ +// (C) Copyright 2002 Werner Schweer (ws@seh.de) +//========================================================= + +#include "config.h" +#include +#include +#include +#include +#include +#include +//#include +#include +#include +#include + +#include "audio.h" +#include "globals.h" +#include "song.h" +#include "jackaudio.h" +#include "track.h" +#include "pos.h" +#include "tempo.h" +#include "sync.h" +#include "utils.h" + +#include "midi.h" +#include "mididev.h" +#include "mpevent.h" + +#include "jackmidi.h" + + +#define JACK_DEBUG 0 + +//#include "errorhandler.h" + +#ifndef RTCAP +extern void doSetuid(); +extern void undoSetuid(); +#endif + +#ifdef VST_SUPPORT +#include +#endif + +//extern int jackmidi_pi[2]; +//extern int jackmidi_po[2]; + +//jack_port_t *midi_port_in[JACK_MIDI_CHANNELS]; +//jack_port_t *midi_port_out[JACK_MIDI_CHANNELS]; + +//muse_jack_midi_buffer jack_midi_out_data[JACK_MIDI_CHANNELS]; +//muse_jack_midi_buffer jack_midi_in_data[JACK_MIDI_CHANNELS]; + +JackAudioDevice* jackAudio; + +//--------------------------------------------------------- +// checkJackClient - make sure client is valid +//--------------------------------------------------------- +inline bool checkJackClient(jack_client_t* _client) + { + if (_client == NULL) { + printf("Panic! no _client!\n"); + return false; + } + return true; + } +//--------------------------------------------------------- +// checkAudioDevice - make sure audioDevice exists +//--------------------------------------------------------- +bool checkAudioDevice() + { + if (audioDevice == NULL) { + printf("Muse:checkAudioDevice: no audioDevice\n"); + return false; + } + return true; + } + + +//--------------------------------------------------------- +// jack_thread_init +//--------------------------------------------------------- + +static void jack_thread_init (void* ) // data + { + doSetuid(); + /* + if (jackAudio->isRealtime()) { + struct sched_param rt_param; + int rv; + memset(&rt_param, 0, sizeof(sched_param)); + int type; + rv = pthread_getschedparam(pthread_self(), &type, &rt_param); + if (rv != 0) + perror("get scheduler parameter"); + if (type != SCHED_FIFO) { + fprintf(stderr, "JACK thread not running SCHED_FIFO, try to set...\n"); + + memset(&rt_param, 0, sizeof(sched_param)); + rt_param.sched_priority = 1; + rv = pthread_setschedparam(pthread_self(), SCHED_FIFO, &rt_param); + if (rv != 0) + perror("set realtime scheduler"); + memset(&rt_param, 0, sizeof(sched_param)); + rv = pthread_getschedparam(pthread_self(), &type, &rt_param); + if (rv != 0) + perror("get scheduler parameter"); + if (type != SCHED_FIFO) + fprintf(stderr, "JACK still not running FIFO !?!\n" + "======reliable RT operation not possible!!======\n"); + else + fprintf(stderr, "JACK thread succesfully set to SCHED_FIFO\n"); + } + } + */ +#ifdef VST_SUPPORT + if (loadVST) + fst_adopt_thread(); +#endif + undoSetuid(); + } + +/* +//--------------------------------------------------------- +// processAudio + Midi +// JACK callback +//--------------------------------------------------------- +void +print_triplet(unsigned char *data) +{ + int a,b,c; + a = b = c = 0; + memcpy(&a, data, 1); + memcpy(&b, data+1, 1); + memcpy(&c, data+2, 1); + fprintf(stderr, "%x,%x,%x", a, b, c); +} +*/ + +/* +void handle_jack_midi_in_events(jack_nframes_t frames) +{ + char buf = 0; + int i,j; + jack_midi_event_t midi_event; + unsigned char t,n,v; + + for(j = 0; j < JACK_MIDI_CHANNELS; j++){ + void *midi_buffer_in = jack_port_get_buffer(midi_port_in[j], frames); + int event_count = jack_midi_get_event_count(midi_buffer_in); + + for(i = 0; i < event_count; i++){ + jack_midi_event_get(&midi_event, midi_buffer_in, i); + t = midi_event.buffer[0]; + n = midi_event.buffer[1]; + v = midi_event.buffer[2]; + if(((*(midi_event.buffer) & 0xf0)) == 0x90){ + fprintf(stderr, "jack-midi-in-event: ON_ time=%d %u ", midi_event.time, + midi_event.size); + print_triplet(midi_event.buffer); + fprintf(stderr, "\n"); + }else if(((*(midi_event.buffer)) & 0xf0) == 0x80){ + fprintf(stderr, "jack-midi-in-event: OFF time=%d %u ", midi_event.time, + midi_event.size); + print_triplet(midi_event.buffer); + fprintf(stderr, "\n"); + }else{ + fprintf(stderr, "jack-midi-in-event: ??? time=%d %u ", midi_event.time, + midi_event.size); + print_triplet(midi_event.buffer); + fprintf(stderr, "\n"); + } + jack_midi_in_data[j].buffer[0] = t; + jack_midi_in_data[j].buffer[1] = n; + jack_midi_in_data[j].buffer[2] = v; + jack_midi_in_data[j].buffer[3] = 1; + fprintf(stderr, "handle_jack_midi_in_events() w\n"); + write(jackmidi_pi[1], &buf, 1); + fprintf(stderr, "handle_jack_midi_in_events() wd\n"); + } + } +} + +void handle_jack_midi_out_events(jack_nframes_t frames) +{ + unsigned char *data; + void *port_buf; + int i,j,n,x; + + //for(i = 0; i < JACK_MIDI_CHANNELS; i++){ + for(i = 0; i < JACK_MIDI_CHANNELS; ++i){ + // jack-midi-clear any old events + while(jack_midi_out_data[i].buffer[jack_midi_out_data[i].take*4+3] == 2){ + port_buf = jack_port_get_buffer(midi_port_out[i], frames); + jack_midi_clear_buffer(port_buf); + jack_midi_out_data[i].buffer[jack_midi_out_data[i].take*4+3] = 0; + // point the take to the next slot + jack_midi_out_data[i].take++; + if(jack_midi_out_data[i].take >= JACK_MIDI_BUFFER_SIZE){ + jack_midi_out_data[i].take = 0; + } + } + // check if any incoming midi-events from muse + if(jack_midi_out_data[i].give != jack_midi_out_data[i].take){ + + if(jack_midi_out_data[i].give > jack_midi_out_data[i].take){ + n = jack_midi_out_data[i].give - jack_midi_out_data[i].take; + }else{ + n = jack_midi_out_data[i].give + + (JACK_MIDI_BUFFER_SIZE - jack_midi_out_data[i].take); + } + port_buf = jack_port_get_buffer(midi_port_out[i], frames); + jack_midi_clear_buffer(port_buf); + // FIX: midi events has different sizes, compare note-on to + // program-change. We should first walk over the events + // counting the size. + //data = jack_midi_event_reserve(port_buf, 0, n*3); + //x = jack_midi_out_data[i].take; + //for(j = 0; j < n; j++){ + // data[j*3+0] = jack_midi_out_data[i].buffer[x*4+0]; + // data[j*3+1] = jack_midi_out_data[i].buffer[x*4+1]; + // data[j*3+2] = jack_midi_out_data[i].buffer[x*4+2]; + // after having copied the buffer over to the jack-buffer, + // mark the muses midi-out buffer as 'need-cleaning' + // jack_midi_out_data[i].buffer[x*4+3] = 2; + // x++; + // if(x >= JACK_MIDI_BUFFER_SIZE){ + // x = 0; + // } + //} + + x = jack_midi_out_data[i].take; + for(j = 0; j < n; ++j) + { + data = jack_midi_event_reserve(port_buf, 0, 3); + if(data == 0) + { + fprintf(stderr, "handle_jack_midi_out_events: buffer overflow, event lost\n"); + // Can do no more processing. Just return. + return; + } + data[0] = jack_midi_out_data[i].buffer[x*4+0]; + data[1] = jack_midi_out_data[i].buffer[x*4+1]; + data[2] = jack_midi_out_data[i].buffer[x*4+2]; + // after having copied the buffer over to the jack-buffer, + // mark the muses midi-out buffer as 'need-cleaning' + jack_midi_out_data[i].buffer[x*4+3] = 2; + x++; + if(x >= JACK_MIDI_BUFFER_SIZE){ + x = 0; + } + } + + } + } +} +*/ + +//static int processAudio(jack_nframes_t frames, void*) +int JackAudioDevice::processAudio(jack_nframes_t frames, void*) +{ + jackAudio->_frameCounter += frames; + +/// handle_jack_midi_in_events(frames); +/// handle_jack_midi_out_events(frames); + +// if (JACK_DEBUG) +// printf("processAudio - >>>>\n"); + segmentSize = frames; + if (audio->isRunning()) + audio->process((unsigned long)frames); + else { + if (debugMsg) + puts("jack calling when audio is disconnected!\n"); + } +// if (JACK_DEBUG) +// printf("processAudio - <<<<\n"); + return 0; +} + +//--------------------------------------------------------- +// processSync +// return TRUE (non-zero) when ready to roll. +//--------------------------------------------------------- + +static int processSync(jack_transport_state_t state, jack_position_t* pos, void*) + { + if (JACK_DEBUG) + printf("processSync()\n"); + + if(!useJackTransport.value()) + return 1; + + int audioState = Audio::STOP; + switch (state) { + case JackTransportStopped: + audioState = Audio::STOP; + break; + case JackTransportLooping: + case JackTransportRolling: + audioState = Audio::PLAY; + break; + case JackTransportStarting: + //printf("processSync JackTransportStarting\n"); + + audioState = Audio::START_PLAY; + break; + //case JackTransportNetStarting: + // FIXME: Quick and dirty hack to support both Jack-1 and Jack-2 + // Really need a config check of version... + case 4: + //printf("processSync JackTransportNetStarting\n"); + + audioState = Audio::START_PLAY; + break; + } + + unsigned frame = pos->frame; + //printf("processSync valid:%d frame:%d\n", pos->valid, frame); + + // p3.3.23 + //printf("Jack processSync() before audio->sync frame:%d\n", frame); + //return audio->sync(audioState, frame); + int rv = audio->sync(audioState, frame); + //printf("Jack processSync() after audio->sync frame:%d\n", frame); + return rv; + } + +//--------------------------------------------------------- +// timebase_callback +//--------------------------------------------------------- + +static void timebase_callback(jack_transport_state_t /* state */, + jack_nframes_t /* nframes */, + jack_position_t* pos, + int /* new_pos */, + void*) + { + //printf("Jack timebase_callback pos->frame:%u audio->tickPos:%d song->cpos:%d\n", pos->frame, audio->tickPos(), song->cpos()); + + // p3.3.27 + //Pos p(pos->frame, false); + Pos p(extSyncFlag.value() ? audio->tickPos() : pos->frame, extSyncFlag.value() ? true : false); + // Can't use song pos - it is only updated every (slow) GUI heartbeat ! + //Pos p(extSyncFlag.value() ? song->cpos() : pos->frame, extSyncFlag.value() ? true : false); + + 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: + // + + // p3.3.26 + //pos->beats_per_bar = 4; + //pos->beat_type = 4; + //pos->ticks_per_beat = 384; + // + /* // From example client transport.c : + float time_beats_per_bar = 4.0; + float time_beat_type = 0.25; // Huh? Inverted? From docs: "Time signature 'denominator'" + double time_ticks_per_beat = 1920.0; // Huh? Ticks per beat should be 24 etc. not 384 or 1920 etc. Otherwise it would be called 'frames_per_beat'. + double time_beats_per_minute = 120.0; + */ + // + int z, n; + sigmap.timesig(p.tick(), z, n); + pos->beats_per_bar = z; + pos->beat_type = n; + //pos->ticks_per_beat = config.division; + pos->ticks_per_beat = 24; + + int tempo = tempomap.tempo(p.tick()); + pos->beats_per_minute = (60000000.0 / tempo) * tempomap.globalTempo()/100.0; + } + +//--------------------------------------------------------- +// processShutdown +//--------------------------------------------------------- + +static void processShutdown(void*) + { + if (JACK_DEBUG) + printf("processShutdown()\n"); + //printf("processShutdown\n"); + jackAudio->nullify_client(); + audio->shutdown(); + + int c=0; + while(midiSeqRunning == true) { + if(c++ >10) { + fprintf(stderr, "sequencer still running, something is very wrong.\n"); + break; + } + sleep(1); + } + delete jackAudio; + jackAudio=0; + audioDevice=0; + } + +//--------------------------------------------------------- +// jackError +//--------------------------------------------------------- + +static void jackError(const char *s) + { + //error->logError( "JACK ERROR: %s\n", s); + fprintf(stderr,"JACK ERROR: %s\n", s); + } + +//--------------------------------------------------------- +// noJackError +//--------------------------------------------------------- + +static void noJackError(const char* /* s */) + { + } + +//--------------------------------------------------------- +// JackAudioDevice +//--------------------------------------------------------- + +JackAudioDevice::JackAudioDevice(jack_client_t* cl, char* name) + : AudioDevice() + { + _frameCounter = 0; + //JackAudioDevice::jackStarted=false; + strcpy(jackRegisteredName, name); + _client = cl; + dummyState = Audio::STOP; + dummyPos = 0; + } + +//--------------------------------------------------------- +// ~JackAudioDevice +//--------------------------------------------------------- + +JackAudioDevice::~JackAudioDevice() + { + if (JACK_DEBUG) + printf("~JackAudioDevice()\n"); + if (_client) { + + /* + // p3.3.35 + for(int i = 0; i < JACK_MIDI_CHANNELS; i++) + { + if(midi_port_in[i]) + jack_port_unregister(_client, midi_port_in[i]); + if(midi_port_out[i]) + jack_port_unregister(_client, midi_port_out[i]); + } + */ + + if (jack_client_close(_client)) { + //error->logError("jack_client_close() failed: %s\n", strerror(errno)); + fprintf(stderr,"jack_client_close() failed: %s\n", strerror(errno)); + } + } + if (JACK_DEBUG) + printf("~JackAudioDevice() after jack_client_close()\n"); + } + +//--------------------------------------------------------- +// realtimePriority +// return zero if not running realtime +// can only be called if JACK client thread is already +// running +//--------------------------------------------------------- + +int JackAudioDevice::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: JackAudioDevice::realtimePriority: Error: Get jack schedule parameter"); + return 0; + } + if (policy != SCHED_FIFO) { + printf("MusE: JackAudioDevice::realtimePriority: JACK is not running realtime\n"); + return 0; + } + return param.sched_priority; + } + +/* +//--------------------------------------------------------- +// getJackName() +//--------------------------------------------------------- + +char* JackAudioDevice::getJackName() + { + return jackRegisteredName; + } +*/ + +/* +//--------------------------------------------------------- +// clientName() +//--------------------------------------------------------- + +const char* JackAudioDevice::clientName() +{ + //if(_client) + // return jack_get_client_name(_client); + //else + // return "MusE"; + return jackRegisteredName; +} +*/ + +//--------------------------------------------------------- +// initJackAudio +// return true if JACK not found +//--------------------------------------------------------- + +bool initJackAudio() + { + /* + // p3.3.35 + for(int i = 0; i < JACK_MIDI_CHANNELS; i++) + { + midi_port_in[i] = 0; + midi_port_out[i] = 0; + } + */ + + if (JACK_DEBUG) + printf("initJackAudio()\n"); + if (debugMsg) { + fprintf(stderr,"initJackAudio()\n"); + jack_set_error_function(jackError); + } + else + jack_set_error_function(noJackError); + doSetuid(); + + //jack_client_t* client = 0; + //int i = 0; + //char jackIdString[8]; + //for (i = 0; i < 5; ++i) { + // sprintf(jackIdString, "MusE-%d", i+1); + //client = jack_client_new(jackIdString); + // client = jack_client_open(jackIdString, JackNoStartServer, 0); + // if (client) + // break; + // } + //if (i == 5) + // return true; + jack_status_t status; + jack_client_t* client = jack_client_open("MusE", JackNoStartServer, &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"); + undoSetuid(); // p3.3.51 + return true; + } + + if (debugMsg) + fprintf(stderr, "initJackAudio(): client %s opened.\n", jack_get_client_name(client)); + if (client) { + jack_set_error_function(jackError); + //jackAudio = new JackAudioDevice(client, jackIdString); + jackAudio = new JackAudioDevice(client, jack_get_client_name(client)); + if (debugMsg) + fprintf(stderr, "initJackAudio(): registering client...\n"); + jackAudio->registerClient(); + sampleRate = jack_get_sample_rate(client); + segmentSize = jack_get_buffer_size(client); + jack_set_thread_init_callback(client, (JackThreadInitCallback) jack_thread_init, 0); + //jack_set_timebase_callback(client, 0, (JackTimebaseCallback) timebase_callback, 0); + } + undoSetuid(); + + /* + // setup midi input/output + //memset(jack_midi_out_data, 0, JACK_MIDI_CHANNELS * sizeof(muse_jack_midi_buffer)); + //memset(jack_midi_in_data, 0, JACK_MIDI_CHANNELS * sizeof(muse_jack_midi_buffer)); + if(client){ + for(i = 0; i < JACK_MIDI_CHANNELS; i++) + { + char buf[80]; + snprintf(buf, 80, "muse-jack-midi-in-%d", i+1); + midi_port_in[i] = jack_port_register(client, buf, + JACK_DEFAULT_MIDI_TYPE, + JackPortIsInput, 0); + if(midi_port_in[i] == NULL){ + fprintf(stderr, "failed to register jack-midi-in\n"); + exit(-1); + } + snprintf(buf, 80, "muse-jack-midi-out-%d", i+1); + midi_port_out[i] = jack_port_register(client, buf, + JACK_DEFAULT_MIDI_TYPE, + JackPortIsOutput, 0); + if(midi_port_out == NULL) + { + fprintf(stderr, "failed to register jack-midi-out\n"); + exit(-1); + } + } + } + else + { + fprintf(stderr, "WARNING NO muse-jack midi connection\n"); + } + */ + + if (client) { + audioDevice = jackAudio; + jackAudio->scanMidiPorts(); + return false; + } + return true; + } + +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*) + { + if (debugMsg || JACK_DEBUG) + printf("JACK: freewheel_callback: starting%d\n", starting); + audio->setFreewheel(starting); + } + +static int srate_callback(jack_nframes_t n, void*) + { + if (debugMsg || JACK_DEBUG) + printf("JACK: sample rate changed: %d\n", n); + return 0; + } + +//--------------------------------------------------------- +// registration_callback +//--------------------------------------------------------- + +static void registration_callback(jack_port_id_t, int, void*) +{ + if(debugMsg || JACK_DEBUG) + printf("JACK: registration changed\n"); + + audio->sendMsgToGui('R'); +} + +//--------------------------------------------------------- +// JackAudioDevice::registrationChanged +// this is called from song in gui context triggered +// by registration_callback() +//--------------------------------------------------------- + +void JackAudioDevice::registrationChanged() +{ + if(JACK_DEBUG) + printf("JackAudioDevice::registrationChanged()\n"); + + // Rescan. + scanMidiPorts(); + // Connect the Jack midi client ports to the device ports. + //connectJackMidiPorts(); +} + +//--------------------------------------------------------- +// JackAudioDevice::connectJackMidiPorts +//--------------------------------------------------------- + +void JackAudioDevice::connectJackMidiPorts() +{ + if(JACK_DEBUG) + printf("JackAudioDevice::connectJackMidiPorts()\n"); + + for (iMidiDevice i = midiDevices.begin(); i != midiDevices.end(); ++i) + { + //MidiJackDevice* mjd = dynamic_cast(*i); + //if(!mjd) + MidiDevice* md = *i; + if(md->deviceType() != MidiDevice::JACK_MIDI) + continue; + + void* port = md->clientPort(); + if(md->rwFlags() & 1) + { + RouteList* rl = md->outRoutes(); + for (iRoute r = rl->begin(); r != rl->end(); ++r) + connect(port, r->jackPort); + } + else + if(md->rwFlags() & 2) + { + RouteList* rl = md->inRoutes(); + for (iRoute r = rl->begin(); r != rl->end(); ++r) + connect(r->jackPort, port); + } + } + + + /* + const char* type = JACK_DEFAULT_MIDI_TYPE; + const char** ports = jack_get_ports(_client, 0, type, 0); + for (const char** p = ports; p && *p; ++p) + { + jack_port_t* port = jack_port_by_name(_client, *p); + if(!port) + continue; + // Ignore our own client ports. + if(jack_port_is_mine(_client, port)) + { + if(debugMsg) + printf(" ignoring own port: %s\n", *p); + continue; + } + int nsz = jack_port_name_size(); + char buffer[nsz]; + strncpy(buffer, *p, nsz); + // Ignore the MusE Jack port. + //if(strncmp(buffer, "MusE", 4) == 0) + // continue; + + if(debugMsg) + printf(" found port: %s ", buffer); + + // If there are aliases for this port, use the first one - much better for identifying. + //char a1[nsz]; + char a2[nsz]; + char* aliases[2]; + //aliases[0] = a1; + aliases[0] = buffer; + aliases[1] = a2; + // To disable aliases, just rem this line. + jack_port_get_aliases(port, aliases); + //int na = jack_port_get_aliases(port, aliases); + //char* namep = (na >= 1) ? aliases[0] : buffer; + char* namep = aliases[0]; + + if(debugMsg) + printf("alias: %s\n", aliases[0]); + + //int flags = 0; + int pf = jack_port_flags(port); + // If Jack port can send data to us... + //if(pf & JackPortIsOutput) + // Mark as input capable. + // flags |= 2; + // If Jack port can receive data from us... + //if(pf & JackPortIsInput) + // Mark as output capable. + // flags |= 1; + + //JackPort jp(0, QString(buffer), flags); + //portList.append(jp); + + QString name(namep); + + if(JACK_DEBUG) + printf("JackAudioDevice::graphChanged %s\n", name.latin1()); + + for(iMidiDevice imd = midiDevices.begin(); imd != midiDevices.end(); ++imd) + { + // Is it a Jack midi device? + MidiJackDevice* mjd = dynamic_cast(*imd); + if(!mjd) + continue; + + //if(dev->name() != name) + // continue; + + // Is this port the one created for the Jack midi device? + if(!mjd->clientJackPort() || (mjd->clientJackPort() != port)) + continue; + + jack_port_t* devport = jack_port_by_name(_client, mjd->name().latin1()); + if(!devport) + continue; + + int ofl = mjd->openFlags(); + + if(JACK_DEBUG) + printf("JackAudioDevice::graphChanged found MidiJackDevice:%s\n", mjd->name().latin1()); + + // Note docs say it can't be both input and output. src, dest + // If Jack port can receive data from us and we actually want to... + if((pf & JackPortIsOutput) && (ofl & 1)) + { + if(JACK_DEBUG) + printf("JackAudioDevice::graphChanged connecting MusE output\n"); + audioDevice->connect(port, devport); + } + else + // If Jack port can send data to us and we actually want it... + if((pf & JackPortIsInput) && (ofl & 2)) + { + if(JACK_DEBUG) + printf("JackAudioDevice::graphChanged connecting MusE input\n"); + audioDevice->connect(devport, port); + } + + break; + } + } + + if(ports) + free(ports); + + */ +} +//--------------------------------------------------------- +// client_registration_callback +//--------------------------------------------------------- + +static void client_registration_callback(const char *name, int isRegister, void*) + { + if (debugMsg || JACK_DEBUG) + printf("JACK: client registration changed:%s register:%d\n", name, isRegister); + } + +//--------------------------------------------------------- +// port_connect_callback +//--------------------------------------------------------- + +static void port_connect_callback(jack_port_id_t a, jack_port_id_t b, int isConnect, void*) + { + if (debugMsg || JACK_DEBUG) + { + //jack_port_t* ap = jack_port_by_id(_client, a); + //jack_port_t* bp = jack_port_by_id(_client, b); + //printf("JACK: port connections changed: A:%d:%s B:%d:%s isConnect:%d\n", a, jack_port_name(ap), b, jack_port_name(bp), isConnect); + printf("JACK: port connections changed: A:%d B:%d isConnect:%d\n", a, b, isConnect); + } + } + +//--------------------------------------------------------- +// graph_callback +// this is called from jack when the connections +// changed +//--------------------------------------------------------- + +static int graph_callback(void*) + { + if (JACK_DEBUG) + printf("graph_callback()\n"); + // we cannot call JackAudioDevice::graphChanged() from this + // context, so we send a message to the gui thread which in turn + // calls graphChanged() + audio->sendMsgToGui('C'); + if (debugMsg) + printf("JACK: graph changed\n"); + return 0; + } + +//--------------------------------------------------------- +// JackAudioDevice::graphChanged +// this is called from song in gui context triggered +// by graph_callback() +//--------------------------------------------------------- + +void JackAudioDevice::graphChanged() +{ + if (JACK_DEBUG) + printf("graphChanged()\n"); + if(!checkJackClient(_client)) return; + InputList* il = song->inputs(); + for (iAudioInput ii = il->begin(); ii != il->end(); ++ii) { + AudioInput* it = *ii; + int channels = it->channels(); + for (int channel = 0; channel < channels; ++channel) { + jack_port_t* port = (jack_port_t*)(it->jackPort(channel)); + if (port == 0) + continue; + const char** ports = jack_port_get_all_connections(_client, port); + RouteList* rl = it->inRoutes(); + + //--------------------------------------- + // check for disconnects + //--------------------------------------- + + bool erased; + // limit set to 20 iterations for disconnects, don't know how to make it go + // the "right" amount + for (int i = 0;i < 20;i++) { + erased = false; + for (iRoute irl = rl->begin(); irl != rl->end(); ++irl) { + if (irl->channel != channel) + continue; + QString name = irl->name(); + const char* portName = name.latin1(); + //printf("portname=%s\n", portName); + bool found = false; + const char** pn = ports; + while (pn && *pn) { + if (strcmp(*pn, portName) == 0) { + found = true; + break; + } + ++pn; + } + if (!found) { + audio->msgRemoveRoute1( + //Route(portName, false, channel), + Route(portName, false, channel, Route::JACK_ROUTE), + Route(it, channel) + ); + erased = true; + break; + } + } + if (!erased) + break; + } + + //--------------------------------------- + // check for connects + //--------------------------------------- + + if (ports) { + const char** pn = ports; + while (*pn) { + bool found = false; + for (iRoute irl = rl->begin(); irl != rl->end(); ++irl) { + if (irl->channel != channel) + continue; + QString name = irl->name(); + const char* portName = name.latin1(); + if (strcmp(*pn, portName) == 0) { + found = true; + break; + } + } + if (!found) { + audio->msgAddRoute1( + //Route(*pn, false, channel), + Route(*pn, false, channel, Route::JACK_ROUTE), + Route(it, channel) + ); + } + ++pn; + } + + // p3.3.37 + //delete ports; + free(ports); + + ports = NULL; + } + } + } + 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 = (jack_port_t*)(it->jackPort(channel)); + if (port == 0) + continue; + const char** ports = jack_port_get_all_connections(_client, port); + RouteList* rl = it->outRoutes(); + + //--------------------------------------- + // check for disconnects + //--------------------------------------- + + bool erased; + // limit set to 20 iterations for disconnects, don't know how to make it go + // the "right" amount + for (int i = 0; i < 20 ; i++) { + erased = false; + for (iRoute irl = rl->begin(); irl != rl->end(); ++irl) { + if (irl->channel != channel) + continue; + QString name = irl->name(); + const char* portName = name.latin1(); + bool found = false; + const char** pn = ports; + while (pn && *pn) { + if (strcmp(*pn, portName) == 0) { + found = true; + break; + } + ++pn; + } + if (!found) { + audio->msgRemoveRoute1( + Route(it, channel), + //Route(portName, false, channel) + Route(portName, false, channel, Route::JACK_ROUTE) + ); + erased = true; + break; + } + } + if (!erased) + break; + } + + //--------------------------------------- + // check for connects + //--------------------------------------- + + if (ports) { + const char** pn = ports; + while (*pn) { + bool found = false; + for (iRoute irl = rl->begin(); irl != rl->end(); ++irl) { + if (irl->channel != channel) + continue; + QString name = irl->name(); + const char* portName = name.latin1(); + if (strcmp(*pn, portName) == 0) { + found = true; + break; + } + } + if (!found) { + audio->msgAddRoute1( + Route(it, channel), + //Route(*pn, false, channel) + Route(*pn, false, channel, Route::JACK_ROUTE) + ); + } + ++pn; + } + + // p3.3.37 + //delete ports; + free(ports); + + ports = NULL; + } + } + } + + for (iMidiDevice ii = midiDevices.begin(); ii != midiDevices.end(); ++ii) + { + MidiDevice* md = *ii; + if(md->deviceType() != MidiDevice::JACK_MIDI) + continue; + + //MidiJackDevice* mjd = dynamic_cast(*ii); + //if(!mjd) + // continue; + //for (int channel = 0; channel < channels; ++channel) + //{ + jack_port_t* port = (jack_port_t*)md->clientPort(); + if (port == 0) + continue; + const char** ports = jack_port_get_all_connections(_client, port); + + //--------------------------------------- + // outputs + //--------------------------------------- + + if(md->rwFlags() & 1) // Writable + { + RouteList* rl = md->outRoutes(); + + //--------------------------------------- + // check for disconnects + //--------------------------------------- + + bool erased; + // limit set to 20 iterations for disconnects, don't know how to make it go + // the "right" amount + for (int i = 0; i < 20 ; i++) + { + erased = false; + for (iRoute irl = rl->begin(); irl != rl->end(); ++irl) { + //if (irl->channel != channel) + // continue; + QString name = irl->name(); + const char* portName = name.latin1(); + bool found = false; + const char** pn = ports; + while (pn && *pn) { + if (strcmp(*pn, portName) == 0) { + found = true; + break; + } + ++pn; + } + if (!found) { + audio->msgRemoveRoute1( + //Route(it, channel), + //Route(mjd), + Route(md, -1), + //Route(portName, false, channel) + //Route(portName, false, -1) + Route(portName, false, -1, Route::JACK_ROUTE) + ); + erased = true; + break; + } + } + if (!erased) + break; + } + + //--------------------------------------- + // check for connects + //--------------------------------------- + + if (ports) + { + const char** pn = ports; + while (*pn) { + bool found = false; + for (iRoute irl = rl->begin(); irl != rl->end(); ++irl) { + //if (irl->channel != channel) + // continue; + QString name = irl->name(); + const char* portName = name.latin1(); + if (strcmp(*pn, portName) == 0) { + found = true; + break; + } + } + if (!found) { + audio->msgAddRoute1( + //Route(it, channel), + //Route(mjd), + Route(md, -1), + //Route(*pn, false, channel) + //Route(*pn, false, -1) + Route(*pn, false, -1, Route::JACK_ROUTE) + ); + } + ++pn; + } + + // p3.3.37 + //delete ports; + //free(ports); + + //ports = NULL; + } + } + + + //------------------------ + // Inputs + //------------------------ + + if(md->rwFlags() & 2) // Readable + { + RouteList* rl = md->inRoutes(); + + //--------------------------------------- + // check for disconnects + //--------------------------------------- + + bool erased; + // limit set to 20 iterations for disconnects, don't know how to make it go + // the "right" amount + for (int i = 0; i < 20 ; i++) + { + erased = false; + for (iRoute irl = rl->begin(); irl != rl->end(); ++irl) { + //if (irl->channel != channel) + // continue; + QString name = irl->name(); + const char* portName = name.latin1(); + bool found = false; + const char** pn = ports; + while (pn && *pn) { + if (strcmp(*pn, portName) == 0) { + found = true; + break; + } + ++pn; + } + if (!found) { + audio->msgRemoveRoute1( + //Route(portName, false, channel), + //Route(portName, false, -1), + Route(portName, false, -1, Route::JACK_ROUTE), + //Route(it, channel) + //Route(mjd) + Route(md, -1) + ); + erased = true; + break; + } + } + if (!erased) + break; + } + + //--------------------------------------- + // check for connects + //--------------------------------------- + + if (ports) + { + const char** pn = ports; + while (*pn) { + bool found = false; + for (iRoute irl = rl->begin(); irl != rl->end(); ++irl) { + //if (irl->channel != channel) + // continue; + QString name = irl->name(); + const char* portName = name.latin1(); + if (strcmp(*pn, portName) == 0) { + found = true; + break; + } + } + if (!found) { + audio->msgAddRoute1( + //Route(*pn, false, channel), + //Route(*pn, false, -1), + Route(*pn, false, -1, Route::JACK_ROUTE), + //Route(it, channel) + //Route(mjd) + Route(md, -1) + ); + } + ++pn; + } + } + } + if(ports) + // Done with ports. Free them. + //delete ports; + free(ports); + + ports = NULL; + } +} + +//static int xrun_callback(void*) +// { +// printf("JACK: xrun\n"); +// return 0; +// } + +//--------------------------------------------------------- +// register +//--------------------------------------------------------- + +void JackAudioDevice::registerClient() + { + if (JACK_DEBUG) + printf("registerClient()\n"); + if(!checkJackClient(_client)) return; + jack_set_process_callback(_client, processAudio, 0); + jack_set_sync_callback(_client, processSync, 0); + // FIXME: FIXME: + // Added by Tim. p3.3.20 + // Did not help. Seek during play: Jack keeps switching to STOP state after about 1-2 seconds timeout if sync is holding it up. + // Nothing in MusE seems to be telling it to stop. + jack_set_sync_timeout(_client, 5000000); // Change default 2 to 5 second sync timeout because prefetch may be very slow esp. with resampling ! + + 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); + // p3.3.37 + jack_set_client_registration_callback(_client, client_registration_callback, 0); + jack_set_port_connect_callback(_client, port_connect_callback, 0); + + jack_set_graph_order_callback(_client, graph_callback, 0); +// jack_set_xrun_callback(client, xrun_callback, 0); + jack_set_freewheel_callback (_client, freewheel_callback, 0); + } + +//--------------------------------------------------------- +// registerInPort +//--------------------------------------------------------- + +//void* JackAudioDevice::registerInPort(const char* name) +void* JackAudioDevice::registerInPort(const char* name, bool midi) + { + if (JACK_DEBUG) + printf("registerInPort()\n"); + if(!checkJackClient(_client)) return NULL; + const char* type = midi ? JACK_DEFAULT_MIDI_TYPE : JACK_DEFAULT_AUDIO_TYPE; + //void* p = jack_port_register(_client, name, JACK_DEFAULT_AUDIO_TYPE, JackPortIsInput, 0); + void* p = jack_port_register(_client, name, type, JackPortIsInput, 0); +// printf("JACK: registerInPort: <%s> %p\n", name, p); + return p; + } + +//--------------------------------------------------------- +// registerOutPort +//--------------------------------------------------------- + +//void* JackAudioDevice::registerOutPort(const char* name) +void* JackAudioDevice::registerOutPort(const char* name, bool midi) + { + if (JACK_DEBUG) + printf("registerOutPort()\n"); + if(!checkJackClient(_client)) return NULL; + const char* type = midi ? JACK_DEFAULT_MIDI_TYPE : JACK_DEFAULT_AUDIO_TYPE; + //void* p = jack_port_register(_client, name, JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, 0); + void* p = jack_port_register(_client, name, type, JackPortIsOutput, 0); +// printf("JACK: registerOutPort: <%s> %p\n", name, p); + return p; + } + +//--------------------------------------------------------- +// exitJackAudio +//--------------------------------------------------------- + +void exitJackAudio() + { + if (JACK_DEBUG) + printf("exitJackAudio()\n"); + if (jackAudio) + delete jackAudio; + + if (JACK_DEBUG) + printf("exitJackAudio() after delete jackAudio\n"); + + // Added by Tim. p3.3.14 + audioDevice = NULL; + + } + +//--------------------------------------------------------- +// connect +//--------------------------------------------------------- + +void JackAudioDevice::connect(void* src, void* dst) +{ + if (JACK_DEBUG) + printf("JackAudioDevice::connect()\n"); + if(!checkJackClient(_client)) return; + const char* sn = jack_port_name((jack_port_t*) src); + const char* dn = jack_port_name((jack_port_t*) dst); + if (sn == 0 || dn == 0) { + fprintf(stderr, "JackAudio::connect: unknown jack ports\n"); + return; + } + int err = jack_connect(_client, sn, dn); + //if (jack_connect(_client, sn, dn)) { + if (err) { + fprintf(stderr, "jack connect <%s>%p - <%s>%p failed with err:%d\n", + sn, src, dn, dst, err); + } + else + if (JACK_DEBUG) + { + fprintf(stderr, "jack connect <%s>%p - <%s>%p succeeded\n", + sn, src, dn, dst); + } +} + +//--------------------------------------------------------- +// disconnect +//--------------------------------------------------------- + +void JackAudioDevice::disconnect(void* src, void* dst) +{ + if (JACK_DEBUG) + printf("JackAudioDevice::disconnect()\n"); + if(!checkJackClient(_client)) return; + const char* sn = jack_port_name((jack_port_t*) src); + const char* dn = jack_port_name((jack_port_t*) dst); + if (sn == 0 || dn == 0) { + fprintf(stderr, "JackAudio::disconnect: unknown jack ports\n"); + return; + } + int err = jack_disconnect(_client, sn, dn); + //if (jack_disconnect(_client, sn, dn)) { + if (err) { + fprintf(stderr, "jack disconnect <%s> - <%s> failed with err:%d\n", + sn, dn, err); + } + else + if (JACK_DEBUG) + { + fprintf(stderr, "jack disconnect <%s> - <%s> succeeded\n", + sn, dn); + } +} + +//--------------------------------------------------------- +// start +//--------------------------------------------------------- + +//void JackAudioDevice::start() +void JackAudioDevice::start(int /*priority*/) + { + if (JACK_DEBUG) + printf("JackAudioDevice::start()\n"); + if(!checkJackClient(_client)) return; + + doSetuid(); + + if (jack_activate(_client)) { + undoSetuid(); // p3.3.51 + fprintf (stderr, "JACK: cannot activate client\n"); + exit(-1); + } + /* connect the ports. Note: you can't do this before + the client is activated, because we can't allow + connections to be made to clients that aren't + running. + */ + + InputList* il = song->inputs(); + for (iAudioInput i = il->begin(); i != il->end(); ++i) { + AudioInput* ai = *i; + int channel = ai->channels(); + for (int ch = 0; ch < channel; ++ch) { + RouteList* rl = ai->inRoutes(); + void* port = ai->jackPort(ch); + for (iRoute ir = rl->begin(); ir != rl->end(); ++ir) { + if (ir->channel == ch) + connect(ir->jackPort, port); + } + } + } + OutputList* ol = song->outputs(); + for (iAudioOutput i = ol->begin(); i != ol->end(); ++i) { + AudioOutput* ai = *i; + int channel = ai->channels(); + for (int ch = 0; ch < channel; ++ch) { + RouteList* rl = ai->outRoutes(); + void* port = ai->jackPort(ch); + for (iRoute r = rl->begin(); r != rl->end(); ++r) { + if (r->channel == ch) { + connect(port, r->jackPort); + } + } + } + } + + // p3.3.37 + // Connect the Jack midi client ports to device ports. + connectJackMidiPorts(); + + undoSetuid(); + + //MUSE_DEBUG("JackAudioDevice::start()\n"); + fflush(stdin); + //JackAudioDevice::jackStarted=true; + } + +//--------------------------------------------------------- +// stop +//--------------------------------------------------------- + +void JackAudioDevice::stop() + { + if (JACK_DEBUG) + printf("JackAudioDevice::stop()\n"); + if(!checkJackClient(_client)) return; + if (jack_deactivate(_client)) { + fprintf (stderr, "cannot deactivate client\n"); + } + //JackAudioDevice::jackStarted=false; + } + +//--------------------------------------------------------- +// transportQuery +//--------------------------------------------------------- + +jack_transport_state_t JackAudioDevice::transportQuery(jack_position_t* pos) +{ + if (JACK_DEBUG) + printf("JackAudioDevice::transportQuery pos:%d\n", (unsigned int)pos->frame); + + // TODO: Compose and return a state if MusE is disengaged from Jack transport. + + return jack_transport_query(_client, pos); +} + +//--------------------------------------------------------- +// getCurFrame +//--------------------------------------------------------- + +unsigned int JackAudioDevice::getCurFrame() +{ + if (JACK_DEBUG) + printf("JackAudioDevice::getCurFrame pos.frame:%d\n", pos.frame); + + if(!useJackTransport.value()) + return (unsigned int)dummyPos; + + return pos.frame; +} + +//--------------------------------------------------------- +// framePos +//--------------------------------------------------------- + +int JackAudioDevice::framePos() const + { + //if(!useJackTransport.value()) + //{ + // if (JACK_DEBUG) + // printf("JackAudioDevice::framePos dummyPos:%d\n", dummyPos); + // return dummyPos; + //} + + if(!checkJackClient(_client)) return 0; + jack_nframes_t n = jack_frame_time(_client); + + //if (JACK_DEBUG) + // printf("JackAudioDevice::framePos jack frame:%d\n", (int)n); + + return (int)n; + } + +#if 0 +//--------------------------------------------------------- +// framesSinceCycleStart +//--------------------------------------------------------- + +int JackAudioDevice::framesSinceCycleStart() const + { + jack_nframes_t n = jack_frames_since_cycle_start(client); + return (int)n; + } + +//--------------------------------------------------------- +// framesDelay +// TODO +//--------------------------------------------------------- + +int JackAudioDevice::frameDelay() const + { + jack_nframes_t n = (segmentSize * (segmentCount-1)) - jack_frames_since_cycle_start(client); + return (int)n; + } +#endif + +//--------------------------------------------------------- +// outputPorts +//--------------------------------------------------------- + +std::list JackAudioDevice::outputPorts(bool midi, int aliases) + { + if (JACK_DEBUG) + printf("JackAudioDevice::outputPorts()\n"); + std::list clientList; + if(!checkJackClient(_client)) return clientList; + QString qname; + const char* type = midi ? JACK_DEFAULT_MIDI_TYPE : JACK_DEFAULT_AUDIO_TYPE; + const char** ports = jack_get_ports(_client, 0, type, JackPortIsOutput); + for (const char** p = ports; p && *p; ++p) { + jack_port_t* port = jack_port_by_name(_client, *p); + //int flags = jack_port_flags(port); + //if (!(flags & JackPortIsOutput)) + // continue; + //char buffer[128]; + + int nsz = jack_port_name_size(); + char buffer[nsz]; + + strncpy(buffer, *p, nsz); + //if (strncmp(buffer, "MusE", 4) == 0) + //{ + // if(debugMsg) + // printf("JackAudioDevice::outputPorts ignoring own MusE port: %s\n", *p); + // continue; + //} + + // Ignore our own client ports. + if(jack_port_is_mine(_client, port)) + { + if(debugMsg) + printf("JackAudioDevice::outputPorts ignoring own port: %s\n", *p); + continue; + } + + // p3.3.38 + if((aliases == 0) || (aliases == 1)) + { + //char a1[nsz]; + char a2[nsz]; + char* al[2]; + //aliases[0] = a1; + al[0] = buffer; + al[1] = a2; + int na = jack_port_get_aliases(port, al); + int a = aliases; + if(a >= na) + { + a = na; + if(a > 0) + a--; + } + qname = QString(al[a]); + } + else + qname = QString(buffer); + + //clientList.push_back(QString(buffer)); + clientList.push_back(qname); + } + + // p3.3.37 + if(ports) + free(ports); + + return clientList; + } + +//--------------------------------------------------------- +// inputPorts +//--------------------------------------------------------- + +std::list JackAudioDevice::inputPorts(bool midi, int aliases) + { + if (JACK_DEBUG) + printf("JackAudioDevice::inputPorts()\n"); + std::list clientList; + if(!checkJackClient(_client)) return clientList; + QString qname; + const char* type = midi ? JACK_DEFAULT_MIDI_TYPE : JACK_DEFAULT_AUDIO_TYPE; + const char** ports = jack_get_ports(_client, 0, type, JackPortIsInput); + for (const char** p = ports; p && *p; ++p) { + jack_port_t* port = jack_port_by_name(_client, *p); + //int flags = jack_port_flags(port); + //if (!(flags & JackPortIsInput)) + // continue; + //char buffer[128]; + + int nsz = jack_port_name_size(); + char buffer[nsz]; + + strncpy(buffer, *p, nsz); + //if (strncmp(buffer, "MusE", 4) == 0) + //{ + // if(debugMsg) + // printf("JackAudioDevice::inputPorts ignoring own MusE port: %s\n", *p); + // continue; + //} + + // Ignore our own client ports. + if(jack_port_is_mine(_client, port)) + { + if(debugMsg) + printf("JackAudioDevice::inputPorts ignoring own port: %s\n", *p); + continue; + } + + // p3.3.38 + if((aliases == 0) || (aliases == 1)) + { + //char a1[nsz]; + char a2[nsz]; + char* al[2]; + //aliases[0] = a1; + al[0] = buffer; + al[1] = a2; + int na = jack_port_get_aliases(port, al); + int a = aliases; + if(a >= na) + { + a = na; + if(a > 0) + a--; + } + qname = QString(al[a]); + } + else + qname = QString(buffer); + + //clientList.push_back(QString(buffer)); + clientList.push_back(qname); + } + + // p3.3.37 + if(ports) + free(ports); + + return clientList; + } + +//--------------------------------------------------------- +// portName +//--------------------------------------------------------- + +QString JackAudioDevice::portName(void* port) + { + if (JACK_DEBUG) + printf("JackAudioDevice::portName(\n"); + if(!checkJackClient(_client)) return ""; + if (!port) + return ""; + + QString s(jack_port_name((jack_port_t*)port)); + //printf("Jack::portName %p %s\n", port, s.latin1()); + return s; + } + +//--------------------------------------------------------- +// unregisterPort +//--------------------------------------------------------- + +void JackAudioDevice::unregisterPort(void* p) + { + if (JACK_DEBUG) + printf("JackAudioDevice::unregisterPort(\n"); + if(!checkJackClient(_client)) return; +// printf("JACK: unregister Port\n"); + jack_port_unregister(_client, (jack_port_t*)p); + } + +//--------------------------------------------------------- +// getState +//--------------------------------------------------------- + +int JackAudioDevice::getState() + { + // If we're not using Jack's transport, just return current state. + if(!useJackTransport.value()) + { + //pos.valid = jack_position_bits_t(0); + //pos.frame = audio->pos().frame(); + //return audio->getState(); + //if (JACK_DEBUG) + // printf("JackAudioDevice::getState dummyState:%d\n", dummyState); + return dummyState; + } + + //if (JACK_DEBUG) + // printf("JackAudioDevice::getState ()\n"); + if(!checkJackClient(_client)) return 0; + transportState = jack_transport_query(_client, &pos); + //if (JACK_DEBUG) + // printf("JackAudioDevice::getState transportState:%d\n", transportState); + + switch (transportState) { + case JackTransportStopped: + return Audio::STOP; + case JackTransportLooping: + case JackTransportRolling: + return Audio::PLAY; + case JackTransportStarting: + //printf("JackAudioDevice::getState JackTransportStarting\n"); + + return Audio::START_PLAY; + //case JackTransportNetStarting: + // FIXME: Quick and dirty hack to support both Jack-1 and Jack-2 + // Really need a config check of version... + case 4: + //printf("JackAudioDevice::getState JackTransportNetStarting\n"); + + return Audio::START_PLAY; + break; + default: + return Audio::STOP; + } + } + +//--------------------------------------------------------- +// setFreewheel +//--------------------------------------------------------- + +void JackAudioDevice::setFreewheel(bool f) + { + if (JACK_DEBUG) + printf("JackAudioDevice::setFreewheel(\n"); + if(!checkJackClient(_client)) return; +// printf("JACK: setFreewheel %d\n", f); + jack_set_freewheel(_client, f); + } + +//--------------------------------------------------------- +// dummySync +//--------------------------------------------------------- + +bool JackAudioDevice::dummySync(int state) +{ + // Roughly segment time length. + //timespec ts = { 0, (1000000000 * segmentSize) / sampleRate }; // In nanoseconds. + unsigned int sl = (1000000 * segmentSize) / sampleRate; // In microseconds. + + double ct = curTime(); + // Wait for a default maximum of 5 seconds. + // Similar to how Jack is supposed to wait a default of 2 seconds for slow clients. + // TODO: Make this timeout a 'settings' option so it can be applied both to Jack and here. + while((curTime() - ct) < 5.0) + { + // Is MusE audio ready to roll? + if(audio->sync(state, dummyPos)) + return true; + + // Not ready. Wait a 'segment', try again... + //nanosleep(&ts, NULL); + usleep(sl); // usleep is supposed to be obsolete! + } + + //if(JACK_DEBUG) + printf("JackAudioDevice::dummySync Sync timeout - audio not ready!\n"); + + return false; +} + +//--------------------------------------------------------- +// startTransport +//--------------------------------------------------------- + +void JackAudioDevice::startTransport() + { + if (JACK_DEBUG) + printf("JackAudioDevice::startTransport()\n"); + + // If we're not using Jack's transport, just pass PLAY and current frame along + // as if processSync was called. + if(!useJackTransport.value()) + { + //dummyState = Audio::START_PLAY; + + // Is MusE audio ready to roll? + //if(dummySync(dummyState)) + if(dummySync(Audio::START_PLAY)) + { + // MusE audio is ready to roll. Let's play. + dummyState = Audio::PLAY; + return; + } + + // Ready or not, we gotta roll. Similar to how Jack is supposed to roll anyway. + dummyState = Audio::PLAY; + return; + } + + if(!checkJackClient(_client)) return; +// printf("JACK: startTransport\n"); + jack_transport_start(_client); + } + +//--------------------------------------------------------- +// stopTransport +//--------------------------------------------------------- + +void JackAudioDevice::stopTransport() + { + if (JACK_DEBUG) + printf("JackAudioDevice::stopTransport()\n"); + + dummyState = Audio::STOP; + + if(!useJackTransport.value()) + { + //dummyState = Audio::STOP; + return; + } + + if(!checkJackClient(_client)) return; + if (transportState != JackTransportStopped) { + // printf("JACK: stopTransport\n"); + jack_transport_stop(_client); + transportState=JackTransportStopped; + } + } + +//--------------------------------------------------------- +// seekTransport +//--------------------------------------------------------- + +void JackAudioDevice::seekTransport(unsigned frame) + { + if (JACK_DEBUG) + printf("JackAudioDevice::seekTransport() frame:%d\n", frame); + + dummyPos = frame; + if(!useJackTransport.value()) + { + // If we're not using Jack's transport, just pass the current state and new frame along + // as if processSync was called. + //dummyPos = frame; + int tempState = dummyState; + //dummyState = Audio::START_PLAY; + + // Is MusE audio ready yet? + //audio->sync(dummyState, dummyPos); + //if(dummySync(dummyState)) + if(dummySync(Audio::START_PLAY)) + { + dummyState = tempState; + return; + } + + // Not ready, resume previous state anyway. + // FIXME: Observed: Seek during play: Jack transport STOPs on timeout. + // Docs say when starting play, transport will roll anyway, ready or not (observed), + // but don't mention what should happen on seek during play. + // And setting the slow-sync timeout doesn't seem to do anything! + //dummyState = tempState; + dummyState = Audio::STOP; + return; + } + + if(!checkJackClient(_client)) return; +// printf("JACK: seekTransport %d\n", frame); + jack_transport_locate(_client, frame); + } + +//--------------------------------------------------------- +// seekTransport +//--------------------------------------------------------- + +void JackAudioDevice::seekTransport(const Pos &p) + { + if (JACK_DEBUG) + printf("JackAudioDevice::seekTransport() frame:%d\n", p.frame()); + + dummyPos = p.frame(); + if(!useJackTransport.value()) + { + // If we're not using Jack's transport, just pass the current state and new frame along + // as if processSync was called. + //dummyPos = p.frame(); + int tempState = dummyState; + //dummyState = Audio::START_PLAY; + + // Is MusE audio ready yet? + //audio->sync(dummyState, dummyPos); + //if(dummySync(dummyState)) + if(dummySync(Audio::START_PLAY)) + { + dummyState = tempState; + return; + } + + // Not ready, resume previous state anyway. + // FIXME: See fixme in other seekTransport... + //dummyState = tempState; + dummyState = Audio::STOP; + return; + } + + if(!checkJackClient(_client)) return; + + /* + jack_position_t jp; + jp.valid = JackPositionBBT; + p.mbt(&jp.bar, &jp.beat, &jp.tick); + jp.bar++; + jp.beat++; + jp.bar_start_tick = Pos(jp.bar, 0, 0).tick(); + // + // dummy: + // + jp.beats_per_bar = 4; + jp.beat_type = 4; + jp.ticks_per_beat = 384; + int tempo = tempomap.tempo(p.tick()); + jp.beats_per_minute = (60000000.0 / tempo) * tempomap.globalTempo()/100.0; + + jack_transport_reposition(_client, &jp); + */ + jack_transport_locate(_client, p.frame()); + } + +//--------------------------------------------------------- +// findPort +//--------------------------------------------------------- + +void* JackAudioDevice::findPort(const char* name) + { + if (JACK_DEBUG) + printf("JackAudioDevice::findPort(\n"); + if(!checkJackClient(_client)) return NULL; + void* p = jack_port_by_name(_client, name); +// printf("Jack::findPort <%s>, %p\n", name, p); + return p; + } + +//--------------------------------------------------------- +// setMaster +//--------------------------------------------------------- + +int JackAudioDevice::setMaster(bool f) +{ + if (JACK_DEBUG) + printf("JackAudioDevice::setMaster val:%d\n", f); + if(!checkJackClient(_client)) + return 0; + + int r = 0; + if(f) + { + if(useJackTransport.value()) + { + // Make Muse the Jack timebase master. Do it unconditionally (second param = 0). + r = jack_set_timebase_callback(_client, 0, (JackTimebaseCallback) timebase_callback, 0); + if(debugMsg || JACK_DEBUG) + { + if(r) + printf("JackAudioDevice::setMaster jack_set_timebase_callback failed: result:%d\n", r); + } + } + else + { + r = 1; + printf("JackAudioDevice::setMaster cannot set master because useJackTransport is false\n"); + } + } + else + { + r = jack_release_timebase(_client); + if(debugMsg || JACK_DEBUG) + { + if(r) + printf("JackAudioDevice::setMaster jack_release_timebase failed: result:%d\n", r); + } + } + return r; +} + +//--------------------------------------------------------- +// scanMidiPorts +//--------------------------------------------------------- + +void JackAudioDevice::scanMidiPorts() +{ + if(debugMsg) + printf("JackAudioDevice::scanMidiPorts:\n"); + +/* + const char* type = JACK_DEFAULT_MIDI_TYPE; + const char** ports = jack_get_ports(_client, 0, type, 0); + + std::set names; + for (const char** p = ports; p && *p; ++p) + { + jack_port_t* port = jack_port_by_name(_client, *p); + if(!port) + continue; + // Ignore our own client ports. + if(jack_port_is_mine(_client, port)) + { + if(debugMsg) + printf(" ignoring own port: %s\n", *p); + continue; + } + + int nsz = jack_port_name_size(); + char buffer[nsz]; + strncpy(buffer, *p, nsz); + // Ignore the MusE Jack port. + //if(strncmp(buffer, "MusE", 4) == 0) + // continue; + + if(debugMsg) + printf(" found port: %s ", buffer); + + // If there are aliases for this port, use the first one - much better for identifying. + //char a1[nsz]; + char a2[nsz]; + char* aliases[2]; + //aliases[0] = a1; + aliases[0] = buffer; + aliases[1] = a2; + // To disable aliases, just rem this line. + jack_port_get_aliases(port, aliases); + //int na = jack_port_get_aliases(port, aliases); + //char* namep = (na >= 1) ? aliases[0] : buffer; + //char* namep = aliases[0]; + //names.insert(std::string(*p)); + if(debugMsg) + printf("alias: %s\n", aliases[0]); + + names.insert(std::string(aliases[0])); + } + if(ports) + free(ports); + + std::list to_del; + for(iMidiDevice imd = midiDevices.begin(); imd != midiDevices.end(); ++imd) + { + // Only Jack midi devices. + if(dynamic_cast(*imd) == 0) + continue; + if(names.find(std::string((*imd)->name().latin1())) == names.end()) + to_del.push_back(*imd); + } + + for(std::list::iterator imd = to_del.begin(); imd != to_del.end(); ++imd) + { + if(debugMsg) + printf(" removing port device:%s\n", (*imd)->name().latin1()); + midiDevices.remove(*imd); + // This will close (and unregister) the client port. + delete (*imd); + } + + //for (const char** p = ports; p && *p; ++p) + for(std::set::iterator is = names.begin(); is != names.end(); ++is) + { + //jack_port_t* port = jack_port_by_name(_client, *p); + jack_port_t* port = jack_port_by_name(_client, is->c_str()); + if(!port) + continue; +*/ + + /* + int nsz = jack_port_name_size(); + char buffer[nsz]; + //strncpy(buffer, *p, nsz); + strncpy(buffer, is->c_str(), nsz); + // Ignore the MusE Jack port. + //if(strncmp(buffer, "MusE", 4) == 0) + // continue; + + // If there are aliases for this port, use the first one - much better for identifying. + //char a1[nsz]; + char a2[nsz]; + char* aliases[2]; + //aliases[0] = a1; + aliases[0] = buffer; + aliases[1] = a2; + // To disable aliases, just rem this line. + jack_port_get_aliases(port, aliases); + //int na = jack_port_get_aliases(port, aliases); + //char* namep = (na >= 1) ? aliases[0] : buffer; + char* namep = aliases[0]; + QString qname(namep); + */ + +/* + QString qname(is->c_str()); + + // Port already exists? + if(midiDevices.find(qname)) + continue; + + int flags = 0; + int pf = jack_port_flags(port); + // If Jack port can send data to us... + if(pf & JackPortIsOutput) + // Mark as input capable. + flags |= 2; + // If Jack port can receive data from us... + if(pf & JackPortIsInput) + // Mark as output capable. + flags |= 1; + + //JackPort jp(0, QString(buffer), flags); + //portList.append(jp); + + if(debugMsg) + printf(" adding port device:%s\n", qname.latin1()); + + MidiJackDevice* dev = new MidiJackDevice(0, qname); + dev->setrwFlags(flags); + midiDevices.add(dev); + } +*/ +} + diff --git a/muse2/muse/driver/jackaudio.h b/muse2/muse/driver/jackaudio.h new file mode 100644 index 00000000..d3132efe --- /dev/null +++ b/muse2/muse/driver/jackaudio.h @@ -0,0 +1,97 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: jackaudio.h,v 1.20.2.4 2009/12/20 05:00:35 terminator356 Exp $ +// (C) Copyright 2002 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __JACKAUDIO_H__ +#define __JACKAUDIO_H__ + +#include +#include "audiodev.h" + +class MidiPlayEvent; + +//--------------------------------------------------------- +// JackAudioDevice +//--------------------------------------------------------- +bool checkAudioDevice(); + +class JackAudioDevice : public AudioDevice { + + jack_client_t* _client; + double sampleTime; + int samplePos; + jack_transport_state_t transportState; + jack_position_t pos; + char jackRegisteredName[16]; + int dummyState; + int dummyPos; + // Free-running frame counter incremented always in process. + jack_nframes_t _frameCounter; + + static int processAudio(jack_nframes_t frames, void*); + + public: + JackAudioDevice(jack_client_t* cl, char * jack_id_string); + virtual ~JackAudioDevice(); + virtual void nullify_client() { _client = 0; } + + virtual inline int deviceType() { return JACK_AUDIO; } // p3.3.52 + + void scanMidiPorts(); + + //virtual void start(); + virtual void start(int); + virtual void stop (); + virtual bool dummySync(int state); // Artificial sync when not using Jack transport. + + virtual int framePos() const; + virtual unsigned frameTime() const { return _frameCounter; } + + virtual float* getBuffer(void* port, unsigned long nframes) { + return (float*)jack_port_get_buffer((jack_port_t*)port, nframes); + } + + virtual std::list outputPorts(bool midi = false, int aliases = -1); + virtual std::list inputPorts(bool midi = false, int aliases = -1); + + virtual void registerClient(); + virtual const char* clientName() { return jackRegisteredName; } + + //virtual void* registerOutPort(const char* name); + //virtual void* registerInPort(const char* name); + virtual void* registerOutPort(const char* /*name*/, bool /*midi*/); + virtual void* registerInPort(const char* /*name*/, bool /*midi*/); + + //virtual char* getJackName(); + + virtual void unregisterPort(void*); + virtual void connect(void*, void*); + virtual void disconnect(void*, void*); + virtual int connections(void* clientPort) { return jack_port_connected((jack_port_t*)clientPort); } + virtual void setPortName(void* p, const char* n) { jack_port_set_name((jack_port_t*)p, n); } + virtual void* findPort(const char* name); + virtual QString portName(void* port); + virtual int getState(); + virtual unsigned int getCurFrame(); + virtual bool isRealtime() { return jack_is_realtime(_client); } + virtual int realtimePriority() const; + virtual void startTransport(); + virtual void stopTransport(); + virtual void seekTransport(unsigned frame); + virtual void seekTransport(const Pos &p); + virtual void setFreewheel(bool f); + jack_transport_state_t transportQuery(jack_position_t* pos); + void graphChanged(); + void registrationChanged(); + void connectJackMidiPorts(); + + virtual int setMaster(bool f); + + //static bool jackStarted; + }; + +#endif + diff --git a/muse2/muse/driver/jackmidi.cpp b/muse2/muse/driver/jackmidi.cpp new file mode 100644 index 00000000..4e871a2f --- /dev/null +++ b/muse2/muse/driver/jackmidi.cpp @@ -0,0 +1,1563 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: jackmidi.cpp,v 1.1.1.1 2010/01/27 09:06:43 terminator356 Exp $ +// (C) Copyright 1999-2010 Werner Schweer (ws@seh.de) +//========================================================= + +//#include +#include +#include + +#include +//#include + +#include "jackmidi.h" +#include "song.h" +#include "globals.h" +#include "midi.h" +#include "mididev.h" +#include "../midiport.h" +#include "../midiseq.h" +#include "../midictrl.h" +#include "../audio.h" +#include "mpevent.h" +//#include "sync.h" +#include "audiodev.h" +#include "../mplugins/midiitransform.h" +#include "../mplugins/mitplugin.h" +#include "xml.h" + +// Turn on debug messages. +//#define JACK_MIDI_DEBUG + +extern unsigned int volatile lastExtMidiSyncTick; + +///int jackmidi_pi[2]; +///int jackmidi_po[2]; + +//extern muse_jack_midi_buffer jack_midi_out_data[JACK_MIDI_CHANNELS]; +//extern muse_jack_midi_buffer jack_midi_in_data[JACK_MIDI_CHANNELS]; +///extern jack_port_t *midi_port_in[JACK_MIDI_CHANNELS]; +///extern jack_port_t *midi_port_out[JACK_MIDI_CHANNELS]; + +///MidiJackDevice* gmdev = NULL; + +///int* jackSeq; +//static snd_seq_addr_t musePort; + +//int MidiJackDevice::_nextOutIdNum = 0; +//int MidiJackDevice::_nextInIdNum = 0; + +//int JackMidiPortList::_nextOutIdNum = 0; +//int JackMidiPortList::_nextInIdNum = 0; + +//JackMidiPortList jackMidiClientPorts; + + +/* +//--------------------------------------------------------- +// JackMidiPortList +//--------------------------------------------------------- + +JackMidiPortList::JackMidiPortList() +{ + +} + +JackMidiPortList::~JackMidiPortList() +{ + +} + +iJackMidiPort JackMidiPortList::createClientPort(int flags) // 1 = writable, 2 = readable - do not mix +{ + if(flags & 1) + { + char buf[80]; + snprintf(buf, 80, "muse-jack-midi-out-%d", _nextOutIdNum); + jack_port_t* _client_jackport = (jack_port_t*)audioDevice->registerOutPort(buf, true); + if(_client_jackport == NULL) + { + fprintf(stderr, "JackMidiPortList::createClientPort failed to register jack-midi-out\n"); + //return QString("Could not register jack-midi-out client port"); + return end(); + } + else + { + JackMidiPort jmp(_client_jackport, QString(buf), flags); + _nextOutIdNum++; + return insert(begin(), std::pair(_client_jackport, jmp)); + } + } + else + if(flags & 2) + { + char buf[80]; + snprintf(buf, 80, "muse-jack-midi-in-%d", _nextInIdNum); + jack_port_t* _client_jackport = (jack_port_t*)audioDevice->registerInPort(buf, true); + if(_client_jackport == NULL) + { + fprintf(stderr, "JackMidiPortList::createClientPort failed to register jack-midi-in\n"); + return end(); + } + else + { + JackMidiPort jmp(_client_jackport, QString(buf), flags); + _nextInIdNum++; + return insert(begin(), std::pair(_client_jackport, jmp)); + } + } + return end(); +} + +// Return true if removed. +bool JackMidiPortList::removeClientPort(jack_port_t* port) +{ + iJackMidiPort ijp = find(port); + if(ijp == end()) + return false; + + // Is output? + if(ijp->second._flags & 1) + _nextOutIdNum--; + // Is input? + if(ijp->second._flags & 2) + _nextInIdNum--; + + erase(ijp); + + audioDevice->unregisterPort(port); + + return true; +} +*/ + +//--------------------------------------------------------- +// MidiJackDevice +//--------------------------------------------------------- + +//MidiJackDevice::MidiJackDevice(const int& a, const QString& n) +MidiJackDevice::MidiJackDevice(jack_port_t* jack_port, const QString& n) + : MidiDevice(n) +{ + //_client_jackport = 0; + _client_jackport = jack_port; + //adr = a; + init(); +} + +MidiJackDevice::~MidiJackDevice() +{ + #ifdef JACK_MIDI_DEBUG + printf("MidiJackDevice::~MidiJackDevice()\n"); + #endif + if(_client_jackport) + audioDevice->unregisterPort(_client_jackport); + //close(); +} + +/* +//--------------------------------------------------------- +// select[RW]fd +//--------------------------------------------------------- + +int MidiJackDevice::selectRfd() +{ + return jackmidi_pi[0]; +} + +int MidiJackDevice::selectWfd() +{ + return jackmidi_po[0]; +} +*/ + +//--------------------------------------------------------- +// createJackMidiDevice +// If name parameter is blank, creates a new (locally) unique one. +//--------------------------------------------------------- + +//QString MidiJackDevice::createJackMidiDevice(int rwflags) // 1:Writable 2: Readable. Do not mix. +MidiDevice* MidiJackDevice::createJackMidiDevice(QString name, int rwflags) // 1:Writable 2: Readable. Do not mix. +{ +/// _openFlags &= _rwFlags; // restrict to available bits + +/// #ifdef JACK_MIDI_DEBUG +/// printf("MidiJackDevice::open %s\n", name.latin1()); +/// #endif + + //jack_port_t* jp = jack_port_by_name(_client, name().latin1()); +/// jack_port_t* jp = (jack_port_t*)audioDevice->findPort(name().latin1()); + +/// if(!jp) +/// { +/// printf("MidiJackDevice::open: Jack midi port %s not found!\n", name().latin1()); +/// _writeEnable = false; +/// _readEnable = false; +/// return QString("Jack midi port not found"); +/// } + +/// int pf = jack_port_flags(jp); + + //if(!name.isEmpty()) + //{ + // Does not work. + // if(audioDevice->findPort(name.latin1())) + // { + // fprintf(stderr, "MidiJackDevice::createJackMidiDevice failed! Given port name %s already exists!\n", name.latin1()); + // return 0; + // } + //} + + jack_port_t* client_jackport = NULL; + //char buf[80]; + + + // If Jack port can receive data from us and we actually want to... + //if((pf & JackPortIsInput) && (_openFlags & 1)) + if(rwflags & 1) + { + if(name.isEmpty()) + { + //snprintf(buf, 80, "muse-jack-midi-out-%d", _nextOutIdNum); + for(int i = 0; ; ++i) + { + //snprintf(buf, 80, "midi-out-%d", i); + name.sprintf("midi-out-%d", i); + + if(!midiDevices.find(name)) + { + // Does not work. + //if(!audioDevice->findPort(buf)) + // break; + //client_jackport = (jack_port_t*)audioDevice->registerOutPort(buf, true); + if(audioDevice->deviceType() == AudioDevice::JACK_AUDIO) // p3.3.52 + { + client_jackport = (jack_port_t*)audioDevice->registerOutPort(name.latin1(), true); + if(client_jackport) + break; + } + else + break; + } + + if(i == 65535) + { + fprintf(stderr, "MidiJackDevice::createJackMidiDevice failed! Can't find unused output port name!\n"); + return 0; + } + } + //name = QString(buf); + } + else + { + if(audioDevice->deviceType() == AudioDevice::JACK_AUDIO) // p3.3.52 + { + client_jackport = (jack_port_t*)audioDevice->registerOutPort(name.latin1(), true); + if(!client_jackport) + { + fprintf(stderr, "MidiJackDevice::createJackMidiDevice failed creating output port name %s\n", name.latin1()); + return 0; + } + } + } + /* + else + { + client_jackport = (jack_port_t*)audioDevice->registerOutPort(name.latin1(), true); + if(!client_jackport) + { + for(int i = 0; ; ++i) + { + snprintf(buf, 80, "midi-out-%d", i); + // Does not work! + //if(!audioDevice->findPort(buf)) + // break; + client_jackport = (jack_port_t*)audioDevice->registerOutPort(buf, true); + if(client_jackport) + break; + + if(i == 65535) + { + fprintf(stderr, "MidiJackDevice::createJackMidiDevice failed! Can't find unused output port name!\n"); + return 0; + } + } + name = QString(buf); + } + } + */ + + //client_jackport = (jack_port_t*)audioDevice->registerOutPort(name.latin1(), true); + //if(client_jackport == NULL) + //{ + // fprintf(stderr, "MidiJackDevice::createJackMidiDevice failed to register jack midi client output port %s\n", name.latin1()); + // return 0; + //} + //else + // _nextOutIdNum++; + + } + else // Note docs say it can't be both input and output. + // If Jack port can send data to us and we actually want it... + //if((pf & JackPortIsOutput) && (_openFlags & 2)) + if(rwflags & 2) + { + if(name.isEmpty()) + { + //snprintf(buf, 80, "muse-jack-midi-in-%d", _nextInIdNum); + for(int i = 0; ; ++i) + { + //snprintf(buf, 80, "midi-in-%d", i); + name.sprintf("midi-in-%d", i); + + if(!midiDevices.find(name)) + { + // Does not work. + //if(!audioDevice->findPort(buf)) + // break; + //client_jackport = (jack_port_t*)audioDevice->registerInPort(buf, true); + if(audioDevice->deviceType() == AudioDevice::JACK_AUDIO) // p3.3.52 + { + client_jackport = (jack_port_t*)audioDevice->registerInPort(name.latin1(), true); + if(client_jackport) + break; + } + else + break; + } + + if(i == 65535) + { + fprintf(stderr, "MidiJackDevice::createJackMidiDevice failed! Can't find unused input port name!\n"); + return 0; + } + } + //name = QString(buf); + } + else + { + if(audioDevice->deviceType() == AudioDevice::JACK_AUDIO) // p3.3.52 + { + client_jackport = (jack_port_t*)audioDevice->registerInPort(name.latin1(), true); + if(!client_jackport) + { + fprintf(stderr, "MidiJackDevice::createJackMidiDevice failed creating input port name %s\n", name.latin1()); + return 0; + } + } + } + + //client_jackport = (jack_port_t*)audioDevice->registerInPort(name.latin1(), true); + + //if(client_jackport == NULL) + //{ + // fprintf(stderr, "MidiJackDevice::createJackMidiDevice failed to register jack midi client input port %s\n", name.latin1()); + //_readEnable = false; + //return QString("Could not register jack-midi-in client port"); + // return 0; + //} + //else + // _nextInIdNum++; + + } + + //if(client_jackport == NULL) // p3.3.52 Removed. Allow the device to be created even if Jack isn't running. + // return 0; + + MidiJackDevice* dev = new MidiJackDevice(client_jackport, name); + dev->setrwFlags(rwflags); + midiDevices.add(dev); + return dev; +} + +//--------------------------------------------------------- +// setName +//--------------------------------------------------------- + +void MidiJackDevice::setName(const QString& s) +{ + #ifdef JACK_MIDI_DEBUG + printf("MidiJackDevice::setName %s new name:%s\n", name().latin1(), s.latin1()); + #endif + _name = s; + if(clientPort()) // p3.3.52 Added check. + audioDevice->setPortName(clientPort(), s.latin1()); +} + +//--------------------------------------------------------- +// open +//--------------------------------------------------------- + +QString MidiJackDevice::open() +{ + _openFlags &= _rwFlags; // restrict to available bits + + #ifdef JACK_MIDI_DEBUG + printf("MidiJackDevice::open %s\n", name().latin1()); + #endif + + /* + //jack_port_t* jp = jack_port_by_name(_client, name().latin1()); + jack_port_t* jp = (jack_port_t*)audioDevice->findPort(name().latin1()); + + if(!jp) + { + printf("MidiJackDevice::open: Jack midi port %s not found!\n", name().latin1()); + _writeEnable = false; + _readEnable = false; + return QString("Jack midi port not found"); + } + + int pf = jack_port_flags(jp); + + // If Jack port can receive data from us and we actually want to... + if((pf & JackPortIsInput) && (_openFlags & 1)) + { + char buf[80]; + snprintf(buf, 80, "muse-jack-midi-out-%d", _nextOutIdNum); + _client_jackport = (jack_port_t*)audioDevice->registerOutPort(buf, true); + if(_client_jackport == NULL) + { + fprintf(stderr, "MidiJackDevice::open failed to register jack-midi-out\n"); + _writeEnable = false; + return QString("Could not register jack-midi-out client port"); + } + else + { + _nextOutIdNum++; + // src, dest + ///audioDevice->connect(_client_jackport, jp); + _writeEnable = true; + } + } + else // Note docs say it can't be both input and output. + // If Jack port can send data to us and we actually want it... + if((pf & JackPortIsOutput) && (_openFlags & 2)) + { + char buf[80]; + snprintf(buf, 80, "muse-jack-midi-in-%d", _nextInIdNum); + _client_jackport = (jack_port_t*)audioDevice->registerInPort(buf, true); + if(_client_jackport == NULL) + { + fprintf(stderr, "MidiJackDevice::open failed to register jack-midi-in\n"); + _readEnable = false; + return QString("Could not register jack-midi-in client port"); + } + else + { + _nextInIdNum++; + ///audioDevice->connect(jp, _client_jackport); + _readEnable = true; + } + } + */ + + _writeEnable = bool(_openFlags & 1); + _readEnable = bool(_openFlags & 2); + + return QString("OK"); +} + +//--------------------------------------------------------- +// close +//--------------------------------------------------------- + +void MidiJackDevice::close() +{ + #ifdef JACK_MIDI_DEBUG + printf("MidiJackDevice::close %s\n", name().latin1()); + #endif + + /* + if(_client_jackport) + { + int pf = jack_port_flags(_client_jackport); + + if(pf & JackPortIsOutput) + _nextOutIdNum--; + else + if(pf & JackPortIsInput) + _nextInIdNum--; + audioDevice->unregisterPort(_client_jackport); + _client_jackport = 0; + _writeEnable = false; + _readEnable = false; + return; + } + */ + + _writeEnable = false; + _readEnable = false; + + /* + //jack_port_t* jp = jack_port_by_name(_client, name().latin1()); + jack_port_t* jp = (jack_port_t*)audioDevice->findPort(name().latin1()); + + if(!jp) + { + printf("MidiJackDevice::close: Jack midi port %s not found!\n", name().latin1()); + _writeEnable = false; + _readEnable = false; + return; + } + + //int pf = jack_port_flags(jp); + + // If Jack port can receive data from us and we actually want to... + //if((pf & JackPortIsInput) && (_openFlags & 1)) + if(jack_port_connected_to(midi_port_out[0], name().latin1())) + { + // src, dest +/// audioDevice->disconnect(midi_port_out[0], jp); + _writeEnable = false; + } + else // Note docs say it can't be both input and output. + // If Jack port can send data to us and we actually want it... + //if((pf & JackPortIsOutput) && (_openFlags & 2)) + if(jack_port_connected_to(midi_port_in[0], name().latin1())) + { +/// audioDevice->disconnect(jp, midi_port_in[0]); + _readEnable = false; + } + */ +} + +//--------------------------------------------------------- +// writeRouting +//--------------------------------------------------------- + +void MidiJackDevice::writeRouting(int level, Xml& xml) const +{ + // p3.3.45 + // If this device is not actually in use by the song, do not write any routes. + // This prevents bogus routes from being saved and propagated in the med file. + if(midiPort() == -1) + return; + + QString s; + if(rwFlags() & 2) // Readable + { + //RouteList* rl = _inRoutes; + //for (ciRoute r = rl->begin(); r != rl->end(); ++r) + for (ciRoute r = _inRoutes.begin(); r != _inRoutes.end(); ++r) + { + if(!r->name().isEmpty()) + { + xml.tag(level++, "Route"); + + //xml.strTag(level, "srcNode", r->name()); + //xml.tag(level, "source type=\"%d\" name=\"%s\"/", r->type, r->name().latin1()); + s = QT_TR_NOOP("source"); + if(r->type != Route::TRACK_ROUTE) + s += QString(QT_TR_NOOP(" type=\"%1\"")).arg(r->type); + + //s += QString(QT_TR_NOOP(" name=\"%1\"/")).arg(r->name()); + s += QString(QT_TR_NOOP(" name=\"%1\"/")).arg(Xml::xmlString(r->name())); + xml.tag(level, s); + + //xml.strTag(level, "dstNode", name()); + //xml.tag(level, "dest type=\"%d\" name=\"%s\"/", Route::JACK_MIDI_ROUTE, name().latin1()); + //xml.tag(level, "dest type=\"%d\" name=\"%s\"/", Route::MIDI_DEVICE_ROUTE, name().latin1()); + //xml.tag(level, "dest devtype=\"%d\" name=\"%s\"/", MidiDevice::JACK_MIDI, name().latin1()); + xml.tag(level, "dest devtype=\"%d\" name=\"%s\"/", MidiDevice::JACK_MIDI, Xml::xmlString(name()).latin1()); + + xml.etag(level--, "Route"); + } + } + } + + for (ciRoute r = _outRoutes.begin(); r != _outRoutes.end(); ++r) + { + if(!r->name().isEmpty()) + { + s = QT_TR_NOOP("Route"); + if(r->channel != -1) + s += QString(QT_TR_NOOP(" channel=\"%1\"")).arg(r->channel); + + //xml.tag(level++, "Route"); + xml.tag(level++, s); + + /* + //xml.strTag(level, "srcNode", name()); + if(r->channel != -1) + //xml.tag(level, "source type=\"%d\" channel=\"%d\" name=\"%s\"/", Route::JACK_MIDI_ROUTE, r->channel, name().latin1()); + //xml.tag(level, "source type=\"%d\" channel=\"%d\" name=\"%s\"/", Route::MIDI_DEVICE_ROUTE, r->channel, name().latin1()); + xml.tag(level, "source devtype=\"%d\" channel=\"%d\" name=\"%s\"/", MidiDevice::JACK_MIDI, r->channel, name().latin1()); + else + //xml.tag(level, "source type=\"%d\" name=\"%s\"/", Route::JACK_MIDI_ROUTE, name().latin1()); + //xml.tag(level, "source type=\"%d\" name=\"%s\"/", Route::MIDI_DEVICE_ROUTE, name().latin1()); + */ + //xml.tag(level, "source devtype=\"%d\" name=\"%s\"/", MidiDevice::JACK_MIDI, name().latin1()); + xml.tag(level, "source devtype=\"%d\" name=\"%s\"/", MidiDevice::JACK_MIDI, Xml::xmlString(name()).latin1()); + + /* + //xml.strTag(level, "dstNode", r->name()); + if(r->channel != -1) + { + if(r->type == Route::MIDI_DEVICE_ROUTE) + xml.tag(level, "dest devtype=\"%d\" channel=\"%d\" name=\"%s\"/", r->device->deviceType(), r->channel, r->name().latin1()); + else + xml.tag(level, "dest type=\"%d\" channel=\"%d\" name=\"%s\"/", r->type, r->channel, r->name().latin1()); + } + else + { + if(r->type == Route::MIDI_DEVICE_ROUTE) + xml.tag(level, "dest devtype=\"%d\" name=\"%s\"/", r->device->deviceType(), r->name().latin1()); + else + xml.tag(level, "dest type=\"%d\" name=\"%s\"/", r->type, r->name().latin1()); + } + */ + + s = QT_TR_NOOP("dest"); + if(r->type == Route::MIDI_DEVICE_ROUTE) + s += QString(QT_TR_NOOP(" devtype=\"%1\"")).arg(r->device->deviceType()); + else + if(r->type != Route::TRACK_ROUTE) + s += QString(QT_TR_NOOP(" type=\"%1\"")).arg(r->type); + + //s += QString(QT_TR_NOOP(" name=\"%1\"/")).arg(r->name()); + s += QString(QT_TR_NOOP(" name=\"%1\"/")).arg(Xml::xmlString(r->name())); + xml.tag(level, s); + + + xml.etag(level--, "Route"); + } + } + + /* + else + if(rwFlags() & 1) // Writable + { + //RouteList* rl = _outRoutes; + //for (ciRoute r = rl->begin(); r != rl->end(); ++r) + for (ciRoute r = _outRoutes.begin(); r != _outRoutes.end(); ++r) + { + if(!r->name().isEmpty()) + { + xml.tag(level++, "Route"); + + //xml.strTag(level, "srcNode", name()); + //if(r->channel != -1) + // xml.tag(level, "srcNode type=\"%d\" channel=\"%d\" name=\"%s\"", Route::JACK_MIDI_ROUTE, r->channel, name().latin1()); + //else + xml.tag(level, "source type=\"%d\" name=\"%s\"/", Route::JACK_MIDI_ROUTE, name().latin1()); + + //xml.strTag(level, "dstNode", r->name()); + xml.tag(level, "dest type=\"%d\" name=\"%s\"/", r->type, r->name().latin1()); + + xml.etag(level--, "Route"); + } + } + } + */ +} + +//--------------------------------------------------------- +// putEvent +//--------------------------------------------------------- + +/* FIX: if we fail to transmit the event, + * we return false (indicating OK). Otherwise + * it seems muse will retry forever + */ +bool MidiJackDevice::putMidiEvent(const MidiPlayEvent& /*event*/) +{ + /* + int give, channel = event.channel(); + int x; + + if(channel >= JACK_MIDI_CHANNELS) return false; + + // buffer up events, because jack eats them in chunks, if + // the buffer is full, there isn't so much to do, than + // drop the event + + give = jack_midi_out_data[channel].give; + if(jack_midi_out_data[channel].buffer[give*4+3]){ + fprintf(stderr, "WARNING: muse-to-jack midi-buffer is full, channel=%u\n", channel); + return false; + } + // copy event(note-on etc..), pitch and volume + // see http://www.midi.org/techspecs/midimessages.php + switch(event.type()){ + case ME_NOTEOFF: + jack_midi_out_data[channel].buffer[give*4+0] = 0x80; + jack_midi_out_data[channel].buffer[give*4+1] = event.dataA() & 0x7f; + jack_midi_out_data[channel].buffer[give*4+2] = event.dataB() & 0x7f; + break; + case ME_NOTEON: + jack_midi_out_data[channel].buffer[give*4+0] = 0x90; + jack_midi_out_data[channel].buffer[give*4+1] = event.dataA() & 0x7f; + jack_midi_out_data[channel].buffer[give*4+2] = event.dataB() & 0x7f; + break; + case ME_CONTROLLER: + jack_midi_out_data[channel].buffer[give*4+0] = 0xb0; + jack_midi_out_data[channel].buffer[give*4+1] = event.dataA() & 0x7f; + jack_midi_out_data[channel].buffer[give*4+2] = event.dataB() & 0x7f; + break; + case ME_PROGRAM: + jack_midi_out_data[channel].buffer[give*4+0] = 0xc0; + jack_midi_out_data[channel].buffer[give*4+1] = event.dataA() & 0x7f; + jack_midi_out_data[channel].buffer[give*4+2] = 0; + break; + case ME_PITCHBEND: + jack_midi_out_data[channel].buffer[give*4+0] = 0xE0; + // convert muse pitch-bend to midi standard + x = 0x2000 + event.dataA(); + jack_midi_out_data[channel].buffer[give*4+1] = x & 0x7f; + jack_midi_out_data[channel].buffer[give*4+2] = (x >> 8) & 0x7f; + break; + default: + fprintf(stderr, "jack-midi-out %u WARNING: unknown event %x\n", channel, event.type()); + return false; + } + jack_midi_out_data[channel].buffer[give*4+3] = 1; // mark state of this slot + // finally increase give position + give++; + if(give >= JACK_MIDI_BUFFER_SIZE){ + give = 0; + } + jack_midi_out_data[channel].give = give; + return false; + */ + + return false; +} + +/* +//--------------------------------------------------------- +// putEvent +// return false if event is delivered +//--------------------------------------------------------- + +bool MidiJackDevice::putEvent(int* event) +{ + int *y; y = event; + return false; +} +*/ + +//--------------------------------------------------------- +// recordEvent +//--------------------------------------------------------- + +void MidiJackDevice::recordEvent(MidiRecordEvent& event) + { + // Set the loop number which the event came in at. + //if(audio->isRecording()) + if(audio->isPlaying()) + event.setLoopNum(audio->loopCount()); + + if (midiInputTrace) { + printf("Jack MidiInput: "); + event.dump(); + } + + int typ = event.type(); + + if(_port != -1) + { + int idin = midiPorts[_port].syncInfo().idIn(); + + //--------------------------------------------------- + // filter some SYSEX events + //--------------------------------------------------- + + if (typ == ME_SYSEX) { + const unsigned char* p = event.data(); + int n = event.len(); + if (n >= 4) { + if ((p[0] == 0x7f) + //&& ((p[1] == 0x7f) || (p[1] == rxDeviceId))) { + && ((p[1] == 0x7f) || (idin == 0x7f) || (p[1] == idin))) { + if (p[2] == 0x06) { + //mmcInput(p, n); + midiSeq->mmcInput(_port, p, n); + return; + } + if (p[2] == 0x01) { + //mtcInputFull(p, n); + midiSeq->mtcInputFull(_port, p, n); + return; + } + } + else if (p[0] == 0x7e) { + //nonRealtimeSystemSysex(p, n); + midiSeq->nonRealtimeSystemSysex(_port, p, n); + return; + } + } + } + else + // Trigger general activity indicator detector. Sysex has no channel, don't trigger. + midiPorts[_port].syncInfo().trigActDetect(event.channel()); + } + + // + // process midi event input filtering and + // transformation + // + + processMidiInputTransformPlugins(event); + + if (filterEvent(event, midiRecordType, false)) + return; + + if (!applyMidiInputTransformation(event)) { + if (midiInputTrace) + printf(" midi input transformation: event filtered\n"); + return; + } + + // + // transfer noteOn events to gui for step recording and keyboard + // remote control + // + if (typ == ME_NOTEON) { + int pv = ((event.dataA() & 0xff)<<8) + (event.dataB() & 0xff); + song->putEvent(pv); + } + + //if(_recordFifo.put(MidiPlayEvent(event))) + // printf("MidiJackDevice::recordEvent: fifo overflow\n"); + + // p3.3.38 + // Do not bother recording if it is NOT actually being used by a port. + // Because from this point on, process handles things, by selected port. + if(_port == -1) + return; + + // Split the events up into channel fifos. Special 'channel' number 17 for sysex events. + unsigned int ch = (typ == ME_SYSEX)? MIDI_CHANNELS : event.channel(); + if(_recordFifo[ch].put(MidiPlayEvent(event))) + printf("MidiJackDevice::recordEvent: fifo channel %d overflow\n", ch); + } + +//--------------------------------------------------------- +// midiReceived +//--------------------------------------------------------- + +void MidiJackDevice::eventReceived(jack_midi_event_t* ev) + { + MidiRecordEvent event; + event.setB(0); + + // NOTE: From MusE-2. Not done here in Muse-1 (yet). + // 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; + //int frameOffset = audio->getFrameOffset(); + unsigned pos = audio->pos().frame(); + + //event.setTime(pos + ev->time); + event.setTime(extSyncFlag.value() ? lastExtMidiSyncTick : (pos + 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: + + // TODO: Deal with large sysex, which are broken up into chunks! + // For now, do not accept if the last byte is not EOX, meaning it's a chunk with more chunks to follow. + if(*(((unsigned char*)ev->buffer) + ev->size - 1) != ME_SYSEX_END) + { + printf("MidiJackDevice::eventReceived sysex chunks not supported!\n"); + return; + } + + //event.setTime(0); // mark as used + event.setType(ME_SYSEX); + event.setData((unsigned char*)(ev->buffer + 1), ev->size - 2); + break; + case ME_MTC_QUARTER: + if(_port != -1) + midiSeq->mtcInputQuarter(_port, *(ev->buffer + 1)); + return; + case ME_SONGPOS: + if(_port != -1) + midiSeq->setSongPosition(_port, *(ev->buffer + 1) | (*(ev->buffer + 2) >> 2 )); // LSB then MSB + return; + //case ME_SONGSEL: + //case ME_TUNE_REQ: + //case ME_SENSE: + case ME_CLOCK: + case ME_TICK: + case ME_START: + case ME_CONTINUE: + case ME_STOP: + if(_port != -1) + midiSeq->realtimeSystemInput(_port, type); + return; + //case ME_SYSEX_END: + //break; + // return; + default: + printf("MidiJackDevice::eventReceived unsupported system event 0x%02x\n", type); + return; + } + } + //return; + break; + default: + printf("MidiJackDevice::eventReceived unknown event 0x%02x\n", type); + //printf("MidiJackDevice::eventReceived unknown event 0x%02x size:%d buf:0x%02x 0x%02x 0x%02x ...0x%02x\n", type, ev->size, *(ev->buffer), *(ev->buffer + 1), *(ev->buffer + 2), *(ev->buffer + (ev->size - 1))); + return; + } + + if (midiInputTrace) { + printf("MidiInput<%s>: ", name().latin1()); + event.dump(); + } + + #ifdef JACK_MIDI_DEBUG + printf("MidiJackDevice::eventReceived time:%d type:%d ch:%d A:%d B:%d\n", event.time(), event.type(), event.channel(), event.dataA(), event.dataB()); + #endif + + // Let recordEvent handle it from here, with timestamps, filtering, gui triggering etc. + recordEvent(event); + } + +//--------------------------------------------------------- +// collectMidiEvents +//--------------------------------------------------------- + +void MidiJackDevice::collectMidiEvents() +{ + if(!_readEnable) + return; + + if(!_client_jackport) + return; + void* port_buf = jack_port_get_buffer(_client_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); + + #ifdef JACK_MIDI_DEBUG + printf("MidiJackDevice::collectMidiEvents number:%d time:%d\n", i, event.time); + #endif + + eventReceived(&event); + } +} + +//--------------------------------------------------------- +// putEvent +// return true if event cannot be delivered +//--------------------------------------------------------- + +bool MidiJackDevice::putEvent(const MidiPlayEvent& ev) +{ + if(!_writeEnable) + //return true; + return false; + + #ifdef JACK_MIDI_DEBUG + printf("MidiJackDevice::putEvent time:%d type:%d ch:%d A:%d B:%d\n", ev.time(), ev.type(), ev.channel(), ev.dataA(), ev.dataB()); + #endif + + bool rv = eventFifo.put(ev); + if(rv) + printf("MidiJackDevice::putEvent: port overflow\n"); + + return rv; +} + +//--------------------------------------------------------- +// queueEvent +// return true if successful +//--------------------------------------------------------- + +//void JackAudioDevice::putEvent(Port port, const MidiEvent& e) +bool MidiJackDevice::queueEvent(const MidiPlayEvent& e) +//bool MidiJackDevice::queueEvent(const MidiPlayEvent& e) +{ + // Perhaps we can find use for this value later, together with the Jack midi MusE port(s). + // No big deal if not. Not used for now. + //int port = e.port(); + + //if(port >= JACK_MIDI_CHANNELS) + // return false; + + //if (midiOutputTrace) { + // printf("MidiOut<%s>: jackMidi: ", portName(port).toLatin1().data()); + // e.dump(); + // } + + //if(debugMsg) + // printf("MidiJackDevice::queueEvent\n"); + + if(!_client_jackport) + return false; + void* pb = jack_port_get_buffer(_client_jackport, segmentSize); + + //unsigned frameCounter = ->frameTime(); + int frameOffset = audio->getFrameOffset(); + unsigned pos = audio->pos().frame(); + int ft = e.time() - frameOffset - pos; + + if (ft < 0) + ft = 0; + if (ft >= (int)segmentSize) { + printf("MidiJackDevice::queueEvent: Event time:%d out of range. offset:%d ft:%d (seg=%d)\n", e.time(), frameOffset, ft, segmentSize); + if (ft > (int)segmentSize) + ft = segmentSize - 1; + } + + #ifdef JACK_MIDI_DEBUG + printf("MidiJackDevice::queueEvent time:%d type:%d ch:%d A:%d B:%d\n", e.time(), e.type(), e.channel(), e.dataA(), e.dataB()); + #endif + + switch(e.type()) { + case ME_NOTEON: + case ME_NOTEOFF: + case ME_POLYAFTER: + case ME_CONTROLLER: + case ME_PITCHBEND: + { + #ifdef JACK_MIDI_DEBUG + printf("MidiJackDevice::queueEvent note on/off polyafter controller or pitch\n"); + #endif + + unsigned char* p = jack_midi_event_reserve(pb, ft, 3); + if (p == 0) { + fprintf(stderr, "MidiJackDevice::queueEvent #1: buffer overflow, event lost\n"); + return false; + } + p[0] = e.type() | e.channel(); + p[1] = e.dataA(); + p[2] = e.dataB(); + } + break; + + case ME_PROGRAM: + case ME_AFTERTOUCH: + { + #ifdef JACK_MIDI_DEBUG + printf("MidiJackDevice::queueEvent program or aftertouch\n"); + #endif + + unsigned char* p = jack_midi_event_reserve(pb, ft, 2); + if (p == 0) { + fprintf(stderr, "MidiJackDevice::queueEvent #2: buffer overflow, event lost\n"); + return false; + } + p[0] = e.type() | e.channel(); + p[1] = e.dataA(); + } + break; + case ME_SYSEX: + { + #ifdef JACK_MIDI_DEBUG + printf("MidiJackDevice::queueEvent sysex\n"); + #endif + + 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, "MidiJackDevice::queueEvent #3: buffer overflow, event lost\n"); + return false; + } + 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("MidiJackDevice::queueEvent: event type %x not supported\n", e.type()); + return false; + break; + } + + return true; +} + +//--------------------------------------------------------- +// processEvent +//--------------------------------------------------------- + +void MidiJackDevice::processEvent(const MidiPlayEvent& event) +{ + //int frameOffset = audio->getFrameOffset(); + //unsigned pos = audio->pos().frame(); + + int chn = event.channel(); + unsigned t = event.time(); + int a = event.dataA(); + int b = event.dataB(); + // Perhaps we can find use for this value later, together with the Jack midi MusE port(s). + // No big deal if not. Not used for now. + int port = event.port(); + + // TODO: No sub-tick playback resolution yet, with external sync. + // Just do this 'standard midi 64T timing thing' for now until we figure out more precise external timings. + // Does require relatively short audio buffers, in order to catch the resolution, but buffer <= 256 should be OK... + // Tested OK so far with 128. + if(extSyncFlag.value()) + t = audio->getFrameOffset() + audio->pos().frame(); + //t = frameOffset + pos; + + #ifdef JACK_MIDI_DEBUG + printf("MidiJackDevice::processEvent time:%d type:%d ch:%d A:%d B:%d\n", event.time(), event.type(), event.channel(), event.dataA(), event.dataB()); + #endif + + if(event.type() == ME_PROGRAM) + { + // don't output program changes for GM drum channel + //if (!(song->mtype() == MT_GM && chn == 9)) { + int hb = (a >> 16) & 0xff; + int lb = (a >> 8) & 0xff; + int pr = a & 0x7f; + + // p3.3.44 + //printf("MidiJackDevice::processEvent ME_PROGRAM time:%d type:%d ch:%d A:%d B:%d hb:%d lb:%d pr:%d\n", + // event.time(), event.type(), event.channel(), event.dataA(), event.dataB(), hb, lb, pr); + + if (hb != 0xff) + queueEvent(MidiPlayEvent(t, port, chn, ME_CONTROLLER, CTRL_HBANK, hb)); + if (lb != 0xff) + queueEvent(MidiPlayEvent(t+1, port, chn, ME_CONTROLLER, CTRL_LBANK, lb)); + queueEvent(MidiPlayEvent(t+2, port, chn, ME_PROGRAM, pr, 0)); + // } + } + else + if(event.type() == ME_PITCHBEND) + { + int v = a + 8192; + // p3.3.44 + //printf("MidiJackDevice::processEvent ME_PITCHBEND v:%d time:%d type:%d ch:%d A:%d B:%d\n", v, event.time(), event.type(), event.channel(), event.dataA(), event.dataB()); + + queueEvent(MidiPlayEvent(t, port, chn, ME_PITCHBEND, v & 0x7f, (v >> 7) & 0x7f)); + } + else + if(event.type() == ME_CONTROLLER) + { + //int a = event.dataA(); + //int b = event.dataB(); + // Perhaps we can find use for this value later, together with the Jack midi MusE port(s). + // No big deal if not. Not used for now. + //int port = event.port(); + + int nvh = 0xff; + int nvl = 0xff; + if(_port != -1) + { + int nv = midiPorts[_port].nullSendValue(); + if(nv != -1) + { + nvh = (nv >> 8) & 0xff; + nvl = nv & 0xff; + } + } + + if(a == CTRL_PITCH) + { + int v = b + 8192; + // p3.3.44 + //printf("MidiJackDevice::processEvent CTRL_PITCH v:%d time:%d type:%d ch:%d A:%d B:%d\n", v, event.time(), event.type(), event.channel(), event.dataA(), event.dataB()); + + queueEvent(MidiPlayEvent(t, port, 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; + + // p3.3.44 + //printf("MidiJackDevice::processEvent CTRL_PROGRAM time:%d type:%d ch:%d A:%d B:%d hb:%d lb:%d pr:%d\n", + // event.time(), event.type(), event.channel(), event.dataA(), event.dataB(), hb, lb, pr); + + if (hb != 0xff) + queueEvent(MidiPlayEvent(t, port, chn, ME_CONTROLLER, CTRL_HBANK, hb)); + if (lb != 0xff) + queueEvent(MidiPlayEvent(t+1, port, chn, ME_CONTROLLER, CTRL_LBANK, lb)); + queueEvent(MidiPlayEvent(t+2, port, 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; + queueEvent(MidiPlayEvent(t, port, ME_SYSEX, sysex, 6)); + } + */ + else if (a < CTRL_14_OFFSET) + { // 7 Bit Controller + queueEvent(event); + //queueEvent(museport, MidiPlayEvent(t, port, chn, event)); + } + 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; + queueEvent(MidiPlayEvent(t, port, chn, ME_CONTROLLER, ctrlH, dataH)); + queueEvent(MidiPlayEvent(t+1, port, chn, ME_CONTROLLER, ctrlL, dataL)); + } + else if (a < CTRL_NRPN_OFFSET) + { // RPN 7-Bit Controller + int ctrlH = (a >> 8) & 0x7f; + int ctrlL = a & 0x7f; + queueEvent(MidiPlayEvent(t, port, chn, ME_CONTROLLER, CTRL_HRPN, ctrlH)); + queueEvent(MidiPlayEvent(t+1, port, chn, ME_CONTROLLER, CTRL_LRPN, ctrlL)); + queueEvent(MidiPlayEvent(t+2, port, chn, ME_CONTROLLER, CTRL_HDATA, b)); + + t += 3; + // Select null parameters so that subsequent data controller events do not upset the last *RPN controller. + //sendNullRPNParams(chn, false); + if(nvh != 0xff) + { + queueEvent(MidiPlayEvent(t, port, chn, ME_CONTROLLER, CTRL_HRPN, nvh & 0x7f)); + t += 1; + } + if(nvl != 0xff) + queueEvent(MidiPlayEvent(t, port, chn, ME_CONTROLLER, CTRL_LRPN, nvl & 0x7f)); + } + //else if (a < CTRL_RPN14_OFFSET) + else if (a < CTRL_INTERNAL_OFFSET) + { // NRPN 7-Bit Controller + int ctrlH = (a >> 8) & 0x7f; + int ctrlL = a & 0x7f; + queueEvent(MidiPlayEvent(t, port, chn, ME_CONTROLLER, CTRL_HNRPN, ctrlH)); + queueEvent(MidiPlayEvent(t+1, port, chn, ME_CONTROLLER, CTRL_LNRPN, ctrlL)); + queueEvent(MidiPlayEvent(t+2, port, chn, ME_CONTROLLER, CTRL_HDATA, b)); + + t += 3; + //sendNullRPNParams(chn, true); + if(nvh != 0xff) + { + queueEvent(MidiPlayEvent(t, port, chn, ME_CONTROLLER, CTRL_HNRPN, nvh & 0x7f)); + t += 1; + } + if(nvl != 0xff) + queueEvent(MidiPlayEvent(t, port, chn, ME_CONTROLLER, CTRL_LNRPN, nvl & 0x7f)); + } + 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; + queueEvent(MidiPlayEvent(t, port, chn, ME_CONTROLLER, CTRL_HRPN, ctrlH)); + queueEvent(MidiPlayEvent(t+1, port, chn, ME_CONTROLLER, CTRL_LRPN, ctrlL)); + queueEvent(MidiPlayEvent(t+2, port, chn, ME_CONTROLLER, CTRL_HDATA, dataH)); + queueEvent(MidiPlayEvent(t+3, port, chn, ME_CONTROLLER, CTRL_LDATA, dataL)); + + t += 4; + //sendNullRPNParams(chn, false); + if(nvh != 0xff) + { + queueEvent(MidiPlayEvent(t, port, chn, ME_CONTROLLER, CTRL_HRPN, nvh & 0x7f)); + t += 1; + } + if(nvl != 0xff) + queueEvent(MidiPlayEvent(t, port, chn, ME_CONTROLLER, CTRL_LRPN, nvl & 0x7f)); + } + 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; + queueEvent(MidiPlayEvent(t, port, chn, ME_CONTROLLER, CTRL_HNRPN, ctrlH)); + queueEvent(MidiPlayEvent(t+1, port, chn, ME_CONTROLLER, CTRL_LNRPN, ctrlL)); + queueEvent(MidiPlayEvent(t+2, port, chn, ME_CONTROLLER, CTRL_HDATA, dataH)); + queueEvent(MidiPlayEvent(t+3, port, chn, ME_CONTROLLER, CTRL_LDATA, dataL)); + + t += 4; + //sendNullRPNParams(chn, true); + if(nvh != 0xff) + { + queueEvent(MidiPlayEvent(t, port, chn, ME_CONTROLLER, CTRL_HNRPN, nvh & 0x7f)); + t += 1; + } + if(nvl != 0xff) + queueEvent(MidiPlayEvent(t, port, chn, ME_CONTROLLER, CTRL_LNRPN, nvl & 0x7f)); + } + else + { + printf("MidiJackDevice::processEvent: unknown controller type 0x%x\n", a); + } + } + else + { + queueEvent(event); + //queueEvent(MidiPlayEvent(t, port, chn, event)); + } +} + +//--------------------------------------------------------- +// processMidi called from audio process only. +//--------------------------------------------------------- + +void MidiJackDevice::processMidi() +{ + if(!_client_jackport) + return; + void* port_buf = jack_port_get_buffer(_client_jackport, segmentSize); + jack_midi_clear_buffer(port_buf); + + while(!eventFifo.isEmpty()) + { + MidiPlayEvent e(eventFifo.get()); + int evTime = e.time(); + // Is event marked to be played immediately? + if(evTime == 0) + { + // Nothing to do but stamp the event to be queued for frame 0+. + //e.setTime(frameOffset + pos); + e.setTime(audio->getFrameOffset() + audio->pos().frame()); + } + + #ifdef JACK_MIDI_DEBUG + printf("MidiJackDevice::processMidi eventFifo time:%d type:%d ch:%d A:%d B:%d\n", e.time(), e.type(), e.channel(), e.dataA(), e.dataB()); + #endif + + //el->insert(eventFifo.get()); + //el->insert(e); + processEvent(e); + } + + MPEventList* el = playEvents(); + if(el->empty()) + return; + + iMPEvent i = nextPlayEvent(); + for(; i != el->end(); ++i) + { + // p3.3.39 Update hardware state so knobs and boxes are updated. Optimize to avoid re-setting existing values. + // Same code as in MidiPort::sendEvent() + if(_port != -1) + { + MidiPort* mp = &midiPorts[_port]; + if(i->type() == ME_CONTROLLER) + { + int da = i->dataA(); + int db = i->dataB(); + db = mp->limitValToInstrCtlRange(da, db); + if(!mp->setHwCtrlState(i->channel(), da, db)) + continue; + //mp->setHwCtrlState(i->channel(), da, db); + } + else + if(i->type() == ME_PITCHBEND) + { + // p3.3.44 + //printf("MidiJackDevice::processMidi playEvents ME_PITCHBEND time:%d type:%d ch:%d A:%d B:%d\n", (*i).time(), (*i).type(), (*i).channel(), (*i).dataA(), (*i).dataB()); + + int da = mp->limitValToInstrCtlRange(CTRL_PITCH, i->dataA()); + if(!mp->setHwCtrlState(i->channel(), CTRL_PITCH, da)) + continue; + //mp->setHwCtrlState(i->channel(), CTRL_PITCH, da); + + //(MidiPlayEvent(t, port, chn, ME_PITCHBEND, v & 0x7f, (v >> 7) & 0x7f)); + } + else + if(i->type() == ME_PROGRAM) + { + if(!mp->setHwCtrlState(i->channel(), CTRL_PROGRAM, i->dataA())) + continue; + //mp->setHwCtrlState(i->channel(), CTRL_PROGRAM, i->dataA()); + } + } + + processEvent(*i); + } + + setNextPlayEvent(i); +} + +//--------------------------------------------------------- +// initMidiJack +// return true on error +//--------------------------------------------------------- + +bool initMidiJack() +{ + /* + int adr = 0; + + memset(jack_midi_out_data, 0, JACK_MIDI_CHANNELS * sizeof(muse_jack_midi_buffer)); + memset(jack_midi_in_data, 0, JACK_MIDI_CHANNELS * sizeof(muse_jack_midi_buffer)); + + MidiJackDevice* dev = new MidiJackDevice(adr, QString("jack-midi")); + dev->setrwFlags(3); // set read and write flags + + if(pipe(jackmidi_pi) < 0){ + fprintf(stderr, "cant create midi-jack input pipe\n"); + } + if(pipe(jackmidi_po) < 0){ + fprintf(stderr, "cant create midi-jack output pipe\n"); + } + + midiDevices.add(dev); + + gmdev = dev; // proclaim the global jack-midi instance + + //jackScanMidiPorts(); + */ + + return false; +} + +/* +struct JackPort { + int adr; + //char* name; + QString name; + int flags; + //JackPort(int a, const char* s, int f) { + JackPort(int a, const QString& s, int f) { + adr = a; + //name = strdup(s); + name = QString(s); + flags = f; + } + }; + + +static std::list portList; + +//--------------------------------------------------------- +// jackScanMidiPorts +//--------------------------------------------------------- + +void jackScanMidiPorts() +{ + int adr; + const char* name; + + portList.clear(); + adr = 0; + name = strdup("namex"); + portList.push_back(JackPort(adr, name, 0)); + // + // check for devices to add + // + for (std::list::iterator k = portList.begin(); k != portList.end(); ++k) { + iMidiDevice i = midiDevices.begin(); + for (;i != midiDevices.end(); ++i) { + //MidiJackDevice* d = dynamic_cast(*i); + break; + //if (d == 0) continue; + //if ((k->adr.client == d->adr.client) && (k->adr.port == d->adr.port)) { + // break; + //} + } + if (i == midiDevices.end()) { + // add device + MidiJackDevice* dev = new MidiJackDevice(k->adr, QString(k->name)); + dev->setrwFlags(k->flags); + midiDevices.add(dev); + } + } +} +*/ + +/* +//--------------------------------------------------------- +// processInput +//--------------------------------------------------------- +static void handle_jack_midi_in(int channel) +{ + MidiRecordEvent event; + int t,n,v; + t = jack_midi_in_data[channel].buffer[0]; + n = jack_midi_in_data[channel].buffer[1]; + v = jack_midi_in_data[channel].buffer[2]; + + event.setType(0); // mark as unused + event.setPort(gmdev->midiPort()); + event.setB(0); + + if(t == 0x90){ // note on + fprintf(stderr, "jackProcessMidiInput note-on\n"); + event.setChannel(channel); + event.setType(ME_NOTEON); + event.setA(n); + event.setB(v); + }else if (t == 0x80){ // note off + fprintf(stderr, "jackProcessMidiInput note-off\n"); + event.setChannel(channel); + event.setType(ME_NOTEOFF); + event.setA(n); + event.setB(v); + }else{ + fprintf(stderr, "WARNING: unknown midi-in on channel %d: %x,%x,%x\n", + channel, t, n, v); + return; + } + if(event.type()){ + gmdev->recordEvent(event); + midiPorts[gmdev->midiPort()].syncInfo().trigActDetect(event.channel()); + } +} + +void MidiJackDevice::processInput() +{ + char buf; + int i,s; + read(gmdev->selectRfd(), &buf, 1); + + s = 1; + for(i = 0; i < JACK_MIDI_CHANNELS; i++){ + if(jack_midi_in_data[i].buffer[3]){ + s = 0; + handle_jack_midi_in(i); + jack_midi_in_data[i].buffer[3] = 0; + } + } +} + +*/ diff --git a/muse2/muse/driver/jackmidi.h b/muse2/muse/driver/jackmidi.h new file mode 100644 index 00000000..12b967a9 --- /dev/null +++ b/muse2/muse/driver/jackmidi.h @@ -0,0 +1,156 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: jackmidi.h,v 1.1.1.1 2010/01/27 09:06:43 terminator356 Exp $ +// (C) Copyright 1999-2010 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __JACKMIDI_H__ +#define __JACKMIDI_H__ + +//#include + +#include + +#include +#include + +#include "mididev.h" +#include "route.h" + +class QString; +class MidiFifo; +class MidiRecordEvent; +class MidiPlayEvent; +//class RouteList; +class Xml; + +// Turn on to show multiple devices, work in progress, +// not working fully yet, can't seem to connect... +#define JACK_MIDI_SHOW_MULTIPLE_DEVICES + +// It appears one client port per remote port will be necessary. +// Jack doesn't seem to like manipulation of non-local ports buffers. +#define JACK_MIDI_USE_MULTIPLE_CLIENT_PORTS + +/* jack-midi channels */ +//#define JACK_MIDI_CHANNELS 32 + +/* jack-midi buffer size */ +//#define JACK_MIDI_BUFFER_SIZE 32 + +/* +typedef struct { + int give; + int take; + // 32 parallel midi events, where each event contains three + // midi-bytes and one busy-byte + char buffer[4 * JACK_MIDI_BUFFER_SIZE]; +} muse_jack_midi_buffer; +*/ + +/* +struct JackMidiPort +{ + jack_port_t* _jackPort; + QString _name; + int _flags; // 1 = writable, 2 = readable - do not mix + JackMidiPort(jack_port_t* jp, const QString& s, int f) + { + _jackPort = jp; + _name = QString(s); + _flags = f; + } +}; + +typedef std::map >::iterator iJackMidiPort; +typedef std::map >::const_iterator ciJackMidiPort; + +class JackMidiPortList : public std::map > +{ + private: + static int _nextOutIdNum; + static int _nextInIdNum; + + public: + JackMidiPortList(); + ~JackMidiPortList(); + iJackMidiPort createClientPort(int flags); + bool removeClientPort(jack_port_t* port); +}; + +extern JackMidiPortList jackMidiClientPorts; +*/ + +//--------------------------------------------------------- +// MidiJackDevice +//--------------------------------------------------------- + +class MidiJackDevice : public MidiDevice { + public: + //int adr; + + private: + // fifo for midi events sent from gui + // direct to midi port: + MidiFifo eventFifo; + + //static int _nextOutIdNum; + //static int _nextInIdNum; + + jack_port_t* _client_jackport; + //RouteList _routes; + + virtual QString open(); + virtual void close(); + //bool putEvent(int*); + + void processEvent(const MidiPlayEvent&); + // Port is not midi port, it is the port(s) created for MusE. + bool queueEvent(const MidiPlayEvent&); + + virtual bool putMidiEvent(const MidiPlayEvent&); + //bool sendEvent(const MidiPlayEvent&); + + void eventReceived(jack_midi_event_t*); + + public: + MidiJackDevice() {} + //MidiJackDevice(const int&, const QString& name); + MidiJackDevice(jack_port_t* jack_port, const QString& name); + + static MidiDevice* createJackMidiDevice(QString /*name*/, int /*rwflags*/); // 1:Writable 2: Readable. Do not mix. + + virtual inline int deviceType() { return JACK_MIDI; } + + virtual void setName(const QString&); + + virtual void processMidi(); + virtual ~MidiJackDevice(); + //virtual int selectRfd(); + //virtual int selectWfd(); + //virtual void processInput(); + + virtual void recordEvent(MidiRecordEvent&); + + virtual bool putEvent(const MidiPlayEvent&); + virtual void collectMidiEvents(); + + //virtual jack_port_t* jackPort() { return _jackport; } + //virtual jack_port_t* clientJackPort() { return _client_jackport; } + virtual void* clientPort() { return (void*)_client_jackport; } + + //RouteList* routes() { return &_routes; } + //bool noRoute() const { return _routes.empty(); } + virtual void writeRouting(int, Xml&) const; + }; + +extern bool initMidiJack(); +//extern int jackSelectRfd(); +//extern int jackSelectWfd(); +//extern void jackProcessMidiInput(); +//extern void jackScanMidiPorts(); + +#endif + + diff --git a/muse2/muse/driver/rtctimer.cpp b/muse2/muse/driver/rtctimer.cpp new file mode 100644 index 00000000..1a3cefa6 --- /dev/null +++ b/muse2/muse/driver/rtctimer.cpp @@ -0,0 +1,155 @@ + //========================================================= + // MusE + // Linux Music Editor + // $Id: rtctimer.cpp,v 1.1.2.11 2009/03/09 02:05:18 terminator356 Exp $ + // + // Most code moved from midiseq.cpp by Werner Schweer. + // + // (C) Copyright 2004 Robert Jonsson (rj@spamatica.se) + // (C) Copyright -2004 Werner Schweer (werner@seh.de) + //========================================================= + +#include +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,0) +#include +#include +#else +#include +#endif +#include +#include +#include +#include + + +#include "rtctimer.h" +#include "globals.h" +#include "gconfig.h" + + +RtcTimer::RtcTimer() + { + timerFd = -1; + } + +RtcTimer::~RtcTimer() + { + if (timerFd != -1) + close(timerFd); + } + +signed int RtcTimer::initTimer() + { + if(TIMER_DEBUG) + printf("RtcTimer::initTimer()\n"); + if (timerFd != -1) { + fprintf(stderr,"RtcTimer::initTimer(): called on initialised timer!\n"); + return -1; + } + doSetuid(); + + timerFd = ::open("/dev/rtc", O_RDONLY); + if (timerFd == -1) { + fprintf(stderr, "fatal error: open /dev/rtc failed: %s\n", strerror(errno)); + fprintf(stderr, "hint: check if 'rtc' kernel module is loaded, or used by something else\n"); + undoSetuid(); + return timerFd; + } + if (!setTimerFreq(config.rtcTicks)) { + // unable to set timer frequency + return -1; + } + // check if timer really works, start and stop it once. + if (!startTimer()) { + return -1; + } + if (!stopTimer()) { + return -1; + } + return timerFd; + } + +unsigned int RtcTimer::setTimerResolution(unsigned int resolution) + { + if(TIMER_DEBUG) + printf("RtcTimer::setTimerResolution(%d)\n",resolution); + /* The RTC can take power-of-two frequencies from 2 to 8196 Hz. + * It doesn't really have a resolution as such. + */ + return 0; + } + +unsigned int RtcTimer::setTimerFreq(unsigned int freq) + { + int rc = ioctl(timerFd, RTC_IRQP_SET, freq); + if (rc == -1) { + fprintf(stderr, "RtcTimer::setTimerFreq(): cannot set tick on /dev/rtc: %s\n", + strerror(errno)); + fprintf(stderr, " precise timer not available\n"); + return 0; + } + return freq; + } + +unsigned int RtcTimer::getTimerResolution() + { + /* The RTC doesn't really work with a set resolution as such. + * Not sure how this fits into things yet. + */ + return 0; + } + +unsigned int RtcTimer::getTimerFreq() + { + unsigned int freq; + int rv = ioctl(timerFd, RTC_IRQP_READ, &freq); + if (rv < 1) + return 0; + return freq; + } + +bool RtcTimer::startTimer() + { + if(TIMER_DEBUG) + printf("RtcTimer::startTimer()\n"); + if (timerFd == -1) { + fprintf(stderr, "RtcTimer::startTimer(): no timer open to start!\n"); + return false; + } + if (ioctl(timerFd, RTC_PIE_ON, 0) == -1) { + perror("MidiThread: start: RTC_PIE_ON failed"); + undoSetuid(); + return false; + } + return true; + } + +bool RtcTimer::stopTimer() + { + if(TIMER_DEBUG) + printf("RtcTimer::stopTimer\n"); + if (timerFd != -1) { + ioctl(timerFd, RTC_PIE_OFF, 0); + } + else { + fprintf(stderr,"RtcTimer::stopTimer(): no RTC to stop!\n"); + return false; + } + return true; + } + +unsigned int RtcTimer::getTimerTicks(bool /*printTicks*/)// prevent compiler warning: unused parameter + { + if(TIMER_DEBUG) + printf("getTimerTicks()\n"); + unsigned long int nn; + if (timerFd==-1) { + fprintf(stderr,"RtcTimer::getTimerTicks(): no RTC open to read!\n"); + return 0; + } + if (read(timerFd, &nn, sizeof(unsigned long)) != sizeof(unsigned long)) { + fprintf(stderr,"RtcTimer::getTimerTicks(): error reading RTC\n"); + return 0; + } + return nn; + } diff --git a/muse2/muse/driver/rtctimer.h b/muse2/muse/driver/rtctimer.h new file mode 100644 index 00000000..fa58b032 --- /dev/null +++ b/muse2/muse/driver/rtctimer.h @@ -0,0 +1,44 @@ + //========================================================= + // MusE + // Linux Music Editor + // $Id: rtctimer.h,v 1.1.2.3 2005/08/21 18:11:28 spamatica Exp $ + // + // Most code moved from midiseq.cpp + // + // (C) Copyright 2004 Robert Jonsson (rj@spamatica.se) + // (C) Copyright -2004 Werner Schweer (werner@seh.de) + //========================================================= + +#ifndef __RTCTIMER_H__ +#define __RTCTIMER_H__ + +#include "timerdev.h" + + +//--------------------------------------------------------- +// AlsaTimer +//--------------------------------------------------------- + +class RtcTimer : public Timer{ + + + public: + RtcTimer(); + virtual ~RtcTimer(); + + virtual signed int initTimer(); + virtual unsigned int setTimerResolution(unsigned int resolution); + virtual unsigned int getTimerResolution(); + virtual unsigned int setTimerFreq(unsigned int tick); + virtual unsigned int getTimerFreq(); + + virtual bool startTimer(); + virtual bool stopTimer(); + virtual unsigned int getTimerTicks(bool printTicks=false); + + private: + int timerFd; + +}; + +#endif //__ALSATIMER_H__ diff --git a/muse2/muse/driver/timerdev.h b/muse2/muse/driver/timerdev.h new file mode 100644 index 00000000..944bc213 --- /dev/null +++ b/muse2/muse/driver/timerdev.h @@ -0,0 +1,41 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: timerdev.h,v 1.1.2.3 2005/08/21 18:11:28 spamatica Exp $ +// +// Plenty of code borrowed from timer.c example in +// alsalib 1.0.7 +// +// (C) Copyright 2004 Robert Jonsson (rj@spamatica.se) +//========================================================= + +#ifndef __TIMERDEV_H__ +#define __TIMERDEV_H__ + +#include "alsa/asoundlib.h" + +#define TIMER_DEBUG 0 + +//--------------------------------------------------------- +// AlsaTimer +//--------------------------------------------------------- + +class Timer { + + public: + Timer() {}; + virtual ~Timer() {}; + + virtual signed int initTimer() = 0; + virtual unsigned int setTimerResolution(unsigned int resolution) = 0; + virtual unsigned int getTimerResolution() = 0; + virtual unsigned int setTimerFreq(unsigned int freq) = 0; + virtual unsigned int getTimerFreq() = 0; + + virtual bool startTimer() = 0; + virtual bool stopTimer() = 0; + virtual unsigned int getTimerTicks(bool printTicks = false) = 0; + +}; + +#endif //__ALSATIMER_H__ diff --git a/muse2/muse/dssihost.cpp b/muse2/muse/dssihost.cpp new file mode 100644 index 00000000..2c13d223 --- /dev/null +++ b/muse2/muse/dssihost.cpp @@ -0,0 +1,3055 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id: dssihost.cpp,v 1.15.2.16 2009/12/15 03:39:58 terminator356 Exp $ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the 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 + +// Turn on debugging messages +//#define DSSI_DEBUG + +// Support vst state saving/loading with vst chunks. Requires patches to DSSI and DSSI-vst! +//#define DSSI_VST_CHUNK_SUPPORT + +#include +#include +#include +#include +#include +//#include +//#include +#include +//#include +#include +#include +//#include + +#include "dssihost.h" +#include "synth.h" +#include "audio.h" +#include "jackaudio.h" +#include "midi.h" +#include "midiport.h" +#include "stringparam.h" +#include "plugin.h" +//#include "al/al.h" +//#include "al/xml.h" +#include "xml.h" +#include "song.h" +//#include "midictrl.h" +//#include "ladspaplugin.h" + +#include "app.h" +#include "globals.h" +#include "globaldefs.h" +//#include "al/dsp.h" +#include "gconfig.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. + + + #ifdef DSSI_DEBUG + printf("DssiSynthIF::oscUpdate synth name:%s url:%s uiTarget:%p uiOscPath:%s uiOscConfigurePath:%s museProject:%s\n", synti->name().ascii(), url, uiTarget, uiOscPath, uiOscConfigurePath, museProject.ascii()); + #endif + + //lo_send(uiTarget, uiOscConfigurePath, "ss", + //DSSI_PROJECT_DIRECTORY_KEY, song->projectPath().toAscii().data()); + lo_send(uiTarget, uiOscConfigurePath, "ss", + DSSI_PROJECT_DIRECTORY_KEY, museProject.ascii()); + +#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; + + #ifdef DSSI_DEBUG + if(argc) + { + printf("oscMessageHandler: path:%s argc:%d\n", path, argc); + for(int i = 0; i < argc; ++i) + { + printf(" "); + lo_arg_pp((lo_type)types[i], argv[i]); + } + printf("\n"); + } + else + { + printf("%s\n", path); + printf("oscMessageHandler: no args, path:%s\n", path); + } + #endif + + if (strncmp(p, "/dssi/", 6)) + return oscDebugHandler(path, types, argv, argc, data, user_data); + + p += 6; + //p = strrchr(p, "/"); + + SynthIList* sl = song->syntis(); + DssiSynthIF* instance = 0; + SynthI* synti = 0; + + #ifdef DSSI_DEBUG + fprintf(stderr, "oscMessageHandler: song->syntis() size:%d\n", sl->size()); + #endif + + for(int retry = 0; retry < 5; ++retry) + { + #ifdef DSSI_DEBUG + fprintf(stderr, "oscMessageHandler: search retry number:%d ...\n", retry); + #endif + + //if(uiOscPath) + // break; + + for(iSynthI si = sl->begin(); si != sl->end(); ++si) + { + #ifdef DSSI_DEBUG + fprintf(stderr, "oscMessageHandler: searching for synth p:%s: checking instances:%s\n", p, (*si)->name().ascii()); + #endif + + //int l = strlen((*si)->name().toAscii().data()); + //if (!strncmp(p, (*si)->name().toAscii().data(), l)) { + //int l = strlen((*si)->name().ascii()); + const char* sub = strstr(p, (*si)->name().ascii()); + + //if(!strncmp(p, (*si)->name().ascii(), l)) + if(sub != NULL) + { + synti = *si; + instance = (DssiSynthIF*)(synti->sif()); + + //p += l; + p = sub + strlen((*si)->name().ascii()); + + break; + } + } + if(instance) + break; + + sleep(1); + } + + if(!instance) + { + fprintf(stderr, "oscMessageHandler: error: no instance\n"); + return oscDebugHandler(path, types, argv, argc, data, user_data); + } + + if (*p != '/' || *(p + 1) == 0) + { + fprintf(stderr, "oscMessageHandler: error: end or no /\n"); + return oscDebugHandler(path, types, argv, argc, data, user_data); + } + + ++p; + + #ifdef DSSI_DEBUG + fprintf(stderr, "oscMessageHandler: method:%s\n", p); + #endif + + 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(QFileInfo& fi) // ddskrjo removed const for argument + { + //void* handle = dlopen(fi.filePath().toAscii().data(), RTLD_NOW); + void* handle = dlopen(fi.filePath().latin1(), RTLD_NOW); + //void* handle = dlopen(fi.absFilePath().latin1(), RTLD_NOW); + + if (handle == 0) { + fprintf(stderr, "scanDSSILib: dlopen(%s) failed: %s\n", + //fi.filePath().toAscii().data(), dlerror()); + fi.filePath().latin1(), dlerror()); + //fi.absFilePath().latin1(), 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(), + fi.filePath().ascii(), + //fi.absFilePath().latin1(), + + txt); + dlclose(handle); + exit(1); + } + */ + dlclose(handle); + return; + } + else + { + const DSSI_Descriptor* descr; + for (int i = 0;; ++i) + { + descr = dssi(i); + if (descr == 0) + break; + + #ifdef DSSI_DEBUG + fprintf(stderr, "scanDSSILib: name:%s inPlaceBroken:%d\n", descr->LADSPA_Plugin->Name, LADSPA_IS_INPLACE_BROKEN(descr->LADSPA_Plugin->Properties)); + #endif + + // Listing synths only while excluding effect plugins: + // Do the exact opposite of what dssi-vst.cpp does for listing ladspa plugins. + // That way we cover all bases - effect plugins and synths. + // Non-synths will show up in the ladspa effect dialog, while synths will show up here... + // There should be nothing left out... + if(descr->run_synth || + descr->run_synth_adding || + descr->run_multiple_synths || + descr->run_multiple_synths_adding) + + { + const QString label(descr->LADSPA_Plugin->Label); + + // Make sure it doesn't already exist. + std::vector::iterator is; + for(is = synthis.begin(); is != synthis.end(); ++is) + { + Synth* s = *is; + //#ifdef DSSI_DEBUG + // fprintf(stderr, "scanDSSILib: name:%s listname:%s lib:%s listlib:%s\n", + // label.latin1(), s->name().latin1(), fi.baseName(true).latin1(), s->baseName().latin1()); + //#endif + + if(s->name() == label && s->baseName() == fi.baseName(true)) + break; + } + if(is != synthis.end()) + continue; + + DssiSynth* s = new DssiSynth(fi, descr); + + if(debugMsg) + { + fprintf(stderr, "scanDSSILib: name:%s listname:%s lib:%s listlib:%s\n", + label.latin1(), s->name().latin1(), fi.baseName(true).latin1(), s->baseName().latin1()); + int ai = 0, ao = 0, ci = 0, co = 0; + for(unsigned long pt = 0; pt < descr->LADSPA_Plugin->PortCount; ++pt) + { + LADSPA_PortDescriptor pd = descr->LADSPA_Plugin->PortDescriptors[pt]; + if(LADSPA_IS_PORT_INPUT(pd) && LADSPA_IS_PORT_AUDIO(pd)) + ai++; + else + if(LADSPA_IS_PORT_OUTPUT(pd) && LADSPA_IS_PORT_AUDIO(pd)) + ao++; + else + if(LADSPA_IS_PORT_INPUT(pd) && LADSPA_IS_PORT_CONTROL(pd)) + ci++; + else + if(LADSPA_IS_PORT_OUTPUT(pd) && LADSPA_IS_PORT_CONTROL(pd)) + co++; + } + fprintf(stderr, "audio ins:%d outs:%d control ins:%d outs:%d\n", ai, ao, ci, co); + } + + synthis.push_back(s); + } + else + { + // NOTE: Just a test + //QFileInfo ffi(fi); + //plugins.add(&ffi, LADSPA_Descriptor_Function(NULL), descr->LADSPA_Plugin, false); + //plugins.add(&ffi, descr, false); + } + } + } + dlclose(handle); + } + +//--------------------------------------------------------- +// scanVstDir +//--------------------------------------------------------- + +static void scanDSSIDir(QString& s) // ddskrjo removed const for argument +{ + if(debugMsg) + //printf("scan DSSI plugin dir <%s>\n", s.toAscii().data()); + printf("scanDSSIDir: scan DSSI plugin dir <%s>\n", s.latin1()); + +#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); + //} + + QStringList list = pluginDir.entryList(); + for(unsigned int i = 0; i < list.count(); ++i) + { + if(debugMsg) + printf("scanDSSIDir: found %s\n", (s + QString("/") + list[i]).latin1()); + + QFileInfo fi(s + QString("/") + list[i]); + scanDSSILib(fi); + } +} + +//--------------------------------------------------------- +// initDSSI +//--------------------------------------------------------- + +void initDSSI() + { + const char* dssiPath = getenv("DSSI_PATH"); + if (dssiPath == 0) + dssiPath = "/usr/local/lib64/dssi:/usr/lib64/dssi:/usr/local/lib/dssi:/usr/lib/dssi"; + + //const char* ladspaPath = getenv("LADSPA_PATH"); + //if (ladspaPath == 0) + // ladspaPath = "/usr/local/lib64/ladspa:/usr/lib64/ladspa:/usr/local/lib/ladspa:/usr/lib/ladspa"; + + const char* p = dssiPath; + //QString pth = QString(dssiPath) + QString(":") + QString(ladspaPath); + //const char* p = pth.latin1(); + 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'; + QString tmpStr(buffer); + scanDSSIDir(tmpStr); + 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); + } + +//--------------------------------------------------------- +// DssiSynth +// Synth.label = plug.Label +// Synth.descr = plug.Name +// Synth.maker = plug.maker +// Synth.version = nil (no such field in ladspa, maybe try copyright instead) +//--------------------------------------------------------- + +DssiSynth::DssiSynth(QFileInfo& fi, const DSSI_Descriptor* d) : // ddskrjo removed const from QFileInfo + //Synth(fi, label, descr, maker, ver) + Synth(fi, QString(d->LADSPA_Plugin->Label), QString(d->LADSPA_Plugin->Name), QString(d->LADSPA_Plugin->Maker), QString()) +{ + df = 0; + handle = 0; + dssi = 0; + _hasGui = false; + + const LADSPA_Descriptor* descr = d->LADSPA_Plugin; + + _portCount = descr->PortCount; + //_portDescriptors = 0; + //if(_portCount) + // _portDescriptors = new LADSPA_PortDescriptor[_portCount]; + + _inports = 0; + _outports = 0; + _controlInPorts = 0; + _controlOutPorts = 0; + for(unsigned long k = 0; k < _portCount; ++k) + { + LADSPA_PortDescriptor pd = descr->PortDescriptors[k]; + //_portDescriptors[k] = pd; + if(pd & LADSPA_PORT_AUDIO) + { + if(pd & LADSPA_PORT_INPUT) + ++_inports; + else + if(pd & LADSPA_PORT_OUTPUT) + ++_outports; + } + else + if(pd & LADSPA_PORT_CONTROL) + { + if(pd & LADSPA_PORT_INPUT) + ++_controlInPorts; + else + if(pd & LADSPA_PORT_OUTPUT) + ++_controlOutPorts; + } + } + + _inPlaceCapable = !LADSPA_IS_INPLACE_BROKEN(descr->Properties); + + // Blacklist vst plugins in-place configurable for now. + if ((_inports != _outports) || (fi.baseName(true) == QString("dssi-vst") && !config.vstInPlace)) + _inPlaceCapable = false; +} + +DssiSynth::~DssiSynth() +{ + +} + +//--------------------------------------------------------- +// createSIF +//--------------------------------------------------------- + +SynthIF* DssiSynth::createSIF(SynthI* synti) +{ + if (_instances == 0) + { + //handle = dlopen(info.filePath().toAscii().data(), RTLD_NOW); + handle = dlopen(info.filePath().latin1(), RTLD_NOW); + //handle = dlopen(info.absFilePath().latin1(), RTLD_NOW); + + if (handle == 0) + { + fprintf(stderr, "DssiSynth::createSIF dlopen(%s) failed: %s\n", + //info.filePath().toAscii().data(), dlerror()); + info.filePath().latin1(), dlerror()); + //info.absFilePath().latin1(), 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(), + info.filePath().latin1(), + //info.absFilePath().latin1(), + + 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; + } + + if(dssi != 0) + { + _inports = 0; + _outports = 0; + _controlInPorts = 0; + _controlOutPorts = 0; + + pIdx.clear(); + opIdx.clear(); + iIdx.clear(); + oIdx.clear(); + rpIdx.clear(); + iUsedIdx.clear(); + midiCtl2PortMap.clear(); + port2MidiCtlMap.clear(); + //synti->_guiUpdateControls.clear(); + + const LADSPA_Descriptor* descr = dssi->LADSPA_Plugin; + //#ifdef DSSI_DEBUG + // printf("DssiSynth::createSIF ladspa plugin PortCount:%lu\n", d->PortCount); + //#endif + + _portCount = descr->PortCount; + + for (unsigned long k = 0; k < _portCount; ++k) + { + LADSPA_PortDescriptor pd = descr->PortDescriptors[k]; + + #ifdef DSSI_DEBUG + printf("DssiSynth::createSIF ladspa plugin Port:%ld Name:%s descriptor:%x\n", k, descr->PortNames[k], pd); + #endif + + if (LADSPA_IS_PORT_AUDIO(pd)) + { + if (LADSPA_IS_PORT_INPUT(pd)) + { + ++_inports; + iIdx.push_back(k); + iUsedIdx.push_back(false); // Start out with all false. + } + else if (LADSPA_IS_PORT_OUTPUT(pd)) + { + ++_outports; + oIdx.push_back(k); + } + + rpIdx.push_back((unsigned long)-1); + } + else if (LADSPA_IS_PORT_CONTROL(pd)) + { + if (LADSPA_IS_PORT_INPUT(pd)) + { + rpIdx.push_back(_controlInPorts); + ++_controlInPorts; + pIdx.push_back(k); + // Set to false at first. + //synti->_guiUpdateControls.push_back(false); + } + else if (LADSPA_IS_PORT_OUTPUT(pd)) + { + rpIdx.push_back((unsigned long)-1); + ++_controlOutPorts; + opIdx.push_back(k); + } + } + } + + _inPlaceCapable = !LADSPA_IS_INPLACE_BROKEN(descr->Properties); + // Blacklist vst plugins in-place configurable for now. + if((_inports != _outports) || (info.baseName(true) == QString("dssi-vst") && !config.vstInPlace)) + _inPlaceCapable = false; + } + } + + if (dssi == 0) + { + //fprintf(stderr, "cannot found DSSI synti %s\n", _name.toAscii().data()); + fprintf(stderr, "cannot find DSSI synti %s\n", _name.latin1()); + dlclose(handle); + handle = 0; + df = 0; + return 0; + } + + DssiSynthIF* sif = new DssiSynthIF(synti); + ++_instances; + sif->init(this); + + //_plugin->incInstances(1); + + + +// static char oscUrl[1024]; + //snprintf(oscUrl, 1024, "%s/%s", url, synti->name().toAscii().data()); + //snprintf(oscUrl, 1024, "%s/%s", url, synti->name().latin1()); +// snprintf(oscUrl, 1024, "%s/%s/%s", url, info.baseName().latin1(), synti->name().latin1()); + //QString guiPath(info.path() + "/" + info.baseName()); + QString guiPath(info.dirPath() + "/" + info.baseName()); + QDir guiDir(guiPath, "*", QDir::Unsorted, QDir::Files); + _hasGui = guiDir.exists(); + + //sif->initGui(); + + return sif; +} + +//--------------------------------------------------------- +// guiVisible +//--------------------------------------------------------- + +bool DssiSynthIF::guiVisible() const + { + //return _guiVisible; + #ifdef OSC_SUPPORT + return _oscif.oscGuiVisible(); + #endif + return false; + } + +//--------------------------------------------------------- +// showGui +//--------------------------------------------------------- + +void DssiSynthIF::showGui(bool v) + { + #ifdef OSC_SUPPORT + + #ifdef DSSI_DEBUG + printf("DssiSynthIF::showGui(): v:%d visible:%d\n", v, guiVisible()); + #endif + + _oscif.oscShowGui(v); + + #endif // OSC_SUPPORT + + /* + if (v == guiVisible()) + return; + + //if(guiPid == -1) + if((guiQProc == 0) || (!guiQProc->isRunning())) + { + // We need an indicator that update was called - update must have been called to get new path etc... + // If the process is not running this path is invalid, right? + if(uiOscPath) + free(uiOscPath); + uiOscPath = 0; + + #ifdef DSSI_DEBUG + printf("DssiSynthIF::showGui(): No QProcess or process not running. Starting gui...\n"); + #endif + + initGui(); + } + + //for (int i = 0; i < 5; ++i) { + for (int i = 0; i < 10; ++i) { // Give it a wee bit more time? + if (uiOscPath) + break; + sleep(1); + } + if (uiOscPath == 0) { + printf("DssiSynthIF::showGui(): no uiOscPath. Error: Timeout - synth gui did not start within 10 seconds.\n"); + return; + } + + char uiOscGuiPath[strlen(uiOscPath)+6]; + sprintf(uiOscGuiPath, "%s/%s", uiOscPath, v ? "show" : "hide"); + #ifdef DSSI_DEBUG + printf("DssiSynthIF::showGui(): Sending show/hide uiOscGuiPath:%s\n", uiOscGuiPath); + #endif + + lo_send(uiTarget, uiOscGuiPath, ""); + _guiVisible = v; + */ + } + +//--------------------------------------------------------- +// receiveEvent +//--------------------------------------------------------- + +//MidiEvent DssiSynthIF::receiveEvent() +// { +// return MidiEvent(); +// } +MidiPlayEvent DssiSynthIF::receiveEvent() + { + return MidiPlayEvent(); + } + +//--------------------------------------------------------- +// init +//--------------------------------------------------------- + +bool DssiSynthIF::init(DssiSynth* s) + { + #ifdef DSSI_DEBUG + printf("DssiSynthIF::init\n"); + #endif + + synth = s; + const DSSI_Descriptor* dssi = synth->dssi; + const LADSPA_Descriptor* ld = dssi->LADSPA_Plugin; + handle = ld->instantiate(ld, sampleRate); + + #ifdef OSC_SUPPORT + _oscif.oscSetSynthIF(this); + #endif + + queryPrograms(); + + int inports = synth->_inports; + if(inports != 0) + { + audioInBuffers = new float*[inports]; + for(int k = 0; k < inports; ++k) + { + //audioInBuffers[k] = new LADSPA_Data[segmentSize]; + //posix_memalign((void**)(audioInBuffers + k), 16, sizeof(float) * segmentSize); + posix_memalign((void**)&audioInBuffers[k], 16, sizeof(float) * segmentSize); + memset(audioInBuffers[k], 0, sizeof(float) * segmentSize); + ld->connect_port(handle, synth->iIdx[k], audioInBuffers[k]); + } + } + + int outports = synth->_outports; + if(outports != 0) + { + audioOutBuffers = new float*[outports]; + for(int k = 0; k < outports; ++k) + { + //audioOutBuffers[k] = new LADSPA_Data[segmentSize]; + //posix_memalign((void**)(audioOutBuffers + k), 16, sizeof(float) * segmentSize); + posix_memalign((void**)&audioOutBuffers[k], 16, sizeof(float) * segmentSize); + memset(audioOutBuffers[k], 0, sizeof(float) * segmentSize); + ld->connect_port(handle, synth->oIdx[k], audioOutBuffers[k]); + //printf("DssiSynthIF::init output port name: %s\n", ld->PortNames[synth->oIdx[k]]); // out1, out2, out3 etc + } + } + + int controlPorts = synth->_controlInPorts; + int controlOutPorts = synth->_controlOutPorts; + + if(controlPorts != 0) + controls = new Port[controlPorts]; + else + controls = 0; + + if(controlOutPorts != 0) + controlsOut = new Port[controlOutPorts]; + else + controlsOut = 0; + + synth->midiCtl2PortMap.clear(); + synth->port2MidiCtlMap.clear(); + synti->_guiUpdateControls.clear(); + synti->_guiUpdateProgram = false; + + for (int k = 0; k < controlPorts; ++k) { + int i = synth->pIdx[k]; + //controls[k].val = ladspaDefaultValue(ld, i); + ladspaDefaultValue(ld, i, &controls[k].val); + + // Set to false at first. + synti->_guiUpdateControls.push_back(false); + + #ifdef DSSI_DEBUG + printf("DssiSynthIF::init control port:%d port idx:%d name:%s\n", k, i, ld->PortNames[i]); + #endif + + // This code is duplicated in ::getControllerInfo() + // + + int ctlnum = DSSI_NONE; + if(dssi->get_midi_controller_for_port) + ctlnum = dssi->get_midi_controller_for_port(handle, i); + + // No controller number? Try to give it a unique one... + if(ctlnum == DSSI_NONE) + { + // FIXME: Be more careful. Must make sure to pick numbers not already chosen or which WILL BE chosen. + // Simple but flawed solution: Start them at 0x60000 + 0x2000 = 0x62000. Max NRPN number is 0x3fff. + // TODO: Update: Actually we want to try to use CC Controller7 controllers if possible (or a choice) because what if + // the user's controller hardware doesn't support RPN? + // If CC Controller7 is chosen we must make sure to use only non-common numbers. An already limited range + // of 127 now becomes narrower. See the cool document midi-controllers.txt in the DSSI source for a + // nice roundup of numbers and how to choose them and how they relate to synths and DSSI synths etc. ! + ctlnum = CTRL_NRPN14_OFFSET + 0x2000 + k; + } + else + { + int c = ctlnum; + // Can be both CC and NRPN! Prefer CC over NRPN. + if(DSSI_IS_CC(ctlnum)) + { + #ifdef DSSI_DEBUG + printf("DssiSynthIF::init is CC control\n"); + #endif + + ctlnum = DSSI_CC_NUMBER(c); + #ifdef DSSI_DEBUG + if(DSSI_IS_NRPN(ctlnum)) + printf("DssiSynthIF::init is also NRPN control. Using CC.\n"); + #endif + } + else + if(DSSI_IS_NRPN(ctlnum)) + { + #ifdef DSSI_DEBUG + printf("DssiSynthIF::init is NRPN control\n"); + #endif + + ctlnum = DSSI_NRPN_NUMBER(c) + CTRL_NRPN14_OFFSET; + } + + } + + #ifdef DSSI_DEBUG + printf("DssiSynthIF::init inserting to midiCtl2PortMap: ctlnum:%d k:%d\n", ctlnum, k); + #endif + + // We have a controller number! Insert it and the DSSI port number into both maps. + synth->midiCtl2PortMap.insert(std::pair(ctlnum, k)); + synth->port2MidiCtlMap.insert(std::pair(k, ctlnum)); + ld->connect_port(handle, i, &controls[k].val); + } + + for (int k = 0; k < controlOutPorts; ++k) { + int i = synth->opIdx[k]; + + #ifdef DSSI_DEBUG + printf("DssiSynthIF::init control output port:%d port idx:%d name:%s\n", k, i, ld->PortNames[i]); + #endif + + // p3.3.39 Removed. + /* + + //controls[k].val = ladspaDefaultValue(ld, i); + ladspaDefaultValue(ld, i, &controlsOut[k].val); + + // This code is duplicated in ::getControllerInfo() + // + + int ctlnum = DSSI_NONE; + if(dssi->get_midi_controller_for_port) + ctlnum = dssi->get_midi_controller_for_port(handle, i); + + // No controller number? Try to give it a unique one... + if(ctlnum == DSSI_NONE) + { + // FIXME: Be more careful. Must make sure to pick numbers not already chosen or which WILL BE chosen. + // Simple but flawed solution: Start them at 0x60000 + 0x3000 = 0x63000. Max NRPN number is 0x3fff. + // TODO: CC etc. etc. + ctlnum = CTRL_NRPN14_OFFSET + 0x3000 + k; + } + else + { + int c = ctlnum; + // Can be both CC and NRPN! Prefer CC over NRPN. + if(DSSI_IS_CC(ctlnum)) + { + #ifdef DSSI_DEBUG + printf("DssiSynthIF::init is CC control\n"); + #endif + + ctlnum = DSSI_CC_NUMBER(c); + + #ifdef DSSI_DEBUG + if(DSSI_IS_NRPN(ctlnum)) + printf("DssiSynthIF::init is also NRPN control. Using CC.\n"); + #endif + } + else + if(DSSI_IS_NRPN(ctlnum)) + { + #ifdef DSSI_DEBUG + printf("DssiSynthIF::init is NRPN control\n"); + #endif + + ctlnum = DSSI_NRPN_NUMBER(c) + CTRL_NRPN14_OFFSET; + } + + } + + #ifdef DSSI_DEBUG + printf("DssiSynthIF::init inserting to midiCtl2PortMap: ctlnum:%d k:%d\n", ctlnum, k); + #endif + + // We have a controller number! Insert it and the DSSI port number into the map. + // p3.3.39 Removed. Doesn't say whether it's in or out! Don't need this for now. + //synth->midiCtl2PortMap.insert(std::pair(ctlnum, k)); + + */ + + // - Control outs are not handled but still must be connected to something. + ld->connect_port(handle, i, &controlsOut[k].val); + } + + // Set the latency to zero. + //controls[controlPorts].val = 0.0; + // Insert a controller for latency and the DSSI port number into the map. + //synth->midiCtl2PortMap.insert(std::pair(CTRL_NRPN14_OFFSET + 0x2000, controlPorts)); + // Connect the port. + //ld->connect_port(handle, controlPorts, &controls[controlPorts].val); + + // Just a test. It works! We can instantiate a ladspa plugin for the synth. But it needs more work... + //plugins.add(&synth->info, LADSPA_Descriptor_Function(NULL), ld, false); + + if (ld->activate) + ld->activate(handle); + + // Set current configuration values. + if(dssi->configure) + { + char *rv = dssi->configure(handle, DSSI_PROJECT_DIRECTORY_KEY, + museProject.latin1()); //song->projectPath() + + if(rv) + { + fprintf(stderr, "MusE: Warning: plugin doesn't like project directory: \"%s\"\n", rv); + free(rv); + } + + for(ciStringParamMap r = synti->_stringParamMap.begin(); r != synti->_stringParamMap.end(); ++r) + { + rv = 0; + rv = dssi->configure(handle, r->first.c_str(), r->second.c_str()); + if(rv) + { + fprintf(stderr, "MusE: Warning: plugin config key: %s value: %s \"%s\"\n", r->first.c_str(), r->second.c_str(), rv); + free(rv); + } + } + } + + // Set current program. + if(dssi->select_program) + dssi->select_program(handle, synti->_curBankL, synti->_curProgram); + + // + // For stored initial control values, let SynthI::initInstance() take care of that via ::setParameter(). + // + + return true; + } + +//--------------------------------------------------------- +// DssiSynthIF +//--------------------------------------------------------- + +DssiSynthIF::DssiSynthIF(SynthI* s) + : SynthIF(s) + { + #ifdef DSSI_DEBUG + printf("DssiSynthIF::DssiSynthIF\n"); + #endif + + synth = 0; + handle = NULL; + controls = 0; + controlsOut = 0; + + //_curBank = 0; + //_curProgram = 0; + + //#ifdef OSC_SUPPORT + //_oscif.setSynthIF(this); + //#endif + + //_guiVisible = false; + //uiTarget = 0; + //uiOscShowPath = 0; + //uiOscControlPath = 0; + //uiOscConfigurePath = 0; + //uiOscProgramPath = 0; + //uiOscPath = 0; + //guiPid = -1; + //guiQProc = 0; + + audioInBuffers = 0; + audioOutBuffers = 0; + } + +//--------------------------------------------------------- +// ~DssiSynthIF +//--------------------------------------------------------- + +DssiSynthIF::~DssiSynthIF() +{ + #ifdef DSSI_DEBUG + printf("DssiSynthIF::~DssiSynthIF\n"); + #endif + + if(synth) + { + #ifdef DSSI_DEBUG + printf("DssiSynthIF::~DssiSynthIF synth:%p\n", synth); + #endif + + if(synth->dssi) + { + #ifdef DSSI_DEBUG + printf("DssiSynthIF::~DssiSynthIF synth->dssi:%p\n", synth->dssi); + #endif + + if(synth->dssi->LADSPA_Plugin) + { + #ifdef DSSI_DEBUG + printf("DssiSynthIF::~DssiSynthIFsynth->dssi->LADSPA_Plugin:%p\n", synth->dssi->LADSPA_Plugin); + #endif + } + } + } + + if(synth && synth->dssi && synth->dssi->LADSPA_Plugin) + { + const DSSI_Descriptor* dssi = synth->dssi; + const LADSPA_Descriptor* descr = dssi->LADSPA_Plugin; + + #ifdef DSSI_DEBUG + printf("DssiSynthIF::~DssiSynthIF checking cleanup function exists\n"); + #endif + + if(descr->cleanup) + { + #ifdef DSSI_DEBUG + printf("DssiSynthIF::~DssiSynthIF calling cleanup function\n"); + #endif + + descr->cleanup(handle); + } + } + + /* + //if (guiPid != -1) + // kill(guiPid, SIGHUP); + if(guiQProc) + { + if(guiQProc->isRunning()) + { + #ifdef DSSI_DEBUG + printf("DssiSynthIF::~DssiSynthIF killing guiQProc\n"); + #endif + + guiQProc->kill(); + } + + //delete guiQProc; + } + + if(uiOscShowPath) + free(uiOscShowPath); + if(uiOscControlPath) + free(uiOscControlPath); + if(uiOscConfigurePath) + free(uiOscConfigurePath); + if(uiOscProgramPath) + free(uiOscProgramPath); + if(uiOscPath) + free(uiOscPath); + if(uiTarget) + lo_address_free(uiTarget); + */ + + if(audioInBuffers) + { + //for(int i = 0; i < synth->_inports; ++i) + //{ + // if(audioInBuffers[i]) + // delete[] audioInBuffers[i]; + //} + for(unsigned long i = 0; i < synth->_inports; ++i) + { + if(audioInBuffers[i]) + free(audioInBuffers[i]); + } + delete[] audioInBuffers; + } + + if(audioOutBuffers) + { + //for(int i = 0; i < synth->_outports; ++i) + //{ + // if(audioOutBuffers[i]) + // delete[] audioOutBuffers[i]; + //} + for(unsigned long i = 0; i < synth->_outports; ++i) + { + if(audioOutBuffers[i]) + free(audioOutBuffers[i]); + } + delete[] audioOutBuffers; + } + + if(controls) + delete[] controls; + + if(controlsOut) + delete[] controlsOut; +} + +//--------------------------------------------------------- +// getParameter +//--------------------------------------------------------- + +float DssiSynthIF::getParameter(unsigned long n) const +{ + if(n >= synth->_controlInPorts) + { + printf("DssiSynthIF::getParameter param number %ld out of range of ports:%ld\n", n, synth->_controlInPorts); + return 0.0; + } + + if(!controls) + return 0.0; + + return controls[n].val; +} + +//--------------------------------------------------------- +// setParameter +//--------------------------------------------------------- + +void DssiSynthIF::setParameter(unsigned long n, float v) +{ + if(n >= synth->_controlInPorts) + { + printf("DssiSynthIF::setParameter param number %ld out of range of ports:%ld\n", n, synth->_controlInPorts); + return; + } + + if(!controls) + return; + + controls[n].val = v; + + // Notify that changes are to be sent upon heartbeat. + // TODO: No, at least not for now. So far, setParameter is only called during loading of stored params, + // and we don't want this interfering with oscUpdate which also sends the values. + //synti->_guiUpdateControls[n] = true; +} + +//--------------------------------------------------------- +// write +//--------------------------------------------------------- + +//void DssiSynthIF::write(Xml&) const +void DssiSynthIF::write(int level, Xml& xml) const +{ + //bool vstsaved = false; + +#ifdef DSSI_VST_CHUNK_SUPPORT + //--------------------------------------------- + // dump current state of synth + //--------------------------------------------- + printf("dumping DSSI custom data! %d\n", synth->dssi->getCustomData); + + // this is only needed and supported if + // we are talking to a VST plugin at the other end. + std::string name = synth->dssi->LADSPA_Plugin->Name; + if ((name.length()> 4) && name.substr(name.length() - 4) == " VST") + { + printf("is vst plugin, commencing data dump, apiversion=%d!\n", synth->dssi->DSSI_API_Version); + unsigned long len = 0; + void* p = 0; + synth->dssi->getCustomData(handle,&p, &len); + if (len) { + xml.tag(level++, "midistate"); + xml.nput(level++, "\n", len+7 /*VSTSAVE*/); + xml.nput(level, ""); + xml.nput("56 53 54 53 41 56 45 "); // embed a save marker "string 'VSTSAVE' + for (long unsigned int i = 0; i < len; ++i) { + if (i && (((i+7) % 16) == 0)) { + xml.nput("\n"); + xml.nput(level, ""); + } + xml.nput("%02x ", ((char*)(p))[i] & 0xff); + } + xml.nput("\n"); + xml.tag(level--, "/event"); + xml.etag(level--, "midistate"); + //vstsaved = true; + } + } +#else + printf("support for vst chunks not compiled in!\n"); +#endif + + /* + // p3.3.39 Store the state of current program and bank and all input control values, but only if VSTSAVE above didn't do it already! + // TODO: Not quite good enough, we would want to store all controls for EACH program, not just the current one. + // Need to modify controls array to be inside a program array and act as a cache when the user changes a control on a particular program. + if(!vstsaved) + { + if(synth->_controlInPorts) + { + // TODO: Hmm, what if these sizes change (platform etc.)? Hard code? Not good - need to store complete value. + const int fs = sizeof(float); + const int uls = sizeof(unsigned long); + + // Data length: Version major and minor bytes, bank + program, and controllers. + const unsigned long len = 2 + 2 * uls + synth->_controlInPorts * fs; + + unsigned long prog = _curBank; + unsigned long bnk = _curProgram; + + xml.tag(level++, "midistate"); + xml.nput(level++, "\n", len+9); // "PARAMSAVE" length + data length. + xml.nput(level, ""); + xml.nput("50 41 52 41 4d 53 41 56 45 "); // Embed a save marker string "PARAMSAVE". + + unsigned long i = 9; + + // Store PARAMSAVE version major... + char uc = DSSI_PARAMSAVE_VERSION_MAJOR; + if(i && ((i % 16) == 0)) + { + xml.nput("\n"); + xml.nput(level, ""); + } + xml.nput("%02x ", uc & 0xff); + ++i; + + // Store PARAMSAVE version minor... + uc = DSSI_PARAMSAVE_VERSION_MINOR; + if(i && ((i % 16) == 0)) + { + xml.nput("\n"); + xml.nput(level, ""); + } + xml.nput("%02x ", uc & 0xff); + ++i; + + // Store bank... + void* p = &bnk; + for(int j = 0; j < uls; ++j) + { + if(i && ((i % 16) == 0)) + { + xml.nput("\n"); + xml.nput(level, ""); + } + xml.nput("%02x ", ((char*)(p))[j] & 0xff); + ++i; + } + + // Store program... + p = &prog; + for(int j = 0; j < uls; ++j) + { + if(i && ((i % 16) == 0)) + { + xml.nput("\n"); + xml.nput(level, ""); + } + xml.nput("%02x ", ((char*)(p))[j] & 0xff); + ++i; + } + + // Store controls... + for(unsigned long c = 0; c < synth->_controlInPorts; ++c) + { + float v = controls[c].val; + p = &v; + for(int j = 0; j < fs; ++j) + { + if(i && ((i % 16) == 0)) + { + xml.nput("\n"); + xml.nput(level, ""); + } + xml.nput("%02x ", ((char*)(p))[j] & 0xff); + ++i; + } + } + xml.nput("\n"); + xml.tag(level--, "/event"); + xml.etag(level--, "midistate"); + } + } + */ + + // Store controls as parameters... + for(unsigned long c = 0; c < synth->_controlInPorts; ++c) + { + float f = controls[c].val; + xml.floatTag(level, "param", f); + //xml.tag(level, "param name=\"%s\" val=\"%s\"/", name, r->first.c_str(), r->second.c_str()); + } +} + +//--------------------------------------------------------- +// preProcessAlways +//--------------------------------------------------------- + +void DssiSynthIF::preProcessAlways() +{ + +} + +//--------------------------------------------------------- +// processEvent +// Return true if event pointer filled. +//-------------------------------------------------------- + +bool DssiSynthIF::processEvent(const MidiPlayEvent& e, snd_seq_event_t* event) +{ + const DSSI_Descriptor* dssi = synth->dssi; + + 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); + + //QByteArray ba(); + ////ba.assign((const char*)e.data(), e.len()); + ////ba.duplicate((const char*)e.data(), e.len()); + ////ba.setRawData((const char*)e.data(), e.len()); + //int len = e.len() + 2; + + int len = e.len(); + char ca[len + 2]; + + ca[0] = 0xF0; + memcpy(ca + 1, (const char*)e.data(), len); + ca[len + 1] = 0xF7; + + len += 2; + + //snd_seq_event_t* event = &events[nevents]; + event->queue = SND_SEQ_QUEUE_DIRECT; + + #ifdef DSSI_DEBUG + fprintf(stderr, "DssiSynthIF::processEvent midi event type:%d chn:%d a:%d b:%d\n", e.type(), chn, a, b); + #endif + + switch(e.type()) + { + case ME_NOTEON: + #ifdef DSSI_DEBUG + fprintf(stderr, "DssiSynthIF::processEvent midi event is ME_NOTEON\n"); + #endif + + 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_PROGRAM: + { + #ifdef DSSI_DEBUG + fprintf(stderr, "DssiSynthIF::processEvent midi event is ME_PROGRAM\n"); + #endif + + int bank = (a >> 8) & 0xff; + int prog = a & 0xff; + //_curBank = bank; + //_curProgram = prog; + synti->_curBankH = 0; + synti->_curBankL = bank; + synti->_curProgram = prog; + + if(dssi->select_program) + { + dssi->select_program(handle, bank, prog); + // Notify that changes are to be sent upon heartbeat. + synti->_guiUpdateProgram = true; + } + // Event pointer not filled. Return false. + return false; + } + break; + case ME_CONTROLLER: + { + #ifdef DSSI_DEBUG + fprintf(stderr, "DssiSynthIF::processEvent midi event is ME_CONTROLLER\n"); + #endif + + if((a == 0) || (a == 32)) + return false; + + if(a == CTRL_PROGRAM) + { + #ifdef DSSI_DEBUG + fprintf(stderr, "DssiSynthIF::processEvent midi event is ME_CONTROLLER, dataA is CTRL_PROGRAM\n"); + #endif + + int bank = (b >> 8) & 0xff; + int prog = b & 0xff; + + //_curBank = bank; + //_curProgram = prog; + synti->_curBankH = 0; + synti->_curBankL = bank; + synti->_curProgram = prog; + + if(dssi->select_program) + { + dssi->select_program(handle, bank, prog); + // Notify that changes are to be sent upon heartbeat. + synti->_guiUpdateProgram = true; + } + // Event pointer not filled. Return false. + return false; + } + + if(a == CTRL_PITCH) + { + #ifdef DSSI_DEBUG + fprintf(stderr, "DssiSynthIF::processEvent midi event is ME_CONTROLLER, dataA is CTRL_PITCH\n"); + #endif + + b &= 0x3fff; + snd_seq_ev_set_pitchbend(event, chn, b); + // Event pointer filled. Return true. + return true; + } + + const LADSPA_Descriptor* ld = dssi->LADSPA_Plugin; + + ciMidiCtl2LadspaPort ip = synth->midiCtl2PortMap.find(a); + // Is it just a regular midi controller, not mapped to a LADSPA port (either by the plugin or by us)? + // NOTE: There's no way to tell which of these controllers is supported by the plugin. + // For example sustain footpedal or pitch bend may be supported, but not mapped to any LADSPA port. + if(ip == synth->midiCtl2PortMap.end()) + { + // p3.3.39 Changed to return false because of crashes with unknown controllers when switching a midi track + // among different dssi synths and regular synths etc. For example high RPN offset numbers (set by another + // device selected into the midi port before selecting this synth) were passing through here when in fact + // the particular synth had no such midi controllers. + // ========================== No, that leaves out regular controllers like footpedal + //#ifdef DSSI_DEBUG + //fprintf(stderr, "DssiSynthIF::processEvent dataA:%d not found in map (not a ladspa controller). Ignoring.\n", a); + //#endif + //return false; + + //#ifdef DSSI_DEBUG + //fprintf(stderr, "DssiSynthIF::processEvent dataA:%d not found in map (not a ladspa controller). Filling event as regular controller.\n", a); + //#endif + //snd_seq_ev_set_controller(event, chn, a, b); + //return true; + + int ctlnum = a; + //switch(midiControllerType(a)) + if(midiControllerType(a) != MidiController::Controller7) + return false; + else + { + /* + case MidiController::NRPN14: + case MidiController::Controller14: + case MidiController::Pitch: + case MidiController::Program: + case MidiController::RPN: + case MidiController::RPN14: + case MidiController::NRPN: + #ifdef DSSI_DEBUG + fprintf(stderr, "DssiSynthIF::processEvent non-ladspa midi event controller unsupported. DataA:%d\n", a); + #endif + return false; + */ + + //case MidiController::Controller7: + #ifdef DSSI_DEBUG + //fprintf(stderr, "DssiSynthIF::processEvent midi event is Controller7. Changing to DSSI_CC type. Current dataA:%d\n", a); + fprintf(stderr, "DssiSynthIF::processEvent non-ladspa midi event is Controller7. Current dataA:%d\n", a); + #endif + //a = DSSI_CC(a); + a &= 0x7f; + ctlnum = DSSI_CC_NUMBER(ctlnum); + // break; + + /* + case MidiController::NRPN14: + #ifdef DSSI_DEBUG + // fprintf(stderr, "DssiSynthIF::processEvent midi event is NRPN. Changing to DSSI_NRPN type. Current dataA:%d\n", a); + fprintf(stderr, "DssiSynthIF::processEvent non-ladspa midi event is NRPN. Current dataA:%d\n", a); + #endif + //a = DSSI_NRPN(a - CTRL_NRPN14_OFFSET); + a &= 0x3fff; + ctlnum = DSSI_NRPN_NUMBER(ctlnum); + break; + case MidiController::Controller14: + a &= 0x7f; + break; + case MidiController::Pitch: + // Should be caught above! + #ifdef DSSI_DEBUG + //fprintf(stderr, "DssiSynthIF::processEvent non-ladspa midi event is Pitch. DataA:%d\n", a); + fprintf(stderr, "DssiSynthIF::processEvent Error! non-ladspa midi event is Pitch. Should have been caught already! DataA:%d\n", a); + #endif + //a &= 0x3fff; + //snd_seq_ev_set_pitchbend(event, chn, b); + // Event pointer filled. Return true. + //return true; + // Event pointer not filled. Return false. + return false; + case MidiController::Program: + // Should be caught above! + #ifdef DSSI_DEBUG + fprintf(stderr, "DssiSynthIF::processEvent Error! non-ladspa midi event is Program. Should have been caught already! DataA:%d\n", a); + #endif + return false; + case MidiController::RPN: + case MidiController::RPN14: + case MidiController::NRPN: + default: + #ifdef DSSI_DEBUG + fprintf(stderr, "DssiSynthIF::processEvent non-ladspa midi event is RPN, RPN14, or NRPN type. DataA:%d\n", a); + #endif + break; + */ + } + + // Verify it's the same number. + //if(ctlnum != a) + //{ + // #ifdef DSSI_DEBUG + // printf("DssiSynthIF::processEvent Error! non-ladspa midi ctlnum:%d != event dataA:%d\n", ctlnum, a); + // #endif + // Event not filled. Return false. + + // TEMP: TODO: Turn on later + //return false; + //} + + // Fill the event. + #ifdef DSSI_DEBUG + printf("DssiSynthIF::processEvent non-ladspa filling midi event chn:%d dataA:%d dataB:%d\n", chn, a, b); + #endif + snd_seq_ev_set_controller(event, chn, a, b); + return true; + } + + //int num = ip->first; + unsigned long k = ip->second; + + unsigned long i = synth->pIdx[k]; + + int ctlnum = DSSI_NONE; + if(dssi->get_midi_controller_for_port) + ctlnum = dssi->get_midi_controller_for_port(handle, i); + + // No midi controller for the ladspa port? Send to ladspa control. + if(ctlnum == DSSI_NONE) + { + // Sanity check. + if(k > synth->_controlInPorts) + return false; + + // TODO: If necessary... choose non-existing numbers... + //for(int k = 0; k < controlPorts; ++k) + //{ + // int i = synth->pIdx[k]; + //} + + // Simple but flawed solution: Start them at 0x60000 + 0x2000 = 0x62000. Max NRPN number is 0x3fff. + ctlnum = k + (CTRL_NRPN14_OFFSET + 0x2000); + } + // p3.3.39 + else + { + #ifdef DSSI_DEBUG + printf("DssiSynthIF::processEvent plugin requests DSSI-style ctlnum:%x(h) %d(d) be mapped to control port:%ld...\n", ctlnum, ctlnum, i); + #endif + + int c = ctlnum; + // Can be both CC and NRPN! Prefer CC over NRPN. + if(DSSI_IS_CC(ctlnum)) + { + ctlnum = DSSI_CC_NUMBER(c); + + #ifdef DSSI_DEBUG + printf("DssiSynthIF::processEvent is CC ctlnum:%d\n", ctlnum); + #endif + + #ifdef DSSI_DEBUG + if(DSSI_IS_NRPN(ctlnum)) + printf("DssiSynthIF::processEvent is also NRPN control. Using CC.\n"); + #endif + } + else + if(DSSI_IS_NRPN(ctlnum)) + { + ctlnum = DSSI_NRPN_NUMBER(c) + CTRL_NRPN14_OFFSET; + + #ifdef DSSI_DEBUG + printf("DssiSynthIF::processEvent is NRPN ctlnum:%x(h) %d(d)\n", ctlnum, ctlnum); + #endif + } + + } + + //{ + float val = midi2LadspaValue(ld, i, ctlnum, b); + + #ifdef DSSI_DEBUG + //fprintf(stderr, "DssiSynthIF::processEvent No midi controller for control port:%d port:%d dataA:%d Converting val from:%d to ladspa:%f\n", i, k, a, b, val); + fprintf(stderr, "DssiSynthIF::processEvent control port:%ld port:%ld dataA:%d Converting val from:%d to ladspa:%f\n", i, k, a, b, val); + #endif + + // Set the ladspa port value. + controls[k].val = val; + // FIXME: Testing - Works but is this safe in a RT process callback? Try hooking into gui heartbeat timer instead... + //lo_send(uiTarget, uiOscControlPath, "if", i, val); + // Notify that changes are to be sent upon heartbeat. + synti->_guiUpdateControls[k] = true; + + // Since we absorbed the message as a ladspa control change, return false - the event is not filled. + return false; + //} + + // p3.3.39 Removed. + // "Hosts should not deliver through run_synth any MIDI controller events that have already + // been mapped to control port values." + // D'oh! My mistake, did not understand that the mapping is only a *request* that the app map MIDI + // controller events to a LADSPA port, and must do the conversion, not to actually *send* them via MIDI... + /* + else + { + switch(midiControllerType(a)) + { + case MidiController::Controller7: + #ifdef DSSI_DEBUG + //fprintf(stderr, "DssiSynthIF::processEvent midi event is Controller7. Changing to DSSI_CC type. Current dataA:%d\n", a); + fprintf(stderr, "DssiSynthIF::processEvent midi event is Controller7. Current dataA:%d\n", a); + #endif + //a = DSSI_CC(a); + a &= 0x7f; + ctlnum = DSSI_CC_NUMBER(ctlnum); + break; + case MidiController::NRPN14: + #ifdef DSSI_DEBUG + // fprintf(stderr, "DssiSynthIF::processEvent midi event is NRPN. Changing to DSSI_NRPN type. Current dataA:%d\n", a); + fprintf(stderr, "DssiSynthIF::processEvent midi event is NRPN. Current dataA:%d\n", a); + #endif + //a = DSSI_NRPN(a - CTRL_NRPN14_OFFSET); + a &= 0x3fff; + ctlnum = DSSI_NRPN_NUMBER(ctlnum); + break; + case MidiController::Controller14: + a &= 0x7f; + break; + case MidiController::Pitch: + #ifdef DSSI_DEBUG + fprintf(stderr, "DssiSynthIF::processEvent midi event is Pitch. DataA:%d\n", a); + #endif + a &= 0x3fff; + break; + case MidiController::Program: + #ifdef DSSI_DEBUG + fprintf(stderr, "DssiSynthIF::processEvent midi event is Program. DataA:%d\n", a); + #endif + a &= 0x3fff; + break; + case MidiController::RPN: + case MidiController::RPN14: + case MidiController::NRPN: + default: + #ifdef DSSI_DEBUG + fprintf(stderr, "DssiSynthIF::processEvent midi event is RPN, RPN14, or NRPN type. DataA:%d\n", a); + #endif + break; + } + + // Verify it's the same number. + if(ctlnum != a) + { + #ifdef DSSI_DEBUG + printf("DssiSynthIF::processEvent Error! ctlnum:%d != event dataA:%d\n", ctlnum, a); + #endif + // Event not filled. Return false. + + // TEMP: TODO: Turn on later + //return false; + } + + // Fill the event. + // FIXME: Darn! We get to this point, but no change in sound (later). Nothing happens, at least with LTS - + // which is the only one I found so far with midi controllers. + // Tried with/without converting to DSSI_CC and DSSI_NRPN. What could be wrong here? + #ifdef DSSI_DEBUG + printf("DssiSynthIF::processEvent filling event chn:%d dataA:%d dataB:%d\n", chn, a, b); + #endif + 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: + #ifdef DSSI_DEBUG + fprintf(stderr, "DssiSynthIF::processEvent midi event is ME_SYSEX\n"); + #endif + + if (QString((const char*)e.data()).startsWith("VSTSAVE")) { +#ifdef DSSI_VST_CHUNK_SUPPORT + printf("loading chunk from sysex %s!\n", e.data()+7); + dssi->setCustomData(handle, e.data()+7 /* len of str*/,e.len()-7); +#else + printf("support for vst chunks not compiled in!\n"); +#endif + // Event not filled. + return false; + } + /* + // p3.3.39 Read the state of current bank and program and all input control values. + // TODO: Needs to be better. See write(). + else + if (QString((const char*)e.data()).startsWith("PARAMSAVE")) + { + #ifdef DSSI_DEBUG + fprintf(stderr, "DssiSynthIF::processEvent midi event is ME_SYSEX PARAMSAVE\n"); + #endif + + unsigned long dlen = e.len() - 9; // Minus "PARAMSAVE" + if(dlen > 0) + { + //if(dlen < 2 * sizeof(unsigned long)) + if(dlen < (2 + 2 * sizeof(unsigned long))) // Version major and minor bytes, bank and program. + printf("DssiSynthIF::processEvent Error: PARAMSAVE data length does not include at least version major and minor, bank and program!\n"); + else + { + // Not required, yet. + //char vmaj = *((char*)(e.data() + 9)); // After "PARAMSAVE" + //char vmin = *((char*)(e.data() + 10)); + + unsigned long* const ulp = (unsigned long*)(e.data() + 11); // After "PARAMSAVE" + version major and minor. + // TODO: TODO: Set plugin bank and program. + _curBank = ulp[0]; + _curProgram = ulp[1]; + + dlen -= (2 + 2 * sizeof(unsigned long)); // After the version major and minor, bank and program. + + if(dlen > 0) + { + if((dlen % sizeof(float)) != 0) + printf("DssiSynthIF::processEvent Error: PARAMSAVE float data length not integral multiple of float size!\n"); + else + { + const unsigned long n = dlen / sizeof(float); + if(n != synth->_controlInPorts) + printf("DssiSynthIF::processEvent Warning: PARAMSAVE number of floats:%ld != number of controls:%ld\n", n, synth->_controlInPorts); + + // Point to location after "PARAMSAVE", version major and minor, bank and progam. + float* const fp = (float*)(e.data() + 9 + 2 + 2 * sizeof(unsigned long)); + + for(unsigned long i = 0; i < synth->_controlInPorts && i < n; ++i) + { + const float v = fp[i]; + controls[i].val = v; + } + } + } + } + } + // Event not filled. + return false; + } + */ + else + { + // NOTE: There is a limit on the size of a sysex. Got this: + // "DssiSynthIF::processEvent midi event is ME_SYSEX" + // "WARNING: MIDI event of type ? decoded to 367 bytes, discarding" + // That might be ALSA doing that. + snd_seq_ev_set_sysex(event, len, + //(unsigned char*)ba.data()); + (unsigned char*)ca); + } + break; + default: + if(debugMsg) + fprintf(stderr, "DssiSynthIF::processEvent midi event unknown type:%d\n", e.type()); + // Event not filled. + return false; + break; + } + + return true; +} + +//--------------------------------------------------------- +// getData +//--------------------------------------------------------- + +//void DssiSynthIF::getData(MidiEventList* el, unsigned pos, int ch, unsigned samples, float** data) +iMPEvent DssiSynthIF::getData(MidiPort* /*mp*/, MPEventList* el, iMPEvent /*i*/, unsigned pos, int ports, unsigned n, float** buffer) +{ + //#ifdef DSSI_DEBUG + // fprintf(stderr, "DssiSynthIF::getData elsize:%d pos:%d ports:%d samples:%d processed already?:%d\n", el->size(), pos, ports, n, synti->processed()); + //#endif + + //BEGIN: Process midi events + + // FIXME: Add 10(?) for good luck in case volatile size changes (increments) while we're processing. + //unsigned long nevents = el->size(); + unsigned long nevents = el->size() + synti->putFifo.getSize() + 10; + + /* + 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; + + //int curPos = pos; + //unsigned endPos = pos + samples; + unsigned endPos = pos + n; + //int off = pos; + int frameOffset = audio->getFrameOffset(); + + //iMidiEvent i = el->begin(); + iMPEvent i = el->begin(); + + // Process event list events... + for(; i != el->end(); ++i) + { + //if(i->time() >= endPos) // Doesn't work, at least here in muse-1. The event times are all + // just slightly after the endPos, EVEN IF transport is stopped. + // So it misses all the notes. + if(i->time() >= (endPos + frameOffset)) // NOTE: frameOffset? Tested, examined printouts of times: Seems OK for playback. + break; + + #ifdef DSSI_DEBUG + fprintf(stderr, "DssiSynthIF::getData eventlist event time:%d\n", i->time()); + #endif + + // p3.3.39 Update hardware state so knobs and boxes are updated. Optimize to avoid re-setting existing values. + // Same code as in MidiPort::sendEvent() + if(synti->midiPort() != -1) + { + MidiPort* mp = &midiPorts[synti->midiPort()]; + if(i->type() == ME_CONTROLLER) + { + int da = i->dataA(); + int db = i->dataB(); + db = mp->limitValToInstrCtlRange(da, db); + if(!mp->setHwCtrlState(i->channel(), da, db)) + continue; + //mp->setHwCtrlState(i->channel(), da, db); + } + else + if(i->type() == ME_PITCHBEND) + { + int da = mp->limitValToInstrCtlRange(CTRL_PITCH, i->dataA()); + if(!mp->setHwCtrlState(i->channel(), CTRL_PITCH, da)) + continue; + //mp->setHwCtrlState(i->channel(), CTRL_PITCH, da); + } + else + if(i->type() == ME_PROGRAM) + { + if(!mp->setHwCtrlState(i->channel(), CTRL_PROGRAM, i->dataA())) + continue; + //mp->setHwCtrlState(i->channel(), CTRL_PROGRAM, i->dataA()); + } + } + + if(processEvent(*i, &events[nevents])) + ++nevents; + } + + // Now process putEvent events... + while(!synti->putFifo.isEmpty()) + { + MidiPlayEvent e = synti->putFifo.get(); + + #ifdef DSSI_DEBUG + fprintf(stderr, "DssiSynthIF::getData putFifo event time:%d\n", e.time()); + #endif + + // Set to the current time. + // FIXME: FIXME: Wrong - we should be setting some kind of linear realtime wallclock here, not song pos. + e.setTime(pos); + if(processEvent(e, &events[nevents])) + ++nevents; + } + + // Now process OSC gui input control fifo events. + // It is probably more important that these are processed last so that they take precedence over all other + // events because OSC + DSSI/DSSI-VST are fussy about receiving feedback via these control ports, from GUI changes. + #ifdef OSC_SUPPORT + unsigned long ctls = synth->_controlInPorts; + for(unsigned long k = 0; k < ctls; ++k) + { + OscControlFifo* cfifo = _oscif.oscFifo(k); + if(!cfifo) + continue; + + // If there are 'events' in the fifo, get exactly one 'event' per control per process cycle... + if(!cfifo->isEmpty()) + { + OscControlValue v = cfifo->get(); + + #ifdef DSSI_DEBUG + fprintf(stderr, "DssiSynthIF::getData OscControlFifo event input control number:%ld value:%f\n", k, v.value); + #endif + + // Set the ladspa control port value. + controls[k].val = v.value; + + // TODO: (From plugin module, adapt for synth if/when our own plugin gui is added to synths). + // Need to update the automation value, otherwise the block above overwrites with the last automation value. + ///if(_track) + ///{ + // Since we are now in the audio thread context, there's no need to send a message, + // just modify directly. + //audio->msgSetPluginCtrlVal(this, genACnum(_id, i), controls[i].val); + /// _track->setPluginCtrlVal(k, v.value) + ///} + } + } + #endif + +/* // This is from MESS... Tried this here, didn't work, need to re-adapt, try again. + int evTime = i->time(); + if(evTime == 0) + { + printf("DssiSynthIF::getData - time is 0!\n"); + //continue; + evTime=frameOffset; // will cause frame to be zero, problem? + } + + int frame = evTime - frameOffset; + + if(frame >= endPos) + { + printf("DssiSynthIF::getData frame > endPos!! frame = %d >= endPos %d, i->time() %d, frameOffset %d curPos=%d\n", frame, endPos, i->time(), frameOffset,curPos); + continue; + } + + if(frame > curPos) + { + if(frame < pos) + printf("DssiSynthIF::getData should not happen: missed event %d\n", pos -frame); + else + { +*/ + +/* + } + curPos = frame; + } +*/ +// } + + el->erase(el->begin(), i); + //END: Process midi events + + //BEGIN: Run the synth + // All ports must be connected to something! + + // First, copy the given input buffers to our local input buffers. + unsigned long np, k; + //np = portsin > synth->_inports ? synth->_inports : portsin; + //for(k = 0; k < np; ++k) + // memcpy(audioInBuffers[k], inbuffer[k], sizeof(float) * n); + //for(; k < portsin; ++k) + // memset(audioInBuffers[k], 0, sizeof(float) * n); + + // Watch our limits. + np = ports > synth->_outports ? synth->_outports : ports; + + const DSSI_Descriptor* dssi = synth->dssi; + const LADSPA_Descriptor* descr = dssi->LADSPA_Plugin; + k = 0; + // Connect the given buffers directly to the ports, up to a max of synth ports. + for(; k < np; ++k) + descr->connect_port(handle, synth->oIdx[k], buffer[k]); + // Connect the remaining ports to some local buffers (not used yet). + for(; k < synth->_outports; ++k) + descr->connect_port(handle, synth->oIdx[k], audioOutBuffers[k]); + + /* + // + // p3.3.39 Handle inputs... + // + //if((song->bounceTrack != this) && !noInRoute()) + if(!((AudioTrack*)synti)->noInRoute()) + { + RouteList* irl = ((AudioTrack*)synti)->inRoutes(); + iRoute i = irl->begin(); + if(!i->track->isMidiTrack()) + { + //if(debugMsg) + printf("DssiSynthIF::getData: Error: First route is a midi track route!\n"); + } + else + { + int ch = i->channel == -1 ? 0 : i->channel; + int remch = i->remoteChannel == -1 ? 0 : i->remoteChannel; + int chs = i->channels == -1 ? 0 : i->channels; + + // TODO: + //if(ch >= synth->_inports) + //iUsedIdx[ch] = true; + //if(chs == 2) + // iUsedIdx[ch + 1] = true; + + //((AudioTrack*)i->track)->copyData(framePos, channels, nframe, bp); + ((AudioTrack*)i->track)->copyData(pos, ports, + //(i->track->type() == Track::AUDIO_SOFTSYNTH && i->channel != -1) ? i->channel : 0, + i->channel, + i->channels, + n, bp); + } + + //unsigned pos, int ports, unsigned n, float** buffer + + ++i; + for(; i != irl->end(); ++i) + { + if(i->track->isMidiTrack()) + { + //if(debugMsg) + printf("DssiSynthIF::getData: Error: Route is a midi track route!\n"); + continue; + } + //((AudioTrack*)i->track)->addData(framePos, channels, nframe, bp); + ((AudioTrack*)i->track)->addData(framePos, channels, + //(i->track->type() == Track::AUDIO_SOFTSYNTH && i->channel != -1) ? i->channel : 0, + i->channel, + i->channels, + nframe, bp); + } + } + */ + + //#ifdef DSSI_DEBUG + //if(nevents) + // fprintf(stderr, "DssiSynthIF::getData run nevents:%d\n", nevents); + //#endif + + // Run the synth for one segment. This processes events and gets/fills our local buffers... + if(synth->dssi->run_synth) + { + synth->dssi->run_synth(handle, n, events, nevents); + + // NOTE: Just a test + //for(int m = 0; m < n; ++m) + //{ + // synth->dssi->run_synth(handle, 1, events, nevents); + //} + + } + else if (synth->dssi->run_multiple_synths) + { + snd_seq_event_t* ev = events; + synth->dssi->run_multiple_synths(1, &handle, n, &ev, &nevents); + } + //END: Run the synth + + return i; +} + +//--------------------------------------------------------- +// putEvent +//--------------------------------------------------------- + +//bool DssiSynthIF::putEvent(const MidiEvent& ev) +bool DssiSynthIF::putEvent(const MidiPlayEvent& ev) + { + #ifdef DSSI_DEBUG + fprintf(stderr, "DssiSynthIF::putEvent midi event time:%d chn:%d a:%d b:%d\n", ev.time(), ev.channel(), ev.dataA(), ev.dataB()); + #endif + + if (midiOutputTrace) + ev.dump(); + + return synti->putFifo.put(ev); + + //return false; + } + + +//--------------------------------------------------------- +// incInstances +//--------------------------------------------------------- + +void DssiSynth::incInstances(int val) +{ + _instances += val; + if (_instances == 0) + { + if (handle) + { + #ifdef DSSI_DEBUG + fprintf(stderr, "DssiSynth::incInstances no more instances, closing library\n"); + #endif + + dlclose(handle); + } + handle = 0; + dssi = NULL; + df = NULL; + pIdx.clear(); + opIdx.clear(); + iIdx.clear(); + oIdx.clear(); + rpIdx.clear(); + iUsedIdx.clear(); + midiCtl2PortMap.clear(); + port2MidiCtlMap.clear(); + //synti->_guiUpdateControls.clear(); + } +} + +//--------------------------------------------------------- +// initGui +//--------------------------------------------------------- +bool DssiSynthIF::initGui() +{ + #ifdef OSC_SUPPORT + return _oscif.oscInitGui(); + #endif + + return true; + + /* + // Are we already running? We don't want to allow another process do we... + if((guiQProc != 0) && (guiQProc->isRunning())) + return true; + + // + // start gui + // + static char oscUrl[1024]; + //snprintf(oscUrl, 1024, "%s/%s", url, synti->name().toAscii().data()); + //snprintf(oscUrl, 1024, "%s/%s", url, synti->name().latin1()); + snprintf(oscUrl, 1024, "%s/%s/%s", url, synth->info.baseName().latin1(), synti->name().latin1()); + + //QString guiPath(info.path() + "/" + info.baseName()); + QString guiPath(synth->info.dirPath() + "/" + synth->info.baseName()); + + QDir guiDir(guiPath, "*", QDir::Unsorted, QDir::Files); + if (guiDir.exists()) + { + //const QFileInfoList list = guiDir.entryInfoList(); + QStringList list = guiDir.entryList(); + + //for (int i = 0; i < list.size(); ++i) { + for (unsigned int i = 0; i < list.count(); ++i) + { + + //QFileInfo fi = list.at(i); + QFileInfo fi(guiPath + QString("/") + list[i]); + + QString gui(fi.filePath()); + if (gui.contains('_') == 0) + continue; + struct stat buf; + + //if (stat(gui.toAscii().data(), &buf)) { + if (stat(gui.latin1(), &buf)) { + + perror("stat failed"); + continue; + } + + #ifdef DSSI_DEBUG + fprintf(stderr, "DssiSynthIF::initGui %s %s %s %s\n", + //fi.filePath().toAscii().data(), + //fi.fileName().toAscii().data(), + fi.filePath().latin1(), + //fi.fileName().latin1(), + + oscUrl, + + synth->info.filePath().latin1(), + + //name().toAscii().data(), + synth->name().latin1()); + #endif + + if ((S_ISREG(buf.st_mode) || S_ISLNK(buf.st_mode)) && + (buf.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) + { + // Changed by T356. + // fork + execlp were causing the processes to remain after closing gui, requiring manual kill. + // Changed to QProcess, works OK now. + //if((guiPid = fork()) == 0) + { + // No QProcess created yet? Do it now. Only once per SynthIF instance. Exists until parent destroyed. + if(guiQProc == 0) + guiQProc = new QProcess(muse); + + // Don't forget this, he he... + guiQProc->clearArguments(); + + guiQProc->addArgument(fi.filePath()); + //guiQProc->addArgument(fi.fileName()); // No conventional 'Arg0' here. + guiQProc->addArgument(QString(oscUrl)); + guiQProc->addArgument(synth->info.filePath()); + guiQProc->addArgument(synth->name()); + guiQProc->addArgument(QString("channel 1")); + + #ifdef DSSI_DEBUG + fprintf(stderr, "DssiSynthIF::initGui starting QProcess\n"); + #endif + + if(guiQProc->start() == TRUE) + { + #ifdef DSSI_DEBUG + fprintf(stderr, "DssiSynthIF::initGui started QProcess\n"); + #endif + + //guiPid = guiQProc->processIdentifier(); + } + else + { + + // execlp( + // fi.filePath().toAscii().data(), + // fi.fileName().toAscii().data(), + // fi.filePath().latin1(), + // fi.fileName().latin1(), + + // oscUrl, + + // info.filePath().toAscii().data(), + // name().toAscii().data(), + // synth->info.filePath().latin1(), + // synth->name().latin1(), + + // "channel 1", (void*)0); + + fprintf(stderr, "exec %s %s %s %s failed: %s\n", + // fi.filePath().toAscii().data(), + // fi.fileName().toAscii().data(), + fi.filePath().latin1(), + fi.fileName().latin1(), + oscUrl, + // name().toAscii().data(), + synth->name().latin1(), + strerror(errno)); + + // It's Ok, Keep going. So nothing happens. So what. The timeout in showGui will just leave. + // Maybe it's a 'busy' issue somewhere - allow to try again later + save work now. + // exit(1); + + } + + #ifdef DSSI_DEBUG + fprintf(stderr, "DssiSynthIF::initGui after QProcess\n"); + #endif + } + } + } + //synth->_hasGui = true; + } + else { + printf("%s: no dir for dssi gui found: %s\n", + //name().toAscii().data(), guiPath.toAscii().data()); + synth->name().latin1(), guiPath.latin1()); + + //synth->_hasGui = false; + } + + return true; + */ +} + +//--------------------------------------------------------- +// guiHeartBeat +//--------------------------------------------------------- + +void DssiSynthIF::guiHeartBeat() +{ + #ifdef OSC_SUPPORT + // Update the gui's program if needed. + if(synti->_guiUpdateProgram) + { + _oscif.oscSendProgram(synti->_curProgram, synti->_curBankL); + synti->_guiUpdateProgram = false; + } + + // Update the gui's controls if needed. + unsigned long ports = synth->_controlInPorts; + if(ports > synti->_guiUpdateControls.size()) + return; + for(unsigned long i = 0; i < ports; ++i) + { + if(synti->_guiUpdateControls[i]) + { + unsigned long k = synth->pIdx[i]; + _oscif.oscSendControl(k, controls[i].val); + + // Reset. + synti->_guiUpdateControls[i] = false; + } + } + #endif +} + +#ifdef OSC_SUPPORT +//--------------------------------------------------------- +// oscUpdate +//--------------------------------------------------------- + +int DssiSynthIF::oscUpdate() +{ + // Send project directory. + _oscif.oscSendConfigure(DSSI_PROJECT_DIRECTORY_KEY, museProject.latin1()); // song->projectPath() + + // Send current string configuration parameters. + //StringParamMap& map = synti->_stringParamMap; + int i = 0; + for(ciStringParamMap r = synti->_stringParamMap.begin(); r != synti->_stringParamMap.end(); ++r) + { + _oscif.oscSendConfigure(r->first.c_str(), r->second.c_str()); + // Avoid overloading the GUI if there are lots and lots of params. + if((i+1) % 50 == 0) + usleep(300000); + ++i; + } + + // Send current bank and program. + //unsigned long bank, prog; + //synti->currentProg(&prog, &bank, 0); + //_oscif.oscSendProgram(prog, bank); + _oscif.oscSendProgram(synti->_curProgram, synti->_curBankL); + + // Send current control values. + unsigned long ports = synth->_controlInPorts; + for(unsigned long i = 0; i < ports; ++i) + { + unsigned long k = synth->pIdx[i]; + _oscif.oscSendControl(k, controls[i].val); + // Avoid overloading the GUI if there are lots and lots of ports. + if((i+1) % 50 == 0) + usleep(300000); + } + + +#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; +} + +//--------------------------------------------------------- +// oscProgram +//--------------------------------------------------------- + +int DssiSynthIF::oscProgram(unsigned long program, unsigned long bank) + { + //int bank = argv[0]->i; + //int program = argv[1]->i; + + int ch = 0; // TODO: ?? + + int port = synti->midiPort(); + + //_curBank = bank; + //_curProgram = program; + synti->_curBankH = 0; + synti->_curBankL = bank; + synti->_curProgram = program; + + bank &= 0xff; + program &= 0xff; + + //MidiEvent event(0, ch, ME_CONTROLLER, CTRL_PROGRAM, (bank << 8) + program); + + if(port != -1) + { + //MidiPlayEvent event(0, port, ch, ME_CONTROLLER, CTRL_PROGRAM, (bank << 8) + program); + MidiPlayEvent event(0, port, ch, ME_PROGRAM, (bank << 8) + program, 0); + + #ifdef DSSI_DEBUG + fprintf(stderr, "DssiSynthIF::oscProgram midi event chn:%d a:%d b:%d\n", event.channel(), event.dataA(), event.dataB()); + #endif + + midiPorts[port].sendEvent(event); + } + + + + //synti->playMidiEvent(&event); // TODO + // + //MidiDevice* md = dynamic_cast(synti); + //if(md) + // md->putEvent(event); + // + //synti->putEvent(event); + + return 0; + } + +//--------------------------------------------------------- +// oscControl +//--------------------------------------------------------- + +int DssiSynthIF::oscControl(unsigned long port, float value) + { + //int port = argv[0]->i; + //LADSPA_Data value = argv[1]->f; + + #ifdef DSSI_DEBUG + printf("DssiSynthIF::oscControl received oscControl port:%ld val:%f\n", port, value); + #endif + + //int controlPorts = synth->_controlInPorts; + + //if(port >= controlPorts) + //if(port < 0 || port >= synth->rpIdx.size()) + if(port >= synth->rpIdx.size()) + { + //fprintf(stderr, "DssiSynthIF::oscControl: port number:%d is out of range of number of ports:%d\n", port, controlPorts); + fprintf(stderr, "DssiSynthIF::oscControl: port number:%ld is out of range of index list size:%d\n", port, synth->rpIdx.size()); + return 0; + } + + // Convert from DSSI port number to control input port index. + unsigned long cport = synth->rpIdx[port]; + + if((int)cport == -1) + { + fprintf(stderr, "DssiSynthIF::oscControl: port number:%ld is not a control input\n", port); + return 0; + } + + // p3.3.39 Set the DSSI control input port's value. + // Observations: With a native DSSI synth like LessTrivialSynth, the native GUI's controls do not change the sound at all + // ie. they don't update the DSSI control port values themselves. + // Hence in response to the call to this oscControl, sent by the native GUI, it is required to that here. +/// controls[cport].val = value; + // DSSI-VST synths however, unlike DSSI synths, DO change their OWN sound in response to their gui controls. + // AND this function is called. + // Despite the descrepency we are STILL required to update the DSSI control port values here + // because dssi-vst is WAITING FOR A RESPONSE. (A CHANGE in the control port value). + // It will output something like "...4 events expected..." and count that number down as 4 actual control port value CHANGES + // are done here in response. Normally it says "...0 events expected..." when MusE is the one doing the DSSI control changes. + // TODO: (Done) May need FIFOs on each control(!) so that the control changes get sent one per process cycle. + // Observed countdown not actually going to zero upon string of changes. + // + // NOTE: NOTE: This line in RemoteVSTServer::setParameter(int p, float v) in dssi-vst-server.cpp : + // + // " if (tv.tv_sec > m_lastGuiComms.tv_sec + 10) " + // + // explains an observation that after ten seconds, the server automatically clears the expected number to 0. + // TODO: Now MusE should forget about all the VST fifo events past ten+ (?) seconds. Add event timestamps... + // You can't send any 'new' values until either you a): send all the expected events or b): wait ten seconds. + // (Because the server simply ignores the 'expected' messages.) + // + // Well, at least here are the fifos. Try this ... + OscControlFifo* cfifo = _oscif.oscFifo(cport); + if(cfifo) + { + OscControlValue cv; + //cv.idx = cport; + cv.value = value; + if(cfifo->put(cv)) + { + fprintf(stderr, "DssiSynthIF::oscControl: fifo overflow: in control number:%ld\n", cport); + } + } + + //const DSSI_Descriptor* dssi = synth->dssi; + //const LADSPA_Descriptor* ld = dssi->LADSPA_Plugin; + + ciMidiCtl2LadspaPort ip = synth->port2MidiCtlMap.find(cport); + if(ip != synth->port2MidiCtlMap.end()) + { + // TODO: TODO: Update midi MusE's midi controller knobs, sliders, boxes etc with a call to the midi port's setHwCtrlState() etc. + // But first we need a ladspa2MidiValue() function! ... + // + // + //float val = ladspa2MidiValue(ld, i, ?, ?); + + } + +#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"); + + // The gui is gone now, right? + _guiVisible = false; + + //const DSSI_Descriptor* dssi = synth->dssi; + //const LADSPA_Descriptor* ld = dssi->LADSPA_Plugin; + //if(ld->deactivate) + // ld->deactivate(handle); + + if (uiOscPath == 0) { + printf("DssiSynthIF::oscExiting(): no uiOscPath\n"); + return 1; + } + char uiOscGuiPath[strlen(uiOscPath)+6]; + + sprintf(uiOscGuiPath, "%s/%s", uiOscPath, "quit"); + #ifdef DSSI_DEBUG + printf("DssiSynthIF::oscExiting(): sending quit to uiOscGuiPath:%s\n", uiOscGuiPath); + #endif + + lo_send(uiTarget, uiOscGuiPath, ""); + +#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(int a, int b, int c) + { + //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; // TODO: ?? + + int port = synti->midiPort(); + + //MidiEvent event(0, channel, a, b, c); + + if(port != -1) + { + MidiPlayEvent event(0, port, channel, a, b, c); + + #ifdef DSSI_DEBUG + fprintf(stderr, "DssiSynthIF::oscMidi midi event chn:%d a:%d b:%d\n", event.channel(), event.dataA(), event.dataB()); + #endif + + midiPorts[port].sendEvent(event); + } + + //synti->playMidiEvent(&event); // TODO + // + //MidiDevice* md = dynamic_cast(synti); + //if(md) + // md->putEvent(event); + // + //synti->putEvent(event); + // + + return 0; + } + +//--------------------------------------------------------- +// oscConfigure +//--------------------------------------------------------- + +int DssiSynthIF::oscConfigure(const char *key, const char *value) + { + //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. + + #ifdef DSSI_DEBUG + printf("DssiSynthIF::oscConfigure synth name:%s key:%s value:%s\n", synti->name().latin1(), key, value); + #endif + + // Add or modify the configuration map item. + synti->_stringParamMap.set(key, value); + + 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); + synti->name().latin1(), key); + + return 0; + } + + if (!synth->dssi->configure) + 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); + key, value, synti->name().latin1(), 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; + } +#endif // OSC_SUPPORT + +//--------------------------------------------------------- +// 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)) + if (!synth->dssi->get_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) +const char* DssiSynthIF::getPatchName(int /*chan*/, int prog, MType /*type*/, bool /*drum*/) + { + 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) +void DssiSynthIF::populatePatchPopup(Q3PopupMenu* menu, int /*ch*/, MType /*type*/, bool /*drum*/) + { + // The plugin can change the programs, patches etc. + // So make sure we're up to date by calling queryPrograms. + queryPrograms(); + + 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); + menu->insertItem(QString(i->Name), id); + } + } + +int DssiSynthIF::getControllerInfo(int id, const char** name, int* ctrl, int* min, int* max, int* initval) +{ + int controlPorts = synth->_controlInPorts; + if(id >= controlPorts) + //if(id >= midiCtl2PortMap.size()) + return 0; + + const DSSI_Descriptor* dssi = synth->dssi; + const LADSPA_Descriptor* ld = dssi->LADSPA_Plugin; + + // Hmm, has a weird [] operator. Would it work? + // For now just use duplicate code found in ::init() + //iMidiCtl2LadspaPort ip = midiCtl2PortMap[id]; + //int ctlnum = ip->first; + //int k = ip->second; + + int i = synth->pIdx[id]; + //int i = synth->pIdx[k]; + + //ladspaDefaultValue(ld, i, &controls[id].val); + + #ifdef DSSI_DEBUG + printf("DssiSynthIF::getControllerInfo control port:%d port idx:%d name:%s\n", id, i, ld->PortNames[i]); + #endif + + int ctlnum = DSSI_NONE; + if(dssi->get_midi_controller_for_port) + ctlnum = dssi->get_midi_controller_for_port(handle, i); + + + // No controller number? Give it one. + if(ctlnum == DSSI_NONE) + { + // TODO: If neccesary... choose non-existing numbers... + //for(int k = 0; k < controlPorts; ++k) + //{ + // int i = synth->pIdx[k]; + //} + + // Simple but flawed solution: Start them at 0x60000 + 0x2000 = 0x62000. Max NRPN number is 0x3fff. + ctlnum = CTRL_NRPN14_OFFSET + 0x2000 + id; + } + else + { + #ifdef DSSI_DEBUG + printf("DssiSynthIF::getControllerInfo ctlnum:%d\n", ctlnum); + #endif + + int c = ctlnum; + // Can be both CC and NRPN! Prefer CC over NRPN. + if(DSSI_IS_CC(ctlnum)) + { + #ifdef DSSI_DEBUG + printf("DssiSynthIF::getControllerInfo is CC control\n"); + #endif + + ctlnum = DSSI_CC_NUMBER(c); + + #ifdef DSSI_DEBUG + if(DSSI_IS_NRPN(ctlnum)) + printf("DssiSynthIF::getControllerInfo is also NRPN control. Using CC.\n"); + #endif + } + else + if(DSSI_IS_NRPN(ctlnum)) + { + #ifdef DSSI_DEBUG + printf("DssiSynthIF::getControllerInfo is NRPN control\n"); + #endif + + ctlnum = DSSI_NRPN_NUMBER(c) + CTRL_NRPN14_OFFSET; + } + } + + int def = CTRL_VAL_UNKNOWN; + if(ladspa2MidiControlValues(ld, i, ctlnum, min, max, &def)) + *initval = def; + else + *initval = CTRL_VAL_UNKNOWN; + + #ifdef DSSI_DEBUG + printf("DssiSynthIF::getControllerInfo passed ctlnum:%d min:%d max:%d initval:%d\n", ctlnum, *min, *max, *initval); + #endif + + *ctrl = ctlnum; + *name = ld->PortNames[i]; + return ++id; + + /* + // ...now create midi controllers for ports which did not define them ... + for(int k = 0; k < controlPorts; ++k) + { + int i = synth->pIdx[k]; + //controls[k].val = ladspaDefaultValue(ld, i); + ladspaDefaultValue(ld, i, &controls[k].val); + + printf("DssiSynthIF::getControllerInfo #2 control port:%d port idx:%d name:%s\n", k, i, ld->PortNames[i]); + + if(!dssi->get_midi_controller_for_port || (dssi->get_midi_controller_for_port(handle, i) == DSSI_NONE)) + { + int ctlnum; + //printf("DssiSynthIF::getControllerInfo #2 midi controller number:%d\n", ctlnum); + printf("DssiSynthIF::getControllerInfo #2 creating MidiController number:%d\n", ctlnum); + MidiController* mc = ladspa2MidiController(ld, i, ctlnum); + // Add to MidiInstrument controller list. + if(mc) + { + printf("DssiSynthIF::getControllerInfo #2 adding MidiController to instrument\n"); + ((MidiInstrument*)synti)->controller()->add(mc); + } + } + else + { + + } + } + */ + +} + +int DssiSynthIF::channels() const +{ + return synth->_outports > MAX_CHANNELS ? MAX_CHANNELS : synth->_outports; +} + +int DssiSynthIF::totalOutChannels() const +{ + return synth->_outports; +} + +int DssiSynthIF::totalInChannels() const +{ + return synth->_inports; +} + +//-------------------------------- +// Methods for PluginIBase: +//-------------------------------- + +bool DssiSynthIF::on() const { return true; } // Synth is not part of a rack plugin chain. Always on. +void DssiSynthIF::setOn(bool /*val*/) { } +int DssiSynthIF::pluginID() { return (synth && synth->dssi) ? synth->dssi->LADSPA_Plugin->UniqueID : 0; } +int DssiSynthIF::id() { return 0; } // Synth is not part of a rack plugin chain. Always 0. +QString DssiSynthIF::pluginLabel() const { return (synth && synth->dssi) ? QString(synth->dssi->LADSPA_Plugin->Label) : QString(); } +QString DssiSynthIF::name() const { return synti->name(); } +AudioTrack* DssiSynthIF::track() { return (AudioTrack*)synti; } +void DssiSynthIF::enableController(int i, bool v) { controls[i].enCtrl = v; } +bool DssiSynthIF::controllerEnabled(int i) const { return controls[i].enCtrl; } +bool DssiSynthIF::controllerEnabled2(int i) const { return controls[i].en2Ctrl; } +void DssiSynthIF::updateControllers() { } +void DssiSynthIF::writeConfiguration(int /*level*/, Xml& /*xml*/) { } +bool DssiSynthIF::readConfiguration(Xml& /*xml*/, bool /*readPreset*/) { return false; } +int DssiSynthIF::parameters() const { return synth ? synth->_controlInPorts : 0; } +void DssiSynthIF::setParam(int i, double val) { setParameter(i, val); } +double DssiSynthIF::param(int i) const { return getParameter(i); } +const char* DssiSynthIF::paramName(int i) { return (synth && synth->dssi) ? synth->dssi->LADSPA_Plugin->PortNames[i] : 0; } +//LADSPA_PortRangeHint DssiSynthIF::range(int i) { return (synth && synth->dssi) ? synth->dssi->LADSPA_Plugin->PortRangeHints[i] : 0; } +LADSPA_PortRangeHint DssiSynthIF::range(int i) { return synth->dssi->LADSPA_Plugin->PortRangeHints[i]; } + + +#else //DSSI_SUPPORT +void initDSSI() {} +#endif + diff --git a/muse2/muse/dssihost.h b/muse2/muse/dssihost.h new file mode 100644 index 00000000..046343f5 --- /dev/null +++ b/muse2/muse/dssihost.h @@ -0,0 +1,256 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id: dssihost.h,v 1.10.2.7 2009/12/06 10:05:00 terminator356 Exp $ +// +// Copyright (C) 2002-2006 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the 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 "config.h" + +#include +#include +#include + +#ifdef OSC_SUPPORT +#include +#include "osc.h" +#endif + +#include "ladspa.h" +#include +#include + +#include "midictrl.h" +#include "synth.h" +#include "stringparam.h" + +#include "plugin.h" +//Added by qt3to4: +#include + +#define DSSI_PARAMSAVE_VERSION_MAJOR 0 +#define DSSI_PARAMSAVE_VERSION_MINOR 1 + +struct _DSSI; +class DssiPluginIF; + +//class LadspaPort; +class Port; +class Q3Process; + +//--------------------------------------------------------- +// DssiSynth +//--------------------------------------------------------- + +class DssiSynth : public Synth { + protected: + //char* label; + void* handle; + const DSSI_Descriptor* dssi; + DSSI_Descriptor_Function df; + unsigned long _portCount, _inports, _outports, _controlInPorts, _controlOutPorts; + std::vector pIdx; // Control input index to port number. + std::vector opIdx; // Control output index to port number. This is sometimes a latency port and...? + std::vector iIdx; // Audio input index to port number. + std::vector oIdx; // Audio output index to port number. + std::vector iUsedIdx; // During process, tells whether an audio input port was used by any input routes. + std::vector rpIdx; // Port number to control input index. Item is -1 if it's not a control input. + //unsigned long* rpIdx; + MidiCtl2LadspaPortMap midiCtl2PortMap; // Maps midi controller numbers to DSSI port numbers. + MidiCtl2LadspaPortMap port2MidiCtlMap; // Maps DSSI port numbers to midi controller numbers. + bool _hasGui; + bool _inPlaceCapable; + + public: + //DssiSynth(const QFileInfo* fi, QString l) : Synth(fi, l) { + //DssiSynth(const QFileInfo& fi, QString l) : Synth(fi, l) { + //DssiSynth(const QFileInfo& fi, QString label, QString descr, QString maker, QString ver) : + // Synth(fi, label, descr, maker, ver) { + // rpIdx = 0; + // df = 0; + // handle = 0; + // dssi = 0; + // _hasGui = false; + // } + //DssiSynth(const QFileInfo& fi, QString label, QString descr, QString maker, QString ver); + DssiSynth(QFileInfo&, const DSSI_Descriptor*); // removed const for QFileInfo + virtual ~DssiSynth(); + virtual void incInstances(int); + + //virtual void* instantiate(); + + virtual SynthIF* createSIF(SynthI*); + //virtual SynthIF* createSIF(); + + friend class DssiSynthIF; + //float defaultValue(int); // Not required + unsigned long inPorts() const { return _inports; } + unsigned long outPorts() const { return _outports; } + unsigned long inControls() const { return _controlInPorts; } + unsigned long outControls() const { return _controlOutPorts; } + + unsigned long inControlPortIdx(unsigned long i) { return pIdx[i]; } + }; + +//--------------------------------------------------------- +// DssiSynthIF +// VSTi synthesizer instance +//--------------------------------------------------------- + +//class DssiSynthIF : public SynthIF +class DssiSynthIF : public SynthIF, public PluginIBase + { + //bool _guiVisible; + DssiSynth* synth; + LADSPA_Handle handle; + + //LadspaPort* controls; + Port* controls; + Port* controlsOut; + + //unsigned long _curBank; + //unsigned long _curProgram; + + #ifdef OSC_SUPPORT + OscDssiIF _oscif; + #endif + + //void* uiTarget; + //char* uiOscShowPath; + //char* uiOscControlPath; + //char* uiOscConfigurePath; + //char* uiOscProgramPath; + //char* uiOscPath; + + std::vector programs; + void queryPrograms(); + bool processEvent(const MidiPlayEvent&, snd_seq_event_t*); + + float** audioInBuffers; + float** audioOutBuffers; + + protected: + //int guiPid; + //QProcess* guiQProc; + + public: + DssiSynthIF(SynthI* s); + //DssiSynthIF(); + + virtual ~DssiSynthIF(); + + virtual DssiSynth* dssiSynth() { return synth; } + virtual SynthI* dssiSynthI() { return synti; } + + virtual bool initGui(); + virtual void guiHeartBeat(); + 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 preProcessAlways(); + + //virtual void getData(MidiEventList*, unsigned pos, int ports, unsigned n, float** buffer) ; + virtual iMPEvent getData(MidiPort*, MPEventList*, iMPEvent, unsigned pos, int ports, unsigned n, float** buffer); + + //virtual bool putEvent(const MidiEvent& ev); + virtual bool putEvent(const MidiPlayEvent& ev); + + //virtual MidiEvent receiveEvent(); + virtual MidiPlayEvent receiveEvent(); + + virtual int eventsPending() const { return 0; } + + //virtual int channels() const { return synth->_outports; } + virtual int channels() const; + virtual int totalOutChannels() const; + virtual int totalInChannels() const; + + virtual void deactivate3() {} + + //virtual QString getPatchName(int, int); + virtual const char* getPatchName(int, int, int, bool) const { return ""; } + virtual const char* getPatchName(int, int, MType, bool); + + //virtual void populatePatchPopup(QMenu*, int); + virtual void populatePatchPopup(Q3PopupMenu*, int, MType, bool); + + //virtual void write(Xml& xml) const; + virtual void write(int level, Xml& xml) const; + + virtual float getParameter(unsigned long /*idx*/) const; + virtual void setParameter(unsigned long /*idx*/, float /*value*/); + + //virtual int getControllerInfo(int, const char**, int*, int*, int*) { return 0; } + virtual int getControllerInfo(int, const char**, int*, int*, int*, int*); + + bool init(DssiSynth* s); + + //StringParamMap& stringParameters() { return synti->stringParameters(); } + + #ifdef OSC_SUPPORT + OscDssiIF& oscIF() { return _oscif; } + /* + int oscProgram(lo_arg**); + int oscControl(lo_arg**); + int oscMidi(lo_arg**); + int oscConfigure(lo_arg**); + int oscUpdate(lo_arg**); + //int oscExiting(lo_arg**); + */ + + int oscProgram(unsigned long /*prog*/, unsigned long /*bank*/); + int oscControl(unsigned long /*dssiPort*/, float /*val*/); + int oscMidi(int /*a*/, int /*b*/, int /*c*/); + int oscConfigure(const char */*key*/, const char */*val*/); + int oscUpdate(); + //int oscExiting(); + #endif + + //------------------------- + // Methods for PluginIBase: + //------------------------- + bool on() const; + void setOn(bool /*val*/); + int pluginID(); + int id(); + QString pluginLabel() const; + QString name() const; + AudioTrack* track(); + void enableController(int /*i*/, bool v = true); + bool controllerEnabled(int /*i*/) const; + bool controllerEnabled2(int /*i*/) const; + void updateControllers(); + void writeConfiguration(int /*level*/, Xml& /*xml*/); + bool readConfiguration(Xml& /*xml*/, bool readPreset=false); + int parameters() const; + void setParam(int /*i*/, double /*val*/); + double param(int /*i*/) const; + const char* paramName(int /*i*/); + LADSPA_PortRangeHint range(int /*i*/); + + friend class DssiSynth; + }; + +extern void initDSSI(); + +#endif + diff --git a/muse2/muse/evdata.h b/muse2/muse/evdata.h new file mode 100644 index 00000000..59155d48 --- /dev/null +++ b/muse2/muse/evdata.h @@ -0,0 +1,67 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: evdata.h,v 1.2.2.2 2008/08/18 00:15:23 terminator356 Exp $ +// +// (C) Copyright 1999-2003 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __EVDATA_H__ +#define __EVDATA_H__ + +#include +// #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/muse2/muse/event.cpp b/muse2/muse/event.cpp new file mode 100644 index 00000000..5d16fde9 --- /dev/null +++ b/muse2/muse/event.cpp @@ -0,0 +1,328 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: event.cpp,v 1.8.2.5 2009/12/20 05:00:35 terminator356 Exp $ +// +// (C) Copyright 2000-2003 Werner Schweer (ws@seh.de) +//========================================================= + +#include +// #include +//#include "audioconvert.h" +#include "event.h" +#include "eventbase.h" +#include "waveevent.h" +#include "midievent.h" +//#include "globals.h" + +// Added by Tim. p3.3.20 +//#define USE_SAMPLERATE + +//--------------------------------------------------------- +// Event +//--------------------------------------------------------- + +EventBase::EventBase(EventType t) + { + _type = t; + Pos::setType(_type == Wave ? FRAMES : TICKS); + refCount = 0; + _selected = false; + } + +EventBase::EventBase(const EventBase& ev) + : PosLen(ev) + { + refCount = 0; + _selected = ev._selected; + _type = ev._type; + } + +//--------------------------------------------------------- +// 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() + { + // p3.3.31 + //printf("Event::clone() this:%p\n", this); + + // p3.3.31 + //return Event(ev->clone()); + #ifdef USE_SAMPLERATE + return Event(ev->clone(), _audConv); + #else + return Event(ev->clone()); + #endif + } + +Event::Event() +{ + ev = 0; + //_sfCurFrame = 0; + //_audConv = 0; +} + +Event::Event(EventType t) { + //_sfCurFrame = 0; + //_audConv = 0; + + if (t == Wave) + ev = new WaveEventBase(t); + else + ev = new MidiEventBase(t); + ++(ev->refCount); + } +Event::Event(const Event& e) { + //_sfCurFrame = 0; + //_audConv = 0; + + ev = e.ev; + if(ev) + ++(ev->refCount); + + #ifdef USE_SAMPLERATE + //_audConv = AudioConverter::getAudioConverter(e._audConv); + if(e._audConv) + _audConv = e._audConv->reference(); + #endif + } +Event::Event(EventBase* eb) { + //_sfCurFrame = 0; + //_audConv = 0; + + ev = eb; + ++(ev->refCount); + + #ifdef USE_SAMPLERATE + if(!ev->sndFile().isNull()) + //_audConv = AudioConverter::getAudioConverter(eb, SRC_SINC_MEDIUM_QUALITY); + //_audConv = new AudioConverter(ev->sndFile().channels(), SRC_SINC_MEDIUM_QUALITY); + _audConv = new SRCAudioConverter(ev->sndFile().channels(), SRC_SINC_MEDIUM_QUALITY); + #endif + } +#ifdef USE_SAMPLERATE +Event::Event(EventBase* eb, AudioConverter* cv) { + _sfCurFrame = 0; + _audConv = 0; + + ev = eb; + ++(ev->refCount); + + if(cv) + _audConv = cv->reference(); + } +#endif + +Event::~Event() { + if (ev && --(ev->refCount) == 0) { + delete ev; + ev=0; + } + + #ifdef USE_SAMPLERATE + AudioConverter::release(_audConv); + #endif + } + +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; + ev = 0; + } + 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 = 0; + } + ev = e.ev; + if (ev) + ++(ev->refCount); + return *this; + */ + + if (ev != e.ev) + { + if (ev && --(ev->refCount) == 0) { + delete ev; + ev = 0; + } + ev = e.ev; + if (ev) + ++(ev->refCount); + } + + #ifdef USE_SAMPLERATE + if (_audConv != e._audConv) + { + if(_audConv) + AudioConverter::release(_audConv); + //_audConv = AudioConverter::getAudioConverter(e._audConv); + _audConv = e._audConv->reference(); + } + #endif + 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; } +void Event::move(int offset) { ev->move(offset); } + +//void Event::read(Xml& xml) { ev->read(xml); } +void Event::read(Xml& xml) +{ + ev->read(xml); + + #ifdef USE_SAMPLERATE + if(!ev->sndFile().isNull()) + { + if(_audConv) + { + _audConv->setChannels(ev->sndFile().channels()); + } + else + { + //int srcerr; + //if(debugMsg) + // printf("Event::read Creating samplerate converter with %d channels\n", ev->sndFile().channels()); + //_src_state = src_new(SRC_SINC_MEDIUM_QUALITY, ev->sndFile().channels(), &srcerr); +// _audConv = new AudioConverter(ev->sndFile().channels(), SRC_SINC_MEDIUM_QUALITY); + _audConv = new SRCAudioConverter(ev->sndFile().channels(), SRC_SINC_MEDIUM_QUALITY); + //if(!_src_state) + //if(!_audConv) + // printf("Event::read Creation of samplerate converter with %d channels failed:%s\n", ev->sndFile().channels(), src_strerror(srcerr)); + } + } + #endif +} + + +//void Event::write(int a, Xml& xml, const Pos& o) const { ev->write(a, xml, o); } +void Event::write(int a, Xml& xml, const Pos& o, bool forceWavePaths) const { ev->write(a, xml, o, forceWavePaths); } +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::setSndFile(SndFileR& sf) +{ + ev->setSndFile(sf); + + #ifdef USE_SAMPLERATE + //if(_audConv) +// if(_audConv && !sf.isNull()) +// { + //_audConv->setSndFile(sf); + //if(sf.isNull()) + // AudioConverter::release(_audConv); + //else +// _audConv->setChannels(sf.channels()); +// } + + if(_audConv) + { + // Do we release? Or keep the converter around, while gaining speed since no rapid creation/destruction. + //if(sf.isNull()) + // _audConv = AudioConverter::release(_audConv); + //else + // _audConv->setChannels(sf.channels()); + if(!sf.isNull()) + _audConv->setChannels(sf.channels()); + } + else + { + if(!sf.isNull()) + _audConv = new SRCAudioConverter(ev->sndFile().channels(), SRC_SINC_MEDIUM_QUALITY); + } + #endif +} + +//void Event::read(unsigned offset, float** bpp, int channels, int nn, bool overwrite) +//void Event::readAudio(unsigned offset, float** bpp, int channels, int nn, bool doSeek, bool overwrite) +// p3.3.33 +void Event::readAudio(WavePart* part, unsigned offset, float** bpp, int channels, int nn, bool doSeek, bool overwrite) + { + //ev->read(offset, bpp, channels, nn, overwrite); + //ev->readAudio(offset, bpp, channels, nn, doSeek, overwrite); + //_sfCurFrame = ev->readAudio(_src_state, _sfCurFrame, offset, bpp, channels, nn, doSeek, overwrite); + // p3.3.33 + ev->readAudio(part, offset, bpp, channels, nn, doSeek, overwrite); + } +void Event::setTick(unsigned val) { ev->setTick(val); } +unsigned Event::tick() const { return ev->tick(); } +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); } + diff --git a/muse2/muse/event.h b/muse2/muse/event.h new file mode 100644 index 00000000..0b0a2fbd --- /dev/null +++ b/muse2/muse/event.h @@ -0,0 +1,150 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: event.h,v 1.7.2.4 2009/12/20 05:00:35 terminator356 Exp $ +// +// (C) Copyright 1999-2004 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __EVENT_H__ +#define __EVENT_H__ + +#include +#include +//#include +#include + +#include "wave.h" // wg. SndFile +#include "pos.h" +#include "evdata.h" + +enum EventType { Note, Controller, Sysex, PAfter, CAfter, Meta, Wave }; + +class Xml; +class EventBase; +//class AudioConverter; +class WavePart; + +//--------------------------------------------------------- +// Event +//--------------------------------------------------------- + +class Event { + EventBase* ev; + + //off_t _sfCurFrame; + //AudioConverter* _audConv; + + public: + //Event() { ev = 0; } + Event(); + Event(EventType t); + Event(const Event& e); + Event(EventBase* eb); + + //#ifdef USE_SAMPLERATE + //Event(EventBase* eb, AudioConverter* cv); + //#endif + + virtual ~Event(); + + bool empty() const; + EventType type() 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); + void move(int offset); + + void read(Xml& xml); + //void write(int a, Xml& xml, const Pos& offset) const; + void write(int a, Xml& xml, const Pos& offset, bool ForceWavePaths = false) const; + void dump(int n = 0) const; + Event clone(); + 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); + //AudioConverter* audioConverter() { return _audConv;} + SndFileR sndFile() const; + virtual void setSndFile(SndFileR& sf); + + //virtual void read(unsigned offset, float** bpp, int channels, int nn, bool overwrite = true); + //virtual void readAudio(unsigned /*offset*/, float** /*bpp*/, int /*channels*/, int /*nn*/, bool /*doSeek*/, bool /*overwrite*/); + virtual void readAudio(WavePart* /*part*/, unsigned /*offset*/, float** /*bpp*/, int /*channels*/, int /*nn*/, bool /*doSeek*/, bool /*overwrite*/); + + 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; + Pos end() 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 { + int ref; // number of references to this EventList + int aref; // number of active references (exclude undo list) + void deselect(); + + public: + EventList() { ref = 0; aref = 0; } + ~EventList() {} + + void incRef(int n) { ref += n; } + int refCount() const { return ref; } + void incARef(int n) { aref += n; } + int arefCount() const { return aref; } + + iEvent find(const Event&); + iEvent add(Event& event); + void move(Event& event, unsigned tick); + void dump() const; + void read(Xml& xml, const char* name, bool midi); + }; + +#endif + diff --git a/muse2/muse/eventbase.h b/muse2/muse/eventbase.h new file mode 100644 index 00000000..6684bf57 --- /dev/null +++ b/muse2/muse/eventbase.h @@ -0,0 +1,97 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: eventbase.h,v 1.3.2.3 2009/12/20 05:00:35 terminator356 Exp $ +// +// (C) Copyright 1999-2004 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __EVENTBASE_H__ +#define __EVENTBASE_H__ + +//#include +#include + +#include "pos.h" +#include "event.h" + +//class AudioConverter; +class WavePart; + +//--------------------------------------------------------- +// EventBase +//--------------------------------------------------------- + +class EventBase : public PosLen { + EventType _type; + + protected: + int refCount; + bool _selected; + + public: + EventBase(EventType t); + EventBase(const EventBase& ev); + + 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; } + + void move(int offset); + + virtual void read(Xml&) = 0; + //virtual void write(int, Xml&, const Pos& offset) const = 0; + virtual void write(int, Xml&, const Pos& offset, bool forcePath = false) 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() = 0; + + //virtual void read(unsigned /*offset*/, float** /*bpp*/, int /*channels*/, int /*nn*/, bool /*doSeek*/, bool overwrite = true) {} + //virtual void readAudio(unsigned /*offset*/, float** /*bpp*/, int /*channels*/, int /*nn*/, bool /*doSeek*/, bool /*overwrite*/) {} + //virtual off_t readAudio(SRC_STATE* /*src_state*/, off_t /*sfCurFrame*/, unsigned /*offset*/, + // float** /*bpp*/, int /*channels*/, int /*nn*/, bool /*doSeek*/, bool /*overwrite*/) { return 0; } + //virtual off_t readAudio(AudioConverter* /*audConv*/, off_t /*sfCurFrame*/, unsigned /*offset*/, + // float** /*bpp*/, int /*channels*/, int /*nn*/, bool /*doSeek*/, bool /*overwrite*/) { return 0; } + virtual void readAudio(WavePart* /*part*/, unsigned /*offset*/, + float** /*bpp*/, int /*channels*/, int /*nn*/, bool /*doSeek*/, bool /*overwrite*/) { } + }; +#endif + diff --git a/muse2/muse/eventlist.cpp b/muse2/muse/eventlist.cpp new file mode 100644 index 00000000..23fffc8c --- /dev/null +++ b/muse2/muse/eventlist.cpp @@ -0,0 +1,112 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: eventlist.cpp,v 1.7.2.3 2009/11/05 03:14:35 terminator356 Exp $ +// +// (C) Copyright 2000-2003 Werner Schweer (ws@seh.de) +//========================================================= + +#include "tempo.h" +#include "event.h" +#include "xml.h" + +//--------------------------------------------------------- +// readEventList +//--------------------------------------------------------- + +void EventList::read(Xml& xml, const char* name, bool midi) + { + for (;;) { + Xml::Token token = xml.parse(); + const QString& tag = xml.s1(); + switch (token) { + case Xml::Error: + case Xml::End: + return; + case Xml::TagStart: + if (tag == "event") { + Event e(midi ? Note : Wave); + e.read(xml); + add(e); + } + else + xml.unknown("readEventList"); + break; + case Xml::TagEnd: + if (tag == name) + return; + default: + break; + } + } + } + +//--------------------------------------------------------- +// add +//--------------------------------------------------------- + +iEvent EventList::add(Event& event) + { + // Added by T356. An event list containing wave events should be sorted by + // frames. WaveTrack::fetchData() relies on the sorting order, and + // there was a bug that waveparts were sometimes muted because of + // incorrect sorting order (by ticks). + // Also, when the tempo map is changed, every wave event would have to be + // re-added to the event list so that the proper sorting order (by ticks) + // could be achieved. + // Note that in a med file, the tempo list is loaded AFTER all the tracks. + // There was a bug that all the wave events' tick values were not correct, + // since they were computed BEFORE the tempo map was loaded. + if(event.type() == Wave) + return std::multimap >::insert(std::pair (event.frame(), event)); + else + + return std::multimap >::insert(std::pair (event.tick(), event)); + } + +//--------------------------------------------------------- +// move +//--------------------------------------------------------- + +void EventList::move(Event& event, unsigned tick) + { + iEvent i = find(event); + erase(i); + + // Added by T356. + if(event.type() == Wave) + std::multimap >::insert(std::pair (tempomap.tick2frame(tick), event)); + else + + std::multimap >::insert(std::pair (tick, event)); + } + +//--------------------------------------------------------- +// find +//--------------------------------------------------------- + +iEvent EventList::find(const Event& event) + { + // Changed by T356. + // Changed by Tim. p3.3.8 + //EventRange range = equal_range(event.tick()); + EventRange range = equal_range(event.type() == Wave ? event.frame() : 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/muse2/muse/exportmidi.cpp b/muse2/muse/exportmidi.cpp new file mode 100644 index 00000000..c068d719 --- /dev/null +++ b/muse2/muse/exportmidi.cpp @@ -0,0 +1,379 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: exportmidi.cpp,v 1.9.2.1 2009/04/01 01:37:10 terminator356 Exp $ +// +// (C) Copyright 1999-2003 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include + +#include "app.h" +#include "midifile.h" +#include "midi.h" +#include "midictrl.h" +#include "globals.h" +#include "filedialog.h" +#include "track.h" +#include "song.h" +#include "mpevent.h" +#include "event.h" +#include "marker/marker.h" +#include "drummap.h" +#include "gconfig.h" + +//--------------------------------------------------------- +// addController +//--------------------------------------------------------- + +static void addController(MPEventList* l, int tick, int port, int channel, int a, int b) + { + // p3.3.37 + //if (a < 0x1000) { // 7 Bit Controller + if (a < CTRL_14_OFFSET) { // 7 Bit Controller + l->add(MidiPlayEvent(tick, port, channel, ME_CONTROLLER, a, b)); + } + //else if (a < 0x20000) { // 14 Bit Controller + else if (a < CTRL_RPN_OFFSET) { // 14 Bit Controller + int ctrlH = (a >> 8) & 0x7f; + int ctrlL = a & 0x7f; + int dataH = (b >> 7) & 0x7f; + int dataL = b & 0x7f; + l->add(MidiPlayEvent(tick, port, channel, ME_CONTROLLER, ctrlH, dataH)); + l->add(MidiPlayEvent(tick+1, port, channel, ME_CONTROLLER, ctrlL, dataL)); + } + //else if (a < 0x30000) { // RPN 7-Bit Controller + else if (a < CTRL_NRPN_OFFSET) { // RPN 7-Bit Controller + int ctrlH = (a >> 8) & 0x7f; + int ctrlL = a & 0x7f; + l->add(MidiPlayEvent(tick, port, channel, ME_CONTROLLER, CTRL_HRPN, ctrlH)); + l->add(MidiPlayEvent(tick+1, port, channel, ME_CONTROLLER, CTRL_LRPN, ctrlL)); + l->add(MidiPlayEvent(tick+2, port, channel, ME_CONTROLLER, CTRL_HDATA, b)); + } + //else if (a < 0x40000) { // NRPN 7-Bit Controller + else if (a < CTRL_INTERNAL_OFFSET) { // NRPN 7-Bit Controller + int ctrlH = (a >> 8) & 0x7f; + int ctrlL = a & 0x7f; + l->add(MidiPlayEvent(tick, port, channel, ME_CONTROLLER, CTRL_HNRPN, ctrlH)); + l->add(MidiPlayEvent(tick+1, port, channel, ME_CONTROLLER, CTRL_LNRPN, ctrlL)); + l->add(MidiPlayEvent(tick+2, port, channel, ME_CONTROLLER, CTRL_HDATA, b)); + } + else if (a == CTRL_PITCH) { + int a = b + 8192; + int b = a >> 7; + l->add(MidiPlayEvent(tick, port, 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; + switch(song->mtype()) { + case MT_GM: // no HBANK/LBANK + break; + case MT_GS: + case MT_XG: + case MT_UNKNOWN: + if (hb != 0xff) { + l->add(MidiPlayEvent(tick, port, channel, ME_CONTROLLER, CTRL_HBANK, hb)); + ++tickoffset; + } + if (lb != 0xff) { + l->add(MidiPlayEvent(tick+tickoffset, port, channel, ME_CONTROLLER, CTRL_LBANK, lb)); + ++tickoffset; + } + break; + } + l->add(MidiPlayEvent(tick+tickoffset, port, channel, ME_PROGRAM, pr, 0)); + } + //else if (a < 0x60000) { // RPN14 Controller + 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; + l->add(MidiPlayEvent(tick, port, channel, ME_CONTROLLER, CTRL_HRPN, ctrlH)); + l->add(MidiPlayEvent(tick+1, port, channel, ME_CONTROLLER, CTRL_LRPN, ctrlL)); + l->add(MidiPlayEvent(tick+2, port, channel, ME_CONTROLLER, CTRL_HDATA, dataH)); + l->add(MidiPlayEvent(tick+3, port, channel, ME_CONTROLLER, CTRL_LDATA, dataL)); + } + //else if (a < 0x70000) { // NRPN14 Controller + 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; + l->add(MidiPlayEvent(tick, port, channel, ME_CONTROLLER, CTRL_HNRPN, ctrlH)); + l->add(MidiPlayEvent(tick+1, port, channel, ME_CONTROLLER, CTRL_LNRPN, ctrlL)); + l->add(MidiPlayEvent(tick+2, port, channel, ME_CONTROLLER, CTRL_HDATA, dataH)); + l->add(MidiPlayEvent(tick+3, port, channel, ME_CONTROLLER, CTRL_LDATA, dataL)); + } + } + +//--------------------------------------------------------- +// exportMidi +//--------------------------------------------------------- + +void MusE::exportMidi() + { + MFile file(QString("midis"), QString(".mid")); + + //FILE* fp = file.open("w", midi_file_pattern, this, false, true, + FILE* fp = file.open("w", midi_file_save_pattern, this, false, true, + tr("MusE: Export Midi")); + if (fp == 0) + return; + MidiFile mf(fp); + + MidiTrackList* tl = song->midis(); + int ntracks = tl->size(); + MidiFileTrackList* mtl = new MidiFileTrackList; + + int i = 0; + for (iMidiTrack im = tl->begin(); im != tl->end(); ++im, ++i) { + MidiTrack* track = *im; + MidiFileTrack* mft = new MidiFileTrack; + mtl->push_back(mft); + MPEventList* l = &(mft->events); + int port = track->outPort(); + int channel = track->outChannel(); + + //--------------------------------------------------- + // only first midi track contains + // - Track Marker + // - copyright + // - time signature + // - tempo map + // - GM/GS/XG Initialization + //--------------------------------------------------- + + if (i == 0) { + //--------------------------------------------------- + // Write Track Marker + // + MarkerList* ml = song->marker(); + for (ciMarker m = ml->begin(); m != ml->end(); ++m) { + const char* name = m->second.name().latin1(); + int len = strlen(name); + MidiPlayEvent ev(m->first, port, ME_META, (unsigned char*)name, len); + ev.setA(0x6); + l->add(ev); + } + + //--------------------------------------------------- + // Write Copyright + // + const char* copyright = config.copyright.latin1(); + if (copyright && *copyright) { + int len = strlen(copyright); + MidiPlayEvent ev(0, port, ME_META, (unsigned char*)copyright, len); + ev.setA(0x2); + l->add(ev); + } + + //--------------------------------------------------- + // Write Coment + // + QString comment = track->comment(); + if (!comment.isEmpty()) { + int len = comment.length(); + MidiPlayEvent ev(0, port, ME_META, (const unsigned char*)(comment.latin1()), len); + ev.setA(0x1); + l->add(ev); + } + + //--------------------------------------------------- + // Write Songtype SYSEX: GM/GS/XG + // + + switch(song->mtype()) { + case MT_GM: + l->add(MidiPlayEvent(0, port, ME_SYSEX, gmOnMsg, gmOnMsgLen)); + break; + case MT_GS: + l->add(MidiPlayEvent(0, port, ME_SYSEX, gmOnMsg, gmOnMsgLen)); + l->add(MidiPlayEvent(250, port, ME_SYSEX, gsOnMsg, gsOnMsgLen)); + break; + case MT_XG: + l->add(MidiPlayEvent(0, port, ME_SYSEX, gmOnMsg, gmOnMsgLen)); + l->add(MidiPlayEvent(250, port, ME_SYSEX, xgOnMsg, xgOnMsgLen)); + break; + case MT_UNKNOWN: + break; + } + + //--------------------------------------------------- + // Write Tempomap + // + TempoList* tl = &tempomap; + for (ciTEvent e = tl->begin(); e != tl->end(); ++e) { + 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; + MidiPlayEvent ev(event->tick, port, ME_META, data, 3); + ev.setA(0x51); + l->add(ev); + } + + //--------------------------------------------------- + // Write Signatures + // + const SigList* sl = &sigmap; + for (ciSigEvent e = sl->begin(); e != sl->end(); ++e) { + SigEvent* event = e->second; + int sz = (config.exp2ByteTimeSigs ? 2 : 4); // export 2 byte timesigs instead of 4 ? + unsigned char data[sz]; + data[0] = event->z; + switch(event->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->n); + break; + } + // By T356. In muse the metronome pulse is fixed at 24 (once per quarter-note). + // The number of 32nd notes per 24 MIDI clock signals (per quarter-note) is 8. + if(!config.exp2ByteTimeSigs) + { + data[2] = 24; + data[3] = 8; + } + + MidiPlayEvent ev(event->tick, port, ME_META, data, sz); + + ev.setA(0x58); + l->add(ev); + } + } + + //----------------------------------- + // track name + //----------------------------------- + + if (!track->name().isEmpty()) { + const char* name = track->name().latin1(); + int len = strlen(name); + MidiPlayEvent ev(0, port, ME_META, (unsigned char*)name, len+1); + ev.setA(0x3); // Meta Sequence/Track Name + l->add(ev); + } + + //----------------------------------- + // track comment + //----------------------------------- + + if (!track->comment().isEmpty()) { + const char* comment = track->comment().latin1(); + int len = strlen(comment); + MidiPlayEvent ev(0, port, ME_META, (unsigned char*)comment, len+1); + ev.setA(0xf); // Meta Text + l->add(ev); + } + PartList* parts = track->parts(); + for (iPart p = parts->begin(); p != parts->end(); ++p) { + MidiPart* part = (MidiPart*) (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; + if (track->type() == Track::DRUM) { + // + // Map drum-notes to the drum-map values + // + int instr = ev.pitch(); + pitch = drumMap[instr].anote; + // port = drumMap[instr].port; + // channel = drumMap[instr].channel; + } + else + 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->add(MidiPlayEvent(tick, port, channel, ME_NOTEON, pitch, velo)); + + if(config.expOptimNoteOffs) // Save space by replacing note offs with note on velocity 0 + l->add(MidiPlayEvent(tick+len, port, channel, ME_NOTEON, pitch, 0)); + else + l->add(MidiPlayEvent(tick+len, port, channel, ME_NOTEOFF, pitch, velo)); + } + break; + + case Controller: + addController(l, tick, port, channel, ev.dataA(), ev.dataB()); + break; + + case Sysex: + l->add(MidiPlayEvent(tick, port, ME_SYSEX, ev.eventData())); + break; + + case PAfter: + l->add(MidiPlayEvent(tick, port, channel, ME_AFTERTOUCH, ev.dataA(), ev.dataB())); + break; + + case CAfter: + l->add(MidiPlayEvent(tick, port, channel, ME_POLYAFTER, ev.dataA(), ev.dataB())); + break; + + case Meta: + { + MidiPlayEvent mpev(tick, port, ME_META, ev.eventData()); + mpev.setA(ev.dataA()); + l->add(mpev); + } + break; + case Wave: + break; + } + } + } + } + mf.setDivision(config.midiDivision); + mf.setMType(song->mtype()); + mf.setTrackList(mtl, ntracks); + mf.write(); + } + diff --git a/muse2/muse/fastlog.h b/muse2/muse/fastlog.h new file mode 100644 index 00000000..23710a8b --- /dev/null +++ b/muse2/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/muse2/muse/gconfig.cpp b/muse2/muse/gconfig.cpp new file mode 100644 index 00000000..be92b6aa --- /dev/null +++ b/muse2/muse/gconfig.cpp @@ -0,0 +1,135 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: gconfig.cpp,v 1.15.2.13 2009/12/01 03:52:40 terminator356 Exp $ +// +// (C) Copyright 1999-2003 Werner Schweer (ws@seh.de) +//========================================================= + +#include "gconfig.h" + +GlobalConfigValues config = { + { + QColor(0xff, 0xff, 0xff), // palette + QColor(0xff, 0xff, 0xff), + QColor(0xff, 0xff, 0xff), + QColor(0xff, 0xff, 0xff), + QColor(0xff, 0xff, 0xff), + QColor(0xff, 0xff, 0xff), + QColor(0xff, 0xff, 0xff), + QColor(0xff, 0xff, 0xff), + QColor(0xff, 0xff, 0xff), + QColor(0xff, 0xff, 0xff), + QColor(0xff, 0xff, 0xff), + QColor(0xff, 0xff, 0xff), + QColor(0xff, 0xff, 0xff), + QColor(0xff, 0xff, 0xff), + QColor(0xff, 0xff, 0xff), + QColor(0xff, 0xff, 0xff) + }, + { + 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(0, 0, 255), // transportHandleColor; + QColor(255, 0, 0), // bigTimeForegroundColor; + QColor(0, 0, 0), // bigTimeBackgroundColor; + QColor(200, 200, 200), // waveEditBackgroundColor; + { + QFont(QString("arial"), 10, QFont::Normal), + QFont(QString("arial"), 8, QFont::Normal), + QFont(QString("arial"), 10, QFont::Normal), + QFont(QString("arial"), 10, QFont::Bold), + QFont(QString("arial"), 8, QFont::Bold), // timescale numbers + QFont(QString("Lucidatypewriter"), 14, QFont::Bold), + QFont(QString("arial"), 8, QFont::Bold, true) // Mixer strip labels. Looks and fits better with bold + italic than bold alone, + // at the price of only few more pixels than Normal mode. + }, + QColor(84, 97, 114), // trackBg; + QColor(0x80, 0xff, 0x80), // selected track Bg; + QColor(0x00, 0x00, 0x00), // selected track Fg; + QColor(220, 220, 220), // midiTrackBg; + QColor(255, 170, 0), // ctrlGraphFg; Medium orange + QColor(220, 220, 220), // drumTrackBg; + QColor(220, 220, 220), // waveTrackBg; + QColor(189, 220, 193), // outputTrackBg; + QColor(189, 220, 193), // inputTrackBg; + QColor(220, 220, 220), // groupTrackBg; + QColor(220, 220, 220), // auxTrackBg; + QColor(220, 220, 220), // synthTrackBg; + QColor(98, 124, 168), // part canvas bg + QColor(0, 0, 0), // mixerBg; + + 384, // division; + 1024, // rtcTicks + -60, // int minMeter; + -60.0, // double minSlider; + false, // use Jack freewheel + 20, // int guiRefresh; + QString(""), // helpBrowser + true, // extendedMidi + 384, // division for smf export + QString(""), // copyright string for smf export + 1, // smf export file format + false, // midi export file 2 byte timesigs instead of 4 + true, // optimize midi export file note offs + true, // Split imported tracks into multiple parts. + 1, // startMode + QString(""), // start song path + 384, // gui division + QRect(0, 0, 400, 300), // GeometryMain; + QRect(0, 0, 200, 100), // GeometryTransport; + QRect(0, 0, 600, 200), // GeometryBigTime; + QRect(0, 0, 400, 300), // GeometryPianoroll; + QRect(0, 0, 400, 300), // GeometryDrumedit; + //QRect(0, 0, 300, 500), // GeometryMixer; // Obsolete + { + QString("Mixer A"), + QRect(0, 0, 300, 500), // Mixer1 + true, true, true, true, + true, true, true, true + }, + { + QString("Mixer B"), + QRect(200, 200, 300, 500), // Mixer2 + true, true, true, true, + true, true, true, true + }, + true, // TransportVisible; + false, // BigTimeVisible; + false, // mixer1Visible; + false, // mixer2Visible; + + false, // markerVisible; + true, // showSplashScreen + 1, // canvasShowPartType 1 - names, 2 events + 5, // canvasShowPartEvent + true, // canvasShowGrid; + QString(""), // canvasBgPixmap; + QString(""), // style + QString("sweep"), // externalWavEditor + false, // useOldStyleStopShortCut + true, // moveArmedCheckBox + true, // useDenormalBias + false, // useOutputLimiter + true, // showDidYouKnow + false, // vstInPlace Enable VST in-place processing + 44100, // Dummy audio preferred sample rate + 512 // Dummy audio buffer size + }; + diff --git a/muse2/muse/gconfig.h b/muse2/muse/gconfig.h new file mode 100644 index 00000000..454ed05d --- /dev/null +++ b/muse2/muse/gconfig.h @@ -0,0 +1,132 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: gconfig.h,v 1.12.2.10 2009/12/01 03:52:40 terminator356 Exp $ +// +// (C) Copyright 1999-2003 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __CONFIG_H__ +#define __CONFIG_H__ + +#include +#include +#include +#include + +#define NUM_PARTCOLORS 17 +#define NUM_FONTS 7 + +class Xml; + +//--------------------------------------------------------- +// MixerConfig +//--------------------------------------------------------- + +struct MixerConfig { + QString name; + QRect geometry; + bool showMidiTracks; + bool showDrumTracks; + bool showInputTracks; + bool showOutputTracks; + bool showWaveTracks; + bool showGroupTracks; + bool showAuxTracks; + bool showSyntiTracks; + + //void write(Xml&, const char* name); + //void write(int level, Xml& xml, const char* name); + void write(int level, Xml& xml); + //void read(QDomNode); + //void read(Xml& xml, const QString& name); + void read(Xml& xml); + }; + +//--------------------------------------------------------- +// GlobalConfigValues +//--------------------------------------------------------- + +struct GlobalConfigValues { + QColor palette[16]; + QColor partColors[NUM_PARTCOLORS]; + QColor transportHandleColor; + QColor bigTimeForegroundColor; + QColor bigTimeBackgroundColor; + QColor waveEditBackgroundColor; + //QFont fonts[6]; + QFont fonts[NUM_FONTS]; + QColor trackBg; + QColor selectTrackBg; + QColor selectTrackFg; + QColor midiTrackBg; + QColor ctrlGraphFg; + QColor drumTrackBg; + QColor waveTrackBg; + QColor outputTrackBg; + QColor inputTrackBg; + QColor groupTrackBg; + QColor auxTrackBg; + QColor synthTrackBg; + QColor partCanvasBg; + QColor mixerBg; + + int division; + int rtcTicks; + int minMeter; + double minSlider; + bool freewheelMode; + int guiRefresh; + 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 + bool exp2ByteTimeSigs; // Export 2 byte time sigs instead of 4 bytes + bool expOptimNoteOffs; // Save space by replacing note offs with note on velocity 0 + bool importMidiSplitParts; // Split imported tracks into multiple parts. + + int startMode; // 0 - start with last song + // 1 - start with default template + // 2 - start with song + QString startSong; // path for start song + int guiDivision; // division for tick display + + QRect geometryMain; + QRect geometryTransport; + QRect geometryBigTime; + QRect geometryPianoroll; + QRect geometryDrumedit; +// QRect geometryMixer; + MixerConfig mixer1; + MixerConfig mixer2; + bool transportVisible; + bool bigTimeVisible; +// bool mixerVisible; + bool mixer1Visible; + bool mixer2Visible; + bool markerVisible; + + bool showSplashScreen; + int canvasShowPartType; // 1 - names, 2 events + int canvasShowPartEvent; // + bool canvasShowGrid; + QString canvasBgPixmap; + QString style; + + QString externalWavEditor; + bool useOldStyleStopShortCut; + bool moveArmedCheckBox; + bool useDenormalBias; + bool useOutputLimiter; + bool showDidYouKnow; + bool vstInPlace; // Enable VST in-place processing + int dummyAudioSampleRate; + int dummyAudioBufSize; + }; + +extern GlobalConfigValues config; + +#endif + diff --git a/muse2/muse/givertcap.c b/muse2/muse/givertcap.c new file mode 100644 index 00000000..2511bc6c --- /dev/null +++ b/muse2/muse/givertcap.c @@ -0,0 +1,94 @@ +/* + * COPYRIGHT + * + * This file is part of Mustajuuri GPL modules. You may distribute it + * with or without other Mustajuuri components. + * + * Author: Tommi Ilmonen, 2001. + * Tommi.Ilmonen@hut.fi + * + * http://www.tml.hut.fi/~tilmonen/mustajuuri/ + + * This app also has its own home page at (installation instruction + * etc.): http://www.tml.hut.fi/~tilmonen/givertcap/ + + * This file is licensed under the GNU Public License (GPL) version + * 2. The GPL can also be found from the givertcap home page. Any + * application may call civertcap (regardless of the license of the + * calling application). + + * If you want a parallel license (for commercial reasons for example), + * you should negotiate the matter with the author(s). + * + */ + +#include +#include +#include + +#undef _POSIX_SOURCE +#include +/* If the compilation fails on the preceding line, then you probably + do not have the libcap installed. + +*/ + +static void usage(const char *programName) +{ + fprintf(stderr, + "usage: %s \n\n" + " This program gives real-time application capabilities to the" + " parent process\n\n" + "[Copyright (c) 2001 Tommi Ilmonen ]\n" + "Home page: http://www.tml.hut.fi/~tilmonen/givertcap/\n", + programName); +} + +int main(int argc, char **argv) +{ + if(argc > 1) { + usage(argv[0]); + return 1; + } + + pid_t parentPid = getppid(); + + if(!parentPid) + return 1; + + cap_t caps = cap_init(); + +#define nofCaps 3 + + /* We need these capabilities: + + CAP_SYS_NICE -> Real-time priority + CAP_SYS_RESOURCE -> RTC above 64 Hz + CAP_IPC_LOCK -> mlockall + */ + + cap_value_t capList[nofCaps] = + { CAP_SYS_NICE, CAP_SYS_RESOURCE, CAP_IPC_LOCK} ; + + cap_clear(caps); + cap_set_flag(caps, CAP_EFFECTIVE, nofCaps, capList , CAP_SET); + cap_set_flag(caps, CAP_INHERITABLE, nofCaps, capList , CAP_SET); + cap_set_flag(caps, CAP_PERMITTED, nofCaps, capList , CAP_SET); + + /* If your COMPILATION FAILS here then you probably are not running + Linux. the function "capsetp" is not part of the POSIX capability + standard, but a Linux-specific extension. */ + if (capsetp(parentPid, caps)) { + perror("mjsucaps: capsetp"); + return 1; + } + + ssize_t x; +// printf("The process %d was give capabilities %s\n", +// (int) parentPid, cap_to_text(caps, &x)); + fflush(0); + + // Don't bother to free the memory... + + return 0; +} diff --git a/muse2/muse/globaldefs.h b/muse2/muse/globaldefs.h new file mode 100644 index 00000000..06661771 --- /dev/null +++ b/muse2/muse/globaldefs.h @@ -0,0 +1,34 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: globaldefs.h,v 1.3.2.1 2009/05/03 04:14:00 terminator356 Exp $ +// +// (C) Copyright 2000 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __GLOBALDEFS_H__ +#define __GLOBALDEFS_H__ + +// Midi Type +// MT_GM - General Midi +// MT_GS - Roland GS +// MT_XG - Yamaha XG + +enum MType { MT_UNKNOWN=0, MT_GM, MT_GS, MT_XG }; + +enum AutomationType { + AUTO_OFF, AUTO_READ, AUTO_TOUCH, AUTO_WRITE + }; + +const int MAX_CHANNELS = 2; // max audio channels +const int MAX_PLUGINS = 4; // plugins in mixer rack + +//const int MIDI_PORTS = 32; // max Number of Midi Ports +const int MIDI_PORTS = 128; // max Number of Midi Ports + +#ifndef MIDI_CHANNELS +#define MIDI_CHANNELS 16 // Channels per Port +#endif + +#endif + diff --git a/muse2/muse/globals.cpp b/muse2/muse/globals.cpp new file mode 100644 index 00000000..4e57cafd --- /dev/null +++ b/muse2/muse/globals.cpp @@ -0,0 +1,396 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: globals.cpp,v 1.15.2.11 2009/11/25 09:09:43 terminator356 Exp $ +// +// (C) Copyright 1999-2004 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include +//Added by qt3to4: +#include +#include +#include +#include +#include +#include "globals.h" +#include "config.h" + +int recFileNumber = 1; + +int sampleRate = 44100; +unsigned segmentSize = 1024U; // segmentSize in frames (set by JACK) +unsigned fifoLength = 128; // 131072/segmentSize + // 131072 - magic number that gives a sufficient buffer size +int segmentCount = 2; + +// denormal bias value used to eliminate the manifestation of denormals by +// lifting the zero level slightly above zero +// denormal problems occur when values get extremely close to zero +const float denormalBias=1e-18; + +bool overrideAudioOutput = false; +bool overrideAudioInput = false; + +QTimer* heartBeatTimer; + +bool hIsB = true; // call note h "b" + +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 museProject; +QString museProjectInitPath("./"); +QString configName; +QString museInstruments; +QString museUserInstruments; + +QString lastWavePath("."); +QString lastMidiPath("."); + +bool debugMode = false; +bool debugMsg = false; +bool midiInputTrace = false; +bool midiOutputTrace = false; +bool realTimeScheduling = false; +int realTimePriority = 40; // 80 +int midiRTPrioOverride = -1; +bool loadPlugins = true; +bool loadVST = true; +bool loadDSSI = true; +bool usePythonBridge = false; +bool useLASH = true; + +/* +const char* midi_file_pattern[] = { + QT_TR_NOOP("Midi/Kar (*.mid *.MID *.kar *.KAR *.mid.gz *.mid.bz2)"), + QT_TR_NOOP("Midi (*.mid *.MID *.mid.gz *.mid.bz2)"), + QT_TR_NOOP("Karaoke (*.kar *.KAR *.kar.gz *.kar.bz2)"), + QT_TR_NOOP("All Files (*)"), + 0 + }; +*/ +const QStringList midi_file_pattern = + QStringList::split(";;", QT_TR_NOOP( + QString("Midi/Kar (*.mid *.MID *.kar *.KAR *.mid.gz *.mid.bz2);;") + + QString("Midi (*.mid *.MID *.mid.gz *.mid.bz2);;") + + QString("Karaoke (*.kar *.KAR *.kar.gz *.kar.bz2);;") + + QString("All Files (*)")) ); + +//FIXME: By T356 01/19/2010 +// If saving as a compressed file (gz or bz2), +// the file is a pipe, and pipes can't seek ! +// This results in a corrupted midi file from MidiFile::writeTrack(). +// So exporting compressed midi has simply been disabled here for now... +/* +const char* midi_file_save_pattern[] = { + "Midi (*.mid)", + "gzip compressed Midi (*.mid.gz)", + "bzip2 compressed Midi (*.mid.bz2)", + "Karaoke (*.kar)", + "gzip compressed karaoke (*.kar.gz)", + "bzip2 compressed karaoke (*.kar.bz2)", + "All Files (*)", + 0 + }; +QStringList midi_file_save_pattern = + QStringList::split(";;", QT_TR_NOOP( + QString("Midi (*.mid);;") + + QString("gzip compressed Midi (*.mid.gz);;") + + QString("bzip2 compressed Midi (*.mid.bz2);;") + + QString("Karaoke (*.kar);;") + + QString("gzip compressed karaoke (*.kar.gz);;") + + QString("bzip2 compressed karaoke (*.kar.bz2);;") + + QString("All Files (*)")) ); +*/ +/* +const char* midi_file_save_pattern[] = { + QT_TR_NOOP("Midi (*.mid)"), + QT_TR_NOOP("Karaoke (*.kar)"), + QT_TR_NOOP("All Files (*)"), + 0 + }; +*/ +const QStringList midi_file_save_pattern = + QStringList::split(";;", QT_TR_NOOP( + QString("Midi (*.mid);;") + + QString("Karaoke (*.kar);;") + + QString("All Files (*)")) ); + +/* +const char* med_file_pattern[] = { + QT_TR_NOOP("med Files (*.med *.med.gz *.med.bz2)"), + QT_TR_NOOP("Uncompressed med Files (*.med)"), + QT_TR_NOOP("gzip compressed med Files (*.med.gz)"), + QT_TR_NOOP("bzip2 compressed med Files (*.med.bz2)"), + QT_TR_NOOP("All Files (*)"), + 0 + }; +const char* med_file_save_pattern[] = { + QT_TR_NOOP("Uncompressed med Files (*.med)"), + QT_TR_NOOP("gzip compressed med Files (*.med.gz)"), + QT_TR_NOOP("bzip2 compressed med Files (*.med.bz2)"), + QT_TR_NOOP("All Files (*)"), + 0 + }; +*/ +const QStringList med_file_pattern = + QStringList::split(";;", QT_TR_NOOP( + QString("med Files (*.med *.med.gz *.med.bz2);;") + + QString("Uncompressed med Files (*.med);;") + + QString("gzip compressed med Files (*.med.gz);;") + + QString("bzip2 compressed med Files (*.med.bz2);;") + + QString("All Files (*)")) ); +const QStringList med_file_save_pattern = + QStringList::split(";;", QT_TR_NOOP( + QString("Uncompressed med Files (*.med);;") + + QString("gzip compressed med Files (*.med.gz);;") + + QString("bzip2 compressed med Files (*.med.bz2);;") + + QString("All Files (*)")) ); + +/* +const char* image_file_pattern[] = { + QT_TR_NOOP("(*.jpg *.gif *.png)"), + QT_TR_NOOP("(*.jpg)"), + QT_TR_NOOP("(*.gif)"), + QT_TR_NOOP("(*.png)"), + QT_TR_NOOP("All Files (*)"), + 0 + }; +*/ +const QStringList image_file_pattern = + QStringList::split(";;", QT_TR_NOOP( + QString("(*.jpg *.gif *.png);;") + + QString("(*.jpg);;") + + QString("(*.gif);;") + + QString("(*.png);;") + + QString("All Files (*)")) ); + +// Not used. +/* +const char* ctrl_file_pattern[] = { + "ctrl Files (*.ctrl *.ctrl.gz *.ctrl.bz2)", + "All Files (*)", + 0 + }; +*/ + +/* +const char* part_file_pattern[] = { + //QT_TR_NOOP("part Files (*.mpt)"), + QT_TR_NOOP("part Files (*.mpt *.mpt.gz *.mpt.bz2)"), + QT_TR_NOOP("All Files (*)"), + 0 + }; +const char* part_file_save_pattern[] = { + QT_TR_NOOP("part Files (*.mpt)"), + QT_TR_NOOP("gzip compressed part Files (*.mpt.gz)"), + QT_TR_NOOP("bzip2 compressed part Files (*.mpt.bz2)"), + QT_TR_NOOP("All Files (*)"), + 0 + }; +*/ +const QStringList part_file_pattern = + QStringList::split(";;", QT_TR_NOOP( + QString("part Files (*.mpt *.mpt.gz *.mpt.bz2);;") + + QString("All Files (*)")) ); + +const QStringList part_file_save_pattern = + QStringList::split(";;", QT_TR_NOOP( + QString("part Files (*.mpt);;") + + QString("gzip compressed part Files (*.mpt.gz);;") + + QString("bzip2 compressed part Files (*.mpt.bz2);;") + + QString("All Files (*)")) ); + +/* +const char* plug_file_pattern[] = { + QT_TR_NOOP("part Files (*.pre)"), + QT_TR_NOOP("All Files (*)"), + 0 + }; +*/ +/* +const char* preset_file_pattern[] = { + QT_TR_NOOP("Presets (*.pre *.pre.gz *.pre.bz2)"), + QT_TR_NOOP("All Files (*)"), + 0 + }; + +const char* preset_file_save_pattern[] = { + QT_TR_NOOP("Presets (*.pre)"), + QT_TR_NOOP("gzip compressed presets (*.pre.gz)"), + QT_TR_NOOP("bzip2 compressed presets (*.pre.bz2)"), + QT_TR_NOOP("All Files (*)"), + 0 + }; +*/ +const QStringList preset_file_pattern = + QStringList::split(";;", QT_TR_NOOP( + QString("Presets (*.pre *.pre.gz *.pre.bz2);;") + + QString("All Files (*)")) ); + +const QStringList preset_file_save_pattern = + QStringList::split(";;", QT_TR_NOOP( + QString("Presets (*.pre);;") + + QString("gzip compressed presets (*.pre.gz);;") + + QString("bzip2 compressed presets (*.pre.bz2);;") + + QString("All Files (*)")) ); + +const QStringList drum_map_file_pattern = + QStringList::split(";;", QT_TR_NOOP( + QString("Presets (*.map *.map.gz *.map.bz2);;") + + QString("All Files (*)")) ); +const QStringList drum_map_file_save_pattern = + QStringList::split(";;", QT_TR_NOOP( + QString("Presets (*.map);;") + + QString("gzip compressed presets (*.map.gz);;") + + QString("bzip2 compressed presets (*.map.bz2);;") + + QString("All Files (*)")) ); + +const QStringList audio_file_pattern = + QStringList::split(";;", QT_TR_NOOP( + QString("Wave/Binary (*.wav *.ogg *.bin);;") + + QString("Wave (*.wav *.ogg);;") + + QString("Binary (*.bin);;") + + QString("All Files (*)")) ); + +Qt::ButtonState globalKeyState; + +// Midi Filter Parameter +int midiInputPorts = 0; // receive from all devices +int midiInputChannel = 0; // receive all channel +int midiRecordType = 0; // receive all events +int midiThruType = 0; // transmit all events +int midiFilterCtrl1 = 0; +int midiFilterCtrl2 = 0; +int midiFilterCtrl3 = 0; +int midiFilterCtrl4 = 0; + +Q3ActionGroup* undoRedo; +Q3Action* undoAction; +Q3Action* redoAction; +Q3ActionGroup* transportAction; +Q3Action* playAction; +Q3Action* startAction; +Q3Action* stopAction; +Q3Action* rewindAction; +Q3Action* forwardAction; +Q3Action* loopAction; +Q3Action* punchinAction; +Q3Action* punchoutAction; +Q3Action* recordAction; +Q3Action* panicAction; + +//AudioMixerApp* audioMixer; +MusE* muse; + +int preMeasures = 2; +unsigned char measureClickNote = 63; +unsigned char measureClickVelo = 127; +unsigned char beatClickNote = 63; +unsigned char beatClickVelo = 70; +unsigned char clickChan = 9; +unsigned char clickPort = 0; +bool precountEnableFlag = false; +bool precountFromMastertrackFlag = false; +int precountSigZ = 4; +int precountSigN = 4; +bool precountPrerecord = false; +bool precountPreroll = false; +bool midiClickFlag = true; +bool audioClickFlag = true; +float audioClickVolume = 0.5f; + +bool rcEnable = false; +unsigned char rcStopNote = 28; +unsigned char rcRecordNote = 31; +unsigned char rcGotoLeftMarkNote = 33; +unsigned char rcPlayNote = 29; +bool automation = true; + +QObject* gRoutingPopupMenuMaster = 0; +RouteMenuMap gRoutingMenuMap; +bool gIsOutRoutingPopupMenu = false; + +uid_t euid, ruid; // effective user id, real user id + +bool midiSeqRunning = false; + +//--------------------------------------------------------- +// doSetuid +// Restore the effective UID to its original value. +//--------------------------------------------------------- + +void doSetuid() + { +#ifndef RTCAP + int status; +#ifdef _POSIX_SAVED_IDS + status = seteuid (euid); +#else + status = setreuid (ruid, euid); +#endif + if (status < 0) { + perror("doSetuid: Couldn't set uid"); + } +#endif + } + +//--------------------------------------------------------- +// undoSetuid +// Set the effective UID to the real UID. +//--------------------------------------------------------- + +void undoSetuid() + { +#ifndef RTCAP + int status; + +#ifdef _POSIX_SAVED_IDS + status = seteuid (ruid); +#else + status = setreuid (euid, ruid); +#endif + if (status < 0) { + fprintf(stderr, "undoSetuid: Couldn't set uid (eff:%d,real:%d): %s\n", + euid, ruid, strerror(errno)); + exit (status); + } +#endif + } + diff --git a/muse2/muse/globals.h b/muse2/muse/globals.h new file mode 100644 index 00000000..5fdaf754 --- /dev/null +++ b/muse2/muse/globals.h @@ -0,0 +1,192 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: globals.h,v 1.10.2.11 2009/11/25 09:09:43 terminator356 Exp $ +// +// (C) Copyright 1999/2000 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef GLOBALS_H +#define GLOBALS_H + +#include +//#include +//#include +//#include +//Added by qt3to4: +#include +#include +//#include +#include "value.h" +#include "mtc.h" +#include "route.h" + +#include + +class QString; +class QFont; +class QAction; +class Q3ActionGroup; +class QStringList; + +extern const float denormalBias; + +extern int recFileNumber; + +extern int sampleRate; +extern unsigned segmentSize; +extern unsigned fifoLength; // inversely proportional to segmentSize +extern int segmentCount; + +extern bool overrideAudioOutput; +extern bool overrideAudioInput; + +class QTimer; +extern QTimer* heartBeatTimer; + +extern bool hIsB; + +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 museProject; +extern QString museProjectInitPath; +extern QString configName; +extern QString museInstruments; +extern QString museUserInstruments; + +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 usePythonBridge; +extern bool useLASH; + +extern bool realTimeScheduling; +extern int realTimePriority; +extern int midiRTPrioOverride; + +/* +extern const char* midi_file_pattern[]; //!< File name pattern for midi files +extern const char* midi_file_save_pattern[]; //!< File name pattern for saving midi files +extern const char* med_file_pattern[]; //!< File name pattern for muse project files +extern const char* med_file_save_pattern[]; //!< File name pattern for saving muse project files +extern const char* image_file_pattern[]; //!< File name pattern for image files (gfx) +//extern const char* ctrl_file_pattern[]; //!< File name pattern for controller-files +extern const char* part_file_pattern[]; //!< File name pattern for part files +extern const char* part_file_save_pattern[]; //!< File name pattern for saving part files +//extern const char* plug_file_pattern[]; //!< File name pattern for plugin files +extern const char* preset_file_pattern[]; //!< File name pattern for plugin files +extern const char* preset_file_save_pattern[]; //!< File name pattern for saving plugin files +*/ + +extern const QStringList midi_file_pattern; +extern const QStringList midi_file_save_pattern; +extern const QStringList med_file_pattern; +extern const QStringList med_file_save_pattern; +extern const QStringList image_file_pattern; +//extern const QStringList ctrl_file_pattern; +extern const QStringList part_file_pattern; +extern const QStringList part_file_save_pattern; +extern const QStringList preset_file_pattern; +extern const QStringList preset_file_save_pattern; +extern const QStringList drum_map_file_pattern; +extern const QStringList drum_map_file_save_pattern; +extern const QStringList audio_file_pattern; + +extern Qt::ButtonState globalKeyState; + +extern int midiInputPorts; //!< receive from all devices +extern int midiInputChannel; //!< receive all channel +extern int midiRecordType; //!< receive all events + +#define MIDI_FILTER_NOTEON 1 +#define MIDI_FILTER_POLYP 2 +#define MIDI_FILTER_CTRL 4 +#define MIDI_FILTER_PROGRAM 8 +#define MIDI_FILTER_AT 16 +#define MIDI_FILTER_PITCH 32 +#define MIDI_FILTER_SYSEX 64 + +extern int midiThruType; // transmit all events +extern int midiFilterCtrl1; +extern int midiFilterCtrl2; +extern int midiFilterCtrl3; +extern int midiFilterCtrl4; + +#define CMD_RANGE_ALL 0 +#define CMD_RANGE_SELECTED 1 +#define CMD_RANGE_LOOP 2 + +extern Q3ActionGroup* undoRedo; +extern Q3Action* undoAction; +extern Q3Action* redoAction; + +extern Q3ActionGroup* transportAction; +extern Q3Action* playAction; +extern Q3Action* startAction; +extern Q3Action* stopAction; +extern Q3Action* rewindAction; +extern Q3Action* forwardAction; +extern Q3Action* loopAction; +extern Q3Action* punchinAction; +extern Q3Action* punchoutAction; +extern Q3Action* recordAction; +extern Q3Action* panicAction; + +//class AudioMixerApp; +class MusE; +//extern AudioMixerApp* audioMixer; +extern MusE* muse; + +extern int preMeasures; +extern unsigned char measureClickNote; +extern unsigned char measureClickVelo; +extern unsigned char beatClickNote; +extern unsigned char beatClickVelo; +extern unsigned char clickChan; +extern unsigned char clickPort; +extern bool precountEnableFlag; +extern bool precountFromMastertrackFlag; +extern int precountSigZ; +extern int precountSigN; +extern bool precountPrerecord; +extern bool precountPreroll; +extern bool midiClickFlag; +extern bool audioClickFlag; +extern float audioClickVolume; + +extern bool rcEnable; +extern unsigned char rcStopNote; +extern unsigned char rcRecordNote; +extern unsigned char rcGotoLeftMarkNote; +extern unsigned char rcPlayNote; + +extern bool midiSeqRunning; +extern bool automation; + +class QObject; +// Which audio strip, midi strip, or midi track info strip +// was responsible for popping up the routing menu. +extern QObject* gRoutingPopupMenuMaster; +// Map of routing popup menu item IDs to Routes. +extern RouteMenuMap gRoutingMenuMap; +// Whether the routes popup was shown by clicking the output routes button, or input routes button. +extern bool gIsOutRoutingPopupMenu; + +extern uid_t euid, ruid; +extern void doSetuid(); +extern void undoSetuid(); +extern bool checkAudioDevice(); +#endif + diff --git a/muse2/muse/help.cpp b/muse2/muse/help.cpp new file mode 100644 index 00000000..82d900f1 --- /dev/null +++ b/muse2/muse/help.cpp @@ -0,0 +1,112 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: help.cpp,v 1.7.2.4 2009/07/05 23:06:21 terminator356 Exp $ +// +// (C) Copyright 1999/2000 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include +#include +#include + +#include "app.h" +#include "globals.h" +#include "gconfig.h" +#include "icons.h" +#include "aboutbox_impl.h" + +//--------------------------------------------------------- +// startHelpBrowser +//--------------------------------------------------------- + +void MusE::startHelpBrowser() + { + QString lang(getenv("LANG")); + QString museHelp = museGlobalShare + QString("/html/index_") + lang + QString(".html"); + if (access(museHelp.latin1(), R_OK) != 0) { + museHelp = museGlobalShare + QString("/html/index.html"); + if (access(museHelp.latin1(), R_OK) != 0) { + QString info(tr("no help found at: ")); + info += museHelp; + QMessageBox::critical(this, tr("MusE: Open Help"), info); + return; + } + } + launchBrowser(museHelp); + } + +//--------------------------------------------------------- +// startHelpBrowser +//--------------------------------------------------------- + +void MusE::startHomepageBrowser() + { + QString museHome = QString("http://www.muse-sequencer.org"); + + launchBrowser(museHome); + } + +//--------------------------------------------------------- +// startBugBrowser +//--------------------------------------------------------- + +void MusE::startBugBrowser() + { + //QString museBugPage("http://www.muse-sequencer.org/wiki/index.php/Report_a_bug"); + QString museBugPage("http://www.muse-sequencer.org/index.php/Report_a_bug"); + launchBrowser(museBugPage); + } + +//--------------------------------------------------------- +// about +//--------------------------------------------------------- + +void MusE::about() + { + AboutBoxImpl ab; + ab.show(); + ab.exec(); + } + +//--------------------------------------------------------- +// aboutQt +//--------------------------------------------------------- + +void MusE::aboutQt() + { + QMessageBox::aboutQt(this, QString("MusE")); + } + +void MusE::launchBrowser(QString &whereTo) + { + char testStr[40]; + strcpy(testStr, "which "); + strcat(testStr, config.helpBrowser.latin1()); + if (config.helpBrowser == "" || system(testStr)) + { + QMessageBox::information( this, "Unable to launch help", + "For some reason MusE has failed to detect or launch\n" + "a browser on your machine. Please go to Settings->Global Settings->GUI\n" + "and insert the program name of your favourite browser.", + "Ok", + 0 ); + return; + } + + QString exe = QString("/bin/sh"); + if(QFile::exists(exe)) + { + Q3Process helper(this); + helper.addArgument(exe); + helper.addArgument("-c"); + helper.addArgument(config.helpBrowser + " " + whereTo); + helper.start(); + } + else + { + printf("Unable to launch help\n"); + } + + } diff --git a/muse2/muse/helper.cpp b/muse2/muse/helper.cpp new file mode 100644 index 00000000..605d6f5c --- /dev/null +++ b/muse2/muse/helper.cpp @@ -0,0 +1,40 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: helper.cpp,v 1.1.1.1 2003/10/27 18:51:27 wschweer Exp $ +// (C) Copyright 2003 Werner Schweer (ws@seh.de) +//========================================================= + +#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]); + if (hIsB) { + if (s == "h") + s = "b"; + else if (s == "H") + s = "B"; + } + return s + o; + } + + diff --git a/muse2/muse/helper.h b/muse2/muse/helper.h new file mode 100644 index 00000000..8c561db6 --- /dev/null +++ b/muse2/muse/helper.h @@ -0,0 +1,16 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: helper.h,v 1.1.1.1 2003/10/27 18:52:11 wschweer Exp $ +// (C) Copyright 2003 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __HELPER_H__ +#define __HELPER_H__ + +#include + +extern QString pitch2string(int v); + +#endif + diff --git a/muse2/muse/icons.cpp b/muse2/muse/icons.cpp new file mode 100644 index 00000000..592ddcbd --- /dev/null +++ b/muse2/muse/icons.cpp @@ -0,0 +1,612 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: icons.cpp,v 1.13.2.8 2009/11/14 03:37:48 terminator356 Exp $ +// +// (C) Copyright 1999/2000 Werner Schweer (ws@seh.de) +//========================================================= + +#include "globals.h" +#include +#include + +#include "xpm/track_comment.xpm" +#include "xpm/audio_bounce_to_file.xpm" +#include "xpm/audio_bounce_to_track.xpm" +#include "xpm/audio_restartaudio.xpm" +#include "xpm/automation_clear_data.xpm" +#include "xpm/automation_mixer.xpm" +#include "xpm/automation_take_snapshot.xpm" +#include "xpm/edit_midi.xpm" +#include "xpm/midi_edit_instrument.xpm" +#include "xpm/midi_init_instr.xpm" +#include "xpm/midi_inputplugins.xpm" +#include "xpm/midi_inputplugins_midi_input_filter.xpm" +#include "xpm/midi_inputplugins_midi_input_transform.xpm" +#include "xpm/midi_inputplugins_random_rhythm_generator.xpm" +#include "xpm/midi_inputplugins_remote_control.xpm" +#include "xpm/midi_inputplugins_transpose.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_midiport_softsynths.xpm" +#include "xpm/settings_midisync.xpm" +#include "xpm/view_bigtime_window.xpm" +#include "xpm/view_cliplist.xpm" +#include "xpm/view_marker.xpm" +#include "xpm/view_mixer.xpm" +#include "xpm/view_transport_window.xpm" + +#include "xpm/pointer.xpm" +#include "xpm/pencil.xpm" +#include "xpm/delete.xpm" +#include "xpm/play.xpm" + +#include "xpm/record1.xpm" +#include "xpm/record.xpm" +#include "xpm/record_on.xpm" +#include "xpm/record_off.xpm" +#include "xpm/stop.xpm" +#include "xpm/start.xpm" +#include "xpm/fforward.xpm" +#include "xpm/frewind.xpm" +#include "xpm/punchin.xpm" +#include "xpm/punchout.xpm" +#include "xpm/punchin1.xpm" +#include "xpm/punchout1.xpm" +#include "xpm/loop1.xpm" +#include "xpm/loop.xpm" +#include "xpm/dot.xpm" +#include "xpm/doth.xpm" +#include "xpm/dot1.xpm" +#include "xpm/note.xpm" +#include "xpm/note1.xpm" +#include "xpm/stick.xpm" +#include "xpm/wave.xpm" +#include "xpm/synth.xpm" +#include "xpm/cmark.xpm" +#include "xpm/lmark.xpm" +#include "xpm/rmark.xpm" +#include "xpm/cut.xpm" +#include "xpm/steprec.xpm" +#include "xpm/glue.xpm" +#include "xpm/draw.xpm" +#include "xpm/quant.xpm" +#include "xpm/fileprint.xpm" +#include "xpm/filesave.xpm" +#include "xpm/fileopen.xpm" +#include "xpm/fileprintS.xpm" +#include "xpm/filesaveS.xpm" +#include "xpm/fileopenS.xpm" +#include "xpm/master.xpm" +#include "xpm/filenew.xpm" +#include "xpm/filenewS.xpm" +#include "xpm/home.xpm" +#include "xpm/back.xpm" +#include "xpm/forward.xpm" + +// #include "xpm/mute.xpm" +#include "xpm/solobutton_on.xpm" +#include "xpm/solobutton_off.xpm" +#include "xpm/solobutton_on_blksq.xpm" +#include "xpm/solobutton_off_blksq.xpm" +#include "xpm/mutebutton_on.xpm" +#include "xpm/mutebutton_off.xpm" +#include "xpm/rec_echo_on.xpm" +#include "xpm/rec_echo_off.xpm" + +#include "xpm/up.xpm" +#include "xpm/down.xpm" +#include "xpm/bold.xpm" +#include "xpm/italic.xpm" +#include "xpm/underlined.xpm" +#include "xpm/gv.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/piano.xpm" +// #include "xpm/pianoS.xpm" +#include "xpm/exitS.xpm" + +#include "xpm/undo.xpm" +#include "xpm/redo.xpm" +#include "xpm/editcut.xpm" +#include "xpm/editcopy.xpm" +#include "xpm/editpaste.xpm" +#include "xpm/undoS.xpm" +#include "xpm/redoS.xpm" +#include "xpm/editcutS.xpm" +#include "xpm/editcopyS.xpm" +#include "xpm/editpasteS.xpm" +#include "xpm/editmute.xpm" +#include "xpm/editmuteS.xpm" +#include "xpm/editpasteclone.xpm" +#include "xpm/editpastecloneS.xpm" +#include "xpm/editpaste2track.xpm" +#include "xpm/editpaste2trackS.xpm" +#include "xpm/editpasteclone2track.xpm" +#include "xpm/editpasteclone2trackS.xpm" + +#include "xpm/speaker.xpm" +#include "xpm/buttondown.xpm" +#include "xpm/configure.xpm" +#include "xpm/panic.xpm" + + +// next two lines will vanish soon +#include "xpm/solobutton.xpm" +#include "xpm/newmutebutton.xpm" +#include "xpm/exit.xpm" +#include "xpm/exit1.xpm" + +#include "xpm/redled.xpm" +#include "xpm/darkredled.xpm" +#include "xpm/greendot.xpm" +//#include "xpm/darkgreendot.xpm" +#include "xpm/bluedot.xpm" +#include "xpm/graydot.xpm" +#include "xpm/off.xpm" +#include "xpm/blacksquare.xpm" +#include "xpm/blacksqcheck.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/mustangS.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_auxsend.xpm" +#include "xpm/addtrack_drumtrack.xpm" +#include "xpm/addtrack_wavetrack.xpm" +#include "xpm/edit_drumms.xpm" +#include "xpm/edit_list.xpm" +#include "xpm/edit_wave.xpm" +#include "xpm/edit_mastertrack.xpm" +#include "xpm/edit_pianoroll.xpm" +#include "xpm/edit_score.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/mono.xpm" +#include "xpm/stereo.xpm" +#include "xpm/muse_icon.xpm" + +QPixmap* track_commentIcon; +QPixmap* mastertrackSIcon; +QPixmap* localoffSIcon; +QPixmap* miditransformSIcon; +QPixmap* midi_plugSIcon; +QPixmap* miditransposeSIcon; +QPixmap* mixerSIcon; +QPixmap* mustangSIcon; +QPixmap* resetSIcon; +QPixmap* track_addIcon; +QPixmap* track_deleteIcon; +QPixmap* listSIcon; +QPixmap* inputpluginSIcon; +QPixmap* cliplistSIcon; +QPixmap* mixerAudioSIcon; +QPixmap* initSIcon; + +QPixmap* exitIcon; +QPixmap* exit1Icon; +QPixmap* newmuteIcon; +QPixmap* soloIcon; + +QPixmap* pointerIcon; +QPixmap* pencilIcon; +QPixmap* deleteIcon; +QPixmap* punchinIcon; +QPixmap* punchoutIcon; +QPixmap* punchin1Icon; +QPixmap* punchout1Icon; +QPixmap* loopIcon; +QPixmap* loop1Icon; +QPixmap* playIcon; + +QPixmap* record1_Icon; +QPixmap* record_on_Icon; +QPixmap* record_off_Icon; +QPixmap* recordIcon; +QPixmap* stopIcon; +QPixmap* startIcon; +QPixmap* fforwardIcon; +QPixmap* frewindIcon; +QPixmap* dotIcon; +QPixmap* dothIcon; +QPixmap* dot1Icon; +QPixmap* note1Icon; +QPixmap* noteIcon; +QPixmap* stickIcon; +QPixmap* waveIcon; +QPixmap* synthIcon; +QPixmap* markIcon[3]; +QPixmap* cutIcon; +QPixmap* steprecIcon; +QPixmap* glueIcon; +QPixmap* drawIcon; +QPixmap* quantIcon; +QPixmap* printIcon; +QPixmap* printIconS; +QPixmap* openIcon; +QPixmap* saveIcon; +QPixmap* openIconS; +QPixmap* saveIconS; +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* gvIcon; +QPixmap* midiinIcon; +QPixmap* sysexIcon; +QPixmap* ctrlIcon; +QPixmap* metaIcon; +QPixmap* pitchIcon; +QPixmap* cafterIcon; +QPixmap* pafterIcon; +QPixmap* flagIcon; +QPixmap* flagIconS; +QPixmap* lockIcon; +QPixmap* tocIcon; +QPixmap* exitIconS; + +QPixmap* undoIcon; +QPixmap* redoIcon; +QPixmap* undoIconS; +QPixmap* redoIconS; + +QPixmap* speakerIcon; +QPixmap* buttondownIcon; +QPixmap* configureIcon; + +QPixmap* recEchoIconOn; +QPixmap* recEchoIconOff; +QPixmap* muteIconOn; +QPixmap* muteIconOff; +QPixmap* soloIconOn; +QPixmap* soloIconOff; +QPixmap* soloblksqIconOn; +QPixmap* soloblksqIconOff; +QIcon* soloIconSet1; +QIcon* soloIconSet2; + +QPixmap* editmuteIcon; +QPixmap* editmuteSIcon; +QPixmap* panicIcon; + +QIcon* pianoIconSet; +QIcon* scoreIconSet; +QIcon* editcutIconSet; +QIcon* editmuteIconSet; +QIcon* editcopyIconSet; +QIcon* editpasteIconSet; +QIcon* editpaste2TrackIconSet; +QIcon* editpasteCloneIconSet; +QIcon* editpasteClone2TrackIconSet; + +QPixmap* redLedIcon; +QPixmap* darkRedLedIcon; +QPixmap* greendotIcon; +//QPixmap* darkgreendotIcon; +QPixmap* graydotIcon; +QPixmap* bluedotIcon; +QPixmap* offIcon; +QPixmap* blacksquareIcon; +QPixmap* blacksqcheckIcon; + +QPixmap* addtrack_addmiditrackIcon; +QPixmap* addtrack_audiogroupIcon; +QPixmap* addtrack_audioinputIcon; +QPixmap* addtrack_audiooutputIcon; +QPixmap* addtrack_auxsendIcon; +QPixmap* addtrack_drumtrackIcon; +QPixmap* addtrack_wavetrackIcon; +QPixmap* edit_drummsIcon; +QPixmap* edit_listIcon; +QPixmap* edit_waveIcon; +QPixmap* edit_mastertrackIcon; +QPixmap* edit_pianorollIcon; +QPixmap* edit_scoreIcon; +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* automation_clear_dataIcon; +QPixmap* automation_mixerIcon; +QPixmap* automation_take_snapshotIcon; +QPixmap* edit_midiIcon; +QPixmap* midi_edit_instrumentIcon; +QPixmap* midi_init_instrIcon; +QPixmap* midi_inputpluginsIcon; +QPixmap* midi_inputplugins_midi_input_filterIcon; +QPixmap* midi_inputplugins_midi_input_transformIcon; +QPixmap* midi_inputplugins_random_rhythm_generatorIcon; +QPixmap* midi_inputplugins_remote_controlIcon; +QPixmap* midi_inputplugins_transposeIcon; +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_midiport_softsynthsIcon; +QPixmap* settings_midisyncIcon; +QPixmap* view_bigtime_windowIcon; +QPixmap* view_cliplistIcon; +QPixmap* view_markerIcon; +QPixmap* view_mixerIcon; +QPixmap* view_transport_windowIcon; + +QPixmap* monoIcon; +QPixmap* stereoIcon; +QPixmap* museIcon; + +//--------------------------------------------------------- +// initIcons +//--------------------------------------------------------- + +void initIcons() + { + track_commentIcon = new QPixmap(track_comment_xpm); + pointerIcon = new QPixmap(pointer_xpm); + pencilIcon = new QPixmap(pencil_xpm); + deleteIcon = new QPixmap(delete_xpm); + punchinIcon = new QPixmap(punchin_xpm); + punchoutIcon = new QPixmap(punchout_xpm); + punchin1Icon = new QPixmap(punchin1_xpm); + punchout1Icon = new QPixmap(punchout1_xpm); + loopIcon = new QPixmap(loop_xpm); + loop1Icon = new QPixmap(loop1_xpm); + playIcon = new QPixmap(play_xpm); + + record1_Icon = new QPixmap(record1_xpm); + record_on_Icon = new QPixmap(record_on_xpm); + record_off_Icon = new QPixmap(record_off_xpm); + recordIcon = new QPixmap(record_xpm); + stopIcon = new QPixmap(stop_xpm); + startIcon = new QPixmap(start_xpm); + fforwardIcon = new QPixmap(fforward_xpm); + frewindIcon = new QPixmap(frewind_xpm); + dotIcon = new QPixmap(dot_xpm); + dothIcon = new QPixmap(doth_xpm); + dot1Icon = new QPixmap(dot1_xpm); + noteIcon = new QPixmap(note_xpm); + note1Icon = new QPixmap(note1_xpm); + stickIcon = new QPixmap(stick_xpm); + waveIcon = new QPixmap(wave_xpm); + synthIcon = new QPixmap(synth_xpm); + markIcon[0] = new QPixmap(cmark_xpm); + markIcon[1] = new QPixmap(lmark_xpm); + markIcon[2] = new QPixmap(rmark_xpm); + cutIcon = new QPixmap(cut_xpm); + steprecIcon = new QPixmap(steprec_xpm); + glueIcon = new QPixmap(glue_xpm); + drawIcon = new QPixmap(draw_xpm); + quantIcon = new QPixmap(quant_xpm); + saveIcon = new QPixmap(filesave_xpm); + printIcon = new QPixmap(fileprint_xpm); + openIcon = new QPixmap(fileopen_xpm); + saveIconS = new QPixmap(filesaveS_xpm); + printIconS = new QPixmap(fileprintS_xpm); + openIconS = new QPixmap(fileopenS_xpm); + masterIcon = new QPixmap(master_xpm); + filenewIcon = new QPixmap(filenew_xpm); + filenewIconS = new QPixmap(filenewS_xpm); + homeIcon = new QPixmap(home_xpm); + backIcon = new QPixmap(back_xpm); + forwardIcon = new QPixmap(forward_xpm); + muteIcon = new QPixmap(editmuteS_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); + gvIcon = new QPixmap(gv_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); + exitIconS = new QPixmap(exitS_xpm); + + undoIcon = new QPixmap(undo_xpm); + redoIcon = new QPixmap(redo_xpm); + undoIconS = new QPixmap(undoS_xpm); + redoIconS = new QPixmap(redoS_xpm); + + speakerIcon = new QPixmap(speaker_xpm); + buttondownIcon = new QPixmap(buttondown_xpm); + configureIcon = new QPixmap(configure_xpm); + + editmuteIcon = new QPixmap(editmute_xpm); + editmuteSIcon = new QPixmap(editmuteS_xpm); + panicIcon = new QPixmap(panic_xpm); + + editcutIconSet = new QIcon(QPixmap(editcutS_xpm)); // ddskrjo + editcopyIconSet = new QIcon(QPixmap(editcopyS_xpm)); + editpasteIconSet = new QIcon(QPixmap(editpasteS_xpm)); + editmuteIconSet = new QIcon(QPixmap(editmuteS_xpm)); + editpaste2TrackIconSet = new QIcon(QPixmap(editpaste2trackS_xpm)); + editpasteCloneIconSet = new QIcon(QPixmap(editpastecloneS_xpm)); + editpasteClone2TrackIconSet = new QIcon(QPixmap(editpasteclone2trackS_xpm)); // .. + + exitIcon = new QPixmap(exit_xpm); + exit1Icon = new QPixmap(exit1_xpm); + + // 2 lines odd code + newmuteIcon = new QPixmap(newmutebutton_xpm); + soloIcon = new QPixmap(solobutton_xpm); + + recEchoIconOn = new QPixmap(rec_echo_on_xpm); + recEchoIconOff = new QPixmap(rec_echo_off_xpm); + muteIconOn = new QPixmap(mutebutton_on_xpm); + muteIconOff = new QPixmap(mutebutton_off_xpm); + soloIconOn = new QPixmap(solobutton_on_xpm); + soloIconOff = new QPixmap(solobutton_off_xpm); + soloblksqIconOn = new QPixmap(solobutton_on_blksq_xpm); + soloblksqIconOff = new QPixmap(solobutton_off_blksq_xpm); + soloIconSet1 = new QIcon(); + soloIconSet2 = new QIcon(); + soloIconSet1->setPixmap(*soloIconOn, QIcon::Automatic, QIcon::Normal, QIcon::On); + soloIconSet1->setPixmap(*soloIconOff, QIcon::Automatic, QIcon::Normal, QIcon::Off); + soloIconSet2->setPixmap(*soloblksqIconOn, QIcon::Automatic, QIcon::Normal, QIcon::On); + soloIconSet2->setPixmap(*soloblksqIconOff, QIcon::Automatic, QIcon::Normal, QIcon::Off); + + redLedIcon = new QPixmap(redled_xpm); + darkRedLedIcon = new QPixmap(darkredled_xpm); + greendotIcon = new QPixmap(greendot_xpm); + //darkgreendotIcon = new QPixmap(darkgreendot_xpm); + bluedotIcon = new QPixmap(bluedot_xpm); + graydotIcon = new QPixmap(graydot_xpm); + offIcon = new QPixmap(off_xpm); + blacksquareIcon = new QPixmap(blacksquare_xpm); + blacksqcheckIcon = new QPixmap(blacksqcheck_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); + mustangSIcon = new QPixmap(mustangS_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_auxsendIcon = new QPixmap(addtrack_auxsend_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_waveIcon = new QPixmap(edit_wave_xpm); + edit_mastertrackIcon = new QPixmap(edit_mastertrack_xpm); + edit_pianorollIcon = new QPixmap(edit_pianoroll_xpm); + edit_scoreIcon = new QPixmap(edit_score_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); + pianoIconSet = new QIcon(*edit_pianorollIcon); // ddskrjo + + 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); + automation_clear_dataIcon = new QPixmap(automation_clear_data_xpm); + automation_mixerIcon = new QPixmap(automation_mixer_xpm); + automation_take_snapshotIcon = new QPixmap(automation_take_snapshot_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_inputpluginsIcon = new QPixmap(midi_inputplugins_xpm); + midi_inputplugins_midi_input_filterIcon = new QPixmap(midi_inputplugins_midi_input_filter_xpm); + midi_inputplugins_midi_input_transformIcon = new QPixmap(midi_inputplugins_midi_input_transform_xpm); + midi_inputplugins_random_rhythm_generatorIcon = new QPixmap(midi_inputplugins_random_rhythm_generator_xpm); + midi_inputplugins_remote_controlIcon = new QPixmap(midi_inputplugins_remote_control_xpm); + midi_inputplugins_transposeIcon = new QPixmap(midi_inputplugins_transpose_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_midiport_softsynthsIcon = new QPixmap(settings_midiport_softsynths_xpm); + settings_midisyncIcon = new QPixmap(settings_midisync_xpm); + view_bigtime_windowIcon = new QPixmap(view_bigtime_window_xpm); + view_cliplistIcon = new QPixmap(view_cliplist_xpm); + view_markerIcon = new QPixmap(view_marker_xpm); + view_mixerIcon = new QPixmap(view_mixer_xpm); + view_transport_windowIcon = new QPixmap(view_transport_window_xpm); + + monoIcon = new QPixmap(mono_xpm); + stereoIcon = new QPixmap(stereo_xpm); + + museIcon = new QPixmap(muse_icon_xpm); + } + diff --git a/muse2/muse/icons.h b/muse2/muse/icons.h new file mode 100644 index 00000000..ba069fbb --- /dev/null +++ b/muse2/muse/icons.h @@ -0,0 +1,220 @@ +//Added by qt3to4: +#include +//========================================================= +// MusE +// Linux Music Editor +// $Id: icons.h,v 1.11.2.8 2009/11/14 03:37:48 terminator356 Exp $ +// +// (C) Copyright 2000 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef ICONS_H +#define ICONS_H + +class QPixmap; +class QIcon; + +extern QPixmap* track_commentIcon; +extern QPixmap* pointerIcon; +extern QPixmap* pencilIcon; +extern QPixmap* deleteIcon; +extern QPixmap* punchinIcon; +extern QPixmap* punchoutIcon; +extern QPixmap* punchin1Icon; +extern QPixmap* punchout1Icon; +extern QPixmap* loopIcon; +extern QPixmap* loop1Icon; +extern QPixmap* playIcon; +extern QPixmap* recordIcon; +extern QPixmap* stopIcon; +extern QPixmap* startIcon; +extern QPixmap* fforwardIcon; +extern QPixmap* frewindIcon; +extern QPixmap* dotIcon; +extern QPixmap* dothIcon; +extern QPixmap* dot1Icon; +extern QPixmap* noteIcon; +extern QPixmap* note1Icon; +extern QPixmap* stickIcon; +extern QPixmap* waveIcon; +extern QPixmap* synthIcon; +extern QPixmap* markIcon[3]; + +extern QPixmap* recEchoIconOn; +extern QPixmap* recEchoIconOff; +extern QPixmap* muteIconOn; +extern QPixmap* muteIconOff; +extern QPixmap* soloIconOn; +extern QPixmap* soloIconOff; + +extern QPixmap* cutIcon; +extern QPixmap* steprecIcon; +extern QPixmap* glueIcon; +extern QPixmap* drawIcon; + +extern QPixmap* quantIcon; +extern QPixmap* printIcon; +extern QPixmap* printIconS; +extern QPixmap* openIcon; +extern QPixmap* saveIcon; +extern QPixmap* openIconS; +extern QPixmap* saveIconS; +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* muteIcon; +extern QPixmap* upIcon; +extern QPixmap* downIcon; +extern QPixmap* boldIcon; +extern QPixmap* italicIcon; +extern QPixmap* underlinedIcon; +extern QPixmap* gvIcon; +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* exitIconS; + +extern QPixmap* undoIcon; +extern QPixmap* redoIcon; +extern QPixmap* undoIconS; +extern QPixmap* redoIconS; + +extern QPixmap* speakerIcon; +extern QPixmap* buttondownIcon; +extern QPixmap* configureIcon; + +extern QPixmap* editmuteIcon; +extern QPixmap* editmuteSIcon; +extern QPixmap* panicIcon; + +extern QIcon* pianoIconSet; +extern QIcon* scoreIconSet; +extern QIcon* editcutIconSet; +extern QIcon* editmuteIconSet; +extern QIcon* editcopyIconSet; +extern QIcon* editpasteIconSet; +extern QIcon* editpaste2TrackIconSet; +extern QIcon* editpasteCloneIconSet; +extern QIcon* editpasteClone2TrackIconSet; + +extern QPixmap* exitIcon; +extern QPixmap* exit1Icon; +extern QPixmap* record1_Icon; +extern QPixmap* record_on_Icon; +extern QPixmap* record_off_Icon; +extern QPixmap* newmuteIcon; +extern QPixmap* soloIcon; + +extern QPixmap* muteIconOn; +extern QPixmap* muteIconOff; +extern QPixmap* soloIconOn; +extern QPixmap* soloIconOff; +extern QPixmap* soloblksqIconOn; +extern QPixmap* soloblksqIconOff; +extern QIcon* soloIconSet1; +extern QIcon* soloIconSet2; + +extern QPixmap* redLedIcon; +extern QPixmap* darkRedLedIcon; +extern QPixmap* greendotIcon; +//extern QPixmap* darkgreendotIcon; +extern QPixmap* graydotIcon; +extern QPixmap* bluedotIcon; +extern QPixmap* offIcon; +extern QPixmap* blacksquareIcon; +extern QPixmap* blacksqcheckIcon; + +extern QPixmap* mastertrackSIcon; +extern QPixmap* localoffSIcon; +extern QPixmap* miditransformSIcon; +extern QPixmap* midi_plugSIcon; +extern QPixmap* miditransposeSIcon; +extern QPixmap* mixerSIcon; +extern QPixmap* mustangSIcon; +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_auxsendIcon; +extern QPixmap* addtrack_drumtrackIcon; +extern QPixmap* addtrack_wavetrackIcon; +extern QPixmap* edit_drummsIcon; +extern QPixmap* edit_listIcon; +extern QPixmap* edit_waveIcon; +extern QPixmap* edit_mastertrackIcon; +extern QPixmap* edit_pianorollIcon; +extern QPixmap* edit_scoreIcon; +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* automation_clear_dataIcon; +extern QPixmap* automation_mixerIcon; +extern QPixmap* automation_take_snapshotIcon; +extern QPixmap* edit_midiIcon; +extern QPixmap* midi_edit_instrumentIcon; +extern QPixmap* midi_init_instrIcon; +extern QPixmap* midi_inputpluginsIcon; +extern QPixmap* midi_inputplugins_midi_input_filterIcon; +extern QPixmap* midi_inputplugins_midi_input_transformIcon; +extern QPixmap* midi_inputplugins_random_rhythm_generatorIcon; +extern QPixmap* midi_inputplugins_remote_controlIcon; +extern QPixmap* midi_inputplugins_transposeIcon; +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_midiport_softsynthsIcon; +extern QPixmap* settings_midisyncIcon; +extern QPixmap* view_bigtime_windowIcon; +extern QPixmap* view_cliplistIcon; +extern QPixmap* view_markerIcon; +extern QPixmap* view_mixerIcon; +extern QPixmap* view_transport_windowIcon; + +extern QPixmap* monoIcon; +extern QPixmap* stereoIcon; + +extern QPixmap* museIcon; + +#endif + diff --git a/muse2/muse/importmidi.cpp b/muse2/muse/importmidi.cpp new file mode 100644 index 00000000..2c8bfb24 --- /dev/null +++ b/muse2/muse/importmidi.cpp @@ -0,0 +1,608 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: importmidi.cpp,v 1.26.2.10 2009/11/05 03:14:35 terminator356 Exp $ +// +// (C) Copyright 1999-2003 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include +#include +#include + +#include "app.h" +#include "song.h" +#include "globals.h" +#include "filedialog.h" +#include "midi.h" +#include "midifile.h" +#include "midiport.h" +#include "transport.h" +#include "arranger.h" +#include "mpevent.h" +#include "event.h" +#include "midictrl.h" +#include "instruments/minstrument.h" +#include "drummap.h" +#include "xml.h" +#include "audio.h" +#include "gconfig.h" + +//--------------------------------------------------------- +// importMidi +//--------------------------------------------------------- + +void MusE::importMidi() + { + QString empty(""); + importMidi(empty); + } + +void MusE::importMidi(const QString &file) + { + QString fn; + if (file.isEmpty()) { + fn = getOpenFileName(lastMidiPath, midi_file_pattern, this, + tr("MusE: Import Midi"), 0); + if (fn.isEmpty()) + return; + lastMidiPath = fn; + } + else + fn = file; + + int n = QMessageBox::question(this, appName, + tr("Add midi file to current project?\n"), + tr("&Add to Project"), + tr("&Replace"), + tr("&Abort"), 0, 2); + + switch (n) { + case 0: + importMidi(fn, true); + song->update(); + break; + case 1: + loadProjectFile(fn, false, false); // replace + break; + default: + return; + } + } + +//--------------------------------------------------------- +// importMidi +// return true on error +//--------------------------------------------------------- + +bool MusE::importMidi(const QString name, bool merge) + { + bool popenFlag; + FILE* fp = fileOpen(this, name, QString(".mid"), "r", popenFlag); + if (fp == 0) + return true; + MidiFile mf(fp); + bool rv = mf.read(); + popenFlag ? pclose(fp) : fclose(fp); + if (rv) { + QString s(tr("reading midifile\n ")); + s += name; + s += tr("\nfailed: "); + s += mf.error(); + QMessageBox::critical(this, QString("MusE"), s); + return rv; + } + // + // evaluate song Type (GM, XG, GS, unknown) + // + MType t = song->mtype(); + if (!merge) { + t = mf.mtype(); + song->setMType(t); + } + MidiInstrument* instr = 0; + for (iMidiInstrument i = midiInstruments.begin(); i != midiInstruments.end(); ++i) { + MidiInstrument* mi = *i; + if ((mi->iname() == "GM" && ((t == MT_UNKNOWN) || (t == MT_GM))) + || ((mi->iname() == "GS") && (t == MT_GS)) + || ((mi->iname() == "XG") && (t == MT_XG))) { + instr = mi; + break; + } + } + if (instr == 0) { + // the standard instrument files (GM, GS, XG) must be present + printf("no instrument, type %d\n", t); + abort(); + } + + MidiFileTrackList* etl = mf.trackList(); + int division = mf.division(); + + // + // create MidiTrack and copy events to ->events() + // - combine note on/off events + // - calculate tick value for internal resolution + // + for (iMidiFileTrack t = etl->begin(); t != etl->end(); ++t) { + MPEventList* 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; + // somewhat silly and slooow: + for (int port = 0; port < MIDI_PORTS; ++port) { + for (int channel = 0; channel < MIDI_CHANNELS; ++channel) { + // + // check if there are any events for port/channel in track: + // + iMPEvent i; + for (i = el->begin(); i != el->end(); ++i) { + MidiPlayEvent ev = *i; + if (ev.type() != ME_SYSEX && ev.type() != ME_META + && ev.channel() == channel && ev.port() == port) + break; + } + if (i == el->end()) + continue; + MidiTrack* track = new MidiTrack(); + if ((*t)->isDrumTrack) + { + track->setType(Track::DRUM); + } + + track->setOutChannel(channel); + track->setOutPort(port); + + MidiPort* mport = &midiPorts[track->outPort()]; + // this overwrites any instrument set for this port: + mport->setInstrument(instr); + + EventList* mel = track->events(); + //buildMidiEventList(mel, el, track, division, first); + // Don't do loops. + buildMidiEventList(mel, el, track, division, first, false); + first = false; + + // Removed by T356. Handled by addPortCtrlEvents() below. + //for (iEvent i = mel->begin(); i != mel->end(); ++i) { + // Event event = i->second; + // if (event.type() == Controller) { + // importController(channel, mport, event.dataA()); + // midiPorts[track->outPort()].setCtrl(channel, event.tick(), event.dataA(), event.dataB()); + // } + // } + + // Comment Added by T356. + // Hmm. buildMidiEventList already takes care of this. + // But it seems to work. How? Must test. + if (channel == 9 && song->mtype() != MT_UNKNOWN) { + track->setType(Track::DRUM); + // + // remap drum pitch with drumInmap + // + EventList* tevents = track->events(); + for (iEvent i = tevents->begin(); i != tevents->end(); ++i) { + Event ev = i->second; + if (ev.isNote()) { + int pitch = drumInmap[ev.pitch()]; + ev.setPitch(pitch); + } + else + if(ev.type() == Controller) + { + int ctl = ev.dataA(); + MidiController *mc = mport->drumController(ctl); + if(mc) + ev.setA((ctl & ~0xff) | drumInmap[ctl & 0x7f]); + } + } + } + + processTrack(track); + + // Added by T356. Send all controller values to the port's controller value list. + // No, done in song->insertTrack2() now. + //track->addPortCtrlEvents(); + + song->insertTrack0(track, -1); + } + } + if (first) { + // + // track does only contain non-channel messages + // (SYSEX or META) + // + MidiTrack* track = new MidiTrack(); + track->setOutChannel(0); + track->setOutPort(0); + EventList* mel = track->events(); + //buildMidiEventList(mel, el, track, division, true); + // Do SysexMeta. Don't do loops. + buildMidiEventList(mel, el, track, division, true, false); + processTrack(track); + song->insertTrack0(track, -1); + } + } + + if (!merge) { + TrackList* tl = song->tracks(); + if (!tl->empty()) { + Track* track = tl->front(); + track->setSelected(true); + } + song->initLen(); + + int z, n; + sigmap.timesig(0, z, n); + + int tempo = tempomap.tempo(0); + transport->setTimesig(z, n); + transport->setTempo(tempo); + + bool masterF = !tempomap.empty(); + song->setMasterFlag(masterF); + transport->setMasterFlag(masterF); + + song->updatePos(); + + arranger->reset(); + arranger->setMode(int(song->mtype())); + } + else { + song->initLen(); + } + + return false; + } + +//--------------------------------------------------------- +// processTrack +// divide events into parts +//--------------------------------------------------------- + +void MusE::processTrack(MidiTrack* track) + { + EventList* tevents = track->events(); + if (tevents->empty()) + return; + + //--------------------------------------------------- + // Parts ermitteln + // die Midi-Spuren werden in Parts aufgebrochen; + // ein neuer Part wird bei einer L�cke von einem + // Takt gebildet; die L�nge wird jeweils auf + // Takte aufgerundet und aligned + //--------------------------------------------------- + + 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; + } + + QString partname = track->name(); + int len = song->roundUpBar(lastTick+1); + + // p3.3.27 + if(config.importMidiSplitParts) + { + + int bar2, beat; + unsigned tick; + sigmap.tickValues(len, &bar2, &beat, &tick); + + 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 = 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) { + MidiPart* part = new MidiPart(track); + part->setTick(st); + part->setLenTick(x1-st); + // printf("new part %d len: %d\n", st, 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) { + MidiPart* part = new MidiPart(track); + part->setTick(st); + // printf("new part %d len: %d\n", st, x2-st); + part->setLenTick(x2-st); + part->setName(partname); + pl->add(part); + } + } + else + { + // Just one long part... + MidiPart* part = new MidiPart(track); + //part->setTick(st); + part->setTick(0); + part->setLenTick(len); + part->setName(partname); + pl->add(part); + } + + //------------------------------------------------------------- + // assign events to parts + //------------------------------------------------------------- + + for (iPart p = pl->begin(); p != pl->end(); ++p) { + MidiPart* part = (MidiPart*)(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); + } + 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()); + } + +//--------------------------------------------------------- +// importController +//--------------------------------------------------------- + +void MusE::importController(int channel, MidiPort* mport, int n) + { + MidiInstrument* instr = mport->instrument(); + MidiCtrlValListList* vll = mport->controller(); + iMidiCtrlValList i = vll->find(channel, n); + if (i != vll->end()) + return; // controller does already exist + MidiController* ctrl = 0; + MidiControllerList* mcl = instr->controller(); +// printf("import Ctrl\n"); + for (iMidiController i = mcl->begin(); i != mcl->end(); ++i) { + MidiController* mc = i->second; + int cn = mc->num(); +// printf(" %x %x\n", n, cn); + if (cn == n) { + ctrl = mc; + break; + } + // wildcard? + if (((cn & 0xff) == 0xff) && ((cn & ~0xff) == (n & ~0xff))) { + ctrl = i->second; + break; + } + } + if (ctrl == 0) { + printf("controller 0x%x not defined for instrument %s, channel %d\n", + n, instr->iname().latin1(), channel); +// TODO: register default Controller +// MidiController* MidiPort::midiController(int num) const + } + MidiCtrlValList* newValList = new MidiCtrlValList(n); + vll->add(channel, newValList); + } + + +//--------------------------------------------------------- +// importPart +//--------------------------------------------------------- +void MusE::importPart() + { + unsigned curPos = song->cpos(); + TrackList* tracks = song->tracks(); + Track* track = 0; + // Get first selected track: + for (iTrack i = tracks->begin(); i != tracks->end(); i++) { + Track* t = *i; + if (t->selected()) { + // Changed by T356. Support mixed .mpt files. + //if (t->isMidiTrack()) { + if (t->isMidiTrack() || t->type() == Track::WAVE) { + track = t; + break; + } + else { + //QMessageBox::warning(this, QString("MusE"), tr("Import part is only valid for midi tracks!")); + QMessageBox::warning(this, QString("MusE"), tr("Import part is only valid for midi and wave tracks!")); + return; + } + } + } + + if (track) { + bool loadAll; + QString filename = getOpenFileName(QString(""), part_file_pattern, this, tr("MusE: load part"), &loadAll); + if (!filename.isEmpty()){ + // Make a backup of the current clone list, to retain any 'copy' items, + // so that pasting works properly after. + CloneList copyCloneList = cloneList; + // Clear the clone list to prevent any dangerous associations with + // current non-original parts. + cloneList.clear(); + + importPartToTrack(filename, curPos, track); + + // Restore backup of the clone list, to retain any 'copy' items, + // so that pasting works properly after. + cloneList.clear(); + cloneList = copyCloneList; + } + } + else { + QMessageBox::warning(this, QString("MusE"), tr("No track selected for import")); + } + } + +//--------------------------------------------------------- +// importPartToTrack +//--------------------------------------------------------- +void MusE::importPartToTrack(QString& filename, unsigned tick, Track* track) +{ + // Changed by T356 + /* + bool popenFlag = false; + FILE* fp = fileOpen(this, filename, ".mpt", "r", popenFlag, false, false); + + if(fp) + { + MidiPart* importedPart = new MidiPart((MidiTrack*)track); + Xml tmpXml = Xml(fp); + + Xml::Token token = tmpXml.parse(); + const QString& tag = tmpXml.s1(); + if (token == Xml::TagStart && tag == "part") + { + // Make a backup of the current clone list, to retain any 'copy' items, + // so that pasting works properly after. + CloneList copyCloneList = cloneList; + // Clear the clone list to prevent any dangerous associations with + // current non-original parts. + cloneList.clear(); + + importedPart->read(tmpXml); + importedPart->setTick(tick); + + // Restore backup of the clone list, to retain any 'copy' items, + // so that pasting works properly after. + cloneList.clear(); + cloneList = copyCloneList; + + audio->msgAddPart(importedPart); + } + else + { + printf("Unknown tag: %s\n", tag.latin1()); + } + fclose(fp); + } + return; + */ + + + bool popenFlag = false; + FILE* fp = fileOpen(this, filename, ".mpt", "r", popenFlag, false, false); + + if(fp) + { + Xml xml = Xml(fp); + bool firstPart = true; + int posOffset = 0; + int notDone = 0; + int done = 0; + + bool end = false; + song->startUndo(); + for (;;) + { + Xml::Token token = xml.parse(); + const QString& tag = xml.s1(); + switch (token) + { + case Xml::Error: + case Xml::End: + end = true; + break; + case Xml::TagStart: + if (tag == "part") { + //MidiPart* p = new MidiPart((MidiTrack*)track); + //p->read(xml); + + // Read the part. + Part* p = 0; + p = readXmlPart(xml, track); + // If it could not be created... + if(!p) + { + // Increment the number of parts not done and break. + ++notDone; + break; + } + + // Increment the number of parts done. + ++done; + + if(firstPart) + { + firstPart=false; + posOffset = tick - p->tick(); + } + p->setTick(p->tick() + posOffset); + //finalPos=p->tick() + p->lenTick(); + ////pos += p->lenTick(); + audio->msgAddPart(p,false); + } + else + xml.unknown("MusE::importPartToTrack"); + break; + case Xml::TagEnd: + break; + default: + end = true; + break; + } + if(end) + break; + } + fclose(fp); + song->endUndo(SC_PART_INSERTED); + + if(notDone) + { + int tot = notDone + done; + QMessageBox::critical(this, QString("MusE"), + QString().setNum(notDone) + (tot > 1 ? (tr(" out of ") + QString().setNum(tot)) : QString("")) + + (tot > 1 ? tr(" parts") : tr(" part")) + + tr(" could not be imported.\nLikely the track is the wrong type.")); + } + + return; + } +} diff --git a/muse2/muse/instruments/Makefile.am b/muse2/muse/instruments/Makefile.am new file mode 100644 index 00000000..6882f39b --- /dev/null +++ b/muse2/muse/instruments/Makefile.am @@ -0,0 +1,15 @@ +include $(top_srcdir)/common.am + +if PCH +AM_CXXFLAGS += -include $(top_srcdir)/all.h +endif + +noinst_LIBRARIES = libinstruments.a + +dist_libinstruments_a_SOURCES = \ + minstrument.cpp minstrument.h \ + editinstrument.h editinstrument.cpp \ + editinstrumentbase.ui + +nodist_libinstruments_a_SOURCES = \ + moc_editinstrument.cpp diff --git a/muse2/muse/instruments/Makefile.in b/muse2/muse/instruments/Makefile.in new file mode 100644 index 00000000..f7eab504 --- /dev/null +++ b/muse2/muse/instruments/Makefile.in @@ -0,0 +1,599 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/common.am +@PCH_TRUE@am__append_1 = -include $(top_srcdir)/all.h +subdir = muse/instruments +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal-include.m4 \ + $(top_srcdir)/m4/alsa.m4 $(top_srcdir)/m4/docbook.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +LIBRARIES = $(noinst_LIBRARIES) +ARFLAGS = cru +libinstruments_a_AR = $(AR) $(ARFLAGS) +libinstruments_a_LIBADD = +dist_libinstruments_a_OBJECTS = minstrument.$(OBJEXT) \ + editinstrument.$(OBJEXT) editinstrumentbase.$(OBJEXT) +nodist_libinstruments_a_OBJECTS = moc_editinstrument.$(OBJEXT) +libinstruments_a_OBJECTS = $(dist_libinstruments_a_OBJECTS) \ + $(nodist_libinstruments_a_OBJECTS) +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +CXXLD = $(CXX) +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(dist_libinstruments_a_SOURCES) \ + $(nodist_libinstruments_a_SOURCES) +DIST_SOURCES = $(dist_libinstruments_a_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DOCBOOKSTYLE = @DOCBOOKSTYLE@ +DOCBOOKTARGETS = @DOCBOOKTARGETS@ +DOT = @DOT@ +DOTPATH = @DOTPATH@ +DOXYGEN = @DOXYGEN@ +DOXYGEN_TREEVIEW = @DOXYGEN_TREEVIEW@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FLUIDSYNTHDIRS = @FLUIDSYNTHDIRS@ +FST_CFLAGS = @FST_CFLAGS@ +FST_LIBS = @FST_LIBS@ +Fluidsynth_CFLAGS = @Fluidsynth_CFLAGS@ +Fluidsynth_LIBS = @Fluidsynth_LIBS@ +GIVERTCAP = @GIVERTCAP@ +GREP = @GREP@ +HAVEDOT = @HAVEDOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_LIBS = @JACK_LIBS@ +JADE = @JADE@ +LASH_CFLAGS = @LASH_CFLAGS@ +LASH_LIBS = @LASH_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LO_CFLAGS = @LO_CFLAGS@ +LO_LIBS = @LO_LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MUSECXXFLAGS = @MUSECXXFLAGS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NSGMLS = @NSGMLS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PCH = @PCH@ +PERL = @PERL@ +PKG_CONFIG = @PKG_CONFIG@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIB = @PYTHON_LIB@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QTDIR_BIN = @QTDIR_BIN@ +QTDIR_INC = @QTDIR_INC@ +QT_LIBS = @QT_LIBS@ +RANLIB = @RANLIB@ +SAMPLERATE_CFLAGS = @SAMPLERATE_CFLAGS@ +SAMPLERATE_LIBS = @SAMPLERATE_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ +SNDFILE_LIBS = @SNDFILE_LIBS@ +STRIP = @STRIP@ +SUIDBUILD = @SUIDBUILD@ +SUIDINSTALL = @SUIDINSTALL@ +USE_SSE = @USE_SSE@ +UUID_CFLAGS = @UUID_CFLAGS@ +UUID_LIBS = @UUID_LIBS@ +VERSION = @VERSION@ +XMKMF = @XMKMF@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +have_docbook = @have_docbook@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +synth_fluid = @synth_fluid@ +synth_fluidsynth = @synth_fluidsynth@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AM_CXXFLAGS = $(MUSECXXFLAGS) -I.. -I$(top_srcdir)/synti \ + -I$(top_srcdir)/muse/widgets -DQT_SHARED -DQT_THREAD_SUPPORT \ + -DQT_PLUGIN $(QTDIR_INC) -DQT3_SUPPORT $(am__append_1) +AM_CPPFLAGS = +MOC = $(QTDIR_BIN)/moc +#UIC = $(QTDIR_BIN)/uic3 +UIC = /usr/bin/uic3 +UIFILES = $(wildcard *.ui) +MOCFILES = $(shell for h in $(filter %.h,$(SOURCES)); do \ + if grep -q Q_OBJECT $$h; then \ + echo $$h | sed "s/\(.*\)\.h/moc_\1.cpp/"; \ + fi; \ + done) + +BUILT_SOURCES = $(MOCFILES) $(UIFILES:%.ui=%.h) +MOSTLYCLEANFILES = $(MOCFILES) $(UIFILES:%.ui=%.h) +SUFFIXES = .ui .h.gch +noinst_LIBRARIES = libinstruments.a +dist_libinstruments_a_SOURCES = \ + minstrument.cpp minstrument.h \ + editinstrument.h editinstrument.cpp \ + editinstrumentbase.ui + +nodist_libinstruments_a_SOURCES = \ + moc_editinstrument.cpp + +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: .ui .h.gch .cpp .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/common.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu muse/instruments/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu muse/instruments/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-noinstLIBRARIES: + -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) +libinstruments.a: $(libinstruments_a_OBJECTS) $(libinstruments_a_DEPENDENCIES) + -rm -f libinstruments.a + $(libinstruments_a_AR) libinstruments.a $(libinstruments_a_OBJECTS) $(libinstruments_a_LIBADD) + $(RANLIB) libinstruments.a + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/editinstrument.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minstrument.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/moc_editinstrument.Po@am__quote@ + +.cpp.o: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< + +.cpp.obj: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.cpp.lo: +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-am +all-am: Makefile $(LIBRARIES) +installdirs: +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +clean: clean-am + +clean-am: clean-generic clean-libtool clean-noinstLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: all check install install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-noinstLIBRARIES ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags uninstall uninstall-am + + +de: + @for base in $(MOCFILES); do echo -e "\t$${base}.cpp $${base}.h \\"; done + +nde: + @for base in $(MOCFILES); do echo -e "\tmoc_$${base}.cpp \\"; done + +.ui.o: %.h + $(UIC) -L $(top_srcdir)/muse/widgets -o $*.cpp -impl $*.h $*.ui + $(MOC) $*.h >> $*.cpp + $(CXXCOMPILE) -c $*.cpp -o $*.o + $(RM) $*.cpp moc_$*.cpp moc_$*.o + +.ui.lo: %.h + $(UIC) -L $(top_srcdir)/muse/widgets -o $*.cpp -impl $*.h $*.ui + $(MOC) $*.h >> $*.cpp + $(LTCXXCOMPILE) -c $*.cpp -o $*.lo + $(RM) $*.cpp moc_$*.cpp moc_$*.lo moc_$*.o + +moc_%.cpp: %.h + $(MOC) $< -o $@ + +%.h: %.ui + $(UIC) -o $@ $< +# $(UIC) -L $(top_srcdir)/muse/widgets -o $@ $< + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/muse2/muse/instruments/ccontrolbase.ui b/muse2/muse/instruments/ccontrolbase.ui new file mode 100644 index 00000000..3094776f --- /dev/null +++ b/muse2/muse/instruments/ccontrolbase.ui @@ -0,0 +1,525 @@ + +MidiControllerEditDialogBase + + + MidiControllerEditDialogBase + + + + 0 + 0 + 698 + 457 + + + + MusE: Define Midi Controller + + + true + + + + unnamed + + + 11 + + + 6 + + + + Layout2 + + + + unnamed + + + 0 + + + 6 + + + + buttonNew + + + &Add + + + Alt+A + + + false + + + create new entry + + + pressing the New button you create a new entry +in the MusE list of defined controllers + + + + + buttonDelete + + + &Delete + + + false + + + delete selected entry + + + + + Spacer1 + + + Horizontal + + + Expanding + + + + 20 + 0 + + + + + + buttonOk + + + &OK + + + false + + + + + buttonApply + + + A&pply + + + false + + + + + buttonCancel + + + &Cancel + + + false + + + + + + + textLabel1 + + + Predefined Controller: + + + + + + Name + + + true + + + true + + + + + Type + + + true + + + true + + + + + H-Ctrl + + + true + + + false + + + + + L-Ctrl + + + true + + + false + + + + + Min Val + + + true + + + false + + + + + Max Val + + + true + + + false + + + + viewController + + + StyledPanel + + + Sunken + + + true + + + list of defined controllers + + + This is the MusE list of defined controllers. + + + + + layout2 + + + + unnamed + + + + textLabel2 + + + Managed Controller for Port + + + + + midiPortsList + + + + + textLabel3 + + + Channel + + + + + midiChannel + + + 16 + + + 1 + + + + + + + listController + + + This is a list of commonly used midi controllers. +Note that in MusE pitch and program changes are +handled like normal controllers. + + + + + GroupBox1 + + + Properties + + + + unnamed + + + 11 + + + 6 + + + + TextLabel1 + + + Name + + + + + layout3 + + + + unnamed + + + + TextLabel1_2 + + + Min Value + + + 10 + + + + + spinboxMin + + + 16384 + + + -16385 + + + + + TextLabel2_2 + + + Max Value + + + 10 + + + + + spinboxMax + + + 16384 + + + -16385 + + + 127 + + + + + + + TextLabel2 + + + Type + + + + + entryName + + + + + layout5 + + + + unnamed + + + + + Control7 + + + + + Control14 + + + + + RPN + + + + + NRPN + + + + + RPN14 + + + + + NRPN14 + + + + + Pitch + + + + + Program + + + + comboType + + + + + TextLabel3 + + + H-Ctrl + + + 10 + + + + + spinboxHCtrlNo + + + 127 + + + 0 + + + 1 + + + Midi Controller Number High Byte + + + + + TextLabel2_3 + + + L-Ctrl + + + 10 + + + + + spinboxLCtrlNo + + + 127 + + + 0 + + + 1 + + + Midi Controller Number Low Byte + + + + + + + textLabel4 + + + Range + + + + + + + + + buttonCancel + clicked() + MidiControllerEditDialogBase + reject() + + + buttonOk + clicked() + MidiControllerEditDialogBase + accept() + + + + viewController + entryName + comboType + spinboxHCtrlNo + spinboxLCtrlNo + spinboxMin + spinboxMax + buttonNew + buttonDelete + buttonOk + buttonApply + buttonCancel + + + diff --git a/muse2/muse/instruments/editinstrument.cpp b/muse2/muse/instruments/editinstrument.cpp new file mode 100644 index 00000000..9e85356a --- /dev/null +++ b/muse2/muse/instruments/editinstrument.cpp @@ -0,0 +1,3541 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: editinstrument.cpp,v 1.2.2.6 2009/05/31 05:12:12 terminator356 Exp $ +// +// (C) Copyright 2003 Werner Schweer (ws@seh.de) +//========================================================= + +#include +//Added by qt3to4: +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "editinstrument.h" +#include "minstrument.h" +#include "globals.h" +#include "listitem.h" +#include "song.h" +#include "xml.h" +#include "midictrl.h" +#include "gconfig.h" + +enum { + COL_NAME = 0, COL_TYPE, + COL_HNUM, COL_LNUM, COL_MIN, COL_MAX, COL_DEF + }; + +//--------------------------------------------------------- +// EditInstrument +//--------------------------------------------------------- + +EditInstrument::EditInstrument(QWidget* parent, const char* name, Qt::WFlags fl) + : EditInstrumentBase(parent, name, fl) + { + patchpopup = new Q3PopupMenu(patchButton); + patchpopup->setCheckable(false); + + // populate instrument list + // Populate common controller list. + for(int i = 0; i < 128; ++i) + listController->insertItem(midiCtrlName(i)); + + oldMidiInstrument = 0; + oldPatchItem = 0; + for (iMidiInstrument i = midiInstruments.begin(); i != midiInstruments.end(); ++i) { + // Imperfect, crude way of ignoring internal instruments, soft synths etc. If it has a gui, + // it must be an internal instrument. But this will still allow some vst instruments (without a gui) + // to show up in the list. + // Hmm, try file path instead... + //if((*i)->hasGui()) + if((*i)->filePath().isEmpty()) + continue; + + ListBoxData* item = new ListBoxData((*i)->iname()); + item->setData((void*)*i); + instrumentList->insertItem(item); + } + if(instrumentList->item(0)) + instrumentList->setSelected(instrumentList->item(0), true); + //oldMidiInstrument = (MidiInstrument*)((ListBoxData*)instrumentList->item(0))->data(); + //oldMidiInstrument = (ListBoxData*)instrumentList->item(0); + //oldMidiInstrument = (ListBoxData*)instrumentList->selectedItem(); + +// MidiInstrument* wip = (MidiInstrument*)((ListBoxData*)instrumentList->item(0))->data(); +// if(wip) + // Assignment +// workingInstrument.assign( *wip ); + + + connect(instrumentList, SIGNAL(selectionChanged()), SLOT(instrumentChanged())); + connect(patchView, SIGNAL(selectionChanged()), SLOT(patchChanged())); + + //instrumentChanged(); + changeInstrument(); + + //connect(listController, SIGNAL(selectionChanged()), SLOT(controllerChanged())); + connect(viewController, SIGNAL(selectionChanged()), SLOT(controllerChanged())); + + //connect(instrumentName, SIGNAL(textChanged(const QString&)), SLOT(instrumentNameChanged(const QString&))); + connect(instrumentName, SIGNAL(returnPressed()), SLOT(instrumentNameReturn())); + connect(instrumentName, SIGNAL(lostFocus()), SLOT(instrumentNameReturn())); + + connect(patchNameEdit, SIGNAL(returnPressed()), SLOT(patchNameReturn())); + connect(patchNameEdit, SIGNAL(lostFocus()), SLOT(patchNameReturn())); + connect(patchDelete, SIGNAL(clicked()), SLOT(deletePatchClicked())); + connect(patchNew, SIGNAL(clicked()), SLOT(newPatchClicked())); + connect(patchNewGroup, SIGNAL(clicked()), SLOT(newGroupClicked())); + //connect(newCategory, SIGNAL(clicked()), SLOT(newCategoryClicked())); + + connect(patchButton, SIGNAL(clicked()), SLOT(patchButtonClicked())); + connect(defPatchH, SIGNAL(valueChanged(int)), SLOT(defPatchChanged(int))); + connect(defPatchL, SIGNAL(valueChanged(int)), SLOT(defPatchChanged(int))); + connect(defPatchProg, SIGNAL(valueChanged(int)), SLOT(defPatchChanged(int))); + connect(deleteController, SIGNAL(clicked()), SLOT(deleteControllerClicked())); + connect(newController, SIGNAL(clicked()), SLOT(newControllerClicked())); + connect(addController, SIGNAL(clicked()), SLOT(addControllerClicked())); + connect(listController, SIGNAL(doubleClicked(Q3ListBoxItem*)), SLOT(addControllerClicked())); + connect(ctrlType,SIGNAL(activated(int)), SLOT(ctrlTypeChanged(int))); + connect(ctrlName, SIGNAL(returnPressed()), SLOT(ctrlNameReturn())); + connect(ctrlName, SIGNAL(lostFocus()), SLOT(ctrlNameReturn())); + //connect(ctrlName, SIGNAL(textChanged(const QString&)), SLOT(ctrlNameChanged(const QString&))); + connect(spinBoxHCtrlNo, SIGNAL(valueChanged(int)), SLOT(ctrlHNumChanged(int))); + connect(spinBoxLCtrlNo, SIGNAL(valueChanged(int)), SLOT(ctrlLNumChanged(int))); + connect(spinBoxMin, SIGNAL(valueChanged(int)), SLOT(ctrlMinChanged(int))); + connect(spinBoxMax, SIGNAL(valueChanged(int)), SLOT(ctrlMaxChanged(int))); + connect(spinBoxDefault, SIGNAL(valueChanged(int)), SLOT(ctrlDefaultChanged(int))); + connect(nullParamSpinBoxH, SIGNAL(valueChanged(int)), SLOT(ctrlNullParamHChanged(int))); + connect(nullParamSpinBoxL, SIGNAL(valueChanged(int)), SLOT(ctrlNullParamLChanged(int))); + + connect(tabWidget3, SIGNAL(currentChanged(QWidget*)), SLOT(tabChanged(QWidget*))); + //connect(sysexList, SIGNAL(selectionChanged()), SLOT(sysexChanged())); + //connect(deleteSysex, SIGNAL(clicked()), SLOT(deleteSysexClicked())); + //connect(newSysex, SIGNAL(clicked()), SLOT(newSysexClicked())); + } + +//--------------------------------------------------------- +// helpWhatsThis +//--------------------------------------------------------- + +void EditInstrument::helpWhatsThis() +{ + whatsThis(); +} + +//--------------------------------------------------------- +// fileNew +//--------------------------------------------------------- + +void EditInstrument::fileNew() + { + // Allow these to update... + instrumentNameReturn(); + patchNameReturn(); + ctrlNameReturn(); + + 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) { + //if(oldMidiInstrument) + //{ + //MidiInstrument* oi = (MidiInstrument*)old->data(Qt::UserRole).value(); + MidiInstrument* oi = 0; + if(oldMidiInstrument) + oi = (MidiInstrument*)oldMidiInstrument->data(); + MidiInstrument* wip = &workingInstrument; + //checkDirty(oi); + //if(checkDirty(oi)) + if(checkDirty(wip)) + // No save was chosen. Restore the actual instrument name. + { + if(oi) + { + oldMidiInstrument->setText(oi->iname()); + //workingInstrument.setIName(oi->iname()); + + // No file path? Only a new unsaved instrument can do that. So delete it. + if(oi->filePath().isEmpty()) + // Delete the list item and the instrument. + deleteInstrument(oldMidiInstrument); + + instrumentList->triggerUpdate(true); + } + } + //else + //{ + // if(oi) + // Save was chosen. Assign the working instrument to the actual instrument. + // oi->assign(workingInstrument); + //} + + //oi->setDirty(false); + workingInstrument.setDirty(false); + //} + + MidiInstrument* ni = new MidiInstrument(s); + //midiInstruments.append(ni); + midiInstruments.push_back(ni); + //QListWidgetItem* item = new QListWidgetItem(ni->iname()); + //InstrumentListItem* item = new InstrumentListItem(ni->iname()); + ListBoxData* item = new ListBoxData(ni->iname()); + + //oldMidiInstrument = item; + workingInstrument.assign( *ni ); + //workingInstrument.setDirty(false); + + //item->setText(ni->iname()); + item->setData((void*)ni); + //QVariant v = qVariantFromValue((void*)(ni)); + //item->setData(Qt::UserRole, v); + //instrumentList->addItem(item); + instrumentList->insertItem(item); + + oldMidiInstrument = 0; + + instrumentList->blockSignals(true); + instrumentList->setCurrentItem(item); + instrumentList->blockSignals(false); + + changeInstrument(); + + // We have our new instrument! So set dirty to true. + workingInstrument.setDirty(true); + + break; + } + } + + } + +//--------------------------------------------------------- +// fileOpen +//--------------------------------------------------------- + +void EditInstrument::fileOpen() + { + // Allow these to update... + //instrumentNameReturn(); + //patchNameReturn(); + //ctrlNameReturn(); + + + } + +//--------------------------------------------------------- +// fileSave +//--------------------------------------------------------- + +void EditInstrument::fileSave() +{ + //if (instrument->filePath().isEmpty()) + if (workingInstrument.filePath().isEmpty()) + { + //fileSaveAs(); + saveAs(); + return; + } + + // Do not allow a direct overwrite of a 'built-in' muse instrument. + QFileInfo qfi(workingInstrument.filePath()); + if(qfi.dirPath(true) == museInstruments) + { + //fileSaveAs(); + saveAs(); + return; + } + + //QFile f(instrument->filePath()); + //if (!f.open(QIODevice::WriteOnly)) { + //FILE* f = fopen(instrument->filePath().latin1(), "w"); + FILE* f = fopen(workingInstrument.filePath().latin1(), "w"); + if(f == 0) + { + //fileSaveAs(); + saveAs(); + return; + } + + // Allow these to update... + instrumentNameReturn(); + patchNameReturn(); + ctrlNameReturn(); + + //f.close(); + if(fclose(f) != 0) + { + //QString s = QString("Creating file:\n") + instrument->filePath() + QString("\nfailed: ") + QString s = QString("Creating file:\n") + workingInstrument.filePath() + QString("\nfailed: ") + //+ f.errorString(); + + QString(strerror(errno) ); + //fprintf(stderr, "poll failed: %s\n", strerror(errno)); + QMessageBox::critical(this, tr("MusE: Create file failed"), s); + return; + } + + //if(fileSave(instrument, instrument->filePath())) + // instrument->setDirty(false); + if(fileSave(&workingInstrument, workingInstrument.filePath())) + workingInstrument.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); + + FILE* f = fopen(name.ascii(), "w"); + if(f == 0) + { + //if(debugMsg) + // printf("READ IDF %s\n", fi->filePath().latin1()); + QString s("Creating file failed: "); + s += QString(strerror(errno)); + QMessageBox::critical(this, + tr("MusE: Create file failed"), s); + return false; + } + + Xml xml(f); + + updateInstrument(instrument); + + //instrument->write(xml); + instrument->write(0, xml); + + // Assign the working instrument values to the actual current selected instrument... + if(oldMidiInstrument) + { + MidiInstrument* oi = (MidiInstrument*)oldMidiInstrument->data(); + if(oi) + { + oi->assign(workingInstrument); + + // Now signal the rest of the app so stuff can change... + song->update(SC_CONFIG | SC_MIDI_CONTROLLER); + //song->update(SC_CONFIG | SC_MIDI_CONTROLLER | SC_MIDI_CONTROLLER_ADD); + } + } + + //f.close(); + //if (f.error()) { + if(fclose(f) != 0) + { + QString s = QString("Write File\n") + name + QString("\nfailed: ") + //+ f.errorString(); + + QString(strerror(errno)); + //fprintf(stderr, "poll failed: %s\n", strerror(errno)); + QMessageBox::critical(this, tr("MusE: Write File failed"), s); + return false; + } + return true; + } + +//--------------------------------------------------------- +// saveAs +//--------------------------------------------------------- + +void EditInstrument::saveAs() + { + // Allow these to update... + instrumentNameReturn(); + patchNameReturn(); + ctrlNameReturn(); + + //QListWidgetItem* item = instrumentList->currentItem(); +// ListBoxData* item = (ListBoxData*)instrumentList->selectedItem(); +// if (item == 0) +// return; + //MidiInstrument* instrument = (MidiInstrument*)item->data(Qt::UserRole).value(); +// MidiInstrument* instrument = (MidiInstrument*)item->data(); + + //QString path = QDir::homePath() + "/" + config.instrumentPath; + //QString path = QDir::homeDirPath() + "/" + museGlobalShare; + //QString path = museInstruments; + QString path = museUserInstruments; + + if(!QDir(museUserInstruments).exists()) + { + if(QMessageBox::question(this, + tr("MusE:"), + tr("The user instrument directory\n") + museUserInstruments + tr("\ndoes not exist yet. Create it now?\n") + + tr("(You can override with the environment variable MUSEINSTRUMENTS)"), + QMessageBox::Ok | QMessageBox::Default, + QMessageBox::Cancel | QMessageBox::Escape, + Qt::NoButton) == QMessageBox::Ok) + { + if(QDir().mkdir(museUserInstruments)) + printf("Created user instrument directory: %s\n", museUserInstruments.latin1()); + else + { + printf("Unable to create user instrument directory: %s\n", museUserInstruments.latin1()); + QMessageBox::critical(this, tr("MusE:"), tr("Unable to create user instrument directory\n") + museUserInstruments); + //return; + path = museUser; + } + } + else + // return; + path = museUser; + } + + //if (instrument->filePath().isEmpty()) + if (workingInstrument.filePath().isEmpty()) + path += QString("/%1.idf").arg(workingInstrument.iname()); + else { + //QFileInfo fi(instrument->filePath()); + QFileInfo fi(workingInstrument.filePath()); + + // Prompt for a new instrument name if the name has not been changed, to avoid duplicates. + if(oldMidiInstrument) + { + MidiInstrument* oi = (MidiInstrument*)oldMidiInstrument->data(); + if(oi) + { + if(oi->iname() == workingInstrument.iname()) + { + // Prompt only if it's a user instrument, to avoid duplicates in the user instrument dir. + // This will still allow a user instrument to override a built-in instrument with the same name. + if(fi.dirPath(true) != museInstruments) + { + //QMessageBox::critical(this, + // tr("MusE: Bad instrument name"), + // tr("Please change the instrument name to a new unique name before saving, to avoid duplicates"), + // QMessageBox::Ok, + // QMessageBox::NoButton, + // QMessageBox::NoButton); + printf("EditInstrument::saveAs Error: Instrument name %s already used!\n", workingInstrument.iname().latin1()); + return; + } + } + } + } + path += QString("/%1.idf").arg(fi.baseName()); + } + //QString s = QFileDialog::getSaveFileName(this, + // tr("MusE: Save Instrument Definition"), + // path, + // tr("Instrument Definition (*.idf)")); + + QString s = Q3FileDialog::getSaveFileName(path, tr("Instrument Definition (*.idf)"), this, + tr("MusE: Save Instrument Definition").latin1()); + if (s.isEmpty()) + return; + //instrument->setFilePath(s); + workingInstrument.setFilePath(s); + + //if (fileSave(instrument, s)) + // instrument->setDirty(false); + if(fileSave(&workingInstrument, s)) + workingInstrument.setDirty(false); + } + +//--------------------------------------------------------- +// fileSaveAs +//--------------------------------------------------------- + +void EditInstrument::fileSaveAs() + { + // Is this a new unsaved instrument? Just do a normal save. + if(workingInstrument.filePath().isEmpty()) + { + saveAs(); + return; + } + + // Allow these to update... + instrumentNameReturn(); + patchNameReturn(); + ctrlNameReturn(); + + MidiInstrument* oi = 0; + if(oldMidiInstrument) + oi = (MidiInstrument*)oldMidiInstrument->data(); + + int res = checkDirty(&workingInstrument, true); + switch(res) + { + // No save: + case 1: + //item->setText(instrument->iname()); + //instrumentList->triggerUpdate(true); + //instrument->setDirty(false); + workingInstrument.setDirty(false); + if(oi) + { + oldMidiInstrument->setText(oi->iname()); + //workingInstrument.setIName(oi->iname()); + + //workingInstrument.assign(*oi); + + // No file path? Only a new unsaved instrument can do that. So delete it. + if(oi->filePath().isEmpty()) + { + // Delete the list item and the instrument. + deleteInstrument(oldMidiInstrument); + oldMidiInstrument = 0; + } + + changeInstrument(); + + instrumentList->triggerUpdate(true); + } + return; + break; + + // Abort: + case 2: + return; + break; + + // Save: + case 0: + //if(oi) + // oi->assign(workingInstrument); + workingInstrument.setDirty(false); + break; + } + + //QListWidgetItem* item = instrumentList->currentItem(); +// ListBoxData* item = (ListBoxData*)instrumentList->selectedItem(); +// if (item == 0) +// return; + //MidiInstrument* instrument = (MidiInstrument*)item->data(Qt::UserRole).value(); +// MidiInstrument* instrument = (MidiInstrument*)item->data(); + + bool isuser = false; + QString so; + if(workingInstrument.iname().isEmpty()) + so = QString("Instrument"); + else + so = workingInstrument.iname(); + + for(int i = 1;; ++i) + { + QString s = so + QString("-%1").arg(i); + + bool found = false; + for(iMidiInstrument imi = midiInstruments.begin(); imi != midiInstruments.end(); ++imi) + { + if(s == (*imi)->iname()) + { + // Allow override of built-in instrument names. + QFileInfo fi((*imi)->filePath()); + if(fi.dirPath(true) == museInstruments) + break; + found = true; + break; + } + } + if(found) + continue; + + bool ok; + s = QInputDialog::getText(tr("MusE: Save instrument as"), tr("Enter a new unique instrument name:"), + QLineEdit::Normal, s, &ok, this); + if(!ok) + return; + if(s.isEmpty()) + { + --i; + continue; + } + + isuser = false; + bool builtin = false; + found = false; + for(iMidiInstrument imi = midiInstruments.begin(); imi != midiInstruments.end(); ++imi) + { + // If an instrument with the same name is found... + if((*imi)->iname() == s) + { + // If it's not the same name as the working instrument, and it's not an internal instrument (soft synth etc.)... + if(s != workingInstrument.iname() && !(*imi)->filePath().isEmpty()) + { + QFileInfo fi((*imi)->filePath()); + // Allow override of built-in and user instruments: + // If it's a user instrument, not a built-in instrument... + if(fi.dirPath(true) == museUserInstruments) + { + // No choice really but to overwrite the destination instrument file! + // Can not have two user files containing the same instrument name. + if(QMessageBox::question(this, + tr("MusE: Save instrument as"), + tr("The user instrument:\n") + s + tr("\nalready exists. This will overwrite its .idf instrument file.\nAre you sure?"), + QMessageBox::Ok | QMessageBox::Default, + QMessageBox::Cancel | QMessageBox::Escape, + Qt::NoButton) == QMessageBox::Ok) + { + // Set the working instrument's file path to the found instrument's path. + workingInstrument.setFilePath((*imi)->filePath()); + // Mark as overwriting a user instrument. + isuser = true; + } + else + { + found = true; + break; + } + } + // Assign the found instrument to the working instrument. + //workingInstrument.assign(*(*imi)); + // Assign the found instrument name to the working instrument name. + workingInstrument.setIName(s); + + // Find the instrument in the list and set the old instrument to the item. + oldMidiInstrument = (ListBoxData*)instrumentList->findItem(s, Q3ListBox::ExactMatch); + + // Mark as a built-in instrument. + builtin = true; + break; + } + found = true; + break; + } + } + if(found) + { + so = s; + i = 0; + continue; + } + + so = s; + + // If the name does not belong to a built-in instrument... + if(!builtin) + { + MidiInstrument* ni = new MidiInstrument(); + ni->assign(workingInstrument); + ni->setIName(so); + ni->setFilePath(QString()); + //midiInstruments.append(ni); + midiInstruments.push_back(ni); + //QListWidgetItem* item = new QListWidgetItem(ni->iname()); + //InstrumentListItem* item = new InstrumentListItem(ni->iname()); + //ListBoxData* item = new ListBoxData(ni->iname()); + ListBoxData* item = new ListBoxData(so); + + //oldMidiInstrument = item; + workingInstrument.assign( *ni ); + //workingInstrument.setDirty(false); + + //item->setText(ni->iname()); + item->setData((void*)ni); + //QVariant v = qVariantFromValue((void*)(ni)); + //item->setData(Qt::UserRole, v); + //instrumentList->addItem(item); + instrumentList->insertItem(item); + + oldMidiInstrument = 0; + + instrumentList->blockSignals(true); + instrumentList->setCurrentItem(item); + instrumentList->blockSignals(false); + + changeInstrument(); + + // We have our new instrument! So set dirty to true. + workingInstrument.setDirty(true); + } + + break; + } + + //QString path = QDir::homePath() + "/" + config.instrumentPath; + //QString path = QDir::homeDirPath() + "/" + museGlobalShare; + //QString path = museInstruments; + QString path = museUserInstruments; + + if(!QDir(museUserInstruments).exists()) + { + if(QMessageBox::question(this, + tr("MusE:"), + tr("The user instrument directory\n") + museUserInstruments + tr("\ndoes not exist yet. Create it now?\n") + + tr("(You can override with the environment variable MUSEINSTRUMENTS)"), + QMessageBox::Ok | QMessageBox::Default, + QMessageBox::Cancel | QMessageBox::Escape, + Qt::NoButton) == QMessageBox::Ok) + { + if(QDir().mkdir(museUserInstruments)) + printf("Created user instrument directory: %s\n", museUserInstruments.latin1()); + else + { + printf("Unable to create user instrument directory: %s\n", museUserInstruments.latin1()); + QMessageBox::critical(this, tr("MusE:"), tr("Unable to create user instrument directory\n") + museUserInstruments); + //return; + path = museUser; + } + } + else + // return; + path = museUser; + } + path += QString("/%1.idf").arg(so); + + //QString s = QFileDialog::getSaveFileName(this, + // tr("MusE: Save Instrument Definition"), + // path, + // tr("Instrument Definition (*.idf)")); + + QString sfn; + // If we are overwriting a user instrument just force the path. + if(isuser) + sfn = path; + else + { + sfn = Q3FileDialog::getSaveFileName(path, tr("Instrument Definition (*.idf)"), this, + tr("MusE: Save Instrument Definition").latin1()); + if (sfn.isEmpty()) + return; + //instrument->setFilePath(s); + workingInstrument.setFilePath(sfn); + } + + //if (fileSave(instrument, s)) + // instrument->setDirty(false); + if(fileSave(&workingInstrument, sfn)) + workingInstrument.setDirty(false); + } + +//--------------------------------------------------------- +// fileExit +//--------------------------------------------------------- + +void EditInstrument::fileExit() + { + + } + +//--------------------------------------------------------- +// closeEvent +//--------------------------------------------------------- + +void EditInstrument::closeEvent(QCloseEvent* ev) + { + // Allow these to update... + instrumentNameReturn(); + patchNameReturn(); + ctrlNameReturn(); + + //QListWidgetItem* item = instrumentList->currentItem(); + +// ListBoxData* item = (ListBoxData*)instrumentList->selectedItem(); + +// if(item) +// { + //MidiInstrument* instrument = (MidiInstrument*)item->data(Qt::UserRole).value(); +// MidiInstrument* instrument = (MidiInstrument*)item->data(); +// int res = checkDirty(instrument, true); + MidiInstrument* oi = 0; + if(oldMidiInstrument) + oi = (MidiInstrument*)oldMidiInstrument->data(); + + int res = checkDirty(&workingInstrument, true); + switch(res) + { + // No save: + case 1: + //item->setText(instrument->iname()); + //instrumentList->triggerUpdate(true); + //instrument->setDirty(false); + workingInstrument.setDirty(false); + if(oi) + { + oldMidiInstrument->setText(oi->iname()); + //workingInstrument.setIName(oi->iname()); + + //workingInstrument.assign(*oi); + + // No file path? Only a new unsaved instrument can do that. So delete it. + if(oi->filePath().isEmpty()) + { + // Delete the list item and the instrument. + deleteInstrument(oldMidiInstrument); + oldMidiInstrument = 0; + } + + changeInstrument(); + + instrumentList->triggerUpdate(true); + } + break; + + // Abort: + case 2: + ev->ignore(); + return; + break; + + // Save: + case 0: + //if(oi) + // oi->assign(workingInstrument); + workingInstrument.setDirty(false); + break; + + } + +// } + + Q3MainWindow::closeEvent(ev); + } + +//--------------------------------------------------------- +// changeInstrument +//--------------------------------------------------------- + +void EditInstrument::changeInstrument() +{ + ListBoxData* sel = (ListBoxData*)instrumentList->selectedItem(); + if(!sel) + return; + + //oldMidiInstrument = (MidiInstrument*)sel->data(); + oldMidiInstrument = sel; + // Assignment + //workingInstrument = *((MidiInstrument*)sel->data()); + + // Assign will 'delete' any existing patches, groups, or controllers. + workingInstrument.assign( *((MidiInstrument*)sel->data()) ); + + workingInstrument.setDirty(false); + + // populate patch list + + patchView->clear(); + //listController->clear(); + viewController->clear(); + //category->clear(); + //sysexList->clear(); + + + //MidiInstrument* instrument = (MidiInstrument*)sel->data(Qt::UserRole).value(); + //MidiInstrument* instrument = (MidiInstrument*)sel->data(); + //instrument->setDirty(false); + + instrumentName->blockSignals(true); + //instrumentName->setText(instrument->iname()); + instrumentName->setText(workingInstrument.iname()); + instrumentName->blockSignals(false); + + nullParamSpinBoxH->blockSignals(true); + nullParamSpinBoxL->blockSignals(true); + int nv = workingInstrument.nullSendValue(); + if(nv == -1) + { + nullParamSpinBoxH->setValue(-1); + nullParamSpinBoxL->setValue(-1); + } + else + { + int nvh = (nv >> 8) & 0xff; + int nvl = nv & 0xff; + if(nvh == 0xff) + nullParamSpinBoxH->setValue(-1); + else + nullParamSpinBoxH->setValue(nvh & 0x7f); + if(nvl == 0xff) + nullParamSpinBoxL->setValue(-1); + else + nullParamSpinBoxL->setValue(nvl & 0x7f); + } + nullParamSpinBoxH->blockSignals(false); + nullParamSpinBoxL->blockSignals(false); + + //std::vector* pg = instrument->groups(); + //PatchGroupList* pg = instrument->groups(); + PatchGroupList* pg = workingInstrument.groups(); + //for (std::vector::iterator g = pg->begin(); g != pg->end(); ++g) { + for (ciPatchGroup g = pg->begin(); g != pg->end(); ++g) { + PatchGroup* pgp = *g; + if(pgp) + { + //QTreeWidgetItem* item = new QTreeWidgetItem; + ListViewData* item = new ListViewData(patchView); + + //item->setText(0, g->name); + item->setText(0, pgp->name); + + //QVariant v = QVariant::fromValue((void*)0); + //item->setData(0, Qt::UserRole, v); + //item->setData((void*)*g); + //item->setData((void*)0); + //item->setData((void*)&*g); + item->setData((void*)pgp); + //patchView->addTopLevelItem(item); + + //for (ciPatch p = g->patches.begin(); p != g->patches.end(); ++p) + for (ciPatch p = pgp->patches.begin(); p != pgp->patches.end(); ++p) + { + //const Patch& patch = *p; + Patch* patch = *p; + if(patch) + { + //QTreeWidgetItem* sitem = new QTreeWidgetItem; + ListViewData* sitem = new ListViewData(item); + //sitem->setText(0, patch.name); + //sitem->setText(0, p->name); + sitem->setText(0, patch->name); + //QVariant v = QVariant::fromValue((void*)patch); + //sitem->setData(0, Qt::UserRole, v); + //sitem->setData((void*)&*p); + sitem->setData((void*)patch); + //item->addChild(sitem); + } + } + } + } + //patchView->setSelected(patchView->item(0), true); + + oldPatchItem = 0; + + ListViewData* fc = (ListViewData*)patchView->firstChild(); + if(fc) + { + // This may cause a patchChanged call. + //if(patchView->selectedItem() != fc) + patchView->blockSignals(true); + patchView->setSelected(fc, true); + patchView->blockSignals(false); + //else + // patchChanged(); + + //patchView->firstChild()->setSelected(true); + //patchView->triggerUpdate(true); + } + + patchChanged(); + +// oldPatchItem = (ListViewData*)patchView->selectedItem(); + //patchChanged(); +// if(oldPatchItem) +// { +// if(oldPatchItem->parent()) +// patchNameEdit->setText( ((Patch*)oldPatchItem->data())->name ); +// else +// patchNameEdit->setText( ((PatchGroup*)oldPatchItem->data())->name ); +// } + + //MidiControllerList* cl = instrument->controller(); + MidiControllerList* cl = workingInstrument.controller(); + for (ciMidiController ic = cl->begin(); ic != cl->end(); ++ic) { + MidiController* c = ic->second; + //QListWidgetItem* item = new QListWidgetItem(c->name()); + // ListBoxData* item = new ListBoxData(c->name()); + //QVariant v = QVariant::fromValue((void*)c); + //item->setData(Qt::UserRole, v); + // item->setData((void*)c); + // listController->insertItem(item); + + addControllerToView(c); + } + + + //listController->setItemSelected(listController->item(0), true); + +// oldController = 0; + + //ListBoxData* ci = (ListBoxData*)listController->item(0); + ListViewData* ci = (ListViewData*)viewController->firstChild(); + + if(ci) + { + // This may cause a controllerChanged call. + //if(listController->selectedItem != ci) + // listController->blockSignals(true); + // listController->setSelected(ci, true); + // listController->blockSignals(false); + //else + // controllerChanged(); + + viewController->blockSignals(true); + viewController->setSelected(ci, true); + viewController->blockSignals(false); + } + + controllerChanged(); + + //oldController = (ListBoxData*)listController->selectedItem(); + + + //controllerChanged(listController->item(0), 0); + //controllerChanged(); + +/* + 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); + } +*/ + + +} + +//--------------------------------------------------------- +// instrumentChanged +//--------------------------------------------------------- + +void EditInstrument::instrumentChanged() + { + ListBoxData* sel = (ListBoxData*)instrumentList->selectedItem(); + if(!sel) + return; + + //printf("instrument changed: %s\n", sel->text().latin1()); + + //if (old) { + //if(oldMidiInstrument) + //{ + //MidiInstrument* oi = (MidiInstrument*)old->data(Qt::UserRole).value(); + MidiInstrument* oi = 0; + if(oldMidiInstrument) + oi = (MidiInstrument*)oldMidiInstrument->data(); + MidiInstrument* wip = &workingInstrument; + // Returns true if aborted. + //checkDirty(oi); + //if(checkDirty(oi)) + if(checkDirty(wip)) + { + // No save was chosen. Abandon changes, or delete if it is new... + if(oi) + { + oldMidiInstrument->setText(oi->iname()); + //wip->setText(oi->iname()); + + // No file path? Only a new unsaved instrument can do that. So delete it. + if(oi->filePath().isEmpty()) + { + // Delete the list item and the instrument. + deleteInstrument(oldMidiInstrument); + oldMidiInstrument = 0; + } + + instrumentList->triggerUpdate(true); + } + } + //else + //{ + // Save was chosen. + // if(oi) + // oi->assign(workingInstrument); + //} + + //oi->setDirty(false); + //wip->setDirty(false); + workingInstrument.setDirty(false); + //} + + changeInstrument(); + + } + +//--------------------------------------------------------- +// instrumentNameReturn +//--------------------------------------------------------- + +void EditInstrument::instrumentNameReturn() +//void EditInstrument::instrumentNameChanged(const QString& s) +{ + //instrumentNameChanged(instrumentName->text()); + ListBoxData* item = (ListBoxData*)instrumentList->selectedItem(); + if (item == 0) + return; + QString s = instrumentName->text(); + + if(s == item->text()) + return; + + MidiInstrument* curins = (MidiInstrument*)item->data(); + + for(iMidiInstrument i = midiInstruments.begin(); i != midiInstruments.end(); ++i) + { + if((*i) != curins && s == (*i)->iname()) + { + instrumentName->blockSignals(true); + // Grab the last valid name from the item text, since the instrument has not been updated yet. + //instrumentName->setText(curins->iname()); + instrumentName->setText(item->text()); + instrumentName->blockSignals(false); + + QMessageBox::critical(this, + tr("MusE: Bad instrument name"), + tr("Please choose a unique instrument name.\n(The name might be used by a hidden instrument.)"), + QMessageBox::Ok, + Qt::NoButton, + Qt::NoButton); + + return; + } + } + + //if (s != workingInstrument.iname()) { + item->setText(s); + //MidiInstrument* instrument = (MidiInstrument*)item->data(Qt::UserRole).value(); + //MidiInstrument* instrument = (MidiInstrument*)item->data(); + //instrument->setDirty(true); + workingInstrument.setIName(s); + workingInstrument.setDirty(true); + //instrumentList->updateItem(item); + instrumentList->triggerUpdate(true); + //instrumentList->update(); + // } +} + +//--------------------------------------------------------- +// deleteInstrument +//--------------------------------------------------------- + +void EditInstrument::deleteInstrument(ListBoxData* item) +{ + if(!item) + return; + + //ListBoxData* curritem = (ListBoxData*)instrumentList->selectedItem(); + + MidiInstrument* ins = (MidiInstrument*)item->data(); + + // Be kind to the list item, just in case we install a delete handler or something. + //item->setData(0); + + // Delete the list item. + // Test this: Is this going to change the current selection? + instrumentList->blockSignals(true); + delete item; + instrumentList->blockSignals(false); + + // Test this: Neccessary? + // if(curritem) + // instrumentList->setCurrentItem(curritem); + + if(!ins) + return; + + // Remove the instrument from the list. + midiInstruments.remove(ins); + + // Delete the instrument. + delete ins; +} + +//--------------------------------------------------------- +// tabChanged +// Added so that patch list is updated when switching tabs, +// so that 'Program' default values and text are current in controller tab. +//--------------------------------------------------------- + +void EditInstrument::tabChanged(QWidget* w) +{ + if(!w) + return; + + // If we're switching to the Patches tab, just ignore. + if(QString(w->name()) == QString("patchesTab")) + return; + + if(oldPatchItem) + { + // Don't bother calling patchChanged, just update the patch or group. + if(oldPatchItem->parent()) + updatePatch(&workingInstrument, (Patch*)oldPatchItem->data()); + else + updatePatchGroup(&workingInstrument, (PatchGroup*)oldPatchItem->data()); + } + + // We're still on the same item. No need to set oldPatchItem as in patchChanged... + + // If we're switching to the Controller tab, update the default patch button text in case a patch changed... + if(QString(w->name()) == QString("controllerTab")) + { + ListViewData* sel = (ListViewData*)viewController->selectedItem(); + + if(!sel || !sel->data()) + return; + + MidiController* c = (MidiController*)sel->data(); + MidiController::ControllerType type = midiControllerType(c->num()); + + // Grab the controller number from the actual values showing + // and set the patch button text. + if(type == MidiController::Program) + setDefaultPatchName(getDefaultPatchNumber()); + } +} + +//--------------------------------------------------------- +// patchNameReturn +//--------------------------------------------------------- + +void EditInstrument::patchNameReturn() +{ + ListViewData* item = (ListViewData*)patchView->selectedItem(); + if (item == 0) + return; + + QString s = patchNameEdit->text(); + + if(item->text(0) == s) + return; + + PatchGroupList* pg = workingInstrument.groups(); + for(iPatchGroup g = pg->begin(); g != pg->end(); ++g) + { + PatchGroup* pgp = *g; + // If the item has a parent, it's a patch item. + if(item->parent()) + { + Patch* curp = (Patch*)item->data(); + for(iPatch p = pgp->patches.begin(); p != pgp->patches.end(); ++p) + { + if((*p) != curp && (*p)->name == s) + { + patchNameEdit->blockSignals(true); + // Grab the last valid name from the item text, since the patch has not been updated yet. + //patchNameEdit->setText(curp->name); + patchNameEdit->setText(item->text(0)); + patchNameEdit->blockSignals(false); + + QMessageBox::critical(this, + tr("MusE: Bad patch name"), + tr("Please choose a unique patch name"), + QMessageBox::Ok, + Qt::NoButton, + Qt::NoButton); + + return; + } + } + } + else + // The item has no parent. It's a patch group item. + { + PatchGroup* curpg = (PatchGroup*)item->data(); + if(pgp != curpg && pgp->name == s) + { + patchNameEdit->blockSignals(true); + // Grab the last valid name from the item text, since the patch group has not been updated yet. + //patchNameEdit->setText(curpg->name); + patchNameEdit->setText(item->text(0)); + patchNameEdit->blockSignals(false); + + QMessageBox::critical(this, + tr("MusE: Bad patchgroup name"), + tr("Please choose a unique patchgroup name"), + QMessageBox::Ok, + Qt::NoButton, + Qt::NoButton); + + return; + } + } + } + + item->setText(0, s); + workingInstrument.setDirty(true); + + // Since the name of the patch/group in the working instrument will be updated later, + // there's no need to do manually set the name here now. + /* + // If the item has a parent, it's a patch item. + if(item->parent()) + { + Patch* p = item->data(); + if(s != p->name) + { + item->setText(s); + p->name = s; + workingInstrument.setDirty(true); + //patchView->triggerUpdate(true); + } + } + else + // The item has no parent. It's a patch group item. + { + PatchGroup* pg = (PatchGroup*)item->data(); + if(s != pg->name) + { + item->setText(s); + pg->name = s; + workingInstrument.setDirty(true); + //patchView->triggerUpdate(true); + } + } + */ +} + +//--------------------------------------------------------- +// patchChanged +//--------------------------------------------------------- + +void EditInstrument::patchChanged() + { + //if (old && old->data(0, Qt::UserRole).value()) { + if(oldPatchItem) + { + //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(oldPatchItem->parent()) + updatePatch(&workingInstrument, (Patch*)oldPatchItem->data()); + else + updatePatchGroup(&workingInstrument, (PatchGroup*)oldPatchItem->data()); + } + + + ListViewData* sel = (ListViewData*)patchView->selectedItem(); + oldPatchItem = sel; + + if(!sel || !sel->data()) + { + patchNameEdit->setText(""); + spinBoxHBank->setEnabled(false); + spinBoxLBank->setEnabled(false); + spinBoxProgram->setEnabled(false); + checkBoxDrum->setEnabled(false); + checkBoxGM->setEnabled(false); + checkBoxGS->setEnabled(false); + checkBoxXG->setEnabled(false); + return; + } + + // If the item has a parent, it's a patch item. + if(sel->parent()) + { + Patch* p = (Patch*)sel->data(); + patchNameEdit->setText(p->name); + spinBoxHBank->setEnabled(true); + spinBoxLBank->setEnabled(true); + spinBoxProgram->setEnabled(true); + checkBoxDrum->setEnabled(true); + checkBoxGM->setEnabled(true); + checkBoxGS->setEnabled(true); + checkBoxXG->setEnabled(true); + + int hb = ((p->hbank + 1) & 0xff); + int lb = ((p->lbank + 1) & 0xff); + int pr = ((p->prog + 1) & 0xff); + spinBoxHBank->setValue(hb); + spinBoxLBank->setValue(lb); + spinBoxProgram->setValue(pr); + //checkBoxDrum->setChecked(p->drumMap); + checkBoxDrum->setChecked(p->drum); + checkBoxGM->setChecked(p->typ & 1); + checkBoxGS->setChecked(p->typ & 2); + checkBoxXG->setChecked(p->typ & 4); + //category->setCurrentIndex(p->categorie); + } + else + // The item is a patch group item. + { + patchNameEdit->setText( ((PatchGroup*)sel->data())->name ); + spinBoxHBank->setEnabled(false); + spinBoxLBank->setEnabled(false); + spinBoxProgram->setEnabled(false); + checkBoxDrum->setEnabled(false); + checkBoxGM->setEnabled(false); + checkBoxGS->setEnabled(false); + checkBoxXG->setEnabled(false); + } + } + +//--------------------------------------------------------- +// defPatchChanged +//--------------------------------------------------------- + +void EditInstrument::defPatchChanged(int) +{ + ListViewData* item = (ListViewData*)viewController->selectedItem(); + if (!item) + return; + + MidiController* c = (MidiController*)item->data(); + + int val = getDefaultPatchNumber(); + + //if(val == c->minVal() - 1) + // c->setInitVal(CTRL_VAL_UNKNOWN); + //else + c->setInitVal(val); + + setDefaultPatchName(val); + + item->setText(COL_DEF, getPatchItemText(val)); + workingInstrument.setDirty(true); +} + +//--------------------------------------------------------- +// patchButtonClicked +//--------------------------------------------------------- + +void EditInstrument::patchButtonClicked() +{ + //MidiTrack* track = (MidiTrack*)selected; + //int channel = track->outChannel(); + //int port = track->outPort(); + //MidiInstrument* instr = midiPorts[port].instrument(); + + patchpopup->clear(); + + PatchGroupList* pg = workingInstrument.groups(); + + if (pg->size() > 1) { + for (ciPatchGroup i = pg->begin(); i != pg->end(); ++i) { + PatchGroup* pgp = *i; + Q3PopupMenu* pm = new Q3PopupMenu(patchpopup); + pm->setCheckable(false); + pm->setFont(config.fonts[0]); + const PatchList& pl = pgp->patches; + for (ciPatch ipl = pl.begin(); ipl != pl.end(); ++ipl) { + const Patch* mp = *ipl; + //if ((mp->typ & mask) && + // ((drum && songType != MT_GM) || + // (mp->drum == drumchan)) ) + + // { + int id = ((mp->hbank & 0xff) << 16) + + ((mp->lbank & 0xff) << 8) + (mp->prog & 0xff); + pm->insertItem(mp->name, id); + // } + + } + patchpopup->insertItem(pgp->name, pm); + } + } + else if (pg->size() == 1 ){ + // no groups + const PatchList& pl = pg->front()->patches; + for (ciPatch 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); + patchpopup->insertItem(mp->name, id); + // } + } + } + + if(patchpopup->count() == 0) + return; + + int rv = patchpopup->exec(patchButton->mapToGlobal(QPoint(10,5))); + + if (rv != -1) + { + //if(rv != workingInstrument. + + setDefaultPatchControls(rv); + + ListViewData* item = (ListViewData*)viewController->selectedItem(); + if(item) + { + MidiController* c = (MidiController*)item->data(); + c->setInitVal(rv); + + item->setText(COL_DEF, getPatchItemText(rv)); + } + workingInstrument.setDirty(true); + } + +} + +//--------------------------------------------------------- +// addControllerToView +//--------------------------------------------------------- + +ListViewData* EditInstrument::addControllerToView(MidiController* mctrl) +{ + QString hnum; + QString lnum; + QString min; + QString max; + QString def; + int defval = mctrl->initVal(); + int n = mctrl->num(); + //int h = (n >> 7) & 0x7f; + int h = (n >> 8) & 0x7f; + int l = n & 0x7f; + if((n & 0xff) == 0xff) + l = -1; + + MidiController::ControllerType t = midiControllerType(n); + switch(t) + { + case MidiController::Controller7: + //case MidiController::RPN: + //case MidiController::NRPN: + hnum = "---"; + if(l == -1) + lnum = "*"; + else + lnum.setNum(l); + min.setNum(mctrl->minVal()); + max.setNum(mctrl->maxVal()); + if(defval == CTRL_VAL_UNKNOWN) + def = "---"; + else + def.setNum(defval); + break; + case MidiController::RPN: + case MidiController::NRPN: + case MidiController::RPN14: + case MidiController::NRPN14: + case MidiController::Controller14: + hnum.setNum(h); + if(l == -1) + lnum = "*"; + else + lnum.setNum(l); + min.setNum(mctrl->minVal()); + max.setNum(mctrl->maxVal()); + if(defval == CTRL_VAL_UNKNOWN) + def = "---"; + else + def.setNum(defval); + break; + case MidiController::Pitch: + hnum = "---"; + lnum = "---"; + min.setNum(mctrl->minVal()); + max.setNum(mctrl->maxVal()); + if(defval == CTRL_VAL_UNKNOWN) + def = "---"; + else + def.setNum(defval); + break; + case MidiController::Program: + hnum = "---"; + lnum = "---"; + min = "---"; + max = "---"; + def = getPatchItemText(defval); + break; + + default: + hnum = "---"; + lnum = "---"; + //min.setNum(0); + //max.setNum(0); + min = "---"; + max = "---"; + def = "---"; + break; + } + + ListViewData* ci = new ListViewData(viewController, mctrl->name(), int2ctrlType(t), + hnum, lnum, min, max, def); + ci->setData((void*)mctrl); + //setModified(true); + + return ci; +} + +//--------------------------------------------------------- +// controllerChanged +//--------------------------------------------------------- + +void EditInstrument::controllerChanged() + { + //if (old) { +// if(oldController) +// { + //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); +// updateController(&workingInstrument, (MidiController*)oldController->data()); +// } + + // ListBoxData* sel = (ListBoxData*)listController->selectedItem(); + ListViewData* sel = (ListViewData*)viewController->selectedItem(); +// oldController = sel; + + if(!sel || !sel->data()) + { + ctrlName->blockSignals(true); + ctrlName->setText(""); + ctrlName->blockSignals(false); + //ctrlComment->setText(""); + return; + } + + //MidiController* c = (MidiController*)sel->data(Qt::UserRole).value(); + MidiController* c = (MidiController*)sel->data(); + + ctrlName->blockSignals(true); + ctrlName->setText(c->name()); + ctrlName->blockSignals(false); + + //ctrlComment->setText(c->comment()); + int ctrlH = (c->num() >> 8) & 0x7f; + int ctrlL = c->num() & 0x7f; + if((c->num() & 0xff) == 0xff) + ctrlL = -1; + + //int type = int(c->type()); + MidiController::ControllerType type = midiControllerType(c->num()); + + //ctrlType->setCurrentIndex(type); + ctrlType->blockSignals(true); + ctrlType->setCurrentItem(type); + ctrlType->blockSignals(false); + + //ctrlTypeChanged(type); + + spinBoxHCtrlNo->blockSignals(true); + spinBoxLCtrlNo->blockSignals(true); + spinBoxMin->blockSignals(true); + spinBoxMax->blockSignals(true); + spinBoxDefault->blockSignals(true); + + //ctrlTypeChanged(type); + + switch (type) { + //case MidiController::RPN: + //case MidiController::NRPN: + case MidiController::Controller7: + spinBoxHCtrlNo->setEnabled(false); + spinBoxLCtrlNo->setEnabled(true); + spinBoxHCtrlNo->setValue(0); + spinBoxLCtrlNo->setValue(ctrlL); + spinBoxMin->setEnabled(true); + spinBoxMax->setEnabled(true); + spinBoxMin->setRange(-128, 127); + spinBoxMax->setRange(-128, 127); + spinBoxMin->setValue(c->minVal()); + spinBoxMax->setValue(c->maxVal()); + enableDefaultControls(true, false); + break; + case MidiController::RPN: + case MidiController::NRPN: + spinBoxHCtrlNo->setEnabled(true); + spinBoxLCtrlNo->setEnabled(true); + spinBoxHCtrlNo->setValue(ctrlH); + spinBoxLCtrlNo->setValue(ctrlL); + spinBoxMin->setEnabled(true); + spinBoxMax->setEnabled(true); + spinBoxMin->setRange(-128, 127); + spinBoxMax->setRange(-128, 127); + spinBoxMin->setValue(c->minVal()); + spinBoxMax->setValue(c->maxVal()); + enableDefaultControls(true, false); + break; + case MidiController::Controller14: + case MidiController::RPN14: + case MidiController::NRPN14: + spinBoxHCtrlNo->setEnabled(true); + spinBoxLCtrlNo->setEnabled(true); + spinBoxHCtrlNo->setValue(ctrlH); + spinBoxLCtrlNo->setValue(ctrlL); + spinBoxMin->setEnabled(true); + spinBoxMax->setEnabled(true); + spinBoxMin->setRange(-16384, 16383); + spinBoxMax->setRange(-16384, 16383); + spinBoxMin->setValue(c->minVal()); + spinBoxMax->setValue(c->maxVal()); + enableDefaultControls(true, false); + break; + case MidiController::Pitch: + spinBoxHCtrlNo->setEnabled(false); + spinBoxLCtrlNo->setEnabled(false); + spinBoxHCtrlNo->setValue(0); + spinBoxLCtrlNo->setValue(0); + spinBoxMin->setEnabled(true); + spinBoxMax->setEnabled(true); + spinBoxMin->setRange(-8192, 8191); + spinBoxMax->setRange(-8192, 8191); + spinBoxMin->setValue(c->minVal()); + spinBoxMax->setValue(c->maxVal()); + enableDefaultControls(true, false); + break; + case MidiController::Program: + spinBoxHCtrlNo->setEnabled(false); + spinBoxLCtrlNo->setEnabled(false); + spinBoxHCtrlNo->setValue(0); + spinBoxLCtrlNo->setValue(0); + spinBoxMin->setEnabled(false); + spinBoxMax->setEnabled(false); + spinBoxMin->setRange(0, 0); + spinBoxMax->setRange(0, 0); + spinBoxMin->setValue(0); + spinBoxMax->setValue(0); + enableDefaultControls(false, true); + break; + default: + spinBoxHCtrlNo->setEnabled(false); + spinBoxLCtrlNo->setEnabled(false); + spinBoxMin->setEnabled(false); + spinBoxMax->setEnabled(false); + enableDefaultControls(false, false); + break; + } + + if(type == MidiController::Program) + { + spinBoxDefault->setRange(0, 0); + spinBoxDefault->setValue(0); + setDefaultPatchControls(c->initVal()); + } + else + { + spinBoxDefault->setRange(c->minVal() - 1, c->maxVal()); + if(c->initVal() == CTRL_VAL_UNKNOWN) + //spinBoxDefault->setValue(c->minVal() - 1); + spinBoxDefault->setValue(spinBoxDefault->minValue()); + else + spinBoxDefault->setValue(c->initVal()); + } + + //moveWithPart->setChecked(c->moveWithPart()); + + spinBoxHCtrlNo->blockSignals(false); + spinBoxLCtrlNo->blockSignals(false); + spinBoxMin->blockSignals(false); + spinBoxMax->blockSignals(false); + spinBoxDefault->blockSignals(false); + } + +//--------------------------------------------------------- +// ctrlNameReturn +//--------------------------------------------------------- + +void EditInstrument::ctrlNameReturn() +//void EditInstrument::ctrlNameChanged(const QString& s) +{ + ListViewData* item = (ListViewData*)viewController->selectedItem(); + if (item == 0) + return; + MidiController* c = (MidiController*)item->data(); + + QString cName = ctrlName->text(); + + if(c->name() == cName) + return; + + //MidiControllerList* cl = instrument->controller(); + MidiControllerList* cl = workingInstrument.controller(); + for(ciMidiController ic = cl->begin(); ic != cl->end(); ++ic) + { + MidiController* mc = ic->second; + if(mc != c && mc->name() == cName) + { + ctrlName->blockSignals(true); + ctrlName->setText(c->name()); + ctrlName->blockSignals(false); + + QMessageBox::critical(this, + tr("MusE: Bad controller name"), + tr("Please choose a unique controller name"), + QMessageBox::Ok, + Qt::NoButton, + Qt::NoButton); + + return; + } + } + + c->setName(ctrlName->text()); + item->setText(COL_NAME, ctrlName->text()); + //c->setName(s); + //item->setText(COL_NAME, s); + workingInstrument.setDirty(true); +} + +//--------------------------------------------------------- +// ctrlTypeChanged +//--------------------------------------------------------- + +void EditInstrument::ctrlTypeChanged(int idx) + { + ListViewData* item = (ListViewData*)viewController->selectedItem(); + if (item == 0) + return; + + MidiController::ControllerType t = (MidiController::ControllerType)idx; + MidiController* c = (MidiController*)item->data(); + if(t == midiControllerType(c->num())) + return; + + //if(item) + item->setText(COL_TYPE, ctrlType->currentText()); + + int hnum = 0, lnum = 0; + //int rng = 0; + //int min = 0, max = 0; + + spinBoxMin->blockSignals(true); + spinBoxMax->blockSignals(true); + spinBoxDefault->blockSignals(true); + + switch (t) { + //case MidiController::RPN: + //case MidiController::NRPN: + case MidiController::Controller7: + spinBoxHCtrlNo->setEnabled(false); + spinBoxLCtrlNo->setEnabled(true); + spinBoxMin->setEnabled(true); + spinBoxMax->setEnabled(true); + enableDefaultControls(true, false); + spinBoxMin->setRange(-128, 127); + spinBoxMax->setRange(-128, 127); + + spinBoxMin->setValue(0); + spinBoxMax->setValue(127); + spinBoxDefault->setRange(spinBoxMin->value() - 1, spinBoxMax->value()); + + spinBoxDefault->setValue(spinBoxDefault->minValue()); + lnum = spinBoxLCtrlNo->value(); + //rng = 127; + //min = -128; + //max = 127; + //if(item) + //{ + //item->setText(COL_LNUM, QString().setNum(spinBoxLCtrlNo->value())); + if(lnum == -1) + item->setText(COL_LNUM, QString("*")); + else + item->setText(COL_LNUM, QString().setNum(lnum)); + item->setText(COL_HNUM, QString("---")); + item->setText(COL_MIN, QString().setNum(spinBoxMin->value())); + item->setText(COL_MAX, QString().setNum(spinBoxMax->value())); + item->setText(COL_DEF, QString("---")); + //} + break; + case MidiController::RPN: + case MidiController::NRPN: + spinBoxHCtrlNo->setEnabled(true); + spinBoxLCtrlNo->setEnabled(true); + spinBoxMin->setEnabled(true); + spinBoxMax->setEnabled(true); + enableDefaultControls(true, false); + spinBoxMin->setRange(-128, 127); + spinBoxMax->setRange(-128, 127); + + spinBoxMin->setValue(0); + spinBoxMax->setValue(127); + spinBoxDefault->setRange(spinBoxMin->value() - 1, spinBoxMax->value()); + spinBoxDefault->setValue(spinBoxDefault->minValue()); + + hnum = spinBoxHCtrlNo->value(); + lnum = spinBoxLCtrlNo->value(); + //rng = 127; + //min = -128; + //max = 127; + //if(item) + //{ + //item->setText(COL_LNUM, QString().setNum(spinBoxLCtrlNo->value())); + //item->setText(COL_HNUM, QString().setNum(spinBoxHCtrlNo->value())); + if(lnum == -1) + item->setText(COL_LNUM, QString("*")); + else + item->setText(COL_LNUM, QString().setNum(lnum)); + item->setText(COL_HNUM, QString().setNum(hnum)); + item->setText(COL_MIN, QString().setNum(spinBoxMin->value())); + item->setText(COL_MAX, QString().setNum(spinBoxMax->value())); + item->setText(COL_DEF, QString("---")); + //} + break; + case MidiController::Controller14: + case MidiController::RPN14: + case MidiController::NRPN14: + spinBoxHCtrlNo->setEnabled(true); + spinBoxLCtrlNo->setEnabled(true); + spinBoxMin->setEnabled(true); + spinBoxMax->setEnabled(true); + enableDefaultControls(true, false); + spinBoxMin->setRange(-16384, 16383); + spinBoxMax->setRange(-16384, 16383); + + spinBoxMin->setValue(0); + spinBoxMax->setValue(16383); + spinBoxDefault->setRange(spinBoxMin->value() - 1, spinBoxMax->value()); + spinBoxDefault->setValue(spinBoxDefault->minValue()); + + hnum = spinBoxHCtrlNo->value(); + lnum = spinBoxLCtrlNo->value(); + //rng = 16383; + //min = -16384; + //max = 16383; + //if(item) + //{ + //item->setText(COL_LNUM, QString().setNum(spinBoxLCtrlNo->value())); + //item->setText(COL_HNUM, QString().setNum(spinBoxHCtrlNo->value())); + if(lnum == -1) + item->setText(COL_LNUM, QString("*")); + else + item->setText(COL_LNUM, QString().setNum(lnum)); + item->setText(COL_HNUM, QString().setNum(hnum)); + item->setText(COL_MIN, QString().setNum(spinBoxMin->value())); + item->setText(COL_MAX, QString().setNum(spinBoxMax->value())); + item->setText(COL_DEF, QString("---")); + //} + break; + case MidiController::Pitch: + spinBoxHCtrlNo->setEnabled(false); + spinBoxLCtrlNo->setEnabled(false); + spinBoxMin->setEnabled(true); + spinBoxMax->setEnabled(true); + enableDefaultControls(true, false); + spinBoxMin->setRange(-8192, 8191); + spinBoxMax->setRange(-8192, 8191); + + spinBoxMin->setValue(-8192); + spinBoxMax->setValue(8191); + spinBoxDefault->setRange(spinBoxMin->value() - 1, spinBoxMax->value()); + spinBoxDefault->setValue(spinBoxDefault->minValue()); + + //rng = 8191; + //min = -8192; + //max = 8191; + //if(item) + //{ + item->setText(COL_LNUM, QString("---")); + item->setText(COL_HNUM, QString("---")); + item->setText(COL_MIN, QString().setNum(spinBoxMin->value())); + item->setText(COL_MAX, QString().setNum(spinBoxMax->value())); + item->setText(COL_DEF, QString("---")); + //} + break; + case MidiController::Program: + spinBoxHCtrlNo->setEnabled(false); + spinBoxLCtrlNo->setEnabled(false); + spinBoxMin->setEnabled(false); + spinBoxMax->setEnabled(false); + enableDefaultControls(false, true); + spinBoxMin->setRange(0, 0); + spinBoxMax->setRange(0, 0); + + spinBoxMin->setValue(0); + spinBoxMax->setValue(0); + spinBoxDefault->setRange(0, 0); + spinBoxDefault->setValue(0); + + //if(item) + //{ + item->setText(COL_LNUM, QString("---")); + item->setText(COL_HNUM, QString("---")); + item->setText(COL_MIN, QString("---")); + item->setText(COL_MAX, QString("---")); + + //item->setText(COL_DEF, QString("0-0-0")); + item->setText(COL_DEF, QString("---")); + //} + break; + // Shouldn't happen... + default: + spinBoxHCtrlNo->setEnabled(false); + spinBoxLCtrlNo->setEnabled(false); + spinBoxMin->setEnabled(false); + spinBoxMax->setEnabled(false); + enableDefaultControls(false, false); + + spinBoxMin->blockSignals(false); + spinBoxMax->blockSignals(false); + return; + + break; + } + + spinBoxMin->blockSignals(false); + spinBoxMax->blockSignals(false); + spinBoxDefault->blockSignals(false); + + c->setNum(MidiController::genNum(t, hnum, lnum)); + + setDefaultPatchControls(0xffffff); + if(t == MidiController::Program) + { + c->setMinVal(0); + c->setMaxVal(0xffffff); + c->setInitVal(0xffffff); + } + else + { + c->setMinVal(spinBoxMin->value()); + c->setMaxVal(spinBoxMax->value()); + if(spinBoxDefault->value() == spinBoxDefault->minValue()) + c->setInitVal(CTRL_VAL_UNKNOWN); + else + c->setInitVal(spinBoxDefault->value()); + } + + + /* + + if(rng != 0) + { + int mn = c->minVal(); + int mx = c->maxVal(); + //if(val > item->text(COL_MAX).toInt()) + if(mx > max) + { + c->setMaxVal(max); + spinBoxMax->blockSignals(true); + spinBoxMax->setValue(max); + spinBoxMax->blockSignals(false); + if(item) + item->setText(COL_MAX, QString().setNum(max)); + } + //else + if(mn < min) + { + c->setMinVal(min); + spinBoxMin->blockSignals(true); + spinBoxMin->setValue(min); + spinBoxMin->blockSignals(false); + if(item) + item->setText(COL_MIN, QString().setNum(min)); + } + //else + if(mx - mn > rng) + { + //mx = val + rng; + c->setMinVal(0); + c->setMaxVal(rng); + spinBoxMin->blockSignals(true); + spinBoxMax->blockSignals(true); + spinBoxMin->setValue(0); + spinBoxMax->setValue(rng); + spinBoxMin->blockSignals(false); + spinBoxMax->blockSignals(false); + if(item) + { + item->setText(COL_MIN, QString().setNum(0)); + item->setText(COL_MAX, QString().setNum(rng)); + } + } + + spinBoxDefault->blockSignals(true); + + spinBoxDefault->setRange(spinBoxMin->value() - 1, spinBoxMax->value()); + int inval = c->initVal(); + if(inval == CTRL_VAL_UNKNOWN) + spinBoxDefault->setValue(spinBoxDefault->minValue()); + else + { + if(inval < c->minVal()) + { + c->setInitVal(c->minVal()); + spinBoxDefault->setValue(c->minVal()); + } + else + if(inval > c->maxVal()) + { + c->setInitVal(c->maxVal()); + spinBoxDefault->setValue(c->maxVal()); + } + } + + //spinBoxDefault->setRange(c->minVal() - 1, c->maxVal()); + spinBoxDefault->blockSignals(false); + + } + + */ + + workingInstrument.setDirty(true); + } + +//--------------------------------------------------------- +// ctrlHNumChanged +//--------------------------------------------------------- + +void EditInstrument::ctrlHNumChanged(int val) + { + ListViewData* item = (ListViewData*)viewController->selectedItem(); + if (item == 0) + return; + QString s; + s.setNum(val); + MidiController* c = (MidiController*)item->data(); + //int n = c->num() & 0xff; + int n = c->num() & 0x7fff00ff; + c->setNum(n | ((val & 0xff) << 8)); + item->setText(COL_HNUM, s); + workingInstrument.setDirty(true); + } + +//--------------------------------------------------------- +// ctrlLNumChanged +//--------------------------------------------------------- + +void EditInstrument::ctrlLNumChanged(int val) + { + ListViewData* item = (ListViewData*)viewController->selectedItem(); + if (item == 0) + return; + MidiController* c = (MidiController*)item->data(); + //int n = c->num() & 0xff00; + int n = c->num() & ~0xff; + c->setNum(n | (val & 0xff)); + if(val == -1) + item->setText(COL_LNUM, QString("*")); + else + { + QString s; + s.setNum(val); + item->setText(COL_LNUM, s); + } + workingInstrument.setDirty(true); + } + +//--------------------------------------------------------- +// ctrlMinChanged +//--------------------------------------------------------- + +void EditInstrument::ctrlMinChanged(int val) +{ + ListViewData* item = (ListViewData*)viewController->selectedItem(); + if (item == 0) + return; + + QString s; + s.setNum(val); + item->setText(COL_MIN, s); + + MidiController* c = (MidiController*)item->data(); + c->setMinVal(val); + + int rng = 0; + //switch((MidiController::ControllerType)ctrlType->currentItem()) + switch(midiControllerType(c->num())) + { + case MidiController::Controller7: + case MidiController::RPN: + case MidiController::NRPN: + rng = 127; + break; + case MidiController::Controller14: + case MidiController::RPN14: + case MidiController::NRPN14: + case MidiController::Pitch: + rng = 16383; + break; + default: + break; + } + + int mx = c->maxVal(); + + //if(val > item->text(COL_MAX).toInt()) + if(val > mx) + { + c->setMaxVal(val); + spinBoxMax->blockSignals(true); + spinBoxMax->setValue(val); + spinBoxMax->blockSignals(false); + item->setText(COL_MAX, s); + } + else + if(mx - val > rng) + { + mx = val + rng; + c->setMaxVal(mx); + spinBoxMax->blockSignals(true); + spinBoxMax->setValue(mx); + spinBoxMax->blockSignals(false); + item->setText(COL_MAX, QString().setNum(mx)); + } + + spinBoxDefault->blockSignals(true); + + spinBoxDefault->setRange(spinBoxMin->value() - 1, spinBoxMax->value()); + + int inval = c->initVal(); + if(inval == CTRL_VAL_UNKNOWN) + spinBoxDefault->setValue(spinBoxDefault->minValue()); + else + { + if(inval < c->minVal()) + { + c->setInitVal(c->minVal()); + spinBoxDefault->setValue(c->minVal()); + } + else + if(inval > c->maxVal()) + { + c->setInitVal(c->maxVal()); + spinBoxDefault->setValue(c->maxVal()); + } + } + + spinBoxDefault->blockSignals(false); + + workingInstrument.setDirty(true); +} + +//--------------------------------------------------------- +// ctrlMaxChanged +//--------------------------------------------------------- + +void EditInstrument::ctrlMaxChanged(int val) +{ + ListViewData* item = (ListViewData*)viewController->selectedItem(); + if (item == 0) + return; + + QString s; + s.setNum(val); + item->setText(COL_MAX, s); + + MidiController* c = (MidiController*)item->data(); + c->setMaxVal(val); + + int rng = 0; + //switch((MidiController::ControllerType)ctrlType->currentItem()) + switch(midiControllerType(c->num())) + { + case MidiController::Controller7: + case MidiController::RPN: + case MidiController::NRPN: + rng = 127; + break; + case MidiController::Controller14: + case MidiController::RPN14: + case MidiController::NRPN14: + case MidiController::Pitch: + rng = 16383; + break; + default: + break; + } + + int mn = c->minVal(); + + //if(val < item->text(COL_MIN).toInt()) + if(val < mn) + { + c->setMinVal(val); + spinBoxMin->blockSignals(true); + spinBoxMin->setValue(val); + spinBoxMin->blockSignals(false); + item->setText(COL_MIN, s); + } + else + if(val - mn > rng) + { + mn = val - rng; + c->setMinVal(mn); + spinBoxMin->blockSignals(true); + spinBoxMin->setValue(mn); + spinBoxMin->blockSignals(false); + item->setText(COL_MIN, QString().setNum(mn)); + } + + spinBoxDefault->blockSignals(true); + + spinBoxDefault->setRange(spinBoxMin->value() - 1, spinBoxMax->value()); + + int inval = c->initVal(); + if(inval == CTRL_VAL_UNKNOWN) + spinBoxDefault->setValue(spinBoxDefault->minValue()); + else + { + if(inval < c->minVal()) + { + c->setInitVal(c->minVal()); + spinBoxDefault->setValue(c->minVal()); + } + else + if(inval > c->maxVal()) + { + c->setInitVal(c->maxVal()); + spinBoxDefault->setValue(c->maxVal()); + } + } + + spinBoxDefault->blockSignals(false); + + workingInstrument.setDirty(true); +} + +//--------------------------------------------------------- +// ctrlDefaultChanged +//--------------------------------------------------------- + +void EditInstrument::ctrlDefaultChanged(int val) +{ + ListViewData* item = (ListViewData*)viewController->selectedItem(); + if (item == 0) + return; + + MidiController* c = (MidiController*)item->data(); + + if(val == c->minVal() - 1) + { + c->setInitVal(CTRL_VAL_UNKNOWN); + item->setText(COL_DEF, QString("---")); + } + else + { + c->setInitVal(val); + item->setText(COL_DEF, QString().setNum(val)); + } + workingInstrument.setDirty(true); +} + +//--------------------------------------------------------- +// ctrlNullParamHChanged +//--------------------------------------------------------- + +void EditInstrument::ctrlNullParamHChanged(int nvh) +{ + int nvl = nullParamSpinBoxL->value(); + if(nvh == -1) + { + nullParamSpinBoxL->blockSignals(true); + nullParamSpinBoxL->setValue(-1); + nullParamSpinBoxL->blockSignals(false); + nvl = -1; + } + else + { + if(nvl == -1) + { + nullParamSpinBoxL->blockSignals(true); + nullParamSpinBoxL->setValue(0); + nullParamSpinBoxL->blockSignals(false); + nvl = 0; + } + } + if(nvh == -1 && nvl == -1) + workingInstrument.setNullSendValue(-1); + else + workingInstrument.setNullSendValue((nvh << 8) | nvl); + workingInstrument.setDirty(true); +} + +//--------------------------------------------------------- +// ctrlNullParamLChanged +//--------------------------------------------------------- + +void EditInstrument::ctrlNullParamLChanged(int nvl) +{ + int nvh = nullParamSpinBoxH->value(); + if(nvl == -1) + { + nullParamSpinBoxH->blockSignals(true); + nullParamSpinBoxH->setValue(-1); + nullParamSpinBoxH->blockSignals(false); + nvh = -1; + } + else + { + if(nvh == -1) + { + nullParamSpinBoxH->blockSignals(true); + nullParamSpinBoxH->setValue(0); + nullParamSpinBoxH->blockSignals(false); + nvh = 0; + } + } + if(nvh == -1 && nvl == -1) + workingInstrument.setNullSendValue(-1); + else + workingInstrument.setNullSendValue((nvh << 8) | nvl); + workingInstrument.setDirty(true); +} + +//--------------------------------------------------------- +// deletePatchClicked +//--------------------------------------------------------- + +void EditInstrument::deletePatchClicked() + { + //QListWidgetItem* item = instrumentList->currentItem(); +// ListBoxData* item = (ListBoxData*)instrumentList->selectedItem(); +// if (item == 0) +// return; + //MidiInstrument* instrument = (MidiInstrument*)item->data(Qt::UserRole).value(); +// MidiInstrument* instrument = (MidiInstrument*)item->data(); + //QTreeWidgetItem* pi = patchView->currentItem(); + ListViewData* pi = (ListViewData*)patchView->selectedItem(); + if (pi == 0) + return; + + //void* p = pi->data(0, Qt::UserRole).value(); +// Patch* patch = (Patch*)pi->data(); + //if (p == 0) + // If patch is zero it's a patch group. +// if(patch == 0) + + // If the item has a parent item, it's a patch item... + if(pi->parent()) + { + PatchGroup* group = (PatchGroup*)((ListViewData*)pi->parent())->data(); + + // If there is an allocated patch in the data, delete it. + //Patch* patch = (Patch*)pi->auxData(); + Patch* patch = (Patch*)pi->data(); + if(patch) + { + if(group) + { + //for(iPatch ip = group->patches.begin(); ip != group->patches.end(); ++ip) + // if(&*ip == patch) + // if(*ip == patch) + // { + // + // printf("deletePatchClicked: erasing patch\n"); + // + // group->patches.erase(ip); + // break; + // } + //group->patches.remove( (const Patch&)(*patch) ); + group->patches.remove(patch); + } + delete patch; + } + } + else + // The item has no parent item, it's a patch group item... + { + // Is there an allocated patch group in the data? + //PatchGroup* group = (PatchGroup*)pi->auxData(); + PatchGroup* group = (PatchGroup*)pi->data(); + if(group) + { + + PatchGroupList* pg = workingInstrument.groups(); + //for(ciPatchGroup ipg = pg->begin(); ipg != pg->end(); ++ipg) + for(iPatchGroup ipg = pg->begin(); ipg != pg->end(); ++ipg) + { + + //printf("deletePatchClicked: working patch group name:%s ad:%X group name:%s ad:%X\n", (*ipg)->name.latin1(), (unsigned int)(*ipg), group->name.latin1(), (unsigned int) group); + + //if(&*ipg == group) + if(*ipg == group) + { + pg->erase(ipg); + break; + } + } + + // Iterate all child list view (patch) items. Find and delete any allocated patches in the items' data. +// for(ListViewData* i = (ListViewData*)pi->firstChild(); i; i = (ListViewData*)i->nextSibling()) +// { + //Patch* patch = (Patch*)i->auxData(); +// Patch* patch = (Patch*)i->data(); +// if(patch) +// { + //delete patch; + //group->patches.remove(*patch); + const PatchList& pl = group->patches; + for(ciPatch ip = pl.begin(); ip != pl.end(); ++ip) + { +// if(&*ip == patch) +// { +// group->patches.erase(ip); +// break; +// } + + // Delete the patch. + if(*ip) + delete *ip; + } + + //group->patches.clear(); + +// } +// } + + // Now delete the group. + delete group; + + } + } + + //oldPatchItem = (ListViewData*)patchView->selectedItem(); + //oldPatchItem = 0; + + // Now delete the patch or group item (and any child patch items) from the list view tree. + // !!! This will trigger a patchChanged call. + patchView->blockSignals(true); + delete pi; + if(patchView->currentItem()) + patchView->setSelected(patchView->currentItem(), true); + patchView->blockSignals(false); + + oldPatchItem = 0; + patchChanged(); + + //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"); + //delete patch; + //delete pi; + + + workingInstrument.setDirty(true); + } + +//--------------------------------------------------------- +// newPatchClicked +//--------------------------------------------------------- + +void EditInstrument::newPatchClicked() + { + //QListWidgetItem* item = instrumentList->currentItem(); +// ListBoxData* item = (ListBoxData*)instrumentList->selectedItem(); +// if (item == 0) +// return; + + if(oldPatchItem) + { + if(oldPatchItem->parent()) + updatePatch(&workingInstrument, (Patch*)oldPatchItem->data()); + else + updatePatchGroup(&workingInstrument, (PatchGroup*)oldPatchItem->data()); + } + + //MidiInstrument* instrument = (MidiInstrument*)item->data(Qt::UserRole).value(); +// MidiInstrument* instrument = (MidiInstrument*)item->data(); + //std::vector* pg = instrument->groups(); +// PatchGroupList* pg = instrument->groups(); + PatchGroupList* pg = workingInstrument.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 (iPatchGroup g = pg->begin(); g != pg->end(); ++g) { + PatchGroup* pgp = *g; + //for (iPatch p = g->patches.begin(); p != g->patches.end(); ++p) { + for (iPatch p = pgp->patches.begin(); p != pgp->patches.end(); ++p) { + //if (p->name == patchName) { + if ((*p)->name == patchName) { + found = true; + break; + } + } + if (found) + break; + } + if (!found) + break; + } + + // + // search current patch group + // + //PatchGroup* pGroup = 0; + //QTreeWidgetItem* pi = patchView->currentItem(); + ListViewData* pi = (ListViewData*)patchView->selectedItem(); + if (pi == 0) + return; + + // If there is data then pi is a patch item, and there must be a parent patch group item (with null data). + //if (pi->data(0, Qt::UserRole).value()) + //if (pi->data()) + + Patch* selpatch = 0; + + // If there is a parent item then pi is a patch item, and there must be a parent patch group item. + if(pi->parent()) + { + // Remember the current selected patch. + selpatch = (Patch*)pi->data(); + + pi = (ListViewData*)pi->parent(); + } + + PatchGroup* group = (PatchGroup*)pi->data(); + if(!group) + return; + + //for (std::vector::iterator g = pg->begin(); g != pg->end(); ++g) { +// for (ciPatchGroup 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; +// } + + // Create a new Patch, then store its pointer in a new patch item, + // to be added later to the patch group only upon save... + //Patch patch; + //patch.name = patchName; + Patch* patch = new Patch; + int hb = -1; + int lb = -1; + int prg = 0; + patch->hbank = hb; + patch->lbank = lb; + patch->prog = prg; + patch->typ = -1; + patch->drum = false; + + if(selpatch) + { + hb = selpatch->hbank; + lb = selpatch->lbank; + prg = selpatch->prog; + patch->typ = selpatch->typ; + patch->drum = selpatch->drum; + } + + bool found = false; + + // The 129 is to accommodate -1 values. Yes, it may cause one extra redundant loop but hey, + // if it hasn't found an available patch number by then, another loop won't matter. + for(int k = 0; k < 129; ++k) + { + for(int j = 0; j < 129; ++j) + { + for(int i = 0; i < 128; ++i) + { + found = false; + + for(iPatchGroup g = pg->begin(); g != pg->end(); ++g) + { + PatchGroup* pgp = *g; + for(iPatch ip = pgp->patches.begin(); ip != pgp->patches.end(); ++ip) + { + Patch* p = *ip; + if((p->prog == ((prg + i) & 0x7f)) && + ((p->lbank == -1 && lb == -1) || (p->lbank == ((lb + j) & 0x7f))) && + ((p->hbank == -1 && hb == -1) || (p->hbank == ((hb + k) & 0x7f)))) + { + found = true; + break; + } + } + if(found) + break; + } + + if(!found) + { + patch->prog = (prg + i) & 0x7f; + if(lb == -1) + patch->lbank = -1; + else + patch->lbank = (lb + j) & 0x7f; + + if(hb == -1) + patch->hbank = -1; + else + patch->hbank = (hb + k) & 0x7f; + + //patch->typ = selpatch->typ; + //patch->drum = selpatch->drum; + break; + } + + } + if(!found) + break; + } + if(!found) + break; + } + + patch->name = patchName; + + group->patches.push_back(patch); + //Patch* pp = &(group->patches.back()); + + //QTreeWidgetItem* sitem = new QTreeWidgetItem; + ListViewData* sitem = new ListViewData(pi); + //sitem->setText(0, patch->name); + sitem->setText(0, patchName); + + patchNameEdit->setText(patchName); + + //QVariant v = QVariant::fromValue((void*)(patch)); + //sitem->setData(0, Qt::UserRole, v); + + // Set the list view item's data. + sitem->setData((void*)patch); + //sitem->setAuxData((void*)patch); + //sitem->setData((void*)pp); + + //pi->addChild(sitem); + + //printf("newPatchClicked: before patchView->setCurrentItem\n"); + + //patchView->setCurrentItem(sitem); + + //printf("newPatchClicked: after patchView->setCurrentItem\n"); + + //oldPatchItem = 0; + + // May cause patchChanged call. + patchView->blockSignals(true); + patchView->setSelected(sitem, true); + patchView->ensureItemVisible(sitem); + patchView->blockSignals(false); + + //oldPatchItem = (ListViewData*)patchView->selectedItem(); + //oldPatchItem = sitem; + //oldPatchItem = 0; + + spinBoxHBank->setEnabled(true); + spinBoxLBank->setEnabled(true); + spinBoxProgram->setEnabled(true); + checkBoxDrum->setEnabled(true); + checkBoxGM->setEnabled(true); + checkBoxGS->setEnabled(true); + checkBoxXG->setEnabled(true); + + oldPatchItem = 0; + patchChanged(); + + //instrument->setDirty(true); + workingInstrument.setDirty(true); + } + +//--------------------------------------------------------- +// newGroupClicked +//--------------------------------------------------------- + +void EditInstrument::newGroupClicked() + { + //QListWidgetItem* item = instrumentList->currentItem(); +// ListBoxData* item = (ListBoxData*)instrumentList->selectedItem(); +// if (item == 0) +// return; + + if(oldPatchItem) + { + if(oldPatchItem->parent()) + updatePatch(&workingInstrument, (Patch*)oldPatchItem->data()); + else + updatePatchGroup(&workingInstrument, (PatchGroup*)oldPatchItem->data()); + } + + //MidiInstrument* instrument = (MidiInstrument*)item->data(Qt::UserRole).value(); +// MidiInstrument* instrument = (MidiInstrument*)item->data(); + //std::vector* pg = instrument->groups(); +// PatchGroupList* pg = instrument->groups(); + PatchGroupList* pg = workingInstrument.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) { + for (ciPatchGroup g = pg->begin(); g != pg->end(); ++g) { + //if (g->name == groupName) { + if ((*g)->name == groupName) { + found = true; + break; + } + } + if (!found) + break; + } + + // Create a new PatchGroup, then store its pointer in a new patch group item, + // to be added later to the instrument only upon save... + PatchGroup* group = new PatchGroup; + group->name = groupName; + //PatchGroup group; + //group.name = groupName; + + pg->push_back(group); + //PatchGroup* pgp = &(pg->back()); + + //QTreeWidgetItem* sitem = new QTreeWidgetItem; + ListViewData* sitem = new ListViewData(patchView); + sitem->setText(0, groupName); + + patchNameEdit->setText(groupName); + + //QVariant v = QVariant::fromValue((void*)0); + //sitem->setData(0, Qt::UserRole, v); + //sitem->setData((void*)0); + + // Set the list view item's data. + sitem->setData((void*)group); + //sitem->setAuxData((void*)pgp); + + //patchView->addTopLevelItem(sitem); + //patchView->setCurrentItem(sitem); + + //oldPatchItem = 0; + + // May cause patchChanged call. + patchView->blockSignals(true); + patchView->setSelected(sitem, true); + patchView->blockSignals(false); + + //oldPatchItem = (ListViewData*)patchView->selectedItem(); + oldPatchItem = sitem; + //oldPatchItem = 0; + //patchChanged(); + + spinBoxHBank->setEnabled(false); + spinBoxLBank->setEnabled(false); + spinBoxProgram->setEnabled(false); + checkBoxDrum->setEnabled(false); + checkBoxGM->setEnabled(false); + checkBoxGS->setEnabled(false); + checkBoxXG->setEnabled(false); + + //instrument->setDirty(true); + workingInstrument.setDirty(true); + } + +//--------------------------------------------------------- +// deleteControllerClicked +//--------------------------------------------------------- + +void EditInstrument::deleteControllerClicked() + { + //QListWidgetItem* item = instrumentList->currentItem(); + //ListBoxData* item = (ListBoxData*)instrumentList->selectedItem(); + //QListWidgetItem* item2 = listController->currentItem(); +// ListBoxData* item = (ListBoxData*)listController->selectedItem(); + ListViewData* item = (ListViewData*)viewController->selectedItem(); + + //if (item == 0 || item2 == 0) + if(!item) + return; + //MidiInstrument* instrument = (MidiInstrument*)item->data(Qt::UserRole).value(); +// MidiInstrument* instrument = (MidiInstrument*)item->data(); + //MidiController* ctrl = (MidiController*)item2->data(Qt::UserRole).value(); + //MidiController* ctrl = (MidiController*)item2->data(); + //MidiControllerList* cl = instrument->controller(); + //cl->removeAll(ctrl); + + MidiController* ctrl = (MidiController*)item->data(); + if(!ctrl) + return; + + workingInstrument.controller()->erase(ctrl->num()); + // Now delete the controller. + delete ctrl; + + // Now remove the controller item from the list. + // This may cause a controllerChanged call. +// listController->blockSignals(true); + viewController->blockSignals(true); + delete item; + if(viewController->currentItem()) + viewController->setSelected(viewController->currentItem(), true); +// listController->blockSignals(false); + viewController->blockSignals(false); + + //oldController = (ListBoxData*)listController->selectedItem(); +// oldController = 0; + + controllerChanged(); + + //instrument->setDirty(true); + workingInstrument.setDirty(true); + } + +//--------------------------------------------------------- +// newControllerClicked +//--------------------------------------------------------- + +void EditInstrument::newControllerClicked() + { + //QListWidgetItem* item = instrumentList->currentItem(); + //if (item == 0) + // return; + //MidiInstrument* instrument = (MidiInstrument*)item->data(Qt::UserRole).value(); + +// if(oldController) +// updateController(&workingInstrument, (MidiController*)oldController->data()); + + QString cName; + //MidiControllerList* cl = instrument->controller(); + MidiControllerList* cl = workingInstrument.controller(); + for (int i = 1;; ++i) { + //ctrlName = QString("Controller-%d").arg(i); + cName = QString("Controller-%1").arg(i); + bool found = false; + for (iMidiController ic = cl->begin(); ic != cl->end(); ++ic) { + MidiController* c = ic->second; + if (c->name() == cName) { + found = true; + break; + } + } + if (!found) + break; + } + + MidiController* ctrl = new MidiController(); + ctrl->setNum(CTRL_MODULATION); + ctrl->setMinVal(0); + ctrl->setMaxVal(127); + ctrl->setInitVal(CTRL_VAL_UNKNOWN); + + ListViewData* ci = (ListViewData*)viewController->selectedItem(); + + // To allow for quick multiple successive controller creation. + // If there's a current controller item selected, copy initial values from it. + bool found = false; + if(ci) + { + MidiController* selctl = (MidiController*)ci->data(); + // Assign. + // *ctrl = *selctl; + + // Auto increment controller number. + //int l = ctrl->num() & 0x7f; + //int h = ctrl->num() & 0xffffff00; + int l = selctl->num() & 0x7f; + int h = selctl->num() & 0xffffff00; + + // Ignore internal controllers and wild cards. + //if(((h & 0xff0000) != 0x40000) && ((ctrl->num() & 0xff) != 0xff)) + if(((h & 0xff0000) != 0x40000) && ((selctl->num() & 0xff) != 0xff)) + { + // Assign. + *ctrl = *selctl; + + for (int i = 1; i < 128; ++i) + { + //ctrlName = QString("Controller-%d").arg(i); + //cName = QString("Controller-%1").arg(i); + int j = ((i + l) & 0x7f) | h; + found = false; + for (iMidiController ic = cl->begin(); ic != cl->end(); ++ic) + { + MidiController* c = ic->second; + if(c->num() == j) + { + found = true; + break; + } + } + if(!found) + { + ctrl->setNum(j); + break; + } + } + } + } + + ctrl->setName(cName); + + //item = new QListWidgetItem(ctrlName); +// ListBoxData* item = new ListBoxData(ctrlName); + + //QVariant v = qVariantFromValue((void*)(ctrl)); + //item->setData(Qt::UserRole, v); +// item->setData((void*)ctrl); + //listController->addItem(item); +// listController->insertItem(item); + //listController->setCurrentItem(item); + + workingInstrument.controller()->add(ctrl); + ListViewData* item = addControllerToView(ctrl); + +// listController->blockSignals(true); +// listController->setSelected(item, true); +// listController->blockSignals(false); + viewController->blockSignals(true); + viewController->setSelected(item, true); + viewController->blockSignals(false); + + //oldController = (ListBoxData*)listController->selectedItem(); +// oldController = item; + //oldController = 0; + // MidiController is a class, with itialized values. We have to call this to show the values. + // To make multiple entries easier, don't bother calling this. + controllerChanged(); + + //instrument->setDirty(true); + workingInstrument.setDirty(true); + } + +//--------------------------------------------------------- +// addControllerClicked +//--------------------------------------------------------- + +void EditInstrument::addControllerClicked() +{ + //int lnum = listController->currentItem(); + //if(lnum == -1) + // return; + + //QString name = midiCtrlName(lnum); + + int idx = listController->currentItem(); + if(idx == -1) + return; + + int lnum = -1; + QString name = listController->currentText(); + for(int i = 0; i < 128; i++) + { + if(midiCtrlName(i) == name) + { + lnum = i; + break; + } + } + if(lnum == -1) + { + printf("Add controller: Controller not found: %s\n", name.latin1()); + return; + } + + int num = MidiController::genNum(MidiController::Controller7, 0, lnum); + + MidiControllerList* cl = workingInstrument.controller(); + for(iMidiController ic = cl->begin(); ic != cl->end(); ++ic) + { + MidiController* c = ic->second; + if(c->name() == name) + { + QMessageBox::critical(this, + tr("MusE: Cannot add common controller"), + tr("A controller named ") + name + tr(" already exists."), + QMessageBox::Ok, + Qt::NoButton, + Qt::NoButton); + + return; + } + + if(c->num() == num) + { + QMessageBox::critical(this, + tr("MusE: Cannot add common controller"), + tr("A controller number ") + QString().setNum(num) + tr(" already exists."), + QMessageBox::Ok, + Qt::NoButton, + Qt::NoButton); + + return; + } + } + + MidiController* ctrl = new MidiController(); + ctrl->setNum(num); + ctrl->setMinVal(0); + ctrl->setMaxVal(127); + ctrl->setInitVal(CTRL_VAL_UNKNOWN); + ctrl->setName(name); + + workingInstrument.controller()->add(ctrl); + + ListViewData* item = addControllerToView(ctrl); + + viewController->blockSignals(true); + viewController->setSelected(item, true); + viewController->blockSignals(false); + + controllerChanged(); + + workingInstrument.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); + + + + ListBoxData* item = (ListBoxData*)sysexList->selectedItem(); + if(!item) + return; + + EventList* el = (EventList*)item->data(); + if(!el) + return; + + } +*/ + +//--------------------------------------------------------- +// updatePatchGroup +//--------------------------------------------------------- + +void EditInstrument::updatePatchGroup(MidiInstrument* instrument, PatchGroup* pg) + { + if (pg->name != patchNameEdit->text()) { + pg->name = patchNameEdit->text(); + instrument->setDirty(true); + } + } + +//--------------------------------------------------------- +// updatePatch +//--------------------------------------------------------- + +void EditInstrument::updatePatch(MidiInstrument* instrument, Patch* p) + { + if (p->name != patchNameEdit->text()) { + p->name = patchNameEdit->text(); + instrument->setDirty(true); + } + + signed char hb = (spinBoxHBank->value() - 1) & 0xff; + //if (p->hbank != (spinBoxHBank->value() & 0xff)) { + // p->hbank = spinBoxHBank->value() & 0xff; + if (p->hbank != hb) { + p->hbank = hb; + + instrument->setDirty(true); + } + + signed char lb = (spinBoxLBank->value() - 1) & 0xff; + //if (p->lbank != (spinBoxLBank->value() & 0xff)) { + // p->lbank = spinBoxLBank->value() & 0xff; + if (p->lbank != lb) { + p->lbank = lb; + + instrument->setDirty(true); + } + + signed char pr = (spinBoxProgram->value() - 1) & 0xff; + if (p->prog != pr) { + p->prog = pr; + + instrument->setDirty(true); + } + + if (p->drum != checkBoxDrum->isChecked()) { + p->drum = checkBoxDrum->isChecked(); + 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); + // } + } + +/* +//--------------------------------------------------------- +// updateController +//--------------------------------------------------------- + +void EditInstrument::updateController(MidiInstrument* instrument, MidiController* oc) + { + printf("updateController: A\n"); + + int ctrlH = spinBoxHCtrlNo->value(); + int ctrlL = spinBoxLCtrlNo->value(); + //MidiController::ControllerType type = (MidiController::ControllerType)ctrlType->currentIndex(); + MidiController::ControllerType type = (MidiController::ControllerType)ctrlType->currentItem(); + int num = MidiController::genNum(type, ctrlH, ctrlL); + //int num = (ctrlH << 8) & 0x7f + ctrlL & 0x7f; + + printf("updateController: B\n"); + + if (num != oc->num()) { + + printf("updateController: num changed, setting dirty. num:%d c->num:%d\n", num, oc->num()); + + oc->setNum(num); + instrument->setDirty(true); + } + + if(type != MidiController::Pitch && type != MidiController::Program) + { + if (spinBoxMin->value() != oc->minVal()) { + + printf("updateController: min changed, setting dirty. min:%d c->min:%d\n", spinBoxMin->value(), oc->minVal()); + + oc->setMinVal(spinBoxMin->value()); + instrument->setDirty(true); + } + if (spinBoxMax->value() != oc->maxVal()) { + + printf("updateController: max changed, setting dirty. num:%d max:%d c->max:%d\n", num, spinBoxMax->value(), oc->maxVal()); + + oc->setMaxVal(spinBoxMax->value()); + instrument->setDirty(true); + } + + int dv = spinBoxDefault->value(); + if(dv == oc->minVal() - 1) + dv = CTRL_VAL_UNKNOWN; + + //if (spinBoxDefault->value() != oc->initVal()) { + if(dv != oc->initVal()) { + //oc->setInitVal(spinBoxDefault->value()); + oc->setInitVal(dv); + + printf("updateController: default changed, setting dirty. def:%d c->init:%d\n", dv, oc->initVal()); + + instrument->setDirty(true); + } + } + + + printf("updateController: C\n"); + + //if (moveWithPart->isChecked() ^ oc->moveWithPart()) { + // oc->setMoveWithPart(moveWithPart->isChecked()); + // instrument->setDirty(true); + // } + if (ctrlName->text() != oc->name()) { + oc->setName(ctrlName->text()); + + printf("updateController: name changed, setting dirty. name:%s c->name:%s\n", ctrlName->text().latin1(), oc->name().latin1()); + + instrument->setDirty(true); + } + //if (ctrlComment->toPlainText() != oc->comment()) { + // oc->setComment(ctrlComment->toPlainText()); + // instrument->setDirty(true); + // } + + printf("updateController: D\n"); + + } +*/ + +//--------------------------------------------------------- +// updateInstrument +//--------------------------------------------------------- + +void EditInstrument::updateInstrument(MidiInstrument* instrument) + { + //QListWidgetItem* sysexItem = sysexList->currentItem(); + //ListBoxData* sysexItem = sysexList->currentItem(); + //if (sysexItem) { + // SysEx* so = (SysEx*)sysexItem->data(Qt::UserRole).value(); + // updateSysex(instrument, so); + // } + + //QListWidgetItem* ctrlItem = listController->currentItem(); + //ListBoxData* ctrlItem = (ListBoxData*)listController->currentItem(); + //ListBoxData* ctrlItem = (ListBoxData*)listController->selectedItem(); +// ListViewData* ctrlItem = (ListViewData*)viewController->selectedItem(); + +// if (ctrlItem) { + //MidiController* ctrl = (MidiController*)ctrlItem->data(Qt::UserRole).value(); + +// printf("updateInstrument: AB\n"); + +// MidiController* ctrl = (MidiController*)ctrlItem->data(); + +// printf("updateInstrument: AC\n"); + +// updateController(instrument, ctrl); +// } + +// printf("updateInstrument: B\n"); + + //QTreeWidgetItem* patchItem = patchView->currentItem(); + ListViewData* patchItem = (ListViewData*)patchView->selectedItem(); + if (patchItem) + { + //Patch* p = (Patch*)patchItem->data(0, Qt::UserRole).value(); + + // If the item has a parent, it's a patch item. + if(patchItem->parent()) + updatePatch(instrument, (Patch*)patchItem->data()); + else + updatePatchGroup(instrument, (PatchGroup*)patchItem->data()); + + } + } + +//--------------------------------------------------------- +// checkDirty +// return true on Abort +//--------------------------------------------------------- + +int EditInstrument::checkDirty(MidiInstrument* i, bool isClose) + { + updateInstrument(i); + if (!i->dirty()) + //return false; + return 0; + int n; + if(isClose) + 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); + else + n = QMessageBox::warning(this, tr("MusE"), + tr("The current Instrument contains unsaved data\n" + "Save Current Instrument?"), + tr("&Save"), tr("&Nosave"), 0, 1); + if (n == 0) { + if (i->filePath().isEmpty()) + { + //fileSaveAs(); + saveAs(); + } + else { + //QFile f(i->filePath()); + //if (!f.open(QIODevice::WriteOnly)) + FILE* f = fopen(i->filePath().latin1(), "w"); + if(f == 0) + //fileSaveAs(); + saveAs(); + else { + //f.close(); + if(fclose(f) != 0) + printf("EditInstrument::checkDirty: Error closing file\n"); + + if(fileSave(i, i->filePath())) + i->setDirty(false); + } + } + //return false; + return 0; + } + //return n == 2; + return n; + } + +//--------------------------------------------------------- +// getPatchItemText +//--------------------------------------------------------- + +QString EditInstrument::getPatchItemText(int val) +{ + QString s; + if(val == CTRL_VAL_UNKNOWN) + s = "---"; + else + { + int hb = ((val >> 16) & 0xff) + 1; + if (hb == 0x100) + hb = 0; + int lb = ((val >> 8) & 0xff) + 1; + if (lb == 0x100) + lb = 0; + int pr = (val & 0xff) + 1; + if (pr == 0x100) + pr = 0; + s.sprintf("%d-%d-%d", hb, lb, pr); + } + + return s; +} + +//--------------------------------------------------------- +// enableDefaultControls +//--------------------------------------------------------- + +void EditInstrument::enableDefaultControls(bool enVal, bool enPatch) +{ + spinBoxDefault->setEnabled(enVal); + patchButton->setEnabled(enPatch); + if(!enPatch) + { + patchButton->blockSignals(true); + patchButton->setText("---"); + patchButton->blockSignals(false); + } + defPatchH->setEnabled(enPatch); + defPatchL->setEnabled(enPatch); + defPatchProg->setEnabled(enPatch); +} + +//--------------------------------------------------------- +// setDefaultPatchName +//--------------------------------------------------------- + +void EditInstrument::setDefaultPatchName(int val) +{ + const char* patchname = getPatchName(val); + patchButton->blockSignals(true); + patchButton->setText(QString(patchname)); + patchButton->blockSignals(false); +} + +//--------------------------------------------------------- +// getDefaultPatchNumber +//--------------------------------------------------------- + +int EditInstrument::getDefaultPatchNumber() +{ + int hval = defPatchH->value() - 1; + int lval = defPatchL->value() - 1; + int prog = defPatchProg->value() - 1; + if(hval == -1) + hval = 0xff; + if(lval == -1) + lval = 0xff; + if(prog == -1) + prog = 0xff; + + return ((hval & 0xff) << 16) + ((lval & 0xff) << 8) + (prog & 0xff); +} + +//--------------------------------------------------------- +// setDefaultPatchNumbers +//--------------------------------------------------------- + +void EditInstrument::setDefaultPatchNumbers(int val) +{ + int hb; + int lb; + int pr; + + if(val == CTRL_VAL_UNKNOWN) + hb = lb = pr = 0; + else + { + hb = ((val >> 16) & 0xff) + 1; + if (hb == 0x100) + hb = 0; + lb = ((val >> 8) & 0xff) + 1; + if (lb == 0x100) + lb = 0; + pr = (val & 0xff) + 1; + if (pr == 0x100) + pr = 0; + } + + defPatchH->blockSignals(true); + defPatchL->blockSignals(true); + defPatchProg->blockSignals(true); + defPatchH->setValue(hb); + defPatchL->setValue(lb); + defPatchProg->setValue(pr); + defPatchH->blockSignals(false); + defPatchL->blockSignals(false); + defPatchProg->blockSignals(false); +} + +//--------------------------------------------------------- +// setDefaultPatchControls +//--------------------------------------------------------- + +void EditInstrument::setDefaultPatchControls(int val) +{ + setDefaultPatchNumbers(val); + setDefaultPatchName(val); +} + +//--------------------------------------------------------- +// getPatchName +//--------------------------------------------------------- + +const char* EditInstrument::getPatchName(int prog) +{ + int pr = prog & 0xff; + if(prog == CTRL_VAL_UNKNOWN || pr == 0xff) + return "---"; + + //int hbank = (prog >> 16) & 0x7f; + //int lbank = (prog >> 8) & 0x7f; + int hbank = (prog >> 16) & 0xff; + int lbank = (prog >> 8) & 0xff; + + PatchGroupList* pg = workingInstrument.groups(); + + for(ciPatchGroup i = pg->begin(); i != pg->end(); ++i) { + const PatchList& pl = (*i)->patches; + for (ciPatch ipl = pl.begin(); ipl != pl.end(); ++ipl) { + const Patch* mp = *ipl; + if (//(mp->typ & tmask) && + (pr == mp->prog) + //&& ((drum && mode != MT_GM) || + // (mp->drum == drumchan)) + + //&& (hbank == mp->hbank || !hb || mp->hbank == -1) + //&& (lbank == mp->lbank || !lb || mp->lbank == -1)) + && (hbank == mp->hbank || mp->hbank == -1) + && (lbank == mp->lbank || mp->lbank == -1)) + return mp->name.latin1(); + } + } + return "---"; +} + diff --git a/muse2/muse/instruments/editinstrument.h b/muse2/muse/instruments/editinstrument.h new file mode 100644 index 00000000..ef01f525 --- /dev/null +++ b/muse2/muse/instruments/editinstrument.h @@ -0,0 +1,92 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: editinstrument.h,v 1.1.1.1.2.4 2009/05/31 05:12:12 terminator356 Exp $ +// +// (C) Copyright 2003 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __EDITINSTRUMENT_H__ +#define __EDITINSTRUMENT_H__ + +#include "editinstrumentbase.h" +#include "minstrument.h" +#include "midictrl.h" +//Added by qt3to4: +#include +#include +class ListBoxData; +class ListViewData; + +//--------------------------------------------------------- +// EditInstrument +//--------------------------------------------------------- + +class EditInstrument : public EditInstrumentBase { + Q_OBJECT + + MidiInstrument workingInstrument; + ListBoxData* oldMidiInstrument; + ListViewData* oldPatchItem; + void closeEvent(QCloseEvent*); + int checkDirty(MidiInstrument*, bool isClose = false); + bool fileSave(MidiInstrument*, const QString&); + void saveAs(); + void updateInstrument(MidiInstrument*); + void updatePatch(MidiInstrument*, Patch*); + void updatePatchGroup(MidiInstrument*, PatchGroup*); + void changeInstrument(); + ListViewData* addControllerToView(MidiController* mctrl); + QString getPatchItemText(int); + void enableDefaultControls(bool, bool); + void setDefaultPatchName(int); + int getDefaultPatchNumber(); + void setDefaultPatchNumbers(int); + void setDefaultPatchControls(int); + const char* getPatchName(int); + void deleteInstrument(ListBoxData*); + Q3PopupMenu* patchpopup; + + private slots: + virtual void fileNew(); + virtual void fileOpen(); + virtual void fileSave(); + virtual void fileSaveAs(); + virtual void fileExit(); + virtual void helpWhatsThis(); + void instrumentChanged(); + void tabChanged(QWidget*); + void patchChanged(); + void controllerChanged(); + //void instrumentNameChanged(const QString&); + void instrumentNameReturn(); + void patchNameReturn(); + void deletePatchClicked(); + void newPatchClicked(); + void newGroupClicked(); + void patchButtonClicked(); + void defPatchChanged(int); + //void newCategoryClicked(); + void deleteControllerClicked(); + void newControllerClicked(); + void addControllerClicked(); + void ctrlTypeChanged(int); + //void ctrlNameChanged(const QString&); + void ctrlNameReturn(); + void ctrlHNumChanged(int); + void ctrlLNumChanged(int); + void ctrlMinChanged(int); + void ctrlMaxChanged(int); + void ctrlDefaultChanged(int); + //void sysexChanged(); + //void deleteSysexClicked(); + //void newSysexClicked(); + void ctrlNullParamHChanged(int); + void ctrlNullParamLChanged(int); + + public: + EditInstrument(QWidget* parent = 0, const char* name = 0, Qt::WFlags fl = Qt::WType_TopLevel); + }; + +#endif + diff --git a/muse2/muse/instruments/editinstrumentbase.ui b/muse2/muse/instruments/editinstrumentbase.ui new file mode 100644 index 00000000..8f5ecc7b --- /dev/null +++ b/muse2/muse/instruments/editinstrumentbase.ui @@ -0,0 +1,1840 @@ + +EditInstrumentBase + + + Form1 + + + + 0 + 0 + 802 + 505 + + + + + 802 + 464 + + + + MusE: Instrument Editor + + + + unnamed + + + + splitter4 + + + + 780 + 365 + + + + Horizontal + + + + layout26 + + + + unnamed + + + + textLabel2 + + + Instrument Name: + + + + + instrumentName + + + + + + Selected instrument name. + + + + + instrumentList + + + List of defined instruments. + + + + + + + tabWidget3 + + + true + + + + patchesTab + + + Pa&tches + + + + unnamed + + + + splitter5 + + + Horizontal + + + + + Group/Patch + + + true + + + true + + + + patchView + + + + 7 + 7 + 0 + 0 + + + + true + + + true + + + + + + List of groups and patches. + + + + + layout26 + + + + unnamed + + + + groupBox2 + + + Properties + + + + unnamed + + + + textLabelPatchName + + + Name: + + + + + patchNameEdit + + + Group or patch name + + + Group or patch name + + + + + textLabel2_2 + + + High Bank: + + + + + layout22 + + + + unnamed + + + + spinBoxHBank + + + --- + dont care + + + 128 + + + 0 + + + 0 + + + Patch high bank number + + + Patch high bank number. --- means don't care. + + + + + spacer8 + + + Horizontal + + + Expanding + + + + 373 + 20 + + + + + + + + textLabel3_2 + + + Low Bank: + + + + + layout23 + + + + unnamed + + + + spinBoxLBank + + + --- + + + 128 + + + 0 + + + 0 + + + Patch low bank number + + + Patch low bank number. --- means don't care. + + + + + spacer9 + + + Horizontal + + + Expanding + + + + 373 + 20 + + + + + + + + textLabel4_3 + + + Program: + + + + + layout24 + + + + unnamed + + + + spinBoxProgram + + + 128 + + + 1 + + + 1 + + + Patch program number + + + Patch program number + + + + + spacer10 + + + Horizontal + + + Expanding + + + + 373 + 20 + + + + + + + + layout6 + + + + unnamed + + + + checkBoxDrum + + + Drum + + + + + + Drum patch + + + If set, the patch is available only for drum channels. + + + + + checkBoxGM + + + GM + + + + + + GM patch + + + If set, the patch is available in a 'GM' or 'NO' midi song type. + + + + + checkBoxGS + + + GS + + + GS patch + + + If set, the patch is available in a 'GS' or 'NO' midi song type. + + + + + checkBoxXG + + + XG + + + XG patch + + + If set, the patch is available in an 'XG' or 'NO' midi song type. + + + + + + + + + spacer7 + + + Vertical + + + Expanding + + + + 20 + 90 + + + + + + layout5 + + + + unnamed + + + + patchDelete + + + + 5 + 0 + 0 + 0 + + + + &Delete + + + Alt+D + + + Delete group or patch + + + + + patchNew + + + + 5 + 1 + 0 + 0 + + + + New &Patch + + + Alt+P + + + New patch + + + + + patchNewGroup + + + New &Group + + + Alt+G + + + New group + + + + + spacer11 + + + Horizontal + + + Expanding + + + + 240 + 20 + + + + + + + + + + + + + controllerTab + + + Contro&ller + + + + unnamed + + + + splitter4 + + + Horizontal + + + + layout13 + + + + unnamed + + + + textLabel1 + + + + 5 + 0 + 0 + 0 + + + + Common: + + + + + listController + + + false + + + + + + This is a list of commonly used midi controllers. +Note that in MusE pitch and program changes are +handled like normal controllers. + + + + + + + layout17 + + + + unnamed + + + + + Name + + + true + + + true + + + + + Type + + + true + + + true + + + + + H-Ctrl + + + true + + + false + + + + + L-Ctrl + + + true + + + false + + + + + Min + + + true + + + false + + + + + Max + + + true + + + false + + + + + Def + + + true + + + false + + + + viewController + + + StyledPanel + + + Sunken + + + true + + + List of defined controllers + + + List of defined controllers. + + + + + GroupBox1 + + + + 1 + 5 + 0 + 0 + + + + Properties + + + + unnamed + + + + layout33 + + + + unnamed + + + + TextLabel1_3 + + + Name: + + + + + ctrlName + + + + + + Midi controller name + + + + + + + layout37 + + + + unnamed + + + + TextLabel2_4 + + + Type: + + + + + + Control7 + + + + + Control14 + + + + + RPN + + + + + NRPN + + + + + RPN14 + + + + + NRPN14 + + + + + Pitch + + + + + Program + + + + ctrlType + + + Midi controller type + + + Midi controller type + + + + + spacer15 + + + Horizontal + + + Expanding + + + + 40 + 20 + + + + + + TextLabel3_2 + + + H-Ctrl + + + 10 + + + + + spinBoxHCtrlNo + + + + 7 + 0 + 0 + 0 + + + + 127 + + + 0 + + + 0 + + + Midi controller number high byte + + + Midi controller number high byte + + + + + spacer16 + + + Horizontal + + + Expanding + + + + 40 + 20 + + + + + + TextLabel2_3_2 + + + L-Ctrl + + + 10 + + + + + spinBoxLCtrlNo + + + + 7 + 0 + 0 + 0 + + + + * + wild card + + + 127 + + + -1 + + + 0 + + + Midi controller number low byte (* means drum controller) + + + Midi controller number low byte. +If low byte is * then the controller is a + 'drum controller'. For drum tracks and + GS/XG type songs and instruments. +Allows controllers for each instrument in + Muse's drum map. The low byte will be + replaced by the 'ANote' in the drum map. +Examples: The GS and XG instruments' + Drum controllers. + + + + + + + layout38 + + + + unnamed + + + + textLabel4_2 + + + Range: + + + + + spacer17 + + + Horizontal + + + Expanding + + + + 40 + 20 + + + + + + TextLabel1_2_2 + + + Min + + + AlignVCenter|AlignRight + + + 10 + + + + + spinBoxMin + + + + 7 + 0 + 0 + 0 + + + + 16383 + + + -16384 + + + Minimum value. If negative, auto-translate. + + + Minimum value. If the minimum value + is negative, the range will automatically + be translated to a positive range. + +Useful for controllers which should be + displayed with zero bias. For example, +'Pan': Minimum: -64 Maximum: 63 +True range: Min: 0 Max: 127 (bias = 64) +'CoarseTuning': Min: -24 Max: 23 +True range: Min: 40 Max: 87 (bias = 64) + +Bias is determined from controller type: +7-bit Controller7 / RPN: Bias = 64 +14-bit Controller14 / RPN14: Bias = 8192 + +Type 'Pitch' is the exception. It is biased + at zero, even with a negative minimum: +'Pitch': Min: -8192 Max: 8191 +True range: Min: -8192 Max: 8191 (bias 0) + + + + + spacer18 + + + Horizontal + + + Expanding + + + + 40 + 20 + + + + + + TextLabel2_2_2 + + + Max + + + AlignVCenter|AlignRight + + + 10 + + + + + spinBoxMax + + + + 7 + 0 + 0 + 0 + + + + 16383 + + + -16384 + + + 127 + + + Maximum value + + + Maximum value + + + + + + + layout16 + + + + unnamed + + + + spacer13_2 + + + Horizontal + + + Expanding + + + + 40 + 20 + + + + + + textLabel1_3 + + + Default: + + + AlignVCenter + + + + + textLabel2_4 + + + L-Bank + + + + + defPatchH + + + off + + + 128 + + + 0 + + + 0 + + + + + defPatchL + + + off + + + 128 + + + 0 + + + 0 + + + + + textLabel3 + + + Progr. + + + + + defPatchProg + + + off + + + 128 + + + 0 + + + 0 + + + + + patchButton + + + true + + + + 210 + 0 + + + + ??? + + + + + + + + textLabel1_5 + + + H-Bank + + + + + spacer12_2 + + + Horizontal + + + Expanding + + + + 40 + 20 + + + + + + spinBoxDefault + + + + 7 + 0 + 0 + 0 + + + + + 0 + 0 + + + + + 85 + 32767 + + + + off + dont care + + + 16383 + + + -1 + + + -1 + + + Default value. Off: No default. + + + Default (initial) value. Off means no default. + +If a default value is chosen, the value will be sent + to the controller when the controller is added to + the song (in piano roll or event editor). When + the song is re-loaded, the value is sent again. +Otherwise the controller remains at its last value. +Controllers are also automatically added to a + song upon reception of a midi controller event. + +Caution! Watch out for controllers such as + 'Sustain' and 'ResetAllController' with default + values. You should probably turn 'off' their + default (in piano roll or drum edit, and + instrument editor). + + + + + + + + + layout10 + + + + unnamed + + + + addController + + + &Add + + + Alt+A + + + Add common controller + + + + + deleteController + + + &Delete + + + Alt+D + + + Delete controller + + + + + newController + + + New &Controller + + + Alt+C + + + Create a new controller + + + + + spacer13 + + + Horizontal + + + Expanding + + + + 200 + 20 + + + + + + nullValLabelH + + + Null Param Hi: + + + + + nullParamSpinBoxH + + + off + + + 127 + + + -1 + + + 127 + + + Null parameter number High byte + + + If set, these 'null' parameter numbers will + be sent after each RPN/NRPN event. +This prevents subsequent 'data' events + from corrupting the RPN/NRPN controller. +Typically, set to 127/127, or an unused + RPN/NRPN controller number. + + + + + spacer13_3 + + + Horizontal + + + Expanding + + + + 200 + 20 + + + + + + nullValLabelL + + + Lo: + + + + + nullParamSpinBoxL + + + off + + + 127 + + + -1 + + + 127 + + + Null parameter number Low byte + + + If set, these 'null' parameter numbers will + be sent after each RPN/NRPN event. +This prevents subsequent 'data' events + from corrupting the RPN/NRPN controller. +Typically, set to 127/127, or an unused + RPN/NRPN controller number. + + + + + + + + + + + + sysExTab + + + S&ysEx + + + + unnamed + + + + splitter2 + + + Horizontal + + + + layout12 + + + + unnamed + + + + textLabel2_3 + + + SysEx List: + + + + + sysexList + + + + 7 + 7 + 0 + 0 + + + + + + + + layout11 + + + + unnamed + + + + textLabel1_4 + + + Name: + + + + + sysexName + + + + + textLabel1_2 + + + Hex Entry: + + + + + sysexData + + + + + layout10 + + + + unnamed + + + + deleteSysex + + + &Delete + + + Alt+D + + + + + newSysex + + + New SysE&x + + + Alt+X + + + + + spacer12 + + + Horizontal + + + Expanding + + + + 60 + 20 + + + + + + + + + + + + + + + + + MenuBar + + + false + + + + + + + + + + + + + + + + + toolBar + + + Tools + + + + + + + + + + + + fileNewAction + + + image0 + + + New + + + &New + + + Ctrl+N + + + + + fileOpenAction + + + false + + + image1 + + + Open + + + &Open... + + + Ctrl+O + + + false + + + + + fileSaveAction + + + image2 + + + Save + + + &Save + + + Ctrl+S + + + + + fileSaveAsAction + + + image3 + + + Save As + + + Save &As... + + + + + + + + fileExitAction + + + Exit + + + E&xit + + + + + + + + filenew_itemAction + + + new item + + + new item + + + + + whatsThisAction + + + image4 + + + What's this? + + + What's this? + + + + + + 89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000008249444154388ded95310ac0200c4593d2c334d0c535e0d2c3e75ae9d442353521e0e60741233ee5f355141198a1bd2d30b346168a088ee637aba8aabf0d00804e720f60823d95525c7867454474d0db6766b56c4981af7a7dc6163c05e6ca7dad81a7c088c340e4c04f32bccd52a98868811778810732af74e42df084b3febc6956dc1a2d33a3204eed990000000049454e44ae426082 + + + 89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000000ad49444154388db594510ec3200c436db45371b7699a76375f8b7d8caa11cd18d1827f225af1621908256187ca16ea4ef02dbaa1d6daec5a12c7ff9218021f9bbc4692689b32ebf02c541253321ee3017ac6bf728b420180005a6b00d08e25c835eecc403fbc130ab077e2e57ba47931c68375aee2395eab73b91947b3f6e4666ca1af670c787f7caa9bf1bf50f34072a117c7595003ce859e56bbb2a08019f4995060f5b67fd16c56a4cde3516f027970cd357a563f0000000049454e44ae426082 + + + 89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000000ad49444154388dd595c10a85201045af0f172e5af83d0afd5944f4670f9aef69e1a25d2d62c2b230c302cf460c3b5ca7310511e10d24001863e69c52221292277db78e4d0b0cff2149646bbbbd636b0b00f8650a1920e34bce514e63aac66dce49996862e53494d3c1735f0aaca5e472de123f255a8a63b2bbbc96b83c7150e3be0b5b2786df0d97e2ab85a97cdb6e4d9b2e3aeef2f191f67f5467dfa4bc762b4f2cf8cecb753d1191d88973b300c3df2bac2a2aaca70000000049454e44ae426082 + + + 89504e470d0a1a0a0000000d49484452000000100000001008060000001ff3ff61000000cf49444154388da593410ec2300c0467090f4a8f3df421fd425f013f834b7af5872273a0a952a010c0926545ceaed6eb4480f3471c00628c009c3801978fb5c60870774712ee6d62246d15745df7b5f4a2e0f0d838eb8c74ddadafc2638cbe8cd21435a65981a43501ccac5d41e9d577b8afdf8fb529b5bb9b19df6ce7581f8ab37598d92ef113c1e36c2d0a36269a19ee4e4a49a5ee225f1100ccf3ac699a7c1c4772ce1f9fe6d3087ddfafa01082007fe781587e638c113323a5a49cb3871036b500866158cd36334829b190fc94376721c8f72ecfaff50000000049454e44ae426082 + + + 89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000000ba49444154388dd594db0980300c451371aa0c90b93a5707b86be957306dd387423fbc206221a7370fc30068878e2dd45f824fff212217001e0588e4ab3e4b8948558bb8c6b18834813514500694537ac039971786a588e006351851e9d29f77c133e72b1a36cfc37dda269f7eed98fd0fd273d96ba82f4fddbc330a6801edb4f8464631cb73ecb3891a596bea7836d7afc000783415bdf4bd9a5298437bf766da9e25f0d7b423f16c1f9be3b7976edb6e53c75ff5bf45bf0d7c034d505e874a59314b0000000049454e44ae426082 + + + + + fileNewAction + activated() + Form1 + fileNew() + + + fileOpenAction + activated() + Form1 + fileOpen() + + + fileSaveAction + activated() + Form1 + fileSave() + + + fileSaveAsAction + activated() + Form1 + fileSaveAs() + + + fileExitAction + activated() + Form1 + fileExit() + + + whatsThisAction + activated() + Form1 + helpWhatsThis() + + + + instrumentName + instrumentList + tabWidget3 + patchView + patchNameEdit + spinBoxHBank + spinBoxLBank + spinBoxProgram + checkBoxDrum + checkBoxGM + checkBoxGS + checkBoxXG + listController + viewController + ctrlName + ctrlType + spinBoxHCtrlNo + spinBoxLCtrlNo + spinBoxMin + spinBoxMax + spinBoxDefault + sysexList + sysexName + sysexData + + + fileNew() + fileOpen() + fileSave() + fileSaveAs() + fileExit() + helpWhatsThis() + + + diff --git a/muse2/muse/instruments/midictrledit.cpp b/muse2/muse/instruments/midictrledit.cpp new file mode 100644 index 00000000..6577b65f --- /dev/null +++ b/muse2/muse/instruments/midictrledit.cpp @@ -0,0 +1,733 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: midictrledit.cpp,v 1.1.1.1.2.2 2008/08/18 00:15:24 terminator356 Exp $ +// +// (C) Copyright 2003 Werner Schweer (ws@seh.de) +//========================================================= + +#include + +#include "app.h" +#include "midiport.h" +#include "mididev.h" +#include "midictrl.h" +#include "midictrledit.h" +#include "minstrument.h" +#include "song.h" +#include "xml.h" +#include "filedialog.h" +#include "globals.h" + +#include +#include +#include +#include +#include +#include +#include + +MidiControllerEditDialog* midiControllerEditDialog; + +static MidiController predefinedMidiController[] = { + MidiController(QString("Pitch"), 0x40000, -8192, +8191, 0), + }; +enum { + COL_NAME = 0, COL_TYPE, + COL_HNUM, COL_LNUM, COL_MIN, COL_MAX + }; +//--------------------------------------------------------- +// addControllerToView +//--------------------------------------------------------- + +void MidiControllerEditDialog::addControllerToView(MidiController* mctrl) + { + QString hnum; + QString lnum; + QString min; + QString max; + int n = mctrl->num(); + int h = (n >> 8) & 0x7f; + int l = n & 0x7f; + MidiController::ControllerType t = midiControllerType(n); + switch(t) + { + case MidiController::Controller7: + hnum = "---"; + lnum.setNum(l); + min.setNum(mctrl->minVal()); + max.setNum(mctrl->maxVal()); + break; + case MidiController::RPN: + case MidiController::NRPN: + case MidiController::RPN14: + case MidiController::NRPN14: + case MidiController::Controller14: + hnum.setNum(h); + lnum.setNum(l); + min.setNum(mctrl->minVal()); + max.setNum(mctrl->maxVal()); + break; + case MidiController::Pitch: + hnum = "---"; + lnum = "---"; + min.setNum(mctrl->minVal()); + max.setNum(mctrl->maxVal()); + break; + default: + hnum = "---"; + lnum = "---"; + min.setNum(0); + max.setNum(0); + break; + } + + new Q3ListViewItem(viewController, + mctrl->name(), + int2ctrlType(t), + hnum, lnum, min, max + ); + + } +//--------------------------------------------------------- +// MidiControllerEditDialog +//--------------------------------------------------------- + +MidiControllerEditDialog::MidiControllerEditDialog(QWidget* parent, const char* name, bool modal, Qt::WFlags fl) + : MidiControllerEditDialogBase(parent, name, modal, fl) + { + _lastPort = midiPortsList->currentItem(); + viewController->setColumnAlignment(COL_HNUM, Qt::AlignCenter); + viewController->setColumnAlignment(COL_LNUM, Qt::AlignCenter); + viewController->setColumnAlignment(COL_MIN, Qt::AlignCenter); + viewController->setColumnAlignment(COL_MAX, Qt::AlignCenter); + viewController->setColumnWidthMode(COL_NAME, Q3ListView::Maximum); + + // populate list of predefined controller + updatePredefinedList(); + + // populate ports pulldown + updateMidiPortsList(); + 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())); + connect(buttonApply, SIGNAL(clicked()), SLOT(apply())); + connect(midiPortsList, SIGNAL(activated(int)), SLOT(portChanged(int))); + + updateViewController(); + _modified = false; + buttonApply->setEnabled(false); + connect(song, SIGNAL(songChanged(int)), SLOT(songChanged(int))); + } + +//--------------------------------------------------------- +// songChanged +//--------------------------------------------------------- + +void MidiControllerEditDialog::songChanged(int flags) +{ + // Is it simply a midi controller value adjustment? Forget it. + if(flags == SC_MIDI_CONTROLLER) + return; + + if(flags & (SC_CONFIG | SC_MIDI_CONTROLLER)) + //if(flags & (SC_CONFIG | SC_MIDI_CONTROLLER_ADD)) + { + //listController->blockSignals(true); + midiPortsList->blockSignals(true); + //viewController->blockSignals(true); + updatePredefinedList(); + updateMidiPortsList(); + updateViewController(); + //viewController->setCurrentItem(viewController->firstChild()); + //controllerChanged(viewController->currentItem()); + //listController->blockSignals(false); + midiPortsList->blockSignals(false); + //viewController->blockSignals(false); + } +} + +//--------------------------------------------------------- +// updatePredefinedList +//--------------------------------------------------------- + +void MidiControllerEditDialog::updatePredefinedList() +{ + listController->clear(); + int size = sizeof(predefinedMidiController) / sizeof(*predefinedMidiController); + for (int i = 0; i < size; ++i) + listController->insertItem(predefinedMidiController[i].name()); + listController->setSelected(0, true); +} + +//--------------------------------------------------------- +// updateMidiPortsList +//--------------------------------------------------------- + +void MidiControllerEditDialog::updateMidiPortsList() +{ + midiPortsList->clear(); + 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); + } + _lastPort = midiPortsList->currentItem(); +} + +//--------------------------------------------------------- +// updateViewController +//--------------------------------------------------------- + +void MidiControllerEditDialog::updateViewController() +{ + //for (iMidiController i = midiControllerList.begin(); + // i != midiControllerList.end(); ++i) { + // addControllerToView(&*i); + int mpidx = midiPortsList->currentItem(); + + viewController->clear(); + //MidiControllerList* mcl; + MidiInstrument* mi = midiPorts[mpidx].instrument(); + //if(mi) + MidiControllerList* mcl = mi->controller(); + //else + // mcl = &defaultMidiController; + for (iMidiController i = mcl->begin(); i != mcl->end(); ++i) + addControllerToView(*i); + + viewController->blockSignals(true); + viewController->setCurrentItem(viewController->firstChild()); + controllerChanged(viewController->currentItem()); + viewController->blockSignals(false); + + setModified(false); +} + +//--------------------------------------------------------- +// reject +//--------------------------------------------------------- + +void MidiControllerEditDialog::setModified(bool v) +{ + if(v == _modified) + return; + + _modified = v; + + if(v) + { + buttonApply->setEnabled(true); + } + else + { + buttonApply->setEnabled(false); + } +} + +//--------------------------------------------------------- +// reject +//--------------------------------------------------------- + +void MidiControllerEditDialog::reject() + { + //MidiControllerList* mcl; +// MidiInstrument* mi = midiPorts[mpidx].instrument(); + //if(mi) +// MidiControllerList* mcl = mi->controller(); + //else + // mcl = &defaultMidiController; +// for (iMidiController i = mcl->begin(); i != mcl->end(); ++i) +// addControllerToView(*i); + + // Restore the list before closing this dialog. + updateViewController(); + //setModified(false); + + MidiControllerEditDialogBase::reject(); + } + +//--------------------------------------------------------- +// apply +//--------------------------------------------------------- + +void MidiControllerEditDialog::apply() +{ + int mpidx = midiPortsList->currentItem(); + //MidiControllerList* mcl; + MidiInstrument* mi = midiPorts[mpidx].instrument(); + //if(mi) + MidiControllerList* mcl = mi->controller(); + //else + // mcl = &defaultMidiController; + mcl->clear(); + + + Q3ListViewItem* item = viewController->firstChild(); + int hval; + int lval; + while (item) { + hval = item->text(COL_HNUM).toInt(); + lval = item->text(COL_LNUM).toInt(); + MidiController* c = new MidiController(); + c->setName(item->text(COL_NAME)); + + MidiController::ControllerType type = ctrlType2Int(item->text(COL_TYPE)); + + switch(type) { + case MidiController::Controller7: + c->setNum(lval); + break; + case MidiController::Controller14: + c->setNum((hval << 8 | lval) | CTRL_14_OFFSET); + break; + case MidiController::RPN: + c->setNum((hval << 8 | lval) | CTRL_RPN_OFFSET); + break; + case MidiController::NRPN: + c->setNum((hval << 8 | lval) | CTRL_NRPN_OFFSET); + break; + case MidiController::RPN14: + c->setNum((hval << 8 | lval) | CTRL_RPN14_OFFSET); + break; + case MidiController::NRPN14: + c->setNum((hval << 8 | lval) | CTRL_NRPN14_OFFSET); + break; + case MidiController::Program: + c->setNum(CTRL_PROGRAM); + break; + case MidiController::Pitch: + c->setNum(CTRL_PITCH); + break; + default: + break; + } + if(type == MidiController::Program) + { + c->setMinVal(0); + c->setMaxVal(0xffffff); + } + else + { + c->setMinVal(item->text(COL_MIN).toInt()); + c->setMaxVal(item->text(COL_MAX).toInt()); + } + + mcl->push_back(c); + + item = item->nextSibling(); + } + + // Update the list before closing this dialog. + //updateViewController(); + //setModified(false); + song->update(SC_CONFIG | SC_MIDI_CONTROLLER); +} + +//--------------------------------------------------------- +// 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 = midiControllerType(c->num()); + QString type = int2ctrlType(t); + QString min, max; + QString hno, lno; + int h = (c->num() >> 8) & 0x7f; + int l = c->num() & 0x7f; + + switch(t) { + case MidiController::Controller7: + min.setNum(c->minVal()); + max.setNum(c->maxVal()); + hno = "---"; + lno.setNum(l); + break; + case MidiController::RPN: + case MidiController::NRPN: + case MidiController::RPN14: + case MidiController::NRPN14: + case MidiController::Controller14: + min.setNum(c->minVal()); + max.setNum(c->maxVal()); + hno.setNum(h); + lno.setNum(l); + break; + case MidiController::Pitch: + min.setNum(c->minVal()); + max.setNum(c->maxVal()); + hno = "---"; + lno = "---"; + break; + default: + hno = "---"; + lno = "---"; + min.setNum(0); + max.setNum(0); + break; + } + + Q3ListViewItem* item = new Q3ListViewItem(viewController, + name, type, hno, lno, min, max); + + viewController->blockSignals(true); + viewController->setCurrentItem(item); + controllerChanged(item); + viewController->blockSignals(false); + + setModified(true); + break; + } + } + +//--------------------------------------------------------- +// ctrlDelete +//--------------------------------------------------------- + +void MidiControllerEditDialog::ctrlDelete() + { + Q3ListViewItem* item = viewController->currentItem(); + if (item == 0) + return; + delete item; + + setModified(true); + } + +//--------------------------------------------------------- +// accept +//--------------------------------------------------------- + +void MidiControllerEditDialog::accept() + { + apply(); + MidiControllerEditDialogBase::accept(); + } + +//--------------------------------------------------------- +// portChanged +//--------------------------------------------------------- + +void MidiControllerEditDialog::portChanged(int n) + { + if(n == _lastPort) + return; + _lastPort = n; + + //listController->blockSignals(true); + //midiPortsList->blockSignals(true); + //viewController->blockSignals(true); + //updatePredefinedList(); + //updateMidiPortsList(); + //reject(); // populate list + updateViewController(); + //viewController->setCurrentItem(viewController->firstChild()); + //controllerChanged(viewController->currentItem()); + //listController->blockSignals(false); + //midiPortsList->blockSignals(false); + //viewController->blockSignals(false); + } + +//--------------------------------------------------------- +// nameChanged +//--------------------------------------------------------- + +void MidiControllerEditDialog::nameChanged(const QString& s) + { + Q3ListViewItem* item = viewController->currentItem(); + if (item == 0) + return; + item->setText(COL_NAME, s); + + setModified(true); + } + +//--------------------------------------------------------- +// typeChanged +//--------------------------------------------------------- + +void MidiControllerEditDialog::typeChanged(const QString& s) + { + Q3ListViewItem* item = viewController->currentItem(); + if (item == 0) + return; + item->setText(COL_TYPE, s); + switch(ctrlType2Int(s)) { + case MidiController::Controller14: + case MidiController::RPN14: + case MidiController::NRPN14: + item->setText(COL_LNUM, QString("0")); + item->setText(COL_HNUM, QString("0")); + item->setText(COL_MIN, QString("0")); + item->setText(COL_MAX, QString("16383")); + break; + case MidiController::Controller7: + item->setText(COL_MIN, QString("0")); + item->setText(COL_MAX, QString("127")); + item->setText(COL_LNUM, QString("0")); + item->setText(COL_HNUM, QString("---")); + break; + case MidiController::RPN: + case MidiController::NRPN: + item->setText(COL_MIN, QString("0")); + item->setText(COL_MAX, QString("127")); + item->setText(COL_LNUM, QString("0")); + item->setText(COL_HNUM, QString("0")); + break; + + case MidiController::Program: + + item->setText(COL_MIN, QString("---")); + item->setText(COL_MAX, QString("---")); + item->setText(COL_LNUM, QString("---")); + item->setText(COL_HNUM, QString("---")); + break; + case MidiController::Pitch: + item->setText(COL_MIN, QString("-8192")); + item->setText(COL_MAX, QString("8191")); + item->setText(COL_LNUM, QString("---")); + item->setText(COL_HNUM, QString("---")); + break; + default: + break; + } + + setModified(true); + + 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); + + setModified(true); + } + +//--------------------------------------------------------- +// valueLChanged +//--------------------------------------------------------- + +void MidiControllerEditDialog::valueLChanged(int val) + { + Q3ListViewItem* item = viewController->currentItem(); + if (item == 0) + return; + QString s; + s.setNum(val); + item->setText(COL_LNUM, s); + + setModified(true); + } + +//--------------------------------------------------------- +// 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(0); + spinboxLCtrlNo->setValue(item->text(COL_LNUM).toInt()); + spinboxMin->setRange(0, 127); + spinboxMax->setRange(0, 127); + spinboxMin->setValue(item->text(COL_MIN).toInt()); + spinboxMax->setValue(item->text(COL_MAX).toInt()); + break; + + 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->setRange(0, 127); + spinboxMax->setRange(0, 127); + spinboxMin->setValue(item->text(COL_MIN).toInt()); + spinboxMax->setValue(item->text(COL_MAX).toInt()); + break; + case MidiController::Controller14: + case MidiController::RPN14: + case MidiController::NRPN14: + 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->setRange(0, 16383); + spinboxMax->setRange(0, 16383); + spinboxMin->setValue(item->text(COL_MIN).toInt()); + spinboxMax->setValue(item->text(COL_MAX).toInt()); + break; + + case MidiController::Pitch: + comboType->setEnabled(true); + spinboxHCtrlNo->setEnabled(false); + spinboxLCtrlNo->setEnabled(false); + spinboxMin->setEnabled(true); + spinboxMax->setEnabled(true); + spinboxHCtrlNo->setValue(0); + spinboxLCtrlNo->setValue(0); + spinboxMin->setRange(-8192, 8191); + spinboxMax->setRange(-8192, 8191); + spinboxMin->setValue(item->text(COL_MIN).toInt()); + spinboxMax->setValue(item->text(COL_MAX).toInt()); + break; + + case MidiController::Program: + comboType->setEnabled(true); + spinboxHCtrlNo->setEnabled(false); + spinboxLCtrlNo->setEnabled(false); + spinboxMin->setEnabled(false); + spinboxMax->setEnabled(false); + spinboxHCtrlNo->setValue(0); + spinboxLCtrlNo->setValue(0); + spinboxMin->setRange(0, 0); + spinboxMax->setRange(0, 0); + spinboxMin->setValue(0); + spinboxMax->setValue(0); + 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); + + if(val > item->text(COL_MAX).toInt()) + { + spinboxMax->blockSignals(true); + spinboxMax->setValue(val); + item->setText(COL_MAX, s); + spinboxMax->blockSignals(false); + } + setModified(true); + } + +//--------------------------------------------------------- +// maxChanged +//--------------------------------------------------------- + +void MidiControllerEditDialog::maxChanged(int val) + { + Q3ListViewItem* item = viewController->currentItem(); + if (item == 0) + return; + + QString s; + s.setNum(val); + item->setText(COL_MAX, s); + + if(val < item->text(COL_MIN).toInt()) + { + spinboxMin->blockSignals(true); + spinboxMin->setValue(val); + item->setText(COL_MIN, s); + spinboxMin->blockSignals(false); + } + setModified(true); + } + +//--------------------------------------------------------- +// configMidiController +//--------------------------------------------------------- + +void configMidiController() + { + if (midiControllerEditDialog == 0) + { + midiControllerEditDialog = new MidiControllerEditDialog(); + midiControllerEditDialog->show(); + } + else + { + if(midiControllerEditDialog->isShown()) + midiControllerEditDialog->hide(); + else + midiControllerEditDialog->show(); + } + } diff --git a/muse2/muse/instruments/midictrledit.h b/muse2/muse/instruments/midictrledit.h new file mode 100644 index 00000000..e1624f29 --- /dev/null +++ b/muse2/muse/instruments/midictrledit.h @@ -0,0 +1,56 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: midictrledit.h,v 1.1.1.1.2.1 2008/08/18 00:15:25 terminator356 Exp $ +// +// (C) Copyright 1999/2000 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __MIDICTRLEDIT_H__ +#define __MIDICTRLEDIT_H__ + +#include "ccontrolbase.h" +#include "midictrl.h" + +//--------------------------------------------------------- +// MidiControllerEditDialog +//--------------------------------------------------------- + +class MidiControllerEditDialog : public MidiControllerEditDialogBase { + Q_OBJECT + + int _lastPort; + bool _modified; + + void addControllerToView(MidiController* mctrl); + void mergeReplace(bool replace); + void updatePredefinedList(); + void updateMidiPortsList(); + void updateViewController(); + void setModified(bool); + + private slots: + void ctrlAdd(); + void ctrlDelete(); + virtual void accept(); + virtual void reject(); + void apply(); + 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); + void portChanged(int); + void songChanged(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/muse2/muse/instruments/minstrument.cpp b/muse2/muse/instruments/minstrument.cpp new file mode 100644 index 00000000..a69f504e --- /dev/null +++ b/muse2/muse/instruments/minstrument.cpp @@ -0,0 +1,850 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: minstrument.cpp,v 1.10.2.5 2009/03/28 01:46:10 terminator356 Exp $ +// +// (C) Copyright 2000-2003 Werner Schweer (ws@seh.de) +//========================================================= + +#include + +#include +#include +#include + +#include "minstrument.h" +#include "midiport.h" +#include "globals.h" +#include "xml.h" +#include "event.h" +#include "mpevent.h" +#include "midictrl.h" +#include "gconfig.h" + +MidiInstrumentList midiInstruments; +MidiInstrument* genericMidiInstrument; + +static const char* gmdrumname = "GM-drums"; + +//--------------------------------------------------------- +// readEventList +//--------------------------------------------------------- + +static void readEventList(Xml& xml, EventList* el, const char* name) + { + for (;;) { + Xml::Token token = xml.parse(); + const QString& tag = xml.s1(); + switch (token) { + case Xml::Error: + case Xml::End: + return; + case Xml::TagStart: + if (tag == "event") { + Event e(Note); + e.read(xml); + el->add(e); + } + else + xml.unknown("readEventList"); + break; + case Xml::TagEnd: + if (tag == name) + return; + default: + break; + } + } + } + +//--------------------------------------------------------- +// read +//--------------------------------------------------------- + +//--------------------------------------------------------- +// loadIDF +//--------------------------------------------------------- + +static void loadIDF(QFileInfo* fi) + { +/* + QFile qf(fi->filePath()); + if (!qf.open(IO_ReadOnly)) { + printf("cannot open file %s\n", fi->fileName().latin1()); + return; + } + if (debugMsg) + printf(" load instrument definition <%s>\n", fi->filePath().local8Bit().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().latin1(), error.latin1()); + 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().latin1()); + node = node.nextSibling(); + } + qf.close(); +*/ + + FILE* f = fopen(fi->filePath().ascii(), "r"); + if (f == 0) + return; + if (debugMsg) + printf("READ IDF %s\n", fi->filePath().latin1()); + Xml xml(f); + + bool skipmode = true; + for (;;) { + Xml::Token token = xml.parse(); + const QString& tag = xml.s1(); + switch (token) { + case Xml::Error: + case Xml::End: + return; + case Xml::TagStart: + if (skipmode && tag == "muse") + skipmode = false; + else if (skipmode) + break; + else if (tag == "MidiInstrument") { + MidiInstrument* i = new MidiInstrument(); + i->setFilePath(fi->filePath()); + i->read(xml); + // Ignore duplicate named instruments. + iMidiInstrument ii = midiInstruments.begin(); + for(; ii != midiInstruments.end(); ++ii) + { + if((*ii)->iname() == i->iname()) + break; + } + if(ii == midiInstruments.end()) + midiInstruments.push_back(i); + else + delete i; + } + else + xml.unknown("muse"); + break; + case Xml::Attribut: + break; + case Xml::TagEnd: + if (!skipmode && tag == "muse") { + return; + } + default: + break; + } + } + fclose(f); + + + } + +//--------------------------------------------------------- +// initMidiInstruments +//--------------------------------------------------------- + +void initMidiInstruments() + { + genericMidiInstrument = new MidiInstrument(QWidget::tr("generic midi")); + midiInstruments.push_back(genericMidiInstrument); + if (debugMsg) + printf("load user instrument definitions from <%s>\n", museUserInstruments.latin1()); + QDir usrInstrumentsDir(museUserInstruments, QString("*.idf")); + if (usrInstrumentsDir.exists()) { + QFileInfoList list = usrInstrumentsDir.entryInfoList(); + QFileInfoList::iterator it=list.begin(); // ddskrjo + while(it != list.end()) { // ddskrjo + loadIDF(&*it); + ++it; + } + } + //else + //{ + // if(usrInstrumentsDir.mkdir(museUserInstruments)) + // printf("Created user instrument directory: %s\n", museUserInstruments.latin1()); + // else + // printf("Unable to create user instrument directory: %s\n", museUserInstruments.latin1()); + //} + + if (debugMsg) + printf("load instrument definitions from <%s>\n", museInstruments.latin1()); + QDir instrumentsDir(museInstruments, QString("*.idf")); + if (instrumentsDir.exists()) { + QFileInfoList list = instrumentsDir.entryInfoList(); + QFileInfoListIterator it=list.begin(); // ddskrjo + while(it!=list.end()) { + loadIDF(&*it); + ++it; + } + } + else + printf("Instrument directory not found: %s\n", museInstruments.latin1()); + + } + +//--------------------------------------------------------- +// 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() + { + _nullvalue = -1; + _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, 0xffffff, 0); + _controller->add(prog); + _dirty = false; + } + +MidiInstrument::MidiInstrument() + { + init(); + } + +//--------------------------------------------------------- +// MidiInstrument +//--------------------------------------------------------- + +MidiInstrument::MidiInstrument(const QString& txt) + { + _name = txt; + init(); + } + +//--------------------------------------------------------- +// MidiInstrument +//--------------------------------------------------------- + +MidiInstrument::~MidiInstrument() + { + for (ciPatchGroup g = pg.begin(); g != pg.end(); ++g) + { + PatchGroup* pgp = *g; + const PatchList& pl = pgp->patches; + for (ciPatch p = pl.begin(); p != pl.end(); ++p) + { + delete *p; + } + delete pgp; + } + + + delete _midiInit; + delete _midiReset; + delete _midiState; + for(iMidiController i = _controller->begin(); i != _controller->end(); ++i) + delete i->second; + delete _controller; + + if (_initScript) + delete _initScript; + } + +/* +//--------------------------------------------------------- +// uniqueCopy +//--------------------------------------------------------- + +MidiInstrument& MidiInstrument::uniqueCopy(const MidiInstrument& ins) +{ + _initScript = 0; + _midiInit = new EventList(); + _midiReset = new EventList(); + _midiState = new EventList(); + //--------------------------------------------------------- + // TODO: Copy the init script, and the lists. + //--------------------------------------------------------- + _controller = new MidiControllerList(*(ins._controller)); + + // Assignment + pg = ins.pg; + + _name = ins._name; + _filePath = ins._filePath; + + // Hmm, dirty, yes? But init sets it to false... + //_dirty = ins._dirty; + //_dirty = false; + _dirty = true; + + return *this; +} +*/ + +//--------------------------------------------------------- +// assign +//--------------------------------------------------------- + +MidiInstrument& MidiInstrument::assign(const MidiInstrument& ins) +{ + //--------------------------------------------------------- + // TODO: Copy the _initScript, and _midiInit, _midiReset, and _midiState lists. + //--------------------------------------------------------- + + for(iMidiController i = _controller->begin(); i != _controller->end(); ++i) + delete i->second; + _controller->clear(); + + _nullvalue = ins._nullvalue; + + // Assignment + // *_controller = *(ins._controller); + for(ciMidiController i = ins._controller->begin(); i != ins._controller->end(); ++i) + { + MidiController* mc = i->second; + _controller->add(new MidiController(*mc)); + } + +// pg.clear(); +// for(iPatchGroup ipg = pg.begin(); ipg != pg.end(); ++ipg) +// { + //ipg->patches.clear(); + + //const PatchGroup& g = *ipg; + //for(ciPatch ip = ipg->begin(); ip != ipg->end(); ++ipg) + //{ + + //} +// } + + for (ciPatchGroup g = pg.begin(); g != pg.end(); ++g) + { + PatchGroup* pgp = *g; + const PatchList& pl = pgp->patches; + for (ciPatch p = pl.begin(); p != pl.end(); ++p) + { + delete *p; + } + + delete pgp; + } + pg.clear(); + + // Assignment +// pg = ins.pg; + for(ciPatchGroup g = ins.pg.begin(); g != ins.pg.end(); ++g) + { + PatchGroup* pgp = *g; + const PatchList& pl = pgp->patches; + PatchGroup* npg = new PatchGroup; + npg->name = pgp->name; + pg.push_back(npg); + for (ciPatch p = pl.begin(); p != pl.end(); ++p) + { + Patch* pp = *p; + Patch* np = new Patch; + np->typ = pp->typ; + np->hbank = pp->hbank; + np->lbank = pp->lbank; + np->prog = pp->prog; + np->name = pp->name; + np->drum = pp->drum; + npg->patches.push_back(np); + } + } + + _name = ins._name; + _filePath = ins._filePath; + + // Hmm, dirty, yes? But init sets it to false... + //_dirty = ins._dirty; + //_dirty = false; + //_dirty = true; + + return *this; +} + +//--------------------------------------------------------- +// reset +// send note off to all channels +//--------------------------------------------------------- + +void MidiInstrument::reset(int portNo, MType) + { + MidiPlayEvent ev; + ev.setType(0x90); + MidiPort* port = &midiPorts[portNo]; + if (port == 0) + return; + ev.setPort(portNo); + for (int chan = 0; chan < MIDI_CHANNELS; ++chan) { + ev.setChannel(chan); + for (int pitch = 0; pitch < 128; ++pitch) { + ev.setA(pitch); + ev.setB(0); + port->sendEvent(ev); + } + } + } + +//--------------------------------------------------------- +// readPatchGroup +//--------------------------------------------------------- + +void PatchGroup::read(Xml& xml) + { + for (;;) { + Xml::Token token = xml.parse(); + const QString& tag = xml.s1(); + switch (token) { + case Xml::Error: + case Xml::End: + return; + case Xml::TagStart: + if (tag == "Patch") { + Patch* patch = new Patch; + patch->read(xml); + patches.push_back(patch); + } + else + xml.unknown("PatchGroup"); + break; + case Xml::Attribut: + if (tag == "name") + name = xml.s2(); + break; + case Xml::TagEnd: + if (tag == "PatchGroup") + return; + default: + break; + } + } + } + +//--------------------------------------------------------- +// read +//--------------------------------------------------------- + +void Patch::read(Xml& xml) + { + typ = -1; + hbank = -1; + lbank = -1; + prog = 0; + drum = false; + for (;;) { + Xml::Token token = xml.parse(); + const QString& tag = xml.s1(); + switch (token) { + case Xml::Error: + case Xml::End: + return; + case Xml::TagStart: + xml.unknown("Patch"); + break; + case Xml::Attribut: + if (tag == "name") + name = xml.s2(); + else if (tag == "mode") + typ = xml.s2().toInt(); + else if (tag == "hbank") + hbank = xml.s2().toInt(); + else if (tag == "lbank") + lbank = xml.s2().toInt(); + else if (tag == "prog") + prog = xml.s2().toInt(); + else if (tag == "drum") + drum = xml.s2().toInt(); + break; + case Xml::TagEnd: + if (tag == "Patch") + return; + default: + break; + } + } + } + +//--------------------------------------------------------- +// write +//--------------------------------------------------------- + +void Patch::write(int level, 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); + xml.nput(level, ""); + xml.put(" />"); + + //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(Xml& xml) + { + _midiState->read(xml, "midistate", true); + } + +//--------------------------------------------------------- +// read +//--------------------------------------------------------- + +void MidiInstrument::read(Xml& xml) + { + bool ok; + int base = 10; + _nullvalue = -1; + for (;;) { + Xml::Token token = xml.parse(); + const QString& tag = xml.s1(); + switch (token) { + case Xml::Error: + case Xml::End: + return; + case Xml::TagStart: + if (tag == "Patch") { + Patch* patch = new Patch; + patch->read(xml); + if (pg.empty()) { + PatchGroup* p = new PatchGroup; + p->patches.push_back(patch); + pg.push_back(p); + } + else + pg[0]->patches.push_back(patch); + } + else if (tag == "PatchGroup") { + PatchGroup* p = new PatchGroup; + p->read(xml); + pg.push_back(p); + } + else if (tag == "Controller") { + MidiController* mc = new MidiController(); + mc->read(xml); + // Added by Tim. Copied from muse 2. + // + // HACK: make predefined "Program" controller overloadable + // + if (mc->name() == "Program") { + for (iMidiController i = _controller->begin(); i != _controller->end(); ++i) { + if (i->second->name() == mc->name()) { + delete i->second; + _controller->erase(i); + break; + } + } + } + + _controller->add(mc); + } + else if (tag == "Init") + readEventList(xml, _midiInit, "Init"); + else if (tag == "Reset") + readEventList(xml, _midiReset, "Reset"); + else if (tag == "State") + readEventList(xml, _midiState, "State"); + else if (tag == "InitScript") { + if (_initScript) + delete _initScript; + const char* istr = xml.parse1().latin1(); + int len = strlen(istr) +1; + if (len > 1) { + _initScript = new char[len]; + memcpy(_initScript, istr, len); + } + } + + else + xml.unknown("MidiInstrument"); + break; + case Xml::Attribut: + if (tag == "name") + setIName(xml.s2()); + else if(tag == "nullparam") { + _nullvalue = xml.s2().toInt(&ok, base); + } + break; + case Xml::TagEnd: + if (tag == "MidiInstrument") + return; + default: + break; + } + } + } + +//--------------------------------------------------------- +// write +//--------------------------------------------------------- + +void MidiInstrument::write(int level, Xml& xml) + { + xml.header(); + //xml.stag("muse version=\"2.1\""); + xml.tag(level, "muse version=\"1.0\""); + //xml.stag(QString("MidiInstrument name=\"%1\"").arg(Xml::xmlString(iname()))); + level++; + //xml.tag(level, "MidiInstrument name=\"%s\"", Xml::xmlString(iname()).latin1()); + xml.nput(level, ""); + + // ------------- + // What about Init, Reset, State, and InitScript ? + // ------------- + + //std::vector* pg = groups(); + //for (std::vector::iterator g = pg->begin(); g != pg->end(); ++g) { + level++; + //for (std::vector::iterator g = pg.begin(); g != pg.end(); ++g) { + for (ciPatchGroup g = pg.begin(); g != pg.end(); ++g) { + PatchGroup* pgp = *g; + const PatchList& pl = pgp->patches; + //xml.stag(QString("PatchGroup name=\"%1\"").arg(Xml::xmlString(g->name))); + //xml.tag(level, "PatchGroup name=\"%s\"", Xml::xmlString(g->name).latin1()); + xml.tag(level, "PatchGroup name=\"%s\"", Xml::xmlString(pgp->name).latin1()); + level++; + //for (iPatch p = g->patches.begin(); p != g->patches.end(); ++p) + for (ciPatch p = pl.begin(); p != pl.end(); ++p) + //(*p)->write(xml); + //p->write(level, xml); + (*p)->write(level, xml); + level--; + //xml.etag("PatchGroup"); + xml.etag(level, "PatchGroup"); + } + for (iMidiController ic = _controller->begin(); ic != _controller->end(); ++ic) + //(*ic)->write(xml); + ic->second->write(level, xml); + //xml.etag("MidiInstrument"); + level--; + xml.etag(level, "MidiInstrument"); + //xml.etag("muse"); + level--; + xml.etag(level, "muse"); + } + +//--------------------------------------------------------- +// getPatchName +//--------------------------------------------------------- + +const char* MidiInstrument::getPatchName(int channel, int prog, MType mode, bool drum) + { + int pr = prog & 0xff; + if(prog == CTRL_VAL_UNKNOWN || pr == 0xff) + return ""; + + int hbank = (prog >> 16) & 0xff; + int lbank = (prog >> 8) & 0xff; + int tmask = 1; + bool drumchan = channel == 9; + bool hb = false; + bool lb = false; + switch (mode) { + case MT_GS: + tmask = 2; + hb = true; + break; + case MT_XG: + hb = true; + lb = true; + tmask = 4; + break; + case MT_GM: + if(drumchan) + return gmdrumname; + tmask = 1; + break; + default: + hb = true; // MSB bank matters + lb = true; // LSB bank matters + break; + } + for (ciPatchGroup i = pg.begin(); i != pg.end(); ++i) { + const PatchList& pl = (*i)->patches; + for (ciPatch ipl = pl.begin(); ipl != pl.end(); ++ipl) { + const Patch* mp = *ipl; + if ((mp->typ & tmask) + && (pr == mp->prog) + && ((drum && mode != MT_GM) || + (mp->drum == drumchan)) + + && (hbank == mp->hbank || !hb || mp->hbank == -1) + && (lbank == mp->lbank || !lb || mp->lbank == -1)) + return mp->name.latin1(); + } + } + return ""; + } + +//--------------------------------------------------------- +// populatePatchPopup +//--------------------------------------------------------- + +void MidiInstrument::populatePatchPopup(Q3PopupMenu* menu, int chan, MType songType, bool drum) + { + menu->clear(); + int mask = 0; + bool drumchan = chan == 9; + switch (songType) { + case MT_XG: mask = 4; break; + case MT_GS: mask = 2; break; + case MT_GM: + if(drumchan) + return; + mask = 1; + break; + case MT_UNKNOWN: mask = 7; break; + } + if (pg.size() > 1) { + for (ciPatchGroup i = pg.begin(); i != pg.end(); ++i) { + PatchGroup* pgp = *i; + Q3PopupMenu* pm = new Q3PopupMenu(menu); + pm->setCheckable(false); + pm->setFont(config.fonts[0]); + const PatchList& pl = pgp->patches; + for (ciPatch ipl = pl.begin(); ipl != pl.end(); ++ipl) { + const Patch* mp = *ipl; + if ((mp->typ & mask) && + ((drum && songType != MT_GM) || + (mp->drum == drumchan)) ) + { + int id = ((mp->hbank & 0xff) << 16) + + ((mp->lbank & 0xff) << 8) + (mp->prog & 0xff); + pm->insertItem(mp->name, id); + } + + } + menu->insertItem(pgp->name, pm); + } + } + else if (pg.size() == 1 ){ + // no groups + const PatchList& pl = pg.front()->patches; + for (ciPatch 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); + menu->insertItem(mp->name, id); + } + } + } + } + diff --git a/muse2/muse/instruments/minstrument.h b/muse2/muse/instruments/minstrument.h new file mode 100644 index 00000000..70c123ec --- /dev/null +++ b/muse2/muse/instruments/minstrument.h @@ -0,0 +1,135 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: minstrument.h,v 1.3.2.3 2009/03/09 02:05:18 terminator356 Exp $ +// +// (C) Copyright 2000 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __MINSTRUMENT_H__ +#define __MINSTRUMENT_H__ + +#include "globaldefs.h" +#include +#include +//Added by qt3to4: +#include + +class MidiPort; +class Q3PopupMenu; +class MidiPlayEvent; +class Xml; +class EventList; +class MidiControllerList; +class QString; + +//--------------------------------------------------------- +// Patch +//--------------------------------------------------------- + +struct Patch { + signed char typ; // 1 - GM 2 - GS 4 - XG + signed char hbank, lbank, prog; + QString name; + bool drum; + void read(Xml&); + void write(int level, Xml&); + }; + +typedef std::list PatchList; +typedef PatchList::iterator iPatch; +typedef PatchList::const_iterator ciPatch; + +//--------------------------------------------------------- +// PatchGroup +//--------------------------------------------------------- + +struct PatchGroup { + QString name; + PatchList patches; + void read(Xml&); + }; + +typedef std::vector PatchGroupList; +typedef PatchGroupList::iterator iPatchGroup; +typedef PatchGroupList::const_iterator ciPatchGroup; + +//--------------------------------------------------------- +// MidiInstrument +//--------------------------------------------------------- + +class MidiInstrument { + PatchGroupList pg; + MidiControllerList* _controller; + bool _dirty; + int _nullvalue; + + void init(); + + protected: + 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; } + + //MidiInstrument& uniqueCopy(const MidiInstrument&); + // Assign will 'delete' all existing patches and groups from the instrument. + MidiInstrument& assign(const MidiInstrument&); + QString filePath() const { return _filePath; } + void setFilePath(const QString& s) { _filePath = s; } + bool dirty() const { return _dirty; } + void setDirty(bool v) { _dirty = 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; } + int nullSendValue() { return _nullvalue; } + void setNullSendValue(int v) { _nullvalue = v; } + + void readMidiState(Xml& xml); + virtual bool guiVisible() const { return false; } + virtual void showGui(bool) {} + virtual bool hasGui() const { return false; } + virtual void writeToGui(const MidiPlayEvent&) {} + + virtual void reset(int, MType); + virtual const char* getPatchName(int,int,MType,bool); + virtual void populatePatchPopup(Q3PopupMenu*, int, MType, bool); + void read(Xml&); + void write(int level, Xml&); + PatchGroupList* groups() { return &pg; } + }; + +//--------------------------------------------------------- +// MidiInstrumentList +//--------------------------------------------------------- + +class MidiInstrumentList : public std::list { + + public: + MidiInstrumentList() {} + }; + +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/muse2/muse/key.cpp b/muse2/muse/key.cpp new file mode 100644 index 00000000..0f34f8ea --- /dev/null +++ b/muse2/muse/key.cpp @@ -0,0 +1,35 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: key.cpp,v 1.1.1.1 2003/10/27 18:51:22 wschweer Exp $ +// +// (C) Copyright 1999/2000 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include "key.h" +#include "globals.h" + +int NKey::offsets[14] = { + 0, 7, 14, -7, + -(12), + -19, -26, -10, -14, -2, -4, -6, -8, 0 + }; + +int NKey::width() const + { + return 25; + } + +//--------------------------------------------------------- +// Scale::width +//--------------------------------------------------------- + +int Scale::width() const + { + int i = val; + if (i < 0) + i = -i; + return i * 7; + } + diff --git a/muse2/muse/key.h b/muse2/muse/key.h new file mode 100644 index 00000000..1c1c4cac --- /dev/null +++ b/muse2/muse/key.h @@ -0,0 +1,54 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: key.h,v 1.1.1.1 2003/10/27 18:51:25 wschweer Exp $ +// +// (C) Copyright 1999/2000 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __KEY_H__ +#define __KEY_H__ + +#include +class QPainter; +class QPoint; +class Xml; + +//--------------------------------------------------------- +// NKey +//--------------------------------------------------------- + +class NKey { + static int offsets[14]; + int val; + public: + NKey() { val = 7; } + NKey(int k) { val = k; } + void draw(QPainter& p, const QPoint& pt) const; + int idx() const { return val; } + int offset() const { return offsets[val]; } + void read(Xml&); + void write(int, Xml&) const; + void set(int n) { val = n; } + int width() const; + }; + +//--------------------------------------------------------- +// Scale +//--------------------------------------------------------- + +class Scale { + int val; // 1 = 1 sharp, -1 1 flat + bool minor; + public: + Scale() { val = 0; minor = false; } + Scale(int s, bool m = false) { val = s; minor = m; } + int idx() const { return val; } + void read(Xml&); + void write(int, Xml&) const; + void set(int n) { val = n; } + void setMajorMinor(bool f) { minor = f; } // true == minor + int width() const; + }; +#endif + diff --git a/muse2/muse/ladspa.h b/muse2/muse/ladspa.h new file mode 100644 index 00000000..7bbc338f --- /dev/null +++ b/muse2/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/muse2/muse/liste/Makefile.am b/muse2/muse/liste/Makefile.am new file mode 100644 index 00000000..3fa30b8b --- /dev/null +++ b/muse2/muse/liste/Makefile.am @@ -0,0 +1,16 @@ +include $(top_srcdir)/common.am + +if PCH +AM_CXXFLAGS += -include $(top_srcdir)/all.h +endif + +noinst_LIBRARIES = libliste.a + +dist_libliste_a_SOURCES = \ + listedit.cpp listedit.h \ + editevent.cpp editevent.h \ + editctrlbase.ui + +nodist_libliste_a_SOURCES = \ + moc_listedit.cpp \ + moc_editevent.cpp diff --git a/muse2/muse/liste/Makefile.in b/muse2/muse/liste/Makefile.in new file mode 100644 index 00000000..ca126675 --- /dev/null +++ b/muse2/muse/liste/Makefile.in @@ -0,0 +1,601 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/common.am +@PCH_TRUE@am__append_1 = -include $(top_srcdir)/all.h +subdir = muse/liste +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal-include.m4 \ + $(top_srcdir)/m4/alsa.m4 $(top_srcdir)/m4/docbook.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +LIBRARIES = $(noinst_LIBRARIES) +ARFLAGS = cru +libliste_a_AR = $(AR) $(ARFLAGS) +libliste_a_LIBADD = +dist_libliste_a_OBJECTS = listedit.$(OBJEXT) editevent.$(OBJEXT) \ + editctrlbase.$(OBJEXT) +nodist_libliste_a_OBJECTS = moc_listedit.$(OBJEXT) \ + moc_editevent.$(OBJEXT) +libliste_a_OBJECTS = $(dist_libliste_a_OBJECTS) \ + $(nodist_libliste_a_OBJECTS) +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +CXXLD = $(CXX) +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(dist_libliste_a_SOURCES) $(nodist_libliste_a_SOURCES) +DIST_SOURCES = $(dist_libliste_a_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DOCBOOKSTYLE = @DOCBOOKSTYLE@ +DOCBOOKTARGETS = @DOCBOOKTARGETS@ +DOT = @DOT@ +DOTPATH = @DOTPATH@ +DOXYGEN = @DOXYGEN@ +DOXYGEN_TREEVIEW = @DOXYGEN_TREEVIEW@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FLUIDSYNTHDIRS = @FLUIDSYNTHDIRS@ +FST_CFLAGS = @FST_CFLAGS@ +FST_LIBS = @FST_LIBS@ +Fluidsynth_CFLAGS = @Fluidsynth_CFLAGS@ +Fluidsynth_LIBS = @Fluidsynth_LIBS@ +GIVERTCAP = @GIVERTCAP@ +GREP = @GREP@ +HAVEDOT = @HAVEDOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_LIBS = @JACK_LIBS@ +JADE = @JADE@ +LASH_CFLAGS = @LASH_CFLAGS@ +LASH_LIBS = @LASH_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LO_CFLAGS = @LO_CFLAGS@ +LO_LIBS = @LO_LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MUSECXXFLAGS = @MUSECXXFLAGS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NSGMLS = @NSGMLS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PCH = @PCH@ +PERL = @PERL@ +PKG_CONFIG = @PKG_CONFIG@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIB = @PYTHON_LIB@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QTDIR_BIN = @QTDIR_BIN@ +QTDIR_INC = @QTDIR_INC@ +QT_LIBS = @QT_LIBS@ +RANLIB = @RANLIB@ +SAMPLERATE_CFLAGS = @SAMPLERATE_CFLAGS@ +SAMPLERATE_LIBS = @SAMPLERATE_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ +SNDFILE_LIBS = @SNDFILE_LIBS@ +STRIP = @STRIP@ +SUIDBUILD = @SUIDBUILD@ +SUIDINSTALL = @SUIDINSTALL@ +USE_SSE = @USE_SSE@ +UUID_CFLAGS = @UUID_CFLAGS@ +UUID_LIBS = @UUID_LIBS@ +VERSION = @VERSION@ +XMKMF = @XMKMF@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +have_docbook = @have_docbook@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +synth_fluid = @synth_fluid@ +synth_fluidsynth = @synth_fluidsynth@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AM_CXXFLAGS = $(MUSECXXFLAGS) -I.. -I$(top_srcdir)/synti \ + -I$(top_srcdir)/muse/widgets -DQT_SHARED -DQT_THREAD_SUPPORT \ + -DQT_PLUGIN $(QTDIR_INC) -DQT3_SUPPORT $(am__append_1) +AM_CPPFLAGS = +MOC = $(QTDIR_BIN)/moc +#UIC = $(QTDIR_BIN)/uic3 +UIC = /usr/bin/uic3 +UIFILES = $(wildcard *.ui) +MOCFILES = $(shell for h in $(filter %.h,$(SOURCES)); do \ + if grep -q Q_OBJECT $$h; then \ + echo $$h | sed "s/\(.*\)\.h/moc_\1.cpp/"; \ + fi; \ + done) + +BUILT_SOURCES = $(MOCFILES) $(UIFILES:%.ui=%.h) +MOSTLYCLEANFILES = $(MOCFILES) $(UIFILES:%.ui=%.h) +SUFFIXES = .ui .h.gch +noinst_LIBRARIES = libliste.a +dist_libliste_a_SOURCES = \ + listedit.cpp listedit.h \ + editevent.cpp editevent.h \ + editctrlbase.ui + +nodist_libliste_a_SOURCES = \ + moc_listedit.cpp \ + moc_editevent.cpp + +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: .ui .h.gch .cpp .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/common.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu muse/liste/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu muse/liste/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-noinstLIBRARIES: + -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) +libliste.a: $(libliste_a_OBJECTS) $(libliste_a_DEPENDENCIES) + -rm -f libliste.a + $(libliste_a_AR) libliste.a $(libliste_a_OBJECTS) $(libliste_a_LIBADD) + $(RANLIB) libliste.a + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/editevent.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/listedit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/moc_editevent.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/moc_listedit.Po@am__quote@ + +.cpp.o: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< + +.cpp.obj: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.cpp.lo: +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-am +all-am: Makefile $(LIBRARIES) +installdirs: +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +clean: clean-am + +clean-am: clean-generic clean-libtool clean-noinstLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: all check install install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-noinstLIBRARIES ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags uninstall uninstall-am + + +de: + @for base in $(MOCFILES); do echo -e "\t$${base}.cpp $${base}.h \\"; done + +nde: + @for base in $(MOCFILES); do echo -e "\tmoc_$${base}.cpp \\"; done + +.ui.o: %.h + $(UIC) -L $(top_srcdir)/muse/widgets -o $*.cpp -impl $*.h $*.ui + $(MOC) $*.h >> $*.cpp + $(CXXCOMPILE) -c $*.cpp -o $*.o + $(RM) $*.cpp moc_$*.cpp moc_$*.o + +.ui.lo: %.h + $(UIC) -L $(top_srcdir)/muse/widgets -o $*.cpp -impl $*.h $*.ui + $(MOC) $*.h >> $*.cpp + $(LTCXXCOMPILE) -c $*.cpp -o $*.lo + $(RM) $*.cpp moc_$*.cpp moc_$*.lo moc_$*.o + +moc_%.cpp: %.h + $(MOC) $< -o $@ + +%.h: %.ui + $(UIC) -o $@ $< +# $(UIC) -L $(top_srcdir)/muse/widgets -o $@ $< + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/muse2/muse/liste/editctrlbase.ui b/muse2/muse/liste/editctrlbase.ui new file mode 100644 index 00000000..e018a802 --- /dev/null +++ b/muse2/muse/liste/editctrlbase.ui @@ -0,0 +1,702 @@ + +EditCtrlBase + + + MyDialog + + + + 0 + 0 + 601 + 413 + + + + MusE: Edit Controller Event + + + true + + + + unnamed + + + + textLabel1 + + + Time Position + + + + + textLabel1_2 + + + Available Controller: + + + + + buttonNewController + + + Create New Controller + + + + + + true + + + true + + + + + timePos + + + + + widgetStack + + + + 104 + 137 + 236 + + + + + + + 0 + 0 + 0 + + + 238 + 234 + 222 + + + 255 + 255 + 255 + + + 246 + 244 + 238 + + + 119 + 117 + 111 + + + 158 + 155 + 147 + + + 0 + 0 + 0 + + + 255 + 255 + 255 + + + 0 + 0 + 0 + + + 255 + 255 + 255 + + + 104 + 137 + 236 + + + 0 + 0 + 0 + + + 0 + 0 + 128 + + + 255 + 255 + 255 + + + 0 + 0 + 0 + + + 0 + 0 + 0 + + + + + 128 + 128 + 128 + + + 238 + 234 + 222 + + + 255 + 255 + 255 + + + 255 + 255 + 255 + + + 119 + 117 + 111 + + + 158 + 155 + 147 + + + 128 + 128 + 128 + + + 255 + 255 + 255 + + + 128 + 128 + 128 + + + 255 + 255 + 255 + + + 104 + 137 + 236 + + + 0 + 0 + 0 + + + 0 + 0 + 128 + + + 255 + 255 + 255 + + + 0 + 0 + 192 + + + 128 + 0 + 128 + + + + + 0 + 0 + 0 + + + 238 + 234 + 222 + + + 255 + 255 + 255 + + + 255 + 255 + 255 + + + 119 + 117 + 111 + + + 158 + 155 + 147 + + + 0 + 0 + 0 + + + 255 + 255 + 255 + + + 0 + 0 + 0 + + + 255 + 255 + 255 + + + 104 + 137 + 236 + + + 0 + 0 + 0 + + + 0 + 0 + 128 + + + 255 + 255 + 255 + + + 0 + 0 + 192 + + + 128 + 0 + 128 + + + + + + + WStackPage + + + 0 + + + + unnamed + + + + valSlider + + + 127 + + + Horizontal + + + + + controllerName + + + + 255 + 255 + 255 + + + + LineEditPanel + + + Sunken + + + textLabel3 + + + + + textLabel4 + + + Value + + + + + textLabel2 + + + Controller + + + + + valSpinBox + + + 127 + + + + + spacer2 + + + Vertical + + + Expanding + + + + 20 + 40 + + + + + + + + WStackPage + + + 1 + + + + unnamed + + + + textLabel2_2 + + + H-Bank + + + + + textLabel3 + + + L-Bank + + + + + textLabel4_2 + + + Program + + + + + hbank + + + off + + + 128 + + + 0 + + + 0 + + + + + lbank + + + off + + + 128 + + + 0 + + + 0 + + + + + program + + + 128 + + + 1 + + + + + spacer4 + + + Vertical + + + Expanding + + + + 20 + 140 + + + + + + patchName + + + pushButton4 + + + + + + + + Layout1 + + + + unnamed + + + 0 + + + 6 + + + + Horizontal Spacing2 + + + Horizontal + + + Expanding + + + + 20 + 20 + + + + + + buttonOk + + + &OK + + + + + + true + + + true + + + + + buttonCancel + + + &Cancel + + + + + + true + + + + + + + line1 + + + HLine + + + Raised + + + 3 + + + 2 + + + 2 + + + Horizontal + + + + + ctrlList + + + -1 + + + + + spacer3 + + + Horizontal + + + Expanding + + + + 60 + 20 + + + + + + line2 + + + VLine + + + Raised + + + 3 + + + 2 + + + 2 + + + Vertical + + + + + + + PosEdit +
posedit.h
+ + 50 + 20 + + 0 + + 5 + 5 + 0 + 0 + +
+
+ + + buttonOk + clicked() + MyDialog + accept() + + + buttonCancel + clicked() + MyDialog + reject() + + + valSlider + valueChanged(int) + valSpinBox + setValue(int) + + + valSpinBox + valueChanged(int) + valSlider + setValue(int) + + + + + ../widgets/posedit.h + +
diff --git a/muse2/muse/liste/editevent.cpp b/muse2/muse/liste/editevent.cpp new file mode 100644 index 00000000..ef084440 --- /dev/null +++ b/muse2/muse/liste/editevent.cpp @@ -0,0 +1,853 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: editevent.cpp,v 1.12.2.6 2009/02/02 21:38:00 terminator356 Exp $ +// (C) Copyright 1999-2004 Werner Schweer (ws@seh.de) +//========================================================= + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//Added by qt3to4: +#include +#include +#include +#include + +#include "song.h" +#include "event.h" +#include "midictrl.h" +#include "editevent.h" +#include "pitchedit.h" +#include "intlabel.h" +#include "globals.h" +#include "posedit.h" +#include "gconfig.h" +#include "midiport.h" +#include "midiedit/drummap.h" +#include "instruments/minstrument.h" +#include "midi.h" + +//--------------------------------------------------------- +// string2qhex +//--------------------------------------------------------- + +QString string2hex(const unsigned char* data, int len) + { + 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; + } + +//--------------------------------------------------------- +// hex2string +//--------------------------------------------------------- + +char* hex2string(QWidget* parent, const char* src, int& len) + { + char buffer[2048]; + char* dst = buffer; + + while (*src) { + while (*src == ' ' || *src == '\n') + ++src; + char* ep; + long val = strtol(src, &ep, 16); + if (ep == src) { + QMessageBox::information(parent, + QString("MusE"), + QWidget::tr("Cannot convert sysex string")); + return 0; + } + src = ep; + *dst++ = val; + if (dst - buffer >= 2048) { + QMessageBox::information(parent, + QString("MusE"), + QWidget::tr("Hex String too long (2048 bytes limit)")); + return 0; + } + } + len = dst - buffer; + char* b = new char[len+1]; + memcpy(b, buffer, len); + b[len] = 0; + return b; + } + +//--------------------------------------------------------- +// getEvent +//--------------------------------------------------------- + +Event EditNoteDialog::getEvent(int tick, const Event& event, QWidget* parent) + { + EditNoteDialog* dlg = new EditNoteDialog(tick, event, parent); + Event nevent; + if (dlg->exec() == QDialog::Accepted) { + nevent = dlg->event(); + } + delete dlg; + return nevent; + } + +Event EditSysexDialog::getEvent(int tick, const Event& event, QWidget* parent) + { + EditSysexDialog* dlg = new EditSysexDialog(tick, event, parent); + Event nevent; + if (dlg->exec() == QDialog::Accepted) { + nevent = dlg->event(); + } + delete dlg; + return nevent; + } + +Event EditMetaDialog::getEvent(int tick, const Event& event, QWidget* parent) + { + EditEventDialog* dlg = new EditMetaDialog(tick, event, parent); + Event nevent; + if (dlg->exec() == QDialog::Accepted) { + nevent = dlg->event(); + } + delete dlg; + return nevent; + } + +Event EditCAfterDialog::getEvent(int tick, const Event& event, QWidget* parent) + { + EditEventDialog* dlg = new EditCAfterDialog(tick, event, parent); + Event nevent; + if (dlg->exec() == QDialog::Accepted) { + nevent = dlg->event(); + } + delete dlg; + return nevent; + } + +Event EditPAfterDialog::getEvent(int tick, const Event& event, QWidget* parent) + { + EditEventDialog* dlg = new EditPAfterDialog(tick, event, parent); + Event nevent; + if (dlg->exec() == QDialog::Accepted) { + nevent = dlg->event(); + } + delete dlg; + return nevent; + } + +//--------------------------------------------------------- +// EditEventDialog +//--------------------------------------------------------- + +EditEventDialog::EditEventDialog(QWidget* parent, const char* name) + : QDialog(parent, name, true) + { + Q3VBoxLayout* xlayout = new Q3VBoxLayout(this); + layout1 = new Q3GridLayout(this); // ddskrjo this + xlayout->addLayout(layout1); + + //--------------------------------------------------- + // Ok, Cancel + //--------------------------------------------------- + + Q3BoxLayout* w5 = new Q3HBoxLayout(this); // ddskrjo this + xlayout->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); + w5->addStretch(1); + connect(cancelB, SIGNAL(clicked()), SLOT(reject())); + connect(okB, SIGNAL(clicked()), SLOT(accept())); + } + +//--------------------------------------------------------- +// EditNoteDialog +//--------------------------------------------------------- + +EditNoteDialog::EditNoteDialog(int tick, const Event& event, + QWidget* parent, const char* name) + : EditNoteDialogBase(parent, name) + { + if (!event.empty()) { + epos->setValue(tick); + il1->setValue(event.lenTick()); + pl->setValue(event.pitch()); + il2->setValue(event.velo()); + il3->setValue(event.veloOff()); + } + else { + epos->setValue(tick); + il1->setValue(96); + pl->setValue(64); + il2->setValue(100); + il3->setValue(0); + } + } + +//--------------------------------------------------------- +// EditNoteDialog::event +//--------------------------------------------------------- + +Event EditNoteDialog::event() + { + Event event(Note); + event.setTick(epos->pos().tick()); + event.setA(pl->value()); + event.setB(il2->value()); + event.setC(il3->value()); + event.setLenTick(il1->value()); + return event; + } + +//--------------------------------------------------------- +// EditSysExDialog +//--------------------------------------------------------- + +EditSysexDialog::EditSysexDialog(int tick, const Event& event, + QWidget* parent, const char* name) + : EditSysexDialogBase(parent, name) + { + sysex = 0; + if (!event.empty()) { + epos->setValue(tick); + edit->setText(string2hex(event.data(), event.dataLen())); + } + else { + epos->setValue(tick); + } + } + +//--------------------------------------------------------- +// ~EditSysexDialog +//--------------------------------------------------------- + +EditSysexDialog::~EditSysexDialog() + { + if (sysex) + delete sysex; + } + +//--------------------------------------------------------- +// EditSysExDialog::event +//--------------------------------------------------------- + +Event EditSysexDialog::event() + { + Event event(Sysex); + event.setTick(epos->pos().tick()); + event.setData(sysex, len); + return event; + } + +//--------------------------------------------------------- +// accept +//--------------------------------------------------------- + +void EditSysexDialog::accept() + { + QString qsrc = edit->text(); + const char* src = qsrc.latin1(); + + sysex = (unsigned char*)hex2string(this, src, len); + if (sysex) + QDialog::accept(); + } + +//--------------------------------------------------------- +// EditMetaDialog +//--------------------------------------------------------- + +EditMetaDialog::EditMetaDialog(int tick, const Event& ev, + QWidget* parent, const char* name) + : EditEventDialog(parent, name) + { + meta = 0; + setCaption(tr("MusE: Enter Meta Event")); + + QLabel* l1 = new QLabel(tr("Time Position"), this); + epos = new PosEdit(this); + + QLabel* l2 = new QLabel(tr("Meta Type"), this); + il2 = new IntLabel(-1, 0, 127, this, -1); + il2->setFixedWidth(100); + il2->setFrame(true); + il2->setDark(); + typeLabel = new QLabel(this); + typeLabel->setAlignment(Qt::AlignLeft | Qt::AlignVCenter); + Q3HBoxLayout* typeLayout = new Q3HBoxLayout(this); + typeLayout->addWidget(il2); + typeLayout->addWidget(typeLabel); + typeLayout->addStretch(); + + hexButton = new QRadioButton(tr("Enter Hex"), this, "hextoggle"); + hexButton->setChecked(true); + connect(hexButton, SIGNAL(toggled(bool)), SLOT(toggled(bool))); + + edit = new Q3MultiLineEdit(this); + edit->setFont(config.fonts[5]); + + if (!ev.empty()) { + epos->setValue(tick); + il2->setValue(ev.dataA()); + toggled(true); + edit->setText(string2hex(ev.data(), ev.dataLen())); + } + else { + epos->setValue(tick); + il2->setValue(0); + } + + typeChanged(il2->value()); + connect(il2, SIGNAL(valueChanged(int)), SLOT(typeChanged(int))); + + layout1->addWidget(l1, 0, 0); + layout1->addWidget(epos, 0, 1, Qt::AlignLeft); + layout1->addWidget(l2, 1, 0); + + //layout1->addWidget(il2, 1, 1, AlignLeft); + layout1->addLayout(typeLayout, 1, 1); + + layout1->addMultiCellWidget(hexButton, 2, 2, 0, 1); + layout1->addMultiCellWidget(edit, 3, 3, 0, 1); + } + +//--------------------------------------------------------- +// typeChanged +//--------------------------------------------------------- + +void EditMetaDialog::typeChanged(int val) +{ + typeLabel->setText(midiMetaName(val)); +} + +//--------------------------------------------------------- +// toggled +//--------------------------------------------------------- + +void EditMetaDialog::toggled(bool flag) + { + QString qsrc = edit->text(); + const char* src = qsrc.latin1(); + edit->clear(); + + QString dst; + if (flag) { // convert to hex + dst = string2hex((unsigned char*)src, strlen(src)); + } + else { // convert to string + int len; + dst = hex2string(this, src, len); + } + edit->setText(dst); + } + +//--------------------------------------------------------- +// ~EditMetaDialog +//--------------------------------------------------------- + +EditMetaDialog::~EditMetaDialog() + { + if (meta) + delete meta; + } + +//--------------------------------------------------------- +// EditMetaDialog::event +//--------------------------------------------------------- + +Event EditMetaDialog::event() + { + Event event(Meta); + event.setTick(epos->pos().tick()); + event.setA(il2->value()); + event.setData(meta, len); // TODO ?? + return event; + } + +//--------------------------------------------------------- +// accept +//--------------------------------------------------------- + +void EditMetaDialog::accept() + { + QString qsrc = edit->text(); + const char* src = qsrc.latin1(); + if (!hexButton->isChecked()) { + meta = (unsigned char*)strdup(src); + len = strlen(src); + QDialog::accept(); + return; + } + + meta = (unsigned char*)hex2string(this, src, len); + if (meta) + QDialog::accept(); + } + +//--------------------------------------------------------- +// EditCAfterDialog +//--------------------------------------------------------- + +EditCAfterDialog::EditCAfterDialog(int tick, const Event& event, + QWidget* parent, const char* name) + : EditEventDialog(parent, name) + { + setCaption(tr("MusE: Enter Channel Aftertouch")); + + QLabel* l1 = new QLabel(tr("Time Position"), this); + epos = new PosEdit(this); + + QLabel* l2 = new QLabel(tr("Pressure"), this); + il2 = new IntLabel(-1, 0, 127, this, -1); + il2->setFrame(true); + il2->setDark(); + + QSlider* slider = new QSlider(0, 127, 1, 0, Qt::Horizontal, this); + connect(slider, SIGNAL(valueChanged(int)), il2, SLOT(setValue(int))); + connect(il2, SIGNAL(valueChanged(int)), slider, SLOT(setValue(int))); + + if (!event.empty()) { + epos->setValue(tick); + il2->setValue(event.dataA()); + slider->setValue(event.dataA()); + } + else { + epos->setValue(tick); + il2->setValue(64); + slider->setValue(64); + } + + layout1->addWidget(l1, 0, 0); + layout1->addWidget(epos, 0, 1, Qt::AlignLeft); + layout1->addWidget(l2, 1, 0); + layout1->addWidget(il2, 1, 1, Qt::AlignLeft); + layout1->addMultiCellWidget(slider, 2, 2, 0, 1); + } + +//--------------------------------------------------------- +// EditCAfterDialog::event +//--------------------------------------------------------- + +Event EditCAfterDialog::event() + { + Event event(CAfter); + event.setTick(epos->pos().tick()); + event.setA(il2->value()); + return event; + } + +//--------------------------------------------------------- +// EditPAfterDialog +//--------------------------------------------------------- + +EditPAfterDialog::EditPAfterDialog(int tick, const Event& event, + QWidget* parent, const char* name) + : EditEventDialog(parent, name) + { + setCaption(tr("MusE: Enter Poly Aftertouch")); + + QLabel* l1 = new QLabel(tr("Time Position"), this); + epos = new PosEdit(this); + + QLabel* l2 = new QLabel(tr("Pitch"), this); + pl = new PitchEdit(this); + QLabel* l3 = new QLabel(tr("Pressure"), this); + il2 = new IntLabel(-1, 0, 127, this, -1); + il2->setFrame(true); + il2->setDark(); + + QSlider* slider = new QSlider(0, 127, 1, 0, Qt::Horizontal, this); + connect(slider, SIGNAL(valueChanged(int)), il2, SLOT(setValue(int))); + connect(il2, SIGNAL(valueChanged(int)), slider, SLOT(setValue(int))); + + if (!event.empty()) { + epos->setValue(tick); + pl->setValue(event.pitch()); + il2->setValue(event.dataB()); + slider->setValue(event.dataB()); + } + else { + epos->setValue(tick); + pl->setValue(64); + il2->setValue(64); + slider->setValue(64); + } + + layout1->addWidget(l1, 0, 0); + layout1->addWidget(epos, 0, 1, Qt::AlignLeft); + layout1->addWidget(l2, 1, 0); + layout1->addWidget(pl, 1, 1, Qt::AlignLeft); + layout1->addWidget(l3, 2, 0); + layout1->addWidget(il2, 2, 1, Qt::AlignLeft); + layout1->addMultiCellWidget(slider, 3, 3, 0, 1); + } + +//--------------------------------------------------------- +// EditPAfterDialog::event +//--------------------------------------------------------- + +Event EditPAfterDialog::event() + { + Event event(PAfter); + event.setTick(epos->pos().tick()); + event.setA(pl->value()); + event.setB(il2->value()); + return event; + } +//--------------------------------------------------------- +// getEvent +//--------------------------------------------------------- + +Event EditCtrlDialog::getEvent(int tick, const Event& event, + const MidiPart* part, QWidget* parent) + { + EditCtrlDialog* dlg = new EditCtrlDialog(tick, event, part, parent); + Event nevent; + if (dlg->exec() == QDialog::Accepted) { + nevent = dlg->event(); + } + delete dlg; + return nevent; + } + +//--------------------------------------------------------- +// EditCtrlDialog::event +//--------------------------------------------------------- + +Event EditCtrlDialog::event() + { + Event event(Controller); + event.setTick(timePos->pos().tick()); + event.setA(num); + if (num == CTRL_PROGRAM) + event.setB(val); + else + event.setB(valSlider->value() + midiPorts[part->track()->outPort()].midiController(num)->bias()); + return event; + } + +//--------------------------------------------------------- +// EditCtrlDialog +// PosEdit* timePos; +// QSlider* valSlider; +// QSpinBox* valSpinBox; +// QLabel* controllerName; +// QListBox* ctrlList; +// QPushButton* buttonNewController; +//--------------------------------------------------------- + +EditCtrlDialog::EditCtrlDialog(int tick, const Event& event, + const MidiPart* p, QWidget* parent, const char* name) + : EditCtrlBase(parent, name), part(p) + { + val = 0; + num = 0; + if (!event.empty()) { + num = event.dataA(); + val = event.dataB(); + } + + pop = new Q3PopupMenu(this); + pop->setCheckable(false); + + MidiTrack* track = part->track(); + int portn = track->outPort(); + MidiPort* port = &midiPorts[portn]; + bool isDrum = track->type() == Track::DRUM; + MidiCtrlValListList* cll = port->controller(); + + ctrlList->clear(); + ctrlList->setSelectionMode(Q3ListBox::Single); + + // + // populate list of available controller + // + + std::list sList; + typedef std::list::iterator isList; + + for (iMidiCtrlValList i = cll->begin(); i != cll->end(); ++i) { + MidiCtrlValList* cl = i->second; + int num = cl->num(); + + // dont show drum specific controller if not a drum track + if ((num & 0xff) == 0xff) { + if (!isDrum) + continue; + } + MidiController* c = port->midiController(num); + isList i = sList.begin(); + for (; i != sList.end(); ++i) { + if (*i == c->name()) + break; + } + if (i == sList.end()) + sList.push_back(c->name()); + } + MidiController* mc = port->midiController(num); + int idx = 0; + int selectionIndex = 0; + for (isList i = sList.begin(); i != sList.end(); ++i, ++idx) { + ctrlList->insertItem(*i); + if (mc->name() == *i) + selectionIndex = idx; + } + ctrlList->setSelected(selectionIndex, true); + + valSlider->setRange(mc->minVal(), mc->maxVal()); + valSpinBox->setRange(mc->minVal(), mc->maxVal()); + + controllerName->setText(mc->name()); + + if(!event.empty()) + { + if(num == CTRL_PROGRAM) + { + widgetStack->raiseWidget(1); + updatePatch(); + } + else + { + widgetStack->raiseWidget(0); + valSlider->setValue(val - mc->bias()); + } + } + else + ctrlListClicked(ctrlList->selectedItem()); + connect(ctrlList, SIGNAL(clicked(Q3ListBoxItem*)), SLOT(ctrlListClicked(Q3ListBoxItem*))); + connect(buttonNewController, SIGNAL(clicked()), SLOT(newController())); + connect(hbank, SIGNAL(valueChanged(int)), SLOT(programChanged())); + connect(lbank, SIGNAL(valueChanged(int)), SLOT(programChanged())); + connect(program, SIGNAL(valueChanged(int)), SLOT(programChanged())); + connect(patchName, SIGNAL(released()), SLOT(instrPopup())); + timePos->setValue(tick); + + } +//--------------------------------------------------------- +// newController +//--------------------------------------------------------- + +void EditCtrlDialog::newController() + { + Q3PopupMenu* pop = new Q3PopupMenu(this); + pop->setCheckable(this); + // + // populate popup with all controllers available for + // current instrument + // + MidiTrack* track = part->track(); + int portn = track->outPort(); + MidiPort* port = &midiPorts[portn]; + MidiInstrument* instr = port->instrument(); + MidiControllerList* mcl = instr->controller(); + + MidiCtrlValListList* cll = port->controller(); + int channel = track->outChannel(); + for (iMidiController ci = mcl->begin(); ci != mcl->end(); ++ci) + { + if(cll->find(channel, ci->second->num()) == cll->end()) + pop->insertItem(ci->second->name()); + } + int rv = pop->exec(buttonNewController->mapToGlobal(QPoint(0,0))); + if (rv != -1) { + QString s = pop->text(rv); + for (iMidiController ci = mcl->begin(); ci != mcl->end(); ++ci) { + MidiController* mc = ci->second; + if (mc->name() == s) { + if(cll->find(channel, mc->num()) == cll->end()) + { + MidiCtrlValList* vl = new MidiCtrlValList(mc->num()); + cll->add(channel, vl); + //song->update(SC_MIDI_CONTROLLER_ADD); + } + for (int idx = 0; ;++idx) { + QString str = ctrlList->text(idx); + if (s == str) + { + ctrlList->setSelected(idx, true); + ctrlListClicked(ctrlList->item(idx)); + break; + } + if (str.isNull()) { + ctrlList->insertItem(s); + ctrlList->setSelected(idx, true); + ctrlListClicked(ctrlList->item(idx)); + break; + } + } + + break; + } + } + } + delete pop; + } +//--------------------------------------------------------- +// ctrlListClicked +//--------------------------------------------------------- + +void EditCtrlDialog::ctrlListClicked(Q3ListBoxItem* item) + { + if (item == 0) + return; + QString s(item->text()); + + MidiTrack* track = part->track(); + int portn = track->outPort(); + MidiPort* port = &midiPorts[portn]; + MidiCtrlValListList* cll = port->controller(); + + iMidiCtrlValList i; + for (i = cll->begin(); i != cll->end(); ++i) { + MidiCtrlValList* cl = i->second; + num = cl->num(); + MidiController* c = port->midiController(num); + if (s == c->name()) { + if (num == CTRL_PROGRAM) { + widgetStack->raiseWidget(1); + + val = c->initVal(); + if(val == CTRL_VAL_UNKNOWN) + val = 0; + updatePatch(); + } + else { + widgetStack->raiseWidget(0); + valSlider->setRange(c->minVal(), c->maxVal()); + valSpinBox->setRange(c->minVal(), c->maxVal()); + controllerName->setText(s); + val = c->initVal(); + + if(val == CTRL_VAL_UNKNOWN || val == 0) + { + switch(num) + { + case CTRL_PANPOT: + val = 64 - c->bias(); + break; + case CTRL_VOLUME: + val = 100; + break; + default: + val = 0; + break; + } + } + valSlider->setValue(val); + } + break; + } + } + if (i == cll->end()) + printf("controller %s not found!\n", s.latin1()); + } + +//--------------------------------------------------------- +// updatePatch +//--------------------------------------------------------- + +void EditCtrlDialog::updatePatch() + { + MidiTrack* track = part->track(); + int port = track->outPort(); + int channel = track->outChannel(); + MidiInstrument* instr = midiPorts[port].instrument(); + const char* name = instr->getPatchName(channel, val, song->mtype(), track->type() == Track::DRUM); + patchName->setText(QString(name)); + + int hb = ((val >> 16) & 0xff) + 1; + if (hb == 0x100) + hb = 0; + int lb = ((val >> 8) & 0xff) + 1; + if (lb == 0x100) + lb = 0; + int pr = (val & 0xff) + 1; + if (pr == 0x100) + pr = 0; + + hbank->blockSignals(true); + lbank->blockSignals(true); + program->blockSignals(true); + + hbank->setValue(hb); + lbank->setValue(lb); + program->setValue(pr); + + hbank->blockSignals(false); + lbank->blockSignals(false); + program->blockSignals(false); + } + +//--------------------------------------------------------- +// instrPopup +//--------------------------------------------------------- + +void EditCtrlDialog::instrPopup() + { + MidiTrack* track = part->track(); + int channel = track->outChannel(); + int port = track->outPort(); + MidiInstrument* instr = midiPorts[port].instrument(); + instr->populatePatchPopup(pop, channel, song->mtype(), track->type() == Track::DRUM); + + if(pop->count() == 0) + return; + int rv = pop->exec(patchName->mapToGlobal(QPoint(10,5))); + if (rv != -1) { + val = rv; + updatePatch(); + } + } + +//--------------------------------------------------------- +// programChanged +//--------------------------------------------------------- + +void EditCtrlDialog::programChanged() + { +// MidiTrack* track = part->track(); +// int channel = track->outChannel(); +// int port = track->outPort(); + int hb = hbank->value(); + int lb = lbank->value(); + int prog = program->value(); + + if (hb > 0 && hb < 129) + hb -= 1; + else + hb = 0xff; + if (lb > 0 && lb < 129) + lb -= 1; + else + lb = 0xff; + if (prog > 0 && prog < 129) + prog -= 1; + else + prog = 0xff; + + val = (hb << 16) + (lb << 8) + prog; + updatePatch(); + } + diff --git a/muse2/muse/liste/editevent.h b/muse2/muse/liste/editevent.h new file mode 100644 index 00000000..769ba256 --- /dev/null +++ b/muse2/muse/liste/editevent.h @@ -0,0 +1,196 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: editevent.h,v 1.6.2.1 2008/05/21 00:28:53 terminator356 Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __EDIT_EVENT_H__ +#define __EDIT_EVENT_H__ + +#include +//Added by qt3to4: +#include +#include +#include + +#include "editnotedialogbase.h" +#include "editsysexdialogbase.h" +#include "editctrlbase.h" +#include "event.h" + +class PosEdit; +class IntLabel; +class PitchEdit; +class Q3GridLayout; +class Q3MultiLineEdit; +class QRadioButton; +class PosEdit; +class MidiPart; +class Q3ListBoxItem; +class Q3PopupMenu; +//--------------------------------------------------------- +// EditEventDialog +//--------------------------------------------------------- + +class EditEventDialog : public QDialog { + Q_OBJECT + + protected: + Q3GridLayout* layout1; + + public: + EditEventDialog(QWidget* parent=0, const char* name=0); + virtual Event event() = 0; + }; + +//--------------------------------------------------------- +// EditNoteDialog +//--------------------------------------------------------- + +class EditNoteDialog : public EditNoteDialogBase { + Q_OBJECT + + public: + EditNoteDialog(int tick, const Event&, + QWidget* parent=0, const char* name=0); + static Event getEvent(int tick, const Event&, + QWidget* parent = 0); + virtual Event event(); + }; + +//--------------------------------------------------------- +// EditSysExDialog +//--------------------------------------------------------- + +class EditSysexDialog : public EditSysexDialogBase { + Q_OBJECT + + unsigned char* sysex; + int len; + + protected: + Q3GridLayout* layout; + + private slots: + virtual void accept(); + + public: + EditSysexDialog(int tick, const Event&, + QWidget* parent=0, const char* name=0); + ~EditSysexDialog(); + static Event getEvent(int tick, const Event&, + QWidget* parent = 0); + virtual Event event(); + }; + +//--------------------------------------------------------- +// EditCtrlDialog +//--------------------------------------------------------- + +class EditCtrlDialog : public EditCtrlBase { + Q_OBJECT + + int num; // controller number + int val; // controller value (for prog. changes) + + const MidiPart* part; + Q3PopupMenu* pop; + + void updatePatch(); + + private slots: + void ctrlListClicked(Q3ListBoxItem*); + void newController(); + void programChanged(); + void instrPopup(); + + protected: + Q3GridLayout* layout; + + + public: + EditCtrlDialog(int tick, const Event&, + const MidiPart*, QWidget* parent=0, const char* name=0); + static Event getEvent(int tick, const Event&, const MidiPart*, + QWidget* parent = 0); + virtual Event event(); + }; + +//--------------------------------------------------------- +// EditMetaDialog +//--------------------------------------------------------- + +class EditMetaDialog : public EditEventDialog { + Q_OBJECT + + unsigned char* meta; + int len; + PosEdit* epos; + Q3MultiLineEdit* edit; + IntLabel* il2; + QRadioButton* hexButton; + QLabel* typeLabel; + + protected: + Q3GridLayout* layout; + + private slots: + virtual void accept(); + void toggled(bool); + void typeChanged(int); + + public: + EditMetaDialog(int tick, const Event&, + QWidget* parent=0, const char* name=0); + ~EditMetaDialog(); + static Event getEvent(int tick, const Event&, + QWidget* parent = 0); + virtual Event event(); + }; + +//--------------------------------------------------------- +// EditCAfterDialog +//--------------------------------------------------------- + +class EditCAfterDialog : public EditEventDialog { + Q_OBJECT + + PosEdit* epos; + IntLabel* il2; + + protected: + Q3GridLayout* layout; + + public: + EditCAfterDialog(int tick, const Event&, + QWidget* parent=0, const char* name=0); + static Event getEvent(int tick, const Event&, + QWidget* parent = 0); + virtual Event event(); + }; + +//--------------------------------------------------------- +// EditPAfterDialog +//--------------------------------------------------------- + +class EditPAfterDialog : public EditEventDialog { + Q_OBJECT + + PosEdit* epos; + PitchEdit* pl; + IntLabel* il2; + + protected: + Q3GridLayout* layout; + + public: + EditPAfterDialog(int tick, const Event&, + QWidget* parent=0, const char* name=0); + static Event getEvent(int tick, const Event&, + QWidget* parent = 0); + virtual Event event(); + }; + +#endif + diff --git a/muse2/muse/liste/listedit.cpp b/muse2/muse/liste/listedit.cpp new file mode 100644 index 00000000..4cdb7892 --- /dev/null +++ b/muse2/muse/liste/listedit.cpp @@ -0,0 +1,909 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: listedit.cpp,v 1.11.2.11 2009/05/24 21:43:44 terminator356 Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//Added by qt3to4: +#include +#include +#include + +#include "listedit.h" +#include "mtscale.h" +#include "globals.h" +#include "icons.h" +#include "editevent.h" +#include "xml.h" +#include "pitchedit.h" +#include "song.h" +#include "audio.h" +#include "shortcuts.h" +#include "midi.h" +#include "event.h" +#include "midiport.h" +#include "midictrl.h" + +//--------------------------------------------------------- +// EventListItem +//--------------------------------------------------------- + +class EventListItem : public Q3ListViewItem { + public: + Event event; + MidiPart* part; + + EventListItem(Q3ListView* parent, Event ev, MidiPart* p) + : Q3ListViewItem(parent) { + event = ev; + part = p; + } + virtual QString text(int col) const; + virtual int compare(Q3ListViewItem* i, int col, bool ascend) const + { + EventListItem* eli = (EventListItem*)i; + switch(col) + { + case 0: + return event.tick() - eli->event.tick(); + break; + case 1: + return part->tick() + event.tick() - (eli->part->tick() + eli->event.tick()); + break; + case 2: + return key(col, ascend).localeAwareCompare(i->key(col, ascend)); + break; + case 3: + return part->track()->outChannel() - eli->part->track()->outChannel(); + break; + case 4: + return event.dataA() - eli->event.dataA(); + break; + case 5: + return event.dataB() - eli->event.dataB(); + break; + case 6: + return event.dataC() - eli->event.dataC(); + break; + case 7: + return event.lenTick() - eli->event.lenTick(); + break; + case 8: + return key(col, ascend).localeAwareCompare(i->key(col, ascend)); + break; + default: + return 0; + } + } + }; +/*--------------------------------------------------------- + * midi_meta_name + *---------------------------------------------------------*/ + +static QString midiMetaComment(const Event& ev) + { + int meta = ev.dataA(); + QString s = midiMetaName(meta); + + switch (meta) { + case 0: + case 0x2f: + case 0x51: + case 0x54: + case 0x58: + case 0x59: + case 0x74: + case 0x7f: return s; + + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + case 9: + case 0x0a: + case 0x0b: + case 0x0c: + case 0x0d: + case 0x0e: + case 0x0f: + { + s += QString(": "); + const char* txt = (char*)(ev.data()); + int len = ev.dataLen(); + char buffer[len+1]; + memcpy(buffer, txt, len); + buffer[len] = 0; + + for (int i = 0; i < len; ++i) { + if (buffer[i] == '\n' || buffer[i] == '\r') + buffer[i] = ' '; + } + return s + QString(buffer); + } + + case 0x20: + case 0x21: + default: + { + s += QString(": "); + int i; + int len = ev.lenTick(); + int n = len > 10 ? 10 : len; + for (i = 0; i < n; ++i) { + if (i >= ev.dataLen()) + break; + s += QString(" 0x"); + QString k; + k.setNum(ev.data()[i] & 0xff, 16); + s += k; + } + if (i == 10) + s += QString("..."); + return s; + } + } + } + +//--------------------------------------------------------- +// closeEvent +//--------------------------------------------------------- + +void ListEdit::closeEvent(QCloseEvent* e) + { + emit deleted((unsigned long)this); + e->accept(); + } + +//--------------------------------------------------------- +// songChanged +//--------------------------------------------------------- + +void ListEdit::songChanged(int type) + { + if (type == 0) + return; + if (type & (SC_PART_REMOVED | SC_PART_MODIFIED + | SC_PART_INSERTED | SC_EVENT_REMOVED | SC_EVENT_MODIFIED + | SC_EVENT_INSERTED | SC_SELECTION)) { + if (type & (SC_PART_REMOVED | SC_PART_INSERTED)) + genPartlist(); + // close window if editor has no parts anymore + if (parts()->empty()) { + close(false); + return; + } + if (type == SC_SELECTION) { + bool update = false; + Q3ListViewItem* ci = 0; + for (Q3ListViewItem* i = liste->firstChild(); i; i = i->nextSibling()) { + if (i->isSelected() ^ ((EventListItem*)i)->event.selected()) { + i->setSelected(((EventListItem*)i)->event.selected()); + if (i->isSelected()) + ci = i; + update = true; + } + } + if (update) { + if (ci) + liste->setCurrentItem(ci); + liste->triggerUpdate(); + } + } + else { + curPart = 0; + curTrack = 0; + liste->clear(); + for (iPart p = parts()->begin(); p != parts()->end(); ++p) { + MidiPart* part = (MidiPart*) (p->second); + if (part->sn() == curPartId) + curPart = part; + EventList* el = part->events(); + for (iEvent i = el->begin(); i != el->end(); ++i) { + EventListItem* item = new EventListItem(liste, i->second, part); + item->setSelected(i->second.selected()); + if (item->event.tick() == (unsigned) selectedTick) { //prevent compiler warning: comparison of signed/unsigned) + liste->setCurrentItem(item); + item->setSelected(true); + liste->ensureItemVisible(item); + } + } + } + } + + // p3.3.34 + //if (curPart == 0) + // curPart = (MidiPart*)(parts()->begin()->second); + //curTrack = curPart->track(); + if(!curPart) + { + if(!parts()->empty()) + { + curPart = (MidiPart*)(parts()->begin()->second); + if(curPart) + curTrack = curPart->track(); + else + curPart = 0; + } + } + } + } + +//--------------------------------------------------------- +// text +//--------------------------------------------------------- + +QString EventListItem::text(int col) const + { + QString s; + QString commentLabel; + switch(col) { + case 0: + s.setNum(event.tick()); + break; + case 1: + { + int t = event.tick() + part->tick(); + int bar, beat; + unsigned tick; + sigmap.tickValues(t, &bar, &beat, &tick); + s.sprintf("%04d.%02d.%03d", bar+1, beat+1, tick); + } + break; + case 2: + switch(event.type()) { + case Note: + s = QString("Note"); + break; + case Controller: + { + const char* cs; + switch (midiControllerType(event.dataA())) { + case MidiController::Controller7: cs = "Ctrl7"; break; + case MidiController::Controller14: cs = "Ctrl14"; break; + case MidiController::RPN: cs = "RPN"; break; + case MidiController::NRPN: cs = "NRPN"; break; + case MidiController::Pitch: cs = "Pitch"; break; + case MidiController::Program: cs = "Program"; break; + case MidiController::RPN14: cs = "RPN14"; break; + case MidiController::NRPN14: cs = "NRPN14"; break; + default: cs = "Ctrl?"; break; + } + s = QString(cs); + } + break; + case Sysex: + { + commentLabel = QString("len "); + QString k; + k.setNum(event.dataLen()); + commentLabel += k; + commentLabel += QString(" "); + + commentLabel += nameSysex(event.dataLen(), event.data()); + int i; + for (i = 0; i < 10; ++i) { + if (i >= event.dataLen()) + break; + commentLabel += QString(" 0x"); + QString k; + k.setNum(event.data()[i] & 0xff, 16); + commentLabel += k; + } + if (i == 10) + commentLabel += QString("..."); + } + s = QString("SysEx"); + break; + case PAfter: + s = QString("PoAT"); + break; + case CAfter: + s = QString("ChAT"); + break; + case Meta: + commentLabel = midiMetaComment(event); + s = QString("Meta"); + break; + case Wave: + break; + default: + printf("unknown event type %d\n", event.type()); + } + break; + case 3: + s.setNum(part->track()->outChannel() + 1); + break; + case 4: + if (event.isNote() || event.type() == PAfter) + s = pitch2string(event.dataA()); + else if (event.type() == Controller) + s.setNum(event.dataA() & 0xffff); // mask off type bits + else + s.setNum(event.dataA()); + break; + case 5: + if(event.type() == Controller && + midiControllerType(event.dataA()) == MidiController::Program) + { + int val = event.dataB(); + int hb = ((val >> 16) & 0xff) + 1; + if (hb == 0x100) + hb = 0; + int lb = ((val >> 8) & 0xff) + 1; + if (lb == 0x100) + lb = 0; + int pr = (val & 0xff) + 1; + if (pr == 0x100) + pr = 0; + s.sprintf("%d-%d-%d", hb, lb, pr); + } + else + s.setNum(event.dataB()); + break; + case 6: + s.setNum(event.dataC()); + break; + case 7: + s.setNum(event.lenTick()); + break; + case 8: + switch(event.type()) { + case Controller: + { + MidiPort* mp = &midiPorts[part->track()->outPort()]; + MidiController* mc = mp->midiController(event.dataA()); + s = mc->name(); + } + break; + case Sysex: + { + s = QString("len "); + QString k; + k.setNum(event.dataLen()); + s += k; + s += QString(" "); + + commentLabel += nameSysex(event.dataLen(), event.data()); + int i; + for (i = 0; i < 10; ++i) { + if (i >= event.dataLen()) + break; + s += QString(" 0x"); + QString k; + k.setNum(event.data()[i] & 0xff, 16); + s += k; + } + if (i == 10) + s += QString("..."); + } + break; + case Meta: + s = midiMetaComment(event); + break; + default: + break; + } + break; + + } + return s; + } + +//--------------------------------------------------------- +// ListEdit +//--------------------------------------------------------- + +ListEdit::ListEdit(PartList* pl) + : MidiEditor(0, 0, pl) + { + insertItems = new Q3ActionGroup(this, "InsertItems", false); + insertNote = new Q3Action(tr("Insert Note"), QIcon(*note1Icon), tr("insert Note"), + 0, insertItems); + insertSysEx = new Q3Action(tr("Insert SysEx"), QIcon(*sysexIcon), tr("insert SysEx"), + 0, insertItems); + insertCtrl = new Q3Action(tr("Insert Ctrl"), QIcon(*ctrlIcon), tr("insert Ctrl"), + 0, insertItems); + insertMeta = new Q3Action(tr("Insert Meta"), QIcon(*metaIcon), tr("insert Meta"), + 0, insertItems); + insertCAfter = new Q3Action(tr("Insert Channel Aftertouch"), QIcon(*cafterIcon), tr("insert Channel Aftertouch"), + 0, insertItems); + insertPAfter = new Q3Action(tr("Insert Key Aftertouch"), QIcon(*pafterIcon), tr("insert Poly Aftertouch"), + 0, insertItems); + + connect(insertNote, SIGNAL(activated()), SLOT(editInsertNote())); + connect(insertSysEx, SIGNAL(activated()), SLOT(editInsertSysEx())); + connect(insertCtrl, SIGNAL(activated()), SLOT(editInsertCtrl())); + connect(insertMeta, SIGNAL(activated()), SLOT(editInsertMeta())); + connect(insertCAfter, SIGNAL(activated()), SLOT(editInsertCAfter())); + connect(insertPAfter, SIGNAL(activated()), SLOT(editInsertPAfter())); + + //---------Pulldown Menu---------------------------- + menuEdit = new Q3PopupMenu(this); + menuBar()->insertItem(tr("&Edit"), menuEdit); + undoRedo->addTo(menuEdit); + + Q3Accel* qa = new Q3Accel(this); + qa->connectItem(qa->insertItem(Qt::CTRL+Qt::Key_Z), song, SLOT(undo())); + qa->connectItem(qa->insertItem(Qt::CTRL+Qt::Key_Y), song, SLOT(redo())); + + menuEdit->insertSeparator(); +#if 0 + menuEdit->insertItem(tr("Cut"), EList::CMD_CUT); + menuEdit->setAccel(Qt::CTRL+Qt::Key_X, EList::CMD_CUT); + menuEdit->insertItem(tr("Copy"), EList::CMD_COPY); + menuEdit->setAccel(Qt::CTRL+Qt::Key_C, EList::CMD_COPY); + menuEdit->insertItem(tr("Paste"), EList::CMD_PASTE); + menuEdit->setAccel(Qt::CTRL+Qt::Key_V, EList::CMD_PASTE); + menuEdit->insertSeparator(); +#endif + menuEdit->insertItem(tr("Delete Events"), CMD_DELETE); + menuEdit->setAccel(Qt::Key_Delete, CMD_DELETE); + menuEdit->insertSeparator(); + + insertItems->addTo(menuEdit); + + connect(menuEdit, SIGNAL(activated(int)), SLOT(cmd(int))); + + //---------ToolBar---------------------------------- + listTools = new Q3ToolBar(this, "list-tools"); + listTools->setLabel(tr("List Tools")); + undoRedo->addTo(listTools); + Q3ToolBar* insertTools = new Q3ToolBar(this, "insert"); + insertTools->setLabel(tr("Insert Tools")); + insertItems->addTo(insertTools); + + // + //--------------------------------------------------- + // liste + //--------------------------------------------------- + // + + liste = new Q3ListView(mainw); + QFontMetrics fm(liste->font()); + int n = fm.width('9'); + int b = 24; + int c = fm.width(QString("Val B")); + int sortIndW = n * 3; + liste->setAllColumnsShowFocus(true); + liste->setSorting(0); + liste->setSelectionMode(Q3ListView::Extended); + liste->setShowSortIndicator(true); + liste->addColumn(tr("Tick"), n * 6 + b); + liste->addColumn(tr("Bar"), fm.width(QString("9999.99.999")) + b); + liste->addColumn(tr("Type"), fm.width(QString("Program")) + b); + liste->addColumn(tr("Ch"), n * 2 + b + sortIndW); + liste->addColumn(tr("Val A"), c + b + sortIndW); + liste->addColumn(tr("Val B"), c + b + sortIndW); + liste->addColumn(tr("Val C"), c + b + sortIndW); + liste->addColumn(tr("Len"), n * 4 + b + sortIndW); + liste->addColumn(tr("Comment"), fm.width(QString("MainVolume")) + 70); + liste->setResizeMode(Q3ListView::LastColumn); + connect(liste, SIGNAL(selectionChanged()), SLOT(selectionChanged())); + connect(liste, SIGNAL(doubleClicked(Q3ListViewItem*)), SLOT(doubleClicked(Q3ListViewItem*))); + //--------------------------------------------------- + // Rest + //--------------------------------------------------- + + mainGrid->setRowStretch(1, 100); + mainGrid->setColStretch(0, 100); + mainGrid->addMultiCellWidget(liste, 1, 2, 0, 0); + connect(song, SIGNAL(songChanged(int)), SLOT(songChanged(int))); + songChanged(-1); + + // p3.3.34 + // Was crashing because of -1 stored, because there was an invalid + // part pointer stored. + //curPart = (MidiPart*)(pl->begin()->second); + if(pl->empty()) + { + curPart = 0; + curPartId = -1; + } + else + { + curPart = (MidiPart*)pl->begin()->second; + if(curPart) + curPartId = curPart->sn(); + else + { + curPart = 0; + curPartId = -1; + } + } + + initShortcuts(); + } + +//--------------------------------------------------------- +// ~ListEdit +//--------------------------------------------------------- + +ListEdit::~ListEdit() + { + undoRedo->removeFrom(listTools); + } + +//--------------------------------------------------------- +// editInsertNote +//--------------------------------------------------------- + +void ListEdit::editInsertNote() + { + // p3.3.34 + if(!curPart) + return; + + Event event = EditNoteDialog::getEvent(curPart->tick(), Event(), this); + if (!event.empty()) { + //No events before beginning of part + take Part offset into consideration + unsigned tick = event.tick(); + if (tick < curPart->tick()) + tick = 0; + else + tick-= curPart->tick(); + event.setTick(tick); + // Indicate do undo, and do not handle port controller values. + //audio->msgAddEvent(event, curPart); + audio->msgAddEvent(event, curPart, true, false, false); + } + } + +//--------------------------------------------------------- +// editInsertSysEx +//--------------------------------------------------------- + +void ListEdit::editInsertSysEx() + { + // p3.3.34 + if(!curPart) + return; + + Event event = EditSysexDialog::getEvent(curPart->tick(), Event(), this); + if (!event.empty()) { + //No events before beginning of part + take Part offset into consideration + unsigned tick = event.tick(); + if (tick < curPart->tick()) + tick = 0; + else + tick-= curPart->tick(); + event.setTick(tick); + // Indicate do undo, and do not handle port controller values. + //audio->msgAddEvent(event, curPart); + audio->msgAddEvent(event, curPart, true, false, false); + } + } + +//--------------------------------------------------------- +// editInsertCtrl +//--------------------------------------------------------- + +void ListEdit::editInsertCtrl() + { + // p3.3.34 + if(!curPart) + return; + + Event event = EditCtrlDialog::getEvent(curPart->tick(), Event(), curPart, this); + if (!event.empty()) { + //No events before beginning of part + take Part offset into consideration + unsigned tick = event.tick(); + if (tick < curPart->tick()) + tick = 0; + else + tick-= curPart->tick(); + event.setTick(tick); + // Indicate do undo, and do port controller values and clone parts. + //audio->msgAddEvent(event, curPart); + audio->msgAddEvent(event, curPart, true, true, true); + } + } + +//--------------------------------------------------------- +// editInsertMeta +//--------------------------------------------------------- + +void ListEdit::editInsertMeta() + { + // p3.3.34 + if(!curPart) + return; + + Event event = EditMetaDialog::getEvent(curPart->tick(), Event(), this); + if (!event.empty()) { + //No events before beginning of part + take Part offset into consideration + unsigned tick = event.tick(); + if (tick < curPart->tick()) + tick = 0; + else + tick-= curPart->tick(); + event.setTick(tick); + // Indicate do undo, and do not handle port controller values. + //audio->msgAddEvent(event, curPart); + audio->msgAddEvent(event, curPart, true, false, false); + } + } + +//--------------------------------------------------------- +// editInsertCAfter +//--------------------------------------------------------- + +void ListEdit::editInsertCAfter() + { + // p3.3.34 + if(!curPart) + return; + + Event event = EditCAfterDialog::getEvent(curPart->tick(), Event(), this); + if (!event.empty()) { + //No events before beginning of part + take Part offset into consideration + unsigned tick = event.tick(); + if (tick < curPart->tick()) + tick = 0; + else + tick-= curPart->tick(); + event.setTick(tick); + // Indicate do undo, and do not handle port controller values. + //audio->msgAddEvent(event, curPart); + audio->msgAddEvent(event, curPart, true, false, false); + } + } + +//--------------------------------------------------------- +// editInsertPAfter +//--------------------------------------------------------- + +void ListEdit::editInsertPAfter() + { + // p3.3.34 + if(!curPart) + return; + + Event ev; + Event event = EditPAfterDialog::getEvent(curPart->tick(), ev, this); + if (!event.empty()) { + //No events before beginning of part + take Part offset into consideration + unsigned tick = event.tick(); + if (tick < curPart->tick()) + tick = 0; + else + tick-= curPart->tick(); + event.setTick(tick); + // Indicate do undo, and do not handle port controller values. + //audio->msgAddEvent(event, curPart); + audio->msgAddEvent(event, curPart, true, false, false); + } + } + +//--------------------------------------------------------- +// editEvent +//--------------------------------------------------------- + +void ListEdit::editEvent(Event& event, MidiPart* part) + { + int tick = event.tick() + part->tick(); + Event nevent; + switch(event.type()) { + case Note: + nevent = EditNoteDialog::getEvent(tick, event, this); + break; + case Controller: + nevent = EditCtrlDialog::getEvent(tick, event, part, this); + break; + case Sysex: + nevent = EditSysexDialog::getEvent(tick, event, this); + break; + case PAfter: + nevent = EditPAfterDialog::getEvent(tick, event, this); + break; + case CAfter: + nevent = EditCAfterDialog::getEvent(tick, event, this); + break; + case Meta: + nevent = EditMetaDialog::getEvent(tick, event, this); + break; + default: + return; + } + if (!nevent.empty()) { + // TODO: check for event != nevent + int tick = nevent.tick() - part->tick(); + nevent.setTick(tick); + if (tick < 0) + printf("event not in part %d - %d - %d, not changed\n", part->tick(), + nevent.tick(), part->tick() + part->lenTick()); + else + { + if(event.type() == Controller) + // Indicate do undo, and do port controller values and clone parts. + //audio->msgChangeEvent(event, nevent, part); + audio->msgChangeEvent(event, nevent, part, true, true, true); + else + // Indicate do undo, and do not do port controller values and clone parts. + //audio->msgChangeEvent(event, nevent, part); + audio->msgChangeEvent(event, nevent, part, true, false, false); + } + } + } + +//--------------------------------------------------------- +// readStatus +//--------------------------------------------------------- + +void ListEdit::readStatus(Xml& xml) + { + 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 == "midieditor") + MidiEditor::readStatus(xml); + else + xml.unknown("ListEdit"); + break; + case Xml::TagEnd: + if (tag == "listeditor") + return; + default: + break; + } + } + } + +//--------------------------------------------------------- +// writeStatus +//--------------------------------------------------------- + +void ListEdit::writeStatus(int level, Xml& xml) const + { + writePartList(level, xml); + xml.tag(level++, "listeditor"); + MidiEditor::writeStatus(level, xml); + xml.tag(level, "/listeditor"); + } + +//--------------------------------------------------------- +// selectionChanged +//--------------------------------------------------------- + +void ListEdit::selectionChanged() + { + bool update = false; + for (Q3ListViewItem* i = liste->firstChild(); i; i = i->nextSibling()) { + if (i->isSelected() ^ ((EventListItem*)i)->event.selected()) { + ((EventListItem*)i)->event.setSelected(i->isSelected()); + update = true; + } + } + if (update) + song->update(SC_SELECTION); + } + +//--------------------------------------------------------- +// doubleClicked +//--------------------------------------------------------- + +void ListEdit::doubleClicked(Q3ListViewItem* item) + { + EventListItem* ev = (EventListItem*) item; + editEvent(ev->event, ev->part); + } + +//--------------------------------------------------------- +// cmd +//--------------------------------------------------------- + +void ListEdit::cmd(int cmd) + { + switch(cmd) { + case CMD_DELETE: + bool found = false; + for (Q3ListViewItem* i = liste->firstChild(); i; i = i->nextSibling()) + { + EventListItem *item = (EventListItem *) i; + if (i->isSelected() || item->event.selected()) + { + found = true; + break; + } + } + if(!found) + break; + song->startUndo(); + + EventListItem *deletedEvent=NULL; + for (Q3ListViewItem* i = liste->firstChild(); i; i = i->nextSibling()) { + EventListItem *item = (EventListItem *) i; + + if (i->isSelected() || item->event.selected()) { + deletedEvent=item; + // Indicate no undo, and do port controller values and clone parts. + //audio->msgDeleteEvent(item->event, item->part, false); + audio->msgDeleteEvent(item->event, item->part, false, true, true); + } + } + + unsigned int nextTick=0; + // find biggest tick + for (Q3ListViewItem* i = liste->firstChild(); i; i = i->nextSibling()) { + EventListItem *item = (EventListItem *) i; + if (item->event.tick() > nextTick && item != deletedEvent) + nextTick=item->event.tick(); + } + // check if there's a tick that is "just" bigger than the deleted + for (Q3ListViewItem* i = liste->firstChild(); i; i = i->nextSibling()) { + EventListItem *item = (EventListItem *) i; + if (item->event.tick() >= deletedEvent->event.tick() && + item->event.tick() < nextTick && + item != deletedEvent ) { + nextTick=item->event.tick(); + } + } + selectedTick=nextTick; + song->endUndo(SC_EVENT_MODIFIED); + //printf("selected tick = %d\n", selectedTick); + //emit selectionChanged(); + break; + } + } + +//--------------------------------------------------------- +// configChanged +//--------------------------------------------------------- + +void ListEdit::configChanged() + { + initShortcuts(); + } + +//--------------------------------------------------------- +// initShortcuts +//--------------------------------------------------------- + +void ListEdit::initShortcuts() + { + insertNote->setAccel(shortcuts[SHRT_LE_INS_NOTES].key); + insertSysEx->setAccel(shortcuts[SHRT_LE_INS_SYSEX].key); + insertCtrl->setAccel(shortcuts[SHRT_LE_INS_CTRL].key); + insertMeta->setAccel(shortcuts[SHRT_LE_INS_META].key); + insertCAfter->setAccel(shortcuts[SHRT_LE_INS_CHAN_AFTERTOUCH].key); + insertPAfter->setAccel(shortcuts[SHRT_LE_INS_POLY_AFTERTOUCH].key); + } + +//--------------------------------------------------------- +// viewKeyPressEvent +//--------------------------------------------------------- + +void ListEdit::keyPressEvent(QKeyEvent* event) + { +int key = event->key(); +if (key == Qt::Key_Escape) { + close(); + return; + } + } diff --git a/muse2/muse/liste/listedit.h b/muse2/muse/liste/listedit.h new file mode 100644 index 00000000..efa0a591 --- /dev/null +++ b/muse2/muse/liste/listedit.h @@ -0,0 +1,81 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: listedit.h,v 1.3.2.3 2006/09/19 22:03:33 spamatica Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __LIST_EDIT_H__ +#define __LIST_EDIT_H__ + +#include "midieditor.h" +#include "noteinfo.h" +#include "cobject.h" +//Added by qt3to4: +#include +#include +#include +#include +#include + +class Event; +class MidiTrack; +class PartList; +class MidiPart; +class MidiPart; +class Xml; +class Q3ActionGroup; +class QAction; +class Q3ListView; +class Q3ListViewItem; + +//--------------------------------------------------------- +// ListEdit +//--------------------------------------------------------- + +class ListEdit : public MidiEditor { + Q3ListView* liste; + Q3PopupMenu* menuEdit; + Q3ActionGroup* insertItems; + Q3ToolBar* listTools; + MidiTrack* curTrack; + MidiPart* curPart; + int selectedTick; + int curPartId; + + enum { CMD_DELETE }; + + Q_OBJECT + virtual void closeEvent(QCloseEvent*); + virtual void keyPressEvent(QKeyEvent*); + void initShortcuts(); + Q3Action *insertNote, *insertSysEx, *insertCtrl, *insertMeta, *insertCAfter, *insertPAfter; + + private slots: + void editInsertNote(); + void editInsertSysEx(); + void editInsertCtrl(); + void editInsertMeta(); + void editInsertCAfter(); + void editInsertPAfter(); + void editEvent(Event&, MidiPart*); + void selectionChanged(); + void doubleClicked(Q3ListViewItem*); + void cmd(int cmd); + void configChanged(); + + public slots: + void songChanged(int); + + signals: + void deleted(unsigned long); + + public: + ListEdit(PartList*); + ~ListEdit(); + virtual void readStatus(Xml&); + virtual void writeStatus(int, Xml&) const; + }; + +#endif + diff --git a/muse2/muse/make.inc b/muse2/muse/make.inc new file mode 100644 index 00000000..a88e1f95 --- /dev/null +++ b/muse2/muse/make.inc @@ -0,0 +1,164 @@ +#========================================================= +# MusE +# Linux Music Editor +# $Id: make.inc,v 1.1.1.1 2003/10/27 18:51:34 wschweer Exp $ +# (C) Copyright 1999-2001 Werner Schweer (ws@seh.de) +#========================================================= + +#---------------------------------------------------- +# basic path +# +ifndef QTDIR_BIN +QTDIR_BIN = /usr/qt3/bin +endif + +ifndef QTDIR_LIB +QTDIR_LIB = /usr/qt3/lib +endif + +ifndef QTDIR_INC +QTDIR_INC = /usr/qt3/include +endif + +PREFIX = /usr/muse +INSTDIR = $(PREFIX)/share +INSTLIBDIR = $(PREFIX)/lib +BINDIR = /usr/bin + +#----------------------------------------------------- +# basic flags +# +# experimental KDE Flag +# compiles with KDE Support: +# +# KMainWindow <--> QMainWindow +# KToolbar <--> QToolBar +# +# Current Status: don´t use: (set to NO); there are some issues +# If you want to debug this: +# you also need Tommi Ilmonen´s "givertcap" because +# you cannot run MusE suid root with KDE libs +HAVE_KDE = no +KDEDIR = /usr/kde2 + +# +# AUDIO, ALSA - always required +# ALSACVS - use newest ALSA CVS (include /usr/include/alsa/asoundlib.h +# instead of /usr/include/sys/asooundlib.h) +AUDIO = yes +ALSA = yes +OSS = yes +ALSACVS = yes + +# use Tommi Ilmonen´s "givertcap "to give RealTime capabilities to +# MusE; with the use of this utility MusE did not need "suid root" +# flags anymore +# more info at http://www.tml.hut.fi/~tilmonen/givertcap/ + +RTCAP = no + +#--------------------------------------------------------------- + +CC = /usr/bin/g++ +QTLIB = qt-mt +MOC = $(QTDIR_BIN)/moc +UIC = $(QTDIR_BIN)/uic +LUPDATE = $(QTDIR_BIN)/lupdate +LRELEASE = $(QTDIR_BIN)/lrelease +CPP = cpp + +#----------------------------------------------------- +OLDVERSION = 0.5.1 +VERSION = 0.5.2 + +INCLUDES = -I. +#FLAGS = -Wall -W -Wshadow -D_GNU_SOURCE +FLAGS = -Wall -W -D_GNU_SOURCE +# FLAGS = -W -D_GNU_SOURCE +ifeq ($(HAVE_KDE),yes) +INCLUDES += -I$(KDEDIR)/include +FLAGS += -DHAVE_KDE +endif + +ifeq ($(ALSACVS),yes) +FLAGS += -DALSACVS +endif + +#----------------------------------------------------- +# DEBUG = yes generates debuggable (non optimized) version +# +DEBUG = no + +ifeq ($(DEBUG),yes) +FLAGS += -g # -DMEMORY_DEBUG +else +FLAGS += -O2 -g +FLAGS += -DNDEBUG +endif + +ifeq ($(AUDIO),yes) +FLAGS += -DAUDIO +endif + +ifeq ($(RTCAP),yes) +FLAGS += -DRTCAP +endif + +#----------------------------------------------------- +# nothing to config below this line +# +ifdef TOPDIR +INCLUDES += -Imidiedit -Iscore -Iarranger -Iliste +INCLUDES += -Iwidgets -Imixer -Idriver -Iwaveedit -Implugins +else +INCLUDES += -I$(MUSETOP) -I$(MUSETOP)/widgets -I$(MUSETOP)/driver +endif + +INCLUDES += -Iarchiv -I$(QTDIR_INC) +FLAGS += -DQT_CLEAN_NAMESPACE -DQT_NOCOMPAT -DQT_NO_ASCII_CAST +# FLAGS += -fno-exceptions +FLAGS += -D_REENTRANT -DVERSION=\"$(VERSION)\" +FLAGS += -DINSTDIR=\"$(INSTDIR)\" +FLAGS += -DINSTLIBDIR=\"$(INSTLIBDIR)\" + +ifeq ($(ALSA),yes) +FLAGS += -DALSA +endif +ifeq ($(OSS),yes) +FLAGS += -DOSS +endif + +ALL_CFLAGS = $(FLAGS) $(INCLUDES) $(CFLAGS) + +.PHONY: all target clean depend test translations +.SUFFIXES: .ui + +%.o: %.c + $(CC) -c $(ALL_CFLAGS) $< -o $@ +obj/%.o: %.c + $(CC) -c $(ALL_CFLAGS) $< -o $@ +.ui.h: + $(UIC) $< -o $*.h +.ui.c: + $(UIC) -o $*.c -impl $*.h $< +obj/moc_%.c: %.h + $(MOC) $< -o obj/moc_$*.c + + +all: target + +clean:: + -@rm -f *.o obj/* *.bak $(GENSRC:=.h) $(GENSRC:=.c) + +depend:: $(GENSRC:=.h) +depend:: + -$(CC) -MM $(ALL_CFLAGS) $(SRC:=.c) $(MSRC:=.c) | sed -e 's/^.*\.o:/obj\/\0/' >.depend + +-include .depend + +ifndef TOPDIR +MAKE = make +endif + +install:: ; + diff --git a/muse2/muse/marker/Makefile.am b/muse2/muse/marker/Makefile.am new file mode 100644 index 00000000..f577d695 --- /dev/null +++ b/muse2/muse/marker/Makefile.am @@ -0,0 +1,15 @@ +include $(top_srcdir)/common.am + +if PCH +AM_CXXFLAGS += -include $(top_srcdir)/all.h +endif + +noinst_LIBRARIES = libmarker.a + +dist_libmarker_a_SOURCES = \ + marker.cpp marker.h \ + markerview.cpp markerview.h + +nodist_libmarker_a_SOURCES = \ + moc_markerview.cpp + diff --git a/muse2/muse/marker/Makefile.in b/muse2/muse/marker/Makefile.in new file mode 100644 index 00000000..d9ed6779 --- /dev/null +++ b/muse2/muse/marker/Makefile.in @@ -0,0 +1,596 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/common.am +@PCH_TRUE@am__append_1 = -include $(top_srcdir)/all.h +subdir = muse/marker +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal-include.m4 \ + $(top_srcdir)/m4/alsa.m4 $(top_srcdir)/m4/docbook.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +LIBRARIES = $(noinst_LIBRARIES) +ARFLAGS = cru +libmarker_a_AR = $(AR) $(ARFLAGS) +libmarker_a_LIBADD = +dist_libmarker_a_OBJECTS = marker.$(OBJEXT) markerview.$(OBJEXT) +nodist_libmarker_a_OBJECTS = moc_markerview.$(OBJEXT) +libmarker_a_OBJECTS = $(dist_libmarker_a_OBJECTS) \ + $(nodist_libmarker_a_OBJECTS) +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +CXXLD = $(CXX) +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(dist_libmarker_a_SOURCES) $(nodist_libmarker_a_SOURCES) +DIST_SOURCES = $(dist_libmarker_a_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DOCBOOKSTYLE = @DOCBOOKSTYLE@ +DOCBOOKTARGETS = @DOCBOOKTARGETS@ +DOT = @DOT@ +DOTPATH = @DOTPATH@ +DOXYGEN = @DOXYGEN@ +DOXYGEN_TREEVIEW = @DOXYGEN_TREEVIEW@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FLUIDSYNTHDIRS = @FLUIDSYNTHDIRS@ +FST_CFLAGS = @FST_CFLAGS@ +FST_LIBS = @FST_LIBS@ +Fluidsynth_CFLAGS = @Fluidsynth_CFLAGS@ +Fluidsynth_LIBS = @Fluidsynth_LIBS@ +GIVERTCAP = @GIVERTCAP@ +GREP = @GREP@ +HAVEDOT = @HAVEDOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_LIBS = @JACK_LIBS@ +JADE = @JADE@ +LASH_CFLAGS = @LASH_CFLAGS@ +LASH_LIBS = @LASH_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LO_CFLAGS = @LO_CFLAGS@ +LO_LIBS = @LO_LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MUSECXXFLAGS = @MUSECXXFLAGS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NSGMLS = @NSGMLS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PCH = @PCH@ +PERL = @PERL@ +PKG_CONFIG = @PKG_CONFIG@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIB = @PYTHON_LIB@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QTDIR_BIN = @QTDIR_BIN@ +QTDIR_INC = @QTDIR_INC@ +QT_LIBS = @QT_LIBS@ +RANLIB = @RANLIB@ +SAMPLERATE_CFLAGS = @SAMPLERATE_CFLAGS@ +SAMPLERATE_LIBS = @SAMPLERATE_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ +SNDFILE_LIBS = @SNDFILE_LIBS@ +STRIP = @STRIP@ +SUIDBUILD = @SUIDBUILD@ +SUIDINSTALL = @SUIDINSTALL@ +USE_SSE = @USE_SSE@ +UUID_CFLAGS = @UUID_CFLAGS@ +UUID_LIBS = @UUID_LIBS@ +VERSION = @VERSION@ +XMKMF = @XMKMF@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +have_docbook = @have_docbook@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +synth_fluid = @synth_fluid@ +synth_fluidsynth = @synth_fluidsynth@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AM_CXXFLAGS = $(MUSECXXFLAGS) -I.. -I$(top_srcdir)/synti \ + -I$(top_srcdir)/muse/widgets -DQT_SHARED -DQT_THREAD_SUPPORT \ + -DQT_PLUGIN $(QTDIR_INC) -DQT3_SUPPORT $(am__append_1) +AM_CPPFLAGS = +MOC = $(QTDIR_BIN)/moc +#UIC = $(QTDIR_BIN)/uic3 +UIC = /usr/bin/uic3 +UIFILES = $(wildcard *.ui) +MOCFILES = $(shell for h in $(filter %.h,$(SOURCES)); do \ + if grep -q Q_OBJECT $$h; then \ + echo $$h | sed "s/\(.*\)\.h/moc_\1.cpp/"; \ + fi; \ + done) + +BUILT_SOURCES = $(MOCFILES) $(UIFILES:%.ui=%.h) +MOSTLYCLEANFILES = $(MOCFILES) $(UIFILES:%.ui=%.h) +SUFFIXES = .ui .h.gch +noinst_LIBRARIES = libmarker.a +dist_libmarker_a_SOURCES = \ + marker.cpp marker.h \ + markerview.cpp markerview.h + +nodist_libmarker_a_SOURCES = \ + moc_markerview.cpp + +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: .ui .h.gch .cpp .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/common.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu muse/marker/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu muse/marker/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-noinstLIBRARIES: + -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) +libmarker.a: $(libmarker_a_OBJECTS) $(libmarker_a_DEPENDENCIES) + -rm -f libmarker.a + $(libmarker_a_AR) libmarker.a $(libmarker_a_OBJECTS) $(libmarker_a_LIBADD) + $(RANLIB) libmarker.a + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/marker.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/markerview.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/moc_markerview.Po@am__quote@ + +.cpp.o: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< + +.cpp.obj: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.cpp.lo: +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-am +all-am: Makefile $(LIBRARIES) +installdirs: +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +clean: clean-am + +clean-am: clean-generic clean-libtool clean-noinstLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: all check install install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-noinstLIBRARIES ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags uninstall uninstall-am + + +de: + @for base in $(MOCFILES); do echo -e "\t$${base}.cpp $${base}.h \\"; done + +nde: + @for base in $(MOCFILES); do echo -e "\tmoc_$${base}.cpp \\"; done + +.ui.o: %.h + $(UIC) -L $(top_srcdir)/muse/widgets -o $*.cpp -impl $*.h $*.ui + $(MOC) $*.h >> $*.cpp + $(CXXCOMPILE) -c $*.cpp -o $*.o + $(RM) $*.cpp moc_$*.cpp moc_$*.o + +.ui.lo: %.h + $(UIC) -L $(top_srcdir)/muse/widgets -o $*.cpp -impl $*.h $*.ui + $(MOC) $*.h >> $*.cpp + $(LTCXXCOMPILE) -c $*.cpp -o $*.lo + $(RM) $*.cpp moc_$*.cpp moc_$*.lo moc_$*.o + +moc_%.cpp: %.h + $(MOC) $< -o $@ + +%.h: %.ui + $(UIC) -o $@ $< +# $(UIC) -L $(top_srcdir)/muse/widgets -o $@ $< + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/muse2/muse/marker/marker.cpp b/muse2/muse/marker/marker.cpp new file mode 100644 index 00000000..eee0be02 --- /dev/null +++ b/muse2/muse/marker/marker.cpp @@ -0,0 +1,90 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: marker.cpp,v 1.2 2003/12/10 18:34:22 wschweer Exp $ +// (C) Copyright 2000 Werner Schweer (ws@seh.de) +//========================================================= + +#include "marker.h" +#include "xml.h" + +Marker* MarkerList::add(const Marker& marker) + { + iMarker i = insert(std::pair (marker.tick(), Marker(marker))); + return &i->second; + } + +Marker* MarkerList::add(const QString& s, int t, bool lck) + { + Marker marker(s); + marker.setType(lck ? Pos::FRAMES : Pos::TICKS); + marker.setTick(t); + iMarker i = insert(std::pair (t, marker)); + return &i->second; + } + +//--------------------------------------------------------- +// read +//--------------------------------------------------------- + +void Marker::read(Xml& xml) + { + for (;;) { + Xml::Token token = xml.parse(); + const QString& tag = xml.s1(); + switch (token) { + case Xml::Error: + case Xml::End: + return; + case Xml::TagStart: + xml.unknown("Marker"); + break; + case Xml::Attribut: + if (tag == "tick") + setTick(xml.s2().toInt()); + else if (tag == "lock") + setType(xml.s2().toInt() ? FRAMES:TICKS); + else if (tag == "name") + { + _name = xml.s2(); + } + break; + case Xml::TagEnd: + if (xml.s1() == "marker") + return; + default: + break; + } + } + } + +//--------------------------------------------------------- +// write +//--------------------------------------------------------- + +void MarkerList::write(int level, Xml& xml) const + { + for (ciMarker i = begin(); i != end(); ++i) { + const Marker& m = i->second; + xml.put(level, "", + //m.tick(), m.type()==Pos::FRAMES, m.name().latin1()); + m.tick(), m.type()==Pos::FRAMES, Xml::xmlString(m.name()).latin1()); + } + } + +//--------------------------------------------------------- +// 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/muse2/muse/marker/marker.h b/muse2/muse/marker/marker.h new file mode 100644 index 00000000..a00e1fc6 --- /dev/null +++ b/muse2/muse/marker/marker.h @@ -0,0 +1,51 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: marker.h,v 1.2 2003/12/15 11:41:00 wschweer Exp $ +// (C) Copyright 2000 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __MARKER_H__ +#define __MARKER_H__ + +#include +#include +#include "xml.h" +#include "pos.h" + +//--------------------------------------------------------- +// Marker +//--------------------------------------------------------- + +class Marker : public Pos { + QString _name; + bool _current; + + public: + Marker() : _current(false) {} + Marker(const QString& s, bool cur = false) + : _name(s), _current(cur) {} + void read(Xml&); + 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, int t, bool lck); + void write(int, Xml&) const; + void remove(Marker*); + }; + +typedef std::multimap >::iterator iMarker; +typedef std::multimap >::const_iterator ciMarker; + +#endif + diff --git a/muse2/muse/marker/markerview.cpp b/muse2/muse/marker/markerview.cpp new file mode 100644 index 00000000..39885ec7 --- /dev/null +++ b/muse2/muse/marker/markerview.cpp @@ -0,0 +1,597 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: markerview.cpp,v 1.7.2.6 2009/08/25 20:28:45 spamatica Exp $ +// (C) Copyright 2000 Werner Schweer (ws@seh.de) +//========================================================= + +#include "marker.h" +#include "markerview.h" +#include "xml.h" +#include "globals.h" +#include "sync.h" +#include "icons.h" +#include "song.h" +#include "posedit.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//Added by qt3to4: +#include +#include + +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() == Pos::FRAMES; + } + +//--------------------------------------------------------- +// MarkerItem +//--------------------------------------------------------- + +MarkerItem::MarkerItem(Q3ListView* parent, Marker* m) + : Q3ListViewItem(parent) + { + _marker = m; + setText(COL_NAME, m->name()); + setTick(m->tick()); + if (m->type() == Pos::FRAMES) + setPixmap(COL_LOCK, *lockIcon); + setLock(m->type() == Pos::FRAMES); + } + +//--------------------------------------------------------- +// setName +//--------------------------------------------------------- + +void MarkerItem::setName(const QString& s) + { + setText(COL_NAME, s); + _marker = song->setMarkerName(_marker, s); + } + +//--------------------------------------------------------- +// setLock +//--------------------------------------------------------- + +void MarkerItem::setLock(bool lck) + { + setPixmap(COL_LOCK, lck ? *lockIcon : 0); + _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; + unsigned tick; + sigmap.tickValues(v, &bar, &beat, &tick); + s.sprintf("%04d.%02d.%03d", bar+1, beat+1, tick); + setText(COL_TICK, s); + + double time = double(tempomap.tick2frame(v))/double(sampleRate); + int hour = int(time) / 3600; + int min = (int(time) % 3600)/60; + int sec = int(time) % 60; + double rest = time - (hour*3600 + 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); + s.sprintf("%02d:%02d:%02d:%02d:%02d", + hour, min, sec, frame, subframe); + setText(COL_SMPTE, s); + } + +//--------------------------------------------------------- +// closeEvent +//--------------------------------------------------------- + +void MarkerView::closeEvent(QCloseEvent* e) + { + emit deleted((unsigned long)this); + emit closed(); + e->accept(); + } + +//--------------------------------------------------------- +// MarkerView +//--------------------------------------------------------- + +MarkerView::MarkerView(QWidget* parent) + : TopWin(parent, "markerview", Qt::WType_TopLevel /*| WDestructiveClose*/) + { + setCaption(tr("MusE: Marker")); + + //---------Actions---------------------------- + Q3Action* markerAdd = new Q3Action(tr("add marker"), + QIcon(*flagIcon), tr("Add Marker"), + 0, this, "add marker"); + connect(markerAdd, SIGNAL(activated()), SLOT(addMarker())); + + Q3Action* markerDelete = new Q3Action(tr("delete marker"), + QIcon(*deleteIcon), tr("Delete Marker"), + 0, this, "delete marker"); + connect(markerDelete, SIGNAL(activated()), SLOT(deleteMarker())); + + //---------Pulldown Menu---------------------------- + Q3PopupMenu* fileMenu = new Q3PopupMenu(this); + menuBar()->insertItem(tr("&File"), fileMenu); + Q3PopupMenu* editMenu = new Q3PopupMenu(this); + menuBar()->insertItem(tr("&Edit"), editMenu); + markerAdd->addTo(editMenu); + markerDelete->addTo(editMenu); + + //---------ToolBar---------------------------------- + tools = new Q3ToolBar(this, "marker-tools"); + undoRedo->addTo(tools); + + Q3ToolBar* edit = new Q3ToolBar(this, "edit tools"); + markerAdd->addTo(edit); + markerDelete->addTo(edit); + + //--------------------------------------------------- + // master + //--------------------------------------------------- + + QWidget* w = new QWidget(this, "main"); + setCentralWidget(w); + Q3VBoxLayout* vbox = new Q3VBoxLayout(w); + + table = new Q3ListView(w); + table->setAllColumnsShowFocus(true); + table->setSelectionMode(Q3ListView::Single); + table->setSorting(COL_TICK, true); + + table->addColumn(tr("Bar:Beat:Tick")); + table->addColumn(tr("Hr:Mn:Sc:Fr:Sf")); + table->addColumn(tr("Lock")); + table->addColumn(tr("Text")); + table->setColumnWidth(3, 200); + table->setColumnWidthMode(3, Q3ListView::Maximum); + connect(table, SIGNAL(selectionChanged()), + SLOT(markerSelectionChanged())); + connect(table, SIGNAL(clicked(Q3ListViewItem*)), + SLOT(clicked(Q3ListViewItem*))); + + Q3GroupBox* props = new Q3GroupBox(4, Qt::Horizontal, tr("Marker Properties"), w); + + editTick = new PosEdit(props); + editTick->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, + QSizePolicy::Fixed)); + + editSMPTE = new PosEdit(props); + editSMPTE->setSmpte(true); + editSMPTE->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, + QSizePolicy::Fixed)); + + lock = new QToolButton(props); + lock->setPixmap(*lockIcon); + lock->setToggleButton(true); + + editName = new QLineEdit(props); + 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())); + connect(song, SIGNAL(songChanged(int)), SLOT(songChanged(int))); + + updateList(); + + // work around for probable QT/WM interaction bug. + // for certain window managers, e.g xfce, this window is + // is displayed although not specifically set to show(); + // bug: 2811156 Softsynth GUI unclosable with XFCE4 (and a few others) + show(); + hide(); + + } + +//--------------------------------------------------------- +// MArkerView +//--------------------------------------------------------- + +MarkerView::~MarkerView() + { + // p3.3.47 + //printf("MarkerView::~MarkerView() before undoRedo->removeFrom(tools)\n"); + + undoRedo->removeFrom(tools); + } + +//--------------------------------------------------------- +// readStatus +//--------------------------------------------------------- + +void MarkerView::readStatus(Xml& xml) + { + for (;;) { + Xml::Token token = xml.parse(); + const QString& tag = xml.s1(); + if (token == Xml::Error || token == Xml::End) + break; + switch (token) { + case Xml::TagStart: + xml.unknown("Marker"); + break; + case Xml::TagEnd: + if (tag == "marker") + return; + default: + break; + } + } + } + +//--------------------------------------------------------- +// writeStatus +//--------------------------------------------------------- + +void MarkerView::writeStatus(int level, Xml& xml) const + { + xml.tag(level++, "marker"); + xml.tag(level, "/marker"); + } + +//--------------------------------------------------------- +// addMarker +//--------------------------------------------------------- +void MarkerView::addMarker() + { + addMarker(-1); + } +void MarkerView::addMarker(int i) + { + if( i==-1 ) i = song->cpos(); + + // Changed p3.3.43 Let Song::addMarker emit markerChanged(MARKER_ADD) + // and handle it in MarkerView::markerChanged(int) + //Marker* m = song->addMarker(QString(""), i, false); + //MarkerItem* newItem = new MarkerItem(table, m); + //table->setSelected(newItem, true); + // + song->addMarker(QString(""), i, false); + } + +//--------------------------------------------------------- +// deleteMarker +//--------------------------------------------------------- + +void MarkerView::deleteMarker() + { + MarkerItem* item = (MarkerItem*)table->selectedItem(); + if (item) { + song->removeMarker(item->marker()); + + // Removed p3.3.43 Let Song::removeMarker emit markerChanged(MARKER_REMOVE) + // and handle it in MarkerView::markerChanged(int) + //delete item; + } + } + +//--------------------------------------------------------- +// songChanged +//--------------------------------------------------------- + +void MarkerView::songChanged(int flags) +{ + // Is it simply a midi controller value adjustment? Forget it. + if(flags == SC_MIDI_CONTROLLER) + return; + + updateList(); +} + +//--------------------------------------------------------- +// updateList +//--------------------------------------------------------- + +void MarkerView::updateList() +{ + // Added p3.3.43 Manage selected item, due to clearing of table... + MarkerList* marker = song->marker(); + MarkerItem* selitem = (MarkerItem*)table->selectedItem(); + Marker* selm = selitem ? selitem->marker() : 0; + // p3.3.44 Look for removed markers before added markers... + if(selitem) + { + MarkerItem* mitem = (MarkerItem*)table->firstChild(); + while(mitem) + { + bool found = false; + for(iMarker i = marker->begin(); i != marker->end(); ++i) + { + Marker* m = &i->second; + if(m == mitem->marker()) + { + found = true; + break; + } + } + // Anything removed from the marker list? + if(!found) + { + // If it is the current selected item, it no longer exists. Make the next item be selected. + if(mitem == selitem) + { + MarkerItem* mi = (MarkerItem*)selitem->nextSibling(); + if(mi) + { + selitem = mi; + selm = selitem->marker(); + } + } + } + mitem = (MarkerItem*)mitem->nextSibling(); + } + } + // Look for added markers... + for(iMarker i = marker->begin(); i != marker->end(); ++i) + { + Marker* m = &i->second; + bool found = false; + MarkerItem* item = (MarkerItem*)table->firstChild(); + while(item) + { + if(item->marker() == m) + { + found = true; + break; + } + item = (MarkerItem*)item->nextSibling(); + } + // Anything new found in the marker list? + if(!found) + selm = m; + } + + table->clear(); + //MarkerList* marker = song->marker(); + for (iMarker i = marker->begin(); i != marker->end(); ++i) + { + Marker* m = &i->second; + + // Changed p3.3.43 + //QString tick; + //tick.setNum(i->first); + //new MarkerItem(table, m); + MarkerItem* item = new MarkerItem(table, m); + if(m == selm) + { + m->setCurrent(true); + table->setSelected(item, true); + } + else + { + m->setCurrent(false); + } + } +} + +//--------------------------------------------------------- +// markerSelected +//--------------------------------------------------------- + +void MarkerView::markerSelectionChanged() + { + MarkerItem* item = (MarkerItem*)table->selectedItem(); + if (item == 0) { // never triggered + editTick->setValue(0); + editSMPTE->setValue(0); + editName->setText(QString("")); + lock->setOn(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->setOn(item->lock()); + lock->setEnabled(true); + + //printf("MarkerView::markerSelectionChanged item->lock:%d\n", item->lock()); + + editSMPTE->setEnabled(item->lock()); + editTick->setEnabled(!item->lock()); + } + } + +void MarkerView::clicked(Q3ListViewItem* i) + { + MarkerItem* item = (MarkerItem*)i; + if (item == 0) { + table->clearSelection(); + return; + } + Pos p(item->tick(), true); + song->setPos(0, p, true, true, false); + } + +//--------------------------------------------------------- +// nameChanged +//--------------------------------------------------------- + +void MarkerView::nameChanged(const QString& s) + { + MarkerItem* item = (MarkerItem*)table->selectedItem(); + if (item) + item->setName(s); + } + +//--------------------------------------------------------- +// tickChanged +//--------------------------------------------------------- + +void MarkerView::tickChanged(const Pos& pos) + { + MarkerItem* item = (MarkerItem*)table->selectedItem(); + if (item) { + item->setTick(pos.tick()); + Pos p(pos.tick(), true); + song->setPos(0, p, true, true, false); + table->sort(); + } + } + +//--------------------------------------------------------- +// lockChanged +//--------------------------------------------------------- + +void MarkerView::lockChanged(bool lck) + { + MarkerItem* item = (MarkerItem*)table->selectedItem(); + if (item) { + item->setLock(lck); + editSMPTE->setEnabled(item->lock()); + editTick->setEnabled(!item->lock()); + } + } + +//--------------------------------------------------------- +// posChanged +// select appropriate Marker +//--------------------------------------------------------- + +void MarkerView::markerChanged(int val) +{ + //if (val != Song::MARKER_CUR) + // return; + // p3.3.43 + switch(val) + { + // MARKER_CUR, MARKER_ADD, MARKER_REMOVE, MARKER_NAME, + // MARKER_TICK, MARKER_LOCK + case Song::MARKER_ADD: + case Song::MARKER_REMOVE: + updateList(); + break; // Try falling through and let it try to select something. No, let updateList() do it... + + case Song::MARKER_CUR: + { + + MarkerList* marker = song->marker(); + for (iMarker i = marker->begin(); i != marker->end(); ++i) { + if (i->second.current()) { + MarkerItem* item = (MarkerItem*)table->firstChild(); + while (item) { + if (item->marker() == &i->second) { + table->setSelected(item, true); + return; + } + item = (MarkerItem*)item->nextSibling(); + } + } + } + } + break; + + default: + break; + } +} + +void MarkerView::nextMarker() + { + unsigned int curPos = song->cpos();//prevent compiler warning: comparison of sigend/unsigned + unsigned int nextPos = 0xFFFFFFFF; + MarkerList* marker = song->marker(); + for (iMarker i = marker->begin(); i != marker->end(); ++i) { + if (i->second.tick() > curPos && i->second.tick() < nextPos) + nextPos = i->second.tick(); + } + if (nextPos == 0xFFFFFFFF) + return; + Pos p(nextPos, true); + song->setPos(0, p, true, true, false); + + } +void MarkerView::prevMarker() + { + unsigned int curPos = song->cpos();//prevent compiler warning: comparison of sigend/unsigned + unsigned int nextPos = 0; + MarkerList* marker = song->marker(); + for (iMarker i = marker->begin(); i != marker->end(); ++i) { + if (i->second.tick() < curPos && i->second.tick() > nextPos) + nextPos = i->second.tick(); + } +/* if (nextPos == 0) + return;*/ + Pos p(nextPos, true); + song->setPos(0, p, true, true, false); + } diff --git a/muse2/muse/marker/markerview.h b/muse2/muse/marker/markerview.h new file mode 100644 index 00000000..b9f5a85d --- /dev/null +++ b/muse2/muse/marker/markerview.h @@ -0,0 +1,84 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: markerview.h,v 1.4.2.3 2008/08/18 00:15:25 terminator356 Exp $ +// (C) Copyright 2000 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __MARKERVIEW_H__ +#define __MARKERVIEW_H__ + +#include "cobject.h" +#include +#include +//Added by qt3to4: +#include + +class QLineEdit; +class PosEdit; +class QToolButton; +class Marker; +class Q3ToolBar; +class Pos; + +//--------------------------------------------------------- +// MarkerItem +//--------------------------------------------------------- + +class MarkerItem : public Q3ListViewItem { + Marker* _marker; + + public: + MarkerItem(Q3ListView* parent, Marker* m); + 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 { + Q3ListView* table; + QLineEdit* editName; + PosEdit* editSMPTE; + PosEdit* editTick; + QToolButton* lock; + Q3ToolBar* tools; + + Q_OBJECT + virtual void closeEvent(QCloseEvent*); + + private slots: + void addMarker(); + void addMarker(int); + void deleteMarker(); + void markerSelectionChanged(); + void nameChanged(const QString&); + void tickChanged(const Pos&); + void lockChanged(bool); + void markerChanged(int); + void clicked(Q3ListViewItem*); + void updateList(); + void songChanged(int); + + signals: + void deleted(unsigned long); + void closed(); + + public: + MarkerView(QWidget* parent); + ~MarkerView(); + virtual void readStatus(Xml&); + virtual void writeStatus(int, Xml&) const; + void nextMarker(); + void prevMarker(); + }; + +#endif + diff --git a/muse2/muse/master/Makefile.am b/muse2/muse/master/Makefile.am new file mode 100644 index 00000000..55222bd4 --- /dev/null +++ b/muse2/muse/master/Makefile.am @@ -0,0 +1,19 @@ +include $(top_srcdir)/common.am + +if PCH +AM_CXXFLAGS += -include $(top_srcdir)/all.h +endif + +noinst_LIBRARIES = libmaster.a + +dist_libmaster_a_SOURCES = \ + lmaster.cpp lmaster.h \ + masteredit.cpp masteredit.h \ + master.cpp master.h \ + tscale.cpp tscale.h + +nodist_libmaster_a_SOURCES = \ + moc_lmaster.cpp \ + moc_masteredit.cpp \ + moc_master.cpp \ + moc_tscale.cpp diff --git a/muse2/muse/master/Makefile.in b/muse2/muse/master/Makefile.in new file mode 100644 index 00000000..19449168 --- /dev/null +++ b/muse2/muse/master/Makefile.in @@ -0,0 +1,609 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/common.am +@PCH_TRUE@am__append_1 = -include $(top_srcdir)/all.h +subdir = muse/master +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal-include.m4 \ + $(top_srcdir)/m4/alsa.m4 $(top_srcdir)/m4/docbook.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +LIBRARIES = $(noinst_LIBRARIES) +ARFLAGS = cru +libmaster_a_AR = $(AR) $(ARFLAGS) +libmaster_a_LIBADD = +dist_libmaster_a_OBJECTS = lmaster.$(OBJEXT) masteredit.$(OBJEXT) \ + master.$(OBJEXT) tscale.$(OBJEXT) +nodist_libmaster_a_OBJECTS = moc_lmaster.$(OBJEXT) \ + moc_masteredit.$(OBJEXT) moc_master.$(OBJEXT) \ + moc_tscale.$(OBJEXT) +libmaster_a_OBJECTS = $(dist_libmaster_a_OBJECTS) \ + $(nodist_libmaster_a_OBJECTS) +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +CXXLD = $(CXX) +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(dist_libmaster_a_SOURCES) $(nodist_libmaster_a_SOURCES) +DIST_SOURCES = $(dist_libmaster_a_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DOCBOOKSTYLE = @DOCBOOKSTYLE@ +DOCBOOKTARGETS = @DOCBOOKTARGETS@ +DOT = @DOT@ +DOTPATH = @DOTPATH@ +DOXYGEN = @DOXYGEN@ +DOXYGEN_TREEVIEW = @DOXYGEN_TREEVIEW@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FLUIDSYNTHDIRS = @FLUIDSYNTHDIRS@ +FST_CFLAGS = @FST_CFLAGS@ +FST_LIBS = @FST_LIBS@ +Fluidsynth_CFLAGS = @Fluidsynth_CFLAGS@ +Fluidsynth_LIBS = @Fluidsynth_LIBS@ +GIVERTCAP = @GIVERTCAP@ +GREP = @GREP@ +HAVEDOT = @HAVEDOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_LIBS = @JACK_LIBS@ +JADE = @JADE@ +LASH_CFLAGS = @LASH_CFLAGS@ +LASH_LIBS = @LASH_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LO_CFLAGS = @LO_CFLAGS@ +LO_LIBS = @LO_LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MUSECXXFLAGS = @MUSECXXFLAGS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NSGMLS = @NSGMLS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PCH = @PCH@ +PERL = @PERL@ +PKG_CONFIG = @PKG_CONFIG@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIB = @PYTHON_LIB@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QTDIR_BIN = @QTDIR_BIN@ +QTDIR_INC = @QTDIR_INC@ +QT_LIBS = @QT_LIBS@ +RANLIB = @RANLIB@ +SAMPLERATE_CFLAGS = @SAMPLERATE_CFLAGS@ +SAMPLERATE_LIBS = @SAMPLERATE_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ +SNDFILE_LIBS = @SNDFILE_LIBS@ +STRIP = @STRIP@ +SUIDBUILD = @SUIDBUILD@ +SUIDINSTALL = @SUIDINSTALL@ +USE_SSE = @USE_SSE@ +UUID_CFLAGS = @UUID_CFLAGS@ +UUID_LIBS = @UUID_LIBS@ +VERSION = @VERSION@ +XMKMF = @XMKMF@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +have_docbook = @have_docbook@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +synth_fluid = @synth_fluid@ +synth_fluidsynth = @synth_fluidsynth@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AM_CXXFLAGS = $(MUSECXXFLAGS) -I.. -I$(top_srcdir)/synti \ + -I$(top_srcdir)/muse/widgets -DQT_SHARED -DQT_THREAD_SUPPORT \ + -DQT_PLUGIN $(QTDIR_INC) -DQT3_SUPPORT $(am__append_1) +AM_CPPFLAGS = +MOC = $(QTDIR_BIN)/moc +#UIC = $(QTDIR_BIN)/uic3 +UIC = /usr/bin/uic3 +UIFILES = $(wildcard *.ui) +MOCFILES = $(shell for h in $(filter %.h,$(SOURCES)); do \ + if grep -q Q_OBJECT $$h; then \ + echo $$h | sed "s/\(.*\)\.h/moc_\1.cpp/"; \ + fi; \ + done) + +BUILT_SOURCES = $(MOCFILES) $(UIFILES:%.ui=%.h) +MOSTLYCLEANFILES = $(MOCFILES) $(UIFILES:%.ui=%.h) +SUFFIXES = .ui .h.gch +noinst_LIBRARIES = libmaster.a +dist_libmaster_a_SOURCES = \ + lmaster.cpp lmaster.h \ + masteredit.cpp masteredit.h \ + master.cpp master.h \ + tscale.cpp tscale.h + +nodist_libmaster_a_SOURCES = \ + moc_lmaster.cpp \ + moc_masteredit.cpp \ + moc_master.cpp \ + moc_tscale.cpp + +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: .ui .h.gch .cpp .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/common.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu muse/master/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu muse/master/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-noinstLIBRARIES: + -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) +libmaster.a: $(libmaster_a_OBJECTS) $(libmaster_a_DEPENDENCIES) + -rm -f libmaster.a + $(libmaster_a_AR) libmaster.a $(libmaster_a_OBJECTS) $(libmaster_a_LIBADD) + $(RANLIB) libmaster.a + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lmaster.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/master.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/masteredit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/moc_lmaster.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/moc_master.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/moc_masteredit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/moc_tscale.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tscale.Po@am__quote@ + +.cpp.o: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< + +.cpp.obj: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.cpp.lo: +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-am +all-am: Makefile $(LIBRARIES) +installdirs: +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +clean: clean-am + +clean-am: clean-generic clean-libtool clean-noinstLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: all check install install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-noinstLIBRARIES ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags uninstall uninstall-am + + +de: + @for base in $(MOCFILES); do echo -e "\t$${base}.cpp $${base}.h \\"; done + +nde: + @for base in $(MOCFILES); do echo -e "\tmoc_$${base}.cpp \\"; done + +.ui.o: %.h + $(UIC) -L $(top_srcdir)/muse/widgets -o $*.cpp -impl $*.h $*.ui + $(MOC) $*.h >> $*.cpp + $(CXXCOMPILE) -c $*.cpp -o $*.o + $(RM) $*.cpp moc_$*.cpp moc_$*.o + +.ui.lo: %.h + $(UIC) -L $(top_srcdir)/muse/widgets -o $*.cpp -impl $*.h $*.ui + $(MOC) $*.h >> $*.cpp + $(LTCXXCOMPILE) -c $*.cpp -o $*.lo + $(RM) $*.cpp moc_$*.cpp moc_$*.lo moc_$*.o + +moc_%.cpp: %.h + $(MOC) $< -o $@ + +%.h: %.ui + $(UIC) -o $@ $< +# $(UIC) -L $(top_srcdir)/muse/widgets -o $@ $< + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/muse2/muse/master/lmaster.cpp b/muse2/muse/master/lmaster.cpp new file mode 100644 index 00000000..0638049e --- /dev/null +++ b/muse2/muse/master/lmaster.cpp @@ -0,0 +1,715 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: lmaster.cpp,v 1.2.2.8 2009/03/09 02:05:18 terminator356 Exp $ +// (C) Copyright 2000 Werner Schweer (ws@seh.de) +//========================================================= + +#include "lmaster.h" +#include "xml.h" +#include "song.h" +#include "globals.h" +#include "audio.h" +#include "posedit.h" +#include "sigedit.h" +#include "shortcuts.h" +#include "debug.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//Added by qt3to4: +#include + +#define LMASTER_BEAT_COL 0 +#define LMASTER_TIME_COL 1 +#define LMASTER_TYPE_COL 2 +#define LMASTER_VAL_COL 3 + +#define LMASTER_MSGBOX_STRING "MusE: List Editor" +//--------------------------------------------------------- +// closeEvent +//--------------------------------------------------------- + +void LMaster::closeEvent(QCloseEvent* e) + { + emit deleted((unsigned long)this); + e->accept(); + } + +//--------------------------------------------------------- +// songChanged +//--------------------------------------------------------- + +void LMaster::songChanged(int type) + { + if (type & (SC_SIG | SC_TEMPO)) + updateList(); + } + +//--------------------------------------------------------- +// LMaster +//--------------------------------------------------------- + +LMaster::LMaster() + : MidiEditor(0, 0, 0) + { + pos_editor = 0; + editor = 0; + sig_editor = 0; + editedItem = 0; + editingNewItem = false; + setCaption(tr("MusE: Mastertrack")); + setMinimumHeight(100); + setFixedWidth(400); + + //---------Pulldown Menu---------------------------- + menuEdit = new Q3PopupMenu(this); + menuBar()->insertItem(tr("&Edit"), menuEdit); + undoRedo->addTo(menuEdit); + menuEdit->insertSeparator(); + menuEdit->insertItem(tr("Insert Tempo"), CMD_INSERT_TEMPO); + menuEdit->insertItem(tr("Insert Signature"), CMD_INSERT_SIG); + menuEdit->insertItem(tr("Edit Positon"), CMD_EDIT_BEAT); + menuEdit->insertItem(tr("Edit Value"), CMD_EDIT_VALUE); + + menuEdit->insertItem(tr("Delete Event"), CMD_DELETE); + menuEdit->setAccel(Qt::Key_Delete, CMD_DELETE); + + connect(menuEdit, SIGNAL(activated(int)), SLOT(cmd(int))); + + //---------ToolBar---------------------------------- + tools = new Q3ToolBar(this, "list-tools"); + undoRedo->addTo(tools); + + Q3ToolBar* edit = new Q3ToolBar(this, "edit tools"); + QToolButton* tempoButton = new QToolButton(edit); + QToolButton* timeSigButton = new QToolButton(edit); + tempoButton->setText(tr("Tempo")); + timeSigButton->setText(tr("Timesig")); + QToolTip::add(tempoButton, tr("new tempo")); + QToolTip::add(timeSigButton, tr("new signature")); + Q3Accel* qa = new Q3Accel(this); + qa->connectItem(qa->insertItem(Qt::CTRL+Qt::Key_Z), song, SLOT(undo())); + qa->connectItem(qa->insertItem(Qt::CTRL+Qt::Key_Y), song, SLOT(redo())); + + //--------------------------------------------------- + // master + //--------------------------------------------------- + + view = new Q3ListView(mainw); + view->setAllColumnsShowFocus(true); + view->setSelectionMode(Q3ListView::Single); + view->addColumn(tr("Meter"), 100); + view->addColumn(tr("Time"), 100); + view->addColumn(tr("Type"), 100); + view->addColumn(tr("Value"), 100); + view->setSorting(-1); + + //--------------------------------------------------- + // Rest + //--------------------------------------------------- + +// QSizeGrip* corner = new QSizeGrip(mainw); + + mainGrid->setRowStretch(0, 100); + mainGrid->setColStretch(0, 100); + + mainGrid->addWidget(view, 0, 0); +// mainGrid->addWidget(corner, 1, 1, AlignBottom | AlignRight); + updateList(); + + connect(view, SIGNAL(selectionChanged(Q3ListViewItem*)), SLOT(select(Q3ListViewItem*))); + connect(view, SIGNAL(pressed(Q3ListViewItem*, const QPoint&, int)), SLOT(itemPressed(Q3ListViewItem*, const QPoint&, int))); + connect(view, SIGNAL(doubleClicked(Q3ListViewItem* )), SLOT(itemDoubleClicked(Q3ListViewItem*))); + connect(song, SIGNAL(songChanged(int)), SLOT(songChanged(int))); + connect(tempoButton, SIGNAL(clicked()), SLOT(tempoButtonClicked())); + connect(timeSigButton, SIGNAL(clicked()), SLOT(timeSigButtonClicked())); + + initShortcuts(); + } + +//--------------------------------------------------------- +// ~LMaster +//--------------------------------------------------------- + +LMaster::~LMaster() + { + undoRedo->removeFrom(tools); + } + +//--------------------------------------------------------- +// insertSig +//--------------------------------------------------------- + +void LMaster::insertSig(const SigEvent* ev) + { + new LMasterSigEventItem(view, ev); + } + +//--------------------------------------------------------- +// insertTempo +//--------------------------------------------------------- + +void LMaster::insertTempo(const TEvent* ev) + { + new LMasterTempoItem(view, ev); + } + +//--------------------------------------------------------- +// updateList +//--------------------------------------------------------- + +void LMaster::updateList() + { + LMasterLViewItem* selected = (LMasterLViewItem*) view->selectedItem(); + LMASTER_LVTYPE type = LMASTER_TEMPO; + unsigned tick = 0; + + if (selected) { + type = selected->getType(); + tick = selected->tick(); + } + + view->clear(); + const TempoList* t = &tempomap; + const SigList* s = &sigmap; + + criTEvent it = t->rbegin(); + criSigEvent is = s->rbegin(); + for (;;) { + if (it == t->rend()) { + while(is != s->rend()) { + insertSig(is->second); + ++is; + } + break; + } + if (is == s->rend()) { + while (it != t->rend()) { + insertTempo(it->second); + ++it; + } + break; + } + if (is->second->tick > it->second->tick) { + insertSig(is->second); + ++is; + } + else { + insertTempo(it->second); + ++it; + } + } + + // Try to reselect the previous selection: + if(selected) + { + LMasterLViewItem* tmp = getItemAtPos(tick, type); + if (tmp) { + view->clearSelection(); + view->setSelected(tmp, true); + } + } + } + +//--------------------------------------------------------- +// readStatus +//--------------------------------------------------------- + +void LMaster::readStatus(Xml& xml) + { + 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 == "midieditor") + MidiEditor::readStatus(xml); + else + xml.unknown("LMaster"); + break; + case Xml::TagEnd: + if (tag == "lmaster") + return; + default: + break; + } + } + } + +//--------------------------------------------------------- +// writeStatus +//--------------------------------------------------------- + +void LMaster::writeStatus(int level, Xml& xml) const + { + xml.tag(level++, "lmaster"); + MidiEditor::writeStatus(level, xml); + xml.tag(level, "/lmaster"); + } + +//--------------------------------------------------------- +// select +//--------------------------------------------------------- + +void LMaster::select(Q3ListViewItem* /*item*/) + { +// printf("select %x\n", unsigned(item)); + } + +//--------------------------------------------------------- +// cmd +//--------------------------------------------------------- + +void LMaster::cmd(int cmd) + { + switch(cmd) { + case CMD_DELETE: { + LMasterLViewItem* l = (LMasterLViewItem*) view->selectedItem(); + if (!l) + return; + // Delete item: + if (l->tick() != 0) { + if (l == view->lastItem()) + view->setSelected(l->itemAbove(), true); + else + view->setSelected(l->itemBelow(), true); + + switch (l->getType()) { + case LMASTER_TEMPO: + { + LMasterTempoItem* t = (LMasterTempoItem*) l; + audio->msgDeleteTempo(t->tick(), t->tempo(), true); + break; + } + case LMASTER_SIGEVENT: + { + LMasterSigEventItem* s = (LMasterSigEventItem*) l; + audio->msgRemoveSig(s->tick(), s->z(), s->n()); + break; + } + default: + M_ERROR("Default switch statement reached"); + break; + } + } + break; + } + case CMD_INSERT_TEMPO: + tempoButtonClicked(); + break; + case CMD_INSERT_SIG: + timeSigButtonClicked(); + break; + case CMD_EDIT_BEAT: + case CMD_EDIT_VALUE: + cmd == CMD_EDIT_VALUE ? editorColumn = LMASTER_VAL_COL : editorColumn = LMASTER_BEAT_COL; + if (view->selectedItem() && !editedItem) { + itemDoubleClicked(view->selectedItem()); + } + break; + } + } + +/*! + \fn LMaster::itemPressed(QListViewItem* i, const QPoint& p, int column) + */ +void LMaster::itemPressed(Q3ListViewItem* i, const QPoint& /*p*/, int column) + { + //printf("itemPressed, column: %d\n", column); + if (editedItem) { + if (editorColumn != column || editedItem != i) + returnPressed(); + } + else + editorColumn = column; + } + +//--------------------------------------------------------- +// itemDoubleClicked(QListViewItem* item) +//! Sets lmaster in edit mode, and opens editor for selected value +//--------------------------------------------------------- +void LMaster::itemDoubleClicked(Q3ListViewItem* i) + { + //printf("itemDoubleClicked\n"); + + if (!editedItem && editorColumn == LMASTER_VAL_COL) { + editedItem = (LMasterLViewItem*) i; + QRect itemRect = view->itemRect(editedItem); + int x1 = view->columnWidth(LMASTER_BEAT_COL) + view->columnWidth(LMASTER_TIME_COL) + + view->columnWidth(LMASTER_TYPE_COL); + itemRect.setX(x1); + //Qt makes crazy things with itemRect if this is called directly.. + if (editingNewItem) { + QFontMetrics fm(font()); + int fw = style()->pixelMetric(QStyle::PM_DefaultFrameWidth,0 , this); // ddskrjo 0 + int h = fm.height() + fw * 2; + itemRect.setWidth(view->columnWidth(LMASTER_VAL_COL)); + itemRect.setY(1); + itemRect.setHeight(h); + } + + + // Edit tempo value: + if (editedItem->getType() == LMASTER_TEMPO) { + if (!editor) + editor = new QLineEdit(view->viewport(), "lineedit"); + editor->setText(editedItem->text(LMASTER_VAL_COL)); + editor->setGeometry(itemRect); + editor->show(); + editor->setFocus(); + editor->selectAll(); + connect(editor, SIGNAL(returnPressed()), SLOT(returnPressed())); + } + else { // Edit signatur value: + if (!sig_editor) + sig_editor = new SigEdit(view->viewport(), "sigedit"); + sig_editor->setValue(editedItem->text(LMASTER_VAL_COL)); + sig_editor->setGeometry(itemRect); + sig_editor->show(); + sig_editor->setFocus(); + connect(sig_editor, SIGNAL(returnPressed()), SLOT(returnPressed())); + } + } + // Edit tempo or signal position: + else if (!editedItem && editorColumn == LMASTER_BEAT_COL) { + editedItem = (LMasterLViewItem*) i; + // Don't allow movement of initial values: + if (editedItem->tick() == 0) { + QMessageBox::information(this, tr(LMASTER_MSGBOX_STRING), + tr("Reposition of the initial tempo and signature events is not allowed") ); + editedItem = 0; + } + // Everything OK + else { + if (!pos_editor) + pos_editor = new PosEdit(view->viewport(), "tmpposedit"); + pos_editor->setValue(editedItem->tick()); + QRect itemRect = view->itemRect(editedItem); + itemRect.setX(0); + itemRect.setWidth(view->columnWidth(LMASTER_BEAT_COL)); + pos_editor->setGeometry(itemRect); + pos_editor->show(); + pos_editor->setFocus(); + connect(pos_editor, SIGNAL(returnPressed()), SLOT(returnPressed())); + } + } + } + +//--------------------------------------------------------- +// returnPressed() +//! called when editor is closed +//--------------------------------------------------------- +void LMaster::returnPressed() + { + if (!editedItem) + return; + + setFocus(); + // Tempo event: + if (editedItem->getType() == LMASTER_TEMPO && editorColumn == LMASTER_VAL_COL) { + QString input = editor->text(); + editor->hide(); + repaint(); + LMasterTempoItem* e = (LMasterTempoItem*) editedItem; + const TEvent* t = e->getEvent(); + unsigned tick = t->tick; + bool conversionOK; + double dbl_input = input.toDouble(&conversionOK); + if (conversionOK && dbl_input < 250.0) { + int tempo = (int) ((1000000.0 * 60.0)/dbl_input); + + if (!editingNewItem) { + song->startUndo(); + audio->msgDeleteTempo(tick, e->tempo(), false); + audio->msgAddTempo(tick, tempo, false); + song->endUndo(SC_TEMPO); + } + // + // New item edited: + // + else { + audio->msgAddTempo(tick, tempo, true); + } + } + else { + QMessageBox::warning(this, tr("MusE: List Editor"), + tr("Input error, conversion not OK or value out of range"), + QMessageBox::Ok, Qt::NoButton + ); + } + } + // + // Beat column, change position of a particular tempo or signature event + // + else if (editorColumn == LMASTER_BEAT_COL) { + int oldtick = editedItem->tick(); + int newtick = pos_editor->pos().tick(); + if (newtick == 0) { // Do not allow change of position to beginning of song + QMessageBox::warning(this, tr(LMASTER_MSGBOX_STRING), + tr("Reposition of tempo and signature events to start position is not allowed!"), + QMessageBox::Ok, Qt::NoButton + ); + } + else if (oldtick != newtick) { // Ignore if tick hasn't changed + if (editedItem->getType() == LMASTER_TEMPO) { + LMasterTempoItem* t = (LMasterTempoItem*) editedItem; + int tempo = t->tempo(); + song->startUndo(); + audio->msgDeleteTempo(oldtick, tempo, false); + audio->msgAddTempo(newtick, tempo, false); + song->endUndo(SC_TEMPO); + // Select the item: + Q3ListViewItem* newSelected = (Q3ListViewItem*) getItemAtPos(newtick, LMASTER_TEMPO); + if (newSelected) { + view->clearSelection(); + view->setSelected(newSelected, true); + } + } + else if (editedItem->getType() == LMASTER_SIGEVENT) { + LMasterSigEventItem* t = (LMasterSigEventItem*) editedItem; + int z = t->z(); + int n = t->n(); + if (!editingNewItem) { + song->startUndo(); + audio->msgRemoveSig(oldtick, z, n, false); //Delete first, in order to get sane tick-value + newtick = pos_editor->pos().tick(); + audio->msgAddSig(newtick, z, n, false); + song->endUndo(SC_SIG); + } + else + audio->msgAddSig(newtick, z, n, false); + //audio->msgAddSig(newtick, z, n, true); + + // Select the item: + Q3ListViewItem* newSelected = (Q3ListViewItem*) getItemAtPos(newtick, LMASTER_SIGEVENT); + if (newSelected) { + view->clearSelection(); + view->setSelected(newSelected, true); + } + } + + } + pos_editor->hide(); + repaint(); + } + // + // SigEvent, value changed: + // + else if (editedItem->getType() == LMASTER_SIGEVENT && editorColumn == LMASTER_VAL_COL) + { + Sig newSig = sig_editor->sig(); + + sig_editor->hide(); + + // Added p3.3.43 Prevents aborting with 0 z or n. + if(newSig.isValid()) + { + + LMasterSigEventItem* e = (LMasterSigEventItem*) editedItem; + int tick = e->tick(); + if (!editingNewItem) { + song->startUndo(); + if (tick > 0) + audio->msgRemoveSig(tick, e->z(), e->n(), false); + audio->msgAddSig(tick, newSig.z, newSig.n, false); + song->endUndo(SC_SIG); + } + else + audio->msgAddSig(tick, newSig.z, newSig.n, true); + } + } + + view->setFocus(); + // No item edited now: + editedItem = 0; + editorColumn = -1; + editingNewItem = false; + } + + +/*! + \fn LMasterLViewItem::text(int column) + \brief Returns the initialized text to the View + */ +QString LMasterLViewItem::text(int column) const + { + QString ret = "?"; + switch (column) { + case LMASTER_BEAT_COL: + ret = c1; + break; + case LMASTER_TIME_COL: + ret = c2; + break; + case LMASTER_TYPE_COL: + ret = c3; + break; + case LMASTER_VAL_COL: + ret = c4; + break; + default: + fprintf(stderr,"LMasterLViewItem::text(int): Default switch statement reached... Unknown column.\n"); + break; + } + return ret; + } + +//--------------------------------------------------------- +// LMasterTempoItem +//! Initializes a LMasterTempoItem with a TEvent +//--------------------------------------------------------- +LMasterTempoItem::LMasterTempoItem(Q3ListView* parent, const TEvent* ev) + : LMasterLViewItem(parent) + { + tempoEvent = ev; + unsigned t = ev->tick; + //QString c1, c2, c3, c4; + int bar, beat; + unsigned tick; + sigmap.tickValues(t, &bar, &beat, &tick); + c1.sprintf("%04d.%02d.%03d", bar+1, beat+1, tick); + + double time = double(ev->frame) / double(sampleRate); + int min = int(time) / 60; + int sec = int(time) % 60; + int msec = int((time - (min*60 + sec)) * 1000.0); + c2.sprintf("%03d:%02d:%03d", min, sec, msec); + c3 = "Tempo"; + double dt = (1000000.0 * 60.0)/ev->tempo; + c4.setNum(dt, 'f', 3); + } + +//--------------------------------------------------------- +// LMasterSigEventItem +//! Initializes a ListView item with a SigEvent +//--------------------------------------------------------- +LMasterSigEventItem::LMasterSigEventItem(Q3ListView* parent, const SigEvent* ev) + : LMasterLViewItem(parent) + { + sigEvent = ev; + unsigned t = ev->tick; + int bar, beat; + unsigned tick; + sigmap.tickValues(t, &bar, &beat, &tick); + c1.sprintf("%04d.%02d.%03d", bar+1, beat+1, tick); + + double time = double(tempomap.tick2frame(t)) / double (sampleRate); + int min = int(time) / 60; + int sec = int(time) % 60; + int msec = int((time - (min*60 + sec)) * 1000.0); + c2.sprintf("%03d:%02d:%03d", min, sec, msec); + c3 = "Timesig"; + c4.sprintf("%d/%d", ev->z, ev->n); + } + +//--------------------------------------------------------- +// tempoButtonClicked() +//! inserts a new tempo-item in the list and starts the editor for it +//--------------------------------------------------------- +void LMaster::tempoButtonClicked() + { + LMasterTempoItem* lastTempo = (LMasterTempoItem*) getLastOfType(LMASTER_TEMPO); + QString beatString = ((LMasterLViewItem*)lastTempo)->text(LMASTER_BEAT_COL); + int m, b, t; + Pos p = Pos(beatString); + p.mbt(&m, &b, &t); + m++; //Next bar + int newTick = sigmap.bar2tick(m, b, t); + TEvent* ev = new TEvent(lastTempo->tempo(), newTick); + new LMasterTempoItem(view, ev); + Q3ListViewItem* newTempoItem = view->firstChild(); + + editingNewItem = true; // State + editorColumn = LMASTER_VAL_COL; // Set that we edit editorColumn + view->clearSelection(); + view->setSelected(newTempoItem, true); + itemDoubleClicked(newTempoItem); + } + + +//--------------------------------------------------------- +// tempoButtonClicked() +//! inserts a new sig-item in the list and starts the editor for it +//--------------------------------------------------------- +void LMaster::timeSigButtonClicked() + { + LMasterSigEventItem* lastSig = (LMasterSigEventItem*) getLastOfType(LMASTER_SIGEVENT); + QString beatString = ((LMasterLViewItem*)lastSig)->text(LMASTER_BEAT_COL); + int m, b, t; + Pos p = Pos(beatString); + p.mbt(&m, &b, &t); + m++; + int newTick = sigmap.bar2tick(m, b, t); + SigEvent* ev = new SigEvent(lastSig->z(), lastSig->n(), newTick); + new LMasterSigEventItem(view, ev); + Q3ListViewItem* newSigItem = view->firstChild(); + + editingNewItem = true; // State + editorColumn = LMASTER_VAL_COL; // Set that we edit editorColumn + view->clearSelection(); + view->setSelected(newSigItem, true); + itemDoubleClicked(newSigItem); + } + + +/*! + \fn LMaster::getLastOfType(LMASTER_LVTYPE t) + */ +LMasterLViewItem* LMaster::getLastOfType(LMASTER_LVTYPE t) + { + LMasterLViewItem* tmp = (LMasterLViewItem*) view->lastItem(); + while (tmp->getType() != t) { + tmp = (LMasterLViewItem*) tmp->itemAbove(); + } + return tmp; + } + + +/*! + \fn LMaster::getItemAtPos(unsigned tick, LMASTER_LVTYPE t) + */ +LMasterLViewItem* LMaster::getItemAtPos(unsigned tick, LMASTER_LVTYPE t) + { + LMasterLViewItem* tmp = (LMasterLViewItem*) view->firstChild(); + while (tmp) { + if (tmp->getType() == t && tmp->tick() == tick) + return tmp; + tmp = (LMasterLViewItem*) tmp->itemBelow(); + } + + return 0; + } + + +/*! + \fn LMaster::configChanged() + */ +void LMaster::configChanged() + { + initShortcuts(); + } + + +/*! + \fn LMaster::initShortcuts() + */ +void LMaster::initShortcuts() + { + menuEdit->setAccel(shortcuts[SHRT_LM_INS_TEMPO].key, CMD_INSERT_TEMPO); + menuEdit->setAccel(shortcuts[SHRT_LM_INS_SIG].key, CMD_INSERT_SIG); + menuEdit->setAccel(shortcuts[SHRT_LM_EDIT_BEAT].key, CMD_EDIT_BEAT); + menuEdit->setAccel(shortcuts[SHRT_LM_EDIT_VALUE].key, CMD_EDIT_VALUE); + } diff --git a/muse2/muse/master/lmaster.h b/muse2/muse/master/lmaster.h new file mode 100644 index 00000000..b67f64bf --- /dev/null +++ b/muse2/muse/master/lmaster.h @@ -0,0 +1,145 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: lmaster.h,v 1.1.1.1.2.5 2005/12/11 21:29:23 spamatica Exp $ +// (C) Copyright 2000 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __LMASTER_EDIT_H__ +#define __LMASTER_EDIT_H__ + +#include +#include +//Added by qt3to4: +#include +#include +#include +#include "midieditor.h" +#include "noteinfo.h" +#include "cobject.h" +#include +#include +#include "tempo.h" +#include "sig.h" + +class QToolButton; +class Q3ListView; +class SigEvent; +class QLineEdit; +class QMouseEvent; +class PosEdit; +class SigEdit; + +enum LMASTER_LVTYPE + { + LMASTER_TEMPO = 0, + LMASTER_SIGEVENT + }; + +//--------------------------------------------------------- +// LMasterLViewItem +//! QListViewItem base class for LMasterTempoItem and LMasterSigEventItem +//--------------------------------------------------------- +class LMasterLViewItem : public Q3ListViewItem { + protected: + QString c1, c2, c3, c4; + + public: + LMasterLViewItem(Q3ListView* parent) + : Q3ListViewItem(parent) { } + LMasterLViewItem(Q3ListView* parent, Q3ListViewItem* after) + : Q3ListViewItem(parent, after) { } + virtual QString text(int column) const; + virtual LMASTER_LVTYPE getType() = 0; + virtual unsigned tick() = 0; + }; + +//--------------------------------------------------------- +// LMasterTempoItem +//! QListViewItem which holds data for a TEvent +//--------------------------------------------------------- +class LMasterTempoItem : public LMasterLViewItem { + + private: + const TEvent* tempoEvent; + + public: + LMasterTempoItem(Q3ListView* parent, const TEvent* t); + virtual LMASTER_LVTYPE getType() { return LMASTER_TEMPO; } + const TEvent* getEvent() { return tempoEvent; } + virtual unsigned tick() { return tempoEvent->tick; } + int tempo() { return tempoEvent->tempo; } + }; + +//--------------------------------------------------------- +// LMasterTempoItem +//! QListViewItem which holds data for a SigEvent +//--------------------------------------------------------- +class LMasterSigEventItem : public LMasterLViewItem { + + private: + const SigEvent* sigEvent; + + public: + LMasterSigEventItem(Q3ListView* parent, const SigEvent* s); + virtual LMASTER_LVTYPE getType() { return LMASTER_SIGEVENT; } + const SigEvent* getEvent() { return sigEvent; } + virtual unsigned tick() { return sigEvent->tick; } + int z() { return sigEvent->z; } + int n() { return sigEvent->n; } + }; + + +//--------------------------------------------------------- +// LMaster +//--------------------------------------------------------- + +class LMaster : public MidiEditor { + Q3ListView* view; + Q3ToolBar* tools; + Q3PopupMenu* menuEdit; + + enum { CMD_DELETE, CMD_INSERT_SIG, CMD_INSERT_TEMPO, CMD_EDIT_BEAT, CMD_EDIT_VALUE }; + + Q_OBJECT + virtual void closeEvent(QCloseEvent*); + void updateList(); + void insertTempo(const TEvent*); + void insertSig(const SigEvent*); + LMasterLViewItem* getItemAtPos(unsigned tick, LMASTER_LVTYPE t); + void initShortcuts(); + QLineEdit* editor; + PosEdit* pos_editor; + // State-like members: + LMasterLViewItem* editedItem; + SigEdit* sig_editor; + int editorColumn; + bool editingNewItem; + + private slots: + void select(Q3ListViewItem*); + void itemDoubleClicked(Q3ListViewItem* item); + void returnPressed(); + void itemPressed(Q3ListViewItem* i, const QPoint& p, int column); + void tempoButtonClicked(); + void timeSigButtonClicked(); + void cmd(int cmd); + + public slots: + void songChanged(int); + void configChanged(); + + signals: + void deleted(unsigned long); + + public: + LMaster(); + ~LMaster(); + virtual void readStatus(Xml&); + virtual void writeStatus(int, Xml&) const; + LMasterLViewItem* getLastOfType(LMASTER_LVTYPE t); + }; + + +#endif + diff --git a/muse2/muse/master/master.cpp b/muse2/muse/master/master.cpp new file mode 100644 index 00000000..65204bef --- /dev/null +++ b/muse2/muse/master/master.cpp @@ -0,0 +1,341 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: master.cpp,v 1.3 2004/04/11 13:03:32 wschweer Exp $ +// (C) Copyright 2000 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include + +#include +#include +#include +#include +#include +//Added by qt3to4: +#include +#include + +#include "globals.h" +#include "master.h" +#include "song.h" +#include "scrollscale.h" +#include "midi.h" +#include "midieditor.h" +#include "icons.h" +#include "audio.h" + +extern void drawTickRaster(QPainter& p, int x, int y, + int w, int h, int quant); + +//--------------------------------------------------------- +// Master +//--------------------------------------------------------- + +Master::Master(MidiEditor* e, QWidget* parent, int xmag, int ymag) + : View(parent, xmag, ymag) + { + editor = e; + setBg(Qt::white); + vscroll = 0; + pos[0] = 0; + pos[1] = 0; + pos[2] = 0; + setMouseTracking(true); + connect(song, SIGNAL(posChanged(int, unsigned, bool)), this, SLOT(setPos(int, unsigned, bool))); + connect(song, SIGNAL(songChanged(int)), this, SLOT(redraw())); + } + +//--------------------------------------------------------- +// setPos +//--------------------------------------------------------- + +void Master::setPos(int idx, unsigned val, bool adjustScrollbar) + { + if (pos[idx] == val) + return; + + int opos = mapx(pos[idx]); + int npos = mapx(val); + + if (adjustScrollbar && idx == 0) { + switch (song->follow()) { + case Song::NO: + break; + case Song::JUMP: + if (npos >= width()) { + int ppos = val - rmapxDev(width()/8); + if (ppos < 0) + ppos = 0; + emit followEvent(ppos); + opos = mapx(pos[idx]); + npos = mapx(val); + } + else if (npos < 0) { + int ppos = val - rmapxDev(width()*3/4); + if (ppos < 0) + ppos = 0; + emit followEvent(ppos); + opos = mapx(pos[idx]); + npos = mapx(val); + } + break; + case Song::CONTINUOUS: + if (npos > (width()/2)) { + int ppos = pos[idx] - rmapxDev(width()/2); + if (ppos < 0) + ppos = 0; + emit followEvent(ppos); + opos = mapx(pos[idx]); + npos = mapx(val); + } + else if (npos < (width()/2)) { + int ppos = pos[idx] - rmapxDev(width()/2); + if (ppos < 0) + ppos = 0; + emit followEvent(ppos); + opos = mapx(pos[idx]); + npos = mapx(val); + } + break; + } + } + + int x; + int w = 1; + if (opos > npos) { + w += opos - npos; + x = npos; + } + else { + w += npos - opos; + x = opos; + } + pos[idx] = val; + redraw(QRect(x-1, 0, w+2, height())); + } + +//--------------------------------------------------------- +// leaveEvent +//--------------------------------------------------------- + +void Master::leaveEvent(QEvent*) + { + emit tempoChanged(-1); + emit timeChanged(MAXINT); + } + +//--------------------------------------------------------- +// pdraw +//--------------------------------------------------------- + +void Master::pdraw(QPainter& p, const QRect& rect) + { + View::pdraw(p, rect); // calls draw() + p.resetXForm(); + + int x = rect.x(); + int y = rect.y(); + int w = rect.width() + 2; + int h = rect.height(); + + int wh = height(); + //--------------------------------------------------- + // draw Canvas Items + //--------------------------------------------------- + + const TempoList* tl = &tempomap; + for (ciTEvent i = tl->begin(); i != tl->end(); ++i) { + TEvent* e = i->second; + int etick = mapx(i->first); + int stick = mapx(i->second->tick); + int tempo = mapy(280000 - int(60000000000.0/(e->tempo))); + + if (tempo < 0) + tempo = 0; + if (tempo < wh) { + p.fillRect(stick, tempo, etick-stick, wh, Qt::blue); + } + } + + //--------------------------------------------------- + // draw marker + //--------------------------------------------------- + + int xp = mapx(pos[0]); + if (xp >= x && xp < x+w) { + p.setPen(Qt::red); + p.drawLine(xp, y, xp, y+h); + } + xp = mapx(pos[1]); + if (xp >= x && xp < x+w) { + p.setPen(Qt::blue); + p.drawLine(xp, y, xp, y+h); + } + xp = mapx(pos[2]); + if (xp >= x && xp < x+w) { + p.setPen(Qt::blue); + p.drawLine(xp, y, xp, y+h); + } + } + +//--------------------------------------------------------- +// draw +//--------------------------------------------------------- + +void Master::draw(QPainter& p, const QRect& rect) + { + drawTickRaster(p, rect.x(), rect.y(), + rect.width(), rect.height(), 0); + } + +//--------------------------------------------------------- +// viewMousePressEvent +//--------------------------------------------------------- + +void Master::viewMousePressEvent(QMouseEvent* event) + { + start = event->pos(); + Tool activeTool = tool; +// bool shift = event->state() & ShiftButton; + + switch (activeTool) { + case PointerTool: + drag = DRAG_LASSO_START; + break; + + case PencilTool: + drag = DRAG_NEW; + song->startUndo(); + newVal(start.x(), start.x(), start.y()); + break; + + case RubberTool: + drag = DRAG_DELETE; + song->startUndo(); + deleteVal(start.x(), start.x()); + break; + + default: + break; + } + } + +//--------------------------------------------------------- +// viewMouseMoveEvent +//--------------------------------------------------------- + +void Master::viewMouseMoveEvent(QMouseEvent* event) + { + QPoint pos = event->pos(); +// QPoint dist = pos - start; +// bool moving = dist.y() >= 3 || dist.y() <= 3 || dist.x() >= 3 || dist.x() <= 3; + + switch (drag) { + case DRAG_NEW: + newVal(start.x(), pos.x(), pos.y()); + start = pos; + break; + + case DRAG_DELETE: + deleteVal(start.x(), pos.x()); + start = pos; + break; + + default: + break; + } + emit tempoChanged(280000 - event->y()); + int x = pos.x(); + if (x < 0) + x = 0; + emit timeChanged(editor->rasterVal(x)); + } + +//--------------------------------------------------------- +// viewMouseReleaseEvent +//--------------------------------------------------------- + +void Master::viewMouseReleaseEvent(QMouseEvent*) + { + switch (drag) { + case DRAG_RESIZE: + case DRAG_NEW: + case DRAG_DELETE: + song->endUndo(SC_TEMPO); + break; + default: + break; + } + drag = DRAG_OFF; + } + +//--------------------------------------------------------- +// deleteVal +//--------------------------------------------------------- + +bool Master::deleteVal1(unsigned int x1, unsigned int x2) + { + bool songChanged = false; + + TempoList* tl = &tempomap; + for (iTEvent i = tl->begin(); i != tl->end(); ++i) { + if (i->first < x1) + continue; + if (i->first >= x2) + break; + iTEvent ii = i; + ++ii; + if (ii != tl->end()) { + int tempo = ii->second->tempo; + audio->msgDeleteTempo(i->first, tempo, false); + songChanged = true; + } + } + return songChanged; + } + +void Master::deleteVal(int x1, int x2) + { + if (deleteVal1(editor->rasterVal1(x1), x2)) + redraw(); + } + +//--------------------------------------------------------- +// setTool +//--------------------------------------------------------- + +void Master::setTool(int t) + { + if (tool == Tool(t)) + return; + tool = Tool(t); + switch(tool) { + case PencilTool: + setCursor(QCursor(*pencilIcon, 4, 15)); + break; + default: + setCursor(QCursor(Qt::arrowCursor)); + break; + } + } + +//--------------------------------------------------------- +// newVal +//--------------------------------------------------------- + +void Master::newVal(int x1, int x2, int y) + { + int xx1 = editor->rasterVal1(x1); + int xx2 = editor->rasterVal2(x2); + + if (xx1 > xx2) { + int tmp = xx2; + xx2 = xx1; + xx1 = tmp; + } + deleteVal1(xx1, xx2); + audio->msgAddTempo(xx1, int(60000000000.0/(280000 - y)), false); + redraw(); + } diff --git a/muse2/muse/master/master.h b/muse2/muse/master/master.h new file mode 100644 index 00000000..ee5bfd21 --- /dev/null +++ b/muse2/muse/master/master.h @@ -0,0 +1,69 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: master.h,v 1.3 2004/04/11 13:03:32 wschweer Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __MASTER_H__ +#define __MASTER_H__ + +#include +//Added by qt3to4: +#include +#include + +#include "view.h" +#include "song.h" +#include "tools.h" + +class ScrollScale; +class QPainter; +class QRect; +class MidiEditor; + +//--------------------------------------------------------- +// Master +//--------------------------------------------------------- + +class Master : public View { + enum DragMode { DRAG_OFF, DRAG_NEW, DRAG_MOVE_START, DRAG_MOVE, + DRAG_DELETE, DRAG_COPY_START, DRAG_COPY, + DRAG_RESIZE, DRAG_LASSO_START, DRAG_LASSO + }; + ScrollScale* vscroll; + unsigned pos[3]; + QPoint start; + Tool tool; + DragMode drag; + MidiEditor* editor; + + Q_OBJECT + virtual void pdraw(QPainter&, const QRect&); + virtual void viewMouseMoveEvent(QMouseEvent* event); + virtual void leaveEvent(QEvent*e); + virtual void viewMousePressEvent(QMouseEvent* event); + virtual void viewMouseReleaseEvent(QMouseEvent*); + + void draw(QPainter&, const QRect&); + void newVal(int x1, int x2, int y); + bool deleteVal1(unsigned int x1, unsigned int x2); + void deleteVal(int x1, int x2); + + signals: + void followEvent(int); + void xposChanged(int); + void yposChanged(int); + void timeChanged(unsigned); + void tempoChanged(int); + + public slots: + void setPos(int, unsigned, bool adjustScrollbar); + void setTool(int t); + + public: + Master(MidiEditor*, QWidget* parent, int xmag, int ymag); + }; + +#endif + diff --git a/muse2/muse/master/masteredit.cpp b/muse2/muse/master/masteredit.cpp new file mode 100644 index 00000000..ef8abde8 --- /dev/null +++ b/muse2/muse/master/masteredit.cpp @@ -0,0 +1,403 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: masteredit.cpp,v 1.4.2.5 2009/07/01 22:14:56 spamatica Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#include "masteredit.h" +#include "mtscale.h" +#include "hitscale.h" +#include "sigscale.h" +#include "scrollscale.h" +#include "poslabel.h" +#include "master.h" +#include "utils.h" +#include "tscale.h" +#include "tempolabel.h" +#include "xml.h" +#include "lcombo.h" +#include "doublelabel.h" +#include "sigedit.h" +#include "globals.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//Added by qt3to4: +#include + +int MasterEdit::_rasterInit = 0; + +//--------------------------------------------------------- +// closeEvent +//--------------------------------------------------------- + +void MasterEdit::closeEvent(QCloseEvent* e) + { + emit deleted((unsigned long)this); + e->accept(); + } + +//--------------------------------------------------------- +// songChanged +//--------------------------------------------------------- + +void MasterEdit::songChanged(int type) + { + if (type & SC_TEMPO) { + int tempo = tempomap.tempo(song->cpos()); + curTempo->blockSignals(true); + curTempo->setValue(double(60000000.0/tempo)); + + curTempo->blockSignals(false); + } + if (type & SC_SIG) { + int z, n; + sigmap.timesig(song->cpos(), z, n); + curSig->blockSignals(true); + curSig->setValue(Sig(z, n)); + curSig->blockSignals(false); + sign->redraw(); + } + if (type & SC_MASTER) { + enableButton->blockSignals(true); + enableButton->setOn(song->masterFlag()); + enableButton->blockSignals(false); + } + } + +//--------------------------------------------------------- +// MasterEdit +//--------------------------------------------------------- + +MasterEdit::MasterEdit() + : MidiEditor(0, _rasterInit, 0) + { + setCaption(tr("MusE: Mastertrack")); + _raster = 0; // measure + setMinimumSize(400, 300); + resize(500, 350); + + //---------Pulldown Menu---------------------------- +// QPopupMenu* file = new QPopupMenu(this); +// menuBar()->insertItem("&File", file); + + //---------ToolBar---------------------------------- + tools = new Q3ToolBar(tr("edit tools"), this); + undoRedo->addTo(tools); + + EditToolBar* tools2 = new EditToolBar(this, + PointerTool | PencilTool | RubberTool); + + Q3ToolBar* enableMaster = new Q3ToolBar(tr("EnableMaster"), this); + enableButton = new QToolButton(enableMaster); + enableButton->setToggleButton(true); + enableButton->setText(tr("Enable")); + QToolTip::add(enableButton, tr("Enable usage of master track")); + enableButton->setOn(song->masterFlag()); + connect(enableButton, SIGNAL(toggled(bool)), song, SLOT(setMasterFlag(bool))); + + Q3ToolBar* info = new Q3ToolBar(tr("Info"), this); + QLabel* label = new QLabel(tr("Cursor"), info); + label->setAlignment(Qt::AlignRight|Qt::AlignVCenter); + label->setIndent(3); + + cursorPos = new PosLabel(info); + tempo = new TempoLabel(info); + + const char* rastval[] = { + QT_TR_NOOP("Off"), "Bar", "1/2", "1/4", "1/8", "1/16" + }; + rasterLabel = new LabelCombo(tr("Snap"), info); + rasterLabel->setFocusPolicy(Qt::NoFocus); + for (int i = 0; i < 6; i++) + rasterLabel->insertItem(tr(rastval[i]), i); + rasterLabel->setCurrentItem(1); + connect(rasterLabel, SIGNAL(activated(int)), SLOT(_setRaster(int))); + + QToolTip::add(cursorPos, tr("time at cursor position")); + QToolTip::add(tempo, tr("tempo at cursor position")); + + //---------values for current position--------------- + new QLabel(tr("CurPos "), info); + curTempo = new TempoEdit(info); + curSig = new SigEdit(info); + curSig->setValue(Sig(4, 4)); + QToolTip::add(curTempo, tr("tempo at current position")); + QToolTip::add(curSig, tr("time signature at current position")); + connect(curSig, SIGNAL(valueChanged(int,int)), song, SLOT(setSig(int,int))); + connect(curTempo, SIGNAL(valueChanged(double)), song, SLOT(setTempo(double))); + + //--------------------------------------------------- + // master + //--------------------------------------------------- + + int xscale = -20; + int yscale = -500; + hscroll = new ScrollScale(-100, -2, xscale, song->len(), Qt::Horizontal, mainw); + vscroll = new ScrollScale(-1000, -100, yscale, 120000, Qt::Vertical, mainw); + vscroll->setRange(30000, 250000); + time1 = new MTScale(&_raster, mainw, xscale); + sign = new SigScale(&_raster, mainw, xscale); +// thits = new HitScale(&_raster, mainw, xscale); + + canvas = new Master(this, mainw, xscale, yscale); + +// zhits = new HitScale(&_raster, mainw, xscale); + time2 = new MTScale(&_raster, mainw, xscale); + tscale = new TScale(mainw, yscale); + time2->setBarLocator(true); + + //--------------------------------------------------- + // Rest + //--------------------------------------------------- + +// QSizeGrip* corner = new QSizeGrip(mainw); + + mainGrid->setRowStretch(5, 100); + mainGrid->setColStretch(1, 100); + + mainGrid->addWidget(hLine(mainw), 0, 1); + mainGrid->addWidget(time1, 1, 1); + mainGrid->addWidget(hLine(mainw), 2, 1); + mainGrid->addWidget(sign, 3, 1); + mainGrid->addWidget(hLine(mainw), 4, 1); +// mainGrid->addWidget(thits, 5, 1); +// mainGrid->addWidget(hLine(mainw), 6, 1); + mainGrid->addWidget(canvas, 5, 1); + mainGrid->addWidget(tscale, 5, 0); + mainGrid->addWidget(hLine(mainw), 6, 1); +// mainGrid->addWidget(zhits, 9, 1); +// mainGrid->addWidget(hLine(mainw), 7, 1); + mainGrid->addWidget(time2, 7, 1); + mainGrid->addWidget(hscroll, 8, 1); + mainGrid->addMultiCellWidget(vscroll, 0, 9, 2, 2); +// mainGrid->addWidget(corner, 9, 2, AlignBottom | AlignRight); + + connect(tools2, SIGNAL(toolChanged(int)), canvas, SLOT(setTool(int))); + connect(vscroll, SIGNAL(scrollChanged(int)), canvas, SLOT(setYPos(int))); + connect(vscroll, SIGNAL(scaleChanged(int)), canvas, SLOT(setYMag(int))); + + connect(vscroll, SIGNAL(scrollChanged(int)), tscale, SLOT(setYPos(int))); + connect(vscroll, SIGNAL(scaleChanged(int)), tscale, SLOT(setYMag(int))); + + connect(hscroll, SIGNAL(scrollChanged(int)), time1, SLOT(setXPos(int))); + connect(hscroll, SIGNAL(scrollChanged(int)), sign, SLOT(setXPos(int))); +// connect(hscroll, SIGNAL(scrollChanged(int)), thits, SLOT(setXPos(int))); + connect(hscroll, SIGNAL(scrollChanged(int)), canvas, SLOT(setXPos(int))); +// connect(hscroll, SIGNAL(scrollChanged(int)), zhits, SLOT(setXPos(int))); + connect(hscroll, SIGNAL(scrollChanged(int)), time2, SLOT(setXPos(int))); + + connect(hscroll, SIGNAL(scaleChanged(int)), time1, SLOT(setXMag(int))); + connect(hscroll, SIGNAL(scaleChanged(int)), sign, SLOT(setXMag(int))); +// connect(hscroll, SIGNAL(scaleChanged(int)), thits, SLOT(setXMag(int))); + connect(hscroll, SIGNAL(scaleChanged(int)), canvas, SLOT(setXMag(int))); +// connect(hscroll, SIGNAL(scaleChanged(int)), zhits, SLOT(setXMag(int))); + connect(hscroll, SIGNAL(scaleChanged(int)), time2, SLOT(setXMag(int))); + + connect(time1, SIGNAL(timeChanged(unsigned)), SLOT(setTime(unsigned))); +// connect(sign, SIGNAL(timeChanged(unsigned)), pos, SLOT(setValue(unsigned))); +// connect(thits, SIGNAL(timeChanged(unsigned)), pos, SLOT(setValue(unsigned))); +// connect(canvas, SIGNAL(timeChanged(unsigned)), pos, SLOT(setValue(unsigned))); +// connect(zhits, SIGNAL(timeChanged(unsigned)), pos, SLOT(setValue(unsigned))); + connect(time2, SIGNAL(timeChanged(unsigned)), SLOT(setTime(unsigned))); + + connect(tscale, SIGNAL(tempoChanged(int)), SLOT(setTempo(int))); + connect(canvas, SIGNAL(tempoChanged(int)), SLOT(setTempo(int))); + connect(song, SIGNAL(songChanged(int)), SLOT(songChanged(int))); + connect(song, SIGNAL(posChanged(int,unsigned,bool)), SLOT(posChanged(int,unsigned,bool))); + + connect(canvas, SIGNAL(followEvent(int)), hscroll, SLOT(setOffset(int))); + connect(canvas, SIGNAL(timeChanged(unsigned)), SLOT(setTime(unsigned))); + } + +//--------------------------------------------------------- +// ~MasterEdit +//--------------------------------------------------------- + +MasterEdit::~MasterEdit() + { + undoRedo->removeFrom(tools); + } + +//--------------------------------------------------------- +// readStatus +//--------------------------------------------------------- + +void MasterEdit::readStatus(Xml& xml) + { + for (;;) { + Xml::Token token = xml.parse(); + const QString& tag = xml.s1(); + switch (token) { + case Xml::Error: + case Xml::End: + return; + case Xml::TagStart: + if (tag == "midieditor") + MidiEditor::readStatus(xml); + else if (tag == "ypos") + vscroll->setPos(xml.parseInt()); + else if (tag == "ymag") { + // vscroll->setMag(xml.parseInt()); + int mag = xml.parseInt(); + vscroll->setMag(mag); + } + else + xml.unknown("MasterEdit"); + break; + case Xml::TagEnd: + if (tag == "master") { + // raster setzen + int item = 0; + switch(_raster) { + case 1: item = 0; break; + case 0: item = 1; break; + case 768: item = 2; break; + case 384: item = 3; break; + case 192: item = 4; break; + case 96: item = 5; break; + } + _rasterInit = _raster; + rasterLabel->setCurrentItem(item); + return; + } + default: + break; + } + } + } + +//--------------------------------------------------------- +// writeStatus +//--------------------------------------------------------- + +void MasterEdit::writeStatus(int level, Xml& xml) const + { + xml.tag(level++, "master"); + xml.intTag(level, "ypos", vscroll->pos()); + xml.intTag(level, "ymag", vscroll->mag()); + MidiEditor::writeStatus(level, xml); + xml.tag(level, "/master"); + } + +//--------------------------------------------------------- +// readConfiguration +//--------------------------------------------------------- + +void MasterEdit::readConfiguration(Xml& xml) + { + for (;;) { + Xml::Token token = xml.parse(); + const QString& tag = xml.s1(); + switch (token) { + case Xml::Error: + case Xml::End: + return; + case Xml::TagStart: + if (tag == "raster") + _rasterInit = xml.parseInt(); + else + xml.unknown("MasterEdit"); + break; + case Xml::TagEnd: + if (tag == "masteredit") + return; + default: + break; + } + } + } + +//--------------------------------------------------------- +// writeConfiguration +//--------------------------------------------------------- + +void MasterEdit::writeConfiguration(int level, Xml& xml) + { + xml.tag(level++, "masteredit"); + xml.intTag(level, "raster", _rasterInit); + xml.tag(level, "/masteredit"); + } + +//--------------------------------------------------------- +// _setRaster +//--------------------------------------------------------- + +void MasterEdit::_setRaster(int index) + { + static int rasterTable[] = { + 1, 0, 768, 384, 192, 96 + }; + _raster = rasterTable[index]; + _rasterInit = _raster; + } + +//--------------------------------------------------------- +// posChanged +//--------------------------------------------------------- + +void MasterEdit::posChanged(int idx, unsigned val, bool) + { + if (idx == 0) { + int z, n; + int tempo = tempomap.tempo(val); + sigmap.timesig(val, z, n); + curTempo->blockSignals(true); + curSig->blockSignals(true); + + curTempo->setValue(double(60000000.0/tempo)); + curSig->setValue(Sig(z, n)); + + curTempo->blockSignals(false); + curSig->blockSignals(false); + } + } + +//--------------------------------------------------------- +// setTime +//--------------------------------------------------------- + +void MasterEdit::setTime(unsigned tick) + { + if (tick == MAXINT) + cursorPos->setEnabled(false); + else { + cursorPos->setEnabled(true); + cursorPos->setValue(tick); + time1->setPos(3, tick, false); + time2->setPos(3, tick, false); + } + } + +//--------------------------------------------------------- +// setTempo +//--------------------------------------------------------- + +void MasterEdit::setTempo(int val) + { + if (val == -1) + tempo->setEnabled(false); + else { + tempo->setEnabled(true); + tempo->setValue(val); + } + } + diff --git a/muse2/muse/master/masteredit.h b/muse2/muse/master/masteredit.h new file mode 100644 index 00000000..88ada6eb --- /dev/null +++ b/muse2/muse/master/masteredit.h @@ -0,0 +1,83 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: masteredit.h,v 1.3.2.2 2009/04/01 01:37:11 terminator356 Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __MASTER_EDIT_H__ +#define __MASTER_EDIT_H__ + +#include +//Added by qt3to4: +#include +#include "midieditor.h" +#include "noteinfo.h" +#include "cobject.h" +#include + +class QToolButton; +class Master; +class ScrollScale; +class MTScale; +class SigScale; +class HitScale; +class TScale; +class TempoEdit; +class SigEdit; +class LabelCombo; +class PosLabel; +class TempoLabel; + +//--------------------------------------------------------- +// MasterEdit +//--------------------------------------------------------- + +class MasterEdit : public MidiEditor { + Master* canvas; + ScrollScale* hscroll; + ScrollScale* vscroll; + MTScale* time1; + MTScale* time2; + SigScale* sign; + HitScale* thits; + HitScale* zhits; + TScale* tscale; + + TempoEdit* curTempo; + SigEdit* curSig; + LabelCombo* rasterLabel; + Q3ToolBar* tools; + PosLabel* cursorPos; + TempoLabel* tempo; + QToolButton* enableButton; + + static int _rasterInit; + + Q_OBJECT + virtual void closeEvent(QCloseEvent*); + + private slots: + void _setRaster(int); + void posChanged(int,unsigned,bool); + void setTime(unsigned); + void setTempo(int); + + public slots: + void songChanged(int); +// void tempoChanged(double); + + signals: + void deleted(unsigned long); + + public: + MasterEdit(); + ~MasterEdit(); + virtual void readStatus(Xml&); + virtual void writeStatus(int, Xml&) const; + static void readConfiguration(Xml&); + static void writeConfiguration(int, Xml&); + }; + +#endif + diff --git a/muse2/muse/master/tscale.cpp b/muse2/muse/master/tscale.cpp new file mode 100644 index 00000000..e31af92c --- /dev/null +++ b/muse2/muse/master/tscale.cpp @@ -0,0 +1,61 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: tscale.cpp,v 1.2 2003/12/17 11:04:14 wschweer Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include "tscale.h" +#include "globals.h" +#include "gconfig.h" +//Added by qt3to4: +#include +#include + +//--------------------------------------------------------- +// TScale +//--------------------------------------------------------- + +TScale::TScale(QWidget* parent, int ymag) + : View(parent, 1, ymag) + { + setFont(config.fonts[3]); + int w = 4 * QFontMetrics(config.fonts[4]).width('0'); + setFixedWidth(w); + setMouseTracking(true); + } + +//--------------------------------------------------------- +// draw +//--------------------------------------------------------- + +void TScale::pdraw(QPainter& p, const QRect& r) + { + int y = r.y(); + int h = r.height(); + p.setFont(config.fonts[4]); + QString s; + for (int i = 30000; i <= 250000; i += 10000) { + int yy = mapy(280000 - i); + if (yy < y) + break; + if (yy-15 > y+h) + continue; + p.drawLine(0, yy, width(), yy); + s.setNum(i/1000); + QFontMetrics fm(config.fonts[4]); + p.drawText(width() - fm.width(s) - 1, yy-2, s); + } + } + +void TScale::viewMouseMoveEvent(QMouseEvent* event) + { + emit tempoChanged(280000 - event->y()); + } + +void TScale::leaveEvent(QEvent*) + { + emit tempoChanged(-1); + } + diff --git a/muse2/muse/master/tscale.h b/muse2/muse/master/tscale.h new file mode 100644 index 00000000..08f91c7e --- /dev/null +++ b/muse2/muse/master/tscale.h @@ -0,0 +1,38 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: tscale.h,v 1.1.1.1 2003/10/27 18:52:36 wschweer Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __TSCALE_H__ +#define __TSCALE_H__ + +#include "view.h" +//Added by qt3to4: +#include +#include + +//--------------------------------------------------------- +// Tscale +//--------------------------------------------------------- + +class TScale : public View { + double curTempo; + Q_OBJECT + + virtual void viewMouseMoveEvent(QMouseEvent* event); + virtual void leaveEvent(QEvent*e); + + protected: + virtual void pdraw(QPainter&, const QRect&); + + signals: + void tempoChanged(int); + + public: + TScale(QWidget*, int); + }; + +#endif + diff --git a/muse2/muse/memory.cpp b/muse2/muse/memory.cpp new file mode 100644 index 00000000..6a5b5c0c --- /dev/null +++ b/muse2/muse/memory.cpp @@ -0,0 +1,100 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: memory.cpp,v 1.1.1.1.2.2 2009/12/19 23:35:39 spamatica Exp $ +// +// (C) Copyright 2003 Werner Schweer (ws@seh.de) +//========================================================= + +#include "memory.h" + +Pool audioRTmemoryPool; +Pool midiRTmemoryPool; + +//--------------------------------------------------------- +// Pool +//--------------------------------------------------------- + +Pool::Pool() + { + for (int idx = 0; idx < dimension; ++idx) { + head[idx] = 0; + chunks[idx] = 0; + grow(idx); // preallocate + } + } + +//--------------------------------------------------------- +// ~Pool +//--------------------------------------------------------- + +Pool::~Pool() + { + for (int i = 0; i < dimension; ++i) { + Chunk* n = chunks[i]; + while (n) { + Chunk* p = n; + n = n->next; + delete p; + } + } + } + +//--------------------------------------------------------- +// grow +//--------------------------------------------------------- + +void Pool::grow(int idx) + { +// printf("grow memory idx %d\n", idx); + + int esize = (idx+1) * sizeof(unsigned long); + + Chunk* n = new Chunk; + n->next = chunks[idx]; + chunks[idx] = n; + + const int nelem = Chunk::size / esize; + char* start = n->mem; + char* last = &start[(nelem-1) * esize]; + + for (char* p = start; p < last; p += esize) + reinterpret_cast(p)->next = + reinterpret_cast(p + esize); + reinterpret_cast(last)->next = 0; + head[idx] = reinterpret_cast(start); + } + + +#ifdef TEST +//========================================================= +// TEST +//========================================================= + +struct mops { + char a, c; + int b; + mops(int x) : b(x) {} + }; + +typedef std::list > List; +// typedef std::vector List; +typedef List::iterator iList; + +//--------------------------------------------------------- +// main +// 2.8 s normal 0.7 vector +// 2.5 s RTalloc +// 1.18 alle optimierungen (0.97) +//--------------------------------------------------------- + +int main() + { + List l; + + for (int i = 0; i < 10000000; ++i) + l.push_back(mops(i)); + return 0; + } +#endif + diff --git a/muse2/muse/memory.h b/muse2/muse/memory.h new file mode 100644 index 00000000..e2ffb150 --- /dev/null +++ b/muse2/muse/memory.h @@ -0,0 +1,180 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: memory.h,v 1.4.2.3 2009/12/15 22:08:50 spamatica Exp $ +// +// (C) Copyright 2003-2004 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __MEMORY_H__ +#define __MEMORY_H__ + +#include +#include +#include + +// most of the following code is based on examples +// from Bjarne Stroustrup: "Die C++ Programmiersprache" + +//--------------------------------------------------------- +// Pool +//--------------------------------------------------------- + +class Pool { + struct Verweis { + Verweis* next; + }; + struct Chunk { + enum { size = 4 * 1024 }; + Chunk* next; + char mem[size]; + }; + enum { dimension = 21 }; + Chunk* chunks[dimension]; + Verweis* head[dimension]; + Pool(Pool&); + void operator=(Pool&); + void grow(int idx); + + public: + Pool(); + ~Pool(); + void* alloc(size_t n); + void free(void* b, size_t n); + }; + +//--------------------------------------------------------- +// alloc +//--------------------------------------------------------- + +inline void* Pool::alloc(size_t n) + { + if (n == 0) + return 0; + int idx = ((n + sizeof(unsigned long) - 1) / sizeof(unsigned long)) - 1; + if (idx >= dimension) { + printf("panic: alloc %zd %d %d\n", n, idx, dimension); + exit(-1); + } + if (head[idx] == 0) + grow(idx); + Verweis* p = head[idx]; + head[idx] = p->next; + return p; + } + +//--------------------------------------------------------- +// free +//--------------------------------------------------------- + +inline void Pool::free(void* b, size_t n) + { + if (b == 0 || n == 0) + return; + int idx = ((n + sizeof(unsigned long) - 1) / sizeof(unsigned long)) - 1; + if (idx >= dimension) { + printf("panic: free %zd %d %d\n", n, idx, dimension); + exit(-1); + } + Verweis* p = static_cast(b); + p->next = head[idx]; + head[idx] = p; + } + +extern Pool audioRTmemoryPool; +extern Pool midiRTmemoryPool; + +//--------------------------------------------------------- +// audioRTalloc +//--------------------------------------------------------- + +template class audioRTalloc + { + public: + typedef T value_type; + typedef size_t size_type; + typedef ptrdiff_t difference_type; + + typedef T* pointer; + typedef const T* const_pointer; + + typedef T& reference; + typedef const T& const_reference; + + pointer address(reference x) const { return &x; } + const_pointer address(const_reference x) const { return &x; } + + audioRTalloc(); + template audioRTalloc(const audioRTalloc&) {} + ~audioRTalloc() {} + + pointer allocate(size_type n, void * = 0) { + return static_cast(audioRTmemoryPool.alloc(n * sizeof(T))); + } + void deallocate(pointer p, size_type n) { + audioRTmemoryPool.free(p, n * sizeof(T)); + } + + audioRTalloc& operator=(const audioRTalloc&) { return *this; } + void construct(pointer p, const T& val) { + new ((T*) p) T(val); + } + void destroy(pointer p) { + p->~T(); + } + size_type max_size() const { return size_t(-1); } + + template struct rebind { typedef audioRTalloc other; }; + template audioRTalloc& operator=(const audioRTalloc&) { return *this; } + }; + +template audioRTalloc::audioRTalloc() {} + +//--------------------------------------------------------- +// midiRTalloc +//--------------------------------------------------------- + +template class midiRTalloc + { + public: + typedef T value_type; + typedef size_t size_type; + typedef ptrdiff_t difference_type; + + typedef T* pointer; + typedef const T* const_pointer; + + typedef T& reference; + typedef const T& const_reference; + + pointer address(reference x) const { return &x; } + const_pointer address(const_reference x) const { return &x; } + + midiRTalloc(); + template midiRTalloc(const midiRTalloc&) {} + ~midiRTalloc() {} + + pointer allocate(size_type n, void * = 0) { + return static_cast(midiRTmemoryPool.alloc(n * sizeof(T))); + } + void deallocate(pointer p, size_type n) { + midiRTmemoryPool.free(p, n * sizeof(T)); + } + + midiRTalloc& operator=(const midiRTalloc&) { return *this; } + void construct(pointer p, const T& val) { + new ((T*) p) T(val); + } + void destroy(pointer p) { + p->~T(); + } + size_type max_size() const { return size_t(-1); } + + template struct rebind { typedef midiRTalloc other; }; + template midiRTalloc& operator=(const midiRTalloc&) { return *this; } + }; + +template midiRTalloc::midiRTalloc() {} + +#endif + diff --git a/muse2/muse/midi.cpp b/muse2/muse/midi.cpp new file mode 100644 index 00000000..3ec40065 --- /dev/null +++ b/muse2/muse/midi.cpp @@ -0,0 +1,1542 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: midi.cpp,v 1.43.2.22 2009/11/09 20:28:28 terminator356 Exp $ +// +// (C) Copyright 1999/2004 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include +#include +#include + +#include "song.h" +#include "midi.h" +#include "drummap.h" +#include "event.h" +#include "globals.h" +#include "midictrl.h" +#include "marker/marker.h" +#include "midiport.h" +#include "midictrl.h" +#include "audio.h" +#include "mididev.h" +#include "driver/alsamidi.h" +#include "driver/jackmidi.h" +#include "wave.h" +#include "synth.h" +#include "sync.h" +#include "midiseq.h" +#include "gconfig.h" +#include "ticksynth.h" + +extern void dump(const unsigned char* p, int n); + +const unsigned char gmOnMsg[] = { 0x7e, 0x7f, 0x09, 0x01 }; +const unsigned char gsOnMsg[] = { 0x41, 0x10, 0x42, 0x12, 0x40, 0x00, 0x7f, 0x00, 0x41 }; +const unsigned char gsOnMsg2[] = { 0x41, 0x10, 0x42, 0x12, 0x40, 0x01, 0x33, 0x50, 0x3c }; +const unsigned char gsOnMsg3[] = { 0x41, 0x10, 0x42, 0x12, 0x40, 0x01, 0x34, 0x50, 0x3b }; +const unsigned char xgOnMsg[] = { 0x43, 0x10, 0x4c, 0x00, 0x00, 0x7e, 0x00 }; +const unsigned int gmOnMsgLen = sizeof(gmOnMsg); +const unsigned int gsOnMsgLen = sizeof(gsOnMsg); +const unsigned int gsOnMsg2Len = sizeof(gsOnMsg2); +const unsigned int gsOnMsg3Len = sizeof(gsOnMsg3); +const unsigned int xgOnMsgLen = sizeof(xgOnMsg); + +const unsigned char mmcDeferredPlayMsg[] = { 0x7f, 0x7f, 0x06, 0x03 }; +const unsigned char mmcStopMsg[] = { 0x7f, 0x7f, 0x06, 0x01 }; +const unsigned char mmcLocateMsg[] = { 0x7f, 0x7f, 0x06, 0x44, 0x06, 0x01, 0, 0, 0, 0, 0 }; + +const unsigned int mmcDeferredPlayMsgLen = sizeof(mmcDeferredPlayMsg); +const unsigned int mmcStopMsgLen = sizeof(mmcStopMsg); +const unsigned int mmcLocateMsgLen = sizeof(mmcLocateMsg); + +#define CALC_TICK(the_tick) lrintf((float(the_tick) * float(config.division) + float(div/2)) / float(div)); +/*--------------------------------------------------------- + * 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 MPEventList* el, MidiTrack* track, + int div, bool addSysexMeta, bool doLoops) + { + 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; + + for (iMPEvent i = el->begin(); i != el->end(); ++i) { + MidiPlayEvent ev = *i; + if (!addSysexMeta && (ev.type() == ME_SYSEX || ev.type() == ME_META)) + continue; + if (!(ev.type() == ME_SYSEX || ev.type() == ME_META + || ((ev.channel() == track->outChannel()) && (ev.port() == track->outPort())))) + continue; + unsigned tick = ev.time(); + // Added by Tim. p3.3.8 + + // Added by T356. + if(doLoops) + { + if(tick >= song->lPos().tick() && tick < song->rPos().tick()) + { + int loopn = ev.loopNum(); + int loopc = audio->loopCount(); + int cmode = song->cycleMode(); // CYCLE_NORMAL, CYCLE_MIX, CYCLE_REPLACE + // If we want REPLACE and the event was recorded in a previous loop, + // just ignore it. This will effectively ignore ALL previous loop events inside + // the left and right markers, regardless of where recording was started or stopped. + // We want to keep any loop 0 note-offs from notes which crossed over the left marker. + // To avoid more searching here, just keep ALL note-offs from loop 0, and let code below + // sort out and keep which ones had note-ons. + if(!(ev.isNoteOff() && loopn == 0)) + { + if(cmode == Song::CYCLE_REPLACE && loopn < loopc) + { + // Added by Tim. p3.3.8 + //printf("buildMidiEventList: CYCLE_REPLACE t:%d type:%d A:%d B:%d ln:%d lc:%d\n", tick, ev.type(), ev.dataA(), ev.dataB(), loopn, loopc); + + continue; + } + // If we want NORMAL, same as REPLACE except keep all events from the previous loop + // from rec stop position to right marker (and beyond). + if(cmode == Song::CYCLE_NORMAL) + { + // Not sure of accuracy here. Adjust? Adjusted when used elsewhere? + unsigned endRec = audio->getEndRecordPos().tick(); + if((tick < endRec && loopn < loopc) || (tick >= endRec && loopn < (loopc - 1))) + { + // Added by Tim. p3.3.8 + //printf("buildMidiEventList: CYCLE_NORMAL t:%d type:%d A:%d B:%d ln:%d lc:%d\n", tick, ev.type(), ev.dataA(), ev.dataB(), loopn, loopc); + + continue; + } + } + } + } + } + + Event e; + switch(ev.type()) { + case ME_NOTEON: + e.setType(Note); + + if (track->type() == Track::DRUM) { + int instr = drumInmap[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->type() == Track::DRUM) { + int instr = drumInmap[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: + { + iMPEvent ii = i; + ++ii; + bool found = false; + for (; ii != el->end(); ++ii) { + MidiPlayEvent 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, track->outChannel()); + 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); + int ctl = ev.dataA(); + e.setA(ctl); + + if(track->type() == Track::DRUM) + { + // Is it a drum controller event, according to the track port's instrument? + MidiController *mc = midiPorts[track->outPort()].drumController(ctl); + if(mc) + // Store an index into the drum map. + e.setA((ctl & ~0xff) | drumInmap[ctl & 0x7f]); + } + + 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 0x03: // Sequence-/TrackName + track->setName(QString((char*)data)); + break; + case 0x6: // Marker + { + unsigned ltick = CALC_TICK(tick);//(tick * config.division + div/2) / div; + song->addMarker(QString((const char*)(data)), ltick, false); + } + break; + case 0x5: // Lyrics + case 0x8: // text + case 0x9: + case 0xa: + break; + + case 0x0f: // Track Comment + track->setComment(QString((char*)data)); + break; + case 0x51: // Tempo + { + unsigned tempo = data[2] + (data[1] << 8) + (data[0] <<16); + unsigned ltick = CALC_TICK(tick);// (unsigned(tick) * unsigned(config.division) + unsigned(div/2)) / unsigned(div); + // After ca 10 mins 32 bits will not be enough... This expression has to be changed/factorized or so in some "sane" way... + 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 = CALC_TICK(tick);//(tick * config.division + div/2) / div; + sigmap.add(ltick, timesig_z, timesig_n); + } + break; + case 0x59: // Key Signature + // track->scale.set(data[0]); + // track->scale.setMajorMinor(data[1]); + break; + default: + printf("unknown Meta 0x%x %d\n", ev.dataA(), ev.dataA()); + } + } + break; + } // switch(ev.type() + if (!e.empty()) { + e.setTick(tick); + // Added by Tim. p3.3.8 + //printf("buildMidiEventList: mel adding t:%d type:%d A:%d B:%d C:%d\n", tick, e.type(), e.dataA(), e.dataB(), e.dataC()); + + mel.add(e); + } + } // i != el->end() + + //--------------------------------------------------- + // resolve NoteOff events + //--------------------------------------------------- + +// for (iEvent i = mel.begin(); i != mel.end(); ++i) { +// Event event = i->second; +// if (event.isNote()) +// event.setLenTick(0); +// } + + // Added by Tim. p3.3.8 + + // The loop is a safe way to delete while iterating. + bool loop; + do + { + loop = false; + + for (iEvent i = mel.begin(); i != mel.end(); ++i) { + Event ev = i->second; + if (ev.isNote()) { + if (ev.isNoteOff()) { + iEvent k; + bool found = false; + for (k = i; k != mel.end(); ++k) { + Event event = k->second; + if (event.tick() > ev.tick()) + break; + if (event.isNoteOff(ev)) { + ev.setLenTick(1); + ev.setVelo(event.velo()); + ev.setVeloOff(0); + // Added by Tim. p3.3.8 + //printf("buildMidiEventList: found note off: event t:%d len:%d type:%d A:%d B:%d C:%d ev t:%d len:%d type:%d A:%d B:%d C:%d\n", event.tick(), event.lenTick(), event.type(), event.dataA(), event.dataB(), event.dataC(), ev.tick(), ev.lenTick(), ev.type(), ev.dataA(), ev.dataB(), ev.dataC()); + + found = true; + 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 { + mel.erase(k); + + // Changed by Tim. p3.3.8 + //continue; + loop = true; + break; + + } + } + // Added by Tim. p3.3.8 + + // If the event length is not zero, it means the event and its + // note on/off have already been taken care of. So ignore it. + if(ev.lenTick() != 0) + { + continue; + } + + iEvent k; + for (k = mel.lower_bound(ev.tick()); k != mel.end(); ++k) { + Event event = k->second; + 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()); + // Added by Tim. p3.3.8 + //printf("buildMidiEventList: set len and velOff: event t:%d len:%d type:%d A:%d B:%d C:%d ev t:%d len:%d type:%d A:%d B:%d C:%d\n", event.tick(), event.lenTick(), event.type(), event.dataA(), event.dataB(), event.dataC(), ev.tick(), ev.lenTick(), ev.type(), ev.dataA(), ev.dataB(), ev.dataC()); + + 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); + // Added by Tim. p3.3.8 + loop = true; + break; + + } + } + } + } + while (loop); + +// DEBUG: any note offs left? + + // Removed by Tim. p3.3.8 + //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(); + // } + // } + + 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 = CALC_TICK(ev.tick()); //(ev.tick() * config.division + div/2) / div; + if (ev.isNote()) { + int lenTick = CALC_TICK(ev.lenTick()); //(ev.lenTick() * config.division + div/2) / div; + ev.setLenTick(lenTick); + } + ev.setTick(tick); + del->add(ev); + } + } + +//--------------------------------------------------------- +// midiPortsChanged +//--------------------------------------------------------- + +void Audio::midiPortsChanged() + { + write(sigFd, "P", 1); + } + +//--------------------------------------------------------- +// sendLocalOff +//--------------------------------------------------------- + +void Audio::sendLocalOff() + { + for (int k = 0; k < MIDI_PORTS; ++k) { + for (int i = 0; i < MIDI_CHANNELS; ++i) + midiPorts[k].sendEvent(MidiPlayEvent(0, k, i, ME_CONTROLLER, CTRL_LOCAL_OFF, 0)); + } + } + +//--------------------------------------------------------- +// panic +//--------------------------------------------------------- + +void Audio::panic() + { + for (int i = 0; i < MIDI_PORTS; ++i) { + MidiPort* port = &midiPorts[i]; + if (port == 0) // ?? + continue; + for (int chan = 0; chan < MIDI_CHANNELS; ++chan) { + port->sendEvent(MidiPlayEvent(0, i, chan, ME_CONTROLLER, CTRL_ALL_SOUNDS_OFF, 0)); + port->sendEvent(MidiPlayEvent(0, i, chan, ME_CONTROLLER, CTRL_RESET_ALL_CTRL, 0)); + } + } + } + +//--------------------------------------------------------- +// initDevices +// - called on seek to position 0 +// - called from arranger pulldown menu +//--------------------------------------------------------- + +void Audio::initDevices() + { + // + // mark all used ports + // + bool activePorts[MIDI_PORTS]; + for (int i = 0; i < MIDI_PORTS; ++i) + activePorts[i] = false; + + MidiTrackList* tracks = song->midis(); + for (iMidiTrack it = tracks->begin(); it != tracks->end(); ++it) { + MidiTrack* track = *it; + activePorts[track->outPort()] = true; + } + if (song->click()) + activePorts[clickPort] = true; + + // + // test for explicit instrument initialization + // + + for (int i = 0; i < MIDI_PORTS; ++i) { + if (!activePorts[i]) + continue; + + MidiPort* port = &midiPorts[i]; + MidiInstrument* instr = port->instrument(); + MidiDevice* md = port->device(); + + if (instr && md) { + EventList* events = instr->midiInit(); + if (events->empty()) + continue; + for (iEvent ie = events->begin(); ie != events->end(); ++ie) { + MidiPlayEvent ev(0, i, 0, ie->second); + md->putEvent(ev); + } + activePorts[i] = false; // no standard initialization + } + } + // + // damit Midi-Devices, die mehrere Ports besitzen, wie z.B. + // das Korg NS5R, nicht mehrmals zwischen GM und XG/GS hin und + // hergeschaltet werden, wird zun�hst auf allen Ports GM + // initialisiert, und dann erst XG/GS + // + + // Standard initialization... + for (int i = 0; i < MIDI_PORTS; ++i) { + if (!activePorts[i]) + continue; + MidiPort* port = &midiPorts[i]; + switch(song->mtype()) { + case MT_GS: + case MT_UNKNOWN: + break; + case MT_GM: + case MT_XG: + port->sendGmOn(); + break; + } + } + for (int i = 0; i < MIDI_PORTS; ++i) { + if (!activePorts[i]) + continue; + MidiPort* port = &midiPorts[i]; + switch(song->mtype()) { + case MT_UNKNOWN: + break; + case MT_GM: + port->sendGmInitValues(); + break; + case MT_GS: + port->sendGsOn(); + port->sendGsInitValues(); + break; + case MT_XG: + port->sendXgOn(); + port->sendXgInitValues(); + break; + } + } + } + +//--------------------------------------------------------- +// collectEvents +// collect events for next audio segment +//--------------------------------------------------------- + +void Audio::collectEvents(MidiTrack* track, unsigned int cts, unsigned int nts) + { + int port = track->outPort(); + int channel = track->outChannel(); + int defaultPort = port; + + MidiDevice* md = midiPorts[port].device(); + MPEventList* playEvents = md->playEvents(); + MPEventList* stuckNotes = md->stuckNotes(); + + PartList* pl = track->parts(); + for (iPart p = pl->begin(); p != pl->end(); ++p) { + MidiPart* part = (MidiPart*)(p->second); + // dont play muted parts + if (part->mute()) + continue; + EventList* events = part->events(); + unsigned partTick = part->tick(); + unsigned partLen = part->lenTick(); + int delay = track->delay; + + if (cts > nts) { + printf("processMidi: FATAL: cur > next %d > %d\n", + cts, nts); + return; + } + unsigned offset = delay + partTick; + if (offset > nts) + continue; + unsigned stick = (offset > cts) ? 0 : cts - offset; + unsigned etick = nts - offset; + // By T356. Do not play events which are past the end of this part. + if(etick > partLen) + continue; + + iEvent ie = events->lower_bound(stick); + iEvent iend = events->lower_bound(etick); + + for (; ie != iend; ++ie) { + Event ev = ie->second; + port = defaultPort; //Reset each loop + // + // dont play any meta events + // + if (ev.type() == Meta) + continue; + if (track->type() == Track::DRUM) { + int instr = ev.pitch(); + // ignore muted drums + if (ev.isNote() && drumMap[instr].mute) + continue; + } + unsigned tick = ev.tick() + offset; + unsigned frame = tempomap.tick2frame(tick) + frameOffset; + switch (ev.type()) { + case Note: + { + int len = ev.lenTick(); + int pitch = ev.pitch(); + int velo = ev.velo(); + if (track->type() == Track::DRUM) { + // + // Map drum-notes to the drum-map values + // + int instr = ev.pitch(); + pitch = drumMap[instr].anote; + port = drumMap[instr].port; //This changes to non-default port + channel = drumMap[instr].channel; + velo = int(double(velo) * (double(drumMap[instr].vol) / 100.0)) ; + } + else { + // + // transpose non drum notes + // + pitch += (track->transposition + song->globalPitchShift()); + } + + 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) // dont allow zero length + len = 1; + int veloOff = ev.veloOff(); + + if (port == defaultPort) { + //printf("Adding event normally: frame=%d port=%d channel=%d pitch=%d velo=%d\n",frame, port, channel, pitch, velo); + + // p3.3.25 + // If syncing to external midi sync, we cannot use the tempo map. + // Therefore we cannot get sub-tick resolution. Just use ticks instead of frames. + if(extSyncFlag.value()) + playEvents->add(MidiPlayEvent(tick, port, channel, 0x90, pitch, velo)); + else + + playEvents->add(MidiPlayEvent(frame, port, channel, 0x90, pitch, velo)); + + stuckNotes->add(MidiPlayEvent(tick + len, port, channel, + veloOff ? 0x80 : 0x90, pitch, veloOff)); + } + else { //Handle events to different port than standard. + MidiDevice* mdAlt = midiPorts[port].device(); + if (mdAlt) { + + // p3.3.25 + if(extSyncFlag.value()) + mdAlt->playEvents()->add(MidiPlayEvent(tick, port, channel, 0x90, pitch, velo)); + else + + mdAlt->playEvents()->add(MidiPlayEvent(frame, port, channel, 0x90, pitch, velo)); + + mdAlt->stuckNotes()->add(MidiPlayEvent(tick + len, port, channel, + veloOff ? 0x80 : 0x90, pitch, veloOff)); + } + } + + if(velo > track->activity()) + track->setActivity(velo); + } + break; + + // Added by T356. + case Controller: + { + //int len = ev.lenTick(); + //int pitch = ev.pitch(); + if (track->type() == Track::DRUM) + { + int ctl = ev.dataA(); + // Is it a drum controller event, according to the track port's instrument? + MidiController *mc = midiPorts[defaultPort].drumController(ctl); + if(mc) + { + int instr = ctl & 0x7f; + ctl &= ~0xff; + int pitch = drumMap[instr].anote & 0x7f; + port = drumMap[instr].port; //This changes to non-default port + channel = drumMap[instr].channel; + MidiDevice* mdAlt = midiPorts[port].device(); + if(mdAlt) + { + // p3.3.25 + // If syncing to external midi sync, we cannot use the tempo map. + // Therefore we cannot get sub-tick resolution. Just use ticks instead of frames. + if(extSyncFlag.value()) + mdAlt->playEvents()->add(MidiPlayEvent(tick, port, channel, + ME_CONTROLLER, ctl | pitch, ev.dataB())); + else + + //playEvents->add(MidiPlayEvent(frame, port, channel, ev)); + mdAlt->playEvents()->add(MidiPlayEvent(frame, port, channel, + ME_CONTROLLER, ctl | pitch, ev.dataB())); + + } + break; + } + } + // p3.3.25 + if(extSyncFlag.value()) + playEvents->add(MidiPlayEvent(tick, port, channel, ev)); + else + + playEvents->add(MidiPlayEvent(frame, port, channel, ev)); + } + break; + + + default: + // p3.3.25 + if(extSyncFlag.value()) + playEvents->add(MidiPlayEvent(tick, port, channel, ev)); + else + + playEvents->add(MidiPlayEvent(frame, port, channel, ev)); + + break; + } + } + } + } + +//--------------------------------------------------------- +// processMidi +// - collects midi events for current audio segment and +// sends them to midi thread +// - current audio segment position is (curTickPos, nextTickPos) +// - called from midiseq thread, +// executed in audio thread +//--------------------------------------------------------- + +void Audio::processMidi() + { + midiBusy=true; + // + // TODO: syntis should directly write into recordEventList + // + for (iMidiDevice id = midiDevices.begin(); id != midiDevices.end(); ++id) { + MidiDevice* md = *id; + + MPEventList* playEvents = md->playEvents(); + // + // erase already played events: + // + iMPEvent nextPlayEvent = md->nextPlayEvent(); + playEvents->erase(playEvents->begin(), nextPlayEvent); + + // klumsy hack for synti devices: + if(md->isSynti()) + { + SynthI* s = (SynthI*)md; + while (s->eventsPending()) + { + MidiRecordEvent ev = s->receiveEvent(); + md->recordEvent(ev); + } + } + + // Is it a Jack midi device? + //MidiJackDevice* mjd = dynamic_cast(md); + //if(mjd) + // mjd->collectMidiEvents(); + md->collectMidiEvents(); + + // Take snapshots of the current sizes of the recording fifos, + // because they may change while here in process, asynchronously. + md->beforeProcess(); + } + + MPEventList* playEvents = metronome->playEvents(); + iMPEvent nextPlayEvent = metronome->nextPlayEvent(); + playEvents->erase(playEvents->begin(), nextPlayEvent); + + // p3.3.25 + bool extsync = extSyncFlag.value(); + + for (iMidiTrack t = song->midis()->begin(); t != song->midis()->end(); ++t) + { + MidiTrack* track = *t; + int port = track->outPort(); + MidiDevice* md = midiPorts[port].device(); + + // Changed by Tim. p3.3.8 + //if(md == 0) + // continue; + //MPEventList* playEvents = md->playEvents(); + //if (playEvents == 0) + // continue; + //if (!track->isMute()) + MPEventList* playEvents = 0; + if(md) + { + playEvents = md->playEvents(); + + // only add track events if the track is unmuted + if(!track->isMute()) + { + if(isPlaying() && (curTickPos < nextTickPos)) + collectEvents(track, curTickPos, nextTickPos); + } + } + + // + //----------midi recording + // + if (track->recordFlag()) + { + //int portMask = track->inPortMask(); + // p3.3.38 Removed + //unsigned int portMask = track->inPortMask(); + //int channelMask = track->inChannelMask(); + + MPEventList* rl = track->mpevents(); + MidiPort* tport = &midiPorts[port]; + + // p3.3.38 + //for (iMidiDevice id = midiDevices.begin(); id != midiDevices.end(); ++id) + //{ + RouteList* irl = track->inRoutes(); + for(ciRoute r = irl->begin(); r != irl->end(); ++r) + { + //if(!r->isValid() || (r->type != Route::ALSA_MIDI_ROUTE && r->type != Route::JACK_MIDI_ROUTE)) + //if(!r->isValid() || (r->type != Route::MIDI_DEVICE_ROUTE)) + if(!r->isValid() || (r->type != Route::MIDI_PORT_ROUTE)) // p3.3.49 + continue; + + int devport = r->midiPort; // p3.3.49 + if (devport == -1) + continue; + + //MidiDevice* dev = *id; + //MidiDevice* dev = r->device; + MidiDevice* dev = midiPorts[devport].device(); // p3.3.49 + if(!dev) + continue; + + + // p3.3.50 Removed + //int channel = r->channel; + // NOTE: TODO: Special for input device sysex 'channel' marked as -1, ** IF we end up going with that method **. + // This would mean having a separate 'System' channel listed in the routing popups. + // The other alternative is to accept sysex from a device as long as ANY regular channel is routed from it, + // this does not require a 'System' channel listed in the routing popups. + // But that requires more code below... Done. + //if(channel == -1) + //channel = MIDI_CHANNELS; // Special channel '17' + // continue; + + //int devport = dev->midiPort(); + + // record only from ports marked in portMask: + //if (devport == -1 || !(portMask & (1 << devport))) + //if (devport == -1) + // continue; + + //MREventList* el = dev->recordEvents(); + //MidiFifo& rf = dev->recordEvents(); + + + int channelMask = r->channel; // p3.3.50 + if(channelMask == -1 || channelMask == 0) + continue; + for(int channel = 0; channel < MIDI_CHANNELS; ++channel) // p3.3.50 + { + if(!(channelMask & (1 << channel))) + continue; + + if(!dev->sysexFIFOProcessed()) + { + // Set to the sysex fifo at first. + MidiFifo& rf = dev->recordEvents(MIDI_CHANNELS); + // Get the frozen snapshot of the size. + int count = dev->tmpRecordCount(MIDI_CHANNELS); + + for(int i = 0; i < count; ++i) + { + MidiPlayEvent event(rf.peek(i)); + + //unsigned time = event.time() + segmentSize*(segmentCount-1); + //unsigned time = event.time() + (extsync ? config.division/24 : segmentSize*(segmentCount-1)); + //unsigned time = extsync ? curTickPos : (event.time() + segmentSize*(segmentCount-1)); + //event.setTime(time); + //if(!extsync) + // event.setTime(event.time() + segmentSize*(segmentCount-1)); + + event.setPort(port); + + // dont't echo controller changes back to software + // synthesizer: + if(!dev->isSynti() && md && track->recEcho()) + playEvents->add(event); + + // If syncing externally the event time is already in units of ticks, set above. + if(!extsync) + { + //time = tempomap.frame2tick(event.time()); + //event.setTime(time); // set tick time + event.setTime(tempomap.frame2tick(event.time())); // set tick time + } + + if(recording) + rl->add(event); + } + + dev->setSysexFIFOProcessed(true); + } + + // Set to the sysex fifo at first. + ///MidiFifo& rf = dev->recordEvents(MIDI_CHANNELS); + // Get the frozen snapshot of the size. + ///int count = dev->tmpRecordCount(MIDI_CHANNELS); + + // Iterate once for sysex fifo (if needed), once for channel fifos. + ///for(int sei = 0; sei < 2; ++sei) + { + // If on first pass, do sysex fifo. + /* + if(sei == 0) + { + // Ignore any further channel routes on this device if already done here. + if(dev->sysexFIFOProcessed()) + continue; + // Go ahead and set this now. + dev->setSysexFIFOProcessed(true); + // Allow it to fall through with the sysex fifo and count... + } + else + { + // We're on the second pass, do channel fifos. + rf = dev->recordEvents(channel); + // Get the frozen snapshot of the size. + count = dev->tmpRecordCount(channel); + } + */ + + MidiFifo& rf = dev->recordEvents(channel); + int count = dev->tmpRecordCount(channel); + + //for (iMREvent ie = el->begin(); ie != el->end(); ++ie) + for(int i = 0; i < count; ++i) + { + MidiPlayEvent event(rf.peek(i)); + + //int channel = ie->channel(); + ///int channel = event.channel(); + + int defaultPort = devport; + ///if (!(channelMask & (1 << channel))) + ///{ + /// continue; + ///} + + //MidiPlayEvent event(*ie); + int drumRecPitch=0; //prevent compiler warning: variable used without initialization + MidiController *mc = 0; + int ctl = 0; + + //Hmmm, hehhh... + // TODO: Clean up a bit around here when it comes to separate events for rec & for playback. + // But not before 0.7 (ml) + + int prePitch = 0, preVelo = 0; + + event.setChannel(track->outChannel()); + + if (event.isNote() || event.isNoteOff()) + { + // + // apply track values + // + + //Apply drum inkey: + if (track->type() == Track::DRUM) + { + int pitch = event.dataA(); + //Map note that is played according to drumInmap + drumRecPitch = drumMap[(unsigned int)drumInmap[pitch]].enote; + devport = drumMap[(unsigned int)drumInmap[pitch]].port; + event.setPort(devport); + channel = drumMap[(unsigned int)drumInmap[pitch]].channel; + event.setA(drumMap[(unsigned int)drumInmap[pitch]].anote); + event.setChannel(channel); + } + else + { //Track transpose if non-drum + prePitch = event.dataA(); + int pitch = prePitch + track->transposition; + if (pitch > 127) + pitch = 127; + if (pitch < 0) + pitch = 0; + event.setA(pitch); + } + + if (!event.isNoteOff()) + { + preVelo = event.dataB(); + int velo = preVelo + track->velocity; + velo = (velo * track->compression) / 100; + if (velo > 127) + velo = 127; + if (velo < 1) + velo = 1; + event.setB(velo); + } + } + // Added by T356. + else + if(event.type() == ME_CONTROLLER) + { + if(track->type() == Track::DRUM) + { + ctl = event.dataA(); + // Regardless of what port the event came from, is it a drum controller event + // according to the track port's instrument? + mc = tport->drumController(ctl); + if(mc) + { + int pitch = ctl & 0x7f; + ctl &= ~0xff; + int dmindex = drumInmap[pitch] & 0x7f; + //Map note that is played according to drumInmap + drumRecPitch = drumMap[dmindex].enote; + devport = drumMap[dmindex].port; + event.setPort(devport); + channel = drumMap[dmindex].channel; + event.setA(ctl | drumMap[dmindex].anote); + event.setChannel(channel); + } + } + } + + // p3.3.25 + // MusE uses a fixed clocks per quarternote of 24. + // At standard 384 ticks per quarternote for example, + // 384/24=16 for a division of 16 sub-frames (16 MusE 'ticks'). + // That is what we'll use if syncing externally. + //unsigned time = event.time() + segmentSize*(segmentCount-1); + //unsigned time = event.time() + (extsync ? config.division/24 : segmentSize*(segmentCount-1)); + // p3.3.34 + // Oops, use the current tick. + //unsigned time = extsync ? curTickPos : (event.time() + segmentSize*(segmentCount-1)); + //event.setTime(time); + // p3.3.35 + // If ext sync, events are now time-stamped with last tick in MidiDevice::recordEvent(). + // TODO: Tested, but record resolution not so good. Switch to wall clock based separate list in MidiDevice. + // p3.3.36 + //if(!extsync) + // event.setTime(event.time() + segmentSize*(segmentCount-1)); + + // dont't echo controller changes back to software + // synthesizer: + + if (!dev->isSynti()) + { + //Check if we're outputting to another port than default: + if (devport == defaultPort) { + event.setPort(port); + if(md && track->recEcho()) + playEvents->add(event); + } + else { + // Hmm, this appears to work, but... Will this induce trouble with md->setNextPlayEvent?? + MidiDevice* mdAlt = midiPorts[devport].device(); + if(mdAlt && track->recEcho()) + mdAlt->playEvents()->add(event); + } + // Shall we activate meters even while rec echo is off? Sure, why not... + if(event.isNote() && event.dataB() > track->activity()) + track->setActivity(event.dataB()); + } + + // p3.3.25 + // If syncing externally the event time is already in units of ticks, set above. + if(!extsync) + { + // p3.3.35 + //time = tempomap.frame2tick(event.time()); + //event.setTime(time); // set tick time + event.setTime(tempomap.frame2tick(event.time())); // set tick time + } + + // Special handling of events stored in rec-lists. a bit hACKish. TODO: Clean up (after 0.7)! :-/ (ml) + if (recording) + { + // In these next steps, it is essential to set the recorded event's port + // to the track port so buildMidiEventList will accept it. Even though + // the port may have no device "". + // + if (track->type() == Track::DRUM) + { + // Is it a drum controller event? + if(mc) + { + MidiPlayEvent drumRecEvent = event; + drumRecEvent.setA(ctl | drumRecPitch); + // In this case, preVelo is simply the controller value. + drumRecEvent.setB(preVelo); + drumRecEvent.setPort(port); //rec-event to current port + drumRecEvent.setChannel(track->outChannel()); //rec-event to current channel + rl->add(drumRecEvent); + } + else + { + + MidiPlayEvent drumRecEvent = event; + drumRecEvent.setA(drumRecPitch); + drumRecEvent.setB(preVelo); + // Changed by T356. + // Tested: Events were not being recorded for a drum map entry pointing to a + // different port. This must have been wrong - buildMidiEventList would ignore this. + //drumRecEvent.setPort(devport); + drumRecEvent.setPort(port); //rec-event to current port + + drumRecEvent.setChannel(track->outChannel()); //rec-event to current channel + rl->add(drumRecEvent); + } + } + else + { + // Restore record-pitch to non-transposed value since we don't want the note transposed twice next + MidiPlayEvent recEvent = event; + if (prePitch) + recEvent.setA(prePitch); + if (preVelo) + recEvent.setB(preVelo); + recEvent.setPort(port); + recEvent.setChannel(track->outChannel()); + + rl->add(recEvent); + } + } + } + } + } + } + } + // Added by Tim. p3.3.8 + if(md) + { + + md->setNextPlayEvent(playEvents->begin()); + } + } + + // + // clear all recorded events in midiDevices + // process stuck notes + // + for (iMidiDevice id = midiDevices.begin(); id != midiDevices.end(); ++id) { + MidiDevice* md = *id; + + ///md->recordEvents()->clear(); + // By T356. Done processing this rec buffer, now flip to the other one. + ///md->flipRecBuffer(); + // We are done with the 'frozen' recording fifos, remove the events. + md->afterProcess(); + + MPEventList* stuckNotes = md->stuckNotes(); + MPEventList* playEvents = md->playEvents(); + + iMPEvent k; + for (k = stuckNotes->begin(); k != stuckNotes->end(); ++k) { + if (k->time() >= nextTickPos) + break; + MidiPlayEvent ev(*k); + + // p3.3.25 + //int frame = tempomap.tick2frame(k->time()) + frameOffset; + if(extsync) + { + ev.setTime(k->time()); + } + else + { + int frame = tempomap.tick2frame(k->time()) + frameOffset; + ev.setTime(frame); + } + + // p3.3.25 + //ev.setTime(frame); + + playEvents->add(ev); + } + stuckNotes->erase(stuckNotes->begin(), k); + md->setNextPlayEvent(playEvents->begin()); + } + + //--------------------------------------------------- + // insert metronome clicks + //--------------------------------------------------- + + MidiDevice* md = 0; + if (midiClickFlag) + md = midiPorts[clickPort].device(); + if (song->click() && (isPlaying() || state == PRECOUNT)) { + MPEventList* playEvents = 0; + MPEventList* stuckNotes = 0; + if (md) { + playEvents = md->playEvents(); + stuckNotes = md->stuckNotes(); + } + int bar, beat; + unsigned tick; + bool isMeasure = false; + while (midiClick < nextTickPos) { + if (isPlaying()) { + sigmap.tickValues(midiClick, &bar, &beat, &tick); + isMeasure = beat == 0; + } + else if (state == PRECOUNT) { + isMeasure = (clickno % clicksMeasure) == 0; + } + // p3.3.25 + //int frame = tempomap.tick2frame(midiClick) + frameOffset; + int evtime = extsync ? midiClick : tempomap.tick2frame(midiClick) + frameOffset; + + // p3.3.25 + //MidiPlayEvent ev(frame, clickPort, clickChan, ME_NOTEON, + MidiPlayEvent ev(evtime, clickPort, clickChan, ME_NOTEON, + beatClickNote, beatClickVelo); + + if (md) { + // p3.3.25 + //MidiPlayEvent ev(frame, clickPort, clickChan, ME_NOTEON, + MidiPlayEvent ev(evtime, clickPort, clickChan, ME_NOTEON, + beatClickNote, beatClickVelo); + + if (isMeasure) { + ev.setA(measureClickNote); + ev.setB(measureClickVelo); + } + playEvents->add(ev); + } + if (audioClickFlag) { + // p3.3.25 + //MidiPlayEvent ev1(frame, 0, 0, ME_NOTEON, 0, 0); + MidiPlayEvent ev1(evtime, 0, 0, ME_NOTEON, 0, 0); + + ev1.setA(isMeasure ? 0 : 1); + metronome->playEvents()->add(ev1); + } + if (md) { + ev.setB(0); + // p3.3.25 + // Removed. Why was this here? + //frame = tempomap.tick2frame(midiClick+20) + frameOffset; + // + // Does it mean this should be changed too? + // No, stuck notes are in units of ticks, not frames like (normal, non-external) play events... + ev.setTime(midiClick+10); + + if (md) + stuckNotes->add(ev); + } + + if (isPlaying()) + midiClick = sigmap.bar2tick(bar, beat+1, 0); + else if (state == PRECOUNT) { + midiClick += ticksBeat; + if (clickno) + --clickno; + else + state = START_PLAY; + } + } + if (md) + md->setNextPlayEvent(playEvents->begin()); + if (audioClickFlag) + metronome->setNextPlayEvent(metronome->playEvents()->begin()); + } + + if (state == STOP) { + //--------------------------------------------------- + // end all notes + //--------------------------------------------------- + + for (iMidiDevice imd = midiDevices.begin(); imd != midiDevices.end(); ++imd) { + MidiDevice* md = *imd; + MPEventList* playEvents = md->playEvents(); + MPEventList* stuckNotes = md->stuckNotes(); + for (iMPEvent k = stuckNotes->begin(); k != stuckNotes->end(); ++k) { + MidiPlayEvent ev(*k); + ev.setTime(0); // play now + playEvents->add(ev); + } + stuckNotes->clear(); + } + } + + + // p3.3.36 + //int tickpos = audio->tickPos(); + //bool extsync = extSyncFlag.value(); + // + // Special for Jack midi devices: Play all Jack midi events up to curFrame. + // + for(iMidiDevice id = midiDevices.begin(); id != midiDevices.end(); ++id) + { + //MidiDevice* md = *id; + // Is it a Jack midi device? + //MidiJackDevice* mjd = dynamic_cast(md); + //if(!mjd) + // continue; + //mjd->processMidi(); + (*id)->processMidi(); + + /* + int port = md->midiPort(); + MidiPort* mp = port != -1 ? &midiPorts[port] : 0; + MPEventList* el = md->playEvents(); + if (el->empty()) + continue; + iMPEvent i = md->nextPlayEvent(); + for(; i != el->end(); ++i) + { + // If syncing to external midi sync, we cannot use the tempo map. + // Therefore we cannot get sub-tick resolution. Just use ticks instead of frames. + //if(i->time() > curFrame) + if(i->time() > (extsync ? tickpos : curFrame)) + { + //printf(" curT %d frame %d\n", i->time(), curFrame); + break; // skip this event + } + + if(mp) + { + if(mp->sendEvent(*i)) + break; + } + else + { + if(md->putEvent(*i)) + break; + } + } + md->setNextPlayEvent(i); + */ + } + + midiBusy=false; + } + diff --git a/muse2/muse/midi.h b/muse2/muse/midi.h new file mode 100644 index 00000000..ee13fb36 --- /dev/null +++ b/muse2/muse/midi.h @@ -0,0 +1,72 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: midi.h,v 1.4.2.2 2009/11/09 20:28:28 terminator356 Exp $ +// +// (C) Copyright 1999/2000 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __MIDI_H__ +#define __MIDI_H__ + +#include +#include +#include +#include + +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 const unsigned char gmOnMsg[]; + +extern const unsigned char gsOnMsg[]; +extern const unsigned char gsOnMsg2[]; +extern const unsigned char gsOnMsg3[]; +extern const unsigned char xgOnMsg[]; +extern const unsigned char mmcDeferredPlayMsg[]; +extern const unsigned char mmcStopMsg[]; +extern const unsigned char mmcLocateMsg[]; + +extern const unsigned int gmOnMsgLen; +extern const unsigned int gsOnMsgLen; +extern const unsigned int gsOnMsg2Len; +extern const unsigned int gsOnMsg3Len; +extern const unsigned int xgOnMsgLen; +extern const unsigned int mmcDeferredPlayMsgLen; +extern const unsigned int mmcStopMsgLen; +extern const unsigned int mmcLocateMsgLen; + +QString nameSysex(unsigned int len, const unsigned char* buf); +QString midiMetaName(int); + +class EventList; +class MPEventList; +class MidiTrack; +//extern void buildMidiEventList(EventList* mel, const MPEventList* el, MidiTrack* track, int division, bool); +extern void buildMidiEventList(EventList* mel, const MPEventList* el, MidiTrack* track, int division, bool /*addSysexMeta*/, bool /*doLoops*/); +// extern bool checkSysex(MidiTrack* track, unsigned int len, unsigned char* buf); + +#endif + diff --git a/muse2/muse/midictrl.cpp b/muse2/muse/midictrl.cpp new file mode 100644 index 00000000..3994fe90 --- /dev/null +++ b/muse2/muse/midictrl.cpp @@ -0,0 +1,781 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: midictrl.cpp,v 1.17.2.10 2009/06/10 00:34:59 terminator356 Exp $ +// +// (C) Copyright 2001-2004 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include + +#include +#include "midictrl.h" +#include "xml.h" +#include "globals.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); +// Removed p3.3.37 +//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, -64, 63, 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::RPN14, QString("RPN14") }, + { MidiController::NRPN14, QString("NRPN14") }, + { MidiController::Pitch, QString("Pitch") }, + { MidiController::Program, QString("Program") }, + { 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() + { + defaultMidiController.add(&veloCtrl); + defaultMidiController.add(&pitchCtrl); + defaultMidiController.add(&programCtrl); + // Removed p3.3.37 + //defaultMidiController.add(&mastervolCtrl); + defaultMidiController.add(&volumeCtrl); + defaultMidiController.add(&panCtrl); + } + +//--------------------------------------------------------- +// midiCtrlName +//--------------------------------------------------------- + +QString midiCtrlName(int ctrl) + { + if (ctrl < 0x10000) + return QString(ctrlName[ctrl]); + return QString("?N?"); + } + +//--------------------------------------------------------- +// MidiController +//--------------------------------------------------------- + +MidiController::MidiController() + : _name(QString(QT_TR_NOOP("Velocity"))) + { + _num = CTRL_VELOCITY; + _minVal = 0; + _maxVal = 127; + _initVal = 0; + updateBias(); + } + +MidiController::MidiController(const QString& s, int n, int min, int max, int init) + : _name(s), _num(n), _minVal(min), _maxVal(max), _initVal(init) + { + updateBias(); + } + +MidiController::MidiController(const MidiController& mc) +{ + copy(mc); +} + +//--------------------------------------------------------- +// copy +//--------------------------------------------------------- + +void MidiController::copy(const MidiController &mc) +{ + _name = mc._name; + _num = mc._num; + _minVal = mc._minVal; + _maxVal = mc._maxVal; + _initVal = mc._initVal; + //updateBias(); + _bias = mc._bias; +} + +//--------------------------------------------------------- +// operator = +//--------------------------------------------------------- + +MidiController& MidiController::operator=(const MidiController &mc) +{ + copy(mc); + return *this; +} + +//--------------------------------------------------------- +// type +//--------------------------------------------------------- + +MidiController::ControllerType midiControllerType(int num) + { + // p3.3.37 + //if (num < 0x10000) + if (num < CTRL_14_OFFSET) + return MidiController::Controller7; + //if (num < 0x20000) + if (num < CTRL_RPN_OFFSET) + return MidiController::Controller14; + //if (num < 0x30000) + if (num < CTRL_NRPN_OFFSET) + return MidiController::RPN; + //if (num < 0x40000) + if (num < CTRL_INTERNAL_OFFSET) + return MidiController::NRPN; + if (num == CTRL_PITCH) + return MidiController::Pitch; + if (num == CTRL_PROGRAM) + return MidiController::Program; + if (num == CTRL_VELOCITY) + return MidiController::Velo; + //if (num < 0x60000) + if (num < CTRL_NRPN14_OFFSET) + return MidiController::RPN14; + //if (num < 0x70000) + if (num < CTRL_NONE_OFFSET) + return MidiController::NRPN14; + return MidiController::Controller7; + } + +//--------------------------------------------------------- +// updateBias +//--------------------------------------------------------- + +void MidiController::updateBias() +{ + // If the specified minimum value is negative, we will + // translate to a positive-biased range. + // Cue: A controller like 'coarse tuning', is meant to be displayed + // as -24/+24, but really is centered on 64 and goes from 40 to 88. + int b; + int mn, mx; + ControllerType t = midiControllerType(_num); + switch (t) + { + case RPN: + case NRPN: + case Controller7: + b = 64; + mn = 0; + mx = 127; + break; + case Controller14: + case RPN14: + case NRPN14: + b = 8192; + mn = 0; + mx = 16383; + break; + case Program: + b = 0x800000; + mn = 0; + mx = 0xffffff; + break; + case Pitch: + b = 0; + mn = -8192; + mx = 8191; + break; + //case Velo: // cannot happen + default: + b = 64; + mn = 0; + mx = 127; + break; + } + + // Special handling of pan: Only thing to do is force the range! + //if(_num == CTRL_PANPOT) + //{ + // _minVal = -64; + // _maxVal = 63; + // _initVal = 0; + //} + + // TODO: Limit _minVal and _maxVal to range. + + if(_minVal >= 0) + _bias = 0; + else + { + _bias = b; + + if(t != Program && t != Pitch) + { + // Adjust bias to fit desired range. + if(_minVal + _bias < mn) + //_minVal = mn - _bias; + _bias += mn - _minVal + _bias; + else + if(_maxVal + _bias > mx) + //_maxVal = mx - _bias; + _bias -= _maxVal + _bias - mx; + } + } +} + + +//--------------------------------------------------------- +// MidiController::write +//--------------------------------------------------------- + +void MidiController::write(int level, Xml& xml) const +{ + ControllerType t = midiControllerType(_num); + if(t == Velo) + return; + + 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); + + xml.nput(level, ""); + xml.put(" />"); +} + +//--------------------------------------------------------- +// MidiController::read +//--------------------------------------------------------- + +void MidiController::read(Xml& xml) + { + ControllerType t = Controller7; + _initVal = CTRL_VAL_UNKNOWN; + static const int NOT_SET = 0x100000; + _minVal = NOT_SET; + _maxVal = NOT_SET; + int h = 0; + int l = 0; + bool ok; + int base = 10; + + for (;;) { + Xml::Token token = xml.parse(); + const QString& tag = xml.s1(); + switch (token) { + case Xml::Error: + case Xml::End: + return; + case Xml::Attribut: + { + QString s = xml.s2(); + if (s.left(2) == "0x") + base = 16; + if (tag == "name") + _name = xml.s2(); + else if (tag == "type") + t = ctrlType2Int(xml.s2()); + else if (tag == "h") + h = xml.s2().toInt(&ok, base); + else if (tag == "l") { + // By T356 08/16/08. Changed wildcard to '*'. + // Changed back to 'pitch' again. + // Support instrument files with '*' as wildcard. + if ((xml.s2() == "*") || (xml.s2() == "pitch")) + l = 0xff; + else + l = xml.s2().toInt(&ok, base); + } + else if (tag == "min") + _minVal = xml.s2().toInt(&ok, base); + else if (tag == "max") + _maxVal = xml.s2().toInt(&ok, base); + else if (tag == "init") + _initVal = xml.s2().toInt(&ok, base); + } + break; + case Xml::TagStart: + xml.unknown("MidiController"); + break; + case Xml::TagEnd: + if (tag == "Controller") { + _num = (h << 8) + l; + switch (t) { + case RPN: + if (_maxVal == NOT_SET) + _maxVal = 127; + // p3.3.37 + //_num |= 0x20000; + _num |= CTRL_RPN_OFFSET; + break; + case NRPN: + if (_maxVal == NOT_SET) + _maxVal = 127; + //_num |= 0x30000; + _num |= CTRL_NRPN_OFFSET; + break; + case Controller7: + if (_maxVal == NOT_SET) + _maxVal = 127; + break; + case Controller14: + //_num |= 0x10000; + _num |= CTRL_14_OFFSET; + if (_maxVal == NOT_SET) + _maxVal = 16383; + break; + case RPN14: + if (_maxVal == NOT_SET) + _maxVal = 16383; + //_num |= 0x50000; + _num |= CTRL_RPN14_OFFSET; + break; + case NRPN14: + if (_maxVal == NOT_SET) + _maxVal = 16383; + //_num |= 0x60000; + _num |= CTRL_NRPN14_OFFSET; + 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 = 0xffffff; + _num = CTRL_PROGRAM; + break; + case Velo: // cannot happen + break; + } + if (_minVal == NOT_SET) + _minVal = 0; + + updateBias(); + return; + } + default: + break; + } + } + } + +//--------------------------------------------------------- +// 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; + return val + CTRL_RPN_OFFSET; + case NRPN: + //return l + CTRL_NRPN_OFFSET; + return val + 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; + } + } + +//--------------------------------------------------------- +// MidiCtrlValList +//--------------------------------------------------------- + +MidiCtrlValList::MidiCtrlValList(int c) + { + ctrlNum = c; + _hwVal = CTRL_VAL_UNKNOWN; + _lastValidHWVal = CTRL_VAL_UNKNOWN; + } + +//--------------------------------------------------------- +// clearDelete +//--------------------------------------------------------- + +void MidiCtrlValListList::clearDelete(bool deleteLists) +{ + for(iMidiCtrlValList imcvl = begin(); imcvl != end(); ++imcvl) + { + if(imcvl->second) + { + imcvl->second->clear(); + if(deleteLists) + delete imcvl->second; + } + } + if(deleteLists) + clear(); +} + +//--------------------------------------------------------- +// setHwVal +// Returns false if value is already equal, true if value is changed. +//--------------------------------------------------------- + +bool MidiCtrlValList::setHwVal(const int v) +{ + if(_hwVal == v) + return false; + + _hwVal = v; + if(_hwVal != CTRL_VAL_UNKNOWN) + _lastValidHWVal = _hwVal; + + return true; +} + +//--------------------------------------------------------- +// setHwVals +// Sets current and last HW values. +// Handy for forcing labels to show 'off' and knobs to show specific values +// without having to send two messages. +// Returns false if both values are already set, true if either value is changed. +//--------------------------------------------------------- + +bool MidiCtrlValList::setHwVals(const int v, int const lastv) +{ + if(_hwVal == v && _lastValidHWVal == lastv) + return false; + + _hwVal = v; + // Don't want to break our own rules - _lastValidHWVal can't be unknown while _hwVal is valid... + // But _hwVal can be unknown while _lastValidHWVal is valid... + if(lastv == CTRL_VAL_UNKNOWN) + _lastValidHWVal = _hwVal; + else + _lastValidHWVal = lastv; + + return true; +} + +//--------------------------------------------------------- +// partAtTick +//--------------------------------------------------------- + +Part* MidiCtrlValList::partAtTick(int tick) const +{ + // Determine (first) part at tick. Return 0 if none found. + + ciMidiCtrlVal i = lower_bound(tick); + if (i == end() || i->first != tick) { + if (i == begin()) + return 0; + --i; + } + return i->second.part; +} + +//--------------------------------------------------------- +// iValue +//--------------------------------------------------------- + +iMidiCtrlVal MidiCtrlValList::iValue(int tick) +{ + // Determine value at tick, using values stored by ANY part... + + iMidiCtrlVal i = lower_bound(tick); + if (i == end() || i->first != tick) { + if (i == begin()) + return end(); + --i; + } + return i; +} + +//--------------------------------------------------------- +// value +//--------------------------------------------------------- + +int MidiCtrlValList::value(int tick) const +{ + // Determine value at tick, using values stored by ANY part... + + ciMidiCtrlVal i = lower_bound(tick); + if (i == end() || i->first != tick) { + if (i == begin()) + return CTRL_VAL_UNKNOWN; + --i; + } + return i->second.val; +} + +int MidiCtrlValList::value(int tick, Part* part) const +{ + // Determine value at tick, using values stored by the SPECIFIC part... + + // Get the first value found with with a tick equal or greater than specified tick. + ciMidiCtrlVal i = lower_bound(tick); + // Since values from different parts can have the same tick, scan for part in all values at that tick. + for(ciMidiCtrlVal j = i; j != end() && j->first == tick; ++j) + { + if(j->second.part == part) + return j->second.val; + } + // Scan for part in all previous values, regardless of tick. + while(i != begin()) + { + --i; + if(i->second.part == part) + return i->second.val; + } + // No previous values were found belonging to the specified part. + return CTRL_VAL_UNKNOWN; +} + +//--------------------------------------------------------- +// add +// return true if new controller value added or replaced +//--------------------------------------------------------- + +// Changed by T356. +//bool MidiCtrlValList::add(int tick, int val) +bool MidiCtrlValList::addMCtlVal(int tick, int val, Part* part) + { + iMidiCtrlVal e = findMCtlVal(tick, part); + + if (e != end()) { + if(e->second.val != val) + { + e->second.val = val; + return true; + } + return false; + } + + MidiCtrlVal v; + v.val = val; + v.part = part; + insert(std::pair (tick, v)); + return true; + } + +//--------------------------------------------------------- +// del +//--------------------------------------------------------- + +// Changed by T356. +//void MidiCtrlValList::del(int tick) +void MidiCtrlValList::delMCtlVal(int tick, Part* part) +{ + iMidiCtrlVal e = findMCtlVal(tick, part); + if (e == end()) { + if(debugMsg) + printf("MidiCtrlValList::delMCtlVal(%d): not found (size %zd)\n", tick, size()); + return; + } + erase(e); +} + +//--------------------------------------------------------- +// find +//--------------------------------------------------------- + +// Changed by T356. +//iMidiCtrlVal MidiCtrlValList::find(int tick, Part* part) +iMidiCtrlVal MidiCtrlValList::findMCtlVal(int tick, Part* part) +{ + MidiCtrlValRange range = equal_range(tick); + for(iMidiCtrlVal i = range.first; i != range.second; ++i) + { + if(i->second.part == part) + return i; + } + return end(); +} + +//--------------------------------------------------------- +// MidiControllerList +//--------------------------------------------------------- + +MidiControllerList::MidiControllerList(const MidiControllerList& mcl) : std::map() +{ + //copy(mcl); + + for(ciMidiController i = mcl.begin(); i != mcl.end(); ++i) + { + MidiController* mc = i->second; + add(new MidiController(*mc)); + } +} + +//--------------------------------------------------------- +// copy +//--------------------------------------------------------- +//void MidiControllerList::copy(const MidiControllerList &mcl) +//{ +// clear(); +// for(ciMidiController i = mcl.begin(); i != mcl.end(); ++i) +// { +// MidiController* mc = *i; +// push_back(new MidiController(*mc)); +// } +//} + +//--------------------------------------------------------- +// operator = +//--------------------------------------------------------- +//MidiControllerList& MidiControllerList::operator= (const MidiControllerList &mcl) +//{ +// copy(mcl); +// return *this; +//} diff --git a/muse2/muse/midictrl.h b/muse2/muse/midictrl.h new file mode 100644 index 00000000..69650a65 --- /dev/null +++ b/muse2/muse/midictrl.h @@ -0,0 +1,255 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: midictrl.h,v 1.16.2.8 2009/11/25 09:09:43 terminator356 Exp $ +// +// (C) Copyright 1999-2003 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __MIDICTRL_H__ +#define __MIDICTRL_H__ + +#include +#include +#include + +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_INTERNAL_OFFSET = 0x40000; + +// p3.3.37 +//const int CTRL_PITCH = 0x40000; +//const int CTRL_PROGRAM = 0x40001; +//const int CTRL_VELOCITY = 0x40002; +//const int CTRL_MASTER_VOLUME = 0x40003; +const int CTRL_PITCH = CTRL_INTERNAL_OFFSET; +const int CTRL_PROGRAM = CTRL_INTERNAL_OFFSET + 1; +const int CTRL_VELOCITY = CTRL_INTERNAL_OFFSET + 2; +//const int CTRL_MASTER_VOLUME = CTRL_INTERNAL_OFFSET + 3; + +const int CTRL_VAL_UNKNOWN = 0x10000000; // 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; + +class Xml; +class Part; + +//--------------------------------------------------------- +// 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; + int _num; // Controller Number + int _minVal; // controller value range (used in gui) + int _maxVal; + int _initVal; + int _bias; + void updateBias(); + + public: + MidiController(); + MidiController(const QString& n, int num, int min, int max, int init); + MidiController(const MidiController& mc); + void copy(const MidiController &mc); + MidiController& operator= (const MidiController &mc); + + const QString& name() const { return _name; } + int num() const { return _num; } + void setName(const QString& s) { _name = s; } + void setNum(int v) { _num = v; } + void write(int level, Xml& xml) const; + void read(Xml& xml); + 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; updateBias(); } + void setMaxVal(int val) { _maxVal = val; updateBias(); } + int bias() const { return _bias; } + static int genNum(ControllerType, int, int); + }; + +// Added by T356. +struct MidiCtrlVal +{ + // The part containing the event which this value came from. Used for searching and deleting. + Part* part; + // The stored value. + int val; +}; + +//--------------------------------------------------------- +// MidiCtrlValList +// arrange controller events of a specific type in a +// list for easy retrieval +//--------------------------------------------------------- + +// Changed by T356. +//typedef std::map >::iterator iMidiCtrlVal; +//typedef std::map >::const_iterator ciMidiCtrlVal; +typedef std::multimap >::iterator iMidiCtrlVal; +typedef std::multimap >::const_iterator ciMidiCtrlVal; + +typedef std::pair MidiCtrlValRange; +// Changed by T356. +//class MidiCtrlValList : public std::map > { +class MidiCtrlValList : public std::multimap > { + + int ctrlNum; + int _lastValidHWVal; + int _hwVal; // current set value in midi hardware + // can be CTRL_VAL_UNKNOWN + + // Hide built-in finds. + iMidiCtrlVal find(const int&) { return end(); }; + ciMidiCtrlVal find(const int&) const { return end(); }; + + public: + MidiCtrlValList(int num); + + Part* partAtTick(int tick) const; + + iMidiCtrlVal iValue(int tick); + int value(int tick) const; + //int value(int tick, Part** part = 0) const; + int value(int tick, Part* part) const; + // Changed by T356. + //bool add(int tick, int value); + //void del(int tick); + bool addMCtlVal(int tick, int value, Part* part); + void delMCtlVal(int tick, Part* part); + + iMidiCtrlVal findMCtlVal(int tick, Part* part); + + int hwVal() const { return _hwVal; } + bool setHwVal(const int v); + bool setHwVals(const int v, const int lastv); + int num() const { return ctrlNum; } + int lastValidHWVal() const { return _lastValidHWVal; } + }; + +//--------------------------------------------------------- +// MidiCtrlValListList +// List of midi controller value lists. +// This list represents the controller state of a +// midi port. +// index = (channelNumber << 24) + ctrlNumber +//--------------------------------------------------------- + +typedef std::map >::iterator iMidiCtrlValList; +typedef std::map >::const_iterator ciMidiCtrlValList; + +class MidiCtrlValListList : public std::map > { + public: + void add(int channel, MidiCtrlValList* vl) { + insert(std::pair((channel << 24) + vl->num(), vl)); + } + iMidiCtrlValList find(int channel, int ctrl) { + return std::map >::find((channel << 24) + ctrl); + } + void clearDelete(bool deleteLists); + }; + +//--------------------------------------------------------- +// MidiControllerList +// this is a list of used midi controllers created +// - excplicit by user +// - implicit during import of a midi file +//--------------------------------------------------------- + +class MidiControllerList : public std::map > +{ + public: + MidiControllerList() {} + MidiControllerList(const MidiControllerList& mcl); + + void add(MidiController* mc) { insert(std::pair(mc->num(), mc)); } +}; + +typedef MidiControllerList::iterator iMidiController; +typedef MidiControllerList::const_iterator ciMidiController; +typedef MidiControllerList MidiControllerList; + +extern MidiControllerList defaultMidiController; +extern void initMidiController(); +extern MidiController::ControllerType midiControllerType(int num); + + +extern const QString& int2ctrlType(int n); +extern MidiController::ControllerType ctrlType2Int(const QString& s); +extern QString midiCtrlName(int ctrl); +extern MidiController veloCtrl; + + +typedef std::map > MidiCtl2LadspaPortMap; +typedef MidiCtl2LadspaPortMap::iterator iMidiCtl2LadspaPort; +typedef MidiCtl2LadspaPortMap::const_iterator ciMidiCtl2LadspaPort; + + +#endif + diff --git a/muse2/muse/mididev.cpp b/muse2/muse/mididev.cpp new file mode 100644 index 00000000..7f52fc2e --- /dev/null +++ b/muse2/muse/mididev.cpp @@ -0,0 +1,548 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: mididev.cpp,v 1.10.2.6 2009/11/05 03:14:35 terminator356 Exp $ +// +// (C) Copyright 1999-2004 Werner Schweer (ws@seh.de) +//========================================================= + +#include + +#include +#include +#include +#include + +#include "midictrl.h" +#include "song.h" +#include "midi.h" +#include "midiport.h" +#include "mididev.h" +#include "config.h" +#include "globals.h" +#include "audio.h" +#include "midiseq.h" +//#include "sync.h" +#include "midiitransform.h" + +#ifdef MIDI_DRIVER_MIDI_SERIAL +extern void initMidiSerial(); +#endif +extern bool initMidiAlsa(); +extern bool initMidiJack(); + +MidiDeviceList midiDevices; +extern void processMidiInputTransformPlugins(MEvent&); + +extern unsigned int volatile lastExtMidiSyncTick; + +//--------------------------------------------------------- +// initMidiDevices +//--------------------------------------------------------- + +void initMidiDevices() + { +#ifdef MIDI_DRIVER_MIDI_SERIAL + initMidiSerial(); +#endif + if(initMidiAlsa()) + { + QMessageBox::critical(NULL, "MusE fatal error.", "MusE failed to initialize the\n" + "Alsa midi subsystem, check\n" + "your configuration."); + exit(-1); + } + + if(initMidiJack()) + { + QMessageBox::critical(NULL, "MusE fatal error.", "MusE failed to initialize the\n" + "Jack midi subsystem, check\n" + "your configuration."); + exit(-1); + } + } + +//--------------------------------------------------------- +// init +//--------------------------------------------------------- + +void MidiDevice::init() + { + _readEnable = false; + _writeEnable = false; + _rwFlags = 3; + _openFlags = 3; + _port = -1; + _nextPlayEvent = _playEvents.begin(); + } + +//--------------------------------------------------------- +// MidiDevice +//--------------------------------------------------------- + +MidiDevice::MidiDevice() + { + ///_recBufFlipped = false; + //_tmpRecordCount = 0; + for(unsigned int i = 0; i < MIDI_CHANNELS + 1; ++i) + _tmpRecordCount[i] = 0; + + _sysexFIFOProcessed = false; + //_sysexWritingChunks = false; + _sysexReadingChunks = false; + + init(); + } + +MidiDevice::MidiDevice(const QString& n) + : _name(n) + { + ///_recBufFlipped = false; + //_tmpRecordCount = 0; + for(unsigned int i = 0; i < MIDI_CHANNELS + 1; ++i) + _tmpRecordCount[i] = 0; + + _sysexFIFOProcessed = false; + //_sysexWritingChunks = false; + _sysexReadingChunks = false; + + init(); + } + +//--------------------------------------------------------- +// filterEvent +// return true if event filtered +//--------------------------------------------------------- + +//static bool filterEvent(const MEvent& event, int type, bool thru) +bool filterEvent(const MEvent& event, int type, bool thru) + { + switch(event.type()) { + case ME_NOTEON: + case ME_NOTEOFF: + if (type & MIDI_FILTER_NOTEON) + return true; + break; + case ME_POLYAFTER: + if (type & MIDI_FILTER_POLYP) + return true; + break; + case ME_CONTROLLER: + if (type & MIDI_FILTER_CTRL) + return true; + if (!thru && (midiFilterCtrl1 == event.dataA() + || midiFilterCtrl2 == event.dataA() + || midiFilterCtrl3 == event.dataA() + || midiFilterCtrl4 == event.dataA())) { + return true; + } + break; + case ME_PROGRAM: + if (type & MIDI_FILTER_PROGRAM) + return true; + break; + case ME_AFTERTOUCH: + if (type & MIDI_FILTER_AT) + return true; + break; + case ME_PITCHBEND: + if (type & MIDI_FILTER_PITCH) + return true; + break; + case ME_SYSEX: + if (type & MIDI_FILTER_SYSEX) + return true; + break; + default: + break; + } + return false; + } + +//--------------------------------------------------------- +// afterProcess +// clear all recorded events after a process cycle +//--------------------------------------------------------- + +void MidiDevice::afterProcess() +{ + //while (_tmpRecordCount--) + // _recordFifo.remove(); + + for(unsigned int i = 0; i < MIDI_CHANNELS + 1; ++i) + { + while (_tmpRecordCount[i]--) + _recordFifo[i].remove(); + } +} + +//--------------------------------------------------------- +// beforeProcess +// "freeze" fifo for this process cycle +//--------------------------------------------------------- + +void MidiDevice::beforeProcess() +{ + //if (!jackPort(0).isZero()) + // audioDriver->collectMidiEvents(this, jackPort(0)); + + //_tmpRecordCount = _recordFifo.getSize(); + for(unsigned int i = 0; i < MIDI_CHANNELS + 1; ++i) + _tmpRecordCount[i] = _recordFifo[i].getSize(); + + // Reset this. + _sysexFIFOProcessed = false; +} + +/* +//--------------------------------------------------------- +// getEvents +//--------------------------------------------------------- + +void MidiDevice::getEvents(unsigned , unsigned , int ch, MPEventList* dst) //from //to +{ + for (int i = 0; i < _tmpRecordCount; ++i) { + const MidiPlayEvent& ev = _recordFifo.peek(i); + if (ch == -1 || (ev.channel() == ch)) + dst->insert(ev); + } + + //while(!recordFifo.isEmpty()) + //{ + // MidiPlayEvent e(recordFifo.get()); + // if (ch == -1 || (e.channel() == ch)) + // dst->insert(e); + //} +} +*/ + +/* +//--------------------------------------------------------- +// recordEvent +//--------------------------------------------------------- + +MREventList* MidiDevice::recordEvents() +{ + // Return which list is NOT currently being filled with incoming midi events. By T356. + if(_recBufFlipped) + return &_recordEvents; + else + return &_recordEvents2; +} +*/ + +//--------------------------------------------------------- +// recordEvent +//--------------------------------------------------------- + +void MidiDevice::recordEvent(MidiRecordEvent& event) + { + // p3.3.35 + // TODO: Tested, but record resolution not so good. Switch to wall clock based separate list in MidiDevice. And revert this line. + //event.setTime(audio->timestamp()); + event.setTime(extSyncFlag.value() ? lastExtMidiSyncTick : audio->timestamp()); + + //printf("MidiDevice::recordEvent event time:%d\n", event.time()); + + // Added by Tim. p3.3.8 + + // By T356. Set the loop number which the event came in at. + //if(audio->isRecording()) + if(audio->isPlaying()) + event.setLoopNum(audio->loopCount()); + + if (midiInputTrace) { + printf("MidiInput: "); + event.dump(); + } + + int typ = event.type(); + + if(_port != -1) + { + int idin = midiPorts[_port].syncInfo().idIn(); + +// p3.3.26 1/23/10 Section was disabled, enabled by Tim. +//#if 0 + + //--------------------------------------------------- + // filter some SYSEX events + //--------------------------------------------------- + + if (typ == ME_SYSEX) { + const unsigned char* p = event.data(); + int n = event.len(); + if (n >= 4) { + if ((p[0] == 0x7f) + //&& ((p[1] == 0x7f) || (p[1] == rxDeviceId))) { + && ((p[1] == 0x7f) || (idin == 0x7f) || (p[1] == idin))) { + if (p[2] == 0x06) { + //mmcInput(p, n); + midiSeq->mmcInput(_port, p, n); + return; + } + if (p[2] == 0x01) { + //mtcInputFull(p, n); + midiSeq->mtcInputFull(_port, p, n); + return; + } + } + else if (p[0] == 0x7e) { + //nonRealtimeSystemSysex(p, n); + midiSeq->nonRealtimeSystemSysex(_port, p, n); + return; + } + } + } + else + // p3.3.26 1/23/10 Moved here from alsaProcessMidiInput(). Anticipating Jack midi support, so don't make it ALSA specific. Tim. + // Trigger general activity indicator detector. Sysex has no channel, don't trigger. + midiPorts[_port].syncInfo().trigActDetect(event.channel()); + +//#endif + + } + + // + // process midi event input filtering and + // transformation + // + + processMidiInputTransformPlugins(event); + + if (filterEvent(event, midiRecordType, false)) + return; + + if (!applyMidiInputTransformation(event)) { + if (midiInputTrace) + printf(" midi input transformation: event filtered\n"); + return; + } + + // + // transfer noteOn events to gui for step recording and keyboard + // remote control + // + if (typ == ME_NOTEON) { + int pv = ((event.dataA() & 0xff)<<8) + (event.dataB() & 0xff); + song->putEvent(pv); + } + + ///if(_recBufFlipped) + /// _recordEvents2.add(event); // add event to secondary list of recorded events + ///else + /// _recordEvents.add(event); // add event to primary list of recorded events + + //if(_recordFifo.put(MidiPlayEvent(event))) + // printf("MidiDevice::recordEvent: fifo overflow\n"); + + // p3.3.38 + // Do not bother recording if it is NOT actually being used by a port. + // Because from this point on, process handles things, by selected port. + if(_port == -1) + return; + + // Split the events up into channel fifos. Special 'channel' number 17 for sysex events. + unsigned int ch = (typ == ME_SYSEX)? MIDI_CHANNELS : event.channel(); + if(_recordFifo[ch].put(MidiPlayEvent(event))) + printf("MidiDevice::recordEvent: fifo channel %d overflow\n", ch); + } + +//--------------------------------------------------------- +// find +//--------------------------------------------------------- + +MidiDevice* MidiDeviceList::find(const QString& s, int typeHint) + { + for (iMidiDevice i = begin(); i != end(); ++i) + if( (typeHint == -1 || typeHint == (*i)->deviceType()) && ((*i)->name() == s) ) + return *i; + return 0; + } + +iMidiDevice MidiDeviceList::find(const MidiDevice* dev) + { + for (iMidiDevice i = begin(); i != end(); ++i) + if (*i == dev) + return i; + return end(); + } + +//--------------------------------------------------------- +// add +//--------------------------------------------------------- + +void MidiDeviceList::add(MidiDevice* dev) + { + bool gotUniqueName=false; + int increment = 0; + QString origname = dev->name(); + while (!gotUniqueName) { + gotUniqueName = true; + // check if the name's been taken + for (iMidiDevice i = begin(); i != end(); ++i) { + const QString s = (*i)->name(); + if (s == dev->name()) + { + char incstr[4]; + sprintf(incstr,"_%d",++increment);; + dev->setName(origname + incstr); + gotUniqueName = false; + } + } + } + + push_back(dev); + } + +//--------------------------------------------------------- +// remove +//--------------------------------------------------------- + +void MidiDeviceList::remove(MidiDevice* dev) + { + for (iMidiDevice i = begin(); i != end(); ++i) { + if (*i == dev) { + erase(i); + break; + } + } + } + +//--------------------------------------------------------- +// sendNullRPNParams +//--------------------------------------------------------- + +bool MidiDevice::sendNullRPNParams(int chn, bool nrpn) +{ + if(_port == -1) + return false; + + int nv = midiPorts[_port].nullSendValue(); + if(nv == -1) + return false; + + int nvh = (nv >> 8) & 0xff; + int nvl = nv & 0xff; + if(nvh != 0xff) + { + if(nrpn) + putMidiEvent(MidiPlayEvent(0, 0, chn, ME_CONTROLLER, CTRL_HNRPN, nvh & 0x7f)); + else + putMidiEvent(MidiPlayEvent(0, 0, chn, ME_CONTROLLER, CTRL_HRPN, nvh & 0x7f)); + } + if(nvl != 0xff) + { + if(nrpn) + putMidiEvent(MidiPlayEvent(0, 0, chn, ME_CONTROLLER, CTRL_LNRPN, nvl & 0x7f)); + else + putMidiEvent(MidiPlayEvent(0, 0, chn, ME_CONTROLLER, CTRL_LRPN, nvl & 0x7f)); + } + return true; +} + +//--------------------------------------------------------- +// putEvent +// return true if event cannot be delivered +// TODO: retry on controller putMidiEvent +//--------------------------------------------------------- + +bool MidiDevice::putEvent(const MidiPlayEvent& ev) + { + if(!_writeEnable) + //return true; + return false; + + if (ev.type() == ME_CONTROLLER) { + int a = ev.dataA(); + int b = ev.dataB(); + int chn = ev.channel(); + if (a == CTRL_PITCH) { + return putMidiEvent(MidiPlayEvent(0, 0, chn, ME_PITCHBEND, b, 0)); + } + 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) + putMidiEvent(MidiPlayEvent(0, 0, chn, ME_CONTROLLER, CTRL_HBANK, hb)); + if (lb != 0xff) + putMidiEvent(MidiPlayEvent(0, 0, chn, ME_CONTROLLER, CTRL_LBANK, lb)); + return putMidiEvent(MidiPlayEvent(0, 0, chn, ME_PROGRAM, pr, 0)); + } + } +#if 1 // if ALSA cannot handle RPN NRPN etc. + + // p3.3.37 + //if (a < 0x1000) { // 7 Bit Controller + if (a < CTRL_14_OFFSET) { // 7 Bit Controller + //putMidiEvent(MidiPlayEvent(0, 0, chn, ME_CONTROLLER, a, b)); + putMidiEvent(ev); + } + //else if (a < 0x20000) { // 14 bit high resolution controller + 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; + putMidiEvent(MidiPlayEvent(0, 0, chn, ME_CONTROLLER, ctrlH, dataH)); + putMidiEvent(MidiPlayEvent(0, 0, chn, ME_CONTROLLER, ctrlL, dataL)); + } + //else if (a < 0x30000) { // RPN 7-Bit Controller + else if (a < CTRL_NRPN_OFFSET) { // RPN 7-Bit Controller + int ctrlH = (a >> 8) & 0x7f; + int ctrlL = a & 0x7f; + putMidiEvent(MidiPlayEvent(0, 0, chn, ME_CONTROLLER, CTRL_HRPN, ctrlH)); + putMidiEvent(MidiPlayEvent(0, 0, chn, ME_CONTROLLER, CTRL_LRPN, ctrlL)); + putMidiEvent(MidiPlayEvent(0, 0, chn, ME_CONTROLLER, CTRL_HDATA, b)); + + // Added by T356. Select null parameters so that subsequent data controller + // events do not upset the last *RPN controller. + sendNullRPNParams(chn, false); + } + //else if (a < 0x40000) { // NRPN 7-Bit Controller + else if (a < CTRL_INTERNAL_OFFSET) { // NRPN 7-Bit Controller + int ctrlH = (a >> 8) & 0x7f; + int ctrlL = a & 0x7f; + putMidiEvent(MidiPlayEvent(0, 0, chn, ME_CONTROLLER, CTRL_HNRPN, ctrlH)); + putMidiEvent(MidiPlayEvent(0, 0, chn, ME_CONTROLLER, CTRL_LNRPN, ctrlL)); + putMidiEvent(MidiPlayEvent(0, 0, chn, ME_CONTROLLER, CTRL_HDATA, b)); + + sendNullRPNParams(chn, true); + } + //else if (a < 0x60000) { // RPN14 Controller + 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; + putMidiEvent(MidiPlayEvent(0, 0, chn, ME_CONTROLLER, CTRL_HRPN, ctrlH)); + putMidiEvent(MidiPlayEvent(0, 0, chn, ME_CONTROLLER, CTRL_LRPN, ctrlL)); + putMidiEvent(MidiPlayEvent(0, 0, chn, ME_CONTROLLER, CTRL_HDATA, dataH)); + putMidiEvent(MidiPlayEvent(0, 0, chn, ME_CONTROLLER, CTRL_LDATA, dataL)); + + sendNullRPNParams(chn, false); + } + //else if (a < 0x70000) { // NRPN14 Controller + 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; + putMidiEvent(MidiPlayEvent(0, 0, chn, ME_CONTROLLER, CTRL_HNRPN, ctrlH)); + putMidiEvent(MidiPlayEvent(0, 0, chn, ME_CONTROLLER, CTRL_LNRPN, ctrlL)); + putMidiEvent(MidiPlayEvent(0, 0, chn, ME_CONTROLLER, CTRL_HDATA, dataH)); + putMidiEvent(MidiPlayEvent(0, 0, chn, ME_CONTROLLER, CTRL_LDATA, dataL)); + + sendNullRPNParams(chn, true); + } + else { + printf("putEvent: unknown controller type 0x%x\n", a); + } + return false; +#endif + } + return putMidiEvent(ev); + } diff --git a/muse2/muse/mididev.h b/muse2/muse/mididev.h new file mode 100644 index 00000000..1b2cf055 --- /dev/null +++ b/muse2/muse/mididev.h @@ -0,0 +1,157 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: mididev.h,v 1.3.2.4 2009/04/04 01:49:50 terminator356 Exp $ +// +// (C) Copyright 2000 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __MIDIDEV_H__ +#define __MIDIDEV_H__ + +#include +#include + +#include "mpevent.h" +//#include "sync.h" +#include "route.h" +#include "globaldefs.h" + +//class RouteList; +class Xml; + +//--------------------------------------------------------- +// MidiDevice +//--------------------------------------------------------- + +class MidiDevice { + MPEventList _stuckNotes; + MPEventList _playEvents; + iMPEvent _nextPlayEvent; + ///MREventList _recordEvents; + ///MREventList _recordEvents2; + + // Used for multiple reads of fifos during process. + //int _tmpRecordCount; + int _tmpRecordCount[MIDI_CHANNELS + 1]; + bool _sysexFIFOProcessed; + + ///bool _recBufFlipped; + // Holds sync settings and detection monitors. + //MidiSyncInfo _syncInfo; + + protected: + QString _name; + int _port; // connected to midi port; -1 - not connected + int _rwFlags; // possible open flags, 1 write, 2 read, 3 rw + int _openFlags; // configured open flags + bool _readEnable; // set when opened/closed. + bool _writeEnable; // + //int _sysexWriteChunk; + //int _sysexReadChunk; + //bool _sysexWritingChunks; + bool _sysexReadingChunks; + + // Recording fifo. + //MidiFifo _recordFifo; + // Recording fifos. To speed up processing, one per channel plus one special system 'channel' for channel-less events like sysex. + MidiFifo _recordFifo[MIDI_CHANNELS + 1]; + + RouteList _inRoutes, _outRoutes; + + void init(); + virtual bool putMidiEvent(const MidiPlayEvent&) = 0; + + public: + enum { ALSA_MIDI=0, JACK_MIDI=1, SYNTH_MIDI=2 }; + + MidiDevice(); + MidiDevice(const QString& name); + virtual ~MidiDevice() {} + + virtual int deviceType() = 0; + + virtual void* clientPort() { return 0; } + virtual QString open() = 0; + virtual void close() = 0; + virtual void writeRouting(int, Xml&) const { }; + + RouteList* inRoutes() { return &_inRoutes; } + RouteList* outRoutes() { return &_outRoutes; } + bool noInRoute() const { return _inRoutes.empty(); } + bool noOutRoute() const { return _outRoutes.empty(); } + + const QString& name() const { return _name; } + virtual void setName(const QString& s) { _name = s; } + + int midiPort() const { return _port; } + void setPort(int p) { _port = p; } + + int rwFlags() const { return _rwFlags; } + int openFlags() const { return _openFlags; } + void setOpenFlags(int val) { _openFlags = val; } + void setrwFlags(int val) { _rwFlags = val; } + //MidiSyncInfo& syncInfo() { return _syncInfo; } + + virtual bool isSynti() const { return false; } + virtual int selectRfd() { return -1; } + virtual int selectWfd() { return -1; } + virtual int bytesToWrite() { return 0; } + virtual void flush() {} + virtual void processInput() {} + virtual void discardInput() {} + + virtual void recordEvent(MidiRecordEvent&); + + virtual bool putEvent(const MidiPlayEvent&); + + // For Jack-based devices - called in Jack audio process callback + virtual void collectMidiEvents() {} + virtual void processMidi() {} + + MPEventList* stuckNotes() { return &_stuckNotes; } + MPEventList* playEvents() { return &_playEvents; } + + ///MREventList* recordEvents(); + ///void flipRecBuffer() { _recBufFlipped = _recBufFlipped ? false : true; } + ///bool recBufFlipped() { return _recBufFlipped; } + void beforeProcess(); + void afterProcess(); + //int tmpRecordCount() { return _tmpRecordCount; } + int tmpRecordCount(const unsigned int ch) { return _tmpRecordCount[ch]; } + //MidiFifo& recordEvents() { return _recordFifo; } + MidiFifo& recordEvents(const unsigned int ch) { return _recordFifo[ch]; } + bool sysexFIFOProcessed() { return _sysexFIFOProcessed; } + void setSysexFIFOProcessed(bool v) { _sysexFIFOProcessed = v; } + //bool sysexWritingChunks() { return _sysexWritingChunks; } + //void setSysexWritingChunks(bool v) { _sysexWritingChunks = v; } + bool sysexReadingChunks() { return _sysexReadingChunks; } + void setSysexReadingChunks(bool v) { _sysexReadingChunks = v; } + //virtual void getEvents(unsigned /*from*/, unsigned /*to*/, int /*channel*/, MPEventList* /*dst*/); + + iMPEvent nextPlayEvent() { return _nextPlayEvent; } + void setNextPlayEvent(iMPEvent i) { _nextPlayEvent = i; } + bool sendNullRPNParams(int, bool); + }; + +//--------------------------------------------------------- +// MidiDeviceList +//--------------------------------------------------------- + +typedef std::list::iterator iMidiDevice; + +class MidiDeviceList : public std::list +{ + public: + void add(MidiDevice* dev); + void remove(MidiDevice* dev); + MidiDevice* find(const QString& name, int typeHint = -1); + iMidiDevice find(const MidiDevice* dev); +}; + +extern MidiDeviceList midiDevices; +extern void initMidiDevices(); +extern bool filterEvent(const MEvent& event, int type, bool thru); + +#endif + diff --git a/muse2/muse/midiedit/Makefile.am b/muse2/muse/midiedit/Makefile.am new file mode 100644 index 00000000..e817dc99 --- /dev/null +++ b/muse2/muse/midiedit/Makefile.am @@ -0,0 +1,36 @@ +include $(top_srcdir)/common.am + +if PCH +AM_CXXFLAGS += -include $(top_srcdir)/all.h +endif + +noinst_LIBRARIES = libmidiedit.a + +if PCH +AM_CXXFLAGS += -include $(top_srcdir)/all-pic.h -DINSTPREFIX=\"$(prefix)\" +else +AM_CXXFLAGS += -DINSTPREFIX=\"$(prefix)\" +endif + +dist_libmidiedit_a_SOURCES = \ + drummap.cpp drummap.h \ + cmd.h \ + pianoroll.cpp pianoroll.h \ + piano.cpp piano.h \ + prcanvas.cpp prcanvas.h \ + quantconfig.cpp quantconfig.h \ + drumedit.cpp drumedit.h \ + dlist.cpp dlist.h \ + dcanvas.cpp dcanvas.h \ + ecanvas.cpp ecanvas.h + +nodist_libmidiedit_a_SOURCES = \ + moc_pianoroll.cpp \ + moc_piano.cpp \ + moc_prcanvas.cpp \ + moc_quantconfig.cpp \ + moc_drumedit.cpp \ + moc_dlist.cpp \ + moc_dcanvas.cpp \ + moc_ecanvas.cpp + diff --git a/muse2/muse/midiedit/Makefile.in b/muse2/muse/midiedit/Makefile.in new file mode 100644 index 00000000..01425ebc --- /dev/null +++ b/muse2/muse/midiedit/Makefile.in @@ -0,0 +1,636 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/common.am +@PCH_TRUE@am__append_1 = -include $(top_srcdir)/all.h -include \ +@PCH_TRUE@ $(top_srcdir)/all-pic.h -DINSTPREFIX=\"$(prefix)\" +@PCH_FALSE@am__append_2 = -DINSTPREFIX=\"$(prefix)\" +subdir = muse/midiedit +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal-include.m4 \ + $(top_srcdir)/m4/alsa.m4 $(top_srcdir)/m4/docbook.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +LIBRARIES = $(noinst_LIBRARIES) +ARFLAGS = cru +libmidiedit_a_AR = $(AR) $(ARFLAGS) +libmidiedit_a_LIBADD = +dist_libmidiedit_a_OBJECTS = drummap.$(OBJEXT) pianoroll.$(OBJEXT) \ + piano.$(OBJEXT) prcanvas.$(OBJEXT) quantconfig.$(OBJEXT) \ + drumedit.$(OBJEXT) dlist.$(OBJEXT) dcanvas.$(OBJEXT) \ + ecanvas.$(OBJEXT) +nodist_libmidiedit_a_OBJECTS = moc_pianoroll.$(OBJEXT) \ + moc_piano.$(OBJEXT) moc_prcanvas.$(OBJEXT) \ + moc_quantconfig.$(OBJEXT) moc_drumedit.$(OBJEXT) \ + moc_dlist.$(OBJEXT) moc_dcanvas.$(OBJEXT) \ + moc_ecanvas.$(OBJEXT) +libmidiedit_a_OBJECTS = $(dist_libmidiedit_a_OBJECTS) \ + $(nodist_libmidiedit_a_OBJECTS) +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +CXXLD = $(CXX) +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(dist_libmidiedit_a_SOURCES) \ + $(nodist_libmidiedit_a_SOURCES) +DIST_SOURCES = $(dist_libmidiedit_a_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DOCBOOKSTYLE = @DOCBOOKSTYLE@ +DOCBOOKTARGETS = @DOCBOOKTARGETS@ +DOT = @DOT@ +DOTPATH = @DOTPATH@ +DOXYGEN = @DOXYGEN@ +DOXYGEN_TREEVIEW = @DOXYGEN_TREEVIEW@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FLUIDSYNTHDIRS = @FLUIDSYNTHDIRS@ +FST_CFLAGS = @FST_CFLAGS@ +FST_LIBS = @FST_LIBS@ +Fluidsynth_CFLAGS = @Fluidsynth_CFLAGS@ +Fluidsynth_LIBS = @Fluidsynth_LIBS@ +GIVERTCAP = @GIVERTCAP@ +GREP = @GREP@ +HAVEDOT = @HAVEDOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_LIBS = @JACK_LIBS@ +JADE = @JADE@ +LASH_CFLAGS = @LASH_CFLAGS@ +LASH_LIBS = @LASH_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LO_CFLAGS = @LO_CFLAGS@ +LO_LIBS = @LO_LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MUSECXXFLAGS = @MUSECXXFLAGS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NSGMLS = @NSGMLS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PCH = @PCH@ +PERL = @PERL@ +PKG_CONFIG = @PKG_CONFIG@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIB = @PYTHON_LIB@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QTDIR_BIN = @QTDIR_BIN@ +QTDIR_INC = @QTDIR_INC@ +QT_LIBS = @QT_LIBS@ +RANLIB = @RANLIB@ +SAMPLERATE_CFLAGS = @SAMPLERATE_CFLAGS@ +SAMPLERATE_LIBS = @SAMPLERATE_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ +SNDFILE_LIBS = @SNDFILE_LIBS@ +STRIP = @STRIP@ +SUIDBUILD = @SUIDBUILD@ +SUIDINSTALL = @SUIDINSTALL@ +USE_SSE = @USE_SSE@ +UUID_CFLAGS = @UUID_CFLAGS@ +UUID_LIBS = @UUID_LIBS@ +VERSION = @VERSION@ +XMKMF = @XMKMF@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +have_docbook = @have_docbook@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +synth_fluid = @synth_fluid@ +synth_fluidsynth = @synth_fluidsynth@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AM_CXXFLAGS = $(MUSECXXFLAGS) -I.. -I$(top_srcdir)/synti \ + -I$(top_srcdir)/muse/widgets -DQT_SHARED -DQT_THREAD_SUPPORT \ + -DQT_PLUGIN $(QTDIR_INC) -DQT3_SUPPORT $(am__append_1) \ + $(am__append_2) +AM_CPPFLAGS = +MOC = $(QTDIR_BIN)/moc +#UIC = $(QTDIR_BIN)/uic3 +UIC = /usr/bin/uic3 +UIFILES = $(wildcard *.ui) +MOCFILES = $(shell for h in $(filter %.h,$(SOURCES)); do \ + if grep -q Q_OBJECT $$h; then \ + echo $$h | sed "s/\(.*\)\.h/moc_\1.cpp/"; \ + fi; \ + done) + +BUILT_SOURCES = $(MOCFILES) $(UIFILES:%.ui=%.h) +MOSTLYCLEANFILES = $(MOCFILES) $(UIFILES:%.ui=%.h) +SUFFIXES = .ui .h.gch +noinst_LIBRARIES = libmidiedit.a +dist_libmidiedit_a_SOURCES = \ + drummap.cpp drummap.h \ + cmd.h \ + pianoroll.cpp pianoroll.h \ + piano.cpp piano.h \ + prcanvas.cpp prcanvas.h \ + quantconfig.cpp quantconfig.h \ + drumedit.cpp drumedit.h \ + dlist.cpp dlist.h \ + dcanvas.cpp dcanvas.h \ + ecanvas.cpp ecanvas.h + +nodist_libmidiedit_a_SOURCES = \ + moc_pianoroll.cpp \ + moc_piano.cpp \ + moc_prcanvas.cpp \ + moc_quantconfig.cpp \ + moc_drumedit.cpp \ + moc_dlist.cpp \ + moc_dcanvas.cpp \ + moc_ecanvas.cpp + +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: .ui .h.gch .cpp .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/common.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu muse/midiedit/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu muse/midiedit/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-noinstLIBRARIES: + -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) +libmidiedit.a: $(libmidiedit_a_OBJECTS) $(libmidiedit_a_DEPENDENCIES) + -rm -f libmidiedit.a + $(libmidiedit_a_AR) libmidiedit.a $(libmidiedit_a_OBJECTS) $(libmidiedit_a_LIBADD) + $(RANLIB) libmidiedit.a + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dcanvas.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dlist.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/drumedit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/drummap.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecanvas.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/moc_dcanvas.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/moc_dlist.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/moc_drumedit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/moc_ecanvas.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/moc_piano.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/moc_pianoroll.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/moc_prcanvas.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/moc_quantconfig.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/piano.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pianoroll.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prcanvas.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/quantconfig.Po@am__quote@ + +.cpp.o: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< + +.cpp.obj: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.cpp.lo: +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-am +all-am: Makefile $(LIBRARIES) +installdirs: +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +clean: clean-am + +clean-am: clean-generic clean-libtool clean-noinstLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: all check install install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-noinstLIBRARIES ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags uninstall uninstall-am + + +de: + @for base in $(MOCFILES); do echo -e "\t$${base}.cpp $${base}.h \\"; done + +nde: + @for base in $(MOCFILES); do echo -e "\tmoc_$${base}.cpp \\"; done + +.ui.o: %.h + $(UIC) -L $(top_srcdir)/muse/widgets -o $*.cpp -impl $*.h $*.ui + $(MOC) $*.h >> $*.cpp + $(CXXCOMPILE) -c $*.cpp -o $*.o + $(RM) $*.cpp moc_$*.cpp moc_$*.o + +.ui.lo: %.h + $(UIC) -L $(top_srcdir)/muse/widgets -o $*.cpp -impl $*.h $*.ui + $(MOC) $*.h >> $*.cpp + $(LTCXXCOMPILE) -c $*.cpp -o $*.lo + $(RM) $*.cpp moc_$*.cpp moc_$*.lo moc_$*.o + +moc_%.cpp: %.h + $(MOC) $< -o $@ + +%.h: %.ui + $(UIC) -o $@ $< +# $(UIC) -L $(top_srcdir)/muse/widgets -o $@ $< + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/muse2/muse/midiedit/cmd.h b/muse2/muse/midiedit/cmd.h new file mode 100644 index 00000000..abbcdcf3 --- /dev/null +++ b/muse2/muse/midiedit/cmd.h @@ -0,0 +1,26 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: cmd.h,v 1.1.1.1 2003/10/27 18:52:20 wschweer Exp $ +// (C) Copyright 2000 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __CMD_H__ +#define __CMD_H__ + +#define CMD_LEFT 0 +#define CMD_RIGHT 1 +#define CMD_INSERT 2 +#define CMD_DELETE 3 +#define CMD_1 4 +#define CMD_2 5 +#define CMD_3 6 +#define CMD_4 7 +#define CMD_5 8 +#define CMD_6 9 +#define CMD_7 10 +#define CMD_T 11 +#define CMD_period 12 + +#endif + diff --git a/muse2/muse/midiedit/dcanvas.cpp b/muse2/muse/midiedit/dcanvas.cpp new file mode 100644 index 00000000..65138bb4 --- /dev/null +++ b/muse2/muse/midiedit/dcanvas.cpp @@ -0,0 +1,1291 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: dcanvas.cpp,v 1.16.2.10 2009/10/15 22:45:50 terminator356 Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include +#include +#include +//Added by qt3to4: +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include "dcanvas.h" +#include "midieditor.h" +#include "drummap.h" +#include "event.h" +#include "mpevent.h" +#include "xml.h" +#include "globals.h" +#include "midiport.h" +#include "audio.h" +#include "velocity.h" + +#define CARET 10 +#define CARET2 5 + +//--------------------------------------------------------- +// DEvent +//--------------------------------------------------------- + +DEvent::DEvent(Event e, Part* p) + : CItem(e, p) + { + int instr = e.pitch(); + int y = instr * TH + TH/2; + int tick = e.tick() + p->tick(); + setPos(QPoint(tick, y)); + setBBox(QRect(-CARET2, -CARET2, CARET, CARET)); + } + +//--------------------------------------------------------- +// addItem +//--------------------------------------------------------- + +void DrumCanvas::addItem(Part* part, Event& event) + { + if (signed(event.tick())<0) { + printf("ERROR: trying to add event before current part!\n"); + return; + } + + DEvent* ev = new DEvent(event, part); + items.add(ev); + + int diff = event.endTick()-part->lenTick(); + if (diff > 0) {// too short part? extend it + //printf("addItem - this code should not be run!\n"); + //Part* newPart = part->clone(); + //newPart->setLenTick(newPart->lenTick()+diff); + //audio->msgChangePart(part, newPart,false); + //part = newPart; + part->setLenTick(part->lenTick()+diff); + } + } + +//--------------------------------------------------------- +// DrumCanvas +//--------------------------------------------------------- + +DrumCanvas::DrumCanvas(MidiEditor* pr, QWidget* parent, int sx, + int sy, const char* name) + : EventCanvas(pr, parent, sx, sy, name) + { + setVirt(false); + songChanged(SC_TRACK_INSERTED); + } + +//--------------------------------------------------------- +// moveCanvasItems +//--------------------------------------------------------- + +void DrumCanvas::moveCanvasItems(CItemList& items, int dp, int dx, DragType dtype, int* pflags) +{ + if(editor->parts()->empty()) + return; + + PartsToChangeMap parts2change; + + int modified = 0; + for(iPart ip = editor->parts()->begin(); ip != editor->parts()->end(); ++ip) + { + Part* part = ip->second; + if(!part) + continue; + + int npartoffset = 0; + for(iCItem ici = items.begin(); ici != items.end(); ++ici) + { + CItem* ci = ici->second; + if(ci->part() != part) + continue; + + int x = ci->pos().x() + dx; + int y = pitch2y(y2pitch(ci->pos().y()) + dp); + QPoint newpos = raster(QPoint(x, y)); + + // Test moving the item... + DEvent* nevent = (DEvent*) ci; + Event event = nevent->event(); + x = newpos.x(); + if(x < 0) + x = 0; + int ntick = editor->rasterVal(x) - part->tick(); + if(ntick < 0) + ntick = 0; + int diff = ntick + event.lenTick() - part->lenTick(); + + // If moving the item would require a new part size... + if(diff > npartoffset) + npartoffset = diff; + } + + if(npartoffset > 0) + { + // Create new part... + // if there are several events that are moved outside the part, it will be recreated for each + // so the part _in_ the event will not be valid, ask the authority. +// Part* newPart = part->clone(); + //Part* newPart = Canvas::part()->clone(); + +// newPart->setLenTick(newPart->lenTick() + npartoffset); + //audio->msgChangePart(part, newPart,false); + +// modified = SC_PART_MODIFIED; + + // BUG FIX: #1650953 + // Added by T356. + // Fixes posted "select and drag past end of part - crashing" bug +// for(iPart ip = editor->parts()->begin(); ip != editor->parts()->end(); ++ip) +// { +// if(ip->second == part) +// { +// editor->parts()->erase(ip); +// break; +// } +// } + +// editor->parts()->add(newPart); +// audio->msgChangePart(part, newPart,false); + +// if(parts2change.find(part) == parts2change.end()) +// parts2change.insert(std::pair (part, newPart)); + iPartToChange ip2c = parts2change.find(part); + if(ip2c == parts2change.end()) + { + PartToChange p2c = {0, npartoffset}; + parts2change.insert(std::pair (part, p2c)); + } + else + ip2c->second.xdiff = npartoffset; + + + //part = newPart; // reassign + //item->setPart(part); + //item->setEvent(newEvent); + //curPart = part; + //curPartId = curPart->sn(); + + } + } + + for(iPartToChange ip2c = parts2change.begin(); ip2c != parts2change.end(); ++ip2c) + { + Part* opart = ip2c->first; + int diff = ip2c->second.xdiff; + + Part* newPart = opart->clone(); + + newPart->setLenTick(newPart->lenTick() + diff); + + modified = SC_PART_MODIFIED; + + // BUG FIX: #1650953 + // Added by T356. + // Fixes posted "select and drag past end of part - crashing" bug + for(iPart ip = editor->parts()->begin(); ip != editor->parts()->end(); ++ip) + { + if(ip->second == opart) + { + editor->parts()->erase(ip); + break; + } + } + + editor->parts()->add(newPart); + // Indicate no undo, and do port controller values but not clone parts. + //audio->msgChangePart(opart, newPart, false); + audio->msgChangePart(opart, newPart, false, true, false); + + ip2c->second.npart = newPart; + + } + + iPartToChange icp = parts2change.find(curPart); + if(icp != parts2change.end()) + { + curPart = icp->second.npart; + curPartId = curPart->sn(); + } + + std::vector< CItem* > doneList; + typedef std::vector< CItem* >::iterator iDoneList; + + for(iCItem ici = items.begin(); ici != items.end(); ++ici) + { + CItem* ci = ici->second; + + // If this item's part is in the parts2change list, change the item's part to the new part. + Part* pt = ci->part(); + iPartToChange ip2c = parts2change.find(pt); + if(ip2c != parts2change.end()) + ci->setPart(ip2c->second.npart); + + int x = ci->pos().x(); + int y = ci->pos().y(); + int nx = x + dx; + int ny = pitch2y(y2pitch(y) + dp); + QPoint newpos = raster(QPoint(nx, ny)); + selectItem(ci, true); + + iDoneList idl; + for(idl = doneList.begin(); idl != doneList.end(); ++idl) + // This compares EventBase pointers to see if they're the same... + if((*idl)->event() == ci->event()) + break; + + // Do not process if the event has already been processed (meaning it's an event in a clone part)... + //if(moveItem(ci, newpos, dtype)) + if(idl != doneList.end()) + // Just move the canvas item. + ci->move(newpos); + else + { + // Currently moveItem always returns true. + if(moveItem(ci, newpos, dtype)) + { + // Add the canvas item to the list of done items. + doneList.push_back(ci); + // Move the canvas item. + ci->move(newpos); + } + } + + if(moving.size() == 1) { + itemReleased(curItem, newpos); + } + if(dtype == MOVE_COPY || dtype == MOVE_CLONE) + selectItem(ci, false); + } + + if(pflags) + *pflags = modified; +} + +//--------------------------------------------------------- +// moveItem +//--------------------------------------------------------- + +// Changed by T356. +//bool DrumCanvas::moveItem(CItem* item, const QPoint& pos, DragType dtype, int* pflags) +bool DrumCanvas::moveItem(CItem* item, const QPoint& pos, DragType dtype) + { + DEvent* nevent = (DEvent*) item; + + // Changed by T356. + //MidiPart* part = (MidiPart*)Canvas::part(); // part can be dynamically recreated, ask the authority + MidiPart* part = (MidiPart*)nevent->part(); + + Event event = nevent->event(); + int x = pos.x(); + if (x < 0) + x = 0; + int ntick = editor->rasterVal(x) - part->tick(); + if (ntick < 0) + ntick = 0; + int npitch = y2pitch(pos.y()); + Event newEvent = event.clone(); + + newEvent.setPitch(npitch); + newEvent.setTick(ntick); + + // Removed by T356. + /* + // Added by T356. + int modified = 0; + //song->startUndo(); + int diff = newEvent.endTick()-part->lenTick(); + if (diff > 0) // too short part? extend it + { + // if there are several events that are moved outside the part, it will be recreated for each + // so the part _in_ the event will not be valid, ask the authority. + //Part* newPart = part->clone(); + MidiPart* newPart = (MidiPart*)Canvas::part()->clone(); + newPart->setLenTick(newPart->lenTick()+diff); + audio->msgChangePart(Canvas::part(), newPart,false); + + modified = SC_PART_MODIFIED; + part = newPart; // reassign + for(iPart i = editor->parts()->begin(); i != editor->parts()->end(); ++i) + { + if(i->second == Canvas::part()) + { + editor->parts()->erase(i); + break; + } + } + editor->parts()->add(part); + item->setPart(part); + item->setEvent(newEvent); + curPart = part; + curPartId = curPart->sn(); + } + */ + + // Added by T356. + // msgAddEvent and msgChangeEvent (below) will set these, but set them here first? + //item->setPart(part); + item->setEvent(newEvent); + + // Added by T356. + if(((int)newEvent.endTick() - (int)part->lenTick()) > 0) + printf("DrumCanvas::moveItem Error! New event end:%d exceeds length:%d of part:%s\n", newEvent.endTick(), part->lenTick(), part->name().latin1()); + + if (dtype == MOVE_COPY || dtype == MOVE_CLONE) { + // Indicate no undo, and do not do port controller values and clone parts. + //audio->msgAddEvent(newEvent, part, false); + audio->msgAddEvent(newEvent, part, false, false, false); + } + else { + // Indicate no undo, and do not do port controller values and clone parts. + //audio->msgChangeEvent(event, newEvent, part, false); + audio->msgChangeEvent(event, newEvent, part, false, false, false); + } + + // Removed by T356. + //if(pflags) + // *pflags = modified; + + return true; + } + +//--------------------------------------------------------- +// newItem +//--------------------------------------------------------- + +CItem* DrumCanvas::newItem(const QPoint& p, int state) + { + int instr = y2pitch(p.y()); //drumInmap[y2pitch(p.y())]; + int velo = drumMap[instr].lv4; + if (state == Qt::ShiftModifier) + velo = drumMap[instr].lv3; + else if (state == Qt::ControlModifier) + velo = drumMap[instr].lv2; + else if (state == (Qt::ControlModifier | Qt::ShiftModifier)) + velo = drumMap[instr].lv1; + int tick = editor->rasterVal(p.x()); + tick -= curPart->tick(); + Event e(Note); + e.setTick(tick); + e.setPitch(instr); + e.setVelo(velo); + e.setLenTick(drumMap[instr].len); + return new DEvent(e, curPart); + } + +//--------------------------------------------------------- +// resizeItem +//--------------------------------------------------------- + +void DrumCanvas::resizeItem(CItem* item, bool) + { + DEvent* nevent = (DEvent*) item; + Event ev = nevent->event(); + // Indicate do undo, and do not do port controller values and clone parts. + //audio->msgDeleteEvent(ev, nevent->part()); + audio->msgDeleteEvent(ev, nevent->part(), true, false, false); + } + +//--------------------------------------------------------- +// newItem +//--------------------------------------------------------- + +void DrumCanvas::newItem(CItem* item, bool noSnap) + { + DEvent* nevent = (DEvent*) item; + Event event = nevent->event(); + int x = item->x(); + if (!noSnap) + x = editor->rasterVal(x); + event.setTick(x - nevent->part()->tick()); + //int npitch = drumMap[y2pitch(item->y())].enote; + 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; + // Added by T356. Only do notes. + if(!ev.isNote()) + continue; + + if (ev.pitch() == npitch) { + // Indicate do undo, and do not do port controller values and clone parts. + //audio->msgDeleteEvent(ev, nevent->part()); + audio->msgDeleteEvent(ev, nevent->part(), true, false, false); + return; + } + } + + // Added by T356. + Part* part = nevent->part(); + song->startUndo(); + int modified=SC_EVENT_MODIFIED; + int diff = event.endTick()-part->lenTick(); + if (diff > 0) {// too short part? extend it + //printf("extend Part!\n"); + Part* newPart = part->clone(); + newPart->setLenTick(newPart->lenTick()+diff); + // Indicate no undo, and do port controller values but not clone parts. + //audio->msgChangePart(part, newPart,false); + audio->msgChangePart(part, newPart, false, true, false); + modified=modified|SC_PART_MODIFIED; + part = newPart; // reassign + } + // Indicate no undo, and do not do port controller values and clone parts. + //audio->msgAddEvent(event, part,false); + audio->msgAddEvent(event, part, false, false, false); + song->endUndo(modified); + + //audio->msgAddEvent(event, nevent->part()); + } + +//--------------------------------------------------------- +// deleteItem +//--------------------------------------------------------- + +bool DrumCanvas::deleteItem(CItem* item) + { + Event ev = ((DEvent*)item)->event(); + // Indicate do undo, and do not do port controller values and clone parts. + //audio->msgDeleteEvent(ev, ((DEvent*)item)->part()); + audio->msgDeleteEvent(ev, ((DEvent*)item)->part(), true, false, false); + return false; + } + +//--------------------------------------------------------- +// drawItem +//--------------------------------------------------------- + +void DrumCanvas::drawItem(QPainter&p, const CItem*item, const QRect& rect) + { + DEvent* e = (DEvent*) item; + int x = 0, y = 0; + x = mapx(item->pos().x()); + y = mapy(item->pos().y()); + Q3PointArray pa(4); + pa.setPoint(0, x - CARET2, y); + pa.setPoint(1, x, y - CARET2); + pa.setPoint(2, x + CARET2, y); + pa.setPoint(3, x, y + CARET2); + QRect r(pa.boundingRect()); + r = r.intersect(rect); + if(!r.isValid()) + return; + + p.setPen(Qt::black); + + if (e->part() != curPart) + { + if(item->isMoving()) + p.setBrush(Qt::gray); + else if(item->isSelected()) + p.setBrush(Qt::black); + else + p.setBrush(Qt::lightGray); + } + else if (item->isMoving()) { + p.setBrush(Qt::gray); + } + else if (item->isSelected()) + { + p.setBrush(Qt::black); + } + else + { + int velo = e->event().velo(); + DrumMap* dm = &drumMap[y2pitch(y)]; //Get the drum item + QColor color; + 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); + p.setBrush(color); + } + + p.drawPolygon(pa); + } + +//--------------------------------------------------------- +// drawMoving +// draws moving items +//--------------------------------------------------------- + +void DrumCanvas::drawMoving(QPainter& p, const CItem* item, const QRect& rect) + { + //if(((DEvent*)item)->part() != curPart) + // return; + //if(!item->isMoving()) + // return; + Q3PointArray pa(4); + QPoint pt = map(item->mp()); + int x = pt.x(); + int y = pt.y(); + pa.setPoint(0, x-CARET2, y + TH/2); + pa.setPoint(1, x, y + TH/2+CARET2); + pa.setPoint(2, x+CARET2, y + TH/2); + pa.setPoint(3, x, y + (TH-CARET)/2); + QRect mr(pa.boundingRect()); + mr = mr.intersect(rect); + if(!mr.isValid()) + return; + p.setPen(Qt::black); + p.setBrush(Qt::black); + p.drawPolygon(pa); + } + +//--------------------------------------------------------- +// drawCanvas +//--------------------------------------------------------- + +extern void drawTickRaster(QPainter& p, int, int, int, int, int); + +void DrumCanvas::drawCanvas(QPainter& p, const QRect& rect) + { + int x = rect.x(); + int y = rect.y(); + int w = rect.width(); + int h = rect.height(); + + //--------------------------------------------------- + // horizontal lines + //--------------------------------------------------- + + int yy = ((y-1) / TH) * TH + TH; + for (; yy < y + h; yy += TH) { + p.setPen(Qt::gray); + p.drawLine(x, yy, x + w, yy); + } + + //--------------------------------------------------- + // vertical lines + //--------------------------------------------------- + + drawTickRaster(p, x, y, w, h, editor->raster()); + } + +//--------------------------------------------------------- +// y2pitch +//--------------------------------------------------------- + +int DrumCanvas::y2pitch(int y) const + { + int pitch = y/TH; + if (pitch >= DRUM_MAPSIZE) + pitch = DRUM_MAPSIZE-1; + return pitch; + } + +//--------------------------------------------------------- +// pitch2y +//--------------------------------------------------------- + +int DrumCanvas::pitch2y(int pitch) const + { + return pitch * TH; + } + +//--------------------------------------------------------- +// cmd +//--------------------------------------------------------- + +void DrumCanvas::cmd(int cmd) + { + switch(cmd) { + case CMD_CUT: + copy(); + song->startUndo(); + for (iCItem i = items.begin(); i != items.end(); ++i) { + if (!i->second->isSelected()) + continue; + DEvent* e = (DEvent*)(i->second); + Event event = e->event(); + // Indicate no undo, and do not do port controller values and clone parts. + //audio->msgDeleteEvent(event, e->part(), false); + audio->msgDeleteEvent(event, e->part(), false, false, false); + } + song->endUndo(SC_EVENT_REMOVED); + break; + case CMD_COPY: + copy(); + break; + case CMD_PASTE: + paste(); + break; + case CMD_SELECT_ALL: // select all + for (iCItem k = items.begin(); k != items.end(); ++k) { + if (!k->second->isSelected()) + selectItem(k->second, true); + } + break; + case CMD_SELECT_NONE: // select none + deselectAll(); + break; + case CMD_SELECT_INVERT: // invert selection + for (iCItem k = items.begin(); k != items.end(); ++k) { + selectItem(k->second, !k->second->isSelected()); + } + break; + case CMD_SELECT_ILOOP: // select inside loop + for (iCItem k = items.begin(); k != items.end(); ++k) { + DEvent* nevent =(DEvent*)(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); + } + break; + case CMD_SELECT_OLOOP: // select outside loop + for (iCItem k = items.begin(); k != items.end(); ++k) { + DEvent* nevent = (DEvent*)(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); + } + break; + case CMD_SELECT_PREV_PART: // select previous part + { + Part* pt = editor->curCanvasPart(); + Part* newpt = pt; + PartList* pl = editor->parts(); + for(iPart ip = pl->begin(); ip != pl->end(); ++ip) + if(ip->second == pt) + { + if(ip == pl->begin()) + ip = pl->end(); + --ip; + newpt = ip->second; + break; + } + if(newpt != pt) + editor->setCurCanvasPart(newpt); + } + break; + case CMD_SELECT_NEXT_PART: // select next part + { + Part* pt = editor->curCanvasPart(); + Part* newpt = pt; + PartList* pl = editor->parts(); + for(iPart ip = pl->begin(); ip != pl->end(); ++ip) + if(ip->second == pt) + { + ++ip; + if(ip == pl->end()) + ip = pl->begin(); + newpt = ip->second; + break; + } + if(newpt != pt) + editor->setCurCanvasPart(newpt); + } + break; + case CMD_DEL: + if (selectionSize()) { + song->startUndo(); + for (iCItem i = items.begin(); i != items.end(); ++i) { + if (!i->second->isSelected()) + continue; + Event ev = i->second->event(); + // Indicate no undo, and do not do port controller values and clone parts. + //audio->msgDeleteEvent(ev, i->second->part(), false); + audio->msgDeleteEvent(ev, i->second->part(), false, false, false); + } + song->endUndo(SC_EVENT_REMOVED); + } + return; + + case CMD_SAVE: + case CMD_LOAD: + printf("DrumCanvas:: cmd not implemented %d\n", cmd); + break; + + case CMD_FIXED_LEN: //Set notes to the length specified in the drummap + if (!selectionSize()) + break; + song->startUndo(); + for (iCItem k = items.begin(); k != items.end(); ++k) { + if (k->second->isSelected()) { + DEvent* devent = (DEvent*)(k->second); + Event event = devent->event(); + Event newEvent = event.clone(); + newEvent.setLenTick(drumMap[event.pitch()].len); + // Indicate no undo, and do not do port controller values and clone parts. + //audio->msgChangeEvent(event, newEvent, devent->part() , false); + audio->msgChangeEvent(event, newEvent, devent->part(), false, false, false); + } + } + song->endUndo(SC_EVENT_MODIFIED); + break; + case CMD_LEFT: + { + int frames = pos[0] - editor->rasterStep(pos[0]); + if (frames < 0) + frames = 0; + Pos p(frames,true); + song->setPos(0, p, true, true, true); + } + break; + case CMD_RIGHT: + { + Pos p(pos[0] + editor->rasterStep(pos[0]), true); + song->setPos(0, p, true, true, true); + } + break; + case CMD_MODIFY_VELOCITY: + { + Velocity w(this); + w.setRange(0); //TODO: Make this work! Probably put _to & _toInit in ecanvas instead + if (!w.exec()) + break; + int range = w.range(); // all, selected, looped, sel+loop + int rate = w.rateVal(); + int offset = w.offsetVal(); + + song->startUndo(); + for (iCItem k = items.begin(); k != items.end(); ++k) { + DEvent* devent = (DEvent*)(k->second); + Event event = devent->event(); + if (event.type() != Note) + continue; + unsigned tick = event.tick(); + bool selected = k->second->isSelected(); + bool inLoop = (tick >= song->lpos()) && (tick < song->rpos()); + + if ((range == 0) + || (range == 1 && selected) + || (range == 2 && inLoop) + || (range == 3 && 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); + // Indicate no undo, and do not do port controller values and clone parts. + //audio->msgChangeEvent(event, newEvent, devent->part(), false); + audio->msgChangeEvent(event, newEvent, devent->part(), false, false, false); + } + } + } + song->endUndo(SC_EVENT_MODIFIED); + } + break; + } + updateSelection(); + redraw(); + } + +//--------------------------------------------------------- +// getTextDrag +//--------------------------------------------------------- + +Q3TextDrag* DrumCanvas::getTextDrag(QWidget* parent) + { + //--------------------------------------------------- + // generate event list from selected events + //--------------------------------------------------- + + EventList el; + unsigned startTick = MAXINT; + for (iCItem i = items.begin(); i != items.end(); ++i) { + if (!i->second->isSelected()) + continue; + DEvent* ne = (DEvent*)(i->second); + Event e = ne->event(); + if (startTick == MAXINT) + startTick = e.tick(); + el.add(e); + } + + //--------------------------------------------------- + // write events as XML into tmp file + //--------------------------------------------------- + + FILE* tmp = tmpfile(); + if (tmp == 0) { + fprintf(stderr, "EventCanvas::copy() fopen failed: %s\n", + strerror(errno)); + return 0; + } + Xml xml(tmp); + + int level = 0; + for (ciEvent e = el.begin(); e != el.end(); ++e) + e->second.write(level, xml, -startTick); + + //--------------------------------------------------- + // read tmp file into QTextDrag Object + //--------------------------------------------------- + + fflush(tmp); + struct stat f_stat; + if (fstat(fileno(tmp), &f_stat) == -1) { + fprintf(stderr, "EventCanvas::copy() fstat failes:<%s>\n", + strerror(errno)); + fclose(tmp); + return 0; + } + int n = f_stat.st_size; + char* fbuf = (char*)mmap(0, n+1, PROT_READ|PROT_WRITE, + MAP_PRIVATE, fileno(tmp), 0); + fbuf[n] = 0; + Q3TextDrag* drag = new Q3TextDrag(QString(fbuf), parent); + drag->setSubtype("eventlist"); + munmap(fbuf, n); + fclose(tmp); + return drag; + } + +//--------------------------------------------------------- +// copy +// cut copy paste +//--------------------------------------------------------- + +void DrumCanvas::copy() + { + Q3TextDrag* drag = getTextDrag(0); + if (drag) + QApplication::clipboard()->setData(drag, QClipboard::Clipboard); + } + +//--------------------------------------------------------- +// paste +//--------------------------------------------------------- + +int DrumCanvas::pasteAt(const QString& pt, int pos) + { + const char* p = pt.latin1(); + Xml xml(p); + + // Added by T356. + int modified = SC_EVENT_INSERTED; + + song->startUndo(); + for (;;) { + Xml::Token token = xml.parse(); + QString tag = xml.s1(); + switch (token) { + case Xml::Error: + case Xml::End: + //song->endUndo(SC_EVENT_INSERTED); By T356 + song->endUndo(modified); + return pos; + case Xml::TagStart: + if (tag == "event") { + Event e(Note); + e.read(xml); + + // Added by T356. + int tick = e.tick() + pos - curPart->tick(); + if (tick<0) { + printf("DrumCanvas::pasteAt ERROR: trying to add event before current part!\n"); + song->endUndo(SC_EVENT_INSERTED); + //delete el; + return pos; + } + e.setTick(tick); + int diff = e.endTick() - curPart->lenTick(); + if (diff > 0) {// too short part? extend it + Part* newPart = curPart->clone(); + newPart->setLenTick(newPart->lenTick()+diff); + // Indicate no undo, and do port controller values but not clone parts. + //audio->msgChangePart(curPart, newPart,false); + audio->msgChangePart(curPart, newPart, false, true, false); + + modified=modified|SC_PART_MODIFIED; + curPart = newPart; // reassign + } + + // Indicate no undo, and do not do port controller values and clone parts. + //audio->msgAddEvent(e, curPart, false); + audio->msgAddEvent(e, curPart, false, false, false); + } + else + //xml.unknown("EventCanvas::paste"); By T356 + xml.unknown("DCanvas::pasteAt"); + break; + case Xml::TagEnd: + default: + break; + } + } + } + +//--------------------------------------------------------- +// paste +// paste events +//--------------------------------------------------------- + +void DrumCanvas::paste() + { +// Q3CString subtype("eventlist"); // ddskrjo + QString subtype("eventlist"); + QMimeSource* ms = QApplication::clipboard()->data(); + QString pt; + if (!Q3TextDrag::decode(ms, pt, subtype)) { + printf("cannot paste: bad data type\n"); + return; + } + pasteAt(pt, song->cpos()); + } + +//--------------------------------------------------------- +// startDrag +//--------------------------------------------------------- + +void DrumCanvas::startDrag(CItem* /* item*/, bool copymode) + { + Q3TextDrag* drag = getTextDrag(this); + if (drag) { +// QApplication::clipboard()->setData(drag, QClipboard::Clipboard); + + if (copymode) + drag->dragCopy(); + else + drag->dragMove(); + } + } + +//--------------------------------------------------------- +// dragEnterEvent +//--------------------------------------------------------- + +void DrumCanvas::dragEnterEvent(QDragEnterEvent* event) + { + event->accept(Q3TextDrag::canDecode(event)); + } + +//--------------------------------------------------------- +// dragMoveEvent +//--------------------------------------------------------- + +void DrumCanvas::dragMoveEvent(QDragMoveEvent*) + { +// printf("drag move %x\n", this); + } + +//--------------------------------------------------------- +// dragLeaveEvent +//--------------------------------------------------------- + +void DrumCanvas::dragLeaveEvent(QDragLeaveEvent*) + { +// printf("drag leave\n"); + } + +//--------------------------------------------------------- +// dropEvent +//--------------------------------------------------------- + +void DrumCanvas::viewDropEvent(QDropEvent* event) + { + 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); + } + } + +//--------------------------------------------------------- +// keyPressed +//--------------------------------------------------------- + +void DrumCanvas::keyPressed(int index, bool) + { + int port = drumMap[index].port; + int channel = drumMap[index].channel; + int pitch = drumMap[index].anote; + + // play note: + MidiPlayEvent e(0, port, channel, 0x90, pitch, 127); + audio->msgPlayMidiEvent(&e); + } + +//--------------------------------------------------------- +// keyReleased +//--------------------------------------------------------- + +void DrumCanvas::keyReleased(int index, bool) + { + int port = drumMap[index].port; + int channel = drumMap[index].channel; + int pitch = drumMap[index].anote; + + // release note: + MidiPlayEvent e(0, port, channel, 0x90, pitch, 0); + audio->msgPlayMidiEvent(&e); + } + +//--------------------------------------------------------- +// mapChanged +//--------------------------------------------------------- + +void DrumCanvas::mapChanged(int spitch, int dpitch) + { + //TODO: Circumvent undo behaviour, since this isn't really a true change of the events, + // but merely a change in pitch because the pitch relates to the order of the dlist. + // Right now the sequencer spits out internalError: undoOp without startUndo() if start/stopundo is there, which is misleading + // If start/stopundo is there, undo misbehaves since it doesn't undo but messes things up + // Other solution: implement a specific undo-event for this (SC_DRUMMAP_MODIFIED or something) which undoes movement of + // dlist-items (ml) + + std::vector< std::pair > delete_events; + std::vector< std::pair > add_events; + + typedef std::vector< std::pair >::iterator idel_ev; + typedef std::vector< std::pair >::iterator iadd_ev; + + /* + class delete_events : public std::vector< Part*, Event* > + { + public: + idel_ev find(Part* p, Event* e) + { + + }; + }; + class add_events : public std::vector< Part*, Event > + { + public: + iadd_ev find(Part* p, Event& e) + { + + }; + }; + */ + + MidiTrackList* tracks = song->midis(); + for (ciMidiTrack t = tracks->begin(); t != tracks->end(); t++) { + MidiTrack* curTrack = *t; + if (curTrack->type() != Track::DRUM) + continue; + + MidiPort* mp = &midiPorts[curTrack->outPort()]; + PartList* parts= curTrack->parts(); + for (iPart part = parts->begin(); part != parts->end(); ++part) { + EventList* events = part->second->events(); + Part* thePart = part->second; + for (iEvent i = events->begin(); i != events->end(); ++i) { + Event event = i->second; + if(event.type() != Controller && event.type() != Note) + continue; + int pitch = event.pitch(); + bool drc = false; + // Is it a drum controller event, according to the track port's instrument? + if(event.type() == Controller && mp->drumController(event.dataA())) + { + drc = true; + pitch = event.dataA() & 0x7f; + } + + if (pitch == spitch) { + Event* spitch_event = &(i->second); + delete_events.push_back(std::pair(thePart, spitch_event)); + Event newEvent = spitch_event->clone(); + if(drc) + newEvent.setA((newEvent.dataA() & ~0xff) | dpitch); + else + newEvent.setPitch(dpitch); + add_events.push_back(std::pair(thePart, newEvent)); + } + else if (pitch == dpitch) { + Event* dpitch_event = &(i->second); + delete_events.push_back(std::pair(thePart, dpitch_event)); + Event newEvent = dpitch_event->clone(); + if(drc) + newEvent.setA((newEvent.dataA() & ~0xff) | spitch); + else + newEvent.setPitch(spitch); + add_events.push_back(std::pair(thePart, newEvent)); + } + } + } + } + + song->startUndo(); + for (idel_ev i = delete_events.begin(); i != delete_events.end(); i++) { + //std::pair pair = *i; + //Part* thePart = pair.first; + //Event* theEvent = pair.second; + Part* thePart = (*i).first; + Event* theEvent = (*i).second; + // Indicate no undo, and do port controller values but not clone parts. + //audio->msgDeleteEvent(*theEvent, thePart, false); + audio->msgDeleteEvent(*theEvent, thePart, false, true, false); + } + + DrumMap dm = drumMap[spitch]; + drumMap[spitch] = drumMap[dpitch]; + drumMap[dpitch] = dm; + drumInmap[int(drumMap[spitch].enote)] = spitch; + drumOutmap[int(drumMap[int(spitch)].anote)] = spitch; + drumInmap[int(drumMap[int(dpitch)].enote)] = dpitch; + drumOutmap[int(drumMap[int(dpitch)].anote)] = dpitch; + + for (iadd_ev i = add_events.begin(); i != add_events.end(); i++) { + //std::pair pair = *i; + //Part* thePart = pair.first; + //Event& theEvent = pair.second; + Part* thePart = (*i).first; + Event& theEvent = (*i).second; + // Indicate no undo, and do port controller values but not clone parts. + //audio->msgAddEvent(theEvent, thePart, false); + audio->msgAddEvent(theEvent, thePart, false, true, false); + } + + song->endUndo(SC_EVENT_MODIFIED); + song->update(SC_DRUMMAP); + } + +//--------------------------------------------------------- +// 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; + DEvent* e = (DEvent*)(i->second); + Event event = e->event(); + if (event.type() != Note) + continue; + + MidiPart* part = (MidiPart*)(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); + // Indicate do not do port controller values and clone parts. + //song->undoOp(UndoOp::ModifyEvent, newEvent, event, part); + song->undoOp(UndoOp::ModifyEvent, newEvent, event, part, false, false); + } + song->endUndo(SC_EVENT_MODIFIED); + audio->msgIdle(false); + } + +//--------------------------------------------------------- +// curPartChanged +//--------------------------------------------------------- + +void DrumCanvas::curPartChanged() + { + editor->setCaption(getCaption()); + } + diff --git a/muse2/muse/midiedit/dcanvas.h b/muse2/muse/midiedit/dcanvas.h new file mode 100644 index 00000000..7f5034fc --- /dev/null +++ b/muse2/muse/midiedit/dcanvas.h @@ -0,0 +1,93 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: dcanvas.h,v 1.8.2.2 2009/02/02 21:38:00 terminator356 Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __DCANVAS_H__ +#define __DCANVAS_H__ + +#include "ecanvas.h" +#include "song.h" +//Added by qt3to4: +#include +#include +#include +#include +#include + +#define TH 18 + +class MidiEditor; + +//--------------------------------------------------------- +// DEvent +// ''visual'' Drum Event +//--------------------------------------------------------- + +class DEvent : public CItem { + public: + DEvent(Event e, Part* p); + }; + +class ScrollScale; +class PianoRoll; +class Q3TextDrag; + +//--------------------------------------------------------- +// DrumCanvas +//--------------------------------------------------------- + +class DrumCanvas : public EventCanvas { + + Q_OBJECT + virtual void drawCanvas(QPainter&, const QRect&); + virtual void drawItem(QPainter&, const CItem*, const QRect&); + virtual void drawMoving(QPainter&, const CItem*, const QRect&); + virtual void moveCanvasItems(CItemList&, int, int, DragType, int*); + // Changed by T356. + //virtual bool moveItem(CItem*, const QPoint&, DragType, int*); + virtual bool moveItem(CItem*, const QPoint&, DragType); + virtual CItem* newItem(const QPoint&, int); + virtual void resizeItem(CItem*, bool); + virtual void newItem(CItem*, bool); + virtual bool deleteItem(CItem*); + + int y2pitch(int y) const; + int pitch2y(int pitch) const; + Q3TextDrag* getTextDrag(QWidget* parent); + void copy(); + int pasteAt(const QString& pt, int pos); + void paste(); + void startDrag(CItem*, bool copymode); + void dragEnterEvent(QDragEnterEvent* event); + void dragMoveEvent(QDragMoveEvent*); + void dragLeaveEvent(QDragLeaveEvent*); + void viewDropEvent(QDropEvent* event); + virtual void addItem(Part*, Event&); + virtual void resizeEvent(QResizeEvent*); + virtual void curPartChanged(); + + signals: + void newWidth(int); + + public slots: + void mapChanged(int, int); + void keyPressed(int, bool); + void keyReleased(int, bool); + + public: + enum { + CMD_CUT, CMD_COPY, CMD_PASTE, CMD_SAVE, CMD_LOAD, CMD_RESET, + CMD_SELECT_ALL, CMD_SELECT_NONE, CMD_SELECT_INVERT, + CMD_SELECT_ILOOP, CMD_SELECT_OLOOP, CMD_SELECT_PREV_PART, CMD_SELECT_NEXT_PART, + CMD_DEL, CMD_FIXED_LEN, CMD_RIGHT, CMD_LEFT, CMD_MODIFY_VELOCITY + }; + DrumCanvas(MidiEditor*, QWidget*, int, int, + const char* name = 0); + void cmd(int); + virtual void modifySelected(NoteInfo::ValType type, int delta); + }; +#endif + diff --git a/muse2/muse/midiedit/dlist.cpp b/muse2/muse/midiedit/dlist.cpp new file mode 100644 index 00000000..24ced3d0 --- /dev/null +++ b/muse2/muse/midiedit/dlist.cpp @@ -0,0 +1,754 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: dlist.cpp,v 1.9.2.7 2009/10/16 21:50:16 terminator356 Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include +#include +#include +#include +//Added by qt3to4: +#include +#include + +#include + +#include "audio.h" +#include "pitchedit.h" +#include "midiport.h" +#include "drummap.h" +#include "icons.h" +#include "dlist.h" +#include "song.h" +#include "scrollscale.h" + +// enum DCols { COL_MUTE=0, COL_NAME, COL_QNT, COL_ENOTE, COL_LEN, +// COL_ANOTE, COL_CHANNEL, COL_PORT, +// COL_LV1, COL_LV2, COL_LV3, COL_LV4, COL_NONE=-1}; + +//--------------------------------------------------------- +// draw +//--------------------------------------------------------- + +void DList::draw(QPainter& p, const QRect& rect) + { + int x = rect.x(); + int y = rect.y(); + int w = rect.width(); + int h = rect.height(); + + //--------------------------------------------------- + // Tracks + //--------------------------------------------------- + + p.setPen(Qt::black); + + for (int i = 0; i < DRUM_MAPSIZE; ++i) { + int yy = i * TH; + if (yy+TH < y) + continue; + if (yy > y + h) + break; + DrumMap* dm = &drumMap[i]; +// if (dm->selected) + if (dm == currentlySelected) + p.fillRect(x, yy, w, TH, Qt::yellow); +// else +// p.eraseRect(x, yy, w, TH); + for (int k = 0; k < header->count(); ++k) { + int x = header->sectionPos(k); + int w = header->sectionSize(k); + QRect r = p.xForm(QRect(x+2, yy, w-4, TH)); + QString s; + int align = Qt::AlignVCenter | Qt::AlignHCenter; + + p.save(); + p.setWorldXForm(false); + switch (k) { + case COL_VOL: + s.setNum(dm->vol); + break; + case COL_QNT: + s.setNum(dm->quant); + break; + case COL_LEN: + s.setNum(dm->len); + break; + case COL_ANOTE: + s = pitch2string(dm->anote); + break; + case COL_ENOTE: + s = pitch2string(dm->enote); + break; + case COL_LV1: + s.setNum(dm->lv1); + break; + case COL_LV2: + s.setNum(dm->lv2); + break; + case COL_LV3: + s.setNum(dm->lv3); + break; + case COL_LV4: + s.setNum(dm->lv4); + break; + case COL_MUTE: + if (dm->mute) { + p.setPen(Qt::red); + const QPixmap& pm = *muteIcon; + p.drawPixmap( + r.x() + r.width()/2 - pm.width()/2, + r.y() + r.height()/2 - pm.height()/2, + pm); + p.setPen(Qt::black); + } + break; + case COL_NAME: + s = dm->name; + align = Qt::AlignVCenter | Qt::AlignLeft; + break; + case COL_CHANNEL: + s.setNum(dm->channel+1); + break; + case COL_PORT: + s.sprintf("%d:%s", dm->port+1, midiPorts[dm->port].portname().latin1()); + align = Qt::AlignVCenter | Qt::AlignLeft; + break; + } + if (!s.isEmpty()) + p.drawText(r, align, s); + p.restore(); + } + } + + //--------------------------------------------------- + // horizontal lines + //--------------------------------------------------- + + p.setPen(Qt::gray); + int yy = (y / TH) * TH; + for (; yy < y + h; yy += TH) { + p.drawLine(x, yy, x + w, yy); + } + + if (drag == DRAG) { + int y = (startY/TH) * TH; + int dy = startY - y; + int yy = curY - dy; + p.setPen(Qt::green); + p.drawLine(x, yy, x + w, yy); + p.drawLine(x, yy+TH, x + w, yy+TH); + p.setPen(Qt::gray); + } + + //--------------------------------------------------- + // vertical Lines + //--------------------------------------------------- + + p.setWorldXForm(false); + int n = header->count(); + x = 0; + for (int i = 0; i < n; i++) { + //x += header->sectionSize(i); + x += header->sectionSize(header->mapToSection(i)); + p.drawLine(x, 0, x, height()); + } + p.setWorldXForm(true); + } + +//--------------------------------------------------------- +// devicesPopupMenu +//--------------------------------------------------------- + +void DList::devicesPopupMenu(DrumMap* t, int x, int y, bool changeAll) + { + Q3PopupMenu* p = midiPortsPopup(this); + int n = p->exec(mapToGlobal(QPoint(x, y)), 0); + bool doemit = false; + if (n != -1) { + if (!changeAll) + { + if(n != t->port) + { + audio->msgIdle(true); + //audio->msgRemapPortDrumCtlEvents(getSelectedInstrument(), -1, -1, n); + song->remapPortDrumCtrlEvents(getSelectedInstrument(), -1, -1, n); + audio->msgIdle(false); + t->port = n; + doemit = true; + } + } + else { + audio->msgIdle(true); + // Delete all port controller events. + //audio->msgChangeAllPortDrumCtrlEvents(false); + song->changeAllPortDrumCtrlEvents(false); + + for (int i = 0; i < DRUM_MAPSIZE; i++) + drumMap[i].port = n; + // Add all port controller events. + //audio->msgChangeAllPortDrumCtrlEvents(true); + song->changeAllPortDrumCtrlEvents(true); + + audio->msgIdle(false); + doemit = true; + } + } + delete p; + if(doemit) + { + int instr = getSelectedInstrument(); + if(instr != -1) + //emit curDrumInstrumentChanged(instr); + song->update(SC_DRUMMAP); + } + } + +//--------------------------------------------------------- +// viewMousePressEvent +//--------------------------------------------------------- + +void DList::viewMousePressEvent(QMouseEvent* ev) + { + int x = ev->x(); + int y = ev->y(); + int button = ev->button(); + bool shift = ev->state() & Qt::ShiftButton; + unsigned pitch = y / TH; + DrumMap* dm = &drumMap[pitch]; + + setCurDrumInstrument(pitch); + + startY = y; + sPitch = pitch; + drag = START_DRAG; + + DCols col = DCols(x2col(x)); + + int val; + int incVal = 0; + if (button == Qt::RightButton) + incVal = 1; + else if (button == Qt::MidButton) + incVal = -1; + + // Check if we're already editing anything and have pressed the mouse + // elsewhere + // In that case, treat it as if a return was pressed + + if (button == Qt::LeftButton) { + if (((editEntry && editEntry != dm) || col != selectedColumn) && editEntry != 0) { + returnPressed(); + } + } + + switch (col) { + case COL_NONE: + break; + case COL_MUTE: + if (button == Qt::LeftButton) + dm->mute = !dm->mute; + break; + case COL_PORT: + if (button == Qt::RightButton) { + bool changeAll = ev->state() & Qt::ControlButton; + devicesPopupMenu(dm, mapx(x), mapy(pitch * TH), changeAll); + } + break; + case COL_VOL: + val = dm->vol + incVal; + if (val < 0) + val = 0; + else if (val > 200) + val = 200; + dm->vol = (unsigned char)val; + break; + case COL_QNT: + dm->quant += incVal; + // ?? range + break; + case COL_ENOTE: + val = dm->enote + incVal; + if (val < 0) + val = 0; + else if (val > 127) + val = 127; + //Check if there is any other drumMap with the same inmap value (there should be one (and only one):-) + //If so, switch the inmap between the instruments + for (int i=0; ienote)] = i; + drumMap[i].enote = dm->enote; + break; + } + } + //TODO: Set all the notes on the track with pitch=dm->enote to pitch=val + dm->enote = val; + drumInmap[val] = pitch; + break; + case COL_LEN: + val = dm->len + incVal; + if (val < 0) + val = 0; + dm->len = val; + break; + case COL_ANOTE: + val = dm->anote + incVal; + if (val < 0) + val = 0; + else if (val > 127) + val = 127; + if(val != dm->anote) + { + audio->msgIdle(true); + //audio->msgRemapPortDrumCtlEvents(pitch, val, -1, -1); + song->remapPortDrumCtrlEvents(pitch, val, -1, -1); + audio->msgIdle(false); + dm->anote = val; + song->update(SC_DRUMMAP); + } + emit keyPressed(pitch, shift);//(dm->anote, shift); + break; + case COL_CHANNEL: + val = dm->channel + incVal; + if (val < 0) + val = 0; + else if (val > 127) + val = 127; + + if (ev->state() & Qt::ControlButton) { + audio->msgIdle(true); + // Delete all port controller events. + //audio->msgChangeAllPortDrumCtrlEvents(false); + song->changeAllPortDrumCtrlEvents(false, true); + + for (int i = 0; i < DRUM_MAPSIZE; i++) + drumMap[i].channel = val; + // Add all port controller events. + //audio->msgChangeAllPortDrumCtrlEvents(true); + song->changeAllPortDrumCtrlEvents(true, true); + audio->msgIdle(false); + song->update(SC_DRUMMAP); + } + else + { + if(val != dm->channel) + { + audio->msgIdle(true); + //audio->msgRemapPortDrumCtlEvents(pitch, -1, val, -1); + song->remapPortDrumCtrlEvents(pitch, -1, val, -1); + audio->msgIdle(false); + dm->channel = val; + song->update(SC_DRUMMAP); + } + } + break; + case COL_LV1: + val = dm->lv1 + incVal; + if (val < 0) + val = 0; + else if (val > 127) + val = 127; + dm->lv1 = val; + break; + case COL_LV2: + val = dm->lv2 + incVal; + if (val < 0) + val = 0; + else if (val > 127) + val = 127; + dm->lv2 = val; + break; + case COL_LV3: + val = dm->lv3 + incVal; + if (val < 0) + val = 0; + else if (val > 127) + val = 127; + dm->lv3 = val; + break; + case COL_LV4: + val = dm->lv4 + incVal; + if (val < 0) + val = 0; + else if (val > 127) + val = 127; + dm->lv4 = val; + break; + case COL_NAME: + emit keyPressed(pitch, shift); //Mapping done on other side, send index + break; +#if 0 + case COL_CHANNEL: + { + int channel = t->channel(); + if (button == Qt::RightButton) { + if (channel < 15) + ++channel; + } + else if (button == Qt::MidButton) { + if (channel > 0) + --channel; + } + if (channel != t->channel()) { + t->setChannel(channel); + emit channelChanged(); + } + } +#endif + default: + break; + } + redraw(); + } + +//--------------------------------------------------------- +// viewMouseDoubleClickEvent +//--------------------------------------------------------- + +void DList::viewMouseDoubleClickEvent(QMouseEvent* ev) + { + int x = ev->x(); + int y = ev->y(); +// int button = ev->button(); + unsigned pitch = y / TH; + + int section = header->sectionAt(x); + + if ((section == COL_NAME || section == COL_VOL || section == COL_LEN || section == COL_LV1 || + section == COL_LV2 || section == COL_LV3 || section == COL_LV4) && (ev->button() == Qt::LeftButton)) + { + lineEdit(pitch, section); + } + else + viewMousePressEvent(ev); + } + + + +//--------------------------------------------------------- +// lineEdit +//--------------------------------------------------------- +void DList::lineEdit(int line, int section) + { + DrumMap* dm = &drumMap[line]; + editEntry = dm; + if (editor == 0) { + editor = new DLineEdit(this); + connect(editor, SIGNAL(returnPressed()), + SLOT(returnPressed())); + editor->setFrame(true); + } + int colx = mapx(header->sectionPos(section)); + int colw = rmapx(header->sectionSize(section)); + int coly = mapy(line * TH); + int colh = rmapy(TH); + selectedColumn = section; //Store selected column to have an idea of which one was selected when return is pressed + switch (section) { + case COL_NAME: + editor->setText(dm->name); + break; + + case COL_VOL: { + editor->setText(QString::number(dm->vol)); + break; + } + + case COL_LEN: { + editor->setText(QString::number(dm->len)); + break; + } + + case COL_LV1: + editor->setText(QString::number(dm->lv1)); + break; + + case COL_LV2: + editor->setText(QString::number(dm->lv2)); + break; + + case COL_LV3: + editor->setText(QString::number(dm->lv3)); + break; + + case COL_LV4: + editor->setText(QString::number(dm->lv4)); + break; + } + + // editor->setText(dm->name); + editor->end(false); + editor->setGeometry(colx, coly, colw, colh); + // In all cases but the column name, select all text: + if (section != COL_NAME) + editor->selectAll(); + editor->show(); + editor->setFocus(); + + } + + + + + + + + + + + + + + + +//--------------------------------------------------------- +// x2col +//--------------------------------------------------------- + +int DList::x2col(int x) const + { + int col = 0; + int w = 0; + for (; col < header->count(); col++) { + w += header->cellSize(col); + if (x < w) + break; + } + if (col == header->count()) + return -1; + return header->mapToLogical(col); + } + +//--------------------------------------------------------- +// setCurDrumInstrument +//--------------------------------------------------------- + +void DList::setCurDrumInstrument(int instr) + { + if (instr < 0 || instr >= DRUM_MAPSIZE -1) + return; // illegal instrument + DrumMap* dm = &drumMap[instr]; + if (currentlySelected != dm) { + currentlySelected = &drumMap[instr]; + emit curDrumInstrumentChanged(instr); + song->update(SC_DRUMMAP); + } + } + +//--------------------------------------------------------- +// sizeChange +//--------------------------------------------------------- + +void DList::sizeChange(int, int, int) + { + redraw(); + } + +//--------------------------------------------------------- +// returnPressed +//--------------------------------------------------------- + +void DList::returnPressed() + { + int val = -1; + if (selectedColumn != COL_NAME) + { + val = atoi(editor->text().ascii()); + if (selectedColumn != COL_LEN) + { + if(selectedColumn == COL_VOL) + { + if (val > 200) //Check bounds for volume + val = 200; + if (val < 0) + val = 0; + } + else + { + if (val > 127) //Check bounds for lv1-lv4 values + val = 127; + if (val < 0) + val = 0; + } + } + } + + switch(selectedColumn) { + case COL_NAME: + editEntry->name = editor->text(); + break; + + case COL_LEN: + editEntry->len = atoi(editor->text().ascii()); + break; + + case COL_VOL: + editEntry->vol = val; + break; + + case COL_LV1: + editEntry->lv1 = val; + break; + + case COL_LV2: + editEntry->lv2 = val; + break; + + case COL_LV3: + editEntry->lv3 = val; + break; + + case COL_LV4: + editEntry->lv4 = val; + break; + + default: + printf("Return pressed in unknown column\n"); + break; + } + selectedColumn = -1; + editor->hide(); + editEntry = 0; + setFocus(); + redraw(); + } + +//--------------------------------------------------------- +// moved +//--------------------------------------------------------- + +void DList::moved(int, int) + { + redraw(); + } + +//--------------------------------------------------------- +// tracklistChanged +//--------------------------------------------------------- + +void DList::tracklistChanged() + { + } + +//--------------------------------------------------------- +// songChanged +//--------------------------------------------------------- + +void DList::songChanged(int flags) + { + if (flags & SC_DRUMMAP) { + redraw(); + } + } + + +//--------------------------------------------------------- +// DList +//--------------------------------------------------------- + +DList::DList(Q3Header* h, QWidget* parent, int ymag) + : View(parent, 1, ymag) + { + setBg(Qt::white); + header = h; + scroll = 0; + header->setTracking(true); + connect(header, SIGNAL(sizeChange(int,int,int)), + SLOT(sizeChange(int,int,int))); + connect(header, SIGNAL(moved(int,int)), SLOT(moved(int,int))); + setFocusPolicy(Qt::StrongFocus); + drag = NORMAL; + editor = 0; + editEntry = 0; + // always select an drum instrument + currentlySelected = &drumMap[0]; + selectedColumn = -1; + } + +//--------------------------------------------------------- +// ~DList +//--------------------------------------------------------- + +DList::~DList() + { +// if (currentlySelected != 0) +// currentlySelected->selected = false; //Reset the global thingie + } + +//--------------------------------------------------------- +// viewMouseMoveEvent +//--------------------------------------------------------- + +void DList::viewMouseMoveEvent(QMouseEvent* ev) + { + curY = ev->y(); + int delta = curY - startY; + switch (drag) { + case START_DRAG: + if (delta < 0) + delta = -delta; + if (delta <= 2) + return; + drag = DRAG; + setCursor(QCursor(Qt::sizeVerCursor)); + redraw(); + break; + case NORMAL: + break; + case DRAG: + redraw(); + break; + } + } + +//--------------------------------------------------------- +// viewMouseReleaseEvent +//--------------------------------------------------------- + +void DList::viewMouseReleaseEvent(QMouseEvent* ev) + { + if (drag == DRAG) { + int y = ev->y(); + unsigned dPitch = y / TH; + setCursor(QCursor(Qt::arrowCursor)); + currentlySelected = &drumMap[int(dPitch)]; + emit curDrumInstrumentChanged(dPitch); + emit mapChanged(sPitch, dPitch); //Track pitch change done in canvas + } + drag = NORMAL; +//?? redraw(); + if (editEntry) + editor->setFocus(); + int x = ev->x(); + int y = ev->y(); + bool shift = ev->state() & Qt::ShiftButton; + unsigned pitch = y / TH; + + DCols col = DCols(x2col(x)); + + switch (col) { + case COL_NAME: + emit keyReleased(pitch, shift); + break; + case COL_ANOTE: + emit keyReleased(pitch, shift); + break; + default: + break; + } + } + +//--------------------------------------------------------- +// getSelectedInstrument +//--------------------------------------------------------- + +int DList::getSelectedInstrument() + { + if (currentlySelected == 0) + return -1; + return drumInmap[int(currentlySelected->enote)]; + } + diff --git a/muse2/muse/midiedit/dlist.h b/muse2/muse/midiedit/dlist.h new file mode 100644 index 00000000..1d7e0114 --- /dev/null +++ b/muse2/muse/midiedit/dlist.h @@ -0,0 +1,105 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: dlist.h,v 1.5.2.3 2009/10/16 21:50:16 terminator356 Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __DLIST_H__ +#define __DLIST_H__ + +#include +//Added by qt3to4: +#include +#include +#include "view.h" + +#define TH 18 // normal Track-hight + +class QPainter; +class Q3Header; +class ScrollScale; +class Device; +class QLineEdit; +class DrumMap; + + +//--------------------------------------------------------- +// DLineEdit +//--------------------------------------------------------- +class DLineEdit: public QLineEdit +{ + public: + DLineEdit(QWidget* parent) : QLineEdit(parent) {} + virtual ~DLineEdit() {}; + + virtual void keyPressEvent(QKeyEvent* keyItem) { + if(keyItem->key() == Qt::Key_Escape) { + parentWidget()->setFocus(); + hide(); + } + else + QLineEdit::keyPressEvent(keyItem); + + } +}; + +//--------------------------------------------------------- +// DList +//--------------------------------------------------------- + +class DList : public View { + Q3Header* header; + ScrollScale* scroll; + QLineEdit* editor; + DrumMap* editEntry; + DrumMap* currentlySelected; + int selectedColumn; + + + int startY; + int curY; + int sPitch; + enum { NORMAL, START_DRAG, DRAG } drag; + + virtual void draw(QPainter& p, const QRect&); + virtual void viewMousePressEvent(QMouseEvent* event); + virtual void viewMouseReleaseEvent(QMouseEvent* event); + virtual void viewMouseDoubleClickEvent(QMouseEvent*); + virtual void viewMouseMoveEvent(QMouseEvent*); + + int x2col(int x) const; + void devicesPopupMenu(DrumMap* t, int x, int y, bool changeAll); + Q_OBJECT + //void setCurDrumInstrument(int n); + + private slots: + void sizeChange(int, int, int); + void returnPressed(); + void moved(int, int); + + signals: + void channelChanged(); + void mapChanged(int, int); + void keyPressed(int, bool); + void keyReleased(int, bool); + void curDrumInstrumentChanged(int); + + public slots: + void tracklistChanged(); + void songChanged(int); + public: + void lineEdit(int line, int section); + void setCurDrumInstrument(int n); + DList(Q3Header*, QWidget* parent, int ymag); + ~DList(); + void setScroll(ScrollScale* s) { scroll = s; } + int getSelectedInstrument(); + +enum DCols { COL_MUTE=0, COL_NAME, COL_VOL, COL_QNT, COL_ENOTE, COL_LEN, + COL_ANOTE, COL_CHANNEL, COL_PORT, + COL_LV1, COL_LV2, COL_LV3, COL_LV4, COL_NONE=-1}; + }; + +#endif // __DLIST_H_ + diff --git a/muse2/muse/midiedit/drumedit.cpp b/muse2/muse/midiedit/drumedit.cpp new file mode 100644 index 00000000..ebe89ac6 --- /dev/null +++ b/muse2/muse/midiedit/drumedit.cpp @@ -0,0 +1,1167 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: drumedit.cpp,v 1.22.2.21 2009/11/16 11:29:33 lunar_shuttle Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//Added by qt3to4: +#include +#include +#include +#include +#include + +#include "drumedit.h" +#include "mtscale.h" +#include "scrollscale.h" +#include "xml.h" +#include "dlist.h" +#include "dcanvas.h" +#include "ttoolbar.h" +#include "tb1.h" +#include "splitter.h" +#include "utils.h" +#include "../ctrl/ctrledit.h" +#include "vscale.h" +#include "swidget.h" +#include "globals.h" +#include "icons.h" +#include "filedialog.h" +#include "drummap.h" +#include "audio.h" +#include "gconfig.h" + +/* +static const char* map_file_pattern[] = { + "Presets (*.map *.map.gz *.map.bz2)", + "All Files (*)", + 0 + }; +static const char* map_file_save_pattern[] = { + "Presets (*.map)", + "gzip compressed presets (*.map.gz)", + "bzip2 compressed presets (*.map.bz2)", + "All Files (*)", + 0 + }; +*/ + +int DrumEdit::_quantInit = 96; +int DrumEdit::_rasterInit = 96; +int DrumEdit::_widthInit = 600; +int DrumEdit::_heightInit = 400; +int DrumEdit::_dlistWidthInit = 50; +int DrumEdit::_dcanvasWidthInit = 300; +int DrumEdit::_toInit = 0; + +static const int xscale = -10; +static const int yscale = 1; +static const int drumeditTools = PointerTool | PencilTool | RubberTool; + +//--------------------------------------------------------- +// DWhatsThis::text +//--------------------------------------------------------- + +QString DWhatsThis::text(const QPoint& pos) + { + int section = header->sectionAt(pos.x()); + if (section == -1) + return QString::null; + switch(section) { + case 0: return Q3Header::tr("mute instrument"); break; + case 1: return Q3Header::tr("sound name"); break; + case 2: return Q3Header::tr("volume percent"); break; + case 3: return Q3Header::tr("quantisation"); break; + case 4: return Q3Header::tr("this input note triggers the sound"); break; + case 5: return Q3Header::tr("note length"); break; + case 6: return Q3Header::tr("this is the note which is played"); break; + case 7: return Q3Header::tr("output channel (hold ctl to affect all rows)"); break; + case 8: return Q3Header::tr("output port"); break; + case 9: return Q3Header::tr("shift + control key: draw velocity level 1"); break; + case 10: return Q3Header::tr("control key: draw velocity level 2"); break; + case 11: return Q3Header::tr("shift key: draw velocity level 3"); break; + case 12: return Q3Header::tr("draw velocity level 4"); break; + default: break; + } + return QString::null; + } + +//--------------------------------------------------------- +// DHeaderTip::maybeTip +//--------------------------------------------------------- + +void DHeaderTip::maybeTip(const QPoint &pos) + { +#if 0 // ddskrjo + Header* w = (Header*)parentWidget(); + int section = w->sectionAt(pos.x()); + if (section == -1) + return; + QRect r(w->sectionPos(section), 0, w->sectionSize(section), + w->height()); + QString p; + switch(section) { + case 0: p = Q3Header::tr("mute instrument"); break; + case 1: p = Q3Header::tr("sound name"); break; + case 2: p = Q3Header::tr("volume percent"); break; + case 3: p = Q3Header::tr("quantisation"); break; + case 4: p = Q3Header::tr("this input note triggers the sound"); break; + case 5: p = Q3Header::tr("note length"); break; + case 6: p = Q3Header::tr("this is the note which is played"); break; + case 7: p = Q3Header::tr("output channel (ctl: affect all rows)"); break; + case 8: p = Q3Header::tr("output port"); break; + case 9: p = Q3Header::tr("shift + control key: draw velocity level 1"); break; + case 10: p = Q3Header::tr("control key: draw velocity level 2"); break; + case 11: p = Q3Header::tr("shift key: draw velocity level 3"); break; + case 12: p = Q3Header::tr("draw velocity level 4"); break; + default: return; + } + tip(r, p); +#endif + } + +//--------------------------------------------------------- +// closeEvent +//--------------------------------------------------------- + +void DrumEdit::closeEvent(QCloseEvent* e) + { + //Store values of the horizontal splitter + Q3ValueList sizes = split2->sizes(); + Q3ValueList::Iterator it = sizes.begin(); + _dlistWidthInit = *it; //There are only 2 values stored in the sizelist, size of dlist widget and dcanvas widget + it++; + _dcanvasWidthInit = *it; + emit deleted((unsigned long)this); + e->accept(); + } + +//--------------------------------------------------------- +// DrumEdit +//--------------------------------------------------------- + +DrumEdit::DrumEdit(PartList* pl, QWidget* parent, const char* name, unsigned initPos) + : MidiEditor(_quantInit, _rasterInit, pl, parent, name) + { + split1w1 = 0; + resize(_widthInit, _heightInit); + selPart = 0; + _to = _toInit; + //---------Pulldown Menu---------------------------- + menuFile = new Q3PopupMenu(this); + menuBar()->insertItem(tr("&File"), menuFile); + + menuFile->insertItem(QIcon(*openIcon), tr("Load Map"), DrumCanvas::CMD_LOAD); + menuFile->insertItem(QIcon(*saveIcon), tr("Save Map"), DrumCanvas::CMD_SAVE); + menuFile->insertItem(tr("Reset GM Map"), DrumCanvas::CMD_RESET); + + menuEdit = new Q3PopupMenu(this); + menuBar()->insertItem(tr("&Edit"), menuEdit); + undoRedo->addTo(menuEdit); + Q3Accel* qa = new Q3Accel(this); + qa->connectItem(qa->insertItem(Qt::CTRL+Qt::Key_Z), song, SLOT(undo())); + menuEdit->insertSeparator(); + menuEdit->insertItem(tr("Cut"), DrumCanvas::CMD_CUT); + menuEdit->insertItem(tr("Copy"), DrumCanvas::CMD_COPY); + menuEdit->insertItem(tr("Paste"), DrumCanvas::CMD_PASTE); + menuEdit->insertSeparator(); + menuEdit->insertItem(tr("Delete Events"), DrumCanvas::CMD_DEL); + + // Functions + menuFunctions = new Q3PopupMenu(this); + menuBar()->insertItem(tr("&Functions"), menuFunctions); + menuFunctions->insertTearOffHandle(); + menuFunctions->insertItem(tr("Set fixed length"), DrumCanvas::CMD_FIXED_LEN); + menuFunctions->insertItem(tr("Modify Velocity"), DrumCanvas::CMD_MODIFY_VELOCITY); + + menuSelect = new Q3PopupMenu(this); + menuSelect->insertItem(tr("Select All"), DrumCanvas::CMD_SELECT_ALL); + menuSelect->insertItem(tr("Select None"), DrumCanvas::CMD_SELECT_NONE); + menuSelect->insertItem(tr("Invert"), DrumCanvas::CMD_SELECT_INVERT); + menuSelect->insertSeparator(); + menuSelect->insertItem(tr("Inside Loop"), DrumCanvas::CMD_SELECT_ILOOP); + menuSelect->insertItem(tr("Outside Loop"), DrumCanvas::CMD_SELECT_OLOOP); + + menuSelect->insertSeparator(); + + menuSelect->insertItem(tr("Previous Part"), DrumCanvas::CMD_SELECT_PREV_PART); + menuSelect->insertItem(tr("Next Part"), DrumCanvas::CMD_SELECT_NEXT_PART); + + menuEdit->insertItem(tr("&Select"), menuSelect); + + Q3PopupMenu* menuScriptPlugins = new Q3PopupMenu(this); + song->populateScriptMenu(menuScriptPlugins, this); + menuBar()->insertItem(tr("&Plugins"), menuScriptPlugins); + + connect(menuFile, SIGNAL(activated(int)), SLOT(cmd(int))); + connect(menuEdit, SIGNAL(activated(int)), SLOT(cmd(int))); + connect(menuSelect, SIGNAL(activated(int)), SLOT(cmd(int))); + connect(menuFunctions, SIGNAL(activated(int)), SLOT(cmd(int))); + + //--------------------------------------------------- + // Toolbars + //--------------------------------------------------- + + tools = new Q3ToolBar(this, "drum-tools"); + new QToolButton(*openIcon, tr("Load Drummap"), + QString::null, this, SLOT(load()), + tools, "load drummap from file"); + + new QToolButton(*saveIcon, tr("Store Drummap"), + QString::null, + this, SLOT(save()), + tools, "store drummap to file"); + + Q3WhatsThis::whatsThisButton(tools); + + tools->addSeparator(); + undoRedo->addTo(tools); + tools->addSeparator(); + + srec = new QToolButton(tools, "srec"); + QToolTip::add(srec, tr("Step Record")); + srec->setPixmap(*steprecIcon); + srec->setToggleButton(true); + + midiin = new QToolButton(tools, "midiin"); + QToolTip::add(midiin, tr("Midi Input")); + midiin->setPixmap(*midiinIcon); + midiin->setToggleButton(true); + + tools2 = new EditToolBar(this, drumeditTools); + + Q3ToolBar* transport = new Q3ToolBar(this); + transportAction->addTo(transport); + + // dontt show pitch value in toolbar + //toolbar = new Toolbar1(this, _rasterInit, _quantInit, false); + toolbar = new Toolbar1(this, _rasterInit, _quantInit); + info = new NoteInfo(this); + + //--------------------------------------------------- + // split + //--------------------------------------------------- + + split1 = new Splitter(Qt::Vertical, mainw, "split1"); + QPushButton* ctrl = new QPushButton(tr("ctrl"), mainw, "Ctrl"); + ctrl->setFont(config.fonts[3]); + hscroll = new ScrollScale(-25, -2, xscale, 20000, Qt::Horizontal, mainw); + ctrl->setFixedSize(40, hscroll->sizeHint().height()); + QToolTip::add(ctrl, tr("Add Controller View")); + + QSizeGrip* corner = new QSizeGrip(mainw); + corner->setFixedHeight(hscroll->sizeHint().height()); + + mainGrid->setRowStretch(0, 100); + mainGrid->setColStretch(1, 100); + + mainGrid->addMultiCellWidget(split1, 0, 0, 0, 2); + mainGrid->addWidget(ctrl, 1, 0); + mainGrid->addWidget(hscroll, 1, 1); + mainGrid->addWidget(corner, 1, 2, Qt::AlignBottom|Qt::AlignRight); +// mainGrid->addRowSpacing(1, hscroll->sizeHint().height()); + + split2 = new Splitter(Qt::Horizontal, split1, "split2"); + split1w1 = new QWidget(split2, "split1w1"); + QWidget* split1w2 = new QWidget(split2, "split1w2"); + Q3GridLayout* gridS1 = new Q3GridLayout(split1w1); + Q3GridLayout* gridS2 = new Q3GridLayout(split1w2); + time = new MTScale(&_raster, split1w2, xscale); + canvas = new DrumCanvas(this, split1w2, xscale, yscale); + vscroll = new ScrollScale(-4, 1, yscale, DRUM_MAPSIZE*TH, Qt::Vertical, split1w2); + int offset = -(config.division/4); + canvas->setOrigin(offset, 0); + canvas->setCanvasTools(drumeditTools); + canvas->setFocus(); + connect(canvas, SIGNAL(toolChanged(int)), tools2, SLOT(set(int))); + time->setOrigin(offset, 0); + + Q3ValueList mops; + mops.append(_dlistWidthInit); + mops.append(_dcanvasWidthInit); + split2->setSizes(mops); + // By T356. Not much choice but to disable this for now, to stop runaway resize bug. + // Can't seem to get the splitter to readjust when manually setting sizes. + //split2->setResizeMode(split1w1, QSplitter::KeepSize); + + gridS2->setRowStretch(1, 100); + gridS2->setColStretch(0, 100); + + gridS2->addMultiCellWidget(time, 0, 0, 0, 1); + gridS2->addMultiCellWidget(hLine(split1w2), 1, 1, 0, 1); + gridS2->addWidget(canvas, 2, 0); + + gridS2->addWidget(vscroll, 2, 1); + // + // Reihenfolge in dlist.c festgeschrieben ("Dcols") + // + header = new Header(split1w1, "header"); + header->setFixedHeight(30); + header->addLabel(tr("M"), 20); + header->addLabel(tr("Sound"), 100); + header->addLabel(tr("Vol")); + header->addLabel(tr("QNT")); + header->addLabel(tr("E-Note")); + header->addLabel(tr("Len")); + header->addLabel(tr("A-Note")); + header->addLabel(tr("Ch")); + header->addLabel(tr("Port"), 60); + header->addLabel(tr("LV1")); + header->addLabel(tr("LV2")); + header->addLabel(tr("LV3")); + header->addLabel(tr("LV4")); + new DHeaderTip(header); + new DWhatsThis(header, header); + + dlist = new DList(header, split1w1, yscale); + // p3.3.44 + setCurDrumInstrument(dlist->getSelectedInstrument()); + + connect(dlist, SIGNAL(keyPressed(int, bool)), canvas, SLOT(keyPressed(int, bool))); + connect(dlist, SIGNAL(keyReleased(int, bool)), canvas, SLOT(keyReleased(int, bool))); + connect(dlist, SIGNAL(mapChanged(int, int)), canvas, SLOT(mapChanged(int, int))); + + gridS1->setRowStretch(1, 100); + gridS1->setColStretch(0, 100); + gridS1->addWidget(header, 0, 0); + gridS1->addWidget(dlist, 1, 0); + + connect(canvas, SIGNAL(newWidth(int)), SLOT(newCanvasWidth(int))); + connect(canvas, SIGNAL(verticalScroll(unsigned)), vscroll, SLOT(setPos(unsigned))); + connect(canvas, SIGNAL(horizontalScroll(unsigned)),hscroll, SLOT(setPos(unsigned))); + connect(canvas, SIGNAL(horizontalScrollNoLimit(unsigned)),hscroll, SLOT(setPosNoLimit(unsigned))); + connect(song, SIGNAL(songChanged(int)), SLOT(songChanged1(int))); + connect(song, SIGNAL(songChanged(int)), dlist, SLOT(songChanged(int))); + connect(vscroll, SIGNAL(scrollChanged(int)), canvas, SLOT(setYPos(int))); + connect(vscroll, SIGNAL(scaleChanged(int)), canvas, SLOT(setYMag(int))); + connect(vscroll, SIGNAL(scaleChanged(int)), dlist, SLOT(setYMag(int))); + connect(hscroll, SIGNAL(scrollChanged(int)), canvas, SLOT(setXPos(int))); + connect(hscroll, SIGNAL(scaleChanged(int)), canvas, SLOT(setXMag(int))); + connect(srec, SIGNAL(toggled(bool)), canvas, SLOT(setSteprec(bool))); + connect(midiin, SIGNAL(toggled(bool)), canvas, SLOT(setMidiin(bool))); + + connect(vscroll, SIGNAL(scrollChanged(int)), dlist, SLOT(setYPos(int))); + connect(hscroll, SIGNAL(scrollChanged(int)), time, SLOT(setXPos(int))); + connect(hscroll, SIGNAL(scaleChanged(int)), time, SLOT(setXMag(int))); + + connect(tools2, SIGNAL(toolChanged(int)), canvas, SLOT(setTool(int))); + + connect(canvas, SIGNAL(selectionChanged(int, Event&, Part*)), this, + SLOT(setSelection(int, Event&, Part*))); + connect(canvas, SIGNAL(followEvent(int)), SLOT(follow(int))); + + connect(hscroll, SIGNAL(scaleChanged(int)), SLOT(updateHScrollRange())); + setCaption(canvas->getCaption()); + + updateHScrollRange(); + + // connect toolbar + connect(canvas, SIGNAL(timeChanged(unsigned)), SLOT(setTime(unsigned))); + connect(time, SIGNAL(timeChanged(unsigned)), SLOT(setTime(unsigned))); + 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(info, SIGNAL(valueChanged(NoteInfo::ValType, int)), SLOT(noteinfoChanged(NoteInfo::ValType, int))); + + connect(ctrl, SIGNAL(clicked()), SLOT(addCtrl())); + + QClipboard* cb = QApplication::clipboard(); + connect(cb, SIGNAL(dataChanged()), SLOT(clipboardChanged())); + + clipboardChanged(); // enable/disable "Paste" + selectionChanged(); // enable/disable "Copy" & "Paste" + initShortcuts(); + + const Pos cpos=song->cPos(); + canvas->setPos(0, cpos.tick(), true); + canvas->selectAtTick(cpos.tick()); + //canvas->selectFirst(); + + if(canvas->track()) + toolbar->setSolo(canvas->track()->solo()); + + unsigned pos; + if(initPos >= MAXINT) + pos = song->cpos(); + else + pos = initPos; + if(pos > MAXINT) + pos = MAXINT; + hscroll->setOffset((int)pos); + } + +//--------------------------------------------------------- +// songChanged1 +//--------------------------------------------------------- + +void DrumEdit::songChanged1(int bits) + { + if (bits & SC_SOLO) + { + toolbar->setSolo(canvas->track()->solo()); + return; + } + songChanged(bits); + + } + +//--------------------------------------------------------- +// updateHScrollRange +//--------------------------------------------------------- + +void DrumEdit::updateHScrollRange() +{ + int s, e; + canvas->range(&s, &e); + // Show one more measure. + e += sigmap.ticksMeasure(e); + // Show another quarter measure due to imprecise drawing at canvas end point. + e += sigmap.ticksMeasure(e) / 4; + // Compensate for drum list, splitter handle, and vscroll widths. + e += canvas->rmapxDev(dlist->width() + split2->handleWidth() - vscroll->width()); + int s1, e1; + hscroll->range(&s1, &e1); + if(s != s1 || e != e1) + hscroll->setRange(s, e); +} + +//--------------------------------------------------------- +// follow +//--------------------------------------------------------- + +void DrumEdit::follow(int pos) + { + int s, e; + canvas->range(&s, &e); + + if (pos < e && pos >= s) + hscroll->setOffset(pos); + if (pos < s) + hscroll->setOffset(s); + } + +//--------------------------------------------------------- +// setTime +//--------------------------------------------------------- + +void DrumEdit::setTime(unsigned tick) + { + toolbar->setTime(tick); + time->setPos(3, tick, false); + } + +//--------------------------------------------------------- +// ~DrumEdit +//--------------------------------------------------------- + +DrumEdit::~DrumEdit() + { + undoRedo->removeFrom(tools); + } + +//--------------------------------------------------------- +// setSelection +// update Info Line +//--------------------------------------------------------- + +void DrumEdit::setSelection(int tick, Event& e, Part* p) + { + selEvent = e; + selPart = (MidiPart*)p; + selTick = tick; + info->setEnabled(!e.empty()); + if (!e.empty()) { + info->setValues(tick, + selEvent.lenTick(), + selEvent.pitch(), + selEvent.velo(), + selEvent.veloOff()); + } + selectionChanged(); + } + +//--------------------------------------------------------- +// soloChanged +//--------------------------------------------------------- + +void DrumEdit::soloChanged(bool flag) + { + audio->msgSetSolo(canvas->track(), flag); + song->update(SC_SOLO); + } + +//--------------------------------------------------------- +// setRaster +//--------------------------------------------------------- + +void DrumEdit::setRaster(int val) + { + _rasterInit = val; + MidiEditor::setRaster(val); + canvas->redrawGrid(); + } + +//--------------------------------------------------------- +// setQuant +//--------------------------------------------------------- + +void DrumEdit::setQuant(int val) + { + _quantInit = val; + MidiEditor::setQuant(val); + } + +//--------------------------------------------------------- +// edit currently selected Event +//--------------------------------------------------------- + +void DrumEdit::noteinfoChanged(NoteInfo::ValType type, int val) + { + if (selEvent.empty()) { + printf("noteinfoChanged while note is zero %d\n", type); + return; + } + 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; + } + // Indicate do undo, and do not do port controller values and clone parts. + //audio->msgChangeEvent(selEvent, event, selPart); + audio->msgChangeEvent(selEvent, event, selPart, true, false, false); + } + +//--------------------------------------------------------- +// writeStatus +//--------------------------------------------------------- + +void DrumEdit::writeStatus(int level, Xml& xml) const + { + writePartList(level, xml); + xml.tag(level++, "drumedit"); + MidiEditor::writeStatus(level, xml); + + for (std::list::const_iterator i = ctrlEditList.begin(); + i != ctrlEditList.end(); ++i) { + (*i)->writeStatus(level, xml); + } + + split1->writeStatus(level, xml); + split2->writeStatus(level, xml); + + header->writeStatus(level, xml); + xml.intTag(level, "steprec", canvas->steprec()); + xml.intTag(level, "midiin", canvas->midiin()); + xml.intTag(level, "xpos", hscroll->pos()); + xml.intTag(level, "xmag", hscroll->mag()); + xml.intTag(level, "ypos", vscroll->pos()); + xml.intTag(level, "ymag", vscroll->mag()); + xml.tag(level, "/drumedit"); + } + +//--------------------------------------------------------- +// readStatus +//--------------------------------------------------------- + +void DrumEdit::readStatus(Xml& xml) + { + for (;;) { + Xml::Token token = xml.parse(); + const QString& tag = xml.s1(); + switch (token) { + case Xml::Error: + case Xml::End: + return; + case Xml::TagStart: + if (tag == "steprec") { + int val = xml.parseInt(); + canvas->setSteprec(val); + srec->setOn(val); + } + else if (tag == "midiin") { + int val = xml.parseInt(); + canvas->setMidiin(val); + midiin->setOn(val); + } + else if (tag == "ctrledit") { + CtrlEdit* ctrl = addCtrl(); + ctrl->readStatus(xml); + } + else if (tag == split1->name()) + split1->readStatus(xml); + else if (tag == split2->name()) + split2->readStatus(xml); + else if (tag == "midieditor") + MidiEditor::readStatus(xml); + else if (tag == header->name()) + header->readStatus(xml); + else if (tag == "xmag") + hscroll->setMag(xml.parseInt()); + else if (tag == "xpos") + hscroll->setPos(xml.parseInt()); + else if (tag == "ymag") + vscroll->setMag(xml.parseInt()); + else if (tag == "ypos") + vscroll->setPos(xml.parseInt()); + else + xml.unknown("DrumEdit"); + break; + case Xml::TagEnd: + if (tag == "drumedit") { + _quantInit = _quant; + _rasterInit = _raster; + toolbar->setRaster(_raster); + toolbar->setQuant(_quant); + canvas->redrawGrid(); + return; + } + default: + break; + } + } + } + +//--------------------------------------------------------- +// readConfiguration +//--------------------------------------------------------- + +void DrumEdit::readConfiguration(Xml& xml) + { + for (;;) { + Xml::Token token = xml.parse(); + const QString& tag = xml.s1(); + switch (token) { + case Xml::Error: + case Xml::End: + return; + case Xml::TagStart: + if (tag == "quant") + _quantInit = xml.parseInt(); + else if (tag == "raster") + _rasterInit = xml.parseInt(); + else if (tag == "width") + _widthInit = xml.parseInt(); + else if (tag == "height") + _heightInit = xml.parseInt(); + else if (tag == "dcanvaswidth") + _dcanvasWidthInit = xml.parseInt(); + else if (tag == "dlistwidth") + _dlistWidthInit = xml.parseInt(); + else if (tag == "to") { + _toInit = xml.parseInt(); + } + else + xml.unknown("DrumEdit"); + break; + case Xml::TagEnd: + if (tag == "drumedit") { + return; + } + default: + break; + } + } + } + +//--------------------------------------------------------- +// writeConfiguration +//--------------------------------------------------------- + +void DrumEdit::writeConfiguration(int level, Xml& xml) + { + xml.tag(level++, "drumedit"); + xml.intTag(level, "quant", _quantInit); + xml.intTag(level, "raster", _rasterInit); + xml.intTag(level, "width", _widthInit); + xml.intTag(level, "height", _heightInit); + xml.intTag(level, "dlistwidth", _dlistWidthInit); + xml.intTag(level, "dcanvaswidth", _dcanvasWidthInit); + xml.intTag(level, "to", _toInit); + xml.tag(level, "/drumedit"); + } + +//--------------------------------------------------------- +// load +//--------------------------------------------------------- + +void DrumEdit::load() + { + //QString fn = getOpenFileName("drummaps", map_file_pattern, + QString fn = getOpenFileName("drummaps", drum_map_file_pattern, + this, tr("Muse: Load Drum Map"), 0); + if (fn.isEmpty()) + return; + bool popenFlag; + FILE* f = fileOpen(this, fn, QString(".map"), "r", popenFlag, true); + if (f == 0) + return; + + Xml xml(f); + int mode = 0; + for (;;) { + Xml::Token token = xml.parse(); + const QString& tag = xml.s1(); + switch (token) { + case Xml::Error: + case Xml::End: + return; + case Xml::TagStart: + if (mode == 0 && tag == "muse") + mode = 1; + else if (mode == 1 && tag == "drummap") { + readDrumMap(xml, true); + mode = 0; + } + else + xml.unknown("DrumEdit"); + break; + case Xml::Attribut: + break; + case Xml::TagEnd: + if (!mode && tag == "muse") + goto ende; + default: + break; + } + } +ende: + if (popenFlag) + pclose(f); + else + fclose(f); + dlist->redraw(); + canvas->redraw(); + } + +//--------------------------------------------------------- +// save +//--------------------------------------------------------- + +void DrumEdit::save() + { + //QString fn = getSaveFileName(QString("drummaps"), map_file_pattern, + QString fn = getSaveFileName(QString("drummaps"), drum_map_file_save_pattern, + this, tr("MusE: Store Drum Map")); + if (fn.isEmpty()) + return; + bool popenFlag; + FILE* f = fileOpen(this, fn, QString(".map"), "w", popenFlag, false, true); + if (f == 0) + return; + Xml xml(f); + xml.header(); + xml.tag(0, "muse version=\"1.0\""); + writeDrumMap(1, xml, true); + xml.tag(1, "/muse"); + + if (popenFlag) + pclose(f); + else + fclose(f); + } + +//--------------------------------------------------------- +// reset +//--------------------------------------------------------- + +void DrumEdit::reset() +{ + if(QMessageBox::warning(this, tr("Drum map"), + tr("Reset the drum map with GM defaults?"), + QMessageBox::Ok | QMessageBox::Default, QMessageBox::Cancel | QMessageBox::Escape, Qt::NoButton) == QMessageBox::Ok) + { + resetGMDrumMap(); + dlist->redraw(); + canvas->redraw(); + } +} + +//--------------------------------------------------------- +// cmd +// pulldown menu commands +//--------------------------------------------------------- + +void DrumEdit::cmd(int cmd) + { + switch(cmd) { + case DrumCanvas::CMD_LOAD: + load(); + break; + case DrumCanvas::CMD_SAVE: + save(); + break; + case DrumCanvas::CMD_RESET: + reset(); + break; + default: + ((DrumCanvas*)(canvas))->cmd(cmd); + break; + } + } + +//--------------------------------------------------------- +// clipboardChanged +//--------------------------------------------------------- + +void DrumEdit::clipboardChanged() + { + QMimeSource* ms = QApplication::clipboard()->data(QClipboard::Clipboard); + if (ms && ms->format(0)) { + bool flag = strcmp(ms->format(0), "text/eventlist;charset=UTF-8") == 0; + menuEdit->setItemEnabled(DrumCanvas::CMD_PASTE, flag); + } + } + +//--------------------------------------------------------- +// selectionChanged +//--------------------------------------------------------- + +void DrumEdit::selectionChanged() + { + bool flag = canvas->selectionSize() > 0; + menuEdit->setItemEnabled(DrumCanvas::CMD_CUT, flag); + menuEdit->setItemEnabled(DrumCanvas::CMD_COPY, flag); + menuEdit->setItemEnabled(DrumCanvas::CMD_DEL, flag); + } + +//--------------------------------------------------------- +// addCtrl +//--------------------------------------------------------- + +CtrlEdit* DrumEdit::addCtrl() + { + CtrlEdit* ctrlEdit = new CtrlEdit(split1, this, xscale, true, "drumCtrlEdit"); + 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))); + connect(tools2, SIGNAL(toolChanged(int)), ctrlEdit, SLOT(setTool(int))); + connect(dlist, SIGNAL(curDrumInstrumentChanged(int)), SLOT(setCurDrumInstrument(int))); + + //printf("DrumEdit::addCtrl curDrumInstrument:%d\n", dlist->getSelectedInstrument()); + + setCurDrumInstrument(dlist->getSelectedInstrument()); + + // p3.3.44 + ctrlEdit->setTool(tools2->curTool()); + + ctrlEdit->setXPos(hscroll->pos()); + ctrlEdit->setXMag(hscroll->getScaleValue()); + + if(split1w1) + { + split2->setCollapsible(split1w1, false); + split1w1->setMinimumWidth(CTRL_PANEL_FIXED_WIDTH); + } + ctrlEdit->setCanvasWidth(canvas->width()); + + ctrlEdit->show(); + ctrlEditList.push_back(ctrlEdit); + return ctrlEdit; + } + +//--------------------------------------------------------- +// removeCtrl +//--------------------------------------------------------- + +void DrumEdit::removeCtrl(CtrlEdit* ctrl) + { + for (std::list::iterator i = ctrlEditList.begin(); + i != ctrlEditList.end(); ++i) { + if (*i == ctrl) { + ctrlEditList.erase(i); + break; + } + } + + if(split1w1) + { + if(ctrlEditList.empty()) + { + split1w1->setMinimumWidth(0); + split2->setCollapsible(split1w1, true); + } + } + } +//--------------------------------------------------------- +// newCanvasWidth +//--------------------------------------------------------- + +void DrumEdit::newCanvasWidth(int w) + { + int nw = w + (vscroll->width() - 18); // 18 is the fixed width of the CtlEdit VScale widget. + if(nw < 1) + nw = 1; + + for (std::list::iterator i = ctrlEditList.begin(); + i != ctrlEditList.end(); ++i) { + // Changed by Tim. p3.3.7 + //(*i)->setCanvasWidth(w); + (*i)->setCanvasWidth(nw); + } + + updateHScrollRange(); + } + +//--------------------------------------------------------- +// resizeEvent +//--------------------------------------------------------- + +void DrumEdit::resizeEvent(QResizeEvent* ev) + { + QWidget::resizeEvent(ev); + _widthInit = ev->size().width(); + _heightInit = ev->size().height(); + + //TODO: Make the dlist not expand/shrink, but the canvas instead + } + + +//--------------------------------------------------------- +// configChanged +//--------------------------------------------------------- + +void DrumEdit::configChanged() + { + initShortcuts(); + } + +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 + }; + +//--------------------------------------------------------- +// keyPressEvent +//--------------------------------------------------------- +void DrumEdit::keyPressEvent(QKeyEvent* event) + { + DrumCanvas* dc = (DrumCanvas*)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; + int key = event->key(); + + if (event->state() & Qt::ShiftButton) + key += Qt::SHIFT; + if (event->state() & Qt::AltButton) + key += Qt::ALT; + if (event->state() & Qt::ControlButton) + key+= Qt::CTRL; + + if (key == Qt::Key_Escape) { + close(); + return; + } + else if (key == Qt::Key_Up) { + dlist->setCurDrumInstrument(dlist->getSelectedInstrument()-1); + dlist->redraw(); + return; + } + else if (key == Qt::Key_F2) { + dlist->lineEdit(dlist->getSelectedInstrument(),(int)DList::COL_NAME); + return; + } + else if (key == Qt::Key_Down) { + dlist->setCurDrumInstrument(dlist->getSelectedInstrument()+1); + dlist->redraw(); + return; + } + + else if (key == shortcuts[SHRT_POS_INC].key) { + dc->cmd(DrumCanvas::CMD_RIGHT); + return; + } + else if (key == shortcuts[SHRT_POS_DEC].key) { + dc->cmd(DrumCanvas::CMD_LEFT); + return; + } + + else if (key == shortcuts[SHRT_TOOL_POINTER].key) { + tools2->set(PointerTool); + return; + } + else if (key == shortcuts[SHRT_TOOL_PENCIL].key) { + tools2->set(PencilTool); + return; + } + else if (key == shortcuts[SHRT_TOOL_RUBBER].key) { + tools2->set(RubberTool); + return; + } + else if (key == shortcuts[SHRT_ZOOM_IN].key) { + int mag = hscroll->mag(); + int zoomlvl = ScrollScale::getQuickZoomLevel(mag); + if (zoomlvl < 23) + zoomlvl++; + + int newmag = ScrollScale::convertQuickZoomLevelToMag(zoomlvl); + hscroll->setMag(newmag); + //printf("mag = %d zoomlvl = %d newmag = %d\n", mag, zoomlvl, newmag); + return; + } + else if (key == shortcuts[SHRT_ZOOM_OUT].key) { + int mag = hscroll->mag(); + int zoomlvl = ScrollScale::getQuickZoomLevel(mag); + if (zoomlvl > 1) + zoomlvl--; + + int newmag = ScrollScale::convertQuickZoomLevelToMag(zoomlvl); + hscroll->setMag(newmag); + //printf("mag = %d zoomlvl = %d newmag = %d\n", mag, zoomlvl, newmag); + return; + } + else if (key == shortcuts[SHRT_SCROLL_LEFT].key) { + int pos = hscroll->pos() - config.division; + if (pos < 0) + pos = 0; + hscroll->setPos(pos); + return; + } + else if (key == shortcuts[SHRT_SCROLL_RIGHT].key) { + int pos = hscroll->pos() + config.division; + hscroll->setPos(pos); + return; + } + + /* + else if (key == shortcuts[SHRT_INSERT_AT_LOCATION].key) { + pc->pianoCmd(CMD_INSERT); + return; + } + */ + else if (key == shortcuts[SHRT_SET_QUANT_1].key) + val = rasterTable[8 + off]; + else if (key == shortcuts[SHRT_SET_QUANT_2].key) + val = rasterTable[7 + off]; + else if (key == shortcuts[SHRT_SET_QUANT_3].key) + val = rasterTable[6 + off]; + else if (key == shortcuts[SHRT_SET_QUANT_4].key) + val = rasterTable[5 + off]; + else if (key == shortcuts[SHRT_SET_QUANT_5].key) + val = rasterTable[4 + off]; + else if (key == shortcuts[SHRT_SET_QUANT_6].key) + val = rasterTable[3 + off]; + else if (key == shortcuts[SHRT_SET_QUANT_7].key) + val = rasterTable[2 + off]; + else if (key == shortcuts[SHRT_TOGGLE_TRIOL].key) + val = rasterTable[index + ((off == 0) ? 9 : 0)]; + /* + else if (key == shortcuts[SHRT_EVENT_COLOR].key) { + if (colorMode == 0) + colorMode = 1; + else if (colorMode == 1) + colorMode = 2; + else + colorMode = 0; + setEventColorMode(colorMode); + return; + }*/ + else if (key == shortcuts[SHRT_TOGGLE_PUNCT].key) + val = rasterTable[index + ((off == 18) ? 9 : 18)]; + + else if (key == shortcuts[SHRT_TOGGLE_PUNCT2].key) {//CDW + if ((off == 18) && (index > 2)) { + val = rasterTable[index + 9 - 1]; + } + else if ((off == 9) && (index < 8)) { + val = rasterTable[index + 18 + 1]; + } + else + return; + } + else { //Default: + event->ignore(); + return; + } + setQuant(val); + setRaster(val); + toolbar->setQuant(_quant); + toolbar->setRaster(_raster); + } + + + +//--------------------------------------------------------- +// initShortcuts +//--------------------------------------------------------- + +void DrumEdit::initShortcuts() + { + menuEdit->setAccel(shortcuts[SHRT_CUT].key, DrumCanvas::CMD_CUT); + menuEdit->setAccel(shortcuts[SHRT_COPY].key, DrumCanvas::CMD_COPY);; + menuEdit->setAccel(shortcuts[SHRT_PASTE].key, DrumCanvas::CMD_PASTE); + menuEdit->setAccel(shortcuts[SHRT_DELETE].key, DrumCanvas::CMD_DEL); + menuFile->setAccel(shortcuts[SHRT_OPEN].key, DrumCanvas::CMD_LOAD); + menuFile->setAccel(shortcuts[SHRT_SAVE].key, DrumCanvas::CMD_SAVE); + menuFunctions->setAccel(shortcuts[SHRT_FIXED_LEN].key, DrumCanvas::CMD_FIXED_LEN); + menuFunctions->setAccel(shortcuts[SHRT_MODIFY_VELOCITY].key, DrumCanvas::CMD_MODIFY_VELOCITY); + menuSelect->setAccel(shortcuts[SHRT_SELECT_ALL].key, DrumCanvas::CMD_SELECT_ALL); + menuSelect->setAccel(shortcuts[SHRT_SELECT_NONE].key, DrumCanvas::CMD_SELECT_NONE); + menuSelect->setAccel(shortcuts[SHRT_SELECT_INVERT].key, DrumCanvas::CMD_SELECT_INVERT); + menuSelect->setAccel(shortcuts[SHRT_SELECT_ILOOP].key, DrumCanvas::CMD_SELECT_ILOOP); + menuSelect->setAccel(shortcuts[SHRT_SELECT_OLOOP].key, DrumCanvas::CMD_SELECT_OLOOP); + + menuSelect->setAccel(shortcuts[SHRT_SELECT_PREV_PART].key, DrumCanvas::CMD_SELECT_PREV_PART); + menuSelect->setAccel(shortcuts[SHRT_SELECT_NEXT_PART].key, DrumCanvas::CMD_SELECT_NEXT_PART); + } + +//--------------------------------------------------------- +// execDeliveredScript +//--------------------------------------------------------- +void DrumEdit::execDeliveredScript(int id) +{ + //QString scriptfile = QString(INSTPREFIX) + SCRIPTSSUFFIX + deliveredScriptNames[id]; + QString scriptfile = song->getScriptPath(id, true); + song->executeScript(scriptfile.latin1(), parts(), quant(), true); +} + +//--------------------------------------------------------- +// execUserScript +//--------------------------------------------------------- +void DrumEdit::execUserScript(int id) +{ + QString scriptfile = song->getScriptPath(id, false); + song->executeScript(scriptfile.latin1(), parts(), quant(), true); +} + diff --git a/muse2/muse/midiedit/drumedit.h b/muse2/muse/midiedit/drumedit.h new file mode 100644 index 00000000..5043412f --- /dev/null +++ b/muse2/muse/midiedit/drumedit.h @@ -0,0 +1,151 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: drumedit.h,v 1.9.2.7 2009/11/16 11:29:33 lunar_shuttle Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __DRUM_EDIT_H__ +#define __DRUM_EDIT_H__ + +#include +#include +#include +#include +//Added by qt3to4: +#include +#include +#include +#include +#include + +#include +#include "midieditor.h" +#include "noteinfo.h" +#include "cobject.h" +#include "tools.h" +#include "header.h" +#include "shortcuts.h" +#include "event.h" + +class MidiPart; +class QLabel; +class DrumCanvas; +class ScrollScale; +class ScoreConfig; +class QToolButton; +class MTScale; +class Splitter; +class PartList; +class Toolbar1; +class CtrlCanvas; +class Xml; +class Q3PopupMenu; +class DList; +class Header; +class CtrlEdit; +class Part; +class SNode; + +//--------------------------------------------------------- +// DWhatsThis +//--------------------------------------------------------- + +class DWhatsThis : public Q3WhatsThis { + Header* header; + protected: + QString text(const QPoint&); + public: + DWhatsThis(QWidget* parent, Header* h) : Q3WhatsThis(parent) { + header = h; + } + }; + +//---------------------------------------------------------- +// DHeaderTip +//---------------------------------------------------------- + +class DHeaderTip { // : public QToolTip { ddskrjo + public: + DHeaderTip(QWidget * parent) {} // : QToolTip(parent) {} ddskrjo + virtual ~DHeaderTip(){} + protected: + void maybeTip(const QPoint &); + }; + +//--------------------------------------------------------- +// DrumEdit +//--------------------------------------------------------- + +class DrumEdit : public MidiEditor { + Event selEvent; + MidiPart* selPart; + int selTick; + Q3PopupMenu* menuEdit, *menuFunctions, *menuFile, *menuSelect; + + NoteInfo* info; + QToolButton* srec; + QToolButton* midiin; + EditToolBar* tools2; + + Toolbar1* toolbar; + Splitter* split1; + Splitter* split2; + QWidget* split1w1; + DList* dlist; + Header* header; + Q3ToolBar* tools; + + static int _quantInit, _rasterInit; + static int _widthInit, _heightInit; + static int _dlistWidthInit, _dcanvasWidthInit; + + static int _toInit; //Used in function dialog for applying modification to selection + Q_OBJECT + void initShortcuts(); + + virtual void closeEvent(QCloseEvent*); + QWidget* genToolbar(QWidget* parent); + virtual void resizeEvent(QResizeEvent*); + virtual void keyPressEvent(QKeyEvent*); + int _to;//TODO: Make this work + + + private slots: + void setRaster(int); + void setQuant(int); + void noteinfoChanged(NoteInfo::ValType type, int val); + CtrlEdit* addCtrl(); + void removeCtrl(CtrlEdit* ctrl); + void cmd(int); + void clipboardChanged(); // enable/disable "Paste" + void selectionChanged(); // enable/disable "Copy" & "Paste" + void load(); + void save(); + void reset(); + void setTime(unsigned); + void follow(int); + void newCanvasWidth(int); + void configChanged(); + void songChanged1(int); + + public slots: + void setSelection(int, Event&, Part*); + void soloChanged(bool); // called by Solo button + void execDeliveredScript(int); + void execUserScript(int); + + virtual void updateHScrollRange(); + signals: + void deleted(unsigned long); + + public: + DrumEdit(PartList*, QWidget* parent = 0, const char* name = 0, unsigned initPos = MAXINT); + virtual ~DrumEdit(); + virtual void readStatus(Xml&); + virtual void writeStatus(int, Xml&) const; + static void readConfiguration(Xml& xml); + static void writeConfiguration(int, Xml&); + }; + +#endif diff --git a/muse2/muse/midiedit/drummap.cpp b/muse2/muse/midiedit/drummap.cpp new file mode 100644 index 00000000..46bf2057 --- /dev/null +++ b/muse2/muse/midiedit/drummap.cpp @@ -0,0 +1,503 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: drummap.cpp,v 1.3.2.6 2009/10/29 02:14:37 terminator356 Exp $ +// +// (C) Copyright 1999/2000 Werner Schweer (ws@seh.de) +//========================================================= + +#include "audio.h" +#include "drummap.h" +#include "xml.h" +#include "song.h" + +char drumOutmap[DRUM_MAPSIZE]; +char drumInmap[128]; + +DrumMap drumMap[DRUM_MAPSIZE]; + +//--------------------------------------------------------- +// GM default drum map +//--------------------------------------------------------- + +const DrumMap blankdm = { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 127, 127, false }; + +const DrumMap idrumMap[DRUM_MAPSIZE] = { + { QString("Acoustic Bass Drum"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 35, 35, false }, + { QString("Bass Drum 1"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 36, 36, false }, + { QString("Side Stick"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 37, 37, false }, + { QString("Acoustic Snare"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 38, 38, false }, + { QString("Hand Clap"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 39, 39, false }, + { QString("Electric Snare"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 40, 40, false }, + { QString("Low Floor Tom"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 41, 41, false }, + { QString("Closed Hi-Hat"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 42, 42, false }, + { QString("High Floor Tom"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 43, 43, false }, + { QString("Pedal Hi-Hat"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 44, 44, false }, + { QString("Low Tom"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 45, 45, false }, + { QString("Open Hi-Hat"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 46, 46, false }, + { QString("Low-Mid Tom"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 47, 47, false }, + { QString("Hi-Mid Tom"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 48, 48, false }, + { QString("Crash Cymbal 1"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 49, 49, false }, + { QString("High Tom"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 50, 50, false }, + + { QString("Ride Cymbal 1"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 51, 51, false }, + { QString("Chinese Cymbal"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 52, 52, false }, + { QString("Ride Bell"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 53, 53, false }, + { QString("Tambourine"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 54, 54, false }, + { QString("Splash Cymbal"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 55, 55, false }, + { QString("Cowbell"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 56, 56, false }, + { QString("Crash Cymbal 2"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 57, 57, false }, + { QString("Vibraslap"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 58, 58, false }, + { QString("Ride Cymbal 2"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 59, 59, false }, + { QString("Hi Bongo"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 60, 60, false }, + { QString("Low Bongo"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 61, 61, false }, + { QString("Mute Hi Conga"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 62, 62, false }, + { QString("Open Hi Conga"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 63, 63, false }, + { QString("Low Conga"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 64, 64, false }, + { QString("High Timbale"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 65, 65, false }, + { QString("Low Timbale"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 66, 66, false }, + + { QString("High Agogo"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 67, 67, false }, + { QString("Low Agogo"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 68, 68, false }, + { QString("Cabasa"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 69, 69, false }, + { QString("Maracas"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 70, 70, false }, + { QString("Short Whistle"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 71, 71, false }, + { QString("Long Whistle"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 72, 72, false }, + { QString("Short Guiro"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 73, 73, false }, + { QString("Long Guiro"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 74, 74, false }, + { QString("Claves"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 75, 75, false }, + { QString("Hi Wood Block"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 76, 76, false }, + { QString("Low Wood Block"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 77, 77, false }, + { QString("Mute Cuica"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 78, 78, false }, + { QString("Open Cuica"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 79, 79, false }, + { QString("Mute Triangle"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 80, 80, false }, + { QString("Open Triangle"), 100, 16, 32, 9, 0, 70, 90, 127, 110, 81, 81, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 82, 82, false }, + + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 83, 83, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 84, 84, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 85, 85, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 86, 86, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 87, 87, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 88, 88, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 89, 89, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 90, 90, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 91, 91, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 92, 92, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 93, 93, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 94, 94, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 95, 95, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 96, 96, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 97, 97, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 98, 98, false }, + + /* + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 83, 83, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 84, 84, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 85, 85, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 86, 86, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 87, 87, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 88, 88, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 89, 89, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 90, 90, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 91, 91, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 92, 92, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 93, 93, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 94, 94, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 95, 95, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 96, 96, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 97, 97, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 98, 98, false }, + + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 83, 83, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 84, 84, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 85, 85, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 86, 86, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 87, 87, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 88, 88, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 89, 89, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 90, 90, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 91, 91, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 92, 92, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 93, 93, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 94, 94, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 95, 95, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 96, 96, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 97, 97, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 98, 98, false }, + + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 83, 83, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 84, 84, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 85, 85, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 86, 86, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 87, 87, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 88, 88, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 89, 89, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 90, 90, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 91, 91, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 92, 92, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 93, 93, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 94, 94, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 95, 95, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 96, 96, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 97, 97, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 98, 98, false }, + + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 83, 83, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 84, 84, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 85, 85, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 86, 86, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 87, 87, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 88, 88, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 89, 89, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 90, 90, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 91, 91, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 92, 92, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 93, 93, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 94, 94, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 95, 95, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 96, 96, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 97, 97, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 98, 98, false } + }; + */ + + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 99, 99, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 100, 100, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 101, 101, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 102, 102, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 103, 103, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 104, 104, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 105, 105, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 106, 106, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 107, 107, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 108, 108, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 109, 109, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 110, 110, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 111, 111, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 112, 112, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 113, 113, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 114, 114, false }, + + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 115, 115, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 116, 116, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 117, 117, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 118, 118, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 119, 119, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 120, 120, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 121, 121, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 122, 122, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 123, 123, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 124, 124, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 125, 125, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 126, 126, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 127, 127, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 0, 0, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 1, 1, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 2, 2, false }, + + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 3, 3, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 4, 4, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 5, 5, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 6, 6, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 7, 7, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 8, 8, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 9, 9, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 10, 10, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 11, 11, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 12, 12, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 13, 13, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 14, 14, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 15, 15, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 16, 16, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 17, 17, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 18, 18, false }, + + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 19, 19, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 20, 20, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 21, 21, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 22, 22, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 23, 23, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 24, 24, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 25, 25, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 26, 26, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 27, 27, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 28, 28, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 29, 29, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 30, 30, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 31, 31, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 32, 32, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 33, 33, false }, + { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 34, 34, false } + }; + + +//--------------------------------------------------------- +// initDrumMap +// populate Inmap and Outmap +//--------------------------------------------------------- + +void initDrumMap() + { + for (int i = 0; i < DRUM_MAPSIZE; ++i) { + DrumMap d = drumMap[i]; + //Make sure we're not overwriting any values loaded + //On init, all these values are zero. If so, just set the drummap entry to the initial drummap entry. + if (!(d.vol || d.len || d.channel || d.port || d.lv1 || d.lv2 || d.lv3 || d.lv4 || d.enote || d.anote || d.mute)) + drumMap[i] = idrumMap[i]; + } + //Finally, setup the inMap, outMap-values + memset(drumInmap, 0, sizeof(drumInmap)); + memset(drumOutmap, 0, sizeof(drumOutmap)); + for (int i = 0; i < DRUM_MAPSIZE; ++i) { + drumInmap[(unsigned int)(drumMap[i].enote)] = i; + drumOutmap[(unsigned int)(drumMap[i].anote)] = i; + } + } + +//--------------------------------------------------------- +// resetGMDrumMap +//--------------------------------------------------------- + +void resetGMDrumMap() + { + audio->msgIdle(true); + // Delete all port controller events. + //audio->msgChangeAllPortDrumCtrlEvents(false); + song->changeAllPortDrumCtrlEvents(false); + + for(int i = 0; i < DRUM_MAPSIZE; ++i) + drumMap[i] = idrumMap[i]; + memset(drumInmap, 0, sizeof(drumInmap)); + memset(drumOutmap, 0, sizeof(drumOutmap)); + for (int i = 0; i < DRUM_MAPSIZE; ++i) { + drumInmap[(unsigned int)(drumMap[i].enote)] = i; + drumOutmap[(unsigned int)(drumMap[i].anote)] = i; + } + // Add all port controller events. + //audio->msgChangeAllPortDrumCtrlEvents(true); + song->changeAllPortDrumCtrlEvents(true); + audio->msgIdle(false); + } + +//--------------------------------------------------------- +// operator == +//--------------------------------------------------------- + +//bool const DrumMap::operator==(const DrumMap& map) const +bool DrumMap::operator==(const DrumMap& map) const + { + return + (name == map.name) + && vol == map.vol + && quant == map.quant + && len == map.len + && channel == map.channel + && port == map.port + && lv1 == map.lv1 + && lv2 == map.lv2 + && lv3 == map.lv3 + && lv4 == map.lv4 + && enote == map.enote + && anote == map.anote + && mute == map.mute; + } + +//--------------------------------------------------------- +// writeDrumMap +//--------------------------------------------------------- + +void writeDrumMap(int level, Xml& xml, bool external) + { + xml.tag(level++, "drummap"); + for (int i = 0; i < DRUM_MAPSIZE; ++i) { + DrumMap* dm = &drumMap[i]; + const DrumMap* idm = &idrumMap[i]; + + if (external) { + xml.tag(level++, "entry"); + xml.strTag(level, "name", dm->name); + xml.intTag(level, "vol", dm->vol); + xml.intTag(level, "quant", dm->quant); + xml.intTag(level, "len", dm->len); + xml.intTag(level, "channel", dm->channel); + xml.intTag(level, "port", dm->port); + xml.intTag(level, "lv1", dm->lv1); + xml.intTag(level, "lv2", dm->lv2); + xml.intTag(level, "lv3", dm->lv3); + xml.intTag(level, "lv4", dm->lv4); + xml.intTag(level, "enote", dm->enote); + xml.intTag(level, "anote", dm->anote); + } + else { + // write only, if entry is different from initial entry + if (!external && *dm == *idm) + continue; + xml.tag(level++, "entry idx=\"%d\"", i); + if (dm->name != idm->name) + xml.strTag(level, "name", dm->name); + if (dm->vol != idm->vol) + xml.intTag(level, "vol", dm->vol); + if (dm->quant != idm->quant) + xml.intTag(level, "quant", dm->quant); + if (dm->len != idm->len) + xml.intTag(level, "len", dm->len); + if (dm->channel != idm->channel) + xml.intTag(level, "channel", dm->channel); + if (dm->port != idm->port) + xml.intTag(level, "port", dm->port); + if (dm->lv1 != idm->lv1) + xml.intTag(level, "lv1", dm->lv1); + if (dm->lv2 != idm->lv2) + xml.intTag(level, "lv2", dm->lv2); + if (dm->lv3 != idm->lv3) + xml.intTag(level, "lv3", dm->lv3); + if (dm->lv4 != idm->lv4) + xml.intTag(level, "lv4", dm->lv4); + if (dm->enote != idm->enote) + xml.intTag(level, "enote", dm->enote); + if (dm->anote != idm->anote) + xml.intTag(level, "anote", dm->anote); + if (dm->mute != idm->mute) + xml.intTag(level, "mute", dm->mute); + } + xml.tag(level--, "/entry"); + } + xml.tag(level--, "/drummap"); + } + +//--------------------------------------------------------- +// readDrummapEntry +//--------------------------------------------------------- + +static void readDrummapEntry(Xml& xml, DrumMap* dm) + { + + for (;;) { + Xml::Token token = xml.parse(); + const QString& tag = xml.s1(); + switch (token) { + case Xml::Error: + case Xml::End: + return; + case Xml::TagStart: + if (tag == "name") + dm->name = xml.parse(QString("name")); + else if (tag == "vol") + dm->vol = (unsigned char)xml.parseInt(); + else if (tag == "quant") + dm->quant = xml.parseInt(); + else if (tag == "len") + dm->len = xml.parseInt(); + else if (tag == "channel") + dm->channel = xml.parseInt(); + else if (tag == "port") + dm->port = xml.parseInt(); + else if (tag == "lv1") + dm->lv1 = xml.parseInt(); + else if (tag == "lv2") + dm->lv2 = xml.parseInt(); + else if (tag == "lv3") + dm->lv3 = xml.parseInt(); + else if (tag == "lv4") + dm->lv4 = xml.parseInt(); + else if (tag == "enote") + dm->enote = xml.parseInt(); + else if (tag == "anote") + dm->anote = xml.parseInt(); + else if (tag == "mute") + dm->mute = xml.parseInt(); + else if (tag == "selected") + //; // dm->selected = xml.parseInt(); + xml.skip(tag); + else + xml.unknown("DrumMapEntry"); + break; + case Xml::Attribut: + if (tag == "idx") { + int idx = xml.s2().toInt() & 0x7f; + dm = &drumMap[idx]; + + } + break; + case Xml::TagEnd: + if (tag == "entry") + { + return; + } + default: + break; + } + } + } + +//--------------------------------------------------------- +// readDrummap +//--------------------------------------------------------- + +void readDrumMap(Xml& xml, bool external) + { + audio->msgIdle(true); + // Delete all port controller events. + //audio->msgChangeAllPortDrumCtrlEvents(false); + song->changeAllPortDrumCtrlEvents(false); + + if (external) { + for (int i = 0; i < DRUM_MAPSIZE; ++i) + drumMap[i] = blankdm; + } + else { + for (int i = 0; i < DRUM_MAPSIZE; ++i) + drumMap[i] = idrumMap[i]; + } + int i = 0; + for (;;) { + Xml::Token token = xml.parse(); + const QString& tag = xml.s1(); + switch (token) { + case Xml::Error: + case Xml::End: + audio->msgIdle(false); + return; + case Xml::TagStart: + if (tag == "entry") { + if(i >= DRUM_MAPSIZE) + { + audio->msgIdle(false); + return; + } + readDrummapEntry(xml, external ? &drumMap[i] : 0); + ++i; + } + else if (tag == "comment") + xml.parse(); + else + xml.unknown("DrumMap"); + break; + case Xml::Attribut: + break; + case Xml::TagEnd: + if (tag == "drummap") { + memset(drumInmap, 0, sizeof(drumInmap)); + memset(drumOutmap, 0, sizeof(drumOutmap)); + for (int i = 0; i < DRUM_MAPSIZE; ++i) { + drumInmap[(unsigned int)(drumMap[i].enote)] = i; + drumOutmap[(unsigned int)(drumMap[i].anote)] = i; + } + // Add all port controller events. + //audio->msgChangeAllPortDrumCtrlEvents(true); + song->changeAllPortDrumCtrlEvents(true); + + audio->msgIdle(false); + return; + } + default: + break; + } + } + // Add all port controller events. + //audio->msgChangeAllPortDrumCtrlEvents(true); + song->changeAllPortDrumCtrlEvents(true); + audio->msgIdle(false); + } + diff --git a/muse2/muse/midiedit/drummap.h b/muse2/muse/midiedit/drummap.h new file mode 100644 index 00000000..dfe67254 --- /dev/null +++ b/muse2/muse/midiedit/drummap.h @@ -0,0 +1,47 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: drummap.h,v 1.3.2.3 2009/10/29 02:14:37 terminator356 Exp $ +// +// (C) Copyright 1999/2000 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __DRUMMAP_H__ +#define __DRUMMAP_H__ + +#include + +class Xml; + +//--------------------------------------------------------- +// DrumMap +//--------------------------------------------------------- + +struct DrumMap { + QString name; + unsigned char vol; // playback volume, percent. + int quant; + int len; // len of event in ticks + int channel; // midi channel + int port; // midi port + char lv1, lv2, lv3, lv4; // velocities + char enote, anote; // input note - output note + bool mute; +// bool selected; + + //bool const operator==(const DrumMap& map) const; + bool operator==(const DrumMap& map) const; + }; + +#define DRUM_MAPSIZE 128 + +extern char drumOutmap[DRUM_MAPSIZE]; +extern char drumInmap[DRUM_MAPSIZE]; +extern DrumMap drumMap[DRUM_MAPSIZE]; +extern void initDrumMap(); +extern void writeDrumMap(int level, Xml& xml, bool external); +extern void readDrumMap(Xml& xml, bool external); +extern void resetGMDrumMap(); + +#endif + diff --git a/muse2/muse/midiedit/ecanvas.cpp b/muse2/muse/midiedit/ecanvas.cpp new file mode 100644 index 00000000..7fc7002d --- /dev/null +++ b/muse2/muse/midiedit/ecanvas.cpp @@ -0,0 +1,363 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: ecanvas.cpp,v 1.8.2.6 2009/05/03 04:14:00 terminator356 Exp $ +// (C) Copyright 2001 Werner Schweer (ws@seh.de) +//========================================================= + +#include + +#include "midieditor.h" +#include "ecanvas.h" +#include "song.h" +#include "event.h" +#include "shortcuts.h" +//Added by qt3to4: +#include +#include + +//--------------------------------------------------------- +// EventCanvas +//--------------------------------------------------------- + +EventCanvas::EventCanvas(MidiEditor* pr, QWidget* parent, int sx, + int sy, const char* name) + : Canvas(parent, sx, sy, name) + { + editor = pr; + _steprec = false; + _midiin = false; + _playEvents = false; + curVelo = 70; + + setBg(Qt::white); + setAcceptDrops(true); + setFocusPolicy(Qt::StrongFocus); + setMouseTracking(true); + + curPart = (MidiPart*)(editor->parts()->begin()->second); + curPartId = curPart->sn(); + } + +//--------------------------------------------------------- +// getCaption +//--------------------------------------------------------- + +QString EventCanvas::getCaption() const + { + int bar1, bar2, xx; + unsigned x; + sigmap.tickValues(curPart->tick(), &bar1, &xx, &x); + sigmap.tickValues(curPart->tick() + curPart->lenTick(), &bar2, &xx, &x); + + return QString("MusE: Part <") + curPart->name() + + QString("> %1-%2").arg(bar1+1).arg(bar2+1); + } + +//--------------------------------------------------------- +// leaveEvent +//--------------------------------------------------------- + +void EventCanvas::leaveEvent(QEvent*) + { + emit pitchChanged(-1); + emit timeChanged(MAXINT); + } + +//--------------------------------------------------------- +// enterEvent +//--------------------------------------------------------- + +void EventCanvas::enterEvent(QEvent*) + { + emit enterCanvas(); + } + +//--------------------------------------------------------- +// raster +//--------------------------------------------------------- + +QPoint EventCanvas::raster(const QPoint& p) const + { + int x = p.x(); + if (x < 0) + x = 0; + x = editor->rasterVal(x); + int pitch = y2pitch(p.y()); + int y = pitch2y(pitch); + return QPoint(x, y); + } + +//--------------------------------------------------------- +// startUndo +//--------------------------------------------------------- + +void EventCanvas::startUndo(DragType) + { + song->startUndo(); + } + +//--------------------------------------------------------- +// endUndo +//--------------------------------------------------------- + +void EventCanvas::endUndo(DragType dtype, int flags) + { + song->endUndo(flags | ((dtype == MOVE_COPY || dtype == MOVE_CLONE) + ? SC_EVENT_INSERTED : SC_EVENT_MODIFIED)); + } + +//--------------------------------------------------------- +// mouseMove +//--------------------------------------------------------- + +void EventCanvas::mouseMove(const QPoint& pos) + { + emit pitchChanged(y2pitch(pos.y())); + int x = pos.x(); + emit timeChanged(editor->rasterVal(x)); + } + +//--------------------------------------------------------- +// updateSelection +//--------------------------------------------------------- + +void EventCanvas::updateSelection() + { + song->update(SC_SELECTION); + } + +//--------------------------------------------------------- +// songChanged(type) +//--------------------------------------------------------- + +void EventCanvas::songChanged(int flags) + { + // Is it simply a midi controller value adjustment? Forget it. + if(flags == SC_MIDI_CONTROLLER) + return; + + if (flags & ~SC_SELECTION) { + items.clear(); + start_tick = MAXINT; + end_tick = 0; + curPart = 0; + for (iPart p = editor->parts()->begin(); p != editor->parts()->end(); ++p) { + MidiPart* part = (MidiPart*)(p->second); + if (part->sn() == curPartId) + curPart = part; + unsigned stick = part->tick(); + unsigned len = part->lenTick(); + unsigned etick = stick + len; + if (stick < start_tick) + start_tick = stick; + if (etick > end_tick) + end_tick = etick; + + EventList* el = part->events(); + for (iEvent i = el->begin(); i != el->end(); ++i) { + Event e = i->second; + // Added by T356. Do not add events which are either past, or extend past the end of the part. + //if(e.tick() > len) + if(e.endTick() > len) + break; + + if (e.isNote()) { + addItem(part, e); + } + } + } + } + + Event event; + MidiPart* 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(); + } + } + } + start_tick = song->roundDownBar(start_tick); + end_tick = song->roundUpBar(end_tick); + + if (n == 1) { + x = nevent->x(); + event = nevent->event(); + part = (MidiPart*)nevent->part(); + if (curPart != part) { + curPart = part; + curPartId = curPart->sn(); + curPartChanged(); + } + } + emit selectionChanged(x, event, part); + if (curPart == 0) + curPart = (MidiPart*)(editor->parts()->begin()->second); + redraw(); + } + +//--------------------------------------------------------- +// selectAtTick +//--------------------------------------------------------- +void EventCanvas::selectAtTick(unsigned int tick) + { + //Select note nearest tick, if none selected and there are any + if (!items.empty() && selectionSize() == 0) { + iCItem i = items.begin(); + CItem* nearest = i->second; + + while (i != items.end()) { + CItem* cur=i->second; + unsigned int curtk=abs(cur->x() + cur->part()->tick() - tick); + unsigned int neartk=abs(nearest->x() + nearest->part()->tick() - tick); + + if (curtk < neartk) { + nearest=cur; + } + + i++; + } + + if (!nearest->isSelected()) { + selectItem(nearest, true); + songChanged(SC_SELECTION); + } + } + } + +//--------------------------------------------------------- +// track +//--------------------------------------------------------- + +MidiTrack* EventCanvas::track() const + { + return ((MidiPart*)curPart)->track(); + } + + +//--------------------------------------------------------- +// keyPress +//--------------------------------------------------------- + +void EventCanvas::keyPress(QKeyEvent* event) + { + int key = event->key(); + if (event->state() & Qt::ShiftButton) + key += Qt::SHIFT; + if (event->state() & Qt::AltButton) + key += Qt::ALT; + if (event->state() & Qt::ControlButton) + 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->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, true); + Pos p2(tick_max, true); + 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; + if (items.size() > 0 ) { + 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 if (key == shortcuts[SHRT_INCREASE_LEN].key) { + // TODO: Check boundaries + modifySelected(NoteInfo::VAL_LEN, editor->raster()); + } + else if (key == shortcuts[SHRT_DECREASE_LEN].key) { + // TODO: Check boundaries + modifySelected(NoteInfo::VAL_LEN, 0 - editor->raster()); + } + + else + event->ignore(); + } diff --git a/muse2/muse/midiedit/ecanvas.h b/muse2/muse/midiedit/ecanvas.h new file mode 100644 index 00000000..58df80b5 --- /dev/null +++ b/muse2/muse/midiedit/ecanvas.h @@ -0,0 +1,87 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: ecanvas.h,v 1.5.2.4 2009/02/02 21:38:00 terminator356 Exp $ +// (C) Copyright 2001 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __ECANVAS_H__ +#define __ECANVAS_H__ + +#include "canvas.h" +#include "noteinfo.h" +//Added by qt3to4: +#include +#include + +class MidiPart; +class MidiTrack; +class MidiEditor; +class Part; + +struct PartToChange +{ + Part* npart; + int xdiff; +}; +typedef std::map PartsToChangeMap; +typedef std::map::iterator iPartToChange; + +//--------------------------------------------------------- +// EventCanvas +//--------------------------------------------------------- + +class EventCanvas : public Canvas { + Q_OBJECT + virtual void leaveEvent(QEvent*e); + virtual void enterEvent(QEvent*e); + // Removed by T356. + //virtual QPoint raster(const QPoint&) const; + + virtual void startUndo(DragType); + + virtual void endUndo(DragType, int flags = 0); + virtual void mouseMove(const QPoint&); + + protected: + bool _playEvents; + MidiEditor* editor; + unsigned start_tick, end_tick; + int curVelo; + bool _steprec; + bool _midiin; + + void updateSelection(); + virtual void addItem(Part*, Event&) = 0; + // Added by T356. + virtual QPoint raster(const QPoint&) const; + + public slots: + void redrawGrid() { redraw(); } + void setSteprec(bool f) { _steprec = f; } + void setMidiin(bool f) { _midiin = f; } + + signals: + void pitchChanged(int); // current cursor position + void timeChanged(unsigned); + void selectionChanged(int, Event&, Part*); + void enterCanvas(); + + public: + EventCanvas(MidiEditor*, QWidget*, int, int, const char* name = 0); + MidiTrack* track() const; + unsigned start() const { return start_tick; } + unsigned end() const { return end_tick; } + bool midiin() const { return _midiin; } + bool steprec() const { return _steprec; } + QString getCaption() const; + void songChanged(int); + void range(int* s, int* e) const { *s = start_tick; *e = end_tick; } + void playEvents(bool flag) { _playEvents = flag; } + void selectAtTick(unsigned int tick); + virtual void modifySelected(NoteInfo::ValType, int) {} + virtual void keyPress(QKeyEvent*); + }; + +#endif + diff --git a/muse2/muse/midiedit/piano.cpp b/muse2/muse/midiedit/piano.cpp new file mode 100644 index 00000000..ed7ac9f5 --- /dev/null +++ b/muse2/muse/midiedit/piano.cpp @@ -0,0 +1,557 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: piano.cpp,v 1.3 2004/05/31 11:48:55 lunar_shuttle Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#include +//Added by qt3to4: +#include +#include +#include + +#include + +#include "piano.h" + +static const char *oct_xpm[] = { +// w h colors + "40 91 2 1", + ". c #c0c0c0", + "# c #000000", + // x + "####################################### ", + ".......................................#", + ".......................................#", + ".......................................#", + ".......................................#", + ".......................................#", // 10 + ".......................................#", + ".......................................#", + ".......................................#", + ".......................................#", //------------------------ + "#######################................#", + "########################...............#", + "########################...............#", + "####################################### ", // 7 + "########################...............#", + "########################...............#", + "#######################................#", //------------------------ + ".......................................#", + ".......................................#", + ".......................................#", // 6 + ".......................................#", + ".......................................#", + ".......................................#", //------------------------ + "#######################................#", + "########################...............#", + "########################...............#", // 7 + "####################################### ", + "########################...............#", + "########################...............#", + "#######################................#", //------------------------ + ".......................................#", + ".......................................#", + ".......................................#", // 6 + ".......................................#", + ".......................................#", + ".......................................#", //------------------------ + "#######################................#", + "########################...............#", + "########################...............#", // 7 + "####################################### ", + "########################...............#", + "########################...............#", + "#######################................#", //------------------------ + ".......................................#", + ".......................................#", + ".......................................#", + ".......................................#", // 10 + ".......................................#", + ".......................................#", + ".......................................#", + ".......................................#", + ".......................................#", + "####################################### ", //---------------------- + ".......................................#", + ".......................................#", + ".......................................#", + ".......................................#", // 9 + ".......................................#", + ".......................................#", + ".......................................#", + ".......................................#", + ".......................................#", //------------------------ + "#######################................#", + "########################...............#", + "########################...............#", + "####################################### ", // 7 + "########################...............#", + "########################...............#", + "#######################................#", //------------------------ + ".......................................#", + ".......................................#", + ".......................................#", // 6 + ".......................................#", + ".......................................#", + ".......................................#", //-------------------------- + "#######################................#", + "########################...............#", + "########################...............#", // 7 + "####################################### ", + "########################...............#", + "########################...............#", + "#######################................#", //------------------------ + ".......................................#", + "..........................###..........#", + ".........................#...#.........#", + ".........................#.............#", + ".........................#.............#", + ".........................#...#.........#", // 10 + "..........................###..........#", + ".......................................#", + ".......................................#", + ".......................................#", + }; + +static const char *mk1_xpmC1[] = { + "40 10 2 1", + ". c #c0c0c0", + "# c #000000", + ".......................................#", + "..........................###.....#....#", + ".........................#...#...##....#", + ".........................#........#....#", + ".........................#........#....#", + ".........................#...#....#....#", // 10 + "..........................###....###...#", + ".......................................#", + ".......................................#", + ".......................................#", + }; +static const char *mk1_xpmC2[] = { + "40 10 2 1", + ". c #c0c0c0", + "# c #000000", + ".......................................#", + "..........................###....##....#", + ".........................#...#..#..#...#", + ".........................#........#....#", + ".........................#.......#.....#", + ".........................#...#..#......#", // 10 + "..........................###...####...#", + ".......................................#", + ".......................................#", + ".......................................#", + }; +static const char *mk1_xpmC3[] = { + "40 10 2 1", + ". c #c0c0c0", + "# c #000000", + ".......................................#", + "..........................###....##....#", + ".........................#...#..#..#...#", + ".........................#........#....#", + ".........................#.........#...#", + ".........................#...#..#..#...#", // 10 + "..........................###....##....#", + ".......................................#", + ".......................................#", + ".......................................#", + }; +static const char *mk1_xpmC4[] = { + "40 10 2 1", + ". c #c0c0c0", + "# c #000000", + ".......................................#", + "..........................###...#..#...#", + ".........................#...#..#..#...#", + ".........................#......####...#", + ".........................#.........#...#", + ".........................#...#.....#...#", // 10 + "..........................###......#...#", + ".......................................#", + ".......................................#", + ".......................................#", + }; +static const char *mk1_xpmC5[] = { + "40 10 2 1", + ". c #c0c0c0", + "# c #000000", + ".......................................#", + "..........................###...####...#", + ".........................#...#..#......#", + ".........................#......###....#", + ".........................#.........#...#", + ".........................#...#.....#...#", // 10 + "..........................###...###....#", + ".......................................#", + ".......................................#", + ".......................................#", + }; + +static const char *mk1_xpmC6[] = { + "40 10 2 1", + ". c #c0c0c0", + "# c #000000", + ".......................................#", + "..........................###....###...#", + ".........................#...#..#......#", + ".........................#......###....#", + ".........................#......#..#...#", + ".........................#...#..#..#...#", // 10 + "..........................###...###....#", + ".......................................#", + ".......................................#", + ".......................................#", + }; + +static const char *mk1_xpmC7[] = { + "40 10 2 1", + ". c #c0c0c0", + "# c #000000", + ".......................................#", + "..........................###...####...#", + ".........................#...#.....#...#", + ".........................#........#....#", + ".........................#.......#.....#", + ".........................#...#..#......#", // 10 + "..........................###...#......#", + ".......................................#", + ".......................................#", + ".......................................#", + }; +static const char *mk1_xpmC8[] = { + "40 10 2 1", + ". c #c0c0c0", + "# c #000000", + ".......................................#", + "..........................###....##....#", + ".........................#...#..#..#....#", + ".........................#.......##....#", + ".........................#......#..#...#", + ".........................#...#..#..#...#", // 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", + "........................................", + "........................................", + "........................................", + "#######################.................", + "########################................", + "########################................", + "########################................", + "########################................", + "########################................", + "#######################.................", + "........................................", + "........................................", + "........................................", + }; +/* + 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 über Oktave: + + +------------+ ------------------------------ + 11 | | + | h | 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 | | + +------------+ ------------------------------ + */ + +//--------------------------------------------------------- +// Piano +//--------------------------------------------------------- + +Piano::Piano(QWidget* parent, int ymag) + : View(parent, 1, ymag) + { + setMouseTracking(true); + curPitch = -1; + octave = new QPixmap(oct_xpm); + c_keys[0] = new QPixmap(mk1_xpmC8); + c_keys[1] = new QPixmap(mk1_xpmC7); + c_keys[2] = new QPixmap(mk1_xpmC6); + c_keys[3] = new QPixmap(mk1_xpmC5); + c_keys[4] = new QPixmap(mk1_xpmC4); + c_keys[5] = new QPixmap(mk1_xpmC3); + c_keys[6] = new QPixmap(mk1_xpmC2); + c_keys[7] = new QPixmap(mk1_xpmC1); + + mk1 = new QPixmap(mk1_xpm); + mk2 = new QPixmap(mk2_xpm); + mk3 = new QPixmap(mk3_xpm); + mk4 = new QPixmap(mk4_xpm); + keyDown = -1; + button = Qt::NoButton; + } + +//--------------------------------------------------------- +// draw +//--------------------------------------------------------- + +void Piano::draw(QPainter& p, const QRect& r) + { + QPoint offset(0, KH*2); + p.drawTiledPixmap(r, *octave, r.topLeft()+offset); + + // draw C notes + for (int drawKey = 0; drawKey < 8;drawKey++) { + int octaveSize=91; + + int drawY = octaveSize * drawKey + 81 - KH*2; + if (drawY > r.y() && drawY < r.y() + r.height()) { + //printf("drawing c %d at %d r.y %d r.x %d\n",drawKey, drawY, r.y(), r.x()); + p.drawPixmap(0,drawY,*c_keys[drawKey]); + } + } + //p.drawTiledPixmap(r, *c1, r.topLeft()+offset + coffset); + //printf("drawText KH %d %d, x %d y %d\n",KH, curPitch, r.x(), r.y()); + //p.drawText(r,Qt::AlignAuto,"A"); + if (curPitch == -1) + return; + 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); + } + +//--------------------------------------------------------- +// pitch2y +//--------------------------------------------------------- + +int Piano::pitch2y(int pitch) const + { + int tt[] = { + 12, 19, 25, 32, 38, 51, 58, 64, 71, 77, 84, 90 + }; + int y = (75 * KH) - (tt[pitch%12] + (7 * KH) * (pitch/12)); + if (y < 0) + y = 0; + return y; + } + +//--------------------------------------------------------- +// y2pitch +//--------------------------------------------------------- + +int Piano::y2pitch(int y) const + { + const int total = (10 * 7 + 5) * KH; // 75 Ganztonschritte + y = total - y; + int oct = (y / (7 * KH)) * 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 + }; + return kt[y % 91] + oct; + } + +//--------------------------------------------------------- +// leaveEvent +//--------------------------------------------------------- + +void Piano::leaveEvent(QEvent*) + { + if (keyDown != -1) { + emit keyReleased(keyDown, shift); + keyDown = -1; + } + emit pitchChanged(-1); + setPitch(-1); + } + +//--------------------------------------------------------- +// setPitch +//--------------------------------------------------------- + +void Piano::setPitch(int pitch) + { + if (curPitch == pitch) + return; + curPitch = pitch; + redraw(); + } + +//--------------------------------------------------------- +// viewMouseMoveEvent +//--------------------------------------------------------- + +void Piano::viewMouseMoveEvent(QMouseEvent* event) + { + int pitch = y2pitch(event->y()); + emit pitchChanged(pitch); + setPitch(pitch); + + if (button != Qt::NoButton) { + int nk = y2pitch(event->y()); + if (nk < 0 || nk > 127) + nk = -1; + if (nk != keyDown) { + if (keyDown != -1) { + emit keyReleased(keyDown, shift); + } + keyDown = nk; + if (keyDown != -1) { + int velocity = event->x()*127/40; + //emit keyPressed(keyDown, shift); + emit keyPressed(keyDown, velocity>127 ? 127 : velocity, shift); + } + } + } + } + +//--------------------------------------------------------- +// viewMousePressEvent +//--------------------------------------------------------- + +void Piano::viewMousePressEvent(QMouseEvent* event) + { + button = event->button(); + shift = event->state() & Qt::ShiftButton; + if (keyDown != -1) { + emit keyReleased(keyDown, shift); + keyDown = -1; + } + keyDown = y2pitch(event->y()); + if (keyDown < 0 || keyDown > 127) { + keyDown = -1; + } + else { + int velocity = event->x()*127/40; + emit keyPressed(keyDown, velocity>127 ? 127 : velocity, shift); //emit keyPressed(keyDown, shift); + } + } + +//--------------------------------------------------------- +// viewMouseReleaseEvent +//--------------------------------------------------------- + +void Piano::viewMouseReleaseEvent(QMouseEvent* event) + { + button = Qt::NoButton; + shift = event->state() & Qt::ShiftButton; + if (keyDown != -1) { + emit keyReleased(keyDown, shift); + keyDown = -1; + } + } + diff --git a/muse2/muse/midiedit/piano.h b/muse2/muse/midiedit/piano.h new file mode 100644 index 00000000..2f06b810 --- /dev/null +++ b/muse2/muse/midiedit/piano.h @@ -0,0 +1,63 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: piano.h,v 1.2 2004/05/31 11:48:55 lunar_shuttle Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __PIANO_H__ +#define __PIANO_H__ + +#include "view.h" +//Added by qt3to4: +#include +#include +#include + +class QPainter; + +#define KH 13 + +//--------------------------------------------------------- +// Piano +//--------------------------------------------------------- + +class Piano : public View + { + int curPitch; + QPixmap* octave; + QPixmap* c_keys[10]; + QPixmap* mk1; + QPixmap* mk2; + QPixmap* mk3; + QPixmap* mk4; + int keyDown; + bool shift; + int button; + + Q_OBJECT + int y2pitch(int) const; + int pitch2y(int) const; + void viewMouseMoveEvent(QMouseEvent* event); + virtual void leaveEvent(QEvent*e); + + virtual void viewMousePressEvent(QMouseEvent* event); + virtual void viewMouseReleaseEvent(QMouseEvent*); + + protected: + virtual void draw(QPainter&, const QRect&); + + signals: + void pitchChanged(int); + void keyPressed(int, int, bool); + void keyReleased(int, bool); + + public slots: + void setPitch(int); + + public: + Piano(QWidget*, int); + }; + +#endif + diff --git a/muse2/muse/midiedit/pianoroll.cpp b/muse2/muse/midiedit/pianoroll.cpp new file mode 100644 index 00000000..93bf615c --- /dev/null +++ b/muse2/muse/midiedit/pianoroll.cpp @@ -0,0 +1,1107 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: pianoroll.cpp,v 1.25.2.15 2009/11/16 11:29:33 lunar_shuttle Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//Added by qt3to4: +#include +#include +#include +#include + +#include + +#include "xml.h" +#include "mtscale.h" +#include "prcanvas.h" +#include "pianoroll.h" +#include "scrollscale.h" +#include "piano.h" +#include "../ctrl/ctrledit.h" +#include "splitter.h" +#include "ttoolbar.h" +#include "tb1.h" +#include "utils.h" +#include "globals.h" +#include "gconfig.h" +#include "icons.h" +#include "audio.h" + +#include "cmd.h" +#include "quantconfig.h" +#include "shortcuts.h" + +int PianoRoll::_quantInit = 96; +int PianoRoll::_rasterInit = 96; +int PianoRoll::_widthInit = 600; +int PianoRoll::_heightInit = 400; +int PianoRoll::_quantStrengthInit = 80; // 1 - 100% +int PianoRoll::_quantLimitInit = 50; // tick value +bool PianoRoll::_quantLenInit = false; +int PianoRoll::_toInit = 0; +int PianoRoll::colorModeInit = 0; + +static const int xscale = -10; +static const int yscale = 1; +static const int pianoWidth = 40; +static int pianorollTools = PointerTool | PencilTool | RubberTool | DrawTool; + + + + +//--------------------------------------------------------- +// PianoRoll +//--------------------------------------------------------- + +PianoRoll::PianoRoll(PartList* pl, QWidget* parent, const char* name, unsigned initPos) + : MidiEditor(_quantInit, _rasterInit, pl, parent, name) + { + deltaMode = false; + resize(_widthInit, _heightInit); + selPart = 0; + quantConfig = 0; + _playEvents = false; + _quantStrength = _quantStrengthInit; + _quantLimit = _quantLimitInit; + _quantLen = _quantLenInit; + _to = _toInit; + colorMode = colorModeInit; + //---------Men---------------------------------- + menuEdit = new Q3PopupMenu(this); + menuBar()->insertItem(tr("&Edit"), menuEdit); + undoRedo->addTo(menuEdit); + Q3Accel* ud = new Q3Accel(this); + ud->connectItem(ud->insertItem(Qt::CTRL+Qt::Key_Z), song, SLOT(undo())); + Q3Accel* rd = new Q3Accel(this); + rd->connectItem(rd->insertItem(Qt::CTRL+Qt::Key_Y), song, SLOT(redo())); + + menuEdit->insertSeparator(); + menuEdit->insertItem(tr("Cut"), PianoCanvas::CMD_CUT); + menuEdit->setAccel(Qt::CTRL+Qt::Key_X, PianoCanvas::CMD_CUT); + menuEdit->insertItem(tr("Copy"), PianoCanvas::CMD_COPY); + menuEdit->setAccel(Qt::CTRL+Qt::Key_C, PianoCanvas::CMD_COPY); + menuEdit->insertItem(tr("Paste"), PianoCanvas::CMD_PASTE); + menuEdit->setAccel(Qt::CTRL+Qt::Key_V, PianoCanvas::CMD_PASTE); + menuEdit->insertSeparator(); + menuEdit->insertItem(tr("Delete Events"), PianoCanvas::CMD_DEL); + menuEdit->setAccel(Qt::Key_Delete, PianoCanvas::CMD_DEL); + menuEdit->insertSeparator(); + + menuSelect = new Q3PopupMenu(this); + menuSelect->insertItem(tr("Select All"), PianoCanvas::CMD_SELECT_ALL); + menuSelect->insertItem(tr("Select None"), PianoCanvas::CMD_SELECT_NONE); + menuSelect->insertItem(tr("Invert"), PianoCanvas::CMD_SELECT_INVERT); + + menuSelect->insertSeparator(); + menuSelect->insertItem(tr("Inside Loop"), PianoCanvas::CMD_SELECT_ILOOP); + + menuSelect->insertItem(tr("Outside Loop"), PianoCanvas::CMD_SELECT_OLOOP); + + menuSelect->insertSeparator(); + + menuSelect->insertItem(tr("Previous Part"), PianoCanvas::CMD_SELECT_PREV_PART); + menuSelect->insertItem(tr("Next Part"), PianoCanvas::CMD_SELECT_NEXT_PART); + + menuEdit->insertItem(tr("&Select"), menuSelect); + + eventColor = new Q3PopupMenu(this); + eventColor->insertItem(tr("blue"), 0); + eventColor->insertItem(tr("pitch colors"), 1); + eventColor->insertItem(tr("velocity colors"), 2); + connect(eventColor, SIGNAL(activated(int)), SLOT(setEventColorMode(int))); + + menuConfig = new Q3PopupMenu(this); + menuBar()->insertItem(tr("&Config"), menuConfig); + menu_ids[CMD_EVENT_COLOR] = menuConfig->insertItem(tr("event color"), eventColor, 0); + + menuFunctions = new Q3PopupMenu(this); + menuBar()->insertItem(tr("&Functions"), menuFunctions); + menuFunctions->insertTearOffHandle(); + menuFunctions->insertItem(tr("Over Quantize"), PianoCanvas::CMD_OVER_QUANTIZE); + + menuFunctions->insertItem(tr("Note On Quantize"), PianoCanvas::CMD_ON_QUANTIZE); + + menuFunctions->insertItem(tr("Note On/Off Quantize"), PianoCanvas::CMD_ONOFF_QUANTIZE); + menuFunctions->insertItem(tr("Iterative Quantize"), PianoCanvas::CMD_ITERATIVE_QUANTIZE); + + menuFunctions->insertSeparator(); + menu_ids[CMD_CONFIG_QUANT] = menuFunctions->insertItem(tr("Config Quant..."), this, SLOT(configQuant()), 0); + menuFunctions->insertSeparator(); + menuFunctions->insertItem(tr("Modify Gate Time"), PianoCanvas::CMD_MODIFY_GATE_TIME); + menuFunctions->insertItem(tr("Modify Velocity"), PianoCanvas::CMD_MODIFY_VELOCITY); + menuFunctions->insertItem(tr("Crescendo"), PianoCanvas::CMD_CRESCENDO); + menuFunctions->insertItem(tr("Transpose"), PianoCanvas::CMD_TRANSPOSE); + menuFunctions->insertItem(tr("Thin Out"), PianoCanvas::CMD_THIN_OUT); + menuFunctions->insertItem(tr("Erase Event"), PianoCanvas::CMD_ERASE_EVENT); + menuFunctions->insertItem(tr("Note Shift"), PianoCanvas::CMD_NOTE_SHIFT); + menuFunctions->insertItem(tr("Move Clock"), PianoCanvas::CMD_MOVE_CLOCK); + menuFunctions->insertItem(tr("Copy Measure"), PianoCanvas::CMD_COPY_MEASURE); + menuFunctions->insertItem(tr("Erase Measure"), PianoCanvas::CMD_ERASE_MEASURE); + menuFunctions->insertItem(tr("Delete Measure"), PianoCanvas::CMD_DELETE_MEASURE); + menuFunctions->insertItem(tr("Create Measure"), PianoCanvas::CMD_CREATE_MEASURE); + menuFunctions->insertItem(tr("Set fixed length"), PianoCanvas::CMD_FIXED_LEN); + menuFunctions->insertItem(tr("Delete overlaps"), PianoCanvas::CMD_DELETE_OVERLAPS); + + menuFunctions->setItemEnabled(PianoCanvas::CMD_CRESCENDO, false); + menuFunctions->setItemEnabled(PianoCanvas::CMD_TRANSPOSE, false); + menuFunctions->setItemEnabled(PianoCanvas::CMD_THIN_OUT, false); + menuFunctions->setItemEnabled(PianoCanvas::CMD_ERASE_EVENT, false); + menuFunctions->setItemEnabled(PianoCanvas::CMD_NOTE_SHIFT, false); + menuFunctions->setItemEnabled(PianoCanvas::CMD_MOVE_CLOCK, false); + menuFunctions->setItemEnabled(PianoCanvas::CMD_COPY_MEASURE, false); + menuFunctions->setItemEnabled(PianoCanvas::CMD_ERASE_MEASURE, false); + menuFunctions->setItemEnabled(PianoCanvas::CMD_DELETE_MEASURE, false); + menuFunctions->setItemEnabled(PianoCanvas::CMD_CREATE_MEASURE, false); + + menuPlugins = new Q3PopupMenu(this); + song->populateScriptMenu(menuPlugins, this); + menuBar()->insertItem(tr("&Plugins"), menuPlugins); + connect(menuEdit, SIGNAL(activated(int)), SLOT(cmd(int))); + connect(menuSelect, SIGNAL(activated(int)), SLOT(cmd(int))); + connect(menuFunctions, SIGNAL(activated(int)), SLOT(cmd(int))); + + //---------ToolBar---------------------------------- + tools = new Q3ToolBar(this, "pianoroll-tools"); + tools->setLabel(tr("Pianoroll Tools")); + undoRedo->addTo(tools); + tools->addSeparator(); + + srec = new QToolButton(tools, "srec"); + QToolTip::add(srec, tr("Step Record")); + srec->setPixmap(*steprecIcon); + srec->setToggleButton(true); + + midiin = new QToolButton(tools, "midiin"); + QToolTip::add(midiin, tr("Midi Input")); + midiin->setPixmap(*midiinIcon); + midiin->setToggleButton(true); + + speaker = new QToolButton(tools, "speaker"); + QToolTip::add(speaker, tr("Play Events")); + speaker->setPixmap(*speakerIcon); + speaker->setToggleButton(true); + + tools2 = new EditToolBar(this, pianorollTools); + + Q3ToolBar* panicToolbar = new Q3ToolBar(this); + panicAction->addTo(panicToolbar); + + //------------------------------------------------------------- + // Transport Bar + Q3ToolBar* transport = new Q3ToolBar(this); + transportAction->addTo(transport); + + toolbar = new Toolbar1(this, _rasterInit, _quantInit); + info = new NoteInfo(this); + + //--------------------------------------------------- + // split + //--------------------------------------------------- + + splitter = new Splitter(Qt::Vertical, mainw, "splitter"); + QPushButton* ctrl = new QPushButton(tr("ctrl"), mainw, "Ctrl"); + ctrl->setFont(config.fonts[3]); + QToolTip::add(ctrl, tr("Add Controller View")); + hscroll = new ScrollScale(-25, -2, xscale, 20000, Qt::Horizontal, mainw); + ctrl->setFixedSize(pianoWidth, hscroll->sizeHint().height()); + + QSizeGrip* corner = new QSizeGrip(mainw); + + mainGrid->setRowStretch(0, 100); + mainGrid->setColStretch(1, 100); + mainGrid->addMultiCellWidget(splitter, 0, 0, 0, 2); + mainGrid->addWidget(ctrl, 1, 0); + mainGrid->addWidget(hscroll, 1, 1); + mainGrid->addWidget(corner, 1, 2, Qt::AlignBottom|Qt::AlignRight); + mainGrid->addRowSpacing(1, hscroll->sizeHint().height()); + + QWidget* split1 = new QWidget(splitter, "split1"); + Q3GridLayout* gridS1 = new Q3GridLayout(split1); + time = new MTScale(&_raster, split1, xscale); + Piano* piano = new Piano(split1, yscale); + canvas = new PianoCanvas(this, split1, xscale, yscale); + vscroll = new ScrollScale(-3, 7, yscale, KH * 75, Qt::Vertical, split1); + + int offset = -(config.division/4); + canvas->setOrigin(offset, 0); + canvas->setCanvasTools(pianorollTools); + canvas->setFocus(); + connect(canvas, SIGNAL(toolChanged(int)), tools2, SLOT(set(int))); + time->setOrigin(offset, 0); + + gridS1->setRowStretch(2, 100); + gridS1->setColStretch(1, 100); + + gridS1->addMultiCellWidget(time, 0, 0, 1, 2); + gridS1->addMultiCellWidget(hLine(split1), 1, 1, 0, 2); + gridS1->addWidget(piano, 2, 0); + gridS1->addWidget(canvas, 2, 1); + + gridS1->addWidget(vscroll, 2, 2); +// gridS1->addWidget(time, 0, 1); +// gridS1->addWidget(hLine(split1), 1, 1); +// gridS1->addWidget(piano, 2, 0); +// gridS1->addWidget(canvas, 2, 1); +// gridS1->addMultiCellWidget(vscroll, 1, 2, 2, 2); + + piano->setFixedWidth(pianoWidth); + + connect(tools2, SIGNAL(toolChanged(int)), canvas, SLOT(setTool(int))); + + connect(ctrl, SIGNAL(clicked()), SLOT(addCtrl())); + connect(info, SIGNAL(valueChanged(NoteInfo::ValType, int)), SLOT(noteinfoChanged(NoteInfo::ValType, int))); + connect(vscroll, SIGNAL(scrollChanged(int)), piano, SLOT(setYPos(int))); + connect(vscroll, SIGNAL(scrollChanged(int)), canvas, SLOT(setYPos(int))); + connect(vscroll, SIGNAL(scaleChanged(int)), canvas, SLOT(setYMag(int))); + connect(vscroll, SIGNAL(scaleChanged(int)), piano, SLOT(setYMag(int))); + + connect(hscroll, SIGNAL(scrollChanged(int)), canvas, SLOT(setXPos(int))); + connect(hscroll, SIGNAL(scrollChanged(int)), time, SLOT(setXPos(int))); + + connect(hscroll, SIGNAL(scaleChanged(int)), canvas, SLOT(setXMag(int))); + connect(hscroll, SIGNAL(scaleChanged(int)), time, SLOT(setXMag(int))); + + connect(canvas, SIGNAL(pitchChanged(int)), piano, SLOT(setPitch(int))); + connect(canvas, SIGNAL(verticalScroll(unsigned)), vscroll, SLOT(setPos(unsigned))); + connect(canvas, SIGNAL(horizontalScroll(unsigned)),hscroll, SLOT(setPos(unsigned))); + connect(canvas, SIGNAL(horizontalScrollNoLimit(unsigned)),hscroll, SLOT(setPosNoLimit(unsigned))); + connect(canvas, SIGNAL(selectionChanged(int, Event&, Part*)), this, + SLOT(setSelection(int, Event&, Part*))); + + connect(piano, SIGNAL(keyPressed(int, int, bool)), canvas, SLOT(pianoPressed(int, int, bool))); + connect(piano, SIGNAL(keyReleased(int, bool)), canvas, SLOT(pianoReleased(int, bool))); + connect(srec, SIGNAL(toggled(bool)), SLOT(setSteprec(bool))); + connect(midiin, SIGNAL(toggled(bool)), canvas, SLOT(setMidiin(bool))); + connect(speaker, SIGNAL(toggled(bool)), SLOT(setSpeaker(bool))); + connect(canvas, SIGNAL(followEvent(int)), SLOT(follow(int))); + + connect(hscroll, SIGNAL(scaleChanged(int)), SLOT(updateHScrollRange())); + piano->setYPos(KH * 30); + canvas->setYPos(KH * 30); + vscroll->setPos(KH * 30); + //setSelection(0, 0, 0); //Really necessary? Causes segfault when only 1 item selected, replaced by the following: + info->setEnabled(false); + + connect(song, SIGNAL(songChanged(int)), SLOT(songChanged1(int))); + + setCaption(canvas->getCaption()); + + updateHScrollRange(); + // connect to toolbar + connect(canvas, SIGNAL(pitchChanged(int)), toolbar, SLOT(setPitch(int))); + connect(canvas, SIGNAL(timeChanged(unsigned)), SLOT(setTime(unsigned))); + connect(piano, SIGNAL(pitchChanged(int)), toolbar, SLOT(setPitch(int))); + connect(time, SIGNAL(timeChanged(unsigned)), SLOT(setTime(unsigned))); + connect(toolbar, SIGNAL(quantChanged(int)), SLOT(setQuant(int))); + connect(toolbar, SIGNAL(rasterChanged(int)),SLOT(setRaster(int))); + connect(toolbar, SIGNAL(toChanged(int)), SLOT(setTo(int))); + connect(toolbar, SIGNAL(soloChanged(bool)), SLOT(soloChanged(bool))); + + setFocusPolicy(Qt::StrongFocus); + setEventColorMode(colorMode); + + QClipboard* cb = QApplication::clipboard(); + connect(cb, SIGNAL(dataChanged()), SLOT(clipboardChanged())); + + clipboardChanged(); // enable/disable "Paste" + selectionChanged(); // enable/disable "Copy" & "Paste" + initShortcuts(); // initialize shortcuts + + const Pos cpos=song->cPos(); + canvas->setPos(0, cpos.tick(), true); + canvas->selectAtTick(cpos.tick()); + //canvas->selectFirst(); +// + if(canvas->track()) + toolbar->setSolo(canvas->track()->solo()); + + unsigned pos; + if(initPos >= MAXINT) + pos = song->cpos(); + else + pos = initPos; + if(pos > MAXINT) + pos = MAXINT; + hscroll->setOffset((int)pos); + } + +//--------------------------------------------------------- +// songChanged1 +//--------------------------------------------------------- + +void PianoRoll::songChanged1(int bits) + { + + if (bits & SC_SOLO) + { + toolbar->setSolo(canvas->track()->solo()); + return; + } + songChanged(bits); + } + +//--------------------------------------------------------- +// configChanged +//--------------------------------------------------------- + +void PianoRoll::configChanged() + { + initShortcuts(); + } + +//--------------------------------------------------------- +// updateHScrollRange +//--------------------------------------------------------- + +void PianoRoll::updateHScrollRange() +{ + int s, e; + canvas->range(&s, &e); + // Show one more measure. + e += sigmap.ticksMeasure(e); + // Show another quarter measure due to imprecise drawing at canvas end point. + e += sigmap.ticksMeasure(e) / 4; + // Compensate for the fixed piano and vscroll widths. + e += canvas->rmapxDev(pianoWidth - vscroll->width()); + int s1, e1; + hscroll->range(&s1, &e1); + if(s != s1 || e != e1) + hscroll->setRange(s, e); +} + +//--------------------------------------------------------- +// follow +//--------------------------------------------------------- + +void PianoRoll::follow(int pos) + { + int s, e; + canvas->range(&s, &e); + + if (pos < e && pos >= s) + hscroll->setOffset(pos); + if (pos < s) + hscroll->setOffset(s); + } + +//--------------------------------------------------------- +// setTime +//--------------------------------------------------------- + +void PianoRoll::setTime(unsigned tick) + { + toolbar->setTime(tick); + time->setPos(3, tick, false); + } + +//--------------------------------------------------------- +// ~Pianoroll +//--------------------------------------------------------- + +PianoRoll::~PianoRoll() + { + undoRedo->removeFrom(tools); + } + +//--------------------------------------------------------- +// cmd +// pulldown menu commands +//--------------------------------------------------------- + +void PianoRoll::cmd(int cmd) + { + ((PianoCanvas*)canvas)->cmd(cmd, _quantStrength, _quantLimit, _quantLen, _to); + } + +//--------------------------------------------------------- +// setSelection +// update Info Line +//--------------------------------------------------------- + +void PianoRoll::setSelection(int tick, Event& e, Part* p) + { + int selections = canvas->selectionSize(); + + selEvent = e; + selPart = (MidiPart*)p; + selTick = tick; + + 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; + } + // Indicate do undo, and do not do port controller values and clone parts. + //audio->msgChangeEvent(selEvent, event, selPart); + audio->msgChangeEvent(selEvent, event, selPart, true, false, false); + } + 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); + } + } + +//--------------------------------------------------------- +// addCtrl +//--------------------------------------------------------- + +CtrlEdit* PianoRoll::addCtrl() + { + CtrlEdit* ctrlEdit = new CtrlEdit(splitter, this, xscale, false, "pianoCtrlEdit"); + 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->show(); + ctrlEditList.push_back(ctrlEdit); + return ctrlEdit; + } + +//--------------------------------------------------------- +// removeCtrl +//--------------------------------------------------------- + +void PianoRoll::removeCtrl(CtrlEdit* ctrl) + { + for (std::list::iterator i = ctrlEditList.begin(); + i != ctrlEditList.end(); ++i) { + if (*i == ctrl) { + ctrlEditList.erase(i); + break; + } + } + } + +//--------------------------------------------------------- +// closeEvent +//--------------------------------------------------------- + +void PianoRoll::closeEvent(QCloseEvent* e) + { + emit deleted((unsigned long)this); + e->accept(); + } + +//--------------------------------------------------------- +// readConfiguration +//--------------------------------------------------------- + +void PianoRoll::readConfiguration(Xml& xml) + { + for (;;) { + Xml::Token token = xml.parse(); + if (token == Xml::Error || token == Xml::End) + break; + const QString& tag = xml.s1(); + switch (token) { + case Xml::TagStart: + if (tag == "quant") + _quantInit = xml.parseInt(); + else if (tag == "raster") + _rasterInit = xml.parseInt(); + else if (tag == "quantStrength") + _quantStrengthInit = xml.parseInt(); + else if (tag == "quantLimit") + _quantLimitInit = xml.parseInt(); + else if (tag == "quantLen") + _quantLenInit = xml.parseInt(); + else if (tag == "to") + _toInit = xml.parseInt(); + else if (tag == "colormode") + colorModeInit = xml.parseInt(); + else if (tag == "width") + _widthInit = xml.parseInt(); + else if (tag == "height") + _heightInit = xml.parseInt(); + else + xml.unknown("PianoRoll"); + break; + case Xml::TagEnd: + if (tag == "pianoroll") + return; + default: + break; + } + } + } + +//--------------------------------------------------------- +// writeConfiguration +//--------------------------------------------------------- + +void PianoRoll::writeConfiguration(int level, Xml& xml) + { + xml.tag(level++, "pianoroll"); + xml.intTag(level, "quant", _quantInit); + xml.intTag(level, "raster", _rasterInit); + xml.intTag(level, "quantStrength", _quantStrengthInit); + xml.intTag(level, "quantLimit", _quantLimitInit); + xml.intTag(level, "quantLen", _quantLenInit); + xml.intTag(level, "to", _toInit); + xml.intTag(level, "width", _widthInit); + xml.intTag(level, "height", _heightInit); + xml.intTag(level, "colormode", colorModeInit); + xml.etag(level, "pianoroll"); + } + +//--------------------------------------------------------- +// soloChanged +// signal from solo button +//--------------------------------------------------------- + +void PianoRoll::soloChanged(bool flag) + { + audio->msgSetSolo(canvas->track(), flag); + song->update(SC_SOLO); + } + +//--------------------------------------------------------- +// setRaster +//--------------------------------------------------------- + +void PianoRoll::setRaster(int val) + { + _rasterInit = val; + MidiEditor::setRaster(val); + canvas->redrawGrid(); + canvas->setFocus(); // give back focus after kb input + } + +//--------------------------------------------------------- +// setQuant +//--------------------------------------------------------- + +void PianoRoll::setQuant(int val) + { + _quantInit = val; + MidiEditor::setQuant(val); + canvas->setFocus(); + } + +//--------------------------------------------------------- +// writeStatus +//--------------------------------------------------------- + +void PianoRoll::writeStatus(int level, Xml& xml) const + { + writePartList(level, xml); + xml.tag(level++, "pianoroll"); + MidiEditor::writeStatus(level, xml); + splitter->writeStatus(level, xml); + + for (std::list::const_iterator i = ctrlEditList.begin(); + i != ctrlEditList.end(); ++i) { + (*i)->writeStatus(level, xml); + } + + xml.intTag(level, "steprec", canvas->steprec()); + xml.intTag(level, "midiin", canvas->midiin()); + xml.intTag(level, "tool", int(canvas->tool())); + xml.intTag(level, "quantStrength", _quantStrength); + xml.intTag(level, "quantLimit", _quantLimit); + xml.intTag(level, "quantLen", _quantLen); + xml.intTag(level, "playEvents", _playEvents); + xml.intTag(level, "xpos", hscroll->pos()); + xml.intTag(level, "xmag", hscroll->mag()); + xml.intTag(level, "ypos", vscroll->pos()); + xml.intTag(level, "ymag", vscroll->mag()); + xml.tag(level, "/pianoroll"); + } + +//--------------------------------------------------------- +// readStatus +//--------------------------------------------------------- + +void PianoRoll::readStatus(Xml& xml) + { + for (;;) { + Xml::Token token = xml.parse(); + if (token == Xml::Error || token == Xml::End) + break; + const QString& tag = xml.s1(); + switch (token) { + case Xml::TagStart: + if (tag == "steprec") { + int val = xml.parseInt(); + canvas->setSteprec(val); + srec->setOn(val); + } + else if (tag == "midiin") { + int val = xml.parseInt(); + canvas->setMidiin(val); + midiin->setOn(val); + } + else if (tag == "tool") { + int tool = xml.parseInt(); + canvas->setTool(tool); + tools2->set(tool); + } + else if (tag == "midieditor") + MidiEditor::readStatus(xml); + else if (tag == "ctrledit") { + CtrlEdit* ctrl = addCtrl(); + ctrl->readStatus(xml); + } + else if (tag == splitter->name()) + splitter->readStatus(xml); + else if (tag == "quantStrength") + _quantStrength = xml.parseInt(); + else if (tag == "quantLimit") + _quantLimit = xml.parseInt(); + else if (tag == "quantLen") + _quantLen = xml.parseInt(); + else if (tag == "playEvents") { + _playEvents = xml.parseInt(); + canvas->playEvents(_playEvents); + speaker->setOn(_playEvents); + } + else if (tag == "xmag") + hscroll->setMag(xml.parseInt()); + else if (tag == "xpos") + hscroll->setPos(xml.parseInt()); + else if (tag == "ymag") + vscroll->setMag(xml.parseInt()); + else if (tag == "ypos") + vscroll->setPos(xml.parseInt()); + else + xml.unknown("PianoRoll"); + break; + case Xml::TagEnd: + if (tag == "pianoroll") { + _quantInit = _quant; + _rasterInit = _raster; + toolbar->setRaster(_raster); + toolbar->setQuant(_quant); + canvas->redrawGrid(); + return; + } + default: + break; + } + } + } + +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 + }; + +//--------------------------------------------------------- +// viewKeyPressEvent +//--------------------------------------------------------- + +void PianoRoll::keyPressEvent(QKeyEvent* event) + { + if (info->hasFocus()) { + event->ignore(); + return; + } + + 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 = (PianoCanvas*)canvas; + int key = event->key(); + + if (event->state() & Qt::ShiftButton) + key += Qt::SHIFT; + if (event->state() & Qt::AltButton) + key += Qt::ALT; + if (event->state() & Qt::ControlButton) + key+= Qt::CTRL; + + if (key == Qt::Key_Escape) { + close(); + return; + } + else if (key == shortcuts[SHRT_TOOL_POINTER].key) { + tools2->set(PointerTool); + return; + } + else if (key == shortcuts[SHRT_TOOL_PENCIL].key) { + tools2->set(PencilTool); + return; + } + else if (key == shortcuts[SHRT_TOOL_RUBBER].key) { + tools2->set(RubberTool); + return; + } + else if (key == shortcuts[SHRT_TOOL_LINEDRAW].key) { + tools2->set(DrawTool); + return; + } + else if (key == shortcuts[SHRT_POS_INC].key) { + pc->pianoCmd(CMD_RIGHT); + return; + } + else if (key == shortcuts[SHRT_POS_DEC].key) { + pc->pianoCmd(CMD_LEFT); + return; + } + else if (key == shortcuts[SHRT_INSERT_AT_LOCATION].key) { + pc->pianoCmd(CMD_INSERT); + return; + } + else if (key == Qt::Key_Delete) { + pc->pianoCmd(CMD_DELETE); + return; + } + else if (key == shortcuts[SHRT_ZOOM_IN].key) { + int mag = hscroll->mag(); + int zoomlvl = ScrollScale::getQuickZoomLevel(mag); + if (zoomlvl < 23) + zoomlvl++; + + int newmag = ScrollScale::convertQuickZoomLevelToMag(zoomlvl); + hscroll->setMag(newmag); + //printf("mag = %d zoomlvl = %d newmag = %d\n", mag, zoomlvl, newmag); + return; + } + else if (key == shortcuts[SHRT_ZOOM_OUT].key) { + int mag = hscroll->mag(); + int zoomlvl = ScrollScale::getQuickZoomLevel(mag); + if (zoomlvl > 1) + zoomlvl--; + + int newmag = ScrollScale::convertQuickZoomLevelToMag(zoomlvl); + hscroll->setMag(newmag); + //printf("mag = %d zoomlvl = %d newmag = %d\n", mag, zoomlvl, newmag); + return; + } + else if (key == shortcuts[SHRT_GOTO_CPOS].key) { + PartList* p = this->parts(); + Part* first = p->begin()->second; + hscroll->setPos(song->cpos() - first->tick() ); + return; + } + else if (key == shortcuts[SHRT_SCROLL_LEFT].key) { + int pos = hscroll->pos() - config.division; + if (pos < 0) + pos = 0; + hscroll->setPos(pos); + return; + } + else if (key == shortcuts[SHRT_SCROLL_RIGHT].key) { + int pos = hscroll->pos() + config.division; + hscroll->setPos(pos); + return; + } + else if (key == shortcuts[SHRT_SET_QUANT_1].key) + val = rasterTable[8 + off]; + else if (key == shortcuts[SHRT_SET_QUANT_2].key) + val = rasterTable[7 + off]; + else if (key == shortcuts[SHRT_SET_QUANT_3].key) + val = rasterTable[6 + off]; + else if (key == shortcuts[SHRT_SET_QUANT_4].key) + val = rasterTable[5 + off]; + else if (key == shortcuts[SHRT_SET_QUANT_5].key) + val = rasterTable[4 + off]; + else if (key == shortcuts[SHRT_SET_QUANT_6].key) + val = rasterTable[3 + off]; + else if (key == shortcuts[SHRT_SET_QUANT_7].key) + val = rasterTable[2 + off]; + else if (key == shortcuts[SHRT_TOGGLE_TRIOL].key) + val = rasterTable[index + ((off == 0) ? 9 : 0)]; + else if (key == shortcuts[SHRT_EVENT_COLOR].key) { + if (colorMode == 0) + colorMode = 1; + else if (colorMode == 1) + colorMode = 2; + else + colorMode = 0; + setEventColorMode(colorMode); + return; + } + else if (key == shortcuts[SHRT_TOGGLE_PUNCT].key) + val = rasterTable[index + ((off == 18) ? 9 : 18)]; + + else if (key == shortcuts[SHRT_TOGGLE_PUNCT2].key) {//CDW + if ((off == 18) && (index > 2)) { + val = rasterTable[index + 9 - 1]; + } + else if ((off == 9) && (index < 8)) { + val = rasterTable[index + 18 + 1]; + } + else + return; + } + else { //Default: + event->ignore(); + return; + } + setQuant(val); + setRaster(val); + toolbar->setQuant(_quant); + toolbar->setRaster(_raster); + } + +//--------------------------------------------------------- +// configQuant +//--------------------------------------------------------- + +void PianoRoll::configQuant() + { + if (!quantConfig) { + quantConfig = new QuantConfig(_quantStrength, _quantLimit, _quantLen); + connect(quantConfig, SIGNAL(setQuantStrength(int)), SLOT(setQuantStrength(int))); + connect(quantConfig, SIGNAL(setQuantLimit(int)), SLOT(setQuantLimit(int))); + connect(quantConfig, SIGNAL(setQuantLen(bool)), SLOT(setQuantLen(bool))); + } + quantConfig->show(); + } + +//--------------------------------------------------------- +// setSteprec +//--------------------------------------------------------- + +void PianoRoll::setSteprec(bool flag) + { + canvas->setSteprec(flag); + if (flag == false) + midiin->setOn(flag); + } + +//--------------------------------------------------------- +// setEventColorMode +//--------------------------------------------------------- + +void PianoRoll::setEventColorMode(int mode) + { + colorMode = mode; + colorModeInit = colorMode; + eventColor->setItemChecked(0, mode == 0); + eventColor->setItemChecked(1, mode == 1); + eventColor->setItemChecked(2, mode == 2); + ((PianoCanvas*)(canvas))->setColorMode(colorMode); + } + +//--------------------------------------------------------- +// clipboardChanged +//--------------------------------------------------------- + +void PianoRoll::clipboardChanged() + { + QMimeSource* ms = QApplication::clipboard()->data(QClipboard::Clipboard); + bool flag = false; + if (ms) { + for (int i = 0;; ++i) { + if (ms->format(i) == 0) + break; +// printf("clipboard changed %s\n", ms->format(i)); + flag = strcmp(ms->format(i), "text/eventlist;charset=UTF-8") == 0; + if (flag) + break; + } + } + menuEdit->setItemEnabled(PianoCanvas::CMD_PASTE, flag); + } + +//--------------------------------------------------------- +// selectionChanged +//--------------------------------------------------------- + +void PianoRoll::selectionChanged() + { + bool flag = canvas->selectionSize() > 0; + menuEdit->setItemEnabled(PianoCanvas::CMD_CUT, flag); + menuEdit->setItemEnabled(PianoCanvas::CMD_COPY, flag); + menuEdit->setItemEnabled(PianoCanvas::CMD_DEL, flag); + } + +//--------------------------------------------------------- +// setSpeaker +//--------------------------------------------------------- + +void PianoRoll::setSpeaker(bool val) + { + _playEvents = val; + canvas->playEvents(_playEvents); + } + +//--------------------------------------------------------- +// resizeEvent +//--------------------------------------------------------- + +void PianoRoll::resizeEvent(QResizeEvent* ev) + { + QWidget::resizeEvent(ev); + _widthInit = ev->size().width(); + _heightInit = ev->size().height(); + } + + +//--------------------------------------------------------- +// initShortcuts +//--------------------------------------------------------- + +void PianoRoll::initShortcuts() + { + menuSelect->setAccel(shortcuts[SHRT_SELECT_ALL].key, PianoCanvas::CMD_SELECT_ALL); + menuSelect->setAccel(shortcuts[SHRT_SELECT_NONE].key, PianoCanvas::CMD_SELECT_NONE); + menuSelect->setAccel(shortcuts[SHRT_SELECT_INVERT].key, PianoCanvas::CMD_SELECT_INVERT); + menuSelect->setAccel(shortcuts[SHRT_SELECT_ILOOP].key, PianoCanvas::CMD_SELECT_ILOOP); + menuSelect->setAccel(shortcuts[SHRT_SELECT_OLOOP].key, PianoCanvas::CMD_SELECT_OLOOP); + + menuSelect->setAccel(shortcuts[SHRT_SELECT_PREV_PART].key, PianoCanvas::CMD_SELECT_PREV_PART); + menuSelect->setAccel(shortcuts[SHRT_SELECT_NEXT_PART].key, PianoCanvas::CMD_SELECT_NEXT_PART); + + menuConfig->setAccel(shortcuts[SHRT_EVENT_COLOR].key, menu_ids[CMD_EVENT_COLOR]); + + menuFunctions->setAccel(shortcuts[SHRT_OVER_QUANTIZE].key, PianoCanvas::CMD_OVER_QUANTIZE); + menuFunctions->setAccel(shortcuts[SHRT_ON_QUANTIZE].key, PianoCanvas::CMD_ON_QUANTIZE); + menuFunctions->setAccel(shortcuts[SHRT_ONOFF_QUANTIZE].key, PianoCanvas::CMD_ONOFF_QUANTIZE); + menuFunctions->setAccel(shortcuts[SHRT_ITERATIVE_QUANTIZE].key, PianoCanvas::CMD_ITERATIVE_QUANTIZE); + menuFunctions->setAccel(shortcuts[SHRT_MODIFY_GATE_TIME].key, PianoCanvas::CMD_MODIFY_GATE_TIME); + menuFunctions->setAccel(shortcuts[SHRT_MODIFY_VELOCITY].key, PianoCanvas::CMD_MODIFY_VELOCITY); + menuFunctions->setAccel(shortcuts[SHRT_CRESCENDO].key, PianoCanvas::CMD_CRESCENDO); + menuFunctions->setAccel(shortcuts[SHRT_TRANSPOSE].key, PianoCanvas::CMD_TRANSPOSE); + menuFunctions->setAccel(shortcuts[SHRT_THIN_OUT].key, PianoCanvas::CMD_THIN_OUT); + menuFunctions->setAccel(shortcuts[SHRT_ERASE_EVENT].key, PianoCanvas::CMD_ERASE_EVENT); + menuFunctions->setAccel(shortcuts[SHRT_NOTE_SHIFT].key, PianoCanvas::CMD_NOTE_SHIFT); + menuFunctions->setAccel(shortcuts[SHRT_MOVE_CLOCK].key, PianoCanvas::CMD_MOVE_CLOCK); + menuFunctions->setAccel(shortcuts[SHRT_COPY_MEASURE].key, PianoCanvas::CMD_COPY_MEASURE); + menuFunctions->setAccel(shortcuts[SHRT_ERASE_MEASURE].key, PianoCanvas::CMD_ERASE_MEASURE); + menuFunctions->setAccel(shortcuts[SHRT_DELETE_MEASURE].key, PianoCanvas::CMD_DELETE_MEASURE); + menuFunctions->setAccel(shortcuts[SHRT_CREATE_MEASURE].key, PianoCanvas::CMD_CREATE_MEASURE); + menuFunctions->setAccel(shortcuts[SHRT_CONFIG_QUANT].key, menu_ids[CMD_CONFIG_QUANT]); + menuFunctions->setAccel(shortcuts[SHRT_FIXED_LEN].key, PianoCanvas::CMD_FIXED_LEN); + menuFunctions->setAccel(shortcuts[SHRT_DELETE_OVERLAPS].key, PianoCanvas::CMD_DELETE_OVERLAPS); + } + +//--------------------------------------------------------- +// execDeliveredScript +//--------------------------------------------------------- +void PianoRoll::execDeliveredScript(int id) +{ + //QString scriptfile = QString(INSTPREFIX) + SCRIPTSSUFFIX + deliveredScriptNames[id]; + QString scriptfile = song->getScriptPath(id, true); + song->executeScript(scriptfile.latin1(), parts(), quant(), true); +} + +//--------------------------------------------------------- +// execUserScript +//--------------------------------------------------------- +void PianoRoll::execUserScript(int id) +{ + QString scriptfile = song->getScriptPath(id, false); + song->executeScript(scriptfile.latin1(), parts(), quant(), true); +} + diff --git a/muse2/muse/midiedit/pianoroll.h b/muse2/muse/midiedit/pianoroll.h new file mode 100644 index 00000000..8987915a --- /dev/null +++ b/muse2/muse/midiedit/pianoroll.h @@ -0,0 +1,146 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: pianoroll.h,v 1.5.2.4 2009/11/16 11:29:33 lunar_shuttle Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __PIANOROLL_H__ +#define __PIANOROLL_H__ + +#include +#include +//Added by qt3to4: +#include +#include +#include +#include +#include + +#include +#include "noteinfo.h" +#include "cobject.h" +#include "midieditor.h" +#include "tools.h" +#include "event.h" + +class MidiPart; +class TimeLabel; +class PitchLabel; +class QLabel; +class PianoCanvas; +class IntLabel; +class MTScale; +class Track; +class QToolButton; +class QPushButton; +class CtrlEdit; +class Splitter; +class PartList; +class Toolbar1; +class Xml; +class QuantConfig; +class ScrollScale; +class Part; +class SNode; + +//--------------------------------------------------------- +// PianoRoll +//--------------------------------------------------------- + +class PianoRoll : public MidiEditor { + Event selEvent; + MidiPart* selPart; + int selTick; + + enum { CMD_EVENT_COLOR, CMD_CONFIG_QUANT, CMD_LAST }; + int menu_ids[CMD_LAST]; + Q3PopupMenu *menuEdit, *menuFunctions, *menuSelect, *menuConfig, *menuPlugins; + + int tickOffset; + int lenOffset; + int pitchOffset; + int veloOnOffset; + int veloOffOffset; + bool deltaMode; + + NoteInfo* info; + QToolButton* srec; + QToolButton* midiin; + + Toolbar1* toolbar; + Splitter* splitter; + + QToolButton* speaker; + Q3ToolBar* tools; + EditToolBar* tools2; + + Q3PopupMenu* eventColor; + int colorMode; + + static int _quantInit, _rasterInit; + static int _widthInit, _heightInit; + + static int _quantStrengthInit; + static int _quantLimitInit; + static bool _quantLenInit; + static int _toInit; + static int colorModeInit; + + int _quantStrength; + int _quantLimit; + int _to; + bool _quantLen; + QuantConfig* quantConfig; + bool _playEvents; + + + Q_OBJECT + void initShortcuts(); + QWidget* genToolbar(QWidget* parent); + virtual void closeEvent(QCloseEvent*); + virtual void keyPressEvent(QKeyEvent*); + virtual void resizeEvent(QResizeEvent*); + + private slots: + void setSelection(int, Event&, Part*); + void noteinfoChanged(NoteInfo::ValType, int); + CtrlEdit* addCtrl(); + void removeCtrl(CtrlEdit* ctrl); + void soloChanged(bool flag); + void setRaster(int); + void setQuant(int); + void configQuant(); + void setQuantStrength(int val) { _quantStrength = val; } + void setQuantLimit(int val) { _quantLimit = val; } + void setQuantLen(bool val) { _quantLen = val; } + void cmd(int); + void setSteprec(bool); + void setTo(int val) { _to = val; } + void setEventColorMode(int); + void clipboardChanged(); // enable/disable "Paste" + void selectionChanged(); // enable/disable "Copy" & "Paste" + void setSpeaker(bool); + void setTime(unsigned); + void follow(int pos); + void songChanged1(int); + void configChanged(); + + signals: + void deleted(unsigned long); + + public slots: + virtual void updateHScrollRange(); + void execDeliveredScript(int id); + void execUserScript(int id); + public: + PianoRoll(PartList*, QWidget* parent = 0, const char* name = 0, unsigned initPos = MAXINT); + ~PianoRoll(); + virtual void readStatus(Xml&); + virtual void writeStatus(int, Xml&) const; + static void readConfiguration(Xml&); + static void writeConfiguration(int, Xml&); + }; + +#endif + diff --git a/muse2/muse/midiedit/prcanvas.cpp b/muse2/muse/midiedit/prcanvas.cpp new file mode 100644 index 00000000..484a12ad --- /dev/null +++ b/muse2/muse/midiedit/prcanvas.cpp @@ -0,0 +1,1695 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: prcanvas.cpp,v 1.20.2.19 2009/11/16 11:29:33 lunar_shuttle Exp $ +// (C) Copyright 1999-2004 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include +#include +#include +#include +//Added by qt3to4: +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "xml.h" +#include "prcanvas.h" +#include "midiport.h" +#include "event.h" +#include "mpevent.h" +#include "globals.h" +#include "cmd.h" +#include "gatetime.h" +#include "velocity.h" +#include "song.h" +#include "audio.h" + +//--------------------------------------------------------- +// NEvent +//--------------------------------------------------------- + +NEvent::NEvent(Event& e, Part* p, int y) : CItem(e, p) + { + y = y - KH/4; + unsigned tick = e.tick() + p->tick(); + setPos(QPoint(tick, y)); + setBBox(QRect(tick, y, e.lenTick(), KH/2)); + } + +//--------------------------------------------------------- +// addItem +//--------------------------------------------------------- + +void PianoCanvas::addItem(Part* part, Event& event) + { + if (signed(event.tick())<0) { + printf("ERROR: trying to add event before current part!\n"); + return; + } + + NEvent* ev = new NEvent(event, part, pitch2y(event.pitch())); + items.add(ev); + + int diff = event.endTick()-part->lenTick(); + if (diff > 0) {// too short part? extend it + //printf("addItem - this code should not be run!\n"); + //Part* newPart = part->clone(); + //newPart->setLenTick(newPart->lenTick()+diff); + //audio->msgChangePart(part, newPart,false); + //part = newPart; + part->setLenTick(part->lenTick()+diff); + } + } + +//--------------------------------------------------------- +// PianoCanvas +//--------------------------------------------------------- + +PianoCanvas::PianoCanvas(MidiEditor* pr, QWidget* parent, int sx, int sy) + : EventCanvas(pr, parent, sx, sy) + { + colorMode = 0; + cmdRange = 0; // all Events + playedPitch = -1; + + songChanged(SC_TRACK_INSERTED); + connect(song, SIGNAL(midiNote(int, int)), SLOT(midiNote(int,int))); + } + +//--------------------------------------------------------- +// pitch2y +//--------------------------------------------------------- + +int PianoCanvas::pitch2y(int pitch) const + { + int tt[] = { + 5, 12, 19, 26, 33, 44, 51, 58, 64, 71, 78, 85 + }; + int y = (75 * KH) - (tt[pitch%12] + (7 * KH) * (pitch/12)); + if (y < 0) + y = 0; + return y; + } + +//--------------------------------------------------------- +// y2pitch +//--------------------------------------------------------- + +int PianoCanvas::y2pitch(int y) const + { + const int total = (10 * 7 + 5) * KH; // 75 Ganztonschritte + y = total - y; + int oct = (y / (7 * KH)) * 12; + char kt[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 5 + 1, 1, 1, 1, 1, 1, 1, // 13 + 2, 2, 2, 2, 2, 2, // 19 + 3, 3, 3, 3, 3, 3, 3, // 26 + 4, 4, 4, 4, 4, 4, 4, 4, 4, // 34 + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, // 43 + 6, 6, 6, 6, 6, 6, 6, // 52 + 7, 7, 7, 7, 7, 7, // 58 + 8, 8, 8, 8, 8, 8, 8, // 65 + 9, 9, 9, 9, 9, 9, // 71 + 10, 10, 10, 10, 10, 10, 10, // 78 + 11, 11, 11, 11, 11, 11, 11, 11, 11, 11 // 87 + }; + return kt[y % 91] + oct; + } + +//--------------------------------------------------------- +// drawEvent +// draws a note +//--------------------------------------------------------- + +void PianoCanvas::drawItem(QPainter& p, const CItem* item, + const QRect& rect) + { + QRect r = item->bbox(); + if(!virt()) + r.moveCenter(map(item->pos())); + r = r.intersect(rect); + if(!r.isValid()) + return; + p.setPen(Qt::black); + struct Triple { + int r, g, b; + }; + + static Triple myColors /*Qt::color1*/[12] = { // ddskrjp + { 0xff, 0x3d, 0x39 }, + { 0x39, 0xff, 0x39 }, + { 0x39, 0x3d, 0xff }, + { 0xff, 0xff, 0x39 }, + { 0xff, 0x3d, 0xff }, + { 0x39, 0xff, 0xff }, + { 0xff, 0x7e, 0x7a }, + { 0x7a, 0x7e, 0xff }, + { 0x7a, 0xff, 0x7a }, + { 0xff, 0x7e, 0xbf }, + { 0x7a, 0xbf, 0xff }, + { 0xff, 0xbf, 0x7a } + }; + + NEvent* nevent = (NEvent*) item; + Event event = nevent->event(); + if (nevent->part() != curPart){ + if(item->isMoving()) + p.setBrush(Qt::gray); + else if(item->isSelected()) + p.setBrush(Qt::black); + else + p.setBrush(Qt::lightGray); + } + else { + if (item->isMoving()) { + p.setBrush(Qt::gray); + } + else if (item->isSelected()) { + p.setBrush(Qt::black); + } + else { + QColor color; + color.setRgb(0, 0, 255); + switch(colorMode) { + case 0: + break; + case 1: // pitch + { + Triple* c = &myColors/*Qt::color1*/[event.pitch() % 12]; + color.setRgb(c->r, c->g, c->b); + } + break; + case 2: // velocity + { + int velo = event.velo(); + if (velo < 64) + color.setRgb(velo*4, 0, 0xff); + else + color.setRgb(0xff, 0, (127-velo) * 4); + } + break; + } + p.setBrush(color); + } + } + p.drawRect(r); + } + + +//--------------------------------------------------------- +// drawMoving +// draws moving items +//--------------------------------------------------------- + +void PianoCanvas::drawMoving(QPainter& p, const CItem* item, const QRect& rect) + { + //if(((NEvent*)item)->part() != curPart) + // return; + //if(!item->isMoving()) + // return; + QRect mr = QRect(item->mp().x(), item->mp().y() - item->height()/2, item->width(), item->height()); + mr = mr.intersect(rect); + if(!mr.isValid()) + return; + p.setPen(Qt::black); + p.setBrush(Qt::NoBrush); + p.drawRect(mr); + } + +//--------------------------------------------------------- +// viewMouseDoubleClickEvent +//--------------------------------------------------------- + +void PianoCanvas::viewMouseDoubleClickEvent(QMouseEvent* event) + { + if ((_tool != PointerTool) && (event->button() != Qt::LeftButton)) { + mousePress(event); + return; + } + } + +//--------------------------------------------------------- +// moveCanvasItems +//--------------------------------------------------------- + +void PianoCanvas::moveCanvasItems(CItemList& items, int dp, int dx, DragType dtype, int* pflags) +{ + if(editor->parts()->empty()) + return; + + PartsToChangeMap parts2change; + + int modified = 0; + for(iPart ip = editor->parts()->begin(); ip != editor->parts()->end(); ++ip) + { + Part* part = ip->second; + if(!part) + continue; + + int npartoffset = 0; + for(iCItem ici = items.begin(); ici != items.end(); ++ici) + { + CItem* ci = ici->second; + if(ci->part() != part) + continue; + + int x = ci->pos().x() + dx; + int y = pitch2y(y2pitch(ci->pos().y()) + dp); + QPoint newpos = raster(QPoint(x, y)); + + // Test moving the item... + NEvent* nevent = (NEvent*) ci; + Event event = nevent->event(); + x = newpos.x(); + if(x < 0) + x = 0; + int ntick = editor->rasterVal(x) - part->tick(); + if(ntick < 0) + ntick = 0; + int diff = ntick + event.lenTick() - part->lenTick(); + + // If moving the item would require a new part size... + if(diff > npartoffset) + npartoffset = diff; + } + + if(npartoffset > 0) + { + // Create new part... + // if there are several events that are moved outside the part, it will be recreated for each + // so the part _in_ the event will not be valid, ask the authority. +// Part* newPart = part->clone(); + //Part* newPart = Canvas::part()->clone(); + +// newPart->setLenTick(newPart->lenTick() + npartoffset); + //audio->msgChangePart(part, newPart,false); + +// modified = SC_PART_MODIFIED; + + // BUG FIX: #1650953 + // Added by T356. + // Fixes posted "select and drag past end of part - crashing" bug +// for(iPart ip = editor->parts()->begin(); ip != editor->parts()->end(); ++ip) +// { +// if(ip->second == part) +// { +// editor->parts()->erase(ip); +// break; +// } +// } + +// editor->parts()->add(newPart); +// audio->msgChangePart(part, newPart,false); + + //if(parts2change.find(part) == parts2change.end()) + // parts2change.insert(std::pair (part, newPart)); + iPartToChange ip2c = parts2change.find(part); + if(ip2c == parts2change.end()) + { + PartToChange p2c = {0, npartoffset}; + parts2change.insert(std::pair (part, p2c)); + } + else + ip2c->second.xdiff = npartoffset; + + //part = newPart; // reassign + //item->setPart(part); + //item->setEvent(newEvent); + //curPart = part; + //curPartId = curPart->sn(); + + } + } + + for(iPartToChange ip2c = parts2change.begin(); ip2c != parts2change.end(); ++ip2c) + { + Part* opart = ip2c->first; + int diff = ip2c->second.xdiff; + + Part* newPart = opart->clone(); + + newPart->setLenTick(newPart->lenTick() + diff); + + modified = SC_PART_MODIFIED; + + // BUG FIX: #1650953 + // Added by T356. + // Fixes posted "select and drag past end of part - crashing" bug + for(iPart ip = editor->parts()->begin(); ip != editor->parts()->end(); ++ip) + { + if(ip->second == opart) + { + editor->parts()->erase(ip); + break; + } + } + + editor->parts()->add(newPart); + // Indicate no undo, and do port controller values but not clone parts. + audio->msgChangePart(opart, newPart, false, true, false); + + ip2c->second.npart = newPart; + + } + + iPartToChange icp = parts2change.find(curPart); + if(icp != parts2change.end()) + { + curPart = icp->second.npart; + curPartId = curPart->sn(); + } + + std::vector< CItem* > doneList; + typedef std::vector< CItem* >::iterator iDoneList; + + for(iCItem ici = items.begin(); ici != items.end(); ++ici) + { + CItem* ci = ici->second; + + // If this item's part is in the parts2change list, change the item's part to the new part. + Part* pt = ci->part(); + iPartToChange ip2c = parts2change.find(pt); + if(ip2c != parts2change.end()) + ci->setPart(ip2c->second.npart); + + int x = ci->pos().x(); + int y = ci->pos().y(); + int nx = x + dx; + int ny = pitch2y(y2pitch(y) + dp); + QPoint newpos = raster(QPoint(nx, ny)); + selectItem(ci, true); + + iDoneList idl; + for(idl = doneList.begin(); idl != doneList.end(); ++idl) + // This compares EventBase pointers to see if they're the same... + if((*idl)->event() == ci->event()) + break; + + // Do not process if the event has already been processed (meaning it's an event in a clone part)... + //if(moveItem(ci, newpos, dtype)) + if(idl != doneList.end()) + // Just move the canvas item. + ci->move(newpos); + else + { + // Currently moveItem always returns true. + if(moveItem(ci, newpos, dtype)) + { + // Add the canvas item to the list of done items. + doneList.push_back(ci); + // Move the canvas item. + ci->move(newpos); + } + } + + if(moving.size() == 1) + itemReleased(curItem, newpos); + if(dtype == MOVE_COPY || dtype == MOVE_CLONE) + selectItem(ci, false); + } + + if(pflags) + *pflags = modified; +} + +//--------------------------------------------------------- +// moveItem +// called after moving an object +//--------------------------------------------------------- + +// Changed by T356. +//bool PianoCanvas::moveItem(CItem* item, const QPoint& pos, DragType dtype, int* pflags) +bool PianoCanvas::moveItem(CItem* item, const QPoint& pos, DragType dtype) + { + NEvent* nevent = (NEvent*) item; + Event event = nevent->event(); + int npitch = y2pitch(pos.y()); + Event newEvent = event.clone(); + int x = pos.x(); + if (x < 0) + x = 0; + if (event.pitch() != npitch && _playEvents) { + int port = track()->outPort(); + int channel = track()->outChannel(); + // release note: + MidiPlayEvent ev1(0, port, channel, 0x90, event.pitch() + track()->transposition, 0); + audio->msgPlayMidiEvent(&ev1); + MidiPlayEvent ev2(0, port, channel, 0x90, npitch + track()->transposition, event.velo()); + audio->msgPlayMidiEvent(&ev2); + } + + // Changed by T356. + Part* part = nevent->part(); // + //Part * part = Canvas::part(); // part can be dynamically recreated, ask the authority + + newEvent.setPitch(npitch); + int ntick = editor->rasterVal(x) - part->tick(); + if (ntick < 0) + ntick = 0; + newEvent.setTick(ntick); + newEvent.setLenTick(event.lenTick()); + + // Removed by T356. + /* + int modified=0; + //song->startUndo(); + int diff = newEvent.endTick()-part->lenTick(); + if (diff > 0){// too short part? extend it + // if there are several events that are moved outside the part, it will be recreated for each + // so the part _in_ the event will not be valid, ask the authority. + //Part* newPart = part->clone(); + Part* newPart = Canvas::part()->clone(); + + newPart->setLenTick(newPart->lenTick()+diff); + audio->msgChangePart(Canvas::part(), newPart,false); + + modified = SC_PART_MODIFIED; + part = newPart; // reassign + + // BUG FIX: #1650953 + // Added by T356. + // Fixes posted "select and drag past end of part - crashing" bug + for(iPart i = editor->parts()->begin(); i != editor->parts()->end(); ++i) + { + if(i->second == Canvas::part()) + { + editor->parts()->erase(i); + break; + } + } + editor->parts()->add(part); + item->setPart(part); + item->setEvent(newEvent); + curPart = part; + curPartId = curPart->sn(); + + } + */ + + // Added by T356. + // msgAddEvent and msgChangeEvent (below) will set these, but set them here first? + //item->setPart(part); + item->setEvent(newEvent); + + // Added by T356. + if(((int)newEvent.endTick() - (int)part->lenTick()) > 0) + printf("PianoCanvas::moveItem Error! New event end:%d exceeds length:%d of part:%s\n", newEvent.endTick(), part->lenTick(), part->name().latin1()); + + if (dtype == MOVE_COPY || dtype == MOVE_CLONE) + // Indicate no undo, and do not do port controller values and clone parts. + //audio->msgAddEvent(newEvent, part, false); + audio->msgAddEvent(newEvent, part, false, false, false); + else + // Indicate no undo, and do not do port controller values and clone parts. + //audio->msgChangeEvent(event, newEvent, part, false); + audio->msgChangeEvent(event, newEvent, part, false, false, false); + //song->endUndo(modified); + + // Removed by T356. + //if(pflags) + // *pflags = modified; + + return true; + } + +//--------------------------------------------------------- +// newItem(p, state) +//--------------------------------------------------------- + +CItem* PianoCanvas::newItem(const QPoint& p, int) + { + //printf("newItem point\n"); + int pitch = y2pitch(p.y()); + int tick = editor->rasterVal1(p.x()); + int len = p.x() - tick; + tick -= curPart->tick(); + if (tick < 0) + tick=0; + Event e = Event(Note); + e.setTick(tick); + e.setPitch(pitch); + e.setVelo(curVelo); + e.setLenTick(len); + return new NEvent(e, curPart, pitch2y(pitch)); + } + +void PianoCanvas::newItem(CItem* item, bool noSnap) + { + //printf("newItem citem\n"); + NEvent* nevent = (NEvent*) item; + Event event = nevent->event(); + int x = item->x(); + if (x<0) + x=0; + int w = item->width(); + + if (!noSnap) { + x = editor->rasterVal1(x); //round down + w = editor->rasterVal(x + w) - x; + if (w == 0) + w = editor->raster(); + } + Part* part = nevent->part(); + event.setTick(x - part->tick()); + event.setLenTick(w); + event.setPitch(y2pitch(item->y())); + + song->startUndo(); + int modified=SC_EVENT_MODIFIED; + int diff = event.endTick()-part->lenTick(); + if (diff > 0) {// too short part? extend it + //printf("extend Part!\n"); + Part* newPart = part->clone(); + newPart->setLenTick(newPart->lenTick()+diff); + // Indicate no undo, and do port controller values but not clone parts. + //audio->msgChangePart(part, newPart,false); + audio->msgChangePart(part, newPart, false, true, false); + modified=modified|SC_PART_MODIFIED; + part = newPart; // reassign + } + // Indicate no undo, and do not do port controller values and clone parts. + //audio->msgAddEvent(event, part,false); + audio->msgAddEvent(event, part, false, false, false); + song->endUndo(modified); + } + +//--------------------------------------------------------- +// resizeItem +//--------------------------------------------------------- + +void PianoCanvas::resizeItem(CItem* item, bool noSnap) // experimental changes to try dynamically extending parts + { + //printf("resizeItem!\n"); + NEvent* nevent = (NEvent*) item; + Event event = nevent->event(); + Event newEvent = event.clone(); + int len; + + Part* part = nevent->part(); + + if (noSnap) + len = nevent->width(); + else { + //Part* part = nevent->part(); + unsigned tick = event.tick() + part->tick(); + len = editor->rasterVal(tick + nevent->width()) - tick; + if (len <= 0) + len = editor->raster(); + } + song->startUndo(); + int modified=SC_EVENT_MODIFIED; + //printf("event.tick()=%d len=%d part->lenTick()=%d\n",event.endTick(),len,part->lenTick()); + int diff = event.tick()+len-part->lenTick(); + if (diff > 0) {// too short part? extend it + //printf("extend Part!\n"); + Part* newPart = part->clone(); + newPart->setLenTick(newPart->lenTick()+diff); + // Indicate no undo, and do port controller values but not clone parts. + //audio->msgChangePart(part, newPart,false); + audio->msgChangePart(part, newPart, false, true, false); + modified=modified|SC_PART_MODIFIED; + part = newPart; // reassign + } + + newEvent.setLenTick(len); + // Indicate no undo, and do not do port controller values and clone parts. + //audio->msgChangeEvent(event, newEvent, nevent->part(),false); + audio->msgChangeEvent(event, newEvent, nevent->part(), false, false, false); + song->endUndo(modified); + } + +//--------------------------------------------------------- +// deleteItem +//--------------------------------------------------------- + +bool PianoCanvas::deleteItem(CItem* item) + { + NEvent* nevent = (NEvent*) item; + if (nevent->part() == curPart) { + Event ev = nevent->event(); + // Indicate do undo, and do not do port controller values and clone parts. + //audio->msgDeleteEvent(ev, curPart); + audio->msgDeleteEvent(ev, curPart, true, false, false); + return true; + } + return false; + } + +//--------------------------------------------------------- +// pianoCmd +//--------------------------------------------------------- + +void PianoCanvas::pianoCmd(int cmd) + { + switch(cmd) { + case CMD_LEFT: + { + int frames = pos[0] - editor->rasterStep(pos[0]); + if (frames < 0) + frames = 0; + Pos p(frames,true); + song->setPos(0, p, true, true, true); //CDW + } + break; + case CMD_RIGHT: + { + Pos p(pos[0] + editor->rasterStep(pos[0]), true); + //if (p > part->tick()) + // p = part->tick(); + song->setPos(0, p, true, true, true); //CDW + } + break; + case CMD_INSERT: + { + if (pos[0] < start() || pos[0] >= end()) + break; + MidiPart* part = (MidiPart*)curPart; + + if (part == 0) + break; + song->startUndo(); + EventList* el = part->events(); + + std::list elist; + for (iEvent e = el->lower_bound(pos[0] - 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());// - part->tick()); + // Indicate no undo, and do not do port controller values and clone parts. + //audio->msgChangeEvent(event, newEvent, part, false); + audio->msgChangeEvent(event, newEvent, part, false, false, false); + } + song->endUndo(SC_EVENT_MODIFIED); + Pos p(editor->rasterVal(pos[0] + editor->rasterStep(pos[0])), true); + song->setPos(0, p, true, false, true); + } + return; + case CMD_DELETE: + if (pos[0] < start() || pos[0] >= end()) + break; + { + MidiPart* part = (MidiPart*)curPart; + if (part == 0) + break; + song->startUndo(); + EventList* el = part->events(); + + std::list elist; + for (iEvent e = el->lower_bound(pos[0]); 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()); + // Indicate no undo, and do not do port controller values and clone parts. + //audio->msgChangeEvent(event, newEvent, part, false); + audio->msgChangeEvent(event, newEvent, part, false, false, false); + } + song->endUndo(SC_EVENT_MODIFIED); + Pos p(editor->rasterVal(pos[0] - editor->rasterStep(pos[0])), true); + song->setPos(0, p, true, false, true); + } + break; + } + } + +//--------------------------------------------------------- +// pianoPressed +//--------------------------------------------------------- + +void PianoCanvas::pianoPressed(int pitch, int velocity, bool shift) + { + int port = track()->outPort(); + int channel = track()->outChannel(); + pitch += track()->transposition; + + // play note: + //MidiPlayEvent e(0, port, channel, 0x90, pitch, 127); + MidiPlayEvent e(0, port, channel, 0x90, pitch, velocity); + audio->msgPlayMidiEvent(&e); + + if (_steprec && pos[0] >= start_tick && pos[0] < end_tick) { + if (curPart == 0) + return; + int len = editor->raster(); + unsigned tick = pos[0] - curPart->tick(); //CDW + if (shift) + tick -= editor->rasterStep(tick); + Event e(Note); + e.setTick(tick); + e.setPitch(pitch); + e.setVelo(127); + e.setLenTick(len); + // Indicate do undo, and do not do port controller values and clone parts. + //audio->msgAddEvent(e, curPart); + audio->msgAddEvent(e, curPart, true, false, false); + tick += editor->rasterStep(tick) + curPart->tick(); + if (tick != song->cpos()) { + Pos p(tick, true); + song->setPos(0, p, true, false, true); + } + } + } + +//--------------------------------------------------------- +// pianoReleased +//--------------------------------------------------------- + +void PianoCanvas::pianoReleased(int pitch, bool) + { + int port = track()->outPort(); + int channel = track()->outChannel(); + pitch += track()->transposition; + + // release key: + MidiPlayEvent e(0, port, channel, 0x90, pitch, 0); + audio->msgPlayMidiEvent(&e); + } + +//--------------------------------------------------------- +// drawTickRaster +//--------------------------------------------------------- + +void drawTickRaster(QPainter& p, int x, int y, int w, int h, int raster) + { + int bar1, bar2, beat; + unsigned tick; + sigmap.tickValues(x, &bar1, &beat, &tick); + sigmap.tickValues(x+w, &bar2, &beat, &tick); + ++bar2; + int y2 = y + h; + for (int bar = bar1; bar < bar2; ++bar) { + unsigned x = sigmap.bar2tick(bar, 0, 0); + p.setPen(Qt::black); + p.drawLine(x, y, x, y2); + int z, n; + sigmap.timesig(x, z, n); + int q = p.xForm(QPoint(raster, 0)).x() - p.xForm(QPoint(0, 0)).x(); + int qq = raster; + if (q < 8) // grid too dense + qq *= 2; + //switch (quant) { + // case 32: + // case 48: + // case 64: + // case 96: + // case 192: // 8tel + // case 128: // 8tel Triolen + // case 288: + p.setPen(Qt::lightGray); + if (raster>=4) { + int xx = x + qq; + int xxx = sigmap.bar2tick(bar, z, 0); + while (xx <= xxx) { + p.drawLine(xx, y, xx, y2); + xx += qq; + } + xx = xxx; + } + // break; + // default: + // break; + // } + p.setPen(Qt::gray); + for (int beat = 1; beat < z; beat++) { + int xx = sigmap.bar2tick(bar, beat, 0); + p.drawLine(xx, y, xx, y2); + } + + } + } + +//--------------------------------------------------------- +// draw +//--------------------------------------------------------- + +void PianoCanvas::drawCanvas(QPainter& p, const QRect& rect) + { + int x = rect.x(); + int y = rect.y(); + int w = rect.width(); + int h = rect.height(); + + //--------------------------------------------------- + // horizontal lines + //--------------------------------------------------- + + int yy = ((y-1) / KH) * KH + KH; + int key = 75 - (yy / KH); + for (; yy < y + h; yy += KH) { + switch (key % 7) { + case 0: + case 3: + p.setPen(Qt::black); + p.drawLine(x, yy, x + w, yy); + break; + default: + //p.setPen(lightGray); + p.fillRect(x, yy-3, w, 6, QBrush(QColor(230,230,230))); + //p.drawLine(x, yy, x + w, yy); + break; + } + --key; + } + + //--------------------------------------------------- + // vertical lines + //--------------------------------------------------- + + drawTickRaster(p, x, y, w, h, editor->raster()); + } + +//--------------------------------------------------------- +// cmd +// pulldown menu commands +//--------------------------------------------------------- + +void PianoCanvas::cmd(int cmd, int quantStrength, + int quantLimit, bool quantLen, int range) + { + cmdRange = range; + switch (cmd) { + case CMD_CUT: + copy(); + song->startUndo(); + for (iCItem i = items.begin(); i != items.end(); ++i) { + if (!(i->second->isSelected())) + continue; + NEvent* e = (NEvent*)(i->second); + Event ev = e->event(); + // Indicate no undo, and do not do port controller values and clone parts. + //audio->msgDeleteEvent(ev, e->part(), false); + audio->msgDeleteEvent(ev, e->part(), false, false, false); + } + song->endUndo(SC_EVENT_REMOVED); + break; + case CMD_COPY: + copy(); + break; + case CMD_PASTE: + paste(); + break; + case CMD_DEL: + if (selectionSize()) { + song->startUndo(); + for (iCItem i = items.begin(); i != items.end(); ++i) { + if (!i->second->isSelected()) + continue; + Event ev = i->second->event(); + // Indicate no undo, and do not do port controller values and clone parts. + //audio->msgDeleteEvent(ev, i->second->part(), false); + audio->msgDeleteEvent(ev, i->second->part(), false, false, false); + } + song->endUndo(SC_EVENT_REMOVED); + } + return; + case CMD_OVER_QUANTIZE: // over quantize + quantize(100, 1, quantLen); + break; + case CMD_ON_QUANTIZE: // note on quantize + quantize(50, 1, false); + break; + case CMD_ONOFF_QUANTIZE: // note on/off quantize + quantize(50, 1, true); + break; + case CMD_ITERATIVE_QUANTIZE: // Iterative Quantize + quantize(quantStrength, quantLimit, quantLen); + break; + case CMD_SELECT_ALL: // select all + for (iCItem k = items.begin(); k != items.end(); ++k) { + if (!k->second->isSelected()) + selectItem(k->second, true); + } + break; + case CMD_SELECT_NONE: // select none + deselectAll(); + break; + case CMD_SELECT_INVERT: // invert selection + for (iCItem k = items.begin(); k != items.end(); ++k) { + selectItem(k->second, !k->second->isSelected()); + } + break; + case CMD_SELECT_ILOOP: // select inside loop + for (iCItem k = items.begin(); k != items.end(); ++k) { + NEvent* nevent = (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); + } + break; + case CMD_SELECT_OLOOP: // select outside loop + for (iCItem k = items.begin(); k != items.end(); ++k) { + NEvent* nevent = (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); + } + break; + case CMD_SELECT_PREV_PART: // select previous part + { + Part* pt = editor->curCanvasPart(); + Part* newpt = pt; + PartList* pl = editor->parts(); + for(iPart ip = pl->begin(); ip != pl->end(); ++ip) + if(ip->second == pt) + { + if(ip == pl->begin()) + ip = pl->end(); + --ip; + newpt = ip->second; + break; + } + if(newpt != pt) + editor->setCurCanvasPart(newpt); + } + break; + case CMD_SELECT_NEXT_PART: // select next part + { + Part* pt = editor->curCanvasPart(); + Part* newpt = pt; + PartList* pl = editor->parts(); + for(iPart ip = pl->begin(); ip != pl->end(); ++ip) + if(ip->second == pt) + { + ++ip; + if(ip == pl->end()) + ip = pl->begin(); + newpt = ip->second; + break; + } + if(newpt != pt) + editor->setCurCanvasPart(newpt); + } + break; + case CMD_MODIFY_GATE_TIME: + { + GateTime w(this); + w.setRange(range); + if (!w.exec()) + break; + int range = w.range(); // all, selected, looped, sel+loop + int rate = w.rateVal(); + int offset = w.offsetVal(); + + song->startUndo(); + for (iCItem k = items.begin(); k != items.end(); ++k) { + NEvent* nevent =(NEvent*)(k->second); + Event event = nevent->event(); + if (event.type() != Note) + continue; + unsigned tick = event.tick(); + bool selected = k->second->isSelected(); + bool inLoop = (tick >= song->lpos()) && (tick < song->rpos()); + + if ((range == 0) + || (range == 1 && selected) + || (range == 2 && inLoop) + || (range == 3 && selected && inLoop)) { + unsigned int len = event.lenTick(); //prevent compiler warning: comparison singed/unsigned + + len = rate ? (len * 100) / rate : 1; + len += offset; + if (len < 1) + len = 1; + + if (event.lenTick() != len) { + Event newEvent = event.clone(); + newEvent.setLenTick(len); + // Indicate no undo, and do not do port controller values and clone parts. + //audio->msgChangeEvent(event, newEvent, nevent->part(), false); + audio->msgChangeEvent(event, newEvent, nevent->part(), false, false, false); + } + } + } + song->endUndo(SC_EVENT_MODIFIED); + } + break; + + case CMD_MODIFY_VELOCITY: + { + Velocity w(this); + w.setRange(range); + if (!w.exec()) + break; + int range = w.range(); // all, selected, looped, sel+loop + int rate = w.rateVal(); + int offset = w.offsetVal(); + + song->startUndo(); + for (iCItem k = items.begin(); k != items.end(); ++k) { + NEvent* nevent = (NEvent*)(k->second); + Event event = nevent->event(); + if (event.type() != Note) + continue; + unsigned tick = event.tick(); + bool selected = k->second->isSelected(); + bool inLoop = (tick >= song->lpos()) && (tick < song->rpos()); + + if ((range == 0) + || (range == 1 && selected) + || (range == 2 && inLoop) + || (range == 3 && 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); + // Indicate no undo, and do not do port controller values and clone parts. + //audio->msgChangeEvent(event, newEvent, nevent->part(), false); + audio->msgChangeEvent(event, newEvent, nevent->part(), false, false, false); + } + } + } + song->endUndo(SC_EVENT_MODIFIED); + } + break; + + case CMD_FIXED_LEN: //Set notes to the length specified in the drummap + if (!selectionSize()) + break; + song->startUndo(); + for (iCItem k = items.begin(); k != items.end(); ++k) { + if (k->second->isSelected()) { + NEvent* nevent = (NEvent*)(k->second); + Event event = nevent->event(); + Event newEvent = event.clone(); + newEvent.setLenTick(editor->raster()); + // Indicate no undo, and do not do port controller values and clone parts. + //audio->msgChangeEvent(event, newEvent, nevent->part() , false); + audio->msgChangeEvent(event, newEvent, nevent->part(), false, false, false); + } + } + song->endUndo(SC_EVENT_MODIFIED); + break; + + case CMD_DELETE_OVERLAPS: + if (!selectionSize()) + break; + + song->startUndo(); + for (iCItem k = items.begin(); k != items.end(); k++) { + if (k->second->isSelected() == false) + continue; + + NEvent* e1 = (NEvent*) (k->second); // first note + NEvent* e2 = NULL; // ptr to next selected note (which will be checked for overlap) + Event ce1 = e1->event(); + Event ce2; + + if (ce1.type() != Note) + continue; + + // Find next selected item on the same pitch + iCItem l = k; l++; + for (; l != items.end(); l++) { + if (l->second->isSelected() == false) + continue; + + e2 = (NEvent*) l->second; + ce2 = e2->event(); + + // Same pitch? + if (ce1.dataA() == ce2.dataA()) + break; + + // If the note has the same len and place we treat it as a duplicate note and not a following note + // The best thing to do would probably be to delete the duplicate note, we just want to avoid + // matching against the same note + if ( ce1.tick() + e1->part()->tick() == ce2.tick() + e2->part()->tick() + && ce1.lenTick() + e1->part()->tick() == ce2.lenTick() + e2->part()->tick()) + { + e2 = NULL; // this wasn't what we were looking for + continue; + } + + } + + if (e2 == NULL) // None found + break; + + Part* part1 = e1->part(); + Part* part2 = e2->part(); + if (ce2.type() != Note) + continue; + + + unsigned event1pos = ce1.tick() + part1->tick(); + unsigned event1end = event1pos + ce1.lenTick(); + unsigned event2pos = ce2.tick() + part2->tick(); + + //printf("event1pos %u event1end %u event2pos %u\n", event1pos, event1end, event2pos); + if (event1end > event2pos) { + Event newEvent = ce1.clone(); + unsigned newlen = ce1.lenTick() - (event1end - event2pos); + //printf("newlen: %u\n", newlen); + newEvent.setLenTick(newlen); + // Indicate no undo, and do not do port controller values and clone parts. + //audio->msgChangeEvent(ce1, newEvent, e1->part(), false); + audio->msgChangeEvent(ce1, newEvent, e1->part(), false, false, false); + } + } + song->endUndo(SC_EVENT_MODIFIED); + break; + + + case CMD_CRESCENDO: + case CMD_TRANSPOSE: + case CMD_THIN_OUT: + case CMD_ERASE_EVENT: + case CMD_NOTE_SHIFT: + case CMD_MOVE_CLOCK: + case CMD_COPY_MEASURE: + case CMD_ERASE_MEASURE: + case CMD_DELETE_MEASURE: + case CMD_CREATE_MEASURE: + break; + default: +// printf("unknown ecanvas cmd %d\n", cmd); + break; + } + updateSelection(); + redraw(); + } + +//--------------------------------------------------------- +// quantize +//--------------------------------------------------------- + +void PianoCanvas::quantize(int strength, int limit, bool quantLen) + { + song->startUndo(); + for (iCItem k = items.begin(); k != items.end(); ++k) { + NEvent* nevent = (NEvent*)(k->second); + Event event = nevent->event(); + Part* part = nevent->part(); + if (event.type() != Note) + continue; + + if ((cmdRange & CMD_RANGE_SELECTED) && !k->second->isSelected()) + continue; + + unsigned tick = event.tick() + part->tick(); + + if ((cmdRange & CMD_RANGE_LOOP) + && ((tick < song->lpos() || tick >= song->rpos()))) + continue; + + unsigned int len = event.lenTick(); //prevent compiler warning: comparison singed/unsigned + int tick2 = tick + len; + + // quant start position + int diff = sigmap.raster(tick, editor->quant()) - tick; + if (abs(diff) > limit) + tick += ((diff * strength) / 100); + + // quant len + diff = sigmap.raster(tick2, editor->quant()) - 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); + // Indicate no undo, and do not do port controller values and clone parts. + //audio->msgChangeEvent(event, newEvent, part, false); + audio->msgChangeEvent(event, newEvent, part, false, false, false); + } + } + song->endUndo(SC_EVENT_MODIFIED); + } + +//--------------------------------------------------------- +// midiNote +//--------------------------------------------------------- + +void PianoCanvas::midiNote(int pitch, int velo) + { + if (_midiin && _steprec && curPart + && !audio->isPlaying() && velo && pos[0] >= start_tick + && pos[0] < end_tick + && !(globalKeyState & Qt::AltButton)) { + unsigned int len = editor->quant();//prevent compiler warning: comparison singed/unsigned + unsigned tick = pos[0]; //CDW + unsigned starttick = tick; + if (globalKeyState & Qt::ShiftButton) + tick -= editor->rasterStep(tick); + + // + // extend len of last note? + // + EventList* events = curPart->events(); + if (globalKeyState & Qt::ControlButton) { + 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()) == /*(int)*/starttick)) { + Event e = ev.clone(); + e.setLenTick(ev.lenTick() + editor->rasterStep(starttick)); + // Indicate do undo, and do not do port controller values and clone parts. + //audio->msgChangeEvent(ev, e, curPart); + audio->msgChangeEvent(ev, e, curPart, true, false, false); + tick += editor->rasterStep(tick); + if (tick != song->cpos()) { + Pos p(tick, true); + 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) { + // Indicate do undo, and do not do port controller values and clone parts. + //audio->msgDeleteEvent(ev, curPart); + audio->msgDeleteEvent(ev, curPart, true, false, false); + if (globalKeyState & Qt::ShiftButton) + tick += editor->rasterStep(tick); + return; + } + } + Event e(Note); + e.setTick(tick - curPart->tick()); + e.setPitch(pitch); + e.setVelo(velo); + e.setLenTick(len); + // Indicate do undo, and do not do port controller values and clone parts. + //audio->msgAddEvent(e, curPart); + audio->msgAddEvent(e, curPart, true, false, false); + tick += editor->rasterStep(tick); + if (tick != song->cpos()) { + Pos p(tick, true); + song->setPos(0, p, true, false, true); + } + } + } + +//--------------------------------------------------------- +// getTextDrag +//--------------------------------------------------------- + +Q3TextDrag* PianoCanvas::getTextDrag(QWidget* parent) + { + //--------------------------------------------------- + // generate event list from selected events + //--------------------------------------------------- + + EventList el; + unsigned startTick = MAXINT; + for (iCItem i = items.begin(); i != items.end(); ++i) { + if (!i->second->isSelected()) + continue; + NEvent* ne = (NEvent*)(i->second); + Event e = ne->event(); + if (startTick == MAXINT) + startTick = e.tick(); + el.add(e); + } + + //--------------------------------------------------- + // write events as XML into tmp file + //--------------------------------------------------- + + FILE* tmp = tmpfile(); + if (tmp == 0) { + fprintf(stderr, "PianoCanvas::copy() fopen failed: %s\n", + strerror(errno)); + return 0; + } + Xml xml(tmp); + + int level = 0; + xml.tag(level++, "eventlist"); + for (ciEvent e = el.begin(); e != el.end(); ++e) + e->second.write(level, xml, -startTick); + xml.etag(--level, "eventlist"); + + //--------------------------------------------------- + // read tmp file into QTextDrag Object + //--------------------------------------------------- + + fflush(tmp); + struct stat f_stat; + if (fstat(fileno(tmp), &f_stat) == -1) { + fprintf(stderr, "PianoCanvas::copy() fstat failes:<%s>\n", + strerror(errno)); + fclose(tmp); + return 0; + } + int n = f_stat.st_size; + char* fbuf = (char*)mmap(0, n+1, PROT_READ|PROT_WRITE, + MAP_PRIVATE, fileno(tmp), 0); + fbuf[n] = 0; + Q3TextDrag* drag = new Q3TextDrag(QString(fbuf), parent); + drag->setSubtype("eventlist"); + munmap(fbuf, n); + fclose(tmp); + return drag; + } + +//--------------------------------------------------------- +// copy +// cut copy paste +//--------------------------------------------------------- + +void PianoCanvas::copy() + { + Q3TextDrag* drag = getTextDrag(0); + if (drag) + QApplication::clipboard()->setData(drag, QClipboard::Clipboard); + } + +//--------------------------------------------------------- +// paste +//--------------------------------------------------------- + +void PianoCanvas::pasteAt(const QString& pt, int pos) + { + const char* p = pt.latin1(); + Xml xml(p); + for (;;) { + Xml::Token token = xml.parse(); + const QString& tag = xml.s1(); + switch (token) { + case Xml::Error: + case Xml::End: + return; + case Xml::TagStart: + if (tag == "eventlist") { + song->startUndo(); + EventList* el = new EventList(); + el->read(xml, "eventlist", true); + int modified = SC_EVENT_INSERTED; + for (iEvent i = el->begin(); i != el->end(); ++i) { + Event e = i->second; + int tick = e.tick() + pos - curPart->tick(); + if (tick<0) { + printf("ERROR: trying to add event before current part!\n"); + song->endUndo(SC_EVENT_INSERTED); + delete el; + return; + } + + e.setTick(tick); + int diff = e.endTick()-curPart->lenTick(); + if (diff > 0) {// too short part? extend it + Part* newPart = curPart->clone(); + newPart->setLenTick(newPart->lenTick()+diff); + // Indicate no undo, and do port controller values but not clone parts. + //audio->msgChangePart(curPart, newPart,false); + audio->msgChangePart(curPart, newPart, false, true, false); + modified=modified|SC_PART_MODIFIED; + curPart = newPart; // reassign + } + // Indicate no undo, and do not do port controller values and clone parts. + //audio->msgAddEvent(e, curPart, false); + audio->msgAddEvent(e, curPart, false, false, false); + } + song->endUndo(modified); + delete el; + return; + } + else + xml.unknown("pasteAt"); + break; + case Xml::Attribut: + case Xml::TagEnd: + default: + break; + } + } + } +//--------------------------------------------------------- +// paste +// paste events +//--------------------------------------------------------- + +void PianoCanvas::paste() + { + //Q3CString subtype("eventlist"); ddskrjo + QString subtype("eventlist"); + QMimeSource* ms = QApplication::clipboard()->data(QClipboard::Clipboard); + QString pt; + if (!Q3TextDrag::decode(ms, pt, subtype)) { + printf("cannot paste: bad data type\n"); + return; + } + pasteAt(pt, song->cpos()); + } + +//--------------------------------------------------------- +// startDrag +//--------------------------------------------------------- + +void PianoCanvas::startDrag(CItem* /* item*/, bool copymode) + { + Q3TextDrag* drag = getTextDrag(this); + if (drag) { +// QApplication::clipboard()->setData(drag, QClipboard::Clipboard); + + if (copymode) + drag->dragCopy(); + else + drag->dragMove(); + } + } + +//--------------------------------------------------------- +// dragEnterEvent +//--------------------------------------------------------- + +void PianoCanvas::dragEnterEvent(QDragEnterEvent* event) + { + event->accept(Q3TextDrag::canDecode(event)); + } + +//--------------------------------------------------------- +// dragMoveEvent +//--------------------------------------------------------- + +void PianoCanvas::dragMoveEvent(QDragMoveEvent*) + { +// printf("drag move %x\n", this); + } + +//--------------------------------------------------------- +// dragLeaveEvent +//--------------------------------------------------------- + +void PianoCanvas::dragLeaveEvent(QDragLeaveEvent*) + { +// printf("drag leave\n"); + } + +//--------------------------------------------------------- +// dropEvent +//--------------------------------------------------------- + +void PianoCanvas::viewDropEvent(QDropEvent* event) + { + 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"); + } + } + +//--------------------------------------------------------- +// itemPressed +//--------------------------------------------------------- + +void PianoCanvas::itemPressed(const CItem* item) + { + if (!_playEvents) + return; + + int port = track()->outPort(); + int channel = track()->outChannel(); + NEvent* nevent = (NEvent*) item; + Event event = nevent->event(); + playedPitch = event.pitch() + track()->transposition; + int velo = event.velo(); + + // play note: + MidiPlayEvent e(0, port, channel, 0x90, playedPitch, velo); + audio->msgPlayMidiEvent(&e); + } + +//--------------------------------------------------------- +// itemReleased +//--------------------------------------------------------- + +void PianoCanvas::itemReleased(const CItem*, const QPoint&) + { + if (!_playEvents) + return; + int port = track()->outPort(); + int channel = track()->outChannel(); + + // release note: + MidiPlayEvent ev(0, port, channel, 0x90, playedPitch, 0); + audio->msgPlayMidiEvent(&ev); + playedPitch = -1; + } + +//--------------------------------------------------------- +// itemMoved +//--------------------------------------------------------- + +void PianoCanvas::itemMoved(const CItem* item, const QPoint& pos) + { + int npitch = y2pitch(pos.y()); + if ((playedPitch != -1) && (playedPitch != npitch)) { + int port = track()->outPort(); + int channel = track()->outChannel(); + NEvent* nevent = (NEvent*) item; + Event event = nevent->event(); + + // release note: + MidiPlayEvent ev1(0, port, channel, 0x90, playedPitch, 0); + audio->msgPlayMidiEvent(&ev1); + // play note: + MidiPlayEvent e2(0, port, channel, 0x90, npitch + track()->transposition, event.velo()); + audio->msgPlayMidiEvent(&e2); + playedPitch = npitch + track()->transposition; + } + } + +//--------------------------------------------------------- +// curPartChanged +//--------------------------------------------------------- + +void PianoCanvas::curPartChanged() + { + editor->setCaption(getCaption()); + } + +//--------------------------------------------------------- +// 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; + NEvent* e = (NEvent*)(i->second); + Event event = e->event(); + if (event.type() != Note) + continue; + + MidiPart* part = (MidiPart*)(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); + // Indicate do not do port controller values and clone parts. + //song->undoOp(UndoOp::ModifyEvent, newEvent, event, part); + song->undoOp(UndoOp::ModifyEvent, newEvent, event, part, false, false); + } + song->endUndo(SC_EVENT_MODIFIED); + audio->msgIdle(false); + } + diff --git a/muse2/muse/midiedit/prcanvas.h b/muse2/muse/midiedit/prcanvas.h new file mode 100644 index 00000000..2f50be2e --- /dev/null +++ b/muse2/muse/midiedit/prcanvas.h @@ -0,0 +1,113 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: prcanvas.h,v 1.5.2.6 2009/11/16 11:29:33 lunar_shuttle Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __PRCANVAS_H__ +#define __PRCANVAS_H__ + +#include "ecanvas.h" +#include "pianoroll.h" +//Added by qt3to4: +#include +#include +#include +#include +#include + +#define KH 13 + +//--------------------------------------------------------- +// NEvent +// ''visual'' Note Event +//--------------------------------------------------------- + +class NEvent : public CItem { + public: + NEvent(Event& e, Part* p, int y); + }; + +class ScrollScale; +class PianoRoll; +class Q3TextDrag; +class QRect; + +//--------------------------------------------------------- +// PianoCanvas +//--------------------------------------------------------- + +class PianoCanvas : public EventCanvas { + int cmdRange; + int colorMode; + int playedPitch; + + Q_OBJECT + virtual void viewMouseDoubleClickEvent(QMouseEvent*); + virtual void drawItem(QPainter&, const CItem*, const QRect&); + virtual void drawMoving(QPainter&, const CItem*, const QRect&); + virtual void moveCanvasItems(CItemList&, int, int, DragType, int*); + // Changed by T356. + //virtual bool moveItem(CItem*, const QPoint&, DragType, int*); + virtual bool moveItem(CItem*, const QPoint&, 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 addItem(Part*, Event&); + + int y2pitch(int) const; + int pitch2y(int) const; + virtual void drawCanvas(QPainter&, const QRect&); + void quantize(int, int, bool); + void copy(); + void paste(); + void pasteAt(const QString& pt, int pos); + Q3TextDrag* getTextDrag(QWidget*); + virtual void itemPressed(const CItem*); + virtual void itemReleased(const CItem*, const QPoint&); + virtual void itemMoved(const CItem*, const QPoint&); + virtual void curPartChanged(); + + private slots: + void midiNote(int pitch, int velo); + + signals: + void quantChanged(int); + void rasterChanged(int); + + public slots: + void pianoCmd(int); + void pianoPressed(int pitch, int velocity, bool shift); + void pianoReleased(int pitch, bool); + + public: + enum { + CMD_CUT, CMD_COPY, CMD_PASTE, CMD_DEL, + CMD_OVER_QUANTIZE, CMD_ON_QUANTIZE, CMD_ONOFF_QUANTIZE, + CMD_ITERATIVE_QUANTIZE, + CMD_SELECT_ALL, CMD_SELECT_NONE, CMD_SELECT_INVERT, + CMD_SELECT_ILOOP, CMD_SELECT_OLOOP, CMD_SELECT_PREV_PART, CMD_SELECT_NEXT_PART, + CMD_MODIFY_GATE_TIME, CMD_MODIFY_VELOCITY, + CMD_CRESCENDO, CMD_TRANSPOSE, CMD_THIN_OUT, CMD_ERASE_EVENT, + CMD_NOTE_SHIFT, CMD_MOVE_CLOCK, CMD_COPY_MEASURE, + CMD_ERASE_MEASURE, CMD_DELETE_MEASURE, CMD_CREATE_MEASURE, + CMD_FIXED_LEN, CMD_DELETE_OVERLAPS + }; + + PianoCanvas(MidiEditor*, QWidget*, int, int); + void cmd(int, int, int, bool, int); + void setColorMode(int mode) { + colorMode = mode; + redraw(); + } + virtual void modifySelected(NoteInfo::ValType type, int delta); + }; +#endif + diff --git a/muse2/muse/midiedit/quantconfig.cpp b/muse2/muse/midiedit/quantconfig.cpp new file mode 100644 index 00000000..f00b713f --- /dev/null +++ b/muse2/muse/midiedit/quantconfig.cpp @@ -0,0 +1,59 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: quantconfig.cpp,v 1.2 2004/04/24 14:58:52 wschweer Exp $ +// +// (C) Copyright 1999/2003 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include +#include +#include +#include +#include + +#include "quantconfig.h" +//Added by qt3to4: +#include + +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) + : QDialog() + { + setCaption(tr("MusE: Config Quantize")); + Q3VBoxLayout* layout = new Q3VBoxLayout(this); + Q3GroupBox* gb = new Q3GroupBox(2, Qt::Horizontal, tr("Config Quantize"), this); + layout->addWidget(gb); + + QLabel* l1 = new QLabel(tr("Strength"), gb); + QSpinBox* sb1 = new QSpinBox(0, 100, 1, gb); + sb1->setSuffix(QString("%")); + sb1->setValue(s); + QLabel* l2 = new QLabel(tr("Don´t Quantize"), gb); + QSpinBox* sb2 = new QSpinBox(0, 500, 1, gb); + sb2->setValue(l); + QLabel* l3 = new QLabel(tr("Quant Len"), gb); + QRadioButton* but = new QRadioButton(gb); + but->setChecked(lenFlag); + connect(sb1, SIGNAL(valueChanged(int)), SIGNAL(setQuantStrength(int))); + connect(sb2, SIGNAL(valueChanged(int)), SIGNAL(setQuantLimit(int))); + connect(but, SIGNAL(toggled(bool)), SIGNAL(setQuantLen(bool))); + + Q3WhatsThis::add(l1, tr(wtStrengthTxt)); + Q3WhatsThis::add(sb1, tr(wtStrengthTxt)); + Q3WhatsThis::add(l2, tr(wtQLimitTxt)); + Q3WhatsThis::add(sb2, tr(wtQLimitTxt)); + Q3WhatsThis::add(l3, tr(wtQLenTxt)); + Q3WhatsThis::add(but, tr(wtQLenTxt)); + } + diff --git a/muse2/muse/midiedit/quantconfig.h b/muse2/muse/midiedit/quantconfig.h new file mode 100644 index 00000000..31ab2285 --- /dev/null +++ b/muse2/muse/midiedit/quantconfig.h @@ -0,0 +1,32 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: quantconfig.h,v 1.1.1.1 2003/10/27 18:52:23 wschweer Exp $ +// +// (C) Copyright 1999/2000 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __QCONFIG_H__ +#define __QCONFIG_H__ + +#include + +//--------------------------------------------------------- +// QuantConfig +//--------------------------------------------------------- + +class QuantConfig : public QDialog { + Q_OBJECT + + signals: + void setQuantStrength(int); + void setQuantLimit(int); + void setQuantLen(bool); + + public: + QuantConfig(int, int, bool); + }; + + +#endif + diff --git a/muse2/muse/midieditor.cpp b/muse2/muse/midieditor.cpp new file mode 100644 index 00000000..60a95643 --- /dev/null +++ b/muse2/muse/midieditor.cpp @@ -0,0 +1,237 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: midieditor.cpp,v 1.2.2.2 2009/02/02 21:38:00 terminator356 Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#include "midieditor.h" +#include "midiedit/ecanvas.h" +#include "waveedit/waveview.h" +#include "scrollscale.h" +#include "mtscale.h" +#include +#include +#include +//Added by qt3to4: +#include +#include "xml.h" +#include "part.h" +#include "track.h" +#include "song.h" + +//--------------------------------------------------------- +// MidiEditor +//--------------------------------------------------------- + +MidiEditor::MidiEditor(int q, int r, PartList* pl, + QWidget* parent, const char* name) : TopWin(parent, name) + { + _pl = pl; + if (_pl) + for (iPart i = _pl->begin(); i != _pl->end(); ++i) + _parts.push_back(i->second->sn()); + _quant = q; + _raster = r; + canvas = 0; + wview = 0; + _curDrumInstrument = -1; + mainw = new QWidget(this); + mainGrid = new Q3GridLayout(mainw); + setCentralWidget(mainw); + } + +//--------------------------------------------------------- +// genPartlist +//--------------------------------------------------------- + +void MidiEditor::genPartlist() + { + _pl->clear(); + for (std::list::iterator i = _parts.begin(); i != _parts.end(); ++i) { + TrackList* tl = song->tracks(); + for (iTrack it = tl->begin(); it != tl->end(); ++it) { + PartList* pl = (*it)->parts(); + iPart ip; + for (ip = pl->begin(); ip != pl->end(); ++ip) { + if (ip->second->sn() == *i) { + _pl->add(ip->second); + break; + } + } + if (ip != pl->end()) + break; + } + } + } + +//--------------------------------------------------------- +// MidiEditor +//--------------------------------------------------------- + +MidiEditor::~MidiEditor() + { + if (_pl) + delete _pl; + } + +//--------------------------------------------------------- +// quantVal +//--------------------------------------------------------- + +int MidiEditor::quantVal(int v) const + { + int val = ((v+_quant/2)/_quant)*_quant; + if (val == 0) + val = _quant; + return val; + } + +//--------------------------------------------------------- +// readStatus +//--------------------------------------------------------- + +void MidiEditor::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; + } + } + } + +//--------------------------------------------------------- +// writePartList +//--------------------------------------------------------- + +void MidiEditor::writePartList(int level, Xml& xml) const + { + for (ciPart p = _pl->begin(); p != _pl->end(); ++p) { + Part* part = p->second; + Track* track = part->track(); + int trkIdx = song->tracks()->index(track); + int partIdx = track->parts()->index(part); + + if((trkIdx == -1) || (partIdx == -1)) + printf("MidiEditor::writePartList error: trkIdx:%d partIdx:%d\n", trkIdx, partIdx); + + xml.put(level, "%d:%d", trkIdx, partIdx); + } + } + +//--------------------------------------------------------- +// writeStatus +//--------------------------------------------------------- + +void MidiEditor::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"); + } + +//--------------------------------------------------------- +// songChanged +//--------------------------------------------------------- + +void MidiEditor::songChanged(int type) + { + + if (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(false); + return; + } + } + if (canvas) + canvas->songChanged(type); + else if (wview) + wview->songChanged(type); + + if (type & (SC_PART_REMOVED | SC_PART_MODIFIED + | SC_PART_INSERTED | SC_TRACK_REMOVED)) { + + updateHScrollRange(); + if (canvas) + setCaption(canvas->getCaption()); + else if (wview) + setCaption(wview->getCaption()); + if (type & SC_SIG) + time->update(); + + } + } + } + +//--------------------------------------------------------- +// setCurDrumInstrument +//--------------------------------------------------------- + +void MidiEditor::setCurDrumInstrument(int instr) + { + _curDrumInstrument = instr; + emit curDrumInstrumentChanged(_curDrumInstrument); + } + +//--------------------------------------------------------- +// curCanvasPart +//--------------------------------------------------------- + +Part* MidiEditor::curCanvasPart() +{ + if(canvas) + return canvas->part(); + else + return 0; +} + +//--------------------------------------------------------- +// curWavePart +//--------------------------------------------------------- + +WavePart* MidiEditor::curWavePart() +{ + if(wview) + return wview->part(); + else + return 0; +} + +//--------------------------------------------------------- +// setCurCanvasPart +//--------------------------------------------------------- + +void MidiEditor::setCurCanvasPart(Part* part) +{ + if(canvas) + canvas->setCurrentPart(part); +} + diff --git a/muse2/muse/midieditor.h b/muse2/muse/midieditor.h new file mode 100644 index 00000000..16520698 --- /dev/null +++ b/muse2/muse/midieditor.h @@ -0,0 +1,86 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: midieditor.h,v 1.3.2.2 2009/02/02 21:38:00 terminator356 Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __MIDIEDITOR_H__ +#define __MIDIEDITOR_H__ + +#include "sig.h" +#include "cobject.h" +//Added by qt3to4: +#include + +class PartList; +class Xml; +class Q3GridLayout; +class QWidget; +class QColor; +class EventCanvas; +class ScrollScale; +class CtrlEdit; +class MTScale; +class WaveView; +class Part; +class WavePart; + +//--------------------------------------------------------- +// MidiEditor +//--------------------------------------------------------- + +class MidiEditor : public TopWin { + Q_OBJECT + + PartList* _pl; + std::list _parts; + int _curDrumInstrument; // currently selected instrument if drum + // editor + protected: + ScrollScale* hscroll; + ScrollScale* vscroll; + MTScale* time; + EventCanvas* canvas; + WaveView* wview; + + std::list ctrlEditList; + int _quant, _raster; + Q3GridLayout* mainGrid; + QWidget* mainw; + virtual void readStatus(Xml&); + virtual void writeStatus(int, Xml&) const; + void writePartList(int, Xml&) const; + void genPartlist(); + + public slots: + void songChanged(int type); + void setCurDrumInstrument(int instr); + + virtual void updateHScrollRange() { }; + signals: + void curDrumInstrumentChanged(int); + + public: + MidiEditor(int, int, PartList*, + QWidget* parent = 0, const char* name = 0); + ~MidiEditor(); + + int quantVal(int v) const; + int rasterStep(unsigned tick) const { return sigmap.rasterStep(tick, _raster); } + unsigned rasterVal(unsigned v) const { return sigmap.raster(v, _raster); } + unsigned rasterVal1(unsigned v) const { return sigmap.raster1(v, _raster); } + unsigned rasterVal2(unsigned v) const { return sigmap.raster2(v, _raster); } + int quant() const { return _quant; } + void setQuant(int val) { _quant = val; } + int raster() const { return _raster; } + void setRaster(int val) { _raster = val; } + PartList* parts() { return _pl; } + int curDrumInstrument() const { return _curDrumInstrument; } + Part* curCanvasPart(); + WavePart* curWavePart(); + void setCurCanvasPart(Part*); + }; + +#endif + diff --git a/muse2/muse/midievent.cpp b/muse2/muse/midievent.cpp new file mode 100644 index 00000000..8f2b0756 --- /dev/null +++ b/muse2/muse/midievent.cpp @@ -0,0 +1,175 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: midievent.cpp,v 1.7.2.2 2009/05/24 21:43:44 terminator356 Exp $ +// +// (C) Copyright 2000-2003 Werner Schweer (ws@seh.de) +//========================================================= + +#include "event.h" +#include "midievent.h" +#include "xml.h" +#include "mpevent.h" +#include "midictrl.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)); + } + +void MidiEventBase::dump(int n) const + { + EventBase::dump(n); + const char* p; + + switch(type()) { + case Note: p = "Note "; break; + case Controller: p = "Ctrl "; break; + case Sysex: p = "Sysex "; break; + case PAfter: p = "PAfter "; break; + case CAfter: p = "CAfter "; break; + case Meta: p = "Meta "; break; + default: p = "?? "; break; + } + for (int i = 0; i < (n+2); ++i) + putchar(' '); + printf("<%s> a:0x%x(%d) b:0x%x(%d) c:0x%x(%d)\n", + p, a, a, b, b, c, c); + } + +//--------------------------------------------------------- +// MidiEventBase::write +//--------------------------------------------------------- + +//void MidiEventBase::write(int level, Xml& xml, const Pos& offset) const +void MidiEventBase::write(int level, Xml& xml, const Pos& offset, bool /*forcePath*/) const + { + xml.nput(level++, "\n", edata.dataLen); + xml.nput(level, ""); + for (int i = 0; i < edata.dataLen; ++i) + xml.nput("%02x ", edata.data[i] & 0xff); + xml.nput("\n"); + xml.tag(level, "/event"); + } + else { + //if (a) + // xml.nput(" a=\"%d\"", a); + //if (b) + // xml.nput(" b=\"%d\"", b); + //if (c) + // xml.nput(" c=\"%d\"", c); + xml.nput(" />\n"); + } + } + +//--------------------------------------------------------- +// MidiEventBase::read +//--------------------------------------------------------- + +void MidiEventBase::read(Xml& xml) + { + setType(Note); + a = 0; + b = 0; + c = 0; + + int dataLen = 0; + for (;;) { + Xml::Token token = xml.parse(); + const QString& tag = xml.s1(); + switch (token) { + case Xml::Error: + case Xml::End: + return; + case Xml::TagStart: + xml.unknown("Event"); + break; + case Xml::Text: + { + const char*s = tag.latin1(); + edata.data = new unsigned char[dataLen]; + edata.dataLen = dataLen; + unsigned char* d = edata.data; + for (int i = 0; i < dataLen; ++i) { + char* endp; + *d++ = strtol(s, &endp, 16); + s = endp; + } + } + break; + case Xml::Attribut: + if (tag == "tick") + setTick(xml.s2().toInt()); + else if (tag == "type") + setType(EventType(xml.s2().toInt())); + else if (tag == "len") + setLenTick(xml.s2().toInt()); + else if (tag == "a") + a = xml.s2().toInt(); + else if (tag == "b") + b = xml.s2().toInt(); + else if (tag == "c") + c = xml.s2().toInt(); + else if (tag == "datalen") + dataLen = xml.s2().toInt(); + break; + case Xml::TagEnd: + if (tag == "event") + return; + default: + break; + } + } + } + diff --git a/muse2/muse/midievent.h b/muse2/muse/midievent.h new file mode 100644 index 00000000..48217f57 --- /dev/null +++ b/muse2/muse/midievent.h @@ -0,0 +1,62 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: midievent.h,v 1.7.2.1 2009/05/24 21:43:44 terminator356 Exp $ +// +// (C) Copyright 1999-2004 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __MIDI_EVENT_H__ +#define __MIDI_EVENT_H__ + +#include "eventbase.h" + +//--------------------------------------------------------- +// MidiEventBase +//--------------------------------------------------------- + +class MidiEventBase : public EventBase { + int a, b, c; // pitch, velo-on, velo-off + EvData edata; + + virtual EventBase* clone() { 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(Xml&); + //virtual void write(int, Xml&, const Pos& offset) const; + virtual void write(int, Xml&, const Pos& offset, bool forcePath = false) const; + virtual EventBase* mid(unsigned, unsigned); + }; + +#endif + diff --git a/muse2/muse/midifile.cpp b/muse2/muse/midifile.cpp new file mode 100644 index 00000000..319152d7 --- /dev/null +++ b/muse2/muse/midifile.cpp @@ -0,0 +1,678 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: midifile.cpp,v 1.17 2004/06/18 08:36:43 wschweer Exp $ +// +// (C) Copyright 1999-2003 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include +#include + +#include "song.h" +#include "midi.h" +#include "midifile.h" +#include "drummap.h" +#include "event.h" +#include "globals.h" +#include "midictrl.h" +#include "marker/marker.h" +#include "midiport.h" +#include "midictrl.h" +#include "mpevent.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(FILE* f) + { + fp = f; + curPos = 0; + _mtype = MT_UNKNOWN; + _error = MF_NO_ERROR; + _tracks = new MidiFileTrackList; + } + +MidiFile::~MidiFile() + { + delete _tracks; + } + +//--------------------------------------------------------- +// read +// return true on error +//--------------------------------------------------------- + +bool MidiFile::read(void* p, size_t len) + { + for (;;) { + curPos += len; + size_t rv = fread(p, 1, len, fp); + if (rv == len) + return false; + if (feof(fp)) { + _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) + { + size_t rv = fwrite(p, 1, len, fp); + 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) + { + MPEventList* 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 (;;) { + MidiPlayEvent event; + lastport = -1; + lastchannel = -1; + + int rv = readEvent(&event, t); + if (lastport != -1) { + port = lastport; + if (port >= MIDI_PORTS) { + printf("port %d >= %d, reset to 0\n", port, MIDI_PORTS); + port = 0; + } + } + 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; + + event.setPort(port); + if (event.type() == ME_SYSEX || event.type() == ME_META) + event.setChannel(channel); + else + channel = event.channel(); + el->add(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(MidiPlayEvent* 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 (((unsigned)len == gmOnMsgLen) && memcmp(buffer, gmOnMsg, gmOnMsgLen) == 0) { + setMType(MT_GM); + return -1; + } + if (((unsigned)len == gsOnMsgLen) && memcmp(buffer, gsOnMsg, gsOnMsgLen) == 0) { + setMType(MT_GS); + return -1; + } + if (((unsigned)len == xgOnMsgLen) && memcmp(buffer, xgOnMsg, xgOnMsgLen) == 0) { + setMType(MT_XG); + return -1; + } + if (buffer[0] == 0x41) { // Roland + if (mtype() != MT_UNKNOWN) + setMType(MT_GS); + } + else if (buffer[0] == 0x43) { // Yamaha + if (mtype() == MT_UNKNOWN || mtype() == MT_GM) + setMType(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; + } + } + 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]; + if (len) { + if (read(buffer, len)) { + printf("readEvent: error 7\n"); + delete[] buffer; + return -2; + } + } + buffer[len] = 0; + switch(type) { + case 0x21: // switch port + lastport = buffer[0]; + delete[] buffer; + return -1; + case 0x20: // switch channel + lastchannel = buffer[0]; + delete[] buffer; + return -1; + case 0x2f: // End of Track + delete[] buffer; + return 0; + default: + event->setType(ME_META); + event->setData(buffer, len+1); + event->setA(type); + 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) { + printf("readEvent: no running status, read 0x%02x sstatus %x\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) + { + //FIXME: By T356 01/19/2010 + // If saving as a compressed file (gz or bz2), + // the file is a pipe, and pipes can't seek ! + // This results in a corrupted midi file. + // So exporting compressed midi has been disabled (elsewhere) + // for now... + + const MPEventList* events = &(t->events); + write("MTrk", 4); + int lenpos = ftell(fp); + writeLong(0); // dummy len + + status = -1; + int tick = 0; + for (iMPEvent 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 = ftell(fp); + fseek(fp, lenpos, SEEK_SET); + writeLong(endpos-lenpos-4); // tracklen + fseek(fp, endpos, SEEK_SET); + return false; + } + +//--------------------------------------------------------- +// writeEvent +//--------------------------------------------------------- + +void MidiFile::writeEvent(const MidiPlayEvent* 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() + { + write("MThd", 4); + writeLong(6); // header len + writeShort(config.smfFormat); + if (config.smfFormat == 0) { + writeShort(1); + MidiFileTrack dst; + for (iMidiFileTrack i = _tracks->begin(); i != _tracks->end(); ++i) { + MPEventList* sl = &((*i)->events); + for (iMPEvent ie = sl->begin(); ie != sl->end(); ++ie) + dst.events.add(*ie); + } + writeShort(1); + writeShort(_division); + writeTrack(&dst); + } + else { + writeShort(ntracks); + + writeShort(_division); + for (ciMidiFileTrack i = _tracks->begin(); i != _tracks->end(); ++i) + writeTrack(*i); + } + return (ferror(fp) != 0); + } + +//--------------------------------------------------------- +// readMidi +// returns true on error +//--------------------------------------------------------- + +bool MidiFile::read() + { + _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/muse2/muse/midifile.h b/muse2/muse/midifile.h new file mode 100644 index 00000000..da71a00a --- /dev/null +++ b/muse2/muse/midifile.h @@ -0,0 +1,113 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: midifile.h,v 1.3 2004/01/04 18:24:43 wschweer Exp $ +// +// (C) Copyright 1999-2004 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __MIDIFILE_H__ +#define __MIDIFILE_H__ + +#include +#include + +#include "globaldefs.h" +#include "mpevent.h" + +struct MPEventList; +class MidiPlayEvent; + +//--------------------------------------------------------- +// MidiFileTrack +//--------------------------------------------------------- + +struct MidiFileTrack { + MPEventList 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; + MType _mtype; + MidiFileTrackList* _tracks; + + int status, click; + int sstatus; + int lastport, lastchannel; + FILE* 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(MidiPlayEvent*, MidiFileTrack*); + void writeEvent(const MidiPlayEvent*); + + public: + MidiFile(FILE* f); + ~MidiFile(); + bool read(); + bool write(); + QString error(); + MidiFileTrackList* trackList() { return _tracks; } + int tracks() const { return ntracks; } + void setTrackList(MidiFileTrackList* tr, int n) { + _tracks = tr; + ntracks = n; + } + void setDivision(int d) { _division = d; } + int division() const { return _division; } + void setMType(MType t) { _mtype = t; } + MType mtype() const { return _mtype; } + }; + +#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/muse2/muse/midiport.cpp b/muse2/muse/midiport.cpp new file mode 100644 index 00000000..e5b4e63d --- /dev/null +++ b/muse2/muse/midiport.cpp @@ -0,0 +1,1027 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: midiport.cpp,v 1.21.2.15 2009/12/07 20:11:51 terminator356 Exp $ +// +// (C) Copyright 2000-2004 Werner Schweer (ws@seh.de) +//========================================================= + +//#include "config.h" + +#include +#include "mididev.h" +#include "midiport.h" +#include "midictrl.h" +#include "midi.h" +#include "minstrument.h" +#include "xml.h" +#include "globals.h" +#include "mpevent.h" +#include "synth.h" +#include "app.h" +#include "song.h" + +//#ifdef DSSI_SUPPORT +//#include "dssihost.h" +//#endif + +MidiPort midiPorts[MIDI_PORTS]; + +//--------------------------------------------------------- +// initMidiPorts +//--------------------------------------------------------- + +void initMidiPorts() + { + for (int i = 0; i < MIDI_PORTS; ++i) { + MidiPort* port = &midiPorts[i]; + port->setInstrument(genericMidiInstrument); + port->syncInfo().setPort(i); + } + } + +//--------------------------------------------------------- +// MidiPort +//--------------------------------------------------------- + +MidiPort::MidiPort() + : _state("not configured") + { + _device = 0; + _instrument = 0; + _controller = new MidiCtrlValListList(); + _foundInSongFile = false; + + // + // create minimum set of managed controllers + // to make midi mixer operational + // + for (int i = 0; i < MIDI_CHANNELS; ++i) { + addManagedController(i, CTRL_PROGRAM); + addManagedController(i, CTRL_VOLUME); + addManagedController(i, CTRL_PANPOT); + _automationType[i] = AUTO_READ; + } + } + +//--------------------------------------------------------- +// MidiPort +//--------------------------------------------------------- + +MidiPort::~MidiPort() + { + delete _controller; + } + +//--------------------------------------------------------- +// guiVisible +//--------------------------------------------------------- + +bool MidiPort::guiVisible() const + { + return _instrument ? _instrument->guiVisible() : false; + } + +//--------------------------------------------------------- +// hasGui +//--------------------------------------------------------- + +bool MidiPort::hasGui() const + { + return _instrument ? _instrument->hasGui() : false; + } + +//--------------------------------------------------------- +// setDevice +//--------------------------------------------------------- + +void MidiPort::setMidiDevice(MidiDevice* dev) + { + if (_device) { + if (_device->isSynti()) + _instrument = genericMidiInstrument; + _device->setPort(-1); + _device->close(); + } + if (dev) { + for (int i = 0; i < MIDI_PORTS; ++i) { + MidiPort* mp = &midiPorts[i]; + if (mp->device() == dev) { + if(dev->isSynti()) + mp->setInstrument(genericMidiInstrument); + // move device + _state = mp->state(); + mp->clearDevice(); + break; + } + } + _device = dev; + if (_device->isSynti()) { + SynthI* s = (SynthI*)_device; + _instrument = s; + } + _state = _device->open(); + _device->setPort(portno()); + + // By T356. Send all instrument controller initial (default) values to all midi channels now, + // except where explicitly initialized in the song. + // By sending ALL instrument controller initial values, even if those controllers are NOT + // in the song, we can ensure better consistency between songs. + // For example: A song is loaded which has a 'reverb level' controller initial value of '100'. + // Then a song is loaded which has no such controller (hence no explicit initial value). + // The 'reverb level' controller would still be at '100', and could adversely affect the song, + // but if the instrument has an available initial value of say '0', it will be used instead. + // + //if(_instrument) + // p3.3.39 NOT for syntis! Use midiState an/or initParams for that. + if(_instrument && !_device->isSynti()) + { + MidiControllerList* cl = _instrument->controller(); + MidiController* mc; + for(ciMidiController imc = cl->begin(); imc != cl->end(); ++imc) + { + //mc = *imc; + mc = imc->second; + for(int chan = 0; chan < MIDI_CHANNELS; ++chan) + { + ciMidiCtrlValList i; + // Look for an initial value for this midi controller, on this midi channel, in the song... + for(i = _controller->begin(); i != _controller->end(); ++i) + { + int channel = i->first >> 24; + int cntrl = i->first & 0xffffff; + int val = i->second->hwVal(); + if(channel == chan && cntrl == mc->num() && val != CTRL_VAL_UNKNOWN) + break; + } + // If no initial value was found for this midi controller, on this midi channel, in the song... + if(i == _controller->end()) + { + // If the instrument's midi controller has an initial value, send it now. + if(mc->initVal() != CTRL_VAL_UNKNOWN) + { + int ctl = mc->num(); + +///#ifdef DSSI_SUPPORT + // Exclude dssi synths from this, as some of them have hundreds of controls. + // Another difference is dssi synth devices (usually) have readable default port values, + // unlike a midi output port, which cannot be queried for a current or default value, + // so we blindly send values here. Also some dssi have a different default mechanism or + // storage systems for parameters, with complex GUIs with their own manipulation schemes. + // Another difference is dssi controls are best manipulated as ladspa controls - + // (they ARE ladspa controls). This is stuff I mainly put for midi ports and MESS... + // I DO allow midi control of those ladspa controls, so our midi controls shall be updated here... + // p3.3.39 Only non-syntis! Use midiState an/or initParams for that. + ///if(!_device->isSynti() || (dynamic_cast(((SynthI*)_device)->sif()) == 0)) + ///{ +///#endif + // Note the addition of bias! + _device->putEvent(MidiPlayEvent(0, portno(), chan, + ME_CONTROLLER, ctl, mc->initVal() + mc->bias())); +///#ifdef DSSI_SUPPORT + ///} +///#endif + + // Set it once so the 'last HW value' is set, and control knobs are positioned at the value... + //setHwCtrlState(chan, ctl, mc->initVal() + mc->bias()); + // Set it again so that control labels show 'off'... + //setHwCtrlState(chan, ctl, CTRL_VAL_UNKNOWN); + setHwCtrlStates(chan, ctl, CTRL_VAL_UNKNOWN, mc->initVal() + mc->bias()); + } + } + } + } + } + + // init HW controller state + // p3.3.39 NOT for syntis! Use midiState an/or initParams for that. + if(!_device->isSynti()) + { + for (iMidiCtrlValList i = _controller->begin(); i != _controller->end(); ++i) { + int channel = i->first >> 24; + int cntrl = i->first & 0xffffff; + int val = i->second->hwVal(); + if (val != CTRL_VAL_UNKNOWN) { + + +///#ifdef DSSI_SUPPORT + // Not for dssi synths... + ///if(!_device->isSynti() || (dynamic_cast(((SynthI*)_device)->sif()) == 0)) + ///{ +///#endif + _device->putEvent(MidiPlayEvent(0, portno(), channel, + ME_CONTROLLER, cntrl, val)); +///#ifdef DSSI_SUPPORT + ///} +///#endif + + // Set it once so the 'last HW value' is set, and control knobs are positioned at the value... + setHwCtrlState(channel, cntrl, val); + // Set it again so that control labels show 'off'... + //setHwCtrlState(channel, cntrl, CTRL_VAL_UNKNOWN); + //setHwCtrlStates(channel, cntrl, CTRL_VAL_UNKNOWN, val); + } + } + } + } + + else + clearDevice(); + } + +//--------------------------------------------------------- +// clearDevice +//--------------------------------------------------------- + +void MidiPort::clearDevice() + { + _device = 0; + _state = "not configured"; + } + +//--------------------------------------------------------- +// portno +//--------------------------------------------------------- + +int MidiPort::portno() const + { + for (int i = 0; i < MIDI_PORTS; ++i) { + if (&midiPorts[i] == this) + return i; + } + return -1; + } + +//--------------------------------------------------------- +// midiPortsPopup +//--------------------------------------------------------- + +//QPopupMenu* midiPortsPopup(QWidget* parent) +Q3PopupMenu* midiPortsPopup(QWidget* parent, int checkPort) + { + Q3PopupMenu* p = new Q3PopupMenu(parent); + for (int i = 0; i < MIDI_PORTS; ++i) { + MidiPort* port = &midiPorts[i]; + QString name; + name.sprintf("%d:%s", port->portno()+1, port->portname().latin1()); + p->insertItem(name, i); + + if(i == checkPort) + p->setItemChecked(i, true); + } + return p; + } + +//--------------------------------------------------------- +// portname +//--------------------------------------------------------- + +const QString& MidiPort::portname() const + { + //static const QString none(""); + static const QString none(QT_TR_NOOP("")); + if (_device) + return _device->name(); + else + return none; + } + +//--------------------------------------------------------- +// tryCtrlInitVal +//--------------------------------------------------------- + +void MidiPort::tryCtrlInitVal(int chan, int ctl, int val) +{ + if(_instrument) + { + MidiControllerList* cl = _instrument->controller(); + //for(ciMidiController imc = cl->begin(); imc != cl->end(); ++imc) + ciMidiController imc = cl->find(ctl); + if(imc != cl->end()) + { + //MidiController* mc = *imc; + MidiController* mc = imc->second; + //int cnum = mc->num(); + //if(cnum == ctl) + //{ + int initval = mc->initVal(); + + // Initialize from either the instrument controller's initial value, or the supplied value. + if(initval != CTRL_VAL_UNKNOWN) + { + if(_device) + { + //MidiPlayEvent ev(song->cpos(), portno(), chan, ME_CONTROLLER, ctl, initval + mc->bias()); + MidiPlayEvent ev(0, portno(), chan, ME_CONTROLLER, ctl, initval + mc->bias()); + _device->putEvent(ev); + } + // Set it once so the 'last HW value' is set, and control knobs are positioned at the value... + //setHwCtrlState(chan, ctl, initval + mc->bias()); + // Set it again so that control labels show 'off'... + //setHwCtrlState(chan, ctl, CTRL_VAL_UNKNOWN); + setHwCtrlStates(chan, ctl, CTRL_VAL_UNKNOWN, initval + mc->bias()); + + return; + } + } + } + + if(_device) + { + //MidiPlayEvent ev(song->cpos(), portno(), chan, ME_CONTROLLER, ctl, val); + MidiPlayEvent ev(0, portno(), chan, ME_CONTROLLER, ctl, val); + _device->putEvent(ev); + } + // Set it once so the 'last HW value' is set, and control knobs are positioned at the value... + //setHwCtrlState(chan, ctl, val); + // Set it again so that control labels show 'off'... + //setHwCtrlState(chan, ctl, CTRL_VAL_UNKNOWN); + setHwCtrlStates(chan, ctl, CTRL_VAL_UNKNOWN, val); +} + +//--------------------------------------------------------- +// sendGmInitValues +//--------------------------------------------------------- + +void MidiPort::sendGmInitValues() +{ + for (int i = 0; i < MIDI_CHANNELS; ++i) { + // Changed by T356. + //setHwCtrlState(i, CTRL_PROGRAM, 0); + //setHwCtrlState(i, CTRL_PITCH, 0); + //setHwCtrlState(i, CTRL_VOLUME, 100); + //setHwCtrlState(i, CTRL_PANPOT, 64); + //setHwCtrlState(i, CTRL_REVERB_SEND, 40); + //setHwCtrlState(i, CTRL_CHORUS_SEND, 0); + + // By T356. Initialize from instrument controller if it has an initial value, otherwise use the specified value. + // Tested: Ultimately, a track's controller stored values take priority by sending any 'zero time' value + // AFTER these GM/GS/XG init routines are called via initDevices(). + tryCtrlInitVal(i, CTRL_PROGRAM, 0); + tryCtrlInitVal(i, CTRL_PITCH, 0); + tryCtrlInitVal(i, CTRL_VOLUME, 100); + tryCtrlInitVal(i, CTRL_PANPOT, 64); + tryCtrlInitVal(i, CTRL_REVERB_SEND, 40); + tryCtrlInitVal(i, CTRL_CHORUS_SEND, 0); + } +} + +//--------------------------------------------------------- +// sendGsInitValues +//--------------------------------------------------------- + +void MidiPort::sendGsInitValues() +{ + sendGmInitValues(); +} + +//--------------------------------------------------------- +// sendXgInitValues +//--------------------------------------------------------- + +void MidiPort::sendXgInitValues() +{ + for (int i = 0; i < MIDI_CHANNELS; ++i) { + // Changed by T356. + //setHwCtrlState(i, CTRL_PROGRAM, 0); + //setHwCtrlState(i, CTRL_MODULATION, 0); + //setHwCtrlState(i, CTRL_PORTAMENTO_TIME, 0); + //setHwCtrlState(i, CTRL_VOLUME, 0x64); + //setHwCtrlState(i, CTRL_PANPOT, 0x40); + //setHwCtrlState(i, CTRL_EXPRESSION, 0x7f); + //setHwCtrlState(i, CTRL_SUSTAIN, 0x0); + //setHwCtrlState(i, CTRL_PORTAMENTO, 0x0); + //setHwCtrlState(i, CTRL_SOSTENUTO, 0x0); + //setHwCtrlState(i, CTRL_SOFT_PEDAL, 0x0); + //setHwCtrlState(i, CTRL_HARMONIC_CONTENT, 0x40); + //setHwCtrlState(i, CTRL_RELEASE_TIME, 0x40); + //setHwCtrlState(i, CTRL_ATTACK_TIME, 0x40); + //setHwCtrlState(i, CTRL_BRIGHTNESS, 0x40); + //setHwCtrlState(i, CTRL_REVERB_SEND, 0x28); + //setHwCtrlState(i, CTRL_CHORUS_SEND, 0x0); + //setHwCtrlState(i, CTRL_VARIATION_SEND, 0x0); + + // By T356. Initialize from instrument controller if it has an initial value, otherwise use the specified value. + tryCtrlInitVal(i, CTRL_PROGRAM, 0); + tryCtrlInitVal(i, CTRL_MODULATION, 0); + tryCtrlInitVal(i, CTRL_PORTAMENTO_TIME, 0); + tryCtrlInitVal(i, CTRL_VOLUME, 0x64); + tryCtrlInitVal(i, CTRL_PANPOT, 0x40); + tryCtrlInitVal(i, CTRL_EXPRESSION, 0x7f); + tryCtrlInitVal(i, CTRL_SUSTAIN, 0x0); + tryCtrlInitVal(i, CTRL_PORTAMENTO, 0x0); + tryCtrlInitVal(i, CTRL_SOSTENUTO, 0x0); + tryCtrlInitVal(i, CTRL_SOFT_PEDAL, 0x0); + tryCtrlInitVal(i, CTRL_HARMONIC_CONTENT, 0x40); + tryCtrlInitVal(i, CTRL_RELEASE_TIME, 0x40); + tryCtrlInitVal(i, CTRL_ATTACK_TIME, 0x40); + tryCtrlInitVal(i, CTRL_BRIGHTNESS, 0x40); + tryCtrlInitVal(i, CTRL_REVERB_SEND, 0x28); + tryCtrlInitVal(i, CTRL_CHORUS_SEND, 0x0); + tryCtrlInitVal(i, CTRL_VARIATION_SEND, 0x0); + } +} + +//--------------------------------------------------------- +// sendGmOn +// send GM-On message to midi device and keep track +// of device state +//--------------------------------------------------------- + +void MidiPort::sendGmOn() + { + sendSysex(gmOnMsg, gmOnMsgLen); + } + +//--------------------------------------------------------- +// sendGsOn +// send Roland GS-On message to midi device and keep track +// of device state +//--------------------------------------------------------- + +void MidiPort::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)); + sendSysex(gsOnMsg2, gsOnMsg2Len); + sendSysex(gsOnMsg3, gsOnMsg3Len); + } + +//--------------------------------------------------------- +// sendXgOn +// send Yamaha XG-On message to midi device and keep track +// of device state +//--------------------------------------------------------- + +void MidiPort::sendXgOn() + { + sendSysex(xgOnMsg, xgOnMsgLen); + } + +//--------------------------------------------------------- +// sendSysex +// send SYSEX message to midi device +//--------------------------------------------------------- + +void MidiPort::sendSysex(const unsigned char* p, int n) + { + if (_device) { + MidiPlayEvent event(0, 0, ME_SYSEX, p, n); + _device->putEvent(event); + } + } + +//--------------------------------------------------------- +// sendMMCLocate +//--------------------------------------------------------- + +void MidiPort::sendMMCLocate(unsigned char ht, unsigned char m, unsigned char s, unsigned char f, unsigned char sf, int devid) +{ + unsigned char msg[mmcLocateMsgLen]; + memcpy(msg, mmcLocateMsg, mmcLocateMsgLen); + if(devid != -1) + msg[1] = devid; + else + msg[1] = _syncInfo.idOut(); + msg[6] = ht; + msg[7] = m; + msg[8] = s; + msg[9] = f; + msg[10] = sf; + sendSysex(msg, mmcLocateMsgLen); +} + +//--------------------------------------------------------- +// sendMMCStop +//--------------------------------------------------------- + +void MidiPort::sendMMCStop(int devid) +{ + unsigned char msg[mmcStopMsgLen]; + memcpy(msg, mmcStopMsg, mmcStopMsgLen); + if(devid != -1) + msg[1] = devid; + else + msg[1] = _syncInfo.idOut(); + sendSysex(msg, mmcStopMsgLen); +} + +//--------------------------------------------------------- +// sendMMCDeferredPlay +//--------------------------------------------------------- + +void MidiPort::sendMMCDeferredPlay(int devid) +{ + unsigned char msg[mmcDeferredPlayMsgLen]; + memcpy(msg, mmcDeferredPlayMsg, mmcDeferredPlayMsgLen); + if(devid != -1) + msg[1] = devid; + else + msg[1] = _syncInfo.idOut(); + sendSysex(msg, mmcDeferredPlayMsgLen); +} + +//--------------------------------------------------------- +// sendStart +//--------------------------------------------------------- + +void MidiPort::sendStart() + { + if (_device) { + MidiPlayEvent event(0, 0, 0, ME_START, 0, 0); + _device->putEvent(event); + } + } + +//--------------------------------------------------------- +// sendStop +//--------------------------------------------------------- + +void MidiPort::sendStop() + { + if (_device) { + MidiPlayEvent event(0, 0, 0, ME_STOP, 0, 0); + _device->putEvent(event); + } + } + +//--------------------------------------------------------- +// sendClock +//--------------------------------------------------------- + +void MidiPort::sendClock() + { + if (_device) { + MidiPlayEvent event(0, 0, 0, ME_CLOCK, 0, 0); + _device->putEvent(event); + } + } + +//--------------------------------------------------------- +// sendContinue +//--------------------------------------------------------- + +void MidiPort::sendContinue() + { + if (_device) { + MidiPlayEvent event(0, 0, 0, ME_CONTINUE, 0, 0); + _device->putEvent(event); + } + } + +//--------------------------------------------------------- +// sendSongpos +//--------------------------------------------------------- + +void MidiPort::sendSongpos(int pos) + { + if (_device) { + MidiPlayEvent event(0, 0, 0, ME_SONGPOS, pos, 0); + _device->putEvent(event); + } + } + +//--------------------------------------------------------- +// addManagedController +//--------------------------------------------------------- + +MidiCtrlValList* MidiPort::addManagedController(int channel, int ctrl) + { + iMidiCtrlValList cl = _controller->find(channel, ctrl); + if (cl == _controller->end()) { + MidiCtrlValList* pvl = new MidiCtrlValList(ctrl); + _controller->add(channel, pvl); + return pvl; + } + else + return cl->second; + } + +//--------------------------------------------------------- +// limitValToInstrCtlRange +//--------------------------------------------------------- + +int MidiPort::limitValToInstrCtlRange(MidiController* mc, int val) +{ + if(!_instrument || !mc || val == CTRL_VAL_UNKNOWN) + return val; + + //MidiController* mc = imc->second; + int mn = mc->minVal(); + int mx = mc->maxVal(); + int bias = mc->bias(); + + // Subtract controller bias from value. + val -= bias; + + // Limit value to controller range. + if(val < mn) + val = mn; + else + if(val > mx) + val = mx; + + // Re-add controller bias to value. + val += bias; + + return val; +} + +int MidiPort::limitValToInstrCtlRange(int ctl, int val) +{ + if(!_instrument || val == CTRL_VAL_UNKNOWN) + return val; + + MidiControllerList* cl = _instrument->controller(); + + // Is it a drum controller? + MidiController *mc = drumController(ctl); + if(!mc) + { + // It's not a drum controller. Find it as a regular controller instead. + iMidiController imc = cl->find(ctl); + if(imc != cl->end()) + mc = imc->second; + } + + // If it's a valid controller, limit the value to the instrument controller range. + if(mc) + return limitValToInstrCtlRange(mc, val); + + return val; +} + +//--------------------------------------------------------- +// sendEvent +// return true, if event cannot be delivered +//--------------------------------------------------------- + +bool MidiPort::sendEvent(const MidiPlayEvent& ev) + { + if (ev.type() == ME_CONTROLLER) { + +// printf("current sustain %d %d %d\n", hwCtrlState(ev.channel(),CTRL_SUSTAIN), CTRL_SUSTAIN, ev.dataA()); + + // Added by T356. + int da = ev.dataA(); + int db = ev.dataB(); + /* + // Is it a drum controller? + MidiController* mc = drumController(da); + if(mc) + { + DrumMap* dm = &drumMap[da & 0x7f]; + int port = dm->port; + MidiPort* mp = &midiPorts[port]; + // Is it NOT for this MidiPort? + if(mp && (mp != this)) + { + // Redirect the event to the mapped port and channel... + da = (da & ~0xff) | (dm->anote & 0x7f); + db = mp->limitValToInstrCtlRange(da, db); + MidiPlayEvent nev(ev.time(), port, dm->channel, ME_CONTROLLER, da, db); + if(!mp->setHwCtrlState(ev.channel(), da, db)) + return false; + if(!mp->device()) + return true; + return mp->device()->putEvent(nev); + } + } + */ + db = limitValToInstrCtlRange(da, db); + + + // Removed by T356. + // + // optimize controller settings + // + //if (hwCtrlState(ev.channel(), ev.dataA()) == ev.dataB()) { +// printf("optimize ctrl %d %x val %d\n", ev.dataA(), ev.dataA(), ev.dataB()); + // return false; + // } +// printf("set HW Ctrl State ch:%d 0x%x 0x%x\n", ev.channel(), ev.dataA(), ev.dataB()); + if(!setHwCtrlState(ev.channel(), da, db)) + return false; + } + else + if (ev.type() == ME_PITCHBEND) + { + int da = limitValToInstrCtlRange(CTRL_PITCH, ev.dataA()); + // Removed by T356. + //if (hwCtrlState(ev.channel(), CTRL_PITCH) == ev.dataA()) + // return false; + + if(!setHwCtrlState(ev.channel(), CTRL_PITCH, da)) + return false; + } + else + if (ev.type() == ME_PROGRAM) + { + if(!setHwCtrlState(ev.channel(), CTRL_PROGRAM, ev.dataA())) + return false; + } + + + if (!_device) + return true; + return _device->putEvent(ev); + } + +//--------------------------------------------------------- +// lastValidHWCtrlState +//--------------------------------------------------------- + +int MidiPort::lastValidHWCtrlState(int ch, int ctrl) const +{ + ch &= 0xff; + iMidiCtrlValList cl = _controller->find(ch, ctrl); + if (cl == _controller->end()) { + return CTRL_VAL_UNKNOWN; + } + MidiCtrlValList* vl = cl->second; + return vl->lastValidHWVal(); +} + +//--------------------------------------------------------- +// hwCtrlState +//--------------------------------------------------------- + +int MidiPort::hwCtrlState(int ch, int ctrl) const + { + ch &= 0xff; + iMidiCtrlValList cl = _controller->find(ch, ctrl); + if (cl == _controller->end()) { + //if (debugMsg) + // printf("hwCtrlState: chan %d ctrl 0x%x not found\n", ch, ctrl); + return CTRL_VAL_UNKNOWN; + } + MidiCtrlValList* vl = cl->second; + return vl->hwVal(); + } + +//--------------------------------------------------------- +// setHwCtrlState +// Returns false if value is already equal, true if value is set. +//--------------------------------------------------------- + +bool MidiPort::setHwCtrlState(int ch, int ctrl, int val) + { + // Changed by T356. + //iMidiCtrlValList cl = _controller->find(ch, ctrl); + //if (cl == _controller->end()) { + // try to add new controller + // addManagedController(ch, ctrl); +// muse->importController(ch, this, ctrl); + // cl = _controller->find(ch, ctrl); + // if (cl == _controller->end()) { + // if (debugMsg) + // printf("setHwCtrlState(%d,0x%x,0x%x): not found\n", ch, ctrl, val); + // return; + // } + // } + //MidiCtrlValList* vl = cl->second; +// printf("setHwCtrlState ch %d ctrl %x val %x\n", ch, ctrl, val); + + // By T356. This will create a new value list if necessary, otherwise it returns the existing list. + MidiCtrlValList* vl = addManagedController(ch, ctrl); + + return vl->setHwVal(val); + } + +//--------------------------------------------------------- +// setHwCtrlStates +// Sets current and last HW values. +// Handy for forcing labels to show 'off' and knobs to show specific values +// without having to send two messages. +// Returns false if both values are already set, true if either value is changed. +//--------------------------------------------------------- + +bool MidiPort::setHwCtrlStates(int ch, int ctrl, int val, int lastval) + { + // This will create a new value list if necessary, otherwise it returns the existing list. + MidiCtrlValList* vl = addManagedController(ch, ctrl); + + return vl->setHwVals(val, lastval); + } + +// Removed by T356. +//--------------------------------------------------------- +// setCtrl +// return true if new controller value added +//--------------------------------------------------------- + +//bool MidiPort::setCtrl(int ch, int tick, int ctrl, int val) +// { +// if (debugMsg) +// printf("setCtrl(tick=%d val=%d)\n",tick,val); +// iMidiCtrlValList cl = _controller->find(ch, ctrl); +// if (cl == _controller->end()) { +// if (debugMsg) +// printf("setCtrl: controller 0x%x for channel %d not found\n", ctrl, ch); +// return false; +// } +// return cl->second->add(tick, val); +// } + +//--------------------------------------------------------- +// setControllerVal +// This function sets a controller value, +// creating the controller if necessary. +// Returns true if a value was actually added or replaced. +//--------------------------------------------------------- + +bool MidiPort::setControllerVal(int ch, int tick, int ctrl, int val, Part* part) +{ + MidiCtrlValList* pvl; + iMidiCtrlValList cl = _controller->find(ch, ctrl); + if (cl == _controller->end()) + { + pvl = new MidiCtrlValList(ctrl); + _controller->add(ch, pvl); + } + else + pvl = cl->second; + + return pvl->addMCtlVal(tick, val, part); +} + +//--------------------------------------------------------- +// getCtrl +//--------------------------------------------------------- + +int MidiPort::getCtrl(int ch, int tick, int ctrl) const + { + iMidiCtrlValList cl = _controller->find(ch, ctrl); + if (cl == _controller->end()) { + //if (debugMsg) + // printf("getCtrl: controller %d(0x%x) for channel %d not found size %zd\n", + // ctrl, ctrl, ch, _controller->size()); + return CTRL_VAL_UNKNOWN; + } + return cl->second->value(tick); + } + +int MidiPort::getCtrl(int ch, int tick, int ctrl, Part* part) const + { + iMidiCtrlValList cl = _controller->find(ch, ctrl); + if (cl == _controller->end()) { + //if (debugMsg) + // printf("getCtrl: controller %d(0x%x) for channel %d not found size %zd\n", + // ctrl, ctrl, ch, _controller->size()); + return CTRL_VAL_UNKNOWN; + } + return cl->second->value(tick, part); + } +//--------------------------------------------------------- +// deleteController +//--------------------------------------------------------- + +void MidiPort::deleteController(int ch, int tick, int ctrl, Part* part) + { + iMidiCtrlValList cl = _controller->find(ch, ctrl); + if (cl == _controller->end()) { + if (debugMsg) + printf("deleteController: controller %d(0x%x) for channel %d not found size %zd\n", + ctrl, ctrl, ch, _controller->size()); + return; + } + + cl->second->delMCtlVal(tick, part); + } + +//--------------------------------------------------------- +// midiController +//--------------------------------------------------------- + +MidiController* MidiPort::midiController(int num) const + { + if (_instrument) { + MidiControllerList* mcl = _instrument->controller(); + for (iMidiController i = mcl->begin(); i != mcl->end(); ++i) { + int cn = i->second->num(); + if (cn == num) + return i->second; + // wildcard? + if (((cn & 0xff) == 0xff) && ((cn & ~0xff) == (num & ~0xff))) + return i->second; + } + } + + for (iMidiController i = defaultMidiController.begin(); i != defaultMidiController.end(); ++i) { + int cn = i->second->num(); + if (cn == num) + return i->second; + // wildcard? + if (((cn & 0xff) == 0xff) && ((cn & ~0xff) == (num & ~0xff))) + return i->second; + } + + + QString name = midiCtrlName(num); + int min = 0; + int max = 127; + + MidiController::ControllerType t = midiControllerType(num); + switch (t) { + case MidiController::RPN: + case MidiController::NRPN: + case MidiController::Controller7: + max = 127; + break; + case MidiController::Controller14: + case MidiController::RPN14: + case MidiController::NRPN14: + max = 16383; + break; + case MidiController::Program: + max = 0xffffff; + break; + case MidiController::Pitch: + max = 8191; + min = -8192; + break; + case MidiController::Velo: // cannot happen + break; + } + MidiController* c = new MidiController(name, num, min, max, 0); + defaultMidiController.add(c); + return c; + } + +//--------------------------------------------------------- +// drumController +// Returns instrument drum controller if ctl is a drum controller number. +// Otherwise returns zero. +//--------------------------------------------------------- + +MidiController* MidiPort::drumController(int ctl) +{ + if(!_instrument) + return 0; + + MidiControllerList* cl = _instrument->controller(); + + // If it's an RPN, NRPN, RPN14, or NRPN14 controller... + if(((ctl - CTRL_RPN_OFFSET >= 0) && (ctl - CTRL_RPN_OFFSET <= 0xffff)) || + ((ctl - CTRL_NRPN_OFFSET >= 0) && (ctl - CTRL_NRPN_OFFSET <= 0xffff)) || + ((ctl - CTRL_RPN14_OFFSET >= 0) && (ctl - CTRL_RPN14_OFFSET <= 0xffff)) || + ((ctl - CTRL_NRPN14_OFFSET >= 0) && (ctl - CTRL_NRPN14_OFFSET <= 0xffff))) + { + // Does the instrument have a drum controller to match this controller's number? + iMidiController imc = cl->find(ctl | 0xff); + if(imc != cl->end()) + // Yes, it's a drum controller. Return a pointer to it. + return imc->second; + } + + return 0; +} + +int MidiPort::nullSendValue() +{ + return _instrument ? _instrument->nullSendValue() : -1; +} + +void MidiPort::setNullSendValue(int v) +{ + if(_instrument) + _instrument->setNullSendValue(v); +} + +//--------------------------------------------------------- +// writeRouting // p3.3.50 +//--------------------------------------------------------- + +void MidiPort::writeRouting(int level, Xml& xml) const +{ + // If this device is not actually in use by the song, do not write any routes. + // This prevents bogus routes from being saved and propagated in the med file. + if(!device()) + return; + + QString s; + + for (ciRoute r = _outRoutes.begin(); r != _outRoutes.end(); ++r) + { + if(r->type == Route::TRACK_ROUTE && !r->name().isEmpty()) + { + //xml.tag(level++, "Route"); + + s = QT_TR_NOOP("Route"); + if(r->channel != -1 && r->channel != 0) + s += QString(QT_TR_NOOP(" channelMask=\"%1\"")).arg(r->channel); // Use new channel mask. + xml.tag(level++, s); + + xml.tag(level, "source mport=\"%d\"/", portno()); + + s = QT_TR_NOOP("dest"); + s += QString(QT_TR_NOOP(" name=\"%1\"/")).arg(Xml::xmlString(r->name())); + xml.tag(level, s); + + xml.etag(level--, "Route"); + } + } +} + diff --git a/muse2/muse/midiport.h b/muse2/muse/midiport.h new file mode 100644 index 00000000..7c8a408c --- /dev/null +++ b/muse2/muse/midiport.h @@ -0,0 +1,130 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: midiport.h,v 1.9.2.6 2009/11/17 22:08:22 terminator356 Exp $ +// +// (C) Copyright 1999-2004 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __MIDIPORT_H__ +#define __MIDIPORT_H__ + +#include "globaldefs.h" +#include "sync.h" +#include "route.h" +//Added by qt3to4: +#include + +class MidiDevice; +class MidiInstrument; +class MidiCtrlValListList; +class MidiPlayEvent; +class MidiController; +class MidiCtrlValList; +class Part; +//class MidiSyncInfo; + +//--------------------------------------------------------- +// MidiPort +//--------------------------------------------------------- + +class MidiPort { + MidiCtrlValListList* _controller; + MidiDevice* _device; + QString _state; // result of device open + MidiInstrument* _instrument; + AutomationType _automationType[MIDI_CHANNELS]; + // Holds sync settings and detection monitors. + MidiSyncInfo _syncInfo; + // p3.3.50 Just a flag to say the port was found in the song file, even if it has no device right now. + bool _foundInSongFile; + + RouteList _inRoutes, _outRoutes; + + void clearDevice(); + + public: + MidiPort(); + ~MidiPort(); + + // + // manipulate active midi controller + // + MidiCtrlValListList* controller() { return _controller; } + int getCtrl(int ch, int tick, int ctrl) const; + int getCtrl(int ch, int tick, int ctrl, Part* part) const; + // Removed by T356. + //bool setCtrl(int ch, int tick, int ctrl, int val); + bool setControllerVal(int ch, int tick, int ctrl, int val, Part* part); + // Can be CTRL_VAL_UNKNOWN until a valid state is set + int lastValidHWCtrlState(int ch, int ctrl) const; + int hwCtrlState(int ch, int ctrl) const; + bool setHwCtrlState(int ch, int ctrl, int val); + bool setHwCtrlStates(int ch, int ctrl, int val, int lastval); + void deleteController(int ch, int tick, int ctrl, Part* part); + + bool guiVisible() const; + bool hasGui() const; + + int portno() const; + bool foundInSongFile() const { return _foundInSongFile; } + void setFoundInSongFile(bool b) { _foundInSongFile = b; } + + MidiDevice* device() const { return _device; } + const QString& state() const { return _state; } + void setState(const QString& s) { _state = s; } + void setMidiDevice(MidiDevice* dev); + const QString& portname() const; + MidiInstrument* instrument() const { return _instrument; } + void setInstrument(MidiInstrument* i) { _instrument = i; } + MidiController* midiController(int num) const; + MidiCtrlValList* addManagedController(int channel, int ctrl); + void tryCtrlInitVal(int chan, int ctl, int val); + int limitValToInstrCtlRange(int ctl, int val); + int limitValToInstrCtlRange(MidiController* mc, int val); + MidiController* drumController(int ctl); + int nullSendValue(); + void setNullSendValue(int v); + + RouteList* inRoutes() { return &_inRoutes; } + RouteList* outRoutes() { return &_outRoutes; } + bool noInRoute() const { return _inRoutes.empty(); } + bool noOutRoute() const { return _outRoutes.empty(); } + void writeRouting(int, Xml&) const; + + // send events to midi device and keep track of + // device state: + void sendGmOn(); + void sendGsOn(); + void sendXgOn(); + void sendGmInitValues(); + void sendGsInitValues(); + void sendXgInitValues(); + void sendStart(); + void sendStop(); + void sendContinue(); + void sendSongpos(int); + void sendClock(); + void sendSysex(const unsigned char* p, int n); + void sendMMCLocate(unsigned char ht, unsigned char m, + unsigned char s, unsigned char f, unsigned char sf, int devid = -1); + void sendMMCStop(int devid = -1); + void sendMMCDeferredPlay(int devid = -1); + + bool sendEvent(const MidiPlayEvent&); + AutomationType automationType(int channel) { return _automationType[channel]; } + void setAutomationType(int channel, AutomationType t) { + _automationType[channel] = t; + } + MidiSyncInfo& syncInfo() { return _syncInfo; } + }; + +extern MidiPort midiPorts[MIDI_PORTS]; +extern void initMidiPorts(); + +class Q3PopupMenu; +class QWidget; +//extern QPopupMenu* midiPortsPopup(QWidget*); +extern Q3PopupMenu* midiPortsPopup(QWidget*, int checkPort = -1); +#endif + diff --git a/muse2/muse/midiseq.cpp b/muse2/muse/midiseq.cpp new file mode 100644 index 00000000..7d7dedef --- /dev/null +++ b/muse2/muse/midiseq.cpp @@ -0,0 +1,766 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: midiseq.cpp,v 1.30.2.21 2009/12/20 05:00:35 terminator356 Exp $ +// +// high priority task for scheduling midi events +// +// (C) Copyright 2003 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include +#include +#include +#include +#include +#include + +#include "globals.h" +#include "midi.h" +#include "midiseq.h" +#include "midiport.h" +#include "mididev.h" +#include "midictrl.h" +#include "audio.h" +#include "driver/alsamidi.h" +#include "driver/jackmidi.h" +#include "sync.h" +#include "synth.h" +#include "song.h" +#include "gconfig.h" + +MidiSeq* midiSeq; +int MidiSeq::ticker = 0; +volatile bool midiBusy=false; + + +//--------------------------------------------------------- +// readMsg +//--------------------------------------------------------- + +static void readMsg(void* p, void*) + { + + MidiSeq* at = (MidiSeq*)p; + at->readMsg(); + } + +//--------------------------------------------------------- +// processMsg +//--------------------------------------------------------- + +void MidiSeq::processMsg(const ThreadMsg* m) + { + AudioMsg* msg = (AudioMsg*)m; + switch(msg->id) { + case MS_PROCESS: + audio->processMidi(); + break; + case SEQM_SEEK: + processSeek(); + break; + case MS_STOP: + processStop(); + break; + case MS_SET_RTC: + doSetuid(); + setRtcTicks(); + undoSetuid(); + break; + case MS_UPDATE_POLL_FD: + updatePollFd(); + break; + case SEQM_ADD_TRACK: + song->insertTrack2(msg->track, msg->ival); + updatePollFd(); + break; + case SEQM_REMOVE_TRACK: + song->cmdRemoveTrack(msg->track); + updatePollFd(); + break; + case SEQM_CHANGE_TRACK: + song->changeTrack((Track*)(msg->p1), (Track*)(msg->p2)); + updatePollFd(); + break; + case SEQM_ADD_PART: + song->cmdAddPart((Part*)msg->p1); + break; + case SEQM_REMOVE_PART: + song->cmdRemovePart((Part*)msg->p1); + break; + case SEQM_CHANGE_PART: + //song->cmdChangePart((Part*)msg->p1, (Part*)msg->p2); + song->cmdChangePart((Part*)msg->p1, (Part*)msg->p2, msg->a, msg->b); + break; + case SEQM_SET_TRACK_OUT_CHAN: + { + MidiTrack* track = (MidiTrack*)(msg->p1); + track->setOutChanAndUpdate(msg->a); + } + break; + case SEQM_SET_TRACK_OUT_PORT: + { + MidiTrack* track = (MidiTrack*)(msg->p1); + track->setOutPortAndUpdate(msg->a); + } + break; + case SEQM_REMAP_PORT_DRUM_CTL_EVS: + song->remapPortDrumCtrlEvents(msg->ival, msg->a, msg->b, msg->c); + break; + case SEQM_CHANGE_ALL_PORT_DRUM_CTL_EVS: + song->changeAllPortDrumCtrlEvents((bool)msg->a, (bool)msg->b); + break; + case SEQM_SET_MIDI_DEVICE: + ((MidiPort*)(msg->p1))->setMidiDevice((MidiDevice*)(msg->p2)); + updatePollFd(); + break; + case SEQM_IDLE: + idle = msg->a; + break; + default: + printf("MidiSeq::processMsg() unknown id %d\n", msg->id); + break; + } + } + +//--------------------------------------------------------- +// processStop +//--------------------------------------------------------- + +void MidiSeq::processStop() + { + // p3.3.28 + playStateExt = false; // not playing + + // + // stop stuck notes + // + for (iMidiDevice id = midiDevices.begin(); id != midiDevices.end(); ++id) { + MidiDevice* md = *id; + if (md->midiPort() == -1) + continue; + MPEventList* pel = md->playEvents(); + MPEventList* sel = md->stuckNotes(); + pel->clear(); + for (iMPEvent i = sel->begin(); i != sel->end(); ++i) { + MidiPlayEvent ev = *i; + ev.setTime(0); + pel->add(ev); + } + sel->clear(); + md->setNextPlayEvent(pel->begin()); + } + } + +//--------------------------------------------------------- +// processSeek +//--------------------------------------------------------- + +void MidiSeq::processSeek() + { + int pos = audio->tickPos(); + if (pos == 0 && !song->record()) + audio->initDevices(); + + //--------------------------------------------------- + // set all controller + //--------------------------------------------------- + + for (iMidiDevice i = midiDevices.begin(); i != midiDevices.end(); ++i) { + MidiDevice* dev = *i; + int port = dev->midiPort(); + if (port == -1) + continue; + MidiPort* mp = &midiPorts[port]; + MidiCtrlValListList* cll = mp->controller(); + + MPEventList* el = dev->playEvents(); + + if (audio->isPlaying()) { + // stop all notes + el->clear(); + MPEventList* sel = dev->stuckNotes(); + for (iMPEvent i = sel->begin(); i != sel->end(); ++i) { + MidiPlayEvent ev = *i; + ev.setTime(0); + el->add(ev); + } + sel->clear(); + } + else + el->erase(el->begin(), dev->nextPlayEvent()); + + for (iMidiCtrlValList ivl = cll->begin(); ivl != cll->end(); ++ivl) { + MidiCtrlValList* vl = ivl->second; + //int val = vl->value(pos); + //if (val != CTRL_VAL_UNKNOWN) { + // int channel = ivl->first >> 24; + // el->add(MidiPlayEvent(0, port, channel, ME_CONTROLLER, vl->num(), val)); + // } + iMidiCtrlVal imcv = vl->iValue(pos); + if(imcv != vl->end()) + { + Part* p = imcv->second.part; + unsigned t = (unsigned)imcv->first; + // Do not add values that are outside of the part. + if(p && t >= p->tick() && t < (p->tick() + p->lenTick()) ) + el->add(MidiPlayEvent(0, port, ivl->first >> 24, ME_CONTROLLER, vl->num(), imcv->second.val)); + } + } + dev->setNextPlayEvent(el->begin()); + } + } + +//--------------------------------------------------------- +// MidiSeq +//--------------------------------------------------------- + +//MidiSeq::MidiSeq(int priority, const char* name) +// : Thread(priority, name) +MidiSeq::MidiSeq(const char* name) + : Thread(name) + { + // Changed by Tim. p3.3.17 + //prio = priority; + prio = 0; + + idle = false; + midiClock = 0; + mclock1 = 0.0; + mclock2 = 0.0; + songtick1 = songtick2 = 0; + lastTempo = 0; + storedtimediffs = 0; + playStateExt = false; // not playing + doSetuid(); + timerFd=selectTimer(); + undoSetuid(); + + } + +//--------------------------------------------------------- +// ~MidiSeq +//--------------------------------------------------------- + +MidiSeq::~MidiSeq() + { + delete timer; + } + +//--------------------------------------------------------- +// selectTimer() +// select one of the supported timers to use during this run +//--------------------------------------------------------- + +signed int MidiSeq::selectTimer() + { + int tmrFd; + + printf("Trying RTC timer...\n"); + timer = new RtcTimer(); + tmrFd = timer->initTimer(); + if (tmrFd != -1) { // ok! + printf("got timer = %d\n", tmrFd); + return tmrFd; + } + delete timer; + + printf("Trying ALSA timer...\n"); + timer = new AlsaTimer(); + tmrFd = timer->initTimer(); + if ( tmrFd!= -1) { // ok! + printf("got timer = %d\n", tmrFd); + return tmrFd; + } + delete timer; + timer=NULL; + QMessageBox::critical( 0, /*tr*/(QString("Failed to start timer!")), + /*tr*/(QString("No functional timer was available.\n" + "RTC timer not available, check if /dev/rtc is available and readable by current user\n" + "Alsa timer not available, check if module snd_timer is available and /dev/snd/timer is available"))); + printf("No functional timer available!!!\n"); + exit(1); + } + +//--------------------------------------------------------- +// threadStart +// called from loop() +//--------------------------------------------------------- + +void MidiSeq::threadStart(void*) + { + // Removed by Tim. p3.3.17 + /* + struct sched_param rt_param; + memset(&rt_param, 0, sizeof(rt_param)); + int prio_min = sched_get_priority_min(SCHED_FIFO); + int prio_max = sched_get_priority_max(SCHED_FIFO); + + if (prio < prio_min) prio = prio_min; + else if (prio > prio_max) prio = prio_max; + + rt_param.sched_priority = prio; + int rv = pthread_setschedparam(pthread_self(), SCHED_FIFO, &rt_param); + if (rv != 0) + perror("set realtime scheduler"); + */ + + int policy; + if ((policy = sched_getscheduler (0)) < 0) { + printf("Cannot get current client scheduler: %s\n", strerror(errno)); + } + if (policy != SCHED_FIFO) + printf("midi thread %d _NOT_ running SCHED_FIFO\n", getpid()); + updatePollFd(); + } + +//--------------------------------------------------------- +// alsaMidiRead +//--------------------------------------------------------- + +static void alsaMidiRead(void*, void*) + { + // calls itself midiDevice->recordEvent(MidiRecordEvent): + alsaProcessMidiInput(); + } + +//--------------------------------------------------------- +// midiRead +//--------------------------------------------------------- + +static void midiRead(void*, void* d) + { + MidiDevice* dev = (MidiDevice*) d; + dev->processInput(); + } + +//--------------------------------------------------------- +// synthIRead +//--------------------------------------------------------- + +#if 0 +static void synthIRead(void*, void* d) + { + SynthI* syn = (SynthI*) d; + syn->processInput(); + } +#endif + +//--------------------------------------------------------- +// midiWrite +//--------------------------------------------------------- + +static void midiWrite(void*, void* d) + { + MidiDevice* dev = (MidiDevice*) d; + dev->flush(); + } + +//--------------------------------------------------------- +// updatePollFd +//--------------------------------------------------------- + +void MidiSeq::updatePollFd() + { + if (!isRunning()) + return; + + clearPollFd(); + addPollFd(timerFd, POLLIN, midiTick, this, 0); + + if (timerFd == -1) { + fprintf(stderr, "updatePollFd: no timer fd\n"); + if (!debugMode) + exit(-1); + } + + addPollFd(toThreadFdr, POLLIN, ::readMsg, this, 0); + + //--------------------------------------------------- + // midi ports + //--------------------------------------------------- + + for (iMidiDevice imd = midiDevices.begin(); imd != midiDevices.end(); ++imd) { + MidiDevice* dev = *imd; + int port = dev->midiPort(); + const QString name = dev->name(); + if (port == -1) + continue; + if ((dev->rwFlags() & 0x2) || (extSyncFlag.value() + //&& (rxSyncPort == port || rxSyncPort == -1))) { + //&& (dev->syncInfo().MCIn()))) { + && (midiPorts[port].syncInfo().MCIn()))) { + if(dev->selectRfd() < 0){ + //fprintf(stderr, "WARNING: read-file-descriptor for {%s} is negative\n", name.latin1()); + } + addPollFd(dev->selectRfd(), POLLIN, ::midiRead, this, dev); + } + if (dev->bytesToWrite()){ + if(dev->selectWfd() < 0){ + //fprintf(stderr, "WARNING: write-file-descriptor for {%s} is negative\n", name.latin1()); + } + addPollFd(dev->selectWfd(), POLLOUT, ::midiWrite, this, dev); + } + } + // special handling for alsa midi: + // (one fd for all devices) + // this allows for processing of some alsa events + // even if no alsa driver is active (assigned to a port) + addPollFd(alsaSelectRfd(), POLLIN, ::alsaMidiRead, this, 0); + } + +//--------------------------------------------------------- +// threadStop +// called from loop() +//--------------------------------------------------------- + +void MidiSeq::threadStop() + { + timer->stopTimer(); + //timer.stopTimer(); + } + +//--------------------------------------------------------- +// setRtcTicks +// return true on success +//--------------------------------------------------------- + +bool MidiSeq::setRtcTicks() + { + + //timer.setTimerFreq(config.rtcTicks); + //timer.startTimer(); + timer->setTimerFreq(config.rtcTicks); + timer->startTimer(); + realRtcTicks = config.rtcTicks; + return true; + } + +//--------------------------------------------------------- +// start +// return true on error +//--------------------------------------------------------- + +//bool MidiSeq::start() +void MidiSeq::start(int priority) + { + // Changed by Tim. p3.3.17 + + prio = priority; + + //timerFd = -1; + + doSetuid(); + //timerFd = selectTimer(); + //timerFd = timer.initTimer(); + //printf("timerFd=%d\n",timerFd); + setRtcTicks(); + undoSetuid(); + //Thread::start(); + Thread::start(priority); + //return false; + } + +//--------------------------------------------------------- +// processMidiClock +//--------------------------------------------------------- + +void MidiSeq::processMidiClock() + { +// if (genMCSync) { +// midiPorts[txSyncPort].sendClock(); +// } + +/* if (state == START_PLAY) { + // start play on sync + state = PLAY; + _midiTick = playTickPos; + midiClock = playTickPos; + + int bar, beat, tick; + sigmap.tickValues(_midiTick, &bar, &beat, &tick); + midiClick = sigmap.bar2tick(bar, beat+1, 0); + + double cpos = tempomap.tick2time(playTickPos); + samplePosStart = samplePos - lrint(cpos * sampleRate); + rtcTickStart = rtcTick - lrint(cpos * realRtcTicks); + + endSlice = playTickPos; + recTick = playTickPos; + lastTickPos = playTickPos; + + tempoSN = tempomap.tempoSN(); + + startRecordPos.setPosTick(playTickPos); + } +*/ +// midiClock += config.division/24; + } + +//--------------------------------------------------------- +// midiTick +//--------------------------------------------------------- + +void MidiSeq::midiTick(void* p, void*) + { + MidiSeq* at = (MidiSeq*)p; + at->processTimerTick(); + if (TIMER_DEBUG) + { + if(MidiSeq::ticker++ > 100) + { + printf("tick!\n"); + MidiSeq::ticker=0; + } + } + } + +//--------------------------------------------------------- +// processTimerTick +//--------------------------------------------------------- + +void MidiSeq::processTimerTick() + { + // Disabled by Tim. p3.3.22 +// extern int watchMidi; +// ++watchMidi; // make a simple watchdog happy + + //--------------------------------------------------- + // read elapsed rtc timer ticks + //--------------------------------------------------- + + // This is required otherwise it freezes. + unsigned long nn; + if (timerFd != -1) { + nn = timer->getTimerTicks(); + //nn = timer.getTimerTicks(); + nn >>= 8; + } + + if (idle) { +// printf("IDLE\n"); + return; + } + if (midiBusy) { + // we hit audio: midiSeq->msgProcess + // miss this timer tick + return; + } + + unsigned curFrame = audio->curFrame(); + + // Keep the sync detectors running... + // No, done in Song::beat(), (at the much slower heartbeat rate). + // + //for(int port = 0; port < MIDI_PORTS; ++port) + //{ + // Must keep them running even if there's no device... + //if(midiPorts[port].device()) + // midiPorts[port].syncInfo().setCurFrame(curFrame); + //} + //for(iMidiDevice imd = midiDevices.begin(); imd != midiDevices.end(); ++imd) + // (*imd)->syncInfo().setCurFrame(curFrame); + + if (!extSyncFlag.value()) { + //int curTick = tempomap.frame2tick(curFrame); + // Copied from Tempomap. + //int curTick = lrint((double(curFrame)/double(sampleRate)) * tempomap.globalTempo() * config.division * 10000.0 / double(tempomap.tempo(song->cpos()))); + //int curTick = lrint((double(curFrame)/double(sampleRate)) * tempomap.globalTempo() * 240000.0 / double(tempomap.tempo(song->cpos()))); + int curTick = lrint((double(curFrame)/double(sampleRate)) * double(tempomap.globalTempo()) * double(config.division) * 10000.0 / double(tempomap.tempo(song->cpos()))); + //int curTick = int((double(curFrame)/double(sampleRate)) * double(tempomap.globalTempo()) * double(config.division * 10000.0) / double(tempomap.tempo(song->cpos()))); + +/* if ( midiClock > curTick + 100) // reinitialize + { + midiClock = curTick; + } + else if( curTick > midiClock + 100) // reinitialize + { + midiClock = curTick; + }*/ + + if(midiClock > curTick) + midiClock = curTick; + + int div = config.division/24; + if(curTick >= midiClock + div) { + //if(curTick >= midiClock) { + //processMidiClock(); + int perr = (curTick - midiClock) / div; + //int perr = curTick - midiClock; + + bool used = false; + + //if(genMCSync) + //{ + //midiPorts[txSyncPort].sendClock(); + for(int port = 0; port < MIDI_PORTS; ++port) + { + MidiPort* mp = &midiPorts[port]; + + // No device? Clock out not turned on? + //MidiDevice* dev = mp->device(); + //if(!dev || !mp->syncInfo().MCOut()) + if(!mp->device() || !mp->syncInfo().MCOut()) + continue; + + // Shall we check open flags? + //if(!(dev->rwFlags() & 0x1) || !(dev->openFlags() & 1)) + //if(!(dev->openFlags() & 1)) + // continue; + + used = true; + + mp->sendClock(); + } + + /* + for(iMidiDevice imd = midiDevices.begin(); imd != midiDevices.end(); ++imd) + { + MidiDevice* dev = *imd; + + if(!dev->syncInfo().MCOut()) + continue; + + // Shall we check open flags? + //if(!(dev->rwFlags() & 0x1) || !(dev->openFlags() & 1)) + //if(!(dev->openFlags() & 1)) + // continue; + + int port = dev->midiPort(); + // Without this -1 check, interesting sync things can be done by the user without ever + // assigning any devices to ports ! + //if(port < 0 || port > MIDI_PORTS) + if(port < -1 || port > MIDI_PORTS) + continue; + + if(port == -1) + // Send straight to the device... Copied from MidiPort. + { + MidiPlayEvent event(0, 0, 0, ME_CLOCK, 0, 0); + dev->putEvent(event); + } + else + // Go through the port... + midiPorts[port].sendClock(); + } + */ + + if(debugMsg && used && perr > 1) + printf("Dropped %d midi out clock(s). curTick:%d midiClock:%d div:%d\n", perr, curTick, midiClock, div); + //} + + // Keeping in mind how (receiving end) Phase Locked Loops (usually) operate... + // Increment as if we had caught the timer exactly on the mark, even if the timer + // has passed beyond the mark, or even beyond 2 * div. + // If we missed some chances to send clock, resume the count where it would have been, + // had we not missed chances. + // We can't do anything about missed chances except send right away, and make up + // for gained time by losing time in the next count... + // In other words, use equalization periods to counter gained/lost time, so that + // ultimately, over time, the receiver remains in phase, despite any short dropouts / phase glitches. + // (midiClock only increments by div units). + // + // Tested: With midi thread set to high priority, very few clock dropouts ocurred (P4 1.6Ghz). + // But target device tick drifts out of phase with muse tick slowly over time, say 20 bars or so. + // May need more tweaking, possibly use round with/instead of lrint (above), and/or + // do not use equalization periods - set midiClock to fractions of div. + // Tested: With RTC resolution at 1024, stability was actually better than with 8192! + // It stayed in sync more than 64 bars... + // + // + // Using equalization periods... + midiClock += (perr * div); + //midiClock += perr; + // + // No equalization periods... TODO: + //midiClock += (perr * div); + } + } + +// if (genMTCSync) { + // printf("Midi Time Code Sync generation not impl.\n"); +// } + + // p3.3.25 + int tickpos = audio->tickPos(); + bool extsync = extSyncFlag.value(); + // + // play all events upto curFrame + // + for (iMidiDevice id = midiDevices.begin(); id != midiDevices.end(); ++id) { + MidiDevice* md = *id; + // Is it a Jack midi device? p3.3.36 + //MidiJackDevice* mjd = dynamic_cast(md); + //if(mjd) + if(md->deviceType() == MidiDevice::JACK_MIDI) + continue; + if(md->isSynti()) // syntis are handled by audio thread + continue; + int port = md->midiPort(); + MidiPort* mp = port != -1 ? &midiPorts[port] : 0; + MPEventList* el = md->playEvents(); + if (el->empty()) + continue; + iMPEvent i = md->nextPlayEvent(); + for (; i != el->end(); ++i) { + // p3.3.25 + // If syncing to external midi sync, we cannot use the tempo map. + // Therefore we cannot get sub-tick resolution. Just use ticks instead of frames. + //if (i->time() > curFrame) { + if (i->time() > (extsync ? tickpos : curFrame)) { + //printf(" curT %d frame %d\n", i->time(), curFrame); + break; // skip this event + } + + if (mp) { + if (mp->sendEvent(*i)) + break; + } + else { + if (md->putEvent(*i)) + break; + } + } + md->setNextPlayEvent(i); + } + } + +//--------------------------------------------------------- +// msgMsg +//--------------------------------------------------------- + +void MidiSeq::msgMsg(int id) + { + AudioMsg msg; + msg.id = id; + Thread::sendMsg(&msg); + } + +//--------------------------------------------------------- +// msgSetMidiDevice +// to avoid timeouts in the RT-thread, setMidiDevice +// is done in GUI context after setting the midi thread +// into idle mode +//--------------------------------------------------------- + +void MidiSeq::msgSetMidiDevice(MidiPort* port, MidiDevice* device) + { + AudioMsg msg; + msg.id = SEQM_IDLE; + msg.a = true; + Thread::sendMsg(&msg); + + port->setMidiDevice(device); + + msg.id = SEQM_IDLE; + msg.a = false; + Thread::sendMsg(&msg); + } + +void MidiSeq::msgProcess() { msgMsg(MS_PROCESS); } +void MidiSeq::msgSeek() { msgMsg(SEQM_SEEK); } +void MidiSeq::msgStop() { msgMsg(MS_STOP); } +void MidiSeq::msgSetRtc() { msgMsg(MS_SET_RTC); } +void MidiSeq::msgUpdatePollFd() { msgMsg(MS_UPDATE_POLL_FD); } + diff --git a/muse2/muse/midiseq.h b/muse2/muse/midiseq.h new file mode 100644 index 00000000..a11820fe --- /dev/null +++ b/muse2/muse/midiseq.h @@ -0,0 +1,102 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: midiseq.h,v 1.6.2.11 2009/12/20 05:00:35 terminator356 Exp $ +// +// (C) Copyright 2003 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __MIDISEQ_H__ +#define __MIDISEQ_H__ + +#include "thread.h" +#include "mpevent.h" +#include "driver/alsatimer.h" +#include "driver/rtctimer.h" + +class MPEventList; +class SynthI; +class MTC; +class MidiPort; +class MidiDevice; + +//--------------------------------------------------------- +// MidiSeq +//--------------------------------------------------------- + +class MidiSeq : public Thread { + int realRtcTicks; + int timerFd; + int idle; + int prio; // realtime priority + int midiClock; + static int ticker; + +/* Testing */ + bool playStateExt; // used for keeping play state in sync functions + int recTick; // ext sync tick position +// int lastTickPos; // position of last sync tick + // run values: +// unsigned _midiTick; + double mclock1, mclock2; + double songtick1, songtick2; + int recTick1, recTick2; + int lastTempo; + double timediff[24]; + int storedtimediffs; + + void alignAllTicks(int frameOverride = 0); +/* Testing */ + + Timer *timer; + + signed int selectTimer(); + bool setRtcTicks(); + static void midiTick(void* p, void*); + void processTimerTick(); + void processSeek(); + void processStop(); + void processMidiClock(); + virtual void processMsg(const ThreadMsg*); + void updatePollFd(); + + void mtcSyncMsg(const MTC&, int, bool); + //void mtcInputFull(const unsigned char* p, int n); + //void nonRealtimeSystemSysex(const unsigned char* p, int n); + + public: + //MidiSeq(int prio, const char* name); + MidiSeq(const char* name); + + ~MidiSeq(); + + //bool start(); + virtual void start(int); + + virtual void threadStop(); + virtual void threadStart(void*); + + void realtimeSystemInput(int, int); + void mtcInputQuarter(int, unsigned char); + void setSongPosition(int, int); + // void eventReceived(MidiRecordEvent& event); + //void mmcInput(const unsigned char* p, int n); + void mmcInput(int, const unsigned char*, int); + void mtcInputFull(int, const unsigned char*, int); + void nonRealtimeSystemSysex(int, const unsigned char*, int); + + void msgMsg(int id); + void msgProcess(); + void msgSeek(); + void msgStop(); + void msgSetRtc(); + void msgUpdatePollFd(); + void msgAddSynthI(SynthI* synth); + void msgRemoveSynthI(SynthI* synth); + void msgSetMidiDevice(MidiPort*, MidiDevice*); + }; + +extern MidiSeq* midiSeq; +extern volatile bool midiBusy; +#endif + diff --git a/muse2/muse/miditransform.cpp b/muse2/muse/miditransform.cpp new file mode 100644 index 00000000..486f47c5 --- /dev/null +++ b/muse2/muse/miditransform.cpp @@ -0,0 +1,1702 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: miditransform.cpp,v 1.8.2.3 2009/05/24 21:43:44 terminator356 Exp $ +// +// (C) Copyright 2001 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "helper.h" +#include "spinboxFP.h" +#include "event.h" +#include "miditransform.h" +#include "track.h" +#include "song.h" +#include "xml.h" +#include "globals.h" +#include "comboQuant.h" +#include "pitchedit.h" +#include "audio.h" +#include "gconfig.h" +#include "midictrl.h" + +// +// Order of events: +// Note, Poly Pressure, Control, AfterTouch, Pitch Bend, NRPN, RPN +// +#define MIDITRANSFORM_NOTE 0 +#define MIDITRANSFORM_POLY 1 +#define MIDITRANSFORM_CTRL 2 +#define MIDITRANSFORM_ATOUCH 3 +#define MIDITRANSFORM_PITCHBEND 4 +#define MIDITRANSFORM_NRPN 5 +#define MIDITRANSFORM_RPN 6 + + +static int eventTypeTable[] = { + MIDITRANSFORM_NOTE, MIDITRANSFORM_POLY, MIDITRANSFORM_CTRL, MIDITRANSFORM_ATOUCH, + MIDITRANSFORM_PITCHBEND, MIDITRANSFORM_NRPN, MIDITRANSFORM_RPN + }; + +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(int level, 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 + //--------------------------------------------------- + + updatePresetList(); + connect(song, SIGNAL(songChanged(int)), SLOT(songChanged(int))); + } + +//--------------------------------------------------------- +// ~MidiTransformDialog +//--------------------------------------------------------- + +MidiTransformerDialog::~MidiTransformerDialog() + { + delete data; + } + +//--------------------------------------------------------- +// songChanged +//--------------------------------------------------------- + +void MidiTransformerDialog::songChanged(int flags) +{ + // Whenever a song is loaded, flags is -1. Since transforms are part of configuration, + // use SC_CONFIG here, to filter unwanted song change events. + if(flags & SC_CONFIG) + updatePresetList(); +} + +//--------------------------------------------------------- +// updatePresetList +//--------------------------------------------------------- + +void MidiTransformerDialog::updatePresetList() +{ + data->cmt = 0; + data->cindex = 0; + presetList->clear(); + 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")); + presetList->setCurrentItem(0); + } + + //data->cindex = 0; + //presetList->setCurrentItem(0); + +} + +//--------------------------------------------------------- +// writeMidiTransforms +//--------------------------------------------------------- + +void writeMidiTransforms(int level, Xml& xml) + { + for (iMidiTransformation i = mtlist.begin(); i != mtlist.end(); ++i) { + (*i)->write(level, xml); + } + } + +//--------------------------------------------------------- +// write +//--------------------------------------------------------- + +void MidiTransformation::write(int level, Xml& xml) + { + xml.tag(level++, "midiTransform"); + xml.strTag(level, "name", name); + xml.strTag(level, "comment", comment); + xml.intTag(level, "function", int(funcOp)); + xml.intTag(level, "selectedTracks", selectedTracks); + xml.intTag(level, "insideLoop", insideLoop); + if (funcOp == Quantize) { + xml.intTag(level, "quantVal", quantVal); + } + if (funcOp == Transform || funcOp == Insert) { + if (procEvent != Keep) { + xml.intTag(level, "procEventOp", int(procEvent)); + xml.intTag(level, "eventType", int(eventType)); + } + if (procVal1 != Keep) { + xml.intTag(level, "procVal1Op", int(procVal1)); + xml.intTag(level, "procVal1a", procVal1a); + xml.intTag(level, "procVal1b", procVal1b); + } + if (procVal2 != Keep) { + xml.intTag(level, "procVal2Op", int(procVal2)); + xml.intTag(level, "procVal2a", procVal2a); + xml.intTag(level, "procVal2b", procVal2b); + } + if (procLen != Keep) { + xml.intTag(level, "procLenOp", int(procLen)); + xml.intTag(level, "procLen", procLenA); + } + if (procPos != Keep) { + xml.intTag(level, "procPosOp", int(procPos)); + xml.intTag(level, "procPos", procPosA); + } + } + if (selEventOp != Ignore) { + xml.intTag(level, "selEventOp", int(selEventOp)); + xml.intTag(level, "selEventType", int(selType)); + } + if (selVal1 != Ignore) { + xml.intTag(level, "selVal1Op", int(selVal1)); + xml.intTag(level, "selVal1a", selVal1a); + xml.intTag(level, "selVal1b", selVal1b); + } + if (selVal2 != Ignore) { + xml.intTag(level, "selVal2Op", int(selVal2)); + xml.intTag(level, "selVal2a", selVal2a); + xml.intTag(level, "selVal2b", selVal2b); + } + if (selLen != Ignore) { + xml.intTag(level, "selLenOp", int(selLen)); + xml.intTag(level, "selLenA", selLenA); + xml.intTag(level, "selLenB", selLenB); + } + if (selRange != Ignore) { + xml.intTag(level, "selRangeOp", int(selRange)); + xml.intTag(level, "selRangeA", selRangeA); + xml.intTag(level, "selRangeB", selRangeB); + } + xml.etag(level, "midiTransform"); + } + +//--------------------------------------------------------- +// readMidiTransform +//--------------------------------------------------------- + +void readMidiTransform(Xml& xml) + { + MidiTransformation trans(QWidget::tr("new")); + + for (;;) { + Xml::Token token = xml.parse(); + const QString& tag = xml.s1(); + switch (token) { + case Xml::Error: + case Xml::End: + return; + case Xml::TagStart: + if (tag == "name") + trans.name = xml.parse1(); + else if (tag == "comment") + trans.comment = xml.parse1(); + else if (tag == "function") + trans.funcOp = TransformFunction(xml.parseInt()); + else if (tag == "selectedTracks") + trans.selectedTracks = xml.parseInt(); + else if (tag == "insideLoop") + trans.insideLoop = xml.parseInt(); + else if (tag == "quantVal") + trans.quantVal = xml.parseInt(); + else if (tag == "procEventOp") + trans.procEvent = TransformOperator(xml.parseInt()); + else if (tag == "eventType") + trans.eventType = EventType(xml.parseInt()); + else if (tag == "procVal1Op") + trans.procVal1 = TransformOperator(xml.parseInt()); + else if (tag == "procVal1a") + trans.procVal1a = xml.parseInt(); + else if (tag == "procVal1b") + trans.procVal1b = xml.parseInt(); + else if (tag == "procVal2Op") + trans.procVal2 = TransformOperator(xml.parseInt()); + else if (tag == "procVal2a") + trans.procVal2a = xml.parseInt(); + else if (tag == "procVal2b") + trans.procVal2b = xml.parseInt(); + else if (tag == "procLenOp") + trans.procLen = TransformOperator(xml.parseInt()); + else if (tag == "procLen") + trans.procLenA = xml.parseInt(); + else if (tag == "procPosOp") + trans.procPos = TransformOperator(xml.parseInt()); + else if (tag == "procPos") + trans.procPosA = xml.parseInt(); + else if (tag == "selEventOp") + trans.selEventOp = ValOp(xml.parseInt()); + else if (tag == "selEventType") + trans.selType = EventType(xml.parseInt()); + else if (tag == "selVal1Op") + trans.selVal1 = ValOp(xml.parseInt()); + else if (tag == "selVal1a") + trans.selVal1a = xml.parseInt(); + else if (tag == "selVal1b") + trans.selVal1b = xml.parseInt(); + else if (tag == "selVal2Op") + trans.selVal2 = ValOp(xml.parseInt()); + else if (tag == "selVal2a") + trans.selVal2a = xml.parseInt(); + else if (tag == "selVal2b") + trans.selVal2b = xml.parseInt(); + else if (tag == "selLenOp") + trans.selLen = ValOp(xml.parseInt()); + else if (tag == "selLenA") + trans.selLenA = xml.parseInt(); + else if (tag == "selLenB") + trans.selLenB = xml.parseInt(); + else if (tag == "selRangeOp") + trans.selRange = ValOp(xml.parseInt()); + else if (tag == "selRangeA") + trans.selRangeA = xml.parseInt(); + else if (tag == "selRangeB") + trans.selRangeB = xml.parseInt(); + else + xml.unknown("midiTransform"); + break; + case Xml::TagEnd: + if (xml.s1() == "midiTransform") { + // By T356. A previous bug caused some .med files to grow very large + // with duplicate transforms. Here we can eliminate those duplicates. + for(iMidiTransformation i = mtlist.begin(); i != mtlist.end(); ++i) + { + if((*i)->name == trans.name) + return; + } + + MidiTransformation* t = new MidiTransformation(trans); + mtlist.push_back(t); + return; + } + default: + break; + } + } + } + +//--------------------------------------------------------- +// clearMidiTransforms +//--------------------------------------------------------- + +void clearMidiTransforms() +{ + for (iMidiTransformation i = mtlist.begin(); i != mtlist.end(); ++i) + { + MidiTransformation* t = *i; + if(t) + delete t; + } + mtlist.clear(); +} + +//--------------------------------------------------------- +// 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: + // Indicate do clone parts. + removePortCtrlEvents(event, part, true); + song->changeEvent(event, newEvent, part); + // Indicate do clone parts. + addPortCtrlEvents(newEvent, part, true); + // Indicate do port controller values and clone parts. + //song->undoOp(UndoOp::ModifyEvent, newEvent, event, part); + song->undoOp(UndoOp::ModifyEvent, newEvent, event, part, true, true); + song->addUpdateFlags(SC_EVENT_MODIFIED); + break; + case Insert: + // Indicate do port controller values and clone parts. + //song->undoOp(UndoOp::AddEvent, dummy, newEvent, part); + song->undoOp(UndoOp::AddEvent, dummy, newEvent, part, true, true); + song->addEvent(newEvent, part); + // Indicate do clone parts. + addPortCtrlEvents(newEvent, part, true); + song->addUpdateFlags(SC_EVENT_INSERTED); + break; + case Extract: + // Indicate do port controller values and clone parts. + //song->undoOp(UndoOp::DeleteEvent, dummy, event, part); + song->undoOp(UndoOp::DeleteEvent, dummy, event, part, true, true); + // Indicate do clone parts. + removePortCtrlEvents(event, part, true); + 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 = sigmap.raster(tick, data->cmt->quantVal) - tick; + if (tick != rt) { + // Indicate do clone parts. + removePortCtrlEvents(event, part, true); + Event newEvent = event.clone(); + newEvent.setTick(rt); + song->changeEvent(event, newEvent, part); + // Indicate do clone parts. + addPortCtrlEvents(newEvent, part, true); + // Indicate do port controller values and clone parts. + //song->undoOp(UndoOp::ModifyEvent, newEvent, event, part); + song->undoOp(UndoOp::ModifyEvent, newEvent, event, part, true, true); + song->addUpdateFlags(SC_EVENT_MODIFIED); + } + } + break; + case Delete: + { + Event ev; + // Indicate do port controller values and clone parts. + //song->undoOp(UndoOp::DeleteEvent, ev, event, part, true, true); + song->undoOp(UndoOp::DeleteEvent, ev, event, part, true, true); + // Indicate do clone parts. + removePortCtrlEvents(event, part, true); + 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 (!typesMatch(event, cmt->selType)) { + return false; + } + break; + case Unequal: + if (typesMatch(event, 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; + 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); + + std::vector< EventList* > doneList; + typedef std::vector< EventList* >::iterator iDoneList; + iDoneList idl; + + 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(); + // Check if the event list has already been done. Skip repeated clones. + for(idl = doneList.begin(); idl != doneList.end(); ++idl) + if(*idl == el) + break; + if(idl != doneList.end()) + break; + doneList.push_back(el); + + 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(); + // Check if the event list has already been done. Skip repeated clones. + for(idl = doneList.begin(); idl != doneList.end(); ++idl) + if(*idl == el) + break; + if(idl != doneList.end()) + break; + doneList.push_back(el); + + 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; + int 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(); + } + +//-----------------------------op---------------------------- +// 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); + } + + + +/*! + \fn MidiTransformerDialog::typesMatch(MidiEvent e, unsigned t) + */ +bool MidiTransformerDialog::typesMatch(Event& e, unsigned selType) + { + bool matched = false; + switch (selType) + { + case MIDITRANSFORM_NOTE: + matched = (e.type() == Note); + break; + case MIDITRANSFORM_POLY: + matched = (e.type() == PAfter); + break; + case MIDITRANSFORM_CTRL: + matched = (e.type() == Controller); + break; + case MIDITRANSFORM_ATOUCH: + matched = (e.type() == CAfter); + break; + case MIDITRANSFORM_PITCHBEND: + { + if (e.type() == Controller) { + MidiController::ControllerType c = midiControllerType(e.dataA()); + matched = (c == MidiController::Pitch); + } + break; + } + case MIDITRANSFORM_NRPN: + { + if (e.type() == Controller) { + MidiController::ControllerType c = midiControllerType(e.dataA()); + matched = (c == MidiController::NRPN); + } + } + case MIDITRANSFORM_RPN: + { + if (e.type() == Controller) { + MidiController::ControllerType c = midiControllerType(e.dataA()); + matched = (c == MidiController::RPN); + } + } + default: + fprintf(stderr, "Error matching type in MidiTransformerDialog: unknown eventtype!\n"); + break; + } + //printf("Event type=%d, selType =%d matched=%d\n", e.type(), selType, matched); + return matched; + } diff --git a/muse2/muse/miditransform.h b/muse2/muse/miditransform.h new file mode 100644 index 00000000..3dcb4a98 --- /dev/null +++ b/muse2/muse/miditransform.h @@ -0,0 +1,105 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: miditransform.h,v 1.2.2.2 2009/02/02 21:38:00 terminator356 Exp $ +// +// (C) Copyright 2001 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __MIDITRANSFORM_H__ +#define __MIDITRANSFORM_H__ + +#include "transformbase.h" + +class Q3ListBoxItem; +class MidiTransformation; +class MidiTransformPrivate; +class Event; +class MidiPart; +class 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&, MidiPart*, MidiPart*); + bool isSelected(Event&, MidiPart*); + void transformEvent(Event&, MidiPart*, MidiPart*); + bool typesMatch(Event& e, unsigned selType); + + void updatePresetList(); + + 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(Q3ListBoxItem*); + 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 slots: + void songChanged(int); + + public: + MidiTransformerDialog(QWidget* parent = 0, const char* name = 0, + bool modal = false, Qt::WFlags fl = 0); + ~MidiTransformerDialog(); + }; + +extern void writeMidiTransforms(int level, Xml& xml); +extern void readMidiTransform(Xml&); +extern void clearMidiTransforms(); +#endif diff --git a/muse2/muse/mixer/Makefile.am b/muse2/muse/mixer/Makefile.am new file mode 100644 index 00000000..3d4763c0 --- /dev/null +++ b/muse2/muse/mixer/Makefile.am @@ -0,0 +1,26 @@ +include $(top_srcdir)/common.am + +if PCH +AM_CXXFLAGS += -include $(top_srcdir)/all.h +endif + +noinst_LIBRARIES = libmixer.a + +dist_libmixer_a_SOURCES = \ + amixer.cpp amixer.h \ + meter.cpp meter.h \ + rack.cpp rack.h \ + panknob.cpp panknob.h \ + auxknob.cpp auxknob.h \ + routedialogbase.ui routedialog.h routedialog.cpp \ + strip.h strip.cpp astrip.h astrip.cpp mstrip.h mstrip.cpp + +nodist_libmixer_a_SOURCES = \ + moc_amixer.cpp \ + moc_strip.cpp moc_astrip.cpp moc_mstrip.cpp \ + moc_meter.cpp \ + moc_rack.cpp \ + moc_panknob.cpp \ + moc_auxknob.cpp \ + moc_routedialog.cpp + diff --git a/muse2/muse/mixer/Makefile.in b/muse2/muse/mixer/Makefile.in new file mode 100644 index 00000000..a1681599 --- /dev/null +++ b/muse2/muse/mixer/Makefile.in @@ -0,0 +1,628 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/common.am +@PCH_TRUE@am__append_1 = -include $(top_srcdir)/all.h +subdir = muse/mixer +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal-include.m4 \ + $(top_srcdir)/m4/alsa.m4 $(top_srcdir)/m4/docbook.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +LIBRARIES = $(noinst_LIBRARIES) +ARFLAGS = cru +libmixer_a_AR = $(AR) $(ARFLAGS) +libmixer_a_LIBADD = +dist_libmixer_a_OBJECTS = amixer.$(OBJEXT) meter.$(OBJEXT) \ + rack.$(OBJEXT) panknob.$(OBJEXT) auxknob.$(OBJEXT) \ + routedialogbase.$(OBJEXT) routedialog.$(OBJEXT) \ + strip.$(OBJEXT) astrip.$(OBJEXT) mstrip.$(OBJEXT) +nodist_libmixer_a_OBJECTS = moc_amixer.$(OBJEXT) moc_strip.$(OBJEXT) \ + moc_astrip.$(OBJEXT) moc_mstrip.$(OBJEXT) moc_meter.$(OBJEXT) \ + moc_rack.$(OBJEXT) moc_panknob.$(OBJEXT) moc_auxknob.$(OBJEXT) \ + moc_routedialog.$(OBJEXT) +libmixer_a_OBJECTS = $(dist_libmixer_a_OBJECTS) \ + $(nodist_libmixer_a_OBJECTS) +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +CXXLD = $(CXX) +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(dist_libmixer_a_SOURCES) $(nodist_libmixer_a_SOURCES) +DIST_SOURCES = $(dist_libmixer_a_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DOCBOOKSTYLE = @DOCBOOKSTYLE@ +DOCBOOKTARGETS = @DOCBOOKTARGETS@ +DOT = @DOT@ +DOTPATH = @DOTPATH@ +DOXYGEN = @DOXYGEN@ +DOXYGEN_TREEVIEW = @DOXYGEN_TREEVIEW@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FLUIDSYNTHDIRS = @FLUIDSYNTHDIRS@ +FST_CFLAGS = @FST_CFLAGS@ +FST_LIBS = @FST_LIBS@ +Fluidsynth_CFLAGS = @Fluidsynth_CFLAGS@ +Fluidsynth_LIBS = @Fluidsynth_LIBS@ +GIVERTCAP = @GIVERTCAP@ +GREP = @GREP@ +HAVEDOT = @HAVEDOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_LIBS = @JACK_LIBS@ +JADE = @JADE@ +LASH_CFLAGS = @LASH_CFLAGS@ +LASH_LIBS = @LASH_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LO_CFLAGS = @LO_CFLAGS@ +LO_LIBS = @LO_LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MUSECXXFLAGS = @MUSECXXFLAGS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NSGMLS = @NSGMLS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PCH = @PCH@ +PERL = @PERL@ +PKG_CONFIG = @PKG_CONFIG@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIB = @PYTHON_LIB@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QTDIR_BIN = @QTDIR_BIN@ +QTDIR_INC = @QTDIR_INC@ +QT_LIBS = @QT_LIBS@ +RANLIB = @RANLIB@ +SAMPLERATE_CFLAGS = @SAMPLERATE_CFLAGS@ +SAMPLERATE_LIBS = @SAMPLERATE_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ +SNDFILE_LIBS = @SNDFILE_LIBS@ +STRIP = @STRIP@ +SUIDBUILD = @SUIDBUILD@ +SUIDINSTALL = @SUIDINSTALL@ +USE_SSE = @USE_SSE@ +UUID_CFLAGS = @UUID_CFLAGS@ +UUID_LIBS = @UUID_LIBS@ +VERSION = @VERSION@ +XMKMF = @XMKMF@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +have_docbook = @have_docbook@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +synth_fluid = @synth_fluid@ +synth_fluidsynth = @synth_fluidsynth@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AM_CXXFLAGS = $(MUSECXXFLAGS) -I.. -I$(top_srcdir)/synti \ + -I$(top_srcdir)/muse/widgets -DQT_SHARED -DQT_THREAD_SUPPORT \ + -DQT_PLUGIN $(QTDIR_INC) -DQT3_SUPPORT $(am__append_1) +AM_CPPFLAGS = +MOC = $(QTDIR_BIN)/moc +#UIC = $(QTDIR_BIN)/uic3 +UIC = /usr/bin/uic3 +UIFILES = $(wildcard *.ui) +MOCFILES = $(shell for h in $(filter %.h,$(SOURCES)); do \ + if grep -q Q_OBJECT $$h; then \ + echo $$h | sed "s/\(.*\)\.h/moc_\1.cpp/"; \ + fi; \ + done) + +BUILT_SOURCES = $(MOCFILES) $(UIFILES:%.ui=%.h) +MOSTLYCLEANFILES = $(MOCFILES) $(UIFILES:%.ui=%.h) +SUFFIXES = .ui .h.gch +noinst_LIBRARIES = libmixer.a +dist_libmixer_a_SOURCES = \ + amixer.cpp amixer.h \ + meter.cpp meter.h \ + rack.cpp rack.h \ + panknob.cpp panknob.h \ + auxknob.cpp auxknob.h \ + routedialogbase.ui routedialog.h routedialog.cpp \ + strip.h strip.cpp astrip.h astrip.cpp mstrip.h mstrip.cpp + +nodist_libmixer_a_SOURCES = \ + moc_amixer.cpp \ + moc_strip.cpp moc_astrip.cpp moc_mstrip.cpp \ + moc_meter.cpp \ + moc_rack.cpp \ + moc_panknob.cpp \ + moc_auxknob.cpp \ + moc_routedialog.cpp + +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: .ui .h.gch .cpp .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/common.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu muse/mixer/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu muse/mixer/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-noinstLIBRARIES: + -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) +libmixer.a: $(libmixer_a_OBJECTS) $(libmixer_a_DEPENDENCIES) + -rm -f libmixer.a + $(libmixer_a_AR) libmixer.a $(libmixer_a_OBJECTS) $(libmixer_a_LIBADD) + $(RANLIB) libmixer.a + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amixer.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/astrip.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/auxknob.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/meter.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/moc_amixer.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/moc_astrip.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/moc_auxknob.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/moc_meter.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/moc_mstrip.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/moc_panknob.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/moc_rack.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/moc_routedialog.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/moc_strip.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mstrip.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/panknob.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rack.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/routedialog.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strip.Po@am__quote@ + +.cpp.o: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< + +.cpp.obj: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.cpp.lo: +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-am +all-am: Makefile $(LIBRARIES) +installdirs: +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +clean: clean-am + +clean-am: clean-generic clean-libtool clean-noinstLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: all check install install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-noinstLIBRARIES ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags uninstall uninstall-am + + +de: + @for base in $(MOCFILES); do echo -e "\t$${base}.cpp $${base}.h \\"; done + +nde: + @for base in $(MOCFILES); do echo -e "\tmoc_$${base}.cpp \\"; done + +.ui.o: %.h + $(UIC) -L $(top_srcdir)/muse/widgets -o $*.cpp -impl $*.h $*.ui + $(MOC) $*.h >> $*.cpp + $(CXXCOMPILE) -c $*.cpp -o $*.o + $(RM) $*.cpp moc_$*.cpp moc_$*.o + +.ui.lo: %.h + $(UIC) -L $(top_srcdir)/muse/widgets -o $*.cpp -impl $*.h $*.ui + $(MOC) $*.h >> $*.cpp + $(LTCXXCOMPILE) -c $*.cpp -o $*.lo + $(RM) $*.cpp moc_$*.cpp moc_$*.lo moc_$*.o + +moc_%.cpp: %.h + $(MOC) $< -o $@ + +%.h: %.ui + $(UIC) -o $@ $< +# $(UIC) -L $(top_srcdir)/muse/widgets -o $@ $< + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/muse2/muse/mixer/amixer.cpp b/muse2/muse/mixer/amixer.cpp new file mode 100644 index 00000000..e6c380b4 --- /dev/null +++ b/muse2/muse/mixer/amixer.cpp @@ -0,0 +1,592 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: amixer.cpp,v 1.49.2.5 2009/11/16 01:55:55 terminator356 Exp $ +// +// (C) Copyright 2000-2004 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include + +#include +#include +#include +//Added by qt3to4: +#include +#include +#include +#include +#include + +#include "app.h" +#include "amixer.h" +#include "song.h" + +#include "astrip.h" +#include "mstrip.h" + +#include "gconfig.h" +#include "xml.h" + +extern void populateAddTrack(Q3PopupMenu* addTrack); + +#define __WIDTH_COMPENSATION 4 + +//typedef std::list StripList; +//static StripList stripList; + +//--------------------------------------------------------- +// AudioMixer +// +// inputs | synthis | tracks | groups | master +//--------------------------------------------------------- + +//AudioMixerApp::AudioMixerApp(QWidget* parent) +AudioMixerApp::AudioMixerApp(QWidget* parent, MixerConfig* c) + : Q3MainWindow(parent, "mixer") + { + cfg = c; + oldAuxsSize = 0; + routingDialog = 0; + //setCaption(tr("MusE: Mixer")); + //name = cfg->name; + //setCaption(name); + //printf("AudioMixerApp::AudioMixerApp setting caption:%s\n", cfg->name.latin1()); + setCaption(cfg->name); + + Q3PopupMenu* menuConfig = new Q3PopupMenu(this); + menuBar()->insertItem(tr("&Create"), menuConfig); + populateAddTrack(menuConfig); + + menuView = new Q3PopupMenu(this); + menuBar()->insertItem(tr("&View"), menuView); + routingId = menuView->insertItem(tr("Routing"), this, SLOT(toggleRouteDialog())); + + menuView->insertSeparator(); + + Q3ActionGroup* actionItems = new Q3ActionGroup(this, "actionItems", false); + + /* + showMidiTracksId = new QAction(tr("Show Midi Tracks"), 0, menuView); + showDrumTracksId = new QAction(tr("Show Drum Tracks"), 0, menuView); + showWaveTracksId = new QAction(tr("Show Wave Tracks"), 0, menuView); + */ + showMidiTracksId = new Q3Action(tr("Show Midi Tracks"), 0, actionItems); + showDrumTracksId = new Q3Action(tr("Show Drum Tracks"), 0, actionItems); + showWaveTracksId = new Q3Action(tr("Show Wave Tracks"), 0, actionItems); + //showMidiTracksId->addTo(menuView); + //showDrumTracksId->addTo(menuView); + //showWaveTracksId->addTo(menuView); + + //menuView->insertSeparator(); + actionItems->addSeparator(); + + /* + showInputTracksId= new QAction(tr("Show Inputs"), 0, menuView); + showOutputTracksId = new QAction(tr("Show Outputs"), 0, menuView); + showGroupTracksId = new QAction(tr("Show Groups"), 0, menuView); + showAuxTracksId = new QAction(tr("Show Auxs"), 0, menuView); + showSyntiTracksId = new QAction(tr("Show Synthesizers"), 0, menuView); + */ + showInputTracksId = new Q3Action(tr("Show Inputs"), 0, actionItems); + showOutputTracksId = new Q3Action(tr("Show Outputs"), 0, actionItems); + showGroupTracksId = new Q3Action(tr("Show Groups"), 0, actionItems); + showAuxTracksId = new Q3Action(tr("Show Auxs"), 0, actionItems); + showSyntiTracksId = new Q3Action(tr("Show Synthesizers"), 0, actionItems); + //showInputTracksId->addTo(menuView); + //showOutputTracksId->addTo(menuView); + //showGroupTracksId->addTo(menuView); + //showAuxTracksId->addTo(menuView); + //showSyntiTracksId->addTo(menuView); + + showMidiTracksId->setToggleAction(true); + showDrumTracksId->setToggleAction(true); + showWaveTracksId->setToggleAction(true); + showInputTracksId->setToggleAction(true); + showOutputTracksId->setToggleAction(true); + showGroupTracksId->setToggleAction(true); + showAuxTracksId->setToggleAction(true); + showSyntiTracksId->setToggleAction(true); + + //connect(menuView, SIGNAL(triggered(QAction*)), SLOT(showTracksChanged(QAction*))); + //connect(actionItems, SIGNAL(selected(QAction*)), this, SLOT(showTracksChanged(QAction*))); + connect(showMidiTracksId, SIGNAL(toggled(bool)), SLOT(showMidiTracksChanged(bool))); + connect(showDrumTracksId, SIGNAL(toggled(bool)), SLOT(showDrumTracksChanged(bool))); + connect(showWaveTracksId, SIGNAL(toggled(bool)), SLOT(showWaveTracksChanged(bool))); + connect(showInputTracksId, SIGNAL(toggled(bool)), SLOT(showInputTracksChanged(bool))); + connect(showOutputTracksId, SIGNAL(toggled(bool)), SLOT(showOutputTracksChanged(bool))); + connect(showGroupTracksId, SIGNAL(toggled(bool)), SLOT(showGroupTracksChanged(bool))); + connect(showAuxTracksId, SIGNAL(toggled(bool)), SLOT(showAuxTracksChanged(bool))); + connect(showSyntiTracksId, SIGNAL(toggled(bool)), SLOT(showSyntiTracksChanged(bool))); + + actionItems->addTo(menuView); + view = new Q3ScrollView(this); + setCentralWidget(view); + central = new QWidget(view); + view->setResizePolicy(Q3ScrollView::AutoOneFit); + view->setVScrollBarMode(Q3ScrollView::AlwaysOff); + view->addChild(central); + layout = new Q3HBoxLayout(central); + connect(song, SIGNAL(songChanged(int)), SLOT(songChanged(int))); + connect(muse, SIGNAL(configChanged()), SLOT(configChanged())); + song->update(); // calls update mixer + } + +//--------------------------------------------------------- +// addStrip +//--------------------------------------------------------- + +void AudioMixerApp::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; + + std::list::iterator nsi = si; + ++nsi; + if (si != stripList.end() + && nsi != stripList.end() + && (*nsi)->getTrack() == t) { + layout->remove(*si); + delete *si; + stripList.erase(si); + } + else { + Strip* strip; + if (t->isMidiTrack()) + strip = new MidiStrip(central, (MidiTrack*)t); + else + strip = new AudioStrip(central, (AudioTrack*)t); + layout->insertWidget(idx, strip); + stripList.insert(si, strip); + strip->show(); + } + } + +//--------------------------------------------------------- +// clear +//--------------------------------------------------------- + +void AudioMixerApp::clear() + { + StripList::iterator si = stripList.begin(); + for (; si != stripList.end(); ++si) { + layout->remove(*si); + delete *si; + } + stripList.clear(); + oldAuxsSize = -1; + } + +//--------------------------------------------------------- +// updateMixer +//--------------------------------------------------------- + +void AudioMixerApp::updateMixer(UpdateAction action) + { + //printf("AudioMixerApp::updateMixer action:%d\n", action); + + //name = cfg->name; + //setCaption(name); + setCaption(cfg->name); + + showMidiTracksId->setOn(cfg->showMidiTracks); + showDrumTracksId->setOn(cfg->showDrumTracks); + showInputTracksId->setOn(cfg->showInputTracks); + showOutputTracksId->setOn(cfg->showOutputTracks); + showWaveTracksId->setOn(cfg->showWaveTracks); + showGroupTracksId->setOn(cfg->showGroupTracks); + showAuxTracksId->setOn(cfg->showAuxTracks); + showSyntiTracksId->setOn(cfg->showSyntiTracks); + + int auxsSize = song->auxs()->size(); + if ((action == UPDATE_ALL) || (auxsSize != oldAuxsSize)) { + clear(); + oldAuxsSize = auxsSize; + } + else if (action == STRIP_REMOVED) + { + StripList::iterator si = stripList.begin(); + for (; si != stripList.end();) { + Track* track = (*si)->getTrack(); + TrackList* tl = song->tracks(); + iTrack it; + for (it = tl->begin(); it != tl->end(); ++it) { + if (*it == track) + break; + } + StripList::iterator ssi = si; + ++si; + if (it != tl->end()) + continue; + layout->remove(*ssi); + delete *ssi; + stripList.erase(ssi); + } + setMaximumWidth(STRIP_WIDTH * stripList.size() + __WIDTH_COMPENSATION); + // Added by Tim. p3.3.7 + if (stripList.size() < 8) + view->setMinimumWidth(stripList.size() * STRIP_WIDTH + __WIDTH_COMPENSATION); + + return; + } + // Added by Tim. p3.3.7 + else if (action == UPDATE_MIDI) + { + int i = 0; + int idx = -1; + StripList::iterator si = stripList.begin(); + for (; si != stripList.end(); ++i) + { + Track* track = (*si)->getTrack(); + if(!track->isMidiTrack()) + { + ++si; + continue; + } + + if(idx == -1) + idx = i; + + StripList::iterator ssi = si; + ++si; + layout->remove(*ssi); + delete *ssi; + stripList.erase(ssi); + } + + if(idx == -1) + idx = 0; + + //--------------------------------------------------- + // generate Midi channel/port Strips + //--------------------------------------------------- + + // Changed by Tim. p3.3.21 + /* + MidiTrackList* mtl = song->midis(); + int ports[MIDI_PORTS]; + memset(ports, 0, MIDI_PORTS * sizeof(int)); + for (iMidiTrack i = mtl->begin(); i != mtl->end(); ++i) { + MidiTrack* track = *i; + int port = track->outPort(); + int channel = track->outChannel(); + if ((ports[port] & (1 << channel)) == 0) { + addStrip(*i, idx++); + ports[port] |= 1 << channel; + } + } + */ + MidiTrackList* mtl = song->midis(); + for (iMidiTrack i = mtl->begin(); i != mtl->end(); ++i) + { + MidiTrack* mt = *i; + if((mt->type() == Track::MIDI && cfg->showMidiTracks) || (mt->type() == Track::DRUM && cfg->showDrumTracks)) + addStrip(*i, idx++); + } + + setMaximumWidth(STRIP_WIDTH * stripList.size() + __WIDTH_COMPENSATION); + if (stripList.size() < 8) + view->setMinimumWidth(stripList.size() * STRIP_WIDTH + __WIDTH_COMPENSATION); + return; + } + + 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 channel/port Strips + //--------------------------------------------------- + + // Changed by Tim. p3.3.21 + /* + MidiTrackList* mtl = song->midis(); + int ports[MIDI_PORTS]; + memset(ports, 0, MIDI_PORTS * sizeof(int)); + for (iMidiTrack i = mtl->begin(); i != mtl->end(); ++i) { + MidiTrack* track = *i; + int port = track->outPort(); + int channel = track->outChannel(); + if ((ports[port] & (1 << channel)) == 0) { + addStrip(*i, idx++); + ports[port] |= 1 << channel; + } + } + */ + MidiTrackList* mtl = song->midis(); + for (iMidiTrack i = mtl->begin(); i != mtl->end(); ++i) + { + MidiTrack* mt = *i; + if((mt->type() == Track::MIDI && cfg->showMidiTracks) || (mt->type() == Track::DRUM && cfg->showDrumTracks)) + addStrip(*i, idx++); + } + + //--------------------------------------------------- + // Groups + //--------------------------------------------------- + + if(cfg->showGroupTracks) + { + GroupList* gtl = song->groups(); + for (iAudioGroup i = gtl->begin(); i != gtl->end(); ++i) + addStrip(*i, idx++); + } + + //--------------------------------------------------- + // Aux + //--------------------------------------------------- + + if(cfg->showAuxTracks) + { + AuxList* al = song->auxs(); + for (iAudioAux i = al->begin(); i != al->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++); + } + + //printf("AudioMixerApp::updateMixer setting maximum width:%d\n", STRIP_WIDTH * idx + __WIDTH_COMPENSATION); + setMaximumWidth(STRIP_WIDTH * idx + __WIDTH_COMPENSATION); + if (idx < 8) + { + //printf("AudioMixerApp::updateMixer setting minimum width:%d\n", idx * STRIP_WIDTH + __WIDTH_COMPENSATION); + view->setMinimumWidth(idx * STRIP_WIDTH + __WIDTH_COMPENSATION); + } + } + +//--------------------------------------------------------- +// configChanged +//--------------------------------------------------------- + +void AudioMixerApp::configChanged() +{ + //printf("AudioMixerApp::configChanged\n"); + + songChanged(SC_CONFIG); +} + +//--------------------------------------------------------- +// songChanged +//--------------------------------------------------------- + +void AudioMixerApp::songChanged(int flags) + { + // Is it simply a midi controller value adjustment? Forget it. + if(flags == SC_MIDI_CONTROLLER) + return; + +// printf(" =======AudioMixer::songChanged %x\n", flags); + UpdateAction action = NO_UPDATE; + if (flags == -1) + action = UPDATE_ALL; + else if (flags & SC_TRACK_REMOVED) + action = STRIP_REMOVED; + else if (flags & SC_TRACK_INSERTED) + action = STRIP_INSERTED; + else if (flags & SC_MIDI_CHANNEL) + action = UPDATE_MIDI; + if (action != NO_UPDATE) + updateMixer(action); + if (action != UPDATE_ALL) { + StripList::iterator si = stripList.begin(); + for (; si != stripList.end(); ++si) { + (*si)->songChanged(flags); + } + } + } + +//--------------------------------------------------------- +// closeEvent +//--------------------------------------------------------- + +void AudioMixerApp::closeEvent(QCloseEvent* e) + { + emit closed(); + e->accept(); + } + +//--------------------------------------------------------- +// toggleRouteDialog +//--------------------------------------------------------- + +void AudioMixerApp::toggleRouteDialog() + { + showRouteDialog(!menuView->isItemChecked(routingId)); + } + +//--------------------------------------------------------- +// showRouteDialog +//--------------------------------------------------------- + +void AudioMixerApp::showRouteDialog(bool on) + { + if (on && routingDialog == 0) { + routingDialog = new RouteDialog(this); + connect(routingDialog, SIGNAL(closed()), SLOT(routingDialogClosed())); + } + if (routingDialog) + routingDialog->setShown(on); + menuView->setItemChecked(routingId, on); + } + +//--------------------------------------------------------- +// routingDialogClosed +//--------------------------------------------------------- + +void AudioMixerApp::routingDialogClosed() + { + menuView->setItemChecked(routingId, false); + } + +//--------------------------------------------------------- +// showTracksChanged +//--------------------------------------------------------- + +/* +void AudioMixerApp::showTracksChanged(QAction* id) + { + bool val = id->isOn(); + if (id == showMidiTracksId) + cfg->showMidiTracks = val; + else if (id == showDrumTracksId) + cfg->showDrumTracks = val; + else if (id == showInputTracksId) + cfg->showInputTracks = 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 == showAuxTracksId) + cfg->showAuxTracks = val; + else if (id == showSyntiTracksId) + cfg->showSyntiTracks = val; + updateMixer(UPDATE_ALL); + } +*/ + +void AudioMixerApp::showMidiTracksChanged(bool v) +{ + cfg->showMidiTracks = v; + updateMixer(UPDATE_ALL); +} + +void AudioMixerApp::showDrumTracksChanged(bool v) +{ + cfg->showDrumTracks = v; + updateMixer(UPDATE_ALL); +} + +void AudioMixerApp::showWaveTracksChanged(bool v) +{ + cfg->showWaveTracks = v; + updateMixer(UPDATE_ALL); +} + +void AudioMixerApp::showInputTracksChanged(bool v) +{ + cfg->showInputTracks = v; + updateMixer(UPDATE_ALL); +} + +void AudioMixerApp::showOutputTracksChanged(bool v) +{ + cfg->showOutputTracks = v; + updateMixer(UPDATE_ALL); +} + +void AudioMixerApp::showGroupTracksChanged(bool v) +{ + cfg->showGroupTracks = v; + updateMixer(UPDATE_ALL); +} + +void AudioMixerApp::showAuxTracksChanged(bool v) +{ + cfg->showAuxTracks = v; + updateMixer(UPDATE_ALL); +} + +void AudioMixerApp::showSyntiTracksChanged(bool v) +{ + cfg->showSyntiTracks = v; + updateMixer(UPDATE_ALL); +} + +//--------------------------------------------------------- +// write +//--------------------------------------------------------- + +//void AudioMixerApp::write(Xml& xml, const char* name) +void AudioMixerApp::write(int level, Xml& xml) +//void AudioMixerApp::write(int level, Xml& xml, const char* name) + { + //xml.stag(QString(name)); + //xml.tag(level++, name.latin1()); + xml.tag(level++, "Mixer"); + + xml.strTag(level, "name", cfg->name); + + //xml.tag("geometry", geometry()); + xml.qrectTag(level, "geometry", geometry()); + + xml.intTag(level, "showMidiTracks", cfg->showMidiTracks); + xml.intTag(level, "showDrumTracks", cfg->showDrumTracks); + xml.intTag(level, "showInputTracks", cfg->showInputTracks); + xml.intTag(level, "showOutputTracks", cfg->showOutputTracks); + xml.intTag(level, "showWaveTracks", cfg->showWaveTracks); + xml.intTag(level, "showGroupTracks", cfg->showGroupTracks); + xml.intTag(level, "showAuxTracks", cfg->showAuxTracks); + xml.intTag(level, "showSyntiTracks", cfg->showSyntiTracks); + + //xml.etag(name); + //xml.etag(level, name.latin1()); + xml.etag(level, "Mixer"); + } + diff --git a/muse2/muse/mixer/amixer.h b/muse2/muse/mixer/amixer.h new file mode 100644 index 00000000..f6588ddb --- /dev/null +++ b/muse2/muse/mixer/amixer.h @@ -0,0 +1,119 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: amixer.h,v 1.27.2.2 2009/10/18 06:13:00 terminator356 Exp $ +// +// (C) Copyright 2000-2004 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __AMIXER_H__ +#define __AMIXER_H__ + +#include +#include +#include +#include +#include +//Added by qt3to4: +#include +#include +#include +#include +#include + +#include "cobject.h" +#include "synth.h" +#include "node.h" +#include "routedialog.h" + +class Xml; +class QWidget; +class Q3HBoxLayout; +class Q3ScrollView; +class AudioTrack; +class Meter; +class Track; +class QLabel; +class Slider; +class QToolButton; +class Knob; +class DoubleLabel; +class ComboBox; +class RouteDialog; +class Q3PopupMenu; +class Strip; + +struct MixerConfig; + +#define EFX_HEIGHT 16 + +typedef std::list StripList; + +//--------------------------------------------------------- +// AudioMixerApp +//--------------------------------------------------------- + +class AudioMixerApp : public Q3MainWindow { + //QString name; + MixerConfig* cfg; + StripList stripList; + Q3ScrollView* view; + QWidget* central; + Q3HBoxLayout* lbox; + //Strip* master; + Q3HBoxLayout* layout; + Q3PopupMenu* menuView; + RouteDialog* routingDialog; + int routingId; + int oldAuxsSize; + + Q3Action* showMidiTracksId; + Q3Action* showDrumTracksId; + Q3Action* showInputTracksId; + Q3Action* showOutputTracksId; + Q3Action* showWaveTracksId; + Q3Action* showGroupTracksId; + Q3Action* showAuxTracksId; + Q3Action* showSyntiTracksId; + + Q_OBJECT + + virtual void closeEvent(QCloseEvent*); + void addStrip(Track*, int); + void showRouteDialog(bool); + + enum UpdateAction { + NO_UPDATE, UPDATE_ALL, UPDATE_MIDI, STRIP_INSERTED, STRIP_REMOVED + }; + void updateMixer(UpdateAction); + + signals: + void closed(); + + private slots: + void songChanged(int); + //void configChanged() { songChanged(-1); } + void configChanged(); + void toggleRouteDialog(); + void routingDialogClosed(); + //void showTracksChanged(QAction*); + void showMidiTracksChanged(bool); + void showDrumTracksChanged(bool); + void showWaveTracksChanged(bool); + void showInputTracksChanged(bool); + void showOutputTracksChanged(bool); + void showGroupTracksChanged(bool); + void showAuxTracksChanged(bool); + void showSyntiTracksChanged(bool); + + public: + //AudioMixerApp(QWidget* parent); + AudioMixerApp(QWidget* parent, MixerConfig* c); + //void write(Xml&, const char* name); + //void write(int level, Xml& xml, const char* name); + void write(int level, Xml& xml); + void clear(); + }; + +#endif + diff --git a/muse2/muse/mixer/astrip.cpp b/muse2/muse/mixer/astrip.cpp new file mode 100644 index 00000000..de7bf985 --- /dev/null +++ b/muse2/muse/mixer/astrip.cpp @@ -0,0 +1,2830 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: astrip.cpp,v 1.23.2.17 2009/11/16 01:55:55 terminator356 Exp $ +// +// (C) Copyright 2000-2004 Werner Schweer (ws@seh.de) +//========================================================= + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +//#include +#include +#include +#include +#include +#include +#include +//Added by qt3to4: +#include +#include + +#include "app.h" +#include "globals.h" +#include "audio.h" +#include "driver/audiodev.h" +#include "song.h" +#include "slider.h" +#include "knob.h" +#include "combobox.h" +#include "meter.h" +#include "astrip.h" +#include "track.h" +#include "synth.h" +//#include "route.h" +#include "doublelabel.h" +#include "rack.h" +#include "node.h" +#include "amixer.h" +#include "icons.h" +#include "gconfig.h" +#include "ttoolbutton.h" +#include "menutitleitem.h" +#include "popupmenu.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); + }; +*/ + +//--------------------------------------------------------- +// MenuTitleItem +//--------------------------------------------------------- + +MenuTitleItem::MenuTitleItem(QString ss) + : s(ss) + { + } + +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(Qt::lightGray)); + p->drawText(x, y, w, h, Qt::AlignCenter, s); + } + +//--------------------------------------------------------- +// minimumSizeHint +//--------------------------------------------------------- + +QSize AudioStrip::minimumSizeHint () const +{ + // We force the width of the size hint to be what we want + //return QWidget::minimumSizeHint(); + return QSize(66,QWidget::minimumSizeHint().height()); +} + +//--------------------------------------------------------- +// heartBeat +//--------------------------------------------------------- + +void AudioStrip::heartBeat() + { + for (int ch = 0; ch < track->channels(); ++ch) { + if (meter[ch]) { + //int meterVal = track->meter(ch); + //int peak = track->peak(ch); + //meter[ch]->setVal(meterVal, peak, false); + meter[ch]->setVal(track->meter(ch), track->peak(ch), false); + } + } + Strip::heartBeat(); + updateVolume(); + updatePan(); + } + +//--------------------------------------------------------- +// configChanged +//--------------------------------------------------------- + +void AudioStrip::configChanged() +{ + songChanged(SC_CONFIG); +} + +//--------------------------------------------------------- +// songChanged +//--------------------------------------------------------- + +void AudioStrip::songChanged(int val) + { + // Is it simply a midi controller value adjustment? Forget it. + if (val == SC_MIDI_CONTROLLER) + return; + + AudioTrack* src = (AudioTrack*)track; + + // Do channels before config... + if (val & SC_CHANNELS) + updateChannels(); + + // p3.3.47 + // Update the routing popup menu if anything relevant changed. + if (val & (SC_ROUTE | SC_CHANNELS | SC_CONFIG)) + { + //updateRouteMenus(); + muse->updateRouteMenus(track, this); // p3.3.50 Use this handy shared routine. + } + + // Catch when label font, or configuration min slider and meter values change. + if (val & SC_CONFIG) + { + // Added by Tim. p3.3.9 + + // Set the strip label's font. + //label->setFont(config.fonts[1]); + setLabelFont(); + + // Adjust minimum volume slider and label values. + slider->setRange(config.minSlider-0.1, 10.0); + sl->setRange(config.minSlider, 10.0); + + // Adjust minimum aux knob and label values. + int n = auxKnob.size(); + for (int idx = 0; idx < n; ++idx) + { + auxKnob[idx]->blockSignals(true); + auxLabel[idx]->blockSignals(true); + auxKnob[idx]->setRange(config.minSlider-0.1, 10.0); + auxLabel[idx]->setRange(config.minSlider, 10.1); + auxKnob[idx]->blockSignals(false); + auxLabel[idx]->blockSignals(false); + } + + // Adjust minimum meter values. + for(int c = 0; c < channel; ++c) + meter[c]->setRange(config.minMeter, 10.0); + } + + if (mute && (val & SC_MUTE)) { // mute && off + mute->blockSignals(true); + mute->setOn(src->mute()); + mute->blockSignals(false); + updateOffState(); + } + if (solo && (val & SC_SOLO)) { + if((bool)track->internalSolo()) + { + if(!useSoloIconSet2) + { + solo->setIconSet(*soloIconSet2); + useSoloIconSet2 = true; + } + } + else if(useSoloIconSet2) + { + solo->setIconSet(*soloIconSet1); + useSoloIconSet2 = false; + } + + solo->blockSignals(true); + solo->setOn(track->solo()); + solo->blockSignals(false); + } + if (val & SC_RECFLAG) + setRecordFlag(track->recordFlag()); + if (val & SC_TRACK_MODIFIED) + { + setLabelText(); + // Added by Tim. p3.3.9 + setLabelFont(); + + } + //if (val & SC_CHANNELS) + // updateChannels(); + if (val & SC_ROUTE) { + if (pre) { + pre->blockSignals(true); + pre->setOn(src->prefader()); + pre->blockSignals(false); + } + } + if (val & SC_AUX) { + int n = auxKnob.size(); + for (int idx = 0; idx < n; ++idx) { + double val = fast_log10(src->auxSend(idx)) * 20.0; + auxKnob[idx]->blockSignals(true); + auxLabel[idx]->blockSignals(true); + auxKnob[idx]->setValue(val); + auxLabel[idx]->setValue(val); + auxKnob[idx]->blockSignals(false); + auxLabel[idx]->blockSignals(false); + } + } + if (autoType && (val & SC_AUTOMATION)) { + autoType->blockSignals(true); + autoType->setCurrentItem(track->automationType()); + if(track->automationType() == AUTO_TOUCH || track->automationType() == AUTO_WRITE) + autoType->setPaletteBackgroundColor(Qt::red); + else + autoType->setPaletteBackgroundColor(qApp->palette().active().background()); + + autoType->blockSignals(false); + } + } + +//--------------------------------------------------------- +// updateVolume +//--------------------------------------------------------- + +void AudioStrip::updateVolume() +{ + double vol = ((AudioTrack*)track)->volume(); + if (vol != volume) + { + //printf("AudioStrip::updateVolume setting slider and label\n"); + + slider->blockSignals(true); + sl->blockSignals(true); + double val = fast_log10(vol) * 20.0; + slider->setValue(val); + sl->setValue(val); + sl->blockSignals(false); + slider->blockSignals(false); + volume = vol; + } +} + +//--------------------------------------------------------- +// updatePan +//--------------------------------------------------------- + +void AudioStrip::updatePan() +{ + double v = ((AudioTrack*)track)->pan(); + if (v != panVal) + { + //printf("AudioStrip::updatePan setting slider and label\n"); + + pan->blockSignals(true); + panl->blockSignals(true); + pan->setValue(v); + panl->setValue(v); + panl->blockSignals(false); + pan->blockSignals(false); + panVal = v; + } +} + +//--------------------------------------------------------- +// offToggled +//--------------------------------------------------------- + +void AudioStrip::offToggled(bool val) + { + track->setOff(val); + song->update(SC_MUTE); + } + +//--------------------------------------------------------- +// updateOffState +//--------------------------------------------------------- + +void AudioStrip::updateOffState() + { + bool val = !track->off(); + slider->setEnabled(val); + sl->setEnabled(val); + pan->setEnabled(val); + panl->setEnabled(val); + if (track->type() != Track::AUDIO_SOFTSYNTH) + stereo->setEnabled(val); + label->setEnabled(val); + + int n = auxKnob.size(); + for (int i = 0; i < n; ++i) + { + auxKnob[i]->setEnabled(val); + auxLabel[i]->setEnabled(val); + } + + if (pre) + pre->setEnabled(val); + if (record) + record->setEnabled(val); + if (solo) + solo->setEnabled(val); + if (mute) + mute->setEnabled(val); + if (autoType) + autoType->setEnabled(val); + if (iR) + iR->setEnabled(val); + if (oR) + oR->setEnabled(val); + if (off) { + off->blockSignals(true); + off->setOn(track->off()); + off->blockSignals(false); + } + } + +//--------------------------------------------------------- +// preToggled +//--------------------------------------------------------- + +void AudioStrip::preToggled(bool val) + { + audio->msgSetPrefader((AudioTrack*)track, val); + resetPeaks(); + song->update(SC_ROUTE); + } + +//--------------------------------------------------------- +// stereoToggled +//--------------------------------------------------------- + +void AudioStrip::stereoToggled(bool val) + { + int oc = track->channels(); + int nc = val ? 2 : 1; +// stereo->setIcon(nc == 2 ? *stereoIcon : *monoIcon); + if (oc == nc) + return; + audio->msgSetChannels((AudioTrack*)track, nc); + song->update(SC_CHANNELS); + } + +//--------------------------------------------------------- +// auxChanged +//--------------------------------------------------------- + +void AudioStrip::auxChanged(double val, int idx) + { + double vol; + if (val <= config.minSlider) { + vol = 0.0; + val -= 1.0; // display special value "off" + } + else + vol = pow(10.0, val/20.0); + audio->msgSetAux((AudioTrack*)track, idx, vol); + song->update(SC_AUX); + } + +//--------------------------------------------------------- +// auxLabelChanged +//--------------------------------------------------------- + +void AudioStrip::auxLabelChanged(double val, unsigned int idx) + { + if(idx >= auxKnob.size()) + return; + auxKnob[idx]->setValue(val); + } + +//--------------------------------------------------------- +// volumeChanged +//--------------------------------------------------------- + +void AudioStrip::volumeChanged(double val) + { + AutomationType at = ((AudioTrack*)track)->automationType(); + if(at == AUTO_WRITE || (audio->isPlaying() && at == AUTO_TOUCH)) + track->enableVolumeController(false); + + double vol; + if (val <= config.minSlider) { + vol = 0.0; + val -= 1.0; // display special value "off" + } + else + vol = pow(10.0, val/20.0); + volume = vol; + audio->msgSetVolume((AudioTrack*)track, vol); + ((AudioTrack*)track)->recordAutomation(AC_VOLUME, vol); + } + +//--------------------------------------------------------- +// volumePressed +//--------------------------------------------------------- + +void AudioStrip::volumePressed() + { + AutomationType at = ((AudioTrack*)track)->automationType(); + if(at == AUTO_WRITE || (at == AUTO_READ || at == AUTO_TOUCH)) + track->enableVolumeController(false); + + double val = slider->value(); + double vol; + if (val <= config.minSlider) { + vol = 0.0; + //val -= 1.0; // display special value "off" + } + else + vol = pow(10.0, val/20.0); + volume = vol; + audio->msgSetVolume((AudioTrack*)track, volume); + ((AudioTrack*)track)->startAutoRecord(AC_VOLUME, volume); + } + +//--------------------------------------------------------- +// volumeReleased +//--------------------------------------------------------- + +void AudioStrip::volumeReleased() + { + if(track->automationType() != AUTO_WRITE) + track->enableVolumeController(true); + + ((AudioTrack*)track)->stopAutoRecord(AC_VOLUME, volume); + } + +//--------------------------------------------------------- +// volumeRightClicked +//--------------------------------------------------------- +void AudioStrip::volumeRightClicked(const QPoint &p) +{ + song->execAutomationCtlPopup((AudioTrack*)track, p, AC_VOLUME); +} + +//--------------------------------------------------------- +// volLabelChanged +//--------------------------------------------------------- + +void AudioStrip::volLabelChanged(double val) + { + AutomationType at = ((AudioTrack*)track)->automationType(); + if(at == AUTO_WRITE || (audio->isPlaying() && at == AUTO_TOUCH)) + track->enableVolumeController(false); + + double vol; + if (val <= config.minSlider) { + vol = 0.0; + val -= 1.0; // display special value "off" + } + else + vol = pow(10.0, val/20.0); + volume = vol; + slider->setValue(val); + audio->msgSetVolume((AudioTrack*)track, vol); + ((AudioTrack*)track)->startAutoRecord(AC_VOLUME, vol); + } + +//--------------------------------------------------------- +// panChanged +//--------------------------------------------------------- + +void AudioStrip::panChanged(double val) + { + AutomationType at = ((AudioTrack*)track)->automationType(); + if(at == AUTO_WRITE || (audio->isPlaying() && at == AUTO_TOUCH)) + track->enablePanController(false); + + panVal = val; + audio->msgSetPan(((AudioTrack*)track), val); + ((AudioTrack*)track)->recordAutomation(AC_PAN, val); + } + +//--------------------------------------------------------- +// panPressed +//--------------------------------------------------------- + +void AudioStrip::panPressed() + { + AutomationType at = ((AudioTrack*)track)->automationType(); + if(at == AUTO_WRITE || (at == AUTO_READ || at == AUTO_TOUCH)) + track->enablePanController(false); + + panVal = pan->value(); + audio->msgSetPan(((AudioTrack*)track), panVal); + ((AudioTrack*)track)->startAutoRecord(AC_PAN, panVal); + } + +//--------------------------------------------------------- +// panReleased +//--------------------------------------------------------- + +void AudioStrip::panReleased() + { + if(track->automationType() != AUTO_WRITE) + track->enablePanController(true); + ((AudioTrack*)track)->stopAutoRecord(AC_PAN, panVal); + } + +//--------------------------------------------------------- +// panRightClicked +//--------------------------------------------------------- +void AudioStrip::panRightClicked(const QPoint &p) +{ + song->execAutomationCtlPopup((AudioTrack*)track, p, AC_PAN); +} + +//--------------------------------------------------------- +// panLabelChanged +//--------------------------------------------------------- + +void AudioStrip::panLabelChanged(double val) + { + AutomationType at = ((AudioTrack*)track)->automationType(); + if(at == AUTO_WRITE || (audio->isPlaying() && at == AUTO_TOUCH)) + track->enablePanController(false); + + panVal = val; + pan->setValue(val); + audio->msgSetPan((AudioTrack*)track, val); + ((AudioTrack*)track)->startAutoRecord(AC_PAN, val); + } + +//--------------------------------------------------------- +// updateChannels +//--------------------------------------------------------- + +void AudioStrip::updateChannels() + { + AudioTrack* t = (AudioTrack*)track; + int c = t->channels(); + //printf("AudioStrip::updateChannels track channels:%d current channels:%d\n", c, channel); + + if (c > channel) { + for (int cc = channel; cc < c; ++cc) { + meter[cc] = new Meter(this); + //meter[cc]->setRange(config.minSlider, 10.0); + meter[cc]->setRange(config.minMeter, 10.0); + meter[cc]->setFixedWidth(15); + connect(meter[cc], SIGNAL(mousePress()), this, SLOT(resetPeaks())); + sliderGrid->addWidget(meter[cc], 0, cc+1, Qt::AlignHCenter); + sliderGrid->setColStretch(cc, 50); + meter[cc]->show(); + } + } + else if (c < channel) { + for (int cc = channel-1; cc >= c; --cc) { + delete meter[cc]; + meter[cc] = 0; + } + } + channel = c; + stereo->blockSignals(true); + stereo->setOn(channel == 2); + stereo->blockSignals(false); + } + +//--------------------------------------------------------- +// addKnob +// type = 0 - panorama +// 1 - aux send +//--------------------------------------------------------- + +Knob* AudioStrip::addKnob(int type, int id, DoubleLabel** dlabel) + { + Knob* knob = new Knob(this); + knob->setFixedWidth(STRIP_WIDTH/2); + if (type == 0) + knob->setRange(-1.0, +1.0); + else + knob->setRange(config.minSlider-0.1, 10.0); + knob->setBackgroundMode(Qt::PaletteMid); + + if (type == 0) + QToolTip::add(knob, tr("panorama")); + else + QToolTip::add(knob, tr("aux send level")); + + + DoubleLabel* pl; + if (type == 0) + pl = new DoubleLabel(0, -1.0, +1.0, this); + else + pl = new DoubleLabel(0.0, config.minSlider, 10.1, this); + + if (dlabel) + *dlabel = pl; + pl->setSlider(knob); + pl->setFont(config.fonts[1]); + pl->setBackgroundMode(Qt::PaletteMid); + pl->setFrame(true); + if (type == 0) + pl->setPrecision(2); + else { + pl->setPrecision(0); + pl->setPrecision(0); + } + pl->setFixedWidth(STRIP_WIDTH/2); + + QString label; + if (type == 0) + label = tr("Pan"); + else + label.sprintf("Aux%d", id+1); + + QLabel* plb = new QLabel(label, this); + plb->setFont(config.fonts[1]); + plb->setFixedWidth(STRIP_WIDTH/2); + plb->setAlignment(Qt::AlignCenter); + + Q3GridLayout* pangrid = new Q3GridLayout(0, 2, 2, 0, 0, "pangrid"); + pangrid->addWidget(plb, 0, 0); + pangrid->addWidget(pl, 1, 0); + pangrid->addMultiCellWidget(knob, 0, 1, 1, 1); + layout->addLayout(pangrid); + + connect(knob, SIGNAL(valueChanged(double,int)), pl, SLOT(setValue(double))); + //connect(pl, SIGNAL(valueChanged(double, int)), SLOT(panChanged(double))); + + if (type == 0) { + connect(pl, SIGNAL(valueChanged(double, int)), SLOT(panLabelChanged(double))); + connect(knob, SIGNAL(sliderMoved(double,int)), SLOT(panChanged(double))); + connect(knob, SIGNAL(sliderPressed(int)), SLOT(panPressed())); + connect(knob, SIGNAL(sliderReleased(int)), SLOT(panReleased())); + connect(knob, SIGNAL(sliderRightClicked(const QPoint &, int)), SLOT(panRightClicked(const QPoint &))); + } + else { + knob->setId(id); + + connect(pl, SIGNAL(valueChanged(double, int)), knob, SLOT(setValue(double))); + // Not used yet. Switch if/when necessary. + //connect(pl, SIGNAL(valueChanged(double, int)), SLOT(auxLabelChanged(double, int))); + + connect(knob, SIGNAL(sliderMoved(double, int)), SLOT(auxChanged(double, int))); + } + return knob; + } + +//--------------------------------------------------------- +// AudioStrip +//--------------------------------------------------------- + +AudioStrip::~AudioStrip() + { + } + + +//--------------------------------------------------------- +// AudioStrip +// create mixer strip +//--------------------------------------------------------- + +AudioStrip::AudioStrip(QWidget* parent, AudioTrack* at) + : Strip(parent, at) + { + //iR = 0; + //oR = 0; + + off = 0; + + volume = -1.0; + panVal = 0; + + record = 0; + + AudioTrack* t = (AudioTrack*)track; + channel = at->channels(); + setFixedWidth(STRIP_WIDTH); + setMinimumWidth(STRIP_WIDTH); + + int ch = 0; + for (; ch < channel; ++ch) + meter[ch] = new Meter(this); + for (; ch < MAX_CHANNELS; ++ch) + meter[ch] = 0; + + //--------------------------------------------------- + // plugin rack + //--------------------------------------------------- + + EffectRack* rack = new EffectRack(this, t); + rack->setFixedWidth(STRIP_WIDTH); + rack->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Minimum); + layout->addWidget(rack); + + //--------------------------------------------------- + // mono/stereo pre/post + //--------------------------------------------------- + + Q3HBoxLayout* ppBox = new Q3HBoxLayout(0); + stereo = new QToolButton(this); + stereo->setFont(config.fonts[1]); + QIcon stereoSet; + stereoSet.setPixmap(*monoIcon, QIcon::Automatic, QIcon::Normal, QIcon::Off); + stereoSet.setPixmap(*stereoIcon, QIcon::Automatic, QIcon::Normal, QIcon::On); + stereo->setIconSet(stereoSet); + + stereo->setToggleButton(true); + QToolTip::add(stereo, tr("1/2 channel")); + stereo->setOn(channel == 2); + stereo->setFixedWidth(STRIP_WIDTH/2); + connect(stereo, SIGNAL(toggled(bool)), SLOT(stereoToggled(bool))); + + // disable mono/stereo for Synthesizer-Plugins + if (t->type() == Track::AUDIO_SOFTSYNTH) + stereo->setEnabled(false); + + pre = new QToolButton(this); + pre->setFont(config.fonts[1]); + pre->setToggleButton(true); + pre->setText(tr("Pre")); + QToolTip::add(pre, tr("pre fader - post fader")); + pre->setOn(t->prefader()); + pre->setFixedWidth(STRIP_WIDTH/2); + connect(pre, SIGNAL(toggled(bool)), SLOT(preToggled(bool))); + + ppBox->addWidget(stereo); + ppBox->addWidget(pre); + layout->addLayout(ppBox); + + //--------------------------------------------------- + // aux send + //--------------------------------------------------- + + int auxsSize = song->auxs()->size(); + if (t->hasAuxSend()) { + for (int idx = 0; idx < auxsSize; ++idx) { + DoubleLabel* al; + Knob* ak = addKnob(1, idx, &al); + auxKnob.push_back(ak); + auxLabel.push_back(al); + double val = fast_log10(t->auxSend(idx))*20.0; + ak->setValue(val); + al->setValue(val); + } + } + else { + if (auxsSize) + layout->addSpacing((STRIP_WIDTH/2 + 2) * auxsSize); + } + + //--------------------------------------------------- + // slider, label, meter + //--------------------------------------------------- + + sliderGrid = new Q3GridLayout(this); // ddskrjo this + sliderGrid->setRowStretch(0, 100); + + //slider = new Slider(this); + slider = new Slider(this, "vol", Qt::Vertical, Slider::None, + Slider::BgTrough | Slider::BgSlot); + slider->setCursorHoming(true); + slider->setRange(config.minSlider-0.1, 10.0); + slider->setFixedWidth(20); + slider->setFont(config.fonts[1]); + slider->setValue(fast_log10(t->volume())*20.0); + + sliderGrid->addWidget(slider, 0, 0, Qt::AlignHCenter); + + for (int i = 0; i < channel; ++i) { + //meter[i]->setRange(config.minSlider, 10.0); + meter[i]->setRange(config.minMeter, 10.0); + meter[i]->setFixedWidth(15); + connect(meter[i], SIGNAL(mousePress()), this, SLOT(resetPeaks())); + sliderGrid->addWidget(meter[i], 0, i+1, Qt::AlignHCenter); + sliderGrid->setColStretch(i, 50); + } + layout->addLayout(sliderGrid); + + sl = new DoubleLabel(0.0, config.minSlider, 10.0, this); + sl->setSlider(slider); + sl->setFont(config.fonts[1]); + sl->setBackgroundMode(Qt::PaletteMid); + sl->setSuffix(tr("dB")); + sl->setFrame(true); + sl->setPrecision(0); + sl->setFixedWidth(STRIP_WIDTH); + sl->setValue(fast_log10(t->volume()) * 20.0); + + connect(sl, SIGNAL(valueChanged(double,int)), SLOT(volLabelChanged(double))); + //connect(sl, SIGNAL(valueChanged(double,int)), SLOT(volumeChanged(double))); + connect(slider, SIGNAL(valueChanged(double,int)), sl, SLOT(setValue(double))); + connect(slider, SIGNAL(sliderMoved(double,int)), SLOT(volumeChanged(double))); + connect(slider, SIGNAL(sliderPressed(int)), SLOT(volumePressed())); + connect(slider, SIGNAL(sliderReleased(int)), SLOT(volumeReleased())); + connect(slider, SIGNAL(sliderRightClicked(const QPoint &, int)), SLOT(volumeRightClicked(const QPoint &))); + layout->addWidget(sl); + + //--------------------------------------------------- + // pan, balance + //--------------------------------------------------- + + pan = addKnob(0, 0, &panl); + pan->setValue(t->pan()); + + //--------------------------------------------------- + // mute, solo, record + //--------------------------------------------------- + + if (track->canRecord()) { + record = new TransparentToolButton(this); + record->setToggleButton(true); + record->setFixedWidth(STRIP_WIDTH/2); + record->setBackgroundMode(Qt::PaletteMid); + QIcon iconSet; + iconSet.setPixmap(*record_on_Icon, QIcon::Automatic, QIcon::Normal, QIcon::On); + iconSet.setPixmap(*record_off_Icon, QIcon::Automatic, QIcon::Normal, QIcon::Off); + record->setIconSet(iconSet); + QToolTip::add(record, tr("record")); + record->setOn(t->recordFlag()); + connect(record, SIGNAL(toggled(bool)), SLOT(recordToggled(bool))); + } + + Track::TrackType type = t->type(); + + Q3HBoxLayout* smBox1 = new Q3HBoxLayout(0); + Q3HBoxLayout* smBox2 = new Q3HBoxLayout(0); + + mute = new QToolButton(this); + + QIcon muteSet; + muteSet.setPixmap(*muteIconOn, QIcon::Automatic, QIcon::Normal, QIcon::Off); + muteSet.setPixmap(*muteIconOff, QIcon::Automatic, QIcon::Normal, QIcon::On); + mute->setIconSet(muteSet); + mute->setToggleButton(true); + QToolTip::add(mute, tr("mute")); + mute->setOn(t->mute()); + mute->setFixedWidth(STRIP_WIDTH/2-2); + connect(mute, SIGNAL(toggled(bool)), SLOT(muteToggled(bool))); + smBox2->addWidget(mute); + + solo = new QToolButton(this); + + if((bool)t->internalSolo()) + { + solo->setIconSet(*soloIconSet2); + useSoloIconSet2 = true; + } + else + { + solo->setIconSet(*soloIconSet1); + useSoloIconSet2 = false; + } + + solo->setToggleButton(true); + solo->setOn(t->solo()); + + solo->setFixedWidth(STRIP_WIDTH/2-2); + smBox2->addWidget(solo); + connect(solo, SIGNAL(toggled(bool)), SLOT(soloToggled(bool))); + if (type == Track::AUDIO_OUTPUT) { + QToolTip::add(record, tr("record downmix")); + //QToolTip::add(solo, tr("solo mode (monitor)")); + QToolTip::add(solo, tr("solo mode")); + } + else { + //QToolTip::add(solo, tr("pre fader listening")); + QToolTip::add(solo, tr("solo mode")); + } + + off = new TransparentToolButton(this); + QIcon iconSet; + iconSet.setPixmap(*exit1Icon, QIcon::Automatic, QIcon::Normal, QIcon::On); + iconSet.setPixmap(*exitIcon, QIcon::Automatic, QIcon::Normal, QIcon::Off); + off->setIconSet(iconSet); + off->setBackgroundMode(Qt::PaletteMid); + off->setFixedWidth(STRIP_WIDTH/2); + off->setToggleButton(true); + QToolTip::add(off, tr("off")); + off->setOn(t->off()); + connect(off, SIGNAL(toggled(bool)), SLOT(offToggled(bool))); + + smBox1->addWidget(off); + if (track->canRecord()) + smBox1->addWidget(record); + else + smBox1->addStretch(100); + + layout->addLayout(smBox1); + layout->addLayout(smBox2); + + //--------------------------------------------------- + // routing + //--------------------------------------------------- + + Q3HBoxLayout* rBox = new Q3HBoxLayout(0); + if (type != Track::AUDIO_AUX) { + iR = new QToolButton(this); + iR->setFont(config.fonts[1]); + iR->setFixedWidth((STRIP_WIDTH-4)/2); + iR->setText(tr("iR")); + iR->setToggleButton(false); + QToolTip::add(iR, tr("input routing")); + rBox->addWidget(iR); + connect(iR, SIGNAL(pressed()), SLOT(iRoutePressed())); + } + else + rBox->addSpacing((STRIP_WIDTH-4)/2); + oR = new QToolButton(this); + oR->setFont(config.fonts[1]); + oR->setFixedWidth((STRIP_WIDTH-4)/2); + oR->setText(tr("oR")); + oR->setToggleButton(false); + QToolTip::add(oR, tr("output routing")); + rBox->addWidget(oR); + connect(oR, SIGNAL(pressed()), SLOT(oRoutePressed())); + + layout->addLayout(rBox); + + //--------------------------------------------------- + // automation type + //--------------------------------------------------- + + autoType = new ComboBox(this); + autoType->setFont(config.fonts[1]); + autoType->setFixedWidth(STRIP_WIDTH-4); + autoType->insertItem(tr("Off"), AUTO_OFF); + autoType->insertItem(tr("Read"), AUTO_READ); + autoType->insertItem(tr("Touch"), AUTO_TOUCH); + autoType->insertItem(tr("Write"), AUTO_WRITE); + autoType->setCurrentItem(t->automationType()); + + if(t->automationType() == AUTO_TOUCH || t->automationType() == AUTO_WRITE) + autoType->setPaletteBackgroundColor(Qt::red); + else + autoType->setPaletteBackgroundColor(qApp->palette().active().background()); + + QToolTip::add(autoType, tr("automation type")); + connect(autoType, SIGNAL(activated(int,int)), SLOT(setAutomationType(int,int))); + layout->addWidget(autoType); + + if (off) { + off->blockSignals(true); + updateOffState(); // init state + off->blockSignals(false); + } + connect(heartBeatTimer, SIGNAL(timeout()), SLOT(heartBeat())); + } + +//--------------------------------------------------------- +// addMenuItem +//--------------------------------------------------------- + +static int addMenuItem(AudioTrack* track, Track* route_track, PopupMenu* lb, int id, RouteMenuMap& mm, int channel, int channels, bool isOutput) +{ + // totalInChannels is only used by syntis. + //int channels = (!isOutput || route_track->type() != Track::AUDIO_SOFTSYNTH) ? ((AudioTrack*)route_track)->totalOutChannels() : ((AudioTrack*)route_track)->totalInChannels(); + //int channels = (!isOutput || track->type() != Track::AUDIO_SOFTSYNTH) ? ((AudioTrack*)track)->totalOutChannels() : ((AudioTrack*)track)->totalInChannels(); + int toch = ((AudioTrack*)track)->totalOutChannels(); + // If track channels = 1, it must be a mono synth. And synti channels cannot be changed by user. + if(track->channels() == 1) + toch = 1; + + // totalInChannels is only used by syntis. + ///int chans = (isOutput || track->type() != Track::AUDIO_SOFTSYNTH) ? toch : ((AudioTrack*)track)->totalInChannels(); + + // Don't add the last stray mono route if the track is stereo. + //if(route_track->channels() > 1 && (channel+1 == chans)) + // return id; + + RouteList* rl = isOutput ? track->outRoutes() : track->inRoutes(); + + QString s(route_track->name()); + //int trackchans = track->channels(); + //QString ns; + + //if(track->channels() > 1 && (channel+1 < channels)) + //if(track->channels() > 1) + //if(route_track->type() == Track::AUDIO_SOFTSYNTH && channels > 2 && track->channels() > 1) + ///if(track->type() == Track::AUDIO_SOFTSYNTH && chans > 2 && route_track->channels() > 1) + /// s += QString(" < [%1,%2]").arg(channel+1).arg(channel+2); + + //int it = lb->insertItem(s); + lb->insertItem(s, id); + + int ach = channel; + int bch = -1; + + Route r(route_track, isOutput ? ach : bch, channels); + //Route r(route_track, channel); + + r.remoteChannel = isOutput ? bch : ach; + + mm.insert( pRouteMenuMap(id, r) ); + + for(iRoute ir = rl->begin(); ir != rl->end(); ++ir) + { + //if (ir->type == 0 && ir->track == track) { + //if(ir->type == Route::TRACK_ROUTE && ir->track == track && ir->channels == channels) + //if(ir->type == Route::TRACK_ROUTE && ir->track == track && + // (channel != -1 && ir->channel == channel) && (channels != -1 && ir->channels == channels)) + //if(ir->type == Route::TRACK_ROUTE && ir->track == track && ir->channel == channel) + //printf("addMenuItem: ir->type:%d ir->track:%s track:%s ir->channel:%d channel:%d ir->channels:%d channels:%d\n", + // ir->type, ir->track->name().latin1(), track->name().latin1(), ir->channel, channel, ir->channels, channels); + //if(ir->type == Route::TRACK_ROUTE && ir->track == route_track && ir->channel == channel && ir->remoteChannel == r.remoteChannel) + //if(*ir == r) + //if(ir->type == Route::TRACK_ROUTE && ir->track == route_track && ir->channel == channel && ir->channels == channels && ir->remoteChannel == r.remoteChannel) + + if(ir->type == Route::TRACK_ROUTE && ir->track == route_track && ir->remoteChannel == r.remoteChannel) + { + int tcompch = r.channel; + if(tcompch == -1) + tcompch = 0; + int tcompchs = r.channels; + if(tcompchs == -1) + tcompchs = isOutput ? track->channels() : route_track->channels(); + + int compch = ir->channel; + if(compch == -1) + compch = 0; + int compchs = ir->channels; + if(compchs == -1) + compchs = isOutput ? track->channels() : ir->track->channels(); + + //if(ir->type == Route::TRACK_ROUTE && ir->track == route_track && ir->channel == r.channel && ir->channels == r.channels && ir->remoteChannel == r.remoteChannel) + if(compch == tcompch && compchs == tcompchs) + { + //lb->setItemChecked(it, true); + lb->setItemChecked(id, true); + break; + } + } + } + return ++id; +} + +//--------------------------------------------------------- +// addAuxPorts +//--------------------------------------------------------- + +static int addAuxPorts(AudioTrack* t, PopupMenu* lb, int id, RouteMenuMap& mm, int channel, int channels, bool isOutput) + { + AuxList* al = song->auxs(); + for (iAudioAux i = al->begin(); i != al->end(); ++i) { + Track* track = *i; + if (t == track) + continue; + //id = addMenuItem(parent, t, track, lb, id, mm, channel, channels, isOutput); + id = addMenuItem(t, track, lb, id, mm, channel, channels, isOutput); + + /* + QString s(track->name()); + //int it = lb->insertItem(s); + lb->insertItem(s, id); + for (iRoute ir = r->begin(); ir != r->end(); ++ir) { + //if (ir->type == 0 && ir->track == track) { + if (ir->type == 0 && ir->track == track && ir->channels == channels) { + //lb->setItemChecked(it, true); + lb->setItemChecked(id, true); + break; + } + } + ++id; + */ + + } + return id; + } + +//--------------------------------------------------------- +// addInPorts +//--------------------------------------------------------- + +static int addInPorts(AudioTrack* t, PopupMenu* lb, int id, RouteMenuMap& mm, int channel, int channels, bool isOutput) + { + InputList* al = song->inputs(); + for (iAudioInput i = al->begin(); i != al->end(); ++i) { + Track* track = *i; + if (t == track) + continue; + //id = addMenuItem(parent, t, track, lb, id, mm, channel, channels, isOutput); + id = addMenuItem(t, track, lb, id, mm, channel, channels, isOutput); + + /* + QString s(track->name()); + //int it = lb->insertItem(s); + lb->insertItem(s, id); + for (iRoute ir = r->begin(); ir != r->end(); ++ir) { + //if (ir->type == 0 && ir->track == track) { + if (ir->type == 0 && ir->track == track && ir->channels == channels) { + //lb->setItemChecked(it, true); + lb->setItemChecked(id, true); + break; + } + } + ++id; + */ + + } + return id; + } + +//--------------------------------------------------------- +// addOutPorts +//--------------------------------------------------------- + +static int addOutPorts(AudioTrack* t, PopupMenu* lb, int id, RouteMenuMap& mm, int channel, int channels, bool isOutput) + { + OutputList* al = song->outputs(); + for (iAudioOutput i = al->begin(); i != al->end(); ++i) { + Track* track = *i; + if (t == track) + continue; + //id = addMenuItem(parent, t, track, lb, id, mm, channel, channels, isOutput); + id = addMenuItem(t, track, lb, id, mm, channel, channels, isOutput); + + /* + QString s(track->name()); + //int it = lb->insertItem(s); + lb->insertItem(s, id); + for (iRoute ir = r->begin(); ir != r->end(); ++ir) { + //if (ir->type == 0 && ir->track == track) { + if (ir->type == 0 && ir->track == track && ir->channels == channels) { + //lb->setItemChecked(it, true); + lb->setItemChecked(id, true); + break; + } + } + ++id; + */ + + } + return id; + } + +//--------------------------------------------------------- +// addGroupPorts +//--------------------------------------------------------- + +static int addGroupPorts(AudioTrack* t, PopupMenu* lb, int id, RouteMenuMap& mm, int channel, int channels, bool isOutput) + { + GroupList* al = song->groups(); + for (iAudioGroup i = al->begin(); i != al->end(); ++i) { + Track* track = *i; + if (t == track) + continue; + //id = addMenuItem(parent, t, track, lb, id, mm, channel, channels, isOutput); + id = addMenuItem(t, track, lb, id, mm, channel, channels, isOutput); + + /* + QString s(track->name()); + //int it = lb->insertItem(s); + lb->insertItem(s, id); + for (iRoute ir = r->begin(); ir != r->end(); ++ir) { + //if (ir->type == 0 && ir->track == track) { + if (ir->type == 0 && ir->track == track && ir->channels == channels) { + //lb->setItemChecked(it, true); + lb->setItemChecked(id, true); + break; + } + } + ++id; + */ + + } + return id; + } + +//--------------------------------------------------------- +// addWavePorts +//--------------------------------------------------------- + +static int addWavePorts(AudioTrack* t, PopupMenu* lb, int id, RouteMenuMap& mm, int channel, int channels, bool isOutput) + { + WaveTrackList* al = song->waves(); + for (iWaveTrack i = al->begin(); i != al->end(); ++i) { + Track* track = *i; + if (t == track) + continue; + //id = addMenuItem(parent, t, track, lb, id, mm, channel, channels, isOutput); + id = addMenuItem(t, track, lb, id, mm, channel, channels, isOutput); + + /* + QString s(track->name()); + //int it = lb->insertItem(s); + lb->insertItem(s, id); + for (iRoute ir = r->begin(); ir != r->end(); ++ir) { + //if (ir->type == 0 && ir->track == track) { + if (ir->type == 0 && ir->track == track && ir->channels == channels) { + //lb->setItemChecked(it, true); + lb->setItemChecked(id, true); + break; + } + } + ++id; + */ + + } + return id; + } + +//--------------------------------------------------------- +// addSyntiPorts +//--------------------------------------------------------- + +static int addSyntiPorts(AudioTrack* t, PopupMenu* lb, int id, + RouteMenuMap& mm, int channel, int channels, bool isOutput) +{ + RouteList* rl = isOutput ? t->outRoutes() : t->inRoutes(); + + SynthIList* al = song->syntis(); + for (iSynthI i = al->begin(); i != al->end(); ++i) + { + Track* track = *i; + if (t == track) + continue; + //id = addMenuItem(parent, track, lb, r, id, mm, channel, channels); + + /* + QString s(track->name()); + //int it = lb->insertItem(s); + lb->insertItem(s, id); + for (iRoute ir = r->begin(); ir != r->end(); ++ir) { + //if (ir->type == 0 && ir->track == track) { + if (ir->type == 0 && ir->track == track && ir->channels == channels) { + //lb->setItemChecked(it, true); + lb->setItemChecked(id, true); + break; + } + } + ++id; + */ + + //SynthI* synti = (SynthI*)track; + + int toch = ((AudioTrack*)track)->totalOutChannels(); + // If track channels = 1, it must be a mono synth. And synti channels cannot be changed by user. + if(track->channels() == 1) + toch = 1; + + //int chans = synti->totalOutChannels(); + //int chans = (!isOutput || track->type() != Track::AUDIO_SOFTSYNTH) ? ((AudioTrack*)track)->totalOutChannels() : ((AudioTrack*)track)->totalInChannels(); + // totalInChannels is only used by syntis. + int chans = (!isOutput || track->type() != Track::AUDIO_SOFTSYNTH) ? toch : ((AudioTrack*)track)->totalInChannels(); + + //int schans = synti->channels(); + //if(schans < chans) + // chans = schans; + int tchans = (channels != -1) ? channels: t->channels(); + if(tchans == 2) + { + // Ignore odd numbered left-over mono channel. + //chans = chans & ~1; + //if(chans != 0) + chans -= 1; + } + + if(chans > 0) + { + //QPopupMenu* chpup = new QPopupMenu(parent); + //PopupMenu* chpup = new PopupMenu(parent); + //PopupMenu* chpup = new PopupMenu(lb->parent()); + PopupMenu* chpup = new PopupMenu(); + //strip->connect(chpup, SIGNAL(activated(int)), strip, SLOT(routingPopupMenuActivated(int))); + lb->connect(chpup, SIGNAL(activated(int)), lb, SIGNAL(activated(int))); + chpup->setCheckable(true); + for(int ch = 0; ch < chans; ++ch) + { + char buffer[128]; + if(tchans == 2) + snprintf(buffer, 128, "%s %d,%d", chpup->tr("Channel").latin1(), ch+1, ch+2); + else + snprintf(buffer, 128, "%s %d", chpup->tr("Channel").latin1(), ch+1); + chpup->insertItem(QString(buffer), id); + + int ach = (channel == -1) ? ch : channel; + int bch = (channel == -1) ? -1 : ch; + + Route rt(track, (t->type() != Track::AUDIO_SOFTSYNTH || isOutput) ? ach : bch, tchans); + //Route rt(track, ch); + //rt.remoteChannel = -1; + rt.remoteChannel = (t->type() != Track::AUDIO_SOFTSYNTH || isOutput) ? bch : ach; + + mm.insert( pRouteMenuMap(id, rt) ); + + for(iRoute ir = rl->begin(); ir != rl->end(); ++ir) + { + //if (ir->type == 0 && ir->track == track) { + //if(ir->type == 0 && ir->track == track && ir->channels == channels) + //if(ir->type == Route::TRACK_ROUTE && ir->track == track && ir->channel == channel && + // ir->channels == channels && ir->remoteChannel == r.remoteChannel) + //if(ir->type == Route::TRACK_ROUTE && ir->track == track && ir->channel == ch && + // ir->remoteChannel == rt.remoteChannel) + //if(ir->type == Route::TRACK_ROUTE && ir->track == track && ir->channel == rt.channel && + // ir->channels == rt.channels && ir->remoteChannel == rt.remoteChannel) + + if(ir->type == Route::TRACK_ROUTE && ir->track == track && ir->remoteChannel == rt.remoteChannel) + { + int tcompch = rt.channel; + if(tcompch == -1) + tcompch = 0; + int tcompchs = rt.channels; + if(tcompchs == -1) + tcompchs = isOutput ? t->channels() : track->channels(); + + int compch = ir->channel; + if(compch == -1) + compch = 0; + int compchs = ir->channels; + if(compchs == -1) + compchs = isOutput ? t->channels() : ir->track->channels(); + + if(compch == tcompch && compchs == tcompchs) + { + chpup->setItemChecked(id, true); + break; + } + } + } + ++id; + } + + lb->insertItem(track->name(), chpup); + } + } + return id; +} + +//--------------------------------------------------------- +// addMultiChannelOutPorts +//--------------------------------------------------------- + +static int addMultiChannelPorts(AudioTrack* t, PopupMenu* pup, int id, RouteMenuMap& mm, bool isOutput) +{ + int toch = t->totalOutChannels(); + // If track channels = 1, it must be a mono synth. And synti channels cannot be changed by user. + if(t->channels() == 1) + toch = 1; + + // Number of allocated buffers is always MAX_CHANNELS or more, even if _totalOutChannels is less. + //int chans = t->totalOutChannels(); + // totalInChannels is only used by syntis. + //int chans = isOutput ? t->totalOutChannels() : t->totalInChannels(); + //int chans = (isOutput || t->type() != Track::AUDIO_SOFTSYNTH) ? t->totalOutChannels() : t->totalInChannels(); + int chans = (isOutput || t->type() != Track::AUDIO_SOFTSYNTH) ? toch : t->totalInChannels(); + + // If track channels = 1, it must be a mono synth. And synti channels cannot be changed by user. + //if(t->channels() == 1) + // chans = 1; + + if(chans > 1) + { + // pup->insertItem(new MenuTitleItem("")); ddskrjo + //pup->insertSeparator(); + } + + // + // If it's more than one channel, create a sub-menu. If it's just one channel, don't bother with a sub-menu... + // + + //QPopupMenu* chpup = pup; + PopupMenu* chpup = pup; + + for(int ch = 0; ch < chans; ++ch) + { + // If more than one channel, create the sub-menu. + if(chans > 1) + { + //chpup = new QPopupMenu(parent); + //chpup = new PopupMenu(parent); + //chpup = new PopupMenu(pup->parent()); + chpup = new PopupMenu(); + //connect(chpup, SIGNAL(activated(int)), strip, SLOT(oRouteMenuActivated(int))); + //strip->connect(chpup, SIGNAL(activated(int)), strip, SLOT(routingPopupMenuActivated(int))); + pup->connect(chpup, SIGNAL(activated(int)), pup, SIGNAL(activated(int))); + chpup->setCheckable(true); + } + + if(isOutput) + { + switch(t->type()) + { + + case Track::AUDIO_INPUT: + //id = addWavePorts(parent, t, chpup, id, mm, ch, 1, isOutput); + id = addWavePorts(t, chpup, id, mm, ch, 1, isOutput); + case Track::WAVE: + case Track::AUDIO_GROUP: + case Track::AUDIO_SOFTSYNTH: + //id = addOutPorts(parent, t, chpup, id, mm, ch, 1, isOutput); + //id = addGroupPorts(parent, t, chpup, id, mm, ch, 1, isOutput); + id = addOutPorts(t, chpup, id, mm, ch, 1, isOutput); + id = addGroupPorts(t, chpup, id, mm, ch, 1, isOutput); + //id = addSyntiPorts(parent, t, chpup, id, mm, ch, 1, isOutput); + //id = addSyntiPorts(strip, parent, t, chpup, id, mm, ch, 1, isOutput); + id = addSyntiPorts(t, chpup, id, mm, ch, 1, isOutput); + break; + case Track::AUDIO_AUX: + //id = addOutPorts(parent, t, chpup, id, mm, ch, 1, isOutput); + id = addOutPorts(t, chpup, id, mm, ch, 1, isOutput); + break; + default: + break; + + /* + case Track::AUDIO_INPUT: + id = addWavePorts(parent, t, chpup, id, mm, ch, isOutput); + case Track::WAVE: + case Track::AUDIO_GROUP: + case Track::AUDIO_SOFTSYNTH: + id = addOutPorts(parent, t, chpup, id, mm, ch, isOutput); + id = addGroupPorts(parent, t, chpup, id, mm, ch, isOutput); + id = addSyntiPorts(parent, t, chpup, id, mm, ch, isOutput); + break; + case Track::AUDIO_AUX: + id = addOutPorts(parent, t, chpup, id, mm, ch, isOutput); + break; + default: + break; + */ + } + } + else + { + switch(t->type()) + { + + case Track::AUDIO_OUTPUT: + //id = addWavePorts(parent, t, chpup, id, mm, ch, 1, isOutput); + //id = addInPorts(parent, t, chpup, id, mm, ch, 1, isOutput); + //id = addGroupPorts(parent, t, chpup, id, mm, ch, 1, isOutput); + //id = addAuxPorts(parent, t, chpup, id, mm, ch, 1, isOutput); + id = addWavePorts(t, chpup, id, mm, ch, 1, isOutput); + id = addInPorts(t, chpup, id, mm, ch, 1, isOutput); + id = addGroupPorts(t, chpup, id, mm, ch, 1, isOutput); + id = addAuxPorts(t, chpup, id, mm, ch, 1, isOutput); + //id = addSyntiPorts(parent, t, chpup, id, mm, ch, 1, isOutput); + //id = addSyntiPorts(strip, parent, t, chpup, id, mm, ch, 1, isOutput); + id = addSyntiPorts(t, chpup, id, mm, ch, 1, isOutput); + break; + case Track::WAVE: + //id = addInPorts(parent, t, chpup, id, mm, ch, 1, isOutput); + id = addInPorts(t, chpup, id, mm, ch, 1, isOutput); + break; + case Track::AUDIO_SOFTSYNTH: + case Track::AUDIO_GROUP: + //id = addWavePorts(parent, t, chpup, id, mm, ch, 1, isOutput); + //id = addInPorts(parent, t, chpup, id, mm, ch, 1, isOutput); + //id = addGroupPorts(parent, t, chpup, id, mm, ch, 1, isOutput); + id = addWavePorts(t, chpup, id, mm, ch, 1, isOutput); + id = addInPorts(t, chpup, id, mm, ch, 1, isOutput); + id = addGroupPorts(t, chpup, id, mm, ch, 1, isOutput); + //id = addSyntiPorts(parent, t, chpup, id, mm, ch, 1, isOutput); + //id = addSyntiPorts(strip, parent, t, chpup, id, mm, ch, 1, isOutput); + id = addSyntiPorts(t, chpup, id, mm, ch, 1, isOutput); + break; + default: + break; + + /* + case Track::AUDIO_OUTPUT: + id = addWavePorts(parent, t, chpup, id, mm, ch, isOutput); + id = addInPorts(parent, t, chpup, id, mm, ch, isOutput); + id = addGroupPorts(parent, t, chpup, id, mm, ch, isOutput); + id = addAuxPorts(parent, t, chpup, id, mm, ch, isOutput); + id = addSyntiPorts(parent, t, chpup, id, mm, ch, isOutput); + break; + case Track::WAVE: + id = addInPorts(parent, t, chpup, id, mm, ch, isOutput); + break; + case Track::AUDIO_SOFTSYNTH: + case Track::AUDIO_GROUP: + id = addWavePorts(parent, t, chpup, id, mm, ch, isOutput); + id = addInPorts(parent, t, chpup, id, mm, ch, isOutput); + id = addGroupPorts(parent, t, chpup, id, mm, ch, isOutput); + id = addSyntiPorts(parent, t, chpup, id, mm, ch, isOutput); + break; + default: + break; + */ + } + } + + // If more than one channel, add the created sub-menu. + if(chans > 1) + { + char buffer[128]; + snprintf(buffer, 128, "%s %d", pup->tr("Channel").latin1(), ch+1); + pup->insertItem(QString(buffer), chpup); + } + } + + // For stereo listing, ignore odd numbered left-over channels. + chans -= 1; + if(chans > 0) + { + // Ignore odd numbered left-over channels. + //int schans = (chans & ~1) - 1; + + pup->insertSeparator(); + //pup->insertItem(new MenuTitleItem("")); ddskrjo + //pup->insertSeparator(); + + // + // If it's more than two channels, create a sub-menu. If it's just two channels, don't bother with a sub-menu... + // + + //QPopupMenu* chpup = pup; + chpup = pup; + if(chans <= 2) + // Just do one iteration. + chans = 1; + + //for(int ch = 0; ch < schans; ++ch) + for(int ch = 0; ch < chans; ++ch) + { + // If more than two channels, create the sub-menu. + if(chans > 2) + { + //chpup = new QPopupMenu(parent); + //chpup = new PopupMenu(parent); + //chpup = new PopupMenu(pup->parent()); + chpup = new PopupMenu(); + //strip->connect(chpup, SIGNAL(activated(int)), strip, SLOT(routingPopupMenuActivated(int))); + pup->connect(chpup, SIGNAL(activated(int)), pup, SIGNAL(activated(int))); + chpup->setCheckable(true); + } + + if(isOutput) + { + switch(t->type()) + { + case Track::AUDIO_INPUT: + //id = addWavePorts(parent, t, chpup, id, mm, ch, 2, isOutput); + id = addWavePorts(t, chpup, id, mm, ch, 2, isOutput); + case Track::WAVE: + case Track::AUDIO_GROUP: + case Track::AUDIO_SOFTSYNTH: + //id = addOutPorts(parent, t, chpup, id, mm, ch, 2, isOutput); + //id = addGroupPorts(parent, t, chpup, id, mm, ch, 2, isOutput); + id = addOutPorts(t, chpup, id, mm, ch, 2, isOutput); + id = addGroupPorts(t, chpup, id, mm, ch, 2, isOutput); + //id = addSyntiPorts(parent, t, chpup, id, mm, ch, 2, isOutput); + //id = addSyntiPorts(strip, parent, t, chpup, id, mm, ch, 2, isOutput); + id = addSyntiPorts(t, chpup, id, mm, ch, 2, isOutput); + break; + case Track::AUDIO_AUX: + //id = addOutPorts(parent, t, chpup, id, mm, ch, 2, isOutput); + id = addOutPorts(t, chpup, id, mm, ch, 2, isOutput); + break; + default: + break; + } + } + else + { + switch(t->type()) + { + case Track::AUDIO_OUTPUT: + //id = addWavePorts(parent, t, chpup, id, mm, ch, 2, isOutput); + //id = addInPorts(parent, t, chpup, id, mm, ch, 2, isOutput); + //id = addGroupPorts(parent, t, chpup, id, mm, ch, 2, isOutput); + //id = addAuxPorts(parent, t, chpup, id, mm, ch, 2, isOutput); + id = addWavePorts(t, chpup, id, mm, ch, 2, isOutput); + id = addInPorts(t, chpup, id, mm, ch, 2, isOutput); + id = addGroupPorts(t, chpup, id, mm, ch, 2, isOutput); + id = addAuxPorts(t, chpup, id, mm, ch, 2, isOutput); + //id = addSyntiPorts(parent, t, chpup, id, mm, ch, 2, isOutput); + //id = addSyntiPorts(strip, parent, t, chpup, id, mm, ch, 2, isOutput); + id = addSyntiPorts(t, chpup, id, mm, ch, 2, isOutput); + break; + case Track::WAVE: + //id = addInPorts(parent, t, chpup, id, mm, ch, 2, isOutput); + id = addInPorts(t, chpup, id, mm, ch, 2, isOutput); + break; + case Track::AUDIO_SOFTSYNTH: + case Track::AUDIO_GROUP: + //id = addWavePorts(parent, t, chpup, id, mm, ch, 2, isOutput); + //id = addInPorts(parent, t, chpup, id, mm, ch, 2, isOutput); + //id = addGroupPorts(parent, t, chpup, id, mm, ch, 2, isOutput); + id = addWavePorts(t, chpup, id, mm, ch, 2, isOutput); + id = addInPorts(t, chpup, id, mm, ch, 2, isOutput); + id = addGroupPorts(t, chpup, id, mm, ch, 2, isOutput); + //id = addSyntiPorts(parent, t, chpup, id, mm, ch, 2, isOutput); + //id = addSyntiPorts(strip, parent, t, chpup, id, mm, ch, 2, isOutput); + id = addSyntiPorts(t, chpup, id, mm, ch, 2, isOutput); + break; + default: + break; + } + } + + // If more than two channels, add the created sub-menu. + if(chans > 2) + { + char buffer[128]; + snprintf(buffer, 128, "%s %d,%d", pup->tr("Channel").latin1(), ch+1, ch+2); + pup->insertItem(QString(buffer), chpup); + } + } + } + + return id; +} + +//--------------------------------------------------------- +// nonSyntiTrackAddSyntis +//--------------------------------------------------------- + +static int nonSyntiTrackAddSyntis(AudioTrack* t, PopupMenu* lb, int id, RouteMenuMap& mm, bool isOutput) +{ + RouteList* rl = isOutput ? t->outRoutes() : t->inRoutes(); + + SynthIList* al = song->syntis(); + for (iSynthI i = al->begin(); i != al->end(); ++i) + { + Track* track = *i; + if (t == track) + continue; + //id = addMenuItem(parent, track, lb, r, id, mm, channel, channels); + + /* + QString s(track->name()); + //int it = lb->insertItem(s); + lb->insertItem(s, id); + for (iRoute ir = r->begin(); ir != r->end(); ++ir) { + //if (ir->type == 0 && ir->track == track) { + if (ir->type == 0 && ir->track == track && ir->channels == channels) { + //lb->setItemChecked(it, true); + lb->setItemChecked(id, true); + break; + } + } + ++id; + */ + + //SynthI* synti = (SynthI*)track; + + int toch = ((AudioTrack*)track)->totalOutChannels(); + // If track channels = 1, it must be a mono synth. And synti channels cannot be changed by user. + if(track->channels() == 1) + toch = 1; + + //int chans = synti->totalOutChannels(); + //int chans = (!isOutput || track->type() != Track::AUDIO_SOFTSYNTH) ? ((AudioTrack*)track)->totalOutChannels() : ((AudioTrack*)track)->totalInChannels(); + // totalInChannels is only used by syntis. + int chans = (!isOutput || track->type() != Track::AUDIO_SOFTSYNTH) ? toch : ((AudioTrack*)track)->totalInChannels(); + + //int schans = synti->channels(); + //if(schans < chans) + // chans = schans; +// int tchans = (channels != -1) ? channels: t->channels(); +// if(tchans == 2) +// { + // Ignore odd numbered left-over mono channel. + //chans = chans & ~1; + //if(chans != 0) +// chans -= 1; +// } + //int tchans = (channels != -1) ? channels: t->channels(); + + if(chans > 0) + { + //QPopupMenu* chpup = new QPopupMenu(parent); + //PopupMenu* chpup = new PopupMenu(parent); + //PopupMenu* chpup = new PopupMenu(lb->parent()); + PopupMenu* chpup = new PopupMenu(); + //strip->connect(chpup, SIGNAL(activated(int)), strip, SLOT(routingPopupMenuActivated(int))); + lb->connect(chpup, SIGNAL(activated(int)), lb, SIGNAL(activated(int))); + chpup->setCheckable(true); + + if(chans > 1) + { + //chpup->insertItem(new MenuTitleItem("")); ddskrjo + //pup->insertSeparator(); + } + + for(int ch = 0; ch < chans; ++ch) + { + char buffer[128]; + //if(tchans == 2) + // snprintf(buffer, 128, "%s %d,%d", chpup->tr("Channel").latin1(), ch+1, ch+2); + //else + snprintf(buffer, 128, "%s %d", chpup->tr("Channel").latin1(), ch+1); + chpup->insertItem(QString(buffer), id); + + //int ach = (channel == -1) ? ch : channel; + //int bch = (channel == -1) ? -1 : ch; + int ach = ch; + int bch = -1; + + //Route rt(track, (t->type() != Track::AUDIO_SOFTSYNTH || isOutput) ? ach : bch, tchans); + Route rt(track, isOutput ? bch : ach, 1); + //Route rt(track, ch); + + //rt.remoteChannel = -1; + //rt.remoteChannel = (t->type() != Track::AUDIO_SOFTSYNTH || isOutput) ? bch : ach; + rt.remoteChannel = isOutput ? ach : bch; + + mm.insert( pRouteMenuMap(id, rt) ); + + for(iRoute ir = rl->begin(); ir != rl->end(); ++ir) + { + //if (ir->type == 0 && ir->track == track) { + //if(ir->type == 0 && ir->track == track && ir->channels == channels) + //if(ir->type == Route::TRACK_ROUTE && ir->track == track && ir->channel == channel && + // ir->channels == channels && ir->remoteChannel == r.remoteChannel) + //if(ir->type == Route::TRACK_ROUTE && ir->track == track && ir->channel == ch && + // ir->remoteChannel == rt.remoteChannel) + //if(ir->type == Route::TRACK_ROUTE && ir->track == track && ir->channel == rt.channel && + // ir->channels == rt.channels && ir->remoteChannel == rt.remoteChannel) + + if(ir->type == Route::TRACK_ROUTE && ir->track == track && ir->remoteChannel == rt.remoteChannel) + { + int tcompch = rt.channel; + if(tcompch == -1) + tcompch = 0; + int tcompchs = rt.channels; + if(tcompchs == -1) + tcompchs = isOutput ? t->channels() : track->channels(); + + int compch = ir->channel; + if(compch == -1) + compch = 0; + int compchs = ir->channels; + if(compchs == -1) + compchs = isOutput ? t->channels() : ir->track->channels(); + + if(compch == tcompch && compchs == tcompchs) + { + chpup->setItemChecked(id, true); + break; + } + } + } + ++id; + } + + chans -= 1; + if(chans > 0) + { + // Ignore odd numbered left-over channels. + //int schans = (chans & ~1) - 1; + + chpup->insertSeparator(); + //chpup->insertItem(new MenuTitleItem("")); ddskrjo + //pup->insertSeparator(); + + for(int ch = 0; ch < chans; ++ch) + { + char buffer[128]; + //if(tchans == 2) + snprintf(buffer, 128, "%s %d,%d", chpup->tr("Channel").latin1(), ch+1, ch+2); + //else + // snprintf(buffer, 128, "%s %d", chpup->tr("Channel").latin1(), ch+1); + chpup->insertItem(QString(buffer), id); + + //int ach = (channel == -1) ? ch : channel; + //int bch = (channel == -1) ? -1 : ch; + int ach = ch; + int bch = -1; + + //Route rt(track, (t->type() != Track::AUDIO_SOFTSYNTH || isOutput) ? ach : bch, tchans); + Route rt(track, isOutput ? bch : ach, 2); + //Route rt(track, ch); + + //rt.remoteChannel = -1; + //rt.remoteChannel = (t->type() != Track::AUDIO_SOFTSYNTH || isOutput) ? bch : ach; + rt.remoteChannel = isOutput ? ach : bch; + + mm.insert( pRouteMenuMap(id, rt) ); + + for(iRoute ir = rl->begin(); ir != rl->end(); ++ir) + { + //if (ir->type == 0 && ir->track == track) { + //if(ir->type == 0 && ir->track == track && ir->channels == channels) + //if(ir->type == Route::TRACK_ROUTE && ir->track == track && ir->channel == channel && + // ir->channels == channels && ir->remoteChannel == r.remoteChannel) + //if(ir->type == Route::TRACK_ROUTE && ir->track == track && ir->channel == ch && + // ir->remoteChannel == rt.remoteChannel) + //if(ir->type == Route::TRACK_ROUTE && ir->track == track && ir->channel == rt.channel && + // ir->channels == rt.channels && ir->remoteChannel == rt.remoteChannel) + + + if(ir->type == Route::TRACK_ROUTE && ir->track == track && ir->remoteChannel == rt.remoteChannel) + { + int tcompch = rt.channel; + if(tcompch == -1) + tcompch = 0; + int tcompchs = rt.channels; + if(tcompchs == -1) + tcompchs = isOutput ? t->channels() : track->channels(); + + int compch = ir->channel; + if(compch == -1) + compch = 0; + int compchs = ir->channels; + if(compchs == -1) + compchs = isOutput ? t->channels() : ir->track->channels(); + + if(compch == tcompch && compchs == tcompchs) + { + chpup->setItemChecked(id, true); + break; + } + } + } + ++id; + } + } + + lb->insertItem(track->name(), chpup); + } + } + return id; +} + +//--------------------------------------------------------- +// iRoutePressed +//--------------------------------------------------------- + +void AudioStrip::iRoutePressed() + { + //if(track->isMidiTrack() || (track->type() == Track::AUDIO_AUX) || (track->type() == Track::AUDIO_SOFTSYNTH)) + if(!track || track->isMidiTrack() || track->type() == Track::AUDIO_AUX) + { + //_isRoutingPopupMenuMaster = false; + gRoutingPopupMenuMaster = 0; + return; + } + + QPoint ppt = QCursor::pos(); + + //QPopupMenu* pup = new QPopupMenu(iR); + //PopupMenu* pup = new PopupMenu(iR); + //pup->setCheckable(true); + + PopupMenu* pup = muse->getRoutingPopupMenu(); + pup->disconnect(); + + AudioTrack* t = (AudioTrack*)track; + RouteList* irl = t->inRoutes(); + + int gid = 0; + //int n; + ///RouteMenuMap mm; + + // Routes can't be re-read until the message sent from msgAddRoute1() + // has had time to be sent and actually affected the routes. + ///_redisplay: + + //QPopupMenu* pup = new QPopupMenu(iR); + //RouteList* irl = t->inRoutes(); + + pup->clear(); + gRoutingMenuMap.clear(); + gid = 0; + + switch(track->type()) + { + case Track::AUDIO_INPUT: + { + pup->setCheckable(true); + //int gid = 0; + for(int i = 0; i < channel; ++i) + { + char buffer[128]; + snprintf(buffer, 128, "%s %d", tr("Channel").latin1(), i+1); + MenuTitleItem* titel = new MenuTitleItem(QString(buffer)); + //pup->insertItem(titel); ddskrjo + + if(!checkAudioDevice()) + { + ///delete pup; + gRoutingPopupMenuMaster = 0; + pup->clear(); + gRoutingMenuMap.clear(); + iR->setDown(false); + return; + } + std::list ol = audioDevice->outputPorts(); + for(std::list::iterator ip = ol.begin(); ip != ol.end(); ++ip) + { + int id = pup->insertItem(*ip, (gid * 16) + i); + //Route dst(*ip, true, i); + Route dst(*ip, true, i, Route::JACK_ROUTE); + gRoutingMenuMap.insert( pRouteMenuMap(id, dst) ); + ++gid; + for(iRoute ir = irl->begin(); ir != irl->end(); ++ir) + { + if(*ir == dst) + { + pup->setItemChecked(id, true); + break; + } + } + } + if(i+1 != channel) + pup->insertSeparator(); + } + } + break; + //case Track::AUDIO_OUTPUT: + //case Track::WAVE: + //case Track::AUDIO_GROUP: + + case Track::AUDIO_OUTPUT: + //gid = addWavePorts( iR, t, pup, gid, gRoutingMenuMap, -1, -1, false); + //gid = addInPorts( iR, t, pup, gid, gRoutingMenuMap, -1, -1, false); + //gid = addGroupPorts(iR, t, pup, gid, gRoutingMenuMap, -1, -1, false); + //gid = addAuxPorts( iR, t, pup, gid, gRoutingMenuMap, -1, -1, false); + gid = addWavePorts( t, pup, gid, gRoutingMenuMap, -1, -1, false); + gid = addInPorts( t, pup, gid, gRoutingMenuMap, -1, -1, false); + gid = addGroupPorts(t, pup, gid, gRoutingMenuMap, -1, -1, false); + gid = addAuxPorts( t, pup, gid, gRoutingMenuMap, -1, -1, false); + //gid = addSyntiPorts(iR, t, pup, gid, gRoutingMenuMap, -1, -1, false); + //gid = nonSyntiTrackAddSyntis(iR, t, pup, gid, gRoutingMenuMap, false); + //gid = nonSyntiTrackAddSyntis(this, iR, t, pup, gid, gRoutingMenuMap, false); + gid = nonSyntiTrackAddSyntis(t, pup, gid, gRoutingMenuMap, false); + break; + case Track::WAVE: + //gid = addInPorts( iR, t, pup, gid, gRoutingMenuMap, -1, -1, false); + gid = addInPorts( t, pup, gid, gRoutingMenuMap, -1, -1, false); + break; + case Track::AUDIO_GROUP: + //gid = addWavePorts( iR, t, pup, gid, gRoutingMenuMap, -1, -1, false); + //gid = addInPorts( iR, t, pup, gid, gRoutingMenuMap, -1, -1, false); + //gid = addGroupPorts(iR, t, pup, gid, gRoutingMenuMap, -1, -1, false); + gid = addWavePorts( t, pup, gid, gRoutingMenuMap, -1, -1, false); + gid = addInPorts( t, pup, gid, gRoutingMenuMap, -1, -1, false); + gid = addGroupPorts(t, pup, gid, gRoutingMenuMap, -1, -1, false); + //gid = addSyntiPorts(iR, t, pup, gid, gRoutingMenuMap, -1, -1, false); + //gid = nonSyntiTrackAddSyntis(iR, t, pup, gid, gRoutingMenuMap, false); + //gid = nonSyntiTrackAddSyntis(this, iR, t, pup, gid, gRoutingMenuMap, false); + gid = nonSyntiTrackAddSyntis(t, pup, gid, gRoutingMenuMap, false); + break; + + case Track::AUDIO_SOFTSYNTH: + //gid = addMultiChannelPorts(iR, t, pup, gid, gRoutingMenuMap, false); + //gid = addMultiChannelPorts(this, iR, t, pup, gid, gRoutingMenuMap, false); + gid = addMultiChannelPorts(t, pup, gid, gRoutingMenuMap, false); + break; + default: + ///delete pup; + gRoutingPopupMenuMaster = 0; + pup->clear(); + gRoutingMenuMap.clear(); + iR->setDown(false); + return; + } + + if(pup->count() == 0) + { + ///delete pup; + gRoutingPopupMenuMaster = 0; + gRoutingMenuMap.clear(); + iR->setDown(false); + return; + } + + gIsOutRoutingPopupMenu = false; + gRoutingPopupMenuMaster = this; + connect(pup, SIGNAL(activated(int)), SLOT(routingPopupMenuActivated(int))); + connect(pup, SIGNAL(aboutToHide()), muse, SLOT(routingPopupMenuAboutToHide())); + pup->popup(ppt, 0); + iR->setDown(false); + return; + + + + /* + //int n = pup->exec(QCursor::pos()); + // For some reason, after the first display, it won't redisplay at the same point if the menu is too high. + n = pup->exec(ppt, 0); + if(n != -1) + { + QString s(pup->text(n)); + + if(track->type() == Track::AUDIO_INPUT) + { + ///delete pup; + int chan = n & 0xf; + + Route srcRoute(s, false, -1, Route::JACK_ROUTE); + Route dstRoute(t, chan); + + srcRoute.channel = chan; + + iRoute iir = irl->begin(); + for(; iir != irl->end(); ++iir) + { + if(*iir == srcRoute) + break; + } + if(iir != irl->end()) + // disconnect + audio->msgRemoveRoute(srcRoute, dstRoute); + else + // connect + audio->msgAddRoute(srcRoute, dstRoute); + + audio->msgUpdateSoloStates(); + song->update(SC_ROUTE); + iR->setDown(false); // pup->exec() catches mouse release event + return; + + // p3.3.46 + ///goto _redisplay; + } + + iRouteMenuMap imm = mm.find(n); + if(imm == mm.end()) + { + delete pup; + iR->setDown(false); // pup->exec() catches mouse release event + return; + } + + //int chan = n >> 16; + //int chans = (chan >> 15) + 1; // Bit 31 MSB: Mono or stereo. + //chan &= 0xffff; + //int chan = imm->second.channel; + //int chans = imm->second.channels; + + //Route srcRoute(s, false, -1); + //Route srcRoute(s, false, -1, Route::TRACK_ROUTE); + Route &srcRoute = imm->second; + + //Route dstRoute(t, -1); + //Route dstRoute(t, chan, chans); + Route dstRoute(t, imm->second.channel, imm->second.channels); + //Route dstRoute(t, imm->second.channel); + dstRoute.remoteChannel = imm->second.remoteChannel; + + iRoute iir = irl->begin(); + for (; iir != irl->end(); ++iir) { + if (*iir == srcRoute) + break; + } + if (iir != irl->end()) { + // disconnect + audio->msgRemoveRoute(srcRoute, dstRoute); + } + else { + // connect + audio->msgAddRoute(srcRoute, dstRoute); + } + audio->msgUpdateSoloStates(); + song->update(SC_ROUTE); + + // p3.3.46 + //iR->setDown(false); // pup->exec() catches mouse release event + ///goto _redisplay; + + } + + delete pup; + iR->setDown(false); // pup->exec() catches mouse release event + */ + + } + +#if 0 +//--------------------------------------------------------- +// updateRouteMenus +//--------------------------------------------------------- + +void AudioStrip::updateRouteMenus() +{ + //if(!_isRoutingPopupMenuMaster || track->isMidiTrack() || (track->type() == Track::AUDIO_AUX)) + if(!track || gRoutingPopupMenuMaster != this || track->isMidiTrack()) + return; + + ///QPopupMenu* pup = new QPopupMenu(oR); + // p3.3.47 + //if(!orpup) + // return; + + //QPopupMenu* pup = muse->getORoutesPopup(); + PopupMenu* pup = muse->getRoutingPopupMenu(); + + if(pup->count() == 0) + return; + + //pup->setCheckable(true); + AudioTrack* t = (AudioTrack*)track; + RouteList* rl = gIsOutRoutingPopupMenu ? t->outRoutes() : t->inRoutes(); + + //int gid = 0; + //int n; + ///RouteMenuMap mm; + + //QPoint ppt = QCursor::pos(); + + + /* + iRoute iorl = orl->begin(); + for(; iorl != orl->end(); ++iorl) + { + iRouteMenuMap imm = ormm->begin(); + for(; imm != ormm->end(); ++imm) + { + if(*iorl == imm->second) + { + orpup->setItemChecked(imm->first, true); + break; + } + } + //if(imm == ormm->end()) + //{ + //} + + } + //if (iorl == orl->end()) + //{ + //} + */ + + iRouteMenuMap imm = gRoutingMenuMap.begin(); + for(; imm != gRoutingMenuMap.end(); ++imm) + { + bool found = false; + iRoute irl = rl->begin(); + for(; irl != rl->end(); ++irl) + { + if(*irl == imm->second) + { + found = true; + break; + } + } + pup->setItemChecked(imm->first, found); + } + + return; +} +#endif + +//--------------------------------------------------------- +// routingPopupMenuActivated +//--------------------------------------------------------- + +void AudioStrip::routingPopupMenuActivated(int n) +{ + if(!track || gRoutingPopupMenuMaster != this || track->isMidiTrack()) + return; + + PopupMenu* pup = muse->getRoutingPopupMenu(); + + //printf("AudioStrip::routingPopupMenuActivated n:%d count:%d\n", n, pup->count()); + + if(pup->count() == 0) + return; + + AudioTrack* t = (AudioTrack*)track; + RouteList* rl = gIsOutRoutingPopupMenu ? t->outRoutes() : t->inRoutes(); + + //QPoint ppt = QCursor::pos(); + + // p3.3.47 + if (n == -1) + { + //printf("AudioStrip::routingPopupMenuActivated n = -1\n"); + ///delete pup; + return; + } + else + //if(n == 0) + //{ + //printf("AudioStrip::routingPopupMenuActivated n = 0 = tearOffHandle\n"); + //oR->setDown(false); + // return; + //} + //else + { + if(gIsOutRoutingPopupMenu) + { + QString s(pup->text(n)); + + //printf("AudioStrip::routingPopupMenuActivated text:%s\n", s.latin1()); + + if(track->type() == Track::AUDIO_OUTPUT) + { + ///delete orpup; + + int chan = n & 0xf; + + //Route srcRoute(t, -1); + //Route srcRoute(t, chan, chans); + //Route srcRoute(t, chan, 1); + Route srcRoute(t, chan); + + //Route dstRoute(s, true, -1); + Route dstRoute(s, true, -1, Route::JACK_ROUTE); + //Route dstRoute(s, true, 0, Route::JACK_ROUTE); + + //srcRoute.channel = dstRoute.channel = chan; + dstRoute.channel = chan; + //dstRoute.channels = 1; + + // check if route src->dst exists: + iRoute irl = rl->begin(); + for (; irl != rl->end(); ++irl) { + if (*irl == dstRoute) + break; + } + if (irl != rl->end()) { + // disconnect if route exists + audio->msgRemoveRoute(srcRoute, dstRoute); + } + else { + // connect if route does not exist + audio->msgAddRoute(srcRoute, dstRoute); + } + audio->msgUpdateSoloStates(); + song->update(SC_ROUTE); + + // p3.3.47 + //pup->popup(ppt, 0); + + //oR->setDown(false); + return; + + // p3.3.46 + ///goto _redisplay; + } + + iRouteMenuMap imm = gRoutingMenuMap.find(n); + if(imm == gRoutingMenuMap.end()) + { + ///delete orpup; + //oR->setDown(false); // orpup->exec() catches mouse release event + return; + } + + //int chan = n >> 16; + //int chans = (chan >> 15) + 1; // Bit 31 MSB: Mono or stereo. + //chan &= 0xffff; + //int chan = imm->second.channel; + //int chans = imm->second.channels; + + //Route srcRoute(t, -1); + //srcRoute.remoteChannel = chan; + //Route srcRoute(t, chan, chans); + Route srcRoute(t, imm->second.channel, imm->second.channels); + //Route srcRoute(t, imm->second.channel); + srcRoute.remoteChannel = imm->second.remoteChannel; + + //Route dstRoute(s, true, -1); + //Route dstRoute(s, true, -1, Route::TRACK_ROUTE); + Route &dstRoute = imm->second; + + // check if route src->dst exists: + iRoute irl = rl->begin(); + for (; irl != rl->end(); ++irl) { + if (*irl == dstRoute) + break; + } + if (irl != rl->end()) { + // disconnect if route exists + audio->msgRemoveRoute(srcRoute, dstRoute); + } + else { + // connect if route does not exist + audio->msgAddRoute(srcRoute, dstRoute); + } + audio->msgUpdateSoloStates(); + song->update(SC_ROUTE); + + // p3.3.46 + //oR->setDown(false); + ///goto _redisplay; + + // p3.3.47 + //pup->popup(ppt, 0); + } + else + { + QString s(pup->text(n)); + + if(track->type() == Track::AUDIO_INPUT) + { + ///delete pup; + int chan = n & 0xf; + + Route srcRoute(s, false, -1, Route::JACK_ROUTE); + Route dstRoute(t, chan); + + srcRoute.channel = chan; + + iRoute irl = rl->begin(); + for(; irl != rl->end(); ++irl) + { + if(*irl == srcRoute) + break; + } + if(irl != rl->end()) + // disconnect + audio->msgRemoveRoute(srcRoute, dstRoute); + else + // connect + audio->msgAddRoute(srcRoute, dstRoute); + + audio->msgUpdateSoloStates(); + song->update(SC_ROUTE); + //iR->setDown(false); // pup->exec() catches mouse release event + return; + + // p3.3.46 + ///goto _redisplay; + } + + iRouteMenuMap imm = gRoutingMenuMap.find(n); + if(imm == gRoutingMenuMap.end()) + { + //delete pup; + //iR->setDown(false); // pup->exec() catches mouse release event + return; + } + + //int chan = n >> 16; + //int chans = (chan >> 15) + 1; // Bit 31 MSB: Mono or stereo. + //chan &= 0xffff; + //int chan = imm->second.channel; + //int chans = imm->second.channels; + + //Route srcRoute(s, false, -1); + //Route srcRoute(s, false, -1, Route::TRACK_ROUTE); + Route &srcRoute = imm->second; + + //Route dstRoute(t, -1); + //Route dstRoute(t, chan, chans); + Route dstRoute(t, imm->second.channel, imm->second.channels); + //Route dstRoute(t, imm->second.channel); + dstRoute.remoteChannel = imm->second.remoteChannel; + + iRoute irl = rl->begin(); + for (; irl != rl->end(); ++irl) { + if (*irl == srcRoute) + break; + } + if (irl != rl->end()) { + // disconnect + audio->msgRemoveRoute(srcRoute, dstRoute); + } + else { + // connect + audio->msgAddRoute(srcRoute, dstRoute); + } + audio->msgUpdateSoloStates(); + song->update(SC_ROUTE); + + // p3.3.46 + //iR->setDown(false); + ///goto _redisplay; + + } + + } + + ///delete pup; + //oR->setDown(false); +} + +//--------------------------------------------------------- +// oRoutePressed +//--------------------------------------------------------- + +void AudioStrip::oRoutePressed() +{ + if(!track || track->isMidiTrack()) + { + gRoutingPopupMenuMaster = 0; + return; + } + + QPoint ppt = QCursor::pos(); + + ///QPopupMenu* pup = new QPopupMenu(oR); + + PopupMenu* pup = muse->getRoutingPopupMenu(); + pup->disconnect(); + + //pup->setCheckable(true); + AudioTrack* t = (AudioTrack*)track; + RouteList* orl = t->outRoutes(); + + int gid = 0; + //int n; + ///RouteMenuMap mm; + + // Routes can't be re-read until the message sent from msgAddRoute1() + // has had time to be sent and actually affected the routes. +/// _redisplay: + + //QPopupMenu* pup = new QPopupMenu(oR); + //RouteList* orl = t->outRoutes(); + + pup->clear(); + gRoutingMenuMap.clear(); + gid = 0; + + // p3.3.47 + //orpup->insertTearOffHandle(gid); + //gid++; + + switch(track->type()) + { + case Track::AUDIO_OUTPUT: + { + pup->setCheckable(true); + //int gid = 0; + for(int i = 0; i < channel; ++i) + { + char buffer[128]; + snprintf(buffer, 128, "%s %d", tr("Channel").latin1(), i+1); + MenuTitleItem* titel = new MenuTitleItem(QString(buffer)); + //pup->insertItem(titel); ddskrjo + + if(!checkAudioDevice()) + { + ///delete pup; + gRoutingPopupMenuMaster = 0; + pup->clear(); + gRoutingMenuMap.clear(); + oR->setDown(false); + return; + } + std::list ol = audioDevice->inputPorts(); + for(std::list::iterator ip = ol.begin(); ip != ol.end(); ++ip) + { + int id = pup->insertItem(*ip, (gid * 16) + i); + //Route dst(*ip, true, i); + Route dst(*ip, true, i, Route::JACK_ROUTE); + gRoutingMenuMap.insert( pRouteMenuMap(id, dst) ); + ++gid; + for(iRoute ir = orl->begin(); ir != orl->end(); ++ir) + { + if(*ir == dst) + { + pup->setItemChecked(id, true); + break; + } + } + } + if(i+1 != channel) + pup->insertSeparator(); + } + } + break; + //case Track::AUDIO_INPUT: + //case Track::WAVE: + //case Track::AUDIO_GROUP: + + case Track::AUDIO_SOFTSYNTH: + //addOutPorts(t, pup, orl); + //addGroupPorts(t, pup, orl); + //gid = addMultiChannelPorts(oR, t, pup, gid, gRoutingMenuMap, true); + //gid = addMultiChannelPorts(this, oR, t, pup, gid, gRoutingMenuMap, true); + gid = addMultiChannelPorts(t, pup, gid, gRoutingMenuMap, true); + break; + + case Track::AUDIO_INPUT: + //gid = addWavePorts( oR, t, pup, gid, gRoutingMenuMap, -1, -1, true); + gid = addWavePorts( t, pup, gid, gRoutingMenuMap, -1, -1, true); + case Track::WAVE: + case Track::AUDIO_GROUP: + case Track::AUDIO_AUX: + //case Track::AUDIO_SOFTSYNTH: + //gid = addOutPorts( oR, t, pup, gid, gRoutingMenuMap, -1, -1, true); + //gid = addGroupPorts( oR, t, pup, gid, gRoutingMenuMap, -1, -1, true); + gid = addOutPorts( t, pup, gid, gRoutingMenuMap, -1, -1, true); + gid = addGroupPorts( t, pup, gid, gRoutingMenuMap, -1, -1, true); + //gid = addSyntiPorts( oR, t, pup, gid, gRoutingMenuMap, -1, -1, true); + //gid = nonSyntiTrackAddSyntis(oR, t, pup, gid, gRoutingMenuMap, true); + //gid = nonSyntiTrackAddSyntis(this, oR, t, pup, gid, gRoutingMenuMap, true); + gid = nonSyntiTrackAddSyntis(t, pup, gid, gRoutingMenuMap, true); + break; + //case Track::AUDIO_AUX: + //gid = addOutPorts( oR, t, pup, gid, gRoutingMenuMap, -1, -1, true); + // gid = addOutPorts( t, pup, gid, gRoutingMenuMap, -1, -1, true); + //break; + + default: + ///delete pup; + gRoutingPopupMenuMaster = 0; + pup->clear(); + gRoutingMenuMap.clear(); + oR->setDown(false); + return; + } + + if(pup->count() == 0) + { + ///delete pup; + gRoutingPopupMenuMaster = 0; + gRoutingMenuMap.clear(); + oR->setDown(false); + return; + } + + //int n = pup->exec(QCursor::pos()); + ///n = pup->exec(ppt); + gIsOutRoutingPopupMenu = true; + gRoutingPopupMenuMaster = this; + connect(pup, SIGNAL(activated(int)), SLOT(routingPopupMenuActivated(int))); + connect(pup, SIGNAL(aboutToHide()), muse, SLOT(routingPopupMenuAboutToHide())); + pup->popup(ppt, 0); + oR->setDown(false); + return; + + + /* + // p3.3.47 + if(n == 0) + { + printf("AudioStrip::oRoutePressed n = 0 = tearOffHandle\n"); + oR->setDown(false); // orpup->exec() catches mouse release event + return; + } + else + + if (n != -1) { + QString s(orpup->text(n)); + + if(track->type() == Track::AUDIO_OUTPUT) + { + delete orpup; + + int chan = n & 0xf; + + //Route srcRoute(t, -1); + //Route srcRoute(t, chan, chans); + //Route srcRoute(t, chan, 1); + Route srcRoute(t, chan); + + //Route dstRoute(s, true, -1); + Route dstRoute(s, true, -1, Route::JACK_ROUTE); + //Route dstRoute(s, true, 0, Route::JACK_ROUTE); + + //srcRoute.channel = dstRoute.channel = chan; + dstRoute.channel = chan; + //dstRoute.channels = 1; + + // check if route src->dst exists: + iRoute iorl = orl->begin(); + for (; iorl != orl->end(); ++iorl) { + if (*iorl == dstRoute) + break; + } + if (iorl != orl->end()) { + // disconnect if route exists + audio->msgRemoveRoute(srcRoute, dstRoute); + } + else { + // connect if route does not exist + audio->msgAddRoute(srcRoute, dstRoute); + } + audio->msgUpdateSoloStates(); + song->update(SC_ROUTE); + + oR->setDown(false); // orpup->exec() catches mouse release event + return; + + // p3.3.46 + ///goto _redisplay; + } + + iRouteMenuMap imm = ormm.find(n); + if(imm == ormm.end()) + { + delete orpup; + oR->setDown(false); // orpup->exec() catches mouse release event + return; + } + + //int chan = n >> 16; + //int chans = (chan >> 15) + 1; // Bit 31 MSB: Mono or stereo. + //chan &= 0xffff; + //int chan = imm->second.channel; + //int chans = imm->second.channels; + + //Route srcRoute(t, -1); + //srcRoute.remoteChannel = chan; + //Route srcRoute(t, chan, chans); + Route srcRoute(t, imm->second.channel, imm->second.channels); + //Route srcRoute(t, imm->second.channel); + srcRoute.remoteChannel = imm->second.remoteChannel; + + //Route dstRoute(s, true, -1); + //Route dstRoute(s, true, -1, Route::TRACK_ROUTE); + Route &dstRoute = imm->second; + + // check if route src->dst exists: + iRoute iorl = orl->begin(); + for (; iorl != orl->end(); ++iorl) { + if (*iorl == dstRoute) + break; + } + if (iorl != orl->end()) { + // disconnect if route exists + audio->msgRemoveRoute(srcRoute, dstRoute); + } + else { + // connect if route does not exist + audio->msgAddRoute(srcRoute, dstRoute); + } + audio->msgUpdateSoloStates(); + song->update(SC_ROUTE); + + // p3.3.46 + //oR->setDown(false); // orpup->exec() catches mouse release event + ///goto _redisplay; + + } + + delete orpup; + oR->setDown(false); // pup->exec() catches mouse release event + */ +} + +/* +//--------------------------------------------------------- +// iRoutePressed +//--------------------------------------------------------- + +void AudioStrip::iRoutePressed() + { + QPopupMenu* pup = new QPopupMenu(iR); + pup->setCheckable(true); + AudioTrack* t = (AudioTrack*)track; + RouteList* irl = t->inRoutes(); + + switch(track->type()) { + case Track::MIDI: + case Track::DRUM: + case Track::AUDIO_AUX: + case Track::AUDIO_SOFTSYNTH: + delete pup; + return; + case Track::AUDIO_INPUT: + { + int gid = 0; + for (int i = 0; i < channel; ++i) { + char buffer[128]; + snprintf(buffer, 128, "%s %d", tr("Channel").latin1(), i+1); + MenuTitleItem* titel = new MenuTitleItem(QString(buffer)); + pup->insertItem(titel); + + if (!checkAudioDevice()) return; + std::list ol = audioDevice->outputPorts(); + for (std::list::iterator ip = ol.begin(); ip != ol.end(); ++ip) { + int id = pup->insertItem(*ip, (gid * 16) + i); + //Route dst(*ip, true, i); + Route dst(*ip, true, i, Route::JACK_ROUTE); + ++gid; + for (iRoute ir = irl->begin(); ir != irl->end(); ++ir) { + if (*ir == dst) { + pup->setItemChecked(id, true); + break; + } + } + } + if (i+1 != channel) + pup->insertSeparator(); + } + } + break; + case Track::AUDIO_OUTPUT: + addWavePorts(t, pup, irl); + addInPorts(t, pup, irl); + addGroupPorts(t, pup, irl); + addAuxPorts(t, pup, irl); + addSyntiPorts(t, pup, irl); + break; + case Track::WAVE: + addInPorts(t, pup, irl); + break; + case Track::AUDIO_GROUP: + addWavePorts(t, pup, irl); + addInPorts(t, pup, irl); + addGroupPorts(t, pup, irl); + addSyntiPorts(t, pup, irl); + break; + } + int n = pup->exec(QCursor::pos()); + if (n != -1) { + QString s(pup->text(n)); + + //Route srcRoute(s, false, -1); + Route srcRoute(s, false, -1, (track->type() == Track::AUDIO_INPUT) ? Route::JACK_ROUTE : Route::TRACK_ROUTE); + Route dstRoute(t, -1); + + if (track->type() == Track::AUDIO_INPUT) + srcRoute.channel = dstRoute.channel = n & 0xf; + iRoute iir = irl->begin(); + for (; iir != irl->end(); ++iir) { + if (*iir == srcRoute) + break; + } + if (iir != irl->end()) { + // disconnect + audio->msgRemoveRoute(srcRoute, dstRoute); + } + else { + // connect + audio->msgAddRoute(srcRoute, dstRoute); + } + audio->msgUpdateSoloStates(); + song->update(SC_ROUTE); + } + delete pup; + iR->setDown(false); // pup->exec() catches mouse release event + } +*/ + +/* +//--------------------------------------------------------- +// oRoutePressed +//--------------------------------------------------------- + +void AudioStrip::oRoutePressed() + { + QPopupMenu* pup = new QPopupMenu(oR); + pup->setCheckable(true); + AudioTrack* t = (AudioTrack*)track; + RouteList* orl = t->outRoutes(); + + switch(track->type()) { + case Track::MIDI: + case Track::DRUM: + delete pup; + return; + case Track::AUDIO_OUTPUT: + { + int gid = 0; + for (int i = 0; i < channel; ++i) { + char buffer[128]; + snprintf(buffer, 128, "%s %d", tr("Channel").latin1(), i+1); + MenuTitleItem* titel = new MenuTitleItem(QString(buffer)); + pup->insertItem(titel); + + if (!checkAudioDevice()) return; + std::list ol = audioDevice->inputPorts(); + for (std::list::iterator ip = ol.begin(); ip != ol.end(); ++ip) { + int id = pup->insertItem(*ip, (gid * 16) + i); + //Route dst(*ip, true, i); + Route dst(*ip, true, i, Route::JACK_ROUTE); + ++gid; + for (iRoute ir = orl->begin(); ir != orl->end(); ++ir) { + if (*ir == dst) { + pup->setItemChecked(id, true); + break; + } + } + } + if (i+1 != channel) + pup->insertSeparator(); + } + } + break; + case Track::AUDIO_INPUT: + addWavePorts(t, pup, orl); + case Track::WAVE: + case Track::AUDIO_GROUP: + case Track::AUDIO_SOFTSYNTH: + addOutPorts(t, pup, orl); + addGroupPorts(t, pup, orl); + break; + case Track::AUDIO_AUX: + addOutPorts(t, pup, orl); + break; + } + int n = pup->exec(QCursor::pos()); + if (n != -1) { + QString s(pup->text(n)); + Route srcRoute(t, -1); + //Route dstRoute(s, true, -1); + Route dstRoute(s, true, -1, (track->type() == Track::AUDIO_OUTPUT) ? Route::JACK_ROUTE : Route::TRACK_ROUTE); + + if (track->type() == Track::AUDIO_OUTPUT) + srcRoute.channel = dstRoute.channel = n & 0xf; + + // check if route src->dst exists: + iRoute iorl = orl->begin(); + for (; iorl != orl->end(); ++iorl) { + if (*iorl == dstRoute) + break; + } + if (iorl != orl->end()) { + // disconnect if route exists + audio->msgRemoveRoute(srcRoute, dstRoute); + } + else { + // connect if route does not exist + audio->msgAddRoute(srcRoute, dstRoute); + } + audio->msgUpdateSoloStates(); + song->update(SC_ROUTE); + } + delete pup; + oR->setDown(false); // pup->exec() catches mouse release event + } +*/ diff --git a/muse2/muse/mixer/astrip.h b/muse2/muse/mixer/astrip.h new file mode 100644 index 00000000..82662b2b --- /dev/null +++ b/muse2/muse/mixer/astrip.h @@ -0,0 +1,97 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: astrip.h,v 1.8.2.6 2009/11/14 03:37:48 terminator356 Exp $ +// +// (C) Copyright 2000-2004 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __ASTRIP_H__ +#define __ASTRIP_H__ + +#include + +#include "strip.h" +#include "route.h" + +class Slider; +class Knob; +class QDialog; +class QToolButton; +//class QPopupMenu; +class PopupMenu; +class QButton; +class TransparentToolButton; +class AudioTrack; +class DoubleLabel; + +//--------------------------------------------------------- +// AudioStrip +//--------------------------------------------------------- + +class AudioStrip : public Strip { + Q_OBJECT + + int channel; + Slider* slider; + DoubleLabel* sl; + + Knob* pan; + DoubleLabel* panl; + + std::vector auxKnob; + std::vector auxLabel; + + QToolButton* stereo; + QToolButton* pre; + TransparentToolButton* off; + + double volume; + double panVal; + + //QToolButton* iR; + //QToolButton* oR; + + Knob* addKnob(int, int, DoubleLabel**); + + void updateOffState(); + void updateVolume(); + void updatePan(); + void updateChannels(); + //void updateRouteMenus(); + + private slots: + void stereoToggled(bool); + void preToggled(bool); + void offToggled(bool); + void iRoutePressed(); + void oRoutePressed(); + void routingPopupMenuActivated(int /*id*/); + void auxChanged(double, int); + void volumeChanged(double); + void volumePressed(); + void volumeReleased(); + void panChanged(double); + void panPressed(); + void panReleased(); + void volLabelChanged(double); + void panLabelChanged(double); + void auxLabelChanged(double, unsigned int); + void volumeRightClicked(const QPoint &); + void panRightClicked(const QPoint &); + + protected slots: + virtual void heartBeat(); + + public slots: + virtual void configChanged(); + virtual void songChanged(int); + + public: + AudioStrip(QWidget* parent, AudioTrack*); + ~AudioStrip(); + virtual QSize minimumSizeHint () const; + }; + +#endif + diff --git a/muse2/muse/mixer/auxknob.cpp b/muse2/muse/mixer/auxknob.cpp new file mode 100644 index 00000000..a64f3929 --- /dev/null +++ b/muse2/muse/mixer/auxknob.cpp @@ -0,0 +1,40 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: auxknob.cpp,v 1.7 2004/07/11 16:26:46 wschweer Exp $ +// +// (C) Copyright 2000-2004 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include "auxknob.h" +#include "gconfig.h" + +//--------------------------------------------------------- +// Aux +//--------------------------------------------------------- + +AuxKnob::AuxKnob(QWidget* parent, int i) + : Knob(parent, "aux") + { + idx = i; + setRange(config.minSlider-0.1, 10.0); + connect(this, SIGNAL(valueChanged(double,int)), SLOT(valueChanged(double))); + } + +//--------------------------------------------------------- +// panChanged +//--------------------------------------------------------- + +void AuxKnob::valueChanged(double val) + { + double vol; + if (val <= config.minSlider) { + vol = 0.0; + val -= 1.0; // display special value "off" + } + else + vol = pow(10.0, val/20.0); + emit auxChanged(idx, vol); + } + diff --git a/muse2/muse/mixer/auxknob.h b/muse2/muse/mixer/auxknob.h new file mode 100644 index 00000000..c2b8ec7a --- /dev/null +++ b/muse2/muse/mixer/auxknob.h @@ -0,0 +1,33 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: auxknob.h,v 1.3 2003/11/08 15:10:18 wschweer Exp $ +// +// (C) Copyright 2000 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __AUXKNOB_H__ +#define __AUXKNOB_H__ + +#include "knob.h" + +//--------------------------------------------------------- +// AuxKnob +//--------------------------------------------------------- + +class AuxKnob : public Knob { + Q_OBJECT + int idx; + + private slots: + void valueChanged(double v); + + signals: + void auxChanged(int, double); + + public: + AuxKnob(QWidget* parent, int idx); + }; + +#endif + diff --git a/muse2/muse/mixer/meter.cpp b/muse2/muse/mixer/meter.cpp new file mode 100644 index 00000000..14b20a18 --- /dev/null +++ b/muse2/muse/mixer/meter.cpp @@ -0,0 +1,184 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: meter.cpp,v 1.4.2.2 2009/05/03 04:14:00 terminator356 Exp $ +// +// (C) Copyright 2000 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include +#include +//Added by qt3to4: +#include +#include +#include + +#include "meter.h" +#include "gconfig.h" +#include "fastlog.h" + +//--------------------------------------------------------- +// Meter +//--------------------------------------------------------- + +Meter::Meter(QWidget* parent, MeterType type) + : Q3Frame(parent, "", Qt::WNoAutoErase) + { + mtype = type; + overflow = false; + val = 0.0; + maxVal = 0.0; + minScale = mtype == DBMeter ? config.minMeter : 0.0; // min value in dB or int + maxScale = mtype == DBMeter ? 10.0 : 127.0; + yellowScale = -10; + redScale = 0; + setLineWidth(0); + setMidLineWidth(0); + } + +//--------------------------------------------------------- +// setVal +//--------------------------------------------------------- + +//void Meter::setVal(int v, int max, bool ovl) +void Meter::setVal(double v, double max, bool ovl) + { + overflow = ovl; + bool ud = false; + + if(mtype == DBMeter) + { + double minScaleLin = pow(10.0, minScale/20.0); + if((v >= minScaleLin && val != v) || val >= minScaleLin) + { + val = v; + ud = true; + } + } + else + { + if(val != v) + { + val = v; + ud = true; + } + } + + if(maxVal != max) + { + maxVal = max; + ud = true; + } + + if(ud) + update(); + } +//--------------------------------------------------------- +// resetPeaks +// reset peak and overflow indicator +//--------------------------------------------------------- + +void Meter::resetPeaks() + { + maxVal = val; + overflow = val > 0.0; + update(); + } + +//--------------------------------------------------------- +// setRange +//--------------------------------------------------------- + +void Meter::setRange(double min, double max) + { + minScale = min; + maxScale = max; + drawVU(width(), height()); + update(); + } + +//--------------------------------------------------------- +// paintEvent +//--------------------------------------------------------- + +void Meter::drawContents(QPainter* p) + { + double range = maxScale - minScale; + + int fw = frameWidth(); + int h = height() - 2* fw; + int yv; + if(mtype == DBMeter) + yv = val == 0 ? h : int(((maxScale - (fast_log10(val) * 20.0)) * h)/range); + else + yv = val == 0 ? h : int(((maxScale - val) * h)/range); + + bitBlt(this, fw, fw, &bgPm, 0, 0, -1, yv, true); // CopyROP, true); ddskrjo + bitBlt(this, fw, fw+yv, &fgPm, 0, yv, -1, h-yv, true); //CopyROP, true); ddskrjo + + int ymax; + if(mtype == DBMeter) + ymax = maxVal == 0 ? 0 : int(((maxScale - (fast_log10(maxVal) * 20.0)) * h)/range); + else + ymax = maxVal == 0 ? 0 : int(((maxScale - maxVal) * h)/range); + p->setPen(Qt::white); + p->drawLine(0, ymax, width()-2*fw, ymax); + } + +//--------------------------------------------------------- +// drawVU +//--------------------------------------------------------- + +void Meter::drawVU(int w, int h) + { + double range = maxScale - minScale; + int fw = frameWidth(); + w -= 2*fw; + h -= 2*fw; + bgPm.resize(w, h); + fgPm.resize(w, h); + + QPainter p1(&fgPm); + QPainter p2(&bgPm); + + if(mtype == LinMeter) + { + p1.fillRect(0, 0, w, h, QBrush(0x00ff00)); // green + p2.fillRect(0, 0, w, h, QBrush(0x007000)); // green + } + else + { + int y1 = int((maxScale - redScale) * h / range); + int y2 = int((maxScale - yellowScale) * h / range); + int y3 = h; + p1.fillRect(0, 0, w, y1, QBrush(0xff0000)); // red + p1.fillRect(0, y1, w, y2-y1, QBrush(0xffff00)); // yellow + p1.fillRect(0, y2, w, y3-y2, QBrush(0x00ff00)); // green + + p2.fillRect(0, 0, w, y1, QBrush(0x8e0000)); // red + p2.fillRect(0, y1, w, y2-y1, QBrush(0x8e8e00)); // yellow + p2.fillRect(0, y2, w, y3-y2, QBrush(0x007000)); // green + } + } + +//--------------------------------------------------------- +// resizeEvent +//--------------------------------------------------------- + +void Meter::resizeEvent(QResizeEvent* ev) + { + int h = ev->size().height(); + int w = ev->size().width(); + drawVU(w, h); + } + +//--------------------------------------------------------- +// mousePressEvent +//--------------------------------------------------------- + +void Meter::mousePressEvent(QMouseEvent*) + { + emit mousePress(); + } + diff --git a/muse2/muse/mixer/meter.h b/muse2/muse/mixer/meter.h new file mode 100644 index 00000000..fc447147 --- /dev/null +++ b/muse2/muse/mixer/meter.h @@ -0,0 +1,52 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: meter.h,v 1.1.1.1.2.2 2009/05/03 04:14:00 terminator356 Exp $ +// +// (C) Copyright 2000 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __METER_H__ +#define __METER_H__ + +#include +#include +//Added by qt3to4: +#include +#include + +class Meter : public Q3Frame { + public: + enum MeterType {DBMeter, LinMeter}; + private: + MeterType mtype; + bool overflow; + double val; + double maxVal; + double minScale, maxScale; + int yellowScale, redScale; + + QPixmap bgPm; + QPixmap fgPm; // for double buffering + + void drawVU(int w, int h); + + Q_OBJECT + virtual void drawContents(QPainter* p); + virtual void resizeEvent(QResizeEvent*); + virtual void mousePressEvent(QMouseEvent*); + + public slots: + void resetPeaks(); + //void setVal(int, int, bool); + void setVal(double, double, bool); + + signals: + void mousePress(); + + public: + Meter(QWidget* parent, MeterType type = DBMeter); + void setRange(double min, double max); + }; +#endif + diff --git a/muse2/muse/mixer/midiportroutebase.ui b/muse2/muse/mixer/midiportroutebase.ui new file mode 100644 index 00000000..d3b411e3 --- /dev/null +++ b/muse2/muse/mixer/midiportroutebase.ui @@ -0,0 +1,85 @@ + +MidiPortRouteBase + + + MidiPortRouteBase + + + + 0 + 0 + 600 + 461 + + + + MusE: Midi Port Routing + + + + unnamed + + + + label + + + + 5 + 0 + 0 + 0 + + + + + 179 + 190 + 182 + + + + + 11 + 1 + + + + Box + + + 1 + + + 1 + + + 1 + + + Port 2 + + + AlignCenter + + + + + groupBox3 + + + Output + + + + + groupBox4 + + + Input + + + + + + diff --git a/muse2/muse/mixer/mstrip.cpp b/muse2/muse/mixer/mstrip.cpp new file mode 100644 index 00000000..10d9ddf4 --- /dev/null +++ b/muse2/muse/mixer/mstrip.cpp @@ -0,0 +1,1216 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: mstrip.cpp,v 1.9.2.13 2009/11/14 03:37:48 terminator356 Exp $ +// +// (C) Copyright 2000-2004 Werner Schweer (ws@seh.de) +//========================================================= + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +//#include +#include +//Added by qt3to4: +#include +#include + +#include +#include "app.h" +#include "midi.h" +#include "midictrl.h" +#include "mstrip.h" +#include "midiport.h" +#include "globals.h" +#include "audio.h" +#include "song.h" +#include "slider.h" +#include "knob.h" +#include "combobox.h" +#include "meter.h" +#include "track.h" +#include "doublelabel.h" +#include "rack.h" +#include "node.h" +#include "amixer.h" +#include "icons.h" +#include "gconfig.h" +#include "ttoolbutton.h" +//#include "utils.h" +#include "popupmenu.h" + +enum { KNOB_PAN, KNOB_VAR_SEND, KNOB_REV_SEND, KNOB_CHO_SEND }; + +//--------------------------------------------------------- +// addKnob +//--------------------------------------------------------- + +void MidiStrip::addKnob(int idx, const QString& tt, const QString& label, + const char* slot, bool enabled) + { + int ctl = CTRL_PANPOT, mn, mx, v; + int chan = ((MidiTrack*)track)->outChannel(); + switch(idx) + { + //case KNOB_PAN: + // ctl = CTRL_PANPOT; + //break; + case KNOB_VAR_SEND: + ctl = CTRL_VARIATION_SEND; + break; + case KNOB_REV_SEND: + ctl = CTRL_REVERB_SEND; + break; + case KNOB_CHO_SEND: + ctl = CTRL_CHORUS_SEND; + break; + } + MidiPort* mp = &midiPorts[((MidiTrack*)track)->outPort()]; + MidiController* mc = mp->midiController(ctl); + mn = mc->minVal(); + mx = mc->maxVal(); + + Knob* knob = new Knob(this); + knob->setRange(double(mn), double(mx), 1.0); + knob->setId(ctl); + + controller[idx].knob = knob; + knob->setFixedWidth(STRIP_WIDTH/2-3); + knob->setFixedHeight(30); + knob->setBackgroundMode(Qt::PaletteMid); + QToolTip::add(knob, tt); + knob->setEnabled(enabled); + + DoubleLabel* dl = new DoubleLabel(0.0, double(mn), double(mx), this); + dl->setId(idx); + dl->setSpecialText(tr("off")); + QToolTip::add(dl, tr("double click on/off")); + controller[idx].dl = dl; + dl->setFont(config.fonts[1]); + dl->setBackgroundMode(Qt::PaletteMid); + dl->setFrame(true); + dl->setPrecision(0); + dl->setFixedWidth(STRIP_WIDTH/2); + dl->setFixedHeight(15); + dl->setEnabled(enabled); + + double dlv; + v = mp->hwCtrlState(chan, ctl); + if(v == CTRL_VAL_UNKNOWN) + { + //v = mc->initVal(); + //if(v == CTRL_VAL_UNKNOWN) + // v = 0; +// v = mn - 1; + int lastv = mp->lastValidHWCtrlState(chan, ctl); + if(lastv == CTRL_VAL_UNKNOWN) + { + if(mc->initVal() == CTRL_VAL_UNKNOWN) + v = 0; + else + v = mc->initVal(); + } + else + v = lastv - mc->bias(); + //dlv = mn - 1; + dlv = dl->off() - 1.0; + } + else + { + // Auto bias... + v -= mc->bias(); + dlv = double(v); + } + + knob->setValue(double(v)); + dl->setValue(dlv); + //} + //else + // knob->setRange(0.0, 127.0); + + QLabel* lb = new QLabel(label, this); + controller[idx].lb = lb; + lb->setFont(config.fonts[1]); + lb->setFixedWidth(STRIP_WIDTH/2-3); + lb->setAlignment(Qt::AlignCenter); + lb->setFixedHeight(15); + lb->setEnabled(enabled); + + Q3GridLayout* grid = new Q3GridLayout(0, 2, 2, 0, 0, "grid"); + grid->setMargin(2); + grid->addWidget(lb, 0, 0); + grid->addWidget(dl, 1, 0); + grid->addMultiCellWidget(knob, 0, 1, 1, 1); + layout->addLayout(grid); + + connect(knob, SIGNAL(sliderMoved(double,int)), slot); + connect(knob, SIGNAL(sliderRightClicked(const QPoint &, int)), SLOT(controlRightClicked(const QPoint &, int))); + connect(dl, SIGNAL(valueChanged(double, int)), slot); + connect(dl, SIGNAL(doubleClicked(int)), SLOT(labelDoubleClicked(int))); + } + +//--------------------------------------------------------- +// MidiStrip +//--------------------------------------------------------- + +MidiStrip::MidiStrip(QWidget* parent, MidiTrack* t) + : Strip(parent, t) + { + inHeartBeat = true; + + // Clear so the meters don't start off by showing stale values. + t->setActivity(0); + t->setLastActivity(0); + + volume = CTRL_VAL_UNKNOWN; + pan = CTRL_VAL_UNKNOWN; + variSend = CTRL_VAL_UNKNOWN; + chorusSend = CTRL_VAL_UNKNOWN; + reverbSend = CTRL_VAL_UNKNOWN; + + addKnob(KNOB_VAR_SEND, tr("VariationSend"), tr("Var"), SLOT(setVariSend(double)), false); + addKnob(KNOB_REV_SEND, tr("ReverbSend"), tr("Rev"), SLOT(setReverbSend(double)), false); + addKnob(KNOB_CHO_SEND, tr("ChorusSend"), tr("Cho"), SLOT(setChorusSend(double)), false); + int auxsSize = song->auxs()->size(); + if (auxsSize) + layout->addSpacing((STRIP_WIDTH/2 + 1) * auxsSize); + + //--------------------------------------------------- + // slider, label, meter + //--------------------------------------------------- + + MidiPort* mp = &midiPorts[t->outPort()]; + MidiController* mc = mp->midiController(CTRL_VOLUME); + int chan = t->outChannel(); + int mn = mc->minVal(); + int mx = mc->maxVal(); + + slider = new Slider(this, "vol", Qt::Vertical, Slider::None, + Slider::BgTrough | Slider::BgSlot); + slider->setCursorHoming(true); + slider->setRange(double(mn), double(mx), 1.0); + slider->setFixedWidth(20); + slider->setFont(config.fonts[1]); + slider->setId(CTRL_VOLUME); + + meter[0] = new Meter(this, Meter::LinMeter); + meter[0]->setRange(0, 127.0); + meter[0]->setFixedWidth(15); + connect(meter[0], SIGNAL(mousePress()), this, SLOT(resetPeaks())); + sliderGrid = new Q3GridLayout(this); // ddskrjo this + sliderGrid->setRowStretch(0, 100); + sliderGrid->addWidget(slider, 0, 0, Qt::AlignRight); + sliderGrid->addWidget(meter[0], 0, 1, Qt::AlignLeft); + layout->addLayout(sliderGrid); + + sl = new DoubleLabel(0.0, -98.0, 0.0, this); + sl->setFont(config.fonts[1]); + sl->setBackgroundMode(Qt::PaletteMid); + sl->setSpecialText(tr("off")); + sl->setSuffix(tr("dB")); + QToolTip::add(sl, tr("double click on/off")); + sl->setFrame(true); + sl->setPrecision(0); + sl->setFixedWidth(STRIP_WIDTH); + // Set the label's slider 'buddy'. + sl->setSlider(slider); + + double dlv; + int v = mp->hwCtrlState(chan, CTRL_VOLUME); + if(v == CTRL_VAL_UNKNOWN) + { + int lastv = mp->lastValidHWCtrlState(chan, CTRL_VOLUME); + if(lastv == CTRL_VAL_UNKNOWN) + { + if(mc->initVal() == CTRL_VAL_UNKNOWN) + v = 0; + else + v = mc->initVal(); + } + else + v = lastv - mc->bias(); + dlv = sl->off() - 1.0; + } + else + { + if(v == 0) + dlv = sl->minValue() - 0.5 * (sl->minValue() - sl->off()); + else + { + dlv = -fast_log10(float(127*127)/float(v*v))*20.0; + if(dlv > sl->maxValue()) + dlv = sl->maxValue(); + } + // Auto bias... + v -= mc->bias(); + } + slider->setValue(double(v)); + sl->setValue(dlv); + + +// connect(sl, SIGNAL(valueChanged(double,int)), slider, SLOT(setValue(double))); +// connect(slider, SIGNAL(valueChanged(double,int)), sl, SLOT(setValue(double))); + connect(slider, SIGNAL(sliderMoved(double,int)), SLOT(setVolume(double))); + connect(slider, SIGNAL(sliderRightClicked(const QPoint &, int)), SLOT(controlRightClicked(const QPoint &, int))); + connect(sl, SIGNAL(valueChanged(double, int)), SLOT(volLabelChanged(double))); + connect(sl, SIGNAL(doubleClicked(int)), SLOT(labelDoubleClicked(int))); + + layout->addWidget(sl); + + //--------------------------------------------------- + // pan, balance + //--------------------------------------------------- + + addKnob(KNOB_PAN, tr("Pan/Balance"), tr("Pan"), SLOT(setPan(double)), true); + + updateControls(); + + //--------------------------------------------------- + // mute, solo + // or + // record, mixdownfile + //--------------------------------------------------- + + record = new TransparentToolButton(this); + record->setBackgroundMode(Qt::PaletteMid); + record->setToggleButton(true); + + //record->setFixedWidth(STRIP_WIDTH/2); + //record->setSizePolicy(QSizePolicy(QSizePolicy::Ignored, QSizePolicy::Minimum)); + record->setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum)); + + QIcon iconSet; + iconSet.setPixmap(*record_on_Icon, QIcon::Automatic, QIcon::Normal, QIcon::On); + iconSet.setPixmap(*record_off_Icon, QIcon::Automatic, QIcon::Normal, QIcon::Off); + record->setIconSet(iconSet); + QToolTip::add(record, tr("record")); + record->setOn(track->recordFlag()); + connect(record, SIGNAL(toggled(bool)), SLOT(recordToggled(bool))); + + mute = new QToolButton(this); + QIcon muteSet; + muteSet.setPixmap(*muteIconOn, QIcon::Automatic, QIcon::Normal, QIcon::Off); + muteSet.setPixmap(*muteIconOff, QIcon::Automatic, QIcon::Normal, QIcon::On); + mute->setIconSet(muteSet); + mute->setToggleButton(true); + QToolTip::add(mute, tr("mute")); + mute->setOn(track->mute()); + mute->setFixedWidth(STRIP_WIDTH/2); + connect(mute, SIGNAL(toggled(bool)), SLOT(muteToggled(bool))); + + solo = new QToolButton(this); + + if((bool)t->internalSolo()) + { + solo->setIconSet(*soloIconSet2); + useSoloIconSet2 = true; + } + else + { + solo->setIconSet(*soloIconSet1); + useSoloIconSet2 = false; + } + + //QToolTip::add(solo, tr("pre fader listening")); + QToolTip::add(solo, tr("solo mode")); + solo->setToggleButton(true); + solo->setOn(t->solo()); + solo->setFixedWidth(STRIP_WIDTH/2); + connect(solo, SIGNAL(toggled(bool)), SLOT(soloToggled(bool))); + + Q3HBoxLayout* smBox1 = new Q3HBoxLayout(0); + Q3HBoxLayout* smBox2 = new Q3HBoxLayout(0); + + smBox2->addWidget(mute); + smBox2->addWidget(solo); + + // Changed by Tim. p3.3.21 + //QToolTip::add(record, tr("record")); + //smBox1->addStretch(100); + //smBox1->addWidget(record); + QLabel* dev_ch_label = new QLabel(this); + dev_ch_label->setMinimumWidth(STRIP_WIDTH/2); + //dev_ch_label->setSizePolicy(QSizePolicy(QSizePolicy::Ignored, QSizePolicy::Minimum)); + dev_ch_label->setSizePolicy(QSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Minimum)); + dev_ch_label->setAlignment(Qt::AlignCenter); + int port = t->outPort(); + int channel = t->outChannel(); + QString dcs; + dcs.sprintf("%d-%d", port + 1, channel + 1); + dev_ch_label->setText(dcs); + //dev_ch_label->setBackgroundColor(QColor(0, 160, 255)); // Med blue + //dev_ch_label->setFont(config.fonts[6]); + dev_ch_label->setFont(config.fonts[1]); + // Dealing with a horizontally constrained label. Ignore vertical. Use a minimum readable point size. + //autoAdjustFontSize(dev_ch_label, dev_ch_label->text(), false, true, config.fonts[6].pointSize(), 5); + QToolTip::add(dev_ch_label, tr("output port and channel")); + smBox1->addWidget(dev_ch_label); + smBox1->addWidget(record); + + layout->addLayout(smBox1); + layout->addLayout(smBox2); + + //--------------------------------------------------- + // routing + //--------------------------------------------------- + + // p3.3.38 + //route = new QToolButton(this); + //route->setFont(config.fonts[1]); + //route->setFixedWidth(STRIP_WIDTH); + //route->setText(tr("Route")); + //QToolTip::add(route, tr("set routing")); + //layout->addWidget(route); + Q3HBoxLayout* rBox = new Q3HBoxLayout(0); + iR = new QToolButton(this); + iR->setFont(config.fonts[1]); + iR->setFixedWidth((STRIP_WIDTH-4)/2); + iR->setText(tr("iR")); + iR->setToggleButton(false); + QToolTip::add(iR, tr("input routing")); + rBox->addWidget(iR); + connect(iR, SIGNAL(pressed()), SLOT(iRoutePressed())); + oR = new QToolButton(this); + oR->setFont(config.fonts[1]); + oR->setFixedWidth((STRIP_WIDTH-4)/2); + oR->setText(tr("oR")); + oR->setToggleButton(false); + // TODO: Works OK, but disabled for now, until we figure out what to do about multiple out routes and display values... + oR->setEnabled(false); + QToolTip::add(oR, tr("output routing")); + rBox->addWidget(oR); + connect(oR, SIGNAL(pressed()), SLOT(oRoutePressed())); + layout->addLayout(rBox); + + //--------------------------------------------------- + // automation mode + //--------------------------------------------------- + + autoType = new ComboBox(this); + autoType->setFont(config.fonts[1]); + autoType->setFixedWidth(STRIP_WIDTH-4); + autoType->setEnabled(false); + // Removed by T356. + // Disabled for now. There is no midi automation mechanism yet... + //autoType->insertItem(tr("Off"), AUTO_OFF); + //autoType->insertItem(tr("Read"), AUTO_READ); + //autoType->insertItem(tr("Touch"), AUTO_TOUCH); + //autoType->insertItem(tr("Write"), AUTO_WRITE); + //autoType->setCurrentItem(t->automationType()); + //QToolTip::add(autoType, tr("automation type")); + //connect(autoType, SIGNAL(activated(int,int)), SLOT(setAutomationType(int,int))); + layout->addWidget(autoType); + connect(heartBeatTimer, SIGNAL(timeout()), SLOT(heartBeat())); + inHeartBeat = false; + } + +//--------------------------------------------------------- +// songChanged +//--------------------------------------------------------- + +void MidiStrip::songChanged(int val) + { + if (mute && (val & SC_MUTE)) { // mute && off + mute->blockSignals(true); + mute->setOn(track->isMute()); + updateOffState(); + mute->blockSignals(false); + } + if (solo && (val & SC_SOLO)) + { + if((bool)track->internalSolo()) + { + if(!useSoloIconSet2) + { + solo->setIconSet(*soloIconSet2); + useSoloIconSet2 = true; + } + } + else if(useSoloIconSet2) + { + solo->setIconSet(*soloIconSet1); + useSoloIconSet2 = false; + } + solo->blockSignals(true); + solo->setOn(track->solo()); + solo->blockSignals(false); + } + + if (val & SC_RECFLAG) + setRecordFlag(track->recordFlag()); + if (val & SC_TRACK_MODIFIED) + { + setLabelText(); + // Added by Tim. p3.3.9 + setLabelFont(); + + } + // Added by Tim. p3.3.9 + + // Catch when label font changes. + if (val & SC_CONFIG) + { + // Set the strip label's font. + //label->setFont(config.fonts[1]); + setLabelFont(); + } + + // p3.3.47 Update the routing popup menu if anything relevant changes. + //if(gRoutingPopupMenuMaster == this && track && (val & (SC_ROUTE | SC_CHANNELS | SC_CONFIG))) + if(val & (SC_ROUTE | SC_CHANNELS | SC_CONFIG)) // p3.3.50 + // Use this handy shared routine. + //muse->updateRouteMenus(track); + muse->updateRouteMenus(track, this); // p3.3.50 + } + +//--------------------------------------------------------- +// controlRightClicked +//--------------------------------------------------------- + +void MidiStrip::controlRightClicked(const QPoint &p, int id) +{ + song->execMidiAutomationCtlPopup((MidiTrack*)track, 0, p, id); +} + +//--------------------------------------------------------- +// labelDoubleClicked +//--------------------------------------------------------- + +void MidiStrip::labelDoubleClicked(int idx) +{ + //int mn, mx, v; + //int num = CTRL_VOLUME; + int num; + switch(idx) + { + case KNOB_PAN: + num = CTRL_PANPOT; + break; + case KNOB_VAR_SEND: + num = CTRL_VARIATION_SEND; + break; + case KNOB_REV_SEND: + num = CTRL_REVERB_SEND; + break; + case KNOB_CHO_SEND: + num = CTRL_CHORUS_SEND; + break; + //case -1: + default: + num = CTRL_VOLUME; + break; + } + int outport = ((MidiTrack*)track)->outPort(); + int chan = ((MidiTrack*)track)->outChannel(); + MidiPort* mp = &midiPorts[outport]; + MidiController* mc = mp->midiController(num); + + int lastv = mp->lastValidHWCtrlState(chan, num); + int curv = mp->hwCtrlState(chan, num); + + if(curv == CTRL_VAL_UNKNOWN) + { + // If no value has ever been set yet, use the current knob value + // (or the controller's initial value?) to 'turn on' the controller. + if(lastv == CTRL_VAL_UNKNOWN) + { + //int kiv = _ctrl->initVal()); + int kiv; + if(idx == -1) + kiv = lrint(slider->value()); + else + kiv = lrint(controller[idx].knob->value()); + if(kiv < mc->minVal()) + kiv = mc->minVal(); + if(kiv > mc->maxVal()) + kiv = mc->maxVal(); + kiv += mc->bias(); + + //MidiPlayEvent ev(song->cpos(), outport, chan, ME_CONTROLLER, num, kiv); + MidiPlayEvent ev(0, outport, chan, ME_CONTROLLER, num, kiv); + audio->msgPlayMidiEvent(&ev); + } + else + { + //MidiPlayEvent ev(song->cpos(), outport, chan, ME_CONTROLLER, num, lastv); + MidiPlayEvent ev(0, outport, chan, ME_CONTROLLER, num, lastv); + audio->msgPlayMidiEvent(&ev); + } + } + else + { + if(mp->hwCtrlState(chan, num) != CTRL_VAL_UNKNOWN) + audio->msgSetHwCtrlState(mp, chan, num, CTRL_VAL_UNKNOWN); + } + song->update(SC_MIDI_CONTROLLER); +} + + +/* +//--------------------------------------------------------- +// routeClicked +//--------------------------------------------------------- + +void MidiStrip::routeClicked() + { + } +*/ + +//--------------------------------------------------------- +// heartBeat +//--------------------------------------------------------- + +void MidiStrip::heartBeat() + { + inHeartBeat = true; + + int act = track->activity(); + double dact = double(act) * (slider->value() / 127.0); + + if((int)dact > track->lastActivity()) + track->setLastActivity((int)dact); + + if(meter[0]) + //meter[0]->setVal(int(double(act) * (slider->value() / 127.0)), 0, false); + meter[0]->setVal(dact, track->lastActivity(), false); + + // Gives reasonable decay with gui update set to 20/sec. + if(act) + track->setActivity((int)((double)act * 0.8)); + + Strip::heartBeat(); + updateControls(); + + inHeartBeat = false; + } + +//--------------------------------------------------------- +// updateControls +//--------------------------------------------------------- + +void MidiStrip::updateControls() + { + bool en; + int channel = ((MidiTrack*)track)->outChannel(); + MidiPort* mp = &midiPorts[((MidiTrack*)track)->outPort()]; + MidiCtrlValListList* mc = mp->controller(); + ciMidiCtrlValList icl; + + MidiController* ctrl = mp->midiController(CTRL_VOLUME); + int nvolume = mp->hwCtrlState(channel, CTRL_VOLUME); + if(nvolume == CTRL_VAL_UNKNOWN) + { + //if(nvolume != volume) + //{ + // DoubleLabel ignores the value if already set... + sl->setValue(sl->off() - 1.0); + //volume = nvolume; + //} + volume = CTRL_VAL_UNKNOWN; + nvolume = mp->lastValidHWCtrlState(channel, CTRL_VOLUME); + //if(nvolume != volume) + if(nvolume != CTRL_VAL_UNKNOWN) + { + nvolume -= ctrl->bias(); + //slider->blockSignals(true); + if(double(nvolume) != slider->value()) + { + //printf("MidiStrip::updateControls setting volume slider\n"); + + slider->setValue(double(nvolume)); + } + } + } + else + { + int ivol = nvolume; + nvolume -= ctrl->bias(); + if(nvolume != volume) { + //printf("MidiStrip::updateControls setting volume slider\n"); + + //slider->blockSignals(true); + slider->setValue(double(nvolume)); + //sl->setValue(double(nvolume)); + if(ivol == 0) + { + //printf("MidiStrip::updateControls setting volume slider label\n"); + + sl->setValue(sl->minValue() - 0.5 * (sl->minValue() - sl->off())); + } + else + { + double v = -fast_log10(float(127*127)/float(ivol*ivol))*20.0; + if(v > sl->maxValue()) + { + //printf("MidiStrip::updateControls setting volume slider label\n"); + + sl->setValue(sl->maxValue()); + } + else + { + //printf("MidiStrip::updateControls setting volume slider label\n"); + + sl->setValue(v); + } + } + //slider->blockSignals(false); + volume = nvolume; + } + } + + + KNOB* gcon = &controller[KNOB_PAN]; + ctrl = mp->midiController(CTRL_PANPOT); + int npan = mp->hwCtrlState(channel, CTRL_PANPOT); + if(npan == CTRL_VAL_UNKNOWN) + { + // DoubleLabel ignores the value if already set... + //if(npan != pan) + //{ + gcon->dl->setValue(gcon->dl->off() - 1.0); + //pan = npan; + //} + pan = CTRL_VAL_UNKNOWN; + npan = mp->lastValidHWCtrlState(channel, CTRL_PANPOT); + if(npan != CTRL_VAL_UNKNOWN) + { + npan -= ctrl->bias(); + if(double(npan) != gcon->knob->value()) + { + //printf("MidiStrip::updateControls setting pan knob\n"); + + gcon->knob->setValue(double(npan)); + } + } + } + else + { + npan -= ctrl->bias(); + if(npan != pan) + { + //printf("MidiStrip::updateControls setting pan label and knob\n"); + + //controller[KNOB_PAN].knob->blockSignals(true); + gcon->knob->setValue(double(npan)); + gcon->dl->setValue(double(npan)); + //controller[KNOB_PAN].knob->blockSignals(false); + pan = npan; + } + } + + + icl = mc->find(channel, CTRL_VARIATION_SEND); + en = icl != mc->end(); + + gcon = &controller[KNOB_VAR_SEND]; + if(gcon->knob->isEnabled() != en) + gcon->knob->setEnabled(en); + if(gcon->lb->isEnabled() != en) + gcon->lb->setEnabled(en); + if(gcon->dl->isEnabled() != en) + gcon->dl->setEnabled(en); + + if(en) + { + ctrl = mp->midiController(CTRL_VARIATION_SEND); + int nvariSend = icl->second->hwVal(); + if(nvariSend == CTRL_VAL_UNKNOWN) + { + // DoubleLabel ignores the value if already set... + //if(nvariSend != variSend) + //{ + gcon->dl->setValue(gcon->dl->off() - 1.0); + //variSend = nvariSend; + //} + variSend = CTRL_VAL_UNKNOWN; + nvariSend = mp->lastValidHWCtrlState(channel, CTRL_VARIATION_SEND); + if(nvariSend != CTRL_VAL_UNKNOWN) + { + nvariSend -= ctrl->bias(); + if(double(nvariSend) != gcon->knob->value()) + { + gcon->knob->setValue(double(nvariSend)); + } + } + } + else + { + nvariSend -= ctrl->bias(); + if(nvariSend != variSend) + { + //controller[KNOB_VAR_SEND].knob->blockSignals(true); + gcon->knob->setValue(double(nvariSend)); + gcon->dl->setValue(double(nvariSend)); + //controller[KNOB_VAR_SEND].knob->blockSignals(false); + variSend = nvariSend; + } + } + } + + icl = mc->find(channel, CTRL_REVERB_SEND); + en = icl != mc->end(); + + gcon = &controller[KNOB_REV_SEND]; + if(gcon->knob->isEnabled() != en) + gcon->knob->setEnabled(en); + if(gcon->lb->isEnabled() != en) + gcon->lb->setEnabled(en); + if(gcon->dl->isEnabled() != en) + gcon->dl->setEnabled(en); + + if(en) + { + ctrl = mp->midiController(CTRL_REVERB_SEND); + int nreverbSend = icl->second->hwVal(); + if(nreverbSend == CTRL_VAL_UNKNOWN) + { + // DoubleLabel ignores the value if already set... + //if(nreverbSend != reverbSend) + //{ + gcon->dl->setValue(gcon->dl->off() - 1.0); + //reverbSend = nreverbSend; + //} + reverbSend = CTRL_VAL_UNKNOWN; + nreverbSend = mp->lastValidHWCtrlState(channel, CTRL_REVERB_SEND); + if(nreverbSend != CTRL_VAL_UNKNOWN) + { + nreverbSend -= ctrl->bias(); + if(double(nreverbSend) != gcon->knob->value()) + { + gcon->knob->setValue(double(nreverbSend)); + } + } + } + else + { + nreverbSend -= ctrl->bias(); + if(nreverbSend != reverbSend) + { + //controller[KNOB_REV_SEND].knob->blockSignals(true); + gcon->knob->setValue(double(nreverbSend)); + gcon->dl->setValue(double(nreverbSend)); + //controller[KNOB_REV_SEND].knob->blockSignals(false); + reverbSend = nreverbSend; + } + } + } + + icl = mc->find(channel, CTRL_CHORUS_SEND); + en = icl != mc->end(); + + gcon = &controller[KNOB_CHO_SEND]; + if(gcon->knob->isEnabled() != en) + gcon->knob->setEnabled(en); + if(gcon->lb->isEnabled() != en) + gcon->lb->setEnabled(en); + if(gcon->dl->isEnabled() != en) + gcon->dl->setEnabled(en); + + if(en) + { + ctrl = mp->midiController(CTRL_CHORUS_SEND); + int nchorusSend = icl->second->hwVal(); + if(nchorusSend == CTRL_VAL_UNKNOWN) + { + // DoubleLabel ignores the value if already set... + //if(nchorusSend != chorusSend) + //{ + gcon->dl->setValue(gcon->dl->off() - 1.0); + //chorusSend = nchorusSend; + //} + chorusSend = CTRL_VAL_UNKNOWN; + nchorusSend = mp->lastValidHWCtrlState(channel, CTRL_CHORUS_SEND); + if(nchorusSend != CTRL_VAL_UNKNOWN) + { + nchorusSend -= ctrl->bias(); + if(double(nchorusSend) != gcon->knob->value()) + { + gcon->knob->setValue(double(nchorusSend)); + } + } + } + else + { + nchorusSend -= ctrl->bias(); + if(nchorusSend != chorusSend) + { + gcon->knob->setValue(double(nchorusSend)); + gcon->dl->setValue(double(nchorusSend)); + chorusSend = nchorusSend; + } + } + } + } +//--------------------------------------------------------- +// ctrlChanged +//--------------------------------------------------------- + +void MidiStrip::ctrlChanged(int num, int val) + { + if (inHeartBeat) + return; + + MidiTrack* t = (MidiTrack*) track; + int port = t->outPort(); + + int chan = t->outChannel(); + MidiPort* mp = &midiPorts[port]; + MidiController* mctl = mp->midiController(num); + if((val < mctl->minVal()) || (val > mctl->maxVal())) + { + if(mp->hwCtrlState(chan, num) != CTRL_VAL_UNKNOWN) + audio->msgSetHwCtrlState(mp, chan, num, CTRL_VAL_UNKNOWN); + } + else + { + val += mctl->bias(); + + int tick = song->cpos(); + + MidiPlayEvent ev(tick, port, chan, ME_CONTROLLER, num, val); + + audio->msgPlayMidiEvent(&ev); + } + song->update(SC_MIDI_CONTROLLER); + } + +//--------------------------------------------------------- +// volLabelChanged +//--------------------------------------------------------- + +void MidiStrip::volLabelChanged(double val) + { + val = sqrt( float(127*127) / pow(10.0, -val/20.0) ); + + ctrlChanged(CTRL_VOLUME, lrint(val)); + + } + +//--------------------------------------------------------- +// setVolume +//--------------------------------------------------------- + +void MidiStrip::setVolume(double val) + { + +// printf("Vol %d\n", lrint(val)); + ctrlChanged(CTRL_VOLUME, lrint(val)); + } + +//--------------------------------------------------------- +// setPan +//--------------------------------------------------------- + +void MidiStrip::setPan(double val) + { + + ctrlChanged(CTRL_PANPOT, lrint(val)); + } + +//--------------------------------------------------------- +// setVariSend +//--------------------------------------------------------- + +void MidiStrip::setVariSend(double val) + { + ctrlChanged(CTRL_VARIATION_SEND, lrint(val)); + } + +//--------------------------------------------------------- +// setChorusSend +//--------------------------------------------------------- + +void MidiStrip::setChorusSend(double val) + { + ctrlChanged(CTRL_CHORUS_SEND, lrint(val)); + } + +//--------------------------------------------------------- +// setReverbSend +//--------------------------------------------------------- + +void MidiStrip::setReverbSend(double val) + { + ctrlChanged(CTRL_REVERB_SEND, lrint(val)); + } + +//--------------------------------------------------------- +// updateOffState +//--------------------------------------------------------- + +void MidiStrip::updateOffState() // Ripped from AudioStrip, hehh(mg) + { + bool val = !track->off(); + slider->setEnabled(val); + //KNOB* gcon = &controller[KNOB_PAN]; // TODO: Pan ctrl + //gcon->setOn(val); + label->setEnabled(val); + if (record) + record->setEnabled(val); + if (solo) + solo->setEnabled(val); + if (mute) + mute->setEnabled(val); + } + +//--------------------------------------------------------- +// routingPopupMenuActivated +//--------------------------------------------------------- + +void MidiStrip::routingPopupMenuActivated(int n) +{ + if(gRoutingPopupMenuMaster != this || !track || !track->isMidiTrack()) + return; + muse->routingPopupMenuActivated(track, n); +} + +//--------------------------------------------------------- +// iRoutePressed +//--------------------------------------------------------- + +void MidiStrip::iRoutePressed() +{ + if(!track || !track->isMidiTrack()) + return; + + //song->chooseMidiRoutes(iR, (MidiTrack*)track, false); + PopupMenu* pup = muse->prepareRoutingPopupMenu(track, false); + if(!pup) + return; + + //pup->disconnect(); + gRoutingPopupMenuMaster = this; + connect(pup, SIGNAL(activated(int)), SLOT(routingPopupMenuActivated(int))); + connect(pup, SIGNAL(aboutToHide()), muse, SLOT(routingPopupMenuAboutToHide())); + pup->popup(QCursor::pos(), 0); + iR->setDown(false); + return; + + /* + RouteList* irl = track->inRoutes(); + //Route dst(track, -1); + + QPopupMenu* pup = new QPopupMenu(iR); + pup->setCheckable(true); + + int gid = 0; + + //MidiInPortList* tl = song->midiInPorts(); + //for(iMidiInPort i = tl->begin();i != tl->end(); ++i) + for(int i = 0; i < MIDI_PORTS; ++i) + { + //MidiInPort* track = *i; + // NOTE: Could possibly list all devices, bypassing ports, but no, let's stick wth ports. + MidiPort* mp = &midiPorts[i]; + MidiDevice* md = mp->device(); + if(!md) + continue; + + if(!(md->rwFlags() & 2)) + continue; + + //printf("MidiStrip::iRoutePressed adding submenu portnum:%d\n", i); + + //QMenu* m = menu->addMenu(track->name()); + QPopupMenu* subp = new QPopupMenu(iR); + + for(int ch = 0; ch < MIDI_CHANNELS; ++ch) + { + //QAction* a = m->addAction(QString("Channel %1").arg(ch+1)); + //subp->insertItem(QT_TR_NOOP(QString("Channel %1").arg(ch+1)), i * MIDI_CHANNELS + ch); + gid = i * MIDI_CHANNELS + ch; + + //printf("MidiStrip::iRoutePressed inserting gid:%d\n", gid); + + subp->insertItem(QString("Channel %1").arg(ch+1), gid); + //a->setCheckable(true); + //Route src(track, ch, RouteNode::TRACK); + //Route src(md, ch); + //Route r = Route(src, dst); + //a->setData(QVariant::fromValue(r)); + //a->setChecked(rl->indexOf(r) != -1); + Route srcRoute(md, ch); + for(iRoute ir = irl->begin(); ir != irl->end(); ++ir) + { + //if(*ir == dst) + if(*ir == srcRoute) + { + subp->setItemChecked(gid, true); + break; + } + } + } + pup->insertItem(QT_TR_NOOP(md->name()), subp); + } + + int n = pup->exec(QCursor::pos()); + delete pup; + if (n != -1) + { + int mdidx = n / MIDI_CHANNELS; + int ch = n % MIDI_CHANNELS; + + //if(debugMsg) + printf("MidiStrip::iRoutePressed mdidx:%d ch:%d\n", mdidx, ch); + + MidiPort* mp = &midiPorts[mdidx]; + MidiDevice* md = mp->device(); + if(!md) + return; + + if(!(md->rwFlags() & 2)) + return; + + + //QString s(pup->text(n)); + //QT_TR_NOOP(md->name()) + + //Route srcRoute(s, false, -1); + Route srcRoute(md, ch); + //Route srcRoute(md, -1); + //Route dstRoute(track, -1); + Route dstRoute(track, ch); + + //if (track->type() == Track::AUDIO_INPUT) + // srcRoute.channel = dstRoute.channel = n & 0xf; + iRoute iir = irl->begin(); + for (; iir != irl->end(); ++iir) { + if (*iir == srcRoute) + break; + } + if (iir != irl->end()) { + // disconnect + printf("MidiStrip::iRoutePressed removing route src device name: %s dst track name: %s\n", md->name().latin1(), track->name().latin1()); + audio->msgRemoveRoute(srcRoute, dstRoute); + } + else { + // connect + printf("MidiStrip::iRoutePressed adding route src device name: %s dst track name: %s\n", md->name().latin1(), track->name().latin1()); + audio->msgAddRoute(srcRoute, dstRoute); + } + printf("MidiStrip::iRoutePressed calling msgUpdateSoloStates\n"); + audio->msgUpdateSoloStates(); + printf("MidiStrip::iRoutePressed calling song->update\n"); + song->update(SC_ROUTE); + } + //delete pup; + iR->setDown(false); // pup->exec() catches mouse release event + printf("MidiStrip::iRoutePressed end\n"); + */ + +} + +//--------------------------------------------------------- +// oRoutePressed +//--------------------------------------------------------- + +void MidiStrip::oRoutePressed() + { + if(!track || !track->isMidiTrack()) + return; + + //song->chooseMidiRoutes(oR, (MidiTrack*)track, true); + PopupMenu* pup = muse->prepareRoutingPopupMenu(track, true); + if(!pup) + return; + + //pup->disconnect(); + gRoutingPopupMenuMaster = this; + connect(pup, SIGNAL(activated(int)), SLOT(routingPopupMenuActivated(int))); + connect(pup, SIGNAL(aboutToHide()), muse, SLOT(routingPopupMenuAboutToHide())); + pup->popup(QCursor::pos(), 0); + oR->setDown(false); + return; + + /* + QPopupMenu* pup = new QPopupMenu(oR); + pup->setCheckable(true); + AudioTrack* t = (AudioTrack*)track; + RouteList* orl = t->outRoutes(); + + switch(track->type()) { + case Track::MIDI: + case Track::DRUM: + delete pup; + return; + case Track::AUDIO_OUTPUT: + { + int gid = 0; + for (int i = 0; i < channel; ++i) { + char buffer[128]; + snprintf(buffer, 128, "%s %d", tr("Channel").latin1(), i+1); + MenuTitleItem* titel = new MenuTitleItem(QString(buffer)); + pup->insertItem(titel); + + if (!checkAudioDevice()) return; + std::list ol = audioDevice->inputPorts(); + for (std::list::iterator ip = ol.begin(); ip != ol.end(); ++ip) { + int id = pup->insertItem(*ip, (gid * 16) + i); + Route dst(*ip, true, i); + ++gid; + for (iRoute ir = orl->begin(); ir != orl->end(); ++ir) { + if (*ir == dst) { + pup->setItemChecked(id, true); + break; + } + } + } + if (i+1 != channel) + pup->insertSeparator(); + } + } + break; + case Track::AUDIO_INPUT: + addWavePorts(t, pup, orl); + case Track::WAVE: + case Track::AUDIO_GROUP: + case Track::AUDIO_SOFTSYNTH: + addOutPorts(t, pup, orl); + addGroupPorts(t, pup, orl); + break; + case Track::AUDIO_AUX: + addOutPorts(t, pup, orl); + break; + } + int n = pup->exec(QCursor::pos()); + if (n != -1) { + QString s(pup->text(n)); + Route srcRoute(t, -1); + Route dstRoute(s, true, -1); + + if (track->type() == Track::AUDIO_OUTPUT) + srcRoute.channel = dstRoute.channel = n & 0xf; + + // check if route src->dst exists: + iRoute iorl = orl->begin(); + for (; iorl != orl->end(); ++iorl) { + if (*iorl == dstRoute) + break; + } + if (iorl != orl->end()) { + // disconnect if route exists + audio->msgRemoveRoute(srcRoute, dstRoute); + } + else { + // connect if route does not exist + audio->msgAddRoute(srcRoute, dstRoute); + } + audio->msgUpdateSoloStates(); + song->update(SC_ROUTE); + } + delete pup; + oR->setDown(false); // pup->exec() catches mouse release event + */ + + + } + + diff --git a/muse2/muse/mixer/mstrip.h b/muse2/muse/mixer/mstrip.h new file mode 100644 index 00000000..86eb3fac --- /dev/null +++ b/muse2/muse/mixer/mstrip.h @@ -0,0 +1,83 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: mstrip.h,v 1.4.2.4 2009/10/25 19:26:29 lunar_shuttle Exp $ +// +// (C) Copyright 2000-2004 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __MSTRIP_H__ +#define __MSTRIP_H__ + +#include "strip.h" +//Added by qt3to4: +#include + +class Slider; +class DoubleLabel; +class QDialog; +class Knob; +class QString; +class MidiTrack; +class QLabel; + +//--------------------------------------------------------- +// MidiStrip +//--------------------------------------------------------- + +class MidiStrip : public Strip { + Q_OBJECT + + Slider* slider; + DoubleLabel* sl; + //QToolButton* route; + //QToolButton* iR; + //QToolButton* oR; + + struct KNOB { + Knob* knob; + DoubleLabel* dl; + QLabel* lb; + } controller[4]; // pan variation reverb chorus + + int volume; + int variSend; + int reverbSend; + int chorusSend; + int pan; + bool inHeartBeat; + + void addKnob(int idx, const QString&, const QString&, const char*, bool); + void ctrlChanged(int num, int val); + void updateControls(); + void updateOffState(); + + private slots: + //void routeClicked(); + void iRoutePressed(); + void oRoutePressed(); + void routingPopupMenuActivated(int /*id*/); + void setVolume(double); + void setPan(double); + void setChorusSend(double); + void setVariSend(double); + void setReverbSend(double); + void labelDoubleClicked(int); + void volLabelChanged(double); + void controlRightClicked(const QPoint&, int); + + protected slots: + virtual void heartBeat(); + + public slots: + virtual void songChanged(int); + + public: + MidiStrip(QWidget* parent, MidiTrack*); + }; + + +#endif + + + diff --git a/muse2/muse/mixer/panknob.cpp b/muse2/muse/mixer/panknob.cpp new file mode 100644 index 00000000..065c1bd1 --- /dev/null +++ b/muse2/muse/mixer/panknob.cpp @@ -0,0 +1,32 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: panknob.cpp,v 1.5 2004/01/23 08:41:38 wschweer Exp $ +// +// (C) Copyright 2000 Werner Schweer (ws@seh.de) +//========================================================= + +#include "../audio.h" +#include "panknob.h" + +//--------------------------------------------------------- +// PanKnob +//--------------------------------------------------------- + +PanKnob::PanKnob(QWidget* parent, AudioTrack* s) + : Knob(parent, "pan") + { + src = s; + connect(this, SIGNAL(valueChanged(double,int)), SLOT(valueChanged(double))); + } + +//--------------------------------------------------------- +// panChanged +//--------------------------------------------------------- + +void PanKnob::valueChanged(double val) + { + audio->msgSetPan(src, val); + } + + diff --git a/muse2/muse/mixer/panknob.h b/muse2/muse/mixer/panknob.h new file mode 100644 index 00000000..92c41b03 --- /dev/null +++ b/muse2/muse/mixer/panknob.h @@ -0,0 +1,32 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: panknob.h,v 1.3 2003/11/08 15:10:18 wschweer Exp $ +// +// (C) Copyright 2000 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __PANKNOB_H__ +#define __PANKNOB_H__ + +#include "knob.h" + +class AudioTrack; + +//--------------------------------------------------------- +// PanKnob +//--------------------------------------------------------- + +class PanKnob : public Knob { + Q_OBJECT + AudioTrack* src; + + private slots: + void valueChanged(double); + + public: + PanKnob(QWidget* parent, AudioTrack*); + }; + +#endif + diff --git a/muse2/muse/mixer/rack.cpp b/muse2/muse/mixer/rack.cpp new file mode 100644 index 00000000..ae5d34b7 --- /dev/null +++ b/muse2/muse/mixer/rack.cpp @@ -0,0 +1,531 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: rack.cpp,v 1.7.2.7 2007/01/27 14:52:43 spamatica Exp $ +// +// (C) Copyright 2000-2003 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include +#include +#include +#include +#include +#include +#include +//Added by qt3to4: +#include +#include +#include +#include + +#include "xml.h" +#include "rack.h" +#include "song.h" +#include "audio.h" +#include "icons.h" +#include "gconfig.h" +#include "plugin.h" +#include "filedialog.h" +#include "config.h" + +//--------------------------------------------------------- +// class RackSlot +//--------------------------------------------------------- + +class RackSlot : public Q3ListBoxItem { + int idx; + AudioTrack* node; + + virtual void paint(QPainter*); + virtual int height(const Q3ListBox*) const { return 18; } + + public: + RackSlot(Q3ListBox* lb, AudioTrack* t, int); + ~RackSlot(); + }; + +RackSlot::~RackSlot() + { + node = 0; + } + +//--------------------------------------------------------- +// RackSlot +//--------------------------------------------------------- + +RackSlot::RackSlot(Q3ListBox* b, AudioTrack* t, int i) + : Q3ListBoxItem(b) + { + node = t; + idx = i; + } + +//--------------------------------------------------------- +// paint +//--------------------------------------------------------- + +void RackSlot::paint(QPainter* painter) + { + if (node == 0) + return; + painter->save(); + if (node == 0 || !node->efxPipe()->isOn(idx)) { + const QColorGroup& g = listBox()->colorGroup(); + painter->fillRect(0,0,listBox()->width(),height(listBox()), g.dark()); + painter->setPen(g.light()); + } + QFontMetrics fm = painter->fontMetrics(); + QString s(node->efxPipe()->name(idx)); + painter->drawText(3, fm.ascent() + fm.leading()/2, s); + painter->restore(); + } + +//--------------------------------------------------------- +// EffectRack +//--------------------------------------------------------- + +EffectRack::EffectRack(QWidget* parent, AudioTrack* t) + : Q3ListBox(parent, "Rack", Qt::WDestructiveClose) + { + track = t; + setFont(config.fonts[1]); + + setHScrollBarMode(AlwaysOff); + setVScrollBarMode(AlwaysOff); + setSelectionMode(Single); + setMaximumHeight(18 * PipelineDepth); + for (int i = 0; i < PipelineDepth; ++i) + new RackSlot(this, track, i); + connect(this, SIGNAL(contextMenuRequested(Q3ListBoxItem*, const QPoint&)), + this, SLOT(menuRequested(Q3ListBoxItem*, const QPoint&))); + connect(this, SIGNAL(doubleClicked(Q3ListBoxItem*)), + this, SLOT(doubleClicked(Q3ListBoxItem*))); + connect(song, SIGNAL(songChanged(int)), SLOT(songChanged(int))); + QToolTip::add(this, tr("effect rack")); + setAcceptDrops(true); + } + +//--------------------------------------------------------- +// EffectRack +//--------------------------------------------------------- + +EffectRack::~EffectRack() + { + } + +//--------------------------------------------------------- +// songChanged +//--------------------------------------------------------- + +void EffectRack::songChanged(int typ) + { + if (typ & (SC_ROUTE | SC_RACK)) { + for (int i = 0; i < PipelineDepth; ++i) + updateItem(i); + } + } + +//--------------------------------------------------------- +// minimumSizeHint +//--------------------------------------------------------- + +QSize EffectRack::minimumSizeHint() const + { + return QSize(10, 18 * PipelineDepth); + } + +//--------------------------------------------------------- +// menuRequested +//--------------------------------------------------------- + +void EffectRack::menuRequested(Q3ListBoxItem* it, const QPoint& pt) + { + if (it == 0 || track == 0) + return; + RackSlot* curitem = (RackSlot*)it; + int idx = index(curitem); + QString name; + bool mute; + Pipeline* pipe = track->efxPipe(); + if (pipe) { + name = pipe->name(idx); + mute = pipe->isOn(idx); + } + + //enum { NEW, CHANGE, UP, DOWN, REMOVE, BYPASS, SHOW, SAVE }; + enum { NEW, CHANGE, UP, DOWN, REMOVE, BYPASS, SHOW, SHOW_NATIVE, SAVE }; + Q3PopupMenu* menu = new Q3PopupMenu; + menu->insertItem(QIcon(*upIcon), tr("move up"), UP, UP); + menu->insertItem(QIcon(*downIcon), tr("move down"), DOWN, DOWN); + menu->insertItem(tr("remove"), REMOVE, REMOVE); + menu->insertItem(tr("bypass"), BYPASS, BYPASS); + menu->insertItem(tr("show gui"), SHOW, SHOW); + menu->insertItem(tr("show native gui"), SHOW_NATIVE, SHOW_NATIVE); + + menu->setItemChecked(BYPASS, !pipe->isOn(idx)); + menu->setItemChecked(SHOW, pipe->guiVisible(idx)); + menu->setItemChecked(SHOW_NATIVE, pipe->nativeGuiVisible(idx)); + + if (pipe->empty(idx)) { + menu->insertItem(tr("new"), NEW, NEW); + menu->setItemEnabled(UP, false); + menu->setItemEnabled(DOWN, false); + menu->setItemEnabled(REMOVE, false); + menu->setItemEnabled(BYPASS, false); + menu->setItemEnabled(SHOW, false); + menu->setItemEnabled(SHOW_NATIVE, false); + menu->setItemEnabled(SAVE, false); + } + else { + menu->insertItem(tr("change"), CHANGE, CHANGE); + menu->insertItem(tr("save preset"), SAVE, SAVE); + if (idx == 0) + menu->setItemEnabled(UP, false); + if (idx == (PipelineDepth-1)) + menu->setItemEnabled(DOWN, false); + if(!pipe->isDssiPlugin(idx)) + menu->setItemEnabled(SHOW_NATIVE, false); + } + + #ifndef OSC_SUPPORT + menu->setItemEnabled(SHOW_NATIVE, false); + #endif + + int sel = menu->exec(pt, 1); + delete menu; + if (sel == -1) + return; + + switch(sel) { + case NEW: + { + Plugin* plugin = PluginDialog::getPlugin(this); + if (plugin) { + PluginI* plugi = new PluginI(); + if (plugi->initPluginInstance(plugin, track->channels())) { + printf("cannot instantiate plugin <%s>\n", + plugin->name().latin1()); + delete plugi; + break; + } + audio->msgAddPlugin(track, idx, plugi); + } + break; + } + case CHANGE: + { + Plugin* plugin = PluginDialog::getPlugin(this); + if (plugin) { + PluginI* plugi = new PluginI(); + if (plugi->initPluginInstance(plugin, track->channels())) { + printf("cannot instantiate plugin <%s>\n", + plugin->name().latin1()); + delete plugi; + break; + } + audio->msgAddPlugin(track, idx, 0); + audio->msgAddPlugin(track, idx, plugi); + } + break; + } + case REMOVE: + audio->msgAddPlugin(track, idx, 0); + break; + case BYPASS: + { + bool flag = !pipe->isOn(idx); + pipe->setOn(idx, flag); + break; + } + case SHOW: + { + bool flag = !pipe->guiVisible(idx); + pipe->showGui(idx, flag); + break; + } + case SHOW_NATIVE: + { + bool flag = !pipe->nativeGuiVisible(idx); + pipe->showNativeGui(idx, flag); + break; + } + case UP: + if (idx > 0) { + setCurrentItem(idx-1); + pipe->move(idx, true); + } + break; + case DOWN: + if (idx < (PipelineDepth-1)) { + setCurrentItem(idx+1); + pipe->move(idx, false); + } + break; + case SAVE: + savePreset(idx); + break; + } + song->update(SC_RACK); + } + +//--------------------------------------------------------- +// doubleClicked +// toggle gui +//--------------------------------------------------------- + +void EffectRack::doubleClicked(Q3ListBoxItem* it) + { + if (it == 0 || track == 0) + return; + RackSlot* item = (RackSlot*)it; + int idx = index(item); + Pipeline* pipe = track->efxPipe(); + if (pipe) { + bool flag = !pipe->guiVisible(idx); + pipe->showGui(idx, flag); + } + } + +void EffectRack::savePreset(int idx) + { + //QString name = getSaveFileName(QString(""), plug_file_pattern, this, + QString name = getSaveFileName(QString(""), preset_file_save_pattern, this, + tr("MusE: Save Preset")); + + if(name.isEmpty()) + return; + + //FILE* presetFp = fopen(name.ascii(),"w+"); + bool popenFlag; + FILE* presetFp = fileOpen(this, name, QString(".pre"), "w", popenFlag, false, true); + if (presetFp == 0) { + //fprintf(stderr, "EffectRack::savePreset() fopen failed: %s\n", + // strerror(errno)); + return; + } + Xml xml(presetFp); + Pipeline* pipe = track->efxPipe(); + if (pipe) { + if ((*pipe)[idx] != NULL) { + xml.header(); + xml.tag(0, "muse version=\"1.0\""); + (*pipe)[idx]->writeConfiguration(1, xml); + xml.tag(0, "/muse"); + } + else { + printf("no plugin!\n"); + //fclose(presetFp); + if (popenFlag) + pclose(presetFp); + else + fclose(presetFp); + return; + } + } + else { + printf("no pipe!\n"); + //fclose(presetFp); + if (popenFlag) + pclose(presetFp); + else + fclose(presetFp); + return; + } + //fclose(presetFp); + if (popenFlag) + pclose(presetFp); + else + fclose(presetFp); + } + +void EffectRack::startDrag(int idx) + { + FILE* tmp = tmpfile(); + if (tmp == 0) { + fprintf(stderr, "EffectRack::startDrag fopen failed: %s\n", + strerror(errno)); + return; + } + Xml xml(tmp); + Pipeline* pipe = track->efxPipe(); + if (pipe) { + if ((*pipe)[idx] != NULL) { + xml.header(); + xml.tag(0, "muse version=\"1.0\""); + (*pipe)[idx]->writeConfiguration(1, xml); + xml.tag(0, "/muse"); + } + else { + //printf("no plugin!\n"); + return; + } + } + else { + //printf("no pipe!\n"); + return; + } + + QString xmlconf; + xml.dump(xmlconf); + Q3TextDrag *drag = new Q3TextDrag(xmlconf, this); + drag->setSubtype("x-muse-plugin"); + drag->drag(); + } + +void EffectRack::contentsDropEvent(QDropEvent * /*event*/)// prevent of compiler warning: unsued variable + { + } + +void EffectRack::dropEvent(QDropEvent *event) + { + QString text; + Q3ListBoxItem *i = itemAt( contentsToViewport(event->pos()) ); + int idx = index(i); + + Pipeline* pipe = track->efxPipe(); + if (pipe) { + if ((*pipe)[idx] != NULL) { + QWidget *sw = event->source(); + if(sw) + { + if(strcmp(sw->className(), "EffectRack") == 0) + { + EffectRack *ser = (EffectRack*)sw; + Pipeline* spipe = ser->getTrack()->efxPipe(); + if(!spipe) + return; + Q3ListBoxItem *i = ser->itemAt(contentsToViewport(ser->getDragPos())); + int idx0 = ser->index(i); + if (!(*spipe)[idx0] || + (idx == idx0 && (ser == this || ser->getTrack()->name() == track->name()))) + return; + } + } + 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); + song->update(SC_RACK); + } + else { + return; + } + } + if(Q3TextDrag::decode(event, text)) + { + text = text.stripWhiteSpace(); + // Changed by T356. + //if (text.endsWith(".pre", false)) + if (text.endsWith(".pre", false) || text.endsWith(".pre.gz", false) || text.endsWith(".pre.bz2", false)) + { + Q3Url url(text); + QString newPath = url.path(); + + //bool popenFlag = false; + bool popenFlag; + FILE* fp = fileOpen(this, newPath, ".pre", "r", popenFlag, false, false); + + if (fp) { + Xml xml(fp); + initPlugin(xml, idx); + + // Added by T356. + if (popenFlag) + pclose(fp); + else + fclose(fp); + } + } + else if (event->provides("text/x-muse-plugin")) + { + QString outxml; + Q3TextDrag::decode(event, outxml); + Xml xml(outxml); + initPlugin(xml, idx); + } + } + } + } + +void EffectRack::dragEnterEvent(QDragEnterEvent *event) + { + event->accept(Q3TextDrag::canDecode(event)); + } + + +void EffectRack::contentsDragEnterEvent(QDragEnterEvent * /*event*/)// prevent of compiler warning: unused parameter + { + } + +void EffectRack::contentsMousePressEvent(QMouseEvent *event) + { + if(event->button() & Qt::LeftButton) { + dragPos = event->pos(); + } + Q3ListBox::contentsMousePressEvent(event); + } + +void EffectRack::contentsMouseMoveEvent(QMouseEvent *event) + { + if (event->state() & Qt::LeftButton) { + Pipeline* pipe = track->efxPipe(); + if(!pipe) + return; + Q3ListBoxItem *i = itemAt(contentsToViewport(dragPos)); + int idx0 = index(i); + if (!(*pipe)[idx0]) + return; + + int distance = (dragPos-event->pos()).manhattanLength(); + if (distance > QApplication::startDragDistance()) { + Q3ListBoxItem *i = itemAt( contentsToViewport(event->pos()) ); + int idx = index(i); + startDrag(idx); + } + } + Q3ListBox::contentsMouseMoveEvent(event); + } + + +void EffectRack::initPlugin(Xml xml, int idx) + { + for (;;) { + Xml::Token token = xml.parse(); + QString tag = xml.s1(); + switch (token) { + case Xml::Error: + case Xml::End: + return; + case Xml::TagStart: + if (tag == "plugin") { + PluginI* plugi = new PluginI(); + if (plugi->readConfiguration(xml, false)) { + printf("cannot instantiate plugin\n"); + delete plugi; + } + else { + //printf("instantiated!\n"); + audio->msgAddPlugin(track, idx, plugi); + song->update(SC_RACK); + return; + } + } + else if (tag =="muse") + break; + else + xml.unknown("EffectRack"); + break; + case Xml::Attribut: + break; + case Xml::TagEnd: + if (tag == "muse") + return; + default: + break; + } + } + } + diff --git a/muse2/muse/mixer/rack.h b/muse2/muse/mixer/rack.h new file mode 100644 index 00000000..edacfa29 --- /dev/null +++ b/muse2/muse/mixer/rack.h @@ -0,0 +1,58 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: rack.h,v 1.5.2.3 2006/09/24 19:32:31 terminator356 Exp $ +// +// (C) Copyright 2000 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __RACK_H__ +#define __RACK_H__ + +#include +//Added by qt3to4: +#include +#include +#include +#include "xml.h" + +class AudioTrack; + +//--------------------------------------------------------- +// EffectRack +//--------------------------------------------------------- + +class EffectRack : public Q3ListBox { + AudioTrack* track; + Q_OBJECT + + virtual QSize minimumSizeHint() const; + + void startDrag(int idx); + void initPlugin(Xml xml, int idx); + QPoint dragPos; + void savePreset(int idx); + + private slots: + void menuRequested(Q3ListBoxItem*, const QPoint&); + void doubleClicked(Q3ListBoxItem*); + void songChanged(int); + + protected: + void dropEvent(QDropEvent *event); + void dragEnterEvent(QDragEnterEvent *event); + void contentsDropEvent(QDropEvent *event); + void contentsDragEnterEvent(QDragEnterEvent *event); + void contentsMousePressEvent(QMouseEvent *event); + void contentsMouseMoveEvent(QMouseEvent *event); + + public: + EffectRack(QWidget*, AudioTrack* t); + ~EffectRack(); + + AudioTrack* getTrack() { return track; } + QPoint getDragPos() { return dragPos; } + }; + +#endif + diff --git a/muse2/muse/mixer/routedialog.cpp b/muse2/muse/mixer/routedialog.cpp new file mode 100644 index 00000000..e56a15ba --- /dev/null +++ b/muse2/muse/mixer/routedialog.cpp @@ -0,0 +1,185 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: routedialog.cpp,v 1.5.2.2 2007/01/04 00:35:17 terminator356 Exp $ +// +// (C) Copyright 2004 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include +#include +//Added by qt3to4: +#include +#include "routedialog.h" +#include "track.h" +#include "song.h" +#include "audio.h" +#include "driver/jackaudio.h" + +//--------------------------------------------------------- +// RouteDialog +//--------------------------------------------------------- + +RouteDialog::RouteDialog(QWidget* parent) + : RouteDialogBase(parent) + { + 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(); + + TrackList* tl = song->tracks(); + for (ciTrack i = tl->begin(); i != tl->end(); ++i) { + if ((*i)->isMidiTrack()) + continue; + // p3.3.38 + //WaveTrack* track = (WaveTrack*)(*i); + AudioTrack* track = (AudioTrack*)(*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(), true, r->channel); + Route dst(track->name(), true, r->channel, Route::TRACK_ROUTE); + new Q3ListViewItem(routeList, r->name(), dst.name()); + } + } + else if (track->type() != Track::AUDIO_AUX) + 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, false, r->channel); + src = s.name(); + } + new Q3ListViewItem(routeList, src, r->name()); + } + } + if (!checkAudioDevice()) return; + std::list sl = audioDevice->outputPorts(); + for (std::list::iterator i = sl.begin(); i != sl.end(); ++i) + newSrcList->insertItem(*i); + sl = audioDevice->inputPorts(); + for (std::list::iterator i = sl.begin(); i != sl.end(); ++i) + newDstList->insertItem(*i); + 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() + { + Q3ListViewItem* item = routeList->selectedItem(); + removeButton->setEnabled(item != 0); + } + +//--------------------------------------------------------- +// removeRoute +//--------------------------------------------------------- + +void RouteDialog::removeRoute() + { + Q3ListViewItem* item = routeList->selectedItem(); + if (item == 0) + return; + audio->msgRemoveRoute(Route(item->text(0), false, -1), Route(item->text(1), true, -1)); + audio->msgUpdateSoloStates(); + song->update(SC_SOLO); + delete item; + } + +//--------------------------------------------------------- +// addRoute +//--------------------------------------------------------- + +void RouteDialog::addRoute() + { + Q3ListBoxItem* srcItem = newSrcList->selectedItem(); + Q3ListBoxItem* dstItem = newDstList->selectedItem(); + if (srcItem == 0 || dstItem == 0) + return; + audio->msgAddRoute(Route(srcItem->text(), false, -1), Route(dstItem->text(), true, -1)); + audio->msgUpdateSoloStates(); + song->update(SC_SOLO); + new Q3ListViewItem(routeList, srcItem->text(), dstItem->text()); + } + +//--------------------------------------------------------- +// srcSelectionChanged +//--------------------------------------------------------- + +void RouteDialog::srcSelectionChanged() + { + Q3ListBoxItem* srcItem = newSrcList->selectedItem(); + Q3ListBoxItem* dstItem = newDstList->selectedItem(); + connectButton->setEnabled((srcItem != 0) + && (dstItem != 0) + && checkRoute(srcItem->text(), dstItem->text())); + } + +//--------------------------------------------------------- +// dstSelectionChanged +//--------------------------------------------------------- + +void RouteDialog::dstSelectionChanged() + { + Q3ListBoxItem* dstItem = newDstList->selectedItem(); + Q3ListBoxItem* srcItem = newSrcList->selectedItem(); + connectButton->setEnabled((srcItem != 0) + && (dstItem != 0) + && checkRoute(srcItem->text(), dstItem->text())); + } + +//--------------------------------------------------------- +// closeEvent +//--------------------------------------------------------- + +void RouteDialog::closeEvent(QCloseEvent* e) + { + emit closed(); + e->accept(); + } diff --git a/muse2/muse/mixer/routedialog.h b/muse2/muse/mixer/routedialog.h new file mode 100644 index 00000000..d819b2a1 --- /dev/null +++ b/muse2/muse/mixer/routedialog.h @@ -0,0 +1,43 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: routedialog.h,v 1.2 2004/01/31 17:31:49 wschweer Exp $ +// +// (C) Copyright 2004 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __ROUTEDIALOG_H__ +#define __ROUTEDIALOG_H__ + +#include "routedialogbase.h" +//Added by qt3to4: +#include + +//--------------------------------------------------------- +// RouteDialog +//--------------------------------------------------------- + +class RouteDialog : public 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/muse2/muse/mixer/routedialogbase.ui b/muse2/muse/mixer/routedialogbase.ui new file mode 100644 index 00000000..85c4f0d4 --- /dev/null +++ b/muse2/muse/mixer/routedialogbase.ui @@ -0,0 +1,234 @@ + +RouteDialogBase + + + RouteDialogBase + + + + 0 + 0 + 316 + 383 + + + + + 5 + 7 + 0 + 0 + + + + MusE: Routing + + + + unnamed + + + 4 + + + 4 + + + + groupBox4 + + + Add Route + + + + unnamed + + + 4 + + + 4 + + + + layout1 + + + + unnamed + + + + groupBox2 + + + + 7 + 7 + 0 + 0 + + + + 0 + + + Source: + + + + unnamed + + + 2 + + + 0 + + + + newSrcList + + + + + + + groupBox3 + + + + 7 + 7 + 0 + 0 + + + + 0 + + + Destination: + + + + unnamed + + + 2 + + + 0 + + + + newDstList + + + + + + + + + connectButton + + + + 4 + 1 + 0 + 0 + + + + Connect + + + connect source to destination + + + + + + + groupBox1 + + + 1 + + + Current Routes + + + + unnamed + + + 4 + + + 4 + + + + + Source + + + true + + + true + + + + + Destination + + + true + + + true + + + + routeList + + + Single + + + true + + + AllColumns + + + + + removeButton + + + + 4 + 1 + 0 + 0 + + + + Remove + + + remove selected route + + + + + + + + diff --git a/muse2/muse/mixer/strip.cpp b/muse2/muse/mixer/strip.cpp new file mode 100644 index 00000000..892a19b6 --- /dev/null +++ b/muse2/muse/mixer/strip.cpp @@ -0,0 +1,238 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: strip.cpp,v 1.6.2.5 2009/11/14 03:37:48 terminator356 Exp $ +// +// (C) Copyright 2000-2004 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include +#include +//Added by qt3to4: +#include +#include + +#include "globals.h" +#include "gconfig.h" +#include "app.h" +#include "audio.h" +#include "song.h" +#include "track.h" +#include "strip.h" +#include "meter.h" +#include "utils.h" + +//--------------------------------------------------------- +// setRecordFlag +//--------------------------------------------------------- + +void Strip::setRecordFlag(bool flag) + { + if (record) { + record->blockSignals(true); + record->setOn(flag); + record->blockSignals(false); + } + } + +//--------------------------------------------------------- +// resetPeaks +//--------------------------------------------------------- + +void Strip::resetPeaks() + { + track->resetPeaks(); + } + +//--------------------------------------------------------- +// recordToggled +//--------------------------------------------------------- + +void Strip::recordToggled(bool val) + { + if (track->type() == Track::AUDIO_OUTPUT) { + if (val && track->recordFlag() == false) { + muse->bounceToFile((AudioOutput*)track); + } + audio->msgSetRecord((AudioOutput*)track, val); + if (!((AudioOutput*)track)->recFile()) + record->setOn(false); + return; + } + song->setRecordFlag(track, val); + } +//--------------------------------------------------------- +// heartBeat +//--------------------------------------------------------- + +void Strip::heartBeat() + { + } + +//--------------------------------------------------------- +// setLabelFont +//--------------------------------------------------------- +// Added by Tim. p3.3.9 + +void Strip::setLabelFont() +{ + // Use the new font #6 I created just for these labels (so far). + // Set the label's font. + label->setFont(config.fonts[6]); + // Dealing with a horizontally constrained label. Ignore vertical. Use a minimum readable point size. + //autoAdjustFontSize(label, label->text(), false, true, config.fonts[6].pointSize(), 5); ddskrjo +} + +//--------------------------------------------------------- +// setLabelText +//--------------------------------------------------------- + +void Strip::setLabelText() + { + //label->setText(track->name()); + QString s; + switch(track->type()) { + case Track::AUDIO_OUTPUT: + label->setBackgroundColor(Qt::green); + s = track->name(); + break; + case Track::AUDIO_GROUP: + label->setBackgroundColor(Qt::yellow); + s = track->name(); + break; + case Track::AUDIO_AUX: + //label->setBackgroundColor(cyan); + label->setBackgroundColor(QColor(120, 255, 255)); // Light blue + s = track->name(); + break; + case Track::WAVE: + label->setBackgroundColor(Qt::magenta); + s = track->name(); + break; + case Track::AUDIO_INPUT: + label->setBackgroundColor(Qt::red); + s = track->name(); + break; + case Track::AUDIO_SOFTSYNTH: + //label->setBackgroundColor(white); + label->setBackgroundColor(QColor(255, 130, 0)); // Med orange + s = track->name(); + break; + case Track::MIDI: + case Track::DRUM: + { + // Changed by Tim. p3.3.21 + /* + MidiTrack* mt = (MidiTrack*)track; + int port = mt->outPort(); + int channel = mt->outChannel(); + //QString s; + s.sprintf("%d-%d", port + 1, channel + 1); + //label->setText(s); + //label->setBackgroundColor(gray); + */ + label->setBackgroundColor(QColor(0, 160, 255)); // Med blue + s = track->name(); + } + break; + } + // Added by Tim. p3.3.9 + label->setText(s); + + } + +//--------------------------------------------------------- +// muteToggled +//--------------------------------------------------------- + +void Strip::muteToggled(bool val) + { + track->setMute(val); + song->update(SC_MUTE); + } + +//--------------------------------------------------------- +// soloToggled +//--------------------------------------------------------- + +void Strip::soloToggled(bool val) + { + audio->msgSetSolo(track, val); + song->update(SC_SOLO); + } + +//--------------------------------------------------------- +// Strip +// create mixer strip +//--------------------------------------------------------- + +Strip::Strip(QWidget* parent, Track* t) + : Q3Frame(parent, "Strip", Qt::WDestructiveClose) + { + iR = 0; + oR = 0; + + setBackgroundMode(Qt::PaletteMid); + setFrameStyle(Panel | Raised); + setLineWidth(2); + useSoloIconSet2 = false; + + track = t; + meter[0] = 0; + meter[1] = 0; + setFixedWidth(STRIP_WIDTH); + layout = new Q3VBoxLayout(this); + layout->setMargin(3); + + //--------------------------------------------- + // label + //--------------------------------------------- + + label = new QLabel(this); + // Moved by Tim. p3.3.9 + //setLabelText(); + //label->setFont(config.fonts[1]); + + //printf("Strip::Strip w:%d frw:%d layoutmarg:%d lx:%d ly:%d lw:%d lh:%d\n", STRIP_WIDTH, frameWidth(), layout->margin(), label->x(), label->y(), label->width(), label->height()); + + // Tested: The label's width is 100. It does not become STRIP_WIDTH - 2*layout->margin + // until the mixer is shown in MusE::showMixer. + // Therefore 'fake' set the size of the label now. + // Added by Tim. p3.3.9 + //label->setGeometry(label->x(), label->y(), STRIP_WIDTH - 2*frameWidth() - 2*layout->margin(), label->height()); + label->setGeometry(label->x(), label->y(), STRIP_WIDTH - 2*layout->margin(), label->height()); + + // Unfortunately for the mixer labels, QLabel doesn't support the BreakAnywhere flag. + // Changed by Tim. p3.3.9 + //label->setAlignment(AlignCenter); + //label->setSizePolicy(QSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed)); + label->setAlignment(Qt::AlignCenter | Qt::TextWordWrap); + //label->setSizePolicy(QSizePolicy(QSizePolicy::Preferred, QSizePolicy::Minimum)); + label->setSizePolicy(QSizePolicy(QSizePolicy::Ignored, QSizePolicy::Minimum)); + + // Added by Tim. p3.3.9 + setLabelText(); + setLabelFont(); + + layout->addWidget(label); + } + +//--------------------------------------------------------- +// Strip +//--------------------------------------------------------- + +Strip::~Strip() + { + } + +//--------------------------------------------------------- +// setAutomationType +//--------------------------------------------------------- + +void Strip::setAutomationType(int t,int) + { + track->setAutomationType(AutomationType(t)); + song->update(SC_AUTOMATION); + } + diff --git a/muse2/muse/mixer/strip.h b/muse2/muse/mixer/strip.h new file mode 100644 index 00000000..a28cf5fd --- /dev/null +++ b/muse2/muse/mixer/strip.h @@ -0,0 +1,77 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: strip.h,v 1.3.2.2 2009/11/14 03:37:48 terminator356 Exp $ +// +// (C) Copyright 2000-2004 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __STRIP_H__ +#define __STRIP_H__ + +#include +#include +//Added by qt3to4: +#include +#include +#include + +#include "globaldefs.h" +//#include "route.h" + +class Track; +class QLabel; +class Q3VBoxLayout; +class Meter; +class QToolButton; +class Q3GridLayout; +class ComboBox; + +static const int STRIP_WIDTH = 65; + +//--------------------------------------------------------- +// Strip +//--------------------------------------------------------- + +class Strip : public Q3Frame { + Q_OBJECT + + protected: + Track* track; + QLabel* label; + Q3VBoxLayout* layout; + Meter* meter[MAX_CHANNELS]; + bool useSoloIconSet2; + + QToolButton* record; + QToolButton* solo; + QToolButton* mute; + QToolButton* iR; // Input routing button + QToolButton* oR; // Output routing button + Q3GridLayout* sliderGrid; + ComboBox* autoType; + void setLabelText(); + + private slots: + void recordToggled(bool); + void soloToggled(bool); + void muteToggled(bool); + + protected slots: + virtual void heartBeat(); + void setAutomationType(int t,int); + + public slots: + void resetPeaks(); + virtual void songChanged(int) = 0; + + public: + Strip(QWidget* parent, Track* t); + ~Strip(); + void setRecordFlag(bool flag); + Track* getTrack() const { return track; } + void setLabelFont(); + }; + +#endif + diff --git a/muse2/muse/mpevent.cpp b/muse2/muse/mpevent.cpp new file mode 100644 index 00000000..2b7ce5eb --- /dev/null +++ b/muse2/muse/mpevent.cpp @@ -0,0 +1,160 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: mpevent.cpp,v 1.6.2.2 2009/11/25 09:09:43 terminator356 Exp $ +// +// (C) Copyright 2002-2004 Werner Schweer (ws@seh.de) +//========================================================= + +#include "mpevent.h" + +#include "helper.h" +#include "event.h" +#include "midictrl.h" +#include "midiport.h" +#include "muse/midi.h" + +//--------------------------------------------------------- +// MEvent +//--------------------------------------------------------- + +MEvent::MEvent(unsigned t, int port, int tpe, const unsigned char* data, int len) + { + _time = t; + _port = port; + edata.setData(data, len); + _type = tpe; + _loopNum = 0; + } + +MEvent::MEvent(unsigned tick, int port, int channel, const Event& e) + { + setChannel(channel); + setTime(tick); + setPort(port); + setLoopNum(0); + 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 MEvent::dump() const + { + printf("time:%d port:%d chan:%d ", _time, _port, _channel+1); + if (_type == 0x90) { // NoteOn + QString s = pitch2string(_a); + printf("NoteOn %s(0x%x) %d\n", s.latin1(), _a, _b); + } + else if (_type == 0xf0) { + printf("SysEx len %d 0x%0x ...\n", len(), data()[0]); + } + else + printf("type:0x%02x a=%d b=%d\n", _type, _a, _b); + } + +//--------------------------------------------------------- +// operator < +//--------------------------------------------------------- + +bool MEvent::operator<(const MEvent& e) const + { + if (time() != e.time()) + return time() < e.time(); + if (port() != e.port()) + return port() < e.port(); + + // 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()]; + } + + +//--------------------------------------------------------- +// put +// return true on fifo overflow +//--------------------------------------------------------- + +bool MidiFifo::put(const MidiPlayEvent& 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 +//--------------------------------------------------------- + +MidiPlayEvent MidiFifo::get() + { + MidiPlayEvent event(fifo[rIndex]); + rIndex = (rIndex + 1) % MIDI_FIFO_SIZE; + // q_atomic_decrement(&size); + --size; + return event; + } + +//--------------------------------------------------------- +// peek +//--------------------------------------------------------- + +const MidiPlayEvent& 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; + } + + diff --git a/muse2/muse/mpevent.h b/muse2/muse/mpevent.h new file mode 100644 index 00000000..6df7b0c0 --- /dev/null +++ b/muse2/muse/mpevent.h @@ -0,0 +1,183 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: mpevent.h,v 1.8.2.5 2009/11/25 09:09:43 terminator356 Exp $ +// +// (C) Copyright 1999-2002 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __MPEVENT_H__ +#define __MPEVENT_H__ + +#include +#include +#include "evdata.h" +#include "memory.h" + +#define MIDI_FIFO_SIZE 512 + +class Event; +class EvData; + +//--------------------------------------------------------- +// MEvent +// baseclass for MidiPlayEvent and MidiRecordEvent +//--------------------------------------------------------- + +//--------------------------------------------------------- +// MEvent +//--------------------------------------------------------- + +class MEvent { + unsigned _time; + EvData edata; + unsigned char _port, _channel, _type; + int _a, _b; + int _loopNum; // The loop count when the note was recorded. + + public: + MEvent() { _loopNum = 0; } + MEvent(unsigned tm, int p, int c, int t, int a, int b) + : _time(tm), _port(p), _channel(c & 0xf), _type(t), _a(a), _b(b) { _loopNum = 0; } + MEvent(unsigned t, int p, int type, const unsigned char* data, int len); + MEvent(unsigned t, int p, int tpe, EvData d) : _time(t), edata(d), _port(p), _type(tpe) { _loopNum = 0; } + MEvent(unsigned t, int port, int channel, const Event& e); + + ~MEvent() {} + + MEvent& operator=(const MEvent& ed) { + _time = ed._time; + edata = ed.edata; + _port = ed._port; + _channel = ed._channel; + _type = ed._type; + _a = ed._a; + _b = ed._b; + _loopNum = ed._loopNum; + return *this; + } + + int port() const { return _port; } + 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; } + int loopNum() const { return _loopNum; } + + void setPort(int val) { _port = val; } + 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; } + void setLoopNum(int n) { _loopNum = n; } + + 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 MEvent&) const; + }; + +//--------------------------------------------------------- +// MidiRecordEvent +// allocated and deleted in midiseq thread context +//--------------------------------------------------------- + +class MidiPlayEvent; + +class MidiRecordEvent : public MEvent { + public: + MidiRecordEvent() : MEvent() {} + MidiRecordEvent(const MEvent& e) : MEvent(e) {} + MidiRecordEvent(unsigned tm, int p, int c, int t, int a, int b) + : MEvent(tm, p, c, t, a, b) {} + MidiRecordEvent(unsigned t, int p, int tpe, const unsigned char* data, int len) + : MEvent(t, p, tpe, data, len) {} + MidiRecordEvent(unsigned t, int p, int type, EvData data) + : MEvent(t, p, type, data) {} + ~MidiRecordEvent() {} + }; + +//--------------------------------------------------------- +// MidiPlayEvent +// allocated and deleted in audio thread context +//--------------------------------------------------------- + +class MidiPlayEvent : public MEvent { + public: + MidiPlayEvent() : MEvent() {} + MidiPlayEvent(const MEvent& e) : MEvent(e) {} + MidiPlayEvent(unsigned tm, int p, int c, int t, int a, int b) + : MEvent(tm, p, c, t, a, b) {} + MidiPlayEvent(unsigned t, int p, int type, const unsigned char* data, int len) + : MEvent(t, p, type, data, len) {} + MidiPlayEvent(unsigned t, int p, int type, EvData data) + : MEvent(t, p, type, data) {} + MidiPlayEvent(unsigned t, int port, int channel, const Event& e) + : MEvent(t, port, channel, e) {} + ~MidiPlayEvent() {} + }; + +//--------------------------------------------------------- +// MPEventList +// memory allocation in audio thread domain +//--------------------------------------------------------- + +typedef std::multiset, audioRTalloc > MPEL; + +struct MPEventList : public MPEL { + void add(const MidiPlayEvent& ev) { MPEL::insert(ev); } + }; + +typedef MPEventList::iterator iMPEvent; +typedef MPEventList::const_iterator ciMPEvent; + +/* +//--------------------------------------------------------- +// MREventList +// memory allocation in midi thread domain +//--------------------------------------------------------- + +// Changed by Tim. p3.3.8 + +// audioRTalloc? Surely this must have been a mistake? +//typedef std::list > MREL; +typedef std::list > MREL; + +struct MREventList : public MREL { + void add(const MidiRecordEvent& ev) { MREL::push_back(ev); } + }; + +typedef MREventList::iterator iMREvent; +typedef MREventList::const_iterator ciMREvent; +*/ + +//--------------------------------------------------------- +// MidiFifo +//--------------------------------------------------------- + +class MidiFifo { + MidiPlayEvent fifo[MIDI_FIFO_SIZE]; + volatile int size; + int wIndex; + int rIndex; + + public: + MidiFifo() { clear(); } + bool put(const MidiPlayEvent& event); // returns true on fifo overflow + MidiPlayEvent get(); + const MidiPlayEvent& 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; } + }; + +#endif + diff --git a/muse2/muse/mplugins/.cvsignore b/muse2/muse/mplugins/.cvsignore new file mode 100644 index 00000000..66e962c6 --- /dev/null +++ b/muse2/muse/mplugins/.cvsignore @@ -0,0 +1,2 @@ +mrconfigbase.h +midifilter.h diff --git a/muse2/muse/mplugins/Makefile.am b/muse2/muse/mplugins/Makefile.am new file mode 100644 index 00000000..ef00f245 --- /dev/null +++ b/muse2/muse/mplugins/Makefile.am @@ -0,0 +1,26 @@ +include $(top_srcdir)/common.am + +noinst_LIBRARIES = libmplugins.a + +if PCH +AM_CXXFLAGS += -include $(top_srcdir)/all.h +endif + +dist_libmplugins_a_SOURCES = \ + mitplugin.cpp mitplugin.h \ + mittranspose.cpp mittranspose.h \ + midiitransform.cpp midiitransform.h \ + midifilterimpl.cpp midifilterimpl.h \ + mrconfig.cpp mrconfig.h \ + rhythm.cpp rhythm.h \ + random.cpp random.h \ + midifilter.ui \ + mrconfigbase.ui \ + rhythmbase.ui + +nodist_libmplugins_a_SOURCES = \ + moc_mittranspose.cpp \ + moc_midiitransform.cpp \ + moc_midifilterimpl.cpp \ + moc_mrconfig.cpp \ + moc_rhythm.cpp diff --git a/muse2/muse/mplugins/Makefile.in b/muse2/muse/mplugins/Makefile.in new file mode 100644 index 00000000..47f131bb --- /dev/null +++ b/muse2/muse/mplugins/Makefile.in @@ -0,0 +1,624 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/common.am +@PCH_TRUE@am__append_1 = -include $(top_srcdir)/all.h +subdir = muse/mplugins +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal-include.m4 \ + $(top_srcdir)/m4/alsa.m4 $(top_srcdir)/m4/docbook.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +LIBRARIES = $(noinst_LIBRARIES) +ARFLAGS = cru +libmplugins_a_AR = $(AR) $(ARFLAGS) +libmplugins_a_LIBADD = +dist_libmplugins_a_OBJECTS = mitplugin.$(OBJEXT) \ + mittranspose.$(OBJEXT) midiitransform.$(OBJEXT) \ + midifilterimpl.$(OBJEXT) mrconfig.$(OBJEXT) rhythm.$(OBJEXT) \ + random.$(OBJEXT) midifilter.$(OBJEXT) mrconfigbase.$(OBJEXT) \ + rhythmbase.$(OBJEXT) +nodist_libmplugins_a_OBJECTS = moc_mittranspose.$(OBJEXT) \ + moc_midiitransform.$(OBJEXT) moc_midifilterimpl.$(OBJEXT) \ + moc_mrconfig.$(OBJEXT) moc_rhythm.$(OBJEXT) +libmplugins_a_OBJECTS = $(dist_libmplugins_a_OBJECTS) \ + $(nodist_libmplugins_a_OBJECTS) +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +CXXLD = $(CXX) +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(dist_libmplugins_a_SOURCES) \ + $(nodist_libmplugins_a_SOURCES) +DIST_SOURCES = $(dist_libmplugins_a_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DOCBOOKSTYLE = @DOCBOOKSTYLE@ +DOCBOOKTARGETS = @DOCBOOKTARGETS@ +DOT = @DOT@ +DOTPATH = @DOTPATH@ +DOXYGEN = @DOXYGEN@ +DOXYGEN_TREEVIEW = @DOXYGEN_TREEVIEW@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FLUIDSYNTHDIRS = @FLUIDSYNTHDIRS@ +FST_CFLAGS = @FST_CFLAGS@ +FST_LIBS = @FST_LIBS@ +Fluidsynth_CFLAGS = @Fluidsynth_CFLAGS@ +Fluidsynth_LIBS = @Fluidsynth_LIBS@ +GIVERTCAP = @GIVERTCAP@ +GREP = @GREP@ +HAVEDOT = @HAVEDOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_LIBS = @JACK_LIBS@ +JADE = @JADE@ +LASH_CFLAGS = @LASH_CFLAGS@ +LASH_LIBS = @LASH_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LO_CFLAGS = @LO_CFLAGS@ +LO_LIBS = @LO_LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MUSECXXFLAGS = @MUSECXXFLAGS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NSGMLS = @NSGMLS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PCH = @PCH@ +PERL = @PERL@ +PKG_CONFIG = @PKG_CONFIG@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIB = @PYTHON_LIB@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QTDIR_BIN = @QTDIR_BIN@ +QTDIR_INC = @QTDIR_INC@ +QT_LIBS = @QT_LIBS@ +RANLIB = @RANLIB@ +SAMPLERATE_CFLAGS = @SAMPLERATE_CFLAGS@ +SAMPLERATE_LIBS = @SAMPLERATE_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ +SNDFILE_LIBS = @SNDFILE_LIBS@ +STRIP = @STRIP@ +SUIDBUILD = @SUIDBUILD@ +SUIDINSTALL = @SUIDINSTALL@ +USE_SSE = @USE_SSE@ +UUID_CFLAGS = @UUID_CFLAGS@ +UUID_LIBS = @UUID_LIBS@ +VERSION = @VERSION@ +XMKMF = @XMKMF@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +have_docbook = @have_docbook@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +synth_fluid = @synth_fluid@ +synth_fluidsynth = @synth_fluidsynth@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AM_CXXFLAGS = $(MUSECXXFLAGS) -I.. -I$(top_srcdir)/synti \ + -I$(top_srcdir)/muse/widgets -DQT_SHARED -DQT_THREAD_SUPPORT \ + -DQT_PLUGIN $(QTDIR_INC) -DQT3_SUPPORT $(am__append_1) +AM_CPPFLAGS = +MOC = $(QTDIR_BIN)/moc +#UIC = $(QTDIR_BIN)/uic3 +UIC = /usr/bin/uic3 +UIFILES = $(wildcard *.ui) +MOCFILES = $(shell for h in $(filter %.h,$(SOURCES)); do \ + if grep -q Q_OBJECT $$h; then \ + echo $$h | sed "s/\(.*\)\.h/moc_\1.cpp/"; \ + fi; \ + done) + +BUILT_SOURCES = $(MOCFILES) $(UIFILES:%.ui=%.h) +MOSTLYCLEANFILES = $(MOCFILES) $(UIFILES:%.ui=%.h) +SUFFIXES = .ui .h.gch +noinst_LIBRARIES = libmplugins.a +dist_libmplugins_a_SOURCES = \ + mitplugin.cpp mitplugin.h \ + mittranspose.cpp mittranspose.h \ + midiitransform.cpp midiitransform.h \ + midifilterimpl.cpp midifilterimpl.h \ + mrconfig.cpp mrconfig.h \ + rhythm.cpp rhythm.h \ + random.cpp random.h \ + midifilter.ui \ + mrconfigbase.ui \ + rhythmbase.ui + +nodist_libmplugins_a_SOURCES = \ + moc_mittranspose.cpp \ + moc_midiitransform.cpp \ + moc_midifilterimpl.cpp \ + moc_mrconfig.cpp \ + moc_rhythm.cpp + +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: .ui .h.gch .cpp .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/common.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu muse/mplugins/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu muse/mplugins/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-noinstLIBRARIES: + -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) +libmplugins.a: $(libmplugins_a_OBJECTS) $(libmplugins_a_DEPENDENCIES) + -rm -f libmplugins.a + $(libmplugins_a_AR) libmplugins.a $(libmplugins_a_OBJECTS) $(libmplugins_a_LIBADD) + $(RANLIB) libmplugins.a + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/midifilterimpl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/midiitransform.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mitplugin.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mittranspose.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/moc_midifilterimpl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/moc_midiitransform.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/moc_mittranspose.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/moc_mrconfig.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/moc_rhythm.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mrconfig.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/random.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rhythm.Po@am__quote@ + +.cpp.o: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< + +.cpp.obj: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.cpp.lo: +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-am +all-am: Makefile $(LIBRARIES) +installdirs: +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +clean: clean-am + +clean-am: clean-generic clean-libtool clean-noinstLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: all check install install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-noinstLIBRARIES ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags uninstall uninstall-am + + +de: + @for base in $(MOCFILES); do echo -e "\t$${base}.cpp $${base}.h \\"; done + +nde: + @for base in $(MOCFILES); do echo -e "\tmoc_$${base}.cpp \\"; done + +.ui.o: %.h + $(UIC) -L $(top_srcdir)/muse/widgets -o $*.cpp -impl $*.h $*.ui + $(MOC) $*.h >> $*.cpp + $(CXXCOMPILE) -c $*.cpp -o $*.o + $(RM) $*.cpp moc_$*.cpp moc_$*.o + +.ui.lo: %.h + $(UIC) -L $(top_srcdir)/muse/widgets -o $*.cpp -impl $*.h $*.ui + $(MOC) $*.h >> $*.cpp + $(LTCXXCOMPILE) -c $*.cpp -o $*.lo + $(RM) $*.cpp moc_$*.cpp moc_$*.lo moc_$*.o + +moc_%.cpp: %.h + $(MOC) $< -o $@ + +%.h: %.ui + $(UIC) -o $@ $< +# $(UIC) -L $(top_srcdir)/muse/widgets -o $@ $< + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/muse2/muse/mplugins/midifilter.ui b/muse2/muse/mplugins/midifilter.ui new file mode 100644 index 00000000..412e735d --- /dev/null +++ b/muse2/muse/mplugins/midifilter.ui @@ -0,0 +1,879 @@ + +MidiFilterConfigBase + + + MidiFilterConfigBase + + + + 0 + 0 + 348 + 431 + + + + + 3 + 5 + 0 + 0 + + + + MusE: Midi Input Filter + + + + unnamed + + + 11 + + + 6 + + + + GroupBoxx + + + + 3 + 5 + 0 + 0 + + + + Record Filter + + + + + + unnamed + + + 11 + + + 6 + + + + rf1 + + + + 7 + 0 + 0 + 0 + + + + Note On + + + + + rf2 + + + + 7 + 0 + 0 + 0 + + + + Poly Pressure + + + + + rf3 + + + + 7 + 0 + 0 + 0 + + + + Controller + + + + + rf4 + + + + 7 + 0 + 0 + 0 + + + + Program Change + + + + + rf5 + + + + 7 + 0 + 0 + 0 + + + + After Touch + + + + + rf6 + + + + 7 + 0 + 0 + 0 + + + + Pitch Bend + + + + + rf7 + + + + 7 + 0 + 0 + 0 + + + + Sysex + + + + + + + GroupBox2 + + + + 7 + 5 + 0 + 0 + + + + Thru Filter + + + + unnamed + + + 11 + + + 6 + + + + tf1 + + + + 5 + 5 + 0 + 0 + + + + Note On + + + + + tf2 + + + + 7 + 0 + 0 + 0 + + + + Poly Pressure + + + + + tf3 + + + + 7 + 0 + 0 + 0 + + + + Controller + + + + + tf4 + + + + 1 + 5 + 0 + 0 + + + + Program Change + + + + + tf5 + + + + 7 + 0 + 0 + 0 + + + + After Touch + + + + + tf6 + + + + 7 + 0 + 0 + 0 + + + + Pitch Bend + + + + + tf7 + + + + 7 + 0 + 0 + 0 + + + + Sysex + + + + + + + GroupBox4 + + + + 7 + 7 + 0 + 0 + + + + Controller Filter + + + + unnamed + + + 11 + + + 6 + + + + cb1 + + + + + cb2 + + + + + cb3 + + + + + cb4 + + + + + + + ButtonGroup1 + + + + 5 + 7 + 0 + 0 + + + + Channel Filter + + + + + + unnamed + + + 11 + + + 3 + + + + cf14 + + + + 0 + 0 + 0 + 0 + + + + + 30 + 32767 + + + + 14 + + + true + + + + + cf10 + + + + 5 + 0 + 0 + 0 + + + + + 30 + 32767 + + + + 10 + + + true + + + + + cf6 + + + + 5 + 5 + 0 + 0 + + + + + 30 + 32767 + + + + 6 + + + true + + + + + cf12 + + + + 5 + 0 + 0 + 0 + + + + + 30 + 32767 + + + + 12 + + + true + + + + + cf4 + + + + 5 + 0 + 0 + 0 + + + + + 25 + 0 + + + + + 30 + 32767 + + + + 4 + + + true + + + + + cf2 + + + + 5 + 0 + 0 + 0 + + + + + 25 + 0 + + + + + 30 + 32767 + + + + 2 + + + true + + + + + cf9 + + + + 0 + 0 + 0 + 0 + + + + + 30 + 32767 + + + + 9 + + + true + + + + + cf8 + + + + 5 + 5 + 0 + 0 + + + + + 30 + 32767 + + + + 8 + + + true + + + + + cf3 + + + + 5 + 0 + 0 + 0 + + + + + 25 + 0 + + + + + 30 + 32767 + + + + 3 + + + true + + + + + cf13 + + + + 0 + 0 + 0 + 0 + + + + + 30 + 32767 + + + + 13 + + + true + + + + + cf15 + + + + 0 + 0 + 0 + 0 + + + + + 30 + 32767 + + + + 15 + + + true + + + + + cf16 + + + + 0 + 0 + 0 + 0 + + + + + 30 + 32767 + + + + 16 + + + true + + + + + cf7 + + + + 5 + 5 + 0 + 0 + + + + + 30 + 32767 + + + + 7 + + + true + + + + + cf11 + + + + 5 + 0 + 0 + 0 + + + + + 30 + 32767 + + + + 11 + + + true + + + + + cf5 + + + + 0 + 0 + 0 + 0 + + + + + 30 + 32767 + + + + 5 + + + true + + + + + cf1 + + + + 0 + 0 + 0 + 0 + + + + + 25 + 0 + + + + + 30 + 32767 + + + + 1 + + + true + + + + + + + + + CtrlComboBox +
ctrlcombo.h
+ + 50 + 20 + + 0 + + 5 + 5 + 0 + 0 + + image0 + activated(int index) + activated(const QString&) +
+
+ + + 789c6dd2c10ac2300c00d07bbf2234b7229d1be245fc04c5a3201e4615f430059d0711ff5ddb2e6bb236ec90eed134cb5a19d8ef36602af5ecdbfeeac05dda0798d3abebde87e3faa374d3807fa0d633a52d38d8de6f679fe33fc776e196f53cd010188256a3600a292882096246517815ca99884606e18044a3a40d91824820924265a7923a2e8bcd05f33db1173e002913175f2a6be6d3294871a2d95fa00e8a94ee017b69d339d90df1e77c57ea072ede6758 + + + + rf1 + rf2 + rf3 + rf4 + rf5 + rf6 + rf7 + tf1 + tf2 + tf3 + tf4 + tf5 + tf6 + tf7 + cf1 + cf2 + cf3 + cf4 + cf5 + cf6 + cf7 + cf8 + cf9 + cf10 + cf11 + cf12 + cf13 + cf14 + cf15 + cf16 + + + + ctrlcombo.h + +
diff --git a/muse2/muse/mplugins/midifilterimpl.cpp b/muse2/muse/mplugins/midifilterimpl.cpp new file mode 100644 index 00000000..56d5caf5 --- /dev/null +++ b/muse2/muse/mplugins/midifilterimpl.cpp @@ -0,0 +1,131 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: midifilterimpl.cpp,v 1.1.1.1 2003/10/27 18:52:49 wschweer Exp $ +// +// (C) Copyright 1999/2000 Werner Schweer (ws@seh.de) +//========================================================= + +#include "midifilterimpl.h" +#include "ctrlcombo.h" + +#include +#include +//Added by qt3to4: +#include + +//--------------------------------------------------------- +// setCtrl +//--------------------------------------------------------- + +void MidiFilterConfig::setCtrl1(int n) + { + midiFilterCtrl1 = n-1; + } +void MidiFilterConfig::setCtrl2(int n) + { + midiFilterCtrl2 = n-1; + } +void MidiFilterConfig::setCtrl3(int n) + { + midiFilterCtrl3 = n-1; + } +void MidiFilterConfig::setCtrl4(int n) + { + midiFilterCtrl4 = n-1; + } + + +//--------------------------------------------------------- +// MidiFilterConfig +//--------------------------------------------------------- + +MidiFilterConfig::MidiFilterConfig(QWidget* parent, const char* name) + : MidiFilterConfigBase(parent, name) + { + cb1->setCurrentItem(midiFilterCtrl1); + cb2->setCurrentItem(midiFilterCtrl2); + cb3->setCurrentItem(midiFilterCtrl3); + cb4->setCurrentItem(midiFilterCtrl4); + + rf1->setChecked(midiRecordType & 1); + rf2->setChecked(midiRecordType & 2); + rf3->setChecked(midiRecordType & 4); + rf4->setChecked(midiRecordType & 8); + rf5->setChecked(midiRecordType & 16); + rf6->setChecked(midiRecordType & 32); + rf7->setChecked(midiRecordType & 64); + connect(rf1, SIGNAL(toggled(bool)), SLOT(recordChanged1(bool))); + connect(rf2, SIGNAL(toggled(bool)), SLOT(recordChanged2(bool))); + connect(rf3, SIGNAL(toggled(bool)), SLOT(recordChanged3(bool))); + connect(rf4, SIGNAL(toggled(bool)), SLOT(recordChanged4(bool))); + connect(rf5, SIGNAL(toggled(bool)), SLOT(recordChanged5(bool))); + connect(rf6, SIGNAL(toggled(bool)), SLOT(recordChanged6(bool))); + connect(rf7, SIGNAL(toggled(bool)), SLOT(recordChanged7(bool))); + + tf1->setChecked(midiThruType & 1); + tf2->setChecked(midiThruType & 2); + tf3->setChecked(midiThruType & 4); + tf4->setChecked(midiThruType & 8); + tf5->setChecked(midiThruType & 16); + tf6->setChecked(midiThruType & 32); + tf7->setChecked(midiThruType & 64); + connect(tf1, SIGNAL(toggled(bool)), SLOT(thruChanged1(bool))); + connect(tf2, SIGNAL(toggled(bool)), SLOT(thruChanged2(bool))); + connect(tf3, SIGNAL(toggled(bool)), SLOT(thruChanged3(bool))); + connect(tf4, SIGNAL(toggled(bool)), SLOT(thruChanged4(bool))); + connect(tf5, SIGNAL(toggled(bool)), SLOT(thruChanged5(bool))); + connect(tf6, SIGNAL(toggled(bool)), SLOT(thruChanged6(bool))); + connect(tf7, SIGNAL(toggled(bool)), SLOT(thruChanged7(bool))); + + cf1->setOn(midiInputChannel & 1); + cf2->setOn(midiInputChannel & 2); + cf3->setOn(midiInputChannel & 4); + cf4->setOn(midiInputChannel & 8); + cf5->setOn(midiInputChannel & 0x10); + cf6->setOn(midiInputChannel & 0x20); + cf7->setOn(midiInputChannel & 0x40); + cf8->setOn(midiInputChannel & 0x80); + cf9->setOn(midiInputChannel & 0x100); + cf10->setOn(midiInputChannel & 0x200); + cf11->setOn(midiInputChannel & 0x400); + cf12->setOn(midiInputChannel & 0x800); + cf13->setOn(midiInputChannel & 0x1000); + cf14->setOn(midiInputChannel & 0x2000); + cf15->setOn(midiInputChannel & 0x4000); + cf16->setOn(midiInputChannel & 0x8000); + + connect(cb1, SIGNAL(activated(int)), SLOT(setCtrl1(int))); + connect(cb2, SIGNAL(activated(int)), SLOT(setCtrl2(int))); + connect(cb3, SIGNAL(activated(int)), SLOT(setCtrl3(int))); + connect(cb4, SIGNAL(activated(int)), SLOT(setCtrl4(int))); + + connect(cf1, SIGNAL(toggled(bool)), SLOT(channelChanged1(bool))); + connect(cf2, SIGNAL(toggled(bool)), SLOT(channelChanged2(bool))); + connect(cf3, SIGNAL(toggled(bool)), SLOT(channelChanged3(bool))); + connect(cf4, SIGNAL(toggled(bool)), SLOT(channelChanged4(bool))); + connect(cf5, SIGNAL(toggled(bool)), SLOT(channelChanged5(bool))); + connect(cf6, SIGNAL(toggled(bool)), SLOT(channelChanged6(bool))); + connect(cf7, SIGNAL(toggled(bool)), SLOT(channelChanged7(bool))); + connect(cf8, SIGNAL(toggled(bool)), SLOT(channelChanged8(bool))); + connect(cf9, SIGNAL(toggled(bool)), SLOT(channelChanged9(bool))); + connect(cf10, SIGNAL(toggled(bool)), SLOT(channelChanged10(bool))); + connect(cf11, SIGNAL(toggled(bool)), SLOT(channelChanged11(bool))); + connect(cf12, SIGNAL(toggled(bool)), SLOT(channelChanged12(bool))); + connect(cf13, SIGNAL(toggled(bool)), SLOT(channelChanged13(bool))); + connect(cf14, SIGNAL(toggled(bool)), SLOT(channelChanged14(bool))); + connect(cf15, SIGNAL(toggled(bool)), SLOT(channelChanged15(bool))); + connect(cf16, SIGNAL(toggled(bool)), SLOT(channelChanged16(bool))); + } + +//--------------------------------------------------------- +// closeEvent +//--------------------------------------------------------- + +void MidiFilterConfig::closeEvent(QCloseEvent* ev) + { + emit hideWindow(); + QWidget::closeEvent(ev); + } + + diff --git a/muse2/muse/mplugins/midifilterimpl.h b/muse2/muse/mplugins/midifilterimpl.h new file mode 100644 index 00000000..4ab722c1 --- /dev/null +++ b/muse2/muse/mplugins/midifilterimpl.h @@ -0,0 +1,92 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: midifilterimpl.h,v 1.1.1.1 2003/10/27 18:52:40 wschweer Exp $ +// +// (C) Copyright 1999/2000 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __MIDIFILTERIMP_H__ +#define __MIDIFILTERIMP_H__ + +#include "globals.h" +#include "midifilter.h" +//Added by qt3to4: +#include + +//--------------------------------------------------------- +// MidiFilterConfig +//--------------------------------------------------------- + +class MidiFilterConfig : public MidiFilterConfigBase { + Q_OBJECT + + void rChanged(bool f, int val) { + if (f) + midiRecordType |= val; + else + midiRecordType &= ~val; + } + void tChanged(bool f, int val) { + if (f) + midiThruType |= val; + else + midiThruType &= ~val; + } + void chChanged(bool f, int val) { + if (f) + midiInputChannel |= val; + else + midiInputChannel &= ~val; + } + virtual void closeEvent(QCloseEvent*); + + signals: + void hideWindow(); + + private slots: + void channelChanged1(bool f) { chChanged(f, 0x01); } + void channelChanged2(bool f) { chChanged(f, 0x02); } + void channelChanged3(bool f) { chChanged(f, 0x04); } + void channelChanged4(bool f) { chChanged(f, 0x08); } + void channelChanged5(bool f) { chChanged(f, 0x10); } + void channelChanged6(bool f) { chChanged(f, 0x20); } + void channelChanged7(bool f) { chChanged(f, 0x40); } + void channelChanged8(bool f) { chChanged(f, 0x80); } + void channelChanged9(bool f) { chChanged(f, 0x100); } + void channelChanged10(bool f) { chChanged(f, 0x200); } + void channelChanged11(bool f) { chChanged(f, 0x400); } + void channelChanged12(bool f) { chChanged(f, 0x800); } + void channelChanged13(bool f) { chChanged(f, 0x1000); } + void channelChanged14(bool f) { chChanged(f, 0x2000); } + void channelChanged15(bool f) { chChanged(f, 0x4000); } + void channelChanged16(bool f) { chChanged(f, 0x8000); } + + void recordChanged1(bool f) { rChanged(f, 1); } + void recordChanged2(bool f) { rChanged(f, 2); } + void recordChanged3(bool f) { rChanged(f, 4); } + void recordChanged4(bool f) { rChanged(f, 8); } + void recordChanged5(bool f) { rChanged(f, 16); } + void recordChanged6(bool f) { rChanged(f, 32); } + void recordChanged7(bool f) { rChanged(f, 64); } + + void thruChanged1(bool f) { tChanged(f, 1); } + void thruChanged2(bool f) { tChanged(f, 2); } + void thruChanged3(bool f) { tChanged(f, 4); } + void thruChanged4(bool f) { tChanged(f, 8); } + void thruChanged5(bool f) { tChanged(f, 16); } + void thruChanged6(bool f) { tChanged(f, 32); } + void thruChanged7(bool f) { tChanged(f, 64); } + + void setCtrl1(int); + void setCtrl2(int); + void setCtrl3(int); + void setCtrl4(int); + + public: + MidiFilterConfig(QWidget* parent=0, const char* name=0); + }; + +#endif + + diff --git a/muse2/muse/mplugins/midiitransform.cpp b/muse2/muse/mplugins/midiitransform.cpp new file mode 100644 index 00000000..f3eecece --- /dev/null +++ b/muse2/muse/mplugins/midiitransform.cpp @@ -0,0 +1,1696 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: midiitransform.cpp,v 1.2.2.2 2009/05/24 21:43:44 terminator356 Exp $ +// +// (C) Copyright 2001-2003 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//Added by qt3to4: +#include + +#include "spinboxFP.h" +#include "midi.h" +#include "midictrl.h" +#include "event.h" +#include "mpevent.h" +#include "midiitransform.h" +#include "track.h" +#include "song.h" +#include "xml.h" +#include "gconfig.h" +#include "comboQuant.h" +#include "pitchedit.h" + +#define MIDITRANSFORM_NOTE 0 +#define MIDITRANSFORM_POLY 1 +#define MIDITRANSFORM_CTRL 2 +#define MIDITRANSFORM_ATOUCH 3 +#define MIDITRANSFORM_PITCHBEND 4 +#define MIDITRANSFORM_NRPN 5 +#define MIDITRANSFORM_RPN 6 + +static int selTypeTable[] = { + MIDITRANSFORM_NOTE, MIDITRANSFORM_POLY, MIDITRANSFORM_CTRL, MIDITRANSFORM_ATOUCH, + MIDITRANSFORM_PITCHBEND, MIDITRANSFORM_NRPN, MIDITRANSFORM_RPN + }; + +static int procTypeTable[] = { + MIDITRANSFORM_POLY, MIDITRANSFORM_CTRL, MIDITRANSFORM_ATOUCH, + MIDITRANSFORM_PITCHBEND, MIDITRANSFORM_NRPN, MIDITRANSFORM_RPN + }; + +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(Transform, QString("Transform")), + TDict(Delete, QString("Filter")) + }; + +//--------------------------------------------------------- +// MidiInputTransform +//--------------------------------------------------------- + +class MidiInputTransformation { + public: + QString name; + QString comment; + + ValOp selEventOp; + int selType; + + ValOp selVal1; + int selVal1a, selVal1b; + ValOp selVal2; + int selVal2a, selVal2b; + ValOp selPort; + int selPorta, selPortb; + ValOp selChannel; + int selChannela, selChannelb; + + InputTransformProcEventOp procEvent; + int eventType; + + TransformOperator procVal1; + int procVal1a, procVal1b; + TransformOperator procVal2; + int procVal2a, procVal2b; + TransformOperator procPort; + int procPorta, procPortb; + TransformOperator procChannel; + int procChannela, procChannelb; + + TransformFunction funcOp; + int quantVal; + + MidiInputTransformation(const QString& s) { + name = s; + selEventOp = All; + selType = MIDITRANSFORM_NOTE; + selVal1 = Ignore; + selVal1a = 0; + selVal1b = 0; + selVal2 = Ignore; + selVal2a = 0; + selVal2b = 0; + procEvent = KeepType; + eventType = MIDITRANSFORM_POLY; + procVal1 = Keep; + procVal1a = 0; + procVal1b = 0; + procVal2 = Keep; + procVal2a = 0; + procVal2b = 0; + funcOp = Transform; + quantVal = config.division; + selPort = Ignore; + selChannel = Ignore; + selChannela = 0; + selChannelb = 0; + procPort = Keep; + procChannel = Keep; + procPorta = 0; + procPortb = 0; + procChannela = 0; + procChannelb = 0; + } + void write(int level, Xml& xml) const; + int apply(MidiRecordEvent& ev) const; + bool typesMatch(MidiRecordEvent& e, int selType) const; + }; + +typedef std::list MidiInputTransformationList; +typedef std::list::iterator iMidiInputTransformation; +typedef std::list::const_iterator ciMidiInputTransformation; + +// this is the list of defined transformations: +static MidiInputTransformationList mtlist; + +// list of modules to apply: + +struct ITransModul { + bool valid; + MidiInputTransformation* transform; + }; + +const int MIDI_INPUT_TRANSFORMATIONS = 4; +static ITransModul modules[MIDI_INPUT_TRANSFORMATIONS]; + +//--------------------------------------------------------- +// applyMidiInputTransformation +// return false if event should be dropped +// (filter) +//--------------------------------------------------------- + +bool applyMidiInputTransformation(MidiRecordEvent& event) + { + for (int i = 0; i < 4; ++i) { + if (modules[i].valid && modules[i].transform) { + int rv = modules[i].transform->apply(event); + if (rv == 1) + printf("drop input event\n"); + if (rv) + return rv != 1; + } + } + return true; + } + +//--------------------------------------------------------- +// 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 +//--------------------------------------------------------- + +int MidiInputTransformation::apply(MidiRecordEvent& event) const + { + int t = event.type(); + + switch (selEventOp) { + case Equal: + switch(t) { + case ME_NOTEON: + case ME_NOTEOFF: + if (selType != MIDITRANSFORM_NOTE) + return 0; + break; + default: + if(!typesMatch(event, selType)) + return 0; + break; + } + break; + case Unequal: + switch(event.type()) { + case ME_NOTEON: + case ME_NOTEOFF: + if (selType == MIDITRANSFORM_NOTE) + return 0; + break; + default: + if(typesMatch(event, selType)) + return 0; + break; + } + break; + default: + break; + } + if (filterValOp(selVal1, event.dataA(), selVal1a, selVal1b)) + return 0; + if (filterValOp(selVal2, event.dataB(), selVal2a, selVal2b)) + return 0; + if (filterValOp(selPort, event.port(), selPorta, selPortb)) + return 0; + if (filterValOp(selChannel, event.channel(), selChannela, selChannelb)) + return 0; + + if (funcOp == Delete) + return 1; // discard event + + // transform event +//printf("transform\n"); + if (procEvent != KeepType) + { + switch(eventType) + { + case MIDITRANSFORM_POLY: + event.setType(ME_POLYAFTER); + break; + case MIDITRANSFORM_CTRL: + event.setType(ME_CONTROLLER); + break; + case MIDITRANSFORM_ATOUCH: + event.setType(ME_AFTERTOUCH); + break; + case MIDITRANSFORM_PITCHBEND: + { + event.setType(ME_PITCHBEND); + } + break; + case MIDITRANSFORM_NRPN: + { + event.setA(MidiController::NRPN); + event.setType(ME_CONTROLLER); + } + break; + case MIDITRANSFORM_RPN: + { + event.setA(MidiController::RPN); + event.setType(ME_CONTROLLER); + } + break; + default: + break; + } + } + + //--------------------------------------------------- + // transform value A + //--------------------------------------------------- + + int val = event.dataA(); + switch (procVal1) { + case Keep: + break; + case Plus: + val += procVal1a; + break; + case Minus: + val -= procVal1a; + break; + case Multiply: + val = int(val * (procVal1a/100.0) + .5); + break; + case Divide: + val = int(val / (procVal1a/100.0) + .5); + break; + case Fix: + val = procVal1a; + break; + case Value: + val = procVal2a; + break; + case Invert: + val = 127 - val; + break; + case ScaleMap: + printf("scale map not implemented\n"); + break; + case Flip: + val = procVal1a - val; + break; + case Dynamic: // "crescendo" + printf("transform not implemented\n"); + break; + case Random: + { + int range = procVal1b - procVal1a; + if (range > 0) + val = (rand() % range) + procVal1a; + else if (range < 0) + val = (rand() % -range) + procVal1b; + else + val = procVal1a; + } + break; + } + if (val < 0) + val = 0; + if (val > 127) + val = 127; + event.setA(val); + + //--------------------------------------------------- + // transform value B + //--------------------------------------------------- + + val = event.dataB(); + switch (procVal2) { + case Plus: + val += procVal2a; + break; + case Minus: + val -= procVal2a; + break; + case Multiply: + val = int(val * (procVal2a/100.0) + .5); + break; + case Divide: + val = int(val / (procVal2a/100.0) + .5); + break; + case Fix: + val = procVal2a; + break; + case Value: + val = procVal1a; + break; + case Invert: + val = 127 - val; + break; + case Dynamic: + printf("transform not implemented\n"); + break; + case Random: + { + int range = procVal2b - procVal2a; + if (range > 0) + val = (rand() % range) + procVal2a; + else if (range < 0) + val = (rand() % -range) + procVal2b; + else + val = procVal2a; + } + break; + case ScaleMap: + case Keep: + case Flip: + break; + } + if (val < 0) + val = 0; + if (val > 127) + val = 127; + event.setB(val); + + //--------------------------------------------------- + // transform port + //--------------------------------------------------- + + val = event.port(); + switch (procPort) { + case Plus: + val += procPorta; + break; + case Minus: + val -= procPorta; + break; + case Multiply: + val = int(val * (procPorta/100.0) + .5); + break; + case Divide: + val = int(val / (procPorta/100.0) + .5); + break; + case Fix: + val = procPorta; + break; + case Value: + val = procPorta; + break; + case Invert: + val = 15 - val; + break; + case Dynamic: + printf("transform not implemented\n"); + break; + case Random: + { + int range = procPortb - procPorta; + if (range > 0) + val = (rand() % range) + procPorta; + else if (range < 0) + val = (rand() % -range) + procPortb; + else + val = procPorta; + } + break; + case ScaleMap: + case Keep: + case Flip: + break; + } + if (val < 0) + val = 0; + if (val > 15) + val = 15; + event.setPort(val); + + //--------------------------------------------------- + // transform channel + //--------------------------------------------------- + + val = event.channel(); + switch (procChannel) { + case Plus: + val += procChannela; + break; + case Minus: + val -= procChannela; + break; + case Multiply: + val = int(val * (procChannela/100.0) + .5); + break; + case Divide: + val = int(val / (procChannela/100.0) + .5); + break; + case Fix: + val = procChannela; + break; + case Value: + val = procChannela; + break; + case Invert: + val = 16 - val; + break; + case Dynamic: + printf("transform not implemented\n"); + break; + case Random: + { + int range = procChannelb - procChannela; + if (range > 0) + val = (rand() % range) + procChannela; + else if (range < 0) + val = (rand() % -range) + procChannelb; + else + val = procChannela; + } + break; + case ScaleMap: + case Keep: + case Flip: + break; + } + if (val < 0) + val = 0; + if (val > 15) + val = 15; + event.setChannel(val); + + return 2; + } + +//--------------------------------------------------------- +// typesMatch +//--------------------------------------------------------- + +bool MidiInputTransformation::typesMatch(MidiRecordEvent& e, int selType) const + { + bool matched = false; + int t = e.type(); + switch (selType) + { + case MIDITRANSFORM_NOTE: + matched = ((t == ME_NOTEON) || (t == ME_NOTEOFF)); + break; + case MIDITRANSFORM_POLY: + matched = (t == ME_POLYAFTER); + break; + case MIDITRANSFORM_CTRL: + matched = (t == ME_CONTROLLER); + break; + case MIDITRANSFORM_ATOUCH: + matched = (t == ME_AFTERTOUCH); + break; + case MIDITRANSFORM_PITCHBEND: + { + //if (t == ME_CONTROLLER) { + // MidiController::ControllerType c = midiControllerType(e.dataA()); + // matched = (c == MidiController::Pitch); + matched = (t = ME_PITCHBEND); + } + break; + case MIDITRANSFORM_NRPN: + { + if (t == ME_CONTROLLER) { + MidiController::ControllerType c = midiControllerType(e.dataA()); + matched = (c == MidiController::NRPN); + } + } + break; + case MIDITRANSFORM_RPN: + { + if (t == ME_CONTROLLER) { + MidiController::ControllerType c = midiControllerType(e.dataA()); + matched = (c == MidiController::RPN); + } + } + break; + default: + fprintf(stderr, "Error matching type in MidiTransformerDialog: unknown eventtype!\n"); + break; + } + //printf("Event type=%d, selType =%d matched=%d\n", e.type(), selType, matched); + return matched; + } + +//--------------------------------------------------------- +// MidiInputTransformDialog +// Widgets: +// presetList nameEntry commentEntry +// selEventOp selType +// selVal1Op selVal1a selVal1b +// selVal2Op selVal2a selVal2b +// +// procEventOp procType +// procVal1Op procVal1a procVal1b +// procVal2Op procVal2a procVal2b +// funcOp funcQuantVal +// buttonNew buttonDelete +// +// modulGroup +// modul1select modul1enable +// modul2select modul2enable +// modul3select modul3enable +// modul4select modul4enable +// +// selPortOp selPortVala selPortValb +// selChannelOp selChannelVala selChannelValb +// +// procPortOp procPortVala procPortValb +// procChannelOp procChannelVala procChannelValb +//--------------------------------------------------------- + +MidiInputTransformDialog::MidiInputTransformDialog(QWidget* parent, + const char* name, bool modal, Qt::WFlags fl) + : MidiInputTransformDialogBase(parent, name, modal, fl) + { + cindex = 0; + cmodul = 0; + cmt = 0; + + for (unsigned i = 0; i < sizeof(oplist)/sizeof(*oplist); ++i) + funcOp->insertItem(oplist[i].text, i); + + 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(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(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(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(modul1enable, SIGNAL(toggled(bool)), SLOT(modul1enableChanged(bool))); + connect(modul2enable, SIGNAL(toggled(bool)), SLOT(modul2enableChanged(bool))); + connect(modul3enable, SIGNAL(toggled(bool)), SLOT(modul3enableChanged(bool))); + connect(modul4enable, SIGNAL(toggled(bool)), SLOT(modul4enableChanged(bool))); + connect(modulGroup, SIGNAL(clicked(int)), SLOT(changeModul(int))); + + connect(selPortOp, SIGNAL(activated(int)), SLOT(selPortOpSel(int))); + connect(selPortVala, SIGNAL(valueChanged(int)), SLOT(selPortValaChanged(int))); + connect(selPortValb, SIGNAL(valueChanged(int)), SLOT(selPortValbChanged(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(procPortOp, SIGNAL(activated(int)), SLOT(procPortOpSel(int))); + connect(procPortVala, SIGNAL(valueChanged(int)), SLOT(procPortValaChanged(int))); + connect(procPortValb, SIGNAL(valueChanged(int)), SLOT(procPortValbChanged(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))); + + //--------------------------------------------------- + // populate preset list + //--------------------------------------------------- + + updatePresetList(); + connect(song, SIGNAL(songChanged(int)), SLOT(songChanged(int))); + } + +//--------------------------------------------------------- +// songChanged +//--------------------------------------------------------- + +void MidiInputTransformDialog::songChanged(int flags) +{ + // Whenever a song is loaded, flags is -1. Since transforms are part of configuration, + // use SC_CONFIG here, to filter unwanted song change events. + if(flags & SC_CONFIG) + updatePresetList(); +} + +//--------------------------------------------------------- +// updatePresetList +//--------------------------------------------------------- + +void MidiInputTransformDialog::updatePresetList() +{ + cmt = 0; + presetList->clear(); + + modul1select->setOn(true); + for (iMidiInputTransformation i = mtlist.begin(); i != mtlist.end(); ++i) { + presetList->insertItem((*i)->name); + if (cmt == 0) + cmt = *i; + } + if (cmt == 0) { + // create default "New" preset + cmt = new MidiInputTransformation(tr("New")); + mtlist.push_back(cmt); + presetList->insertItem(tr("New")); + presetList->setCurrentItem(0); + } + changeModul(0); + + modul1enable->setChecked(modules[0].valid); + modul2enable->setChecked(modules[1].valid); + modul3enable->setChecked(modules[2].valid); + modul4enable->setChecked(modules[3].valid); +} + +//--------------------------------------------------------- +// closeEvent +//--------------------------------------------------------- + +void MidiInputTransformDialog::closeEvent(QCloseEvent* ev) + { + emit hideWindow(); + QWidget::closeEvent(ev); + } + +//--------------------------------------------------------- +// writeMidiTransforms +//--------------------------------------------------------- + +void writeMidiInputTransforms(int level, Xml& xml) + { + for (iMidiInputTransformation i = mtlist.begin(); i != mtlist.end(); ++i) { + (*i)->write(level, xml); + } + } + +//--------------------------------------------------------- +// write +//--------------------------------------------------------- + +void MidiInputTransformation::write(int level, Xml& xml) const + { + xml.tag(level++, "midiInputTransform"); + xml.strTag(level, "name", name); + xml.strTag(level, "comment", comment); + xml.intTag(level, "function", int(funcOp)); + + // apply this transformation? + for (int i = 0; i < MIDI_INPUT_TRANSFORMATIONS; ++i) { + if (modules[i].transform == this) { + xml.intTag(level, "apply", int(modules[i].valid)); + break; + } + } + if (funcOp == Quantize) { + xml.intTag(level, "quantVal", quantVal); + } + if (funcOp == Transform || funcOp == Insert) { + if (procEvent != KeepType) { + xml.intTag(level, "procEventOp", int(procEvent)); + xml.intTag(level, "eventType", int(eventType)); + } + if (procVal1 != Keep) { + xml.intTag(level, "procVal1Op", int(procVal1)); + xml.intTag(level, "procVal1a", procVal1a); + xml.intTag(level, "procVal1b", procVal1b); + } + if (procVal2 != Keep) { + xml.intTag(level, "procVal2Op", int(procVal2)); + xml.intTag(level, "procVal2a", procVal2a); + xml.intTag(level, "procVal2b", procVal2b); + } + if (procPort != Keep) { + xml.intTag(level, "procPortOp", int(procPort)); + xml.intTag(level, "procPorta", procPorta); + xml.intTag(level, "procPortb", procPortb); + } + if (procChannel != Keep) { + xml.intTag(level, "procChannelOp", int(procChannel)); + xml.intTag(level, "procChannela", procChannela); + xml.intTag(level, "procChannelb", procChannelb); + } + } + if (selEventOp != Ignore) { + xml.intTag(level, "selEventOp", int(selEventOp)); + xml.intTag(level, "selEventType", int(selType)); + } + if (selVal1 != Ignore) { + xml.intTag(level, "selVal1Op", int(selVal1)); + xml.intTag(level, "selVal1a", selVal1a); + xml.intTag(level, "selVal1b", selVal1b); + } + if (selVal2 != Ignore) { + xml.intTag(level, "selVal2Op", int(selVal2)); + xml.intTag(level, "selVal2a", selVal2a); + xml.intTag(level, "selVal2b", selVal2b); + } + if (selPort != Ignore) { + xml.intTag(level, "selPortOp", int(selPort)); + xml.intTag(level, "selPorta", selPorta); + xml.intTag(level, "selPortb", selPortb); + } + if (selChannel != Ignore) { + xml.intTag(level, "selChannelOp", int(selChannel)); + xml.intTag(level, "selChannela", selChannela); + xml.intTag(level, "selChannelb", selChannelb); + } + xml.etag(level, "midiInputTransform"); + } + +//--------------------------------------------------------- +// readMidiTransform +//--------------------------------------------------------- + +void readMidiInputTransform(Xml& xml) + { + MidiInputTransformation trans(QString("new")); + int apply = -1; + + for (;;) { + Xml::Token token = xml.parse(); + const QString& tag = xml.s1(); + switch (token) { + case Xml::Error: + case Xml::End: + return; + case Xml::TagStart: + if (tag == "name") + trans.name = xml.parse1(); + else if (tag == "comment") + trans.comment = xml.parse1(); + else if (tag == "function") + trans.funcOp = TransformFunction(xml.parseInt()); + else if (tag == "quantVal") + trans.quantVal = xml.parseInt(); + else if (tag == "procEventOp") + trans.procEvent = InputTransformProcEventOp(xml.parseInt()); + else if (tag == "eventType") + trans.eventType = xml.parseInt(); + else if (tag == "procVal1Op") + trans.procVal1 = TransformOperator(xml.parseInt()); + else if (tag == "procVal1a") + trans.procVal1a = xml.parseInt(); + else if (tag == "procVal1b") + trans.procVal1b = xml.parseInt(); + else if (tag == "procVal2Op") + trans.procVal2 = TransformOperator(xml.parseInt()); + else if (tag == "procVal2a") + trans.procVal2a = xml.parseInt(); + else if (tag == "procVal2b") + trans.procVal2b = xml.parseInt(); + else if (tag == "selEventOp") + trans.selEventOp = ValOp(xml.parseInt()); + else if (tag == "selEventType") + trans.selType = xml.parseInt(); + else if (tag == "selVal1Op") + trans.selVal1 = ValOp(xml.parseInt()); + else if (tag == "selVal1a") + trans.selVal1a = xml.parseInt(); + else if (tag == "selVal1b") + trans.selVal1b = xml.parseInt(); + else if (tag == "selVal2Op") + trans.selVal2 = ValOp(xml.parseInt()); + else if (tag == "selVal2a") + trans.selVal2a = xml.parseInt(); + else if (tag == "selVal2b") + trans.selVal2b = xml.parseInt(); + + else if (tag == "procPortOp") + trans.procPort = TransformOperator(xml.parseInt()); + else if (tag == "procPorta") + trans.procPorta = xml.parseInt(); + else if (tag == "procPortb") + trans.procPortb = xml.parseInt(); + else if (tag == "procChannelOp") + trans.procChannel = TransformOperator(xml.parseInt()); + else if (tag == "procChannela") + trans.procChannela = xml.parseInt(); + else if (tag == "procChannelb") + trans.procChannelb = xml.parseInt(); + + else if (tag == "selPortOp") + trans.selPort = ValOp(xml.parseInt()); + else if (tag == "selPorta") + trans.selPorta = xml.parseInt(); + else if (tag == "selPortb") + trans.selPortb = xml.parseInt(); + else if (tag == "selChannelOp") + trans.selChannel = ValOp(xml.parseInt()); + else if (tag == "selChannela") + trans.selChannela = xml.parseInt(); + else if (tag == "selChannelb") + trans.selChannelb = xml.parseInt(); + + else if (tag == "apply") + apply = xml.parseInt(); + else + xml.unknown("midiInputTransform"); + break; + case Xml::TagEnd: + if (xml.s1() == "midiInputTransform") { +// printf("midi Input transform <%s> apply %d\n", +// trans.name.latin1(), apply); + + // By T356. A previous bug caused some .med files to grow very large + // with duplicate transforms. Here we can eliminate those duplicates. + for(iMidiInputTransformation i = mtlist.begin(); i != mtlist.end(); ++i) + { + if((*i)->name == trans.name) + { + return; + } + } + + MidiInputTransformation* t = new MidiInputTransformation(trans); + // search free slot in modules + if (apply != -1) { + for (int i = 0; i < MIDI_INPUT_TRANSFORMATIONS; ++i) { + if (modules[i].transform == 0) { + modules[i].transform = t; + modules[i].valid = apply; + break; + } + } + } + mtlist.push_back(t); + return; + } + default: + break; + } + } + } + +//--------------------------------------------------------- +// clearMidiInputTransforms +//--------------------------------------------------------- + +void clearMidiInputTransforms() +{ + for (int i = 0; i < MIDI_INPUT_TRANSFORMATIONS; ++i) + { + modules[i].transform = 0; + modules[i].valid = false; + } + for (iMidiInputTransformation i = mtlist.begin(); i != mtlist.end(); ++i) + { + MidiInputTransformation* t = *i; + if(t) + delete t; + } + mtlist.clear(); +} + +//--------------------------------------------------------- +// accept +//--------------------------------------------------------- + +void MidiInputTransformDialog::accept() + { + reject(); + } + +//--------------------------------------------------------- +// reject +//--------------------------------------------------------- + +void MidiInputTransformDialog::reject() + { + close(false); + } + +//--------------------------------------------------------- +// setValOp +//--------------------------------------------------------- + +void MidiInputTransformDialog::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 MidiInputTransformDialog::selEventOpSel(int val) + { + selType->setEnabled(val != All); + cmt->selEventOp = ValOp(val); + selVal1aChanged(cmt->selVal1a); + selVal1bChanged(cmt->selVal1b); + } + +//--------------------------------------------------------- +// selTypeSel +//--------------------------------------------------------- + +void MidiInputTransformDialog::selTypeSel(int val) + { + cmt->selType = selTypeTable[val]; + selVal1aChanged(cmt->selVal1a); + selVal1bChanged(cmt->selVal1b); + } + +//--------------------------------------------------------- +// selVal1OpSel +//--------------------------------------------------------- + +void MidiInputTransformDialog::selVal1OpSel(int val) + { + setValOp(selVal1a, selVal1b, ValOp(val)); + cmt->selVal1 = ValOp(val); + } + +//--------------------------------------------------------- +// selVal2OpSel +//--------------------------------------------------------- + +void MidiInputTransformDialog::selVal2OpSel(int val) + { + setValOp(selVal2a, selVal2b, ValOp(val)); + cmt->selVal2 = ValOp(val); + } + +//--------------------------------------------------------- +// procEventOpSel +//--------------------------------------------------------- + +void MidiInputTransformDialog::procEventOpSel(int val) + { + InputTransformProcEventOp op = val == 0 ? KeepType : FixType; + procType->setEnabled(op == FixType); + cmt->procEvent = op; + + procVal1aChanged(cmt->procVal1a); + procVal1bChanged(cmt->procVal1b); + } + +//--------------------------------------------------------- +// procEventTypeSel +//--------------------------------------------------------- + +void MidiInputTransformDialog::procEventTypeSel(int val) + { + cmt->eventType = procTypeTable[val]; + procVal1aChanged(cmt->procVal1a); + procVal1bChanged(cmt->procVal1b); + } + +//--------------------------------------------------------- +// procVal1OpSel +//--------------------------------------------------------- + +void MidiInputTransformDialog::procVal1OpSel(int val) + { + 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; + } + procVal1aChanged(cmt->procVal1a); + procVal1bChanged(cmt->procVal1b); + } + +//--------------------------------------------------------- +// procVal2OpSel +//--------------------------------------------------------- + +void MidiInputTransformDialog::procVal2OpSel(int val) + { + TransformOperator op = TransformOperator(procVal2Map[val]); + 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; + } + } + +//--------------------------------------------------------- +// funcOpSel +//--------------------------------------------------------- + +void MidiInputTransformDialog::funcOpSel(int val) + { + TransformFunction op = oplist[val].id; + + bool isFuncOp(op == Transform); + + procEventOp->setEnabled(isFuncOp); + procType->setEnabled(isFuncOp); + procVal1Op->setEnabled(isFuncOp); + procVal1a->setEnabled(isFuncOp); + procVal1b->setEnabled(isFuncOp); + procVal2Op->setEnabled(isFuncOp); + procVal2a->setEnabled(isFuncOp); + procVal2b->setEnabled(isFuncOp); + procPortOp->setEnabled(isFuncOp); + procPortVala->setEnabled(isFuncOp); + procPortValb->setEnabled(isFuncOp); + procChannelOp->setEnabled(isFuncOp); + procChannelVala->setEnabled(isFuncOp); + procChannelValb->setEnabled(isFuncOp); + if (isFuncOp) { + procEventOpSel(cmt->procEvent); + procVal1OpSel(cmt->procVal1); + procVal2OpSel(cmt->procVal2); + procPortOpSel(cmt->procPort); + procChannelOpSel(cmt->procChannel); + } + cmt->funcOp = op; + } + +//--------------------------------------------------------- +// presetNew +//--------------------------------------------------------- + +void MidiInputTransformDialog::presetNew() + { + QString name; + for (int i = 0;; ++i) { + name.sprintf("New-%d", i); + iMidiInputTransformation imt; + for (imt = mtlist.begin(); imt != mtlist.end(); ++imt) { + if (name == (*imt)->name) + break; + } + if (imt == mtlist.end()) + break; + } + MidiInputTransformation* mt = new MidiInputTransformation(name); + Q3ListBoxText* lbi = new Q3ListBoxText(presetList, name); + mtlist.push_back(mt); + presetList->setCurrentItem(lbi); + } + +//--------------------------------------------------------- +// presetDelete +//--------------------------------------------------------- + +void MidiInputTransformDialog::presetDelete() + { + if (cindex != -1) { + iMidiInputTransformation mt = mtlist.begin(); + for (int i = 0; i < cindex; ++i, ++mt) { + mtlist.erase(mt); + presetList->removeItem(cindex); + break; + } + } + } + +//--------------------------------------------------------- +// nameChanged +//--------------------------------------------------------- + +void MidiInputTransformDialog::nameChanged(const QString& s) + { + cmt->name = s; + Q3ListBoxItem* item = presetList->item(cindex); + if (s != item->text()) { + disconnect(presetList, SIGNAL(highlighted(Q3ListBoxItem*)), + this, SLOT(presetChanged(Q3ListBoxItem*))); + presetList->changeItem(s, cindex); + connect(presetList, SIGNAL(highlighted(Q3ListBoxItem*)), + SLOT(presetChanged(Q3ListBoxItem*))); + } + } + +//--------------------------------------------------------- +// commentChanged +//--------------------------------------------------------- + +void MidiInputTransformDialog::commentChanged() + { + cmt->comment = commentEntry->text(); + } + +//--------------------------------------------------------- +// selVal1aChanged +//--------------------------------------------------------- + +void MidiInputTransformDialog::selVal1aChanged(int val) + { + cmt->selVal1a = val; + if ((cmt->selEventOp != All) + && (cmt->selType == MIDITRANSFORM_NOTE)) { + selVal1a->setSuffix(" - " + pitch2string(val)); + } + else + selVal1a->setSuffix(QString("")); + } + +//--------------------------------------------------------- +// selVal1bChanged +//--------------------------------------------------------- + +void MidiInputTransformDialog::selVal1bChanged(int val) + { + cmt->selVal1b = val; + if ((cmt->selEventOp != All) + && (cmt->selType == MIDITRANSFORM_NOTE)) { + selVal1b->setSuffix(" - " + pitch2string(val)); + } + else + selVal1b->setSuffix(QString("")); + } + +//--------------------------------------------------------- +// selVal2aChanged +//--------------------------------------------------------- + +void MidiInputTransformDialog::selVal2aChanged(int val) + { + cmt->selVal2a = val; + } + +//--------------------------------------------------------- +// selVal2bChanged +//--------------------------------------------------------- + +void MidiInputTransformDialog::selVal2bChanged(int val) + { + cmt->selVal2b = val; + } + +//--------------------------------------------------------- +// procVal1aChanged +//--------------------------------------------------------- + +void MidiInputTransformDialog::procVal1aChanged(int val) + { + cmt->procVal1a = val; + + if((cmt->procEvent == KeepType && cmt->selType == MIDITRANSFORM_NOTE) && + (cmt->procVal1 == Fix || cmt->procVal1 == ScaleMap || cmt->procVal1 == Dynamic || + cmt->procVal1 == Random || cmt->procVal1 == Flip)) + { + procVal1a->setSuffix(" - " + pitch2string(val)); + } + else + procVal1a->setSuffix(QString("")); + } + +//--------------------------------------------------------- +// procVal1bChanged +//--------------------------------------------------------- + +void MidiInputTransformDialog::procVal1bChanged(int val) + { + cmt->procVal1b = val; + + if((cmt->procEvent == KeepType && cmt->selType == MIDITRANSFORM_NOTE) && + (cmt->procVal1 == Fix || cmt->procVal1 == ScaleMap || cmt->procVal1 == Dynamic || + cmt->procVal1 == Random || cmt->procVal1 == Flip)) + { + procVal1b->setSuffix(" - " + pitch2string(val)); + } + else + procVal1b->setSuffix(QString("")); + } + +//--------------------------------------------------------- +// procVal2aChanged +//--------------------------------------------------------- + +void MidiInputTransformDialog::procVal2aChanged(int val) + { + cmt->procVal2a = val; + } + +//--------------------------------------------------------- +// procVal2bChanged +//--------------------------------------------------------- + +void MidiInputTransformDialog::procVal2bChanged(int val) + { + cmt->procVal2b = val; + } + +//--------------------------------------------------------- +// modul1enableChanged +//--------------------------------------------------------- + +void MidiInputTransformDialog::modul1enableChanged(bool val) + { + modules[0].valid = val; + } + +//--------------------------------------------------------- +// modul2enableChanged +//--------------------------------------------------------- + +void MidiInputTransformDialog::modul2enableChanged(bool val) + { + modules[1].valid = val; + } + +//--------------------------------------------------------- +// modul3enableChanged +//--------------------------------------------------------- + +void MidiInputTransformDialog::modul3enableChanged(bool val) + { + modules[2].valid = val; + } + +//--------------------------------------------------------- +// modul4enableChanged +//--------------------------------------------------------- + +void MidiInputTransformDialog::modul4enableChanged(bool val) + { + modules[3].valid = val; + } + +//--------------------------------------------------------- +// selPortOpSel +//--------------------------------------------------------- + +void MidiInputTransformDialog::selPortOpSel(int val) + { + setValOp(selPortVala, selPortValb, ValOp(val)); + cmt->selPort = ValOp(val); + } + +//--------------------------------------------------------- +// selPortValaChanged +//--------------------------------------------------------- + +void MidiInputTransformDialog::selPortValaChanged(int val) + { + cmt->selPorta = val; + } + +//--------------------------------------------------------- +// selPortValbChanged +//--------------------------------------------------------- + +void MidiInputTransformDialog::selPortValbChanged(int val) + { + cmt->selPortb = val; + } + +//--------------------------------------------------------- +// selChannelOpSel +//--------------------------------------------------------- + +void MidiInputTransformDialog::selChannelOpSel(int val) + { + setValOp(selChannelVala, selChannelValb, ValOp(val)); + cmt->selChannel = ValOp(val); + } + +//--------------------------------------------------------- +// selChannelValaChanged +//--------------------------------------------------------- + +void MidiInputTransformDialog::selChannelValaChanged(int val) + { + cmt->selChannela = val; + } + +//--------------------------------------------------------- +// selChannelValbChanged +//--------------------------------------------------------- + +void MidiInputTransformDialog::selChannelValbChanged(int val) + { + cmt->selChannelb = val; + } + +//--------------------------------------------------------- +// procPortOpSel +//--------------------------------------------------------- + +void MidiInputTransformDialog::procPortOpSel(int val) + { + cmt->procPort = TransformOperator(val); + switch(TransformOperator(val)) { + case Keep: + case Invert: + procPortVala->setEnabled(false); + procPortValb->setEnabled(false); + break; + case Multiply: + case Divide: + procPortVala->setEnabled(true); + procPortVala->setPrecision(2); + procPortValb->setEnabled(false); + break; + case Plus: + case Minus: + case Fix: + case Value: + case Flip: + procPortVala->setPrecision(0); + procPortVala->setEnabled(true); + procPortValb->setEnabled(false); + break; + case Random: + case ScaleMap: + case Dynamic: + procPortVala->setPrecision(0); + procPortVala->setEnabled(true); + procPortValb->setEnabled(true); + break; + } + } + +//--------------------------------------------------------- +// procPortValaChanged +//--------------------------------------------------------- + +void MidiInputTransformDialog::procPortValaChanged(int val) + { + cmt->procPorta = val; + } + +//--------------------------------------------------------- +// procPortValbChanged +//--------------------------------------------------------- + +void MidiInputTransformDialog::procPortValbChanged(int val) + { + cmt->procPortb = val; + } + +//--------------------------------------------------------- +// procChannelOpSel +//--------------------------------------------------------- + +void MidiInputTransformDialog::procChannelOpSel(int val) + { + cmt->procChannel = TransformOperator(val); + switch(TransformOperator(val)) { + case Keep: + case Invert: + procChannelVala->setEnabled(false); + procChannelValb->setEnabled(false); + break; + case Multiply: + case Divide: + procChannelVala->setEnabled(true); + procChannelVala->setPrecision(2); + procChannelValb->setEnabled(false); + break; + case Plus: + case Minus: + case Fix: + case Value: + case Flip: + procChannelVala->setPrecision(0); + procChannelVala->setEnabled(true); + procChannelValb->setEnabled(false); + break; + case Random: + case ScaleMap: + case Dynamic: + procChannelVala->setPrecision(0); + procChannelVala->setEnabled(true); + procChannelValb->setEnabled(true); + break; + } + } + +//--------------------------------------------------------- +// procChannelValaChanged +//--------------------------------------------------------- + +void MidiInputTransformDialog::procChannelValaChanged(int val) + { + cmt->procChannela = val; + } + +//--------------------------------------------------------- +// procChannelValbChanged +//--------------------------------------------------------- + +void MidiInputTransformDialog::procChannelValbChanged(int val) + { + cmt->procChannelb = val; + } + +//--------------------------------------------------------- +// changeModul +//--------------------------------------------------------- + +void MidiInputTransformDialog::changeModul(int k) + { +printf("change modul %d\n", k); + + cmodul = k; // current modul + + if (modules[k].transform == 0) { + printf("transform %d ist null\n", k); + modules[k].transform = cmt; + } + else { + //--------------------------------------------- + // search transformation in list + //--------------------------------------------- + + int idx = 0; + iMidiInputTransformation i; + for (i = mtlist.begin(); i != mtlist.end(); ++i, ++idx) { + if (*i == modules[k].transform) { + presetList->setCurrentItem(idx); + break; + } + } + if (i == mtlist.end()) + printf("change to unknown transformation!\n"); + } + } + +//--------------------------------------------------------- +// presetChanged +//--------------------------------------------------------- + +void MidiInputTransformDialog::presetChanged(Q3ListBoxItem* item) + { + cindex = presetList->index(item); + + //--------------------------------------------------- + // search transformation in list and set + // cmt + //--------------------------------------------------- + + iMidiInputTransformation i; + for (i = mtlist.begin(); i != mtlist.end(); ++i) { + if (item->text() == (*i)->name) { + printf("found %s\n", (*i)->name.latin1()); + cmt = *i; + if (cmodul != -1) { + modules[cmodul].transform = *i; + } + break; + } + } + if (i == mtlist.end()) { + printf("MidiInputTransformDialog::presetChanged: not found\n"); + return; + } + nameEntry->setText(cmt->name); + commentEntry->setText(cmt->comment); + + selEventOp->setCurrentItem(cmt->selEventOp); + selEventOpSel(cmt->selEventOp); + + for (unsigned i = 0; i < sizeof(selTypeTable)/sizeof(*selTypeTable); ++i) { + if (selTypeTable[i] == cmt->selType) { + selType->setCurrentItem(i); + break; + } + } + + selVal1Op->setCurrentItem(cmt->selVal1); + selVal1OpSel(cmt->selVal1); + + selVal2Op->setCurrentItem(cmt->selVal2); + selVal2OpSel(cmt->selVal2); + + selPortOp->setCurrentItem(cmt->selPort); + selPortOpSel(cmt->selPort); + + selChannelOp->setCurrentItem(cmt->selChannel); + selChannelOpSel(cmt->selChannel); + + { + unsigned i; + for (i = 0; i < sizeof(oplist)/sizeof(*oplist); ++i) { + if (oplist[i].id == cmt->funcOp) { + funcOp->setCurrentItem(i); + break; + } + } + if (i == sizeof(oplist)/sizeof(*oplist)) + printf("internal error: bad OpCode\n"); + funcOpSel(i); + } + + for (unsigned i = 0; i < sizeof(procTypeTable)/sizeof(*procTypeTable); ++i) { + if (procTypeTable[i] == cmt->eventType) { + procType->setCurrentItem(i); + break; + } + } + + procEventOp->setCurrentItem(cmt->procEvent); + procEventOpSel(cmt->procEvent); + + procVal1Op->setCurrentItem(cmt->procVal1); + procVal1OpSel(cmt->procVal1); + + for (unsigned i = 0; i < sizeof(procVal2Map)/sizeof(*procVal2Map); ++i) { + if (procVal2Map[i] == cmt->procVal2) { + procVal2Op->setCurrentItem(i); + break; + } + } + + selVal1a->setValue(cmt->selVal1a); + selVal1b->setValue(cmt->selVal1b); + selVal1aChanged(cmt->selVal1a); + selVal1bChanged(cmt->selVal1b); + + selVal2a->setValue(cmt->selVal2a); + selVal2b->setValue(cmt->selVal2b); + + selPortVala->setValue(cmt->selPorta); + selPortValb->setValue(cmt->selPortb); + + selChannelVala->setValue(cmt->selChannela); + selChannelValb->setValue(cmt->selChannelb); + + procVal1a->setValue(cmt->procVal1a); + procVal1b->setValue(cmt->procVal1b); + + procVal2a->setValue(cmt->procVal2a); + procVal2b->setValue(cmt->procVal2b); + + procPortVala->setValue(cmt->procPorta); + procPortValb->setValue(cmt->procPortb); + + procChannelVala->setValue(cmt->procChannela); + procChannelValb->setValue(cmt->procChannelb); + + procPortOp->setCurrentItem(cmt->procPort); + procPortOpSel(cmt->procPort); + + procChannelOp->setCurrentItem(cmt->procChannel); + procChannelOpSel(cmt->procChannel); + + } + diff --git a/muse2/muse/mplugins/midiitransform.h b/muse2/muse/mplugins/midiitransform.h new file mode 100644 index 00000000..860797c5 --- /dev/null +++ b/muse2/muse/mplugins/midiitransform.h @@ -0,0 +1,101 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: midiitransform.h,v 1.1.1.1.2.1 2009/02/02 21:38:01 terminator356 Exp $ +// +// (C) Copyright 2001 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __MIDIITRANSFORM_H__ +#define __MIDIITRANSFORM_H__ + +#include "itransformbase.h" +//Added by qt3to4: +#include + +class Q3ListBoxItem; +class MidiTransformation; +class MidiInputTransformation; +class MidiRecordEvent; +class MidiPart; +class Xml; + +#include "miditransform.h" + +enum InputTransformProcEventOp { KeepType, FixType }; +//--------------------------------------------------------- +// MidiInputTransform +//--------------------------------------------------------- + +class MidiInputTransformDialog : public MidiInputTransformDialogBase { + Q_OBJECT + MidiInputTransformation* cmt; + int cindex; // current index in preset list + int cmodul; // current index in modules list + + virtual void accept(); + virtual void reject(); + void setValOp(QWidget* a, QWidget* b, ValOp op); + virtual void closeEvent(QCloseEvent*); + + void updatePresetList(); + + signals: + void hideWindow(); + + private slots: + void presetNew(); + void presetDelete(); + + void changeModul(int k); + 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 presetChanged(Q3ListBoxItem*); + void nameChanged(const QString&); + void commentChanged(); + 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 modul1enableChanged(bool); + void modul2enableChanged(bool); + void modul3enableChanged(bool); + void modul4enableChanged(bool); + + void selPortOpSel(int); + void selPortValaChanged(int); + void selPortValbChanged(int); + void selChannelOpSel(int); + void selChannelValaChanged(int); + void selChannelValbChanged(int); + void procPortOpSel(int); + void procPortValaChanged(int); + void procPortValbChanged(int); + void procChannelOpSel(int); + void procChannelValaChanged(int); + void procChannelValbChanged(int); + + public slots: + void songChanged(int); + + public: + MidiInputTransformDialog(QWidget* parent = 0, const char* name = 0, + bool modal = false, Qt::WFlags fl = 0); + }; + +extern void writeMidiInputTransforms(int level, Xml& xml); +extern void readMidiInputTransform(Xml&); +extern bool applyMidiInputTransformation(MidiRecordEvent& event); +extern void clearMidiInputTransforms(); +#endif diff --git a/muse2/muse/mplugins/mitplugin.cpp b/muse2/muse/mplugins/mitplugin.cpp new file mode 100644 index 00000000..d8066e2c --- /dev/null +++ b/muse2/muse/mplugins/mitplugin.cpp @@ -0,0 +1,145 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: mitplugin.cpp,v 1.1.1.1 2003/10/27 18:52:40 wschweer Exp $ +// +// (C) Copyright 2001 Werner Schweer (ws@seh.de) +//========================================================= + +#include + +#include "mitplugin.h" +#include "app.h" +#include "event.h" +#include "xml.h" + +#include "midiitransform.h" +#include "mittranspose.h" +#include "midifilterimpl.h" +#include "mrconfig.h" +#include "rhythm.h" + +MITPluginList mitPlugins; + +//--------------------------------------------------------- +// startMidiInputPlugin +//--------------------------------------------------------- + +void MusE::startMidiInputPlugin(int id) + { + bool flag = false; + QWidget* w = 0; + if (id == 0) { + if (!mitPluginTranspose) { + mitPluginTranspose = new MITPluginTranspose(); + mitPlugins.push_back(mitPluginTranspose); + connect(mitPluginTranspose, SIGNAL(hideWindow()), + SLOT(hideMitPluginTranspose())); + } + w = mitPluginTranspose; + } + else if (id == 1) { + if (!midiInputTransform) { + midiInputTransform = new MidiInputTransformDialog(); + connect(midiInputTransform, SIGNAL(hideWindow()), + SLOT(hideMidiInputTransform())); + } + w = midiInputTransform; + } + else if (id == 2) { + if (!midiFilterConfig) { + midiFilterConfig = new MidiFilterConfig(); + connect(midiFilterConfig, SIGNAL(hideWindow()), + SLOT(hideMidiFilterConfig())); + } + w = midiFilterConfig; + } + else if (id == 3) { + if (!midiRemoteConfig) { + midiRemoteConfig = new MRConfig(); + connect(midiRemoteConfig, SIGNAL(hideWindow()), + SLOT(hideMidiRemoteConfig())); + } + w = midiRemoteConfig; + } + else if (id == 4) { + if (!midiRhythmGenerator) { + midiRhythmGenerator = new RhythmGen(); + connect(midiRhythmGenerator, SIGNAL(hideWindow()), + SLOT(hideMidiRhythmGenerator())); + } + w = midiRhythmGenerator; + } + if (w) { + flag = !w->isVisible(); + if (flag) + w->show(); + else + w->hide(); + } + midiInputPlugins->setItemChecked(id, flag); + } + +void MusE::hideMitPluginTranspose() + { + midiInputPlugins->setItemChecked(0, false); + } +void MusE::hideMidiInputTransform() + { + midiInputPlugins->setItemChecked(1, false); + } +void MusE::hideMidiFilterConfig() + { + midiInputPlugins->setItemChecked(2, false); + } +void MusE::hideMidiRemoteConfig() + { + midiInputPlugins->setItemChecked(3, false); + } +void MusE::hideMidiRhythmGenerator() + { + midiInputPlugins->setItemChecked(4, false); + } + +//--------------------------------------------------------- +// processMidiInputTransformPlugins +//--------------------------------------------------------- + +void processMidiInputTransformPlugins(MEvent& event) + { + for (iMITPlugin i = mitPlugins.begin(); i != mitPlugins.end(); ++i) + (*i)->process(event); + } + +//--------------------------------------------------------- +// startMidiTransformer +//--------------------------------------------------------- + +void MusE::startMidiTransformer() + { + if (midiTransformerDialog == 0) + midiTransformerDialog = new MidiTransformerDialog(this); + midiTransformerDialog->show(); + } + +//--------------------------------------------------------- +// writeStatusMidiInputTransformPlugins +//--------------------------------------------------------- + +void writeStatusMidiInputTransformPlugins(int level, Xml& xml) + { + for (iMITPlugin i = mitPlugins.begin(); i != mitPlugins.end(); ++i) { + xml.tag(level++, "mplugin name=\"%d\""); + (*i)->writeStatus(level, xml); + xml.etag(level, "mplugin"); + } + } + +//--------------------------------------------------------- +// readStatusMidiInputTransformPlugin +//--------------------------------------------------------- + +void readStatusMidiInputTransformPlugin(Xml&) + { + } + diff --git a/muse2/muse/mplugins/mitplugin.h b/muse2/muse/mplugins/mitplugin.h new file mode 100644 index 00000000..a7ab3729 --- /dev/null +++ b/muse2/muse/mplugins/mitplugin.h @@ -0,0 +1,39 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: mitplugin.h,v 1.1.1.1.2.1 2007/01/27 14:52:43 spamatica Exp $ +// +// (C) Copyright 2001 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __MITPLUGIN_H__ +#define __MITPLUGIN_H__ + +#include + +class MEvent; +class Xml; + +//--------------------------------------------------------- +// MITPlugin +// midi input transform plugin +//--------------------------------------------------------- + +class MITPlugin { + public: + virtual ~MITPlugin(){} + virtual void process(MEvent& event) = 0; + virtual void readStatus(Xml&) {} + virtual void writeStatus(int, Xml&) const {} + }; + +typedef std::list MITPluginList; +typedef MITPluginList::iterator iMITPlugin; + +extern MITPluginList mitPlugins; +extern void processMidiInputTransformPlugins(MEvent&); +extern void writeStatusMidiInputTransformPlugins(int, Xml&); +extern void readStatusMidiInputTransformPlugin(Xml&); + +#endif + diff --git a/muse2/muse/mplugins/mittranspose.cpp b/muse2/muse/mplugins/mittranspose.cpp new file mode 100644 index 00000000..b9a260c9 --- /dev/null +++ b/muse2/muse/mplugins/mittranspose.cpp @@ -0,0 +1,181 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: mittranspose.cpp,v 1.2.2.1 2009/05/03 04:14:00 terminator356 Exp $ +// +// (C) Copyright 2001 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include +#include +#include +//Added by qt3to4: +#include + +#include "mittranspose.h" +#include "song.h" +#include "mpevent.h" +#include "pitchedit.h" +#include "xml.h" +#include "globals.h" + +MITPluginTranspose* mitPluginTranspose; + +//--------------------------------------------------------- +// MITPluginTranspose +//--------------------------------------------------------- + +MITPluginTranspose::MITPluginTranspose(QWidget* parent, const char* name, Qt::WFlags fl) + : MITTransposeBase(parent, name, fl) + { + on = false; + transpose = 0; + trigger = 24; + transposeChangedFlag = false; + triggerKeySpinBox->setValue(trigger); + + onToggled(false); + connect(onCheckBox, SIGNAL(toggled(bool)), SLOT(onToggled(bool))); + connect(triggerKeySpinBox, SIGNAL(valueChanged(int)), + SLOT(triggerKeyChanged(int))); + connect(heartBeatTimer, SIGNAL(timeout()), SLOT(noteReceived())); + } + +//--------------------------------------------------------- +// closeEvent +//--------------------------------------------------------- + +void MITPluginTranspose::closeEvent(QCloseEvent* ev) + { + emit hideWindow(); + QWidget::closeEvent(ev); + } + +//--------------------------------------------------------- +// noteReceived +//--------------------------------------------------------- + +void MITPluginTranspose::noteReceived() + { + if (transposeChangedFlag) + { + // Added by Tim. p3.3.6 + //printf("MITPluginTranspose::noteReceived\n"); + + transposeChanged(); + } + } + +//--------------------------------------------------------- +// triggerKeyChanged +//--------------------------------------------------------- + +void MITPluginTranspose::triggerKeyChanged(int val) + { + trigger = val; + } + +//--------------------------------------------------------- +// transposeChanged +//--------------------------------------------------------- + +void MITPluginTranspose::transposeChanged() + { + QString s; + s.sprintf("%c%d", transpose >= 0 ? '-' : ' ', transpose); + transposeLabel->setText(s); + transposeChangedFlag = false; + } + +//--------------------------------------------------------- +// onToggled +//--------------------------------------------------------- + +void MITPluginTranspose::onToggled(bool f) + { + on = f; + if (!on) { + transpose = 0; + transposeChanged(); + keyOnList.clear(); + } + transposeLabel->setEnabled(on); + triggerKeySpinBox->setEnabled(on); + } + +//--------------------------------------------------------- +// process +//--------------------------------------------------------- + +void MITPluginTranspose::process(MEvent& ev) + { + if (!on || (ev.type() != 0x90)) + return; + int pitch = ev.dataA(); + if (pitch >= trigger && pitch < (trigger+12)) { + // process control keys + int diff = transpose - (pitch-trigger); + transpose -= diff; + transposeChangedFlag = true; + return; + } + if (ev.dataB() == 0) { + // Note Off + for (iKeyOn i = keyOnList.begin(); i != keyOnList.end(); ++i) { + if (i->pitch == pitch && i->channel == ev.channel() + && i->port == ev.port()) { + pitch += i->transpose; + keyOnList.erase(i); + break; + } + } + } + else { + // Note On + keyOnList.push_back(KeyOn(pitch, ev.channel(), ev.port(), transpose)); + pitch += transpose; + } + ev.setA(pitch); + } + +//--------------------------------------------------------- +// readStatus +//--------------------------------------------------------- + +void MITPluginTranspose::readStatus(Xml& xml) + { + for (;;) { + Xml::Token token = xml.parse(); + const QString& tag = xml.s1(); + switch (token) { + case Xml::Error: + case Xml::End: + return; + case Xml::Text: + if (tag == "on") + on = xml.parseInt(); + else if (tag == "trigger") + trigger = xml.parseInt(); + else + xml.unknown("TransposePlugin"); + break; + case Xml::TagEnd: + if (xml.s1() == "mplugin") + return; + default: + break; + } + } + } + +//--------------------------------------------------------- +// writeStatus +//--------------------------------------------------------- + +void MITPluginTranspose::writeStatus(int level, Xml& xml) const + { + xml.intTag(level, "on", on); + xml.intTag(level, "trigger", trigger); + } + diff --git a/muse2/muse/mplugins/mittranspose.h b/muse2/muse/mplugins/mittranspose.h new file mode 100644 index 00000000..b942eddf --- /dev/null +++ b/muse2/muse/mplugins/mittranspose.h @@ -0,0 +1,70 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: mittranspose.h,v 1.1.1.1 2003/10/27 18:52:40 wschweer Exp $ +// +// (C) Copyright 2001 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __MITTRANSPOSE_H__ +#define __MITTRANSPOSE_H__ + +#include "mitplugin.h" +#include "mittransposebase.h" +#include +//Added by qt3to4: +#include + +struct KeyOn { + unsigned char pitch; + unsigned char channel; + unsigned char port; + char transpose; + KeyOn(int a, int b, int c, int d) { + pitch = a; + transpose = d; + channel = b; + port = c; + } + }; + +typedef std::list KeyOnList; +typedef KeyOnList::iterator iKeyOn; + +class Xml; + +//--------------------------------------------------------- +// MITPluginTranspose +//--------------------------------------------------------- + +class MITPluginTranspose : public MITTransposeBase, public MITPlugin { + Q_OBJECT + + KeyOnList keyOnList; + int transpose; // current pitch offset + int trigger; + bool on; + bool transposeChangedFlag; + + void transposeChanged(); + virtual void closeEvent(QCloseEvent*); + + signals: + void hideWindow(); + + private slots: + void onToggled(bool); + void triggerKeyChanged(int); + void noteReceived(); + + public: + MITPluginTranspose(QWidget* parent = 0, const char* name = 0, Qt::WFlags fl = 0); + virtual void process(MEvent&); + virtual void readStatus(Xml&); + virtual void writeStatus(int, Xml&) const; + }; + +extern MITPluginTranspose* mitPluginTranspose; + +#endif + diff --git a/muse2/muse/mplugins/mrconfig.cpp b/muse2/muse/mplugins/mrconfig.cpp new file mode 100644 index 00000000..38b67de3 --- /dev/null +++ b/muse2/muse/mplugins/mrconfig.cpp @@ -0,0 +1,71 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: mrconfig.cpp,v 1.1.1.1 2003/10/27 18:52:43 wschweer Exp $ +// +// (C) Copyright 2001 Werner Schweer (ws@seh.de) +//========================================================= + +#include "pitchedit.h" +#include "mrconfig.h" +#include "globals.h" +#include +//Added by qt3to4: +#include + +//--------------------------------------------------------- +// MRConfig +// Midi Remote Control Config +//--------------------------------------------------------- + +MRConfig::MRConfig(QWidget* parent, const char* name, Qt::WFlags fl) + : MRConfigBase(parent, name, fl) + { + b1->setChecked(rcEnable); + sb1->setValue(rcStopNote); + sb2->setValue(rcRecordNote); + sb3->setValue(rcGotoLeftMarkNote); + sb4->setValue(rcPlayNote); + + connect(b1, SIGNAL(toggled(bool)), SLOT(setRcEnable(bool))); + connect(sb1, SIGNAL(valueChanged(int)), SLOT(setRcStopNote(int))); + connect(sb2, SIGNAL(valueChanged(int)), SLOT(setRcRecordNote(int))); + connect(sb3, SIGNAL(valueChanged(int)), SLOT(setRcGotoLeftMarkNote(int))); + connect(sb4, SIGNAL(valueChanged(int)), SLOT(setRcPlayNote(int))); + } + +//--------------------------------------------------------- +// closeEvent +//--------------------------------------------------------- + +void MRConfig::closeEvent(QCloseEvent* ev) + { + emit hideWindow(); + QWidget::closeEvent(ev); + } + +void MRConfig::setRcEnable(bool f) + { + rcEnable = f; + } + +void MRConfig::setRcStopNote(int val) + { + rcStopNote = val; + } + +void MRConfig::setRcRecordNote(int val) + { + rcRecordNote = val; + } + +void MRConfig::setRcGotoLeftMarkNote(int val) + { + rcGotoLeftMarkNote = val; + } + +void MRConfig::setRcPlayNote(int val) + { + rcPlayNote = val; + } + diff --git a/muse2/muse/mplugins/mrconfig.h b/muse2/muse/mplugins/mrconfig.h new file mode 100644 index 00000000..67b1976c --- /dev/null +++ b/muse2/muse/mplugins/mrconfig.h @@ -0,0 +1,40 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: mrconfig.h,v 1.1.1.1 2003/10/27 18:52:43 wschweer Exp $ +// +// (C) Copyright 2001 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __MRCONFIG_H__ +#define __MRCONFIG_H__ + +#include "mrconfigbase.h" +//Added by qt3to4: +#include + +//--------------------------------------------------------- +// MRConfig +//--------------------------------------------------------- + +class MRConfig : public MRConfigBase { + Q_OBJECT + + virtual void closeEvent(QCloseEvent*); + + signals: + void hideWindow(); + + private slots: + void setRcEnable(bool); + void setRcStopNote(int); + void setRcRecordNote(int); + void setRcGotoLeftMarkNote(int); + void setRcPlayNote(int); + + public: + MRConfig(QWidget* parent=0, const char* name=0, Qt::WFlags fl = 0); + }; + +#endif + diff --git a/muse2/muse/mplugins/mrconfigbase.ui b/muse2/muse/mplugins/mrconfigbase.ui new file mode 100644 index 00000000..299f9183 --- /dev/null +++ b/muse2/muse/mplugins/mrconfigbase.ui @@ -0,0 +1,200 @@ + +MRConfigBase + + + MRConfigBase + + + + 0 + 0 + 298 + 203 + + + + MusE: Midi Input Plugin: Remote Control + + + + unnamed + + + 11 + + + 6 + + + + GroupBox2 + + + Activate + + + + unnamed + + + 11 + + + 6 + + + + b1 + + + On + + + + + + + GroupBox1 + + + Actions + + + + unnamed + + + 11 + + + 6 + + + + TextLabel1 + + + Stop + + + + + TextLabel2 + + + Record + + + + + TextLabel3 + + + Goto Left Mark + + + + + TextLabel4 + + + Play + + + + + sb1 + + + + + sb2 + + + + + sb3 + + + + + sb4 + + + + + Spacer1 + + + Horizontal + + + Expanding + + + + 20 + 20 + + + + + + Spacer2 + + + Horizontal + + + Expanding + + + + 20 + 20 + + + + + + Spacer3 + + + Horizontal + + + Expanding + + + + 20 + 20 + + + + + + Spacer4 + + + Horizontal + + + Expanding + + + + 20 + 20 + + + + + + + + + + pitchedit.h + + diff --git a/muse2/muse/mplugins/random.cpp b/muse2/muse/mplugins/random.cpp new file mode 100644 index 00000000..5360d6b8 --- /dev/null +++ b/muse2/muse/mplugins/random.cpp @@ -0,0 +1,758 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: random.cpp,v 1.1.1.1 2003/10/27 18:52:39 wschweer Exp $ +// +// (C) Copyright 2001 Werner Schweer (ws@seh.de) +// +// This code is an adaption of the random rhythm generator taken +// from "The JAZZ++ Midi Sequencer" +// Copyright (C) 1994-2000 Andreas Voss and Per Sigmond, all +// rights reserved. +// Distributed under the GNU General Public License +//========================================================= + +#if 0 +#include "random.h" +#include "util.h" +#include + + +#if USE_ACG +ACG rnd(0, 55); +#else +#include +double tRandomGenerator::asDouble() +{ + return double(rand()) / double(RAND_MAX); +} +tRandomGenerator rnd; +#endif + + +// Array of probabilities + +tRndArray::tRndArray(int nn, int mmin, int mmax) +{ + int i; + n = nn; + for (i = 0; i < n; i++) + array[i] = mmin; + min = mmin; + max = mmax; + nul = min > 0 ? min : 0; +} + + +void tRndArray::SetMinMax(int mi, int ma) +{ + min = mi; + max = ma; + nul = min > 0 ? min : 0; + for (int i = 0; i < array.GetSize(); i++) + { + if (array[i] < min) + array[i] = min; + else if (array[i] > max) + array[i] = max; + } +} + +tRndArray::~tRndArray() +{ +} + +#ifdef FOR_MSW +double tRndArray::operator[](double f) +#else +double tRndArray::operator[](double f) const +#endif +{ + int i = (int)f; + if (i < 0) + i = 0; + else if (i >= n - 2) + i = n - 2; + tMapper map(i, i+1, array[i], array[i+1]); + return map(f); +} + + +tRndArray & tRndArray::operator = (const tRndArray &o) +{ + if (this == &o) + return *this; + + array = o.array; + n = o.n; + min = o.min; + max = o.max; + nul = o.nul; + return *this; +} + + +tRndArray::tRndArray(const tRndArray &o) + : array(o.array) +{ + n = o.n; + min = o.min; + max = o.max; + nul = o.nul; +} + + +int tRndArray::Random() +{ + return Random(rnd.asDouble()); +} + +int tRndArray::Random(double rndval) +{ + double sum, dec; + int i; + + assert(n > 0); + + sum = 0.0; + for (i = 0; i < n; i++) + { + assert(array[i] >= 0); + sum += array[i]; + } + if (sum <= 0) + return 0; + + dec = sum * rndval * 0.99999; + assert(dec < sum); + + i = 0; + while (dec >= 0.0) + { + dec -= array[i]; + i++; + } + i--; + + assert(i >= 0 && i < n); + return i; +} + + +int tRndArray::Interval(int seed) +{ + if (seed < 0) // initial ? + seed = int(rnd.asDouble() * n); + int delta = Random(); + if (rnd.asDouble() < 0.5) + delta = -delta; + seed = (seed + n + delta) % n; + return seed; +} + +int tRndArray::Random(int i) +{ + return rnd.asDouble() * (max - min) < array[i]; +} + + +void tRndArray::SetUnion(tRndArray &o, int fuzz) +{ + for (int i = 0; i < n; i++) + { + int val = array[i]; + if (o.array[i] > val) + val = o.array[i]; + array[i] = Fuzz(fuzz, array[i], val); + } +} + + +void tRndArray::SetIntersection(tRndArray &o, int fuzz) +{ + for (int i = 0; i < n; i++) + { + int val = array[i]; + if (o.array[i] < val) + val = o.array[i]; + array[i] = Fuzz(fuzz, array[i], val); + } +} + + +void tRndArray::SetDifference(tRndArray &o, int fuzz) +{ + tRndArray tmp(o); + tmp.SetInverse(tmp.Max()); + SetIntersection(tmp, fuzz); +} + + +void tRndArray::SetInverse(int fuzz) +{ + for (int i = 0; i < n; i++) + array[i] = Fuzz(fuzz, array[i], min + max - array[i]); +} + + +int tRndArray::Fuzz(int fuz, int v1, int v2) const +{ + // interpolate between v1 and v2 + return (fuz - min) * v2 / (max - min) + (max - fuz) * v1 / (max - min); +} + + +void tRndArray::Clear() +{ + for (int i = 0; i < n; i++) + array[i] = min; +} + + +ostream & operator << (ostream &os, tRndArray const &a) +{ + int i; + + os << a.n << " " << a.min << " " << a.max << endl; + for (i = 0; i < a.n; i++) + os << a.array[i] << " "; + os << endl; + return os; +} + + +istream & operator >> (istream &is, tRndArray &a) +{ + int i; + is >> a.n >> a.min >> a.max; + for (i = 0; i < a.n; i++) + is >> a.array[i]; + return is; +} + + +// --------------------------------- tArrayEdit ------------------------------------- + +// length of tickmark line +#define TICK_LINE 0 + +tArrayEdit::tArrayEdit(wxFrame *frame, tRndArray &ar, long xx, long yy, long ww, long hh, int sty) + : wxCanvas(frame, xx, yy, ww, hh), + array(ar), + n(ar.n), + min(ar.min), + max(ar.max), + nul(ar.nul) +{ + draw_bars = 0; + enabled = 1; + dragging = 0; + index = -1; + label = 0; + style_bits = sty; + + xmin = 0; + xmax = n; + + x = 0; // draw to topleft corner of canvas + y = 0; + w = ww; + h = hh; + + float tw, th; + wxDC *dc = GetDC(); + dc->SetFont(wxSMALL_FONT); + dc->GetTextExtent("123", &tw, &th); + if (style_bits & ARED_XTICKS) + { + // leave space for bottomline + h -= (int)th; + } + + if (style_bits & (ARED_MINMAX | ARED_YTICKS)) + { + // leave space to display min / max + x = (int)(tw + TICK_LINE); + w -= (int)(tw + TICK_LINE); + } + + ynul = y + h - h * (nul - min) / (max - min); +} + + +void tArrayEdit::OnSize(int ww, int hh) +{ + w = ww; + h = hh; + wxCanvas::OnSize(w, h); + float tw, th; + GetDC()->GetTextExtent("123", &tw, &th); + if (style_bits & ARED_XTICKS) + h -= (int)th; + if (style_bits & (ARED_MINMAX | ARED_YTICKS)) + { + x = (int)(tw + TICK_LINE); + w -= (int)(tw + TICK_LINE); + } + ynul = y + h - h * (nul - min) / (max - min); +} + +tArrayEdit::~tArrayEdit() +{ + delete [] label; +} + +void tArrayEdit::DrawBar(int i, int Qt::black) +{ + wxDC *dc = GetDC(); + + if (style_bits & ARED_LINES) + { + if (!Qt::black) + dc->SetPen(wxWHITE_PEN); + + tMapper xmap(0, n, 0, w); + tMapper ymap(min, max, h, 0); + + float x1 = (float)xmap(i + 0.5); + float y1 = (float)ymap(array[i]); + if (i > 0) + { + // draw line to prev position + float x0 = (float)xmap(i - 0.5); + float y0 = (float)ymap(array[i-1]); + dc->DrawLine(x0, y0, x1, y1); + } + if (i < n-1) + { + // draw line to next position + float x2 = (float)xmap(i + 1.5); + float y2 = (float)ymap(array[i+1]); + dc->DrawLine(x1, y1, x2, y2); + } + + if (!Qt::black) + dc->SetPen(wxBLACK_PEN); + return; + } + + int gap = 0; + if (style_bits & ARED_GAP) + { + gap = w / n / 6; + if (!gap && w / n > 3) + gap = 1; + } + long xbar, ybar, wbar, hbar; + + wbar = w / n - 2 * gap; + xbar = x + i * w / n + gap; + hbar = h * (array[i] - nul) / (max - min); + + if (style_bits & ARED_BLOCKS) + { + /* + ybar = ynul - hbar; + if (hbar < 0) + hbar = -hbar; + hbar = (hbar < 2) ? hbar : 2; + */ + int hblk = 12; + + ybar = ynul - hbar - hblk/2; + hbar = hblk; + if (ybar < y) { + int d = y - ybar; + ybar += d; + hbar -= d; + } + if (ybar + hbar > y + h) { + int d = (ybar + hbar) - (y + h); + hbar -= d; + } + if (hbar < 2) + hbar = 2; + } + else + + if (hbar < 0) + { + ybar = ynul; + hbar = -hbar; + } + else + ybar = ynul - hbar; + + if (ybar == y) + ++ybar, --hbar; + + if (!Qt::black) + { + dc->SetBrush(wxWHITE_BRUSH); + dc->SetPen(wxWHITE_PEN); + } + if (wbar && hbar) + dc->DrawRectangle(xbar, ybar, wbar, hbar); + if (!Qt::black) + { + dc->SetBrush(wxBLACK_BRUSH); + dc->SetPen(wxBLACK_PEN); + } +} + +const char *tArrayEdit::GetXText(int xval) +{ + static char buf[8]; + sprintf(buf, "%d", xval); + return buf; +} + +const char *tArrayEdit::GetYText(int yval) +{ + static char buf[8]; + sprintf(buf, "%d", yval); + return buf; +} + +void tArrayEdit::DrawXTicks() +{ + float tw, th; + + if (!(style_bits & ARED_XTICKS)) + return; + + wxDC *dc = GetDC(); + dc->SetFont(wxSMALL_FONT); + + // compute tickmark x-distance + dc->GetTextExtent("-123", &tw, &th); + int max_labels = (int)(w / (tw + tw/2)); + if (max_labels > 0) + { + int step = (xmax - xmin + 1) / max_labels; + if (step <= 0) + step = 1; + for (int val = xmin; val <= xmax; val += step) + { + const char *buf = GetXText(val); + //sprintf(buf, "%d", val); + dc->GetTextExtent((char *)buf, &tw, &th); + float yy = y + h; + float xx = x + w * (val - xmin) / (xmax - xmin + 1); + xx -= tw/2; // center text + xx += 0.5 * w / n; // middle of bar + dc->DrawText(buf, xx, yy); + //dc->DrawLine(x - TICK_LINE, yy, x, yy); + } + } + + dc->SetFont(wxNORMAL_FONT); +} + + +void tArrayEdit::DrawYTicks() +{ + wxDC *dc = GetDC(); + dc->SetFont(wxSMALL_FONT); + + if (style_bits & ARED_YTICKS) + { + // compute tickmark y-distance + float tw, th; + dc->GetTextExtent("-123", &tw, &th); + int max_labels = (int)(h / (th + th/2)); + if (max_labels > 0) + { + int step = (max - min) / max_labels; + if (step <= 0) + step = 1; + for (int val = min; val < max; val += step) + { + const char *buf = GetYText(val); + //sprintf(buf, "%d", val); + dc->GetTextExtent((char *)buf, &tw, &th); + float yy = y + h - h * (val - min) / (max - min) - th/2; + dc->DrawText(buf, x - tw - TICK_LINE, yy); + //dc->DrawLine(x - TICK_LINE, yy, x, yy); + } + } + } + + else if (style_bits & ARED_MINMAX) + { + // min/max + float tw, th; + char buf[20]; + sprintf(buf, "%d", max); + dc->GetTextExtent(buf, &tw, &th); + dc->DrawText(buf, x - tw, y); + sprintf(buf, "%d", min); + dc->GetTextExtent(buf, &tw, &th); + dc->DrawText(buf, x - tw, y + h - th); + + } + + dc->SetFont(wxNORMAL_FONT); + +} + +void tArrayEdit::DrawLabel() +{ + wxDC *dc = GetDC(); + dc->SetFont(wxSMALL_FONT); + if (label) + dc->DrawText(label, x + 5, y + 2); + dc->SetFont(wxNORMAL_FONT); +} + + + +void tArrayEdit::OnPaint() +{ + int i; + wxDC *dc = GetDC(); + + // surrounding rectangle + dc->Clear(); + if (enabled) + dc->SetBrush(wxWHITE_BRUSH); + else + dc->SetBrush(wxGREY_BRUSH); + dc->SetPen(wxBLACK_PEN); + if (w && h) + dc->DrawRectangle(x, y, w, h); + + // sliders + dc->SetBrush(wxBLACK_BRUSH); + for (i = 0; i < n; i++) + DrawBar(i, 1); + + DrawXTicks(); + DrawLabel(); + DrawYTicks(); + DrawNull(); + if (draw_bars) + draw_bars->DrawBars(); +} + + + +void tArrayEdit::DrawNull() +{ + wxDC *dc = GetDC(); + dc->SetPen(wxCYAN_PEN); + // draw y-null line + if (min < nul && nul < max) + dc->DrawLine(x, ynul, x+w, ynul); + // draw x-null line + if (xmin < 0 && 0 < xmax) + { + float x0 = w * (0 - xmin) / (xmax - xmin); + dc->DrawLine(x0, y, x0, y + h); + } + dc->SetPen(wxBLACK_PEN); +} + + + +void tArrayEdit::SetXMinMax(int xmi, int xma) +{ + xmin = xmi; + xmax = xma; +} + +int tArrayEdit::Index(wxMouseEvent &e) +{ + float ex, ey; + e.Position(&ex, &ey); + int i = (int)( ((short)ex - x) * n / w); + i = i < 0 ? 0 : i; + i = i >= n ? n-1 : i; + return i; +} + +int tArrayEdit::Dragging(wxMouseEvent &e) +{ + if (!dragging) + return 0; + + if (index < 0) + index = Index(e); + + int val = nul; + if (e.LeftIsDown()) + { + float ex, ey; + e.Position(&ex, &ey); + // $blk$ val = (int)( (y + h - (short)ey) * (max - min) / h + min); + val = (int)( (double)(y + h - ey) * (max - min) / h + min + 0.5); + val = val > max ? max : val; + val = val < min ? min : val; + } + +#if 0 + { + // in msw ex,ey are 65536 for negative values! + wxDC *dc = GetDC(); + char buf[500]; + sprintf(buf, "x %4.0f, y %4.0f, sh %d", ex, ey, e.ShiftDown()); + dc->DrawText(buf, 50, 50); + } +#endif + + if (e.ShiftDown()) + { + int k; + for (k = 0; k < n; k++) + { + DrawBar(k, 0); + array[k] = val; + DrawBar(k, 1); + } + } + else if (e.ControlDown()) + { + DrawBar(index, 0); + array[index] = val; + DrawBar(index, 1); + } + else + { + int i = Index(e); + int k = i; + if (i < index) + for (; i <= index; i++) + { + DrawBar(i, 0); + array[i] = val; + DrawBar(i, 1); + } + else + for (; i >= index; i--) + { + DrawBar(i, 0); + array[i] = val; + DrawBar(i, 1); + } + index = k; + } + + return 0; +} + +int tArrayEdit::ButtonDown(wxMouseEvent &e) +{ +#ifdef wx_msw + CaptureMouse(); +#endif + dragging = 1; + index = Index(e); + Dragging(e); + return 0; +} + +int tArrayEdit::ButtonUp(wxMouseEvent &e) +{ +#ifdef wx_msw + ReleaseMouse(); +#endif + dragging = 0; + index = -1; + DrawLabel(); + DrawNull(); + return 0; +} + + +void tArrayEdit::OnEvent(wxMouseEvent &e) +{ + if (!enabled) + return; + if (e.ButtonDown()) + ButtonDown(e); + else if (e.Dragging()) + Dragging(e); + else if (e.ButtonUp()) + ButtonUp(e); +} + +void tArrayEdit::Enable(int e) +{ + enabled = e; +} + +void tArrayEdit::SetLabel(char const *llabel) +{ + delete label; + label = copystring(llabel); +} + +void tArrayEdit::SetYMinMax(int mi, int ma) +{ + array.SetMinMax(mi, ma); + ynul = y + h - h * (nul - min) / (max - min); +} + +void tArrayEdit::DrawBarLine (long xx) +{ + wxDC *dc = GetDC (); + // fprintf(stderr,"x: %ld, xx: %ld\n",x,xx); + if (xx > x && xx + 1 < x + w) + { + dc->SetPen (wxLIGHT_GREY_PEN); + dc->DrawLine (xx, y + 1, xx, y + h - 2); + dc->SetPen (wxBLACK_PEN); + } +} + + + +tRhyArrayEdit::tRhyArrayEdit(wxFrame *parent, tRndArray &array, long xx, long yy, long ww, long hh, int sty) + : tArrayEdit(parent, array, xx, yy, ww, hh, sty) +{ + steps_per_count = 4; + count_per_bar = 4; + n_bars = 4; +} + +void tRhyArrayEdit::SetMeter(int s, int c, int b) +{ + steps_per_count = s; + count_per_bar = c; + n_bars = b; + array.Resize(s * c * b); + SetXMinMax(1, s * c * b); +} + + +void tRhyArrayEdit::DrawXTicks() +{ + if (!(style_bits & ARED_RHYTHM)) + { + tArrayEdit::DrawXTicks(); + return; + } + + char buf[20]; + float tw, th; + + wxDC *dc = GetDC(); + dc->SetFont(wxSMALL_FONT); + + // tick marks + assert(steps_per_count && count_per_bar && n_bars); + int i; + for (i = 0; i < n; i += steps_per_count) + { + int mark = (i / steps_per_count) % count_per_bar + 1; + sprintf(buf, "%d", mark); + float yy = y + h; + float xx = x + (i + 0.5) * w / n; + dc->GetTextExtent(buf, &tw, &th); + xx -= tw/2.0; + dc->DrawText(buf, xx, yy); + } + dc->SetFont(wxNORMAL_FONT); +} +#endif + diff --git a/muse2/muse/mplugins/random.h b/muse2/muse/mplugins/random.h new file mode 100644 index 00000000..2c9dfe5b --- /dev/null +++ b/muse2/muse/mplugins/random.h @@ -0,0 +1,192 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: random.h,v 1.1.1.1 2003/10/27 18:52:43 wschweer Exp $ +// +// (C) Copyright 2001 Werner Schweer (ws@seh.de) +// +// This code is an adaption of the random rhythm generator taken +// from "The JAZZ++ Midi Sequencer" +// Copyright (C) 1994-2000 Andreas Voss and Per Sigmond, all +// rights reserved. +// Distributed under the GNU General Public License +//========================================================= + +#if 0 +#ifndef random_h +#define random_h + +#ifndef wx_wxh +#include "wx.h" +#endif + +#ifndef _FSTREAM_H +#include +#endif + +#ifndef dynarray_h +#include "dynarray.h" +#endif + +// gcc > 2.7.2 does not have ACG anymore? +#define USE_ACG 0 + +#if USE_ACG +#include // random generator from libg++ +extern ACG rnd; + +#else + +class tRandomGenerator +{ + public: + double asDouble(); +}; +extern tRandomGenerator rnd; + +#endif + + +#undef min +#undef max + + +// array of probabilities + +class tRndArray +{ + friend class tArrayEdit; + protected: + tIntArray array; + int n; // number of elements in array + int nul, min, max; + + public: + int Null() { return nul; } + void SetNull(int n) { nul = n; } + tRndArray(int n, int min, int max); + tRndArray & operator = (const tRndArray &); + tRndArray(tRndArray const &); + + virtual ~tRndArray(); + int &operator[] (int i) { return array[i]; } + int operator[] (int i) const { return array[i]; } +#ifdef FOR_MSW + double operator[](double f); + float operator[](float f) { +#else + double operator[](double f) const; + float operator[](float f) const { +#endif + return (float)operator[]((double)f); + } + int Size() const { return n; } + int Min() const { return min; } + int Max() const { return max; } + void SetMinMax(int min, int max); + void Resize(int nn) { n = nn; } + + friend ostream & operator << (ostream &, tRndArray const &); + friend istream & operator >> (istream &, tRndArray &); + + int Random(); // returns index 0..n-1 (arrayvalues -> empiric distribution) + int Random(double rndval); // returns index 0..n-1 (arrayvalues -> empiric distribution) + int Random(int i); // return 0/1 + int Interval(int seed); + + void SetUnion(tRndArray &o, int fuzz); + void SetDifference(tRndArray &o, int fuzz); + void SetIntersection(tRndArray &o, int fuzz); + void SetInverse(int fuzz); + int Fuzz(int fuzz, int v1, int v2) const; + void Clear(); +}; + + +#define ARED_GAP 1 +#define ARED_XTICKS 2 +#define ARED_YTICKS 4 +#define ARED_MINMAX 8 +#define ARED_RHYTHM 16 +#define ARED_BLOCKS 32 +#define ARED_LINES 64 + + +class tArrayEditDrawBars { + public: + virtual void DrawBars() = 0; +}; + + +class tArrayEdit : public wxCanvas +{ +protected: + // paint position + long x, y, w, h, ynul; + void DrawBar(int i, int Qt::black); + + int dragging; // Dragging-Event valid + int index; // ctrl down: drag this one + + tRndArray &array; + int &n, &min, &max, &nul; // shorthand for array.n, array.min, ... + char *label; + tArrayEditDrawBars *draw_bars; + + // array size is mapped to this range for x-tick marks + int xmin, xmax; + + virtual void DrawXTicks(); + virtual void DrawYTicks(); + virtual void DrawLabel(); + virtual void DrawNull(); + int Index(wxMouseEvent &e); + + int enabled; + int style_bits; + + virtual const char *GetXText(int xval); // Text for x-tickmarks + virtual const char *GetYText(int yval); // Text for y-tickmarks + + +public: + tArrayEdit(wxFrame *parent, tRndArray &array, long xx, long yy, long ww, long hh, int style_bits = (ARED_GAP | ARED_XTICKS)); + virtual ~tArrayEdit(); + + virtual void OnPaint(); + virtual void OnSize(int ww, int hh); + virtual void OnEvent(wxMouseEvent &e); + virtual int Dragging(wxMouseEvent &); + virtual int ButtonDown(wxMouseEvent &); + virtual int ButtonUp(wxMouseEvent &); + + virtual void SetLabel(char const *llabel); + void Enable(int enable = 1); + void SetStyle(int style) { style_bits = style; } + // min and max value in array (both values inclusive) + void SetYMinMax(int min, int max); + // for display x-axis only, does not resize the array (both values inclusive) + void SetXMinMax(int xmin, int xmax); + void DrawBarLine (long xx); + void SetDrawBars(tArrayEditDrawBars *x) { draw_bars = x; } + void Init() {} +}; + + + +class tRhyArrayEdit : public tArrayEdit +{ + int steps_per_count; + int count_per_bar; + int n_bars; + protected: + virtual void DrawXTicks(); + public: + tRhyArrayEdit(wxFrame *parent, tRndArray &array, long xx, long yy, long ww, long hh, int style_bits = (ARED_GAP | ARED_XTICKS | ARED_RHYTHM)); + void SetMeter(int steps_per_count, int count_per_bar, int n_bars); +}; + + +#endif +#endif + diff --git a/muse2/muse/mplugins/rhythm.cpp b/muse2/muse/mplugins/rhythm.cpp new file mode 100644 index 00000000..5281fb56 --- /dev/null +++ b/muse2/muse/mplugins/rhythm.cpp @@ -0,0 +1,516 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: rhythm.cpp,v 1.1.1.1 2003/10/27 18:52:49 wschweer Exp $ +// +// (C) Copyright 2001 Werner Schweer (ws@seh.de) +// +// This code is an adaption of the random rhythm generator taken +// from "The JAZZ++ Midi Sequencer" +// Copyright (C) 1994-2000 Andreas Voss and Per Sigmond, all +// rights reserved. +// Distributed under the GNU General Public License +//========================================================= + +#include "rhythm.h" +//Added by qt3to4: +#include +#include +#include + +//--------------------------------------------------------- +// RhythmGen +//--------------------------------------------------------- + +RhythmGen::RhythmGen(QWidget* parent, const char* name, Qt::WFlags fo) + : RhythmBase(parent, name, fo) + { + } +RhythmGen::~RhythmGen() + { + } + +//--------------------------------------------------------- +// closeEvent +//--------------------------------------------------------- + +void RhythmGen::closeEvent(QCloseEvent* ev) + { + emit hideWindow(); + QWidget::closeEvent(ev); + } + + + +#if 0 +/**************************************************************************** +** Form implementation generated from reading ui file 'rhythm.ui' +** +** Created: Tue Feb 26 13:43:04 2002 +** by: The User Interface Compiler (uic) +** +** WARNING! All changes made in this file will be lost! +****************************************************************************/ +#include "rhythm.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static const char* const image0_data[] = { +"16 16 56 1", +". c None", +"F c #000000", +"L c #000101", +"E c #010304", +"C c #06101d", +"j c #071728", +"w c #07182a", +"1 c #071c2c", +"0 c #081c2d", +"e c #081e31", +"a c #0a121f", +"Z c #0a1929", +"Q c #0a263b", +"T c #0a273b", +"z c #0e97bf", +"s c #0ea0c5", +"K c #0f5d7e", +"B c #105375", +"G c #114760", +"N c #1197b9", +"x c #124c6d", +"# c #124d6f", +"u c #1290b5", +"v c #135476", +"h c #1390b4", +"Y c #14839f", +"b c #155474", +"i c #155678", +"o c #155a7a", +"J c #159abc", +"d c #17587a", +"V c #178eac", +"f c #194a6a", +"r c #19b3ce", +"k c #1b4b6a", +"p c #1b4f6f", +"A c #1ca2c3", +"D c #20374f", +"P c #2294b1", +"I c #22bad1", +"S c #2a98b3", +"U c #2cc7d5", +"n c #3cd7e1", +"O c #43d5de", +"t c #48dfe9", +"X c #58acc5", +"m c #59c3da", +"q c #71d1e0", +"W c #80c2db", +"c c #819eba", +"H c #9ddeee", +"M c #cdebf6", +"g c #ddeff8", +"y c #e2f0f9", +"R c #fdfafd", +"l c #fdfcfd", +"................", +"................", +".......#a.......", +"......bcde......", +".....fcghij.....", +"....kclmnhoj....", +"...pclqrstuvw...", +"..xcymrzzsnABC..", +".BDEFGHzIJKLFFF.", +".....BMNOPQ.....", +".....BRNOST.....", +".....BMNUVT.....", +".....BWXIYF.....", +".....BZ01FF.....", +"................", +"................"}; + +static const char* const image1_data[] = { +"16 16 50 1", +". c None", +"E c #010001", +"O c #03060c", +"U c #050b12", +"u c #05151e", +"S c #060f19", +"m c #06141d", +"q c #06141f", +"h c #071620", +"D c #0b293e", +"c c #0d324c", +"v c #0d3652", +"A c #0e5775", +"J c #0e8fb6", +"x c #0e94b9", +"r c #0e97bf", +"Q c #0e9ec3", +"n c #0eadcb", +"R c #0fa0c4", +"N c #106589", +"V c #10698f", +"B c #114560", +"# c #124d6f", +"z c #1299bb", +"C c #144059", +"T c #14a5c9", +"K c #15c1da", +"b c #18425f", +"y c #1bbad1", +"M c #1ca2c3", +"t c #1f95b2", +"a c #254a64", +"p c #2695b1", +"l c #2b91ae", +"F c #337f9e", +"o c #40d1db", +"s c #46dbe6", +"L c #48dfe9", +"I c #54bdd7", +"j c #5fc0d8", +"g c #64a3bd", +"k c #8fcce2", +"d c #a0cbdf", +"H c #a7dcec", +"w c #bfdfee", +"f c #d3e5f0", +"G c #dfeff8", +"i c #e0f1fb", +"e c #eff3fc", +"P c #ffffff", +"................", +"................", +".....###abc.....", +".....#defgh.....", +".....#ijklm.....", +".....#enopq.....", +".....airstu.....", +".v##aawxyzABCDE.", +"..vFGHIJrKLMNO..", +"...vFPQrRLMNS...", +"....vFPTLMNU....", +".....vFGMNU.....", +"......vVNS......", +".......vO.......", +"................", +"................"}; + + +/* + * Constructs a RhythmGenerator which is 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. + */ +RhythmGenerator::RhythmGenerator( QWidget* parent, const char* name, bool modal, Qt::WFlags fl ) + : QDialog( parent, name, modal, fl ) +{ + QPixmap image0( ( const char** ) image0_data ); + QPixmap image1( ( const char** ) image1_data ); + if ( !name ) + setName( "RhythmGenerator" ); + resize( 500, 777 ); + setCaption( trUtf8( "Form3" ) ); + RhythmGeneratorLayout = new Q3VBoxLayout( this, 11, 6, "RhythmGeneratorLayout"); + + Frame6 = new Q3Frame( this, "Frame6" ); + Frame6->setFrameShape( Q3Frame::StyledPanel ); + Frame6->setFrameShadow( Q3Frame::Raised ); + Frame6Layout = new Q3VBoxLayout( Frame6, 11, 6, "Frame6Layout"); + + TextLabel1 = new QLabel( Frame6, "TextLabel1" ); + QFont TextLabel1_font( TextLabel1->font() ); + TextLabel1_font.setBold( TRUE ); + TextLabel1_font.setUnderline( TRUE ); + TextLabel1->setFont( TextLabel1_font ); + TextLabel1->setText( trUtf8( "Instrument Settings:" ) ); + Frame6Layout->addWidget( TextLabel1 ); + + Layout17 = new Q3HBoxLayout( 0, 0, 15, "Layout17"); + + Layout16 = new Q3VBoxLayout( 0, 0, 6, "Layout16"); + + InstrumentListLabel = new QLabel( Frame6, "InstrumentListLabel" ); + InstrumentListLabel->setText( trUtf8( "Instrument" ) ); + Layout16->addWidget( InstrumentListLabel ); + + InstrumentList = new Q3ListBox( Frame6, "InstrumentList" ); + InstrumentList->insertItem( trUtf8( "Hi-Hat" ) ); + InstrumentList->setMinimumSize( QSize( 150, 70 ) ); + Layout16->addWidget( InstrumentList ); + + Layout11 = new Q3HBoxLayout( 0, 0, 2, "Layout11"); + + InstrumentUp = new QToolButton( Frame6, "InstrumentUp" ); + InstrumentUp->setMinimumSize( QSize( 40, 20 ) ); + InstrumentUp->setText( trUtf8( "" ) ); + InstrumentUp->setPixmap( image0 ); + Layout11->addWidget( InstrumentUp ); + + InstrumentDown = new QToolButton( Frame6, "InstrumentDown" ); + InstrumentDown->setMinimumSize( QSize( 40, 20 ) ); + InstrumentDown->setText( trUtf8( "" ) ); + InstrumentDown->setPixmap( image1 ); + Layout11->addWidget( InstrumentDown ); + + InstrumentAdd = new QToolButton( Frame6, "InstrumentAdd" ); + InstrumentAdd->setMinimumSize( QSize( 40, 20 ) ); + InstrumentAdd->setText( trUtf8( "add" ) ); + Layout11->addWidget( InstrumentAdd ); + + InstrumentDel = new QToolButton( Frame6, "InstrumentDel" ); + InstrumentDel->setMinimumSize( QSize( 40, 20 ) ); + InstrumentDel->setText( trUtf8( "delete" ) ); + Layout11->addWidget( InstrumentDel ); + Layout16->addLayout( Layout11 ); + Layout17->addLayout( Layout16 ); + + Layout20 = new Q3VBoxLayout( 0, 0, 6, "Layout20"); + + StepsLabel = new QLabel( Frame6, "StepsLabel" ); + StepsLabel->setText( trUtf8( "steps/count" ) ); + Layout20->addWidget( StepsLabel ); + + StepsLayout = new Q3HBoxLayout( 0, 0, 6, "StepsLayout"); + + StepsSlider = new QSlider( Frame6, "StepsSlider" ); + StepsSlider->setMaxValue( 16 ); + StepsSlider->setValue( 4 ); + StepsSlider->setOrientation( Qt::Horizontal ); + StepsLayout->addWidget( StepsSlider ); + + StepsNumber = new QLCDNumber( Frame6, "StepsNumber" ); + StepsNumber->setPaletteBackgroundColor( QColor( 212, 212, 192 ) ); + StepsNumber->setLineWidth( 1 ); + StepsNumber->setNumDigits( 2 ); + StepsNumber->setSegmentStyle( QLCDNumber::Flat ); + StepsNumber->setProperty( "value", 4 ); + StepsLayout->addWidget( StepsNumber ); + Layout20->addLayout( StepsLayout ); + + CountLabel = new QLabel( Frame6, "CountLabel" ); + CountLabel->setText( trUtf8( "count/bar" ) ); + Layout20->addWidget( CountLabel ); + + CountLayout = new Q3HBoxLayout( 0, 0, 6, "CountLayout"); + + CountSlider = new QSlider( Frame6, "CountSlider" ); + CountSlider->setMaxValue( 16 ); + CountSlider->setValue( 4 ); + CountSlider->setOrientation( Qt::Horizontal ); + CountLayout->addWidget( CountSlider ); + + CountNumber = new QLCDNumber( Frame6, "CountNumber" ); + CountNumber->setPaletteBackgroundColor( QColor( 212, 212, 192 ) ); + CountNumber->setNumDigits( 2 ); + CountNumber->setSegmentStyle( QLCDNumber::Flat ); + CountNumber->setProperty( "value", 4 ); + CountLayout->addWidget( CountNumber ); + Layout20->addLayout( CountLayout ); + + BarsLabel = new QLabel( Frame6, "BarsLabel" ); + BarsLabel->setText( trUtf8( "# bars" ) ); + Layout20->addWidget( BarsLabel ); + + BarsLayout = new Q3HBoxLayout( 0, 0, 6, "BarsLayout"); + + BarsSlider = new QSlider( Frame6, "BarsSlider" ); + BarsSlider->setMaxValue( 16 ); + BarsSlider->setValue( 1 ); + BarsSlider->setOrientation( Qt::Horizontal ); + BarsLayout->addWidget( BarsSlider ); + + BarsNumber = new QLCDNumber( Frame6, "BarsNumber" ); + BarsNumber->setPaletteBackgroundColor( QColor( 212, 212, 192 ) ); + BarsNumber->setNumDigits( 2 ); + BarsNumber->setSegmentStyle( QLCDNumber::Flat ); + BarsNumber->setProperty( "value", 1 ); + BarsLayout->addWidget( BarsNumber ); + Layout20->addLayout( BarsLayout ); + Layout17->addLayout( Layout20 ); + Frame6Layout->addLayout( Layout17 ); + RhythmGeneratorLayout->addWidget( Frame6 ); + + Layout27 = new Q3HBoxLayout( 0, 0, 15, "Layout27"); + + Frame5 = new Q3Frame( this, "Frame5" ); + Frame5->setFrameShape( Q3Frame::StyledPanel ); + Frame5->setFrameShadow( Q3Frame::Raised ); + Frame5Layout = new Q3VBoxLayout( Frame5, 11, 6, "Frame5Layout"); + + TextLabel2 = new QLabel( Frame5, "TextLabel2" ); + QFont TextLabel2_font( TextLabel2->font() ); + TextLabel2_font.setBold( TRUE ); + TextLabel2_font.setUnderline( TRUE ); + TextLabel2->setFont( TextLabel2_font ); + TextLabel2->setText( trUtf8( "Group Settings:" ) ); + Frame5Layout->addWidget( TextLabel2 ); + + Layout20_2 = new Q3HBoxLayout( 0, 0, 15, "Layout20_2"); + + GroupListLayout = new Q3VBoxLayout( 0, 0, 6, "GroupListLayout"); + + GroupListLabel = new QLabel( Frame5, "GroupListLabel" ); + GroupListLabel->setText( trUtf8( "Group" ) ); + GroupListLayout->addWidget( GroupListLabel ); + + GroupList = new Q3ListBox( Frame5, "GroupList" ); + GroupList->insertItem( trUtf8( "Group 1" ) ); + GroupList->insertItem( trUtf8( "Group 2" ) ); + GroupList->insertItem( trUtf8( "Group 3" ) ); + GroupList->insertItem( trUtf8( "Group 4" ) ); + GroupList->insertItem( trUtf8( "Group 5" ) ); + GroupList->setMinimumSize( QSize( 150, 90 ) ); + GroupListLayout->addWidget( GroupList ); + Layout20_2->addLayout( GroupListLayout ); + + Layout19 = new Q3VBoxLayout( 0, 0, 6, "Layout19"); + + ContribLabel = new QLabel( Frame5, "ContribLabel" ); + ContribLabel->setText( trUtf8( "contrib" ) ); + Layout19->addWidget( ContribLabel ); + + ContribLayout = new Q3HBoxLayout( 0, 0, 6, "ContribLayout"); + + ContribSlider = new QSlider( Frame5, "ContribSlider" ); + ContribSlider->setMinimumSize( QSize( 100, 0 ) ); + ContribSlider->setMaxValue( 100 ); + ContribSlider->setOrientation( Qt::Horizontal ); + ContribLayout->addWidget( ContribSlider ); + + ContribNumber = new QLCDNumber( Frame5, "ContribNumber" ); + ContribNumber->setPaletteBackgroundColor( QColor( 212, 212, 192 ) ); + ContribNumber->setNumDigits( 3 ); + ContribNumber->setSegmentStyle( QLCDNumber::Flat ); + ContribLayout->addWidget( ContribNumber ); + Layout19->addLayout( ContribLayout ); + + ListenLabel = new QLabel( Frame5, "ListenLabel" ); + ListenLabel->setText( trUtf8( "listen" ) ); + Layout19->addWidget( ListenLabel ); + + ListenLayout = new Q3HBoxLayout( 0, 0, 6, "ListenLayout"); + + ListenSlider = new QSlider( Frame5, "ListenSlider" ); + ListenSlider->setMinimumSize( QSize( 100, 0 ) ); + ListenSlider->setMinValue( -99 ); + ListenSlider->setMaxValue( 100 ); + ListenSlider->setOrientation( Qt::Horizontal ); + ListenLayout->addWidget( ListenSlider ); + + ListenNumber = new QLCDNumber( Frame5, "ListenNumber" ); + ListenNumber->setPaletteBackgroundColor( QColor( 212, 212, 192 ) ); + ListenNumber->setNumDigits( 3 ); + ListenNumber->setSegmentStyle( QLCDNumber::Flat ); + ListenLayout->addWidget( ListenNumber ); + Layout19->addLayout( ListenLayout ); + Layout20_2->addLayout( Layout19 ); + Frame5Layout->addLayout( Layout20_2 ); + + RandomizeCheck = new QCheckBox( Frame5, "RandomizeCheck" ); + RandomizeCheck->setText( trUtf8( "Randomize" ) ); + Frame5Layout->addWidget( RandomizeCheck ); + Layout27->addWidget( Frame5 ); + + Frame5_2 = new Q3Frame( this, "Frame5_2" ); + Frame5_2->setFrameShape( Q3Frame::StyledPanel ); + Frame5_2->setFrameShadow( Q3Frame::Raised ); + Frame5_2Layout = new Q3VBoxLayout( Frame5_2, 11, 6, "Frame5_2Layout"); + + TextLabel3 = new QLabel( Frame5_2, "TextLabel3" ); + QFont TextLabel3_font( TextLabel3->font() ); + TextLabel3_font.setBold( TRUE ); + TextLabel3_font.setUnderline( TRUE ); + TextLabel3->setFont( TextLabel3_font ); + TextLabel3->setText( trUtf8( "Rhythm Style:" ) ); + Frame5_2Layout->addWidget( TextLabel3 ); + + Layout21 = new Q3VBoxLayout( 0, 0, 2, "Layout21"); + + ToolButton7 = new QToolButton( Frame5_2, "ToolButton7" ); + ToolButton7->setText( trUtf8( "Clear" ) ); + Layout21->addWidget( ToolButton7 ); + + ToolButton8 = new QToolButton( Frame5_2, "ToolButton8" ); + ToolButton8->setText( trUtf8( "Open..." ) ); + Layout21->addWidget( ToolButton8 ); + + ToolButton9 = new QToolButton( Frame5_2, "ToolButton9" ); + ToolButton9->setText( trUtf8( "Save" ) ); + Layout21->addWidget( ToolButton9 ); + + ToolButton10 = new QToolButton( Frame5_2, "ToolButton10" ); + ToolButton10->setText( trUtf8( "Save as..." ) ); + Layout21->addWidget( ToolButton10 ); + Frame5_2Layout->addLayout( Layout21 ); + + Layout22 = new Q3VBoxLayout( 0, 0, 2, "Layout22"); + + ToolButton5 = new QToolButton( Frame5_2, "ToolButton5" ); + ToolButton5->setText( trUtf8( "Generate" ) ); + Layout22->addWidget( ToolButton5 ); + + ToolButton6 = new QToolButton( Frame5_2, "ToolButton6" ); + ToolButton6->setText( trUtf8( "Close" ) ); + Layout22->addWidget( ToolButton6 ); + Frame5_2Layout->addLayout( Layout22 ); + Layout27->addWidget( Frame5_2 ); + RhythmGeneratorLayout->addLayout( Layout27 ); + + Layout29 = new Q3HBoxLayout( 0, 0, 6, "Layout29"); + + Frame6_2 = new Q3Frame( this, "Frame6_2" ); + Frame6_2->setMinimumSize( QSize( 200, 150 ) ); + Frame6_2->setFrameShape( Q3Frame::StyledPanel ); + Frame6_2->setFrameShadow( Q3Frame::Raised ); + Layout29->addWidget( Frame6_2 ); + + Frame7 = new Q3Frame( this, "Frame7" ); + Frame7->setMinimumSize( QSize( 200, 150 ) ); + Frame7->setFrameShape( Q3Frame::StyledPanel ); + Frame7->setFrameShadow( Q3Frame::Raised ); + Layout29->addWidget( Frame7 ); + RhythmGeneratorLayout->addLayout( Layout29 ); + + Frame8 = new Q3Frame( this, "Frame8" ); + Frame8->setMinimumSize( QSize( 400, 150 ) ); + Frame8->setFrameShape( Q3Frame::StyledPanel ); + Frame8->setFrameShadow( Q3Frame::Raised ); + RhythmGeneratorLayout->addWidget( Frame8 ); + + // signals and slots connections + connect( StepsSlider, SIGNAL( valueChanged(int) ), StepsNumber, SLOT( display(int) ) ); + connect( CountSlider, SIGNAL( valueChanged(int) ), CountNumber, SLOT( display(int) ) ); + connect( BarsSlider, SIGNAL( valueChanged(int) ), BarsNumber, SLOT( display(int) ) ); + connect( ContribSlider, SIGNAL( valueChanged(int) ), ContribNumber, SLOT( display(int) ) ); + connect( ListenSlider, SIGNAL( valueChanged(int) ), ListenNumber, SLOT( display(int) ) ); + connect( InstrumentDel, SIGNAL( pressed() ), InstrumentList, SLOT( clearSelection() ) ); +} + +/* + * Destroys the object and frees any allocated resources + */ +RhythmGenerator::~RhythmGenerator() +{ + // no need to delete child widgets, Qt does it all for us +} +#endif + diff --git a/muse2/muse/mplugins/rhythm.h b/muse2/muse/mplugins/rhythm.h new file mode 100644 index 00000000..013fba08 --- /dev/null +++ b/muse2/muse/mplugins/rhythm.h @@ -0,0 +1,196 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: rhythm.h,v 1.1.1.1 2003/10/27 18:52:44 wschweer Exp $ +// +// (C) Copyright 2001 Werner Schweer (ws@seh.de) +// +// This code is an adaption of the random rhythm generator taken +// from "The JAZZ++ Midi Sequencer" +// Copyright (C) 1994-2000 Andreas Voss and Per Sigmond, all +// rights reserved. +// Distributed under the GNU General Public License +//========================================================= + +#ifndef __RHYTHM_H__ +#define __RHYTHM_H__ + +#include "rhythmbase.h" +//Added by qt3to4: +#include + +class tTrack; +class tEventWin; +class tSong; +class tBarInfo; + +#define MAX_GROUPS 5 +#define MAX_KEYS 20 + +class Xml; + +#if 0 +//--------------------------------------------------------- +// tRhyGroup +//--------------------------------------------------------- + +struct tRhyGroup { + int contrib; + int listen; + + tRhyGroup() { + listen = 0; + contrib = 0; + } +// void write(int, Xml&); +// void read(Xml&); + }; + +//--------------------------------------------------------- +// tRhyGroups +//--------------------------------------------------------- + +struct tRhyGroups { + tRhyGroup g[MAX_GROUPS]; + tRhyGroup& operator [] (int i) { return g[i]; } + +// void write(int, Xml&); +// void read(Xml&); + }; + +//--------------------------------------------------------- +// tRhythm +//--------------------------------------------------------- + +class tRhythm + { + friend class tRhythmWin; + + char* label; + +// tRndArray rhythm; +// tRndArray length; +// tRndArray veloc; + + int steps_per_count; + int count_per_bar; + int n_bars; + int keys[MAX_KEYS]; + int n_keys; + int mode; + int parm; + + int randomize; + tRhyGroups groups; +// tRndArray history; + + // set by GenInit() + long start_clock; + long next_clock; + +// void GenGroup(tRndArray& out, int grp, tBarInfo &bi, tRhythm *rhy[], int n_rhy); + int Clock2i(long clock, tBarInfo &bi) const; + int ClocksPerStep(tBarInfo &bi) const; + + public: + tRhythm(int key); + tRhythm(const tRhythm &o); + tRhythm & operator= (const tRhythm &o); + virtual ~tRhythm(); + + char const * GetLabel() { return label; } + void SetLabel(char const *); + + void Generate(tTrack *track, long fr_clock, long to_clock, long ticks_per_bar); + void Generate(tTrack *track, tBarInfo &bi, tRhythm *rhy[], int n_rhy); + void GenInit(long start_clock); + void GenerateEvent(tTrack *track, long clock, short vel, short len); + + void write(int, Xml&); + void read(Xml&); + }; +#endif + +//--------------------------------------------------------- +// RhythmGen +//--------------------------------------------------------- + +class RhythmGen : public RhythmBase + { + Q_OBJECT +#if 0 + wxPanel *inst_panel; + wxText *label; + wxSlider *steps_per_count; + wxSlider *count_per_bar; + wxSlider *n_bars; + wxListBox *instrument_list; + wxCheckBox *rand_checkbox; + + wxPanel *group_panel; + wxListBox *group_list; + wxSlider *group_contrib; + wxSlider *group_listen; + int act_group; + + tArrayEdit *length_edit; + tArrayEdit *veloc_edit; + tRhyArrayEdit *rhythm_edit; + + enum { MAX_INSTRUMENTS = 20 }; + tRhythm *instruments[MAX_INSTRUMENTS]; + int n_instruments; + int act_instrument; // -1 if none + + // this one is edited and copied from/to instruments[i] + tRhythm edit; + + // ignore Updates while creating the window (motif) + Bool in_create; + + // callbacks + static void ItemCallback(wxItem& item, wxCommandEvent& event); + static void SelectInstr(wxListBox& list, wxCommandEvent& event); + static void SelectGroup(wxListBox& list, wxCommandEvent& event); + static void Add(wxButton &but, wxCommandEvent& event); + static void Del(wxButton &but, wxCommandEvent& event); + static void Generate(wxButton &but, wxCommandEvent& event); + static void Help(); + + void Instrument2Win(int i = -1); // instrument[act_instrument] -> win + void Win2Instrument(int i = -1); // win -> instrument[act_instrument] + void AddInstrumentDlg(); + void AddInstrument(tRhythm *r); + void DelInstrument(); + + tEventWin *event_win; + tSong *song; + + void RndEnable(); + + char *default_filename; + int has_changed; + wxToolBar *tool_bar; + float tb_width, tb_height; + + void UpInstrument(); + void DownInstrument(); + void InitInstrumentList(); +#endif + virtual void closeEvent(QCloseEvent*); + + signals: + void hideWindow(); + + public: +// virtual void OnMenuCommand(int id); +// virtual void OnSize(int w, int h); + RhythmGen(QWidget* parent = 0, const char* name = 0, Qt::WFlags fo = Qt::WType_TopLevel); + virtual ~RhythmGen(); +// void OnPaint(); +// void GenRhythm(); +// bool OnClose(); + }; + +#endif + diff --git a/muse2/muse/mplugins/rhythmbase.ui b/muse2/muse/mplugins/rhythmbase.ui new file mode 100644 index 00000000..4d236c52 --- /dev/null +++ b/muse2/muse/mplugins/rhythmbase.ui @@ -0,0 +1,1004 @@ + +RhythmBase + + + RhythmBase + + + + 0 + 0 + 448 + 603 + + + + MusE: Random Rhythm Generator + + + true + + + + unnamed + + + 6 + + + 6 + + + + GroupBox1 + + + Instrument Properties + + + + unnamed + + + 11 + + + 6 + + + + Layout2_2 + + + + unnamed + + + 0 + + + 6 + + + + TextLabel2_3_2 + + + counts/bar + + + + + TextLabel3_2 + + + steps/count + + + + + TextLabel1_2_2 + + + # bars + + + + + lineInstrument_2 + + + test + + + false + + + true + + + + + spinboxContrib_2 + + + 100 + + + 0 + + + 0 + + + + + labelContrib_2 + + + contrib + + + + + checkRandomize_2 + + + randomize + + + true + + + false + + + + + + + + + + + Group 1 + + + + + Group 2 + + + + + Group 3 + + + + + Group 4 + + + + + Group 5 + + + + comboGroupSel_2 + + + + + spinBoxSteps_2 + + + 16 + + + 1 + + + 4 + + + + + spinboxBars_2 + + + 16 + + + 1 + + + 1 + + + + + labelListen_2 + + + listen + + + + + TextLabel1_4 + + + Instrument + + + + + spinboxCounts_2 + + + 16 + + + 1 + + + 4 + + + + + spinboxListen_2 + + + 100 + + + -100 + + + 0 + + + + + TextLabel1_3_2 + + + Group + + + + + + + Layout65_2 + + + + unnamed + + + 0 + + + 6 + + + + buttonNew_2 + + + &New + + + true + + + create new entry + + + pressing the New button you create a new entry +in the MusE list of defined controllers + + + + + buttonDelete_2 + + + &Delete + + + true + + + delete selected entry + + + + + Spacer1_2 + + + Horizontal + + + Expanding + + + + 20 + 20 + + + + + + buttonUp_2 + + + Up + + + + + buttonDown_2 + + + Down + + + + + + + + + + Instrument + + + true + + + true + + + + + Group + + + true + + + true + + + + + steps/count + + + true + + + true + + + + + counts/bar + + + true + + + true + + + + + # bars + + + true + + + true + + + + + contrib + + + true + + + true + + + + + listen + + + true + + + true + + + + viewInstrument + + + + 7 + 3 + 0 + 0 + + + + + 0 + 150 + + + + + 32767 + 150 + + + + StyledPanel + + + Sunken + + + list of defined controllers + + + This is the MusE list of defined controllers. + + + + + Splitter3 + + + + 1 + 7 + 0 + 0 + + + + Vertical + + + + Splitter2 + + + + 7 + 7 + 0 + 0 + + + + Horizontal + + + + Frame3 + + + + 7 + 3 + 0 + 0 + + + + + 50 + 50 + + + + StyledPanel + + + Raised + + + + + Frame4 + + + + 7 + 3 + 0 + 0 + + + + + 50 + 50 + + + + StyledPanel + + + Raised + + + + + + Frame5 + + + + 3 + 3 + 0 + 0 + + + + + 0 + 150 + + + + StyledPanel + + + Raised + + + + textLabel1 + + + + 64 + 26 + 250 + 90 + + + + <b>Notice!</b><br> +Random Rhythm Generator is not enabled yet! + + + + + + + + + menubar + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + toolBar + + + Tools + + + + + + + + + + fileNewAction + + + image0 + + + New + + + &New + + + Ctrl+N + + + + + fileOpenAction + + + image1 + + + Open + + + &Open... + + + Ctrl+O + + + + + fileSaveAction + + + image2 + + + Save + + + &Save + + + Ctrl+S + + + + + fileSaveAsAction + + + Save As + + + Save &As... + + + + + + + + filePrintAction + + + image3 + + + Print + + + &Print... + + + Ctrl+P + + + + + fileExitAction + + + Exit + + + E&xit + + + + + + + + editUndoAction + + + image4 + + + Undo + + + &Undo + + + Ctrl+Z + + + + + editRedoAction + + + image5 + + + Redo + + + &Redo + + + Ctrl+Y + + + + + editCutAction + + + image6 + + + Cut + + + &Cut + + + Ctrl+X + + + + + editCopyAction + + + image7 + + + Copy + + + C&opy + + + Ctrl+C + + + + + editPasteAction + + + image8 + + + Paste + + + &Paste + + + Ctrl+V + + + + + editFindAction + + + image9 + + + Find + + + &Find... + + + Ctrl+F + + + + + helpContentsAction + + + Contents + + + &Contents... + + + + + + + + helpIndexAction + + + Index + + + &Index... + + + + + + + + helpAboutAction + + + About + + + &About... + + + + + + + + + 789cedd2310ac23014c6f13da778245b11ab29c114f1088aa3200eaf2f151daaa07510f1eef64553ac696fe04787fcf90dc9d03481cd7a09492aae35d647023ae0051277abaafb76b77808a93534df0ca67224e4180856e753c967d59cd5c48fb3e0d4b9269d7312a741e30c723a4e9b596333ce92930c69329cc8b9f7f3b7f42e886a1709bea70a3524142812172892325024182892f681bff2f1bf74a5bb2f19fe0f7ae439172f13a0a94f + + + 789cad914d0ac2301085f739c5d0d905b1b62214c423282e05713189165d5441eb42c4bb9b9fa6a67644045f0299978f3713482a61b59c834cc5a5a6faa041efe90c727badaadb7a33bb8b24cfc1ec0964c9402443d0b0381d77b64653e3c8c95a6d6d312e326fc9dad2c85b156c59ba3eacfe41d0c89defc4dfa2dd7c37fc44b025a179043c4152a4b055f4365414ad0e8901fd94c1ae5e19441da9211c68e7f44098d3074d86019e70a0210c089958df7ffb31154f9c7397a6 + + + 789cd3d7528808f055d0d2e72a2e492cc94c5648ce482c52d04a29cdcdad8c8eb5ade6523232520022530543251d2e253d856405bffcbc54105b19c856360003103711c4b530b63084709340dc64d364a36453103719cc4d49324b0173f5b002b08c32160095494c544e4202400e6932c9406174d39293617a807c226510f6d04e2611d9ff892832688028196554e3b0c9e076010d65b04437341d604f21b5d65c008f8da445 + + + 789c7d944973db381085effe152af7cd35d5a1242e604dcdc189b37a899d65e2646a0e240168b32cc992bc646afefb34ba1b509671f40c9a9fde43a349507c72d0bb3c3fed1d3cd95b6f9acda4eb75e3e6a67760b7f3f9c35f7ffff1cfdefe60d0a33f637a83fddff6f62f36bdae77b6b87601704000197f98df331bef3313186e03f7b3ccf4c5ff281cc47e9798f378ca6c22835336ea1f461e48bd93c0832c325c0907b1ff3571cdfe9cb94ebc5536cad791877d9eff4ed87bf5178187fde47f101e66c2b04ccc79fc22ecbdfa2be63afab051369a7f889c4b7e1d38ef47c685709ea93f666e7253f0e620f75f34455634ecdf28d7a5f8af853ba77e1bb86cca7ec98c4be55af93e723564fe2cecbdd6e3fb5d0d93cfd753b555bf6a99d7918df899b0f7ea737f6658d5ea6f13b30f23615308233f4fa6adea3a677f229cfcbbc8ea4f95adfa26b2f8c8cf439d478659e28ed90bd75a0f5789d9c737c25da9f32d73177d682237327fa6acf5f12cb2faaf843ba77c1cb8c9a30f9858e64f849b587f9858d607e62ee5ff148e3e5a65a73c8ddc4abd3a709b2706e1b654e6eb6b6deb5acb5c09db52997fdf5dd1955dc15c305b62f15b65a79c47b6927f11d816895f2696f7cf58d896ea3f4f2cfe85b0f7ea3f6576c9ef477625f34839d63f8aac7e19d89589bdb08bf39f2596f997c2deabff96d925df293be54f817d19c47ccecc1f79f9ee84800db6aa8ed4902c36d1ff29dfa0439fe458a35fe63b56ac2f6b748fe6813b08023dc2e3fd502d2bf552efe11c76891ff2bbba4d4aff3a0fa9aea4c3b08fe6bbef6aa72b79346fe9ae78ba7f3b8d694c48d31ff354678657d4cf98e6ec469833c76b5ce032ac13f3945ee10dae71f39db6788b77788f0ff8150f69ce44f25cfb293ec3233a3e57bdc097f80a5fe31b3ca6e409e9141fe4f78a67f816cf7fd205bec3f7345a5ae503d5ff8827f2bec04fff933ec74bfc8c5f30a3b33ef5768803cd0f69f51c0b1a63ee648425777644e715f5153c43dd0cf050debf58e394561902d2dce3f0c8e0844638030877c2400b5daa3fa7f454b2ac331e2c68c082c53bc98393f73757fc26473567922435388711b4a11f186b7dae9c52e93f555e916b6082f7d08143abf547f4cd1d4c694ce8cae46842926acff89b161c78d95f6ae62aec1fd011e6ac6b589096a41569c9e7fedbe7072ddcc09ab48125ed0d09b6b0a5f98e744bfb3bd3e7eddfdff7fe0305be5c9c + + + 789cd3d7528808f055d0d2e72a2e492cc94c5648ce482c52d04a29cdcdad8c8eb5ade6523232520022630543251d2e253d856405bffcbc54105b19c8563600020b63103711c4b530b6308470f5b082019251068344848c32b23808206494a1e23015890819653db8b81e44255c0659025d460fa70c6e3d78ec814b21b90d052422fb070540f50ebaf84196a9b5e6020008a373c8 + + + 789cd3d7528808f055d0d2e72a2e492cc94c5648ce482c52d04a29cdcdad8c8eb5ade6523232520022630543251d2e253d856405bffcbc54103b11c8563600020b63105719c4b530b6308470f5b0027acb28278201a64c221c4084136132ca7011885c225c06c91890542256193d98a198327a386570ea49449581bb4d2f114d0624a08c230c50fd4f5cb80da04cad351700eee4866e + + + 789cd3d7528808f055d0d2e72a2e492cc94c5648ce482c52d04a29cdcdad8c8eb5ade6523232520022630543251d2e253d856405bffcbc54105b19c856360003103711c6b53006abc40a90649491482ac92863955146d6822ca387474619c9301419a03842825819245bd064129513b1cb242602512216994430d44bc4904984c8c1a5e032897a3019a8144c26518f800c92715864d0ec81ab4dc4701b924fb0850e8a4cad351700fe117ccc + + + 789c9d92cb0ac2301045f7f98aa1d915b1da82b4889fa0b814c4c54c6ad14515b42e44fc773b79d057ace04da073399c5042a21076db358491b857589d15a813de20cc1f65f9dc1f562f11c431d47b01f36022822928d85c2f479e653dcb990e5772354db82aae4996a8a2e09a734d29cd4c45ae858e3ed69b71226d3c04757ac81036b05edf1ceca0b643364387ccd7a2c69148c625453d079d936be47350239f637ec3e318ec733aa4edd8f997633374dc4d0d9d86fce1b433f60ede4bf101a375a557 + + + 789c7d92d10a82301486ef7d8ae1ee24321561103d42d165105dcce3465d54507611d1bbb7736cbaadd93f85fd7efb183af38cedb66b96e5c9bd93dd09181ce58d65ede37c7eee0fab57929625339760453a4bd23903b6b95e14ceb999f30505abb255545801aba844d1d3c6d69eb658a186126aac12ab36e9176b5bb5a64da37108c784841e7229251f319101b8885e8837d018c2e9a6b925585a1b6a9640030ec1e63a6302c71faee38fd051434247f51f4c2bad4247936008a2b88368c23128ea50628e9e741ce23bdfcd9cf3e1bf8e3d5fe5e5cf1ff25e261ff1b8c16c + + + 789cb5d5594f23471007f0773e8545bda1e8bfbe66ecd16a1fcc7d3ab017ec46799899ee010c0603365794ef9e9afe574f2201118a14350ffcd4d555d5c7c08795d6c9e1416be5c3d2dd3c9f9f97adf22cbf6dadb8c574faf4dbef9ffe585aee765bfad369a7adeef22f4bcb47f356d91a5f5ff91a325648b75d8fe0dde0ac3bec66c17bb57b596fd8a30f6af73bfd76bf531bd3da499e64491ee66fe94127a54774e686bde0d5da6937eda4a1198ccd99c56fd1cdfa7b3af7c322783b388ff128e94167c0fcebe68cc665e3b01ec7f43031cfcd8e96473a4bacdf073af7593fc42f6a0f7ab11eeecdb1de6963e65fa787b67f0ce826bf6bccfacfb41e68193ca38b94f5e5daec398f22b868eafd4a0f63fe9c8efdcb4d63e63fa7353ff325e6385f44e75c7f4697162f4fd19cc7b0f6b017eba31f5d70fe8cce9cf57345e749cefadfcdb1de061dfb93cd689b9f9863fc9c8efdc8a5d95b7ee62bf43e78dea7d1850b163ab37e654ae7dee64b3ad6c73eadf598ffabd9ea49156dfb0ff791f5b3c4ded315dddcf722ba0cf5704117b1ff03baa997465bfe5573acd7a15d9c5f6bccfc99d9f687f0bd676596b824d8999dbd8f07bab0fc8268c6cb1d5dc67cdd68db4f9b6eea7da17dece76774c9fadf6ae77a5e8e7faff6697d2fdccf882e52cea317ede91d3ad6970bda79cb7f4737f5c27de5651ecf7b37daf27da69b7ae77419f31dd22ee69b98637d4f6b3dee37bcb742fbb5fbd9367bcb7f44bbe85bdadb7923e42b5c11cff3992ed32a0d7ea25d5a55c127b44f6dfd8d39e6ff4157b63f09e7572665dccf23edbce59fd155ea8325bcaf52ebd9feb6ccdeea5fd35565e719be67975415f31dcddf3ffe7b3c04390a943a0a38f87f8f4785539ce11c131d17b8d435f276bc464f71856b1d33dce016779863f15a0dde1feef1a071333ce209cf1861156b58c7c61bf14e3bd9d4f82d6c6347c72ef6b08f038c5ff6c4ff0738d44e8ef059f37ec157cdff0ddff5f763b857e34f71821ff8a9a38d0ebae8a18f04290618be113fd13db691a123404f447229a414f746fc3d0ec56be68e5418c9291239937399683f2f76ccbfd79aeb4263f7e552a67225d732d37123b7a85e8dd7bb923b99eb286481bedccb838ec7d76ec0ee6b03737992423b7916a7b9473a56e1644d73f957e23d0a59970dd99489769eebc94cebb344a5aba6ffecaa793f5e6b8c655df7782c5bb2cd18d9d13cbbb2a773fee57bd617ea7426977dd9f93ba3ea40d75886f7bc7fadbd90b156c9dfffbde8def774cdf6fbbf2f48bdf7fffdfbfdf3e3d25f9a24cea0 + + + + + fileNewAction + activated() + RhythmBase + fileNew() + + + fileOpenAction + activated() + RhythmBase + fileOpen() + + + fileSaveAction + activated() + RhythmBase + fileSave() + + + fileSaveAsAction + activated() + RhythmBase + fileSaveAs() + + + filePrintAction + activated() + RhythmBase + filePrint() + + + fileExitAction + activated() + RhythmBase + fileExit() + + + editUndoAction + activated() + RhythmBase + editUndo() + + + editRedoAction + activated() + RhythmBase + editRedo() + + + editCutAction + activated() + RhythmBase + editCut() + + + editCopyAction + activated() + RhythmBase + editCopy() + + + editPasteAction + activated() + RhythmBase + editPaste() + + + editFindAction + activated() + RhythmBase + editFind() + + + helpIndexAction + activated() + RhythmBase + helpIndex() + + + helpContentsAction + activated() + RhythmBase + helpContents() + + + helpAboutAction + activated() + RhythmBase + helpAbout() + + + + fileNew() + fileOpen() + fileSave() + fileSaveAs() + filePrint() + fileExit() + editUndo() + editRedo() + editCut() + editCopy() + editPaste() + editFind() + helpIndex() + helpContents() + helpAbout() + + + diff --git a/muse2/muse/mtc.cpp b/muse2/muse/mtc.cpp new file mode 100644 index 00000000..647d6359 --- /dev/null +++ b/muse2/muse/mtc.cpp @@ -0,0 +1,130 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: mtc.cpp,v 1.1.1.1 2003/10/27 18:51:48 wschweer Exp $ +// +// (C) Copyright 2001 Werner Schweer (ws@seh.de) +//========================================================= + +#include "mtc.h" +#include + +extern int mtcType; + +//--------------------------------------------------------- +// MTC::time +// converts MTC Time to seconds according to +// global mtcType +//--------------------------------------------------------- + +double MTC::time(int type) const + { + double time = _h * 3600 + _m * 60 + _s; + double ft = 0.0; + if(type == -1) + type = mtcType; + switch (type) { + 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 + default: + ft = 1.0/30.0; + break; + } + return time + ft *_f + 0.01 * ft * _sf; + } + +//--------------------------------------------------------- +// MTC +//--------------------------------------------------------- + +MTC::MTC(double t, int type) + { + _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; + if(type == -1) + type = mtcType; + switch (type) { + 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 + default: + 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 type) + { + int frames = 24; + if(type == -1) + type = mtcType; + switch (type) { + case 0: + frames = 24; + break; + case 1: + frames = 25; + break; + case 2: + case 3: + default: + 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/muse2/muse/mtc.h b/muse2/muse/mtc.h new file mode 100644 index 00000000..ae2bb01e --- /dev/null +++ b/muse2/muse/mtc.h @@ -0,0 +1,56 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: mtc.h,v 1.1.1.1 2003/10/27 18:51:25 wschweer Exp $ +// +// (C) Copyright 1999/2000 Werner Schweer (ws@seh.de) +//========================================================= + +#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, int type = -1); + 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(int type = -1); + 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(int type = -1) const; + void print() const; + }; + + +#endif + diff --git a/muse2/muse/muse.log b/muse2/muse/muse.log new file mode 100644 index 00000000..887f40d5 --- /dev/null +++ b/muse2/muse/muse.log @@ -0,0 +1,1875 @@ + +*** Beginning merge of project muse + +User: ws +Date: Mon, 11 Aug 2003 15:03:52 +0200 +Common version: 0.2 +Selected version: 0.4 +Working version: 0.2(w) + +*** Action on file `m4/alsa.m4' +No prompt for file `m4/alsa.m4' + +*** Action on file `m4/docbook.m4' +No prompt for file `m4/docbook.m4' + +*** Action on file `m4/Makefile.am' +No prompt for file `m4/Makefile.am' + +*** Action on file `m4/aclocal-include.m4' +No prompt for file `m4/aclocal-include.m4' + +*** Action on file `m4/qt.m4' +No prompt for file `m4/qt.m4' + +*** Action on file [symlink:COPYING] +No prompt for file [symlink:COPYING] + +*** Action on file [symlink:INSTALL] +No prompt for file [symlink:INSTALL] + +*** Action on file [symlink:depcomp] +No prompt for file [symlink:depcomp] + +*** Action on file [symlink:mkinstalldirs] +No prompt for file [symlink:mkinstalldirs] + +*** Action on file [symlink:missing] +No prompt for file [symlink:missing] + +*** Action on file [symlink:config.sub] +No prompt for file [symlink:config.sub] + +*** Action on file [symlink:install-sh] +No prompt for file [symlink:install-sh] + +*** Action on file [symlink:config.guess] +No prompt for file [symlink:config.guess] + +*** Action on file [symlink:ltmain.sh] +No prompt for file [symlink:ltmain.sh] + +*** Action on file `configure.ac' +No prompt for file `configure.ac' + +*** Action on file `Doxyfile.in' +No prompt for file `Doxyfile.in' + +*** Action on file `common.am' +No prompt for file `common.am' + +*** Action on file `aclocal.m4' +No prompt for file `aclocal.m4' + +*** Action on file `ChangeLog' +No prompt for file `ChangeLog' + +*** Action on file `README.ladspaguis' +No prompt for file `README.ladspaguis' + +*** Action on file `README.instruments' +No prompt for file `README.instruments' + +*** Action on file `README.translate' +No prompt for file `README.translate' + +*** Action on file `README' +No prompt for file `README' + +*** Action on file `README.de' +No prompt for file `README.de' + +*** Action on file `AUTHORS' +No prompt for file `AUTHORS' + +*** Action on file `README.shortcuts' +No prompt for file `README.shortcuts' + +*** Action on file `README.CVS' +No prompt for file `README.CVS' + +*** Action on file `NEWS' +No prompt for file `NEWS' + +*** Action on file `README.softsynth' +No prompt for file `README.softsynth' + +*** Action on file `SECURITY' +No prompt for file `SECURITY' + +*** Action on file `.cvsignore' +No prompt for file `.cvsignore' + +*** Action on file `Makefile.am' +No prompt for file `Makefile.am' + +*** Action on file `pos.h' +No prompt for file `pos.h' + +*** Action on file `mtc.h' +No prompt for file `mtc.h' + +*** Action on file `cfprint.cpp' +No prompt for file `cfprint.cpp' + +*** Action on file `key.h' +No prompt for file `key.h' + +*** Action on file `app.h' +No prompt for file `app.h' + +*** Action on file `song.cpp' +No prompt for file `song.cpp' + +*** Action on file `key.cpp' +No prompt for file `key.cpp' + +*** Action on file `memory.cpp' +No prompt for file `memory.cpp' + +*** Action on file `midiport.h' +No prompt for file `midiport.h' + +*** Action on file `xml.cpp' +No prompt for file `xml.cpp' + +*** Action on file `undo.cpp' +No prompt for file `undo.cpp' + +*** Action on file `debug.h' +No prompt for file `debug.h' + +*** Action on file `app.cpp' +No prompt for file `app.cpp' + +*** Action on file `thread.h' +No prompt for file `thread.h' + +*** Action on file `icons.h' +No prompt for file `icons.h' + +*** Action on file `midithread.cpp' +Copied working file `midithread.cpp' to `obsolete/midithread.cpp.v0' +Merge file `midithread.cpp' by rule 2 + +*** Action on file `device.h' +No prompt for file `device.h' + +*** Action on file `icons.cpp' +No prompt for file `icons.cpp' + +*** Action on file `wave.h' +No prompt for file `wave.h' + +*** Action on file `ladspa.h' +No prompt for file `ladspa.h' + +*** Action on file `undo.h' +No prompt for file `undo.h' + +*** Action on file `sync.h' +No prompt for file `sync.h' + +*** Action on file `song.h' +No prompt for file `song.h' + +*** Action on file `value.cpp' +No prompt for file `value.cpp' + +*** Action on file `midiport.cpp' +No prompt for file `midiport.cpp' + +*** Action on file `givertcap.c' +No prompt for file `givertcap.c' + +*** Action on file `value.h' +No prompt for file `value.h' + +*** Action on file `part.h' +No prompt for file `part.h' + +*** Action on file `node.h' +No prompt for file `node.h' + +*** Action on file `cobject.cpp' +No prompt for file `cobject.cpp' + +*** Action on file `midithread.h' +No prompt for file `midithread.h' + +*** Action on file `tempo.cpp' +No prompt for file `tempo.cpp' + +*** Action on file `memory.h' +Copied working file `memory.h' to `obsolete/memory.h.v0' +Merge file `memory.h' by rule 2, conflicts created + +*** Action on file `help.cpp' +No prompt for file `help.cpp' + +*** Action on file `audiomix.h' +No prompt for file `audiomix.h' + +*** Action on file `thread.cpp' +No prompt for file `thread.cpp' + +*** Action on file `mrecord.cpp' +No prompt for file `mrecord.cpp' + +*** Action on file `globals.cpp' +No prompt for file `globals.cpp' + +*** Action on file `pos.cpp' +No prompt for file `pos.cpp' + +*** Action on file `track.cpp' +No prompt for file `track.cpp' + +*** Action on file `midictrl.h' +No prompt for file `midictrl.h' + +*** Action on file `node.cpp' +No prompt for file `node.cpp' + +*** Action on file `audiomix.cpp' +No prompt for file `audiomix.cpp' + +*** Action on file `transport.h' +No prompt for file `transport.h' + +*** Action on file `transpose.h' +No prompt for file `transpose.h' + +*** Action on file `seqmsg.cpp' +No prompt for file `seqmsg.cpp' + +*** Action on file `audionode.h' +No prompt for file `audionode.h' + +*** Action on file `audio.h' +No prompt for file `audio.h' + +*** Action on file `grepmidi.cpp' +No prompt for file `grepmidi.cpp' + +*** Action on file `globals.h' +No prompt for file `globals.h' + +*** Action on file `midieditor.cpp' +No prompt for file `midieditor.cpp' + +*** Action on file `wave.cpp' +No prompt for file `wave.cpp' + +*** Action on file `midi.h' +No prompt for file `midi.h' + +*** Action on file `mess.h' +No prompt for file `mess.h' + +*** Action on file `sync.cpp' +No prompt for file `sync.cpp' + +*** Action on file `config.h.in' +No prompt for file `config.h.in' + +*** Action on file `track.h' +No prompt for file `track.h' + +*** Action on file `mtc.cpp' +No prompt for file `mtc.cpp' + +*** Action on file `minstrument.h' +No prompt for file `minstrument.h' + +*** Action on file `cobject.h' +No prompt for file `cobject.h' + +*** Action on file `synth.h' +No prompt for file `synth.h' + +*** Action on file `songfile.cpp' +No prompt for file `songfile.cpp' + +*** Action on file `midictrl.cpp' +No prompt for file `midictrl.cpp' + +*** Action on file `mpevent.h' +No prompt for file `mpevent.h' + +*** Action on file `font.h' +No prompt for file `font.h' + +*** Action on file `conf.cpp' +No prompt for file `conf.cpp' + +*** Action on file `conf.h' +No prompt for file `conf.h' + +*** Action on file `event.cpp' +No prompt for file `event.cpp' + +*** Action on file `midi.cpp' +No prompt for file `midi.cpp' + +*** Action on file `event.h' +No prompt for file `event.h' + +*** Action on file `audioprefetch.h' +No prompt for file `audioprefetch.h' + +*** Action on file `mpevent.cpp' +No prompt for file `mpevent.cpp' + +*** Action on file `appearance.cpp' +No prompt for file `appearance.cpp' + +*** Action on file `autogen.sh' +No prompt for file `autogen.sh' + +*** Action on file `tempo.h' +No prompt for file `tempo.h' + +*** Action on file `muse.pro' +No prompt for file `muse.pro' + +*** Action on file `part.cpp' +No prompt for file `part.cpp' + +*** Action on file `make.inc' +No prompt for file `make.inc' + +*** Action on file `confmport.h' +No prompt for file `confmport.h' + +*** Action on file `audio.cpp' +No prompt for file `audio.cpp' + +*** Action on file `confmport.cpp' +No prompt for file `confmport.cpp' + +*** Action on file `cfprint.h' +No prompt for file `cfprint.h' + +*** Action on file `sig.cpp' +No prompt for file `sig.cpp' + +*** Action on file `font.cpp' +No prompt for file `font.cpp' + +*** Action on file `midieditor.h' +No prompt for file `midieditor.h' + +*** Action on file `appearance.h' +No prompt for file `appearance.h' + +*** Action on file `globaldefs.h' +No prompt for file `globaldefs.h' + +*** Action on file `seq.cpp' +No prompt for file `seq.cpp' + +*** Action on file `miditransform.cpp' +No prompt for file `miditransform.cpp' + +*** Action on file `miditransform.h' +No prompt for file `miditransform.h' + +*** Action on file `minstrument.cpp' +Copied working file `minstrument.cpp' to `obsolete/minstrument.cpp.v0' +Merge file `minstrument.cpp' by rule 2 + +*** Action on file `audioprefetch.cpp' +No prompt for file `audioprefetch.cpp' + +*** Action on file `transport.cpp' +No prompt for file `transport.cpp' + +*** Action on file `transpose.cpp' +No prompt for file `transpose.cpp' + +*** Action on file `xml.h' +No prompt for file `xml.h' + +*** Action on file `sig.h' +No prompt for file `sig.h' + +*** Action on file `seq.h' +No prompt for file `seq.h' + +*** Action on file `demos/Makefile.am' +No prompt for file `demos/Makefile.am' + +*** Action on file `demos/rasen.med' +No prompt for file `demos/rasen.med' + +*** Action on file `widgets/.cvsignore' +No prompt for file `widgets/.cvsignore' + +*** Action on file `widgets/mmath.cpp' +No prompt for file `widgets/mmath.cpp' + +*** Action on file `widgets/dimap.cpp' +No prompt for file `widgets/dimap.cpp' + +*** Action on file `widgets/utils.cpp' +No prompt for file `widgets/utils.cpp' + +*** Action on file `widgets/sclif.cpp' +No prompt for file `widgets/sclif.cpp' + +*** Action on file `widgets/filedialog.cpp' +No prompt for file `widgets/filedialog.cpp' + +*** Action on file `widgets/citem.h' +No prompt for file `widgets/citem.h' + +*** Action on file `widgets/bigtime.cpp' +No prompt for file `widgets/bigtime.cpp' + +*** Action on file `widgets/view.cpp' +No prompt for file `widgets/view.cpp' + +*** Action on file `widgets/scldraw.h' +No prompt for file `widgets/scldraw.h' + +*** Action on file `widgets/sliderbase.h' +No prompt for file `widgets/sliderbase.h' + +*** Action on file `widgets/hitscale.cpp' +No prompt for file `widgets/hitscale.cpp' + +*** Action on file `widgets/itransformbase.ui' +No prompt for file `widgets/itransformbase.ui' + +*** Action on file `widgets/header.cpp' +No prompt for file `widgets/header.cpp' + +*** Action on file `widgets/tempolabel.h' +No prompt for file `widgets/tempolabel.h' + +*** Action on file `widgets/velocity.cpp' +No prompt for file `widgets/velocity.cpp' + +*** Action on file `widgets/midirawbase.ui' +No prompt for file `widgets/midirawbase.ui' + +*** Action on file `widgets/drange.cpp' +No prompt for file `widgets/drange.cpp' + +*** Action on file `widgets/header.h' +No prompt for file `widgets/header.h' + +*** Action on file `widgets/mlabel.h' +No prompt for file `widgets/mlabel.h' + +*** Action on file `widgets/spinboxFP.cpp' +No prompt for file `widgets/spinboxFP.cpp' + +*** Action on file `widgets/mlabel.cpp' +No prompt for file `widgets/mlabel.cpp' + +*** Action on file `widgets/metronome.cpp' +No prompt for file `widgets/metronome.cpp' + +*** Action on file `widgets/ctrlcombo.cw' +No prompt for file `widgets/ctrlcombo.cw' + +*** Action on file `widgets/sigedit.h' +No prompt for file `widgets/sigedit.h' + +*** Action on file `widgets/intlabel.h' +No prompt for file `widgets/intlabel.h' + +*** Action on file `widgets/comment.cpp' +No prompt for file `widgets/comment.cpp' + +*** Action on file `widgets/ctrlcombo.cpp' +No prompt for file `widgets/ctrlcombo.cpp' + +*** Action on file `widgets/mixdowndialog.cpp' +No prompt for file `widgets/mixdowndialog.cpp' + +*** Action on file `widgets/fontsel.cpp' +No prompt for file `widgets/fontsel.cpp' + +*** Action on file `widgets/hitscale.h' +No prompt for file `widgets/hitscale.h' + +*** Action on file `widgets/posedit.cpp' +No prompt for file `widgets/posedit.cpp' + +*** Action on file `widgets/audioconfbase.ui' +No prompt for file `widgets/audioconfbase.ui' + +*** Action on file `widgets/utils.h' +No prompt for file `widgets/utils.h' + +*** Action on file `widgets/splitter.cpp' +No prompt for file `widgets/splitter.cpp' + +*** Action on file `widgets/editctrl7dialogbase.ui' +No prompt for file `widgets/editctrl7dialogbase.ui' + +*** Action on file `widgets/doublelabel.h' +No prompt for file `widgets/doublelabel.h' + +*** Action on file `widgets/noteinfo.h' +No prompt for file `widgets/noteinfo.h' + +*** Action on file `widgets/sigscale.h' +No prompt for file `widgets/sigscale.h' + +*** Action on file `widgets/canvas.cpp' +No prompt for file `widgets/canvas.cpp' + +*** Action on file `widgets/view.h' +No prompt for file `widgets/view.h' + +*** Action on file `widgets/audioconf.h' +No prompt for file `widgets/audioconf.h' + +*** Action on file `widgets/ccontrolbase.ui' +No prompt for file `widgets/ccontrolbase.ui' + +*** Action on file `widgets/transposebase.ui' +No prompt for file `widgets/transposebase.ui' + +*** Action on file `widgets/spinboxFP.h' +No prompt for file `widgets/spinboxFP.h' + +*** Action on file `widgets/mtscale.h' +No prompt for file `widgets/mtscale.h' + +*** Action on file `widgets/nentry.cpp' +No prompt for file `widgets/nentry.cpp' + +*** Action on file `widgets/siglabel.h' +No prompt for file `widgets/siglabel.h' + +*** Action on file `widgets/transformbase.ui' +No prompt for file `widgets/transformbase.ui' + +*** Action on file `widgets/mittransposebase.ui' +No prompt for file `widgets/mittransposebase.ui' + +*** Action on file `widgets/dentry.h' +No prompt for file `widgets/dentry.h' + +*** Action on file `widgets/slider.h' +No prompt for file `widgets/slider.h' + +*** Action on file `widgets/wtscale.cpp' +No prompt for file `widgets/wtscale.cpp' + +*** Action on file `widgets/action.h' +No prompt for file `widgets/action.h' + +*** Action on file `widgets/nentry.h' +No prompt for file `widgets/nentry.h' + +*** Action on file `widgets/ttoolbar.h' +No prompt for file `widgets/ttoolbar.h' + +*** Action on file `widgets/comboQuant.cpp' +No prompt for file `widgets/comboQuant.cpp' + +*** Action on file `widgets/midisyncimpl.h' +No prompt for file `widgets/midisyncimpl.h' + +*** Action on file `widgets/sliderbase.cpp' +No prompt for file `widgets/sliderbase.cpp' + +*** Action on file `widgets/genset.cpp' +No prompt for file `widgets/genset.cpp' + +*** Action on file `widgets/velocity.h' +No prompt for file `widgets/velocity.h' + +*** Action on file `widgets/poslabel.h' +No prompt for file `widgets/poslabel.h' + +*** Action on file `widgets/knob.h' +No prompt for file `widgets/knob.h' + +*** Action on file `widgets/cliplisteditorbase.ui' +No prompt for file `widgets/cliplisteditorbase.ui' + +*** Action on file `widgets/splitter.h' +No prompt for file `widgets/splitter.h' + +*** Action on file `widgets/sigedit.cpp' +No prompt for file `widgets/sigedit.cpp' + +*** Action on file `widgets/audioconf.cpp' +No prompt for file `widgets/audioconf.cpp' + +*** Action on file `widgets/swidget.h' +No prompt for file `widgets/swidget.h' + +*** Action on file `widgets/tools.h' +No prompt for file `widgets/tools.h' + +*** Action on file `widgets/pitchlabel.h' +No prompt for file `widgets/pitchlabel.h' + +*** Action on file `widgets/Makefile.am' +No prompt for file `widgets/Makefile.am' + +*** Action on file `widgets/moc_ttoolbar.cpp' +No prompt for file `widgets/moc_ttoolbar.cpp' + +*** Action on file `widgets/intlabel.cpp' +No prompt for file `widgets/intlabel.cpp' + +*** Action on file `widgets/citem.cpp' +No prompt for file `widgets/citem.cpp' + +*** Action on file `widgets/canvas.h' +No prompt for file `widgets/canvas.h' + +*** Action on file `widgets/doublelabel.cpp' +No prompt for file `widgets/doublelabel.cpp' + +*** Action on file `widgets/slider.cpp' +No prompt for file `widgets/slider.cpp' + +*** Action on file `widgets/mmath.h' +No prompt for file `widgets/mmath.h' + +*** Action on file `widgets/wtscale.h' +No prompt for file `widgets/wtscale.h' + +*** Action on file `widgets/genset.h' +No prompt for file `widgets/genset.h' + +*** Action on file `widgets/posedit.h' +No prompt for file `widgets/posedit.h' + +*** Action on file `widgets/velocitybase.ui' +No prompt for file `widgets/velocitybase.ui' + +*** Action on file `widgets/ttoolbar.cpp' +No prompt for file `widgets/ttoolbar.cpp' + +*** Action on file `widgets/scrollscale.cpp' +No prompt for file `widgets/scrollscale.cpp' + +*** Action on file `widgets/mtscale.cpp' +No prompt for file `widgets/mtscale.cpp' + +*** Action on file `widgets/noteinfo.cpp' +No prompt for file `widgets/noteinfo.cpp' + +*** Action on file `widgets/lcombo.cpp' +No prompt for file `widgets/lcombo.cpp' + +*** Action on file `widgets/appearancebase.ui' +No prompt for file `widgets/appearancebase.ui' + +*** Action on file `widgets/vscale.h' +No prompt for file `widgets/vscale.h' + +*** Action on file `widgets/scldiv.h' +No prompt for file `widgets/scldiv.h' + +*** Action on file `widgets/drange.h' +No prompt for file `widgets/drange.h' + +*** Action on file `widgets/midisync.ui' +No prompt for file `widgets/midisync.ui' + +*** Action on file `widgets/wtrackinfobase.ui' +No prompt for file `widgets/wtrackinfobase.ui' + +*** Action on file `widgets/vscale.cpp' +No prompt for file `widgets/vscale.cpp' + +*** Action on file `widgets/editsysexdialogbase.ui' +No prompt for file `widgets/editsysexdialogbase.ui' + +*** Action on file `widgets/gatetimebase.ui' +No prompt for file `widgets/gatetimebase.ui' + +*** Action on file `widgets/editmetadialogbase.ui' +No prompt for file `widgets/editmetadialogbase.ui' + +*** Action on file `widgets/sigscale.cpp' +No prompt for file `widgets/sigscale.cpp' + +*** Action on file `widgets/mtrackinfobase.ui' +No prompt for file `widgets/mtrackinfobase.ui' + +*** Action on file `widgets/metronome.h' +No prompt for file `widgets/metronome.h' + +*** Action on file `widgets/gatetime.cpp' +No prompt for file `widgets/gatetime.cpp' + +*** Action on file `widgets/tb1.cpp' +No prompt for file `widgets/tb1.cpp' + +*** Action on file `widgets/gensetbase.ui' +No prompt for file `widgets/gensetbase.ui' + +*** Action on file `widgets/scldraw.cpp' +No prompt for file `widgets/scldraw.cpp' + +*** Action on file `widgets/bigtime.h' +No prompt for file `widgets/bigtime.h' + +*** Action on file `widgets/poslabel.cpp' +No prompt for file `widgets/poslabel.cpp' + +*** Action on file `widgets/metronomebase.ui' +No prompt for file `widgets/metronomebase.ui' + +*** Action on file `widgets/scrollscale.h' +No prompt for file `widgets/scrollscale.h' + +*** Action on file `widgets/fdialogbuttons.ui' +No prompt for file `widgets/fdialogbuttons.ui' + +*** Action on file `widgets/sclif.h' +No prompt for file `widgets/sclif.h' + +*** Action on file `widgets/tools.cpp' +No prompt for file `widgets/tools.cpp' + +*** Action on file `widgets/filedialog.h' +No prompt for file `widgets/filedialog.h' + +*** Action on file `widgets/pitchlabel.cpp' +No prompt for file `widgets/pitchlabel.cpp' + +*** Action on file `widgets/scldiv.cpp' +No prompt for file `widgets/scldiv.cpp' + +*** Action on file `widgets/musewidgetsplug.cpp' +No prompt for file `widgets/musewidgetsplug.cpp' + +*** Action on file `widgets/midisyncimpl.cpp' +No prompt for file `widgets/midisyncimpl.cpp' + +*** Action on file `widgets/commentbase.ui' +No prompt for file `widgets/commentbase.ui' + +*** Action on file `widgets/dentry.cpp' +No prompt for file `widgets/dentry.cpp' + +*** Action on file `widgets/comment.h' +No prompt for file `widgets/comment.h' + +*** Action on file `widgets/ctrlcombo.h' +No prompt for file `widgets/ctrlcombo.h' + +*** Action on file `widgets/comboQuant.h' +No prompt for file `widgets/comboQuant.h' + +*** Action on file `widgets/gatetime.h' +No prompt for file `widgets/gatetime.h' + +*** Action on file `widgets/tb1.h' +No prompt for file `widgets/tb1.h' + +*** Action on file `widgets/editnotedialogbase.ui' +No prompt for file `widgets/editnotedialogbase.ui' + +*** Action on file `widgets/pitchedit.h' +No prompt for file `widgets/pitchedit.h' + +*** Action on file `widgets/lcombo.h' +No prompt for file `widgets/lcombo.h' + +*** Action on file `widgets/fontsel.h' +No prompt for file `widgets/fontsel.h' + +*** Action on file `widgets/tempolabel.cpp' +No prompt for file `widgets/tempolabel.cpp' + +*** Action on file `widgets/knob.cpp' +No prompt for file `widgets/knob.cpp' + +*** Action on file `widgets/dimap.h' +No prompt for file `widgets/dimap.h' + +*** Action on file `widgets/pitchedit.cpp' +No prompt for file `widgets/pitchedit.cpp' + +*** Action on file `widgets/siglabel.cpp' +No prompt for file `widgets/siglabel.cpp' + +*** Action on file `widgets/mixdowndialog.h' +No prompt for file `widgets/mixdowndialog.h' + +*** Action on file `widgets/mixdowndialogbase.ui' +No prompt for file `widgets/mixdowndialogbase.ui' + +*** Action on file `widgets/synthconfigbase.ui' +No prompt for file `widgets/synthconfigbase.ui' + +*** Action on file `widgets/swidget.cpp' +No prompt for file `widgets/swidget.cpp' + +*** Action on file `widgets/section.h' +No prompt for file `widgets/section.h' + +*** Action on file `arranger/pcanvas.h' +No prompt for file `arranger/pcanvas.h' + +*** Action on file `arranger/alayout.h' +No prompt for file `arranger/alayout.h' + +*** Action on file `arranger/tlist.cpp' +No prompt for file `arranger/tlist.cpp' + +*** Action on file `arranger/arranger.h' +No prompt for file `arranger/arranger.h' + +*** Action on file `arranger/alayout.cpp' +No prompt for file `arranger/alayout.cpp' + +*** Action on file `arranger/Makefile.am' +No prompt for file `arranger/Makefile.am' + +*** Action on file `arranger/tlist.h' +No prompt for file `arranger/tlist.h' + +*** Action on file `arranger/pcanvas.cpp' +No prompt for file `arranger/pcanvas.cpp' + +*** Action on file `arranger/arranger.cpp' +No prompt for file `arranger/arranger.cpp' + +*** Action on file `mplugins/Makefile.am' +No prompt for file `mplugins/Makefile.am' + +*** Action on file `mplugins/.cvsignore' +No prompt for file `mplugins/.cvsignore' + +*** Action on file `mplugins/midifilterimpl.cpp' +No prompt for file `mplugins/midifilterimpl.cpp' + +*** Action on file `mplugins/rhythm.cpp' +No prompt for file `mplugins/rhythm.cpp' + +*** Action on file `mplugins/rhythmbase.ui' +No prompt for file `mplugins/rhythmbase.ui' + +*** Action on file `mplugins/midifilter.ui' +No prompt for file `mplugins/midifilter.ui' + +*** Action on file `mplugins/mitplugin.h' +No prompt for file `mplugins/mitplugin.h' + +*** Action on file `mplugins/rhythm.h' +No prompt for file `mplugins/rhythm.h' + +*** Action on file `mplugins/midiitransform.h' +No prompt for file `mplugins/midiitransform.h' + +*** Action on file `mplugins/mittranspose.cpp' +No prompt for file `mplugins/mittranspose.cpp' + +*** Action on file `mplugins/mrconfigbase.ui' +No prompt for file `mplugins/mrconfigbase.ui' + +*** Action on file `mplugins/mrconfig.cpp' +No prompt for file `mplugins/mrconfig.cpp' + +*** Action on file `mplugins/mrconfig.h' +No prompt for file `mplugins/mrconfig.h' + +*** Action on file `mplugins/random.h' +No prompt for file `mplugins/random.h' + +*** Action on file `mplugins/midiitransform.cpp' +No prompt for file `mplugins/midiitransform.cpp' + +*** Action on file `mplugins/mittranspose.h' +No prompt for file `mplugins/mittranspose.h' + +*** Action on file `mplugins/mitplugin.cpp' +No prompt for file `mplugins/mitplugin.cpp' + +*** Action on file `mplugins/midifilterimpl.h' +No prompt for file `mplugins/midifilterimpl.h' + +*** Action on file `mplugins/random.cpp' +No prompt for file `mplugins/random.cpp' + +*** Action on file `waveedit/Makefile.am' +No prompt for file `waveedit/Makefile.am' + +*** Action on file `waveedit/waveview.h' +No prompt for file `waveedit/waveview.h' + +*** Action on file `waveedit/waveedit.cpp' +No prompt for file `waveedit/waveedit.cpp' + +*** Action on file `waveedit/waveedit.h' +No prompt for file `waveedit/waveedit.h' + +*** Action on file `waveedit/waveview.cpp' +No prompt for file `waveedit/waveview.cpp' + +*** Action on file `master/masteredit.cpp' +No prompt for file `master/masteredit.cpp' + +*** Action on file `master/lmaster.cpp' +No prompt for file `master/lmaster.cpp' + +*** Action on file `master/tscale.cpp' +No prompt for file `master/tscale.cpp' + +*** Action on file `master/Makefile.am' +No prompt for file `master/Makefile.am' + +*** Action on file `master/master.h' +No prompt for file `master/master.h' + +*** Action on file `master/masteredit.h' +No prompt for file `master/masteredit.h' + +*** Action on file `master/lmaster.h' +No prompt for file `master/lmaster.h' + +*** Action on file `master/tscale.h' +No prompt for file `master/tscale.h' + +*** Action on file `master/master.cpp' +No prompt for file `master/master.cpp' + +*** Action on file `marker/Makefile.am' +No prompt for file `marker/Makefile.am' + +*** Action on file `marker/marker.h' +No prompt for file `marker/marker.h' + +*** Action on file `marker/markerview.cpp' +No prompt for file `marker/markerview.cpp' + +*** Action on file `marker/markerview.h' +No prompt for file `marker/markerview.h' + +*** Action on file `marker/marker.cpp' +No prompt for file `marker/marker.cpp' + +*** Action on file `driver/audiodev.h' +No prompt for file `driver/audiodev.h' + +*** Action on file `driver/midiserial.h' +No prompt for file `driver/midiserial.h' + +*** Action on file `driver/mididev.h' +No prompt for file `driver/mididev.h' + +*** Action on file `driver/mididev.cpp' +No prompt for file `driver/mididev.cpp' + +*** Action on file `driver/midirawin.h' +No prompt for file `driver/midirawin.h' + +*** Action on file `driver/midirawdev.h' +No prompt for file `driver/midirawdev.h' + +*** Action on file `driver/alsamidi.cpp' +No prompt for file `driver/alsamidi.cpp' + +*** Action on file `driver/alsamidi.h' +No prompt for file `driver/alsamidi.h' + +*** Action on file `driver/Makefile.am' +No prompt for file `driver/Makefile.am' + +*** Action on file `driver/jack.cpp' +No prompt for file `driver/jack.cpp' + +*** Action on file `driver/midirawin.cpp' +No prompt for file `driver/midirawin.cpp' + +*** Action on file `driver/alsaaudio.h' +No prompt for file `driver/alsaaudio.h' + +*** Action on file `driver/midiserial.cpp' +No prompt for file `driver/midiserial.cpp' + +*** Action on file `driver/alsaaudio.cpp' +No prompt for file `driver/alsaaudio.cpp' + +*** Action on file `driver/midirawdev.cpp' +No prompt for file `driver/midirawdev.cpp' + +*** Action on file `driver/jackaudio.h' +No prompt for file `driver/jackaudio.h' + +*** Action on file `driver/mess.cpp' +No prompt for file `driver/mess.cpp' + +*** Action on file `midiedit/drummap.cpp' +No prompt for file `midiedit/drummap.cpp' + +*** Action on file `midiedit/dcanvas.h' +No prompt for file `midiedit/dcanvas.h' + +*** Action on file `midiedit/piano.h' +No prompt for file `midiedit/piano.h' + +*** Action on file `midiedit/drummap.h' +No prompt for file `midiedit/drummap.h' + +*** Action on file `midiedit/drumedit.h' +No prompt for file `midiedit/drumedit.h' + +*** Action on file `midiedit/prcanvas.cpp' +No prompt for file `midiedit/prcanvas.cpp' + +*** Action on file `midiedit/dcanvas.cpp' +No prompt for file `midiedit/dcanvas.cpp' + +*** Action on file `midiedit/Makefile.am' +No prompt for file `midiedit/Makefile.am' + +*** Action on file `midiedit/dlist.cpp' +No prompt for file `midiedit/dlist.cpp' + +*** Action on file `midiedit/pianoroll.cpp' +No prompt for file `midiedit/pianoroll.cpp' + +*** Action on file `midiedit/ecanvas.h' +No prompt for file `midiedit/ecanvas.h' + +*** Action on file `midiedit/quantconfig.h' +No prompt for file `midiedit/quantconfig.h' + +*** Action on file `midiedit/quantconfig.cpp' +No prompt for file `midiedit/quantconfig.cpp' + +*** Action on file `midiedit/ecanvas.cpp' +No prompt for file `midiedit/ecanvas.cpp' + +*** Action on file `midiedit/piano.cpp' +No prompt for file `midiedit/piano.cpp' + +*** Action on file `midiedit/prcanvas.h' +No prompt for file `midiedit/prcanvas.h' + +*** Action on file `midiedit/drumedit.cpp' +No prompt for file `midiedit/drumedit.cpp' + +*** Action on file `midiedit/dlist.h' +No prompt for file `midiedit/dlist.h' + +*** Action on file `midiedit/cmd.h' +No prompt for file `midiedit/cmd.h' + +*** Action on file `midiedit/pianoroll.h' +No prompt for file `midiedit/pianoroll.h' + +*** Action on file `patchbay/Makefile.am' +No prompt for file `patchbay/Makefile.am' + +*** Action on file `patchbay/patchbay.cpp' +No prompt for file `patchbay/patchbay.cpp' + +*** Action on file `patchbay/patchbaybase.ui' +No prompt for file `patchbay/patchbaybase.ui' + +*** Action on file `patchbay/patchbay.h' +No prompt for file `patchbay/patchbay.h' + +*** Action on file `synti/synth.cpp' +No prompt for file `synti/synth.cpp' + +*** Action on file `synti/synthconfig.h' +No prompt for file `synti/synthconfig.h' + +*** Action on file `synti/Makefile.am' +No prompt for file `synti/Makefile.am' + +*** Action on file `synti/synti-install.am' +No prompt for file `synti/synti-install.am' + +*** Action on file `synti/synthconfig.cpp' +No prompt for file `synti/synthconfig.cpp' + +*** Action on file `synti/organ/.cvsignore' +No prompt for file `synti/organ/.cvsignore' + +*** Action on file `synti/organ/organ.cpp' +No prompt for file `synti/organ/organ.cpp' + +*** Action on file `synti/organ/organ.h' +No prompt for file `synti/organ/organ.h' + +*** Action on file `synti/organ/organguibase.ui' +No prompt for file `synti/organ/organguibase.ui' + +*** Action on file `synti/organ/Makefile.am' +No prompt for file `synti/organ/Makefile.am' + +*** Action on file `synti/organ/organgui.h' +No prompt for file `synti/organ/organgui.h' + +*** Action on file `synti/organ/fdialogbuttons.ui' +No prompt for file `synti/organ/fdialogbuttons.ui' + +*** Action on file `synti/organ/organgui.cpp' +No prompt for file `synti/organ/organgui.cpp' + +*** Action on file `synti/fluid/fluidgui.cpp' +No prompt for file `synti/fluid/fluidgui.cpp' + +*** Action on file `synti/fluid/fluidguibase.ui' +No prompt for file `synti/fluid/fluidguibase.ui' + +*** Action on file `synti/fluid/synth.cpp' +No prompt for file `synti/fluid/synth.cpp' + +*** Action on file `synti/fluid/Makefile.am' +No prompt for file `synti/fluid/Makefile.am' + +*** Action on file `synti/fluid/synth.h' +No prompt for file `synti/fluid/synth.h' + +*** Action on file `synti/fluid/fluid.cpp' +No prompt for file `synti/fluid/fluid.cpp' + +*** Action on file `synti/fluid/fluidgui.h' +No prompt for file `synti/fluid/fluidgui.h' + +*** Action on file `synti/fluidsynth/fluidsynthgui.h' +No prompt for file `synti/fluidsynth/fluidsynthgui.h' + +*** Action on file `synti/fluidsynth/fluidsynti.h' +No prompt for file `synti/fluidsynth/fluidsynti.h' + +*** Action on file `synti/fluidsynth/fluidsynti.cpp' +No prompt for file `synti/fluidsynth/fluidsynti.cpp' + +*** Action on file `synti/fluidsynth/fluidsynthguibase.ui' +No prompt for file `synti/fluidsynth/fluidsynthguibase.ui' + +*** Action on file `synti/fluidsynth/Makefile.am' +No prompt for file `synti/fluidsynth/Makefile.am' + +*** Action on file `synti/fluidsynth/fluidsynthgui.cpp' +No prompt for file `synti/fluidsynth/fluidsynthgui.cpp' + +*** Action on file `synti/fluidsynth/TODO' +No prompt for file `synti/fluidsynth/TODO' + +*** Action on file `synti/vam/vamgui.cpp' +No prompt for file `synti/vam/vamgui.cpp' + +*** Action on file `synti/vam/COPYING' +No prompt for file `synti/vam/COPYING' + +*** Action on file `synti/vam/ChangeLog' +No prompt for file `synti/vam/ChangeLog' + +*** Action on file `synti/vam/vamgui.h' +No prompt for file `synti/vam/vamgui.h' + +*** Action on file `synti/vam/vam.cpp' +No prompt for file `synti/vam/vam.cpp' + +*** Action on file `synti/vam/Makefile.am' +No prompt for file `synti/vam/Makefile.am' + +*** Action on file `synti/vam/fdialogbuttons.ui' +No prompt for file `synti/vam/fdialogbuttons.ui' + +*** Action on file `synti/vam/README' +No prompt for file `synti/vam/README' + +*** Action on file `synti/vam/vam.h' +No prompt for file `synti/vam/vam.h' + +*** Action on file `synti/vam/vamguibase.ui' +No prompt for file `synti/vam/vamguibase.ui' + +*** Action on file `synti/vam/TODO' +No prompt for file `synti/vam/TODO' + +*** Action on file `synti/s1/s1.cpp' +No prompt for file `synti/s1/s1.cpp' + +*** Action on file `synti/s1/Makefile.am' +No prompt for file `synti/s1/Makefile.am' + +*** Action on file `share/Makefile.am' +No prompt for file `share/Makefile.am' + +*** Action on file `share/plugins/1050.ui' +No prompt for file `share/plugins/1050.ui' + +*** Action on file `share/plugins/Makefile.am' +No prompt for file `share/plugins/Makefile.am' + +*** Action on file `share/instruments/Yamaha-P50m.idf' +No prompt for file `share/instruments/Yamaha-P50m.idf' + +*** Action on file `share/instruments/ns5r.idf' +No prompt for file `share/instruments/ns5r.idf' + +*** Action on file `share/instruments/Roland-XP30.idf' +No prompt for file `share/instruments/Roland-XP30.idf' + +*** Action on file `share/instruments/MC303.idf' +No prompt for file `share/instruments/MC303.idf' + +*** Action on file `share/instruments/Makefile.am' +No prompt for file `share/instruments/Makefile.am' + +*** Action on file `share/instruments/gm.idf' +No prompt for file `share/instruments/gm.idf' + +*** Action on file `share/instruments/Yamaha-S90.idf' +No prompt for file `share/instruments/Yamaha-S90.idf' + +*** Action on file `share/instruments/AlesisQS6.idf' +No prompt for file `share/instruments/AlesisQS6.idf' + +*** Action on file `share/drummaps/Makefile.am' +No prompt for file `share/drummaps/Makefile.am' + +*** Action on file `share/drummaps/sc88-pc1.map' +No prompt for file `share/drummaps/sc88-pc1.map' + +*** Action on file `share/locale/Makefile.am' +No prompt for file `share/locale/Makefile.am' + +*** Action on file `share/locale/muse_sv_SE.ts' +No prompt for file `share/locale/muse_sv_SE.ts' + +*** Action on file `share/locale/muse_ru.ts' +No prompt for file `share/locale/muse_ru.ts' + +*** Action on file `share/locale/muse_fr.ts' +No prompt for file `share/locale/muse_fr.ts' + +*** Action on file `share/locale/muse_es.ts' +No prompt for file `share/locale/muse_es.ts' + +*** Action on file `share/locale/muse_de.ts' +No prompt for file `share/locale/muse_de.ts' + +*** Action on file `share/locale/muse_sv_SE.qm' +No prompt for file `share/locale/muse_sv_SE.qm' + +*** Action on file `share/locale/muse_ru.qm' +No prompt for file `share/locale/muse_ru.qm' + +*** Action on file `share/locale/muse_fr.qm' +No prompt for file `share/locale/muse_fr.qm' + +*** Action on file `share/locale/muse_es.qm' +No prompt for file `share/locale/muse_es.qm' + +*** Action on file `share/locale/muse_de.qm' +No prompt for file `share/locale/muse_de.qm' + +*** Action on file `share/wallpapers/paper1.jpg' +No prompt for file `share/wallpapers/paper1.jpg' + +*** Action on file `share/wallpapers/Makefile.am' +No prompt for file `share/wallpapers/Makefile.am' + +*** Action on file `share/wallpapers/gray_rock.gif' +No prompt for file `share/wallpapers/gray_rock.gif' + +*** Action on file `share/wallpapers/gray.gif' +No prompt for file `share/wallpapers/gray.gif' + +*** Action on file `share/wallpapers/gray_stucco.gif' +No prompt for file `share/wallpapers/gray_stucco.gif' + +*** Action on file `share/wallpapers/stone1.gif' +No prompt for file `share/wallpapers/stone1.gif' + +*** Action on file `share/html/invocation.html' +No prompt for file `share/html/invocation.html' + +*** Action on file `share/html/left_pane.jpg' +No prompt for file `share/html/left_pane.jpg' + +*** Action on file `share/html/styles.css' +No prompt for file `share/html/styles.css' + +*** Action on file `share/html/button_bar.jpg' +No prompt for file `share/html/button_bar.jpg' + +*** Action on file `share/html/COPYING.html' +No prompt for file `share/html/COPYING.html' + +*** Action on file `share/html/main_window.jpg' +No prompt for file `share/html/main_window.jpg' + +*** Action on file `share/html/toc_.txt' +No prompt for file `share/html/toc_.txt' + +*** Action on file `share/html/Makefile.am' +No prompt for file `share/html/Makefile.am' + +*** Action on file `share/html/track_info.jpg' +No prompt for file `share/html/track_info.jpg' + +*** Action on file `share/html/getting_started.html' +No prompt for file `share/html/getting_started.html' + +*** Action on file `share/html/index.html' +No prompt for file `share/html/index.html' + +*** Action on file `share/html/window_ref.html' +No prompt for file `share/html/window_ref.html' + +*** Action on file `share/html/installation.html' +No prompt for file `share/html/installation.html' + +*** Action on file `share/html/main_window_track_info.jpg' +No prompt for file `share/html/main_window_track_info.jpg' + +*** Action on file `share/html/right_pane.jpg' +No prompt for file `share/html/right_pane.jpg' + +*** Action on file `score/Makefile.am' +No prompt for file `score/Makefile.am' + +*** Action on file `score/ncanvas.cpp' +No prompt for file `score/ncanvas.cpp' + +*** Action on file `score/print.cpp' +No prompt for file `score/print.cpp' + +*** Action on file `score/print.h' +No prompt for file `score/print.h' + +*** Action on file `score/layout.h' +No prompt for file `score/layout.h' + +*** Action on file `score/items.h' +No prompt for file `score/items.h' + +*** Action on file `score/papersize.cpp' +No prompt for file `score/papersize.cpp' + +*** Action on file `score/symbols.cpp' +No prompt for file `score/symbols.cpp' + +*** Action on file `score/layout.cpp' +No prompt for file `score/layout.cpp' + +*** Action on file `score/glyphs.cpp' +No prompt for file `score/glyphs.cpp' + +*** Action on file `score/papersize.h' +No prompt for file `score/papersize.h' + +*** Action on file `score/palettes.h' +No prompt for file `score/palettes.h' + +*** Action on file `score/glyphs.h' +No prompt for file `score/glyphs.h' + +*** Action on file `score/ncanvas.h' +No prompt for file `score/ncanvas.h' + +*** Action on file `score/score.doc' +No prompt for file `score/score.doc' + +*** Action on file `score/score.cpp' +No prompt for file `score/score.cpp' + +*** Action on file `score/items.cpp' +No prompt for file `score/items.cpp' + +*** Action on file `score/sconfig.h' +No prompt for file `score/sconfig.h' + +*** Action on file `score/symbols.h' +No prompt for file `score/symbols.h' + +*** Action on file `score/font.cpp' +No prompt for file `score/font.cpp' + +*** Action on file `score/sconfig.cpp' +No prompt for file `score/sconfig.cpp' + +*** Action on file `score/score.h' +No prompt for file `score/score.h' + +*** Action on file `score/palettes.cpp' +No prompt for file `score/palettes.cpp' + +*** Action on file `score/quant.cpp' +No prompt for file `score/quant.cpp' + +*** Action on file `score/quant.h' +No prompt for file `score/quant.h' + +*** Action on file `score/note.cpp' +No prompt for file `score/note.cpp' + +*** Action on file `mixer/Makefile.am' +No prompt for file `mixer/Makefile.am' + +*** Action on file `mixer/amixer.h' +No prompt for file `mixer/amixer.h' + +*** Action on file `mixer/meter.cpp' +No prompt for file `mixer/meter.cpp' + +*** Action on file `mixer/mixer.cpp' +No prompt for file `mixer/mixer.cpp' + +*** Action on file `mixer/routecombo.cpp' +No prompt for file `mixer/routecombo.cpp' + +*** Action on file `mixer/volslider.h' +No prompt for file `mixer/volslider.h' + +*** Action on file `mixer/rack.h' +No prompt for file `mixer/rack.h' + +*** Action on file `mixer/mixer.h' +No prompt for file `mixer/mixer.h' + +*** Action on file `mixer/panknob.h' +No prompt for file `mixer/panknob.h' + +*** Action on file `mixer/panknob.cpp' +No prompt for file `mixer/panknob.cpp' + +*** Action on file `mixer/amixer.cpp' +No prompt for file `mixer/amixer.cpp' + +*** Action on file `mixer/meter.h' +No prompt for file `mixer/meter.h' + +*** Action on file `mixer/rack.cpp' +No prompt for file `mixer/rack.cpp' + +*** Action on file `mixer/routecombo.h' +No prompt for file `mixer/routecombo.h' + +*** Action on file `mixer/audionodebutton.h' +No prompt for file `mixer/audionodebutton.h' + +*** Action on file `mixer/dot.xpm' +No prompt for file `mixer/dot.xpm' + +*** Action on file `mixer/volslider.cpp' +No prompt for file `mixer/volslider.cpp' + +*** Action on file `mixer/audionodebutton.cpp' +No prompt for file `mixer/audionodebutton.cpp' + +*** Action on file `liste/editevent.cpp' +No prompt for file `liste/editevent.cpp' + +*** Action on file `liste/editevent.h' +No prompt for file `liste/editevent.h' + +*** Action on file `liste/Makefile.am' +No prompt for file `liste/Makefile.am' + +*** Action on file `liste/listedit.h' +No prompt for file `liste/listedit.h' + +*** Action on file `liste/listedit.cpp' +No prompt for file `liste/listedit.cpp' + +*** Action on file `ctrl/Makefile.am' +No prompt for file `ctrl/Makefile.am' + +*** Action on file `ctrl/ctrlcanvas.cpp' +No prompt for file `ctrl/ctrlcanvas.cpp' + +*** Action on file `ctrl/ctrlpanel.h' +No prompt for file `ctrl/ctrlpanel.h' + +*** Action on file `ctrl/ctrlcanvas.h' +No prompt for file `ctrl/ctrlcanvas.h' + +*** Action on file `ctrl/ctrledit.h' +No prompt for file `ctrl/ctrledit.h' + +*** Action on file `ctrl/ctrledit.cpp' +No prompt for file `ctrl/ctrledit.cpp' + +*** Action on file `ctrl/ctrlpanel.cpp' +No prompt for file `ctrl/ctrlpanel.cpp' + +*** Action on file `xpm/darkreddot.xpm' +No prompt for file `xpm/darkreddot.xpm' + +*** Action on file `xpm/editmuteS.xpm' +No prompt for file `xpm/editmuteS.xpm' + +*** Action on file `xpm/midiin.xpm' +No prompt for file `xpm/midiin.xpm' + +*** Action on file `xpm/editpasteS.xpm' +No prompt for file `xpm/editpasteS.xpm' + +*** Action on file `xpm/pitch.xpm' +No prompt for file `xpm/pitch.xpm' + +*** Action on file `xpm/italic.xpm' +No prompt for file `xpm/italic.xpm' + +*** Action on file `xpm/redo.xpm' +No prompt for file `xpm/redo.xpm' + +*** Action on file `xpm/filesaveS.xpm' +No prompt for file `xpm/filesaveS.xpm' + +*** Action on file `xpm/scoreS.xpm' +No prompt for file `xpm/scoreS.xpm' + +*** Action on file `xpm/exit.xpm' +No prompt for file `xpm/exit.xpm' + +*** Action on file `xpm/rmark.xpm' +No prompt for file `xpm/rmark.xpm' + +*** Action on file `xpm/frewind.xpm' +No prompt for file `xpm/frewind.xpm' + +*** Action on file `xpm/stop.xpm' +No prompt for file `xpm/stop.xpm' + +*** Action on file `xpm/graydot.xpm' +No prompt for file `xpm/graydot.xpm' + +*** Action on file `xpm/loop.xpm' +No prompt for file `xpm/loop.xpm' + +*** Action on file `xpm/steprec.xpm' +No prompt for file `xpm/steprec.xpm' + +*** Action on file `xpm/recordoffbutton.xpm' +No prompt for file `xpm/recordoffbutton.xpm' + +*** Action on file `xpm/filenewS.xpm' +No prompt for file `xpm/filenewS.xpm' + +*** Action on file `xpm/bold.xpm' +No prompt for file `xpm/bold.xpm' + +*** Action on file `xpm/fileopen.xpm' +No prompt for file `xpm/fileopen.xpm' + +*** Action on file `xpm/editpaste.xpm' +No prompt for file `xpm/editpaste.xpm' + +*** Action on file `xpm/speaker.xpm' +No prompt for file `xpm/speaker.xpm' + +*** Action on file `xpm/delete.xpm' +No prompt for file `xpm/delete.xpm' + +*** Action on file `xpm/pianoS.xpm' +No prompt for file `xpm/pianoS.xpm' + +*** Action on file `xpm/start.xpm' +No prompt for file `xpm/start.xpm' + +*** Action on file `xpm/punchin.xpm' +No prompt for file `xpm/punchin.xpm' + +*** Action on file `xpm/fileprint.xpm' +No prompt for file `xpm/fileprint.xpm' + +*** Action on file `xpm/editcopy.xpm' +No prompt for file `xpm/editcopy.xpm' + +*** Action on file `xpm/play.xpm' +No prompt for file `xpm/play.xpm' + +*** Action on file `xpm/filesaveasS.xpm' +No prompt for file `xpm/filesaveasS.xpm' + +*** Action on file `xpm/stick.xpm' +No prompt for file `xpm/stick.xpm' + +*** Action on file `xpm/fforward.xpm' +No prompt for file `xpm/fforward.xpm' + +*** Action on file `xpm/lock.xpm' +No prompt for file `xpm/lock.xpm' + +*** Action on file `xpm/back.xpm' +No prompt for file `xpm/back.xpm' + +*** Action on file `xpm/up.xpm' +No prompt for file `xpm/up.xpm' + +*** Action on file `xpm/cafter.xpm' +No prompt for file `xpm/cafter.xpm' + +*** Action on file `xpm/recordonbutton.xpm' +No prompt for file `xpm/recordonbutton.xpm' + +*** Action on file `xpm/flag.xpm' +No prompt for file `xpm/flag.xpm' + +*** Action on file `xpm/off.xpm' +No prompt for file `xpm/off.xpm' + +*** Action on file `xpm/editcutS.xpm' +No prompt for file `xpm/editcutS.xpm' + +*** Action on file `xpm/editmute.xpm' +No prompt for file `xpm/editmute.xpm' + +*** Action on file `xpm/pencil.xpm' +No prompt for file `xpm/pencil.xpm' + +*** Action on file `xpm/pointer.xpm' +No prompt for file `xpm/pointer.xpm' + +*** Action on file `xpm/wave.xpm' +No prompt for file `xpm/wave.xpm' + +*** Action on file `xpm/undoS.xpm' +No prompt for file `xpm/undoS.xpm' + +*** Action on file `xpm/loop1.xpm' +No prompt for file `xpm/loop1.xpm' + +*** Action on file `xpm/score.xpm' +No prompt for file `xpm/score.xpm' + +*** Action on file `xpm/glue.xpm' +No prompt for file `xpm/glue.xpm' + +*** Action on file `xpm/Makefile.am' +No prompt for file `xpm/Makefile.am' + +*** Action on file `xpm/gv.xpm' +No prompt for file `xpm/gv.xpm' + +*** Action on file `xpm/redoS.xpm' +No prompt for file `xpm/redoS.xpm' + +*** Action on file `xpm/toc.xpm' +No prompt for file `xpm/toc.xpm' + +*** Action on file `xpm/greendot.xpm' +No prompt for file `xpm/greendot.xpm' + +*** Action on file `xpm/configure.xpm' +No prompt for file `xpm/configure.xpm' + +*** Action on file `xpm/forward.xpm' +No prompt for file `xpm/forward.xpm' + +*** Action on file `xpm/underlined.xpm' +No prompt for file `xpm/underlined.xpm' + +*** Action on file `xpm/home.xpm' +No prompt for file `xpm/home.xpm' + +*** Action on file `xpm/record1.xpm' +No prompt for file `xpm/record1.xpm' + +*** Action on file `xpm/lmark.xpm' +No prompt for file `xpm/lmark.xpm' + +*** Action on file `xpm/record.xpm' +No prompt for file `xpm/record.xpm' + +*** Action on file `xpm/mute.xpm' +No prompt for file `xpm/mute.xpm' + +*** Action on file `xpm/darkgreendot.xpm' +No prompt for file `xpm/darkgreendot.xpm' + +*** Action on file `xpm/find.xpm' +No prompt for file `xpm/find.xpm' + +*** Action on file `xpm/reddot.xpm' +No prompt for file `xpm/reddot.xpm' + +*** Action on file `xpm/punchout.xpm' +No prompt for file `xpm/punchout.xpm' + +*** Action on file `xpm/panic.xpm' +No prompt for file `xpm/panic.xpm' + +*** Action on file `xpm/fileprintS.xpm' +No prompt for file `xpm/fileprintS.xpm' + +*** Action on file `xpm/draw.xpm' +No prompt for file `xpm/draw.xpm' + +*** Action on file `xpm/filesave.xpm' +No prompt for file `xpm/filesave.xpm' + +*** Action on file `xpm/filenew.xpm' +No prompt for file `xpm/filenew.xpm' + +*** Action on file `xpm/piano.xpm' +No prompt for file `xpm/piano.xpm' + +*** Action on file `xpm/solobutton.xpm' +No prompt for file `xpm/solobutton.xpm' + +*** Action on file `xpm/punchin1.xpm' +No prompt for file `xpm/punchin1.xpm' + +*** Action on file `xpm/idea.xpm' +No prompt for file `xpm/idea.xpm' + +*** Action on file `xpm/editcut.xpm' +No prompt for file `xpm/editcut.xpm' + +*** Action on file `xpm/editcopyS.xpm' +No prompt for file `xpm/editcopyS.xpm' + +*** Action on file `xpm/cmark.xpm' +No prompt for file `xpm/cmark.xpm' + +*** Action on file `xpm/fileopenS.xpm' +No prompt for file `xpm/fileopenS.xpm' + +*** Action on file `xpm/ctrl.xpm' +No prompt for file `xpm/ctrl.xpm' + +*** Action on file `xpm/note1.xpm' +No prompt for file `xpm/note1.xpm' + +*** Action on file `xpm/context_help.xpm' +No prompt for file `xpm/context_help.xpm' + +*** Action on file `xpm/exitS.xpm' +No prompt for file `xpm/exitS.xpm' + +*** Action on file `xpm/flagS.xpm' +No prompt for file `xpm/flagS.xpm' + +*** Action on file `xpm/iiwusynth.xpm' +No prompt for file `xpm/iiwusynth.xpm' + +*** Action on file `xpm/sysex.xpm' +No prompt for file `xpm/sysex.xpm' + +*** Action on file `xpm/down.xpm' +No prompt for file `xpm/down.xpm' + +*** Action on file `xpm/dot.xpm' +No prompt for file `xpm/dot.xpm' + +*** Action on file `xpm/quant.xpm' +No prompt for file `xpm/quant.xpm' + +*** Action on file `xpm/doth.xpm' +No prompt for file `xpm/doth.xpm' + +*** Action on file `xpm/punchout1.xpm' +No prompt for file `xpm/punchout1.xpm' + +*** Action on file `xpm/cut.xpm' +No prompt for file `xpm/cut.xpm' + +*** Action on file `xpm/note.xpm' +No prompt for file `xpm/note.xpm' + +*** Action on file `xpm/buttondown.xpm' +No prompt for file `xpm/buttondown.xpm' + +*** Action on file `xpm/dot1.xpm' +No prompt for file `xpm/dot1.xpm' + +*** Action on file `xpm/meta.xpm' +No prompt for file `xpm/meta.xpm' + +*** Action on file `xpm/undo.xpm' +No prompt for file `xpm/undo.xpm' + +*** Action on file `xpm/master.xpm' +No prompt for file `xpm/master.xpm' + +*** Action on file `xpm/bluedot.xpm' +No prompt for file `xpm/bluedot.xpm' + +*** Action on file `xpm/newmutebutton.xpm' +No prompt for file `xpm/newmutebutton.xpm' + +*** Action on file `xpm/pafter.xpm' +No prompt for file `xpm/pafter.xpm' + +*** Action on file `lib/plugins/Makefile.am' +No prompt for file `lib/plugins/Makefile.am' + +*** Action on file `lib/synthi/Makefile.am' +No prompt for file `lib/synthi/Makefile.am' + +*** Action on file `lib/Makefile.am' +No prompt for file `lib/Makefile.am' + +*** Action on file `cliplist/cliplist.cpp' +No prompt for file `cliplist/cliplist.cpp' + +*** Action on file `cliplist/Makefile.am' +No prompt for file `cliplist/Makefile.am' + +*** Action on file `cliplist/cliplist.h' +No prompt for file `cliplist/cliplist.h' + +*** Action on file `doc/midieditfunctions.png' +No prompt for file `doc/midieditfunctions.png' + +*** Action on file `doc/Makefile.am' +No prompt for file `doc/Makefile.am' + +*** Action on file `doc/muse.sgm' +No prompt for file `doc/muse.sgm' + +*** Action on file `plugins/Makefile.am' +No prompt for file `plugins/Makefile.am' + +*** Action on file `plugins/plugin.h' +No prompt for file `plugins/plugin.h' + +*** Action on file `plugins/plugin.cpp' +No prompt for file `plugins/plugin.cpp' + +*** Action on file `plugins/plugins-install.am' +No prompt for file `plugins/plugins-install.am' + +*** Action on file `plugins/freeverb/denormals.h' +No prompt for file `plugins/freeverb/denormals.h' + +*** Action on file `plugins/freeverb/tuning.h' +No prompt for file `plugins/freeverb/tuning.h' + +*** Action on file `plugins/freeverb/readme.txt' +No prompt for file `plugins/freeverb/readme.txt' + +*** Action on file `plugins/freeverb/revmodel.h' +No prompt for file `plugins/freeverb/revmodel.h' + +*** Action on file `plugins/freeverb/Makefile.am' +No prompt for file `plugins/freeverb/Makefile.am' + +*** Action on file `plugins/freeverb/comb.h' +No prompt for file `plugins/freeverb/comb.h' + +*** Action on file `plugins/freeverb/freeverb.cpp' +No prompt for file `plugins/freeverb/freeverb.cpp' + +*** Action on file `plugins/freeverb/allpass.h' +No prompt for file `plugins/freeverb/allpass.h' + +*** Action on file `plugins/freeverb/revmodel.cpp' +No prompt for file `plugins/freeverb/revmodel.cpp' + +*** Action on file `midictrledit.h' +No prompt for file `midictrledit.h' + + +*** Merge complete + diff --git a/muse2/muse/muse.pro b/muse2/muse/muse.pro new file mode 100644 index 00000000..183ac3a8 --- /dev/null +++ b/muse2/muse/muse.pro @@ -0,0 +1,369 @@ +HEADERS = \ + ./ctrl/ctrledit.h \ + ./ctrl/ctrlcanvas.h \ + ./ctrl/ctrlpanel.h \ + ./debug.h \ + ./midiport.h \ + ./app.h \ + ./eventbase.h \ + ./key.h \ + ./liste/listedit.h \ + ./liste/editevent.h \ + ./mixer/mstrip.h \ + ./mixer/auxknob.h \ + ./mixer/meter.h \ + ./mixer/panknob.h \ + ./mixer/strip.h \ + ./mixer/rack.h \ + ./mixer/routedialog.h \ + ./mixer/amixer.h \ + ./mixer/astrip.h \ + ./mtc.h \ + ./pos.h \ + ./sig.h \ + ./xml.h \ + ./miditransform.h \ + ./route.h \ + ./globaldefs.h \ + ./appearance.h \ + ./midievent.h \ + ./midieditor.h \ + ./confmport.h \ + ./patchbay/patchbay.h \ + ./tempo.h \ + ./audioprefetch.h \ + ./event.h \ + ./waveevent.h \ + ./midiedit/pianoroll.h \ + ./midiedit/cmd.h \ + ./midiedit/dlist.h \ + ./midiedit/prcanvas.h \ + ./midiedit/quantconfig.h \ + ./midiedit/ecanvas.h \ + ./midiedit/drumedit.h \ + ./midiedit/drummap.h \ + ./midiedit/piano.h \ + ./midiedit/dcanvas.h \ + ./conf.h \ + ./ctrl.h \ + ./driver/jackaudio.h \ + ./driver/alsamidi.h \ + ./driver/audiodev.h \ + ./fastlog.h \ + ./mpevent.h \ + ./synth.h \ + ./cobject.h \ + ./track.h \ + ./evdata.h \ + ./marker/markerview.h \ + ./marker/marker.h \ + ./master/tscale.h \ + ./master/lmaster.h \ + ./master/masteredit.h \ + ./master/master.h \ + ./gconfig.h \ + ./midi.h \ + ./waveedit/waveedit.h \ + ./waveedit/waveview.h \ + ./mplugins/midifilterimpl.h \ + ./mplugins/mittranspose.h \ + ./mplugins/random.h \ + ./mplugins/mrconfig.h \ + ./mplugins/midiitransform.h \ + ./mplugins/rhythm.h \ + ./mplugins/mitplugin.h \ + ./node.h \ + ./part.h \ + ./value.h \ + ./song.h \ + ./sync.h \ + ./undo.h \ + ./ladspa.h \ + ./wave.h \ + ./device.h \ + ./instruments/midictrledit.h \ + ./instruments/minstrument.h \ + ./instruments/editinstrument.h \ + ./icons.h \ + ./thread.h \ + ./arranger/tlist.h \ + ./arranger/arranger.h \ + ./arranger/alayout.h \ + ./arranger/pcanvas.h \ + ./globals.h \ + ./audio.h \ + ./transpose.h \ + ./transport.h \ + ./widgets/section.h \ + ./widgets/mixdowndialog.h \ + ./widgets/dimap.h \ + ./widgets/fontsel.h \ + ./widgets/lcombo.h \ + ./widgets/pitchedit.h \ + ./widgets/tb1.h \ + ./widgets/gatetime.h \ + ./widgets/comboQuant.h \ + ./widgets/ctrlcombo.h \ + ./widgets/comment.h \ + ./widgets/filedialog.h \ + ./widgets/sclif.h \ + ./widgets/scrollscale.h \ + ./widgets/bigtime.h \ + ./widgets/metronome.h \ + ./widgets/combobox.h \ + ./widgets/ttoolbutton.h \ + ./widgets/drange.h \ + ./widgets/scldiv.h \ + ./widgets/vscale.h \ + ./widgets/posedit.h \ + ./widgets/genset.h \ + ./widgets/shortcutcapturedialog.h \ + ./widgets/wtscale.h \ + ./widgets/mmath.h \ + ./widgets/canvas.h \ + ./widgets/shortcutconfig.h \ + ./widgets/pitchlabel.h \ + ./widgets/tools.h \ + ./widgets/swidget.h \ + ./widgets/splitter.h \ + ./widgets/knob.h \ + ./widgets/poslabel.h \ + ./widgets/velocity.h \ + ./widgets/midisyncimpl.h \ + ./widgets/ttoolbar.h \ + ./widgets/nentry.h \ + ./widgets/action.h \ + ./widgets/slider.h \ + ./widgets/dentry.h \ + ./widgets/siglabel.h \ + ./widgets/checkbox.h \ + ./widgets/mtscale.h \ + ./widgets/spinboxFP.h \ + ./widgets/view.h \ + ./widgets/sigscale.h \ + ./widgets/noteinfo.h \ + ./widgets/doublelabel.h \ + ./widgets/utils.h \ + ./widgets/hitscale.h \ + ./widgets/intlabel.h \ + ./widgets/sigedit.h \ + ./widgets/mlabel.h \ + ./widgets/header.h \ + ./widgets/tempolabel.h \ + ./widgets/sliderbase.h \ + ./widgets/scldraw.h \ + ./widgets/citem.h \ + ./mididev.h \ + ./midictrl.h \ + ./midiseq.h \ + ./midifile.h \ + ./shortcuts.h \ + ./memory.h \ + ./helper.h \ + ./plugin.h + +SOURCES = \ + ./ctrl/ctrlpanel.cpp \ + ./ctrl/ctrledit.cpp \ + ./ctrl/ctrlcanvas.cpp \ + ./route.cpp \ + ./undo.cpp \ + ./midievent.cpp \ + ./xml.cpp \ + ./memory.cpp \ + ./key.cpp \ + ./midiseq.cpp \ + ./song.cpp \ + ./liste/listedit.cpp \ + ./liste/editevent.cpp \ + ./mixer/strip.cpp \ + ./mixer/auxknob.cpp \ + ./mixer/rack.cpp \ + ./mixer/amixer.cpp \ + ./mixer/routedialog.cpp \ + ./mixer/panknob.cpp \ + ./mixer/mstrip.cpp \ + ./mixer/astrip.cpp \ + ./mixer/meter.cpp \ + ./transpose.cpp \ + ./eventlist.cpp \ + ./transport.cpp \ + ./wavetrack.cpp \ + ./audioprefetch.cpp \ + ./helper.cpp \ + ./miditransform.cpp \ + ./ctrl.cpp \ + ./sig.cpp \ + ./confmport.cpp \ + ./shortcuts.cpp \ + ./audio.cpp \ + ./part.cpp \ + ./patchbay/patchbay.cpp \ + ./appearance.cpp \ + ./mpevent.cpp \ + ./midi.cpp \ + ./event.cpp \ + ./midiedit/drumedit.cpp \ + ./midiedit/piano.cpp \ + ./midiedit/ecanvas.cpp \ + ./midiedit/quantconfig.cpp \ + ./midiedit/pianoroll.cpp \ + ./midiedit/dlist.cpp \ + ./midiedit/dcanvas.cpp \ + ./midiedit/prcanvas.cpp \ + ./midiedit/drummap.cpp \ + ./plugin.cpp \ + ./conf.cpp \ + ./driver/jack.cpp \ + ./driver/alsamidi.cpp \ + ./driver/dummyaudio.cpp \ + ./midictrl.cpp \ + ./songfile.cpp \ + ./gconfig.cpp \ + ./mtc.cpp \ + ./marker/marker.cpp \ + ./marker/markerview.cpp \ + ./master/master.cpp \ + ./master/tscale.cpp \ + ./master/lmaster.cpp \ + ./master/masteredit.cpp \ + ./sync.cpp \ + ./wave.cpp \ + ./midieditor.cpp \ + ./waveedit/waveview.cpp \ + ./waveedit/waveedit.cpp \ + ./mplugins/mitplugin.cpp \ + ./mplugins/midiitransform.cpp \ + ./mplugins/mrconfig.cpp \ + ./mplugins/mittranspose.cpp \ + ./mplugins/midifilterimpl.cpp \ + ./cobject.cpp \ + ./midifile.cpp \ + ./midiport.cpp \ + ./exportmidi.cpp \ + ./value.cpp \ + ./synth.cpp \ + ./waveevent.cpp \ + ./icons.cpp \ + ./instruments/minstrument.cpp \ + ./instruments/editinstrument.cpp \ + ./instruments/midictrledit.cpp \ + ./app.cpp \ + ./arranger/arranger.cpp \ + ./arranger/trackinfo.cpp \ + ./arranger/pcanvas.cpp \ + ./arranger/alayout.cpp \ + ./arranger/tlist.cpp \ + ./audiotrack.cpp \ + ./seqmsg.cpp \ + ./widgets/swidget.cpp \ + ./widgets/ttoolbutton.cpp \ + ./widgets/siglabel.cpp \ + ./widgets/pitchedit.cpp \ + ./widgets/knob.cpp \ + ./widgets/tempolabel.cpp \ + ./widgets/dentry.cpp \ + ./widgets/midisyncimpl.cpp \ + ./widgets/musewidgetsplug.cpp \ + ./widgets/scldiv.cpp \ + ./widgets/pitchlabel.cpp \ + ./widgets/tools.cpp \ + ./widgets/poslabel.cpp \ + ./widgets/scldraw.cpp \ + ./widgets/tb1.cpp \ + ./widgets/gatetime.cpp \ + ./widgets/sigscale.cpp \ + ./widgets/vscale.cpp \ + ./widgets/lcombo.cpp \ + ./widgets/noteinfo.cpp \ + ./widgets/mtscale.cpp \ + ./widgets/scrollscale.cpp \ + ./widgets/ttoolbar.cpp \ + ./widgets/slider.cpp \ + ./widgets/doublelabel.cpp \ + ./widgets/citem.cpp \ + ./widgets/intlabel.cpp \ + ./widgets/sigedit.cpp \ + ./widgets/combobox.cpp \ + ./widgets/genset.cpp \ + ./widgets/checkbox.cpp \ + ./widgets/sliderbase.cpp \ + ./widgets/comboQuant.cpp \ + ./widgets/wtscale.cpp \ + ./widgets/nentry.cpp \ + ./widgets/canvas.cpp \ + ./widgets/splitter.cpp \ + ./widgets/posedit.cpp \ + ./widgets/fontsel.cpp \ + ./widgets/mixdowndialog.cpp \ + ./widgets/ctrlcombo.cpp \ + ./widgets/comment.cpp \ + ./widgets/metronome.cpp \ + ./widgets/mlabel.cpp \ + ./widgets/spinboxFP.cpp \ + ./widgets/drange.cpp \ + ./widgets/velocity.cpp \ + ./widgets/shortcutconfig.cpp \ + ./widgets/header.cpp \ + ./widgets/hitscale.cpp \ + ./widgets/view.cpp \ + ./widgets/bigtime.cpp \ + ./widgets/filedialog.cpp \ + ./widgets/sclif.cpp \ + ./widgets/utils.cpp \ + ./widgets/dimap.cpp \ + ./widgets/mmath.cpp \ + ./mididev.cpp \ + ./node.cpp \ + ./track.cpp \ + ./pos.cpp \ + ./globals.cpp \ + ./importmidi.cpp \ + ./thread.cpp \ + ./help.cpp \ + ./tempo.cpp + +FORMS = \ + ./liste/editctrlbase.ui \ + ./mixer/midiportroutebase.ui \ + ./mixer/routedialogbase.ui \ + ./patchbay/patchbaybase.ui \ + ./mplugins/mrconfigbase.ui \ + ./mplugins/midifilter.ui \ + ./mplugins/rhythmbase.ui \ + ./instruments/editinstrumentbase.ui \ + ./instruments/ccontrolbase.ui \ + ./widgets/synthconfigbase.ui \ + ./widgets/mixdowndialogbase.ui \ + ./widgets/aboutbox.ui \ + ./widgets/editnotedialogbase.ui \ + ./widgets/commentbase.ui \ + ./widgets/fdialogbuttons.ui \ + ./widgets/metronomebase.ui \ + ./widgets/gensetbase.ui \ + ./widgets/shortcutcapturedialogbase.ui \ + ./widgets/mtrackinfobase.ui \ + ./widgets/editmetadialogbase.ui \ + ./widgets/gatetimebase.ui \ + ./widgets/configmidifilebase.ui \ + ./widgets/editsysexdialogbase.ui \ + ./widgets/wtrackinfobase.ui \ + ./widgets/midisync.ui \ + ./widgets/appearancebase.ui \ + ./widgets/velocitybase.ui \ + ./widgets/cliplisteditorbase.ui \ + ./widgets/mittransposebase.ui \ + ./widgets/transformbase.ui \ + ./widgets/transposebase.ui \ + ./widgets/editctrl7dialogbase.ui \ + ./widgets/shortcutconfigbase.ui \ + ./widgets/itransformbase.ui + +TRANSLATIONS = \ + ../share/locale/muse_de.ts \ + ../share/locale/muse_fr.ts \ + ../share/locale/muse_sv_SE.ts \ + ../share/locale/muse_es.ts \ + ../share/locale/muse_ru.ts \ + ../share/locale/muse_pl.ts + diff --git a/muse2/muse/node.cpp b/muse2/muse/node.cpp new file mode 100644 index 00000000..47fbf1f2 --- /dev/null +++ b/muse2/muse/node.cpp @@ -0,0 +1,1911 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: node.cpp,v 1.36.2.25 2009/12/20 05:00:35 terminator356 Exp $ +// +// (C) Copyright 2000-2004 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include +#include +#include + +#include "node.h" +#include "globals.h" +#include "gconfig.h" +#include "song.h" +#include "xml.h" +#include "plugin.h" +#include "synth.h" +#include "audiodev.h" +#include "audio.h" +#include "wave.h" +#include "utils.h" //debug +#include "ticksynth.h" // metronome +#include "al/dsp.h" + +// Uncomment this (and make sure to set Jack buffer size high like 2048) +// to see process flow messages. +//#define NODE_DEBUG +//#define FIFO_DEBUG + +// Added by Tim. p3.3.18 +//#define METRONOME_DEBUG + +//--------------------------------------------------------- +// isMute +//--------------------------------------------------------- + +bool MidiTrack::isMute() const + { + if (_solo || (_internalSolo && !_mute)) + return false; + + if (_soloRefCnt) + return true; + + return _mute; + } + +bool AudioTrack::isMute() const + { + if (_solo || (_internalSolo && !_mute)) + return false; + + if (_soloRefCnt) + return true; + + return _mute; + } + +//--------------------------------------------------------- +// setSolo +//--------------------------------------------------------- + +void MidiTrack::setSolo(bool val) +{ + if(_solo != val) + { + _solo = val; + updateSoloStates(false); + } +} + +void AudioTrack::setSolo(bool val) +{ + if(_solo != val) + { + _solo = val; + updateSoloStates(false); + } + + if (isMute()) + resetMeter(); +} + +//--------------------------------------------------------- +// setInternalSolo +//--------------------------------------------------------- + +void Track::setInternalSolo(unsigned int val) +{ + _internalSolo = val; +} + +//--------------------------------------------------------- +// clearSoloRefCounts +// This is a static member function. Required for outside access. +// Clears the internal static reference counts. +//--------------------------------------------------------- + +void Track::clearSoloRefCounts() +{ + _soloRefCnt = 0; +} + +//--------------------------------------------------------- +// updateSoloState +//--------------------------------------------------------- + +void Track::updateSoloState() +{ + if(_solo) + _soloRefCnt++; + else + if(_soloRefCnt && !_tmpSoloChainNoDec) + _soloRefCnt--; +} + +//--------------------------------------------------------- +// updateInternalSoloStates +//--------------------------------------------------------- + +void Track::updateInternalSoloStates() +{ + if(_tmpSoloChainTrack->solo()) + { + _internalSolo++; + _soloRefCnt++; + } + else + if(!_tmpSoloChainNoDec) + { + if(_internalSolo) + _internalSolo--; + if(_soloRefCnt) + _soloRefCnt--; + } +} + +//--------------------------------------------------------- +// updateInternalSoloStates +//--------------------------------------------------------- + +void MidiTrack::updateInternalSoloStates() +{ + if(this == _tmpSoloChainTrack) + return; + + Track::updateInternalSoloStates(); +} + +//--------------------------------------------------------- +// updateInternalSoloStates +//--------------------------------------------------------- + +void AudioTrack::updateInternalSoloStates() +{ + if(this == _tmpSoloChainTrack) + return; + + Track::updateInternalSoloStates(); + + if(_tmpSoloChainDoIns) + { + if(type() == AUDIO_SOFTSYNTH) + { + const MidiTrackList* ml = song->midis(); + for(ciMidiTrack im = ml->begin(); im != ml->end(); ++im) + { + MidiTrack* mt = *im; + if(mt->outPort() >= 0 && mt->outPort() == ((SynthI*)this)->midiPort()) + mt->updateInternalSoloStates(); + } + } + + const RouteList* rl = inRoutes(); + for(ciRoute ir = rl->begin(); ir != rl->end(); ++ir) + { + if(ir->type == Route::TRACK_ROUTE) + ir->track->updateInternalSoloStates(); + } + } + else + { + const RouteList* rl = outRoutes(); + for(ciRoute ir = rl->begin(); ir != rl->end(); ++ir) + { + if(ir->type == Route::TRACK_ROUTE) + ir->track->updateInternalSoloStates(); + } + } +} + +//--------------------------------------------------------- +// updateSoloStates +//--------------------------------------------------------- + +void MidiTrack::updateSoloStates(bool noDec) +{ + if(noDec && !_solo) + return; + + _tmpSoloChainTrack = this; + _tmpSoloChainDoIns = false; + _tmpSoloChainNoDec = noDec; + updateSoloState(); + + if(outPort() >= 0) + { + MidiDevice *md = midiPorts[outPort()].device(); + if(md && md->isSynti()) + ((SynthI*)md)->updateInternalSoloStates(); + } +} + +//--------------------------------------------------------- +// updateSoloStates +//--------------------------------------------------------- + +void AudioTrack::updateSoloStates(bool noDec) +{ + if(noDec && !_solo) + return; + + _tmpSoloChainTrack = this; + _tmpSoloChainNoDec = noDec; + updateSoloState(); + + _tmpSoloChainDoIns = true; + if(type() == AUDIO_SOFTSYNTH) + { + const MidiTrackList* ml = song->midis(); + for(ciMidiTrack im = ml->begin(); im != ml->end(); ++im) + { + MidiTrack* mt = *im; + if(mt->outPort() >= 0 && mt->outPort() == ((SynthI*)this)->midiPort()) + mt->updateInternalSoloStates(); + } + } + + { + const RouteList* rl = inRoutes(); + for(ciRoute ir = rl->begin(); ir != rl->end(); ++ir) + { + if(ir->type == Route::TRACK_ROUTE) + ir->track->updateInternalSoloStates(); + } + } + _tmpSoloChainDoIns = false; + { + const RouteList* rl = outRoutes(); + for(ciRoute ir = rl->begin(); ir != rl->end(); ++ir) + { + if(ir->type == Route::TRACK_ROUTE) + ir->track->updateInternalSoloStates(); + } + } +} + +//--------------------------------------------------------- +// setMute +//--------------------------------------------------------- + +void Track::setMute(bool val) + { + _mute = val; + } + +//--------------------------------------------------------- +// setOff +//--------------------------------------------------------- + +void Track::setOff(bool val) + { + _off = val; + } + +//--------------------------------------------------------- +// copyData +//--------------------------------------------------------- + +//void AudioTrack::copyData(unsigned pos, int dstChannels, unsigned nframes, float** dstBuffer) +void AudioTrack::copyData(unsigned pos, int dstChannels, int srcStartChan, int srcChannels, unsigned nframes, float** dstBuffer) +{ + //Changed by T356. 12/12/09. + // Overhaul and streamline to eliminate multiple processing during one process loop. + // Was causing ticking sound with synths + multiple out routes because synths were being processed multiple times. + // Make better use of AudioTrack::outBuffers as a post-effect pre-volume cache system for multiple calls here during processing. + // Previously only WaveTrack used them. (Changed WaveTrack as well). + + if(srcStartChan == -1) + srcStartChan = 0; + + int srcChans = (srcChannels == -1) ? channels() : srcChannels; + int srcTotalOutChans = totalOutChannels(); + if(channels() == 1) + srcTotalOutChans = 1; + + #ifdef NODE_DEBUG + printf("MusE: AudioTrack::copyData name:%s processed:%d\n", name().latin1(), processed()); + #endif + + // Special consideration for metronome: It is not part of the track list, + // and it has no in or out routes, yet multiple output tracks may call addData on it ! + // We can't tell how many output tracks call it, so we can only assume there might be more than one. + // Not strictly necessary here because only addData is ever called, but just to be consistent... + //bool usedirectbuf = (outRoutes()->size() <= 1) || (type() == AUDIO_OUTPUT); + bool usedirectbuf = ((outRoutes()->size() <= 1) || (type() == AUDIO_OUTPUT)) && (this != metronome); + + int i; + + // p3.3.38 + //float* buffer[srcChannels]; + float* buffer[srcTotalOutChans]; + + + //float data[nframes * srcChannels]; + //for(i = 0; i < srcChannels; ++i) + // buffer[i] = data + i * nframes; + + // precalculate stereo volume + double vol[2]; + double _volume = volume(); + double _pan = pan(); + vol[0] = _volume * (1.0 - _pan); + vol[1] = _volume * (1.0 + _pan); + float meter[srcChans]; + + // Have we been here already during this process cycle? + if(processed()) + { + // If there is only one (or no) output routes, it's an error - we've been called more than once per process cycle! + #ifdef NODE_DEBUG + if(usedirectbuf) + printf("MusE: AudioTrack::copyData Error! One or no out routes, but already processed! Copying local buffers anyway...\n"); + #endif + + // Is there already some data gathered from a previous call during this process cycle? + if(_haveData) + { + // Point the input buffers at our local cached 'pre-volume' buffers. They need processing, so continue on after. + //for(i = 0; i < srcChannels; ++i) + // buffer[i] = outBuffers[i]; + // p3.3.38 + for(i = 0; i < srcTotalOutChans; ++i) + buffer[i] = outBuffers[i]; + } + else + { + // No data was available from a previous call during this process cycle. Zero the supplied buffers and just return. + for(i = 0; i < dstChannels; ++i) + { + if(config.useDenormalBias) + { + for(unsigned int q = 0; q < nframes; ++q) + dstBuffer[i][q] = denormalBias; + } + else + memset(dstBuffer[i], 0, sizeof(float) * nframes); + } + return; + } + } + else + { + // First time here during this process cycle. + + // Point the input buffers at a temporary stack buffer. + //float data[nframes * srcChannels]; + //for(i = 0; i < srcChannels; ++i) + // buffer[i] = data + i * nframes; + // p3.3.38 + float data[nframes * srcTotalOutChans]; + for(i = 0; i < srcTotalOutChans; ++i) + buffer[i] = data + i * nframes; + + // getData can use the supplied buffers, or change buffer to point to its own local buffers or Jack buffers etc. + // For ex. if this is an audio input, Jack will set the pointers for us in AudioInput::getData! + // p3.3.29 1/27/10 Don't do any processing at all if off. Whereas, mute needs to be ready for action at all times, + // so still call getData before it. Off is NOT meant to be toggled rapidly, but mute is ! + //if(!getData(pos, srcChannels, nframes, buffer) || off() || (isMute() && !_prefader)) + //if(off() || !getData(pos, srcChannels, nframes, buffer) || (isMute() && !_prefader)) + // p3.3.38 + if(off() || !getData(pos, srcTotalOutChans, nframes, buffer) || (isMute() && !_prefader)) + { + #ifdef NODE_DEBUG + printf("MusE: AudioTrack::copyData name:%s dstChannels:%d zeroing buffers\n", name().latin1(), dstChannels); + #endif + + // No data was available. Zero the supplied buffers. + unsigned int q; + for(i = 0; i < dstChannels; ++i) + { + if(config.useDenormalBias) + { + for(q = 0; q < nframes; ++q) + dstBuffer[i][q] = denormalBias; + } + else + memset(dstBuffer[i], 0, sizeof(float) * nframes); + } + + for(i = 0; i < srcChans; ++i) + { + //_meter[i] = 0; + _meter[i] = 0.0; + + /* + if(!usedirectbuf) + { + if(config.useDenormalBias) + { + for(q = 0; q < nframes; ++q) + outBuffers[i][q] = denormalBias; + } + else + memset(outBuffers[i], 0, sizeof(float) * nframes); + } + */ + } + + _haveData = false; + _processed = true; + return; + } + + //--------------------------------------------------- + // apply plugin chain + //--------------------------------------------------- + + // p3.3.41 + //fprintf(stderr, "AudioTrack::copyData %s efx apply srcChans:%d\n", name().latin1(), srcChans); + _efxPipe->apply(srcChans, nframes, buffer); + + //--------------------------------------------------- + // aux sends + //--------------------------------------------------- + + if(hasAuxSend() && !isMute()) + { + AuxList* al = song->auxs(); + unsigned naux = al->size(); + for(unsigned k = 0; k < naux; ++k) + { + float m = _auxSend[k]; + if(m <= 0.0001) // optimize + continue; + AudioAux* a = (AudioAux*)((*al)[k]); + float** dst = a->sendBuffer(); + int auxChannels = a->channels(); + if((srcChans ==1 && auxChannels==1) || srcChans == 2) + { + for(int ch = 0; ch < srcChans; ++ch) + { + float* db = dst[ch % a->channels()]; // no matter whether there's one or two dst buffers + float* sb = buffer[ch]; + for(unsigned f = 0; f < nframes; ++f) + *db++ += (*sb++ * m * vol[ch]); // add to mix + } + } + else if(srcChans==1 && auxChannels==2) // copy mono to both channels + { + for(int ch = 0; ch < auxChannels; ++ch) + { + float* db = dst[ch % a->channels()]; + float* sb = buffer[0]; + for(unsigned f = 0; f < nframes; ++f) + *db++ += (*sb++ * m * vol[ch]); // add to mix + } + } + } + } + + //--------------------------------------------------- + // prefader metering + //--------------------------------------------------- + + if(_prefader) + { + for(i = 0; i < srcChans; ++i) + { + float* p = buffer[i]; + meter[i] = 0.0; + for(unsigned k = 0; k < nframes; ++k) + { + double f = fabs(*p); + if(f > meter[i]) + meter[i] = f; + ++p; + } + //_meter[i] = lrint(meter[i] * 32767.0); + _meter[i] = meter[i]; + if(_meter[i] > _peak[i]) + _peak[i] = _meter[i]; + } + } + + if(isMute()) + { + unsigned int q; + for(i = 0; i < dstChannels; ++i) + { + if(config.useDenormalBias) + { + for(q = 0; q < nframes; q++) + dstBuffer[i][q] = denormalBias; + } + else + memset(dstBuffer[i], 0, sizeof(float) * nframes); + } + + /* + if(!usedirectbuf) + { + for(i = 0; i < srcChannels; ++i) + { + if(config.useDenormalBias) + { + for(q = 0; q < nframes; ++q) + outBuffers[i][q] = denormalBias; + } + else + memset(outBuffers[i], 0, sizeof(float) * nframes); + } + } + */ + + _haveData = false; + _processed = true; + return; + } + + // If we're using local cached 'pre-volume' buffers, copy the input buffers (as they are right now: post-effect pre-volume) back to them. + if(!usedirectbuf) + { + //for(i = 0; i < srcChannels; ++i) + // AL::dsp->cpy(outBuffers[i], buffer[i], nframes); + // p3.3.38 + for(i = 0; i < srcTotalOutChans; ++i) + AL::dsp->cpy(outBuffers[i], buffer[i], nframes); + } + + // We have some data! Set to true. + _haveData = true; + } + + // Sanity check. Is source starting channel out of range? Just zero and return. + if(srcStartChan >= srcTotalOutChans) + { + unsigned int q; + for(i = 0; i < dstChannels; ++i) + { + if(config.useDenormalBias) + { + for(q = 0; q < nframes; q++) + dstBuffer[i][q] = denormalBias; + } + else + memset(dstBuffer[i], 0, sizeof(float) * nframes); + } + _processed = true; + return; + } + // Force a source range to fit actual available total out channels. + if((srcStartChan + srcChans) > srcTotalOutChans) + srcChans = srcTotalOutChans - srcStartChan; + + //--------------------------------------------------- + // apply volume + // postfader metering + //--------------------------------------------------- + + + if(srcChans == dstChannels) + { + if(_prefader) + { + for(int c = 0; c < dstChannels; ++c) + { + // p3.3.38 + //float* sp = buffer[c]; + float* sp = buffer[c + srcStartChan]; + + float* dp = dstBuffer[c]; + for(unsigned k = 0; k < nframes; ++k) + *dp++ = (*sp++ * vol[c]); + } + } + else + { + for(int c = 0; c < dstChannels; ++c) + { + meter[c] = 0.0; + + // p3.3.38 + //float* sp = buffer[c]; + float* sp = buffer[c + srcStartChan]; + + float* dp = dstBuffer[c]; + //printf("2 dstBuffer[c]=%d\n",long(dstBuffer[c])); + for(unsigned k = 0; k < nframes; ++k) + { + float val = *sp++ * vol[c]; + *dp++ = val; + double f = fabs(val); + if(f > meter[c]) + meter[c] = f; + } + //_meter[c] = lrint(meter[c] * 32767.0); + _meter[c] = meter[c]; + if(_meter[c] > _peak[c]) + _peak[c] = _meter[c]; + } + } + } + else if(srcChans == 1 && dstChannels == 2) + { + // p3.3.38 + //float* sp = buffer[0]; + float* sp = buffer[srcStartChan]; + + if(_prefader) + { + for(int c = 0; c < dstChannels; ++c) + { + float* dp = dstBuffer[c]; + for(unsigned k = 0; k < nframes; ++k) + *dp++ = (*sp++ * vol[c]); + } + } + else + { + meter[0] = 0.0; + for(unsigned k = 0; k < nframes; ++k) + { + float val = *sp++; + double f = fabs(val) * _volume; + if(f > meter[0]) + meter[0] = f; + *(dstBuffer[0] + k) = val * vol[0]; + *(dstBuffer[1] + k) = val * vol[1]; + } + //_meter[0] = lrint(meter[0] * 32767.0); + _meter[0] = meter[0]; + if(_meter[0] > _peak[0]) + _peak[0] = _meter[0]; + } + } + else if(srcChans == 2 && dstChannels == 1) + { + // p3.3.38 + //float* sp1 = buffer[0]; + //float* sp2 = buffer[1]; + float* sp1 = buffer[srcStartChan]; + float* sp2 = buffer[srcStartChan + 1]; + + if(_prefader) + { + float* dp = dstBuffer[0]; + for(unsigned k = 0; k < nframes; ++k) + *dp++ = (*sp1++ * vol[0] + *sp2++ * vol[1]); + } + else + { + float* dp = dstBuffer[0]; + meter[0] = 0.0; + meter[1] = 0.0; + for(unsigned k = 0; k < nframes; ++k) + { + float val1 = *sp1++ * vol[0]; + float val2 = *sp2++ * vol[1]; + double f1 = fabs(val1); + if(f1 > meter[0]) + meter[0] = f1; + double f2 = fabs(val2); + if(f2 > meter[1]) + meter[1] = f2; + *dp++ = (val1 + val2); + } + //_meter[0] = lrint(meter[0] * 32767.0); + _meter[0] = meter[0]; + if(_meter[0] > _peak[0]) + _peak[0] = _meter[0]; + //_meter[1] = lrint(meter[1] * 32767.0); + _meter[1] = meter[1]; + if(_meter[1] > _peak[1]) + _peak[1] = _meter[1]; + } + } + + _processed = true; +} + +//--------------------------------------------------------- +// addData +//--------------------------------------------------------- + +//void AudioTrack::addData(unsigned pos, int dstChannels, unsigned nframes, float** dstBuffer) +void AudioTrack::addData(unsigned pos, int dstChannels, int srcStartChan, int srcChannels, unsigned nframes, float** dstBuffer) +{ + //Changed by T356. 12/12/09. + // Overhaul and streamline to eliminate multiple processing during one process loop. + // Was causing ticking sound with synths + multiple out routes because synths were being processed multiple times. + // Make better use of AudioTrack::outBuffers as a post-effect pre-volume cache system for multiple calls here during processing. + // Previously only WaveTrack used them. (Changed WaveTrack as well). + + //Added by Tim. p3.3.16 + #ifdef NODE_DEBUG + printf("MusE: AudioTrack::addData name:%s processed:%d\n", name().latin1(), processed()); + #endif + + if (off()) + { + _processed = true; + return; + } + + if(srcStartChan == -1) + srcStartChan = 0; + + int srcChans = (srcChannels == -1) ? channels() : srcChannels; + int srcTotalOutChans = totalOutChannels(); + if(channels() == 1) + srcTotalOutChans = 1; + + // Special consideration for metronome: It is not part of the track list, + // and it has no in or out routes, yet multiple output tracks may call addData on it ! + // We can't tell how many output tracks call it, so we can only assume there might be more than one. + //bool usedirectbuf = (outRoutes()->size() <= 1) || (type() == AUDIO_OUTPUT); + bool usedirectbuf = ((outRoutes()->size() <= 1) || (type() == AUDIO_OUTPUT)) && (this != metronome); + + int i; + + // p3.3.38 + //float* buffer[srcChannels]; + float* buffer[srcTotalOutChans]; + + //float data[nframes * srcChannels]; + //for (i = 0; i < srcChannels; ++i) + // buffer[i] = data + i * nframes; + + // precalculate stereo volume + double vol[2]; + double _volume = volume(); + double _pan = pan(); + vol[0] = _volume * (1.0 - _pan); + vol[1] = _volume * (1.0 + _pan); + float meter[srcChans]; + + // Have we been here already during this process cycle? + if(processed()) + { + // If there is only one (or no) output routes, it's an error - we've been called more than once per process cycle! + #ifdef NODE_DEBUG + if(usedirectbuf) + printf("MusE: AudioTrack::addData Error! One or no out routes, but already processed! Copying local buffers anyway...\n"); + #endif + + // Is there already some data gathered from a previous call during this process cycle? + if(_haveData) + { + // Point the input buffers at our local cached 'pre-volume' buffers. They need processing, so continue on after. + //for(i = 0; i < srcChannels; ++i) + // buffer[i] = outBuffers[i]; + // p3.3.38 + for(i = 0; i < srcTotalOutChans; ++i) + buffer[i] = outBuffers[i]; + } + else + // No data was available from a previous call during this process cycle. Nothing to add, just return. + return; + } + else + { + // First time here during this process cycle. + + // Point the input buffers at a temporary stack buffer. + //float data[nframes * srcChannels]; + //for(i = 0; i < srcChannels; ++i) + // buffer[i] = data + i * nframes; + // p3.3.38 + float data[nframes * srcTotalOutChans]; + for(i = 0; i < srcTotalOutChans; ++i) + buffer[i] = data + i * nframes; + + + // getData can use the supplied buffers, or change buffer to point to its own local buffers or Jack buffers etc. + // For ex. if this is an audio input, Jack will set the pointers for us. + //if(!getData(pos, srcChannels, nframes, buffer)) + // p3.3.38 + if(!getData(pos, srcTotalOutChans, nframes, buffer)) + { + // No data was available. Nothing to add, but zero our local buffers and the meters. + for(i = 0; i < srcChans; ++i) + { + // If we're using local buffers, we must zero them so that the next thing requiring them + // during this process cycle will see zeros. + /* + if(!usedirectbuf) + { + if(config.useDenormalBias) + { + for(unsigned int q = 0; q < nframes; ++q) + outBuffers[i][q] = denormalBias; + } + else + memset(outBuffers[i], 0, sizeof(float) * nframes); + } + */ + + //_meter[i] = 0; + _meter[i] = 0.0; + } + + _haveData = false; + _processed = true; + return; + } + + /* + // p3.3.41 Added. + unsigned int q; + for(i = 0; i < srcChans; ++i) + { + if(config.useDenormalBias) + { + for(q = 0; q < nframes; ++q) + { + if(q & 1) + buffer[i][q] -= denormalBias; + else + buffer[i][q] += denormalBias; + } + } + } + */ + + //--------------------------------------------------- + // apply plugin chain + //--------------------------------------------------- + + // p3.3.41 + //fprintf(stderr, "AudioTrack::addData %s efx apply srcChans:%d nframes:%ld %e %e %e %e\n", + // name().latin1(), srcChans, nframes, buffer[0][0], buffer[0][1], buffer[0][2], buffer[0][3]); + _efxPipe->apply(srcChans, nframes, buffer); + // p3.3.41 + //fprintf(stderr, "AudioTrack::addData after efx: %e %e %e %e\n", + // buffer[0][0], buffer[0][1], buffer[0][2], buffer[0][3]); + + //--------------------------------------------------- + // aux sends + //--------------------------------------------------- + + if(hasAuxSend() && !isMute()) + { + AuxList* al = song->auxs(); + unsigned naux = al->size(); + for(unsigned k = 0; k < naux; ++k) + { + float m = _auxSend[k]; + if(m <= 0.0001) // optimize + continue; + AudioAux* a = (AudioAux*)((*al)[k]); + float** dst = a->sendBuffer(); + int auxChannels = a->channels(); + if((srcChans ==1 && auxChannels==1) || srcChans==2) + { + for(int ch = 0; ch < srcChans; ++ch) + { + float* db = dst[ch % a->channels()]; + float* sb = buffer[ch]; + for(unsigned f = 0; f < nframes; ++f) + *db++ += (*sb++ * m * vol[ch]); // add to mix + } + } + else if(srcChans == 1 && auxChannels == 2) + { + for(int ch = 0; ch < auxChannels; ++ch) + { + float* db = dst[ch % a->channels()]; + float* sb = buffer[0]; + for(unsigned f = 0; f < nframes; ++f) + *db++ += (*sb++ * m * vol[ch]); // add to mix + } + } + } + } + + //--------------------------------------------------- + // prefader metering + //--------------------------------------------------- + + if(_prefader) + { + for(i = 0; i < srcChans; ++i) + { + float* p = buffer[i]; + meter[i] = 0.0; + for(unsigned k = 0; k < nframes; ++k) + { + double f = fabs(*p); + if(f > meter[i]) + meter[i] = f; + ++p; + } + //_meter[i] = lrint(meter[i] * 32767.0); + _meter[i] = meter[i]; + if(_meter[i] > _peak[i]) + _peak[i] = _meter[i]; + } + } + + if(isMute()) + { + // If we're using local buffers, we must zero them. + /* + if(!usedirectbuf) + { + for(i = 0; i < srcChannels; ++i) + { + if(config.useDenormalBias) + { + for(unsigned int q = 0; q < nframes; ++q) + outBuffers[i][q] = denormalBias; + } + else + memset(outBuffers[i], 0, sizeof(float) * nframes); + } + } + */ + + _haveData = false; + _processed = true; + return; + } + + // If we're using local cached 'pre-volume' buffers, copy the input buffers (as they are right now: post-effect pre-volume) back to them. + if(!usedirectbuf) + { + //for(i = 0; i < srcChannels; ++i) + // AL::dsp->cpy(outBuffers[i], buffer[i], nframes); + // p3.3.38 + for(i = 0; i < srcTotalOutChans; ++i) + AL::dsp->cpy(outBuffers[i], buffer[i], nframes); + } + + // We have some data! Set to true. + _haveData = true; + } + + // Sanity check. Is source starting channel out of range? Just zero and return. + if(srcStartChan >= srcTotalOutChans) + { + unsigned int q; + for(i = 0; i < dstChannels; ++i) + { + if(config.useDenormalBias) + { + for(q = 0; q < nframes; q++) + dstBuffer[i][q] = denormalBias; + } + else + memset(dstBuffer[i], 0, sizeof(float) * nframes); + } + _processed = true; + return; + } + // Force a source range to fit actual available total out channels. + if((srcStartChan + srcChans) > srcTotalOutChans) + srcChans = srcTotalOutChans - srcStartChan; + + //--------------------------------------------------- + // apply volume + // postfader metering + //--------------------------------------------------- + + if(srcChans == dstChannels) + { + if(_prefader) + { + for(int c = 0; c < dstChannels; ++c) + { + // p3.3.38 + //float* sp = buffer[c]; + float* sp = buffer[c + srcStartChan]; + + float* dp = dstBuffer[c]; + for(unsigned k = 0; k < nframes; ++k) + *dp++ += (*sp++ * vol[c]); + } + } + else + { + for(int c = 0; c < dstChannels; ++c) + { + meter[c] = 0.0; + // p3.3.38 + //float* sp = buffer[c]; + float* sp = buffer[c + srcStartChan]; + + float* dp = dstBuffer[c]; + for(unsigned k = 0; k < nframes; ++k) + { + float val = *sp++ * vol[c]; + *dp++ += val; + double f = fabs(val); + if (f > meter[c]) + meter[c] = f; + } + //_meter[c] = lrint(meter[c] * 32767.0); + _meter[c] = meter[c]; + if(_meter[c] > _peak[c]) + _peak[c] = _meter[c]; + } + } + } + else if(srcChans == 1 && dstChannels == 2) + { + // p3.3.38 + float* sp = buffer[srcStartChan]; + + if(_prefader) + { + for(int c = 0; c < dstChannels; ++c) + { + float* dp = dstBuffer[c]; + //float* sp = buffer[0]; + for(unsigned k = 0; k < nframes; ++k) + *dp++ += (*sp++ * vol[c]); + } + } + else + { + //float* sp = buffer[0]; + meter[0] = 0.0; + for(unsigned k = 0; k < nframes; ++k) + { + float val = *sp++; + double f = fabs(val) * _volume; + if(f > meter[0]) + meter[0] = f; + *(dstBuffer[0] + k) += val * vol[0]; + *(dstBuffer[1] + k) += val * vol[1]; + } + //_meter[0] = lrint(meter[0] * 32767.0); + _meter[0] = meter[0]; + if(_meter[0] > _peak[0]) + _peak[0] = _meter[0]; + } + } + else if(srcChans == 2 && dstChannels == 1) + { + // p3.3.38 + //float* sp1 = buffer[0]; + //float* sp2 = buffer[1]; + float* sp1 = buffer[srcStartChan]; + float* sp2 = buffer[srcStartChan + 1]; + + if(_prefader) + { + float* dp = dstBuffer[0]; + for(unsigned k = 0; k < nframes; ++k) + *dp++ += (*sp1++ * vol[0] + *sp2++ * vol[1]); + } + else + { + float* dp = dstBuffer[0]; + meter[0] = 0.0; + meter[1] = 0.0; + for(unsigned k = 0; k < nframes; ++k) + { + float val1 = *sp1++ * vol[0]; + float val2 = *sp2++ * vol[1]; + double f1 = fabs(val1); + if(f1 > meter[0]) + meter[0] = f1; + double f2 = fabs(val2); + if(f2 > meter[1]) + meter[1] = f2; + *dp++ += (val1 + val2); + } + //_meter[0] = lrint(meter[0] * 32767.0); + _meter[0] = meter[0]; + if(_meter[0] > _peak[0]) + _peak[0] = _meter[0]; + //_meter[1] = lrint(meter[1] * 32767.0); + _meter[1] = meter[1]; + if(_meter[1] > _peak[1]) + _peak[1] = _meter[1]; + } + } + + _processed = true; +} + +//--------------------------------------------------------- +// readVolume +//--------------------------------------------------------- + +void AudioTrack::readVolume(Xml& xml) + { + int ch = 0; + for (;;) { + Xml::Token token = xml.parse(); + switch (token) { + case Xml::Error: + case Xml::End: + return; + case Xml::TagStart: + xml.unknown("readVolume"); + break; + case Xml::Text: + setVolume(xml.s1().toDouble()); + break; + case Xml::Attribut: + if (xml.s1() == "ch") + ch = xml.s2().toInt(); + break; + case Xml::TagEnd: + if (xml.s1() == "volume") + return; + default: + break; + } + } + } + +// Removed by T356 +// "recfile" tag not saved anymore +/* +//--------------------------------------------------------- +// readRecfile +//--------------------------------------------------------- + +void AudioTrack::readRecfile(Xml& xml) + { + QString path; + int channels = 2; + int format = SF_FORMAT_WAV | SF_FORMAT_PCM_16; + + for (;;) { + Xml::Token token = xml.parse(); + if (token == Xml::Error || token == Xml::End) + break; + const QString& tag = xml.s1(); + switch (token) { + case Xml::TagStart: + if (tag == "path") + path = xml.parse1(); + else if (tag == "channels") + channels = xml.parseInt(); + else if (tag == "format") + format = xml.parseInt(); + else if (tag == "samplebits") + ; + else + xml.unknown("recfile"); + break; + case Xml::TagEnd: + if (tag == "recfile") { + if (QFile::exists(path)) { + setRecFile(getWave(path, true)); + } + else { + setRecFile(new SndFile(path)); + recFile()->setFormat(format, channels, sampleRate); + if (recFile()->openWrite()) { + fprintf(stderr, "create wave file(%s) failed: %s\n", + path.latin1(), recFile()->strerror().latin1()); + delete _recFile; + _recFile = 0; + } + } + return; + } + default: + break; + } + } + } +*/ + +//--------------------------------------------------------- +// setChannels +//--------------------------------------------------------- + +void Track::setChannels(int n) + { + if(n > MAX_CHANNELS) + _channels = MAX_CHANNELS; + else + _channels = n; + for (int i = 0; i < _channels; ++i) { + //_meter[i] = 0; + _meter[i] = 0.0; + //_peak[i] = 0; + _peak[i] = 0.0; + } + } + +void AudioInput::setChannels(int n) + { + if (n == _channels) + return; +//was ist mit: void* jackPorts[MAX_CHANNELS]; + AudioTrack::setChannels(n); + } + +void AudioOutput::setChannels(int n) + { + if (n == _channels) + return; + AudioTrack::setChannels(n); + } + +//--------------------------------------------------------- +// putFifo +//--------------------------------------------------------- + +void AudioTrack::putFifo(int channels, unsigned long n, float** bp) + { + if (fifo.put(channels, n, bp, audio->pos().frame())) { + printf(" overrun ???\n"); + } + } + +//--------------------------------------------------------- +// getData +// return false if no data available +//--------------------------------------------------------- + +bool AudioTrack::getData(unsigned pos, int channels, unsigned nframes, float** buffer) + { + // use supplied buffers + + RouteList* rl = inRoutes(); + + #ifdef NODE_DEBUG + printf("AudioTrack::getData name:%s inRoutes:%d\n", name().latin1(), rl->size()); + #endif + + iRoute ir = rl->begin(); + if (ir == rl->end()) + return false; + + if(ir->track->isMidiTrack()) + return false; + + #ifdef NODE_DEBUG + printf(" calling copyData on %s...\n", ir->track->name().latin1()); + #endif + + // p3.3.38 + //((AudioTrack*)ir->track)->copyData(pos, channels, nframes, buffer); + ((AudioTrack*)ir->track)->copyData(pos, channels, + //(ir->track->type() == Track::AUDIO_SOFTSYNTH && ir->channel != -1) ? ir->channel : 0, + ir->channel, + ir->channels, + nframes, buffer); + + // p3.3.41 + //fprintf(stderr, "AudioTrack::getData %s data: nframes:%ld %e %e %e %e\n", name().latin1(), nframes, buffer[0][0], buffer[0][1], buffer[0][2], buffer[0][3]); + + ++ir; + for (; ir != rl->end(); ++ir) { + #ifdef NODE_DEBUG + printf(" calling addData on %s...\n", ir->track->name().latin1()); + #endif + + if(ir->track->isMidiTrack()) + continue; + + // p3.3.38 + //((AudioTrack*)ir->track)->addData(pos, channels, nframes, buffer); + ((AudioTrack*)ir->track)->addData(pos, channels, + //(ir->track->type() == Track::AUDIO_SOFTSYNTH && ir->channel != -1) ? ir->channel : 0, + ir->channel, + ir->channels, + nframes, buffer); + } + return true; + } + +//--------------------------------------------------------- +// getData +// return true if data +//--------------------------------------------------------- + +bool AudioInput::getData(unsigned, int channels, unsigned nframes, float** buffer) + { + if (!checkAudioDevice()) return false; + for (int ch = 0; ch < channels; ++ch) + { + void* jackPort = jackPorts[ch]; + //float* jackbuf = 0; + + //if (jackPort) { + // p3.3.41 Do not get buffers of unconnected client ports. Causes repeating leftover data, can be loud, or DC ! + if (jackPort && audioDevice->connections(jackPort)) + { + //buffer[ch] = audioDevice->getBuffer(jackPort, nframes); + // p3.3.41 If the client port buffer is also used by another channel (connected to the same jack port), + // don't directly set pointer, copy the data instead. + // Otherwise the next channel will interfere - it will overwrite the buffer ! + // Verified symptoms: Can't use a splitter. Mono noise source on a stereo track sounds in mono. Etc... + // TODO: Problem: What if other Audio Input tracks share the same jack ports as this Audio Input track? + // Users will expect that Audio Inputs just work even if the input routes originate from the same jack port. + // Solution: Rather than having to iterate all other channels, and all other Audio Input tracks and check + // their channel port buffers (if that's even possible) in order to determine if the buffer is shared, + // let's just copy always, for now shall we ? + float* jackbuf = audioDevice->getBuffer(jackPort, nframes); + //memcpy(buffer[ch], jackbuf, nframes* sizeof(float)); + AL::dsp->cpy(buffer[ch], jackbuf, nframes); + + if (config.useDenormalBias) + { + for (unsigned int i=0; i < nframes; i++) + buffer[ch][i] += denormalBias; + + // p3.3.41 + //fprintf(stderr, "AudioInput::getData %s Jack port %p efx apply channels:%d nframes:%ld %e %e %e %e\n", + // name().latin1(), jackPort, channels, nframes, buffer[0][0], buffer[0][1], buffer[0][2], buffer[0][3]); + } + } + else + { + if (config.useDenormalBias) + { + for (unsigned int i=0; i < nframes; i++) + buffer[ch][i] = denormalBias; + } + else + { + memset(buffer[ch], 0, nframes * sizeof(float)); + } + + // p3.3.41 + //fprintf(stderr, "AudioInput::getData %s No Jack port efx apply channels:%d nframes:%ld %e %e %e %e\n", + // name().latin1(), channels, nframes, buffer[0][0], buffer[0][1], buffer[0][2], buffer[0][3]); + } + } + return true; +} + +//--------------------------------------------------------- +// setName +//--------------------------------------------------------- + +void AudioInput::setName(const QString& s) + { + _name = s; + if (!checkAudioDevice()) return; + for (int i = 0; i < channels(); ++i) { + char buffer[128]; + snprintf(buffer, 128, "%s-%d", _name.latin1(), i); + if (jackPorts[i]) + audioDevice->setPortName(jackPorts[i], buffer); + else { + //jackPorts[i] = audioDevice->registerInPort(buffer); + jackPorts[i] = audioDevice->registerInPort(buffer, false); + } + } + } + +//--------------------------------------------------------- +// resetMeter +//--------------------------------------------------------- + +void Track::resetMeter() + { + for (int i = 0; i < _channels; ++i) + //_meter[i] = 0; + _meter[i] = 0.0; + } + +//--------------------------------------------------------- +// resetPeaks +//--------------------------------------------------------- + +void Track::resetPeaks() + { + for (int i = 0; i < _channels; ++i) + //_peak[i] = 0; + _peak[i] = 0.0; + _lastActivity = 0; + } + +//--------------------------------------------------------- +// resetAllMeter +//--------------------------------------------------------- + +void Track::resetAllMeter() + { + TrackList* tl = song->tracks(); + for (iTrack i = tl->begin(); i != tl->end(); ++i) + (*i)->resetMeter(); + } + +//--------------------------------------------------------- +// setRecordFlag2 +// real time part (executed in audio thread) +//--------------------------------------------------------- + +void AudioTrack::setRecordFlag2(bool f) + { + if (f == _recordFlag) + return; + _recordFlag = f; + if (!_recordFlag) + resetMeter(); + } + +//--------------------------------------------------------- +// setMute +//--------------------------------------------------------- + +void AudioTrack::setMute(bool f) + { + _mute = f; + if (_mute) + resetAllMeter(); + } + +//--------------------------------------------------------- +// setOff +//--------------------------------------------------------- + +void AudioTrack::setOff(bool val) + { + _off = val; + if (val) + resetAllMeter(); + } + +//--------------------------------------------------------- +// setPrefader +//--------------------------------------------------------- + +void AudioTrack::setPrefader(bool val) + { + _prefader = val; + if (!_prefader && isMute()) + resetAllMeter(); + } + +//--------------------------------------------------------- +// canEnableRecord +//--------------------------------------------------------- + +bool WaveTrack::canEnableRecord() const + { + return (!noInRoute() || (this == song->bounceTrack)); + } + +//--------------------------------------------------------- +// record +//--------------------------------------------------------- + +void AudioTrack::record() + { + unsigned pos = 0; + float* buffer[_channels]; + + //printf("AudioTrack: record() fifo %p, count=%d\n", &fifo, fifo.getCount()); + + while(fifo.getCount()) { + + if (fifo.get(_channels, segmentSize, buffer, &pos)) { + printf("AudioTrack::record(): empty fifo\n"); + return; + } + if (_recFile) { + // Line removed by Tim. p3.3.8 Oct 28, 2009 + //_recFile->seek(pos, 0); + // + // Fix for recorded waves being shifted ahead by an amount + // equal to start record position. + // + // From libsndfile ChangeLog: + // 2008-05-11 Erik de Castro Lopo + // * src/sndfile.c + // Allow seeking past end of file during write. + // + // I don't know why this line would even be called, because the FIFOs' + // 'pos' members operate in absolute frames, which at this point + // would be shifted ahead by the start of the wave part. + // So if you begin recording a new wave part at bar 4, for example, then + // this line is seeking the record file to frame 288000 even before any audio is written! + // Therefore, just let the write do its thing and progress naturally, + // it should work OK since everything was OK before the libsndfile change... + // + // Tested: With the line, audio record looping sort of works, albiet with the start offset added to + // the wave file. And it overwrites existing audio. (Check transport window 'overwrite' function. Tie in somehow...) + // With the line, looping does NOT work with libsndfile from around early 2007 (my distro's version until now). + // Therefore it seems sometime between libsndfile ~2007 and today, libsndfile must have allowed + // "seek (behind) on write", as well as the "seek past end" change of 2008... + // + // Ok, so removing that line breaks *possible* record audio 'looping' functionality, revealed with + // later libsndfile. + // Try this... And while we're at it, honour the punchin/punchout, and loop functions ! + // + // If punchin is on, or we have looped at least once, use left marker as offset. + // Note that audio::startRecordPos is reset to (roughly) the left marker pos upon loop ! + // (Not any more! I changed Audio::Process) + // Since it is possible to start loop recording before the left marker (with punchin off), we must + // use startRecordPos or loopFrame or left marker, depending on punchin and whether we have looped yet. + unsigned fr; + if(song->punchin() && (audio->loopCount() == 0)) + fr = song->lPos().frame(); + else + if((audio->loopCount() > 0) && (audio->getStartRecordPos().frame() > audio->loopFrame())) + fr = audio->loopFrame(); + else + fr = audio->getStartRecordPos().frame(); + // Now seek and write. If we are looping and punchout is on, don't let punchout point interfere with looping point. + if( (pos >= fr) && (!song->punchout() || (!song->loop() && pos < song->rPos().frame())) ) + { + pos -= fr; + // Added by Tim. p3.3.8 + //int position = _recFile->seek(0, SEEK_CUR); + //printf("AudioTrack::record loopcnt:%d lframe:%d newpos:%d curpos:%d start:%d end:%d\n", audio->loopCount(), audio->loopFrame(), pos, position, audio->getStartRecordPos().frame(), audio->getEndRecordPos().frame()); + + _recFile->seek(pos, 0); + _recFile->write(_channels, buffer, segmentSize); + } + + } + else { + printf("AudioNode::record(): no recFile\n"); + } + } + } + +//--------------------------------------------------------- +// processInit +//--------------------------------------------------------- + +void AudioOutput::processInit(unsigned nframes) + { + _nframes = nframes; + if (!checkAudioDevice()) return; + for (int i = 0; i < channels(); ++i) { + if (jackPorts[i]) { + buffer[i] = audioDevice->getBuffer(jackPorts[i], nframes); + if (config.useDenormalBias) { + for (unsigned int j=0; j < nframes; j++) + buffer[i][j] += denormalBias; + } + } + else + printf("PANIC: processInit: no buffer from audio driver\n"); + } + } + +//--------------------------------------------------------- +// process +// synthesize "n" frames at buffer offset "offset" +// current frame position is "pos" +//--------------------------------------------------------- + +void AudioOutput::process(unsigned pos, unsigned offset, unsigned n) +{ + //Added by Tim. p3.3.16 + #ifdef NODE_DEBUG + printf("MusE: AudioOutput::process name:%s processed:%d\n", name().latin1(), processed()); + #endif + + for (int i = 0; i < _channels; ++i) { + buffer1[i] = buffer[i] + offset; + } + + // p3.3.38 + //copyData(pos, _channels, n, buffer1); + copyData(pos, _channels, -1, -1, n, buffer1); +} + +//--------------------------------------------------------- +// silence +//--------------------------------------------------------- + +void AudioOutput::silence(unsigned n) + { + processInit(n); + for (int i = 0; i < channels(); ++i) + if (config.useDenormalBias) { + for (unsigned int j=0; j < n; j++) + buffer[i][j] = denormalBias; + } else { + memset(buffer[i], 0, n * sizeof(float)); + } + } + +//--------------------------------------------------------- +// processWrite +//--------------------------------------------------------- + +void AudioOutput::processWrite() + { + if (audio->isRecording() && song->bounceOutput == this) { + if (audio->freewheel()) { + WaveTrack* track = song->bounceTrack; + if (track && track->recordFlag() && track->recFile()) + track->recFile()->write(_channels, buffer, _nframes); + if (recordFlag() && recFile()) + _recFile->write(_channels, buffer, _nframes); + } + else { + WaveTrack* track = song->bounceTrack; + if (track && track->recordFlag() && track->recFile()) + track->putFifo(_channels, _nframes, buffer); + if (recordFlag() && recFile()) + putFifo(_channels, _nframes, buffer); + } + } + // Changed by Tim. p3.3.18 + //if (audioClickFlag && song->click()) { + if (sendMetronome() && audioClickFlag && song->click()) { + + // Added by Tim. p3.3.18 + #ifdef METRONOME_DEBUG + printf("MusE: AudioOutput::processWrite Calling metronome->addData frame:%u channels:%d frames:%lu\n", audio->pos().frame(), _channels, _nframes); + #endif + + // p3.3.38 + //metronome->addData(audio->pos().frame(), _channels, _nframes, buffer); + metronome->addData(audio->pos().frame(), _channels, -1, -1, _nframes, buffer); + } + } +//--------------------------------------------------------- +// setName +//--------------------------------------------------------- + +void AudioOutput::setName(const QString& s) + { + _name = s; + if (!checkAudioDevice()) return; + for (int i = 0; i < channels(); ++i) { + char buffer[128]; + snprintf(buffer, 128, "%s-%d", _name.latin1(), i); + if (jackPorts[i]) { + audioDevice->setPortName(jackPorts[i], buffer); + } + else { + //jackPorts[i] = audioDevice->registerOutPort(buffer); + jackPorts[i] = audioDevice->registerOutPort(buffer, false); + } + } + } + +//--------------------------------------------------------- +// Fifo +//--------------------------------------------------------- + +Fifo::Fifo() + { + muse_atomic_init(&count); + //nbuffer = FIFO_BUFFER; + nbuffer = fifoLength; + 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) + { + // p3.3.45 + if(buffer[i]->buffer) + { + //printf("Fifo::~Fifo freeing buffer\n"); + free(buffer[i]->buffer); + } + + delete buffer[i]; + } + + delete[] buffer; + muse_atomic_destroy(&count); + } + +//--------------------------------------------------------- +// put +// return true if fifo full +//--------------------------------------------------------- + +bool Fifo::put(int segs, unsigned long samples, float** src, unsigned pos) + { + // Added by Tim. p3.3.17 + #ifdef FIFO_DEBUG + printf("FIFO::put segs:%d samples:%lu pos:%u\n", segs, samples, pos); + #endif + + if (muse_atomic_read(&count) == nbuffer) { + printf("FIFO %p overrun... %d\n", this, count.counter); + return true; + } + FifoBuffer* b = buffer[widx]; + int n = segs * samples; + if (b->maxSize < n) { + if (b->buffer) + { + // Changed by Tim. p3.3.15 + //delete[] b->buffer; + free(b->buffer); + // p3.3.45 + b->buffer = 0; + } + // Changed by Tim. p3.3.15 + //b->buffer = new float[n]; + posix_memalign((void**)&(b->buffer), 16, sizeof(float) * n); + // p3.3.45 + if(!b->buffer) + { + printf("Fifo::put could not allocate buffer segs:%d samples:%lu pos:%u\n", segs, samples, pos); + return true; + } + + b->maxSize = n; + } + // p3.3.45 + if(!b->buffer) + { + printf("Fifo::put no buffer! segs:%d samples:%lu pos:%u\n", segs, samples, pos); + return true; + } + + b->size = samples; + b->segs = segs; + b->pos = pos; + for (int i = 0; i < segs; ++i) + //memcpy(b->buffer + i * samples, src[i], samples * sizeof(float)); + AL::dsp->cpy(b->buffer + i * samples, src[i], samples); + add(); + return false; + } + +//--------------------------------------------------------- +// get +// return true if fifo empty +//--------------------------------------------------------- + +bool Fifo::get(int segs, unsigned long samples, float** dst, unsigned* pos) + { + // Added by Tim. p3.3.17 + #ifdef FIFO_DEBUG + printf("FIFO::get segs:%d samples:%lu\n", segs, samples); + #endif + + if (muse_atomic_read(&count) == 0) { + printf("FIFO %p underrun... %d\n", this,count.counter); //by willyfoobar: added count to output //see Fifo::put() + return true; + } + FifoBuffer* b = buffer[ridx]; + // p3.3.45 + if(!b->buffer) + { + printf("Fifo::get no buffer! segs:%d samples:%lu b->pos:%u\n", segs, samples, b->pos); + return true; + } + + if (pos) + *pos = b->pos; + + for (int i = 0; i < segs; ++i) + dst[i] = b->buffer + samples * (i % b->segs); + remove(); + return false; + } + +int Fifo::getCount() + { + return muse_atomic_read(&count); + } +//--------------------------------------------------------- +// remove +//--------------------------------------------------------- + +void Fifo::remove() + { + ridx = (ridx + 1) % nbuffer; + muse_atomic_dec(&count); + } + +//--------------------------------------------------------- +// getWriteBuffer +//--------------------------------------------------------- + +bool Fifo::getWriteBuffer(int segs, unsigned long samples, float** buf, unsigned pos) + { + // Added by Tim. p3.3.17 + #ifdef FIFO_DEBUG + printf("Fifo::getWriteBuffer segs:%d samples:%lu pos:%u\n", segs, samples, pos); + #endif + + if (muse_atomic_read(&count) == nbuffer) + return true; + FifoBuffer* b = buffer[widx]; + int n = segs * samples; + if (b->maxSize < n) { + if (b->buffer) + { + // Changed by Tim. p3.3.15 + //delete[] b->buffer; + free(b->buffer); + // p3.3.45 + b->buffer = 0; + } + + // Changed by Tim. p3.3.15 + //b->buffer = new float[n]; + posix_memalign((void**)&(b->buffer), 16, sizeof(float) * n); + // p3.3.45 + if(!b->buffer) + { + printf("Fifo::getWriteBuffer could not allocate buffer segs:%d samples:%lu pos:%u\n", segs, samples, pos); + return true; + } + + b->maxSize = n; + } + + // p3.3.45 + if(!b->buffer) + { + printf("Fifo::getWriteBuffer no buffer! segs:%d samples:%lu pos:%u\n", segs, samples, pos); + return true; + } + + for (int i = 0; i < segs; ++i) + buf[i] = b->buffer + i * samples; + + b->size = samples; + b->segs = segs; + b->pos = pos; + return false; + } + +//--------------------------------------------------------- +// add +//--------------------------------------------------------- + +void Fifo::add() + { + widx = (widx + 1) % nbuffer; + muse_atomic_inc(&count); + } + +//--------------------------------------------------------- +// setChannels +//--------------------------------------------------------- + +void AudioTrack::setChannels(int n) + { + Track::setChannels(n); + if (_efxPipe) + _efxPipe->setChannels(n); + } + +//--------------------------------------------------------- +// setTotalOutChannels +//--------------------------------------------------------- + +void AudioTrack::setTotalOutChannels(int num) +{ + if(num == _totalOutChannels) + return; + + int chans = _totalOutChannels; + // Number of allocated buffers is always MAX_CHANNELS or more, even if _totalOutChannels is less. + if(chans < MAX_CHANNELS) + chans = MAX_CHANNELS; + for(int i = 0; i < chans; ++i) + { + if(outBuffers[i]) + free(outBuffers[i]); + } + delete[] outBuffers; + + _totalOutChannels = num; + chans = num; + // Number of allocated buffers is always MAX_CHANNELS or more, even if _totalOutChannels is less. + if(chans < MAX_CHANNELS) + chans = MAX_CHANNELS; + + outBuffers = new float*[chans]; + for (int i = 0; i < chans; ++i) + posix_memalign((void**)&outBuffers[i], 16, sizeof(float) * segmentSize); + + chans = num; + // Limit the actual track (meters, copying etc, all 'normal' operation) to two-channel stereo. + if(chans > MAX_CHANNELS) + chans = MAX_CHANNELS; + + setChannels(chans); +} + +//--------------------------------------------------------- +// setTotalInChannels +//--------------------------------------------------------- + +void AudioTrack::setTotalInChannels(int num) +{ + if(num == _totalInChannels) + return; + + _totalInChannels = num; +} + diff --git a/muse2/muse/node.h b/muse2/muse/node.h new file mode 100644 index 00000000..eaeacfbd --- /dev/null +++ b/muse2/muse/node.h @@ -0,0 +1,132 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: node.h,v 1.8.2.2 2006/04/13 19:09:48 spamatica Exp $ +// +// (C) Copyright 2001 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __AUDIONODE_H__ +#define __AUDIONODE_H__ + +#include +#include + +#ifndef i386 +#include +typedef struct { pthread_mutex_t lock; int counter; } muse_atomic_t; +#else +typedef struct { int counter; } muse_atomic_t; +#endif + +static inline int muse_atomic_read(muse_atomic_t *v) { +#ifndef i386 + int ret; + pthread_mutex_lock(&v->lock); + ret = v->counter; + pthread_mutex_unlock(&v->lock); + return ret; +#else + return v->counter; +#endif +} + +static inline void muse_atomic_set(muse_atomic_t *v, int i) { +#ifndef i386 + pthread_mutex_lock(&v->lock); + v->counter = i; + pthread_mutex_unlock(&v->lock); +#else + v->counter = i; +#endif +} +static inline void muse_atomic_inc(muse_atomic_t *v) { +#ifndef i386 + pthread_mutex_lock(&v->lock); + v->counter++; + pthread_mutex_unlock(&v->lock); +#else + __asm__ __volatile__( + "lock ; " "incl %0" + :"=m" (v->counter) + :"m" (v->counter)); +#endif +} +static inline void muse_atomic_dec(muse_atomic_t *v) { +#ifndef i386 + pthread_mutex_lock(&v->lock); + v->counter--; + pthread_mutex_unlock(&v->lock); +#else + __asm__ __volatile__( + "lock ; " "decl %0" + :"=m" (v->counter) + :"m" (v->counter)); +#endif +} +#ifndef i386 +static inline void muse_atomic_init(muse_atomic_t *v) { + pthread_mutex_init(&v->lock, NULL); + } +#else +static inline void muse_atomic_init(muse_atomic_t*) {} +#endif + +#ifndef i386 +static inline void muse_atomic_destroy(muse_atomic_t *v) { + pthread_mutex_destroy(&v->lock); + } +#else +static inline void muse_atomic_destroy(muse_atomic_t*) {} +#endif + +class Xml; +class Pipeline; +class SndFile; + +// superceeded by dynamic allocation of fifoLength +//const int FIFO_BUFFER = 4096;//64; + +//--------------------------------------------------------- +// Fifo +//--------------------------------------------------------- + +struct FifoBuffer { + float* buffer; + int size; + int maxSize; + unsigned pos; + int segs; + + FifoBuffer() { + buffer = 0; + size = 0; + maxSize = 0; + } + }; + +class Fifo { + int nbuffer; + int ridx; // read index; only touched by reader + int widx; // write index; only touched by writer + muse_atomic_t count; // buffer count; writer increments, reader decrements + FifoBuffer** buffer; + + public: + Fifo(); + ~Fifo(); + void clear() { + ridx = 0; + widx = 0; + muse_atomic_set(&count, 0); + } + bool put(int, unsigned long, float** buffer, unsigned pos); + bool getWriteBuffer(int, unsigned long, float** buffer, unsigned pos); + void add(); + bool get(int, unsigned long, float** buffer, unsigned* pos); + void remove(); + int getCount(); + }; + +#endif + diff --git a/muse2/muse/osc.cpp b/muse2/muse/osc.cpp new file mode 100644 index 00000000..74b703c3 --- /dev/null +++ b/muse2/muse/osc.cpp @@ -0,0 +1,1386 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id: osc.cpp,v 1.0.0.0 2010/04/22 03:39:58 terminator356 Exp $ +// +// Copyright (C) 1999-2010 by Werner Schweer and others +// OSC module added by Tim. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the 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 OSC_SUPPORT + +// Turn on debugging messages +//#define OSC_DEBUG + +#include +//#include +//#include +#include +#include +#include +//#include +//#include +//#include +#include +#include +#include +#include +//#include +#include +#include +#include + +#ifdef DSSI_SUPPORT +#include "dssihost.h" +#endif + +#include "stringparam.h" +#include "plugin.h" +#include "track.h" +#include "song.h" +#include "synth.h" +//#include "audio.h" +//#include "jackaudio.h" +//#include "midi.h" +//#include "midiport.h" +//#include "al/al.h" +//#include "al/xml.h" +//#include "xml.h" +//#include "midictrl.h" +//#include "ladspaplugin.h" + +#include "app.h" +#include "globals.h" +#include "globaldefs.h" +//#include "al/dsp.h" + +static lo_server_thread serverThread = 0; +///static char osc_path_tmp[1024]; +static char* url = 0; +static bool oscServerRunning = false; + +//--------------------------------------------------------- +// 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; + } + +//--------------------------------------------------------- +// oscMessageHandler +//--------------------------------------------------------- + +int oscMessageHandler(const char* path, const char* types, lo_arg** argv, + int argc, void* data, void* user_data) +{ + const char* p = path; + + #ifdef OSC_DEBUG + if(argc) + { + printf("oscMessageHandler: path:%s argc:%d\n", path, argc); + for(int i = 0; i < argc; ++i) + { + printf(" "); + lo_arg_pp((lo_type)types[i], argv[i]); + } + printf("\n"); + } + else + { + printf("%s\n", path); + printf("oscMessageHandler: no args, path:%s\n", path); + } + #endif + + bool isSynth = false; + + #ifdef DSSI_SUPPORT + if(strncmp(p, "/dssi_synth/", 12) == 0) + { + isSynth = true; + p += 12; + } + else + #endif + if(strncmp(p, "/ladspa_efx/", 12) == 0) + { + p += 12; + } + else + return oscDebugHandler(path, types, argv, argc, data, user_data); + + TrackList* tl = song->tracks(); + + + #ifdef OSC_DEBUG + if(isSynth) + fprintf(stderr, "oscMessageHandler: got message for dssi synth...\n"); + else + fprintf(stderr, "oscMessageHandler: got message for ladspa effect...\n"); + #endif + + // FIXME: Slowdowns: Shouldn't need these retries but they are needed, only upon creation of the synth. + // Need to fix the real source of the problem! The instance is taking too long to appear after creation. + // + ///for(int retry = 0; retry < 5000; ++retry) + { + ///#ifdef OSC_DEBUG + ///fprintf(stderr, "oscMessageHandler: search retry number:%d ...\n", retry); + ///#endif + + //if(_uiOscPath) + // break; + + #ifdef DSSI_SUPPORT + if(isSynth) + { + // Message is meant for a dssi synth. Check dssi synth instances... + SynthIList* sl = song->syntis(); + for(iSynthI si = sl->begin(); si != sl->end(); ++si) + { + SynthI* synti = *si; + + #ifdef OSC_DEBUG + fprintf(stderr, "oscMessageHandler: searching for:%s checking synth instance:%s\n", p, synti->name().latin1()); + #endif + + const char* sub = strstr(p, synti->name().latin1()); + if(sub == NULL) + continue; + + //DssiSynthIF* instance = (DssiSynthIF*)synti->sif(); + DssiSynthIF* instance = dynamic_cast(synti->sif()); + if(!instance) + break; + + p = sub + strlen(synti->name().latin1()); + + if (*p != '/' || *(p + 1) == 0) + { + fprintf(stderr, "oscMessageHandler error: synth: end of path or no /\n"); + return oscDebugHandler(path, types, argv, argc, data, user_data); + } + + ++p; + + #ifdef OSC_DEBUG + fprintf(stderr, "oscMessageHandler: synth track:%s method:%s\n", synti->name().latin1(), p); + #endif + + OscIF& oscif = instance->oscIF(); + + if (!strcmp(p, "configure") && argc == 2 && !strcmp(types, "ss")) + return oscif.oscConfigure(argv); + else if (!strcmp(p, "control") && argc == 2 && !strcmp(types, "if")) + return oscif.oscControl(argv); + else if (!strcmp(p, "midi") && argc == 1 && !strcmp(types, "m")) + return oscif.oscMidi(argv); + else if (!strcmp(p, "program") && argc == 2 && !strcmp(types, "ii")) + return oscif.oscProgram(argv); + else if (!strcmp(p, "update") && argc == 1 && !strcmp(types, "s")) + return oscif.oscUpdate(argv); + else if (!strcmp(p, "exiting") && argc == 0) + return oscif.oscExiting(argv); + return oscDebugHandler(path, types, argv, argc, data, user_data); + } + } + else + #endif //DSSI_SUPPORT + // Message is meant for a ladspa effect. Check all ladspa effect instances... + for(ciTrack it = tl->begin(); it != tl->end(); ++it) + { + if((*it)->isMidiTrack()) + continue; + + Pipeline* efxPipe = ((AudioTrack*)*it)->efxPipe(); + if(efxPipe) + { + for(ciPluginI ip = efxPipe->begin(); ip != efxPipe->end(); ++ip) + { + PluginI* instance = *ip; + if(!instance) + continue; + + #ifdef OSC_DEBUG + fprintf(stderr, "oscMessageHandler: searching for:%s checking effect instance:%s label:%s lib:%s\n", + p, instance->name().latin1(), instance->label().latin1(), instance->lib().latin1()); + #endif + + //const char* sub = strstr(p, instance->name().latin1()); + const char* sub = strstr(p, instance->label().latin1()); + if(sub == NULL) + continue; + + Plugin* plugin = instance->plugin(); + if(!plugin) + break; + + //p = sub + strlen(instance->name().latin1()); + p = sub + strlen(instance->label().latin1()); + + if (*p != '/' || *(p + 1) == 0) + { + fprintf(stderr, "oscMessageHandler: error: effect: end of path or no /\n"); + return oscDebugHandler(path, types, argv, argc, data, user_data); + } + + ++p; + + #ifdef OSC_DEBUG + //fprintf(stderr, "oscMessageHandler: effect:%s method:%s\n", instance->name().latin1(), p); + fprintf(stderr, "oscMessageHandler: effect:%s method:%s\n", instance->label().latin1(), p); + #endif + + OscIF& oscif = instance->oscIF(); + + if (!strcmp(p, "configure") && argc == 2 && !strcmp(types, "ss")) + return oscif.oscConfigure(argv); + else if (!strcmp(p, "control") && argc == 2 && !strcmp(types, "if")) + return oscif.oscControl(argv); + else if (!strcmp(p, "midi") && argc == 1 && !strcmp(types, "m")) + return oscif.oscMidi(argv); + else if (!strcmp(p, "program") && argc == 2 && !strcmp(types, "ii")) + return oscif.oscProgram(argv); + else if (!strcmp(p, "update") && argc == 1 && !strcmp(types, "s")) + return oscif.oscUpdate(argv); + else if (!strcmp(p, "exiting") && argc == 0) + return oscif.oscExiting(argv); + return oscDebugHandler(path, types, argv, argc, data, user_data); + } + } + } + + ///usleep(1000); + } + + fprintf(stderr, "oscMessageHandler: timeout error: no synth or effect instance found for given path\n"); + return oscDebugHandler(path, types, argv, argc, data, user_data); +} + + +//--------------------------------------------------------- +// initOSC +//--------------------------------------------------------- + +void initOSC() +{ + if(url) + free(url); + url = 0; + + // Create OSC thread + // Only if not created yet. + if(!serverThread) + { + serverThread = lo_server_thread_new(0, oscError); + if(!serverThread) + { + printf("initOSC() Failed to create OSC server!\n"); + return; + } + } + + ///snprintf(osc_path_tmp, 31, "/dssi"); + // Test: Clear the temp path: + //snprintf(osc_path_tmp, 31, ""); + + ///char* tmp = lo_server_thread_get_url(serverThread); + + url = lo_server_thread_get_url(serverThread); + if(!url) + { + lo_server_thread_free(serverThread); + printf("initOSC() Failed to get OSC server thread url !\n"); + return; + } + + ///url = (char *)malloc(strlen(tmp) + strlen(osc_path_tmp)); + //url = (char *)malloc(strlen(tmp)); + + ///sprintf(url, "%s%s", tmp, osc_path_tmp + 1); + //sprintf(url, "%s", tmp, osc_path_tmp + 1); + + ///free(tmp); + + lo_method meth = 0; + meth = lo_server_thread_add_method(serverThread, 0, 0, oscMessageHandler, 0); + if(!meth) + { + printf("initOSC() Failed to add oscMessageHandler method to OSC server!\n"); + // Does not return a value. + lo_server_thread_free(serverThread); + serverThread = 0; + free(url); + url = 0; + return; + } + + // Does not return a value. + lo_server_thread_start(serverThread); +} + +//--------------------------------------------------------- +// exitOSC +//--------------------------------------------------------- + +void exitOSC() +{ + oscServerRunning = false; + if(serverThread) + { + // Does not return a value. + lo_server_thread_stop(serverThread); + lo_server_thread_free(serverThread); + } + serverThread = 0; +} + +//--------------------------------------------------------- +// startOSC +//--------------------------------------------------------- + +void startOSC() +{ + if(serverThread) + // Does not return a value. + lo_server_thread_start(serverThread); + oscServerRunning = true; +} + +//--------------------------------------------------------- +// stopOSC +//--------------------------------------------------------- + +void stopOSC() +{ + if(serverThread) + // Does not return a value. + lo_server_thread_stop(serverThread); + oscServerRunning = false; +} + + + +//--------------------------------------------------------- +// OscControlFifo +// put +// return true on fifo overflow +//--------------------------------------------------------- + +bool OscControlFifo::put(const OscControlValue& event) + { + if (size < OSC_FIFO_SIZE) { + fifo[wIndex] = event; + wIndex = (wIndex + 1) % OSC_FIFO_SIZE; + // q_atomic_increment(&size); + ++size; + return false; + } + return true; + } + +//--------------------------------------------------------- +// get +//--------------------------------------------------------- + +OscControlValue OscControlFifo::get() + { + OscControlValue event(fifo[rIndex]); + rIndex = (rIndex + 1) % OSC_FIFO_SIZE; + // q_atomic_decrement(&size); + --size; + return event; + } + +//--------------------------------------------------------- +// peek +//--------------------------------------------------------- + +const OscControlValue& OscControlFifo::peek(int n) + { + int idx = (rIndex + n) % OSC_FIFO_SIZE; + return fifo[idx]; + } + +//--------------------------------------------------------- +// remove +//--------------------------------------------------------- + +void OscControlFifo::remove() + { + rIndex = (rIndex + 1) % OSC_FIFO_SIZE; + // q_atomic_decrement(&size); + --size; + } + + + +//--------------------------------------------------------- +// OscIF +// Open Sound Control Interface +//--------------------------------------------------------- + +OscIF::OscIF() +{ + //_oscPluginI = 0; + + //#ifdef DSSI_SUPPORT + //_oscSynthIF = 0; + //#endif + + _uiOscTarget = 0; + _uiOscSampleRatePath = 0; + _uiOscShowPath = 0; + _uiOscControlPath = 0; + _uiOscConfigurePath = 0; + _uiOscProgramPath = 0; + _uiOscPath = 0; + //guiPid = -1; + _oscGuiQProc = 0; + _oscGuiVisible = false; + + _oscControlFifos = 0; +} + +OscIF::~OscIF() +{ + //if (guiPid != -1) + // kill(guiPid, SIGHUP); + if(_oscGuiQProc) + { + if(_oscGuiQProc->isRunning()) + { + #ifdef OSC_DEBUG + printf("OscIF::~OscIF terminating _oscGuiQProc\n"); + #endif + + //_oscGuiQProc->kill(); + // "This tries to terminate the process the nice way. If the process is still running after 5 seconds, + // it terminates the process the hard way. The timeout should be chosen depending on the time the + // process needs to do all its cleanup: use a higher value if the process is likely to do a lot of + // computation or I/O on cleanup." + _oscGuiQProc->tryTerminate(); + QTimer::singleShot( 5000, _oscGuiQProc, SLOT( kill() ) ); + } + //delete _oscGuiQProc; + } + + if(_uiOscTarget) + lo_address_free(_uiOscTarget); + if(_uiOscSampleRatePath) + free(_uiOscSampleRatePath); + if(_uiOscShowPath) + free(_uiOscShowPath); + if(_uiOscControlPath) + free(_uiOscControlPath); + if(_uiOscConfigurePath) + free(_uiOscConfigurePath); + if(_uiOscProgramPath) + free(_uiOscProgramPath); + if(_uiOscPath) + free(_uiOscPath); + + if(_oscControlFifos) + delete[] _oscControlFifos; +} + +//--------------------------------------------------------- +// oscFifo +//--------------------------------------------------------- + +OscControlFifo* OscIF::oscFifo(unsigned long i) const +{ + if(!_oscControlFifos) + return 0; + return &_oscControlFifos[i]; +} + +//--------------------------------------------------------- +// oscUpdate +//--------------------------------------------------------- + +int OscIF::oscUpdate(lo_arg **argv) +{ + const char *purl = (char *)&argv[0]->s; + + if(_uiOscTarget) + lo_address_free(_uiOscTarget); + _uiOscTarget = 0; + char* host = lo_url_get_hostname(purl); + char* port = lo_url_get_port(purl); + _uiOscTarget = lo_address_new(host, port); + free(host); + free(port); + if(!_uiOscTarget) + return 0; + + if (_uiOscPath) + free(_uiOscPath); + _uiOscPath = lo_url_get_path(purl); + int pl = strlen(_uiOscPath); + + if(_uiOscSampleRatePath) + free(_uiOscSampleRatePath); + _uiOscSampleRatePath = (char *)malloc(pl + 14); + sprintf(_uiOscSampleRatePath, "%s/sample-rate", _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. + */ + + #ifdef OSC_DEBUG + printf("OscIF::oscUpdate: _uiOscTarget:%p\n", _uiOscTarget); + if(url) + printf(" server url:%s\n", url); + else + printf(" no server url!\n"); + printf(" update path:%s\n", purl); + printf(" _uiOscPath:%s\n", _uiOscPath); + printf(" _uiOscSampleRatePath:%s\n", _uiOscSampleRatePath); + printf(" _uiOscConfigurePath:%s\n", _uiOscConfigurePath); + printf(" _uiOscProgramPath:%s\n", _uiOscProgramPath); + printf(" _uiOscControlPath:%s\n",_uiOscControlPath); + printf(" _uiOscShowPath:%s\n", _uiOscShowPath); + printf(" museProject:%s\n", museProject.latin1()); + #endif + + // Send sample rate. + lo_send(_uiOscTarget, _uiOscSampleRatePath, "i", sampleRate); + + // Send project directory. + //lo_send(_uiOscTarget, _uiOscConfigurePath, "ss", + // DSSI_PROJECT_DIRECTORY_KEY, museProject.latin1()); // song->projectPath() + + // Done in sub-classes. + /* + #ifdef DSSI_SUPPORT + //lo_send(_uiOscTarget, _uiOscConfigurePath, "ss", + //DSSI_PROJECT_DIRECTORY_KEY, song->projectPath().toAscii().data()); + lo_send(_uiOscTarget, _uiOscConfigurePath, "ss", + DSSI_PROJECT_DIRECTORY_KEY, museProject.latin1()); + + if(_oscSynthIF) + { + for(ciStringParamMap r = _oscSynthIF->synthI->_stringParamMap.begin(); r != synti->_stringParamMap.end(); ++r) + { + rv = 0; + rv = dssi->configure(handle, r->first.c_str(), r->second.c_str()); + if(rv) + { + fprintf(stderr, "MusE: Warning: plugin config key: %s value: %s \"%s\"\n", r->first.c_str(), r->second.c_str(), rv); + free(rv); + } + } + } + #endif + */ + + /* + char uiOscGuiPath[strlen(_uiOscPath)+6]; + sprintf(uiOscGuiPath, "%s/%s", _uiOscPath, "show"); + + #ifdef OSC_DEBUG + printf("OscIF::oscUpdate Sending show uiOscGuiPath:%s\n", uiOscGuiPath); + #endif + + lo_send(_uiOscTarget, uiOscGuiPath, ""); + + sprintf(uiOscGuiPath, "%s/%s", _uiOscPath, "hide"); + + #ifdef OSC_DEBUG + printf("OscIF::oscUpdate Sending hide uiOscGuiPath:%s\n", uiOscGuiPath); + #endif + + lo_send(_uiOscTarget, uiOscGuiPath, ""); + */ + +#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; +} + +//--------------------------------------------------------- +// oscExiting +//--------------------------------------------------------- + +int OscIF::oscExiting(lo_arg**) +{ + // The gui is gone now, right? + _oscGuiVisible = false; + + if(_oscGuiQProc) + { + if(_oscGuiQProc->isRunning()) + { + #ifdef OSC_DEBUG + printf("OscIF::oscExiting terminating _oscGuiQProc\n"); + #endif + + //_oscGuiQProc->kill(); + // "This tries to terminate the process the nice way. If the process is still running after 5 seconds, + // it terminates the process the hard way. The timeout should be chosen depending on the time the + // process needs to do all its cleanup: use a higher value if the process is likely to do a lot of + // computation or I/O on cleanup." + _oscGuiQProc->tryTerminate(); + QTimer::singleShot( 5000, _oscGuiQProc, SLOT( kill() ) ); + } + //delete _oscGuiQProc; + } + + if(_uiOscTarget) + lo_address_free(_uiOscTarget); + _uiOscTarget = 0; + if(_uiOscSampleRatePath) + free(_uiOscSampleRatePath); + _uiOscSampleRatePath = 0; + if(_uiOscShowPath) + free(_uiOscShowPath); + _uiOscShowPath = 0; + if(_uiOscControlPath) + free(_uiOscControlPath); + _uiOscControlPath = 0; + if(_uiOscConfigurePath) + free(_uiOscConfigurePath); + _uiOscConfigurePath = 0; + if(_uiOscProgramPath) + free(_uiOscProgramPath); + _uiOscProgramPath = 0; + if(_uiOscPath) + free(_uiOscPath); + _uiOscPath = 0; + + //if(_oscControlFifos) + // delete[] _oscControlFifos; + + //const DSSI_Descriptor* dssi = synth->dssi; + //const LADSPA_Descriptor* ld = dssi->LADSPA_Plugin; + //if(ld->deactivate) + // ld->deactivate(handle); + + /* + if (_uiOscPath == 0) { + printf("OscIF::oscExiting(): no _uiOscPath\n"); + return 1; + } + char uiOscGuiPath[strlen(_uiOscPath)+6]; + + sprintf(uiOscGuiPath, "%s/%s", _uiOscPath, "quit"); + #ifdef OSC_DEBUG + printf("OscIF::oscExiting(): sending quit to uiOscGuiPath:%s\n", uiOscGuiPath); + #endif + + lo_send(_uiOscTarget, uiOscGuiPath, ""); + */ + +#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; +} + +//--------------------------------------------------------- +// oscSendProgram +//--------------------------------------------------------- + +void OscIF::oscSendProgram(unsigned long prog, unsigned long bank) +{ + if(_uiOscTarget && _uiOscProgramPath) + lo_send(_uiOscTarget, _uiOscProgramPath, "ii", bank, prog); +} + +//--------------------------------------------------------- +// oscSendControl +//--------------------------------------------------------- + +void OscIF::oscSendControl(unsigned long dssiPort, float v) +{ + if(_uiOscTarget && _uiOscControlPath) + lo_send(_uiOscTarget, _uiOscControlPath, "if", dssiPort, v); +} + +//--------------------------------------------------------- +// oscSendConfigure +//--------------------------------------------------------- + +void OscIF::oscSendConfigure(const char *key, const char *val) +{ + if(_uiOscTarget && _uiOscConfigurePath) + lo_send(_uiOscTarget, _uiOscConfigurePath, "ss", key, val); +} + +//--------------------------------------------------------- +// oscInitGui +//--------------------------------------------------------- + +//bool OscIF::oscInitGui() +bool OscIF::oscInitGui(const QString& typ, const QString& baseName, const QString& name, + const QString& label, const QString& filePath, const QString& dirPath) +{ + // Are we already running? We don't want to allow another process do we... + if((_oscGuiQProc != 0) && (_oscGuiQProc->isRunning())) + return true; + + if(!url) + { + fprintf(stderr, "OscIF::oscInitGui no server url!\n"); + return false; + } + + // + // start gui + // + //static char oscUrl[1024]; + //char oscUrl[1024]; + QString oscUrl; + + /* + QString typ; + QString baseName; + QString name; + QString label; + QString filePath; + QString dirPath; + #ifdef DSSI_SUPPORT + if(_oscSynthIF) + { + //snprintf(oscUrl, 1024, "%s/%s", url, synti->name().toAscii().data()); + //snprintf(oscUrl, 1024, "%s/%s", url, synti->name().ascii()); + //snprintf(oscUrl, 1024, "%s/%s/%s", url, synth->info.baseName().ascii(), synti->name().ascii()); + typ = QT_TR_NOOP("dssi_synth"); + baseName = _oscSynthIF->dssiSynth()->baseName(false); + label = _oscSynthIF->dssiSynthI()->name(); + name = _oscSynthIF->dssiSynth()->name(); + + dirPath = _oscSynthIF->dssiSynth()->dirPath(false); + filePath = _oscSynthIF->dssiSynth()->filePath(); + } + else + #endif + if(_oscPluginI) + { + typ = QT_TR_NOOP("ladspa_efx"); + baseName = _oscPluginI->plugin()->lib(false); + //name = _oscPluginI->name(); + name = _oscPluginI->plugin()->label(); + label = _oscPluginI->label(); + + dirPath = _oscPluginI->plugin()->dirPath(false); + //dirPath.replace("ladspa", "dssi", true); + + filePath = _oscPluginI->plugin()->filePath(); + //filePath.replace("ladspa", "dssi", true); + } + else + return false; + */ + + //snprintf(oscUrl, 1024, "%s/%s/%s", url, baseName.ascii(), name.ascii()); + //snprintf(oscUrl, 1024, "%s%s/%s/%s", url, typ.latin1(), baseName.latin1(), name.latin1()); + //oscUrl = QString("%1%2/%3/%4").arg(QString(QT_TR_NOOP(url))).arg(typ).arg(baseName).arg(name); + oscUrl = QString("%1%2/%3/%4").arg(QString(QT_TR_NOOP(url))).arg(typ).arg(baseName).arg(label); + + //QString guiPath(info.path() + "/" + info.baseName()); + //QString guiPath(synth->info.dirPath() + "/" + synth->info.baseName()); + QString guiPath(dirPath + "/" + baseName); + + #ifdef OSC_DEBUG + fprintf(stderr, "OscIF::oscInitGui guiPath:%s\n", guiPath.latin1()); + #endif + + QDir guiDir(guiPath, "*", QDir::Unsorted, QDir::Files); + if (guiDir.exists()) + { + //const QFileInfoList list = guiDir.entryInfoList(); + QStringList list = guiDir.entryList(); + + //for (int i = 0; i < list.size(); ++i) { + for (unsigned int i = 0; i < list.count(); ++i) + { + + //QFileInfo fi = list.at(i); + QFileInfo fi(guiPath + QString("/") + list[i]); + + QString gui(fi.filePath()); + if (gui.contains('_') == 0) + continue; + struct stat buf; + + //if (stat(gui.toAscii().data(), &buf)) { + if (stat(gui.latin1(), &buf)) { + + perror("stat failed"); + continue; + } + + #ifdef OSC_DEBUG + fprintf(stderr, "OscIF::oscInitGui %s %s %s %s\n", + //fi.filePath().toAscii().data(), + //fi.fileName().toAscii().data(), + fi.filePath().latin1(), + //fi.fileName().ascii(), + + oscUrl.latin1(), + + //synth->info.filePath().ascii(), + filePath.latin1(), + + //name().toAscii().data(), + //synth->name().ascii()); + name.latin1()); + #endif + + if ((S_ISREG(buf.st_mode) || S_ISLNK(buf.st_mode)) && + (buf.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) + { + // Changed by T356. + // fork + execlp were causing the processes to remain after closing gui, requiring manual kill. + // Changed to QProcess, works OK now. + //if((guiPid = fork()) == 0) + { + // No QProcess created yet? Do it now. Only once per SynthIF instance. Exists until parent destroyed. + if(_oscGuiQProc == 0) + _oscGuiQProc = new Q3Process(muse); + + // Don't forget this, he he... + _oscGuiQProc->clearArguments(); + + _oscGuiQProc->addArgument(fi.filePath()); + //_oscGuiQProc->addArgument(fi.fileName()); // No conventional 'Arg0' here. + //_oscGuiQProc->addArgument(QString(oscUrl)); + _oscGuiQProc->addArgument(oscUrl); + //_oscGuiQProc->addArgument(synth->info.filePath()); + _oscGuiQProc->addArgument(filePath); + //_oscGuiQProc->addArgument(synth->name()); + _oscGuiQProc->addArgument(name); + _oscGuiQProc->addArgument(QString("channel-1")); + + #ifdef OSC_DEBUG + fprintf(stderr, "OscIF::oscInitGui starting QProcess\n"); + #endif + + if(_oscGuiQProc->start() == TRUE) + { + #ifdef OSC_DEBUG + fprintf(stderr, "OscIF::oscInitGui started QProcess\n"); + #endif + + //guiPid = _oscGuiQProc->processIdentifier(); + } + else + { + + /* + execlp( + //fi.filePath().toAscii().data(), + //fi.fileName().toAscii().data(), + fi.filePath().ascii(), + fi.fileName().ascii(), + + oscUrl, + + //info.filePath().toAscii().data(), + //name().toAscii().data(), + synth->info.filePath().ascii(), + synth->name().ascii(), + + "channel 1", (void*)0); + */ + + fprintf(stderr, "exec %s %s %s %s failed: %s\n", + //fi.filePath().toAscii().data(), + //fi.fileName().toAscii().data(), + fi.filePath().latin1(), + fi.fileName().latin1(), + + oscUrl.latin1(), + + //name().toAscii().data(), + //synth->name().ascii(), + name.latin1(), + + strerror(errno)); + + // It's Ok, Keep going. So nothing happens. So what. The timeout in showGui will just leave. + // Maybe it's a 'busy' issue somewhere - allow to try again later + save work now. + //exit(1); + + } + + #ifdef OSC_DEBUG + fprintf(stderr, "OscIF::oscInitGui after QProcess\n"); + #endif + } + } + } + //synth->_hasGui = true; + } + else { + printf("OscIF::oscInitGui %s: no dir for gui found: %s\n", + //name().toAscii().data(), guiPath.toAscii().data()); + //synth->name().ascii(), guiPath.ascii()); + name.latin1(), guiPath.latin1()); + + //synth->_hasGui = false; + } + + return true; +} + + +//--------------------------------------------------------- +// oscShowGui +//--------------------------------------------------------- + +void OscIF::oscShowGui(bool v) +{ + #ifdef OSC_DEBUG + printf("OscIF::oscShowGui(): v:%d visible:%d\n", v, oscGuiVisible()); + #endif + + if (v == oscGuiVisible()) + return; + + //if(guiPid == -1) + if((_oscGuiQProc == 0) || (!_oscGuiQProc->isRunning())) + { + // We need an indicator that update was called - update must have been called to get new path etc... + // If the process is not running this path is invalid, right? + if(_uiOscPath) + free(_uiOscPath); + _uiOscPath = 0; + + #ifdef OSC_DEBUG + printf("OscIF::oscShowGui(): No QProcess or process not running. Starting gui...\n"); + #endif + + if(!oscInitGui()) + { + printf("OscIF::oscShowGui(): failed to initialize gui on oscInitGui()\n"); + return; + } + } + + //for (int i = 0; i < 5; ++i) { + for (int i = 0; i < 10; ++i) { // Give it a wee bit more time? + if (_uiOscPath) + break; + sleep(1); + } + if (_uiOscPath == 0) { + printf("OscIF::oscShowGui(): no _uiOscPath. Error: Timeout - synth gui did not start within 10 seconds.\n"); + return; + } + + char uiOscGuiPath[strlen(_uiOscPath)+6]; + sprintf(uiOscGuiPath, "%s/%s", _uiOscPath, v ? "show" : "hide"); + + #ifdef OSC_DEBUG + printf("OscIF::oscShowGui(): Sending show/hide uiOscGuiPath:%s\n", uiOscGuiPath); + #endif + + lo_send(_uiOscTarget, uiOscGuiPath, ""); + _oscGuiVisible = v; +} + +//--------------------------------------------------------- +// oscGuiVisible +//--------------------------------------------------------- + +bool OscIF::oscGuiVisible() const +{ + return _oscGuiVisible; +} + +#ifdef DSSI_SUPPORT + +//--------------------------------------------------------- +// OscDssiIF:: +// oscSetSynthIF +//--------------------------------------------------------- + +//void OscIF::oscSetSynthIF(DssiSynthIF* s) +void OscDssiIF::oscSetSynthIF(DssiSynthIF* s) +{ + _oscSynthIF = s; + if(_oscControlFifos) + delete[] _oscControlFifos; + _oscControlFifos = 0; + + if(_oscSynthIF && _oscSynthIF->dssiSynth()) + { + unsigned long ports = _oscSynthIF->dssiSynth()->inControls(); + _oscControlFifos = new OscControlFifo[ports]; + } +} + +//--------------------------------------------------------- +// oscUpdate +//--------------------------------------------------------- + +int OscDssiIF::oscUpdate(lo_arg **argv) +{ + // Make sure to call base method. + OscIF::oscUpdate(argv); + + // Send sample rate. No, done in base class. + //lo_send(_uiOscTarget, _uiOscSampleRatePath, "i", sampleRate); + + // Send project directory. No, done in DssiSynthIF. + //lo_send(_uiOscTarget, _uiOscConfigurePath, "ss", + // DSSI_PROJECT_DIRECTORY_KEY, museProject.latin1()); // song->projectPath() + + if(_oscSynthIF) + _oscSynthIF->oscUpdate(); + + /* + if(_oscSynthIF) + { + // Send current string configuration parameters. + StringParamMap& map = _oscSynthIF->dssiSynthI()->stringParameters(); + int i = 0; + for(ciStringParamMap r = map.begin(); r != map.end(); ++r) + { + lo_send(_uiOscTarget, _uiOscConfigurePath, "ss", r->first.c_str(), r->second.c_str()); + // Avoid overloading the GUI if there are lots and lots of params. + if((i+1) % 50 == 0) + usleep(300000); + ++i; + } + + // Send current bank and program. + unsigned long bank, prog; + _oscSynthIF->dssiSynthI()->currentProg(&prog, &bank, 0); + lo_send(_uiOscTarget, _uiOscProgramPath, "ii", bank, prog); + + // Send current control values. + unsigned long ports = _oscSynthIF->dssiSynth()->inControls(); + for(unsigned long i = 0; i < ports; ++i) + { + unsigned long k = _oscSynthIF->dssiSynth()->inControlPortIdx(i); + lo_send(_uiOscTarget, _uiOscControlPath, "if", k, _oscSynthIF->getParameter(i)); + // Avoid overloading the GUI if there are lots and lots of ports. + if((i+1) % 50 == 0) + usleep(300000); + } + } + */ + + /* + char uiOscGuiPath[strlen(_uiOscPath)+6]; + sprintf(uiOscGuiPath, "%s/%s", _uiOscPath, "show"); + + #ifdef OSC_DEBUG + printf("OscIF::oscUpdate Sending show uiOscGuiPath:%s\n", uiOscGuiPath); + #endif + + lo_send(_uiOscTarget, uiOscGuiPath, ""); + + sprintf(uiOscGuiPath, "%s/%s", _uiOscPath, "hide"); + + #ifdef OSC_DEBUG + printf("OscIF::oscUpdate Sending hide uiOscGuiPath:%s\n", uiOscGuiPath); + #endif + + lo_send(_uiOscTarget, uiOscGuiPath, ""); + */ + +#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; +} + + +//--------------------------------------------------------- +// oscConfigure +//--------------------------------------------------------- + +int OscDssiIF::oscConfigure(lo_arg** argv) +{ + //OscIF::oscConfigure(argv); + + if(_oscSynthIF) + _oscSynthIF->oscConfigure((const char*)&argv[0]->s, (const char*)&argv[1]->s); + return 0; +} + +//--------------------------------------------------------- +// oscMidi +//--------------------------------------------------------- + +int OscDssiIF::oscMidi(lo_arg** argv) +{ + //OscIF::oscMidi(argv); + + if(_oscSynthIF) + _oscSynthIF->oscMidi(argv[0]->m[1], argv[0]->m[2], argv[0]->m[3]); + + return 0; +} + +//--------------------------------------------------------- +// oscProgram +//--------------------------------------------------------- + +int OscDssiIF::oscProgram(lo_arg** argv) +{ + //OscIF::oscProgram(argv); + + if(_oscSynthIF) + _oscSynthIF->oscProgram(argv[1]->i, argv[0]->i); + + return 0; +} + +//--------------------------------------------------------- +// oscControl +//--------------------------------------------------------- + +int OscDssiIF::oscControl(lo_arg** argv) +{ + //OscIF::oscControl(argv); + + int port = argv[0]->i; + if(port < 0) + return 0; + + if(_oscSynthIF) + _oscSynthIF->oscControl(argv[0]->i, argv[1]->f); + + return 0; +} + +//--------------------------------------------------------- +// oscInitGui +//--------------------------------------------------------- +bool OscDssiIF::oscInitGui() +{ + if(!_oscSynthIF) + return false; + + return OscIF::oscInitGui(QT_TR_NOOP("dssi_synth"), _oscSynthIF->dssiSynth()->baseName(false), + _oscSynthIF->dssiSynth()->name(), _oscSynthIF->dssiSynthI()->name(), + _oscSynthIF->dssiSynth()->filePath(), _oscSynthIF->dssiSynth()->dirPath(false)); +} + +#endif // DSSI_SUPPORT + + +//--------------------------------------------------------- +// OscEffectIF:: +// oscSetPluginI +//--------------------------------------------------------- + +void OscEffectIF::oscSetPluginI(PluginI* s) +{ + _oscPluginI = s; + if(_oscControlFifos) + delete[] _oscControlFifos; + _oscControlFifos = 0; + + if(_oscPluginI && _oscPluginI->plugin()) + { + unsigned long ports = _oscPluginI->plugin()->controlInPorts(); + _oscControlFifos = new OscControlFifo[ports]; + } +} + +//--------------------------------------------------------- +// oscUpdate +//--------------------------------------------------------- + +int OscEffectIF::oscUpdate(lo_arg** argv) +{ + // Make sure to call base method. + OscIF::oscUpdate(argv); + + // Send project directory. No, done in PluginI. + //lo_send(_uiOscTarget, _uiOscConfigurePath, "ss", + // DSSI_PROJECT_DIRECTORY_KEY, museProject.latin1()); // song->projectPath() + + if(_oscPluginI) + _oscPluginI->oscUpdate(); + + return 0; +} + +//--------------------------------------------------------- +// oscConfigure +//--------------------------------------------------------- + +int OscEffectIF::oscConfigure(lo_arg** argv) +{ + //OscIF::oscConfigure(argv); + + if(_oscPluginI) + _oscPluginI->oscConfigure((const char*)&argv[0]->s, (const char*)&argv[1]->s); + + return 0; +} + +//--------------------------------------------------------- +// oscControl +//--------------------------------------------------------- + +int OscEffectIF::oscControl(lo_arg** argv) +{ + //OscIF::oscControl(argv); + + int port = argv[0]->i; + if(port < 0) + return 0; + + if(_oscPluginI) + _oscPluginI->oscControl(argv[0]->i, argv[1]->f); + + return 0; +} + +//--------------------------------------------------------- +// oscInitGui +//--------------------------------------------------------- +bool OscEffectIF::oscInitGui() +{ + if(!_oscPluginI) + return false; + + return OscIF::oscInitGui(QT_TR_NOOP("ladspa_efx"), _oscPluginI->plugin()->lib(false), + _oscPluginI->plugin()->label(), _oscPluginI->label(), + _oscPluginI->plugin()->filePath(), _oscPluginI->plugin()->dirPath(false)); +} + + +#else //OSC_SUPPORT +void initOSC() {} +void exitOSC() {} + +#endif diff --git a/muse2/muse/osc.h b/muse2/muse/osc.h new file mode 100644 index 00000000..dbd8294a --- /dev/null +++ b/muse2/muse/osc.h @@ -0,0 +1,212 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id: osc.h,v 1.0.0.0 2010/04/22 10:05:00 terminator356 Exp $ +// +// Copyright (C) 1999-2010 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the 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 __OSC_H__ +#define __OSC_H__ + +#include + +#include "config.h" + +#ifdef DSSI_SUPPORT +class DssiSynthIF; +#endif + +class Q3Process; +class PluginI; +class OscIF; + +// Keep the OSC fifo small. There may be thousands of controls, and each control needs a fifo. +// Oops, no, if the user keeps adjusting a slider without releasing the mouse button, then all of the +// events are sent at once upon releasing the button, meaning there might be thousands of events at once. +#define OSC_FIFO_SIZE 512 + +//--------------------------------------------------------- +// OscControlValue +// Item struct for OscGuiControlFifo. +//--------------------------------------------------------- + +struct OscControlValue +{ + //int idx; + float value; + // maybe timestamp, too ? +}; + +//--------------------------------------------------------- +// OscControlFifo +// A fifo for each of the OSC controls. +//--------------------------------------------------------- + +class OscControlFifo +{ + OscControlValue fifo[OSC_FIFO_SIZE]; + volatile int size; + int wIndex; + int rIndex; + + public: + OscControlFifo() { clear(); } + bool put(const OscControlValue& event); // returns true on fifo overflow + OscControlValue get(); + const OscControlValue& 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; } +}; + +//--------------------------------------------------------- +// OscIF +// Open Sound Control Interface +//--------------------------------------------------------- + +/* +class OscIF +{ + private: + PluginI* _oscPluginI; + + #ifdef DSSI_SUPPORT + DssiSynthIF* _oscSynthIF; + #endif + + QProcess* _oscGuiQProc; + void* _uiOscTarget; + char* _uiOscShowPath; + char* _uiOscControlPath; + char* _uiOscConfigurePath; + char* _uiOscProgramPath; + char* _uiOscPath; + bool _oscGuiVisible; + + OscControlFifo* _oscControlFifos; + + public: + OscIF(); + ~OscIF(); + + void oscSetPluginI(PluginI*); + + #ifdef DSSI_SUPPORT + void oscSetSynthIF(DssiSynthIF*); + #endif + + int oscUpdate(lo_arg**); + int oscProgram(lo_arg**); + int oscControl(lo_arg**); + int oscExiting(lo_arg**); + int oscMidi(lo_arg**); + int oscConfigure(lo_arg**); + + bool oscInitGui(); + void oscShowGui(bool); + bool oscGuiVisible() const; + OscControlFifo* oscFifo(unsigned long) const; +}; +*/ + +class OscIF +{ + protected: + Q3Process* _oscGuiQProc; + void* _uiOscTarget; + char* _uiOscPath; + char* _uiOscSampleRatePath; + char* _uiOscConfigurePath; + char* _uiOscProgramPath; + char* _uiOscControlPath; + char* _uiOscShowPath; + bool _oscGuiVisible; + + OscControlFifo* _oscControlFifos; + + virtual bool oscInitGui(const QString& /*typ*/, const QString& /*baseName*/, const QString& /*name*/, + const QString& /*label*/, const QString& /*filePath*/, const QString& /*dirPath*/); + + public: + OscIF(); + virtual ~OscIF(); + + OscControlFifo* oscFifo(unsigned long) const; + + virtual int oscUpdate(lo_arg**); + virtual int oscProgram(lo_arg**) { return 0; } + virtual int oscControl(lo_arg**) { return 0; } + virtual int oscExiting(lo_arg**); + virtual int oscMidi(lo_arg**) { return 0; } + virtual int oscConfigure(lo_arg**) { return 0; } + + virtual void oscSendProgram(unsigned long /*prog*/, unsigned long /*bank*/); + virtual void oscSendControl(unsigned long /*dssiPort*/, float /*val*/); + virtual void oscSendConfigure(const char */*key*/, const char */*val*/); + + virtual bool oscInitGui() { return false; } + virtual void oscShowGui(bool); + virtual bool oscGuiVisible() const; +}; + +class OscEffectIF : public OscIF +{ + protected: + PluginI* _oscPluginI; + + public: + OscEffectIF() {} + //~OscEffectIF(); + + void oscSetPluginI(PluginI*); + + virtual int oscUpdate(lo_arg**); + //virtual int oscProgram(lo_arg**); + virtual int oscControl(lo_arg**); + //virtual int oscExiting(lo_arg**); + //virtual int oscMidi(lo_arg**); + virtual int oscConfigure(lo_arg**); + + virtual bool oscInitGui(); +}; + +#ifdef DSSI_SUPPORT +class OscDssiIF : public OscIF +{ + protected: + DssiSynthIF* _oscSynthIF; + + public: + OscDssiIF() {} + //~OscDssiIF(); + + void oscSetSynthIF(DssiSynthIF*); + + virtual int oscUpdate(lo_arg**); + virtual int oscProgram(lo_arg**); + virtual int oscControl(lo_arg**); + //virtual int oscExiting(lo_arg**); + virtual int oscMidi(lo_arg**); + virtual int oscConfigure(lo_arg**); + + virtual bool oscInitGui(); +}; +#endif // DSSI_SUPPORT + +extern void initOSC(); + +#endif diff --git a/muse2/muse/part.cpp b/muse2/muse/part.cpp new file mode 100644 index 00000000..250cf3ea --- /dev/null +++ b/muse2/muse/part.cpp @@ -0,0 +1,1432 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: part.cpp,v 1.12.2.17 2009/06/25 05:13:02 terminator356 Exp $ +// +// (C) Copyright 1999/2000 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include +#include + +#include "song.h" +#include "part.h" +#include "track.h" +#include "globals.h" +#include "event.h" +#include "audio.h" +#include "wave.h" +#include "midiport.h" +#include "drummap.h" + +int Part::snGen; + +//--------------------------------------------------------- +// unchainClone +//--------------------------------------------------------- + +void unchainClone(Part* p) +{ + chainCheckErr(p); + + // Unchain the part. + p->prevClone()->setNextClone(p->nextClone()); + p->nextClone()->setPrevClone(p->prevClone()); + + // Isolate the part. + p->setPrevClone(p); + p->setNextClone(p); +} + +//--------------------------------------------------------- +// chainClone +// The quick way - if part to chain to is known... +//--------------------------------------------------------- + +void chainClone(Part* p1, Part* p2) +{ + chainCheckErr(p1); + + // Make sure the part to be chained is unchained first. + p2->prevClone()->setNextClone(p2->nextClone()); + p2->nextClone()->setPrevClone(p2->prevClone()); + + // Link the part to be chained. + p2->setPrevClone(p1); + p2->setNextClone(p1->nextClone()); + + // Re-link the existing part. + p1->nextClone()->setPrevClone(p2); + p1->setNextClone(p2); +} + +//--------------------------------------------------------- +// chainCloneInternal +// No error check, so it can be called by replaceClone() +//--------------------------------------------------------- + +void chainCloneInternal(Part* p) +{ + Track* t = p->track(); + Part* p1 = 0; + + // Look for a part with the same event list, that we can chain to. + // It's faster if track type is known... + + if(!t || (t && t->isMidiTrack())) + { + MidiTrack* mt = 0; + MidiTrackList* mtl = song->midis(); + for(ciMidiTrack imt = mtl->begin(); imt != mtl->end(); ++imt) + { + mt = *imt; + const PartList* pl = mt->cparts(); + for(ciPart ip = pl->begin(); ip != pl->end(); ++ip) + { + // Added by Tim. p3.3.6 + //printf("chainCloneInternal track %p %s part %p %s evlist %p\n", (*imt), (*imt)->name().latin1(), ip->second, ip->second->name().latin1(), ip->second->cevents()); + + if(ip->second != p && ip->second->cevents() == p->cevents()) + { + p1 = ip->second; + break; + } + } + // If a suitable part was found on a different track, we're done. We will chain to it. + // Otherwise keep looking for parts on another track. If no others found, then we + // chain to any suitable part which was found on the same given track t. + if(p1 && mt != t) + break; + } + } + if((!p1 && !t) || (t && t->type() == Track::WAVE)) + { + WaveTrack* wt = 0; + WaveTrackList* wtl = song->waves(); + for(ciWaveTrack iwt = wtl->begin(); iwt != wtl->end(); ++iwt) + { + wt = *iwt; + const PartList* pl = wt->cparts(); + for(ciPart ip = pl->begin(); ip != pl->end(); ++ip) + { + if(ip->second != p && ip->second->cevents() == p->cevents()) + { + p1 = ip->second; + break; + } + } + if(p1 && wt != t) + break; + } + } + + // No part found with same event list? Done. + if(!p1) + return; + + // Make sure the part to be chained is unchained first. + p->prevClone()->setNextClone(p->nextClone()); + p->nextClone()->setPrevClone(p->prevClone()); + + // Link the part to be chained. + p->setPrevClone(p1); + p->setNextClone(p1->nextClone()); + + // Re-link the existing part. + p1->nextClone()->setPrevClone(p); + p1->setNextClone(p); +} + +//--------------------------------------------------------- +// chainClone +// The slow way - if part to chain to is not known... +//--------------------------------------------------------- + +void chainClone(Part* p) +{ + chainCheckErr(p); + chainCloneInternal(p); +} + +//--------------------------------------------------------- +// replaceClone +//--------------------------------------------------------- + +void replaceClone(Part* p1, Part* p2) +{ + chainCheckErr(p1); + + // Make sure the replacement part is unchained first. + p2->prevClone()->setNextClone(p2->nextClone()); + p2->nextClone()->setPrevClone(p2->prevClone()); + + // If the two parts share the same event list, then this MUST + // be a straight forward replacement operation. Continue on. + // If not, and either part has more than one ref count, then do this... + if(p1->cevents() != p2->cevents()) + { + bool ret = false; + // If the part to be replaced is a single uncloned part, + // and the replacement part is not, then this operation + // MUST be an undo of a de-cloning of a cloned part. + //if(p1->cevents()->refCount() <= 1 && p2->cevents()->refCount() > 1) + if(p2->cevents()->refCount() > 1) + { + // Chain the replacement part. We don't know the chain it came from, + // so we use the slow method. + chainCloneInternal(p2); + //return; + ret = true; + } + + // If the replacement part is a single uncloned part, + // and the part to be replaced is not, then this operation + // MUST be a de-cloning of a cloned part. + //if(p1->cevents()->refCount() > 1 && p2->cevents()->refCount() <= 1) + if(p1->cevents()->refCount() > 1) + { + // Unchain the part to be replaced. + p1->prevClone()->setNextClone(p1->nextClone()); + p1->nextClone()->setPrevClone(p1->prevClone()); + // Isolate the part. + p1->setPrevClone(p1); + p1->setNextClone(p1); + //return; + ret = true; + } + + // Was the operation handled? + if(ret) + return; + // Note that two parts here with different event lists, each with more than one + // reference count, would be an error. It's not done anywhere in muse. But just + // to be sure, four lines above were changed to allow that condition. + // If each of the two different event lists, has only one ref count, we + // handle it like a regular replacement, below... + } + + // If the part to be replaced is a clone not a single lone part, re-link its neighbours to the replacement part... + if(p1->prevClone() != p1) + { + p1->prevClone()->setNextClone(p2); + p2->setPrevClone(p1->prevClone()); + } + else + p2->setPrevClone(p2); + + if(p1->nextClone() != p1) + { + p1->nextClone()->setPrevClone(p2); + p2->setNextClone(p1->nextClone()); + } + else + p2->setNextClone(p2); + + // Link the replacement... + //p2->setPrevClone(p1->prevClone()); + //p2->setNextClone(p1->nextClone()); + + // Isolate the replaced part. + p1->setNextClone(p1); + p1->setPrevClone(p1); + // Added by Tim. p3.3.6 + //printf("replaceClone p1: %s %p arefs:%d p2: %s %p arefs:%d\n", p1->name().latin1(), p1, ); + +} + +//--------------------------------------------------------- +// unchainTrackParts +//--------------------------------------------------------- + +void unchainTrackParts(Track* t, bool decRefCount) +{ + PartList* pl = t->parts(); + for(iPart ip = pl->begin(); ip != pl->end(); ++ip) + { + Part* p = ip->second; + chainCheckErr(p); + + // Do we want to decrease the reference count? + if(decRefCount) + p->events()->incARef(-1); + + // Unchain the part. + p->prevClone()->setNextClone(p->nextClone()); + p->nextClone()->setPrevClone(p->prevClone()); + + // Isolate the part. + p->setPrevClone(p); + p->setNextClone(p); + } +} + +//--------------------------------------------------------- +// chainTrackParts +//--------------------------------------------------------- + +void chainTrackParts(Track* t, bool incRefCount) +{ + PartList* pl = t->parts(); + for(iPart ip = pl->begin(); ip != pl->end(); ++ip) + { + Part* p = ip->second; + chainCheckErr(p); + + // Do we want to increase the reference count? + if(incRefCount) + p->events()->incARef(1); + + // Added by Tim. p3.3.6 + //printf("chainTrackParts track %p %s part %p %s evlist %p\n", t, t->name().latin1(), p, p->name().latin1(), p->cevents()); + + Part* p1 = 0; + + // Look for a part with the same event list, that we can chain to. + // It's faster if track type is known... + + if(!t || (t && t->isMidiTrack())) + { + MidiTrack* mt = 0; + MidiTrackList* mtl = song->midis(); + for(ciMidiTrack imt = mtl->begin(); imt != mtl->end(); ++imt) + { + mt = *imt; + const PartList* pl = mt->cparts(); + for(ciPart ip = pl->begin(); ip != pl->end(); ++ip) + { + // Added by Tim. p3.3.6 + //printf("chainTrackParts track %p %s part %p %s evlist %p\n", mt, mt->name().latin1(), ip->second, ip->second->name().latin1(), ip->second->cevents()); + + if(ip->second != p && ip->second->cevents() == p->cevents()) + { + p1 = ip->second; + break; + } + } + // If a suitable part was found on a different track, we're done. We will chain to it. + // Otherwise keep looking for parts on another track. If no others found, then we + // chain to any suitable part which was found on the same given track t. + if(p1 && mt != t) + break; + } + } + if((!p1 && !t) || (t && t->type() == Track::WAVE)) + { + WaveTrack* wt = 0; + WaveTrackList* wtl = song->waves(); + for(ciWaveTrack iwt = wtl->begin(); iwt != wtl->end(); ++iwt) + { + wt = *iwt; + const PartList* pl = wt->cparts(); + for(ciPart ip = pl->begin(); ip != pl->end(); ++ip) + { + if(ip->second != p && ip->second->cevents() == p->cevents()) + { + p1 = ip->second; + break; + } + } + if(p1 && wt != t) + break; + } + } + + // No part found with same event list? Done. + if(!p1) + continue; + + // Make sure the part to be chained is unchained first. + p->prevClone()->setNextClone(p->nextClone()); + p->nextClone()->setPrevClone(p->prevClone()); + + // Link the part to be chained. + p->setPrevClone(p1); + p->setNextClone(p1->nextClone()); + + // Re-link the existing part. + p1->nextClone()->setPrevClone(p); + p1->setNextClone(p); + } +} + +//--------------------------------------------------------- +// chainCheckErr +//--------------------------------------------------------- + +void chainCheckErr(Part* p) +{ + // At all times these must be true... + if(p->nextClone()->prevClone() != p) + printf("chainCheckErr: Next clone:%s %p prev clone:%s %p != %s %p\n", p->nextClone()->name().latin1(), p->nextClone(), p->nextClone()->prevClone()->name().latin1(), p->nextClone()->prevClone(), p->name().latin1(), p); + if(p->prevClone()->nextClone() != p) + printf("chainCheckErr: Prev clone:%s %p next clone:%s %p != %s %p\n", p->prevClone()->name().latin1(), p->prevClone(), p->prevClone()->nextClone()->name().latin1(), p->prevClone()->nextClone(), p->name().latin1(), p); +} + +//--------------------------------------------------------- +// addPortCtrlEvents +//--------------------------------------------------------- + +void addPortCtrlEvents(Event& event, Part* part, bool doClones) +{ + // Traverse and process the clone chain ring until we arrive at the same part again. + // The loop is a safety net. + // Update: Due to the varying calls, and order of, incARefcount, (msg)ChangePart, replaceClone, and remove/addPortCtrlEvents, + // we can not rely on the reference count as a safety net in these routines. We will just have to trust the clone chain. + Part* p = part; + //int j = doClones ? p->cevents()->arefCount() : 1; + //if(j > 0) + { + //for(int i = 0; i < j; ++i) + while(1) + { + // Added by Tim. p3.3.6 + //printf("addPortCtrlEvents i:%d %s %p events %p refs:%d arefs:%d\n", i, p->name().latin1(), p, part->cevents(), part->cevents()->refCount(), j); + + Track* t = p->track(); + if(t && t->isMidiTrack()) + { + MidiTrack* mt = (MidiTrack*)t; + int port = mt->outPort(); + //const EventList* el = p->cevents(); + unsigned len = p->lenTick(); + //for(ciEvent ie = el->begin(); ie != el->end(); ++ie) + //{ + //const Event& ev = ie->second; + // Added by Tim. p3.3.6 + //printf("addPortCtrlEvents %s len:%d end:%d etick:%d\n", p->name().latin1(), p->lenTick(), p->endTick(), event.tick()); + + // Do not add events which are past the end of the part. + if(event.tick() >= len) + break; + + if(event.type() == Controller) + { + int ch = mt->outChannel(); + int tck = event.tick() + p->tick(); + int cntrl = event.dataA(); + int val = event.dataB(); + MidiPort* mp = &midiPorts[port]; + + // Is it a drum controller event, according to the track port's instrument? + if(mt->type() == Track::DRUM) + { + MidiController* mc = mp->drumController(cntrl); + if(mc) + { + int note = cntrl & 0x7f; + cntrl &= ~0xff; + ch = drumMap[note].channel; + mp = &midiPorts[drumMap[note].port]; + cntrl |= drumMap[note].anote; + } + } + + mp->setControllerVal(ch, tck, cntrl, val, p); + } + //} + } + + if(!doClones) + break; + // Get the next clone in the chain ring. + p = p->nextClone(); + // Same as original part? Finished. + if(p == part) + break; + } + } +} + +//--------------------------------------------------------- +// addPortCtrlEvents +//--------------------------------------------------------- + +void addPortCtrlEvents(Part* part, bool doClones) +{ + // Traverse and process the clone chain ring until we arrive at the same part again. + // The loop is a safety net. + // Update: Due to the varying calls, and order of, incARefcount, (msg)ChangePart, replaceClone, and remove/addPortCtrlEvents, + // we can not rely on the reference count as a safety net in these routines. We will just have to trust the clone chain. + Part* p = part; + //int j = doClones ? p->cevents()->arefCount() : 1; + //if(j > 0) + { + //for(int i = 0; i < j; ++i) + while(1) + { + // Added by Tim. p3.3.6 + //printf("addPortCtrlEvents i:%d %s %p events %p refs:%d arefs:%d\n", i, p->name().latin1(), p, part->cevents(), part->cevents()->refCount(), j); + + Track* t = p->track(); + if(t && t->isMidiTrack()) + { + MidiTrack* mt = (MidiTrack*)t; + int port = mt->outPort(); + const EventList* el = p->cevents(); + unsigned len = p->lenTick(); + for(ciEvent ie = el->begin(); ie != el->end(); ++ie) + { + const Event& ev = ie->second; + // Added by T356. Do not add events which are past the end of the part. + if(ev.tick() >= len) + break; + + if(ev.type() == Controller) + { + int ch = mt->outChannel(); + int tck = ev.tick() + p->tick(); + int cntrl = ev.dataA(); + int val = ev.dataB(); + MidiPort* mp = &midiPorts[port]; + + // Is it a drum controller event, according to the track port's instrument? + if(mt->type() == Track::DRUM) + { + MidiController* mc = mp->drumController(cntrl); + if(mc) + { + int note = cntrl & 0x7f; + cntrl &= ~0xff; + ch = drumMap[note].channel; + mp = &midiPorts[drumMap[note].port]; + cntrl |= drumMap[note].anote; + } + } + + mp->setControllerVal(ch, tck, cntrl, val, p); + } + } + } + if(!doClones) + break; + // Get the next clone in the chain ring. + p = p->nextClone(); + // Same as original part? Finished. + if(p == part) + break; + } + } +} + +//--------------------------------------------------------- +// removePortCtrlEvents +//--------------------------------------------------------- + +void removePortCtrlEvents(Event& event, Part* part, bool doClones) +{ + // Traverse and process the clone chain ring until we arrive at the same part again. + // The loop is a safety net. + // Update: Due to the varying calls, and order of, incARefcount, (msg)ChangePart, replaceClone, and remove/addPortCtrlEvents, + // we can not rely on the reference count as a safety net in these routines. We will just have to trust the clone chain. + Part* p = part; + //int j = doClones ? p->cevents()->arefCount() : 1; + //if(j > 0) + { + //for(int i = 0; i < j; ++i) + while(1) + { + Track* t = p->track(); + if(t && t->isMidiTrack()) + { + MidiTrack* mt = (MidiTrack*)t; + int port = mt->outPort(); + //const EventList* el = p->cevents(); + //unsigned len = p->lenTick(); + //for(ciEvent ie = el->begin(); ie != el->end(); ++ie) + //{ + //const Event& ev = ie->second; + // Added by T356. Do not remove events which are past the end of the part. + // No, actually, do remove ALL of them belonging to the part. + // Just in case there are stray values left after the part end. + //if(ev.tick() >= len) + // break; + + if(event.type() == Controller) + { + int ch = mt->outChannel(); + int tck = event.tick() + p->tick(); + int cntrl = event.dataA(); + MidiPort* mp = &midiPorts[port]; + + // Is it a drum controller event, according to the track port's instrument? + if(mt->type() == Track::DRUM) + { + MidiController* mc = mp->drumController(cntrl); + if(mc) + { + int note = cntrl & 0x7f; + cntrl &= ~0xff; + ch = drumMap[note].channel; + mp = &midiPorts[drumMap[note].port]; + cntrl |= drumMap[note].anote; + } + } + + mp->deleteController(ch, tck, cntrl, p); + } + //} + } + + if(!doClones) + break; + // Get the next clone in the chain ring. + p = p->nextClone(); + // Same as original part? Finished. + if(p == part) + break; + } + } +} + +//--------------------------------------------------------- +// removePortCtrlEvents +//--------------------------------------------------------- + +void removePortCtrlEvents(Part* part, bool doClones) +{ + // Traverse and process the clone chain ring until we arrive at the same part again. + // The loop is a safety net. + // Update: Due to the varying calls, and order of, incARefcount, (msg)ChangePart, replaceClone, and remove/addPortCtrlEvents, + // we can not rely on the reference count as a safety net in these routines. We will just have to trust the clone chain. + Part* p = part; + //int j = doClones ? p->cevents()->arefCount() : 1; + //if(j > 0) + { + //for(int i = 0; i < j; ++i) + while(1) + { + Track* t = p->track(); + if(t && t->isMidiTrack()) + { + MidiTrack* mt = (MidiTrack*)t; + int port = mt->outPort(); + const EventList* el = p->cevents(); + //unsigned len = p->lenTick(); + for(ciEvent ie = el->begin(); ie != el->end(); ++ie) + { + const Event& ev = ie->second; + // Added by T356. Do not remove events which are past the end of the part. + // No, actually, do remove ALL of them belonging to the part. + // Just in case there are stray values left after the part end. + //if(ev.tick() >= len) + // break; + + if(ev.type() == Controller) + { + int ch = mt->outChannel(); + int tck = ev.tick() + p->tick(); + int cntrl = ev.dataA(); + MidiPort* mp = &midiPorts[port]; + + // Is it a drum controller event, according to the track port's instrument? + if(mt->type() == Track::DRUM) + { + MidiController* mc = mp->drumController(cntrl); + if(mc) + { + int note = cntrl & 0x7f; + cntrl &= ~0xff; + ch = drumMap[note].channel; + mp = &midiPorts[drumMap[note].port]; + cntrl |= drumMap[note].anote; + } + } + + mp->deleteController(ch, tck, cntrl, p); + } + } + } + + if(!doClones) + break; + // Get the next clone in the chain ring. + p = p->nextClone(); + // Same as original part? Finished. + if(p == part) + break; + } + } +} + +//--------------------------------------------------------- +// addEvent +//--------------------------------------------------------- + +iEvent Part::addEvent(Event& p) + { + return _events->add(p); + } + +//--------------------------------------------------------- +// index +//--------------------------------------------------------- + +int PartList::index(Part* part) + { + int index = 0; + for (iPart i = begin(); i != end(); ++i, ++index) + if (i->second == part) { + return index; + } + if(debugMsg) + printf("PartList::index(): not found!\n"); + //return 0; + return -1; + } + +//--------------------------------------------------------- +// 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; + } + +//--------------------------------------------------------- +// Part +//--------------------------------------------------------- + +Part::Part(Track* t) + { + _prevClone = this; + _nextClone = this; + setSn(newSn()); + _track = t; + _selected = false; + _mute = false; + _colorIndex = 0; + _events = new EventList; + _events->incRef(1); + _events->incARef(1); + } + +//--------------------------------------------------------- +// Part +//--------------------------------------------------------- + +Part::Part(Track* t, EventList* ev) + { + _prevClone = this; + _nextClone = this; + setSn(newSn()); + _track = t; + _selected = false; + _mute = false; + _colorIndex = 0; + _events = ev; + _events->incRef(1); + _events->incARef(1); + } + +//--------------------------------------------------------- +// MidiPart +// copy constructor +//--------------------------------------------------------- + +MidiPart::MidiPart(const MidiPart& p) : Part(p) +{ + _prevClone = this; + _nextClone = this; + //setSn(newSn()); + //_sn = p._sn; + //_name = p._name; + //_selected = p._selected; + //_mute = p._mute; + //_colorIndex = p._colorIndex; + //_track = p._track; + //_events = p._events; +} + +//--------------------------------------------------------- +// WavePart +//--------------------------------------------------------- + +WavePart::WavePart(WaveTrack* t) + : Part(t) + { + setType(FRAMES); + } + +WavePart::WavePart(WaveTrack* t, EventList* ev) + : Part(t, ev) + { + setType(FRAMES); + } + +//--------------------------------------------------------- +// WavePart +// copy constructor +//--------------------------------------------------------- + +WavePart::WavePart(const WavePart& p) : Part(p) +{ + _prevClone = this; + _nextClone = this; + //setSn(newSn()); + //_sn = p._sn; + //_name = p._name; + //_selected = p._selected; + //_mute = p._mute; + //_colorIndex = p._colorIndex; + //_track = p._track; + //_events = p._events; +} + +//--------------------------------------------------------- +// Part +//--------------------------------------------------------- + +Part::~Part() + { + _events->incRef(-1); + if (_events->refCount() <= 0) + delete _events; + } + +/* +//--------------------------------------------------------- +// unchainClone +//--------------------------------------------------------- + +void Part::unchainClone() +{ + chainCheckErr(); + + _prevClone->setNextClone(_nextClone); + _nextClone->setPrevClone(_prevClone); + + _prevClone = this; + _nextClone = this; +} + +//--------------------------------------------------------- +// chainClone +// The quick way - if part to chain to is known... +//--------------------------------------------------------- + +void Part::chainClone(const Part* p) +{ + chainCheckErr(); + + // Make sure the part is unchained first. + p->prevClone()->setNextClone(p->nextClone()); + p->nextClone()->setPrevClone(p->prevClone()); + + p->setPrevClone(this); + p->setNextClone(_nextClone->prevClone()); + + _nextClone->setPrevClone(p); + _nextClone = (Part*)p; +} + +//--------------------------------------------------------- +// chainClone +// The slow way - if part to chain to is not known... +//--------------------------------------------------------- + +void Part::chainClone() +{ + chainCheckErr(); + + // Look for a part with the same event list, that we can chain to... + Part* p = 0; + if(!_track || (_track && _track->isMidiTrack())) + { + MidiTrackList* mtl = song->midis(); + for(ciMidiTrack imt = mtl->begin(); imt != mtl->end(); ++imt) + { + const PartList* pl = (*imt)->cparts(); + for(ciPart ip = pl->begin(); ip != pl->end(); ++ip) + { + if(ip->second != this && ip->second->events() == _events) + { + p = ip->second; + break; + } + } + } + } + + if((!p && !_track) || (_track && _track->type() == Track::WAVE)) + { + WaveTrackList* wtl = song->waves(); + for(ciWaveTrack iwt = wtl->begin(); iwt != wtl->end(); ++iwt) + { + const PartList* pl = (*iwt)->cparts(); + for(ciPart ip = pl->begin(); ip != pl->end(); ++ip) + { + if(ip->second != this && ip->second->events() == _events) + { + p = ip->second; + break; + } + } + } + } + + // No part found with same event list? Done. + if(!p) + return; + + // Make sure this part is unchained first. + _prevClone->setNextClone(_nextClone); + _nextClone->setPrevClone(_prevClone); + + _prevClone = p; + _nextClone = p->nextClone(); + + p->nextClone()->setPrevClone(this); + p->setNextClone(this); +} + +//--------------------------------------------------------- +// replaceClone +//--------------------------------------------------------- + +void Part::replaceClone(const Part* p) +{ + chainCheckErr(); + + // Make sure the part is unchained first. + p->prevClone()->setNextClone(p->nextClone()); + p->nextClone()->setPrevClone(p->prevClone()); + + // If this part is a clone, not a single lone part... + if(_prevClone != this) + _prevClone->setNextClone(p); + if(_nextClone != this) + _nextClone->setPrevClone(p); + + p->setPrevClone(_prevClone); + p->setNextClone(_nextClone); + + _nextClone = this; + _prevClone = this; +} + +//--------------------------------------------------------- +// chainCheckErr +//--------------------------------------------------------- + +void Part::chainCheckErr() +{ + if(_nextClone->prevClone() != this) + printf("Part::chainCheckErr Error! Next clone:%s %x prev clone:%s %x != this:%s %x\n", _nextClone->name().latin1(), _nextClone, _nextClone->prevClone()->name().latin1(), _nextClone->prevClone(), name().latin1(), this); + if(_prevClone->nextClone() != this) + printf("Part::chainCheckErr Error! Prev clone:%s %x next clone:%s %x != this:%s %x\n", _prevClone->name().latin1(), _prevClone, _prevClone->nextClone()->name().latin1(), _prevClone->nextClone(), name().latin1(), this); +} +*/ + +//--------------------------------------------------------- +// findPart +//--------------------------------------------------------- + +iPart PartList::findPart(unsigned tick) + { + iPart i; + for (i = begin(); i != end(); ++i) + if (i->second->tick() == tick) + break; + return i; + } + +//--------------------------------------------------------- +// add +//--------------------------------------------------------- + +iPart PartList::add(Part* part) + { + // Added by T356. A part list containing wave parts should be sorted by + // frames. WaveTrack::fetchData() relies on the sorting order, and + // there was a bug that waveparts were sometimes muted because of + // incorrect sorting order (by ticks). + // Also, when the tempo map is changed, every wavepart would have to be + // re-added to the part list so that the proper sorting order (by ticks) + // could be achieved. + // Note that in a med file, the tempo list is loaded AFTER all the tracks. + // There was a bug that all the wave parts' tick values were not correct, + // since they were computed BEFORE the tempo map was loaded. + if(part->type() == Pos::FRAMES) + return insert(std::pair (part->frame(), part)); + else + 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); + break; + } + } + assert(i != end()); + } + +//--------------------------------------------------------- +// addPart +//--------------------------------------------------------- + +void Song::addPart(Part* part) + { + // adjust song len: + unsigned epos = part->tick() + part->lenTick(); + + if (epos > len()) + _len = epos; + part->track()->addPart(part); + + //part->addPortCtrlEvents(); + // Indicate do not do clones. + addPortCtrlEvents(part, false); + } + +//--------------------------------------------------------- +// removePart +//--------------------------------------------------------- + +void Song::removePart(Part* part) + { + //part->removePortCtrlEvents(); + // Indicate do not do clones. + //removePortCtrlEvents(part); + removePortCtrlEvents(part, false); + Track* track = part->track(); + track->parts()->remove(part); + } + +//--------------------------------------------------------- +// cmdResizePart +//--------------------------------------------------------- + +void Song::cmdResizePart(Track* track, Part* oPart, unsigned int len) + { + switch(track->type()) { + case Track::WAVE: + { + WavePart* nPart = new WavePart(*(WavePart*)oPart); + EventList* el = nPart->events(); + unsigned new_partlength = tempomap.deltaTick2frame(oPart->tick(), oPart->tick() + len); + //printf("new partlength in frames: %d\n", new_partlength); + + // If new nr of frames is less than previous what can happen is: + // - 0 or more events are beginning after the new final position. Those are removed from the part + // - The last event begins before new final position and ends after it. If so, it will be resized to end at new part length + if (new_partlength < oPart->lenFrame()) { + startUndo(); + + for (iEvent i = el->begin(); i != el->end(); i++) { + Event e = i->second; + unsigned event_startframe = e.frame(); + unsigned event_endframe = event_startframe + e.lenFrame(); + //printf("Event frame=%d, length=%d\n", event_startframe, event_length); + if (event_endframe < new_partlength) + continue; + if (event_startframe > new_partlength) { // If event start was after the new length, remove it from part + // Indicate no undo, and do not do port controller values and clone parts. + //audio->msgDeleteEvent(e, nPart, false); + audio->msgDeleteEvent(e, nPart, false, false, false); + continue; + } + if (event_endframe > new_partlength) { // If this event starts before new length and ends after, shrink it + Event newEvent = e.clone(); + newEvent.setLenFrame(new_partlength - event_startframe); + // Indicate no undo, and do not do port controller values and clone parts. + //audio->msgChangeEvent(e, newEvent, nPart, false); + audio->msgChangeEvent(e, newEvent, nPart, false, false, false); + } + } + nPart->setLenFrame(new_partlength); + // Indicate no undo, and do not do port controller values and clone parts. + //audio->msgChangePart(oPart, nPart, false); + audio->msgChangePart(oPart, nPart, false, false, false); + + endUndo(SC_PART_MODIFIED); + } + // If the part is expanded there can be no additional events beginning after the previous final position + // since those are removed if the part has been shrunk at some time (see above) + // The only thing we need to check is the final event: If it has data after the previous final position, + // we'll expand that event + else { + if(!el->empty()) + { + iEvent i = el->end(); + i--; + Event last = i->second; + unsigned last_start = last.frame(); + SndFileR file = last.sndFile(); + if (file.isNull()) + return; + + unsigned clipframes = (file.samples() - last.spos());// / file.channels(); + Event newEvent = last.clone(); + //printf("SndFileR samples=%d channels=%d event samplepos=%d clipframes=%d\n", file.samples(), file.channels(), last.spos(), clipframes); + + unsigned new_eventlength = new_partlength - last_start; + if (new_eventlength > clipframes) // Shrink event length if new partlength exceeds last clip + new_eventlength = clipframes; + + newEvent.setLenFrame(new_eventlength); + startUndo(); + // Indicate no undo, and do not do port controller values and clone parts. + //audio->msgChangeEvent(last, newEvent, nPart, false); + audio->msgChangeEvent(last, newEvent, nPart, false, false, false); + } + else + { + startUndo(); + } + + nPart->setLenFrame(new_partlength); + // Indicate no undo, and do not do port controller values and clone parts. + //audio->msgChangePart(oPart, nPart, false); + audio->msgChangePart(oPart, nPart, false, false, false); + endUndo(SC_PART_MODIFIED); + } + } + break; + case Track::MIDI: + case Track::DRUM: + { + startUndo(); + + MidiPart* nPart = new MidiPart(*(MidiPart*)oPart); + nPart->setLenTick(len); + // Indicate no undo, and do port controller values but not clone parts. + audio->msgChangePart(oPart, nPart, false, true, false); + + // cut Events in nPart + // Changed by T356. Don't delete events if this is a clone part. + // The other clones might be longer than this one and need these events. + if(nPart->cevents()->arefCount() <= 1) + { + if(oPart->lenTick() > len) { + EventList* el = nPart->events(); + iEvent ie = el->lower_bound(len); + for (; ie != el->end();) { + iEvent i = ie; + ++ie; + // Indicate no undo, and do port controller values and clone parts. + audio->msgDeleteEvent(i->second, nPart, false, true, true); + } + } + } + + /* + // cut Events in nPart + // Changed by T356. Don't delete events if this is a clone part. + // The other clones might be longer than this one and need these events. + if(oPart->cevents()->arefCount() <= 1) + { + if (oPart->lenTick() > len) { + EventList* el = nPart->events(); + iEvent ie = el->lower_bound(len); + for (; ie != el->end();) { + iEvent i = ie; + ++ie; + // Indicate no undo, and do not do port controller values and clone parts. + //audio->msgDeleteEvent(i->second, nPart, false); + audio->msgDeleteEvent(i->second, nPart, false, false, false); + } + } + } + // Indicate no undo, and do port controller values but not clone parts. + //audio->msgChangePart(oPart, nPart, false); + audio->msgChangePart(oPart, nPart, false, true, false); + */ + + endUndo(SC_PART_MODIFIED); + break; + } + default: + break; + } + } + +//--------------------------------------------------------- +// 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 = tempomap.tick2frame(tickpos); + + switch (type()) { + case WAVE: + l1 = samplepos - part->frame(); + l2 = part->lenFrame() - l1; + break; + case MIDI: + case DRUM: + 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 + + // Added by Tim. p3.3.6 + //printf("Track::splitPart part ev %p sz:%d ref:%d p1 %p sz:%d ref:%d p2 %p sz:%d ref:%d\n", part->events(), part->events()->size(), part->events()->arefCount(), p1->events(), p1->events()->size(), p1->events()->arefCount(), p2->events(), p2->events()->size(), p2->events()->arefCount()); + + switch (type()) { + case WAVE: + p1->setLenFrame(l1); + p2->setFrame(samplepos); + p2->setLenFrame(l2); + break; + case MIDI: + case DRUM: + p1->setLenTick(l1); + p2->setTick(tickpos); + p2->setLenTick(l2); + break; + default: + break; + } + + p2->setSn(p2->newSn()); + + 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); + 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); + } + } + } + +//--------------------------------------------------------- +// cmdSplitPart +//--------------------------------------------------------- + +void Song::cmdSplitPart(Track* track, Part* part, int tick) + { + int l1 = tick - part->tick(); + int l2 = part->lenTick() - l1; + if (l1 <= 0 || l2 <= 0) + return; + Part* p1; + Part* p2; + track->splitPart(part, tick, p1, p2); + + startUndo(); + // Indicate no undo, and do port controller values but not clone parts. + //audio->msgChangePart(part, p1, false); + audio->msgChangePart(part, p1, false, true, false); + audio->msgAddPart(p2, false); + endUndo(SC_TRACK_MODIFIED | SC_PART_MODIFIED | SC_PART_INSERTED); + } + +//--------------------------------------------------------- +// changePart +//--------------------------------------------------------- + +void Song::changePart(Part* oPart, Part* nPart) + { + nPart->setSn(oPart->sn()); + + Track* oTrack = oPart->track(); + Track* nTrack = nPart->track(); + + // Added by Tim. p3.3.6 + //printf("Song::changePart before oPart->removePortCtrlEvents oldPart refs:%d Arefs:%d newPart refs:%d Arefs:%d\n", oPart->events()->refCount(), oPart->events()->arefCount(), nPart->events()->refCount(), nPart->events()->arefCount()); + + // Removed. Port controller events will have to be add/removed separately from this routine. + //oPart->removePortCtrlEvents(); + //removePortCtrlEvents(oPart); + + // Added by Tim. p3.3.6 + //printf("Song::changePart after oPart->removePortCtrlEvents oldPart refs:%d Arefs:%d newPart refs:%d Arefs:%d\n", oPart->events()->refCount(), oPart->events()->arefCount(), nPart->events()->refCount(), nPart->events()->arefCount()); + + oTrack->parts()->remove(oPart); + nTrack->parts()->add(nPart); + + // Added by Tim. p3.3.6 + //printf("Song::changePart after add(nPart) oldPart refs:%d Arefs:%d newPart refs:%d Arefs:%d\n", oPart->events()->refCount(), oPart->events()->arefCount(), nPart->events()->refCount(), nPart->events()->arefCount()); + + //nPart->addPortCtrlEvents(); + //addPortCtrlEvents(nPart); + + // Added by Tim. p3.3.6 + //printf("Song::changePart after nPart->addPortCtrlEvents() oldPart refs:%d Arefs:%d newPart refs:%d Arefs:%d\n", oPart->events()->refCount(), oPart->events()->arefCount(), nPart->events()->refCount(), nPart->events()->arefCount()); + + // Added by T356. + // adjust song len: + unsigned epos = nPart->tick() + nPart->lenTick(); + if (epos > len()) + _len = epos; + + // Added by Tim. p3.3.6 + //printf("Song::changePart after len adjust oldPart refs:%d Arefs:%d newPart refs:%d Arefs:%d\n", oPart->events()->refCount(), oPart->events()->arefCount(), nPart->events()->refCount(), nPart->events()->arefCount()); + + } + +//--------------------------------------------------------- +// cmdGluePart +//--------------------------------------------------------- + +void Song::cmdGluePart(Track* track, Part* oPart) + { + // p3.3.54 + if(track->type() != Track::WAVE && !track->isMidiTrack()) + return; + + 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 frameOffset = nextPart->frame() - oPart->frame(); + //for (iEvent ie = sl2->begin(); ie != sl2->end(); ++ie) { + // Event event = ie->second.clone(); + // event.setFrame(event.frame() + frameOffset); + // dl->add(event); + // } + // p3.3.54 Changed. + if(track->type() == Track::WAVE) + { + int frameOffset = nextPart->frame() - oPart->frame(); + for (iEvent ie = sl2->begin(); ie != sl2->end(); ++ie) + { + Event event = ie->second.clone(); + event.setFrame(event.frame() + frameOffset); + dl->add(event); + } + } + else + if(track->isMidiTrack()) + { + int tickOffset = nextPart->tick() - oPart->tick(); + for (iEvent ie = sl2->begin(); ie != sl2->end(); ++ie) + { + Event event = ie->second.clone(); + event.setTick(event.tick() + tickOffset); + dl->add(event); + } + } + + startUndo(); + audio->msgRemovePart(nextPart, false); + // Indicate no undo, and do port controller values but not clone parts. + //audio->msgChangePart(oPart, nPart, false); + audio->msgChangePart(oPart, nPart, false, true, false); + endUndo(SC_PART_MODIFIED | SC_PART_REMOVED); + } + +//--------------------------------------------------------- +// dump +//--------------------------------------------------------- + +void Part::dump(int n) const + { + for (int i = 0; i < n; ++i) + putchar(' '); + printf("Part: <%s> ", _name.latin1()); + for (int i = 0; i < n; ++i) + putchar(' '); + PosLen::dump(); + } + +void WavePart::dump(int n) const + { + Part::dump(n); + for (int i = 0; i < n; ++i) + putchar(' '); + printf("WavePart\n"); + } + +void MidiPart::dump(int n) const + { + Part::dump(n); + for (int i = 0; i < n; ++i) + putchar(' '); + printf("MidiPart\n"); + } + +//--------------------------------------------------------- +// clone +//--------------------------------------------------------- + +MidiPart* MidiPart::clone() const + { + return new MidiPart(*this); + } + +WavePart* WavePart::clone() const + { + return new WavePart(*this); + } + diff --git a/muse2/muse/part.h b/muse2/muse/part.h new file mode 100644 index 00000000..b2a18851 --- /dev/null +++ b/muse2/muse/part.h @@ -0,0 +1,175 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: part.h,v 1.5.2.4 2009/05/24 21:43:44 terminator356 Exp $ +// +// (C) Copyright 1999/2000 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __PART_H__ +#define __PART_H__ + +#include + +#include +#include +// Added by T356. +#include + +#include "event.h" +#include "audioconvert.h" + +class Track; +class MidiTrack; +class WaveTrack; +class Xml; +class Part; +//class AudioConvertMap; + +// typedef std::multimap >::iterator iEvent; + +struct ClonePart { + //const EventList* el; + const Part* cp; + int id; + uuid_t uuid; + //ClonePart(const EventList* e, int i) : el(e), id(i) {} + //ClonePart(const Part* p, int i) : cp(p), id(i) {} + ClonePart(const Part*, int i = -1); + }; + +typedef std::list CloneList; +typedef CloneList::iterator iClone; + +//--------------------------------------------------------- +// Part +//--------------------------------------------------------- + +class Part : public PosLen { + static int snGen; + int _sn; + + QString _name; + bool _selected; + bool _mute; + int _colorIndex; + + protected: + Track* _track; + EventList* _events; + Part* _prevClone; + Part* _nextClone; + + public: + Part(Track*); + Part(Track*, EventList*); + virtual ~Part(); + int sn() { return _sn; } + void setSn(int n) { _sn = n; } + int newSn() { return snGen++; } + + virtual Part* clone() const = 0; + + 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; } + EventList* events() const { return _events; } + const EventList* cevents() const { return _events; } + int colorIndex() const { return _colorIndex; } + void setColorIndex(int idx) { _colorIndex = idx; } + + Part* prevClone() { return _prevClone; } + Part* nextClone() { return _nextClone; } + void setPrevClone(Part* p) { _prevClone = p; } + void setNextClone(Part* p) { _nextClone = p; } + + iEvent addEvent(Event& p); + + //virtual void read(Xml&, int newPartOffset=0, bool toTrack = true); + //virtual void write(int, Xml&) const; + //virtual void write(int, Xml&, bool isCopy = false) const; + virtual void write(int, Xml&, bool isCopy = false, bool forceWavePaths = false) const; + +// virtual Event* newEvent() const = 0; + virtual void dump(int n = 0) const; + }; + +//--------------------------------------------------------- +// MidiPart +//--------------------------------------------------------- + +class MidiPart : public Part { + + public: + MidiPart(MidiTrack* t) : Part((Track*)t) {} + MidiPart(MidiTrack* t, EventList* ev) : Part((Track*)t, ev) {} + MidiPart(const MidiPart& p); + virtual ~MidiPart() {} + virtual MidiPart* clone() const; + MidiTrack* track() const { return (MidiTrack*)Part::track(); } + +// virtual Event* newEvent() const; + virtual void dump(int n = 0) const; + }; + +//--------------------------------------------------------- +// WavePart +//--------------------------------------------------------- + +class WavePart : public Part { + + // p3.3.31 + AudioConvertMap _converters; + + public: + WavePart(WaveTrack* t); + WavePart(WaveTrack* t, EventList* ev); + WavePart(const WavePart& p); + virtual ~WavePart() {} + virtual WavePart* clone() const; + WaveTrack* track() const { return (WaveTrack*)Part::track(); } + +// virtual Event* newEvent() const; + virtual void dump(int n = 0) const; + }; + +//--------------------------------------------------------- +// PartList +//--------------------------------------------------------- + +typedef std::multimap >::iterator iPart; +typedef std::multimap >::const_iterator ciPart; + +class PartList : public std::multimap > { + public: + iPart findPart(unsigned tick); + iPart add(Part*); + void remove(Part* part); + int index(Part*); + Part* find(int idx); + }; + +extern void chainClone(Part* p); +extern void chainClone(Part* p1, Part* p2); +extern void unchainClone(Part* p); +extern void replaceClone(Part* p1, Part* p2); +extern void chainCheckErr(Part* p); +extern void unchainTrackParts(Track* t, bool decRefCount); +extern void chainTrackParts(Track* t, bool incRefCount); +extern void addPortCtrlEvents(Part* part, bool doClones); +extern void addPortCtrlEvents(Event& event, Part* part, bool doClones); +extern void removePortCtrlEvents(Part* part, bool doClones); +extern void removePortCtrlEvents(Event& event, Part* part, bool doClones); +extern CloneList cloneList; +//extern CloneList copyCloneList; +//extern void updateCloneList(Part* oPart, Part* nPart); +//extern void clearClipboardAndCloneList(); +extern Part* readXmlPart(Xml&, Track*, bool doClone = false, bool toTrack = true); + +#endif + diff --git a/muse2/muse/patchbay/Makefile.am b/muse2/muse/patchbay/Makefile.am new file mode 100644 index 00000000..7588de85 --- /dev/null +++ b/muse2/muse/patchbay/Makefile.am @@ -0,0 +1,9 @@ +include $(top_srcdir)/common.am + +noinst_LTLIBRARIES = libpatchbay.la + +dist_libpatchbay_la_SOURCES = \ + patchbay.cpp patchbay.h + +nodist_libpatchbay_la_SOURCES = \ + moc_patchbay.cpp diff --git a/muse2/muse/patchbay/patchbay.cpp b/muse2/muse/patchbay/patchbay.cpp new file mode 100644 index 00000000..a03804e5 --- /dev/null +++ b/muse2/muse/patchbay/patchbay.cpp @@ -0,0 +1,10 @@ +#include "patchbay.h" + +PatchBay::PatchBay (void) { + _patchbay = new PatchBayBase (this, "patchbay"); + setCaption(tr("MusE: ALSA MIDI Patch Bay")); +} + +PatchBay::~PatchBay (void) { + if (_patchbay) delete _patchbay; +} diff --git a/muse2/muse/patchbay/patchbay.h b/muse2/muse/patchbay/patchbay.h new file mode 100644 index 00000000..14f51a82 --- /dev/null +++ b/muse2/muse/patchbay/patchbay.h @@ -0,0 +1,16 @@ +#ifndef __MUSE_PATCHBAY_H__ +#define __MUSE_PATCHBAY_H__ + +#include "cobject.h" +#include "patchbaybase.h" + +class PatchBay : public TopWin { + Q_OBJECT + PatchBayBase * _patchbay; + +public: + PatchBay (void); + ~PatchBay (void); +}; + +#endif /* __MUSE_PATCHBAY_H__ */ \ No newline at end of file diff --git a/muse2/muse/patchbay/patchbaybase.ui b/muse2/muse/patchbay/patchbaybase.ui new file mode 100644 index 00000000..7138982f --- /dev/null +++ b/muse2/muse/patchbay/patchbaybase.ui @@ -0,0 +1,36 @@ + +PatchBayBase + + + PatchBayBase + + + + 0 + 0 + 401 + 315 + + + + ALSA Patch Bay + + + + alsaPatchbay + + + + 0 + 0 + 400 + 315 + + + + ALSA Patch Bay + + + + + diff --git a/muse2/muse/plugin.cpp b/muse2/muse/plugin.cpp new file mode 100644 index 00000000..0b2911ca --- /dev/null +++ b/muse2/muse/plugin.cpp @@ -0,0 +1,3871 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: plugin.cpp,v 1.21.2.23 2009/12/15 22:07:12 spamatica Exp $ +// +// (C) Copyright 2000 Werner Schweer (ws@seh.de) +//========================================================= + +#include +//Added by qt3to4: +#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 "globals.h" +#include "gconfig.h" +#include "filedialog.h" +#include "slider.h" +#include "midictrl.h" +#include "plugin.h" +#include "xml.h" +#include "icons.h" +#include "song.h" +#include "doublelabel.h" +#include "fastlog.h" +#include "checkbox.h" + +#include "audio.h" +#include "al/dsp.h" + +#include "config.h" + +// Turn on debugging messages. +//#define PLUGIN_DEBUGIN + +PluginList plugins; + +/* +static const char* preset_file_pattern[] = { + QT_TR_NOOP("Presets (*.pre *.pre.gz *.pre.bz2)"), + QT_TR_NOOP("All Files (*)"), + 0 + }; + +static const char* preset_file_save_pattern[] = { + QT_TR_NOOP("Presets (*.pre)"), + QT_TR_NOOP("gzip compressed presets (*.pre.gz)"), + QT_TR_NOOP("bzip2 compressed presets (*.pre.bz2)"), + QT_TR_NOOP("All Files (*)"), + 0 + }; +*/ + +int PluginDialog::selectedPlugType = 0; +QStringList PluginDialog::sortItems = QStringList(); + +//--------------------------------------------------------- +// ladspa2MidiControlValues +//--------------------------------------------------------- + +bool ladspa2MidiControlValues(const LADSPA_Descriptor* plugin, int port, int ctlnum, int* min, int* max, int* def) +{ + LADSPA_PortRangeHint range = plugin->PortRangeHints[port]; + LADSPA_PortRangeHintDescriptor desc = range.HintDescriptor; + + float fmin, fmax, fdef; + int imin, imax; + float frng; + //int idef; + + //ladspaControlRange(plugin, port, &fmin, &fmax); + + bool hasdef = ladspaDefaultValue(plugin, port, &fdef); + //bool isint = desc & LADSPA_HINT_INTEGER; + MidiController::ControllerType t = midiControllerType(ctlnum); + + #ifdef PLUGIN_DEBUGIN + printf("ladspa2MidiControlValues: ctlnum:%d ladspa port:%d has default?:%d default:%f\n", ctlnum, port, hasdef, fdef); + #endif + + if(desc & LADSPA_HINT_TOGGLED) + { + #ifdef PLUGIN_DEBUGIN + printf("ladspa2MidiControlValues: has LADSPA_HINT_TOGGLED\n"); + #endif + + *min = 0; + *max = 1; + *def = (int)lrint(fdef); + return hasdef; + } + + float m = 1.0; + if(desc & LADSPA_HINT_SAMPLE_RATE) + { + #ifdef PLUGIN_DEBUGIN + printf("ladspa2MidiControlValues: has LADSPA_HINT_SAMPLE_RATE\n"); + #endif + + m = float(sampleRate); + } + + if(desc & LADSPA_HINT_BOUNDED_BELOW) + { + #ifdef PLUGIN_DEBUGIN + printf("ladspa2MidiControlValues: has LADSPA_HINT_BOUNDED_BELOW\n"); + #endif + + fmin = range.LowerBound * m; + } + else + fmin = 0.0; + + if(desc & LADSPA_HINT_BOUNDED_ABOVE) + { + #ifdef PLUGIN_DEBUGIN + printf("ladspa2MidiControlValues: has LADSPA_HINT_BOUNDED_ABOVE\n"); + #endif + + fmax = range.UpperBound * m; + } + else + fmax = 1.0; + + frng = fmax - fmin; + imin = lrint(fmin); + imax = lrint(fmax); + //irng = imax - imin; + + int ctlmn = 0; + int ctlmx = 127; + + #ifdef PLUGIN_DEBUGIN + printf("ladspa2MidiControlValues: port min:%f max:%f \n", fmin, fmax); + #endif + + //bool isneg = (fmin < 0.0); + bool isneg = (imin < 0); + int bias = 0; + switch(t) + { + case MidiController::RPN: + case MidiController::NRPN: + case MidiController::Controller7: + if(isneg) + { + ctlmn = -64; + ctlmx = 63; + bias = -64; + } + else + { + ctlmn = 0; + ctlmx = 127; + } + break; + case MidiController::Controller14: + case MidiController::RPN14: + case MidiController::NRPN14: + if(isneg) + { + ctlmn = -8192; + ctlmx = 8191; + bias = -8192; + } + else + { + ctlmn = 0; + ctlmx = 16383; + } + break; + case MidiController::Program: + ctlmn = 0; + //ctlmx = 0xffffff; + ctlmx = 0x3fff; // FIXME: Really should not happen or be allowed. What to do here... + break; + case MidiController::Pitch: + ctlmn = -8192; + ctlmx = 8191; + break; + case MidiController::Velo: // cannot happen + default: + break; + } + //int ctlrng = ctlmx - ctlmn; + float fctlrng = float(ctlmx - ctlmn); + + // Is it an integer control? + if(desc & LADSPA_HINT_INTEGER) + { + #ifdef PLUGIN_DEBUGIN + printf("ladspa2MidiControlValues: has LADSPA_HINT_INTEGER\n"); + #endif + + // If the upper or lower limit is beyond the controller limits, just scale the whole range to fit. + // We could get fancy by scaling only the negative or positive domain, or each one separately, but no... + //if((imin < ctlmn) || (imax > ctlmx)) + //{ + // float scl = float(irng) / float(fctlrng); + // if((ctlmn - imin) > (ctlmx - imax)) + // scl = float(ctlmn - imin); + // else + // scl = float(ctlmx - imax); + //} + // No, instead just clip the limits. ie fit the range into clipped space. + if(imin < ctlmn) + imin = ctlmn; + if(imax > ctlmx) + imax = ctlmx; + + *min = imin; + *max = imax; + + //int idef = (int)lrint(fdef); + //if(idef < ctlmn) + // idef = ctlmn; + //if(idef > ctlmx) + // idef = ctlmx; + //*def = idef; + + *def = (int)lrint(fdef); + + return hasdef; + } + + // It's a floating point control, just use wide open maximum range. + *min = ctlmn; + *max = ctlmx; + + float fbias = (fmin + fmax) / 2.0; + float normbias = fbias / frng; + float normdef = fdef / frng; + fdef = normdef * fctlrng; + + // FIXME: TODO: Incorrect... Fix this somewhat more trivial stuff later.... + + *def = (int)lrint(fdef) + bias; + + #ifdef PLUGIN_DEBUGIN + printf("ladspa2MidiControlValues: setting default:%d\n", *def); + #endif + + return hasdef; +} + +//--------------------------------------------------------- +// midi2LadspaValue +//--------------------------------------------------------- + +float midi2LadspaValue(const LADSPA_Descriptor* plugin, int port, int ctlnum, int val) +{ + LADSPA_PortRangeHint range = plugin->PortRangeHints[port]; + LADSPA_PortRangeHintDescriptor desc = range.HintDescriptor; + + float fmin, fmax; + int imin; + //int imax; + float frng; + //int idef; + + //ladspaControlRange(plugin, port, &fmin, &fmax); + + //bool hasdef = ladspaDefaultValue(plugin, port, &fdef); + //bool isint = desc & LADSPA_HINT_INTEGER; + MidiController::ControllerType t = midiControllerType(ctlnum); + + #ifdef PLUGIN_DEBUGIN + printf("midi2LadspaValue: ctlnum:%d ladspa port:%d val:%d\n", ctlnum, port, val); + #endif + + float m = 1.0; + if(desc & LADSPA_HINT_SAMPLE_RATE) + { + #ifdef PLUGIN_DEBUGIN + printf("midi2LadspaValue: has LADSPA_HINT_SAMPLE_RATE\n"); + #endif + + m = float(sampleRate); + } + + if(desc & LADSPA_HINT_BOUNDED_BELOW) + { + #ifdef PLUGIN_DEBUGIN + printf("midi2LadspaValue: has LADSPA_HINT_BOUNDED_BELOW\n"); + #endif + + fmin = range.LowerBound * m; + } + else + fmin = 0.0; + + if(desc & LADSPA_HINT_BOUNDED_ABOVE) + { + #ifdef PLUGIN_DEBUGIN + printf("midi2LadspaValue: has LADSPA_HINT_BOUNDED_ABOVE\n"); + #endif + + fmax = range.UpperBound * m; + } + else + fmax = 1.0; + + frng = fmax - fmin; + imin = lrint(fmin); + //imax = lrint(fmax); + //irng = imax - imin; + + if(desc & LADSPA_HINT_TOGGLED) + { + #ifdef PLUGIN_DEBUGIN + printf("midi2LadspaValue: has LADSPA_HINT_TOGGLED\n"); + #endif + + if(val > 0) + return fmax; + else + return fmin; + } + + int ctlmn = 0; + int ctlmx = 127; + + #ifdef PLUGIN_DEBUGIN + printf("midi2LadspaValue: port min:%f max:%f \n", fmin, fmax); + #endif + + //bool isneg = (fmin < 0.0); + bool isneg = (imin < 0); + int bval = val; + int cval = val; + switch(t) + { + case MidiController::RPN: + case MidiController::NRPN: + case MidiController::Controller7: + if(isneg) + { + ctlmn = -64; + ctlmx = 63; + bval -= 64; + cval -= 64; + } + else + { + ctlmn = 0; + ctlmx = 127; + cval -= 64; + } + break; + case MidiController::Controller14: + case MidiController::RPN14: + case MidiController::NRPN14: + if(isneg) + { + ctlmn = -8192; + ctlmx = 8191; + bval -= 8192; + cval -= 8192; + } + else + { + ctlmn = 0; + ctlmx = 16383; + cval -= 8192; + } + break; + case MidiController::Program: + ctlmn = 0; + ctlmx = 0xffffff; + break; + case MidiController::Pitch: + ctlmn = -8192; + ctlmx = 8191; + break; + case MidiController::Velo: // cannot happen + default: + break; + } + int ctlrng = ctlmx - ctlmn; + float fctlrng = float(ctlmx - ctlmn); + + // Is it an integer control? + if(desc & LADSPA_HINT_INTEGER) + { + float ret = float(cval); + if(ret < fmin) + ret = fmin; + if(ret > fmax) + ret = fmax; + #ifdef PLUGIN_DEBUGIN + printf("midi2LadspaValue: has LADSPA_HINT_INTEGER returning:%f\n", ret); + #endif + + return ret; + } + + // Avoid divide-by-zero error below. + if(ctlrng == 0) + return 0.0; + + // It's a floating point control, just use wide open maximum range. + float normval = float(bval) / fctlrng; + //float fbias = (fmin + fmax) / 2.0; + //float normfbias = fbias / frng; + //float ret = (normdef + normbias) * fctlrng; + //float normdef = fdef / frng; + + float ret = normval * frng + fmin; + + #ifdef PLUGIN_DEBUGIN + printf("midi2LadspaValue: float returning:%f\n", ret); + #endif + + return ret; +} + + +// Works but not needed. +/* +//--------------------------------------------------------- +// ladspa2MidiController +//--------------------------------------------------------- + +MidiController* ladspa2MidiController(const LADSPA_Descriptor* plugin, int port, int ctlnum) +{ + int min, max, def; + + if(!ladspa2MidiControlValues(plugin, port, ctlnum, &min, &max, &def)) + return 0; + + MidiController* mc = new MidiController(QString(plugin->PortNames[port]), ctlnum, min, max, def); + + return mc; +} +*/ + +//---------------------------------------------------------------------------------- +// defaultValue +// If no default ladspa value found, still sets *def to 1.0, but returns false. +//--------------------------------------------------------------------------------- + +//float ladspaDefaultValue(const LADSPA_Descriptor* plugin, int k) +bool ladspaDefaultValue(const LADSPA_Descriptor* plugin, int port, float* val) +{ + LADSPA_PortRangeHint range = plugin->PortRangeHints[port]; + LADSPA_PortRangeHintDescriptor rh = range.HintDescriptor; +// bool isLog = LADSPA_IS_HINT_LOGARITHMIC(rh); + //double val = 1.0; + float m = (rh & LADSPA_HINT_SAMPLE_RATE) ? float(sampleRate) : 1.0f; + if (LADSPA_IS_HINT_DEFAULT_MINIMUM(rh)) + { + *val = range.LowerBound * m; + return true; + } + 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); + return true; + } + else + { + *val = range.LowerBound*.75*m + range.UpperBound*.25*m; + return true; + } + } + 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); + return true; + } + else + { + *val = range.LowerBound*.5*m + range.UpperBound*.5*m; + return true; + } + } + 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); + return true; + } + else + { + *val = range.LowerBound*.25*m + range.UpperBound*.75*m; + return true; + } + } + else if (LADSPA_IS_HINT_DEFAULT_MAXIMUM(rh)) + { + *val = range.UpperBound*m; + return true; + } + else if (LADSPA_IS_HINT_DEFAULT_0(rh)) + { + *val = 0.0; + return true; + } + else if (LADSPA_IS_HINT_DEFAULT_1(rh)) + { + *val = 1.0; + return true; + } + else if (LADSPA_IS_HINT_DEFAULT_100(rh)) + { + *val = 100.0; + return true; + } + else if (LADSPA_IS_HINT_DEFAULT_440(rh)) + { + *val = 440.0; + return true; + } + + // No default found. Set return value to 1.0, but return false. + *val = 1.0; + return false; +} + +//--------------------------------------------------------- +// ladspaControlRange +//--------------------------------------------------------- + +void ladspaControlRange(const LADSPA_Descriptor* plugin, int i, float* min, float* max) + { + LADSPA_PortRangeHint range = plugin->PortRangeHints[i]; + LADSPA_PortRangeHintDescriptor desc = range.HintDescriptor; + if (desc & LADSPA_HINT_TOGGLED) { + *min = 0.0; + *max = 1.0; + return; + } + float m = 1.0; + if (desc & LADSPA_HINT_SAMPLE_RATE) + m = float(sampleRate); + + 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; + } + +//--------------------------------------------------------- +// Plugin +//--------------------------------------------------------- + +Plugin::Plugin(QFileInfo* f, const LADSPA_Descriptor* d, bool isDssi) +{ + _isDssi = isDssi; + #ifdef DSSI_SUPPORT + dssi_descr = NULL; + #endif + + fi = *f; + plugin = NULL; + ladspa = NULL; + _handle = 0; + _references = 0; + _instNo = 0; + _label = QString(d->Label); + _name = QString(d->Name); + _uniqueID = d->UniqueID; + _maker = QString(d->Maker); + _copyright = QString(d->Copyright); + + _portCount = d->PortCount; + //_portDescriptors = 0; + //if(_portCount) + // _portDescriptors = new LADSPA_PortDescriptor[_portCount]; + + + _inports = 0; + _outports = 0; + _controlInPorts = 0; + _controlOutPorts = 0; + for(unsigned long k = 0; k < _portCount; ++k) + { + LADSPA_PortDescriptor pd = d->PortDescriptors[k]; + //_portDescriptors[k] = pd; + if(pd & LADSPA_PORT_AUDIO) + { + if(pd & LADSPA_PORT_INPUT) + ++_inports; + else + if(pd & LADSPA_PORT_OUTPUT) + ++_outports; + } + else + if(pd & LADSPA_PORT_CONTROL) + { + if(pd & LADSPA_PORT_INPUT) + ++_controlInPorts; + else + if(pd & LADSPA_PORT_OUTPUT) + ++_controlOutPorts; + } + } + + _inPlaceCapable = !LADSPA_IS_INPLACE_BROKEN(d->Properties); + + // By T356. Blacklist vst plugins in-place configurable for now. At one point they + // were working with in-place here, but not now, and RJ also reported they weren't working. + // Fixes problem with vst plugins not working or feeding back loudly. + // I can only think of two things that made them stop working: + // 1): I switched back from Jack-2 to Jack-1 + // 2): I changed winecfg audio to use Jack instead of ALSA. + // Will test later... + // Possibly the first one because under Mandriva2007.1 (Jack-1), no matter how hard I tried, + // the same problem existed. It may have been when using Jack-2 with Mandriva2009 that they worked. + // Apparently the plugins are lying about their in-place capability. + // Quote: + /* 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.' */ + // Examination of all my ladspa and vst synths and effects plugins showed only one - + // EnsembleLite (EnsLite VST) has the flag set, but it is a vst synth and is not involved here! + // Yet many (all?) ladspa vst effect plugins exhibit this problem. + // Changed by Tim. p3.3.14 + if ((_inports != _outports) || (fi.baseName(true) == QString("dssi-vst") && !config.vstInPlace)) + _inPlaceCapable = false; +} + +Plugin::~Plugin() +{ + //if(_portDescriptors) + // delete[] _portDescriptors; +} + +//--------------------------------------------------------- +// incReferences +//--------------------------------------------------------- + +int Plugin::incReferences(int val) +{ + #ifdef PLUGIN_DEBUGIN + fprintf(stderr, "Plugin::incReferences _references:%d val:%d\n", _references, val); + #endif + + int newref = _references + val; + + if(newref == 0) + { + _references = 0; + if(_handle) + { + #ifdef PLUGIN_DEBUGIN + fprintf(stderr, "Plugin::incReferences no more instances, closing library\n"); + #endif + + dlclose(_handle); + } + + _handle = 0; + ladspa = NULL; + plugin = NULL; + rpIdx.clear(); + + #ifdef DSSI_SUPPORT + dssi_descr = NULL; + #endif + + return 0; + } + + //if(_references == 0) + if(_handle == 0) + { + //_references = 0; + _handle = dlopen(fi.filePath().latin1(), RTLD_NOW); + //handle = dlopen(fi.absFilePath().latin1(), RTLD_NOW); + + if(_handle == 0) + { + fprintf(stderr, "Plugin::incReferences dlopen(%s) failed: %s\n", + fi.filePath().latin1(), dlerror()); + //fi.absFilePath().latin1(), dlerror()); + return 0; + } + + #ifdef DSSI_SUPPORT + DSSI_Descriptor_Function dssi = (DSSI_Descriptor_Function)dlsym(_handle, "dssi_descriptor"); + if(dssi) + { + const DSSI_Descriptor* descr; + for(int i = 0;; ++i) + { + descr = dssi(i); + if(descr == NULL) + break; + + QString label(descr->LADSPA_Plugin->Label); + // Listing effect plugins only while excluding synths: + // Do exactly what dssi-vst.cpp does for listing ladspa plugins. + //if(label == _name && + if(label == _label && + !descr->run_synth && + !descr->run_synth_adding && + !descr->run_multiple_synths && + !descr->run_multiple_synths_adding) + { + _isDssi = true; + ladspa = NULL; + dssi_descr = descr; + plugin = descr->LADSPA_Plugin; + break; + } + } + } + else + #endif // DSSI_SUPPORT + { + LADSPA_Descriptor_Function ladspadf = (LADSPA_Descriptor_Function)dlsym(_handle, "ladspa_descriptor"); + if(ladspadf) + { + const LADSPA_Descriptor* descr; + for(int i = 0;; ++i) + { + descr = ladspadf(i); + if(descr == NULL) + break; + + QString label(descr->Label); + //if(label == _name) + if(label == _label) + { + _isDssi = false; + ladspa = ladspadf; + plugin = descr; + + #ifdef DSSI_SUPPORT + dssi_descr = NULL; + #endif + + break; + } + } + } + } + + if(plugin != NULL) + { + //_instNo = 0; + _name = QString(plugin->Name); + _uniqueID = plugin->UniqueID; + _maker = QString(plugin->Maker); + _copyright = QString(plugin->Copyright); + + //if(_portDescriptors) + // delete[] _portDescriptors; + //_portDescriptors = 0; + _portCount = plugin->PortCount; + //if(_portCount) + // _portDescriptors = new LADSPA_PortDescriptor[_portCount]; + + _inports = 0; + _outports = 0; + _controlInPorts = 0; + _controlOutPorts = 0; + for(unsigned long k = 0; k < _portCount; ++k) + { + LADSPA_PortDescriptor pd = plugin->PortDescriptors[k]; + //_portDescriptors[k] = pd; + if(pd & LADSPA_PORT_AUDIO) + { + if(pd & LADSPA_PORT_INPUT) + ++_inports; + else + if(pd & LADSPA_PORT_OUTPUT) + ++_outports; + + rpIdx.push_back((unsigned long)-1); + } + else + if(pd & LADSPA_PORT_CONTROL) + { + if(pd & LADSPA_PORT_INPUT) + { + rpIdx.push_back(_controlInPorts); + ++_controlInPorts; + } + else + if(pd & LADSPA_PORT_OUTPUT) + { + rpIdx.push_back((unsigned long)-1); + ++_controlOutPorts; + } + } + } + + _inPlaceCapable = !LADSPA_IS_INPLACE_BROKEN(plugin->Properties); + + // Blacklist vst plugins in-place configurable for now. + if ((_inports != _outports) || (fi.baseName(true) == QString("dssi-vst") && !config.vstInPlace)) + _inPlaceCapable = false; + } + } + + if(plugin == NULL) + { + dlclose(_handle); + _handle = 0; + _references = 0; + fprintf(stderr, "Plugin::incReferences Error: %s no plugin!\n", fi.filePath().latin1()); + return 0; + } + + _references = newref; + + //QString guiPath(info.dirPath() + "/" + info.baseName()); + //QDir guiDir(guiPath, "*", QDir::Unsorted, QDir::Files); + //_hasGui = guiDir.exists(); + + return _references; +} + +//--------------------------------------------------------- +// range +//--------------------------------------------------------- + +void Plugin::range(unsigned long i, float* min, float* max) const + { + LADSPA_PortRangeHint range = plugin->PortRangeHints[i]; + LADSPA_PortRangeHintDescriptor desc = range.HintDescriptor; + if (desc & LADSPA_HINT_TOGGLED) { + *min = 0.0; + *max = 1.0; + return; + } + float m = 1.0; + if (desc & LADSPA_HINT_SAMPLE_RATE) + m = float(sampleRate); + + 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; + } + +//--------------------------------------------------------- +// defaultValue +//--------------------------------------------------------- + +double Plugin::defaultValue(unsigned long port) const +{ + if(port >= plugin->PortCount) + return 0.0; + + LADSPA_PortRangeHint range = plugin->PortRangeHints[port]; + LADSPA_PortRangeHintDescriptor rh = range.HintDescriptor; + double val = 1.0; + if (LADSPA_IS_HINT_DEFAULT_MINIMUM(rh)) + val = range.LowerBound; + else if (LADSPA_IS_HINT_DEFAULT_LOW(rh)) + if (LADSPA_IS_HINT_LOGARITHMIC(range.HintDescriptor)) + val = exp(fast_log10(range.LowerBound) * .75 + + log(range.UpperBound) * .25); + else + val = range.LowerBound*.75 + range.UpperBound*.25; + else if (LADSPA_IS_HINT_DEFAULT_MIDDLE(rh)) + if (LADSPA_IS_HINT_LOGARITHMIC(range.HintDescriptor)) + val = exp(log(range.LowerBound) * .5 + + log(range.UpperBound) * .5); + else + val = range.LowerBound*.5 + range.UpperBound*.5; + else if (LADSPA_IS_HINT_DEFAULT_HIGH(rh)) + if (LADSPA_IS_HINT_LOGARITHMIC(range.HintDescriptor)) + val = exp(log(range.LowerBound) * .25 + + log(range.UpperBound) * .75); + else + val = range.LowerBound*.25 + range.UpperBound*.75; + else if (LADSPA_IS_HINT_DEFAULT_MAXIMUM(rh)) + val = range.UpperBound; + 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; +} + +//--------------------------------------------------------- +// loadPluginLib +//--------------------------------------------------------- + +static void loadPluginLib(QFileInfo* fi) +{ + void* handle = dlopen(fi->filePath().ascii(), RTLD_NOW); + if (handle == 0) { + fprintf(stderr, "dlopen(%s) failed: %s\n", + fi->filePath().ascii(), dlerror()); + return; + } + + #ifdef DSSI_SUPPORT + DSSI_Descriptor_Function dssi = (DSSI_Descriptor_Function)dlsym(handle, "dssi_descriptor"); + if(dssi) + { + const DSSI_Descriptor* descr; + for (int i = 0;; ++i) + { + descr = dssi(i); + if (descr == 0) + break; + + // Listing effect plugins only while excluding synths: + // Do exactly what dssi-vst.cpp does for listing ladspa plugins. + if(!descr->run_synth && + !descr->run_synth_adding && + !descr->run_multiple_synths && + !descr->run_multiple_synths_adding) + { + // Make sure it doesn't already exist. + if(plugins.find(fi->baseName(true), QString(descr->LADSPA_Plugin->Label)) != 0) + continue; + + #ifdef PLUGIN_DEBUGIN + fprintf(stderr, "loadPluginLib: dssi effect name:%s inPlaceBroken:%d\n", descr->LADSPA_Plugin->Name, LADSPA_IS_INPLACE_BROKEN(descr->LADSPA_Plugin->Properties)); + #endif + + //LADSPA_Properties properties = descr->LADSPA_Plugin->Properties; + //bool inPlaceBroken = LADSPA_IS_INPLACE_BROKEN(properties); + //plugins.add(fi, descr, !inPlaceBroken); + plugins.add(fi, descr->LADSPA_Plugin, true); + } + } + } + else + #endif + { + 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().ascii(), + txt); + } + dlclose(handle); + return; + } + + const LADSPA_Descriptor* descr; + for (int i = 0;; ++i) + { + descr = ladspa(i); + if (descr == NULL) + break; + + // Make sure it doesn't already exist. + if(plugins.find(fi->baseName(true), QString(descr->Label)) != 0) + continue; + + #ifdef PLUGIN_DEBUGIN + fprintf(stderr, "loadPluginLib: ladspa effect name:%s inPlaceBroken:%d\n", descr->Name, LADSPA_IS_INPLACE_BROKEN(descr->Properties)); + #endif + + //LADSPA_Properties properties = descr->Properties; + //bool inPlaceBroken = LADSPA_IS_INPLACE_BROKEN(properties); + //plugins.add(fi, ladspa, descr, !inPlaceBroken); + plugins.add(fi, descr); + } + } + + dlclose(handle); +} + +//--------------------------------------------------------- +// loadPluginDir +//--------------------------------------------------------- + +static void loadPluginDir(const QString& s) + { + if (debugMsg) + printf("scan ladspa plugin dir <%s>\n", s.latin1()); + QDir pluginDir(s, QString("*.so")); // ddskrjo + if (pluginDir.exists()) { + QFileInfoList list = pluginDir.entryInfoList(); + QFileInfoListIterator it=list.begin(); + while(it != list.end()) { + loadPluginLib(&*it); + ++it; + } + } + } + +//--------------------------------------------------------- +// initPlugins +//--------------------------------------------------------- + +void initPlugins() + { + loadPluginDir(museGlobalLib + QString("/plugins")); + + const char* p = 0; + + // Take care of DSSI plugins first... + #ifdef DSSI_SUPPORT + const char* dssiPath = getenv("DSSI_PATH"); + if (dssiPath == 0) + dssiPath = "/usr/local/lib64/dssi:/usr/lib64/dssi:/usr/local/lib/dssi:/usr/lib/dssi"; + 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'; + loadPluginDir(QString(buffer)); + delete[] buffer; + } + p = pe; + if (*p == ':') + p++; + } + #endif + + // Now do LADSPA plugins... + const char* ladspaPath = getenv("LADSPA_PATH"); + if (ladspaPath == 0) + ladspaPath = "/usr/local/lib64/ladspa:/usr/lib64/ladspa:/usr/local/lib/ladspa:/usr/lib/ladspa"; + p = ladspaPath; + + if(debugMsg) + fprintf(stderr, "loadPluginLib: ladspa path:%s\n", 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'; + if(debugMsg) + fprintf(stderr, "loadPluginLib: loading ladspa dir:%s\n", buffer); + + loadPluginDir(QString(buffer)); + delete[] buffer; + } + p = pe; + if (*p == ':') + p++; + } + } + +//--------------------------------------------------------- +// 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("Plugin <%s> not found\n", name.ascii()); + return 0; + } + +//--------------------------------------------------------- +// Pipeline +//--------------------------------------------------------- + +Pipeline::Pipeline() + : std::vector() + { + // Added by Tim. p3.3.15 + for (int i = 0; i < MAX_CHANNELS; ++i) + posix_memalign((void**)(buffer + i), 16, sizeof(float) * segmentSize); + + for (int i = 0; i < PipelineDepth; ++i) + push_back(0); + } + +//--------------------------------------------------------- +// ~Pipeline +//--------------------------------------------------------- + +Pipeline::~Pipeline() + { + removeAll(); + for (int i = 0; i < MAX_CHANNELS; ++i) + ::free(buffer[i]); + } + +//--------------------------------------------------------- +// setChannels +//--------------------------------------------------------- + +void Pipeline::setChannels(int n) + { + for (int i = 0; i < PipelineDepth; ++i) + if ((*this)[i]) + (*this)[i]->setChannels(n); + } + +//--------------------------------------------------------- +// insert +// give ownership of object plugin to Pipeline +//--------------------------------------------------------- + +void Pipeline::insert(PluginI* plugin, int index) + { + remove(index); + (*this)[index] = plugin; + } + +//--------------------------------------------------------- +// remove +//--------------------------------------------------------- + +void Pipeline::remove(int index) + { + PluginI* plugin = (*this)[index]; + if (plugin) + delete plugin; + (*this)[index] = 0; + } + +//--------------------------------------------------------- +// removeAll +//--------------------------------------------------------- + +void Pipeline::removeAll() + { + for (int i = 0; i < PipelineDepth; ++i) + remove(i); + } + +//--------------------------------------------------------- +// isOn +//--------------------------------------------------------- + +bool Pipeline::isOn(int idx) const + { + PluginI* p = (*this)[idx]; + if (p) + return p->on(); + return false; + } + +//--------------------------------------------------------- +// setOn +//--------------------------------------------------------- + +void Pipeline::setOn(int idx, bool flag) + { + PluginI* p = (*this)[idx]; + if (p) { + p->setOn(flag); + if (p->gui()) + p->gui()->setOn(flag); + } + } + +//--------------------------------------------------------- +// label +//--------------------------------------------------------- + +QString Pipeline::label(int idx) const + { + PluginI* p = (*this)[idx]; + if (p) + return p->label(); + return QString(""); + } + +//--------------------------------------------------------- +// name +//--------------------------------------------------------- + +QString Pipeline::name(int idx) const + { + PluginI* p = (*this)[idx]; + if (p) + return p->name(); + return QString("empty"); + } + +//--------------------------------------------------------- +// empty +//--------------------------------------------------------- + +bool Pipeline::empty(int idx) const + { + PluginI* p = (*this)[idx]; + return p == 0; + } + +//--------------------------------------------------------- +// move +//--------------------------------------------------------- + +void Pipeline::move(int idx, bool up) +{ + PluginI* p1 = (*this)[idx]; + if (up) + { + (*this)[idx] = (*this)[idx-1]; + + if((*this)[idx]) + (*this)[idx]->setID(idx); + + (*this)[idx-1] = p1; + + if(p1) + { + p1->setID(idx - 1); + if(p1->track()) + audio->msgSwapControllerIDX(p1->track(), idx, idx - 1); + } + } + else + { + (*this)[idx] = (*this)[idx+1]; + + if((*this)[idx]) + (*this)[idx]->setID(idx); + + (*this)[idx+1] = p1; + + if(p1) + { + p1->setID(idx + 1); + if(p1->track()) + audio->msgSwapControllerIDX(p1->track(), idx, idx + 1); + } + } +} + +//--------------------------------------------------------- +// isDssiPlugin +//--------------------------------------------------------- + +bool Pipeline::isDssiPlugin(int idx) const +{ + PluginI* p = (*this)[idx]; + if(p) + return p->isDssiPlugin(); + + return false; +} + +//--------------------------------------------------------- +// 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) + { + #ifdef OSC_SUPPORT + PluginI* p = (*this)[idx]; + if (p) + p->oscIF().oscShowGui(flag); + #endif + } + +//--------------------------------------------------------- +// deleteGui +//--------------------------------------------------------- + +void Pipeline::deleteGui(int idx) +{ + if(idx >= PipelineDepth) + return; + PluginI* p = (*this)[idx]; + if(p) + p->deleteGui(); +} + +//--------------------------------------------------------- +// deleteAllGuis +//--------------------------------------------------------- + +void Pipeline::deleteAllGuis() +{ + for(int i = 0; i < PipelineDepth; i++) + deleteGui(i); +} + +//--------------------------------------------------------- +// 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 + + // Removed by Tim. p3.3.15 + //float* buffer2[ports]; + //float data[nframes * ports]; + //for (int i = 0; i < ports; ++i) + // buffer2[i] = data + i * nframes; + + // p3.3.41 + //fprintf(stderr, "Pipeline::apply data: nframes:%ld %e %e %e %e\n", nframes, buffer1[0][0], buffer1[0][1], buffer1[0][2], buffer1[0][3]); + + bool swap = false; + + for (iPluginI ip = begin(); ip != end(); ++ip) { + PluginI* p = *ip; + if (p && p->on()) { + if (p->inPlaceCapable()) + { + if (swap) + //p->connect(ports, buffer2, buffer2); + p->connect(ports, buffer, buffer); + else + p->connect(ports, buffer1, buffer1); + } + else + { + if (swap) + //p->connect(ports, buffer2, buffer1); + p->connect(ports, buffer, buffer1); + else + //p->connect(ports, buffer1, buffer2); + p->connect(ports, buffer1, buffer); + swap = !swap; + } + p->apply(nframes); + } + } + if (swap) + { + for (int i = 0; i < ports; ++i) + //memcpy(buffer1[i], buffer2[i], sizeof(float) * nframes); + //memcpy(buffer1[i], buffer[i], sizeof(float) * nframes); + AL::dsp->cpy(buffer1[i], buffer[i], nframes); + } + + // p3.3.41 + //fprintf(stderr, "Pipeline::apply after data: nframes:%ld %e %e %e %e\n", nframes, buffer1[0][0], buffer1[0][1], buffer1[0][2], buffer1[0][3]); + +} + +//--------------------------------------------------------- +// PluginI +//--------------------------------------------------------- + +void PluginI::init() + { + _plugin = 0; + instances = 0; + handle = 0; + controls = 0; + controlsOut = 0; + controlPorts = 0; + controlOutPorts = 0; + _gui = 0; + _on = true; + initControlValues = false; + _showNativeGuiPending = false; + } + +PluginI::PluginI() + { + _id = -1; + _track = 0; + + init(); + } + +//--------------------------------------------------------- +// PluginI +//--------------------------------------------------------- + +PluginI::~PluginI() + { + if (_plugin) { + deactivate(); + _plugin->incReferences(-1); + } + if (_gui) + delete _gui; + if (controlsOut) + delete[] controlsOut; + if (controls) + delete[] controls; + if (handle) + delete[] handle; + } + +//--------------------------------------------------------- +// setID +//--------------------------------------------------------- + +void PluginI::setID(int i) +{ + _id = i; +} + +//--------------------------------------------------------- +// updateControllers +//--------------------------------------------------------- + +void PluginI::updateControllers() +{ + if(!_track) + return; + + for(int i = 0; i < controlPorts; ++i) + //audio->msgSetPluginCtrlVal(this, genACnum(_id, i), controls[i].val); + // p3.3.43 + audio->msgSetPluginCtrlVal(_track, genACnum(_id, i), controls[i].val); +} + +//--------------------------------------------------------- +// valueType +//--------------------------------------------------------- + +CtrlValueType PluginI::valueType() const + { + return VAL_LINEAR; + } + +//--------------------------------------------------------- +// setChannel +//--------------------------------------------------------- + +void PluginI::setChannels(int c) +{ + // p3.3.41 Removed + //if (channel == c) + // return; + + // p3.3.41 + channel = c; + + //int ni = c / _plugin->outports(); + //if (ni == 0) + // ni = 1; + // p3.3.41 Some plugins have zero out ports, causing exception with the above line. + // Also, pick the least number of ins or outs, and base the number of instances on that. + unsigned long ins = _plugin->inports(); + unsigned long outs = _plugin->outports(); + /* + unsigned long minports = ~0ul; + if(outs && outs < minports) + minports = outs; + if(ins && ins < minports) + minports = ins; + if(minports == ~0ul) + minports = 1; + int ni = c / minports; + */ + int ni = 1; + if(outs) + ni = c / outs; + else + if(ins) + ni = c / ins; + + if(ni < 1) + ni = 1; + + if (ni == instances) + return; + + // p3.3.41 Moved above. + //channel = c; + + // remove old instances: + deactivate(); + delete[] handle; + instances = ni; + handle = new LADSPA_Handle[instances]; + for (int i = 0; i < instances; ++i) { + handle[i] = _plugin->instantiate(); + if (handle[i] == NULL) { + printf("cannot instantiate instance %d\n", i); + return; + } + } + + int curPort = 0; + int curOutPort = 0; + unsigned long ports = _plugin->ports(); + for (unsigned long k = 0; k < ports; ++k) + { + LADSPA_PortDescriptor pd = _plugin->portd(k); + if (pd & LADSPA_PORT_CONTROL) + { + if(pd & LADSPA_PORT_INPUT) + { + for (int i = 0; i < instances; ++i) + _plugin->connectPort(handle[i], k, &controls[curPort].val); + controls[curPort].idx = k; + ++curPort; + } + else + if(pd & LADSPA_PORT_OUTPUT) + { + for (int i = 0; i < instances; ++i) + _plugin->connectPort(handle[i], k, &controlsOut[curOutPort].val); + controlsOut[curOutPort].idx = k; + ++curOutPort; + } + } + } + + activate(); +} + +//--------------------------------------------------------- +// defaultValue +//--------------------------------------------------------- + +double PluginI::defaultValue(unsigned int param) const +{ +//#warning controlPorts should really be unsigned + if(param >= (unsigned)controlPorts) + return 0.0; + + return _plugin->defaultValue(controls[param].idx); +} + +LADSPA_Handle Plugin::instantiate() +{ + LADSPA_Handle h = plugin->instantiate(plugin, sampleRate); + if(h == NULL) + { + fprintf(stderr, "Plugin::instantiate() Error: plugin:%s instantiate failed!\n", plugin->Label); + return NULL; + } + + //QString guiPath(info.dirPath() + "/" + info.baseName()); + //QDir guiDir(guiPath, "*", QDir::Unsorted, QDir::Files); + //_hasGui = guiDir.exists(); + + return h; +} + +//--------------------------------------------------------- +// initPluginInstance +// return true on error +//--------------------------------------------------------- + +bool PluginI::initPluginInstance(Plugin* plug, int c) + { + channel = c; + if(plug == 0) + { + printf("initPluginInstance: zero plugin\n"); + return true; + } + _plugin = plug; + + _plugin->incReferences(1); + + #ifdef OSC_SUPPORT + _oscif.oscSetPluginI(this); + #endif + + QString inst("-" + QString::number(_plugin->instNo())); + _name = _plugin->name() + inst; + _label = _plugin->label() + inst; + + //instances = channel/plug->outports(); + // p3.3.41 Some plugins have zero out ports, causing exception with the above line. + // Also, pick the least number of ins or outs, and base the number of instances on that. + unsigned long ins = plug->inports(); + unsigned long outs = plug->outports(); + /* + unsigned long minports = ~0ul; + if(outs && outs < minports) + minports = outs; + if(ins && ins < minports) + minports = ins; + if(minports == ~0ul) + minports = 1; + instances = channel / minports; + if(instances < 1) + instances = 1; + */ + if(outs) + { + instances = channel / outs; + if(instances < 1) + instances = 1; + } + else + if(ins) + { + instances = channel / ins; + if(instances < 1) + instances = 1; + } + else + instances = 1; + + handle = new LADSPA_Handle[instances]; + for(int i = 0; i < instances; ++i) + { + #ifdef PLUGIN_DEBUGIN + fprintf(stderr, "PluginI::initPluginInstance instance:%d\n", i); + #endif + + handle[i] = _plugin->instantiate(); + //if (handle[i] == 0) + if(handle[i] == NULL) + return true; + } + + unsigned long ports = _plugin->ports(); + + controlPorts = 0; + controlOutPorts = 0; + + for(unsigned long k = 0; k < ports; ++k) + { + LADSPA_PortDescriptor pd = _plugin->portd(k); + if(pd & LADSPA_PORT_CONTROL) + { + if(pd & LADSPA_PORT_INPUT) + ++controlPorts; + else + if(pd & LADSPA_PORT_OUTPUT) + ++controlOutPorts; + } + } + + controls = new Port[controlPorts]; + controlsOut = new Port[controlOutPorts]; + + int i = 0; + int ii = 0; + for(unsigned long k = 0; k < ports; ++k) + { + LADSPA_PortDescriptor pd = _plugin->portd(k); + if(pd & LADSPA_PORT_CONTROL) + { + if(pd & LADSPA_PORT_INPUT) + { + double val = _plugin->defaultValue(k); + controls[i].val = val; + controls[i].tmpVal = val; + controls[i].enCtrl = true; + controls[i].en2Ctrl = true; + ++i; + } + else + if(pd & LADSPA_PORT_OUTPUT) + { + //double val = _plugin->defaultValue(k); + controlsOut[ii].val = 0.0; + controlsOut[ii].tmpVal = 0.0; + controlsOut[ii].enCtrl = false; + controlsOut[ii].en2Ctrl = false; + ++ii; + } + } + } + unsigned long curPort = 0; + unsigned long curOutPort = 0; + for(unsigned long k = 0; k < ports; ++k) + { + LADSPA_PortDescriptor pd = _plugin->portd(k); + if(pd & LADSPA_PORT_CONTROL) + { + if(pd & LADSPA_PORT_INPUT) + { + for(int i = 0; i < instances; ++i) + _plugin->connectPort(handle[i], k, &controls[curPort].val); + controls[curPort].idx = k; + ++curPort; + } + else + if(pd & LADSPA_PORT_OUTPUT) + { + for(int i = 0; i < instances; ++i) + _plugin->connectPort(handle[i], k, &controlsOut[curOutPort].val); + controlsOut[curOutPort].idx = k; + ++curOutPort; + } + } + } + activate(); + return false; + } + +//--------------------------------------------------------- +// connect +//--------------------------------------------------------- + +void PluginI::connect(int ports, float** src, float** dst) + { + int port = 0; + for (int i = 0; i < instances; ++i) { + for (unsigned long k = 0; k < _plugin->ports(); ++k) { + if (isAudioIn(k)) { + _plugin->connectPort(handle[i], k, src[port]); + port = (port + 1) % ports; + } + } + } + port = 0; + for (int i = 0; i < instances; ++i) { + for (unsigned long k = 0; k < _plugin->ports(); ++k) { + if (isAudioOut(k)) { + _plugin->connectPort(handle[i], k, dst[port]); + port = (port + 1) % ports; // overwrite output? +// ++port; +// if (port >= ports) { +// return; +// } + } + } + } + } + +//--------------------------------------------------------- +// deactivate +//--------------------------------------------------------- + +void PluginI::deactivate() + { + for (int i = 0; i < instances; ++i) { + _plugin->deactivate(handle[i]); + _plugin->cleanup(handle[i]); + } + } + +//--------------------------------------------------------- +// activate +//--------------------------------------------------------- + +void PluginI::activate() + { + for (int i = 0; i < instances; ++i) + _plugin->activate(handle[i]); + if (initControlValues) { + for (int i = 0; i < controlPorts; ++i) { + controls[i].val = controls[i].tmpVal; + } + } + else { + // + // get initial control values from plugin + // + for (int i = 0; i < controlPorts; ++i) { + controls[i].tmpVal = controls[i].val; + } + } + } + +//--------------------------------------------------------- +// setControl +// set plugin instance controller value by name +//--------------------------------------------------------- + +bool PluginI::setControl(const QString& s, double val) + { + for (int i = 0; i < controlPorts; ++i) { + if (_plugin->portName(controls[i].idx) == s) { + controls[i].val = controls[i].tmpVal = val; + return false; + } + } + printf("PluginI:setControl(%s, %f) controller not found\n", + s.latin1(), val); + return true; + } + +//--------------------------------------------------------- +// saveConfiguration +//--------------------------------------------------------- + +void PluginI::writeConfiguration(int level, Xml& xml) + { + xml.tag(level++, "plugin file=\"%s\" label=\"%s\" channel=\"%d\"", + //_plugin->lib().latin1(), _plugin->label().latin1(), instances * _plugin->inports()); + // p3.3.41 + //_plugin->lib().latin1(), _plugin->label().latin1(), channel); + Xml::xmlString(_plugin->lib()).latin1(), Xml::xmlString(_plugin->label()).latin1(), channel); + + for (int i = 0; i < controlPorts; ++i) { + int idx = controls[i].idx; + QString s("control name=\"%1\" val=\"%2\" /"); + //xml.tag(level, s.arg(_plugin->portName(idx)).arg(controls[i].tmpVal).latin1()); + xml.tag(level, s.arg(Xml::xmlString(_plugin->portName(idx)).latin1()).arg(controls[i].tmpVal).latin1()); + } + if (_on == false) + xml.intTag(level, "on", _on); + if (guiVisible()) { + xml.intTag(level, "gui", 1); + xml.geometryTag(level, "geometry", _gui); + } + if (nativeGuiVisible()) { + xml.intTag(level, "nativegui", 1); + // TODO: + //xml.geometryTag(level, "nativegeometry", ?); + } + xml.tag(level--, "/plugin"); + } + +//--------------------------------------------------------- +// loadControl +//--------------------------------------------------------- + +bool PluginI::loadControl(Xml& xml) + { + QString file; + QString label; + QString name("mops"); + double val = 0.0; + + for (;;) { + Xml::Token token = xml.parse(); + const QString& tag = xml.s1(); + + switch (token) { + case Xml::Error: + case Xml::End: + return true; + case Xml::TagStart: + xml.unknown("PluginI-Control"); + break; + case Xml::Attribut: + if (tag == "name") + name = xml.s2(); + else if (tag == "val") + val = xml.s2().toDouble(); + break; + case Xml::TagEnd: + if (tag == "control") { + if (setControl(name, val)) { + return false; + } + initControlValues = true; + } + return true; + default: + break; + } + } + return true; + } + +//--------------------------------------------------------- +// readConfiguration +// return true on error +//--------------------------------------------------------- + +bool PluginI::readConfiguration(Xml& xml, bool readPreset) + { + QString file; + QString label; + if (!readPreset) + //instances = 1; + // p3.3.41 + channel = 1; + + for (;;) { + Xml::Token token(xml.parse()); + const QString& tag(xml.s1()); + switch (token) { + case Xml::Error: + case Xml::End: + return true; + case Xml::TagStart: + if (!readPreset && _plugin == 0) { + _plugin = plugins.find(file, label); + + //if (_plugin && initPluginInstance(_plugin, instances)) { + // p3.3.41 + if (_plugin && initPluginInstance(_plugin, channel)) { + _plugin = 0; + xml.parse1(); + break; + } + } + if (tag == "control") + loadControl(xml); + else if (tag == "on") { + bool flag = xml.parseInt(); + if (!readPreset) + _on = flag; + } + else if (tag == "gui") { + bool flag = xml.parseInt(); + showGui(flag); + } + else if (tag == "nativegui") { + // We can't tell OSC to show the native plugin gui + // until the parent track is added to the lists. + // OSC needs to find the plugin in the track lists. + // Use this 'pending' flag so it gets done later. + _showNativeGuiPending = xml.parseInt(); + } + else if (tag == "geometry") { + QRect r(readGeometry(xml, tag)); + if (_gui) { + _gui->resize(r.size()); + _gui->move(r.topLeft()); + } + } + else + xml.unknown("PluginI"); + break; + case Xml::Attribut: + if (tag == "file") { + QString s = xml.s2(); + if (readPreset) { + if (s != plugin()->lib()) { + printf("Error: Wrong preset type %s. Type must be a %s\n", + s.latin1(), plugin()->lib().latin1()); + return true; + } + } + else { + file = s; + } + } + else if (tag == "label") { + if (!readPreset) + label = xml.s2(); + } + else if (tag == "channel") { + if (!readPreset) + //instances = xml.s2().toInt(); + // p3.3.41 + channel = xml.s2().toInt(); + } + break; + case Xml::TagEnd: + if (tag == "plugin") { + if (!readPreset && _plugin == 0) { + _plugin = plugins.find(file, label); + if (_plugin == 0) + return true; + + //if (initPluginInstance(_plugin, instances)) + // p3.3.41 + if (initPluginInstance(_plugin, channel)) + return true; + } + if (_gui) + _gui->updateValues(); + return false; + } + return true; + default: + break; + } + } + return true; + } + +//--------------------------------------------------------- +// 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() + { + return _gui && _gui->isVisible(); + } + +//--------------------------------------------------------- +// showNativeGui +//--------------------------------------------------------- + +void PluginI::showNativeGui() +{ + #ifdef OSC_SUPPORT + if (_plugin) + { + if (_oscif.oscGuiVisible()) + _oscif.oscShowGui(false); + else + _oscif.oscShowGui(true); + } + #endif + _showNativeGuiPending = false; +} + +void PluginI::showNativeGui(bool flag) +{ + #ifdef OSC_SUPPORT + if(_plugin) + { + _oscif.oscShowGui(flag); + } + #endif + _showNativeGuiPending = false; +} + +//--------------------------------------------------------- +// nativeGuiVisible +//--------------------------------------------------------- + +bool PluginI::nativeGuiVisible() +{ + #ifdef OSC_SUPPORT + return _oscif.oscGuiVisible(); + #endif + + return false; +} + +//--------------------------------------------------------- +// makeGui +//--------------------------------------------------------- + +void PluginI::makeGui() + { + _gui = new PluginGui(this); + } + +//--------------------------------------------------------- +// deleteGui +//--------------------------------------------------------- +void PluginI::deleteGui() +{ + if(_gui) + { + delete _gui; + _gui = 0; + } +} + +//--------------------------------------------------------- +// enableAllControllers +//--------------------------------------------------------- + +void PluginI::enableAllControllers(bool v) +{ + for(int i = 0; i < controlPorts; ++i) + controls[i].enCtrl = v; +} + +//--------------------------------------------------------- +// enable2AllControllers +//--------------------------------------------------------- + +void PluginI::enable2AllControllers(bool v) +{ + for(int i = 0; i < controlPorts; ++i) + controls[i].en2Ctrl = v; +} + +//--------------------------------------------------------- +// apply +//--------------------------------------------------------- + +void PluginI::apply(int n) +{ + // Process control value changes. + //if(automation && _track && _track->automationType() != AUTO_OFF && _id != -1) + //{ + // for(int i = 0; i < controlPorts; ++i) + // { + // if( controls[i].enCtrl && controls[i].en2Ctrl ) + // controls[i].tmpVal = _track->pluginCtrlVal(genACnum(_id, i)); + // } + //} + + unsigned long ctls = controlPorts; + for(unsigned long k = 0; k < ctls; ++k) + { + // First, update the temporary value if needed... + + #ifdef OSC_SUPPORT + // Process OSC gui input control fifo events. + // It is probably more important that these are processed so that they take precedence over all other + // events because OSC + DSSI/DSSI-VST are fussy about receiving feedback via these control ports, from GUI changes. + + OscControlFifo* cfifo = _oscif.oscFifo(k); + //if(!cfifo) + // continue; + + // If there are 'events' in the fifo, get exactly one 'event' per control per process cycle... + //if(!cfifo->isEmpty()) + if(cfifo && !cfifo->isEmpty()) + { + OscControlValue v = cfifo->get(); + + #ifdef PLUGIN_DEBUGIN + fprintf(stderr, "PluginI::apply OscControlFifo event input control number:%ld value:%f\n", k, v.value); + #endif + + // Set the ladspa control port value. + controls[k].tmpVal = v.value; + + // Need to update the automation value, otherwise it overwrites later with the last automation value. + if(_track && _id != -1) + { + // Since we are now in the audio thread context, there's no need to send a message, + // just modify directly. + //audio->msgSetPluginCtrlVal(this, genACnum(_id, k), controls[k].val); + // p3.3.43 + //audio->msgSetPluginCtrlVal(_track, genACnum(_id, k), controls[k].val); + _track->setPluginCtrlVal(genACnum(_id, k), v.value); + + // Record automation. + // NO! Take care of this immediately in the OSC control handler, because we don't want + // the silly delay associated with processing the fifo one-at-a-time here. + + //AutomationType at = _track->automationType(); + // TODO: Taken from our native gui control handlers. + // This may need modification or may cause problems - + // we don't have the luxury of access to the dssi gui controls ! + //if(at == AUTO_WRITE || (audio->isPlaying() && at == AUTO_TOUCH)) + // enableController(k, false); + //_track->recordAutomation(id, v.value); + } + } + else + #endif // OSC_SUPPORT + { + // Process automation control value. + if(automation && _track && _track->automationType() != AUTO_OFF && _id != -1) + { + if(controls[k].enCtrl && controls[k].en2Ctrl ) + controls[k].tmpVal = _track->pluginCtrlVal(genACnum(_id, k)); + } + } + + // Now update the actual value from the temporary value... + controls[k].val = controls[k].tmpVal; + } + + //for (int i = 0; i < controlPorts; ++i) + // controls[i].val = controls[i].tmpVal; + + for (int i = 0; i < instances; ++i) + { + // p3.3.41 + //fprintf(stderr, "PluginI::apply handle %d\n", i); + _plugin->apply(handle[i], n); + } + } + +//--------------------------------------------------------- +// oscConfigure +//--------------------------------------------------------- + +#ifdef OSC_SUPPORT +int Plugin::oscConfigure(LADSPA_Handle handle, const char* key, const char* value) + { + #ifdef PLUGIN_DEBUGIN + printf("Plugin::oscConfigure effect plugin label:%s key:%s value:%s\n", plugin->Label, key, value); + #endif + + #ifdef DSSI_SUPPORT + if(!dssi_descr || !dssi_descr->configure) + return 0; + + if (!strncmp(key, DSSI_RESERVED_CONFIGURE_PREFIX, + strlen(DSSI_RESERVED_CONFIGURE_PREFIX))) { + fprintf(stderr, "Plugin::oscConfigure OSC: UI for plugin '%s' attempted to use reserved configure key \"%s\", ignoring\n", + plugin->Label, key); + + return 0; + } + + char* message = dssi_descr->configure(handle, key, value); + if (message) { + printf("Plugin::oscConfigure on configure '%s' '%s', plugin '%s' returned error '%s'\n", + //key, value, synti->name().toAscii().data(), message); + key, value, plugin->Label, 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(); + + #endif // DSSI_SUPPORT + + return 0; +} + +//--------------------------------------------------------- +// oscConfigure +//--------------------------------------------------------- + +int PluginI::oscConfigure(const char *key, const char *value) + { + if(!_plugin) + return 0; + + // 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. + + //const char *key = (const char *)&argv[0]->s; + //const char *value = (const char *)&argv[1]->s; + + #ifdef PLUGIN_DEBUGIN + printf("PluginI::oscConfigure effect plugin name:%s label:%s key:%s value:%s\n", _name.latin1(), _label.latin1(), key, value); + #endif + + #ifdef DSSI_SUPPORT + // FIXME: Don't think this is right, should probably do as example shows below. + for(int i = 0; i < instances; ++i) + _plugin->oscConfigure(handle[i], key, value); + + // 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(); + #endif // DSSI_SUPPORT + + return 0; +} + +//--------------------------------------------------------- +// oscUpdate +//--------------------------------------------------------- + +int PluginI::oscUpdate() +{ + #ifdef DSSI_SUPPORT + // Send project directory. + _oscif.oscSendConfigure(DSSI_PROJECT_DIRECTORY_KEY, museProject.latin1()); // song->projectPath() + #endif + + /* + // Send current string configuration parameters. + StringParamMap& map = synti->stringParameters(); + int i = 0; + for(ciStringParamMap r = map.begin(); r != map.end(); ++r) + { + _oscIF.oscSendConfigure(r->first.c_str(), r->second.c_str()); + // Avoid overloading the GUI if there are lots and lots of params. + if((i+1) % 50 == 0) + usleep(300000); + ++i; + } + + // Send current bank and program. + unsigned long bank, prog; + synti->currentProg(&prog, &bank, 0); + _oscIF.oscSendProgram(prog, bank); + + // Send current control values. + unsigned long ports = synth->_controlInPorts; + for(unsigned long i = 0; i < ports; ++i) + { + unsigned long k = synth->pIdx(i); + _oscIF.oscSendControl(k, controls[i]); + // Avoid overloading the GUI if there are lots and lots of ports. + if((i+1) % 50 == 0) + usleep(300000); + } + + */ + + return 0; +} + +//--------------------------------------------------------- +// oscControl +//--------------------------------------------------------- + +int PluginI::oscControl(unsigned long port, float value) +{ + //int port = argv[0]->i; + //LADSPA_Data value = argv[1]->f; + + #ifdef PLUGIN_DEBUGIN + printf("PluginI::oscControl received oscControl port:%ld val:%f\n", port, value); + #endif + + //int controlPorts = synth->_controller; + + //if(port >= controlPorts) + //if(port < 0 || port >= _plugin->rpIdx.size()) + //{ + //fprintf(stderr, "DssiSynthIF::oscControl: port number:%d is out of range of number of ports:%d\n", port, controlPorts); + // fprintf(stderr, "PluginI::oscControl: port number:%d is out of range of index list size:%d\n", port, _plugin->rpIdx.size()); + // return 0; + //} + + // Convert from DSSI port number to control input port index. + //unsigned long cport = _plugin->rpIdx[port]; + unsigned long cport = _plugin->port2InCtrl(port); + + if((int)cport == -1) + { + fprintf(stderr, "PluginI::oscControl: port number:%ld is not a control input\n", port); + return 0; + } + + // (From DSSI module). + // p3.3.39 Set the DSSI control input port's value. + // Observations: With a native DSSI synth like LessTrivialSynth, the native GUI's controls do not change the sound at all + // ie. they don't update the DSSI control port values themselves. + // Hence in response to the call to this oscControl, sent by the native GUI, it is required to that here. +/// controls[cport].val = value; + // DSSI-VST synths however, unlike DSSI synths, DO change their OWN sound in response to their gui controls. + // AND this function is called ! + // Despite the descrepency we are STILL required to update the DSSI control port values here + // because dssi-vst is WAITING FOR A RESPONSE! (A CHANGE in the control port value). + // It will output something like "...4 events expected..." and count that number down as 4 actual control port value CHANGES + // are done here in response. Normally it says "...0 events expected..." when MusE is the one doing the DSSI control changes. + // TODO: May need FIFOs on each control(!) so that the control changes get sent one per process cycle! + // Observed countdown not actually going to zero upon string of changes. + // Try this ... + OscControlFifo* cfifo = _oscif.oscFifo(cport); + if(cfifo) + { + OscControlValue cv; + //cv.idx = cport; + cv.value = value; + if(cfifo->put(cv)) + { + fprintf(stderr, "PluginI::oscControl: fifo overflow: in control number:%ld\n", cport); + } + } + + // Record automation: + // Take care of this immediately, because we don't want the silly delay associated with + // processing the fifo one-at-a-time in the apply(). + // NOTE: Ahh crap! We don't receive control events until the user RELEASES a control ! + // So the events all arrive at once when the user releases a control. + // That makes this pretty useless... But what the heck... + if(_track && _id != -1) + { + int id = genACnum(_id, cport); + AutomationType at = _track->automationType(); + + // TODO: Taken from our native gui control handlers. + // This may need modification or may cause problems - + // we don't have the luxury of access to the dssi gui controls ! + if(at == AUTO_WRITE || (audio->isPlaying() && at == AUTO_TOUCH)) + enableController(cport, false); + + _track->recordAutomation(id, value); + } + + /* + const DSSI_Descriptor* dssi = synth->dssi; + const LADSPA_Descriptor* ld = dssi->LADSPA_Plugin; + + ciMidiCtl2LadspaPort ip = synth->port2MidiCtlMap.find(cport); + if(ip != synth->port2MidiCtlMap.end()) + { + // TODO: TODO: Update midi MusE's midi controller knobs, sliders, boxes etc with a call to the midi port's setHwCtrlState() etc. + // But first we need a ladspa2MidiValue() function! ... + // + // + //float val = ladspa2MidiValue(ld, i, ?, ?); + + } + */ + +#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; + } + +#endif // OSC_SUPPORT + + +//--------------------------------------------------------- +// PluginDialog +// select Plugin dialog +//--------------------------------------------------------- + +PluginDialog::PluginDialog(QWidget* parent, const char* name, bool modal) + : QDialog(parent, name, modal) + { + setCaption(tr("MusE: select plugin")); + Q3VBoxLayout* layout = new Q3VBoxLayout(this); + + pList = new Q3ListView(this); + pList->setAllColumnsShowFocus(true); + pList->addColumn(tr("Lib"), 110); + pList->addColumn(tr("Label"), 110); + pList->addColumn(tr("Name"), 200); + pList->addColumn(tr("AI"), 30); + pList->addColumn(tr("AO"), 30); + pList->addColumn(tr("CI"), 30); + pList->addColumn(tr("CO"), 30); + pList->addColumn(tr("IP"), 30); + pList->addColumn(tr("id"), 40); + pList->addColumn(tr("Maker"), 110); + pList->addColumn(tr("Copyright"), 110); + pList->setColumnWidthMode(1, Q3ListView::Maximum); + + layout->addWidget(pList); + + //--------------------------------------------------- + // Ok/Cancel Buttons + //--------------------------------------------------- + + Q3BoxLayout* w5 = new Q3HBoxLayout; + 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); + + Q3ButtonGroup* plugSel = new Q3ButtonGroup(4, Qt::Horizontal, this, "Show plugs:"); + plugSel->setTitle("Show plugs:"); + QRadioButton* onlySM = new QRadioButton(plugSel, "Mono and Stereo"); + onlySM->setText( "Mono and Stereo"); + QRadioButton* onlyS = new QRadioButton(plugSel, "Stereo"); + onlyS->setText( "Stereo"); + QRadioButton* onlyM = new QRadioButton(plugSel, "Mono"); + onlyM->setText( "Mono"); + QRadioButton* allPlug = new QRadioButton(plugSel, "Show all"); + allPlug->setText( "Show All"); + + plugSel->setRadioButtonExclusive(true); + plugSel->setButton(selectedPlugType); + + QToolTip::add(plugSel, 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 parallel.
" + "Also beware that the 'all' alternative includes plugins that probably are not usable by MusE.")); + + onlySM->setCaption(tr("Stereo and Mono")); + onlyS->setCaption(tr("Stereo")); + onlyM->setCaption(tr("Mono")); + allPlug->setCaption(tr("All")); + + w5->addSpacing(12); + w5->addWidget(plugSel); + w5->addSpacing(12); + + QLabel *sortLabel = new QLabel( this, "Search in 'Label' and 'Name':" ); + sortLabel->setText( "Search in 'Label' and 'Name':" ); + w5->addWidget(sortLabel); + w5->addSpacing(2); + + sortBox = new QComboBox( true, this, "sort" ); + if (!sortItems.empty()) + sortBox->insertStringList(sortItems); + + sortBox->setMinimumSize( 100, 10); + w5->addWidget(sortBox); + w5->addStretch(-1); + + if (sortBox->currentText().length() > 0) + fillPlugs(sortBox->currentText()); + else + fillPlugs(selectedPlugType); + + + connect(pList, SIGNAL(doubleClicked(Q3ListViewItem*)), SLOT(accept())); + connect(cancelB, SIGNAL(clicked()), SLOT(reject())); + connect(okB, SIGNAL(clicked()), SLOT(accept())); + connect(plugSel, SIGNAL(clicked(int)), SLOT(fillPlugs(int))); + connect(sortBox, SIGNAL(textChanged(const QString&)),SLOT(fillPlugs(const QString&))); + sortBox->setFocus(); + } + +//--------------------------------------------------------- +// value +//--------------------------------------------------------- + +Plugin* PluginDialog::value() + { + Q3ListViewItem* item = pList->selectedItem(); + if (item) + return plugins.find(item->text(0), item->text(1)); + return 0; + } + +//--------------------------------------------------------- +// accept +//--------------------------------------------------------- + +void PluginDialog::accept() + { + if (!sortBox->currentText().isEmpty()) { + if (sortItems.find(sortBox->currentText()) == sortItems.end()) + sortItems.push_front(sortBox->currentText()); + } + QDialog::accept(); + } + +//--------------------------------------------------------- +// fillPlugs +//--------------------------------------------------------- + +void PluginDialog::fillPlugs(int nbr) +{ + pList->clear(); + for(iPlugin i = plugins.begin(); i != plugins.end(); ++i) + { + /* + int ai = 0; + int ao = 0; + int ci = 0; + int co = 0; + for(unsigned long k = 0; k < i->ports(); ++k) + { + LADSPA_PortDescriptor pd = i->portd(k); + if(pd & LADSPA_PORT_CONTROL) + { + if(pd & LADSPA_PORT_INPUT) + ++ci; + else + if(pd & LADSPA_PORT_OUTPUT) + ++co; + } + else + if(pd & LADSPA_PORT_AUDIO) + { + if(pd & LADSPA_PORT_INPUT) + ++ai; + else + if(pd & LADSPA_PORT_OUTPUT) + ++ao; + } + } + */ + int ai = i->inports(); + int ao = i->outports(); + int ci = i->controlInPorts(); + int co = i->controlOutPorts(); + + bool addFlag = false; + switch(nbr) + { + case 0: // stereo & mono + if ((ai == 1 || ai == 2) && (ao == 1 || ao ==2)) + { + addFlag = true; + } + break; + case 1: // stereo + if ((ai == 1 || ai == 2) && ao ==2) + { + addFlag = true; + } + break; + case 2: // mono + if (ai == 1 && ao == 1) + { + addFlag = true; + } + break; + case 3: // all + addFlag = true; + break; + } + if(addFlag) + { + Q3ListViewItem* item = new Q3ListViewItem(pList, + i->lib(), + i->label(), + i->name(), + QString().setNum(ai), + QString().setNum(ao), + QString().setNum(ci), + QString().setNum(co), + QString().setNum(i->inPlaceCapable()) + ); + item->setText(8, QString().setNum(i->id())); + item->setText(9, i->maker()); + item->setText(10, i->copyright()); + } + } + selectedPlugType = nbr; +} + +void PluginDialog::fillPlugs(const QString &sortValue) +{ + pList->clear(); + for(iPlugin i = plugins.begin(); i != plugins.end(); ++i) + { + /* + int ai = 0; + int ao = 0; + int ci = 0; + int co = 0; + for(unsigned long k = 0; k < i->ports(); ++k) + { + LADSPA_PortDescriptor pd = i->portd(k); + if(pd & LADSPA_PORT_CONTROL) + { + if(pd & LADSPA_PORT_INPUT) + ++ci; + else + if(pd & LADSPA_PORT_OUTPUT) + ++co; + } + else + if(pd & LADSPA_PORT_AUDIO) + { + if(pd & LADSPA_PORT_INPUT) + ++ai; + else + if(pd & LADSPA_PORT_OUTPUT) + ++ao; + } + } + */ + int ai = i->inports(); + int ao = i->outports(); + int ci = i->controlInPorts(); + int co = i->controlOutPorts(); + + bool addFlag = false; + + if(i->label().lower().contains(sortValue.lower())) + addFlag = true; + else + if(i->name().lower().contains(sortValue.lower())) + addFlag = true; + if(addFlag) + { + Q3ListViewItem* item = new Q3ListViewItem(pList, + i->lib(), + i->label(), + i->name(), + QString().setNum(ai), + QString().setNum(ao), + QString().setNum(ci), + QString().setNum(co), + QString().setNum(i->inPlaceCapable()) + ); + item->setText(8, QString().setNum(i->id())); + item->setText(9, i->maker()); + item->setText(10, i->copyright()); + } + } +} + +//--------------------------------------------------------- +// getPlugin +//--------------------------------------------------------- + +Plugin* PluginDialog::getPlugin(QWidget* parent) + { + PluginDialog* dialog = new PluginDialog(parent); + if (dialog->exec()) + return dialog->value(); + return 0; + } + +const char* presetOpenText = " " + "Click this button to load a saved preset."; +const char* presetSaveText = "Click this button to save curent parameter " + "settings as a preset. You will be prompted for a file name."; +const char* presetBypassText = "Click this button to bypass effect unit"; + +//--------------------------------------------------------- +// PluginGui +//--------------------------------------------------------- + +//PluginGui::PluginGui(PluginI* p) +// p3.3.43 +PluginGui::PluginGui(PluginIBase* p) + : Q3MainWindow(0) + { + gw = 0; + params = 0; + plugin = p; + setCaption(plugin->name()); + + Q3ToolBar* tools = new Q3ToolBar(tr("File Buttons"), this); + QToolButton* fileOpen = new QToolButton( + QIcon(*openIconS), // ddskrjo + tr("Load Preset"), + QString::null, this, SLOT(load()), + tools, "load preset" ); + + QToolButton* fileSave = new QToolButton( + QIcon(*saveIconS), // ddskrjo + tr("Save Preset"), + QString::null, + this, SLOT(save()), + tools, "save preset"); + + Q3WhatsThis::whatsThisButton(tools); + + onOff = new QToolButton(tools, "bypass"); + onOff->setIconSet(*exitIconS); + onOff->setToggleButton(true); + onOff->setOn(plugin->on()); + QToolTip::add(onOff, tr("bypass plugin")); + connect(onOff, SIGNAL(toggled(bool)), SLOT(bypassToggled(bool))); + + Q3WhatsThis::add(fileOpen, tr(presetOpenText)); + Q3WhatsThis::add(onOff, tr(presetBypassText)); + Q3MimeSourceFactory::defaultFactory()->setPixmap(QString("fileopen"), *openIcon ); + Q3WhatsThis::add(fileSave, tr(presetSaveText)); + + QString id; + //id.setNum(plugin->plugin()->id()); + id.setNum(plugin->pluginID()); + QString name(museGlobalShare + QString("/plugins/") + id + QString(".ui")); + QFile uifile(name); + if (uifile.exists()) { + // + // construct GUI from *.ui file + // +#if 0 // ddskrjo + mw = QWidgetFactory::create(uifile.name(), 0, this); + setCentralWidget(mw); + + const QObjectList* l = mw->children(); + QObject *obj; + + nobj = 0; + QObjectListIt it(*l); + while ((obj = it.current()) != 0) { + ++it; + const char* name = obj->name(); + if (*name !='P') + continue; + int parameter = -1; + sscanf(name, "P%d", ¶meter); + if (parameter == -1) + continue; + ++nobj; + } + it.toFirst(); + gw = new GuiWidgets[nobj]; + nobj = 0; + QSignalMapper* mapper = new QSignalMapper(this, "pluginGuiMapper"); + connect(mapper, SIGNAL(mapped(int)), SLOT(guiParamChanged(int))); + + QSignalMapper* mapperPressed = new QSignalMapper(this, "pluginGuiMapperPressed"); + QSignalMapper* mapperReleased = new QSignalMapper(this, "pluginGuiMapperReleased"); + connect(mapperPressed, SIGNAL(mapped(int)), SLOT(guiParamPressed(int))); + connect(mapperReleased, SIGNAL(mapped(int)), SLOT(guiParamReleased(int))); + + while ((obj = it.current()) != 0) { + ++it; + const char* name = obj->name(); + if (*name !='P') + continue; + int parameter = -1; + sscanf(name, "P%d", ¶meter); + if (parameter == -1) + continue; + + mapper->setMapping(obj, nobj); + mapperPressed->setMapping(obj, nobj); + mapperReleased->setMapping(obj, nobj); + + gw[nobj].widget = (QWidget*)obj; + gw[nobj].param = parameter; + gw[nobj].type = -1; + + if (strcmp(obj->className(), "Slider") == 0) { + gw[nobj].type = GuiWidgets::SLIDER; + ((Slider*)obj)->setId(nobj); + ((Slider*)obj)->setCursorHoming(true); + for(int i = 0; i < nobj; i++) + { + if(gw[i].type == GuiWidgets::DOUBLE_LABEL && gw[i].param == parameter) + ((DoubleLabel*)gw[i].widget)->setSlider((Slider*)obj); + } + connect(obj, SIGNAL(sliderMoved(double,int)), mapper, SLOT(map())); + connect(obj, SIGNAL(sliderPressed(int)), SLOT(guiSliderPressed(int))); + connect(obj, SIGNAL(sliderReleased(int)), SLOT(guiSliderReleased(int))); + connect(obj, SIGNAL(sliderRightClicked(const QPoint &, int)), SLOT(guiSliderRightClicked(const QPoint &, int))); + } + else if (strcmp(obj->className(), "DoubleLabel") == 0) { + gw[nobj].type = GuiWidgets::DOUBLE_LABEL; + ((DoubleLabel*)obj)->setId(nobj); + for(int i = 0; i < nobj; i++) + { + if(gw[i].type == GuiWidgets::SLIDER && gw[i].param == parameter) + { + ((DoubleLabel*)obj)->setSlider((Slider*)gw[i].widget); + break; + } + } + connect(obj, SIGNAL(valueChanged(double,int)), mapper, SLOT(map())); + } + else if (strcmp(obj->className(), "QCheckBox") == 0) { + gw[nobj].type = GuiWidgets::QCHECKBOX; + connect(obj, SIGNAL(toggled(bool)), mapper, SLOT(map())); + connect(obj, SIGNAL(pressed()), mapperPressed, SLOT(map())); + connect(obj, SIGNAL(released()), mapperReleased, SLOT(map())); + } + else if (strcmp(obj->className(), "QComboBox") == 0) { + gw[nobj].type = GuiWidgets::QCOMBOBOX; + connect(obj, SIGNAL(activated(int)), mapper, SLOT(map())); + } + else { + printf("unknown widget class %s\n", obj->className()); + continue; + } + ++nobj; + } + updateValues(); // otherwise the GUI won't have valid data +#endif + } + else { + //mw = new QWidget(this); + //setCentralWidget(mw); + // p3.4.43 + view = new Q3ScrollView(this); + setCentralWidget(view); + mw = new QWidget(view); + view->setResizePolicy(Q3ScrollView::AutoOneFit); + //view->setVScrollBarMode(QScrollView::AlwaysOff); + view->addChild(mw); + + Q3GridLayout* grid = new Q3GridLayout(mw); + grid->setSpacing(2); + + int n = plugin->parameters(); + params = new GuiParam[n]; + + // Changed p3.3.43 + //resize(280, n*20+30); + //int nh = n*20+40; + //if(nh > 760) + // nh = 760; + //resize(280, nh); + + //int style = Slider::BgTrough | Slider::BgSlot; + QFontMetrics fm = fontMetrics(); + int h = fm.height() + 4; + + for (int i = 0; i < n; ++i) { + QLabel* label = 0; + LADSPA_PortRangeHint range = plugin->range(i); + double lower = 0.0; // default values + double upper = 1.0; + double dlower = lower; + double dupper = upper; + double val = plugin->param(i); + double dval = val; + params[i].hint = range.HintDescriptor; + + if (LADSPA_IS_HINT_BOUNDED_BELOW(range.HintDescriptor)) { + dlower = lower = range.LowerBound; + } + if (LADSPA_IS_HINT_BOUNDED_ABOVE(range.HintDescriptor)) { + dupper = upper = range.UpperBound; + } + if (LADSPA_IS_HINT_SAMPLE_RATE(range.HintDescriptor)) { + lower *= sampleRate; + upper *= sampleRate; + dlower = lower; + dupper = upper; + } + if (LADSPA_IS_HINT_LOGARITHMIC(range.HintDescriptor)) { + if (lower == 0.0) + lower = 0.001; + dlower = fast_log10(lower)*20.0; + dupper = fast_log10(upper)*20.0; + dval = fast_log10(val) * 20.0; + } + if (LADSPA_IS_HINT_TOGGLED(range.HintDescriptor)) { + params[i].type = GuiParam::GUI_SWITCH; + CheckBox* cb = new CheckBox(mw, i, "param"); + cb->setId(i); + cb->setText(QString(plugin->paramName(i))); + cb->setChecked(plugin->param(i) != 0.0); + cb->setFixedHeight(h); + params[i].actuator = cb; + } + else { + label = new QLabel(QString(plugin->paramName(i)), mw); + params[i].type = GuiParam::GUI_SLIDER; + params[i].label = new DoubleLabel(val, lower, upper, mw); + params[i].label->setFrame(true); + params[i].label->setPrecision(2); + params[i].label->setId(i); + + //params[i].label->setMargin(2); + //params[i].label->setFixedHeight(h); + + Slider* s = new Slider(mw, "param", Qt::Horizontal, + Slider::None); //, style); + + s->setCursorHoming(true); + s->setId(i); + //s->setFixedHeight(h); + s->setRange(dlower, dupper); + if(LADSPA_IS_HINT_INTEGER(range.HintDescriptor)) + s->setStep(1.0); + s->setValue(dval); + params[i].actuator = s; + params[i].label->setSlider((Slider*)params[i].actuator); + } + //params[i].actuator->setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Maximum)); + params[i].actuator->setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed)); + if (params[i].type == GuiParam::GUI_SLIDER) { + //label->setFixedHeight(20); + //label->setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Maximum)); + label->setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed)); + //params[i].label->setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Maximum)); + params[i].label->setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed)); + grid->addWidget(label, i, 0); + grid->addWidget(params[i].label, i, 1); + grid->addWidget(params[i].actuator, i, 2); + } + else if (params[i].type == GuiParam::GUI_SWITCH) { + grid->addMultiCellWidget(params[i].actuator, i, i, 0, 2); + } + if (params[i].type == GuiParam::GUI_SLIDER) { + connect(params[i].actuator, SIGNAL(sliderMoved(double,int)), SLOT(sliderChanged(double,int))); + connect(params[i].label, SIGNAL(valueChanged(double,int)), SLOT(labelChanged(double,int))); + connect(params[i].actuator, SIGNAL(sliderPressed(int)), SLOT(ctrlPressed(int))); + connect(params[i].actuator, SIGNAL(sliderReleased(int)), SLOT(ctrlReleased(int))); + connect(params[i].actuator, SIGNAL(sliderRightClicked(const QPoint &, int)), SLOT(ctrlRightClicked(const QPoint &, int))); + } + else if (params[i].type == GuiParam::GUI_SWITCH){ + connect(params[i].actuator, SIGNAL(checkboxPressed(int)), SLOT(ctrlPressed(int))); + connect(params[i].actuator, SIGNAL(checkboxReleased(int)), SLOT(ctrlReleased(int))); + connect(params[i].actuator, SIGNAL(checkboxRightClicked(const QPoint &, int)), SLOT(ctrlRightClicked(const QPoint &, int))); + } + } + // p3.3.43 + resize(280, height()); + + grid->setColStretch(2, 10); + } + connect(heartBeatTimer, SIGNAL(timeout()), SLOT(heartBeat())); + } + +//--------------------------------------------------------- +// PluginGui +//--------------------------------------------------------- + +PluginGui::~PluginGui() + { + if (gw) + delete[] gw; + if (params) + delete[] params; + } + +//--------------------------------------------------------- +// heartBeat +//--------------------------------------------------------- + +void PluginGui::heartBeat() +{ + updateControls(); +} + +//--------------------------------------------------------- +// ctrlPressed +//--------------------------------------------------------- + +void PluginGui::ctrlPressed(int param) +{ + AutomationType at = AUTO_OFF; + AudioTrack* track = plugin->track(); + if(track) + at = track->automationType(); + + if(at != AUTO_OFF) + plugin->enableController(param, false); + + int id = plugin->id(); + + if(id == -1) + return; + + id = genACnum(id, param); + + if(params[param].type == GuiParam::GUI_SLIDER) + { + double val = ((Slider*)params[param].actuator)->value(); + if (LADSPA_IS_HINT_LOGARITHMIC(params[param].hint)) + val = pow(10.0, val/20.0); + else if (LADSPA_IS_HINT_INTEGER(params[param].hint)) + val = rint(val); + plugin->setParam(param, val); + ((DoubleLabel*)params[param].label)->setValue(val); + + // p3.3.43 + //audio->msgSetPluginCtrlVal(((PluginI*)plugin), id, val); + + if(track) + { + // p3.3.43 + audio->msgSetPluginCtrlVal(track, id, val); + + track->startAutoRecord(id, val); + } + } + else if(params[param].type == GuiParam::GUI_SWITCH) + { + double val = (double)((CheckBox*)params[param].actuator)->isChecked(); + plugin->setParam(param, val); + + // p3.3.43 + //audio->msgSetPluginCtrlVal(((PluginI*)plugin), id, val); + + if(track) + { + // p3.3.43 + audio->msgSetPluginCtrlVal(track, id, val); + + track->startAutoRecord(id, val); + } + } +} + +//--------------------------------------------------------- +// ctrlReleased +//--------------------------------------------------------- + +void PluginGui::ctrlReleased(int param) +{ + AutomationType at = AUTO_OFF; + AudioTrack* track = plugin->track(); + if(track) + at = track->automationType(); + + // Special for switch - don't enable controller until transport stopped. + if(at != AUTO_WRITE && ((params[param].type != GuiParam::GUI_SWITCH + || !audio->isPlaying() + || at != AUTO_TOUCH) || (!audio->isPlaying() && at == AUTO_TOUCH)) ) + plugin->enableController(param, true); + + int id = plugin->id(); + if(!track || id == -1) + return; + id = genACnum(id, param); + + if(params[param].type == GuiParam::GUI_SLIDER) + { + double val = ((Slider*)params[param].actuator)->value(); + if (LADSPA_IS_HINT_LOGARITHMIC(params[param].hint)) + val = pow(10.0, val/20.0); + else if (LADSPA_IS_HINT_INTEGER(params[param].hint)) + val = rint(val); + track->stopAutoRecord(id, val); + } + //else if(params[param].type == GuiParam::GUI_SWITCH) + //{ + //double val = (double)((CheckBox*)params[param].actuator)->isChecked(); + // No concept of 'untouching' a checkbox. Remain 'touched' until stop. + //plugin->track()->stopAutoRecord(genACnum(plugin->id(), param), val); + //} +} + +//--------------------------------------------------------- +// ctrlRightClicked +//--------------------------------------------------------- + +void PluginGui::ctrlRightClicked(const QPoint &p, int param) +{ + int id = plugin->id(); + if(id != -1) + //song->execAutomationCtlPopup((AudioTrack*)plugin->track(), p, genACnum(id, param)); + song->execAutomationCtlPopup(plugin->track(), p, genACnum(id, param)); +} + +//--------------------------------------------------------- +// sliderChanged +//--------------------------------------------------------- + +void PluginGui::sliderChanged(double val, int param) +{ + AutomationType at = AUTO_OFF; + AudioTrack* track = plugin->track(); + if(track) + at = track->automationType(); + + if(at == AUTO_WRITE || (audio->isPlaying() && at == AUTO_TOUCH)) + plugin->enableController(param, false); + + if (LADSPA_IS_HINT_LOGARITHMIC(params[param].hint)) + val = pow(10.0, val/20.0); + else if (LADSPA_IS_HINT_INTEGER(params[param].hint)) + val = rint(val); + if (plugin->param(param) != val) { + plugin->setParam(param, val); + ((DoubleLabel*)params[param].label)->setValue(val); + } + + int id = plugin->id(); + if(id == -1) + return; + id = genACnum(id, param); + + // p3.3.43 + //audio->msgSetPluginCtrlVal(((PluginI*)plugin), id, val); + + if(track) + { + // p3.3.43 + audio->msgSetPluginCtrlVal(track, id, val); + + track->recordAutomation(id, val); + } +} + +//--------------------------------------------------------- +// labelChanged +//--------------------------------------------------------- + +void PluginGui::labelChanged(double val, int param) +{ + AutomationType at = AUTO_OFF; + AudioTrack* track = plugin->track(); + if(track) + at = track->automationType(); + + if(at == AUTO_WRITE || (audio->isPlaying() && at == AUTO_TOUCH)) + plugin->enableController(param, false); + + double dval = val; + if (LADSPA_IS_HINT_LOGARITHMIC(params[param].hint)) + dval = fast_log10(val) * 20.0; + else if (LADSPA_IS_HINT_INTEGER(params[param].hint)) + dval = rint(val); + if (plugin->param(param) != val) { + plugin->setParam(param, val); + ((Slider*)params[param].actuator)->setValue(dval); + } + + int id = plugin->id(); + if(id == -1) + return; + + id = genACnum(id, param); + + // p3.3.43 + //audio->msgSetPluginCtrlVal(((PluginI*)plugin), id, val); + + if(track) + { + // p3.3.43 + audio->msgSetPluginCtrlVal(track, id, val); + + track->startAutoRecord(id, val); + } +} + +//--------------------------------------------------------- +// load +//--------------------------------------------------------- + +void PluginGui::load() + { + QString s("presets/plugins/"); + //s += plugin->plugin()->label(); + s += plugin->pluginLabel(); + s += "/"; + + QString fn = getOpenFileName(s, preset_file_pattern, + this, tr("MusE: load preset"), 0); + if (fn.isEmpty()) + return; + bool popenFlag; + FILE* f = fileOpen(this, fn, QString(".pre"), "r", popenFlag, true); + if (f == 0) + return; + + Xml xml(f); + int mode = 0; + for (;;) { + Xml::Token token = xml.parse(); + QString tag = xml.s1(); + switch (token) { + case Xml::Error: + case Xml::End: + return; + case Xml::TagStart: + if (mode == 0 && tag == "muse") + mode = 1; + else if (mode == 1 && tag == "plugin") { + + if(plugin->readConfiguration(xml, true)) + { + QMessageBox::critical(this, QString("MusE"), + tr("Error reading preset. Might not be right type for this plugin")); + goto ende; + } + + mode = 0; + } + else + xml.unknown("PluginGui"); + break; + case Xml::Attribut: + break; + case Xml::TagEnd: + if (!mode && tag == "muse") + { + plugin->updateControllers(); + goto ende; + } + default: + break; + } + } +ende: + if (popenFlag) + pclose(f); + else + fclose(f); + } + +//--------------------------------------------------------- +// save +//--------------------------------------------------------- + +void PluginGui::save() + { + QString s("presets/plugins/"); + //s += plugin->plugin()->label(); + s += plugin->pluginLabel(); + s += "/"; + + //QString fn = getSaveFileName(s, preset_file_pattern, this, + QString fn = getSaveFileName(s, preset_file_save_pattern, this, + tr("MusE: save preset")); + if (fn.isEmpty()) + return; + bool popenFlag; + FILE* f = fileOpen(this, fn, QString(".pre"), "w", popenFlag, false, true); + if (f == 0) + return; + Xml xml(f); + xml.header(); + xml.tag(0, "muse version=\"1.0\""); + plugin->writeConfiguration(1, xml); + xml.tag(1, "/muse"); + + if (popenFlag) + pclose(f); + else + fclose(f); + } + +//--------------------------------------------------------- +// bypassToggled +//--------------------------------------------------------- + +void PluginGui::bypassToggled(bool val) + { + plugin->setOn(val); + song->update(SC_ROUTE); + } + +//--------------------------------------------------------- +// songChanged +//--------------------------------------------------------- + +void PluginGui::setOn(bool val) + { + onOff->blockSignals(true); + onOff->setOn(val); + onOff->blockSignals(false); + } + +//--------------------------------------------------------- +// updateValues +//--------------------------------------------------------- + +void PluginGui::updateValues() + { + if (params) { + for (int i = 0; i < plugin->parameters(); ++i) { + GuiParam* gp = ¶ms[i]; + if (gp->type == GuiParam::GUI_SLIDER) { + double lv = plugin->param(i); + double sv = lv; + if (LADSPA_IS_HINT_LOGARITHMIC(params[i].hint)) + sv = fast_log10(lv) * 20.0; + else if (LADSPA_IS_HINT_INTEGER(params[i].hint)) + { + sv = rint(lv); + lv = sv; + } + gp->label->setValue(lv); + ((Slider*)(gp->actuator))->setValue(sv); + } + else if (gp->type == GuiParam::GUI_SWITCH) { + ((CheckBox*)(gp->actuator))->setChecked(int(plugin->param(i))); + } + } + } + else if (gw) { + for (int i = 0; i < nobj; ++i) { + QWidget* widget = gw[i].widget; + int type = gw[i].type; + int param = gw[i].param; + double val = plugin->param(param); + switch(type) { + case GuiWidgets::SLIDER: + ((Slider*)widget)->setValue(val); + break; + case GuiWidgets::DOUBLE_LABEL: + ((DoubleLabel*)widget)->setValue(val); + break; + case GuiWidgets::QCHECKBOX: + ((QCheckBox*)widget)->setChecked(int(val)); + break; + case GuiWidgets::QCOMBOBOX: + ((QComboBox*)widget)->setCurrentItem(int(val)); + break; + } + } + } + } + +//--------------------------------------------------------- +// updateControls +//--------------------------------------------------------- + +void PluginGui::updateControls() + { + if(!automation || !plugin->track() || plugin->id() == -1) + return; + AutomationType at = plugin->track()->automationType(); + if(at == AUTO_OFF) + return; + if (params) { + for (int i = 0; i < plugin->parameters(); ++i) { + GuiParam* gp = ¶ms[i]; + if (gp->type == GuiParam::GUI_SLIDER) { + if( plugin->controllerEnabled(i) && plugin->controllerEnabled2(i) ) + { + double lv = plugin->track()->pluginCtrlVal(genACnum(plugin->id(), i)); + double sv = lv; + if (LADSPA_IS_HINT_LOGARITHMIC(params[i].hint)) + sv = fast_log10(lv) * 20.0; + else + if (LADSPA_IS_HINT_INTEGER(params[i].hint)) + { + sv = rint(lv); + lv = sv; + } + if(((Slider*)(gp->actuator))->value() != sv) + { + //printf("PluginGui::updateControls slider\n"); + + gp->label->blockSignals(true); + ((Slider*)(gp->actuator))->blockSignals(true); + ((Slider*)(gp->actuator))->setValue(sv); + gp->label->setValue(lv); + ((Slider*)(gp->actuator))->blockSignals(false); + gp->label->blockSignals(false); + } + } + + } + else if (gp->type == GuiParam::GUI_SWITCH) { + if( plugin->controllerEnabled(i) && plugin->controllerEnabled2(i) ) + { + bool v = (int)plugin->track()->pluginCtrlVal(genACnum(plugin->id(), i)); + if(((CheckBox*)(gp->actuator))->isChecked() != v) + { + //printf("PluginGui::updateControls switch\n"); + + ((CheckBox*)(gp->actuator))->blockSignals(true); + ((CheckBox*)(gp->actuator))->setChecked(v); + ((CheckBox*)(gp->actuator))->blockSignals(false); + } + } + } + } + } + else if (gw) { + for (int i = 0; i < nobj; ++i) { + QWidget* widget = gw[i].widget; + int type = gw[i].type; + int param = gw[i].param; + switch(type) { + case GuiWidgets::SLIDER: + if( plugin->controllerEnabled(param) && plugin->controllerEnabled2(param) ) + { + double v = plugin->track()->pluginCtrlVal(genACnum(plugin->id(), param)); + if(((Slider*)widget)->value() != v) + { + //printf("PluginGui::updateControls slider\n"); + + ((Slider*)widget)->blockSignals(true); + ((Slider*)widget)->setValue(v); + ((Slider*)widget)->blockSignals(false); + } + } + break; + case GuiWidgets::DOUBLE_LABEL: + if( plugin->controllerEnabled(param) && plugin->controllerEnabled2(param) ) + { + double v = plugin->track()->pluginCtrlVal(genACnum(plugin->id(), param)); + if(((DoubleLabel*)widget)->value() != v) + { + //printf("PluginGui::updateControls label\n"); + + ((DoubleLabel*)widget)->blockSignals(true); + ((DoubleLabel*)widget)->setValue(v); + ((DoubleLabel*)widget)->blockSignals(false); + } + } + break; + case GuiWidgets::QCHECKBOX: + if( plugin->controllerEnabled(param) && plugin->controllerEnabled2(param) ) + { + bool b = (bool) plugin->track()->pluginCtrlVal(genACnum(plugin->id(), param)); + if(((QCheckBox*)widget)->isChecked() != b) + { + //printf("PluginGui::updateControls checkbox\n"); + + ((QCheckBox*)widget)->blockSignals(true); + ((QCheckBox*)widget)->setChecked(b); + ((QCheckBox*)widget)->blockSignals(false); + } + } + break; + case GuiWidgets::QCOMBOBOX: + if( plugin->controllerEnabled(param) && plugin->controllerEnabled2(param) ) + { + int n = (int) plugin->track()->pluginCtrlVal(genACnum(plugin->id(), param)); + if(((QComboBox*)widget)->currentItem() != n) + { + //printf("PluginGui::updateControls combobox\n"); + + ((QComboBox*)widget)->blockSignals(true); + ((QComboBox*)widget)->setCurrentItem(n); + ((QComboBox*)widget)->blockSignals(false); + } + } + break; + } + } + } + } + +//--------------------------------------------------------- +// guiParamChanged +//--------------------------------------------------------- + +void PluginGui::guiParamChanged(int idx) +{ + QWidget* w = gw[idx].widget; + int param = gw[idx].param; + int type = gw[idx].type; + + AutomationType at = AUTO_OFF; + AudioTrack* track = plugin->track(); + if(track) + at = track->automationType(); + + if(at == AUTO_WRITE || (audio->isPlaying() && at == AUTO_TOUCH)) + plugin->enableController(param, false); + + double val = 0.0; + switch(type) { + case GuiWidgets::SLIDER: + val = ((Slider*)w)->value(); + break; + case GuiWidgets::DOUBLE_LABEL: + val = ((DoubleLabel*)w)->value(); + break; + case GuiWidgets::QCHECKBOX: + val = double(((QCheckBox*)w)->isChecked()); + break; + case GuiWidgets::QCOMBOBOX: + val = double(((QComboBox*)w)->currentItem()); + break; + } + + for (int i = 0; i < nobj; ++i) { + QWidget* widget = gw[i].widget; + if (widget == w || param != gw[i].param) + continue; + int type = gw[i].type; + switch(type) { + case GuiWidgets::SLIDER: + ((Slider*)widget)->setValue(val); + break; + case GuiWidgets::DOUBLE_LABEL: + ((DoubleLabel*)widget)->setValue(val); + break; + case GuiWidgets::QCHECKBOX: + ((QCheckBox*)widget)->setChecked(int(val)); + break; + case GuiWidgets::QCOMBOBOX: + ((QComboBox*)widget)->setCurrentItem(int(val)); + break; + } + } + + int id = plugin->id(); + if(track && id != -1) + { + id = genACnum(id, param); + + // p3.3.43 + //audio->msgSetPluginCtrlVal(((PluginI*)plugin), id, val); + + //if(track) + //{ + // p3.3.43 + audio->msgSetPluginCtrlVal(track, id, val); + + switch(type) + { + case GuiWidgets::DOUBLE_LABEL: + case GuiWidgets::QCHECKBOX: + track->startAutoRecord(id, val); + break; + default: + track->recordAutomation(id, val); + break; + } + //} + } + plugin->setParam(param, val); +} + +//--------------------------------------------------------- +// guiParamPressed +//--------------------------------------------------------- + +void PluginGui::guiParamPressed(int idx) + { + int param = gw[idx].param; + + AutomationType at = AUTO_OFF; + AudioTrack* track = plugin->track(); + if(track) + at = track->automationType(); + + if(at != AUTO_OFF) + plugin->enableController(param, false); + + int id = plugin->id(); + if(!track || id == -1) + return; + + id = genACnum(id, param); + + // NOTE: For this to be of any use, the freeverb gui 2142.ui + // would have to be used, and changed to use CheckBox and ComboBox + // instead of QCheckBox and QComboBox, since both of those would + // need customization (Ex. QCheckBox doesn't check on click). + /* + switch(type) { + case GuiWidgets::QCHECKBOX: + double val = (double)((CheckBox*)w)->isChecked(); + track->startAutoRecord(id, val); + break; + case GuiWidgets::QCOMBOBOX: + double val = (double)((ComboBox*)w)->currentItem(); + track->startAutoRecord(id, val); + break; + } + */ + } + +//--------------------------------------------------------- +// guiParamReleased +//--------------------------------------------------------- + +void PluginGui::guiParamReleased(int idx) + { + int param = gw[idx].param; + int type = gw[idx].type; + + AutomationType at = AUTO_OFF; + AudioTrack* track = plugin->track(); + if(track) + at = track->automationType(); + + // Special for switch - don't enable controller until transport stopped. + if(at != AUTO_WRITE && (type != GuiWidgets::QCHECKBOX + || !audio->isPlaying() + || at != AUTO_TOUCH)) + plugin->enableController(param, true); + + int id = plugin->id(); + + if(!track || id == -1) + return; + + id = genACnum(id, param); + + // NOTE: For this to be of any use, the freeverb gui 2142.ui + // would have to be used, and changed to use CheckBox and ComboBox + // instead of QCheckBox and QComboBox, since both of those would + // need customization (Ex. QCheckBox doesn't check on click). + /* + switch(type) { + case GuiWidgets::QCHECKBOX: + double val = (double)((CheckBox*)w)->isChecked(); + track->stopAutoRecord(id, param); + break; + case GuiWidgets::QCOMBOBOX: + double val = (double)((ComboBox*)w)->currentItem(); + track->stopAutoRecord(id, param); + break; + } + */ + } + +//--------------------------------------------------------- +// guiSliderPressed +//--------------------------------------------------------- + +void PluginGui::guiSliderPressed(int idx) + { + int param = gw[idx].param; + QWidget *w = gw[idx].widget; + + AutomationType at = AUTO_OFF; + AudioTrack* track = plugin->track(); + if(track) + at = track->automationType(); + + int id = plugin->id(); + + if(at == AUTO_WRITE || (at == AUTO_READ || at == AUTO_TOUCH)) + plugin->enableController(param, false); + + if(!track || id == -1) + return; + + id = genACnum(id, param); + + double val = ((Slider*)w)->value(); + plugin->setParam(param, val); + + //audio->msgSetPluginCtrlVal(((PluginI*)plugin), id, val); + // p3.3.43 + audio->msgSetPluginCtrlVal(track, id, val); + + track->startAutoRecord(id, val); + + // Needed so that paging a slider updates a label or other buddy control. + for (int i = 0; i < nobj; ++i) { + QWidget* widget = gw[i].widget; + if (widget == w || param != gw[i].param) + continue; + int type = gw[i].type; + switch(type) { + case GuiWidgets::SLIDER: + ((Slider*)widget)->setValue(val); + break; + case GuiWidgets::DOUBLE_LABEL: + ((DoubleLabel*)widget)->setValue(val); + break; + case GuiWidgets::QCHECKBOX: + ((QCheckBox*)widget)->setChecked(int(val)); + break; + case GuiWidgets::QCOMBOBOX: + ((QComboBox*)widget)->setCurrentItem(int(val)); + break; + } + } + } + +//--------------------------------------------------------- +// guiSliderReleased +//--------------------------------------------------------- + +void PluginGui::guiSliderReleased(int idx) + { + int param = gw[idx].param; + QWidget *w = gw[idx].widget; + + AutomationType at = AUTO_OFF; + AudioTrack* track = plugin->track(); + if(track) + at = track->automationType(); + + if(at != AUTO_WRITE || (!audio->isPlaying() && at == AUTO_TOUCH)) + plugin->enableController(param, true); + + int id = plugin->id(); + + if(!track || id == -1) + return; + + id = genACnum(id, param); + + double val = ((Slider*)w)->value(); + track->stopAutoRecord(id, val); + } + +//--------------------------------------------------------- +// guiSliderRightClicked +//--------------------------------------------------------- + +void PluginGui::guiSliderRightClicked(const QPoint &p, int idx) +{ + int param = gw[idx].param; + int id = plugin->id(); + if(id != -1) + //song->execAutomationCtlPopup((AudioTrack*)plugin->track(), p, genACnum(id, param)); + song->execAutomationCtlPopup(plugin->track(), p, genACnum(id, param)); +} + +//--------------------------------------------------------- +// PluginWidgetFactory +//--------------------------------------------------------- +#if 0 // ddskrjo +QWidget* PluginWidgetFactory::createWidget(const QString& className, QWidget* parent, const char* name) const +{ + if(className == "DoubleLabel") + return new DoubleLabel(parent, name); + if(className == "Slider") + return new Slider(parent, name); + return 0; +}; +#endif diff --git a/muse2/muse/plugin.h b/muse2/muse/plugin.h new file mode 100644 index 00000000..70573796 --- /dev/null +++ b/muse2/muse/plugin.h @@ -0,0 +1,536 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: plugin.h,v 1.9.2.13 2009/12/06 01:25:21 terminator356 Exp $ +// +// (C) Copyright 2000 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __PLUGIN_H__ +#define __PLUGIN_H__ + +#include +#include + +#include +#include +#include +//#include +#include +#include +#include + +#include "ladspa.h" +#include "globals.h" +#include "globaldefs.h" +#include "ctrl.h" + +//#include "stringparam.h" + +#include "config.h" + +#ifdef OSC_SUPPORT +//class OscIF; +#include "osc.h" +#endif + +#ifdef DSSI_SUPPORT +#include +#endif + +class Xml; +class QWidget; +// class QLabel; +class Slider; +class Q3ListView; +class Q3ScrollView; +class QToolButton; +class DoubleLabel; +class AudioTrack; +class MidiController; + +//--------------------------------------------------------- +// PluginWidgetFactory +//--------------------------------------------------------- +#if 0 +class PluginWidgetFactory : public QWidgetFactory +{ + public: + virtual QWidget* createWidget(const QString& className, QWidget* parent, const char* name) const; +}; +#endif +//--------------------------------------------------------- +// Plugin +//--------------------------------------------------------- + +class Plugin { + protected: + void* _handle; + int _references; + int _instNo; + QFileInfo fi; + LADSPA_Descriptor_Function ladspa; + const LADSPA_Descriptor *plugin; + unsigned long _uniqueID; + QString _label; + QString _name; + QString _maker; + QString _copyright; + + bool _isDssi; + #ifdef DSSI_SUPPORT + const DSSI_Descriptor* dssi_descr; + #endif + + //LADSPA_PortDescriptor* _portDescriptors; + unsigned long _portCount; + unsigned long _inports; + unsigned long _outports; + unsigned long _controlInPorts; + unsigned long _controlOutPorts; + std::vector rpIdx; // Port number to control input index. Item is -1 if it's not a control input. + + bool _inPlaceCapable; + + public: + Plugin(QFileInfo* f, const LADSPA_Descriptor* d, bool isDssi = false); + ~Plugin(); + + QString label() const { return _label; } + QString name() const { return _name; } + unsigned long id() const { return _uniqueID; } + QString maker() const { return _maker; } + QString copyright() const { return _copyright; } + QString lib(bool complete = true) /*const*/ { return fi.baseName(complete); } // ddskrjo const + QString dirPath(bool complete = true) const { return fi.dirPath(complete); } + QString filePath() const { return fi.filePath(); } + int references() const { return _references; } + int incReferences(int); + int instNo() { return _instNo++; } + + bool isDssiPlugin() const { return _isDssi; } + + LADSPA_Handle instantiate(); + void activate(LADSPA_Handle handle) { + if (plugin && plugin->activate) + plugin->activate(handle); + } + void deactivate(LADSPA_Handle handle) { + if (plugin && plugin->deactivate) + plugin->deactivate(handle); + } + void cleanup(LADSPA_Handle handle) { + if (plugin && plugin->cleanup) + plugin->cleanup(handle); + } + void connectPort(LADSPA_Handle handle, int port, float* value) { + if(plugin) + plugin->connect_port(handle, port, value); + } + void apply(LADSPA_Handle handle, int n) { + if(plugin) + plugin->run(handle, n); + } + + #ifdef OSC_SUPPORT + int oscConfigure(LADSPA_Handle /*handle*/, const char* /*key*/, const char* /*value*/); + #endif + + //int ports() { return plugin ? plugin->PortCount : 0; } + unsigned long ports() { return _portCount; } + + LADSPA_PortDescriptor portd(unsigned long k) const { + return plugin ? plugin->PortDescriptors[k] : 0; + //return _portDescriptors[k]; + } + + LADSPA_PortRangeHint range(unsigned long i) { + // FIXME: + //return plugin ? plugin->PortRangeHints[i] : 0; + return plugin->PortRangeHints[i]; + } + + double defaultValue(unsigned long port) const; + void range(unsigned long i, float*, float*) const; + + const char* portName(unsigned long i) { + return plugin ? plugin->PortNames[i] : 0; + } + + // Returns (int)-1 if not an input control. + unsigned long port2InCtrl(unsigned long p) { return p >= rpIdx.size() ? (unsigned long)-1 : rpIdx[p]; } + + unsigned long inports() const { return _inports; } + unsigned long outports() const { return _outports; } + unsigned long controlInPorts() const { return _controlInPorts; } + unsigned long controlOutPorts() const { return _controlOutPorts; } + bool inPlaceCapable() const { return _inPlaceCapable; } + }; + +typedef std::list::iterator iPlugin; + +//--------------------------------------------------------- +// PluginList +//--------------------------------------------------------- + +class PluginList : public std::list { + public: + void add(QFileInfo* fi, const LADSPA_Descriptor* d, bool isDssi = false) + { + push_back(Plugin(fi, d, isDssi)); + } + + Plugin* find(const QString&, const QString&); + PluginList() {} + }; + +//--------------------------------------------------------- +// Port +//--------------------------------------------------------- + +struct Port { + int idx; + float val; + float tmpVal; + + bool enCtrl; // Enable controller stream. + bool en2Ctrl; // Second enable controller stream (and'ed with enCtrl). + }; + +//--------------------------------------------------------- +// GuiParam +//--------------------------------------------------------- + +struct GuiParam { + enum { + GUI_SLIDER, GUI_SWITCH + }; + int type; + int hint; + + DoubleLabel* label; + QWidget* actuator; // Slider or Toggle Button (SWITCH) + }; + +//--------------------------------------------------------- +// GuiWidgets +//--------------------------------------------------------- + +struct GuiWidgets { + enum { + SLIDER, DOUBLE_LABEL, QCHECKBOX, QCOMBOBOX + }; + QWidget* widget; + int type; + int param; + }; + +class PluginI; + +/* +class PluginBase +{ + public: + bool on() const { return _on; } + void setOn(bool val) { _on = val; } + int pluginID() { return plugin()->id(); } + int id() { return _id; } + QString pluginLabel() const { return _plugin->label(); } + QString name() const { return _name; } + + AudioTrack* track() { return _track; } + + void enableController(int i, bool v = true) { controls[i].enCtrl = v; } + bool controllerEnabled(int i) const { return controls[i].enCtrl; } + bool controllerEnabled2(int i) const { return controls[i].en2Ctrl; } + void updateControllers(); + + void writeConfiguration(int level, Xml& xml); + bool readConfiguration(Xml& xml, bool readPreset=false); + + int parameters() const { return controlPorts; } + void setParam(int i, double val) { controls[i].tmpVal = val; } + double param(int i) const { return controls[i].val; } + const char* paramName(int i) { return _plugin->portName(controls[i].idx); } + LADSPA_PortRangeHint range(int i) + { + return _plugin->range(controls[i].idx); + } +}; +*/ + +//--------------------------------------------------------- +// PluginIBase +//--------------------------------------------------------- + +class PluginIBase +{ + public: + virtual bool on() const = 0; + virtual void setOn(bool /*val*/) = 0; + virtual int pluginID() = 0; + virtual int id() = 0; + virtual QString pluginLabel() const = 0; + virtual QString name() const = 0; + + virtual AudioTrack* track() = 0; + + virtual void enableController(int /*i*/, bool v = true) = 0; + virtual bool controllerEnabled(int /*i*/) const = 0; + virtual bool controllerEnabled2(int /*i*/) const = 0; + virtual void updateControllers() = 0; + + virtual void writeConfiguration(int /*level*/, Xml& /*xml*/) = 0; + virtual bool readConfiguration(Xml& /*xml*/, bool readPreset=false) = 0; + + virtual int parameters() const = 0; + virtual void setParam(int /*i*/, double /*val*/) = 0; + virtual double param(int /*i*/) const = 0; + virtual const char* paramName(int /*i*/) = 0; + virtual LADSPA_PortRangeHint range(int /*i*/) = 0; +}; + +//--------------------------------------------------------- +// PluginGui +//--------------------------------------------------------- + +class PluginGui : public Q3MainWindow { + Q_OBJECT + + //PluginI* plugin; // plugin instance + PluginIBase* plugin; // plugin instance + + GuiParam* params; + int nobj; // number of widgets in gw + GuiWidgets* gw; + + QToolButton* onOff; + QWidget* mw; // main widget + Q3ScrollView* view; + + void updateControls(); + + private slots: + void load(); + void save(); + void bypassToggled(bool); + void sliderChanged(double, int); + void labelChanged(double, int); + void guiParamChanged(int); + void ctrlPressed(int); + void ctrlReleased(int); + void guiParamPressed(int); + void guiParamReleased(int); + void guiSliderPressed(int); + void guiSliderReleased(int); + void ctrlRightClicked(const QPoint &, int); + void guiSliderRightClicked(const QPoint &, int); + + protected slots: + void heartBeat(); + + public: + //PluginGui(PluginI*); + PluginGui(PluginIBase*); + + ~PluginGui(); + void setOn(bool); + void updateValues(); + }; + +//--------------------------------------------------------- +// PluginI +// plugin instance +//--------------------------------------------------------- + +#define AUDIO_IN (LADSPA_PORT_AUDIO | LADSPA_PORT_INPUT) +#define AUDIO_OUT (LADSPA_PORT_AUDIO | LADSPA_PORT_OUTPUT) + +//class PluginI { +class PluginI : public PluginIBase { + Plugin* _plugin; + int channel; + int instances; + AudioTrack* _track; + int _id; + + LADSPA_Handle* handle; // per instance + Port* controls; + Port* controlsOut; + + int controlPorts; + int controlOutPorts; + PluginGui* _gui; + bool _on; + bool initControlValues; + QString _name; + QString _label; + + //#ifdef DSSI_SUPPORT + //StringParamMap _stringParamMap; + //#endif + + #ifdef OSC_SUPPORT + OscEffectIF _oscif; + #endif + bool _showNativeGuiPending; + + void init(); + void makeGui(); + + public: + PluginI(); + ~PluginI(); + + Plugin* plugin() const { return _plugin; } + bool on() const { return _on; } + void setOn(bool val) { _on = val; } + PluginGui* gui() const { return _gui; } + void deleteGui(); + + void setTrack(AudioTrack* t) { _track = t; } + AudioTrack* track() { return _track; } + int pluginID() { return _plugin->id(); } + void setID(int i); + int id() { return _id; } + void updateControllers(); + + bool initPluginInstance(Plugin*, int channels); + void setChannels(int); + void connect(int ports, float** src, float** dst); + void apply(int n); + + void enableController(int i, bool v = true) { controls[i].enCtrl = v; } + bool controllerEnabled(int i) const { return controls[i].enCtrl; } + void enable2Controller(int i, bool v = true) { controls[i].en2Ctrl = v; } + bool controllerEnabled2(int i) const { return controls[i].en2Ctrl; } + void enableAllControllers(bool v = true); + void enable2AllControllers(bool v = true); + + void activate(); + void deactivate(); + QString pluginLabel() const { return _plugin->label(); } + QString label() const { return _label; } + QString name() const { return _name; } + CtrlValueType valueType() const; + QString lib() const { return _plugin->lib(); } + + #ifdef OSC_SUPPORT + OscEffectIF& oscIF() { return _oscif; } + /* + int oscConfigure(lo_arg**); + int oscControl(lo_arg**); + //int oscUpdate(lo_arg**); + //int oscExiting(lo_arg**); + */ + + int oscControl(unsigned long /*dssiPort*/, float /*val*/); + int oscConfigure(const char */*key*/, const char */*val*/); + int oscUpdate(); + //int oscExiting(); + #endif + + void writeConfiguration(int level, Xml& xml); + bool readConfiguration(Xml& xml, bool readPreset=false); + bool loadControl(Xml& xml); + bool setControl(const QString& s, double val); + void showGui(); + void showGui(bool); + bool isDssiPlugin() const { return _plugin->isDssiPlugin(); } + void showNativeGui(); + void showNativeGui(bool); + bool isShowNativeGuiPending() { return _showNativeGuiPending; } + bool guiVisible(); + bool nativeGuiVisible(); + int parameters() const { return controlPorts; } + void setParam(int i, double val) { controls[i].tmpVal = val; } + double param(int i) const { return controls[i].val; } + double defaultValue(unsigned int param) const; + const char* paramName(int i) { return _plugin->portName(controls[i].idx); } + LADSPA_PortDescriptor portd(int i) const { return _plugin->portd(controls[i].idx); } + void range(int i, float* min, float* max) const { + _plugin->range(controls[i].idx, min, max); + } + bool isAudioIn(int k) { + return (_plugin->portd(k) & AUDIO_IN) == AUDIO_IN; + } + bool isAudioOut(int k) { + return (_plugin->portd(k) & AUDIO_OUT) == AUDIO_OUT; + } + bool inPlaceCapable() const { return _plugin->inPlaceCapable(); } + LADSPA_PortRangeHint range(int i) { + return _plugin->range(controls[i].idx); + } + }; + +//--------------------------------------------------------- +// Pipeline +// chain of connected efx inserts +//--------------------------------------------------------- + +const int PipelineDepth = 4; + +class Pipeline : public std::vector { + float* buffer[MAX_CHANNELS]; + + public: + Pipeline(); + ~Pipeline(); + + void insert(PluginI* p, int index); + void remove(int index); + void removeAll(); + bool isOn(int idx) const; + void setOn(int, bool); + QString label(int idx) const; + QString name(int idx) const; + void showGui(int, bool); + bool isDssiPlugin(int) const; + void showNativeGui(int, bool); + void deleteGui(int idx); + void deleteAllGuis(); + bool guiVisible(int); + bool nativeGuiVisible(int); + void apply(int ports, unsigned long nframes, float** buffer); + void move(int idx, bool up); + bool empty(int idx) const; + void setChannels(int); + }; + +typedef Pipeline::iterator iPluginI; +typedef Pipeline::const_iterator ciPluginI; + +//--------------------------------------------------------- +// PluginDialog +//--------------------------------------------------------- + +class PluginDialog : public QDialog { + Q3ListView* pList; + + Q_OBJECT + + public: + PluginDialog(QWidget* parent=0, const char* name=0, bool modal=true); + static Plugin* getPlugin(QWidget* parent); + Plugin* value(); + void accept(); +public slots: + void fillPlugs(int i); + void fillPlugs(const QString& sortValue); + private: + QComboBox *sortBox; + static int selectedPlugType; + static QStringList sortItems; + }; + +extern void initPlugins(); +extern PluginList plugins; + +extern bool ladspaDefaultValue(const LADSPA_Descriptor* plugin, int port, float* val); +extern void ladspaControlRange(const LADSPA_Descriptor* plugin, int i, float* min, float* max); +extern bool ladspa2MidiControlValues(const LADSPA_Descriptor* plugin, int port, int ctlnum, int* min, int* max, int* def); +//extern MidiController* ladspa2MidiController(const LADSPA_Descriptor* plugin, int port, int ctlnum); +extern float midi2LadspaValue(const LADSPA_Descriptor* plugin, int port, int ctlnum, int val); + +#endif + diff --git a/muse2/muse/pos.cpp b/muse2/muse/pos.cpp new file mode 100644 index 00000000..aa9538ca --- /dev/null +++ b/muse2/muse/pos.cpp @@ -0,0 +1,567 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: pos.cpp,v 1.11.2.1 2006/09/19 19:07:08 spamatica Exp $ +// +// (C) Copyright 2000 Werner Schweer (ws@seh.de) +//========================================================= + +#include + +#include "pos.h" +#include "xml.h" +#include "tempo.h" +#include "globals.h" +#include "sig.h" + +extern int mtcType; + +//--------------------------------------------------------- +// Pos +//--------------------------------------------------------- + +Pos::Pos() + { + _type = TICKS; + _tick = 0; + _frame = 0; + sn = -1; + } + +Pos::Pos(const Pos& p) + { + _type = p._type; + sn = p.sn; + _tick = p._tick; + _frame = p._frame; + } + +Pos::Pos(unsigned t, bool ticks) + { + if (ticks) { + _type = TICKS; + _tick = t; + } + else { + _type = FRAMES; + _frame = t; + } + sn = -1; + } + +Pos::Pos(const QString& s) + { + int m, b, t; + sscanf(s.latin1(), "%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(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 * 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+=(Pos a) + { + switch(_type) { + case FRAMES: + _frame += a.frame(); + break; + case TICKS: + _tick += a.tick(); + break; + } + sn = -1; // invalidate cached values + return *this; + } + +//--------------------------------------------------------- +// operator+= +//--------------------------------------------------------- + +Pos& Pos::operator+=(int a) + { + switch(_type) { + case FRAMES: + _frame += a; + break; + case TICKS: + _tick += a; + break; + } + sn = -1; // invalidate cached values + return *this; + } + +Pos operator+(Pos a, int b) + { + Pos c; + c.setType(a.type()); + return c += b; + } + +Pos operator+(Pos a, 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(); + } + +//--------------------------------------------------------- +// 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(int level, Xml& xml, const char* name) const + { + xml.nput(level++, "<%s ", name); + + switch(_type) { + case TICKS: + xml.nput("tick=\"%d\"", _tick); + break; + case FRAMES: + xml.nput("frame=\"%d\"", _frame); + break; + } + xml.put(" />", name); + } + +//--------------------------------------------------------- +// read +//--------------------------------------------------------- + +void Pos::read(Xml& xml, const char* name) + { + sn = -1; + for (;;) { + Xml::Token token = xml.parse(); + const QString& tag = xml.s1(); + switch (token) { + case Xml::Error: + case Xml::End: + return; + + case Xml::TagStart: + xml.unknown(name); + break; + + case Xml::Attribut: + if (tag == "tick") { + _tick = xml.s2().toInt(); + _type = TICKS; + } + else if (tag == "frame") { + _frame = xml.s2().toInt(); + _type = FRAMES; + } + else if (tag == "sample") { // obsolete + _frame = xml.s2().toInt(); + _type = FRAMES; + } + else + xml.unknown(name); + break; + + case Xml::TagEnd: + if (tag == name) + return; + default: + break; + } + } + } + +//--------------------------------------------------------- +// 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(int level, Xml& xml, const char* name) const + { + xml.nput(level++, "<%s ", name); + + switch(type()) { + case TICKS: + xml.nput("tick=\"%d\" len=\"%d\"", tick(), _lenTick); + break; + case FRAMES: + xml.nput("sample=\"%d\" len=\"%d\"", frame(), _lenFrame); + break; + } + xml.put(" />", name); + } + +//--------------------------------------------------------- +// read +//--------------------------------------------------------- + +void PosLen::read(Xml& xml, const char* name) + { + sn = -1; + for (;;) { + Xml::Token token = xml.parse(); + const QString& tag = xml.s1(); + switch (token) { + case Xml::Error: + case Xml::End: + return; + + case Xml::TagStart: + xml.unknown(name); + break; + + case Xml::Attribut: + if (tag == "tick") { + setType(TICKS); + setTick(xml.s2().toInt()); + } + else if (tag == "sample") { + setType(FRAMES); + setFrame(xml.s2().toInt()); + } + else if (tag == "len") { + int n = xml.s2().toInt(); + switch(type()) { + case TICKS: + setLenTick(n); + break; + case FRAMES: + setLenFrame(n); + break; + } + } + else + xml.unknown(name); + break; + + case Xml::TagEnd: + if (tag == name) + return; + default: + break; + } + } + } + +//--------------------------------------------------------- +// setLenTick +//--------------------------------------------------------- + +void PosLen::setLenTick(unsigned len) + { + _lenTick = len; + sn = -1; +// if (type() == FRAMES) + _lenFrame = tempomap.deltaTick2frame(tick(), tick() + len, &sn); + } + +//--------------------------------------------------------- +// setLenFrame +//--------------------------------------------------------- + +void PosLen::setLenFrame(unsigned len) + { + _lenFrame = len; + sn = -1; +// if (type() == TICKS) + _lenTick = tempomap.deltaFrame2tick(frame(), frame() + len, &sn); + } + +//--------------------------------------------------------- +// lenTick +//--------------------------------------------------------- + +unsigned PosLen::lenTick() const + { + if (type() == FRAMES) + _lenTick = tempomap.deltaFrame2tick(frame(), frame() + _lenFrame, &sn); + return _lenTick; + } + +//--------------------------------------------------------- +// lenFrame +//--------------------------------------------------------- + +unsigned PosLen::lenFrame() const + { + if (type() == TICKS) + _lenFrame = tempomap.deltaTick2frame(tick(), tick() + _lenTick, &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; + } + } + +//--------------------------------------------------------- +// 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 + { + double time = double(frame()) / double(sampleRate); + *min = int(time) / 60; + *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; + } + *fr = int(rest); + *subFrame = int((rest- *fr)*100); + } + +//--------------------------------------------------------- +// isValid +//--------------------------------------------------------- + +bool Pos::isValid(int,int,int) + { + return true; + } + +//--------------------------------------------------------- +// isValid +//--------------------------------------------------------- + +bool Pos::isValid(int,int,int,int) + { + return true; + } + diff --git a/muse2/muse/pos.h b/muse2/muse/pos.h new file mode 100644 index 00000000..33c08f6b --- /dev/null +++ b/muse2/muse/pos.h @@ -0,0 +1,99 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: pos.h,v 1.8 2004/07/14 15:27:26 wschweer Exp $ +// +// (C) Copyright 2000 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __POS_H__ +#define __POS_H__ + +class Xml; +class QString; + +//--------------------------------------------------------- +// 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: + enum TType { TICKS, FRAMES }; + + private: + TType _type; + mutable int sn; + mutable unsigned _tick; + mutable unsigned _frame; + + public: + Pos(); + Pos(const Pos&); + Pos(int,int,int); + Pos(int,int,int,int); + Pos(unsigned, bool ticks=true); + Pos(const QString&); + void dump(int n = 0) const; + void mbt(int*, int*, int*) const; + void msf(int*, int*, int*, int*) const; + + void invalidSn() { sn = -1; } + + TType type() const { return _type; } + void setType(TType t); + + Pos& operator+=(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; + + friend Pos operator+(Pos a, Pos b); + friend Pos operator+(Pos a, int b); + + unsigned tick() const; + unsigned frame() const; + void setTick(unsigned); + void setFrame(unsigned); + + void write(int level, Xml&, const char*) const; + void read(Xml& xml, const char*); + bool isValid() const { return true; } + static bool isValid(int m, int b, int t); + static bool isValid(int, int, int, int); + }; + +//--------------------------------------------------------- +// 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(int level, Xml&, const char*) const; + void read(Xml& xml, const char*); + 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&); + }; + +#endif diff --git a/muse2/muse/remote/Makefile.am b/muse2/muse/remote/Makefile.am new file mode 100644 index 00000000..a1335682 --- /dev/null +++ b/muse2/muse/remote/Makefile.am @@ -0,0 +1,15 @@ +include $(top_srcdir)/common.am + +noinst_LIBRARIES = libremote.a + +if PCH +AM_CXXFLAGS += -include $(top_srcdir)/all.h +else +AM_CXXFLAGS += -DINSTPREFIX=\"$(prefix)\" +endif + +AM_CPPFLAGS += -I$(PYTHON_INCLUDES) -DENABLE_PYTHON + +dist_libremote_a_SOURCES = \ + pyapi.cpp pyapi.h + diff --git a/muse2/muse/remote/Makefile.in b/muse2/muse/remote/Makefile.in new file mode 100644 index 00000000..ecae5271 --- /dev/null +++ b/muse2/muse/remote/Makefile.in @@ -0,0 +1,590 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/common.am +@PCH_TRUE@am__append_1 = -include $(top_srcdir)/all.h +@PCH_FALSE@am__append_2 = -DINSTPREFIX=\"$(prefix)\" +subdir = muse/remote +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal-include.m4 \ + $(top_srcdir)/m4/alsa.m4 $(top_srcdir)/m4/docbook.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +LIBRARIES = $(noinst_LIBRARIES) +ARFLAGS = cru +libremote_a_AR = $(AR) $(ARFLAGS) +libremote_a_LIBADD = +dist_libremote_a_OBJECTS = pyapi.$(OBJEXT) +libremote_a_OBJECTS = $(dist_libremote_a_OBJECTS) +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +CXXLD = $(CXX) +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(dist_libremote_a_SOURCES) +DIST_SOURCES = $(dist_libremote_a_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DOCBOOKSTYLE = @DOCBOOKSTYLE@ +DOCBOOKTARGETS = @DOCBOOKTARGETS@ +DOT = @DOT@ +DOTPATH = @DOTPATH@ +DOXYGEN = @DOXYGEN@ +DOXYGEN_TREEVIEW = @DOXYGEN_TREEVIEW@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FLUIDSYNTHDIRS = @FLUIDSYNTHDIRS@ +FST_CFLAGS = @FST_CFLAGS@ +FST_LIBS = @FST_LIBS@ +Fluidsynth_CFLAGS = @Fluidsynth_CFLAGS@ +Fluidsynth_LIBS = @Fluidsynth_LIBS@ +GIVERTCAP = @GIVERTCAP@ +GREP = @GREP@ +HAVEDOT = @HAVEDOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_LIBS = @JACK_LIBS@ +JADE = @JADE@ +LASH_CFLAGS = @LASH_CFLAGS@ +LASH_LIBS = @LASH_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LO_CFLAGS = @LO_CFLAGS@ +LO_LIBS = @LO_LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MUSECXXFLAGS = @MUSECXXFLAGS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NSGMLS = @NSGMLS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PCH = @PCH@ +PERL = @PERL@ +PKG_CONFIG = @PKG_CONFIG@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIB = @PYTHON_LIB@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QTDIR_BIN = @QTDIR_BIN@ +QTDIR_INC = @QTDIR_INC@ +QT_LIBS = @QT_LIBS@ +RANLIB = @RANLIB@ +SAMPLERATE_CFLAGS = @SAMPLERATE_CFLAGS@ +SAMPLERATE_LIBS = @SAMPLERATE_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ +SNDFILE_LIBS = @SNDFILE_LIBS@ +STRIP = @STRIP@ +SUIDBUILD = @SUIDBUILD@ +SUIDINSTALL = @SUIDINSTALL@ +USE_SSE = @USE_SSE@ +UUID_CFLAGS = @UUID_CFLAGS@ +UUID_LIBS = @UUID_LIBS@ +VERSION = @VERSION@ +XMKMF = @XMKMF@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +have_docbook = @have_docbook@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +synth_fluid = @synth_fluid@ +synth_fluidsynth = @synth_fluidsynth@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AM_CXXFLAGS = $(MUSECXXFLAGS) -I.. -I$(top_srcdir)/synti \ + -I$(top_srcdir)/muse/widgets -DQT_SHARED -DQT_THREAD_SUPPORT \ + -DQT_PLUGIN $(QTDIR_INC) -DQT3_SUPPORT $(am__append_1) \ + $(am__append_2) +AM_CPPFLAGS = -I$(PYTHON_INCLUDES) -DENABLE_PYTHON +MOC = $(QTDIR_BIN)/moc +#UIC = $(QTDIR_BIN)/uic3 +UIC = /usr/bin/uic3 +UIFILES = $(wildcard *.ui) +MOCFILES = $(shell for h in $(filter %.h,$(SOURCES)); do \ + if grep -q Q_OBJECT $$h; then \ + echo $$h | sed "s/\(.*\)\.h/moc_\1.cpp/"; \ + fi; \ + done) + +BUILT_SOURCES = $(MOCFILES) $(UIFILES:%.ui=%.h) +MOSTLYCLEANFILES = $(MOCFILES) $(UIFILES:%.ui=%.h) +SUFFIXES = .ui .h.gch +noinst_LIBRARIES = libremote.a +dist_libremote_a_SOURCES = \ + pyapi.cpp pyapi.h + +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: .ui .h.gch .cpp .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/common.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu muse/remote/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu muse/remote/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-noinstLIBRARIES: + -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) +libremote.a: $(libremote_a_OBJECTS) $(libremote_a_DEPENDENCIES) + -rm -f libremote.a + $(libremote_a_AR) libremote.a $(libremote_a_OBJECTS) $(libremote_a_LIBADD) + $(RANLIB) libremote.a + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pyapi.Po@am__quote@ + +.cpp.o: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< + +.cpp.obj: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.cpp.lo: +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-am +all-am: Makefile $(LIBRARIES) +installdirs: +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +clean: clean-am + +clean-am: clean-generic clean-libtool clean-noinstLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: all check install install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-noinstLIBRARIES ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags uninstall uninstall-am + + +de: + @for base in $(MOCFILES); do echo -e "\t$${base}.cpp $${base}.h \\"; done + +nde: + @for base in $(MOCFILES); do echo -e "\tmoc_$${base}.cpp \\"; done + +.ui.o: %.h + $(UIC) -L $(top_srcdir)/muse/widgets -o $*.cpp -impl $*.h $*.ui + $(MOC) $*.h >> $*.cpp + $(CXXCOMPILE) -c $*.cpp -o $*.o + $(RM) $*.cpp moc_$*.cpp moc_$*.o + +.ui.lo: %.h + $(UIC) -L $(top_srcdir)/muse/widgets -o $*.cpp -impl $*.h $*.ui + $(MOC) $*.h >> $*.cpp + $(LTCXXCOMPILE) -c $*.cpp -o $*.lo + $(RM) $*.cpp moc_$*.cpp moc_$*.lo moc_$*.o + +moc_%.cpp: %.h + $(MOC) $< -o $@ + +%.h: %.ui + $(UIC) -o $@ $< +# $(UIC) -L $(top_srcdir)/muse/widgets -o $@ $< + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/muse2/muse/remote/pyapi.cpp b/muse2/muse/remote/pyapi.cpp new file mode 100644 index 00000000..e71b8a18 --- /dev/null +++ b/muse2/muse/remote/pyapi.cpp @@ -0,0 +1,1142 @@ +//========================================================= +// MusE +// Linux Music Editor +// (C) Copyright 2009 Mathias Gyllengahm (lunar_shuttle@users.sf.net) +//========================================================= +#include +#include +#include +#include +#include + +#include +#include +#include + +#include "pyapi.h" +#include "song.h" +#include "tempo.h" +#include "track.h" +#include "audio.h" +#include "gconfig.h" +#include "midictrl.h" +#include "midiport.h" +#include "plugin.h" +#include "midi.h" +#include "app.h" + +// Steals ref: PyList_SetItem, PyTuple_SetItem +using namespace std; + +static pthread_t pyapiThread; +//------------------------------------------------------------ +QPybridgeEvent::QPybridgeEvent(QPybridgeEvent::EventType _type, int _p1, int _p2) + :QEvent(QEvent::User), + type(_type), + p1(_p1), + p2(_p2) +{ +} +//------------------------------------------------------------ +// Get current position +//------------------------------------------------------------ +PyObject* getCPos(PyObject*, PyObject*) +{ + return Py_BuildValue("i", song->cpos()); +} +//------------------------------------------------------------ +// Get position of left locator +//------------------------------------------------------------ +PyObject* getLPos(PyObject*, PyObject*) +{ + return Py_BuildValue("i", song->lpos()); +} +//------------------------------------------------------------ +// Get position of right locator +//------------------------------------------------------------ +PyObject* getRPos(PyObject*, PyObject*) +{ + return Py_BuildValue("i", song->rpos()); +} +//------------------------------------------------------------ +// Start playing from current position +//------------------------------------------------------------ +PyObject* startPlay(PyObject*, PyObject*) +{ + //song->setPlay(true); + QPybridgeEvent* pyevent = new QPybridgeEvent(QPybridgeEvent::SONG_SETPLAY); + QApplication::postEvent(song, pyevent); + Py_INCREF(Py_None); + return Py_None; +} +//------------------------------------------------------------ +// Stop playing +//------------------------------------------------------------ +PyObject* stopPlay(PyObject*, PyObject*) +{ + //song->setStop(true); + QPybridgeEvent* pyevent = new QPybridgeEvent(QPybridgeEvent::SONG_SETSTOP); + QApplication::postEvent(song, pyevent); + Py_INCREF(Py_None); + return Py_None; +} +//------------------------------------------------------------ +// Rewind to start +//------------------------------------------------------------ +PyObject* rewindStart(PyObject*, PyObject*) +{ + //song->rewindStart(); + QPybridgeEvent* pyevent = new QPybridgeEvent(QPybridgeEvent::SONG_REWIND); + QApplication::postEvent(song, pyevent); + Py_INCREF(Py_None); + return Py_None; +} +//------------------------------------------------------------ +// Get tempo at specific position +//------------------------------------------------------------ +PyObject* getTempo(PyObject*, PyObject* args) +{ + int tick; + if (!PyArg_ParseTuple(args, "i", &tick)) { + return Py_BuildValue("i", 1000); + } + + int tempovalue = tempomap.tempo(tick); + return Py_BuildValue("i", tempovalue); +} +//------------------------------------------------------------ +// Get track names +//------------------------------------------------------------ +PyObject* getTrackNames(PyObject*, PyObject*) +{ + TrackList* tracks = song->tracks(); + PyObject* res = Py_BuildValue("[]"); + for (ciTrack t = tracks->begin(); t != tracks->end(); ++t) { + Track* track = *t; + PyObject* ptrackname = Py_BuildValue("s", track->name().latin1()); + PyList_Append(res, ptrackname); + Py_DECREF(ptrackname); + } + + return res; +} +//------------------------------------------------------------ +// Find part by serial nr +//------------------------------------------------------------ +Part* findPartBySerial(int sn) +{ + TrackList* tracks = song->tracks(); + for (ciTrack t = tracks->begin(); t != tracks->end(); ++t) { + Track* track = *t; + PartList* parts = track->parts(); + for (ciPart p = parts->begin(); p != parts->end(); p++) { + Part* part = p->second; + if (part->sn() == sn) + return part; + } + } + + return NULL; +} +//------------------------------------------------------------ +// Get parts from track +//------------------------------------------------------------ +PyObject* getParts(PyObject*, PyObject* args) +{ + TrackList* tracks = song->tracks(); + const char* trackname; + if (!PyArg_ParseTuple(args, "s", &trackname)) { + return NULL; + } + + PyObject* pyparts = Py_BuildValue("[]"); + for (ciTrack t = tracks->begin(); t != tracks->end(); ++t) { + Track* track = *t; + if (track->name() != trackname) + continue; + + PartList* parts = track->parts(); + for (ciPart p = parts->begin(); p != parts->end(); p++) { + Part* part = p->second; + + MidiPart* mpart = (MidiPart*) part; + PyObject* pypart = PyDict_New(); + int tick = mpart->tick(); + int lentick = mpart->lenTick(); + int serialnr = mpart->sn(); + PyObject* pstrtick = Py_BuildValue("s","tick"); + PyObject* pitick = Py_BuildValue("i", tick); + PyObject* pstrid = Py_BuildValue("s","id"); + PyObject* pstrserial = Py_BuildValue("i", serialnr); + PyObject* pstrlen = Py_BuildValue("s","len"); + PyObject* pstrtick2 = Py_BuildValue("i", lentick); + + PyDict_SetItem(pypart, pstrtick, pitick); + PyDict_SetItem(pypart, pstrid, pstrserial); + PyDict_SetItem(pypart, pstrlen, pstrtick2); + + Py_DECREF(pstrtick); + Py_DECREF(pitick); + Py_DECREF(pstrid); + Py_DECREF(pstrserial); + Py_DECREF(pstrlen); + Py_DECREF(pstrtick2); + + // Pack midi events into list before wrapping it all up + EventList* events = mpart->events(); + PyObject* pyevents = Py_BuildValue("[]"); + for (ciEvent e = events->begin(); e != events->end(); e++) { + PyObject* pyevent = PyDict_New(); // The event structure - a dictionary with keys 'type','tick','data' + + const Event& event = e->second; + unsigned tick = e->first; + PyObject* eventdata = Py_BuildValue("[i,i,i]", event.dataA(), event.dataB(), event.dataC()); + PyObject* pstrdata = Py_BuildValue("s", "data"); + pstrtick = Py_BuildValue("s", "tick"); + PyObject* pitickval = Py_BuildValue("i", tick); + PyDict_SetItem(pyevent, pstrdata, eventdata); + PyDict_SetItem(pyevent, pstrtick, pitickval); + Py_DECREF(eventdata); + Py_DECREF(pstrdata); + Py_DECREF(pstrtick); + Py_DECREF(pitickval); + + switch(event.type()) { + case Note: { + PyObject* pstrtype = Py_BuildValue("s", "type"); + PyObject* pstrnote = Py_BuildValue("s", "note"); + PyObject* pstrlen = Py_BuildValue("s", "len"); + PyObject* pilentick = Py_BuildValue("i", event.lenTick()); + PyDict_SetItem(pyevent, pstrtype, pstrnote); + PyDict_SetItem(pyevent, pstrlen, pilentick); + Py_DECREF(pstrtype); + Py_DECREF(pstrnote); + Py_DECREF(pstrlen); + Py_DECREF(pilentick); + break; + } + case Controller: { + PyObject* pstrtype = Py_BuildValue("s", "type"); + PyObject* pstrctrl = Py_BuildValue("s", "ctrl"); + PyDict_SetItem(pyevent, pstrtype, pstrctrl); + Py_DECREF(pstrtype); + Py_DECREF(pstrctrl); + break; + } + default: + printf("Event type not supported yet: %d\n", event.type()); + break; + } + PyList_Append(pyevents, pyevent); + Py_DECREF(pyevent); + } + Py_DECREF(pyevents); + // Add the event list to the pypart dictionary + PyObject* pystrevents = Py_BuildValue("s", "events"); + PyDict_SetItem(pypart, pystrevents, pyevents); + Py_DECREF(pystrevents); + PyList_Append(pyparts, pypart); + Py_DECREF(pypart); + } + + return pyparts; + } + + return NULL; +} + +//------------------------------------------------------------ +// parsePythonPart +// get part id/serialno from python part structure +//------------------------------------------------------------ +int getPythonPartId(PyObject* part) +{ + PyObject* pyid = PyDict_GetItemString(part, "id"); + int id = PyInt_AsLong(pyid); + return id; +} + +//------------------------------------------------------------ +// addPyPartEventsToMusePart +// parse events from python part structure into muse part +//------------------------------------------------------------ +bool addPyPartEventsToMusePart(MidiPart* npart, PyObject* part) +{ + PyObject* events; + + if (PyDict_Check(part) == false) { + printf("Not a dict!\n"); + return false; + } + PyObject* pstrevents = Py_BuildValue("s","events"); + if (PyDict_Contains(part, pstrevents) == false) { + Py_DECREF(pstrevents); + printf("No events in part data...\n"); + return false; + } + Py_DECREF(pstrevents); + + events = PyDict_GetItemString(part, "events"); + + if (PyList_Check(events) == false) { + printf("Events not a list!\n"); + return false; + } + + // + // Go through event list, create MusE events of them and add to new part + // + Py_ssize_t len = PyList_Size(events); + for (Py_ssize_t i=0; ievents()->add(event); + } + else + printf("Unhandled event type from python: %s\n", type.c_str()); + } + + return true; +} +//------------------------------------------------------------ +// Create a new part at a particular tick and track +//------------------------------------------------------------ +PyObject* createPart(PyObject*, PyObject* args) +{ + const char* trackname; + unsigned tick, tickLen; + PyObject* part; + + if (!PyArg_ParseTuple(args, "siiO", &trackname, &tick, &tickLen, &part)) { + return NULL; + } + + QString qtrackname(trackname); + MidiTrack* track = (MidiTrack*) song->findTrack(trackname); + if (track == NULL) + return NULL; + + MidiPart* npart = new MidiPart(track); + npart->setTick(tick); + npart->setLenTick(tickLen); + addPyPartEventsToMusePart(npart, part); + + song->addPart(npart); + QPybridgeEvent* pyevent = new QPybridgeEvent(QPybridgeEvent::SONG_UPDATE, SC_TRACK_MODIFIED); + QApplication::postEvent(song, pyevent); + + Py_INCREF(Py_None); + return Py_None; +} + +//------------------------------------------------------------ +// Modify a particular part: +// args: new part data, old part data is used from the part with the same id as the one sent here +// TODO: Lots and lots of refcount stuff +//------------------------------------------------------------ +PyObject* modifyPart(PyObject*, PyObject* part) +{ + int id = getPythonPartId(part); + + Part* opart = NULL; + // Verify a part with that id actually exists, then get it + TrackList* tracks = song->tracks(); + for (ciTrack t = tracks->begin(); t != tracks->end(); ++t) { + Track* track = *t; + for (ciPart p = track->parts()->begin(); p != track->parts()->end(); p++) { + if (p->second->sn() == id) { + opart = p->second; + break; + } + } + } + + if (opart == NULL) { + printf("Part doesn't exist!\n"); + return NULL; + } + + // Remove all note and controller events from current part eventlist + std::list< std::pair > elist; + MidiPart* npart = new MidiPart((MidiTrack*)opart->track()); + npart->setTick(opart->tick()); + npart->setLenTick(opart->lenTick()); + npart->setSn(opart->sn()); + + for (iEvent e = opart->events()->begin(); e != opart->events()->end(); e++) { + Event& event = e->second; + if (event.type() == Note || event.type() == Controller) + continue; + + npart->events()->add(event); + } + + addPyPartEventsToMusePart(npart, part); + + //song->startUndo(); + song->changePart(opart, npart); + //song->endUndo(SC_TRACK_MODIFIED | SC_PART_MODIFIED | SC_PART_INSERTED); // Crash! Probably since the call ends up in Qt GUI thread from this thread + + QPybridgeEvent* pyevent = new QPybridgeEvent(QPybridgeEvent::SONG_UPDATE, SC_TRACK_MODIFIED | SC_PART_MODIFIED | SC_PART_INSERTED); + QApplication::postEvent(song, pyevent); + + + Py_INCREF(Py_None); + return Py_None; +} +//------------------------------------------------------------ +// deletePart +// delete part by serial nr +//------------------------------------------------------------ +PyObject* deletePart(PyObject*, PyObject* args) +{ + int id; + if (!PyArg_ParseTuple(args, "i", &id)) { + return NULL; + } + + Part* part = findPartBySerial(id); + if (part == NULL) + return NULL; + + song->removePart(part); + QPybridgeEvent* pyevent = new QPybridgeEvent(QPybridgeEvent::SONG_UPDATE, SC_TRACK_MODIFIED | SC_PART_REMOVED); + QApplication::postEvent(song, pyevent); + Py_INCREF(Py_None); + return Py_None; +} + +//------------------------------------------------------------ +// setPos +//------------------------------------------------------------ +PyObject* setPos(PyObject*, PyObject* args) +{ + int index; + int ticks; + if (!PyArg_ParseTuple(args, "ii", &index, &ticks)) { + return NULL; + } + + //song->setPos(index, ticks); + QPybridgeEvent* pyevent = new QPybridgeEvent(QPybridgeEvent::SONG_POSCHANGE, index, ticks); + QApplication::postEvent(song, pyevent); + + Py_INCREF(Py_None); + return Py_None; +} + + +//------------------------------------------------------------ +// setLen +//------------------------------------------------------------ +PyObject* setSongLen(PyObject*, PyObject* args) +{ + unsigned len; + + if (!PyArg_ParseTuple(args, "i", &len)) { + return NULL; + } + //song->setLen(len);// Appears to not be ok to call from python thread, we do it with event instead + QPybridgeEvent* pyevent = new QPybridgeEvent(QPybridgeEvent::SONGLEN_CHANGE, len); + QApplication::postEvent(song, pyevent); + Py_INCREF(Py_None); + return Py_None; +} +//------------------------------------------------------------ +// getLen +//------------------------------------------------------------ +PyObject* getSongLen(PyObject*, PyObject*) +{ + PyObject* pylen = Py_BuildValue("i", song->len()); + + return pylen; +} +//------------------------------------------------------------ +// getDivision +//------------------------------------------------------------ +PyObject* getDivision(PyObject*, PyObject*) +{ + return Py_BuildValue("i", config.division); +} +//------------------------------------------------------------ +// setTrackParameter +//------------------------------------------------------------ +PyObject* setMidiTrackParameter(PyObject*, PyObject* args) +{ + const char* trackname; + const char* paramname; + int value; + if(!PyArg_ParseTuple(args, "ssi", &trackname, ¶mname, &value)) + return NULL; + + Track* track = song->findTrack(QString(trackname)); + if (track == NULL) + return NULL; + + MidiTrack* mt = (MidiTrack*) track; + + QString qparamname(paramname); + bool changed = false; + if (qparamname == "velocity") { + changed = true; + mt->velocity = value; + } + else if (qparamname == "compression") { + changed = true; + mt->compression = value; + } + else if (qparamname == "transposition") { + changed = true; + mt->transposition = value; + } + else if (qparamname == "delay") { + changed = true; + mt->delay = value; + } + + if (changed) { + QPybridgeEvent* pyevent = new QPybridgeEvent(QPybridgeEvent::SONG_UPDATE, SC_TRACK_MODIFIED); + QApplication::postEvent(song, pyevent); + } + + return Py_BuildValue("b", changed); // true/false depending on whether anythin was changed +} +//------------------------------------------------------------ +// Set loop +//------------------------------------------------------------ +PyObject* setLoop(PyObject*, PyObject* args) +{ + bool loopFlag; + if(!PyArg_ParseTuple(args, "b", &loopFlag)) + return NULL; + + song->setLoop(loopFlag); + Py_INCREF(Py_None); + return Py_None; +} +//------------------------------------------------------------ +// Get loop value +//------------------------------------------------------------ +PyObject* getLoop(PyObject*, PyObject*) +{ + return Py_BuildValue("b", song->getLoop()); +} +//------------------------------------------------------------ +// getMute trackname +//------------------------------------------------------------ +PyObject* getMute(PyObject*, PyObject* args) +{ + const char* trackname; + if (!PyArg_ParseTuple(args, "s", &trackname)) { + return NULL; + } + + Track* track = song->findTrack(QString(trackname)); + if (track == NULL) + return NULL; + + return Py_BuildValue("b", track->isMute()); +} +//------------------------------------------------------------ +// setMute (trackname, boolean) +//------------------------------------------------------------ +PyObject* setMute(PyObject*, PyObject* args) +{ + const char* trackname; + bool muted; + + if (!PyArg_ParseTuple(args, "sb", &trackname, &muted)) { + return NULL; + } + + Track* track = song->findTrack(QString(trackname)); + if (track == NULL) + return NULL; + + int mutedint = 1; + if (muted == false) + mutedint = 0; + + QPybridgeEvent* pyevent = new QPybridgeEvent(QPybridgeEvent::SONG_SETMUTE, mutedint); + pyevent->setS1(trackname); + QApplication::postEvent(song, pyevent); + Py_INCREF(Py_None); + return Py_None; +} +//------------------------------------------------------------ +// setController +//------------------------------------------------------------ +void setController(const char* trackname, int ctrltype, int ctrlval) +{ + QPybridgeEvent* pyevent = new QPybridgeEvent(QPybridgeEvent::SONG_SETCTRL, ctrltype, ctrlval); + pyevent->setS1(trackname); + QApplication::postEvent(song, pyevent); +} + +//------------------------------------------------------------ +// setMidiControllerValue +//------------------------------------------------------------ +PyObject* setMidiControllerValue(PyObject*, PyObject* args) +{ + const char* trackname; + int ctrltype; + int value; + + if (!PyArg_ParseTuple(args, "sii", &trackname, &ctrltype, &value)) { + return NULL; + } + + setController(trackname, ctrltype, value); + Py_INCREF(Py_None); + return Py_None; +} + +//------------------------------------------------------------ +// getMidiControllerValue +//------------------------------------------------------------ +PyObject* getMidiControllerValue(PyObject*, PyObject* args) +{ + const char* trackname; + int ctrltype; + + if (!PyArg_ParseTuple(args, "si", &trackname, &ctrltype)) { + return NULL; + } + + Track* t = song->findTrack(QString(trackname)); + if (t == NULL) + return NULL; + + if (t->isMidiTrack() == false) { + Py_INCREF(Py_None); + return Py_None; + } + + MidiTrack* track = (MidiTrack*) t; + int channel = track->outChannel(); + int outport = track->outPort(); + MidiPort* mp = &midiPorts[outport]; + if (mp == NULL) + return Py_BuildValue("i", -1); + + int value = mp->hwCtrlState(channel, ctrltype); + return Py_BuildValue("i", value); +} +//------------------------------------------------------------ +// setAudioTrackVolume +//------------------------------------------------------------ +PyObject* setAudioTrackVolume(PyObject*, PyObject* args) +{ + const char* trackname; + double volume = 0.0f; + + if (!PyArg_ParseTuple(args, "sd", &trackname, &volume)) { + return NULL; + } + + QPybridgeEvent* pyevent = new QPybridgeEvent(QPybridgeEvent::SONG_SETAUDIOVOL); + pyevent->setD1(volume); + pyevent->setS1(trackname); + QApplication::postEvent(song, pyevent); + Py_INCREF(Py_None); + return Py_None; +} +//------------------------------------------------------------ +// getAudioTrackVolume +//------------------------------------------------------------ +PyObject* getAudioTrackVolume(PyObject*, PyObject* args) +{ + const char* trackname; + + if (!PyArg_ParseTuple(args, "s", &trackname)) { + return NULL; + } + + Track* t = song->findTrack(QString(trackname)); + if (t == NULL) + return NULL; + + if (t->type() == Track::DRUM || t->type() == Track::MIDI) + return NULL; + + AudioTrack* track = (AudioTrack*) t; + return Py_BuildValue("d", track->volume()); +} + +//------------------------------------------------------------ +// getSelectedTrack +//------------------------------------------------------------ +PyObject* getSelectedTrack(PyObject*, PyObject*) +{ + TrackList* tracks = song->tracks(); + for (ciTrack t = tracks->begin(); t != tracks->end(); ++t) { + Track* track = *t; + if (track->selected()) + return Py_BuildValue("s", track->name().latin1()); + } + + Py_INCREF(Py_None); + return Py_None; +} + +//------------------------------------------------------------ +// importPart +//------------------------------------------------------------ +PyObject* importPart(PyObject*, PyObject* args) +{ + const char* trackname; + const char* filename; + int tick; + + if (!PyArg_ParseTuple(args, "ssi", &trackname, &filename, &tick)) { + return NULL; + } + + QPybridgeEvent* pyevent = new QPybridgeEvent(QPybridgeEvent::SONG_IMPORT_PART, tick); + pyevent->setS1(trackname); + pyevent->setS2(filename); + QApplication::postEvent(song, pyevent); + Py_INCREF(Py_None); + return Py_None; +} +//------------------------------------------------------------ +// getTrackEffects +//------------------------------------------------------------ +PyObject* getTrackEffects(PyObject*, PyObject* args) +{ + const char* trackname; + if (!PyArg_ParseTuple(args, "s", &trackname)) { + return NULL; + } + + Track* t = song->findTrack(QString(trackname)); + if (t == NULL) + return NULL; + + if (t->type() != Track::WAVE) + return NULL; + + AudioTrack* track = (AudioTrack*) t; + PyObject* pyfxnames = Py_BuildValue("[]"); + const Pipeline* pipeline = track->efxPipe(); + for (int i = 0; i < PipelineDepth; i++) { + QString name = pipeline->name(i); + printf("fx %d name: %s\n", i, name.latin1()); + PyObject* pyname = Py_BuildValue("s", name.latin1()); + PyList_Append(pyfxnames, pyname); + Py_DECREF(pyname); + } + + return pyfxnames; +} +//------------------------------------------------------------ +// toggleTrackEffect +//------------------------------------------------------------ +PyObject* toggleTrackEffect(PyObject*, PyObject* args) +{ + const char* trackname; + int fxid; + bool onoff; + + if (!PyArg_ParseTuple(args, "sib", &trackname, &fxid, &onoff)) + return NULL; + + Track* t = song->findTrack(QString(trackname)); + if (t == NULL) + return NULL; + + if (t->type() != Track::WAVE) + return NULL; + + QPybridgeEvent* pyevent = new QPybridgeEvent(QPybridgeEvent::SONG_TOGGLE_EFFECT, fxid, onoff); + pyevent->setS1(trackname); + + QApplication::postEvent(song, pyevent); + Py_INCREF(Py_None); + return Py_None; +} +//------------------------------------------------------------ +// changeTrackName +//------------------------------------------------------------ +PyObject* changeTrackName(PyObject*, PyObject* args) +{ + const char* trackname; + const char* newname; + + if (!PyArg_ParseTuple(args, "ss", &trackname, &newname)) + return NULL; + + Track* t = song->findTrack(QString(trackname)); + if (t == NULL) + return Py_BuildValue("b", false); + + QPybridgeEvent* pyevent = new QPybridgeEvent(QPybridgeEvent::SONG_CHANGE_TRACKNAME); + pyevent->setS1(trackname); + pyevent->setS2(newname); + QApplication::postEvent(song, pyevent); + QPybridgeEvent* pyevent2 = new QPybridgeEvent(QPybridgeEvent::SONG_UPDATE, SC_TRACK_MODIFIED); + QApplication::postEvent(song, pyevent2); + return Py_BuildValue("b", true); +} +//------------------------------------------------------------ +// addMidiTrack +//------------------------------------------------------------ +PyObject* addMidiTrack(PyObject*, PyObject*) +{ + QPybridgeEvent* pyevent = new QPybridgeEvent(QPybridgeEvent::SONG_ADD_TRACK, Track::MIDI); + QApplication::postEvent(song, pyevent); + Py_INCREF(Py_None); + return Py_None; +} +//------------------------------------------------------------ +// addWaveTrack +//------------------------------------------------------------ +PyObject* addWaveTrack(PyObject*, PyObject*) +{ + QPybridgeEvent* pyevent = new QPybridgeEvent(QPybridgeEvent::SONG_ADD_TRACK, Track::WAVE); + QApplication::postEvent(song, pyevent); + Py_INCREF(Py_None); + return Py_None; +} +//------------------------------------------------------------ +// addInput +//------------------------------------------------------------ +PyObject* addInput(PyObject*, PyObject*) +{ + QPybridgeEvent* pyevent = new QPybridgeEvent(QPybridgeEvent::SONG_ADD_TRACK, Track::AUDIO_INPUT); + QApplication::postEvent(song, pyevent); + Py_INCREF(Py_None); + return Py_None; +} +//------------------------------------------------------------ +// addOutput +//------------------------------------------------------------ +PyObject* addOutput(PyObject*, PyObject*) +{ + QPybridgeEvent* pyevent = new QPybridgeEvent(QPybridgeEvent::SONG_ADD_TRACK, Track::AUDIO_OUTPUT); + QApplication::postEvent(song, pyevent); + return Py_None; +} +//------------------------------------------------------------ +// addGroup +//------------------------------------------------------------ +PyObject* addGroup(PyObject*, PyObject*) +{ + QPybridgeEvent* pyevent = new QPybridgeEvent(QPybridgeEvent::SONG_ADD_TRACK, Track::AUDIO_GROUP); + QApplication::postEvent(song, pyevent); + return Py_None; +} +//------------------------------------------------------------ +// deleteTrack +//------------------------------------------------------------ +PyObject* deleteTrack(PyObject*, PyObject* args) +{ + const char* trackname; + + if (!PyArg_ParseTuple(args, "s", &trackname)) + return NULL; + + QPybridgeEvent* pyevent = new QPybridgeEvent(QPybridgeEvent::SONG_DELETE_TRACK); + pyevent->setS1(trackname); + QApplication::postEvent(song, pyevent); + return Py_None; +} +//------------------------------------------------------------ +// getOutputRoute +//------------------------------------------------------------ +/* +PyObject* getOutputRoute(PyObject*, PyObject* args) +{ + const char* trackname; + + if (!PyArg_ParseTuple(args, "s", &trackname)) + return NULL; + + Track* tt = song->findTrack(QString(trackname)); + if (tt == NULL) + return Py_BuildValue("b", false); + + PyObject* routes = Py_BuildValue("[]"); + if (tt->type() == Track::WAVE && tt->type() == Track::AUDIO_AUX) { + AudioTrack* t = (AudioTrack*)tt; + RouteList* r = t->outRoutes(); + + OutputList* al = song->outputs(); + for (iAudioOutput i = al->begin(); i != al->end(); ++i) { + Track* track = *i; + if (t == track) + continue; + + QString s(track->name()); + + // for (iRoute ir = r->begin(); ir != r->end(); ++ir) { + // if (ir->type == 0 && ir->track == track) { + // s += "*"; + // PyList_Append(routes, Py_BuildValue("s", s.latin1())); + // break; + // } + // } + // + } + } + else if (tt->type() == Track::AUDIO_OUTPUT) { + } + + + + return routes; +} +*/ +//------------------------------------------------------------ +// Global method definitions for MusE:s Python API +// +// This is where global functions in Python is linked to their equivalent C/C++ functions +//------------------------------------------------------------ +PyMethodDef g_methodDefinitions[] = +{ + { "startPlay", startPlay, METH_VARARGS, "Starts playing the song from current position" }, + { "stopPlay", stopPlay, METH_VARARGS, "Stops playback if currently playing" }, + { "rewindStart", rewindStart, METH_VARARGS, "Set current position to beginning of song" }, + { "getCPos", getCPos, METH_NOARGS, "Get current position (in ticks)" }, + { "getLPos", getLPos, METH_NOARGS, "Get position of left locator (in ticks)" }, + { "getRPos", getRPos, METH_NOARGS, "Get position of right locator (in ticks)" }, + { "setPos", setPos, METH_VARARGS, "Set position of locators or current position" }, + { "getTempo", getTempo, METH_VARARGS, "Get tempo of the song at a particular tick" }, + { "setLoop", setLoop, METH_VARARGS, "Set loop mode on/off" }, + { "getLoop", getLoop, METH_NOARGS, "Get loop value" }, + + { "getTrackNames", getTrackNames, METH_VARARGS, "Get track names (which are unique)" }, + { "getParts", getParts, METH_VARARGS, "Get part data from a track" }, + { "createPart", createPart, METH_VARARGS, "Create a part" }, + { "modifyPart", modifyPart, METH_O, "Modify a particular part" }, + { "deletePart", deletePart, METH_VARARGS, "Remove part with a particular serial nr" }, + { "getSelectedTrack", getSelectedTrack, METH_NOARGS, "Get first selected track" }, + { "importPart", importPart, METH_VARARGS, "Import part file to a track at a particular position" }, + { "changeTrackName", changeTrackName, METH_VARARGS, "Change track name" }, + { "addMidiTrack", addMidiTrack, METH_NOARGS, "Add a midi track" }, + { "addWaveTrack", addWaveTrack, METH_NOARGS, "Add a wave track" }, + { "addInput", addInput, METH_NOARGS, "Add audio input" }, + { "addOutput", addOutput, METH_NOARGS, "Add audio output" }, + { "addGroup", addGroup, METH_NOARGS, "Add audio group" }, + { "deleteTrack", deleteTrack, METH_VARARGS, "Delete a track" }, + + { "getTrackEffects", getTrackEffects, METH_VARARGS, "Get names of LADSPA effects on a track" }, + { "toggleTrackEffect", toggleTrackEffect, METH_VARARGS, "Toggle LADSPA effect on/off" }, + //{ "getOutputRoute", getOutputRoute, METH_VARARGS, "Get route for an audio output" }, + + { "setSongLen", setSongLen, METH_VARARGS, "Set length of song (in ticks)" }, + { "getSongLen", getSongLen, METH_VARARGS, "Get length of song (in ticks)" }, + + { "getMute", getMute, METH_VARARGS, "Get track mute property (if track is played or not)" }, + { "setMute", setMute, METH_VARARGS, "Set track mute property (if track should be played or not)" }, + { "setMidiControllerValue", setMidiControllerValue, METH_VARARGS, "Set midi controller value for a track" }, + { "getMidiControllerValue", getMidiControllerValue, METH_VARARGS, "Get midi controller value for a track" }, + { "setAudioTrackVolume", setAudioTrackVolume, METH_VARARGS, "Set volume on audio track/aux/output/input" }, + { "getAudioTrackVolume", getAudioTrackVolume, METH_VARARGS, "Get audio track/aux/output/input volume" }, + + { "setMidiTrackParameter", setMidiTrackParameter, METH_VARARGS, "Set transposition, velocity, compression or delay on track level" }, + + { "getDivision", getDivision, METH_VARARGS, "Number of ticks per 1/4 (?)" }, + + {NULL, NULL, NULL, NULL} +}; + +/** + * This function launches the Pyro name service, which blocks execution + * Thus it needs its own thread + **/ +static void* pyapithreadfunc(void*) +{ + Py_Initialize(); + PyImport_AddModule("muse"); + Py_InitModule( "muse", g_methodDefinitions ); + + // + // Access the "__main__" module and its name-space dictionary. + // + + PyObject *pMainModule = PyImport_AddModule( "__main__" ); + PyObject *pMainDictionary = PyModule_GetDict( pMainModule ); + string launcherfilename = string(INSTPREFIX) + string("/share/muse/pybridge/museplauncher.py"); + printf("Initiating MusE Pybridge launcher from %s\n", launcherfilename.c_str()); + FILE* fp = fopen(launcherfilename.c_str(),"r"); + PyRun_File(fp, launcherfilename.c_str(), Py_file_input, pMainDictionary, pMainDictionary); + fclose(fp); + + return NULL; +} + +/** + * This function currently only launches the thread. There should be some kind of check that + * things are up and running as they are supposed to + */ +bool initPythonBridge() +{ + if (pthread_create(&pyapiThread, NULL, ::pyapithreadfunc, 0)) { + return false; + } + return true; // TODO: Verify that things are up and running! +} + +//--------------------------------------------------------- +// event +// +// Function in Song class, run in the Qt event thread context. +// Handles events sent from the Python bridge subsystem +// +// This is part of Qt:s event handling and events are fed +// here via QApplication::postEvent since gui updates should +// be done by Qt:s GUI thread. QApplication::postEvent is +// a static method, which is threadsafe. Using the song object +// from the Python thread is dangerous when it comes to +// operations that manipulate the gui itself (read is ok) +//--------------------------------------------------------- +bool Song::event(QEvent* _e) +{ + if (_e->type() != QEvent::User) + return false; //ignore all events except user events, which are events from Python bridge subsystem + + QPybridgeEvent* e = (QPybridgeEvent*) _e; + switch (e->getType()) { + case QPybridgeEvent::SONG_UPDATE: + this->update(e->getP1()); + break; + case QPybridgeEvent::SONGLEN_CHANGE: + this->setLen(e->getP1()); + break; + case QPybridgeEvent::SONG_POSCHANGE: + this->setPos(e->getP1(), e->getP2()); + break; + case QPybridgeEvent::SONG_SETPLAY: + this->setPlay(true); + break; + case QPybridgeEvent::SONG_SETSTOP: + this->setStop(true); + break; + case QPybridgeEvent::SONG_REWIND: + this->rewindStart(); + break; + case QPybridgeEvent::SONG_SETMUTE: { + Track* track = this->findTrack(e->getS1()); + if (track == NULL) + return false; + + bool muted = e->getP1() == 1; + track->setMute(muted); + this->update(SC_MUTE | SC_TRACK_MODIFIED); + break; + } + case QPybridgeEvent::SONG_SETCTRL: { + Track* t = this->findTrack(e->getS1()); + if (t == NULL) + return false; + + if (t->isMidiTrack() == false) + return false; + + MidiTrack* track = (MidiTrack*) t; + int chan = track->outChannel(); + + int num = e->getP1(); + int val = e->getP2(); + int tick = song->cpos(); + MidiPlayEvent ev(tick, track->outPort(), chan, ME_CONTROLLER, num, val); + audio->msgPlayMidiEvent(&ev); + song->update(SC_MIDI_CONTROLLER); + break; + } + case QPybridgeEvent::SONG_SETAUDIOVOL: { + Track* t = this->findTrack(e->getS1()); + if (t == NULL) + return false; + + if (t->type() == Track::DRUM || t->type() == Track::MIDI) + return false; + + AudioTrack* track = (AudioTrack*) t; + track->setVolume(e->getD1()); + break; + } + case QPybridgeEvent::SONG_IMPORT_PART: { + Track* track = this->findTrack(e->getS1()); + QString filename = e->getS2(); + unsigned int tick = e->getP1(); + if (track == NULL) + return false; + + muse->importPartToTrack(filename, tick, track); + break; + } + case QPybridgeEvent::SONG_TOGGLE_EFFECT: { + Track* t = this->findTrack(e->getS1()); + if (t == NULL) + return false; + + if (t->type() != Track::WAVE) + return false; + + int fxid = e->getP1(); + + if (fxid > PipelineDepth) + return false; + + int onoff = (e->getP2() == 1); + + AudioTrack* track = (AudioTrack*) t; + Pipeline* pipeline = track->efxPipe(); + pipeline->setOn(fxid, onoff); + break; + } + case QPybridgeEvent::SONG_ADD_TRACK: + song->addTrack(e->getP1()); + break; + case QPybridgeEvent::SONG_CHANGE_TRACKNAME: { + Track* t = this->findTrack(e->getS1()); + if (t == NULL) + return false; + t->setName(e->getS2()); + break; + } + case QPybridgeEvent::SONG_DELETE_TRACK: { + Track* t = this->findTrack(e->getS1()); + if (t == NULL) + return false; + + audio->msgRemoveTrack(t); + break; + } + default: + printf("Unknown pythonthread event received: %d\n", e->getType()); + break; + } + + + return true; +} + + diff --git a/muse2/muse/remote/pyapi.h b/muse2/muse/remote/pyapi.h new file mode 100644 index 00000000..582f8b34 --- /dev/null +++ b/muse2/muse/remote/pyapi.h @@ -0,0 +1,40 @@ +//========================================================= +// MusE +// Linux Music Editor +// (C) Copyright 2009 Mathias Gyllengahm (lunar_shuttle@users.sf.net) +//========================================================= +#ifndef PYAPI_H +#define PYAPI_H + +#include + +class QPybridgeEvent : public QEvent +{ +public: + enum EventType { SONG_UPDATE=0, SONGLEN_CHANGE, SONG_POSCHANGE, SONG_SETPLAY, SONG_SETSTOP, SONG_REWIND, SONG_SETMUTE, + SONG_SETCTRL, SONG_SETAUDIOVOL, SONG_IMPORT_PART, SONG_TOGGLE_EFFECT, SONG_ADD_TRACK, SONG_CHANGE_TRACKNAME, + SONG_DELETE_TRACK }; + QPybridgeEvent( QPybridgeEvent::EventType _type, int _p1=0, int _p2=0); + EventType getType() { return type; } + int getP1() { return p1; } + int getP2() { return p2; } + void setS1(QString in) { s1 = in; } + void setS2(QString in) { s2 = in; } + const QString& getS1() { return s1; } + const QString& getS2() { return s2; } + double getD1() { return d1; } + void setD1(double _d1) { d1 = _d1; } + +private: + EventType type; + int p1, p2; + double d1; + QString s1; + QString s2; + +}; + +bool initPythonBridge(); + +#endif + diff --git a/muse2/muse/route.cpp b/muse2/muse/route.cpp new file mode 100644 index 00000000..090134ec --- /dev/null +++ b/muse2/muse/route.cpp @@ -0,0 +1,1633 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: route.cpp,v 1.18.2.3 2008/05/21 00:28:52 terminator356 Exp $ +// +// (C) Copyright 2003-2004 Werner Schweer (ws@seh.de) +//========================================================= + +#include + +#include "song.h" +#include "route.h" +#include "node.h" +#include "audio.h" +#include "track.h" +#include "synth.h" +#include "audiodev.h" +#include "xml.h" +#include "midiport.h" +#include "driver/jackmidi.h" +#include "driver/alsamidi.h" + +//#define ROUTE_DEBUG + +//#define ROUTE_MIDIPORT_NAME_PREFIX "MusE MidiPort " +const QString ROUTE_MIDIPORT_NAME_PREFIX = "MusE MidiPort "; + +//--------------------------------------------------------- +// Route +//--------------------------------------------------------- + +Route::Route(void* t, int ch) + { + jackPort = t; + midiPort = -1; + channel = ch; + channels = -1; + remoteChannel = -1; + type = JACK_ROUTE; + } + +//Route::Route(AudioTrack* t, int ch) +Route::Route(Track* t, int ch, int chans) +//Route::Route(Track* t, int ch) + { + track = t; + midiPort = -1; + channel = ch; + channels = chans; + remoteChannel = -1; + type = TRACK_ROUTE; + } + +//Route::Route(MidiJackDevice* d) +Route::Route(MidiDevice* d, int ch) +{ + device = d; + midiPort = -1; + channel = ch; + channels = -1; + remoteChannel = -1; + /* + //if(dynamic_cast(d)) + if(d->deviceType() == MidiDevice::JACK_MIDI) + type = JACK_MIDI_ROUTE; + else + //if(dynamic_cast(d)) + if(d->deviceType() == MidiDevice::ALSA_MIDI) + type = ALSA_MIDI_ROUTE; + */ + type = MIDI_DEVICE_ROUTE; +} + +Route::Route(int port, int ch) // p3.3.49 +{ + track = 0; + midiPort = port; + channel = ch; + channels = -1; + remoteChannel = -1; + type = MIDI_PORT_ROUTE; +} + +//Route::Route(const QString& s, bool dst, int ch) +Route::Route(const QString& s, bool dst, int ch, int rtype) + { + //Route node(name2route(s, dst)); + Route node(name2route(s, dst, rtype)); + channel = node.channel; + if(channel == -1) + channel = ch; + //if(channels == -1) + // channels = chans; + channels = node.channels; + remoteChannel = node.remoteChannel; + type = node.type; + if(type == TRACK_ROUTE) + { + track = node.track; + midiPort = -1; + } + else + if(type == JACK_ROUTE) + { + jackPort = node.jackPort; + midiPort = -1; + } + /* + else + if (type == JACK_MIDI_ROUTE) + device = node.device; + else + if (type == ALSA_MIDI_ROUTE) + device = node.device; + */ + else + if(type == MIDI_DEVICE_ROUTE) + { + device = node.device; + midiPort = -1; + } + else + if(type == MIDI_PORT_ROUTE) // p3.3.49 + { + track = 0; + midiPort = node.midiPort; // + } + } + +Route::Route() + { + track = 0; + midiPort = -1; + channel = -1; + channels = -1; + remoteChannel = -1; + type = TRACK_ROUTE; + } + +//--------------------------------------------------------- +// addRoute +//--------------------------------------------------------- + +void addRoute(Route src, Route dst) +{ + #ifdef ROUTE_DEBUG + fprintf(stderr, "addRoute:\n"); + #endif + + if (!src.isValid() || !dst.isValid()) + { + if(!src.isValid()) + fprintf(stderr, "addRoute: invalid src\n"); + if(!dst.isValid()) + fprintf(stderr, "addRoute: invalid dst\n"); + return; + } + +// printf("addRoute %d.%d:<%s> %d.%d:<%s>\n", +// src.type, src.channel, src.name().latin1(), +// dst.type, dst.channel, dst.name().latin1()); + if (src.type == Route::JACK_ROUTE) + { + //if (dst.type != TRACK_ROUTE) + //{ + // fprintf(stderr, "addRoute: bad route 1\n"); + // exit(-1); + // return; + //} + + if (dst.type == Route::TRACK_ROUTE) + { + if (dst.track->type() != Track::AUDIO_INPUT) + { + fprintf(stderr, "addRoute: source is jack, dest:%s is track but not audio input\n", dst.track->name().latin1()); + //exit(-1); + return; + } + if (dst.channel < 0) + { + fprintf(stderr, "addRoute: source is jack, dest:%s is track but invalid channel:%d\n", dst.track->name().latin1(), dst.channel); + //exit(-1); + return; + } + + //src.channel = src.dstChannel = dst.channel; + src.channel = dst.channel; + //src.channels = dst.channels = 1; + RouteList* inRoutes = dst.track->inRoutes(); + for (iRoute i = inRoutes->begin(); i != inRoutes->end(); ++i) + { + if (*i == src) // route already there + { + //#ifdef ROUTE_DEBUG + fprintf(stderr, "addRoute: src track route already exists.\n"); + //#endif + return; + } + } + #ifdef ROUTE_DEBUG + fprintf(stderr, "addRoute: src Jack dst track name: %s pushing source route\n", dst.track->name().latin1()); + #endif + inRoutes->push_back(src); + } + else + //if (dst.type == Route::JACK_MIDI_ROUTE) + if (dst.type == Route::MIDI_DEVICE_ROUTE) + //if (dst.type == Route::MIDI_PORT_ROUTE) // p3.3.49 + { + //MidiDevice *md = midiPorts[dst.midiPort].device(); + //if(dst.device->deviceType() == MidiDevice::JACK_MIDI) + //if(!md) + //{ + // fprintf(stderr, "addRoute: source is Jack, but no destination port device\n"); + // return; + //} + + if(dst.device->deviceType() == MidiDevice::JACK_MIDI) + //if(md->deviceType() == MidiDevice::JACK_MIDI) + { + src.channel = dst.channel; + //src.channel = -1; + //src.channel = 0; + //src.channel = src.dstChannel = dst.channel; + //src.channels = dst.channels = 1; + //dst.channel = -1; + + RouteList* routes = dst.device->inRoutes(); + for (iRoute i = routes->begin(); i != routes->end(); ++i) + { + if (*i == src) // route already there + { + //#ifdef ROUTE_DEBUG + fprintf(stderr, "addRoute: src Jack midi route already exists.\n"); + //#endif + return; + } + } + #ifdef ROUTE_DEBUG + fprintf(stderr, "addRoute: src Jack dst Jack midi name: %s pushing source route\n", dst.device->name().latin1()); + #endif + routes->push_back(src); + } + else + { + fprintf(stderr, "addRoute: source is Jack, but destination is not jack midi - type:%d\n", dst.device->deviceType()); + // exit(-1); + return; + } + } + else + { + fprintf(stderr, "addRoute: source is Jack, but destination is not track or midi - type:%d \n", dst.type); + // exit(-1); + return; + } + } + else if (dst.type == Route::JACK_ROUTE) + { + //if (src.type != TRACK_ROUTE) + //{ + // fprintf(stderr, "addRoute: bad route 3\n"); + // exit(-1); + // return; + //} + + if (src.type == Route::TRACK_ROUTE) + { + if (src.track->type() != Track::AUDIO_OUTPUT) + { + fprintf(stderr, "addRoute: destination is jack, source is track but not audio output\n"); + // exit(-1); + return; + } + if (src.channel < 0) + { + fprintf(stderr, "addRoute: destination is jack, source:%s is track but invalid channel:%d\n", src.track->name().latin1(), src.channel); + // exit(-1); + return; + } + + RouteList* outRoutes = src.track->outRoutes(); + //dst.channel = dst.dstChannel = src.channel; + dst.channel = src.channel; + //dst.channels = src.channels = 1; + + for (iRoute i = outRoutes->begin(); i != outRoutes->end(); ++i) + { + if (*i == dst) // route already there + { + #ifdef ROUTE_DEBUG + fprintf(stderr, "addRoute: dst track route already exists.\n"); + #endif + return; + } + } + #ifdef ROUTE_DEBUG + fprintf(stderr, "addRoute: dst Jack src track name: %s pushing destination route\n", src.track->name().latin1()); + #endif + outRoutes->push_back(dst); + } + else + //if (src.type == Route::JACK_MIDI_ROUTE) + if (src.type == Route::MIDI_DEVICE_ROUTE) + { + if(src.device->deviceType() == MidiDevice::JACK_MIDI) + { + dst.channel = src.channel; + //dst.channel = -1; + //src.channel = -1; + //dst.channel = dst.dstChannel = src.channel; + //dst.channels = src.channels = 1; + + RouteList* routes = src.device->outRoutes(); + for (iRoute i = routes->begin(); i != routes->end(); ++i) + { + if (*i == dst) // route already there + { + //#ifdef ROUTE_DEBUG + fprintf(stderr, "addRoute: dst Jack midi route already exists.\n"); + //#endif + return; + } + } + #ifdef ROUTE_DEBUG + fprintf(stderr, "addRoute: dst Jack src Jack midi name: %s pushing destination route\n", src.device->name().latin1()); + #endif + routes->push_back(dst); + } + else + { + fprintf(stderr, "addRoute: destination is Jack, but source is not jack midi - type:%d\n", src.device->deviceType()); + // exit(-1); + return; + } + } + else + { + fprintf(stderr, "addRoute: destination is Jack, but source is not track or midi - type:%d \n", src.type); + // exit(-1); + return; + } + } + else if(src.type == Route::MIDI_PORT_ROUTE) // p3.3.49 + { + if(dst.type != Route::TRACK_ROUTE) + { + fprintf(stderr, "addRoute: source is midi port:%d, but destination is not track\n", src.midiPort); + return; + } + if(dst.channel < 1 || dst.channel >= (1 << MIDI_CHANNELS)) + { + fprintf(stderr, "addRoute: source is midi port:%d, but destination channel mask:%d out of range\n", src.midiPort, dst.channel); + return; + } + + //MidiDevice *md = midiPorts[src.midiPort].device(); + //if(!md) + //{ + // fprintf(stderr, "addRoute: source is midi port, but no destination port device\n"); + // return; + //} + + MidiPort *mp = &midiPorts[src.midiPort]; + + src.channel = dst.channel; + RouteList* outRoutes = mp->outRoutes(); + //for (iRoute i = outRoutes->begin(); i != outRoutes->end(); ++i) + iRoute ir = outRoutes->begin(); // p3.3.50 + for ( ; ir != outRoutes->end(); ++ir) + { + //if (*i == dst) // route already there + if (ir->type == Route::TRACK_ROUTE && ir->track == dst.track) // p3.3.50 Does a route to the track exist? + { + //#ifdef ROUTE_DEBUG + //fprintf(stderr, "addRoute: src midi port:%d dst track:%s route already exists.\n", src.midiPort, dst.track->name().latin1()); + //#endif + ir->channel |= dst.channel; // p3.3.50 Bitwise OR the desired channel bit with the existing bit mask. + break; + + //return; + } + } + #ifdef ROUTE_DEBUG + fprintf(stderr, "addRoute: src midi port:%d dst track name:%s pushing dst and src routes\n", src.midiPort, dst.track->name().latin1()); + #endif + + if(ir == outRoutes->end()) // p3.3.50 Only if route not found, add the route, with the requested channel bits as mask to start with. + outRoutes->push_back(dst); + + RouteList* inRoutes = dst.track->inRoutes(); + + // p3.3.50 Make sure only one single route, with a channel mask, can ever exist. + ir = inRoutes->begin(); + for ( ; ir != inRoutes->end(); ++ir) + { + if (ir->type == Route::MIDI_PORT_ROUTE && ir->midiPort == src.midiPort) // p3.3.50 Does a route to the midi port exist? + { + ir->channel |= src.channel; // p3.3.50 Bitwise OR the desired channel bit with the existing bit mask. + break; + } + } + + if(ir == inRoutes->end()) // p3.3.50 Only if route not found, add the route, with the requested channel bits as mask to start with. + inRoutes->push_back(src); + } + else if(dst.type == Route::MIDI_PORT_ROUTE) // p3.3.49 + { + if(src.type != Route::TRACK_ROUTE) + { + fprintf(stderr, "addRoute: destination is midi port:%d, but source is not track\n", dst.midiPort); + return; + } + if(src.channel < 1 || src.channel >= (1 << MIDI_CHANNELS)) + { + fprintf(stderr, "addRoute: destination is midi port:%d, but source channel mask:%d out of range\n", dst.midiPort, src.channel); + return; + } + + + //MidiDevice *md = midiPorts[dst.midiPort].device(); + //if(!md) + //{ + // fprintf(stderr, "addRoute: dst is midi port, but no destination port device\n"); + // return; + //} + + dst.channel = src.channel; + RouteList* outRoutes = src.track->outRoutes(); + + //for (iRoute i = outRoutes->begin(); i != outRoutes->end(); ++i) + iRoute ir = outRoutes->begin(); // p3.3.50 + for ( ; ir != outRoutes->end(); ++ir) + { + //if (*i == dst) // route already there + if (ir->type == Route::MIDI_PORT_ROUTE && ir->midiPort == dst.midiPort) // p3.3.50 Does a route to the midi port exist? + { + //#ifdef ROUTE_DEBUG + //fprintf(stderr, "addRoute: dst midi port:%d src track:%s route already exists.\n", dst.midiPort, src.track->name().latin1()); + //#endif + //return; + + ir->channel |= dst.channel; // p3.3.50 Bitwise OR the desired channel bit with the existing bit mask. + break; + } + } + + if(ir == outRoutes->end()) // p3.3.50 Only if route not found, add the route, with the requested channel bits as mask to start with. + outRoutes->push_back(dst); + + MidiPort *mp = &midiPorts[dst.midiPort]; + + #ifdef ROUTE_DEBUG + fprintf(stderr, "addRoute: src track:%s dst midi port:%d pushing dst and src routes\n", src.track->name().latin1(), dst.midiPort); + #endif + RouteList* inRoutes = mp->inRoutes(); + + // p3.3.50 Make sure only one single route, with a channel mask, can ever exist. + ir = inRoutes->begin(); + for ( ; ir != inRoutes->end(); ++ir) + { + if (ir->type == Route::TRACK_ROUTE && ir->track == src.track) // p3.3.50 Does a route to the track exist? + { + ir->channel |= src.channel; // p3.3.50 Bitwise OR the desired channel bit with the existing bit mask. + break; + } + } + + if(ir == inRoutes->end()) // p3.3.50 Only if route not found, add the route, with the requested channel bits as mask to start with. + inRoutes->push_back(src); + //inRoutes->insert(inRoutes->begin(), src); + } + else + { + if(src.type != Route::TRACK_ROUTE || dst.type != Route::TRACK_ROUTE) // p3.3.49 + { + fprintf(stderr, "addRoute: source and destination are not track routes\n"); + return; + } + + // Removed p3.3.49 + /* + //if ((src.type == Route::JACK_MIDI_ROUTE) || (src.type == Route::ALSA_MIDI_ROUTE)) + if(src.type == Route::MIDI_DEVICE_ROUTE) + { + //src.channel = src.dstChannel = dst.dstChannel = dst.channel; + src.channel = dst.channel; + //src.channels = dst.channels = 1; + RouteList* outRoutes = src.device->outRoutes(); + #ifdef ROUTE_DEBUG + fprintf(stderr, "addRoute: src name: %s looking for existing dest in out routes...\n", src.device->name().latin1()); + #endif + for (iRoute i = outRoutes->begin(); i != outRoutes->end(); ++i) + { + if (*i == dst) // route already there + { + //#ifdef ROUTE_DEBUG + fprintf(stderr, "addRoute: src Jack or ALSA midi route already exists.\n"); + //#endif + return; + } + } + #ifdef ROUTE_DEBUG + fprintf(stderr, "addRoute: src midi dst name: %s pushing destination and source routes\n", dst.track->name().latin1()); + #endif + + outRoutes->push_back(dst); + RouteList* inRoutes = dst.track->inRoutes(); + inRoutes->push_back(src); + } + else + */ + + { + ///if(dst.type == Route::MIDI_DEVICE_ROUTE) // Removed p3.3.49 + //{ + /// dst.channel = src.channel; + //src.channel = src.dstChannel = dst.dstChannel = dst.channel; + //src.channels = dst.channels = 1; + //} + //else + //{ + //src.channel = src.dstChannel = dst.dstChannel = dst.channel; + //src.channels = dst.channels = 1; + //} + + RouteList* outRoutes = src.track->outRoutes(); + + // + // Must enforce to ensure channel and channels are valid if defaults of -1 passed. + // + if(src.track->type() == Track::AUDIO_SOFTSYNTH) + { + if(src.channel == -1) + src.channel = 0; + if(src.channels == -1) + src.channels = src.track->channels(); + //if(dst.type == Route::TRACK_ROUTE) // p3.3.49 Removed + //{ + //if(dst.channel == -1) + // dst.channel = 0; + //if(dst.channels == -1) + // Yes, that's correct: dst channels = src track channels. + // dst.channels = src.track->channels(); + dst.channel = src.channel; + dst.channels = src.channels; + dst.remoteChannel = src.remoteChannel; + //} + } + //if(dst.type == Route::TRACK_ROUTE && dst.track->type() == Track::AUDIO_SOFTSYNTH) + //{ + // if(dst.channel == -1) + // dst.channel = 0; + // if(dst.channels == -1) + // Yes, that's correct: dst channels = src track channels. + // dst.channels = src.track->channels(); + //} + + for (iRoute i = outRoutes->begin(); i != outRoutes->end(); ++i) + { + if (*i == dst) // route already there + // TODO: + //if (i->type == dst.type && i->channel == dst.channel) + { + //if(i->type == Route::TRACK_ROUTE) + { + //if(i->track == dst.track) + { + //if(i->channels == dst.channels) + { + //#ifdef ROUTE_DEBUG + fprintf(stderr, "addRoute: src track route already exists.\n"); + //#endif + return; + } + //else + //{ + + //} + } + } + } + } + outRoutes->push_back(dst); + RouteList* inRoutes; + + // Removed p3.3.49 + /* + //if ((dst.type == Route::JACK_MIDI_ROUTE) || (dst.type == Route::ALSA_MIDI_ROUTE)) + if(dst.type == Route::MIDI_DEVICE_ROUTE) + { + #ifdef ROUTE_DEBUG + fprintf(stderr, "addRoute: src track dst midi name: %s pushing destination and source routes\n", dst.device->name().latin1()); + #endif + inRoutes = dst.device->inRoutes(); + } + else + */ + + { + #ifdef ROUTE_DEBUG + //fprintf(stderr, "addRoute: src track ch:%d chs:%d dst track ch:%d chs:%d name: %s pushing destination and source routes\n", src.channel, src.channels, dst.channel, dst.channels, dst.track->name().latin1()); + fprintf(stderr, "addRoute: src track ch:%d chs:%d remch:%d dst track ch:%d chs:%d remch:%d name: %s pushing dest and source routes\n", + src.channel, src.channels, src.remoteChannel, dst.channel, dst.channels, dst.remoteChannel, dst.track->name().latin1()); + //fprintf(stderr, "addRoute: src track ch:%d dst track ch:%d name: %s pushing destination and source routes\n", src.channel, dst.channel, dst.track->name().latin1()); + #endif + inRoutes = dst.track->inRoutes(); + } + + + // + // make sure AUDIO_AUX is processed last + // + if (src.track->type() == Track::AUDIO_AUX) + inRoutes->push_back(src); + else + inRoutes->insert(inRoutes->begin(), src); + } + } +} + +//--------------------------------------------------------- +// removeRoute +//--------------------------------------------------------- + +void removeRoute(Route src, Route dst) +{ + //printf("removeRoute %d.%d:<%s> %d.%d:<%s>\n", + // src.type, src.channel, src.name().latin1(), + // dst.type, dst.channel, dst.name().latin1()); + + if (src.type == Route::JACK_ROUTE) + { + //if (dst.type != TRACK_ROUTE) + //{ + // fprintf(stderr, "removeRoute: bad route 1\n"); + // exit(-1); + // return; + //} + if(!dst.isValid()) + { + printf("removeRoute: source is jack, invalid destination\n"); + return; + } + + if (dst.type == Route::TRACK_ROUTE) + { + if (dst.track->type() != Track::AUDIO_INPUT) + { + fprintf(stderr, "removeRoute: source is jack, destination is track but not audio input\n"); + // exit(-1); + return; + } + RouteList* inRoutes = dst.track->inRoutes(); + iRoute i; + for (i = inRoutes->begin(); i != inRoutes->end(); ++i) + { + if (*i == src) + { + inRoutes->erase(i); + break; + } + } + } + else + //if (dst.type == Route::JACK_MIDI_ROUTE) + if (dst.type == Route::MIDI_DEVICE_ROUTE) + { + RouteList* routes = dst.device->inRoutes(); + iRoute i; + for (i = routes->begin(); i != routes->end(); ++i) + { + if (*i == src) + { + routes->erase(i); + break; + } + } + } + else + { + fprintf(stderr, "removeRoute: source is jack, destination unknown\n"); + // exit(-1); + return; + } + } + else if (dst.type == Route::JACK_ROUTE) + { + //if (src.type != TRACK_ROUTE) + //{ + // fprintf(stderr, "removeRoute: bad route 3\n"); + // exit(-1); + // return; + //} + if(!src.isValid()) + { + printf("removeRoute: destination is jack, invalid source\n"); + return; + } + + if (src.type == Route::TRACK_ROUTE) + { + if (src.track->type() != Track::AUDIO_OUTPUT) + { + fprintf(stderr, "removeRoute: destination is jack, source is track but not audio output\n"); + // exit(-1); + return; + } + RouteList* outRoutes = src.track->outRoutes(); + iRoute i; + for (i = outRoutes->begin(); i != outRoutes->end(); ++i) + { + if (*i == dst) { + outRoutes->erase(i); + break; + } + } + } + else + //if (src.type == Route::JACK_MIDI_ROUTE) + if (src.type == Route::MIDI_DEVICE_ROUTE) + { + RouteList* routes = src.device->outRoutes(); + iRoute i; + for (i = routes->begin(); i != routes->end(); ++i) + { + if (*i == dst) { + routes->erase(i); + break; + } + } + } + else + { + fprintf(stderr, "removeRoute: destination is jack, source unknown\n"); + // exit(-1); + return; + } + } + else if(src.type == Route::MIDI_PORT_ROUTE) // p3.3.49 + { + if(dst.type != Route::TRACK_ROUTE) + { + fprintf(stderr, "removeRoute: source is midi port:%d, but destination is not track\n", src.midiPort); + return; + } + + if(src.isValid()) + { + MidiPort *mp = &midiPorts[src.midiPort]; + RouteList* outRoutes = mp->outRoutes(); + for (iRoute i = outRoutes->begin(); i != outRoutes->end(); ++i) + { + //if (*i == dst) + if (i->type == Route::TRACK_ROUTE && i->track == dst.track) // p3.3.50 Is there a route to the track? + { + i->channel &= ~dst.channel; // p3.3.50 Unset the desired channel bits. + if(i->channel == 0) // Only if there are no channel bits set, erase the route. + outRoutes->erase(i); + + break; // For safety, keep looking and remove any more found. + // No, must break, else crash. There should only be one route anyway... + } + } + } + else + printf("removeRoute: source is midi port:%d but invalid\n", src.midiPort); + + if(dst.isValid()) + { + RouteList* inRoutes = dst.track->inRoutes(); + for (iRoute i = inRoutes->begin(); i != inRoutes->end(); ++i) + { + //if (*i == src) + if (i->type == Route::MIDI_PORT_ROUTE && i->midiPort == src.midiPort) // p3.3.50 Is there a route to the midi port? + { + i->channel &= ~src.channel; // p3.3.50 Unset the desired channel bits. + if(i->channel == 0) // Only if there are no channel bits set, erase the route. + inRoutes->erase(i); + + break; // For safety, keep looking and remove any more found. + // No, must break, else crash. There should only be one route anyway... + } + } + } + else + printf("removeRoute: source is midi port:%d but destination track invalid\n", src.midiPort); + } + else if(dst.type == Route::MIDI_PORT_ROUTE) // p3.3.49 + { + if(src.type != Route::TRACK_ROUTE) + { + fprintf(stderr, "removeRoute: destination is midi port:%d, but source is not track\n", dst.midiPort); + return; + } + + if(src.isValid()) + { + RouteList* outRoutes = src.track->outRoutes(); + for (iRoute i = outRoutes->begin(); i != outRoutes->end(); ++i) + { + //if (*i == dst) + if (i->type == Route::MIDI_PORT_ROUTE && i->midiPort == dst.midiPort) // p3.3.50 Is there a route to the midi port? + { + i->channel &= ~dst.channel; // p3.3.50 Unset the desired channel bits. + if(i->channel == 0) // Only if there are no channel bits set, erase the route. + outRoutes->erase(i); + + break; // For safety, keep looking and remove any more found. + // No, must break, else crash. There should only be one route anyway... + } + } + } + else + printf("removeRoute: destination is midi port:%d but source track is invalid\n", dst.midiPort); + + if(dst.isValid()) + { + MidiPort *mp = &midiPorts[src.midiPort]; + RouteList* inRoutes = mp->inRoutes(); + for (iRoute i = inRoutes->begin(); i != inRoutes->end(); ++i) + { + //if (*i == src) + if (i->type == Route::TRACK_ROUTE && i->track == src.track) // p3.3.50 Is there a route to the track? + { + i->channel &= ~src.channel; // p3.3.50 Unset the desired channel bits. + if(i->channel == 0) // Only if there are no channel bits set, erase the route. + inRoutes->erase(i); + + break; // For safety, keep looking and remove any more found. + // No, must break, else crash. There should only be one route anyway... + } + } + } + else + printf("removeRoute: destination is midi port:%d but invalid\n", dst.midiPort); + } + else + { + if(src.type != Route::TRACK_ROUTE || dst.type != Route::TRACK_ROUTE) // p3.3.49 + { + fprintf(stderr, "removeRoute: source and destination are not tracks\n"); + return; + } + + // Removed p3.3.49 + /* + //if((src.type == Route::JACK_MIDI_ROUTE) || (src.type == Route::ALSA_MIDI_ROUTE)) + if(src.type == Route::MIDI_DEVICE_ROUTE) + { + if(src.isValid()) + { + RouteList* outRoutes = src.device->outRoutes(); + for (iRoute i = outRoutes->begin(); i != outRoutes->end(); ++i) + { + if (*i == dst) { + outRoutes->erase(i); + break; + } + } + } + else + printf("removeRoute: source is midi but invalid\n"); + + if(dst.isValid()) + { + RouteList* inRoutes = dst.track->inRoutes(); + for (iRoute i = inRoutes->begin(); i != inRoutes->end(); ++i) + { + if (*i == src) { + inRoutes->erase(i); + break; + } + } + } + else + printf("removeRoute: source is midi but destination invalid\n"); + } + else + */ + + { + if(src.isValid()) + { + RouteList* outRoutes = src.track->outRoutes(); + for (iRoute i = outRoutes->begin(); i != outRoutes->end(); ++i) + { + if (*i == dst) { + outRoutes->erase(i); + break; + } + } + } + else + printf("removeRoute: source is track but invalid\n"); + + if(dst.isValid()) + { + RouteList* inRoutes; + + //if ((dst.type == Route::JACK_MIDI_ROUTE) || (dst.type == Route::ALSA_MIDI_ROUTE)) + // Removed p3.3.49 + /* + if (dst.type == Route::MIDI_DEVICE_ROUTE) + inRoutes = dst.device->inRoutes(); + else + */ + + inRoutes = dst.track->inRoutes(); + for (iRoute i = inRoutes->begin(); i != inRoutes->end(); ++i) + { + if (*i == src) { + inRoutes->erase(i); + break; + } + } + } + else + printf("removeRoute: source is track but destination invalid\n"); + } + } +} + +//--------------------------------------------------------- +// track2name +// create string name representation for audio node +//--------------------------------------------------------- + +static QString track2name(const Track* n) + { + if (n == 0) + return QWidget::tr("None"); + return n->name(); + } + +//--------------------------------------------------------- +// name +// create string name representation for audio node +//--------------------------------------------------------- + +QString Route::name() const +{ + // p3.3.38 Removed + /* + QString s; + if ((type == TRACK_ROUTE) && (channel != -1)) { +// if (channel != -1) { + QString c; + c.setNum(channel+1); + s = c + ":"; + } + */ + + if(type == MIDI_DEVICE_ROUTE) + { + if(device) + { + if(device->deviceType() == MidiDevice::JACK_MIDI) + return audioDevice->portName(device->clientPort()); + else + //if(device->deviceType() == MidiDevice::ALSA_MIDI) + return device->name(); + } + return QWidget::tr("None"); + } + else + if(type == JACK_ROUTE) + { + if (!checkAudioDevice()) return ""; + //return s + audioDevice->portName(jackPort); + return audioDevice->portName(jackPort); + } + else + if(type == MIDI_PORT_ROUTE) // p3.3.49 + { + return ROUTE_MIDIPORT_NAME_PREFIX + QString().setNum(midiPort); + } + else + //return s + track2name(track); + return track2name(track); +} + +//--------------------------------------------------------- +// name2route +//--------------------------------------------------------- + +//Route name2route(const QString& rn, bool dst) +Route name2route(const QString& rn, bool /*dst*/, int rtype) +{ +// printf("name2route %s\n", rn.latin1()); + int channel = -1; + //int channel = 0; + QString s(rn); + // Support old route style in med files. Obsolete. + if (rn[0].isNumber() && rn[1]==':') + { + channel = rn[0].toAscii() - int('1'); + s = rn.mid(2); + } + + if(rtype == -1) + { + //if(dst) + //{ + if(checkAudioDevice()) + { + void* p = audioDevice->findPort(s.latin1()); + if(p) + return Route(p, channel); + } + + TrackList* tl = song->tracks(); + for(iTrack i = tl->begin(); i != tl->end(); ++i) + { + if((*i)->isMidiTrack()) + { + MidiTrack* track = (MidiTrack*)*i; + if(track->name() == s) + return Route(track, channel); + } + else + { + AudioTrack* track = (AudioTrack*)*i; + if(track->name() == s) + return Route(track, channel); + } + } + + for(iMidiDevice i = midiDevices.begin(); i != midiDevices.end(); ++i) + { + if((*i)->name() == s) + return Route(*i, channel); + } + + // p3.3.49 + if(s.left(ROUTE_MIDIPORT_NAME_PREFIX.length()) == ROUTE_MIDIPORT_NAME_PREFIX) + { + bool ok = false; + int port = s.mid(ROUTE_MIDIPORT_NAME_PREFIX.length()).toInt(&ok); + if(ok) + return Route(port, channel); + } + } + else + { + //if(dst) + //{ + if(rtype == Route::TRACK_ROUTE) + { + TrackList* tl = song->tracks(); + for(iTrack i = tl->begin(); i != tl->end(); ++i) + { + if((*i)->isMidiTrack()) + { + MidiTrack* track = (MidiTrack*)*i; + if(track->name() == s) + return Route(track, channel); + } + else + { + AudioTrack* track = (AudioTrack*)*i; + if(track->name() == s) + return Route(track, channel); + //return Route(track, channel, 1); + //return Route(track, channel, track->channels()); + } + } + } + else + //if((rtype == Route::JACK_MIDI_ROUTE) || (rtype == Route::ALSA_MIDI_ROUTE)) + // TODO Distinguish the device types + if(rtype == Route::MIDI_DEVICE_ROUTE) + { + for(iMidiDevice i = midiDevices.begin(); i != midiDevices.end(); ++i) + { + if((*i)->name() == s) + //if (jmd->name() == rn) + return Route(*i, channel); + + /* + MidiJackDevice* jmd = dynamic_cast(*i); + if(jmd) + { + if(jmd->name() == s) + //if (jmd->name() == rn) + return Route(jmd); + } + MidiAlsaDevice* amd = dynamic_cast(*i); + if(amd) + { + // TODO + if(amd->name() == s) + //if (amd->name() == rn) + return Route(amd); + } + */ + } + } + else + if(rtype == Route::JACK_ROUTE) + { + if(checkAudioDevice()) + { + void* p = audioDevice->findPort(s.latin1()); + if(p) + return Route(p, channel); + } + } + else + if(rtype == Route::MIDI_PORT_ROUTE) // p3.3.49 + { + if(s.left(ROUTE_MIDIPORT_NAME_PREFIX.length()) == ROUTE_MIDIPORT_NAME_PREFIX) + { + bool ok = false; + int port = s.mid(ROUTE_MIDIPORT_NAME_PREFIX.length()).toInt(&ok); + if(ok) + return Route(port, channel); + } + } + } + + printf(" name2route: <%s> not found\n", rn.latin1()); + return Route((Track*) 0, channel); + //return Route((Track*) 0, channel, 1); +} + +//--------------------------------------------------------- +// checkRoute +// return true if route is valid +//--------------------------------------------------------- + +bool checkRoute(const QString& s, const QString& d) + { + Route src(s, false, -1); + Route dst(d, true, -1); + + if (!(src.isValid() && dst.isValid()) || (src == dst)) + return false; + if (src.type == Route::JACK_ROUTE) + { + //if (dst.type != TRACK_ROUTE) { + // return false; + // } + + if (dst.type == Route::TRACK_ROUTE) + { + if (dst.track->type() != Track::AUDIO_INPUT) { + return false; + } + src.channel = dst.channel; + RouteList* inRoutes = dst.track->inRoutes(); + for (iRoute i = inRoutes->begin(); i != inRoutes->end(); ++i) + { + if (*i == src) { // route already there + return false; + } + } + } + else + //if (dst.type == Route::JACK_MIDI_ROUTE) + if (dst.type == Route::MIDI_DEVICE_ROUTE) + { + //src.channel = dst.channel; + src.channel = -1; + //dst.channel = -1; + RouteList* routes = dst.device->inRoutes(); + for (iRoute i = routes->begin(); i != routes->end(); ++i) + { + if (*i == src) { // route already there + return false; + } + } + } + else + return false; + } + else if (dst.type == Route::JACK_ROUTE) + { + //if (src.type != TRACK_ROUTE) { + // return false; + // } + + if (src.type == Route::TRACK_ROUTE) + { + if (src.track->type() != Track::AUDIO_OUTPUT) { + return false; + } + RouteList* outRoutes = src.track->outRoutes(); + dst.channel = src.channel; + for (iRoute i = outRoutes->begin(); i != outRoutes->end(); ++i) + { + if (*i == dst) { // route already there + return false; + } + } + } + else + //if (src.type == Route::JACK_MIDI_ROUTE) + if (src.type == Route::MIDI_DEVICE_ROUTE) + { + RouteList* routes = src.device->outRoutes(); + //dst.channel = src.channel; + dst.channel = -1; + //src.channel = -1; + for (iRoute i = routes->begin(); i != routes->end(); ++i) + { + if (*i == dst) { // route already there + return false; + } + } + } + else + return false; + } + else if (src.type == Route::MIDI_PORT_ROUTE) // p3.3.49 + { + RouteList* outRoutes = midiPorts[src.midiPort].outRoutes(); + for (iRoute i = outRoutes->begin(); i != outRoutes->end(); ++i) + { + if (*i == dst) { // route already there + return false; + } + } + } + //else if (dst.type == Route::MIDI_PORT_ROUTE) // p3.3.49 + //{ + //} + else + { + //RouteList* outRoutes = ((src.type == Route::JACK_MIDI_ROUTE) || (src.type == Route::ALSA_MIDI_ROUTE)) ? + // src.device->outRoutes() : src.track->outRoutes(); + RouteList* outRoutes = (src.type == Route::MIDI_DEVICE_ROUTE) ? src.device->outRoutes() : src.track->outRoutes(); + + for (iRoute i = outRoutes->begin(); i != outRoutes->end(); ++i) + { + if (*i == dst) { // route already there + return false; + } + } + } + return true; + } + +//--------------------------------------------------------- +// read +//--------------------------------------------------------- + +void Route::read(Xml& xml) +{ + QString s; + int dtype = MidiDevice::ALSA_MIDI; + int port = -1; // p3.3.49 + unsigned char rtype = Route::TRACK_ROUTE; + + for (;;) + { + const QString& tag = xml.s1(); + Xml::Token token = xml.parse(); + switch (token) + { + case Xml::Error: + case Xml::End: + return; + //case Xml::TagStart: + // xml.unknown("Route"); + // break; + case Xml::Attribut: + #ifdef ROUTE_DEBUG + printf("Route::read(): attribute:%s\n", tag.latin1()); + #endif + if(tag == "type") + rtype = xml.s2().toInt(); + else + if(tag == "devtype") + { + dtype = xml.s2().toInt(); + rtype = Route::MIDI_DEVICE_ROUTE; + } + else + if(tag == "name") + s = xml.s2(); + else + if(tag == "mport") // p3.3.49 + { + port = xml.s2().toInt(); + rtype = Route::MIDI_PORT_ROUTE; + } + else + printf("Route::read(): unknown attribute:%s\n", tag.latin1()); + break; + case Xml::TagEnd: + #ifdef ROUTE_DEBUG + printf("Route::read(): tag end type:%d channel:%d name:%s\n", rtype, channel, s.latin1()); + #endif + if(rtype == MIDI_PORT_ROUTE) // p3.3.49 + { + if(port >= 0 && port < MIDI_PORTS) + { + type = rtype; + midiPort = port; + } + else + printf("Route::read(): midi port <%d> out of range\n", port); + } + else + if(!s.isEmpty()) + { + if(rtype == TRACK_ROUTE) + { + TrackList* tl = song->tracks(); + iTrack i = tl->begin(); + for ( ; i != tl->end(); ++i) + { + Track* t = *i; + if (t->name() == s) + { + track = t; + type = rtype; + break; + } + } + if(i == tl->end()) + printf("Route::read(): track <%s> not found\n", s.latin1()); + } + else + if(rtype == JACK_ROUTE) + { + void* jport = audioDevice->findPort(s); + if(jport == 0) + printf("Route::read(): jack port <%s> not found\n", s.latin1()); + else + { + jackPort = jport; + type = rtype; + } + } + else + if(rtype == MIDI_DEVICE_ROUTE) + { + iMidiDevice imd = midiDevices.begin(); + for( ; imd != midiDevices.end(); ++imd) + { + MidiDevice* md = *imd; + if(md->name() == s && md->deviceType() == dtype) + { + // p3.3.45 + // We found a device, but if it is not in use by the song (port is -1), ignore it. + // This prevents loading and propagation of bogus routes in the med file. + if(md->midiPort() == -1) + break; + + device = md; + type = rtype; + break; + } + } + if(imd == midiDevices.end()) + printf("Route::read(): midi device <%s> not found\n", s.latin1()); + } + } + return; + default: + break; + } + } +} + + +//--------------------------------------------------------- +// read +//--------------------------------------------------------- + +void Song::readRoute(Xml& xml) +{ + QString src; + QString dst; + int ch = -1; + int chs = -1; + int remch = -1; + + Route sroute, droute; + + for (;;) + { + const QString& tag = xml.s1(); + Xml::Token token = xml.parse(); + switch (token) + { + case Xml::Error: + case Xml::End: + return; + case Xml::TagStart: + // p3.3.38 2010/02/03 Support old routes in med files. Now obsolete! + if (tag == "srcNode") + src = xml.parse1(); + else if (tag == "dstNode") + dst = xml.parse1(); + // Support new routes. + else if (tag == "source") + { + sroute.read(xml); + sroute.channel = ch; + sroute.channels = chs; + sroute.remoteChannel = remch; + } + else if (tag == "dest") + { + droute.read(xml); + droute.channel = ch; + droute.channels = chs; + droute.remoteChannel = remch; + } + else + xml.unknown("readRoute"); + break; + case Xml::Attribut: + #ifdef ROUTE_DEBUG + printf("Song::readRoute(): attribute:%s\n", tag.latin1()); + #endif + if(tag == "channel") + ch = xml.s2().toInt(); + else + if(tag == "channels") + chs = xml.s2().toInt(); + else + if(tag == "remch") + remch = xml.s2().toInt(); + else + if(tag == "channelMask") // p3.3.50 New channel mask for midi port-track routes. + ch = xml.s2().toInt(); + else + printf("Song::readRoute(): unknown attribute:%s\n", tag.latin1()); + break; + case Xml::TagEnd: + if (xml.s1() == "Route") + { + // Support old routes in med files. Now obsolete! + if(!src.isEmpty() && !dst.isEmpty()) + { + Route s = name2route(src, false); + Route d = name2route(dst, true); + addRoute(s, d); + } + else + // Support new routes. + if(sroute.isValid() && droute.isValid()) + { + // p3.3.49 Support pre- 1.1-RC2 midi-device-to-track routes. Obsolete. Replaced with midi port routes. + if(sroute.type == Route::MIDI_DEVICE_ROUTE && droute.type == Route::TRACK_ROUTE) + { + if(sroute.device->midiPort() >= 0 && sroute.device->midiPort() < MIDI_PORTS + && ch >= 0 && ch < MIDI_CHANNELS) // p3.3.50 + { + sroute.midiPort = sroute.device->midiPort(); + sroute.device = 0; + sroute.type = Route::MIDI_PORT_ROUTE; + + sroute.channel = 1 << ch; // p3.3.50 Convert to new bit-wise channel mask. + droute.channel = sroute.channel; + + addRoute(sroute, droute); + } + else + printf(" Warning - device:%s to track route, no device midi port or chan:%d out of range. Ignoring route!\n", + sroute.device->name().latin1(), ch); + } + else if(sroute.type == Route::TRACK_ROUTE && droute.type == Route::MIDI_DEVICE_ROUTE) + { + if(droute.device->midiPort() >= 0 && droute.device->midiPort() < MIDI_PORTS + && ch >= 0 && ch < MIDI_CHANNELS) // p3.3.50 + { + droute.midiPort = droute.device->midiPort(); + droute.device = 0; + droute.type = Route::MIDI_PORT_ROUTE; + + droute.channel = 1 << ch; // p3.3.50 Convert to new bit-wise channel mask. + sroute.channel = droute.channel; + + addRoute(sroute, droute); + } + else + printf(" Warning - track to device:%s route, no device midi port or chan:%d out of range. Ignoring route!\n", + droute.device->name().latin1(), ch); + } + else + { + //printf("adding new route...\n"); + addRoute(sroute, droute); + } + } + else + printf(" Warning - route invalid. Ignoring route!\n"); + + return; + } + default: + break; + } + } +} + +//--------------------------------------------------------- +// removeRoute +//--------------------------------------------------------- + +void RouteList::removeRoute(const Route& r) + { + //printf("RouteList::removeRoute:\n"); + //r.dump(); + //printf("Searching routes:\n"); + + for (iRoute i = begin(); i != end(); ++i) { + //i->dump(); + if (r == *i) { + erase(i); + return; + } + } + printf("internal error: cannot remove Route\n"); + } + +//--------------------------------------------------------- +// dump +//--------------------------------------------------------- + +void Route::dump() const +{ + if (type == TRACK_ROUTE) + { + if(track) + printf("Route dump: track <%s> channel %d channels %d\n", track->name().latin1(), channel, channels); + //printf("Route dump: track <%s> channel %d\n", track->name().latin1(), channel); + //else + // printf("Route dump: invalid track, channel %d\n", channel); + } + else + if (type == JACK_ROUTE) + { + if(checkAudioDevice()) + printf("Route dump: jack audio port <%s> channel %d\n", audioDevice->portName(jackPort).latin1(), channel); + } + else + if (type == MIDI_PORT_ROUTE) // p3.3.49 + { + printf("Route dump: midi port <%d> channel mask %d\n", midiPort, channel); + } + else + if (type == MIDI_DEVICE_ROUTE) + { + printf("Route dump: "); + if(device) + { + if(device->deviceType() == MidiDevice::JACK_MIDI) + { + if(checkAudioDevice()) + printf("jack midi port device <%s> ", audioDevice->portName(device->clientPort()).latin1()); + } + else + if(device->deviceType() == MidiDevice::ALSA_MIDI) + printf("alsa midi device <%s> ", device->name().latin1()); + else + if(device->deviceType() == MidiDevice::SYNTH_MIDI) + printf("synth midi device <%s> ", device->name().latin1()); + else + printf("is midi but unknown device type:%d, ", device->deviceType()); + } + else + printf("is midi but invalid device, "); + + printf("channel:%d\n", channel); + } + else + printf("Route dump: unknown route type:%d\n", type); +} + +//--------------------------------------------------------- +// operator== +//--------------------------------------------------------- + +bool Route::operator==(const Route& a) const +{ + //if (type == MIDI_PORT_ROUTE) // p3.3.50 + //{ + // Use new channel mask. True if all the bits in a.channel are contained in this route's channel. + // Hmm, not commutative... Two such routes are equal if _____ what? ... Code-specific for now. + // return midiPort == a.midiPort && (channel & a.channel) == a.channel; + //} + //else + + if ((type == a.type) && (channel == a.channel)) + //if (type == a.type) + { + if (type == TRACK_ROUTE) + { + return track == a.track && channels == a.channels && remoteChannel == a.remoteChannel; + } + else + if(channel == a.channel) + { + if (type == JACK_ROUTE) + { + if (!checkAudioDevice()) return false; + return audioDevice->portName(jackPort) == audioDevice->portName(a.jackPort); + } + else + if (type == MIDI_PORT_ROUTE) // p3.3.49 + { + return midiPort == a.midiPort; + } + else + if (type == MIDI_DEVICE_ROUTE) + { + if(device && a.device && device->deviceType() == a.device->deviceType()) + { + if(device->deviceType() == MidiDevice::JACK_MIDI) + { + if (!checkAudioDevice()) return false; + return audioDevice->portName(device->clientPort()) == audioDevice->portName(a.device->clientPort()); + } + else + if(device->deviceType() == MidiDevice::ALSA_MIDI) + // TODO: OK ?? + return device->clientPort() == a.device->clientPort() && (channel == a.channel); + else + if(device->deviceType() == MidiDevice::SYNTH_MIDI) + return device->name() == a.device->name(); + } + } + } + } + return false; +} + diff --git a/muse2/muse/route.h b/muse2/muse/route.h new file mode 100644 index 00000000..4cacac88 --- /dev/null +++ b/muse2/muse/route.h @@ -0,0 +1,102 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: route.h,v 1.5.2.1 2008/05/21 00:28:52 terminator356 Exp $ +// +// (C) Copyright 2001 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __ROUTE_H__ +#define __ROUTE_H__ + +#include +#include + +#include "globaldefs.h" + +class QString; +class Track; +class MidiDevice; +class Xml; + +//--------------------------------------------------------- +// Route +//--------------------------------------------------------- + +struct Route { + enum { TRACK_ROUTE=0, JACK_ROUTE=1, MIDI_DEVICE_ROUTE=2, MIDI_PORT_ROUTE=3 }; // p3.3.49 + + union { + //AudioTrack* track; + Track* track; + //MidiJackDevice* device; + MidiDevice* device; + void* jackPort; + }; + + int midiPort; // p3.3.49 Midi port number. Best not to put this in the union to avoid problems? + + //snd_seq_addr_t alsaAdr; + + // Starting source channel (of the owner of this route). Normally zero for mono or stereo tracks, higher for multi-channel tracks. + // p3.3.50 NOTICE: channel is now a bit-wise channel mask, for MidiPort <-> MidiTrack routes. + // This saves many routes: Instead of one route per channel as before, there can now be only one single route with a channel mask, + // for each MidiPort <-> MidiTrack combination. + int channel; + // Number of (audio) channels being routed. + int channels; + + // Allow for multi-channel syntis to feed to/from regular tracks, and to feed one to another. + // If a synti is feeding to/from a regular track, remoteChannel is the 'starting' channel of this multi-channel synti. + // If a synti is feeding to/from another synti, this is not used and individual channels are routed using channel instead. + int remoteChannel; + + unsigned char type; // 0 - track, 1 - jackPort, 2 - midi device, 3 - midi port + + Route(void* t, int ch=-1); + Route(Track* t, int ch = -1, int chans = -1); + Route(MidiDevice* d, int ch); + Route(int port, int ch); // p3.3.49 + Route(const QString&, bool dst, int ch, int rtype = -1); + Route(); + + QString name() const; + bool operator==(const Route& a) const; + bool isValid() const { + return ((type == TRACK_ROUTE) && (track != 0)) || ((type == JACK_ROUTE) && (jackPort != 0)) || + ((type == MIDI_DEVICE_ROUTE) && (device != 0)) || + ((type == MIDI_PORT_ROUTE) && (midiPort >= 0) && (midiPort < MIDI_PORTS)); // p3.3.49 + } + void read(Xml& xml); + void dump() const; + }; + + +//--------------------------------------------------------- +// RouteList +//--------------------------------------------------------- + +struct RouteList : public std::vector { + void removeRoute(const Route& r); + }; + +typedef RouteList::iterator iRoute; +typedef RouteList::const_iterator ciRoute; + +extern void addRoute(Route, Route); +extern void removeRoute(Route, Route); +extern Route name2route(const QString&, bool dst, int rtype = -1); +extern bool checkRoute(const QString&, const QString&); + +//--------------------------------------------------------- +// RouteMenuMap +//--------------------------------------------------------- + +typedef std::map >::iterator iRouteMenuMap; +typedef std::map >::const_iterator ciRouteMenuMap; +typedef std::map > RouteMenuMap; +typedef std::pair pRouteMenuMap; +typedef std::pair rpRouteMenuMap; + +#endif + diff --git a/muse2/muse/seqmsg.cpp b/muse2/muse/seqmsg.cpp new file mode 100644 index 00000000..58944552 --- /dev/null +++ b/muse2/muse/seqmsg.cpp @@ -0,0 +1,1184 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: seqmsg.cpp,v 1.32.2.17 2009/12/20 05:00:35 terminator356 Exp $ +// +// (C) Copyright 2001 Werner Schweer (ws@seh.de) +//========================================================= + +#include + +#include "song.h" +#include "midiport.h" +#include "minstrument.h" +#include "app.h" +#include "amixer.h" +#include "tempo.h" +#include "sig.h" +#include "audio.h" +#include "mididev.h" +#include "audiodev.h" +#include "alsamidi.h" +#include "audio.h" +#include "arranger.h" +#include "plugin.h" +#include "driver/jackmidi.h" + +//--------------------------------------------------------- +// sendMsg +//--------------------------------------------------------- + +void Audio::sendMsg(AudioMsg* m) + { + static int sno = 0; + + if (_running) { + m->serialNo = sno++; + //DEBUG: + msg = m; + // wait for next audio "process" call to finish operation + int no = -1; + int rv = read(fromThreadFdr, &no, sizeof(int)); + if (rv != sizeof(int)) + perror("Audio: read pipe failed"); + else if (no != (sno-1)) { + fprintf(stderr, "audio: bad serial number, read %d expected %d\n", + no, sno-1); + } + } + else { + // if audio is not running (during initialization) + // process commands immediatly + processMsg(m); + } + } + +//--------------------------------------------------------- +// 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; + } + +//--------------------------------------------------------- +// msgRemoveRoute +//--------------------------------------------------------- + +void Audio::msgRemoveRoute(Route src, Route dst) +{ + msgRemoveRoute1(src, dst); + //if (!checkAudioDevice()) return; + if (src.type == Route::JACK_ROUTE) + { + if (!checkAudioDevice()) return; + + //if(dst.type == Route::JACK_MIDI_ROUTE) + if(dst.type == Route::MIDI_DEVICE_ROUTE) + { + //MidiJackDevice* jmd = dynamic_cast(dst.device); + //if(jmd) + if(dst.device) + { + if(dst.device->deviceType() == MidiDevice::JACK_MIDI) + audioDevice->disconnect(src.jackPort, dst.device->clientPort()); + //else + //{ + // TODO... + //MidiAlsaDevice* amd = dynamic_cast(dst.device); + //if(amd) + //} + } + } + else + audioDevice->disconnect(src.jackPort, ((AudioInput*)dst.track)->jackPort(dst.channel)); + } + else if (dst.type == Route::JACK_ROUTE) + { + if (!checkAudioDevice()) return; + + //if(src.type == Route::JACK_MIDI_ROUTE) + if(src.type == Route::MIDI_DEVICE_ROUTE) + { + //MidiJackDevice* jmd = dynamic_cast(src.device); + //if(jmd) + if(src.device) + { + if(src.device->deviceType() == MidiDevice::JACK_MIDI) + audioDevice->disconnect(src.device->clientPort(), dst.jackPort); + //else + //{ + // TODO... + //MidiAlsaDevice* amd = dynamic_cast(src.device); + //if(amd) + //} + } + } + else + audioDevice->disconnect(((AudioOutput*)src.track)->jackPort(src.channel), dst.jackPort); + } +} + +//--------------------------------------------------------- +// msgRemoveRoute1 +//--------------------------------------------------------- + +void Audio::msgRemoveRoute1(Route src, Route dst) + { + AudioMsg msg; + msg.id = AUDIO_ROUTEREMOVE; + msg.sroute = src; + msg.droute = dst; + sendMsg(&msg); + } + +//--------------------------------------------------------- +// msgAddRoute +//--------------------------------------------------------- + +void Audio::msgAddRoute(Route src, Route dst) + { + if (src.type == Route::JACK_ROUTE) + { + if (!checkAudioDevice()) return; + if (isRunning()) + { + //if(dst.type == Route::JACK_MIDI_ROUTE) + if(dst.type == Route::MIDI_DEVICE_ROUTE) + { + //MidiJackDevice* jmd = dynamic_cast(dst.device); + //if(jmd) + if(dst.device) + { + if(dst.device->deviceType() == MidiDevice::JACK_MIDI) + audioDevice->connect(src.jackPort, dst.device->clientPort()); + //else + //{ + // TODO... + //MidiAlsaDevice* amd = dynamic_cast(dst.device); + //if(amd) + //} + } + } + else + audioDevice->connect(src.jackPort, ((AudioInput*)dst.track)->jackPort(dst.channel)); + } + } + else if (dst.type == Route::JACK_ROUTE) + { + if (!checkAudioDevice()) return; + if (audio->isRunning()) + { + //if(src.type == Route::JACK_MIDI_ROUTE) + if(src.type == Route::MIDI_DEVICE_ROUTE) + { + //MidiJackDevice* jmd = dynamic_cast(src.device); + //if(jmd) + if(src.device) + { + if(src.device->deviceType() == MidiDevice::JACK_MIDI) + audioDevice->connect(src.device->clientPort(), dst.jackPort); + //else + //{ + // TODO... + //MidiAlsaDevice* amd = dynamic_cast(src.device); + //if(amd) + //} + } + } + else + audioDevice->connect(((AudioOutput*)src.track)->jackPort(dst.channel), dst.jackPort); + } + } + msgAddRoute1(src, dst); + } + +//--------------------------------------------------------- +// msgAddRoute1 +//--------------------------------------------------------- + +void Audio::msgAddRoute1(Route src, Route dst) + { + AudioMsg msg; + msg.id = AUDIO_ROUTEADD; + msg.sroute = src; + msg.droute = dst; + sendMsg(&msg); + } + +//--------------------------------------------------------- +// msgAddPlugin +//--------------------------------------------------------- + +void Audio::msgAddPlugin(AudioTrack* node, int idx, PluginI* plugin) + { + AudioMsg msg; + msg.id = AUDIO_ADDPLUGIN; + msg.snode = node; + msg.ival = idx; + msg.plugin = plugin; + sendMsg(&msg); + } + +//--------------------------------------------------------- +// msgSetRecord +//--------------------------------------------------------- + +void Audio::msgSetRecord(AudioTrack* node, bool val) + { + AudioMsg msg; + msg.id = AUDIO_RECORD; + msg.snode = node; + msg.ival = int(val); + sendMsg(&msg); + } + +//--------------------------------------------------------- +// msgSetVolume +//--------------------------------------------------------- + +void Audio::msgSetVolume(AudioTrack* src, double val) + { + AudioMsg msg; + msg.id = AUDIO_VOL; + msg.snode = src; + msg.dval = val; + sendMsg(&msg); + //muse->arranger->controllerChanged(src); + } + +//--------------------------------------------------------- +// msgSetPan +//--------------------------------------------------------- + +void Audio::msgSetPan(AudioTrack* node, double val) + { + AudioMsg msg; + msg.id = AUDIO_PAN; + msg.snode = node; + msg.dval = val; + sendMsg(&msg); + //muse->arranger->controllerChanged(node); + } + +//--------------------------------------------------------- +// msgSetPrefader +//--------------------------------------------------------- + +void Audio::msgSetPrefader(AudioTrack* node, int val) + { + AudioMsg msg; + msg.id = AUDIO_SET_PREFADER; + msg.snode = node; + msg.ival = val; + 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) + { + if (!checkAudioDevice()) return; + AudioInput* ai = (AudioInput*)node; + for (int i = 0; i < mc; ++i) + { + if (i < n && ai->jackPort(i) == 0) + { + char buffer[128]; + snprintf(buffer, 128, "%s-%d", name.latin1(), i); + //ai->setJackPort(i, audioDevice->registerInPort(buffer)); + ai->setJackPort(i, audioDevice->registerInPort(buffer, false)); + } + else if ((i >= n) && ai->jackPort(i)) + { + RouteList* ir = node->inRoutes(); + for (iRoute ii = ir->begin(); ii != ir->end(); ++ii) + { + Route r = *ii; + if ((r.type == Route::JACK_ROUTE) && (r.channel == i)) + { + msgRemoveRoute(r, Route(node,i)); + break; + } + } + audioDevice->unregisterPort(ai->jackPort(i)); + ai->setJackPort(i, 0); + } + } + } + else if (node->type() == Track::AUDIO_OUTPUT) + { + if (!checkAudioDevice()) return; + AudioOutput* ao = (AudioOutput*)node; + for (int i = 0; i < mc; ++i) + { + void* jp = ao->jackPort(i); + if (i < n && jp == 0) + { + char buffer[128]; + snprintf(buffer, 128, "%s-%d", name.latin1(), i); + //ao->setJackPort(i, audioDevice->registerOutPort(buffer)); + ao->setJackPort(i, audioDevice->registerOutPort(buffer, false)); + } + else if (i >= n && jp) + { + RouteList* ir = node->outRoutes(); + for (iRoute ii = ir->begin(); ii != ir->end(); ++ii) + { + Route r = *ii; + if ((r.type == Route::JACK_ROUTE) && (r.channel == i)) + { + msgRemoveRoute(Route(node,i), r); + break; + } + } + audioDevice->unregisterPort(jp); + ao->setJackPort(i, 0); + } + } + } + } + + /* TODO TODO: Change all stereo routes to mono. + // If we are going from stereo to mono we need to disconnect any stray synti 'mono last channel'... + if(n == 1 && node->channels() > 1) + { + // This should always happen - syntis are fixed channels, user cannot change them. But to be safe... + if(node->type() != Track::AUDIO_SOFTSYNTH) + { + if(node->type() != Track::AUDIO_INPUT) + { + RouteList* rl = node->inRoutes(); + for(iRoute r = rl->begin(); r != rl->end(); ++r) + { + // Only interested in synth tracks. + if(r->type != Route::TRACK_ROUTE || r->track->type() != Track::AUDIO_SOFTSYNTH) + continue; + // If it's the last channel... + if(r->channel + 1 == ((AudioTrack*)r->track)->totalOutChannels()) + { + msgRemoveRoute(*r, Route(node, r->channel)); + //msgRemoveRoute(r, Route(node, r->remoteChannel)); + break; + } + } + } + + if(node->type() != Track::AUDIO_OUTPUT) + { + RouteList* rl = node->outRoutes(); + for(iRoute r = rl->begin(); r != rl->end(); ++r) + { + // Only interested in synth tracks. + if(r->type != Route::TRACK_ROUTE || r->track->type() != Track::AUDIO_SOFTSYNTH) + continue; + // If it's the last channel... + if(r->channel + 1 == ((AudioTrack*)r->track)->totalOutChannels()) + { + msgRemoveRoute(Route(node, r->channel), *r); + //msgRemoveRoute(Route(node, r->remoteChannel), r); + break; + } + } + } + } + } + */ + + AudioMsg msg; + msg.id = AUDIO_SET_CHANNELS; + msg.snode = node; + msg.ival = n; + sendMsg(&msg); + } + +//--------------------------------------------------------- +// msgSetPluginCtrlVal +//--------------------------------------------------------- + +//void Audio::msgSetPluginCtrlVal(PluginI* plugin, int param, double val) +// p3.3.43 +void Audio::msgSetPluginCtrlVal(AudioTrack* track, int param, double val) +{ + AudioMsg msg; + + msg.id = AUDIO_SET_PLUGIN_CTRL_VAL; + msg.ival = param; + msg.dval = val; + //msg.plugin = plugin; + msg.snode = track; + sendMsg(&msg); + //muse->arranger->controllerChanged(track); +} + +//--------------------------------------------------------- +// msgSwapControllerIDX +//--------------------------------------------------------- + +void Audio::msgSwapControllerIDX(AudioTrack* node, int idx1, int idx2) +{ + AudioMsg msg; + + msg.id = AUDIO_SWAP_CONTROLLER_IDX; + msg.snode = node; + msg.a = idx1; + msg.b = idx2; + sendMsg(&msg); + //muse->arranger->controllerChanged(node); +} + +//--------------------------------------------------------- +// msgClearControllerEvents +//--------------------------------------------------------- + +void Audio::msgClearControllerEvents(AudioTrack* node, int acid) +{ + AudioMsg msg; + + msg.id = AUDIO_CLEAR_CONTROLLER_EVENTS; + msg.snode = node; + msg.ival = acid; + sendMsg(&msg); + //muse->arranger->controllerChanged(node); +} + +//--------------------------------------------------------- +// msgSeekPrevACEvent +//--------------------------------------------------------- + +void Audio::msgSeekPrevACEvent(AudioTrack* node, int acid) +{ + AudioMsg msg; + + msg.id = AUDIO_SEEK_PREV_AC_EVENT; + msg.snode = node; + msg.ival = acid; + sendMsg(&msg); +} + +//--------------------------------------------------------- +// msgSeekNextACEvent +//--------------------------------------------------------- + +void Audio::msgSeekNextACEvent(AudioTrack* node, int acid) +{ + AudioMsg msg; + + msg.id = AUDIO_SEEK_NEXT_AC_EVENT; + msg.snode = node; + msg.ival = acid; + sendMsg(&msg); +} + +//--------------------------------------------------------- +// msgEraseACEvent +//--------------------------------------------------------- + +void Audio::msgEraseACEvent(AudioTrack* node, int acid, int frame) +{ + AudioMsg msg; + + msg.id = AUDIO_ERASE_AC_EVENT; + msg.snode = node; + msg.ival = acid; + msg.a = frame; + sendMsg(&msg); + //muse->arranger->controllerChanged(node); +} + +//--------------------------------------------------------- +// msgEraseRangeACEvents +//--------------------------------------------------------- + +void Audio::msgEraseRangeACEvents(AudioTrack* node, int acid, int frame1, int frame2) +{ + AudioMsg msg; + + msg.id = AUDIO_ERASE_RANGE_AC_EVENTS; + msg.snode = node; + msg.ival = acid; + msg.a = frame1; + msg.b = frame2; + sendMsg(&msg); + //muse->arranger->controllerChanged(node); +} + +//--------------------------------------------------------- +// msgAddACEvent +//--------------------------------------------------------- + +void Audio::msgAddACEvent(AudioTrack* node, int acid, int frame, double val) +{ + AudioMsg msg; + + msg.id = AUDIO_ADD_AC_EVENT; + msg.snode = node; + msg.ival = acid; + msg.a = frame; + msg.dval = val; + sendMsg(&msg); + //muse->arranger->controllerChanged(node); +} + +//--------------------------------------------------------- +// msgSetSolo +//--------------------------------------------------------- + +void Audio::msgSetSolo(Track* track, bool val) +{ + AudioMsg msg; + msg.id = AUDIO_SET_SOLO; + msg.track = track; + msg.ival = int(val); + 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) + { + if (!checkAudioDevice()) return; + //audioDevice->seekTransport(pos.frame()); + // p3.3.23 + //printf("Audio::msgSeek before audioDevice->seekTransport frame:%d\n", pos.frame()); + audioDevice->seekTransport(pos); + // p3.3.23 + //printf("Audio::msgSeek after audioDevice->seekTransport frame:%d\n", 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 (audioDevice) + { + unsigned sfr = song->cPos().frame(); + unsigned dcfr = audioDevice->getCurFrame(); + if(dcfr != sfr) + //audioDevice->seekTransport(sfr); + audioDevice->seekTransport(song->cPos()); + audioDevice->startTransport(); + } + + }else { + if (audioDevice) + audioDevice->stopTransport(); + _bounce = false; + } + } + +//--------------------------------------------------------- +// msgShowInstrumentGui +//--------------------------------------------------------- + +void Audio::msgShowInstrumentGui(MidiInstrument* instr, bool val) + { + instr->showGui(val); + AudioMsg msg; + msg.id = MIDI_SHOW_INSTR_GUI; + msg.p1 = instr; + msg.a = val; + sendMessage(&msg, false); + } + +//--------------------------------------------------------- +// msgAddTrack +//--------------------------------------------------------- + +void Song::msgInsertTrack(Track* track, int idx, bool doUndoFlag) + { + AudioMsg msg; + msg.id = SEQM_ADD_TRACK; + msg.track = track; + msg.ival = idx; + if (doUndoFlag) { + song->startUndo(); + undoOp(UndoOp::AddTrack, idx, track); + } + audio->sendMsg(&msg); + if (doUndoFlag) + endUndo(SC_TRACK_INSERTED); + } + +//--------------------------------------------------------- +// msgRemoveTrack +//--------------------------------------------------------- + +void Audio::msgRemoveTrack(Track* track, bool doUndoFlag) + { + AudioMsg msg; + msg.id = SEQM_REMOVE_TRACK; + msg.track = track; + sendMessage(&msg, doUndoFlag); + } + +//--------------------------------------------------------- +// msgRemoveTracks +// remove all selected tracks +//--------------------------------------------------------- + +void Audio::msgRemoveTracks() +{ + bool loop; + do + { + loop = false; + TrackList* tl = song->tracks(); + for (iTrack t = tl->begin(); t != tl->end(); ++t) + { + Track* tr = *t; + if (tr->selected()) + { + song->removeTrack1(tr); + msgRemoveTrack(tr, false); + song->removeTrack3(tr); + loop = true; + break; + } + } + } + while (loop); + + /* + // TESTED: DIDN'T WORK: It still skipped some selected tracks ! + // Quote from SGI STL: "Erasing an element from a map also does not invalidate any iterators, + // except, of course, for iterators that actually point to the element + // that is being erased." + // Well that doesn't seem true here... + + TrackList* tl = song->tracks(); + for(ciTrack t = tl->begin(); t != tl->end() ; ) + { + if((*t)->selected()) + { + // Changed 20070102: - Iterator t becomes invalid after msgRemoveTrack. + ciTrack tt = t; + ++t; + Track* tr = *tt; + + song->removeTrack1(tr); + msgRemoveTrack(tr, false); + song->removeTrack3(tr); + + } + else + ++t; + + } + */ + +} + +//--------------------------------------------------------- +// msgChangeTrack +// oldTrack - copy of the original track befor modification +// newTrack - modified original track +//--------------------------------------------------------- + +void Audio::msgChangeTrack(Track* oldTrack, Track* newTrack, bool doUndoFlag) + { + AudioMsg msg; + msg.id = SEQM_CHANGE_TRACK; + msg.p1 = oldTrack; + msg.p2 = newTrack; + sendMessage(&msg, doUndoFlag); + } + +//--------------------------------------------------------- +// msgMoveTrack +// move track idx1 to slot idx2 +//--------------------------------------------------------- + +void Audio::msgMoveTrack(int idx1, int idx2, bool doUndoFlag) + { + if (idx1 < 0 || idx2 < 0) // sanity check + return; + int n = song->tracks()->size(); + if (idx1 >= n || idx2 >= n) // sanity check + return; + AudioMsg msg; + msg.id = SEQM_MOVE_TRACK; + msg.a = idx1; + msg.b = idx2; + sendMessage(&msg, doUndoFlag); + } + +//--------------------------------------------------------- +// msgAddPart +//--------------------------------------------------------- + +void Audio::msgAddPart(Part* part, bool doUndoFlag) + { + AudioMsg msg; + msg.id = SEQM_ADD_PART; + msg.p1 = part; + sendMessage(&msg, doUndoFlag); + } + +//--------------------------------------------------------- +// msgRemovePart +//--------------------------------------------------------- + +void Audio::msgRemovePart(Part* part, bool doUndoFlag) + { + AudioMsg msg; + msg.id = SEQM_REMOVE_PART; + msg.p1 = part; + sendMessage(&msg, doUndoFlag); + } + +//--------------------------------------------------------- +// msgRemoveParts +// remove selected parts; return true if any part was +// removed +//--------------------------------------------------------- + +bool Song::msgRemoveParts() + { + bool loop; + bool partSelected = false; + do { + loop = false; + TrackList* tl = song->tracks(); + + for (iTrack it = tl->begin(); it != tl->end(); ++it) { + PartList* pl = (*it)->parts(); + for (iPart ip = pl->begin(); ip != pl->end(); ++ip) { + if (ip->second->selected()) { + if ((*it)->type() == Track::WAVE) { + audio->msgRemovePart((WavePart*)(ip->second)); + } + else { + audio->msgRemovePart(ip->second, false); + } + loop = true; + partSelected = true; + break; + } + } + if (loop) + break; + } + } while (loop); + return partSelected; + } + +//--------------------------------------------------------- +// msgChangePart +//--------------------------------------------------------- + +//void Audio::msgChangePart(Part* oldPart, Part* newPart, bool doUndoFlag) +void Audio::msgChangePart(Part* oldPart, Part* newPart, bool doUndoFlag, bool doCtrls, bool doClones) + { + AudioMsg msg; + msg.id = SEQM_CHANGE_PART; + msg.p1 = oldPart; + msg.p2 = newPart; + msg.a = doCtrls; + msg.b = doClones; + sendMessage(&msg, doUndoFlag); + } + +//--------------------------------------------------------- +// msgAddEvent +//--------------------------------------------------------- + +//void Audio::msgAddEvent(Event& event, Part* part, bool doUndoFlag) +void Audio::msgAddEvent(Event& event, Part* part, bool doUndoFlag, bool doCtrls, bool doClones) + { + AudioMsg msg; + msg.id = SEQM_ADD_EVENT; + msg.ev1 = event; + msg.p2 = part; + msg.a = doCtrls; + msg.b = doClones; + sendMessage(&msg, doUndoFlag); + } + +//--------------------------------------------------------- +// msgDeleteEvent +//--------------------------------------------------------- + +//void Audio::msgDeleteEvent(Event& event, Part* part, bool doUndoFlag) +void Audio::msgDeleteEvent(Event& event, Part* part, bool doUndoFlag, bool doCtrls, bool doClones) + { + AudioMsg msg; + msg.id = SEQM_REMOVE_EVENT; + msg.ev1 = event; + msg.p2 = part; + msg.a = doCtrls; + msg.b = doClones; + sendMessage(&msg, doUndoFlag); + } + +//--------------------------------------------------------- +// msgChangeEvent +//--------------------------------------------------------- + +//void Audio::msgChangeEvent(Event& oe, Event& ne, Part* part, bool doUndoFlag) +void Audio::msgChangeEvent(Event& oe, Event& ne, Part* part, bool doUndoFlag, bool doCtrls, bool doClones) + { + AudioMsg msg; + msg.id = SEQM_CHANGE_EVENT; + msg.ev1 = oe; + msg.ev2 = ne; + msg.p3 = part; + msg.a = doCtrls; + msg.b = doClones; + 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, int z, int n, bool doUndoFlag) + { + AudioMsg msg; + msg.id = SEQM_ADD_SIG; + msg.a = tick; + msg.b = z; + msg.c = 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); + } + +//--------------------------------------------------------- +// msgScanAlsaMidiPorts +//--------------------------------------------------------- + +void Audio::msgScanAlsaMidiPorts() + { + AudioMsg msg; + msg.id = SEQM_SCAN_ALSA_MIDI_PORTS; + sendMessage(&msg, false); + } + +//--------------------------------------------------------- +// 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() + { + AudioMsg msg; + msg.id = SEQM_PANIC; + sendMessage(&msg, false); + } + +//--------------------------------------------------------- +// localOff +//--------------------------------------------------------- + +void Audio::msgLocalOff() + { + AudioMsg msg; + msg.id = SEQM_MIDI_LOCAL_OFF; + sendMessage(&msg, false); + } + +//--------------------------------------------------------- +// msgUpdateSoloStates +//--------------------------------------------------------- + +void Audio::msgUpdateSoloStates() + { + AudioMsg msg; + msg.id = SEQM_UPDATE_SOLO_STATES; + sendMsg(&msg); + } + +//--------------------------------------------------------- +// msgSetAux +//--------------------------------------------------------- + +void Audio::msgSetAux(AudioTrack* track, int idx, double val) + { + AudioMsg msg; + msg.id = SEQM_SET_AUX; + msg.snode = track; + msg.ival = idx; + msg.dval = val; + sendMessage(&msg, false); + } + +//--------------------------------------------------------- +// msgPlayMidiEvent +//--------------------------------------------------------- + +void Audio::msgPlayMidiEvent(const MidiPlayEvent* event) + { + AudioMsg msg; + msg.id = SEQM_PLAY_MIDI_EVENT; + msg.p1 = event; + sendMessage(&msg, false); + } + +//--------------------------------------------------------- +// msgSetHwCtrlState +//--------------------------------------------------------- + +void Audio::msgSetHwCtrlState(MidiPort* port, int ch, int ctrl, int val) + { + AudioMsg msg; + msg.id = SEQM_SET_HW_CTRL_STATE; + msg.p1 = port; + msg.a = ch; + msg.b = ctrl; + msg.c = val; + sendMessage(&msg, false); + } + +//--------------------------------------------------------- +// msgSetHwCtrlState +//--------------------------------------------------------- + +void Audio::msgSetHwCtrlStates(MidiPort* port, int ch, int ctrl, int val, int lastval) + { + AudioMsg msg; + msg.id = SEQM_SET_HW_CTRL_STATE; + msg.p1 = port; + msg.a = ch; + msg.b = ctrl; + msg.c = val; + msg.ival = lastval; + sendMessage(&msg, false); + } + +//--------------------------------------------------------- +// msgSetTrackOutChannel +//--------------------------------------------------------- + +void Audio::msgSetTrackOutChannel(MidiTrack* track, int ch) +{ + AudioMsg msg; + msg.id = SEQM_SET_TRACK_OUT_CHAN; + msg.p1 = track; + msg.a = ch; + sendMessage(&msg, false); +} + +//--------------------------------------------------------- +// msgSetTrackOutPort +//--------------------------------------------------------- + +void Audio::msgSetTrackOutPort(MidiTrack* track, int port) +{ + AudioMsg msg; + msg.id = SEQM_SET_TRACK_OUT_PORT; + msg.p1 = track; + msg.a = port; + sendMessage(&msg, false); +} + +//--------------------------------------------------------- +// msgRemapPortDrumCtlEvents +//--------------------------------------------------------- + +void Audio::msgRemapPortDrumCtlEvents(int mapidx, int newnote, int newchan, int newport) +{ + AudioMsg msg; + msg.id = SEQM_REMAP_PORT_DRUM_CTL_EVS; + msg.ival = mapidx; + msg.a = newnote; + msg.b = newchan; + msg.c = newport; + sendMessage(&msg, false); +} + +//--------------------------------------------------------- +// msgChangeAllPortDrumCtlEvents +//--------------------------------------------------------- + +void Audio::msgChangeAllPortDrumCtrlEvents(bool add, bool drumonly) +{ + AudioMsg msg; + msg.id = SEQM_CHANGE_ALL_PORT_DRUM_CTL_EVS; + msg.a = (int)add; + msg.b = (int)drumonly; + sendMessage(&msg, false); +} + +//--------------------------------------------------------- +// msgSetSendMetronome +//--------------------------------------------------------- + +void Audio::msgSetSendMetronome(AudioTrack* track, bool b) +{ + AudioMsg msg; + msg.id = AUDIO_SET_SEND_METRONOME; + msg.snode = track; + msg.ival = (int)b; + sendMessage(&msg, false); +} + +//--------------------------------------------------------- +// msgBounce +// start bounce operation +//--------------------------------------------------------- + +void Audio::msgBounce() + { + _bounce = true; + if (!checkAudioDevice()) return; + //audioDevice->seekTransport(song->lPos().frame()); + audioDevice->seekTransport(song->lPos()); + } + +//--------------------------------------------------------- +// msgIdle +//--------------------------------------------------------- + +void Audio::msgIdle(bool on) + { + AudioMsg msg; + msg.id = SEQM_IDLE; + msg.a = on; + sendMessage(&msg, false); + } + diff --git a/muse2/muse/shortcuts.cpp b/muse2/muse/shortcuts.cpp new file mode 100644 index 00000000..61f950eb --- /dev/null +++ b/muse2/muse/shortcuts.cpp @@ -0,0 +1,312 @@ +// +// C++ Implementation: shortcuts +// +// Description: +// Definition of shortcuts used in the application +// +// Author: Mathias Lundgren , (C) 2003 +// +// Copyright: Mathias Lundgren (lunar_shuttle@users.sourceforge.net) (C) 2003 +// +// +#include "shortcuts.h" +#include + + +ShortCut shortcuts[SHRT_NUM_OF_ELEMENTS]; +void defShrt(int shrt, int key, const char* descr, int type, const char* xml) +{ + shortcuts[shrt].key = key; + shortcuts[shrt].descr = QT_TR_NOOP(descr); + shortcuts[shrt].type = type; + shortcuts[shrt].xml = xml; +} + + +void initShortCuts() + { + //Global: + defShrt(SHRT_PLAY_SONG, Qt::Key_Enter, "Transport: Start playback from current location", GLOBAL_SHRT, "play"); + defShrt(SHRT_TOGGLE_METRO, Qt::Key_C, "Transport: Toggle metronome", GLOBAL_SHRT,"toggle_metro"); + defShrt(SHRT_STOP, Qt::Key_Insert,"Transport: Stop Playback", GLOBAL_SHRT, "stop"); + defShrt(SHRT_GOTO_START, Qt::Key_W, "Transport: Goto Start", GLOBAL_SHRT, "goto_start"); + defShrt(SHRT_PLAY_TOGGLE, Qt::Key_Space, "Transport: Play, Stop, Rewind", GLOBAL_SHRT, "play_toggle"); + defShrt(SHRT_GOTO_LEFT, Qt::Key_End, "Transport: Goto left marker" , GLOBAL_SHRT, "goto_left"); + defShrt(SHRT_GOTO_RIGHT, Qt::Key_PageDown, "Transport: Goto right marker" , GLOBAL_SHRT, "goto_right"); + defShrt(SHRT_TOGGLE_LOOP, Qt::Key_Slash, "Transport: Toggle Loop section", GLOBAL_SHRT, "toggle_loop"); + defShrt(SHRT_START_REC, Qt::Key_Asterisk, "Transport: Toggle Record", GLOBAL_SHRT, "toggle_rec"); + defShrt(SHRT_REC_CLEAR, Qt::Key_Backspace, "Transport: Clear all rec enabled tracks", GLOBAL_SHRT, "rec_clear"); + defShrt(SHRT_COPY, Qt::CTRL + Qt::Key_C, "Edit: Copy", INVIS_SHRT, "copy"); + defShrt(SHRT_UNDO, Qt::CTRL + Qt::Key_Z, "Edit: Undo", INVIS_SHRT, "undo"); + defShrt(SHRT_REDO, Qt::CTRL + Qt::Key_Y, "Edit: Redo", INVIS_SHRT, "redo"); + defShrt(SHRT_CUT, Qt::CTRL + Qt::Key_X, "Edit: Cut", INVIS_SHRT, "cut"); + defShrt(SHRT_PASTE, Qt::CTRL + Qt::Key_V, "Edit: Paste,", INVIS_SHRT, "paste"); + defShrt(SHRT_DELETE, Qt::Key_Delete, "Edit: Delete", INVIS_SHRT, "delete"); + + //----------------------------------------------------------- + // Arranger: + defShrt(SHRT_NEW, Qt::CTRL + Qt::Key_N, "File: New project", ARRANG_SHRT + DEDIT_SHRT, "new_project"); + defShrt(SHRT_OPEN, Qt::CTRL + Qt::Key_O, "File: Open from disk", ARRANG_SHRT + DEDIT_SHRT, "open_project"); + defShrt(SHRT_SAVE, Qt::CTRL + Qt::Key_S, "File: Save project", ARRANG_SHRT + DEDIT_SHRT, "save_project"); + //----------------------------------------------------------- + + defShrt(SHRT_OPEN_RECENT, Qt::CTRL + Qt::Key_1, "File: Open recent file", ARRANG_SHRT, "open_recent"); + defShrt(SHRT_SAVE_AS, 0 , "File: Save as", ARRANG_SHRT, "save_project_as"); + defShrt(SHRT_LOAD_TEMPLATE, 0 , "File: Load template", ARRANG_SHRT, "load_template"); +// defShrt(SHRT_CONFIG_PRINTER, Qt::CTRL + Qt::Key_P, "Configure printer", ARRANG_SHRT, "config_printer"); + defShrt(SHRT_IMPORT_MIDI, 0 , "File: Import midi file", ARRANG_SHRT, "import_midi"); + defShrt(SHRT_EXPORT_MIDI, 0 , "File: Export midi file", ARRANG_SHRT, "export_midi"); + defShrt(SHRT_IMPORT_PART, 0 , "File: Import midi part", ARRANG_SHRT, "import_part"); + defShrt(SHRT_IMPORT_AUDIO, 0 , "File: Import audio file", ARRANG_SHRT, "import_audio"); + defShrt(SHRT_QUIT, Qt::CTRL + Qt::Key_Q, "File: Quit MusE", ARRANG_SHRT, "quit"); +// defShrt(SHRT_DESEL_PARTS, Qt::CTRL + Qt::Key_B, "Deselect all parts", ARRANG_SHRT, "deselect_parts"); + defShrt(SHRT_SELECT_PRTSTRACK, Qt::CTRL+ Qt::ALT + Qt::Key_P, "Edit: Select parts on track", ARRANG_SHRT, "select_parts_on_track"); + defShrt(SHRT_OPEN_PIANO, Qt::CTRL + Qt::Key_E, "Open pianoroll", ARRANG_SHRT, "open_pianoroll"); + defShrt(SHRT_OPEN_DRUMS, Qt::CTRL + Qt::Key_D, "Open drumeditor", ARRANG_SHRT, "open_drumedit"); + defShrt(SHRT_OPEN_LIST, Qt::CTRL + Qt::Key_L, "Open listeditor", ARRANG_SHRT, "open_listedit"); + defShrt(SHRT_OPEN_WAVE, Qt::CTRL + Qt::Key_W, "Open waveeditor", ARRANG_SHRT, "open_waveedit"); + defShrt(SHRT_OPEN_GRAPHIC_MASTER, Qt::CTRL + Qt::Key_M, "Open graphical mastertrack editor", ARRANG_SHRT, "open_graph_master"); + defShrt(SHRT_OPEN_LIST_MASTER, Qt::CTRL + Qt::SHIFT + Qt::Key_M, "Open list mastertrack editor", ARRANG_SHRT, "open_list_master"); + defShrt(SHRT_OPEN_MIDI_TRANSFORM, Qt::CTRL + Qt::Key_T, "Open midi transformer", ARRANG_SHRT, "open_midi_transform"); + defShrt(SHRT_ADD_MIDI_TRACK, Qt::CTRL + Qt::Key_J, "Add midi track", ARRANG_SHRT, "add_midi_track"); + defShrt(SHRT_ADD_DRUM_TRACK, 0, "Add drum track", ARRANG_SHRT, "add_drum_track"); + defShrt(SHRT_ADD_WAVE_TRACK, 0, "Add wave track", ARRANG_SHRT, "add_wave_track"); + defShrt(SHRT_ADD_AUDIO_OUTPUT, 0, "Add audio output", ARRANG_SHRT, "add_audio_output"); + defShrt(SHRT_ADD_AUDIO_GROUP, 0, "Add audio group", ARRANG_SHRT, "add_audio_group"); + defShrt(SHRT_ADD_AUDIO_INPUT, 0, "Add audio input", ARRANG_SHRT, "add_audio_input"); + defShrt(SHRT_ADD_AUDIO_AUX , 0, "Add audio aux", ARRANG_SHRT, "add_audio_aux"); + defShrt(SHRT_GLOBAL_CUT, 0, "Structure: Global cut", ARRANG_SHRT, "global_cut"); + defShrt(SHRT_GLOBAL_INSERT, 0, "Structure: Global insert", ARRANG_SHRT, "global_insert"); + defShrt(SHRT_GLOBAL_SPLIT, 0, "Structure: Global split", ARRANG_SHRT, "global_split"); + defShrt(SHRT_COPY_RANGE, 0, "Structure: Copy range", ARRANG_SHRT, "copy_range"); + defShrt(SHRT_CUT_EVENTS, 0, "Structure: Cut events", ARRANG_SHRT, "cut_events"); + //defShrt(SHRT_OPEN_MIXER, Qt::Key_F10, "View: Open mixer window", ARRANG_SHRT, "toggle_mixer"); + defShrt(SHRT_OPEN_MIXER, Qt::Key_F10, "View: Open mixer #1 window", ARRANG_SHRT, "toggle_mixer"); + defShrt(SHRT_OPEN_MIXER2, Qt::CTRL + Qt::Key_F10, "View: Open mixer #2 window", ARRANG_SHRT, "toggle_mixer2"); + defShrt(SHRT_OPEN_TRANSPORT, Qt::Key_F11, "View: Toggle transport window", ARRANG_SHRT, "toggle_transport"); + defShrt(SHRT_OPEN_BIGTIME, Qt::Key_F12, "View: Toggle bigtime window", ARRANG_SHRT, "toggle_bigtime"); + defShrt(SHRT_OPEN_MARKER, Qt::Key_F9, "View: Open marker window", ARRANG_SHRT, "marker_window"); + + defShrt(SHRT_FOLLOW_JUMP, 0, "Settings: Follow song by page", ARRANG_SHRT, "follow_jump"); + defShrt(SHRT_FOLLOW_NO, 0, "Settings: Follow song off", ARRANG_SHRT, "follow_no"); + defShrt(SHRT_FOLLOW_CONTINUOUS, 0, "Settings: Follow song continuous", ARRANG_SHRT, "follow_continuous"); + + defShrt(SHRT_GLOBAL_CONFIG, 0, "Settings: Global configuration", ARRANG_SHRT, "configure_global"); + defShrt(SHRT_CONFIG_SHORTCUTS, 0, "Settings: Configure shortcuts", ARRANG_SHRT, "configure_shortcuts"); + defShrt(SHRT_CONFIG_METRONOME, 0, "Settings: Configure metronome", ARRANG_SHRT, "configure_metronome"); + defShrt(SHRT_CONFIG_MIDISYNC, 0, "Settings: Midi sync configuration", ARRANG_SHRT, "configure_midi_sync"); + defShrt(SHRT_MIDI_FILE_CONFIG, 0, "Settings: Midi file import/export configuration", ARRANG_SHRT, "configure_midi_file"); + defShrt(SHRT_APPEARANCE_SETTINGS, 0, "Settings: Appearance settings", ARRANG_SHRT, "configure_appearance_settings"); + defShrt(SHRT_CONFIG_MIDI_PORTS, 0, "Settings: Midi ports / Soft Synth", ARRANG_SHRT, "configure_midi_ports"); + defShrt(SHRT_CONFIG_AUDIO_PORTS, 0, "Settings: Audio subsystem configuration", ARRANG_SHRT, "configure_audio_ports"); + //defShrt(SHRT_SAVE_GLOBAL_CONFIG, 0, "Save global configuration", ARRANG_SHRT, "configure_save_global"); + + defShrt(SHRT_MIDI_EDIT_INSTRUMENTS, 0, "Midi: Edit midi instruments", ARRANG_SHRT, "midi_edit_instruments"); + defShrt(SHRT_MIDI_INPUT_TRANSFORM, 0, "Midi: Open midi input transform", ARRANG_SHRT, "midi_open_input_transform"); + defShrt(SHRT_MIDI_INPUT_FILTER, 0, "Midi: Open midi input filter", ARRANG_SHRT, "midi_open_input_filter"); + defShrt(SHRT_MIDI_INPUT_TRANSPOSE, 0, "Midi: Midi input transpose", ARRANG_SHRT, "midi_open_input_transpose"); + defShrt(SHRT_MIDI_REMOTE_CONTROL, 0, "Midi: Midi remote control", ARRANG_SHRT, "midi_remote_control"); + defShrt(SHRT_RANDOM_RHYTHM_GENERATOR,0,"Midi: Random rhythm generator", ARRANG_SHRT, "midi_random_rhythm_generator"); + defShrt(SHRT_MIDI_RESET, 0, "Midi: Reset midi", ARRANG_SHRT, "midi_reset"); + defShrt(SHRT_MIDI_INIT, 0, "Midi: Init midi", ARRANG_SHRT, "midi_init"); + defShrt(SHRT_MIDI_LOCAL_OFF, 0, "Midi: Midi local off", ARRANG_SHRT, "midi_local_off"); + + defShrt(SHRT_AUDIO_BOUNCE_TO_TRACK, 0, "Audio: Bounce audio to track", ARRANG_SHRT, "audio_bounce_to_track"); + defShrt(SHRT_AUDIO_BOUNCE_TO_FILE, 0, "Audio: Bounce audio to file", ARRANG_SHRT, "audio_bounce_to_file"); + defShrt(SHRT_AUDIO_RESTART, 0, "Audio: Restart audio", ARRANG_SHRT, "audio_restart"); + + defShrt(SHRT_MIXER_AUTOMATION, 0, "Automation: Mixer automation", ARRANG_SHRT, "mixer_automation"); + defShrt(SHRT_MIXER_SNAPSHOT, 0, "Automation: Take mixer snapshot", ARRANG_SHRT, "mixer_snapshot"); + defShrt(SHRT_MIXER_AUTOMATION_CLEAR,0, "Automation: Clear mixer automation", ARRANG_SHRT, "mixer_automation_clear"); + +// defShrt(SHRT_OPEN_CLIPS, 0, "View audio clips", ARRANG_SHRT, "view_audio_clips"); + defShrt(SHRT_OPEN_HELP, Qt::Key_F1, "Help: Open Manual", ARRANG_SHRT, "open_help"); + defShrt(SHRT_START_WHATSTHIS, Qt::SHIFT + Qt::Key_F1, "Help: Toggle whatsthis mode", ARRANG_SHRT, "toggle_whatsthis"); + + defShrt(SHRT_EDIT_PART, Qt::Key_Return, "Edit: Edit selected part", ARRANG_SHRT, "edit_selected_part"); + defShrt(SHRT_SEL_ABOVE, Qt::Key_Up, "Edit: Select nearest part on track above", ARRANG_SHRT, "sel_part_above"); + defShrt(SHRT_SEL_ABOVE_ADD, Qt::SHIFT + Qt::Key_Up, "Edit: Add nearest part on track above", ARRANG_SHRT, "sel_part_above_add"); + defShrt(SHRT_SEL_BELOW, Qt::Key_Down, "Edit: Select nearest part on track below", ARRANG_SHRT, "sel_part_below"); + defShrt(SHRT_SEL_BELOW_ADD, Qt::SHIFT + Qt::Key_Down, "Edit: Add nearest part on track below", ARRANG_SHRT, "sel_part_below_add"); + +// defShrt(SHRT_INSERT, Qt::CTRL+Qt::SHIFT+ Qt::Key_I, "Edit: Insert parts, moving time", ARRANG_SHRT, "insert_parts"); +// defShrt(SHRT_INSERTMEAS, Qt::CTRL+Qt::SHIFT+ Qt::Key_M, "Edit: Insert empty measure", ARRANG_SHRT, "insert_measure"); + + defShrt(SHRT_SEL_TRACK_ABOVE, Qt::CTRL + Qt::Key_Up, "Select track above", ARRANG_SHRT, "sel_track_above"); + defShrt(SHRT_SEL_TRACK_BELOW, Qt::CTRL + Qt::Key_Down, "Select track below", ARRANG_SHRT, "sel_track_below"); + + //----------------------------------------------------------- + + defShrt(SHRT_TRANSPOSE, 0, "Midi: Transpose", ARRANG_SHRT + PROLL_SHRT, "midi_transpose"); + + //----------------------------------------------------------- + + defShrt(SHRT_SELECT_ALL, Qt::CTRL + Qt::Key_A, "Edit: Select all", ARRANG_SHRT + PROLL_SHRT + DEDIT_SHRT, "sel_all"); + defShrt(SHRT_SELECT_NONE, Qt::CTRL + Qt::SHIFT + Qt::Key_A, "Edit: Select none", ARRANG_SHRT + PROLL_SHRT + DEDIT_SHRT, "sel_none"); + defShrt(SHRT_SELECT_INVERT, Qt::CTRL + Qt::Key_I, "Edit: Invert selection", ARRANG_SHRT + PROLL_SHRT + DEDIT_SHRT, "sel_inv"); + defShrt(SHRT_SELECT_ILOOP, 0, "Edit: Select events/parts inside locators", ARRANG_SHRT + PROLL_SHRT + DEDIT_SHRT, "sel_ins_loc"); + defShrt(SHRT_SELECT_OLOOP, 0, "Edit: Select events/parts outside locators", ARRANG_SHRT + PROLL_SHRT + DEDIT_SHRT, "sel_out_loc"); + defShrt(SHRT_SELECT_PREV_PART, Qt::ALT + Qt::Key_Left, "Edit: Select previous part", ARRANG_SHRT + PROLL_SHRT + DEDIT_SHRT, "sel_prv_prt"); + defShrt(SHRT_SELECT_NEXT_PART, Qt::ALT + Qt::Key_Right, "Edit: Select next part", ARRANG_SHRT + PROLL_SHRT + DEDIT_SHRT, "sel_nxt_prt"); + defShrt(SHRT_SEL_LEFT, Qt::Key_Left, "Edit: Select nearest part/event to the left", ARRANG_SHRT + PROLL_SHRT + DEDIT_SHRT, "sel_left"); + defShrt(SHRT_SEL_LEFT_ADD, Qt::Key_Left + Qt::SHIFT, "Edit: Add nearest part/event to the left to selection", PROLL_SHRT + DEDIT_SHRT, "sel_left_add"); + defShrt(SHRT_SEL_RIGHT, Qt::Key_Right, "Edit: Select nearest part/event to the left", ARRANG_SHRT + PROLL_SHRT + DEDIT_SHRT,"sel_right"); + defShrt(SHRT_SEL_RIGHT_ADD, Qt::Key_Right + Qt::SHIFT, "Edit: Add nearest part/event to the right to selection", PROLL_SHRT + DEDIT_SHRT,"sel_right_add"); + defShrt(SHRT_LOCATORS_TO_SELECTION, Qt::ALT + Qt::Key_P, "Edit: Set locators to selection", ARRANG_SHRT + PROLL_SHRT + DEDIT_SHRT, "loc_to_sel"); + defShrt(SHRT_INC_PITCH, Qt::CTRL + Qt::Key_Up, "Edit: Increase pitch", PROLL_SHRT + DEDIT_SHRT, "sel_inc_pitch"); + defShrt(SHRT_DEC_PITCH, Qt::CTRL + Qt::Key_Down, "Edit: Decrease pitch", PROLL_SHRT + DEDIT_SHRT, "sel_dec_pitch"); + defShrt(SHRT_INC_POS, Qt::CTRL + Qt::Key_Right, "Edit: Increase event position", PROLL_SHRT + DEDIT_SHRT, "sel_inc_pos"); + defShrt(SHRT_DEC_POS, Qt::CTRL + Qt::Key_Left, "Edit: Decrease event position", PROLL_SHRT + DEDIT_SHRT, "sel_dec_pos"); + defShrt(SHRT_ZOOM_IN, Qt::CTRL + Qt::Key_PageUp, "View: Zoom in", PROLL_SHRT + DEDIT_SHRT, "zoom_in"); + defShrt(SHRT_ZOOM_OUT, Qt::CTRL + Qt::Key_PageDown, "View: Zoom out", PROLL_SHRT + DEDIT_SHRT, "zoom_out"); + defShrt(SHRT_GOTO_CPOS, Qt::Key_C, "View: Goto current position", PROLL_SHRT + DEDIT_SHRT, "goto_cpos"); + defShrt(SHRT_SCROLL_LEFT, Qt::Key_H, "View: Scroll left", PROLL_SHRT + DEDIT_SHRT, "scroll_left"); + defShrt(SHRT_SCROLL_RIGHT, Qt::Key_L, "View: Scroll left", PROLL_SHRT + DEDIT_SHRT, "scroll_right"); + + //----------------------------------------------------------- + //Drum: + //----------------------------------------------------------- + + defShrt(SHRT_FIXED_LEN, Qt::ALT + Qt::Key_L, "Edit: Set fixed length on midi events", PROLL_SHRT + DEDIT_SHRT, "midi_fixed_len"); + + //----------------------------------------------------------- + //Pianoroll: + //----------------------------------------------------------- + + defShrt(SHRT_OVER_QUANTIZE, 0, "Quantize: Over Quantize", PROLL_SHRT, "midi_over_quant"); + defShrt(SHRT_ON_QUANTIZE, 0, "Quantize: Note On Quantize", PROLL_SHRT, "midi_quant_noteon"); + defShrt(SHRT_ONOFF_QUANTIZE, 0, "Quantize: Note On/Off Quantize", PROLL_SHRT,"midi_quant_noteoff"); + defShrt(SHRT_ITERATIVE_QUANTIZE,0,"Quantize: Iterative Quantize", PROLL_SHRT,"midi_quant_iterative"); + defShrt(SHRT_CONFIG_QUANT, Qt::CTRL + Qt::ALT + Qt::Key_Q, "Quantize: Configure quant", PROLL_SHRT, "config_quant"); + defShrt(SHRT_MODIFY_GATE_TIME, 0, "Quantize: Modify Gate Time", PROLL_SHRT, "midi_mod_gate_time"); + defShrt(SHRT_MODIFY_VELOCITY, 0, "Quantize: Modify Velocity", PROLL_SHRT, "midi_mod_velo"); + defShrt(SHRT_CRESCENDO, 0, "Edit: Crescendo", PROLL_SHRT, "midi_crescendo"); + defShrt(SHRT_THIN_OUT, 0, "Edit: Thin Out", PROLL_SHRT, "midi_thin_out"); + defShrt(SHRT_ERASE_EVENT, 0, "Edit: Erase Event", PROLL_SHRT, "midi_erase_event"); + defShrt(SHRT_DELETE_OVERLAPS, 0, "Edit: Delete overlaps", PROLL_SHRT, "midi_delete_overlaps"); + defShrt(SHRT_NOTE_SHIFT, 0, "Edit: Note Shift", PROLL_SHRT, "midi_note_shift"); + defShrt(SHRT_MOVE_CLOCK, 0, "Edit: Move Clock", PROLL_SHRT, "midi_move_clock"); + defShrt(SHRT_COPY_MEASURE, 0, "Edit: Copy Measure", PROLL_SHRT, "midi_copy_measure"); + defShrt(SHRT_ERASE_MEASURE, 0, "Edit: Erase Measure", PROLL_SHRT,"midi_erase_measure"); + defShrt(SHRT_DELETE_MEASURE, 0, "Edit: Delete Measure", PROLL_SHRT, "midi_delete_measure"); + defShrt(SHRT_CREATE_MEASURE, 0, "Edit: Create Measure", PROLL_SHRT, "midi_create_measure"); + defShrt(SHRT_EVENT_COLOR, Qt::Key_E, "Edit: Change event color", PROLL_SHRT, "change_event_color"); + + + // Shortcuts for tools + // global + defShrt(SHRT_TOOL_POINTER, Qt::Key_A, "Tool: Pointer", ARRANG_SHRT + PROLL_SHRT + DEDIT_SHRT, "pointer_tool"); + defShrt(SHRT_TOOL_PENCIL, Qt::Key_D, "Tool: Pencil", ARRANG_SHRT + PROLL_SHRT + DEDIT_SHRT, "pencil_tool"); + defShrt(SHRT_TOOL_RUBBER, Qt::Key_R, "Tool: Eraser", ARRANG_SHRT + PROLL_SHRT + DEDIT_SHRT, "eraser_tool"); + // piano roll & drum editor + defShrt(SHRT_TOOL_LINEDRAW, 0, "Tool: Line Draw", PROLL_SHRT + DEDIT_SHRT, "line_draw_tool"); + // arranger + defShrt(SHRT_TOOL_SCISSORS, Qt::Key_S, "Tool: Scissor", ARRANG_SHRT, "scissor_tool"); + defShrt(SHRT_TOOL_GLUE, Qt::Key_G, "Tool: Glue", ARRANG_SHRT, "glue_tool"); + defShrt(SHRT_TOOL_MUTE, 0, "Tool: Mute", ARRANG_SHRT, "mute_tool"); + + //Increase/decrease current position, is going to be in arranger & drumeditor as well + defShrt(SHRT_POS_INC, Qt::Key_Plus, "Transport: Increase current position", GLOBAL_SHRT, "curpos_increase"); + defShrt(SHRT_POS_DEC, Qt::Key_Minus, "Transport: Decrease current position", GLOBAL_SHRT, "curpos_decrease"); + defShrt(SHRT_SET_QUANT_1, Qt::Key_1, "Quantize: Set quantize to 1/1 note", PROLL_SHRT, "midi_quant_1"); + defShrt(SHRT_SET_QUANT_2, Qt::Key_2, "Quantize: Set quantize to 1/2 note", PROLL_SHRT, "midi_quant_2"); + defShrt(SHRT_SET_QUANT_3, Qt::Key_3, "Quantize: Set quantize to 1/4 note", PROLL_SHRT, "midi_quant_3"); + defShrt(SHRT_SET_QUANT_4, Qt::Key_4, "Quantize: Set quantize to 1/8 note", PROLL_SHRT, "midi_quant_4"); + defShrt(SHRT_SET_QUANT_5, Qt::Key_5, "Quantize: Set quantize to 1/16 note", PROLL_SHRT, "midi_quant_5"); + defShrt(SHRT_SET_QUANT_6, Qt::Key_6, "Quantize: Set quantize to 1/32 note", PROLL_SHRT, "midi_quant_6"); + defShrt(SHRT_SET_QUANT_7, Qt::Key_7, "Quantize: Set quantize to 1/64 note", PROLL_SHRT, "midi_quant_7"); + + defShrt(SHRT_TOGGLE_TRIOL, Qt::Key_T, "Quantize: Toggle triol quantization", PROLL_SHRT, "midi_quant_triol"); + defShrt(SHRT_TOGGLE_PUNCT, Qt::Key_Period, "Quantize: Toggle punctuation quantization", PROLL_SHRT, "midi_quant_punct"); + defShrt(SHRT_TOGGLE_PUNCT2, Qt::Key_Comma, "Quantize: Toggle punctuation quantization (2)", PROLL_SHRT, "midi_quant_punct2"); + defShrt(SHRT_INSERT_AT_LOCATION, Qt::SHIFT + Qt::Key_Right, "Edit: Insert at location", PROLL_SHRT, "midi_insert_at_loc"); + + defShrt(SHRT_INCREASE_LEN, Qt::CTRL + Qt::SHIFT + Qt::Key_Right, "Edit: Increase length", PROLL_SHRT, "increase_len"); + defShrt(SHRT_DECREASE_LEN, Qt::CTRL + Qt::SHIFT + Qt::Key_Left, "Edit: Decrease length", PROLL_SHRT, "decrease_len"); + + //----------------------------------------------------------- + // List edit: + //----------------------------------------------------------- + + defShrt(SHRT_LE_INS_NOTES, Qt::CTRL + Qt::Key_N, "Insert Note", LEDIT_SHRT, "le_ins_note"); + defShrt(SHRT_LE_INS_SYSEX, Qt::CTRL + Qt::Key_S, "Insert SysEx", LEDIT_SHRT, "le_ins_sysex"); + defShrt(SHRT_LE_INS_CTRL, Qt::CTRL + Qt::Key_T, "Insert Ctrl", LEDIT_SHRT, "le_ins_ctrl"); + defShrt(SHRT_LE_INS_META, 0, "Insert Meta", LEDIT_SHRT, "le_ins_meta"); + defShrt(SHRT_LE_INS_CHAN_AFTERTOUCH, Qt::CTRL + Qt::Key_A, "Insert Channel Aftertouch", LEDIT_SHRT, "le_ins_afttouch"); + defShrt(SHRT_LE_INS_POLY_AFTERTOUCH, Qt::CTRL + Qt::Key_P, "Insert Key Aftertouch", LEDIT_SHRT, "le_ins_poly"); + + //----------------------------------------------------------- + // List masteredit: + //----------------------------------------------------------- + defShrt(SHRT_LM_INS_TEMPO, Qt::CTRL + Qt::Key_T, "Insert Tempo", LMEDIT_SHRT, "lm_ins_tempo"); + defShrt(SHRT_LM_INS_SIG , Qt::CTRL + Qt::Key_R, "Insert Signature", LMEDIT_SHRT, "lm_ins_sig"); + defShrt(SHRT_LM_EDIT_BEAT, Qt::CTRL + Qt::SHIFT+ Qt::Key_E, "Change Event Position", LMEDIT_SHRT, "lm_edit_beat"); + defShrt(SHRT_LM_EDIT_VALUE, Qt::CTRL + Qt::Key_E, "Edit Event Value", LMEDIT_SHRT, "lm_edit_val"); + + defShrt(SHRT_NEXT_MARKER, Qt::Key_F6, "Goto Next Marker", ARRANG_SHRT, "me_sel_next"); + defShrt(SHRT_PREV_MARKER, Qt::Key_F5, "Goto Prev Marker", ARRANG_SHRT, "me_sel_prev"); + + } + + const shortcut_cg shortcut_category[SHRT_NUM_OF_CATEGORIES] = { + { GLOBAL_SHRT, "Global" }, + { ARRANG_SHRT, "Arranger" }, + { PROLL_SHRT, "Pianoroll" }, + { DEDIT_SHRT, "Drumeditor" }, + { LEDIT_SHRT, "List editor" }, + { LMEDIT_SHRT, "List Mastertrack" }, +// { SCORE_SHRT, "Score editor" }, +// { WAVE_SHRT, "Wave editor" }, + { ALL_SHRT , "All categories" } + }; + +int getShrtByTag(const char* xml) + { + for (int i=0; i, (C) 2003 +// +// Copyright: Mathias Lundgren (lunar_shuttle@users.sourceforge.net) (C) 2003 +// +// +#ifndef __SHORTCUTS_H__ +#define __SHORTCUTS_H__ + +#include +#include "xml.h" + +// +// 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 + +struct shortcut + { + int key; + const char* descr; + const char* xml; //xml-tag for config-file + int type; + }; + +struct shortcut_cg + { + int id_flag; + const char* name; + }; + +typedef struct shortcut ShortCut ; + +enum { + //Transport/Positioning + SHRT_PLAY_SONG, //Enter + SHRT_PLAY_TOGGLE, //Space + SHRT_STOP, //Insert + SHRT_GOTO_START, // W + SHRT_GOTO_LEFT, //End-keypad + SHRT_GOTO_RIGHT, //Cursordown-keypad + SHRT_POS_INC, // Plus + SHRT_POS_DEC, // Minus + SHRT_TOGGLE_LOOP, // Slash + SHRT_TOGGLE_METRO, // C + SHRT_START_REC, // *(keypad) + SHRT_REC_CLEAR, // *(keypad) + + //Main + Drumeditor + SHRT_NEW, //Ctrl+N + SHRT_OPEN, //Ctrl+O + SHRT_SAVE, //Ctrl+S + + //Used throughout the app: + SHRT_UNDO, //Ctrl+Z + SHRT_REDO, //Ctrl+Y + SHRT_COPY, //Ctrl+C + SHRT_CUT, //Ctrl+X + SHRT_PASTE, //Ctrl+V + SHRT_DELETE,//Delete + + + //Main: + SHRT_SAVE_AS, //Default: undefined + SHRT_OPEN_RECENT, //Ctrl+1 + SHRT_LOAD_TEMPLATE, //Default: undefined + SHRT_CONFIG_PRINTER, //Ctrl+P + SHRT_IMPORT_MIDI, //Default: undefined + SHRT_EXPORT_MIDI, //Default: undefined + SHRT_IMPORT_PART, //!< Import midi part to current track & location, Default: undefined + SHRT_IMPORT_AUDIO, //Default: undefined + SHRT_QUIT, //Default: Ctrl+Q + + SHRT_DESEL_PARTS, //Ctrl+B + SHRT_SELECT_PRTSTRACK, //Default: undefined + SHRT_OPEN_PIANO, //Ctrl+E + SHRT_OPEN_SCORE, //Ctrl+R + SHRT_OPEN_DRUMS, //Ctrl+D + SHRT_OPEN_LIST, //Ctrl+L + SHRT_OPEN_WAVE, //Ctrl+W + SHRT_OPEN_GRAPHIC_MASTER, //Ctrl+M + SHRT_OPEN_LIST_MASTER, //Ctrl+Shift+M + SHRT_OPEN_MIDI_TRANSFORM, //Ctrl+T + + SHRT_GLOBAL_CUT, //Default: undefined + SHRT_GLOBAL_INSERT, //Default: undefined + SHRT_GLOBAL_SPLIT, //Default: undefined + SHRT_COPY_RANGE, //Default: undefined + SHRT_CUT_EVENTS, //Default: undefined + + SHRT_OPEN_TRANSPORT, //F11 + SHRT_OPEN_BIGTIME, //F12 + SHRT_OPEN_MIXER, //Ctrl+* + SHRT_OPEN_MIXER2, //Ctrl+* + SHRT_OPEN_MARKER, // F9 + SHRT_OPEN_CLIPS, //Default: undefined + + SHRT_FOLLOW_JUMP, //Default: undefined + SHRT_FOLLOW_NO, //Default: undefined + SHRT_FOLLOW_CONTINUOUS, //Default: undefined + + SHRT_GLOBAL_CONFIG, //Default: undefined + SHRT_CONFIG_SHORTCUTS, //Default: undefined + SHRT_CONFIG_METRONOME, //Default: undefined + SHRT_CONFIG_MIDISYNC, //Default: undefined + SHRT_MIDI_FILE_CONFIG, //Default: undefined + SHRT_APPEARANCE_SETTINGS, //Default: undefined + SHRT_CONFIG_MIDI_PORTS, //Default: undefined + SHRT_CONFIG_AUDIO_PORTS, //Default: undefined + //SHRT_SAVE_GLOBAL_CONFIG, //Default: undefined + + SHRT_MIDI_EDIT_INSTRUMENTS, //Default: undefined + SHRT_MIDI_INPUT_TRANSFORM, //Default: undefined + SHRT_MIDI_INPUT_FILTER, //Default: undefined + SHRT_MIDI_INPUT_TRANSPOSE, //Default: undefined + SHRT_MIDI_REMOTE_CONTROL, //Default: undefined + SHRT_RANDOM_RHYTHM_GENERATOR, //Default: undefined + SHRT_MIDI_RESET, //Default: undefined + SHRT_MIDI_INIT, //Default: undefined + SHRT_MIDI_LOCAL_OFF, //Default: undefined + + SHRT_AUDIO_BOUNCE_TO_TRACK, //Default: undefined + SHRT_AUDIO_BOUNCE_TO_FILE, //Default: undefined + SHRT_AUDIO_RESTART, //Default: undefined + + SHRT_MIXER_AUTOMATION, //Default: undefined + SHRT_MIXER_SNAPSHOT, //Default: undefined + SHRT_MIXER_AUTOMATION_CLEAR, //Default: undefined + + SHRT_ADD_MIDI_TRACK, //Default: Ctrl+J + SHRT_ADD_DRUM_TRACK, //Default: undefined + SHRT_ADD_WAVE_TRACK, //Default: undefined + SHRT_ADD_AUDIO_OUTPUT, //Default: undefined + SHRT_ADD_AUDIO_GROUP, //Default: undefined + SHRT_ADD_AUDIO_INPUT, //Default: undefined + SHRT_ADD_AUDIO_AUX, //Default: undefined + SHRT_RESET_MIDI, //Ctrl+Alt+Z + + SHRT_OPEN_HELP, //F1 + SHRT_START_WHATSTHIS, //Shift-F1 + + //Arranger, parts: + SHRT_EDIT_PART, //Enter + SHRT_SEL_ABOVE, //Up + SHRT_SEL_ABOVE_ADD, //move up and add to selection + SHRT_SEL_BELOW, //Down + SHRT_SEL_BELOW_ADD, //move down and add to selection + + /* + SHRT_INSERT, //Ctrl+Shift+I - insert parts instead of pasting + SHRT_INSERTMEAS, //Ctrl+Shift+M - insert measures + */ + //Arranger tracks + SHRT_SEL_TRACK_BELOW, + SHRT_SEL_TRACK_ABOVE, + + //To be in arranger, pianoroll & drumeditor + SHRT_SELECT_ALL, //Ctrl+A + SHRT_SELECT_NONE, //Ctrl+Shift+A + SHRT_SELECT_INVERT, //Ctrl+I + SHRT_SELECT_ILOOP, //Default: Undefined + SHRT_SELECT_OLOOP, //Default: Undefined + SHRT_SELECT_PREV_PART, // Ctrl+- + SHRT_SELECT_NEXT_PART, // Ctrl++ + SHRT_SEL_LEFT, //left + SHRT_SEL_LEFT_ADD, //move left and add to selection + SHRT_SEL_RIGHT, //Right + SHRT_SEL_RIGHT_ADD, //move right and add to selection + SHRT_INC_PITCH, + SHRT_DEC_PITCH, + SHRT_INC_POS, + SHRT_DEC_POS, + SHRT_LOCATORS_TO_SELECTION, //Alt+P, currently in arranger & pianoroll + SHRT_INSERT_AT_LOCATION, //Shift+CrsrRight + SHRT_INCREASE_LEN, + SHRT_DECREASE_LEN, + + SHRT_TOOL_1,//Shift+1 Pointer + SHRT_TOOL_2,//Shift+2 Pen + SHRT_TOOL_3,//Shift+3 Rubber + SHRT_TOOL_4,//Shift+4 + SHRT_TOOL_5,//Shift+5 + SHRT_TOOL_6,//Shift+6 + SHRT_TRANSPOSE, //Default: undefined + + //Shortcuts to be in pianoroll & drumeditor + SHRT_ZOOM_IN, // PgUp + SHRT_ZOOM_OUT, // PgDown + SHRT_GOTO_CPOS, // c + SHRT_SCROLL_LEFT, // h + SHRT_SCROLL_RIGHT, // l + SHRT_FIXED_LEN, //Alt+L, currently only drumeditor + SHRT_QUANTIZE, //q + SHRT_OVER_QUANTIZE, //Default: undefined + SHRT_ON_QUANTIZE, //Default: undefined + SHRT_ONOFF_QUANTIZE, //Default: undefined + SHRT_ITERATIVE_QUANTIZE, //Default: undefined + SHRT_CONFIG_QUANT, //Default: Ctrl+Alt+Q + SHRT_MODIFY_GATE_TIME, //Default: undefined + SHRT_MODIFY_VELOCITY, + SHRT_CRESCENDO, + SHRT_DELETE_OVERLAPS, + + SHRT_THIN_OUT, + SHRT_ERASE_EVENT, + SHRT_NOTE_SHIFT, + SHRT_MOVE_CLOCK, + SHRT_COPY_MEASURE, + SHRT_ERASE_MEASURE, + SHRT_DELETE_MEASURE, + SHRT_CREATE_MEASURE, + SHRT_SET_QUANT_1, //1 - pianoroll + SHRT_SET_QUANT_2, //2 - pianoroll + SHRT_SET_QUANT_3, //3 - pianoroll + SHRT_SET_QUANT_4, //4 - pianoroll + SHRT_SET_QUANT_5, //5 - pianoroll + SHRT_SET_QUANT_6, //6 - pianoroll + SHRT_SET_QUANT_7, //7 - pianoroll + SHRT_TOGGLE_TRIOL, //t + SHRT_TOGGLE_PUNCT, //.-keypad + SHRT_TOGGLE_PUNCT2, // , + + SHRT_EVENT_COLOR, //e + + // Shortcuts for tools + // global + SHRT_TOOL_POINTER, // + SHRT_TOOL_PENCIL, + SHRT_TOOL_RUBBER, + + // pianoroll and drum editor + SHRT_TOOL_LINEDRAW, + + // arranger + SHRT_TOOL_SCISSORS, + SHRT_TOOL_GLUE, + SHRT_TOOL_MUTE, + + + //Listeditor: + SHRT_LE_INS_NOTES, //Ctrl+N + SHRT_LE_INS_SYSEX, //Ctrl+S + SHRT_LE_INS_CTRL, //Ctrl+T + SHRT_LE_INS_META, //Default: undefined + SHRT_LE_INS_CHAN_AFTERTOUCH,//Ctrl+A + SHRT_LE_INS_POLY_AFTERTOUCH,//Ctrl+P + + //List master editor: + SHRT_LM_INS_TEMPO, // Ctrl+T + SHRT_LM_INS_SIG, // Ctrl+R + SHRT_LM_EDIT_BEAT, // Ctrl+Shift+E + SHRT_LM_EDIT_VALUE,// Ctrl+E + + // Marker view + SHRT_NEXT_MARKER, + SHRT_PREV_MARKER, + + //Last item: + SHRT_NUM_OF_ELEMENTS // must be last + }; + +extern ShortCut shortcuts[SHRT_NUM_OF_ELEMENTS]; //size of last entry +extern void initShortCuts(); +extern void writeShortCuts(int level, Xml& xml); +extern void readShortCuts (Xml& xml); +extern const shortcut_cg shortcut_category[SHRT_NUM_OF_CATEGORIES]; +#endif diff --git a/muse2/muse/sig.cpp b/muse2/muse/sig.cpp new file mode 100644 index 00000000..8bbebfae --- /dev/null +++ b/muse2/muse/sig.cpp @@ -0,0 +1,439 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: sig.cpp,v 1.5.2.2 2009/03/09 02:05:17 terminator356 Exp $ +// +// (C) Copyright 2000 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include +#include "sig.h" +#include "gconfig.h" +#include "xml.h" + +SigList sigmap; + +//--------------------------------------------------------- +// SigList +//--------------------------------------------------------- + +SigList::SigList() + { + insert(std::pair (MAX_TICK, new SigEvent(4, 4, 0))); + } + +//--------------------------------------------------------- +// add +// signatures are only allowed at the beginning of +// a bar +//--------------------------------------------------------- + +void SigList::add(unsigned tick, int z, int n) + { + if (z == 0 || n == 0) { + printf("SigList::add illegal signature %d/%d\n", z, n); + + // Added p3.3.43 + return; + } + tick = raster1(tick, 0); + iSigEvent e = upper_bound(tick); + assert(e != end()); + + if (tick == e->second->tick) { + e->second->z = z; + e->second->n = n; + } + else { + SigEvent* ne = e->second; + SigEvent* ev = new SigEvent(ne->z, ne->n, ne->tick); + ne->z = z; + ne->n = n; + 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->z = e->second->z; + ne->second->n = e->second->n; + ne->second->tick = e->second->tick; + erase(e); + normalize(); + } + +//--------------------------------------------------------- +// SigList::normalize +//--------------------------------------------------------- + +void SigList::normalize() + { + int z = 0; + int n = 0; + unsigned tick = 0; + iSigEvent ee; + + for (iSigEvent e = begin(); e != end();) { + if (z == e->second->z && n == e->second->n) { + e->second->tick = tick; + erase(ee); + } + z = e->second->z; + n = e->second->n; + 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->n); + int ticksM = ticksB * e->second->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->z, i->second->n); + } + } + +void SigList::clear() + { + for (iSigEvent i = begin(); i != end(); ++i) + delete i->second; + SIGLIST::clear(); + insert(std::pair (MAX_TICK, new SigEvent(4, 4, 0))); + } + +//--------------------------------------------------------- +// ticksMeasure +//--------------------------------------------------------- + +int SigList::ticksMeasure(int Z, int N) const + { + return ticks_beat(N) * 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->z, i->second->n); + } + +//--------------------------------------------------------- +// ticksBeat +//--------------------------------------------------------- + +int SigList::ticksBeat(unsigned tick) const + { + ciSigEvent i = upper_bound(tick); + assert(i != end()); + return ticks_beat(i->second->n); + } + +int SigList::ticks_beat(int n) const + { + int m = config.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: assert(false); break; + } + return m; + } + +//--------------------------------------------------------- +// timesig +//--------------------------------------------------------- + +void SigList::timesig(unsigned tick, int& z, int& n) const + { + ciSigEvent i = upper_bound(tick); + if (i == end()) { + printf("timesig(%d): not found\n", tick); + // abort(); + z = 4; + n = 4; + } + else { + z = i->second->z; + n = i->second->n; + } + } + +//--------------------------------------------------------- +// 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()); + // abort(); + *bar = 0; + *beat = 0; + *tick = 0; + return; + } + + int delta = t - e->second->tick; + int ticksB = ticks_beat(e->second->n); + int ticksM = ticksB * e->second->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->n); + int ticksM = ticksB * e->second->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->n) * e->second->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); + assert(e != end()); + + int delta = t - e->second->tick; + int ticksM = ticks_beat(e->second->n) * e->second->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); + assert(e != end()); + + int delta = t - e->second->tick; + int ticksM = ticks_beat(e->second->n) * e->second->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); + assert(e != end()); + return ticks_beat(e->second->n) * e->second->z; + } + return raster; + } + +//--------------------------------------------------------- +// SigList::write +//--------------------------------------------------------- + +void SigList::write(int level, Xml& xml) const + { + xml.tag(level++, "siglist"); + for (ciSigEvent i = begin(); i != end(); ++i) + i->second->write(level, xml, i->first); + xml.tag(level, "/siglist"); + } + +//--------------------------------------------------------- +// SigList::read +//--------------------------------------------------------- + +void SigList::read(Xml& xml) + { + for (;;) { + Xml::Token token = xml.parse(); + const QString& tag = xml.s1(); + switch (token) { + case Xml::Error: + case Xml::End: + return; + case Xml::TagStart: + if (tag == "sig") { + SigEvent* t = new SigEvent(); + unsigned tick = t->read(xml); + iSigEvent pos = find(tick); + if (pos != end()) + erase(pos); + insert(std::pair (tick, t)); + } + else + xml.unknown("SigList"); + break; + case Xml::Attribut: + break; + case Xml::TagEnd: + if (tag == "siglist") { + normalize(); + return; + } + default: + break; + } + } + } + +//--------------------------------------------------------- +// SigEvent::write +//--------------------------------------------------------- + +void SigEvent::write(int level, Xml& xml, int at) const + { + xml.tag(level++, "sig at=\"%d\"", at); + xml.intTag(level, "tick", tick); + xml.intTag(level, "nom", z); + xml.intTag(level, "denom", n); + xml.tag(level, "/sig"); + } + +//--------------------------------------------------------- +// SigEvent::read +//--------------------------------------------------------- + +int SigEvent::read(Xml& xml) + { + int at = 0; + for (;;) { + Xml::Token token = xml.parse(); + const QString& tag = xml.s1(); + switch (token) { + case Xml::Error: + case Xml::End: + return 0; + case Xml::TagStart: + if (tag == "tick") + tick = xml.parseInt(); + else if (tag == "nom") + z = xml.parseInt(); + else if (tag == "denom") + n = xml.parseInt(); + else + xml.unknown("SigEvent"); + break; + case Xml::Attribut: + if (tag == "at") + at = xml.s2().toInt(); + break; + case Xml::TagEnd: + if (tag == "sig") + return at; + default: + break; + } + } + return 0; + } + + diff --git a/muse2/muse/sig.h b/muse2/muse/sig.h new file mode 100644 index 00000000..6a561d6e --- /dev/null +++ b/muse2/muse/sig.h @@ -0,0 +1,79 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: sig.h,v 1.2 2004/01/11 18:55:34 wschweer Exp $ +// +// (C) Copyright 2000 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __SIG_H__ +#define __SIG_H__ + +#include + +#ifndef MAX_TICK +#define MAX_TICK (0x7fffffff/100) +#endif + +class Xml; + +//--------------------------------------------------------- +// Signature Event +//--------------------------------------------------------- + +struct SigEvent { + int z, n; // takt signatur + unsigned tick; // ab dieser Position gilt signatur + int bar; // precomputed + + int read(Xml&); + void write(int, Xml&, int) const; + + SigEvent() { } + SigEvent(int Z, int N, unsigned tk) { + z = Z; + n = N; + 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(int z, int n) const; + + public: + SigList(); + void clear(); + void add(unsigned tick, int z, int n); + void del(unsigned tick); + + void read(Xml&); + void write(int, Xml&) const; + void dump() const; + + void timesig(unsigned tick, int& z, int& n) 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; + unsigned raster2(unsigned tick, int raster) const; + int rasterStep(unsigned tick, int raster) const; + }; + +extern SigList sigmap; +#endif diff --git a/muse2/muse/song.cpp b/muse2/muse/song.cpp new file mode 100644 index 00000000..8c682e39 --- /dev/null +++ b/muse2/muse/song.cpp @@ -0,0 +1,3681 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: song.cpp,v 1.59.2.52 2009/12/15 03:39:58 terminator356 Exp $ +// +// (C) Copyright 2000-2004 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//#include +//Added by qt3to4: +#include + +#include "app.h" +#include "driver/jackmidi.h" +#include "driver/alsamidi.h" +#include "song.h" +#include "track.h" +#include "undo.h" +#include "key.h" +#include "globals.h" +#include "event.h" +#include "drummap.h" +#include "marker/marker.h" +#include "synth.h" +#include "audio.h" +#include "mididev.h" +#include "amixer.h" +#include "midiseq.h" +#include "audiodev.h" +#include "gconfig.h" +#include "sync.h" +#include "midictrl.h" +#include "menutitleitem.h" +#include "midi.h" +#include "sig.h" +#include + +extern void clearMidiTransforms(); +extern void clearMidiInputTransforms(); +Song* song; + +/* +//--------------------------------------------------------- +// RoutingMenuItem +//--------------------------------------------------------- + +class RoutingMenuItem : public QCustomMenuItem +{ + Route route; + //virtual QSize sizeHint() { return QSize(80, h); } + virtual void 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, route.name()); + } + + public: + RoutingMenuItem(const Route& r) : route(r) { } +}; +*/ + +//--------------------------------------------------------- +// Song +//--------------------------------------------------------- + +Song::Song(const char* name) + :QObject(0, name) + { + _recRaster = 0; // Set to measure, the same as Arranger intial value. Arranger snap combo will set this. + noteFifoSize = 0; + noteFifoWindex = 0; + noteFifoRindex = 0; + undoList = new UndoList; + redoList = new UndoList; + _markerList = new MarkerList; + _globalPitchShift = 0; + clear(false); + } + +//--------------------------------------------------------- +// Song +//--------------------------------------------------------- + +Song::~Song() + { + delete undoList; + delete redoList; + delete _markerList; + } + +//--------------------------------------------------------- +// putEvent +//--------------------------------------------------------- + +void Song::putEvent(int pv) + { + if (noteFifoSize < REC_NOTE_FIFO_SIZE) { + recNoteFifo[noteFifoWindex] = pv; + noteFifoWindex = (noteFifoWindex + 1) % REC_NOTE_FIFO_SIZE; + ++noteFifoSize; + } + } + +//--------------------------------------------------------- +// setTempo +// public slot +//--------------------------------------------------------- + +void Song::setTempo(int newTempo) + { + audio->msgSetTempo(pos[0].tick(), newTempo, true); + } + +//--------------------------------------------------------- +// setSig +// called from transport window +//--------------------------------------------------------- + +void Song::setSig(int z, int n) + { + if (_masterFlag) { + audio->msgAddSig(pos[0].tick(), z, n); + } + } + +//--------------------------------------------------------- +// addNewTrack +// Called from GUI context +// Besides normal track types, n includes synth menu ids from populateAddTrack() +//--------------------------------------------------------- + +Track* Song::addNewTrack(int n) +{ + // Ignore negative numbers since this slot could be called by a menu or list etc. passing -1. + if(n < 0) + return 0; + + // Synth sub-menu id? + if(n >= MENU_ADD_SYNTH_ID_BASE) + { + n -= MENU_ADD_SYNTH_ID_BASE; + if(n < (int)synthis.size()) + { + //SynthI* si = createSynthI(synthis[n]->baseName()); + //SynthI* si = createSynthI(synthis[n]->name()); + SynthI* si = createSynthI(synthis[n]->baseName(), synthis[n]->name()); + if(!si) + return 0; + + // Add instance last in midi device list. + for (int i = 0; i < MIDI_PORTS; ++i) + { + MidiPort* port = &midiPorts[i]; + MidiDevice* dev = port->device(); + if (dev==0) + { + midiSeq->msgSetMidiDevice(port, si); + muse->changeConfig(true); // save configuration file + deselectTracks(); + si->setSelected(true); + update(); + return si; + } + } + deselectTracks(); + si->setSelected(true); + update(SC_SELECTION); + return si; + } + else + return 0; + } + // Normal track. + else + { + // Ignore AUDIO_SOFTSYNTH, now that we have it as the synth menu id, since addTrack doesn't like it. + if((Track::TrackType)n == Track::AUDIO_SOFTSYNTH) + return 0; + + Track* t = addTrack((Track::TrackType)n); + deselectTracks(); + t->setSelected(true); + update(SC_SELECTION); + return t; + } +} + + +//--------------------------------------------------------- +// addTrack +// called from GUI context +//--------------------------------------------------------- + +Track* Song::addTrack(int t) + { + Track::TrackType type = (Track::TrackType) t; + Track* track = 0; + int lastAuxIdx = _auxs.size(); + switch(type) { + case Track::MIDI: + track = new MidiTrack(); + track->setType(Track::MIDI); + break; + case Track::DRUM: + track = new MidiTrack(); + track->setType(Track::DRUM); + ((MidiTrack*)track)->setOutChannel(9); + break; + case Track::WAVE: + track = new WaveTrack(); + ((AudioTrack*)track)->addAuxSend(lastAuxIdx); + break; + case Track::AUDIO_OUTPUT: + track = new AudioOutput(); + break; + case Track::AUDIO_GROUP: + track = new AudioGroup(); + ((AudioTrack*)track)->addAuxSend(lastAuxIdx); + break; + case Track::AUDIO_AUX: + track = new AudioAux(); + break; + case Track::AUDIO_INPUT: + track = new AudioInput(); + ((AudioTrack*)track)->addAuxSend(lastAuxIdx); + break; + case Track::AUDIO_SOFTSYNTH: + printf("not implemented: Song::addTrack(SOFTSYNTH)\n"); + // ((AudioTrack*)track)->addAuxSend(lastAuxIdx); + break; + default: + printf("Song::addTrack() illegal type %d\n", type); + abort(); + } + track->setDefaultName(); + insertTrack1(track, -1); + msgInsertTrack(track, -1, true); + insertTrack3(track, -1); + + // + // add default route to master + // + OutputList* ol = song->outputs(); + if (!ol->empty()) { + AudioOutput* ao = ol->front(); + switch(type) { + case Track::MIDI: + case Track::DRUM: + case Track::AUDIO_OUTPUT: + break; + case Track::WAVE: + case Track::AUDIO_GROUP: + case Track::AUDIO_AUX: + case Track::AUDIO_INPUT: + // p3.3.38 + //case Track::AUDIO_SOFTSYNTH: + audio->msgAddRoute(Route((AudioTrack*)track, -1), Route(ao, -1)); + updateFlags |= SC_ROUTE; + break; + // p3.3.38 It should actually never get here now, but just in case. + case Track::AUDIO_SOFTSYNTH: + audio->msgAddRoute(Route((AudioTrack*)track, 0, ((AudioTrack*)track)->channels()), Route(ao, 0, ((AudioTrack*)track)->channels())); + updateFlags |= SC_ROUTE; + break; + } + } + audio->msgUpdateSoloStates(); + return track; + } + +//--------------------------------------------------------- +// cmdRemoveTrack +//--------------------------------------------------------- + +void Song::cmdRemoveTrack(Track* track) + { + int idx = _tracks.index(track); + undoOp(UndoOp::DeleteTrack, idx, track); + removeTrack2(track); + updateFlags |= SC_TRACK_REMOVED; + } + +//--------------------------------------------------------- +// removeMarkedTracks +//--------------------------------------------------------- + +void Song::removeMarkedTracks() + { + bool loop; + do { + loop = false; + for (iTrack t = _tracks.begin(); t != _tracks.end(); ++t) { + if ((*t)->selected()) { + removeTrack2(*t); + loop = true; + break; + } + } + } while (loop); + } + +//--------------------------------------------------------- +// deselectTracks +//--------------------------------------------------------- + +void Song::deselectTracks() + { + for (iTrack t = _tracks.begin(); t != _tracks.end(); ++t) + (*t)->setSelected(false); + } + +//--------------------------------------------------------- +// changeTrack +// oldTrack - copy of the original track befor modification +// newTrack - modified original track +//--------------------------------------------------------- + +void Song::changeTrack(Track* oldTrack, Track* newTrack) + { + oldTrack->setSelected(false); //?? + int idx = _tracks.index(newTrack); + + //undoOp(UndoOp::ModifyTrack, oldTrack, newTrack); + undoOp(UndoOp::ModifyTrack, idx, oldTrack, newTrack); + updateFlags |= SC_TRACK_MODIFIED; + } + +//--------------------------------------------------------- +// addEvent +// return true if event was added +//--------------------------------------------------------- + +bool Song::addEvent(Event& event, Part* part) + { + /* + if (event.type() == Controller) { + MidiTrack* track = (MidiTrack*)part->track(); + int ch = track->outChannel(); + int tick = event.tick() + part->tick(); + int cntrl = event.dataA(); + int val = event.dataB(); + MidiPort* mp = &midiPorts[track->outPort()]; + + // Is it a drum controller event, according to the track port's instrument? + if(track->type() == Track::DRUM) + { + MidiController* mc = mp->drumController(cntrl); + if(mc) + { + int note = cntrl & 0x7f; + cntrl &= ~0xff; + ch = drumMap[note].channel; + mp = &midiPorts[drumMap[note].port]; + cntrl |= drumMap[note].anote; + } + } + + // Changed by T356. + //if (!mp->setCtrl(ch, tick, cntrl, val)) { + // mp->addManagedController(ch, cntrl); + // if (!mp->setCtrl(ch, tick, cntrl, val)) + // return false; + // } + // Changed again. Don't depend on return value of this - search for the event, below. + //if(!mp->setControllerVal(ch, tick, cntrl, val, part)) + // return false; + if(mp->setControllerVal(ch, tick, cntrl, val, part)) + updateFlags |= SC_MIDI_CONTROLLER; + } + */ + + //addPortCtrlEvents(event, part); + + // Return false if the event is already found. + // (But allow a port controller value, above, in case it is not already stored.) + if(part->events()->find(event) != part->events()->end()) + { + // This can be normal for some (redundant) operations. + if(debugMsg) + printf("Song::addEvent event already found in part:%s size:%zd\n", part->name().latin1(), part->events()->size()); + return false; + } + + part->events()->add(event); + return true; + } + +//--------------------------------------------------------- +// changeEvent +//--------------------------------------------------------- + +void Song::changeEvent(Event& oldEvent, Event& newEvent, Part* part) +{ + iEvent i = part->events()->find(oldEvent); + + if (i == part->events()->end()) { + // This can be normal for some (redundant) operations. + if(debugMsg) + printf("Song::changeEvent event not found in part:%s size:%zd\n", part->name().latin1(), part->events()->size()); + // abort(); + // Removed by T356. Allow it to add the new event. + // (And remove the old one from the midi port controller!) + //return; + } + else + part->events()->erase(i); + + part->events()->add(newEvent); + + /* + if (oldEvent.type() == Controller) { + MidiTrack* track = (MidiTrack*)part->track(); + int ch = track->outChannel(); + int tick = oldEvent.tick() + part->tick(); + int cntrl = oldEvent.dataA(); + MidiPort* mp = &midiPorts[track->outPort()]; + // Is it a drum controller event, according to the track port's instrument? + if(track->type() == Track::DRUM) + { + MidiController* mc = mp->drumController(cntrl); + if(mc) + { + int note = cntrl & 0x7f; + cntrl &= ~0xff; + ch = drumMap[note].channel; + mp = &midiPorts[drumMap[note].port]; + cntrl |= drumMap[note].anote; + } + } + + mp->deleteController(ch, tick, cntrl, part); + } + */ + //removePortCtrlEvents(oldEvent, part); + + /* + if (newEvent.type() == Controller) { + MidiTrack* track = (MidiTrack*)part->track(); + int ch = track->outChannel(); + int tick = newEvent.tick() + part->tick(); + int cntrl = newEvent.dataA(); + int val = newEvent.dataB(); + MidiPort* mp = &midiPorts[track->outPort()]; + // Is it a drum controller event, according to the track port's instrument? + if(track->type() == Track::DRUM) + { + MidiController* mc = mp->drumController(cntrl); + if(mc) + { + int note = cntrl & 0x7f; + cntrl &= ~0xff; + ch = drumMap[note].channel; + mp = &midiPorts[drumMap[note].port]; + cntrl |= drumMap[note].anote; + } + } + + mp->setControllerVal(ch, tick, cntrl, val, part); + } + */ + //addPortCtrlEvents(newEvent, part); +} + +//--------------------------------------------------------- +// deleteEvent +//--------------------------------------------------------- + +void Song::deleteEvent(Event& event, Part* part) + { + /* + if (event.type() == Controller) { + MidiTrack* track = (MidiTrack*)part->track(); + int ch = track->outChannel(); + int tick = event.tick() + part->tick(); + int cntrl = event.dataA(); + + MidiPort* mp = &midiPorts[track->outPort()]; + // Is it a drum controller event, according to the track port's instrument? + if(track->type() == Track::DRUM) + { + MidiController* mc = mp->drumController(cntrl); + if(mc) + { + int note = cntrl & 0x7f; + cntrl &= ~0xff; + ch = drumMap[note].channel; + mp = &midiPorts[drumMap[note].port]; + cntrl |= drumMap[note].anote; + } + } + + mp->deleteController(ch, tick, cntrl, part); + } + */ + //removePortCtrlEvents(event, part); + + iEvent ev = part->events()->find(event); + if (ev == part->events()->end()) { + // This can be normal for some (redundant) operations. + if(debugMsg) + printf("Song::deleteEvent event not found in part:%s size:%zd\n", part->name().latin1(), part->events()->size()); + return; + } + part->events()->erase(ev); + } + +//--------------------------------------------------------- +// remapPortDrumCtrlEvents +// Called when drum map anote, channel, or port is changed. +//--------------------------------------------------------- + +void Song::remapPortDrumCtrlEvents(int mapidx, int newnote, int newchan, int newport) +{ + if(mapidx == -1) + return; + + for(ciMidiTrack it = _midis.begin(); it != _midis.end(); ++it) + { + MidiTrack* mt = *it; + if(mt->type() != Track::DRUM) + continue; + + MidiPort* trackmp = &midiPorts[mt->outPort()]; + const PartList* pl = mt->cparts(); + for(ciPart ip = pl->begin(); ip != pl->end(); ++ip) + { + MidiPart* part = (MidiPart*)(ip->second); + const EventList* el = part->cevents(); + unsigned len = part->lenTick(); + for(ciEvent ie = el->begin(); ie != el->end(); ++ie) + { + const Event& ev = ie->second; + // Added by T356. Do not handle events which are past the end of the part. + if(ev.tick() >= len) + break; + + if(ev.type() != Controller) + continue; + + int cntrl = ev.dataA(); + + // Is it a drum controller event, according to the track port's instrument? + MidiController* mc = trackmp->drumController(cntrl); + if(!mc) + continue; + + int note = cntrl & 0x7f; + // Does the index match? + if(note == mapidx) + { + int tick = ev.tick() + part->tick(); + int ch = drumMap[note].channel; + int port = drumMap[note].port; + MidiPort* mp = &midiPorts[port]; + cntrl = (cntrl & ~0xff) | drumMap[note].anote; + + // Remove the port controller value. + mp->deleteController(ch, tick, cntrl, part); + + if(newnote != -1 && newnote != drumMap[note].anote) + cntrl = (cntrl & ~0xff) | newnote; + if(newchan != -1 && newchan != ch) + ch = newchan; + if(newport != -1 && newport != port) + port = newport; + + mp = &midiPorts[port]; + + // Add the port controller value. + mp->setControllerVal(ch, tick, cntrl, ev.dataB(), part); + } + } + } + } +} + +//--------------------------------------------------------- +// changeAllPortDrumCtlEvents +// add true: add events. false: remove events +// drumonly true: Do drum controller events ONLY. false (default): Do ALL controller events. +//--------------------------------------------------------- + +void Song::changeAllPortDrumCtrlEvents(bool add, bool drumonly) +{ + int ch, trackch, cntrl, tick; + MidiPort* mp, *trackmp; + for(ciMidiTrack it = _midis.begin(); it != _midis.end(); ++it) + { + MidiTrack* mt = *it; + if(mt->type() != Track::DRUM) + continue; + + trackmp = &midiPorts[mt->outPort()]; + trackch = mt->outChannel(); + const PartList* pl = mt->cparts(); + for(ciPart ip = pl->begin(); ip != pl->end(); ++ip) + { + MidiPart* part = (MidiPart*)(ip->second); + const EventList* el = part->cevents(); + unsigned len = part->lenTick(); + for(ciEvent ie = el->begin(); ie != el->end(); ++ie) + { + const Event& ev = ie->second; + // Added by T356. Do not handle events which are past the end of the part. + if(ev.tick() >= len) + break; + + if(ev.type() != Controller) + continue; + + cntrl = ev.dataA(); + mp = trackmp; + ch = trackch; + + // Is it a drum controller event, according to the track port's instrument? + if(trackmp->drumController(cntrl)) + { + int note = cntrl & 0x7f; + ch = drumMap[note].channel; + mp = &midiPorts[drumMap[note].port]; + cntrl = (cntrl & ~0xff) | drumMap[note].anote; + } + else + { + if(drumonly) + continue; + } + + tick = ev.tick() + part->tick(); + + if(add) + // Add the port controller value. + mp->setControllerVal(ch, tick, cntrl, ev.dataB(), part); + else + // Remove the port controller value. + mp->deleteController(ch, tick, cntrl, part); + } + } + } +} + +//--------------------------------------------------------- +// cmdAddRecordedEvents +// add recorded Events into part +//--------------------------------------------------------- + +void Song::cmdAddRecordedEvents(MidiTrack* mt, EventList* events, unsigned startTick) + { + if (events->empty()) { + if (debugMsg) + printf("no events recorded\n"); + return; + } + iEvent s; + iEvent e; + unsigned endTick; + + // Changed by Tim. p3.3.8 + + //if (punchin()) + if((audio->loopCount() > 0 && startTick > lPos().tick()) || (punchin() && startTick < lPos().tick())) + { + startTick = lpos(); + s = events->lower_bound(startTick); + } + else + { + s = events->begin(); +// startTick = s->first; + } + + // Changed by Tim. p3.3.8 + + //if (punchout()) + //{ + // endTick = rpos(); + // e = events->lower_bound(endTick); + //} + //else + //{ + // search for last noteOff: + endTick = 0; + for (iEvent i = events->begin(); i != events->end(); ++i) { + Event ev = i->second; + unsigned l = ev.endTick(); + if (l > endTick) + endTick = l; + } + // e = events->end(); + //} + if((audio->loopCount() > 0) || (punchout() && endTick > rPos().tick()) ) + { + endTick = rpos(); + e = events->lower_bound(endTick); + } + else + e = events->end(); + + if (startTick > endTick) { + if (debugMsg) + printf("no events in record area\n"); + return; + } + + //--------------------------------------------------- + // if startTick points into a part, + // record to that part + // else + // create new part + //--------------------------------------------------- + + PartList* pl = mt->parts(); + MidiPart* part = 0; + iPart ip; + for (ip = pl->begin(); ip != pl->end(); ++ip) { + part = (MidiPart*)(ip->second); + unsigned partStart = part->tick(); + unsigned partEnd = part->endTick(); + if (startTick >= partStart && startTick < partEnd) + break; + } + if (ip == pl->end()) { + if (debugMsg) + printf("create new part for recorded events\n"); + // create new part + part = new MidiPart(mt); + + // Changed by Tim. p3.3.8 + + // Honour the Arranger snap settings. (Set to bar by default). + //startTick = roundDownBar(startTick); + //endTick = roundUpBar(endTick); + // Round the start down using the Arranger part snap raster value. + startTick = sigmap.raster1(startTick, recRaster()); + // Round the end up using the Arranger part snap raster value. + endTick = sigmap.raster2(endTick, recRaster()); + + part->setTick(startTick); + part->setLenTick(endTick - startTick); + part->setName(mt->name()); + // copy events + for (iEvent i = s; i != e; ++i) { + Event old = i->second; + Event event = old.clone(); + event.setTick(old.tick() - startTick); + // addEvent also adds port controller values. So does msgAddPart, below. Let msgAddPart handle them. + //addEvent(event, part); + if(part->events()->find(event) == part->events()->end()) + part->events()->add(event); + } + audio->msgAddPart(part); + updateFlags |= SC_PART_INSERTED; + return; + } + + updateFlags |= SC_EVENT_INSERTED; + + unsigned partTick = part->tick(); + if (endTick > part->endTick()) { + // Determine new part length... + endTick = 0; + for (iEvent i = s; i != e; ++i) { + Event event = i->second; + unsigned tick = event.tick() - partTick + event.lenTick(); + if (endTick < tick) + endTick = tick; + } + // Added by Tim. p3.3.8 + + // Round the end up (again) using the Arranger part snap raster value. + endTick = sigmap.raster2(endTick, recRaster()); + + // Remove all of the part's port controller values. Indicate do not do clone parts. + removePortCtrlEvents(part, false); + // Clone the part. This doesn't increment aref count, and doesn't chain clones. + // It also gives the new part a new serial number, but it is + // overwritten with the old one by Song::changePart(), below. + Part* newPart = part->clone(); + // Set the new part's length. + newPart->setLenTick(endTick); + // Change the part. + changePart(part, newPart); + // Manually adjust reference counts. + part->events()->incARef(-1); + newPart->events()->incARef(1); + // Replace the part in the clone chain with the new part. + replaceClone(part, newPart); + // Now add all of the new part's port controller values. Indicate do not do clone parts. + addPortCtrlEvents(newPart, false); + // Create an undo op. Indicate do port controller values but not clone parts. + undoOp(UndoOp::ModifyPart, part, newPart, true, false); + updateFlags |= SC_PART_MODIFIED; + + if (_recMode == REC_REPLACE) + { + iEvent si = newPart->events()->lower_bound(startTick - newPart->tick()); + iEvent ei = newPart->events()->lower_bound(newPart->endTick() - newPart->tick()); + for (iEvent i = si; i != ei; ++i) + { + Event event = i->second; + // Create an undo op. Indicate do port controller values and clone parts. + undoOp(UndoOp::DeleteEvent, event, newPart, true, true); + // Remove the event from the new part's port controller values, and do all clone parts. + removePortCtrlEvents(event, newPart, true); + } + newPart->events()->erase(si, ei); + } + + for (iEvent i = s; i != e; ++i) { + Event event = i->second; + event.setTick(event.tick() - partTick); + Event e; + // Create an undo op. Indicate do port controller values and clone parts. + undoOp(UndoOp::AddEvent, e, event, newPart, true, true); + + if(newPart->events()->find(event) == newPart->events()->end()) + newPart->events()->add(event); + + // Add the event to the new part's port controller values, and do all clone parts. + addPortCtrlEvents(event, newPart, true); + } + + + /* + if (_recMode == REC_REPLACE) + { + iEvent si = part->events()->lower_bound(startTick - part->tick()); + iEvent ei = part->events()->lower_bound(part->endTick() - part->tick()); + + for (iEvent i = si; i != ei; ++i) + { + Event event = i->second; + // Create an undo op. Indicate do port controller values and clone parts. + //undoOp(UndoOp::DeleteEvent, event, part); + undoOp(UndoOp::DeleteEvent, event, part, true, true); + + //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, part); + // } + + // Remove the event from the part's port controller values, and do all clone parts. + //removePortCtrlEvents(event, part, true); + } + part->events()->erase(si, ei); + } + + // Remove all of the part's port controller values, and do all clone parts. + removePortCtrlEvents(part, true); + + // Clone the part. This doesn't increment aref count, and doesn't chain clones. + // It also gives the new part a new serial number, but it is + // overwritten with the old one by Song::changePart(), below. + Part* newPart = part->clone(); + + endTick = 0; + for (iEvent i = s; i != e; ++i) { + Event event = i->second; + unsigned tick = event.tick() - partTick; + event.setTick(tick); + Event e; + // Create an undo op. Indicate do port controller values and clone parts. + //undoOp(UndoOp::AddEvent, e, event, newPart); + undoOp(UndoOp::AddEvent, e, event, newPart, true, true); + + // addEvent also adds port controller values. So does msgChangePart, below. Let msgChangePart handle them. + //addEvent(event, (MidiPart*)newPart); + if(newPart->events()->find(event) == newPart->events()->end()) + newPart->events()->add(event); + + if (endTick < event.tick() + event.lenTick()) + endTick = event.tick() + event.lenTick(); + } + newPart->setLenTick(endTick); // endTick - part->tick() + + //printf("Song::cmdAddRecordedEvents before changePart part:%p events:%p refs:%d Arefs:%d newPart:%p events:%p refs:%d Arefs:%d\n", part, part->events(), part->events()->refCount(), part->events()->arefCount(), newPart, newPart->events(), newPart->events()->refCount(), newPart->events()->arefCount()); + + // Change the part. + changePart(part, newPart); + // Manually adjust reference counts. + part->events()->incARef(-1); + newPart->events()->incARef(1); + // Replace the part in the clone chain with the new part. + replaceClone(part, newPart); + // Now add all of the new part's port controller values, and do all clone parts. + addPortCtrlEvents(newPart, true); + + //printf("Song::cmdAddRecordedEvents after changePart part:%p events:%p refs:%d Arefs:%d newPart:%p events:%p refs:%d Arefs:%d\n", part, part->events(), part->events()->refCount(), part->events()->arefCount(), newPart, newPart->events(), newPart->events()->refCount(), newPart->events()->arefCount()); + + //undoOp(UndoOp::ModifyPart, part, newPart); + // Create an undo op. Indicate do not do port controller values and clone parts. + undoOp(UndoOp::ModifyPart, part, newPart, false, false); + + // Removed by T356. + //part->events()->incARef(-1); + + updateFlags |= SC_PART_MODIFIED; + //printf("Song::cmdAddRecordedEvents final part:%p events:%p refs:%d Arefs:%d newPart:%p events:%p refs:%d Arefs:%d\n", part, part->events(), part->events()->refCount(), part->events()->arefCount(), newPart, newPart->events(), newPart->events()->refCount(), newPart->events()->arefCount()); + */ + + } + else { + if (_recMode == REC_REPLACE) { + iEvent si = part->events()->lower_bound(startTick - part->tick()); + iEvent ei = part->events()->lower_bound(endTick - part->tick()); + + for (iEvent i = si; i != ei; ++i) { + Event event = i->second; + // Create an undo op. Indicate that controller values and clone parts were handled. + //undoOp(UndoOp::DeleteEvent, event, part); + undoOp(UndoOp::DeleteEvent, event, part, true, true); + /* + 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, part); + } + */ + // Remove the event from the part's port controller values, and do all clone parts. + removePortCtrlEvents(event, part, true); + } + part->events()->erase(si, ei); + } + for (iEvent i = s; i != e; ++i) { + Event event = i->second; + int tick = event.tick() - partTick; + event.setTick(tick); + + // Create an undo op. Indicate that controller values and clone parts were handled. + //undoOp(UndoOp::AddEvent, event, part); + undoOp(UndoOp::AddEvent, event, part, true, true); + + //addEvent(event, part); + if(part->events()->find(event) == part->events()->end()) + part->events()->add(event); + + // Add the event to the part's port controller values, and do all clone parts. + addPortCtrlEvents(event, part, true); + } + } + } + +//--------------------------------------------------------- +// findTrack +//--------------------------------------------------------- + +MidiTrack* Song::findTrack(const Part* part) const + { + for (ciTrack t = _tracks.begin(); t != _tracks.end(); ++t) { + MidiTrack* track = dynamic_cast(*t); + if (track == 0) + continue; + PartList* pl = track->parts(); + for (iPart p = pl->begin(); p != pl->end(); ++p) { + if (part == p->second) + return track; + } + } + return 0; + } + +//--------------------------------------------------------- +// findTrack +// find track by name +//--------------------------------------------------------- + +Track* Song::findTrack(const QString& name) const + { + for (ciTrack i = _tracks.begin(); i != _tracks.end(); ++i) { + if ((*i)->name() == name) + return *i; + } + return 0; + } + +//--------------------------------------------------------- +// setLoop +// set transport loop flag +//--------------------------------------------------------- + +void Song::setLoop(bool f) + { + if (loopFlag != f) { + loopFlag = f; + loopAction->setOn(loopFlag); + emit loopChanged(loopFlag); + } + } + +//--------------------------------------------------------- +// clearTrackRec +//--------------------------------------------------------- +void Song::clearTrackRec() +{ + for (iTrack it = tracks()->begin(); it != tracks()->end(); ++it) + setRecordFlag(*it,false); +} + +//--------------------------------------------------------- +// setRecord +//--------------------------------------------------------- +void Song::setRecord(bool f, bool autoRecEnable) + { + if (recordFlag != f) { + if (f && autoRecEnable) { + 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) { + setRecordFlag(selectedTrack, true); + } + else if (alreadyRecEnabled) { + // do nothing + } + else { + // if there are no tracks, do not enable record + if (!waves()->size() && !midis()->size()) { + printf("No track to select, won't enable record\n"); + f = false; + } + } +#if 0 + // check for midi devices suitable for recording + bool portFound = false; + for (int i = 0; i < MIDI_PORTS; ++i) { + MidiDevice* dev = midiPorts[i].device(); + if (dev && (dev->rwFlags() & 0x2)) + portFound = true; + } + if (!portFound) { + QMessageBox::critical(qApp->mainWidget(), "MusE: Record", + "There are no midi devices configured for recording"); + f = false; + } +#endif + } + else { + bounceTrack = 0; + } + if (audio->isPlaying() && f) + f = false; + recordFlag = f; + recordAction->setOn(recordFlag); + emit recordChanged(recordFlag); + } + } + +//--------------------------------------------------------- +// setPunchin +// set punchin flag +//--------------------------------------------------------- + +void Song::setPunchin(bool f) + { + if (punchinFlag != f) { + punchinFlag = f; + punchinAction->setOn(punchinFlag); + emit punchinChanged(punchinFlag); + } + } + +//--------------------------------------------------------- +// setPunchout +// set punchout flag +//--------------------------------------------------------- + +void Song::setPunchout(bool f) + { + if (punchoutFlag != f) { + punchoutFlag = f; + punchoutAction->setOn(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 (tempomap.setMasterFlag(cpos(), val)) + { + //audioDevice->setMaster(val); + emit songChanged(SC_MASTER); + } + // Removed. p3.3.26 + //audioDevice->setMaster(val); + } + +//--------------------------------------------------------- +// setPlay +// set transport play flag +//--------------------------------------------------------- + +void Song::setPlay(bool f) + { + if (extSyncFlag.value()) { + if (debugMsg) + printf("not allowed while using external sync"); + return; + } + // only allow the user to set the button "on" + if (!f) + playAction->setOn(true); + else + audio->msgPlay(true); + } + +void Song::setStop(bool f) + { + if (extSyncFlag.value()) { + if (debugMsg) + printf("not allowed while using external sync"); + return; + } + // only allow the user to set the button "on" + if (!f) + stopAction->setOn(true); + else + audio->msgPlay(false); + } + +void Song::setStopPlay(bool f) + { + playAction->blockSignals(true); + stopAction->blockSignals(true); + + emit playChanged(f); // signal transport window + + playAction->setOn(f); + stopAction->setOn(!f); + + stopAction->blockSignals(false); + playAction->blockSignals(false); + } + +//--------------------------------------------------------- +// swapTracks +//--------------------------------------------------------- + +void Song::swapTracks(int i1, int i2) + { + undoOp(UndoOp::SwapTrack, i1, i2); + Track* track = _tracks[i1]; + _tracks[i1] = _tracks[i2]; + _tracks[i2] = track; + } + +//--------------------------------------------------------- +// setPos +// song->setPos(Song::CPOS, pos, true, true, true); +//--------------------------------------------------------- + +void Song::setPos(int idx, const Pos& val, bool sig, + bool isSeek, bool adjustScrollbar) + { +// printf("setPos %d sig=%d,seek=%d,scroll=%d ", +// idx, sig, isSeek, adjustScrollbar); +// val.dump(0); +// printf("\n"); + + // p3.3.23 + //printf("Song::setPos before audio->msgSeek idx:%d isSeek:%d frame:%d\n", idx, isSeek, val.frame()); + if (pos[idx] == val) + return; + if (idx == CPOS) { + _vcpos = val; + if (isSeek && !extSyncFlag.value()) { + audio->msgSeek(val); + // p3.3.23 + //printf("Song::setPos after audio->msgSeek idx:%d isSeek:%d frame:%d\n", idx, isSeek, val.frame()); + 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].tick(), adjustScrollbar); + emit posChanged(RPOS, pos[RPOS].tick(), adjustScrollbar); + if (idx != LPOS && idx != RPOS) + emit posChanged(idx, pos[idx].tick(), adjustScrollbar); + } + else + emit posChanged(idx, pos[idx].tick(), adjustScrollbar); + } + + if (idx == CPOS) { + iMarker i1 = _markerList->begin(); + iMarker i2 = i1; + bool currentChanged = false; + 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 +//--------------------------------------------------------- + +void Song::forward() + { + unsigned newPos = pos[0].tick() + config.division; + audio->msgSeek(Pos(newPos, true)); + } + +//--------------------------------------------------------- +// rewind +//--------------------------------------------------------- + +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, true)); + } + +//--------------------------------------------------------- +// rewindStart +//--------------------------------------------------------- + +void Song::rewindStart() + { + // Added by T356 + //audio->msgIdle(true); + + audio->msgSeek(Pos(0, true)); + + // Added by T356 + //audio->msgIdle(false); + } + +//--------------------------------------------------------- +// update +//--------------------------------------------------------- + +void Song::update(int flags) + { + static int level = 0; // DEBUG + if (level) { + printf("Song::update %08x, level %d\n", flags, level); + return; + } + ++level; + emit songChanged(flags); + --level; + } + +//--------------------------------------------------------- +// updatePos +//--------------------------------------------------------- + +void Song::updatePos() + { + emit posChanged(0, pos[0].tick(), false); + emit posChanged(1, pos[1].tick(), false); + emit posChanged(2, pos[2].tick(), false); + } + +//--------------------------------------------------------- +// setChannelMute +// mute all midi tracks associated with channel +//--------------------------------------------------------- + +void Song::setChannelMute(int channel, bool val) + { + for (iTrack i = _tracks.begin(); i != _tracks.end(); ++i) { + MidiTrack* track = dynamic_cast(*i); + if (track == 0) + continue; + if (track->outChannel() == channel) + track->setMute(val); + } + emit songChanged(SC_MUTE); + } + +//--------------------------------------------------------- +// len +//--------------------------------------------------------- + +void Song::initLen() + { + _len = sigmap.bar2tick(40, 0, 0); // default song len + for (iTrack t = _tracks.begin(); t != _tracks.end(); ++t) { + MidiTrack* track = dynamic_cast(*t); + if (track == 0) + continue; + PartList* parts = track->parts(); + for (iPart p = parts->begin(); p != parts->end(); ++p) { + unsigned last = p->second->tick() + p->second->lenTick(); + if (last > _len) + _len = last; + } + } + _len = roundUpBar(_len); + } + +//--------------------------------------------------------- +// tempoChanged +//--------------------------------------------------------- + +void Song::tempoChanged() +{ + emit songChanged(SC_TEMPO); +} + +//--------------------------------------------------------- +// roundUpBar +//--------------------------------------------------------- + +int Song::roundUpBar(int t) const + { + int bar, beat; + unsigned tick; + sigmap.tickValues(t, &bar, &beat, &tick); + if (beat || tick) + return sigmap.bar2tick(bar+1, 0, 0); + return t; + } + +//--------------------------------------------------------- +// roundUpBeat +//--------------------------------------------------------- + +int Song::roundUpBeat(int t) const + { + int bar, beat; + unsigned tick; + sigmap.tickValues(t, &bar, &beat, &tick); + if (tick) + return sigmap.bar2tick(bar, beat+1, 0); + return t; + } + +//--------------------------------------------------------- +// roundDownBar +//--------------------------------------------------------- + +int Song::roundDownBar(int t) const + { + int bar, beat; + unsigned tick; + sigmap.tickValues(t, &bar, &beat, &tick); + return sigmap.bar2tick(bar, 0, 0); + } + +//--------------------------------------------------------- +// dumpMaster +//--------------------------------------------------------- + +void Song::dumpMaster() + { + tempomap.dump(); + 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' + // + // Rough translation: + /* + If a part is selected, edit that. + If a track is selected, edit the first + part of the track, the rest are + 'ghost parts' + When multiple parts are selected, then edit the first, + the rest are 'ghost parts' + */ + + + // 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 (ciTrack t = _tracks.begin(); t != _tracks.end(); ++t) { + if ((*t)->selected()) { + MidiTrack* track = dynamic_cast(*t); + if (track == 0) + continue; + 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 (ciTrack t = _tracks.begin(); t != _tracks.end(); ++t) { + WaveTrack* track = dynamic_cast(*t); + if (track == 0) + continue; + 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 (ciTrack t = _tracks.begin(); t != _tracks.end(); ++t) { + if ((*t)->selected()) { + WaveTrack* track = dynamic_cast(*t); + if (track == 0) + continue; + PartList* pl = track->parts(); + for (iPart p = pl->begin(); p != pl->end(); ++p) + parts->add(p->second); + break; + } + } + } + return parts; + } + +void Song::setMType(MType t) + { +// printf("set MType %d\n", t); + _mtype = t; + } + +//--------------------------------------------------------- +// beat +//--------------------------------------------------------- + +void Song::beat() + { + // Keep the sync detectors running... + for(int port = 0; port < MIDI_PORTS; ++port) + { + // Must keep them running even if there's no device... + //if(midiPorts[port].device()) + midiPorts[port].syncInfo().setTime(); + } + + + int tick = audio->tickPos(); + if (audio->isPlaying()) + setPos(0, tick, true, false, true); + + // p3.3.40 Update synth native guis at the heartbeat rate. + for(ciSynthI is = _synthIs.begin(); is != _synthIs.end(); ++is) + (*is)->guiHeartBeat(); + + while (noteFifoSize) { + int pv = recNoteFifo[noteFifoRindex]; + noteFifoRindex = (noteFifoRindex + 1) % REC_NOTE_FIFO_SIZE; + int pitch = (pv >> 8) & 0xff; + int velo = pv & 0xff; + + //--------------------------------------------------- + // filter midi remote control events + //--------------------------------------------------- + + if (rcEnable && velo != 0) { + if (pitch == rcStopNote) + setStop(true); + else if (pitch == rcRecordNote) + setRecord(true); + else if (pitch == rcGotoLeftMarkNote) + setPos(0, pos[LPOS].tick(), true, true, true); + else if (pitch == rcPlayNote) + setPlay(true); + } + emit song->midiNote(pitch, velo); + --noteFifoSize; + } + } + +//--------------------------------------------------------- +// setLen +//--------------------------------------------------------- + +void Song::setLen(unsigned l) + { + _len = l; + update(); + } + +//--------------------------------------------------------- +// addMarker +//--------------------------------------------------------- + +Marker* Song::addMarker(const QString& s, int t, bool lck) + { + Marker* marker = _markerList->add(s, t, lck); + emit markerChanged(MARKER_ADD); + return marker; + } + +//--------------------------------------------------------- +// addMarker +//--------------------------------------------------------- + +Marker* Song::getMarkerAt(int t) + { + iMarker markerI; + for (markerI=_markerList->begin(); markerI != _markerList->end(); ++markerI) { +// if (i1->second.current()) + if (unsigned(t) == markerI->second.tick())//prevent of copmiler warning: comparison signed/unsigned + return &markerI->second; + } + //Marker* marker = _markerList->add(s, t, lck); + return NULL; + } + +//--------------------------------------------------------- +// removeMarker +//--------------------------------------------------------- + +void Song::removeMarker(Marker* marker) + { + _markerList->remove(marker); + emit markerChanged(MARKER_REMOVE); + } + +Marker* Song::setMarkerName(Marker* m, const QString& s) + { + m->setName(s); + emit markerChanged(MARKER_NAME); + return m; + } + +Marker* Song::setMarkerTick(Marker* m, int t) + { + Marker mm(*m); + _markerList->remove(m); + mm.setTick(t); + m = _markerList->add(mm); + emit markerChanged(MARKER_TICK); + return m; + } + +Marker* Song::setMarkerLock(Marker* m, bool f) + { + m->setType(f ? Pos::FRAMES : Pos::TICKS); + emit markerChanged(MARKER_LOCK); + return m; + } + +//--------------------------------------------------------- +// setRecordFlag +//--------------------------------------------------------- + +void Song::setRecordFlag(Track* track, bool val) + { + if (track->type() == Track::WAVE) { + WaveTrack* audioTrack = (WaveTrack*)track; + if(!audioTrack->setRecordFlag1(val)) + return; + audio->msgSetRecord(audioTrack, val); + } + else { + track->setRecordFlag1(val); + track->setRecordFlag2(val); + } +// updateFlags |= SC_RECFLAG; + update(SC_RECFLAG); + } + +//--------------------------------------------------------- +// rescanAlsaPorts +//--------------------------------------------------------- + +void Song::rescanAlsaPorts() + { + emit midiPortsChanged(); + } + +//--------------------------------------------------------- +// endMsgCmd +//--------------------------------------------------------- + +void Song::endMsgCmd() + { + if (updateFlags) { + redoList->clear(); // TODO: delete elements in list + undoAction->setEnabled(true); + redoAction->setEnabled(false); + emit songChanged(updateFlags); + } + } + +//--------------------------------------------------------- +// undo +//--------------------------------------------------------- + +void Song::undo() + { + updateFlags = 0; + if (doUndo1()) + return; + audio->msgUndo(); + doUndo3(); + redoAction->setEnabled(true); + undoAction->setEnabled(!undoList->empty()); + + if(updateFlags && (SC_TRACK_REMOVED | SC_TRACK_INSERTED)) + audio->msgUpdateSoloStates(); + + emit songChanged(updateFlags); + } + +//--------------------------------------------------------- +// redo +//--------------------------------------------------------- + +void Song::redo() + { + updateFlags = 0; + if (doRedo1()) + return; + audio->msgRedo(); + doRedo3(); + undoAction->setEnabled(true); + redoAction->setEnabled(!redoList->empty()); + + if(updateFlags && (SC_TRACK_REMOVED | SC_TRACK_INSERTED)) + audio->msgUpdateSoloStates(); + + emit songChanged(updateFlags); + } + +//--------------------------------------------------------- +// processMsg +// executed in realtime thread context +//--------------------------------------------------------- + +void Song::processMsg(AudioMsg* msg) + { + switch(msg->id) { + case SEQM_UPDATE_SOLO_STATES: + updateSoloStates(); + break; + case SEQM_UNDO: + doUndo2(); + break; + case SEQM_REDO: + doRedo2(); + break; + case SEQM_MOVE_TRACK: + if (msg->a > msg->b) { + for (int i = msg->a; i > msg->b; --i) { + swapTracks(i, i-1); + } + } + else { + for (int i = msg->a; i < msg->b; ++i) { + swapTracks(i, i+1); + } + } + updateFlags = SC_TRACK_MODIFIED; + break; + case SEQM_ADD_EVENT: + updateFlags = SC_EVENT_INSERTED; + if (addEvent(msg->ev1, (MidiPart*)msg->p2)) { + Event ev; + //undoOp(UndoOp::AddEvent, ev, msg->ev1, (Part*)msg->p2); + undoOp(UndoOp::AddEvent, ev, msg->ev1, (Part*)msg->p2, msg->a, msg->b); + } + else + updateFlags = 0; + if(msg->a) + addPortCtrlEvents(msg->ev1, (Part*)msg->p2, msg->b); + break; + case SEQM_REMOVE_EVENT: + { + Event event = msg->ev1; + MidiPart* part = (MidiPart*)msg->p2; + if(msg->a) + removePortCtrlEvents(event, part, msg->b); + Event e; + //undoOp(UndoOp::DeleteEvent, e, event, (Part*)part); + undoOp(UndoOp::DeleteEvent, e, event, (Part*)part, msg->a, msg->b); + deleteEvent(event, part); + updateFlags = SC_EVENT_REMOVED; + } + break; + case SEQM_CHANGE_EVENT: + if(msg->a) + removePortCtrlEvents(msg->ev1, (MidiPart*)msg->p3, msg->b); + changeEvent(msg->ev1, msg->ev2, (MidiPart*)msg->p3); + if(msg->a) + addPortCtrlEvents(msg->ev2, (Part*)msg->p3, msg->b); + //undoOp(UndoOp::ModifyEvent, msg->ev2, msg->ev1, (Part*)msg->p3); + undoOp(UndoOp::ModifyEvent, msg->ev2, msg->ev1, (Part*)msg->p3, msg->a, msg->b); + updateFlags = SC_EVENT_MODIFIED; + break; + + case SEQM_ADD_TEMPO: + //printf("processMsg (SEQM_ADD_TEMPO) UndoOp::AddTempo. adding tempo at: %d with tempo=%d\n", msg->a, msg->b); + undoOp(UndoOp::AddTempo, msg->a, msg->b); + tempomap.addTempo(msg->a, msg->b); + updateFlags = SC_TEMPO; + break; + + case SEQM_SET_TEMPO: + //printf("processMsg (SEQM_SET_TEMPO) UndoOp::AddTempo. adding tempo at: %d with tempo=%d\n", msg->a, msg->b); + undoOp(UndoOp::AddTempo, msg->a, msg->b); + tempomap.setTempo(msg->a, msg->b); + updateFlags = SC_TEMPO; + break; + + case SEQM_SET_GLOBAL_TEMPO: + tempomap.setGlobalTempo(msg->a); + break; + + case SEQM_REMOVE_TEMPO: + //printf("processMsg (SEQM_REMOVE_TEMPO) UndoOp::DeleteTempo. adding tempo at: %d with tempo=%d\n", msg->a, msg->b); + undoOp(UndoOp::DeleteTempo, msg->a, msg->b); + tempomap.delTempo(msg->a); + updateFlags = SC_TEMPO; + break; + + case SEQM_ADD_SIG: + undoOp(UndoOp::AddSig, msg->a, msg->b, msg->c); + sigmap.add(msg->a, msg->b, msg->c); + updateFlags = SC_SIG; + break; + + case SEQM_REMOVE_SIG: + undoOp(UndoOp::DeleteSig, msg->a, msg->b, msg->c); + sigmap.del(msg->a); + updateFlags = SC_SIG; + break; + + default: + printf("unknown seq message %d\n", msg->id); + break; + } + } + +//--------------------------------------------------------- +// cmdAddPart +//--------------------------------------------------------- + +void Song::cmdAddPart(Part* part) + { + addPart(part); + undoOp(UndoOp::AddPart, part); + updateFlags = SC_PART_INSERTED; + } + +//--------------------------------------------------------- +// cmdRemovePart +//--------------------------------------------------------- + +void Song::cmdRemovePart(Part* part) + { + removePart(part); + undoOp(UndoOp::DeletePart, part); + part->events()->incARef(-1); + //part->unchainClone(); + unchainClone(part); + updateFlags = SC_PART_REMOVED; + } + +//--------------------------------------------------------- +// cmdChangePart +//--------------------------------------------------------- + +//void Song::cmdChangePart(Part* oldPart, Part* newPart) +void Song::cmdChangePart(Part* oldPart, Part* newPart, bool doCtrls, bool doClones) + { + //printf("Song::cmdChangePart before changePart oldPart:%p events:%p refs:%d Arefs:%d sn:%d newPart:%p events:%p refs:%d Arefs:%d sn:%d\n", oldPart, oldPart->events(), oldPart->events()->refCount(), oldPart->events()->arefCount(), oldPart->sn(), newPart, newPart->events(), newPart->events()->refCount(), newPart->events()->arefCount(), newPart->sn()); + + if(doCtrls) + removePortCtrlEvents(oldPart, doClones); + + changePart(oldPart, newPart); + + //undoOp(UndoOp::ModifyPart, oldPart, newPart); + undoOp(UndoOp::ModifyPart, oldPart, newPart, doCtrls, doClones); + + // Changed by T356. Do not decrement ref count if the new part is a clone of the old part, since the event list + // will still be active. + if(oldPart->cevents() != newPart->cevents()) + oldPart->events()->incARef(-1); + + //oldPart->replaceClone(newPart); + + //printf("Song::cmdChangePart before repl/unchClone oldPart:%p events:%p refs:%d Arefs:%d sn:%d newPart:%p events:%p refs:%d Arefs:%d sn:%d\n", oldPart, oldPart->events(), oldPart->events()->refCount(), oldPart->events()->arefCount(), oldPart->sn(), newPart, newPart->events(), newPart->events()->refCount(), newPart->events()->arefCount(), newPart->sn()); + + replaceClone(oldPart, newPart); + + if(doCtrls) + addPortCtrlEvents(newPart, doClones); + + //printf("Song::cmdChangePart after repl/unchClone oldPart:%p events:%p refs:%d Arefs:%d sn:%d newPart:%p events:%p refs:%d Arefs:%d sn:%d\n", oldPart, oldPart->events(), oldPart->events()->refCount(), oldPart->events()->arefCount(), oldPart->sn(), newPart, newPart->events(), newPart->events()->refCount(), newPart->events()->arefCount(), newPart->sn()); + + updateFlags = SC_PART_MODIFIED; + } + +//--------------------------------------------------------- +// 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) + { + if(debugMsg) + printf("Song::clear\n"); + + bounceTrack = 0; + + _tracks.clear(); + _midis.clearDelete(); + _waves.clearDelete(); + _inputs.clearDelete(); // audio input ports + _outputs.clearDelete(); // audio output ports + _groups.clearDelete(); // mixer groups + _auxs.clearDelete(); // aux sends + + // p3.3.45 Clear all midi port devices. + for(int i = 0; i < MIDI_PORTS; ++i) + { + // p3.3.50 Since midi ports are not deleted, clear all midi port in/out routes. They point to non-existant tracks now. + midiPorts[i].inRoutes()->clear(); + midiPorts[i].outRoutes()->clear(); + + // p3.3.50 Reset this. + midiPorts[i].setFoundInSongFile(false); + + // This will also close the device. + midiPorts[i].setMidiDevice(0); + } + + _synthIs.clearDelete(); + + // p3.3.45 Make sure to delete Jack midi devices, and remove all ALSA midi device routes... + // Otherwise really nasty things happen when loading another song when one is already loaded. + // The loop is a safe way to delete while iterating. + bool loop; + do + { + loop = false; + for(iMidiDevice imd = midiDevices.begin(); imd != midiDevices.end(); ++imd) + { + //if((*imd)->deviceType() == MidiDevice::JACK_MIDI) + if(dynamic_cast< MidiJackDevice* >(*imd)) + { + // Remove the device from the list. + midiDevices.erase(imd); + // Since Jack midi devices are created dynamically, we must delete them. + // The destructor unregisters the device from Jack, which also disconnects all device-to-jack routes. + // This will also delete all midi-track-to-device routes, they point to non-existant midi tracks + // which were all deleted above + delete (*imd); + loop = true; + break; + } + else + //if((*imd)->deviceType() == MidiDevice::ALSA_MIDI) + if(dynamic_cast< MidiAlsaDevice* >(*imd)) + { + // With alsa devices, we must not delete them (they're always in the list). But we must + // clear all routes. They point to non-existant midi tracks, which were all deleted above. + (*imd)->inRoutes()->clear(); + (*imd)->outRoutes()->clear(); + } + } + } + while (loop); + + tempomap.clear(); + sigmap.clear(); + undoList->clearDelete(); + redoList->clear(); + _markerList->clear(); + pos[0].setTick(0); + pos[1].setTick(0); + pos[2].setTick(0); + _vcpos.setTick(0); + + Track::clearSoloRefCounts(); + clearMidiTransforms(); + clearMidiInputTransforms(); + + // Clear all midi port controller values. + for(int i = 0; i < MIDI_PORTS; ++i) + // Don't remove the controllers, just the values. + midiPorts[i].controller()->clearDelete(false); + + _masterFlag = true; + loopFlag = false; + loopFlag = false; + punchinFlag = false; + punchoutFlag = false; + recordFlag = false; + soloFlag = false; + // seq + _mtype = MT_UNKNOWN; + _recMode = REC_OVERDUP; + _cycleMode = CYCLE_NORMAL; + _click = false; + _quantize = false; + _len = 0; // song len in ticks + _follow = JUMP; + // _tempo = 500000; // default tempo 120 + dirty = false; + initDrumMap(); + if (signal) { + emit loopChanged(false); + recordChanged(false); + } + } + +//--------------------------------------------------------- +// cleanupForQuit +// called from Muse::closeEvent +//--------------------------------------------------------- + +void Song::cleanupForQuit() +{ + bounceTrack = 0; + + if(debugMsg) + printf("MusE: Song::cleanupForQuit...\n"); + + _tracks.clear(); + + if(debugMsg) + printf("deleting _midis\n"); + _midis.clearDelete(); + + if(debugMsg) + printf("deleting _waves\n"); + _waves.clearDelete(); + + if(debugMsg) + printf("deleting _inputs\n"); + _inputs.clearDelete(); // audio input ports + + if(debugMsg) + printf("deleting _outputs\n"); + _outputs.clearDelete(); // audio output ports + + if(debugMsg) + printf("deleting _groups\n"); + _groups.clearDelete(); // mixer groups + + if(debugMsg) + printf("deleting _auxs\n"); + _auxs.clearDelete(); // aux sends + + if(debugMsg) + printf("deleting _synthIs\n"); + _synthIs.clearDelete(); // each ~SynthI() -> deactivate3() -> ~SynthIF() + + tempomap.clear(); + sigmap.clear(); + + if(debugMsg) + printf("deleting undoList, clearing redoList\n"); + undoList->clearDelete(); + redoList->clear(); // Check this - Should we do a clearDelete? IIRC it was OK this way - no clearDelete in case of same items in both lists. + + _markerList->clear(); + + if(debugMsg) + printf("deleting transforms\n"); + clearMidiTransforms(); // Deletes stuff. + clearMidiInputTransforms(); // Deletes stuff. + + if(debugMsg) + printf("deleting midiport controllers\n"); + // Clear all midi port controllers and values. + for(int i = 0; i < MIDI_PORTS; ++i) + // Remove the controllers and the values. + midiPorts[i].controller()->clearDelete(true); + + // Can't do this here. Jack isn't running. + /* + if(debugMsg) + printf("deleting midi devices\n"); + for(iMidiDevice imd = midiDevices.begin(); imd != midiDevices.end(); ++imd) + { + // Since Syntis are midi devices, there's no need to delete them below. + if((*imd)->isSynti()) + continue; + delete (*imd); + } + midiDevices.clear(); // midi devices + */ + + if(debugMsg) + printf("deleting synths\n"); + // Delete all synths. + std::vector::iterator is; + for(is = synthis.begin(); is != synthis.end(); ++is) + { + Synth* s = *is; + + if(s) + delete s; + } + synthis.clear(); + + // Nothing required for ladspa plugin list, and rack instances of them + // are handled by ~AudioTrack. + + if(debugMsg) + printf("...finished cleaning up.\n"); +} + +//--------------------------------------------------------- +// 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; + } + for (int i = 0; i < n; ++i) { +// printf("seqSignal to gui:<%c>\n", buffer[i]); + switch(buffer[i]) { + case '0': // STOP + stopRolling(); + break; + case '1': // PLAY + setStopPlay(true); + break; + case '2': // record + setRecord(true); + break; + case '3': // START_PLAY + jack STOP + abortRolling(); + break; + case 'P': // alsa ports changed + rescanAlsaPorts(); + break; + case 'G': + clearRecAutomation(true); + setPos(0, audio->tickPos(), true, false, true); + break; + case 'S': // shutdown audio + muse->seqStop(); + + { + // give the user a sensible explanation + int btn = QMessageBox::critical( muse, tr(QString("Jack shutdown!")), + tr(QString("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"); + if (btn == 0) { + printf("restarting!\n"); + muse->seqRestart(); + } + } + + break; + case 'f': // start freewheel + if(debugMsg) + printf("Song: seqSignal: case f: setFreewheel start\n"); + + // Enabled by Tim. p3.3.6 + if(config.freewheelMode) + audioDevice->setFreewheel(true); + + break; + + case 'F': // stop freewheel + if(debugMsg) + printf("Song: seqSignal: case F: setFreewheel stop\n"); + + // Enabled by Tim. p3.3.6 + if(config.freewheelMode) + audioDevice->setFreewheel(false); + + audio->msgPlay(false); +#if 0 + if (record()) + audio->recordStop(); + setStopPlay(false); +#endif + break; + + case 'C': // Graph changed + if (audioDevice) + audioDevice->graphChanged(); + break; + + // p3.3.37 + case 'R': // Registration changed + if (audioDevice) + audioDevice->registrationChanged(); + break; + + default: + printf("unknown Seq Signal <%c>\n", buffer[i]); + break; + } + } + } + +//--------------------------------------------------------- +// recordEvent +//--------------------------------------------------------- + +void Song::recordEvent(MidiTrack* mt, Event& event) + { + //--------------------------------------------------- + // if tick points into a part, + // record to that part + // else + // create new part + //--------------------------------------------------- + + unsigned tick = event.tick(); + PartList* pl = mt->parts(); + MidiPart* part = 0; + iPart ip; + for (ip = pl->begin(); ip != pl->end(); ++ip) { + part = (MidiPart*)(ip->second); + unsigned partStart = part->tick(); + unsigned partEnd = partStart + part->lenTick(); + if (tick >= partStart && tick < partEnd) + break; + } + updateFlags |= SC_EVENT_INSERTED; + if (ip == pl->end()) { + // create new part + part = new MidiPart(mt); + int startTick = roundDownBar(tick); + //int endTick = roundUpBar(tick); + int endTick = roundUpBar(tick + 1); + part->setTick(startTick); + part->setLenTick(endTick - startTick); + part->setName(mt->name()); + event.move(-startTick); + part->events()->add(event); + audio->msgAddPart(part); + return; + } + part = (MidiPart*)(ip->second); + tick -= part->tick(); + event.setTick(tick); + + Event ev; + if(event.type() == Controller) + { + EventRange range = part->events()->equal_range(tick); + for(iEvent i = range.first; i != range.second; ++i) + { + ev = i->second; + // At the moment, Song::recordEvent() is only called by the 'Rec' buttons in the + // midi track info panel. So only controller types are fed to it. If other event types + // are to be passed, we will have to expand on this to check if equal. Instead, maybe add an isEqual() to Event class. + //if((ev.type() == Controller && event.type() == Controller || ev.type() == Controller && event.type() == Controller) + // && ev.dataA() == event.dataA() && ev.dataB() == event.dataB()) + if(ev.type() == Controller && ev.dataA() == event.dataA()) + { + // Don't bother if already set. + if(ev.dataB() == event.dataB()) + return; + // Indicate do undo, and do port controller values and clone parts. + audio->msgChangeEvent(ev, event, part, true, true, true); + return; + } + } + } + + // Indicate do undo, and do port controller values and clone parts. + //audio->msgAddEvent(event, part); + audio->msgAddEvent(event, part, true, true, true); + } + +//--------------------------------------------------------- +// execAutomationCtlPopup +//--------------------------------------------------------- + +int Song::execAutomationCtlPopup(AudioTrack* track, const QPoint& menupos, int acid) +{ + //enum { HEADER, SEP1, PREV_EVENT, NEXT_EVENT, SEP2, ADD_EVENT, CLEAR_EVENT, CLEAR_RANGE, CLEAR_ALL_EVENTS }; + enum { HEADER, PREV_EVENT, NEXT_EVENT, SEP2, ADD_EVENT, CLEAR_EVENT, CLEAR_RANGE, CLEAR_ALL_EVENTS }; + Q3PopupMenu* menu = new Q3PopupMenu; + + int count = 0; + bool isEvent = false, canSeekPrev = false, canSeekNext = false, canEraseRange = false; + bool canAdd = false; + double ctlval = 0.0; + if(track) + { + ciCtrlList icl = track->controller()->find(acid); + if(icl != track->controller()->end()) + { + CtrlList *cl = icl->second; + canAdd = true; + ctlval = cl->curVal(); + count = cl->size(); + if(count) + { + int frame = pos[0].frame(); + + iCtrl s = cl->lower_bound(frame); + iCtrl e = cl->upper_bound(frame); + + isEvent = (s != cl->end() && s->second.frame == frame); + + canSeekPrev = s != cl->begin(); + canSeekNext = e != cl->end(); + + s = cl->lower_bound(pos[1].frame()); + + canEraseRange = s != cl->end() + && (int)pos[2].frame() > s->second.frame; + } + } + } + + //menu->insertItem(tr("Automation:"), HEADER, HEADER); + //menu->setItemEnabled(HEADER, false); + //MenuTitleItem* title = new MenuTitleItem(tr("Automation:")); ddskrjo + //menu->insertItem(title, HEADER, HEADER); ddskrjo + + //menu->insertSeparator(SEP1); + + menu->insertItem(tr("previous event"), PREV_EVENT, PREV_EVENT); + menu->setItemEnabled(PREV_EVENT, canSeekPrev); + + menu->insertItem(tr("next event"), NEXT_EVENT, NEXT_EVENT); + menu->setItemEnabled(NEXT_EVENT, canSeekNext); + + menu->insertSeparator(SEP2); + + if(isEvent) + menu->insertItem(tr("set event"), ADD_EVENT, ADD_EVENT); + else + menu->insertItem(tr("add event"), ADD_EVENT, ADD_EVENT); + menu->setItemEnabled(ADD_EVENT, canAdd); + menu->insertItem(tr("erase event"), CLEAR_EVENT, CLEAR_EVENT); + menu->setItemEnabled(CLEAR_EVENT, isEvent); + + menu->insertItem(tr("erase range"), CLEAR_RANGE, CLEAR_RANGE); + menu->setItemEnabled(CLEAR_RANGE, canEraseRange); + + menu->insertItem(tr("clear automation"), CLEAR_ALL_EVENTS, CLEAR_ALL_EVENTS); + menu->setItemEnabled(CLEAR_ALL_EVENTS, (bool)count); + + int sel = menu->exec(menupos, 1); + delete menu; + if (sel == -1) + return -1; + + if(!track) + return -1; + switch(sel) + { + case ADD_EVENT: + audio->msgAddACEvent(track, acid, pos[0].frame(), ctlval); + break; + case CLEAR_EVENT: + audio->msgEraseACEvent(track, acid, pos[0].frame()); + break; + + case CLEAR_RANGE: + audio->msgEraseRangeACEvents(track, acid, pos[1].frame(), pos[2].frame()); + break; + + case CLEAR_ALL_EVENTS: + if(QMessageBox::question(muse, QString("Muse"), + tr("Clear all controller events?"), tr("&Ok"), tr("&Cancel"), + QString::null, 0, 1 ) == 0) + audio->msgClearControllerEvents(track, acid); + break; + + case PREV_EVENT: + audio->msgSeekPrevACEvent(track, acid); + break; + + case NEXT_EVENT: + audio->msgSeekNextACEvent(track, acid); + break; + + default: + return -1; + break; + } + return sel; +} + +//--------------------------------------------------------- +// execMidiAutomationCtlPopup +//--------------------------------------------------------- + +int Song::execMidiAutomationCtlPopup(MidiTrack* track, MidiPart* part, const QPoint& menupos, int ctlnum) +{ + if(!track && !part) + return -1; + + //enum { HEADER, SEP1, PREV_EVENT, NEXT_EVENT, SEP2, ADD_EVENT, CLEAR_EVENT, CLEAR_RANGE, CLEAR_ALL_EVENTS }; + enum { HEADER, ADD_EVENT, CLEAR_EVENT }; + Q3PopupMenu* menu = new Q3PopupMenu; + + //int count = 0; + bool isEvent = false; + //bool canSeekPrev = false, canSeekNext = false, canEraseRange = false; + //bool canAdd = false; + //double ctlval = 0.0; + + MidiTrack* mt; + if(track) + mt = track; + else + mt = (MidiTrack*)part->track(); + int portno = mt->outPort(); + int channel = mt->outChannel(); + MidiPort* mp = &midiPorts[portno]; + + int dctl = ctlnum; + // Is it a drum controller, according to the track port's instrument? + MidiController *mc = mp->drumController(ctlnum); + if(mc) + { + // Change the controller event's index into the drum map to an instrument note. + int note = ctlnum & 0x7f; + dctl &= ~0xff; + channel = drumMap[note].channel; + mp = &midiPorts[drumMap[note].port]; + dctl |= drumMap[note].anote; + } + + //printf("Song::execMidiAutomationCtlPopup ctlnum:%d dctl:%d anote:%d\n", ctlnum, dctl, drumMap[ctlnum & 0x7f].anote); + + unsigned tick = cpos(); + + if(!part) + { + PartList* pl = mt->parts(); + iPart ip; + for(ip = pl->begin(); ip != pl->end(); ++ip) + { + MidiPart* tpart = (MidiPart*)(ip->second); + unsigned partStart = tpart->tick(); + unsigned partEnd = partStart + tpart->lenTick(); + if(tick >= partStart && tick < partEnd) + { + // Prefer a selected part, otherwise keep looking... + if(tpart->selected()) + { + part = tpart; + break; + } + else + // Remember the first part found... + if(!part) + part = tpart; + } + } + } + + Event ev; + if(part) + { + unsigned partStart = part->tick(); + unsigned partEnd = partStart + part->lenTick(); + if(tick >= partStart && tick < partEnd) + { + EventRange range = part->events()->equal_range(tick - partStart); + for(iEvent i = range.first; i != range.second; ++i) + { + ev = i->second; + if(ev.type() == Controller) + { + //printf("Song::execMidiAutomationCtlPopup ev.dataA:%d\n", ev.dataA()); + + //if(ev.dataA() == dctl) + if(ev.dataA() == ctlnum) + { + isEvent = true; + break; + } + } + } + } + } + + + //menu->insertItem(tr("Automation:"), HEADER, HEADER); + //menu->setItemEnabled(HEADER, false); + //MenuTitleItem* title = new MenuTitleItem(tr("Automation:")); ddskrjo + ///menu->insertItem(title, HEADER, HEADER); ddskrjo + + //menu->insertSeparator(SEP1); + +// menu->insertItem(tr("previous event"), PREV_EVENT, PREV_EVENT); +// menu->setItemEnabled(PREV_EVENT, canSeekPrev); + +// menu->insertItem(tr("next event"), NEXT_EVENT, NEXT_EVENT); +// menu->setItemEnabled(NEXT_EVENT, canSeekNext); + +// menu->insertSeparator(SEP2); + + if(isEvent) + menu->insertItem(tr("set event"), ADD_EVENT, ADD_EVENT); + else + menu->insertItem(tr("add event"), ADD_EVENT, ADD_EVENT); + //menu->setItemEnabled(ADD_EVENT, canAdd); + menu->setItemEnabled(ADD_EVENT, true); + + menu->insertItem(tr("erase event"), CLEAR_EVENT, CLEAR_EVENT); + menu->setItemEnabled(CLEAR_EVENT, isEvent); + +// menu->insertItem(tr("erase range"), CLEAR_RANGE, CLEAR_RANGE); +// menu->setItemEnabled(CLEAR_RANGE, canEraseRange); + +// menu->insertItem(tr("clear automation"), CLEAR_ALL_EVENTS, CLEAR_ALL_EVENTS); +// menu->setItemEnabled(CLEAR_ALL_EVENTS, (bool)count); + + int sel = menu->exec(menupos, 1); + delete menu; + if (sel == -1) + return -1; + + //if(!part) + // return -1; + + switch(sel) + { + case ADD_EVENT: + { + //int val = mp->hwCtrlState(channel, ctlnum); + int val = mp->hwCtrlState(channel, dctl); + if(val == CTRL_VAL_UNKNOWN) + return -1; + Event e(Controller); + //e.setA(dctl); + e.setA(ctlnum); + e.setB(val); + // Do we replace an old event? + if(isEvent) + { + // Don't bother if already set. + if(ev.dataB() == val) + return -1; + + e.setTick(tick - part->tick()); + // Indicate do undo, and do port controller values and clone parts. + audio->msgChangeEvent(ev, e, part, true, true, true); + } + else + { + // Store a new event... + if(part) + { + e.setTick(tick - part->tick()); + // Indicate do undo, and do port controller values and clone parts. + audio->msgAddEvent(e, part, true, true, true); + } + else + { + // Create a new part... + part = new MidiPart(mt); + int startTick = roundDownBar(tick); + int endTick = roundUpBar(tick + 1); + part->setTick(startTick); + part->setLenTick(endTick - startTick); + part->setName(mt->name()); + e.setTick(tick - startTick); + part->events()->add(e); + // Allow undo. + audio->msgAddPart(part); + } + } + } + break; + case CLEAR_EVENT: + // Indicate do undo, and do port controller values and clone parts. + audio->msgDeleteEvent(ev, part, true, true, true); + break; + + //case CLEAR_RANGE: + //audio->msgEraseRangeACEvents(track, acid, pos[1].frame(), pos[2].frame()); + //break; + + //case CLEAR_ALL_EVENTS: + //if(QMessageBox::question(muse, QString("Muse"), + // tr("Clear all controller events?"), tr("&Ok"), tr("&Cancel"), + // QString::null, 0, 1 ) == 0) + //audio->msgClearControllerEvents(track, acid); + //break; + + //case PREV_EVENT: + //audio->msgSeekPrevACEvent(track, acid); + //break; + + //case NEXT_EVENT: + //audio->msgSeekNextACEvent(track, acid); + //break; + + default: + return -1; + break; + } + + return sel; +} + +//--------------------------------------------------------- +// updateSoloStates +// This will properly set all soloing variables (including other tracks) based entirely +// on the current values of all the tracks' _solo members. +//--------------------------------------------------------- + +void Song::updateSoloStates() +{ + Track::clearSoloRefCounts(); + for(ciTrack i = _tracks.begin(); i != _tracks.end(); ++i) + (*i)->setInternalSolo(0); + for(ciTrack i = _tracks.begin(); i != _tracks.end(); ++i) + (*i)->updateSoloStates(true); +} + +//--------------------------------------------------------- +// clearRecAutomation +//--------------------------------------------------------- + +void Song::clearRecAutomation(bool clearList) +{ + // Clear all pan/vol pressed and touched flags, and all rec event lists, if needed. + for (iTrack it = tracks()->begin(); it != tracks()->end(); ++it) + ((Track*)(*it))->clearRecAutomation(clearList); +} + +//--------------------------------------------------------- +// processAutomationEvents +//--------------------------------------------------------- + +void Song::processAutomationEvents() +{ + // Just clear all pressed and touched flags, not rec event lists. + clearRecAutomation(false); + if (!automation) + return; + for(iTrack i = _tracks.begin(); i != _tracks.end(); ++i) + { + if(!(*i)->isMidiTrack()) + // Process (and clear) rec events. + ((AudioTrack*)(*i))->processAutomationEvents(); + } +} + +//--------------------------------------------------------- +// abortRolling +//--------------------------------------------------------- + +void Song::abortRolling() +{ + if (record()) + audio->recordStop(); + setStopPlay(false); +} + +//--------------------------------------------------------- +// stopRolling +//--------------------------------------------------------- + +void Song::stopRolling() + { + abortRolling(); + processAutomationEvents(); + } + +//--------------------------------------------------------- +// connectJackRoutes +//--------------------------------------------------------- + +void Song::connectJackRoutes(AudioTrack* track, bool disconnect) +{ + switch(track->type()) + { + case Track::AUDIO_OUTPUT: + { + AudioOutput* ao = (AudioOutput*)track; + // This will re-register the track's jack ports. + if(!disconnect) + ao->setName(ao->name()); + // Now reconnect the output routes. + if(checkAudioDevice() && audio->isRunning()) + { + for(int ch = 0; ch < ao->channels(); ++ch) + { + RouteList* ir = ao->outRoutes(); + for (iRoute ii = ir->begin(); ii != ir->end(); ++ii) + { + Route r = *ii; + if ((r.type == Route::JACK_ROUTE) && (r.channel == ch)) + { + if(disconnect) + audioDevice->disconnect(ao->jackPort(ch), r.jackPort); + else + audioDevice->connect(ao->jackPort(ch), r.jackPort); + break; + } + } + if(disconnect) + { + audioDevice->unregisterPort(ao->jackPort(ch)); + ao->setJackPort(ch, 0); + } + } + } + } + break; + case Track::AUDIO_INPUT: + { + AudioInput* ai = (AudioInput*)track; + // This will re-register the track's jack ports. + if(!disconnect) + ai->setName(ai->name()); + // Now reconnect the input routes. + if(checkAudioDevice() && audio->isRunning()) + { + for(int ch = 0; ch < ai->channels(); ++ch) + { + RouteList* ir = ai->inRoutes(); + for (iRoute ii = ir->begin(); ii != ir->end(); ++ii) + { + Route r = *ii; + if ((r.type == Route::JACK_ROUTE) && (r.channel == ch)) + { + if(disconnect) + audioDevice->disconnect(r.jackPort, ai->jackPort(ch)); + else + audioDevice->connect(r.jackPort, ai->jackPort(ch)); + break; + } + } + if(disconnect) + { + audioDevice->unregisterPort(ai->jackPort(ch)); + ai->setJackPort(ch, 0); + } + } + } + } + break; + default: + break; + } +} + +/* +//--------------------------------------------------------- +// chooseMidiRoutes +//--------------------------------------------------------- + +void Song::chooseMidiRoutes(QButton* parent, MidiTrack* track, bool dst) +{ + if(!track) + return; + + //if(!track->isMidiTrack()) + // return; + + QPoint ppt = QCursor::pos(); + //QPoint ppt = parent->rect().bottomLeft(); + + //if(dst) + //{ + // TODO + + //} + //else + //{ + RouteList* rl = dst ? track->outRoutes() : track->inRoutes(); + //Route dst(track, -1); + + QPopupMenu* pup = new QPopupMenu(parent); + pup->setCheckable(true); + + int gid = 0; + int n; + + // FIXME: + // Routes can't be re-read until the message sent from msgAddRoute1() + // has had time to be sent and actually affected the routes. + ///_redisplay: + + pup->clear(); + gid = 0; + + //MidiInPortList* tl = song->midiInPorts(); + //for(iMidiInPort i = tl->begin();i != tl->end(); ++i) + for(int i = 0; i < MIDI_PORTS; ++i) + { + //MidiInPort* track = *i; + // NOTE: Could possibly list all devices, bypassing ports, but no, let's stick wth ports. + MidiPort* mp = &midiPorts[i]; + MidiDevice* md = mp->device(); + if(!md) + continue; + + if(!(md->rwFlags() & (dst ? 1 : 2))) + continue; + + //printf("MidiStrip::iRoutePressed adding submenu portnum:%d\n", i); + + //QMenu* m = menu->addMenu(track->name()); + QPopupMenu* subp = new QPopupMenu(parent); + + for(int ch = 0; ch < MIDI_CHANNELS; ++ch) + { + //QAction* a = m->addAction(QString("Channel %1").arg(ch+1)); + //subp->insertItem(QT_TR_NOOP(QString("Channel %1").arg(ch+1)), i * MIDI_CHANNELS + ch); + gid = i * MIDI_CHANNELS + ch; + + //printf("MidiStrip::iRoutePressed inserting gid:%d\n", gid); + + subp->insertItem(QString("Channel %1").arg(ch+1), gid); + //a->setCheckable(true); + //Route src(track, ch, RouteNode::TRACK); + //Route src(md, ch); + //Route r = Route(src, dst); + //a->setData(QVariant::fromValue(r)); + //a->setChecked(rl->indexOf(r) != -1); + Route srcRoute(md, ch); + for(iRoute ir = rl->begin(); ir != rl->end(); ++ir) + { + //if(*ir == dst) + if(*ir == srcRoute) + { + subp->setItemChecked(gid, true); + break; + } + } + } + pup->insertItem(QT_TR_NOOP(md->name()), subp); + } + +// QPopupMenu* pup = new QPopupMenu(iR); +// pup->setCheckable(true); + //MidiTrack* t = (MidiTrack*)track; +// RouteList* irl = track->inRoutes(); + +// MidiTrack* t = (MidiTrack*)track; +// int gid = 0; +// for (int i = 0; i < channel; ++i) +// { +// char buffer[128]; +// snprintf(buffer, 128, "%s %d", tr("Channel").latin1(), i+1); +// MenuTitleItem* titel = new MenuTitleItem(QString(buffer)); +// pup->insertItem(titel); + +// if (!checkAudioDevice()) return; +// std::list ol = audioDevice->outputPorts(); +// for (std::list::iterator ip = ol.begin(); ip != ol.end(); ++ip) { +// int id = pup->insertItem(*ip, (gid * 16) + i); +// Route dst(*ip, true, i); +// ++gid; +// for (iRoute ir = irl->begin(); ir != irl->end(); ++ir) { +// if (*ir == dst) { +// pup->setItemChecked(id, true); +// break; +// } +// } +// } +// if (i+1 != channel) +// pup->insertSeparator(); +// } + + if(pup->count() == 0) + { + delete pup; + return; + } + + //n = pup->exec(QCursor::pos()); + n = pup->exec(ppt); + ///delete pup; + if (n != -1) + { + int mdidx = n / MIDI_CHANNELS; + int ch = n % MIDI_CHANNELS; + + //if(debugMsg) + //printf("Song::chooseMidiRoutes mdidx:%d ch:%d\n", mdidx, ch); + + MidiPort* mp = &midiPorts[mdidx]; + MidiDevice* md = mp->device(); + if(!md) + { + delete pup; + return; + } + + //if(!(md->rwFlags() & 2)) + if(!(md->rwFlags() & (dst ? 1 : 2))) + { + delete pup; + return; + } + + //QString s(pup->text(n)); + //QT_TR_NOOP(md->name()) + + //Route srcRoute(s, false, -1); + Route aRoute(md, ch); + //Route srcRoute(md, -1); + //Route dstRoute(track, -1); + Route bRoute(track, ch); + + //if (track->type() == Track::AUDIO_INPUT) + // srcRoute.channel = dstRoute.channel = n & 0xf; + iRoute iir = rl->begin(); + for (; iir != rl->end(); ++iir) + { + //if(*iir == (dst ? bRoute : aRoute)) + if(*iir == aRoute) + break; + } + if (iir != rl->end()) + { + // disconnect + if(dst) + { + //printf("Song::chooseMidiRoutes removing route src track name: %s dst device name: %s\n", track->name().latin1(), md->name().latin1()); + audio->msgRemoveRoute(bRoute, aRoute); + } + else + { + //printf("Song::chooseMidiRoutes removing route src device name: %s dst track name: %s\n", md->name().latin1(), track->name().latin1()); + audio->msgRemoveRoute(aRoute, bRoute); + } + } + else + { + // connect + if(dst) + { + //printf("Song::chooseMidiRoutes adding route src track name: %s dst device name: %s\n", track->name().latin1(), md->name().latin1()); + audio->msgAddRoute(bRoute, aRoute); + } + else + { + //printf("Song::chooseMidiRoutes adding route src device name: %s dst track name: %s\n", md->name().latin1(), track->name().latin1()); + audio->msgAddRoute(aRoute, bRoute); + } + } + + //printf("Song::chooseMidiRoutes calling msgUpdateSoloStates\n"); + audio->msgUpdateSoloStates(); + //printf("Song::chooseMidiRoutes calling song->update\n"); + song->update(SC_ROUTE); + + // p3.3.46 + ///goto _redisplay; + } + delete pup; + parent->setDown(false); // pup->exec() catches mouse release event + //printf("Song::chooseMidiRoutes end\n"); + + //} +} +*/ + +//--------------------------------------------------------- +// insertTrack0 +//--------------------------------------------------------- + +void Song::insertTrack0(Track* track, int idx) + { + insertTrack1(track, idx); + insertTrack2(track, idx); // audio->msgInsertTrack(track, idx, false); + insertTrack3(track, idx); + } + +//--------------------------------------------------------- +// insertTrack1 +// non realtime part of insertTrack +//--------------------------------------------------------- + +void Song::insertTrack1(Track* track, int /*idx*/) + { + //printf("Song::insertTrack1 track:%lx\n", track); + + switch(track->type()) { + case Track::AUDIO_SOFTSYNTH: + { + SynthI* s = (SynthI*)track; + Synth* sy = s->synth(); + if (!s->isActivated()) { + s->initInstance(sy, s->name()); + } + } + break; + default: + break; + } + + //printf("Song::insertTrack1 end of function\n"); + + } + +//--------------------------------------------------------- +// insertTrack2 +// realtime part +//--------------------------------------------------------- + +void Song::insertTrack2(Track* track, int idx) +{ + //printf("Song::insertTrack2 track:%lx\n", track); + + int n; + switch(track->type()) { + case Track::MIDI: + case Track::DRUM: + _midis.push_back((MidiTrack*)track); + // Added by T356. + //((MidiTrack*)track)->addPortCtrlEvents(); + addPortCtrlEvents(((MidiTrack*)track)); + + break; + case Track::WAVE: + _waves.push_back((WaveTrack*)track); + break; + case Track::AUDIO_OUTPUT: + _outputs.push_back((AudioOutput*)track); + // set default master & monitor if not defined + if (audio->audioMaster() == 0) + audio->setMaster((AudioOutput*)track); + if (audio->audioMonitor() == 0) + audio->setMonitor((AudioOutput*)track); + break; + case Track::AUDIO_GROUP: + _groups.push_back((AudioGroup*)track); + break; + case Track::AUDIO_AUX: + _auxs.push_back((AudioAux*)track); + break; + case Track::AUDIO_INPUT: + _inputs.push_back((AudioInput*)track); + break; + case Track::AUDIO_SOFTSYNTH: + { + SynthI* s = (SynthI*)track; + midiDevices.add(s); + midiInstruments.push_back(s); + _synthIs.push_back(s); + } + break; + default: + fprintf(stderr, "unknown track type %d\n", track->type()); + // abort(); + return; + } + + // + // initialize missing aux send + // + iTrack i = _tracks.index2iterator(idx); + //printf("Song::insertTrack2 inserting into _tracks...\n"); + + _tracks.insert(i, track); + //printf("Song::insertTrack2 inserted\n"); + + n = _auxs.size(); + for (iTrack i = _tracks.begin(); i != _tracks.end(); ++i) { + if ((*i)->isMidiTrack()) + continue; + WaveTrack* wt = (WaveTrack*)*i; + if (wt->hasAuxSend()) { + wt->addAuxSend(n); + } + } + + /* + // + // add routes + // + + if (track->isMidiTrack()) + return; + AudioTrack* at = (AudioTrack*)track; + Route src(at, -1); + if (at->type() == Track::AUDIO_OUTPUT) { + const RouteList* rl = at->inRoutes(); + for (ciRoute r = rl->begin(); r != rl->end(); ++r) + r->track->outRoutes()->push_back(src); + } + else if (at->type() == Track::AUDIO_INPUT) { + const RouteList* rl = at->outRoutes(); + for (ciRoute r = rl->begin(); r != rl->end(); ++r) + r->track->inRoutes()->push_back(src); + } + else { + const RouteList* rl = at->inRoutes(); + for (ciRoute r = rl->begin(); r != rl->end(); ++r) + r->track->outRoutes()->push_back(src); + rl = at->outRoutes(); + for (ciRoute r = rl->begin(); r != rl->end(); ++r) + r->track->inRoutes()->push_back(src); + } + */ + + // p3.3.38 + + // + // add routes + // + + if (track->type() == Track::AUDIO_OUTPUT) + { + const RouteList* rl = track->inRoutes(); + for (ciRoute r = rl->begin(); r != rl->end(); ++r) + { + //if(r->track == track) + // r->track->outRoutes()->push_back(*r); + // p3.3.50 + Route src(track, r->channel, r->channels); + src.remoteChannel = r->remoteChannel; + r->track->outRoutes()->push_back(src); + } + } + else if (track->type() == Track::AUDIO_INPUT) + { + const RouteList* rl = track->outRoutes(); + for (ciRoute r = rl->begin(); r != rl->end(); ++r) + { + //if(r->track == track) + // r->track->inRoutes()->push_back(*r); + // p3.3.50 + Route src(track, r->channel, r->channels); + src.remoteChannel = r->remoteChannel; + r->track->inRoutes()->push_back(src); + } + } + else if (track->isMidiTrack()) // p3.3.50 + { + const RouteList* rl = track->inRoutes(); + for (ciRoute r = rl->begin(); r != rl->end(); ++r) + { + //printf("Song::insertTrack2 %s in route port:%d\n", track->name().latin1(), r->midiPort); // p3.3.50 + Route src(track, r->channel); + midiPorts[r->midiPort].outRoutes()->push_back(src); + } + rl = track->outRoutes(); + for (ciRoute r = rl->begin(); r != rl->end(); ++r) + { + //printf("Song::insertTrack2 %s out route port:%d\n", track->name().latin1(), r->midiPort); // p3.3.50 + Route src(track, r->channel); + midiPorts[r->midiPort].inRoutes()->push_back(src); + } + } + else + { + const RouteList* rl = track->inRoutes(); + for (ciRoute r = rl->begin(); r != rl->end(); ++r) + { + //if(r->track == track) + // r->track->outRoutes()->push_back(*r); + // p3.3.50 + Route src(track, r->channel, r->channels); + src.remoteChannel = r->remoteChannel; + r->track->outRoutes()->push_back(src); + } + rl = track->outRoutes(); + for (ciRoute r = rl->begin(); r != rl->end(); ++r) + { + //if(r->track == track) + // r->track->inRoutes()->push_back(*r); + // p3.3.50 + Route src(track, r->channel, r->channels); + src.remoteChannel = r->remoteChannel; + r->track->inRoutes()->push_back(src); + } + } + + //printf("Song::insertTrack2 end of function\n"); + +} + +//--------------------------------------------------------- +// insertTrack3 +// non realtime part of insertTrack +//--------------------------------------------------------- + +void Song::insertTrack3(Track* /*track*/, int /*idx*/)//prevent compiler warning: unused parameter +{ + //printf("Song::insertTrack3\n"); + + /* + switch(track->type()) { + case Track::AUDIO_SOFTSYNTH: + break; + default: + break; + } + */ +} + +//--------------------------------------------------------- +// removeTrack0 +//--------------------------------------------------------- + +void Song::removeTrack0(Track* track) + { + removeTrack1(track); + audio->msgRemoveTrack(track); + removeTrack3(track); + //delete track; + update(SC_TRACK_REMOVED); + } + +//--------------------------------------------------------- +// removeTrack1 +// non realtime part of removeTrack +//--------------------------------------------------------- + +void Song::removeTrack1(Track* track) + { + switch(track->type()) + { + case Track::WAVE: + case Track::AUDIO_OUTPUT: + case Track::AUDIO_INPUT: + case Track::AUDIO_GROUP: + case Track::AUDIO_AUX: + case Track::AUDIO_SOFTSYNTH: + ((AudioTrack*)track)->deleteAllEfxGuis(); + break; + default: + break; + } + + switch(track->type()) + { + case Track::AUDIO_OUTPUT: + case Track::AUDIO_INPUT: + connectJackRoutes((AudioTrack*)track, true); + break; + case Track::AUDIO_SOFTSYNTH: + { + SynthI* si = (SynthI*)track; + if(si->hasGui()) + si->showGui(false); + } + break; + default: + break; + } + } + +//--------------------------------------------------------- +// removeTrack +// called from RT context +//--------------------------------------------------------- + +void Song::removeTrack2(Track* track) +{ + //printf("Song::removeTrack2 track:%s\n", track->name().latin1()); // p3.3.50 + + switch(track->type()) { + case Track::MIDI: + case Track::DRUM: + // Added by T356. + //((MidiTrack*)track)->removePortCtrlEvents(); + removePortCtrlEvents(((MidiTrack*)track)); + unchainTrackParts(track, true); + + _midis.erase(track); + break; + case Track::WAVE: + // Added by T356. + unchainTrackParts(track, true); + + _waves.erase(track); + break; + case Track::AUDIO_OUTPUT: + _outputs.erase(track); + break; + case Track::AUDIO_INPUT: + _inputs.erase(track); + break; + case Track::AUDIO_GROUP: + _groups.erase(track); + break; + case Track::AUDIO_AUX: + _auxs.erase(track); + break; + case Track::AUDIO_SOFTSYNTH: + { + SynthI* s = (SynthI*) track; + s->deactivate2(); + _synthIs.erase(track); + } + break; + } + _tracks.erase(track); + + + /* + if (track->isMidiTrack()) + return; + // + // remove routes + // + + AudioTrack* at = (AudioTrack*)track; + Route src(at, -1); + if (at->type() == Track::AUDIO_OUTPUT) { + const RouteList* rl = at->inRoutes(); + for (ciRoute r = rl->begin(); r != rl->end(); ++r) + r->track->outRoutes()->removeRoute(src); + } + else if (at->type() == Track::AUDIO_INPUT) { + const RouteList* rl = at->outRoutes(); + for (ciRoute r = rl->begin(); r != rl->end(); ++r) + r->track->inRoutes()->removeRoute(src); + } + else { + const RouteList* rl = at->inRoutes(); + for (ciRoute r = rl->begin(); r != rl->end(); ++r) + r->track->outRoutes()->removeRoute(src); + rl = at->outRoutes(); + for (ciRoute r = rl->begin(); r != rl->end(); ++r) + r->track->inRoutes()->removeRoute(src); + } + */ + + // p3.3.38 + + // + // remove routes + // + + if (track->type() == Track::AUDIO_OUTPUT) + { + const RouteList* rl = track->inRoutes(); + for (ciRoute r = rl->begin(); r != rl->end(); ++r) + { + //if(r->track == track) + // r->track->outRoutes()->removeRoute(*r); + //printf("Song::removeTrack2 %s audio out track:%s\n", track->name().latin1(), r->track->name().latin1()); // p3.3.50 + // p3.3.50 + Route src(track, r->channel, r->channels); + src.remoteChannel = r->remoteChannel; + r->track->outRoutes()->removeRoute(src); + } + } + else if (track->type() == Track::AUDIO_INPUT) + { + const RouteList* rl = track->outRoutes(); + for (ciRoute r = rl->begin(); r != rl->end(); ++r) + { + //if(r->track == track) + // r->track->inRoutes()->removeRoute(*r); + //printf("Song::removeTrack2 %s audio in track:%s\n", track->name().latin1(), r->track->name().latin1()); // p3.3.50 + // p3.3.50 + Route src(track, r->channel, r->channels); + src.remoteChannel = r->remoteChannel; + r->track->inRoutes()->removeRoute(src); + } + } + else if (track->isMidiTrack()) // p3.3.50 + { + const RouteList* rl = track->inRoutes(); + for (ciRoute r = rl->begin(); r != rl->end(); ++r) + { + //printf("Song::removeTrack2 %s in route port:%d\n", track->name().latin1(), r->midiPort); // p3.3.50 + Route src(track, r->channel); + midiPorts[r->midiPort].outRoutes()->removeRoute(src); + } + rl = track->outRoutes(); + for (ciRoute r = rl->begin(); r != rl->end(); ++r) + { + //printf("Song::removeTrack2 %s out route port:%d\n", track->name().latin1(), r->midiPort); // p3.3.50 + Route src(track, r->channel); + midiPorts[r->midiPort].inRoutes()->removeRoute(src); + } + } + else + { + const RouteList* rl = track->inRoutes(); + for (ciRoute r = rl->begin(); r != rl->end(); ++r) + { + //if(r->track == track) + // r->track->outRoutes()->removeRoute(*r); + //printf("Song::removeTrack2 %s in route track:%s\n", track->name().latin1(), r->track->name().latin1()); // p3.3.50 + // p3.3.50 + Route src(track, r->channel, r->channels); + src.remoteChannel = r->remoteChannel; + r->track->outRoutes()->removeRoute(src); + } + rl = track->outRoutes(); + for (ciRoute r = rl->begin(); r != rl->end(); ++r) + { + //if(r->track == track) + // r->track->inRoutes()->removeRoute(*r); + //printf("Song::removeTrack2 %s out route track:%s\n", track->name().latin1(), r->track->name().latin1()); // p3.3.50 + // p3.3.50 + Route src(track, r->channel, r->channels); + src.remoteChannel = r->remoteChannel; + r->track->inRoutes()->removeRoute(src); + } + } + +} + +//--------------------------------------------------------- +// removeTrack3 +// non realtime part of removeTrack +//--------------------------------------------------------- + +void Song::removeTrack3(Track* /*track*/)//prevent of compiler warning: unused parameter + { + /* + switch(track->type()) { + case Track::AUDIO_SOFTSYNTH: + { + SynthI* s = (SynthI*) track; + s->deactivate3(); + } + break; + default: + break; + } + */ + } + + +//--------------------------------------------------------- +// executeScript +//--------------------------------------------------------- +void Song::executeScript(const char* scriptfile, PartList* parts, int quant, bool onlyIfSelected) +{ + // a simple format for external processing + // will be extended if there is a need + // + // Semantics: + // PARTLEN + // BEATLEN + // QUANTLEN + // NOTE + // CONTROLLER + // + song->startUndo(); // undo this entire block + for (iPart i = parts->begin(); i != parts->end(); i++) { + const char* tmp = tmpnam(NULL); + printf("script input filename=%s\n",tmp); + FILE *fp = fopen(tmp, "w"); + MidiPart *part = (MidiPart*)(i->second); + int partStart = part->endTick()-part->lenTick(); + int z, n; + sigmap.timesig(0, z, n); + fprintf(fp, "TIMESIG %d %d\n", z, n); + fprintf(fp, "PART %d %d\n", partStart, part->lenTick()); + fprintf(fp, "BEATLEN %d\n", sigmap.ticksBeat(0)); + fprintf(fp, "QUANTLEN %d\n", quant); + + //for (iCItem i = items.begin(); i != items.end(); ++i) { + for (iEvent e = part->events()->begin(); e != part->events()->end(); e++) { + Event ev = e->second; + + if (ev.isNote()) + { + if (onlyIfSelected && ev.selected() == false) + continue; + + fprintf(fp,"NOTE %d %d %d %d\n", ev.tick(), ev.dataA(), ev.lenTick(), ev.dataB()); + // Indicate no undo, and do not do port controller values and clone parts. + audio->msgDeleteEvent(ev, part, false, false, false); + } else if (ev.type()==Controller) { + fprintf(fp,"CONTROLLER %d %d %d %d\n", ev.tick(), ev.dataA(), ev.dataB(), ev.dataC()); + // Indicate no undo, and do not do port controller values and clone parts. + audio->msgDeleteEvent(ev, part, false, false, false); + } + } + fclose(fp); + + // Call external program, let it manipulate the file + int pid = fork(); + if (pid == 0) { + if (execlp(scriptfile, scriptfile, tmp, NULL) == -1) { + perror("Failed to launch script!"); + // Get out of here + + // cannot report error through gui, we are in another fork! + //@!TODO: Handle unsuccessful attempts + exit(99); + } + exit(0); + } + else if (pid == -1) { + perror("fork failed"); + } + else { + int status; + waitpid(pid, &status, 0); + if (WEXITSTATUS(status) != 0 ) { + QMessageBox::warning(muse, tr("MusE - external script failed"), + tr("MusE was unable to launch the script\n") + ); + endUndo(SC_EVENT_REMOVED); + return; + } + else { // d0 the fun55or5! + // TODO: Create a new part, update the entire editor from it, hehh.... + + QFile file(tmp); + if ( file.open( QIODevice::ReadOnly ) ) { + Q3TextStream stream( &file ); + QString line; + while ( !stream.atEnd() ) { + line = stream.readLine(); // line of text excluding '\n' + if (line.startsWith("NOTE")) + { + QStringList sl = QStringList::split(" ",line); + + Event e(Note); + int tick = sl[1].toInt(); + int pitch = sl[2].toInt(); + int len = sl[3].toInt(); + int velo = sl[4].toInt(); + printf ("tick=%d pitch=%d velo=%d len=%d\n", tick,pitch,velo,len); + e.setTick(tick); + e.setPitch(pitch); + e.setVelo(velo); + e.setLenTick(len); + // Indicate no undo, and do not do port controller values and clone parts. + audio->msgAddEvent(e, part, false, false, false); + } + if (line.startsWith("CONTROLLER")) + { + QStringList sl = QStringList::split(" ",line); + + Event e(Controller); + int tick = sl[1].toInt(); + int a = sl[2].toInt(); + int b = sl[3].toInt(); + int c = sl[4].toInt(); + printf ("tick=%d a=%d b=%d c=%d\n", tick,a,b,c); + e.setA(a); + e.setB(b); + e.setB(c); + // Indicate no undo, and do not do port controller values and clone parts. + audio->msgAddEvent(e, part, false, false, false); + } + } + file.close(); + } + } + } + remove(tmp); + } + + endUndo(SC_EVENT_REMOVED); +} + +#define SCRIPTSSUFFIX "/share/muse/scripts/" +#define USERSCRIPTSSUFFIX "/.muse/scripts/" +void Song::populateScriptMenu(Q3PopupMenu* menuPlugins, QObject* receiver) +{ + // + // List scripts + // + QString distScripts = QString(INSTPREFIX) + QString(SCRIPTSSUFFIX); + QString home = ""; + if (getenv("HOME") != NULL) + home = QString(getenv("HOME")); + QString userScripts = home + QString(USERSCRIPTSSUFFIX); + + QFileInfo distScriptsFi(distScripts); + if (distScriptsFi.isDir()) { + QDir dir = QDir(distScripts); + dir.setFilter(QDir::Executable | QDir::Files); + deliveredScriptNames = dir.entryList(); + } + QFileInfo userScriptsFi(userScripts); + if (userScriptsFi.isDir()) { + QDir dir(userScripts); + dir.setFilter(QDir::Executable | QDir::Files); + userScriptNames = dir.entryList(); + } + + if (deliveredScriptNames.size() > 0 || userScriptNames.size() > 0) { + //menuPlugins = new QPopupMenu(this); + //menuBar()->insertItem(tr("&Plugins"), menuPlugins); + int id = 0; + if (deliveredScriptNames.size() > 0) { + for (QStringList::Iterator it = deliveredScriptNames.begin(); it != deliveredScriptNames.end(); it++, id++) { + //menuPlugins->insertItem(*it, this, SLOT(execDeliveredScript(int)), 0, id); + //menuPlugins->insertItem(*it, this, slot_deliveredscripts, 0, id); + menuPlugins->insertItem(*it, receiver, SLOT(execDeliveredScript(int)), 0, id); + } + menuPlugins->insertSeparator(); + } + if (userScriptNames.size() > 0) { + for (QStringList::Iterator it = userScriptNames.begin(); it != userScriptNames.end(); it++, id++) { + //menuPlugins->insertItem(*it, this, slot_userscripts, 0, id); + menuPlugins->insertItem(*it, receiver, SLOT(execUserScript(int)), 0, id); + } + menuPlugins->insertSeparator(); + } + } + return; +} + +//--------------------------------------------------------- +// getScriptPath +//--------------------------------------------------------- +QString Song::getScriptPath(int id, bool isdelivered) +{ + if (isdelivered) { + QString path = QString(INSTPREFIX) + SCRIPTSSUFFIX + deliveredScriptNames[id]; + return path; + } + + QString path = QString(getenv("HOME")) + USERSCRIPTSSUFFIX + userScriptNames[id - deliveredScriptNames.size()]; + return path; +} + diff --git a/muse2/muse/song.h b/muse2/muse/song.h new file mode 100644 index 00000000..cc7267b7 --- /dev/null +++ b/muse2/muse/song.h @@ -0,0 +1,413 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: song.h,v 1.35.2.25 2009/12/15 03:39:58 terminator356 Exp $ +// +// (C) Copyright 1999/2000 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __SONG_H__ +#define __SONG_H__ + +#include +#include +#include +//Added by qt3to4: +#include +#include + +#include "pos.h" +#include "globaldefs.h" +#include "tempo.h" +#include "sig.h" +#include "undo.h" +#include "track.h" + +class SynthI; +struct MidiMsg; +struct AudioMsg; +class Event; +class Xml; +class Sequencer; +class Track; +class Part; +class MidiPart; +class PartList; +class MPEventList; +class EventList; +class MarkerList; +class Marker; +class SNode; +class Q3PopupMenu; +class QButton; + +class MidiPort; +class MidiDevice; +class AudioPort; +class AudioDevice; + +#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_MIDI_CONTROLLER 0x2000 // must update midi mixer +#define SC_MUTE 0x4000 +#define SC_SOLO 0x8000 +#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_MIXER_VOLUME 0x200000 +#define SC_MIXER_PAN 0x400000 +#define SC_AUTOMATION 0x800000 +#define SC_AUX 0x1000000 // mixer aux changed +#define SC_RACK 0x2000000 // mixer rack changed +#define SC_CLIP_MODIFIED 0x4000000 +#define SC_MIDI_CONTROLLER_ADD 0x8000000 // a hardware midi controller was added or deleted +#define SC_MIDI_CHANNEL 0x10000000 // a midi track's channel changed + +#define REC_NOTE_FIFO_SIZE 16 + +//--------------------------------------------------------- +// 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: + // fifo for note-on events + // - this events are read by the heart beat interrupt + // - used for single step recording in midi editors + + int recNoteFifo[REC_NOTE_FIFO_SIZE]; + volatile int noteFifoSize; + int noteFifoWindex; + int noteFifoRindex; + + 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 + AuxList _auxs; // aux sends + SynthIList _synthIs; + + UndoList* undoList; + UndoList* redoList; + Pos pos[3]; + Pos _vcpos; // virtual CPOS (locate in progress) + MarkerList* _markerList; + + bool _masterFlag; + bool loopFlag; + bool punchinFlag; + bool punchoutFlag; + bool recordFlag; + bool soloFlag; + enum MType _mtype; + int _recMode; + int _cycleMode; + bool _click; + bool _quantize; + int _recRaster; // Used for audio rec new part snapping. Set by Arranger snap combo box. + unsigned _len; // song len in ticks + FollowMode _follow; + int _globalPitchShift; + void readMarker(Xml&); + + QString songInfoStr; // contains user supplied song information, stored in song file. + QStringList deliveredScriptNames; + QStringList userScriptNames; + + public: + Song(const char* name = 0); + ~Song(); + + void putEvent(int pv); + void endMsgCmd(); + void processMsg(AudioMsg* msg); + + void setMType(MType t); + MType mtype() const { return _mtype; } + + void setFollow(FollowMode m) { _follow = m; } + FollowMode follow() const { return _follow; } + + bool dirty; + WaveTrack* bounceTrack; + AudioOutput* bounceOutput; + void updatePos(); + + void read(Xml&); + void write(int, Xml&) const; + void writeFont(int level, Xml& xml, const char* name, + const QFont& font) const; + QFont readFont(Xml& xml, const char* name); + QString getSongInfo() { return songInfoStr; } + void setSongInfo(QString info) { songInfoStr = info; } + + void clear(bool signal); + void update(int flags = -1); + void cleanupForQuit(); + + int globalPitchShift() const { return _globalPitchShift; } + void setGlobalPitchShift(int val) { _globalPitchShift = val; } + + //----------------------------------------- + // Marker + //----------------------------------------- + + MarkerList* marker() const { return _markerList; } + Marker* addMarker(const QString& s, int t, bool lck); + Marker* getMarkerAt(int t); + void removeMarker(Marker*); + Marker* setMarkerName(Marker*, const QString&); + Marker* setMarkerTick(Marker*, int); + Marker* setMarkerLock(Marker*, bool); + void setMarkerCurrent(Marker* m, bool f); + + //----------------------------------------- + // transport + //----------------------------------------- + + void setPos(int, const Pos&, bool sig = true, bool isSeek = true, + bool adjustScrollbar = false); + 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 vcpos() const { return _vcpos.tick(); } + const Pos& vcPos() const { return _vcpos; } + 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(); + void abortRolling(); + + //----------------------------------------- + // access tempomap/sigmap (Mastertrack) + //----------------------------------------- + + unsigned len() const { return _len; } + void setLen(unsigned l); // set songlen in ticks + int roundUpBar(int tick) const; + int roundUpBeat(int tick) const; + int roundDownBar(int tick) const; + void initLen(); + void tempoChanged(); + + //----------------------------------------- + // event manipulations + //----------------------------------------- + + //void cmdAddRecordedWave(WaveTrack* track, const Pos&, const Pos&); + void cmdAddRecordedWave(WaveTrack* track, Pos, Pos); + void cmdAddRecordedEvents(MidiTrack*, EventList*, unsigned); + bool addEvent(Event&, Part*); + void changeEvent(Event&, Event&, Part*); + void deleteEvent(Event&, Part*); + void cmdChangeWave(QString original, QString tmpfile, unsigned sx, unsigned ex); + void remapPortDrumCtrlEvents(int mapidx, int newnote, int newchan, int newport); + void changeAllPortDrumCtrlEvents(bool add, bool drumonly = false); + + //----------------------------------------- + // part manipulations + //----------------------------------------- + + void cmdResizePart(Track* t, Part* p, unsigned int size); + void cmdSplitPart(Track* t, Part* p, int tick); + void cmdGluePart(Track* t, Part* p); + + void addPart(Part* part); + void removePart(Part* part); + void changePart(Part*, Part*); + PartList* getSelectedMidiParts() const; + PartList* getSelectedWaveParts() const; + bool msgRemoveParts(); + + //void cmdChangePart(Part* oldPart, Part* newPart); + void cmdChangePart(Part* oldPart, Part* newPart, bool doCtrls, bool doClones); + void cmdRemovePart(Part* part); + void cmdAddPart(Part* part); + int recRaster() { return _recRaster; } // Used by Song::cmdAddRecordedWave to snap new wave parts + void setRecRaster(int r) { _recRaster = r; } // Used by Arranger snap combo box + + //----------------------------------------- + // 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; } + AuxList* auxs() { return &_auxs; } + SynthIList* syntis() { return &_synthIs; } + + void cmdRemoveTrack(Track* track); + void removeTrack0(Track* track); + void removeTrack1(Track* track); + void removeTrack2(Track* track); + void removeTrack3(Track* track); + void removeMarkedTracks(); + void changeTrack(Track* oldTrack, Track* newTrack); + MidiTrack* findTrack(const Part* part) const; + Track* findTrack(const QString& name) const; + void swapTracks(int i1, int i2); + void setChannelMute(int channel, bool flag); + void setRecordFlag(Track*, bool); + void insertTrack0(Track*, int idx); + void insertTrack1(Track*, int idx); + void insertTrack2(Track*, int idx); + void insertTrack3(Track*, int idx); + void deselectTracks(); + void readRoute(Xml& xml); + void recordEvent(MidiTrack*, Event&); + void msgInsertTrack(Track* track, int idx, bool u = true); + void clearRecAutomation(bool clearList); + void processAutomationEvents(); + int execAutomationCtlPopup(AudioTrack*, const QPoint&, int); + int execMidiAutomationCtlPopup(MidiTrack*, MidiPart*, const QPoint&, int); + void connectJackRoutes(AudioTrack* track, bool disconnect); + void updateSoloStates(); + //void chooseMidiRoutes(QButton* /*parent*/, MidiTrack* /*track*/, bool /*dst*/); + + //----------------------------------------- + // undo, redo + //----------------------------------------- + + void startUndo(); + void endUndo(int); + //void undoOp(UndoOp::UndoType, Track* oTrack, Track* nTrack); + void undoOp(UndoOp::UndoType, int n, Track* oTrack, Track* nTrack); + void undoOp(UndoOp::UndoType, int, Track*); + void undoOp(UndoOp::UndoType, int, int, int = 0); + void undoOp(UndoOp::UndoType, Part*); + //void undoOp(UndoOp::UndoType, Event& nevent, Part*); + void undoOp(UndoOp::UndoType, Event& nevent, Part*, bool doCtrls, bool doClones); + //void undoOp(UndoOp::UndoType, Event& oevent, Event& nevent, Part*); + void undoOp(UndoOp::UndoType, Event& oevent, Event& nevent, Part*, bool doCtrls, bool doClones); + void undoOp(UndoOp::UndoType, SigEvent* oevent, SigEvent* nevent); + void undoOp(UndoOp::UndoType, int channel, int ctrl, int oval, int nval); + //void undoOp(UndoOp::UndoType, Part* oPart, Part* nPart); + void undoOp(UndoOp::UndoType, Part* oPart, Part* nPart, bool doCtrls, bool doClones); + void undoOp(UndoOp::UndoType type, const char* changedFile, const char* changeData, int startframe, int endframe); + void undoOp(UndoOp::UndoType type, Marker* copyMarker, Marker* realMarker); + bool doUndo1(); + void doUndo2(); + void doUndo3(); + bool doRedo1(); + void doRedo2(); + void doRedo3(); + + void addUndo(UndoOp& i); + + //----------------------------------------- + // Configuration + //----------------------------------------- + + //SynthI* createSynthI(const QString& sclass); + SynthI* createSynthI(const QString& sclass, const QString& label = QString()); + + void rescanAlsaPorts(); + + //----------------------------------------- + // Debug + //----------------------------------------- + + void dumpMaster(); + void addUpdateFlags(int f) { updateFlags |= f; } + + //----------------------------------------- + // Python bridge related + //----------------------------------------- +#ifdef ENABLE_PYTHON + virtual bool event (QEvent* e ); +#endif + void executeScript(const char* scriptfile, PartList* parts, int quant, bool onlyIfSelected); + + public slots: + void beat(); + + void undo(); + void redo(); + + void setTempo(int t); + void setSig(int a, int b); + void setTempo(double tempo) { setTempo(int(60000000.0/tempo)); } + + void setMasterFlag(bool flag); + bool getLoop() { return loopFlag; } + void setLoop(bool f); + void setRecord(bool f, bool autoRecEnable = true); + void clearTrackRec(); + 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 setQuantize(bool val); + void panic(); + void seqSignal(int fd); + Track* addTrack(int); + Track* addNewTrack(int); + QString getScriptPath(int id, bool delivered); + void populateScriptMenu(Q3PopupMenu* menuPlugins, QObject* receiver); + + signals: + void songChanged(int); + void posChanged(int, unsigned, 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 midiNote(int pitch, int velo); + }; + +extern Song* song; + +#endif + diff --git a/muse2/muse/songfile.cpp b/muse2/muse/songfile.cpp new file mode 100644 index 00000000..b13cb07a --- /dev/null +++ b/muse2/muse/songfile.cpp @@ -0,0 +1,1507 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: songfile.cpp,v 1.25.2.12 2009/11/04 15:06:07 spamatica Exp $ +// +// (C) Copyright 1999/2000 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include +#include + +#include "app.h" +#include "song.h" +#include "arranger.h" +#include "transport.h" +#include "cobject.h" +#include "drumedit.h" +#include "pianoroll.h" +#include "globals.h" +#include "xml.h" +#include "drummap.h" +#include "event.h" +#include "marker/marker.h" +#include "midiport.h" +#include "audio.h" +#include "mitplugin.h" +#include "wave.h" +#include "midictrl.h" +#include "amixer.h" +#include "conf.h" +#include "driver/jackmidi.h" + +//struct ClonePart { + //const EventList* el; +// const Part* cp; +// int id; + //ClonePart(const EventList* e, int i) : el(e), id(i) {} +// ClonePart(const Part* p, int i) : cp(p), id(i) {} +// }; + +//typedef std::list CloneList; +//typedef CloneList::iterator iClone; + +//--------------------------------------------------------- +// ClonePart +//--------------------------------------------------------- + +ClonePart::ClonePart(const Part* p, int i) +{ + cp = p; + id = i; + uuid_generate(uuid); +} + +//static CloneList cloneList; +//static CloneList copyCloneList; +CloneList cloneList; +//CloneList copyCloneList; + +/* +//--------------------------------------------------------- +// updateCloneList +//--------------------------------------------------------- + +void updateCloneList(Part* oPart, Part* nPart) +{ + for(iClone i = cloneList.begin(); i != cloneList.end(); ++i) + { + if(i->cp == oPart) + { + i->cp = nPart; + break; + } + } +} + +void updateCloneList(PartList* oParts, PartList* nParts) +{ + for(iPart ip = oParts->begin(); ip != oParts->end(); ++ip) + { + for(iClone i = cloneList.begin(); i != cloneList.end(); ++i) + { + if(i->cp == oPart) + { + i->cp = nPart; + break; + } + } + } +} + +//--------------------------------------------------------- +// clearClipboardAndCloneList +//--------------------------------------------------------- + +void clearClipboardAndCloneList() +{ + //QApplication::clipboard()->clear(QClipboard::Clipboard); + cloneList.clear(); +} +*/ + +//--------------------------------------------------------- +// NKey::write +//--------------------------------------------------------- + +void NKey::write(int level, Xml& xml) const + { + xml.intTag(level, "key", val); + } + +//--------------------------------------------------------- +// NKey::read +//--------------------------------------------------------- + +void NKey::read(Xml& xml) + { + for (;;) { + Xml::Token token = xml.parse(); + switch (token) { + case Xml::Error: + case Xml::End: + return; + case Xml::Text: + val = xml.s1().toInt(); + break; + case Xml::TagEnd: + if (xml.s1() == "key") + return; + default: + break; + } + } + } + +//--------------------------------------------------------- +// Scale::write +//--------------------------------------------------------- + +void Scale::write(int level, Xml& xml) const + { + xml.intTag(level, "scale", val); + } + +//--------------------------------------------------------- +// Scale::read +//--------------------------------------------------------- + +void Scale::read(Xml& xml) + { + for (;;) { + Xml::Token token = xml.parse(); + switch (token) { + case Xml::Error: + case Xml::End: + return; + case Xml::Text: + val = xml.s1().toInt(); + break; + case Xml::TagEnd: + if (xml.s1() == "scale") + return; + default: + break; + } + } + } + +//--------------------------------------------------------- +// readXmlPart +//--------------------------------------------------------- + +Part* readXmlPart(Xml& xml, Track* track, bool doClone, bool toTrack) + { + int id = -1; + Part* npart = 0; + uuid_t uuid; + uuid_clear(uuid); + bool uuidvalid = false; + bool clone = true; + bool wave = false; + bool isclone = false; + + for (;;) { + Xml::Token token = xml.parse(); + const QString& tag = xml.s1(); + switch (token) { + case Xml::Error: + case Xml::End: + return npart; + case Xml::TagStart: + // If the part has not been created yet... + if(!npart) + { + // If an id was found... + if(id != -1) + { + for(iClone i = cloneList.begin(); i != cloneList.end(); ++i) + { + // Is a matching part found in the clone list? + if(i->id == id) + { + // If it's a regular paste (not paste clone), and the original part is + // not a clone, defer so that a new copy is created in TagStart above. + //if(!doClone && i->cp->cevents()->arefCount() <= 1) + //if(!doClone && !isclone) + // break; + + // This makes a clone, chains the part, and increases ref counts. + npart = track->newPart((Part*)i->cp, true); + break; + } + } + } + else + // If a uuid was found... + if(uuidvalid) + { + for(iClone i = cloneList.begin(); i != cloneList.end(); ++i) + { + // Is a matching part found in the clone list? + if(uuid_compare(uuid, i->uuid) == 0) + { + Track* cpt = i->cp->track(); + // If we want to paste to the given track... + if(toTrack) + { + // If the given track type is not the same as the part's + // original track type, we can't continue. Just return. + if(!track || cpt->type() != track->type()) + { + xml.skip("part"); + return 0; + } + } + else + // ...else we want to paste to the part's original track. + { + // Make sure the track exists (has not been deleted). + if((cpt->isMidiTrack() && song->midis()->find(cpt) != song->midis()->end()) || + (cpt->type() == Track::WAVE && song->waves()->find(cpt) != song->waves()->end())) + track = cpt; + else + // Track was not found. Try pasting to the given track, as above... + { + if(!track || cpt->type() != track->type()) + { + // No luck. Just return. + xml.skip("part"); + return 0; + } + } + } + + // If it's a regular paste (not paste clone), and the original part is + // not a clone, defer so that a new copy is created in TagStart above. + //if(!doClone && i->cp->cevents()->arefCount() <= 1) + if(!doClone && !isclone) + break; + + // This makes a clone, chains the part, and increases ref counts. + npart = track->newPart((Part*)i->cp, true); + break; + } + } + } + + // If the part still has not been created yet... + if(!npart) + { + // A clone was not created from any matching part. Create a non-clone part now. + if(!track) + { + xml.skip("part"); + return 0; + } + // If we're pasting to selected track and the 'wave' + // variable is valid, check for mismatch... + if(toTrack && uuidvalid) + { + // If both the part and track are not midi or wave... + if((wave && track->isMidiTrack()) || + (!wave && track->type() == Track::WAVE)) + { + xml.skip("part"); + return 0; + } + } + + if (track->isMidiTrack()) + npart = new MidiPart((MidiTrack*)track); + else if (track->type() == Track::WAVE) + npart = new WavePart((WaveTrack*)track); + else + { + xml.skip("part"); + return 0; + } + + // Signify a new non-clone part was created. + // Even if the original part was itself a clone, clear this because the + // attribute section did not create a clone from any matching part. + clone = false; + + // If an id or uuid was found, add the part to the clone list + // so that subsequent parts can look it up and clone from it... + if(id != -1) + { + ClonePart ncp(npart, id); + cloneList.push_back(ncp); + } + else + if(uuidvalid) + { + ClonePart ncp(npart); + // New ClonePart creates its own uuid, but we need to replace it. + uuid_copy(ncp.uuid, uuid); + cloneList.push_back(ncp); + } + } + } + + if (tag == "name") + npart->setName(xml.parse1()); + else if (tag == "poslen") { + ((PosLen*)npart)->read(xml, "poslen"); + } + else if (tag == "pos") { + Pos pos; + pos.read(xml, "pos"); // obsolete + npart->setTick(pos.tick()); + } + else if (tag == "len") { + Pos len; + len.read(xml, "len"); // obsolete + npart->setLenTick(len.tick()); + } + else if (tag == "selected") + npart->setSelected(xml.parseInt()); + else if (tag == "color") + npart->setColorIndex(xml.parseInt()); + else if (tag == "mute") + npart->setMute(xml.parseInt()); + else if (tag == "event") + { + // If a new non-clone part was created, accept the events... + if(!clone) + { + EventType type = Wave; + if(track->isMidiTrack()) + type = Note; + Event e(type); + e.read(xml); + // stored tickpos for event has absolute value. However internally + // tickpos is relative to start of part, we substract tick(). + // TODO: better handling for wave event + e.move( -npart->tick() ); + int tick = e.tick(); + + // Do not discard events belonging to clone parts, + // at least not yet. A later clone might have a longer, + // fully accommodating part length! + //if ((tick < 0) || (tick >= (int) lenTick())) { + //if ((tick < 0) || ( id == -1 && !clone && (tick >= (int)lenTick()) )) + // No way to tell at the moment whether there will be clones referencing this... + // No choice but to accept all events past 0. + if(tick < 0) + { + //printf("readClone: warning: event not in part: %d - %d -%d, discarded\n", + printf("readClone: warning: event at tick:%d not in part:%s, discarded\n", + tick, npart->name().latin1()); + } + else + { + npart->events()->add(e); + } + } + else + // ...Otherwise a clone was created, so we don't need the events. + xml.skip(tag); + } + else + xml.unknown("readXmlPart"); + break; + case Xml::Attribut: + if (tag == "type") + { + if(xml.s2() == "wave") + wave = true; + } + else if (tag == "cloneId") + { + id = xml.s2().toInt(); + //if(id != -1) + //{ + // for(iClone i = cloneList.begin(); i != cloneList.end(); ++i) + // { + // Is a matching part found in the clone list? + // if(i->id == id) + // { + // If it's a regular paste (not paste clone), and the original part is + // not a clone, defer so that a new copy is created in TagStart above. + //if(!doClone && i->cp->cevents()->arefCount() <= 1) + //if(!doClone && !isclone) + // break; + + // This makes a clone, chains the part, and increases ref counts. + // npart = track->newPart((Part*)i->cp, true); + // break; + // } + // } + //} + } + else if (tag == "uuid") + { + uuid_parse(xml.s2().latin1(), uuid); + if(!uuid_is_null(uuid)) + { + uuidvalid = true; + /* + for(iClone i = cloneList.begin(); i != cloneList.end(); ++i) + { + // Is a matching part found in the clone list? + if(uuid_compare(uuid, i->uuid) == 0) + { + Track* cpt = i->cp->track(); + // If we want to paste to the given track... + if(toTrack) + { + // If the given track type is not the same as the part's + // original track type, we can't continue. Just return. + if(!track || cpt->type() != track->type()) + { + xml.skip("part"); + return 0; + } + } + else + // ...else we want to paste to the part's original track. + { + // Make sure the track exists (has not been deleted). + if((cpt->isMidiTrack() && song->midis()->find(cpt) != song->midis()->end()) || + (cpt->type() == Track::WAVE && song->waves()->find(cpt) != song->waves()->end())) + track = cpt; + else + // Track was not found. Try pasting to the given track, as above... + { + if(!track || cpt->type() != track->type()) + { + // No luck. Just return. + xml.skip("part"); + return 0; + } + } + } + + // If it's a regular paste (not paste clone), and the original part is + // not a clone, defer so that a new copy is created in TagStart above. + //if(!doClone && i->cp->cevents()->arefCount() <= 1) + if(!doClone && !isclone) + break; + + // This makes a clone, chains the part, and increases ref counts. + npart = track->newPart((Part*)i->cp, true); + break; + } + } + */ + } + } + else if(tag == "isclone") + isclone = xml.s2().toInt(); + break; + case Xml::TagEnd: + if (tag == "part") + return npart; + default: + break; + } + } + return npart; +} + +//--------------------------------------------------------- +// Part::write +// If isCopy is true, write the xml differently so that +// we can have 'Paste Clone' feature. +//--------------------------------------------------------- + +//void Part::write(int level, Xml& xml) const +void Part::write(int level, Xml& xml, bool isCopy, bool forceWavePaths) const + { + const EventList* el = cevents(); + int id = -1; + uuid_t uuid; + uuid_clear(uuid); + bool dumpEvents = true; + bool wave = _track->type() == Track::WAVE; + + if(isCopy) + { + //for(iClone i = copyCloneList.begin(); i != copyCloneList.end(); ++i) + for(iClone i = cloneList.begin(); i != cloneList.end(); ++i) + { + //if(i->el == el) { + if(i->cp->cevents() == el) + { + //id = i->id; + uuid_copy(uuid, i->uuid); + dumpEvents = false; + break; + } + } + //if(id == -1) + if(uuid_is_null(uuid)) + { + //id = copyCloneList.size(); + //id = cloneList.size(); + //ClonePart cp(el, id); + //ClonePart cp(this, id); + ClonePart cp(this); + uuid_copy(uuid, cp.uuid); + //copyCloneList.push_back(cp); + cloneList.push_back(cp); + } + } + else + { + if (el->arefCount() > 1) + { + for (iClone i = cloneList.begin(); i != cloneList.end(); ++i) + { + //if (i->el == el) { + if (i->cp->cevents() == el) + { + id = i->id; + //uuid_copy(id, i->uid); + dumpEvents = false; + break; + } + } + if (id == -1) + //if(uuid_is_null(id)) + { + id = cloneList.size(); + //ClonePart cp(el, id); + ClonePart cp(this, id); + //ClonePart cp(this); + cloneList.push_back(cp); + } + } + } + + // Special markers if this is a copy operation and the + // part is a clone. + if(isCopy) + { + char sid[40]; // uuid string is 36 chars. Try 40 for good luck. + sid[0] = 0; + uuid_unparse_lower(uuid, sid); + //if(midi) + // xml.nput(level, "arefCount() > 1) + xml.nput(" isclone=\"1\""); + xml.put(">"); + level++; + } + else + if (id != -1) + //if(!uuid_is_null(id)) + { + xml.tag(level++, "part cloneId=\"%d\"", id); + //char sid[40]; // uuid string is 36 chars. Try 40 for good luck. + //sid[0] = 0; + //uuid_unparse_lower(id, sid); + //xml.tag(level++, "part cloneId=\"%s\"", sid); + } + else + xml.tag(level++, "part"); + + xml.strTag(level, "name", _name); + +// PosLen poslen(*this); +// int tickpos = tick(); +// poslen.setTick(tickpos); + PosLen::write(level, xml, "poslen"); + xml.intTag(level, "selected", _selected); + xml.intTag(level, "color", _colorIndex); + if (_mute) + xml.intTag(level, "mute", _mute); + if (dumpEvents) { + for (ciEvent e = el->begin(); e != el->end(); ++e) + //e->second.write(level, xml, *this); + e->second.write(level, xml, *this, forceWavePaths); + } + xml.etag(level, "part"); + } + +/* +//--------------------------------------------------------- +// Part::read +//--------------------------------------------------------- + +void Part::read(Xml& xml, int, bool toTrack) // int newPartOffset + { + int id = -1; + bool containsEvents = false; + uuid_t uuid; + uuid_clear(uuid); + bool uuidvalid = false; + bool clone = false; + + for (;;) { + Xml::Token token = xml.parse(); + const QString& tag = xml.s1(); + switch (token) { + case Xml::Error: + case Xml::End: + return; + case Xml::TagStart: + if (tag == "name") + _name = xml.parse1(); + else if (tag == "poslen") { + PosLen::read(xml, "poslen"); + } + else if (tag == "pos") { + Pos pos; + pos.read(xml, "pos"); // obsolete + setTick(pos.tick()); + } + else if (tag == "len") { + Pos len; + len.read(xml, "len"); // obsolete + setLenTick(len.tick()); + } + else if (tag == "selected") + _selected = xml.parseInt(); + else if (tag == "color") + _colorIndex = xml.parseInt(); + else if (tag == "mute") + _mute = xml.parseInt(); + else if (tag == "event") { + containsEvents = true; + EventType type = Wave; + if (_track->isMidiTrack()) + type = Note; + Event e(type); + e.read(xml); + // stored tickpos for event has absolute value. However internally + // tickpos is relative to start of part, we substract tick(). + // TODO: better handling for wave event + e.move(-tick()); + int tick = e.tick(); + + // Changed by T356. Do not discard events belonging to clone parts, + // at least not yet. A later clone might have a longer, + // fully accommodating part length! + //if ((tick < 0) || (tick >= (int) lenTick())) { + if ((tick < 0) || ( id == -1 && !clone && (tick >= (int)lenTick()) )) + { + //printf("Part::read: warning: event not in part: %d - %d -%d, discarded\n", + printf("Part::read: warning: event at tick:%d not in part:%s, discarded\n", + tick, name().latin1()); + } + else { + _events->add(e); +*/ + + + /* + // TODO: This should NOT be done here since the event list + // might be deleted below. Since after reading a part it + // likely (always?) that (msg)AddPart() or (msg)ChangePart() + // will be called (must check if they're ever called BEFORE + // Part::read), then those routines will take care of it, + // they are already coded to do so. + // Note the redundancy of doing it here AND (msg)Add/ChangePart ! + // Try to eliminate this section altogether by verifying that + // (msg)Add/ChangePart (or one of the other routines which add port + // controller values) is always called after Part::read... + if (e.type() == Controller) { + MidiTrack* mt = (MidiTrack*)_track; + int channel = mt->outChannel(); + MidiPort* mp = &midiPorts[mt->outPort()]; + // tick is relative to part, controller needs an absolute value hence + // part offset is added. If newPartOffset was given we use that instead of + // the recorded offset! + if (!newPartOffset) + newPartOffset=this->tick(); + + int ctl = e.dataA(); + if(mt->type() == Track::DRUM) + { + // Is it a drum controller event, according to the track port's instrument? + MidiController* mc = mp->drumController(ctl); + if(mc) + { + int note = ctl & 0x7f; + ctl &= ~0xff; + channel = drumMap[note].channel; + mp = &midiPorts[drumMap[note].port]; + ctl |= drumMap[note].anote; + } + } + + // Removed by T356 + // check if controller exists + //if (mp->hwCtrlState(channel, e.dataA()) == CTRL_VAL_UNKNOWN) { + // mp->addManagedController(channel, e.dataA()); + // } + + // Changed by T356 + // add controller value + //mp->setCtrl(channel, tick+newPartOffset, e.dataA(), e.dataB()); + mp->setControllerVal(channel, tick+newPartOffset, ctl, e.dataB(), this); + } + */ +/* + } + } + else + xml.unknown("Part::read"); + break; + case Xml::Attribut: + if (tag == "cloneId") + id = xml.s2().toInt(); + else if (tag == "uuid") + { + uuid_parse(xml.s2().latin1(), uuid); + if(!uuid_is_null(uuid)) + uuidvalid = true; + } + else if (tag == "isclone") + clone = xml.s2().toInt(); + break; + case Xml::TagEnd: + if (tag == "part") + { +*/ + /* + if (id != -1) + { + + // clone part + if (containsEvents) { + // add to cloneList: + //ClonePart cp(_events, id); + ClonePart cp(this, id); + cloneList.push_back(cp); + } + else { + // replace event list with clone event + // list + for (iClone i = cloneList.begin(); + i != cloneList.end(); ++i) { + if (i->id == id) { + delete _events; + //_events = (EventList*)(i->el); + _events = (EventList*)(i->cp->cevents()); + _events->incRef(1); + _events->incARef(1); + //i->cp->chainClone(this); + chainClone((Part*)i->cp, this); + break; + } + } + } + */ + +/* + if(id != -1) + { + // See if the part exists in the clone list. + // The clone list is also the copy/paste clone list. + // Care must be taken to ensure the list is ALWAYS EMPTY + // before loading or dropping parts INTO muse, because the + // current song parts are NOT the same as when the imported parts + // were created, (even if they were created from the current session, + // we should NOT look them up). Always back up the list, clear it, + // read part(s), then restore the list so that paste works after. + Part* cp = 0; + for(iClone i = cloneList.begin(); i != cloneList.end(); ++i) + { + if(i->id == id) + { + cp = (Part*)i->cp; + break; + } + } + // Was a matching part found in the clone list? + if(cp) + { + // Make this part a clone of that part. Use its event list... + delete _events; + _events = (EventList*)(cp->cevents()); + _events->incRef(1); + _events->incARef(1); + chainClone(cp, this); + } + else + { + // No matching part to clone was found in the clone list. + // Does the part contain some events? + //if(containsEvents) + { + // Add the part to the clone list so that subsequent parts + // can look it up and clone from it... + ClonePart ncp(this, id); + cloneList.push_back(ncp); + } + // Otherwise this part has no matching part in the clone list + // and no events of its own. Nothing left to do, we now have + // a blank part with the original offset, colour etc. + } + } + else + // If a uuid was found, do the same as above. Using uuids + // allows foolproof rejection of copied parts not found + // in the clone list, particularly when copying parts from + // another instance of muse. + if(uuidvalid) + { + Part* cp = 0; + for(iClone i = cloneList.begin(); i != cloneList.end(); ++i) + { + if(uuid_compare(uuid, i->uuid) == 0) + { + cp = (Part*)i->cp; + break; + } + } + // If a matching part was found, and we want to paste to the original track... + if(cp && !toTrack) + { + // Make sure the track exists (has not been deleted). + if((cp->track()->isMidiTrack() && song->midis()->find(cp->track()) != song->midis()->end()) || + (cp->track()->type() == Track::WAVE && song->waves()->find(cp->track()) != song->waves()->end())) + setTrack(cp->track()); + } + // Was a matching part found in the clone list, and was it + // originally a clone part? + if(cp && clone) + { + // Make this part a clone of that part. Use its event list... + delete _events; + _events = (EventList*)(cp->cevents()); + _events->incRef(1); + _events->incARef(1); + // Chain the clone. + // Use the slower function which makes sure it chains to a part + // within a valid (non-deleted) track. + //chainClone(cp, this); + chainClone(this); + } + else + { + // No matching part to clone was found in the clone list. + // Does the part contain some events? + //if(containsEvents) + { + // Add the part to the clone list so that subsequent parts + // can look it up and clone from it... + ClonePart ncp(this); + // New ClonePart creates its own uuid, but we need to replace it. + uuid_copy(ncp.uuid, uuid); + cloneList.push_back(ncp); + } + } + } + return; + } + default: + break; + } + } + } +*/ + +//--------------------------------------------------------- +// writeFont +//--------------------------------------------------------- + +void Song::writeFont(int level, Xml& xml, const char* name, + const QFont& font) const + { + xml.nput(level, "<%s family=\"%s\" size=\"%d\"", + //name, font.family().latin1(), font.pointSize()); + name, Xml::xmlString(font.family()).latin1(), font.pointSize()); + if (font.weight() != QFont::Normal) + xml.nput(" weight=\"%d\"", font.weight()); + if (font.italic()) + xml.nput(" italic=\"1\""); + xml.nput(" />\n"); + } + +//--------------------------------------------------------- +// readFont +//--------------------------------------------------------- + +QFont Song::readFont(Xml& xml, const char* name) + { + QFont f; + for (;;) { + Xml::Token token = xml.parse(); + switch (token) { + case Xml::Error: + case Xml::End: + return f; + case Xml::TagStart: + xml.unknown("readFont"); + break; + case Xml::Attribut: + if (xml.s1() == "family") + f.setFamily(xml.s2()); + else if (xml.s1() == "size") + f.setPointSize(xml.s2().toInt()); + else if (xml.s1() == "weight") + f.setWeight(xml.s2().toInt()); + else if (xml.s1() == "italic") + f.setItalic(xml.s2().toInt()); + break; + case Xml::TagEnd: + if (xml.s1() == name) + return f; + default: + break; + } + } + return f; + } + +//--------------------------------------------------------- +// readPart +//--------------------------------------------------------- + +Part* MusE::readPart(Xml& xml) + { + Part* part = 0; + for (;;) { + Xml::Token token = xml.parse(); + const QString& tag = xml.s1(); + switch (token) { + case Xml::Error: + case Xml::End: + return part; + case Xml::Text: + { + int trackIdx, partIdx; + sscanf(tag.latin1(), "%d:%d", &trackIdx, &partIdx); + Track* track = song->tracks()->index(trackIdx); + if (track) + part = track->parts()->find(partIdx); + } + break; + case Xml::TagStart: + xml.unknown("readPart"); + break; + case Xml::TagEnd: + if (tag == "part") + return part; + default: + break; + } + } + } + +//--------------------------------------------------------- +// readToplevels +//--------------------------------------------------------- + +void MusE::readToplevels(Xml& xml) + { + PartList* pl = new PartList; + for (;;) { + Xml::Token token = xml.parse(); + const QString& tag = xml.s1(); + switch (token) { + case Xml::Error: + case Xml::End: + return; + case Xml::TagStart: + if (tag == "part") { + Part* part = readPart(xml); + if (part) + pl->add(part); + } + else if (tag == "pianoroll") { + // p3.3.34 + // Do not open if there are no parts. + // Had bogus '-1' part index for list edit in med file, + // causing list edit to segfault on song load. + // Somehow that -1 was put there on write, because the + // current part didn't exist anymore, so no index number + // could be found for it on write. Watching... may be fixed. + // But for now be safe for all the top levels... + if(!pl->empty()) + { + + startPianoroll(pl); + toplevels.back().cobject()->readStatus(xml); + pl = new PartList; + } + } + else if (tag == "drumedit") { + if(!pl->empty()) + { + startDrumEditor(pl); + toplevels.back().cobject()->readStatus(xml); + pl = new PartList; + } + } + else if (tag == "listeditor") { + if(!pl->empty()) + { + startListEditor(pl); + toplevels.back().cobject()->readStatus(xml); + pl = new PartList; + } + } + else if (tag == "master") { + startMasterEditor(); + toplevels.back().cobject()->readStatus(xml); + } + else if (tag == "lmaster") { + startLMasterEditor(); + toplevels.back().cobject()->readStatus(xml); + } + else if (tag == "marker") { + showMarker(true); + toplevels.back().cobject()->readStatus(xml); + } + else if (tag == "waveedit") { + if(!pl->empty()) + { + startWaveEditor(pl); + toplevels.back().cobject()->readStatus(xml); + pl = new PartList; + } + } + else if (tag == "cliplist") { + startClipList(); + toplevels.back().cobject()->readStatus(xml); + } + else + xml.unknown("MusE"); + break; + case Xml::Attribut: + break; + case Xml::TagEnd: + if (tag == "toplevels") { + delete pl; + return; + } + default: + break; + } + } + } + +//--------------------------------------------------------- +// readCtrl +//--------------------------------------------------------- + +void MusE::readCtrl(Xml&, int /*prt*/, int /*channel*/) + { +#if 0 + ChannelState* iState = midiPorts[prt].iState(channel); + + int idx = 0; + int val = -1; + + for (;;) { + Xml::Token token = xml.parse(); + switch (token) { + case Xml::Error: + case Xml::End: + return; + case Xml::TagStart: + xml.unknown("readCtrl"); + break; + case Xml::Attribut: + if (xml.s1() == "idx") + idx = xml.s2().toInt(); + else if (xml.s1() == "val") + val = xml.s2().toInt(); + break; + case Xml::TagEnd: + if (xml.s1() == "ctrl") { + iState->controller[idx] = val; +// printf("%d %d ctrl %d val %d\n", prt, channel, idx, val); + return; + } + default: + break; + } + } +#endif + } + +//--------------------------------------------------------- +// readMidichannel +//--------------------------------------------------------- + +void MusE::readMidichannel(Xml& xml, int prt) + { + int channel = 0; +// MidiPort* port = &midiPorts[prt]; + + for (;;) { + Xml::Token token = xml.parse(); + const QString& tag = xml.s1(); + switch (token) { + case Xml::Error: + case Xml::End: + return; + case Xml::TagStart: + if (tag == "pitch") { +//TODO port->setCtrl(channel, 0, CTRL_PITCH, xml.parseInt()); + } + else if (tag == "program") { +//TODO port->setCtrl(channel, 0, CTRL_PROGRAM, xml.parseInt()); + } + else if (tag == "ctrl") + readCtrl(xml, prt, channel); + else { + xml.unknown("readMidichannel"); + } + break; + case Xml::Attribut: + if (tag == "ch") { + channel = xml.s2().toInt(); + } + break; + case Xml::TagEnd: + if (tag == "midichannel") + return; + default: + break; + } + } + } + +//--------------------------------------------------------- +// readMidiport +//--------------------------------------------------------- + +void MusE::readMidiport(Xml& xml) + { + int port = 0; + for (;;) { + Xml::Token token = xml.parse(); + const QString& tag = xml.s1(); + switch (token) { + case Xml::Error: + case Xml::End: + return; + case Xml::TagStart: + if (tag == "midichannel") + readMidichannel(xml, port); + else { + xml.unknown("readMidiport"); + } + break; + case Xml::Attribut: + if (tag == "port") { + port = xml.s2().toInt(); + } + break; + case Xml::TagEnd: + if (tag == "midiport") { + return; + } + default: + break; + } + } + } + +//--------------------------------------------------------- +// readMarker +//--------------------------------------------------------- + +void Song::readMarker(Xml& xml) + { + Marker m; + m.read(xml); + _markerList->add(m); + } + +//--------------------------------------------------------- +// read +//--------------------------------------------------------- + +void Song::read(Xml& xml) + { + cloneList.clear(); + for (;;) { + Xml::Token token; + token = xml.parse(); + const QString& tag = xml.s1(); + switch (token) { + case Xml::Error: + case Xml::End: + return; + case Xml::TagStart: + if (tag == "master") + setMasterFlag(xml.parseInt()); + else if (tag == "info") + songInfoStr = xml.parse1(); + else if (tag == "loop") + setLoop(xml.parseInt()); + else if (tag == "punchin") + setPunchin(xml.parseInt()); + else if (tag == "punchout") + setPunchout(xml.parseInt()); + else if (tag == "record") + setRecord(xml.parseInt()); + else if (tag == "solo") + soloFlag = xml.parseInt(); + else if (tag == "type") + _mtype = MType(xml.parseInt()); + else if (tag == "recmode") + _recMode = xml.parseInt(); + else if (tag == "cycle") + _cycleMode = xml.parseInt(); + else if (tag == "click") + setClick(xml.parseInt()); + else if (tag == "quantize") + _quantize = xml.parseInt(); + else if (tag == "len") + _len = xml.parseInt(); + else if (tag == "follow") + _follow = FollowMode(xml.parseInt()); + else if (tag == "tempolist") { + tempomap.read(xml); + } + else if (tag == "siglist") + sigmap.read(xml); + else if (tag == "miditrack") { + MidiTrack* track = new MidiTrack(); + track->read(xml); + insertTrack0(track, -1); + } + else if (tag == "drumtrack") { + MidiTrack* track = new MidiTrack(); + track->setType(Track::DRUM); + track->read(xml); + insertTrack0(track, -1); + } + else if (tag == "wavetrack") { + WaveTrack* track = new WaveTrack(); + track->read(xml); + insertTrack0(track,-1); + // Now that the track has been added to the lists in insertTrack2(), + // OSC can find the track and its plugins, and start their native guis if required... + track->showPendingPluginNativeGuis(); + } + else if (tag == "AudioInput") { + AudioInput* track = new AudioInput(); + track->read(xml); + insertTrack0(track,-1); + track->showPendingPluginNativeGuis(); + } + else if (tag == "AudioOutput") { + AudioOutput* track = new AudioOutput(); + track->read(xml); + insertTrack0(track,-1); + track->showPendingPluginNativeGuis(); + } + else if (tag == "AudioGroup") { + AudioGroup* track = new AudioGroup(); + track->read(xml); + insertTrack0(track,-1); + track->showPendingPluginNativeGuis(); + } + else if (tag == "AudioAux") { + AudioAux* track = new AudioAux(); + track->read(xml); + insertTrack0(track,-1); + track->showPendingPluginNativeGuis(); + } + else if (tag == "SynthI") { + SynthI* track = new SynthI(); + track->read(xml); + // Done in SynthI::read() + // insertTrack(track,-1); + //track->showPendingPluginNativeGuis(); + } + else if (tag == "Route") { + readRoute(xml); + } + else if (tag == "marker") + readMarker(xml); + else if (tag == "globalPitchShift") + _globalPitchShift = xml.parseInt(); + else if (tag == "automation") + automation = xml.parseInt(); + else if (tag == "cpos") { + int pos = xml.parseInt(); + Pos p(pos, true); + setPos(Song::CPOS, p, false, false, false); + } + else if (tag == "lpos") { + int pos = xml.parseInt(); + Pos p(pos, true); + setPos(Song::LPOS, p, false, false, false); + } + else if (tag == "rpos") { + int pos = xml.parseInt(); + Pos p(pos, true); + setPos(Song::RPOS, p, false, false, false); + } + else if (tag == "drummap") + readDrumMap(xml, false); + else + xml.unknown("Song"); + break; + case Xml::Attribut: + break; + case Xml::TagEnd: + if (tag == "song") { + return; + } + default: + break; + } + } + dirty = false; + + // Since cloneList is also used for copy/paste operations, + // clear the copy clone list again. + cloneList.clear(); + } + +//--------------------------------------------------------- +// read +// read song +//--------------------------------------------------------- + +void MusE::read(Xml& xml, bool skipConfig) + { + bool skipmode = true; + for (;;) { + Xml::Token token = xml.parse(); + const QString& tag = xml.s1(); + switch (token) { + case Xml::Error: + case Xml::End: + return; + case Xml::TagStart: + if (skipmode && tag == "muse") + skipmode = false; + else if (skipmode) + break; + else if (tag == "configuration") + if (skipConfig) + //xml.skip(tag); + readConfiguration(xml,true /* only read sequencer settings */); + else + readConfiguration(xml, false); + else if (tag == "song") + { + song->read(xml); + audio->msgUpdateSoloStates(); + } + else if (tag == "midiport") + readMidiport(xml); + else if (tag == "Controller") { // obsolete + MidiController* ctrl = new MidiController; + ctrl->read(xml); + delete ctrl; + } + else if (tag == "mplugin") + readStatusMidiInputTransformPlugin(xml); + else if (tag == "toplevels") + readToplevels(xml); + else + xml.unknown("muse"); + break; + case Xml::Attribut: + if (tag == "version") { + int major = xml.s2().section('.', 0, 0).toInt(); + int minor = xml.s2().section('.', 1, 1).toInt(); + xml.setVersion(major, minor); + } + break; + case Xml::TagEnd: + if (!skipmode && tag == "muse") + return; + default: + break; + } + } + } + +//--------------------------------------------------------- +// write +//--------------------------------------------------------- + +void Song::write(int level, Xml& xml) const + { + xml.tag(level++, "song"); + xml.strTag(level, "info", songInfoStr); + xml.intTag(level, "automation", automation); + xml.intTag(level, "cpos", song->cpos()); + xml.intTag(level, "rpos", song->rpos()); + xml.intTag(level, "lpos", song->lpos()); + xml.intTag(level, "master", _masterFlag); + xml.intTag(level, "loop", loopFlag); + xml.intTag(level, "punchin", punchinFlag); + xml.intTag(level, "punchout", punchoutFlag); + xml.intTag(level, "record", recordFlag); + xml.intTag(level, "solo", soloFlag); + xml.intTag(level, "type", _mtype); + xml.intTag(level, "recmode", _recMode); + xml.intTag(level, "cycle", _cycleMode); + xml.intTag(level, "click", _click); + xml.intTag(level, "quantize", _quantize); + xml.intTag(level, "len", _len); + xml.intTag(level, "follow", _follow); + if (_globalPitchShift) + xml.intTag(level, "globalPitchShift", _globalPitchShift); + + // Make a backup of the current clone list, to retain any 'copy' items, + // so that pasting works properly after. + CloneList copyCloneList = cloneList; + cloneList.clear(); + + // write tracks + for (ciTrack i = _tracks.begin(); i != _tracks.end(); ++i) + (*i)->write(level, xml); + + // write routing + for (ciTrack i = _tracks.begin(); i != _tracks.end(); ++i) { + + // p3.3.38 Changed + //if ((*i)->isMidiTrack()) + // continue; + //WaveTrack* track = (WaveTrack*)(*i); + //track->writeRouting(level, xml); + + (*i)->writeRouting(level, xml); + } + + // Write midi device routing. + for (iMidiDevice i = midiDevices.begin(); i != midiDevices.end(); ++i) { + //MidiJackDevice* mjd = dynamic_cast(*i); + //if (!mjd) + // continue; + //mjd->writeRouting(level, xml); + (*i)->writeRouting(level, xml); + } + + // p3.3.49 Write midi port routing. + for (int i = 0; i < MIDI_PORTS; ++i) { + midiPorts[i].writeRouting(level, xml); + } + + tempomap.write(level, xml); + sigmap.write(level, xml); + _markerList->write(level, xml); + + writeDrumMap(level, xml, false); + xml.tag(level, "/song"); + + // Restore backup of the clone list, to retain any 'copy' items, + // so that pasting works properly after. + cloneList.clear(); + cloneList = copyCloneList; + } + +//--------------------------------------------------------- +// write +// write song +//--------------------------------------------------------- + +void MusE::write(Xml& xml) const + { + xml.header(); + + int level = 0; + xml.tag(level++, "muse version=\"2.0\""); + writeConfiguration(level, xml); + + writeStatusMidiInputTransformPlugins(level, xml); + + song->write(level, xml); + + if (!toplevels.empty()) { + xml.tag(level++, "toplevels"); + for (ciToplevel i = toplevels.begin(); i != toplevels.end(); ++i) { + if (i->cobject()->isVisible()) + i->cobject()->writeStatus(level, xml); + } + xml.tag(level--, "/toplevels"); + } + + xml.tag(level, "/muse"); + } + diff --git a/muse2/muse/stringparam.cpp b/muse2/muse/stringparam.cpp new file mode 100644 index 00000000..b3b5104e --- /dev/null +++ b/muse2/muse/stringparam.cpp @@ -0,0 +1,113 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id: stringparam.cpp,v 1.0.0.0 2010/04/24 01:01:01 terminator356 Exp $ +// +// Copyright (C) 1999-2010 by Werner Schweer and others +// String parameter module added by Tim. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the 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 "stringparam.h" +#include "xml.h" + +//--------------------------------------------------------- +// findKey +//--------------------------------------------------------- + +iStringParamMap StringParamMap::findKey(const char* key) +{ + iStringParamMap icm = find(std::string(key)); + return icm; +} + +//--------------------------------------------------------- +// set +//--------------------------------------------------------- + +void StringParamMap::set(const char* key, const char* value) +{ + iStringParamMap icm = find(std::string(key)); + if(icm == end()) + insert(std::pair(key, value)); + else + icm->second = std::string(value); +} + +//--------------------------------------------------------- +// remove +//--------------------------------------------------------- + +void StringParamMap::remove(const char* key) +{ + erase(std::string(key)); +} + +//--------------------------------------------------------- +// read +//--------------------------------------------------------- + +void StringParamMap::read(Xml& xml, const QString& name) +{ + QString n; + QString value; + + for (;;) + { + Xml::Token token = xml.parse(); + const QString tag = xml.s1(); + switch (token) + { + case Xml::Error: + case Xml::End: + return; + case Xml::TagStart: + xml.unknown(name); + break; + case Xml::Attribut: + if(tag == "name") + n = xml.s2(); + else + if(tag == "val") + value = xml.s2(); + else + xml.unknown(name); + break; + case Xml::TagEnd: + if(tag == name) + { + // Add or modify the item. + set(n.latin1(), value.latin1()); + return; + } + default: + break; + } + } +} + +//--------------------------------------------------------- +// write +//--------------------------------------------------------- + +void StringParamMap::write(int level, Xml& xml, const char* name) const +{ + if(empty()) + return; + + for(ciStringParamMap r = begin(); r != end(); ++r) + xml.tag(level, "%s name=\"%s\" val=\"%s\"/", name, r->first.c_str(), r->second.c_str()); +} + diff --git a/muse2/muse/stringparam.h b/muse2/muse/stringparam.h new file mode 100644 index 00000000..0e05c987 --- /dev/null +++ b/muse2/muse/stringparam.h @@ -0,0 +1,49 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id: stringparam.h,v 1.0.0.0 2010/04/24 01:01:01 terminator356 Exp $ +// +// Copyright (C) 1999-2010 by Werner Schweer and others +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the 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 __STRINGPARAM_H__ +#define __STRINGPARAM_H__ + +#include +#include + +class QString; +class Xml; + +//typedef std::pair StringParamMapItem; +typedef std::map::iterator iStringParamMap; +typedef std::map::const_iterator ciStringParamMap; + +class StringParamMap : public std::map +{ + public: + void set(const char* /*key*/, const char* /*value*/); + void remove(const char* /*key*/); + + iStringParamMap findKey(const char* /*key*/); + //int index(char* /*key*/); + + void read(Xml& /*xml*/, const QString& /*name*/); + void write(int /*level*/, Xml& /*xml*/, const char* /*name*/) const; +}; + + +#endif //__STRINGPARAM_H__ \ No newline at end of file diff --git a/muse2/muse/sync.cpp b/muse2/muse/sync.cpp new file mode 100644 index 00000000..699b5a33 --- /dev/null +++ b/muse2/muse/sync.cpp @@ -0,0 +1,1380 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: sync.cpp,v 1.6.2.12 2009/06/20 22:20:41 terminator356 Exp $ +// +// (C) Copyright 2003 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include "sync.h" +#include "song.h" +#include "utils.h" +#include "midiport.h" +#include "mididev.h" +#include "globals.h" +#include "midiseq.h" +#include "audio.h" +#include "audiodev.h" +#include "gconfig.h" +#include "xml.h" +#include "midi.h" + +//int rxSyncPort = -1; // receive from all ports +//int txSyncPort = 1; +//int rxDeviceId = 0x7f; // any device +//int txDeviceId = 0x7f; // any device +//MidiSyncPort midiSyncPorts[MIDI_PORTS]; +int volatile curMidiSyncInPort = -1; + +bool debugSync = true; + +int mtcType = 1; +MTC mtcOffset; +BValue extSyncFlag(0, "extSync"); // false - MASTER, true - SLAVE +//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; +BValue useJackTransport(0,"useJackTransport"); +bool volatile jackTransportMaster = 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? + +// p3.3.28 +static bool playPendingFirstClock = false; +unsigned int syncSendFirstClockDelay = 1; // In milliseconds. +//static int lastStoppedBeat = 0; +static unsigned int curExtMidiSyncTick = 0; +unsigned int volatile lastExtMidiSyncTick = 0; +double volatile curExtMidiSyncTime = 0.0; +double volatile lastExtMidiSyncTime = 0.0; + +// Not used yet. +// static bool mcStart = false; +// static int mcStartTick; + +// p3.3.25 +// From the "Introduction to the Volatile Keyword" at Embedded dot com +/* A variable should be declared volatile whenever its value could change unexpectedly. + ... global variables within a multi-threaded application + ... So all shared global variables should be declared volatile */ +unsigned int volatile midiExtSyncTicks = 0; + +//--------------------------------------------------------- +// MidiSyncInfo +//--------------------------------------------------------- + +MidiSyncInfo::MidiSyncInfo() +{ + _port = -1; + _idOut = 127; + _idIn = 127; + _sendMC = false; + _sendMRT = false; + _sendMMC = false; + _sendMTC = false; + _recMC = false; + _recMRT = false; + _recMMC = false; + _recMTC = false; + + _lastClkTime = 0.0; + _lastTickTime = 0.0; + _lastMRTTime = 0.0; + _lastMMCTime = 0.0; + _lastMTCTime = 0.0; + _clockTrig = false; + _tickTrig = false; + _MRTTrig = false; + _MMCTrig = false; + _MTCTrig = false; + _clockDetect = false; + _tickDetect = false; + _MRTDetect = false; + _MMCDetect = false; + _MTCDetect = false; + _recMTCtype = 0; + _recRewOnStart = true; + //_sendContNotStart = false; + _actDetectBits = 0; + for(int i = 0; i < MIDI_CHANNELS; ++i) + { + _lastActTime[i] = 0.0; + _actTrig[i] = false; + _actDetect[i] = false; + } +} + +//--------------------------------------------------------- +// operator = +//--------------------------------------------------------- + +MidiSyncInfo& MidiSyncInfo::operator=(const MidiSyncInfo &sp) +{ + //_port = sp._port; + + copyParams(sp); + + _lastClkTime = sp._lastClkTime; + _lastTickTime = sp._lastTickTime; + _lastMRTTime = sp._lastMRTTime; + _lastMMCTime = sp._lastMMCTime; + _lastMTCTime = sp._lastMTCTime; + _clockTrig = sp._clockTrig; + _tickTrig = sp._tickTrig; + _MRTTrig = sp._MRTTrig; + _MMCTrig = sp._MMCTrig; + _MTCTrig = sp._MTCTrig; + _clockDetect = sp._clockDetect; + _tickDetect = sp._tickDetect; + _MRTDetect = sp._MRTDetect; + _MMCDetect = sp._MMCDetect; + _MTCDetect = sp._MTCDetect; + _recMTCtype = sp._recMTCtype; + for(int i = 0; i < MIDI_CHANNELS; ++i) + { + _lastActTime[i] = sp._lastActTime[i]; + _actTrig[i] = sp._actTrig[i]; + _actDetect[i] = sp._actDetect[i]; + } + return *this; +} + +//--------------------------------------------------------- +// copyParams +//--------------------------------------------------------- + +MidiSyncInfo& MidiSyncInfo::copyParams(const MidiSyncInfo &sp) +{ + //_port = sp._port; + + _idOut = sp._idOut; + _idIn = sp._idIn; + _sendMC = sp._sendMC; + _sendMRT = sp._sendMRT; + _sendMMC = sp._sendMMC; + _sendMTC = sp._sendMTC; + setMCIn(sp._recMC); + _recMRT = sp._recMRT; + _recMMC = sp._recMMC; + _recMTC = sp._recMTC; + _recRewOnStart = sp._recRewOnStart; + //_sendContNotStart = sp._sendContNotStart; + return *this; +} + +//--------------------------------------------------------- +// setTime +//--------------------------------------------------------- + +void MidiSyncInfo::setTime() +{ + // Note: CurTime() makes a system call to gettimeofday(), + // which apparently can be slow in some cases. So I avoid calling this function + // too frequently by calling it (at the heartbeat rate) in Song::beat(). T356 + double t = curTime(); + + if(_clockTrig) + { + _clockTrig = false; + _lastClkTime = t; + } + else + if(_clockDetect && (t - _lastClkTime >= 1.0)) // Set detect indicator timeout to about 1 second. + { + _clockDetect = false; + // Give up the current midi sync in port number if we took it... + if(curMidiSyncInPort == _port) + curMidiSyncInPort = -1; + } + + if(_tickTrig) + { + _tickTrig = false; + _lastTickTime = t; + } + else + if(_tickDetect && (t - _lastTickTime) >= 1.0) // Set detect indicator timeout to about 1 second. + _tickDetect = false; + + if(_MRTTrig) + { + _MRTTrig = false; + _lastMRTTime = t; + } + else + if(_MRTDetect && (t - _lastMRTTime) >= 1.0) // Set detect indicator timeout to about 1 second. + { + _MRTDetect = false; + // Give up the current midi sync in port number if we took it... + //if(curMidiSyncInPort == _port) + // curMidiSyncInPort = -1; + } + + if(_MMCTrig) + { + _MMCTrig = false; + _lastMMCTime = t; + } + else + if(_MMCDetect && (t - _lastMMCTime) >= 1.0) // Set detect indicator timeout to about 1 second. + { + _MMCDetect = false; + // Give up the current midi sync in port number if we took it... + //if(curMidiSyncInPort == _port) + // curMidiSyncInPort = -1; + } + + if(_MTCTrig) + { + _MTCTrig = false; + _lastMTCTime = t; + } + else + if(_MTCDetect && (t - _lastMTCTime) >= 1.0) // Set detect indicator timeout to about 1 second. + { + _MTCDetect = false; + // Give up the current midi sync in port number if we took it... + if(curMidiSyncInPort == _port) + curMidiSyncInPort = -1; + } + + for(int i = 0; i < MIDI_CHANNELS; i++) + { + if(_actTrig[i]) + { + _actTrig[i] = false; + _lastActTime[i] = t; + } + else + if(_actDetect[i] && (t - _lastActTime[i]) >= 1.0) // Set detect indicator timeout to about 1 second. + { + _actDetect[i] = false; + _actDetectBits &= ~bitShiftLU[i]; + } + } +} + +//--------------------------------------------------------- +// setMCIn +//--------------------------------------------------------- + +void MidiSyncInfo::setMCIn(const bool v) +{ + _recMC = v; + // If sync receive was turned off, clear the current midi sync in port number so another port can grab it. + if(!_recMC && _port != -1 && curMidiSyncInPort == _port) + curMidiSyncInPort = -1; +} + +//--------------------------------------------------------- +// setMRTIn +//--------------------------------------------------------- + +void MidiSyncInfo::setMRTIn(const bool v) +{ + _recMRT = v; + // If sync receive was turned off, clear the current midi sync in port number so another port can grab it. + //if(!_recMRT && _port != -1 && curMidiSyncInPort == _port) + // curMidiSyncInPort = -1; +} + +//--------------------------------------------------------- +// setMMCIn +//--------------------------------------------------------- + +void MidiSyncInfo::setMMCIn(const bool v) +{ + _recMMC = v; + // If sync receive was turned off, clear the current midi sync in port number so another port can grab it. + //if(!_recMMC && _port != -1 && curMidiSyncInPort == _port) + // curMidiSyncInPort = -1; +} + +//--------------------------------------------------------- +// setMTCIn +//--------------------------------------------------------- + +void MidiSyncInfo::setMTCIn(const bool v) +{ + _recMTC = v; + // If sync receive was turned off, clear the current midi sync in port number so another port can grab it. + if(!_recMTC && _port != -1 && curMidiSyncInPort == _port) + curMidiSyncInPort = -1; +} + +//--------------------------------------------------------- +// trigMCSyncDetect +//--------------------------------------------------------- + +void MidiSyncInfo::trigMCSyncDetect() +{ + _clockDetect = true; + _clockTrig = true; + // Set the current midi sync in port number if it's not taken... + if(_recMC && curMidiSyncInPort == -1) + curMidiSyncInPort = _port; +} + +//--------------------------------------------------------- +// trigTickDetect +//--------------------------------------------------------- + +void MidiSyncInfo::trigTickDetect() +{ + _tickDetect = true; + _tickTrig = true; +} + +//--------------------------------------------------------- +// trigMRTDetect +//--------------------------------------------------------- + +void MidiSyncInfo::trigMRTDetect() +{ + _MRTDetect = true; + _MRTTrig = true; + // Set the current midi sync in port number if it's not taken... + //if(_recMRT && curMidiSyncInPort == -1) + // curMidiSyncInPort = _port; +} + +//--------------------------------------------------------- +// trigMMCDetect +//--------------------------------------------------------- + +void MidiSyncInfo::trigMMCDetect() +{ + _MMCDetect = true; + _MMCTrig = true; + // Set the current midi sync in port number if it's not taken... + //if(_recMMC && curMidiSyncInPort == -1) + // curMidiSyncInPort = _port; +} + +//--------------------------------------------------------- +// trigMTCDetect +//--------------------------------------------------------- + +void MidiSyncInfo::trigMTCDetect() +{ + _MTCDetect = true; + _MTCTrig = true; + // Set the current midi sync in port number if it's not taken... + if(_recMTC && curMidiSyncInPort == -1) + curMidiSyncInPort = _port; +} + +//--------------------------------------------------------- +// actDetect +//--------------------------------------------------------- + +bool MidiSyncInfo::actDetect(const int ch) const +{ + if(ch < 0 || ch >= MIDI_CHANNELS) + return false; + + return _actDetect[ch]; +} + +//--------------------------------------------------------- +// trigActDetect +//--------------------------------------------------------- + +void MidiSyncInfo::trigActDetect(const int ch) +{ + if(ch < 0 || ch >= MIDI_CHANNELS) + return; + + _actDetectBits |= bitShiftLU[ch]; + _actDetect[ch] = true; + _actTrig[ch] = true; +} + +//--------------------------------------------------------- +// read +//--------------------------------------------------------- + +void MidiSyncInfo::read(Xml& xml) + { + for (;;) { + Xml::Token token(xml.parse()); + const QString& tag(xml.s1()); + switch (token) { + case Xml::Error: + case Xml::End: + return; + case Xml::TagStart: + if (tag == "idOut") + _idOut = xml.parseInt(); + else if (tag == "idIn") + _idIn = xml.parseInt(); + else if (tag == "sendMC") + _sendMC = xml.parseInt(); + else if (tag == "sendMRT") + _sendMRT = xml.parseInt(); + else if (tag == "sendMMC") + _sendMMC = xml.parseInt(); + else if (tag == "sendMTC") + _sendMTC = xml.parseInt(); + //else if (tag == "sendContNotStart") + // _sendContNotStart = xml.parseInt(); + else if (tag == "recMC") + _recMC = xml.parseInt(); + else if (tag == "recMRT") + _recMRT = xml.parseInt(); + else if (tag == "recMMC") + _recMMC = xml.parseInt(); + else if (tag == "recMTC") + _recMTC = xml.parseInt(); + else if (tag == "recRewStart") + _recRewOnStart = xml.parseInt(); + else + xml.unknown("midiSyncInfo"); + break; + case Xml::TagEnd: + if (tag == "midiSyncInfo") + return; + default: + break; + } + } + } + +//--------------------------------------------------------- +// write +//--------------------------------------------------------- + +//void MidiSyncInfo::write(int level, Xml& xml, MidiDevice* md) +void MidiSyncInfo::write(int level, Xml& xml) +{ + //if(!md) + // return; + + // All defaults? Nothing to write. + if(_idOut == 127 && _idIn == 127 && !_sendMC && !_sendMRT && !_sendMMC && !_sendMTC && + /* !_sendContNotStart && */ !_recMC && !_recMRT && !_recMMC && !_recMTC && _recRewOnStart) + return; + + xml.tag(level++, "midiSyncInfo"); + //xml.intTag(level, "idx", idx); + //xml.intTag(level++, "midiSyncPort", idx); + //xml.tag(level++, "midiSyncInfo idx=\"%d\"", idx); + + //xml.strTag(level, "device", md->name()); + + if(_idOut != 127) + xml.intTag(level, "idOut", _idOut); + if(_idIn != 127) + xml.intTag(level, "idIn", _idIn); + + if(_sendMC) + xml.intTag(level, "sendMC", true); + if(_sendMRT) + xml.intTag(level, "sendMRT", true); + if(_sendMRT) + xml.intTag(level, "sendMMC", true); + if(_sendMTC) + xml.intTag(level, "sendMTC", true); + //if(_sendContNotStart) + // xml.intTag(level, "sendContNotStart", true); + + if(_recMC) + xml.intTag(level, "recMC", true); + if(_recMRT) + xml.intTag(level, "recMRT", true); + if(_recMMC) + xml.intTag(level, "recMMC", true); + if(_recMTC) + xml.intTag(level, "recMTC", true); + if(!_recRewOnStart) + xml.intTag(level, "recRewStart", false); + + xml.etag(level, "midiSyncInfo"); +} + +//--------------------------------------------------------- +// mmcInput +// Midi Machine Control Input received +//--------------------------------------------------------- + +//void MidiSeq::mmcInput(const unsigned char* p, int n) +void MidiSeq::mmcInput(int port, const unsigned char* p, int n) + { + if (debugSync) + printf("mmcInput: n:%d %02x %02x %02x %02x\n", + n, p[2], p[3], p[4], p[5]); + + MidiPort* mp = &midiPorts[port]; + MidiSyncInfo& msync = mp->syncInfo(); + // Trigger MMC detect in. + msync.trigMMCDetect(); + // MMC locate SMPTE time code may contain format type bits. Grab them. + if(p[3] == 0x44 && p[4] == 6 && p[5] == 1) + msync.setRecMTCtype((p[6] >> 5) & 3); + + // MMC in not turned on? Forget it. + if(!msync.MMCIn()) + return; + + //if (!(extSyncFlag.value() && acceptMMC)) + //if(!extSyncFlag.value()) + // return; + + switch(p[3]) { + case 1: + if (debugSync) + printf(" MMC: STOP\n"); + + playPendingFirstClock = false; + + //if ((state == PLAY || state == PRECOUNT)) + if (audio->isPlaying()) + audio->msgPlay(false); + playStateExt = false; + alignAllTicks(); + //stopPlay(); + break; + case 2: + if (debugSync) + printf(" MMC: PLAY\n"); + case 3: + if (debugSync) + printf(" MMC: DEFERRED PLAY\n"); + mtcState = 0; + mtcValid = false; + mtcLost = 0; + mtcSync = false; + //startPlay(); + alignAllTicks(); + audio->msgPlay(true); + playStateExt = true; + break; + + case 4: + printf("MMC: FF not implemented\n"); + playPendingFirstClock = false; + break; + case 5: + printf("MMC: REWIND not implemented\n"); + playPendingFirstClock = false; + break; + case 6: + printf("MMC: REC STROBE not implemented\n"); + playPendingFirstClock = false; + break; + case 7: + printf("MMC: REC EXIT not implemented\n"); + playPendingFirstClock = false; + break; + case 0xd: + printf("MMC: RESET not implemented\n"); + playPendingFirstClock = false; + break; + case 0x44: + if (p[5] == 0) { + printf("MMC: LOCATE IF not implemented\n"); + break; + } + else if (p[5] == 1) { + if (!checkAudioDevice()) return; + MTC mtc(p[6] & 0x1f, p[7], p[8], p[9], p[10]); + int type = (p[6] >> 5) & 3; + //int mmcPos = tempomap.frame2tick(lrint(mtc.time()*sampleRate)); + //int mmcPos = lrint(mtc.time()*sampleRate); + int mmcPos = lrint(mtc.time(type) * sampleRate); + + //Pos tp(mmcPos, true); + Pos tp(mmcPos, false); + //audioDevice->seekTransport(tp.frame()); + audioDevice->seekTransport(tp); + alignAllTicks(); + //seek(tp); + if (debugSync) { + //printf("MMC: %f %d seek ", mtc.time(), mmcPos); + printf("MMC: LOCATE mtc type:%d time:%lf frame:%d mtc: ", type, mtc.time(), mmcPos); + mtc.print(); + printf("\n"); + } + //write(sigFd, "G", 1); + break; + } + // fall through + default: + printf("MMC %x %x, unknown\n", p[3], p[4]); break; + } + } + +//--------------------------------------------------------- +// mtcInputQuarter +// process Quarter Frame Message +//--------------------------------------------------------- + +//void MidiSeq::mtcInputQuarter(int, unsigned char c) +void MidiSeq::mtcInputQuarter(int port, unsigned char c) + { + static int hour, min, sec, frame; + + // p3.3.28 + //printf("MidiSeq::mtcInputQuarter c:%h\n", c); + + 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 + int tmphour = hour; + int type = (hour >> 5) & 3; + hour &= 0x1f; + + if(mtcState == 8) + { + mtcValid = (mtcLost == 0); + mtcState = 0; + mtcLost = 0; + if(mtcValid) + { + mtcCurTime.set(hour, min, sec, frame); + if(port != -1) + { + MidiPort* mp = &midiPorts[port]; + MidiSyncInfo& msync = mp->syncInfo(); + msync.setRecMTCtype(type); + msync.trigMTCDetect(); + // Not for the current in port? External sync not turned on? MTC in not turned on? Forget it. + if(port == curMidiSyncInPort && extSyncFlag.value() && msync.MTCIn()) + { + if(debugSync) + printf("MidiSeq::mtcInputQuarter hour byte:%hx\n", tmphour); + mtcSyncMsg(mtcCurTime, type, !mtcSync); + } + } + mtcSync = true; + } + } + else if (mtcValid && (mtcLost == 0)) + { + //mtcCurTime.incQuarter(); + mtcCurTime.incQuarter(type); + //mtcSyncMsg(mtcCurTime, type, false); + } + } + +//--------------------------------------------------------- +// mtcInputFull +// process Frame Message +//--------------------------------------------------------- + +//void MidiSeq::mtcInputFull(const unsigned char* p, int n) +void MidiSeq::mtcInputFull(int port, const unsigned char* p, int n) + { + if (debugSync) + printf("mtcInputFull\n"); + //if (!extSyncFlag.value()) + // 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; + + // Added by Tim. + if(debugSync) + printf("mtcInputFull: time:%lf stime:%lf hour byte (all bits):%hx\n", mtcCurTime.time(), mtcCurTime.time(type), p[4]); + if(port != -1) + { + MidiPort* mp = &midiPorts[port]; + MidiSyncInfo& msync = mp->syncInfo(); + msync.setRecMTCtype(type); + msync.trigMTCDetect(); + // MTC in not turned on? Forget it. + //if(extSyncFlag.value() && msync.MTCIn()) + if(msync.MTCIn()) + { + //Pos tp(lrint(mtcCurTime.time() * sampleRate), false); + Pos tp(lrint(mtcCurTime.time(type) * sampleRate), false); + audioDevice->seekTransport(tp); + alignAllTicks(); + } + } + } + +//--------------------------------------------------------- +// nonRealtimeSystemSysex +//--------------------------------------------------------- + +//void MidiSeq::nonRealtimeSystemSysex(const unsigned char* p, int n) +void MidiSeq::nonRealtimeSystemSysex(int /*port*/, const unsigned char* p, int n) + { +// 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; + } + } + +//--------------------------------------------------------- +// 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 (midiInputTrace) + printf("set song position port:%d %d\n", port, midiBeat); + + //midiPorts[port].syncInfo().trigMCSyncDetect(); + midiPorts[port].syncInfo().trigMRTDetect(); + + //if (!extSyncFlag.value()) + // External sync not on? Clock in not turned on? + //if(!extSyncFlag.value() || !midiPorts[port].syncInfo().MCIn()) + if(!extSyncFlag.value() || !midiPorts[port].syncInfo().MRTIn()) + return; + + // Re-transmit song position to other devices if clock out turned on. + for(int p = 0; p < MIDI_PORTS; ++p) + //if(p != port && midiPorts[p].syncInfo().MCOut()) + if(p != port && midiPorts[p].syncInfo().MRTOut()) + midiPorts[p].sendSongpos(midiBeat); + + curExtMidiSyncTick = (config.division * midiBeat) / 4; + lastExtMidiSyncTick = curExtMidiSyncTick; + + //Pos pos((config.division * midiBeat) / 4, true); + Pos pos(curExtMidiSyncTick, true); + + if (!checkAudioDevice()) return; + + //audioDevice->seekTransport(pos.frame()); + audioDevice->seekTransport(pos); + alignAllTicks(pos.frame()); + if (debugSync) + printf("setSongPosition %d\n", pos.tick()); + } + + + +//--------------------------------------------------------- +// set all runtime variables to the "in sync" value +//--------------------------------------------------------- +void MidiSeq::alignAllTicks(int frameOverride) + { + //printf("alignAllTicks audioDriver->framePos=%d, audio->pos().frame()=%d\n", + // audioDevice->framePos(), audio->pos().frame()); + unsigned curFrame; + if (!frameOverride) + curFrame = audio->pos().frame(); + else + curFrame = frameOverride; + + int tempo = tempomap.tempo(0); + + // use the last old values to give start values for the tripple buffering + int recTickSpan = recTick1 - recTick2; + int songTickSpan = (int)(songtick1 - songtick2); //prevent compiler warning: casting double to int + storedtimediffs = 0; // pretend there is no sync history + + mclock2=mclock1=0.0; // set all clock values to "in sync" + + recTick = (int) ((double(curFrame)/double(sampleRate)) * + double(config.division * 1000000.0) / double(tempo) //prevent compiler warning: casting double to int + ); + songtick1 = recTick - songTickSpan; + if (songtick1 < 0) + songtick1 = 0; + songtick2 = songtick1 - songTickSpan; + if (songtick2 < 0) + songtick2 = 0; + recTick1 = recTick - recTickSpan; + if (recTick1 < 0) + recTick1 = 0; + recTick2 = recTick1 - recTickSpan; + if (recTick2 < 0) + recTick2 = 0; + if (debugSync) + printf("alignAllTicks curFrame=%d recTick=%d tempo=%.3f frameOverride=%d\n",curFrame,recTick,(float)((1000000.0 * 60.0)/tempo), frameOverride); + + } + +//--------------------------------------------------------- +// realtimeSystemInput +// real time message received +//--------------------------------------------------------- +void MidiSeq::realtimeSystemInput(int port, int c) + { + + 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; + // } + + MidiPort* mp = &midiPorts[port]; + + // Trigger on any tick, clock, or realtime command. + if(c == ME_TICK) // Tick + mp->syncInfo().trigTickDetect(); + else + if(c == ME_CLOCK) // Clock + mp->syncInfo().trigMCSyncDetect(); + else + mp->syncInfo().trigMRTDetect(); // Other + + // External sync not on? Clock in not turned on? Otherwise realtime in not turned on? + if(!extSyncFlag.value()) + return; + if(c == ME_CLOCK) + { + if(!mp->syncInfo().MCIn()) + return; + } + else + if(!mp->syncInfo().MRTIn()) + return; + + + switch(c) { + case ME_CLOCK: // midi clock (24 ticks / quarter note) + { + // Not for the current in port? Forget it. + if(port != curMidiSyncInPort) + break; + + // p3.3.31 + //printf("midi clock:%f\n", curTime()); + + // Re-transmit clock to other devices if clock out turned on. + // Must be careful not to allow more than one clock input at a time. + // Would re-transmit mixture of multiple clocks - confusing receivers. + // Solution: Added curMidiSyncInPort. + // Maybe in MidiSeq::processTimerTick(), call sendClock for the other devices, instead of here. + for(int p = 0; p < MIDI_PORTS; ++p) + if(p != port && midiPorts[p].syncInfo().MCOut()) + midiPorts[p].sendClock(); + + // p3.3.28 + if(playPendingFirstClock) + { + playPendingFirstClock = false; + // Hopefully the transport will be ready by now, the seek upon start should mean the + // audio prefetch has already finished or at least started... + // Must comfirm that play does not force a complete prefetch again, but don't think so... + if(!audio->isPlaying()) + audioDevice->startTransport(); + } + //else + // This part will be run on the second and subsequent clocks, after start. + // Can't check audio state, might not be playing yet, we might miss some increments. + //if(audio->isPlaying()) + if(playStateExt) + { + lastExtMidiSyncTime = curExtMidiSyncTime; + curExtMidiSyncTime = curTime(); + int div = config.division/24; + midiExtSyncTicks += div; + lastExtMidiSyncTick = curExtMidiSyncTick; + curExtMidiSyncTick += div; + } + +//BEGIN : Original code: + /* + 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; + } + } + + // Compare w audio if playing: + if (playStateExt == true ) { //audio->isPlaying() state == PLAY + //BEGIN standard setup: + recTick += config.division / 24; // The one we're syncing to + int tempo = tempomap.tempo(0); + unsigned curFrame = audio->pos().frame(); + double songtick = (double(curFrame)/double(sampleRate)) * + double(config.division * 1000000.0) / double(tempo); + + double scale = double(tdiff0/averagetimediff); + double tickdiff = songtick - ((double) recTick - 24 + scale*24.0); + + //END standard setup + if (debugSync) { + 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, curFrame=%d", + songtick, recTick, tickdiff, song_beat, sync_beat, scale, curFrame); + } + + //if ((mclock2 !=0.0) && (tdiff1 > 0.0) && fabs(tickdiff) > 0.5 && lastTempo != 0) { + if ((mclock2 !=0.0) && (tdiff1 > 0.0) && lastTempo != 0) { + // Interpolate: + double tickdiff1 = songtick1 - recTick1; + double tickdiff2 = songtick2 - recTick2; + double newtickdiff = (tickdiff1+tickdiff2)/250; + //tickdiff/5.0 + + tickdiff1/16.0 + + tickdiff2/24.0; //5 mins 30 secs on 116BPM, -p 512 jackd + + if (newtickdiff != 0.0) { + int newTempo = 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)); + //syncTempo = newTempo; + 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) { + mp->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 = 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)); + tempomap.setTempo(0, newTempo); + } + } + mclock2 = mclock1; + mclock1 = mclock0; + */ +//END : Original Code + +//BEGIN : Using external tempo map: + /* + 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; + } + } + + // Compare w audio if playing: + //if (playStateExt == true ) { //audio->isPlaying() state == PLAY + if (0) { + //BEGIN standard setup: + recTick += config.division / 24; // The one we're syncing to + int tempo = tempomap.tempo(0); + //unsigned curFrame = audio->pos().frame(); + //double songtick = (double(curFrame)/double(sampleRate)) * + // double(config.division * 1000000.0) / double(tempo); + double songtick = tempomap.curTickExt(mclock0); + + double scale = double(tdiff0/averagetimediff); + double tickdiff = songtick - ((double) recTick - 24 + scale*24.0); + + //END standard setup + if (debugSync) { + 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, curFrame=%d averagetimediff:%.3lf", + songtick, recTick, tickdiff, song_beat, sync_beat, scale, audio->pos().frame(), averagetimediff); + } + + //if ((mclock2 !=0.0) && (tdiff1 > 0.0) && fabs(tickdiff) > 0.5 && lastTempo != 0) { + if ((mclock2 !=0.0) && (tdiff1 > 0.0) && lastTempo != 0) { + // Interpolate: + double tickdiff1 = songtick1 - recTick1; + double tickdiff2 = songtick2 - recTick2; + double newtickdiff = (tickdiff1+tickdiff2)/250; + ////double newtickdiff = (tickdiff1+tickdiff2) / 10.0; + //double newtickdiff = tickdiff/5.0 + + // tickdiff1/16.0 + + // tickdiff2/24.0; //5 mins 30 secs on 116BPM, -p 512 jackd + + if (newtickdiff != 0.0) { + //int newTempo = tempomap.tempo(0); + int newTempo = tempo; + //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)); + //syncTempo = newTempo; + //tempomap.setTempo(0,newTempo); + // Don't set the last stable tempo. + //tempomap.setTempo(0, newTempo, false); + tempomap.setExtTempo(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) { + mp->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 = 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)); + //tempomap.setTempo(0, newTempo); + // Don't set the last stable tempo. + //tempomap.setTempo(0, newTempo, false); + // tempomap.setExtTempo(newTempo); + // } + + //double tempo0 = 24000000.0 * tdiff0; + //double tempo1 = 24000000.0 * tdiff1; + //int newTempo = int((tempo0 + tempo1) / 2.0); + int newTempo = int(averagetimediff * 24000000.0); + if(debugSync) + printf("setting new tempo %d = %f\n", newTempo, (float)((1000000.0 * 60.0)/newTempo)); + tempomap.setExtTempo(newTempo); + } + + mclock2 = mclock1; + mclock1 = mclock0; + */ +//END : Using external tempo map + + } + break; + case ME_TICK: // midi tick (every 10 msec) + // FIXME: Unfinished? mcStartTick is uninitialized and Song::setPos doesn't set it either. Dangerous to allow this. + //if (mcStart) { + // song->setPos(0, mcStartTick); + // mcStart = false; + // return; + // } + break; + case ME_START: // start + // Re-transmit start to other devices if clock out turned on. + for(int p = 0; p < MIDI_PORTS; ++p) + //if(p != port && midiPorts[p].syncInfo().MCOut()) + if(p != port && midiPorts[p].syncInfo().MRTOut()) + { + // p3.3.31 + // If we aren't rewinding on start, there's no point in re-sending start. + // Re-send continue instead, for consistency. + if(midiPorts[port].syncInfo().recRewOnStart()) + midiPorts[p].sendStart(); + else + midiPorts[p].sendContinue(); + } + if (debugSync) + printf(" start\n"); + + // p3.3.31 + //printf("midi start:%f\n", curTime()); + + if (1 /* !audio->isPlaying()*/ /*state == IDLE*/) { + if (!checkAudioDevice()) return; + + // p3.3.31 + // Rew on start option. + if(midiPorts[port].syncInfo().recRewOnStart()) + { + curExtMidiSyncTick = 0; + lastExtMidiSyncTick = curExtMidiSyncTick; + //audioDevice->seekTransport(0); + audioDevice->seekTransport(Pos(0, false)); + } + + //unsigned curFrame = audio->curFrame(); + //if (debugSync) + // printf(" curFrame=%d\n", curFrame); + + alignAllTicks(); + //if (debugSync) + // printf(" curFrame: %d curTick: %d tempo: %d\n", curFrame, recTick, tempomap.tempo(0)); + + storedtimediffs = 0; + for (int i=0; i<24; i++) + timediff[i] = 0.0; + + // p3.3.26 1/23/10 + // Changed because msgPlay calls audioDevice->seekTransport(song->cPos()) + // and song->cPos() may not be changed to 0 yet, causing tranport not to go to 0. + //audio->msgPlay(true); + //audioDevice->startTransport(); + // p3.3.28 + playPendingFirstClock = true; + + midiExtSyncTicks = 0; + playStateExt = true; + } + break; + case ME_CONTINUE: // continue + // Re-transmit continue to other devices if clock out turned on. + for(int p = 0; p < MIDI_PORTS; ++p) + //if(p != port && midiPorts[p].syncInfo().MCOut()) + if(p != port && midiPorts[p].syncInfo().MRTOut()) + midiPorts[p].sendContinue(); + + if (debugSync) + printf("realtimeSystemInput continue\n"); + + // p3.3.31 + //printf("continue:%f\n", curTime()); + + if (1 /* !audio->isPlaying() */ /*state == IDLE */) { + //unsigned curFrame = audio->curFrame(); + //recTick = tempomap.frame2tick(curFrame); // don't think this will work... (ml) + //alignAllTicks(); + + // p3.3.28 + //audio->msgPlay(true); + // p3.3.31 + // Begin incrementing immediately upon first clock reception. + playPendingFirstClock = true; + + playStateExt = true; + } + break; + case ME_STOP: // stop + { + // p3.3.35 + // Stop the increment right away. + midiExtSyncTicks = 0; + playStateExt = false; + playPendingFirstClock = false; + + // Re-transmit stop to other devices if clock out turned on. + for(int p = 0; p < MIDI_PORTS; ++p) + //if(p != port && midiPorts[p].syncInfo().MCOut()) + if(p != port && midiPorts[p].syncInfo().MRTOut()) + midiPorts[p].sendStop(); + + //playPendingFirstClock = false; + + //lastStoppedBeat = (audio->tickPos() * 4) / config.division; + //curExtMidiSyncTick = (config.division * lastStoppedBeat) / 4; + + // p3.3.31 + //printf("stop:%f\n", curTime()); + + if (audio->isPlaying() /*state == PLAY*/) { + audio->msgPlay(false); + //playStateExt = false; + } + + if (debugSync) + printf("realtimeSystemInput stop\n"); + + // Just in case the process still runs a cycle or two and causes the + // audio tick position to increment, reset the incrementer and force + // the transport position to what the hardware thinks is the current position. + //midiExtSyncTicks = 0; + //Pos pos((config.division * lastStoppedBeat) / 4, true); + //Pos pos(curExtMidiSyncTick, true); + //audioDevice->seekTransport(pos); + } + + break; + //case 0xfd: // unknown + //case ME_SENSE: // active sensing + //case ME_META: // system reset (reset is 0xff same enumeration as file meta event) + default: + break; + } + + } + +//--------------------------------------------------------- +// mtcSyncMsg +// process received mtc Sync +// seekFlag - first complete mtc frame received after +// start +//--------------------------------------------------------- + +void MidiSeq::mtcSyncMsg(const MTC& mtc, int type, bool seekFlag) + { + double time = mtc.time(); + double stime = mtc.time(type); + if (debugSync) + printf("MidiSeq::mtcSyncMsg time:%lf stime:%lf seekFlag:%d\n", time, stime, seekFlag); + + if (seekFlag && audio->isRunning() /*state == START_PLAY*/) { +// int tick = tempomap.time2tick(time); + //state = PLAY; + //write(sigFd, "1", 1); // say PLAY to gui + if (!checkAudioDevice()) return; + if (debugSync) + printf("MidiSeq::mtcSyncMsg starting transport.\n"); + audioDevice->startTransport(); + return; + } + + /*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); + */ + } + + diff --git a/muse2/muse/sync.h b/muse2/muse/sync.h new file mode 100644 index 00000000..d6a08f0d --- /dev/null +++ b/muse2/muse/sync.h @@ -0,0 +1,153 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: sync.h,v 1.1.1.1.2.2 2009/04/01 01:37:11 terminator356 Exp $ +// +// (C) Copyright 2003 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __SYNC_H__ +#define __SYNC_H__ + +#include "mtc.h" +#include "value.h" +#include "globaldefs.h" + +class Xml; +//class MidiDevice; + +//class MidiSyncPort +class MidiSyncInfo +{ + private: + int _port; + + int _idOut; + int _idIn; + + bool _sendMC; + bool _sendMRT; + bool _sendMMC; + bool _sendMTC; + bool _recMC; + bool _recMRT; + bool _recMMC; + bool _recMTC; + + int _recMTCtype; + + bool _recRewOnStart; + //bool _sendContNotStart; + + double _lastClkTime; + double _lastTickTime; + double _lastMRTTime; + double _lastMMCTime; + double _lastMTCTime; + double _lastActTime[MIDI_CHANNELS]; + bool _clockTrig; + bool _tickTrig; + bool _MRTTrig; + bool _MMCTrig; + bool _MTCTrig; + bool _actTrig[MIDI_CHANNELS]; + bool _clockDetect; + bool _tickDetect; + bool _MRTDetect; + bool _MMCDetect; + bool _MTCDetect; + bool _actDetect[MIDI_CHANNELS]; + int _actDetectBits; + + public: + MidiSyncInfo(); + MidiSyncInfo& operator= (const MidiSyncInfo &sp); + MidiSyncInfo& copyParams(const MidiSyncInfo &sp); + + int port() const { return _port; } + void setPort(const int p) { _port = p; } + + int idOut() const { return _idOut; } + int idIn() const { return _idIn; } + void setIdOut(const int v) { _idOut = v; } + void setIdIn(const int v) { _idIn = v; } + + bool MCOut() const { return _sendMC; } + bool MRTOut() const { return _sendMRT; } + bool MMCOut() const { return _sendMMC; } + bool MTCOut() const { return _sendMTC; } + + bool MCIn() const { return _recMC; } + bool MRTIn() const { return _recMRT; } + bool MMCIn() const { return _recMMC; } + bool MTCIn() const { return _recMTC; } + + void setMCOut(const bool v) { _sendMC = v; } + void setMRTOut(const bool v) { _sendMRT = v; } + void setMMCOut(const bool v) { _sendMMC = v; } + void setMTCOut(const bool v) { _sendMTC = v; } + + void setMCIn(const bool v); + void setMRTIn(const bool v); + void setMMCIn(const bool v); + void setMTCIn(const bool v); + + void setTime(); + + bool recRewOnStart() const { return _recRewOnStart; } + void setRecRewOnStart(const bool v) { _recRewOnStart = v; } + //bool sendContNotStart() const { return _sendContNotStart; } + //void setSendContNotStart(const bool v) { _sendContNotStart = v; } + + bool MCSyncDetect() const { return _clockDetect; } + void trigMCSyncDetect(); + + bool tickDetect() const { return _tickDetect; } + void trigTickDetect(); + + bool MTCDetect() const { return _MTCDetect; } + void trigMTCDetect(); + int recMTCtype() const { return _recMTCtype; } + void setRecMTCtype(int t) { _recMTCtype = t; } + + bool MRTDetect() const { return _MRTDetect; } + void trigMRTDetect(); + + bool MMCDetect() const { return _MMCDetect; } + void trigMMCDetect(); + + int actDetectBits() const { return _actDetectBits; } + bool actDetect(const int ch) const; + void trigActDetect(const int ch); + + void read(Xml& xml); + //void write(int level, Xml& xml, MidiDevice* md); + void write(int level, Xml& xml); +}; + +//extern MidiSync midiSyncPorts[MIDI_PORTS]; + +extern bool debugSync; + +//extern int rxSyncPort; +//extern int txSyncPort; +//extern int rxDeviceId; +//extern int txDeviceId; + +extern int mtcType; +extern MTC mtcOffset; +extern BValue 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; +extern int volatile curMidiSyncInPort; +extern BValue useJackTransport; +extern bool volatile jackTransportMaster; +extern unsigned int syncSendFirstClockDelay; // In milliseconds. + + +#endif + diff --git a/muse2/muse/synth.cpp b/muse2/muse/synth.cpp new file mode 100644 index 00000000..352be582 --- /dev/null +++ b/muse2/muse/synth.cpp @@ -0,0 +1,947 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: synth.cpp,v 1.43.2.23 2009/12/15 03:39:58 terminator356 Exp $ +// (C) Copyright 2000-2003 Werner Schweer (ws@seh.de) +//========================================================= + +#include "config.h" +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include "app.h" +#include "synth.h" +#include "xml.h" +#include "midi.h" +#include "midiport.h" +#include "mididev.h" +#include "libsynti/mess.h" +#include "song.h" +#include "audio.h" +#include "event.h" +#include "mpevent.h" +#include "audio.h" +#include "midiseq.h" +#include "midictrl.h" +//#include "stringparam.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; + } + +MidiPlayEvent MessSynthIF::receiveEvent() + { + if (_mess) + return _mess->receiveEvent(); + return MidiPlayEvent(); + } + +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 +//--------------------------------------------------------- + +//static Synth* findSynth(const QString& sclass) +static Synth* findSynth(const QString& sclass, const QString& label) + { + for (std::vector::iterator i = synthis.begin(); + i != synthis.end(); ++i) + { + //if ((*i)->baseName() == sclass) + //if ((*i)->name() == sclass) + if ( ((*i)->baseName() == sclass) && (label.isEmpty() || ((*i)->name() == label)) ) + + return *i; + } + printf("synthi class:%s label:%s not found\n", sclass.latin1(), label.latin1()); + return 0; + } + +//--------------------------------------------------------- +// createSynthInstance +// create a synthesizer instance of class "label" +//--------------------------------------------------------- + +//static SynthI* createSynthI(const QString& sclass) +static SynthI* createSynthInstance(const QString& sclass, const QString& label) + { + //Synth* s = findSynth(sclass); + Synth* s = findSynth(sclass, label); + SynthI* si = 0; + if (s) { + si = new SynthI(); + QString n; + n.setNum(s->instances()); + //QString instance_name = s->baseName() + "-" + n; + QString instance_name = s->name() + "-" + n; + + if (si->initInstance(s, instance_name)) { + delete si; + return 0; + } + } + else + printf("createSynthInstance: synthi class:%s label:%s not found\n", sclass.latin1(), label.latin1()); + return si; + } + +//--------------------------------------------------------- +// Synth +//--------------------------------------------------------- + +//Synth::Synth(const QFileInfo& fi) +// : info(fi) +//Synth::Synth(const QFileInfo& fi, QString label) +// : info(fi), _name(label) +Synth::Synth(const QFileInfo& fi, QString label, QString descr, QString maker, QString ver) + : info(fi), _name(label), _description(descr), _maker(maker), _version(ver) + { + _instances = 0; + } + +//--------------------------------------------------------- +// instantiate +//--------------------------------------------------------- + +//void* MessSynth::instantiate() +void* MessSynth::instantiate(const QString& instanceName) + { + ++_instances; + + //QString n; + //n.setNum(_instances); + //QString instanceName = baseName() + "-" + n; + + doSetuid(); + const char* path = info.filePath().latin1(); + + // load Synti dll + void* handle = dlopen(path, RTLD_NOW); + if (handle == 0) { + fprintf(stderr, "Synth::instantiate: dlopen(%s) failed: %s\n", + path, dlerror()); + undoSetuid(); + 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", + info.filePath().ascii(), txt); + undoSetuid(); + return 0; + } + } + _descr = msynth(); + if (_descr == 0) { + fprintf(stderr, "Synth::instantiate: no MESS descr found\n"); + undoSetuid(); + return 0; + } + Mess* mess = _descr->instantiate(sampleRate, muse, &museProject, instanceName.latin1()); + undoSetuid(); + return mess; + } + +//--------------------------------------------------------- +// SynthI +//--------------------------------------------------------- + +SynthI::SynthI() + : AudioTrack(AUDIO_SOFTSYNTH) + { + synthesizer = 0; + _sif = 0; + _rwFlags = 1; + _openFlags = 1; + _readEnable = false; + _writeEnable = false; + + _curBankH = 0; + _curBankL = 0; + _curProgram = 0; + + setVolume(1.0); + setPan(0.0); + } + +//--------------------------------------------------------- +// open +//--------------------------------------------------------- + +QString SynthI::open() +{ + // Make it behave like a regular midi device. + _readEnable = false; + _writeEnable = (_openFlags & 0x01); + + return QString("OK"); +} + +//--------------------------------------------------------- +// close +//--------------------------------------------------------- + +void SynthI::close() +{ + _readEnable = false; + _writeEnable = false; +} + +//--------------------------------------------------------- +// putMidiEvent +//--------------------------------------------------------- + +bool SynthI::putEvent(const MidiPlayEvent& ev) +//bool SynthI::putMidiEvent(const MidiPlayEvent& ev) +{ + if(_writeEnable) + return _sif->putEvent(ev); + + // Hmm, act as if the event went through? + //return true; + return false; +} + +//--------------------------------------------------------- +// setName +//--------------------------------------------------------- + +void SynthI::setName(const QString& s) + { + AudioTrack::setName(s); + MidiDevice::setName(s); + } + +//--------------------------------------------------------- +// currentProg +//--------------------------------------------------------- + +void SynthI::currentProg(unsigned long *prog, unsigned long *bankL, unsigned long *bankH) +{ + if(prog) + *prog = _curProgram; + if(bankL) + *bankL = _curBankL; + if(bankH) + *bankH = _curBankH; +} + +//--------------------------------------------------------- +// init +//--------------------------------------------------------- + +//bool MessSynthIF::init(Synth* s) +bool MessSynthIF::init(Synth* s, SynthI* si) + { + //_mess = (Mess*)s->instantiate(); + _mess = (Mess*)((MessSynth*)s)->instantiate(si->name()); + + return (_mess == 0); + } + +int MessSynthIF::channels() const + { + return _mess->channels(); + } + +int MessSynthIF::totalOutChannels() const + { + return _mess->channels(); + } + +int MessSynthIF::totalInChannels() const + { + return 0; + } + +//SynthIF* MessSynth::createSIF() const +SynthIF* MessSynth::createSIF(SynthI* si) + { + //return new MessSynthIF(si); + + MessSynthIF* sif = new MessSynthIF(si); + sif->init(this, si); + return sif; + } + +//--------------------------------------------------------- +// initInstance +// returns false on success +//--------------------------------------------------------- + +bool SynthI::initInstance(Synth* s, const QString& instanceName) + { + synthesizer = s; + //sif = s->createSIF(); + //_sif = s->createSIF(this); + + //sif->init(s); + + setName(instanceName); // set midi device name + setIName(instanceName); // set instrument name + _sif = s->createSIF(this); + + // p3.3.38 + //AudioTrack::setChannels(_sif->channels()); + AudioTrack::setTotalOutChannels(_sif->totalOutChannels()); + AudioTrack::setTotalInChannels(_sif->totalInChannels()); + + //--------------------------------------------------- + // read available controller from synti + //--------------------------------------------------- + + int id = 0; + MidiControllerList* cl = MidiInstrument::controller(); + for (;;) { + const char* name; + int ctrl; + int min; + int max; + int initval = CTRL_VAL_UNKNOWN; + id = _sif->getControllerInfo(id, &name, &ctrl, &min, &max, &initval); +// printf("looking for params\n"); + if (id == 0) + break; +// printf("got parameter:: %s\n", name); + + + // Added by T356. Override existing program controller. + iMidiController i = cl->end(); + if(ctrl == CTRL_PROGRAM) + { + for(i = cl->begin(); i != cl->end(); ++i) + { + if(i->second->num() == CTRL_PROGRAM) + { + delete i->second; + cl->erase(i); + + break; + } + } + } + + MidiController* c = new MidiController(QString(name), ctrl, min, max, initval); + cl->add(c); + } + + EventList* iel = midiState(); + if (!iel->empty()) { + for (iEvent i = iel->begin(); i != iel->end(); ++i) { + Event ev = i->second; + MidiPlayEvent pev(0, 0, 0, ev); + if (_sif->putEvent(pev)) + break; // try later + } + iel->clear(); + } + + unsigned long idx = 0; + for (std::vector::iterator i = initParams.begin(); i != initParams.end(); ++i, ++idx) + _sif->setParameter(idx, *i); + + // p3.3.40 Since we are done with the (sometimes huge) initial parameters list, clear it. + // TODO: Decide: Maybe keep them around for a 'reset to previously loaded values' (revert) command? ... + initParams.clear(); + + return false; + } + +//--------------------------------------------------------- +// getControllerInfo +//--------------------------------------------------------- + +int MessSynthIF::getControllerInfo(int id, const char** name, int* ctrl, int* min, int* max, int* initval) + { + return _mess->getControllerInfo(id, name, ctrl, min, max, initval); + } + +//--------------------------------------------------------- +// SynthI::deactivate +//--------------------------------------------------------- + +void SynthI::deactivate2() + { + removeMidiInstrument(this); + midiDevices.remove(this); + if (midiPort() != -1) { + // synthi is attached + midiPorts[midiPort()].setMidiDevice(0); + } + } +//--------------------------------------------------------- +// deactivate3 +//--------------------------------------------------------- + +void SynthI::deactivate3() + { + _sif->deactivate3(); + // Moved below by Tim. p3.3.14 + //synthesizer->incInstances(-1); + + if(debugMsg) + printf("SynthI::deactivate3 deleting _sif...\n"); + + delete _sif; + _sif = 0; + + if(debugMsg) + printf("SynthI::deactivate3 decrementing synth instances...\n"); + + synthesizer->incInstances(-1); + } + +void MessSynthIF::deactivate3() + { + if (_mess) { + delete _mess; + _mess = 0; + } + } + +//--------------------------------------------------------- +// ~SynthI +//--------------------------------------------------------- + +SynthI::~SynthI() + { + deactivate2(); + deactivate3(); + } + +//--------------------------------------------------------- +// initMidiSynth +// search for software synthis and advertise +//--------------------------------------------------------- + +void initMidiSynth() + { + QString s = museGlobalLib + "/synthi"; + + QDir pluginDir(s, QString("*.so")); // ddskrjo + if (debugMsg) + printf("searching for software synthesizer in <%s>\n", s.latin1()); + if (pluginDir.exists()) { + QFileInfoList list = pluginDir.entryInfoList(); + QFileInfoListIterator it=list.begin(); + QFileInfo* fi; + while(it!=list.end()) { + fi = &*it; + + //doSetuid(); + const char* path = fi->filePath().latin1(); + + // load Synti dll + void* handle = dlopen(path, RTLD_NOW); + if (handle == 0) { + //fprintf(stderr, "initMidiSynth: dlopen(%s) failed: %s\n", + // path, dlerror()); + //undoSetuid(); + //return 0; + ++it; + continue; + } + 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", + // info.filePath().ascii(), txt); + //undoSetuid(); + //return 0; + // } + dlclose(handle); + ++it; + continue; + } + const MESS* descr = msynth(); + if (descr == 0) { + //fprintf(stderr, "Synth::instantiate: no MESS descr found\n"); + //undoSetuid(); + //return 0; + dlclose(handle); + ++it; + continue; + } + //Mess* mess = descr->instantiate(sampleRate, muse, &museProject, instanceName.latin1()); + //undoSetuid(); + + + + + //synthis.push_back(new MessSynth(*fi)); + synthis.push_back(new MessSynth(*fi, QString(descr->name), QString(descr->description), QString(""), QString(descr->version))); + + dlclose(handle); + ++it; + } + if (debugMsg) + printf("%zd soft synth found\n", synthis.size()); + } + } + +//--------------------------------------------------------- +// createSynthI +// create a synthesizer instance of class "label" +//--------------------------------------------------------- + +//SynthI* Song::createSynthI(const QString& sclass) +SynthI* Song::createSynthI(const QString& sclass, const QString& label) + { + //printf("Song::createSynthI calling ::createSynthI class:%s\n", sclass.latin1()); + + //SynthI* si = ::createSynthI(sclass); + //SynthI* si = ::createSynthI(sclass, label); + SynthI* si = createSynthInstance(sclass, label); + if(!si) + return 0; + //printf("Song::createSynthI created SynthI. Before insertTrack1...\n"); + + insertTrack1(si, -1); + //printf("Song::createSynthI after insertTrack1. Before msgInsertTrack...\n"); + + msgInsertTrack(si, -1, true); // add to instance list + //printf("Song::createSynthI after msgInsertTrack. Before insertTrack3...\n"); + + insertTrack3(si, -1); + + //printf("Song::createSynthI after insertTrack3. Adding default routes...\n"); + + OutputList* ol = song->outputs(); + // add default route to master (first audio output) + if (!ol->empty()) { + AudioOutput* ao = ol->front(); + // p3.3.38 + //audio->msgAddRoute(Route(si, -1), Route(ao, -1)); + //audio->msgAddRoute(Route((AudioTrack*)si, -1), Route(ao, -1)); + // Make sure the route channel and channels are valid. + audio->msgAddRoute(Route((AudioTrack*)si, 0, ((AudioTrack*)si)->channels()), Route(ao, 0, ((AudioTrack*)si)->channels())); + + audio->msgUpdateSoloStates(); + } + + // Now that the track has been added to the lists in insertTrack2(), + // if it's a dssi synth, OSC can find the synth, and initialize (and show) its native gui. + // No, initializing OSC without actually showing the gui doesn't work, at least for + // dssi-vst plugins - without showing the gui they exit after ten seconds. + //si->initGui(); + + return si; + } + +//--------------------------------------------------------- +// write +//--------------------------------------------------------- + +void SynthI::write(int level, Xml& xml) const + { + xml.tag(level++, "SynthI"); + AudioTrack::writeProperties(level, xml); + xml.strTag(level, "class", synth()->baseName()); + + // To support plugins like dssi-vst where all the baseNames are the same 'dssi-vst' and the label is the name of the dll file. + // Added by Tim. p3.3.16 + xml.strTag(level, "label", synth()->name()); + + //--------------------------------------------- + // if soft synth is attached to a midi port, + // write out port number + //--------------------------------------------- + + if (midiPort() != -1) + xml.intTag(level, "port", midiPort()); + + if (hasGui()) { + xml.intTag(level, "guiVisible", guiVisible()); + int x, y, w, h; + w = 0; + h = 0; + getGeometry(&x, &y, &w, &h); + if (h || w) + xml.qrectTag(level, "geometry", QRect(x, y, w, h)); + } + + _stringParamMap.write(level, xml, "stringParam"); + + xml.tag(level, "curProgram bankH=\"%ld\" bankL=\"%ld\" prog=\"%ld\"/", _curBankH, _curBankL, _curProgram); + + _sif->write(level, xml); + xml.etag(level, "SynthI"); + } + +void MessSynthIF::write(int level, Xml& xml) const + { + //--------------------------------------------- + // dump current state of synth + //--------------------------------------------- + + int len = 0; + const unsigned char* p; + _mess->getInitData(&len, &p); + if (len) { + xml.tag(level++, "midistate"); + xml.nput(level++, "\n", len); + xml.nput(level, ""); + for (int i = 0; i < len; ++i) { + if (i && ((i % 16) == 0)) { + xml.nput("\n"); + xml.nput(level, ""); + } + xml.nput("%02x ", p[i] & 0xff); + } + xml.nput("\n"); + xml.tag(level--, "/event"); + xml.etag(level--, "midistate"); + } + } + +//--------------------------------------------------------- +// SynthI::readProgram +//--------------------------------------------------------- + +void SynthI::readProgram(Xml& xml, const QString& name) +{ + for (;;) + { + Xml::Token token = xml.parse(); + const QString tag = xml.s1(); + switch (token) + { + case Xml::Error: + case Xml::End: + return; + case Xml::TagStart: + xml.unknown(name); + break; + case Xml::Attribut: + if(tag == "bankH") + _curBankH = xml.s2().toUInt(); + else + if(tag == "bankL") + _curBankL = xml.s2().toUInt(); + else + if(tag == "prog") + _curProgram = xml.s2().toUInt(); + else + xml.unknown(name); + break; + case Xml::TagEnd: + if(tag == name) + return; + default: + break; + } + } +} + +//--------------------------------------------------------- +// SynthI::read +//--------------------------------------------------------- + +void SynthI::read(Xml& xml) + { + QString sclass; + QString label; + + int port = -1; + bool startgui = false; + QRect r; + + for (;;) { + Xml::Token token = xml.parse(); + const QString tag = xml.s1(); + switch (token) { + case Xml::Error: + case Xml::End: + return; + case Xml::TagStart: + if (tag == "class") + sclass = xml.parse1(); + else if (tag == "label") + label = xml.parse1(); + else if (tag == "port") + port = xml.parseInt(); + else if (tag == "guiVisible") + startgui = xml.parseInt(); + else if (tag == "midistate") + readMidiState(xml); + else if (tag == "param") { + float val = xml.parseFloat(); + initParams.push_back(val); + } + else if (tag == "stringParam") + _stringParamMap.read(xml, tag); + else if (tag == "curProgram") + readProgram(xml, tag); + else if (tag == "geometry") + r = readGeometry(xml, tag); + else if (AudioTrack::readProperties(xml, tag)) + xml.unknown("softSynth"); + break; + case Xml::TagEnd: + if (tag == "SynthI") { + //Synth* s = findSynth(sclass); + Synth* s = findSynth(sclass, label); + if (s == 0) + return; + if (initInstance(s, name())) + return; + song->insertTrack0(this, -1); + if (port != -1 && port < MIDI_PORTS) + midiPorts[port].setMidiDevice(this); + + // Now that the track has been added to the lists in insertTrack2(), + // if it's a dssi synth, OSC can find the synth, and initialize (and show) its native gui. + // No, initializing OSC without actually showing the gui doesn't work, at least for + // dssi-vst plugins - without showing the gui they exit after ten seconds. + //initGui(); + showGui(startgui); + setGeometry(r.x(), r.y(), r.width(), r.height()); + + mapRackPluginsToControllers(); + + // Now that the track has been added to the lists in insertTrack2(), if it's a dssi synth + // OSC can find the track and its plugins, and start their native guis if required... + showPendingPluginNativeGuis(); + + return; + } + default: + break; + } + } + AudioTrack::mapRackPluginsToControllers(); + } + +//--------------------------------------------------------- +// getPatchName +//--------------------------------------------------------- + +const char* MessSynthIF::getPatchName(int channel, int prog, MType type, bool drum) + { + if (_mess) + { + //return _mess->getPatchName(channel, prog, type, drum); + const char* s = _mess->getPatchName(channel, prog, type, drum); + if(s) + return s; + } + return ""; + } + +//--------------------------------------------------------- +// populatePatchPopup +//--------------------------------------------------------- + +void MessSynthIF::populatePatchPopup(Q3PopupMenu* menu, int ch, MType, bool) + { + menu->clear(); + const MidiPatch* mp = _mess->getPatchInfo(ch, 0); + while (mp) { + int id = ((mp->hbank & 0xff) << 16) + + ((mp->lbank & 0xff) << 8) + mp->prog; + /* + int pgid = ((mp->hbank & 0xff) << 8) | (mp->lbank & 0xff) | 0x40000000; + int itemnum = menu->indexOf(pgid); + if(itemnum == -1) + { + QPopupMenu* submenu = new QPopupMenu(menu); + itemnum = + } + */ + menu->insertItem(QString(mp->name), id); + mp = _mess->getPatchInfo(ch, mp); + } + } + +//--------------------------------------------------------- +// preProcessAlways +//--------------------------------------------------------- + +void SynthI::preProcessAlways() +{ + if(_sif) + _sif->preProcessAlways(); + _processed = false; +} + +void MessSynthIF::preProcessAlways() +{ + if(_mess) + _mess->processMessages(); +} + +//--------------------------------------------------------- +// getData +//--------------------------------------------------------- + +bool SynthI::getData(unsigned pos, int ports, unsigned n, float** buffer) + { + for (int k = 0; k < ports; ++k) + memset(buffer[k], 0, n * sizeof(float)); + + int p = midiPort(); + MidiPort* mp = (p != -1) ? &midiPorts[p] : 0; + MPEventList* el = playEvents(); + + iMPEvent ie = nextPlayEvent(); + + ie = _sif->getData(mp, el, ie, pos, ports, n, buffer); + + setNextPlayEvent(ie); + return true; + } + +iMPEvent MessSynthIF::getData(MidiPort* mp, MPEventList* el, iMPEvent i, unsigned pos, int /*ports*/, unsigned n, float** buffer) +{ + //prevent compiler warning: comparison of signed/unsigned + int curPos = pos; + int endPos = pos + n; + int off = pos; + int frameOffset = audio->getFrameOffset(); + + for (; i != el->end(); ++i) { + int evTime = i->time(); + if (evTime == 0) { + // printf("MessSynthIF::getData - time is 0!\n"); + // continue; + evTime=frameOffset; // will cause frame to be zero, problem? + } + int frame = evTime - frameOffset; + +//TODO if (frame > 0) // robert: ugly fix, don't really know what is going on here +// // makes PPC work much better. + + if (frame >= endPos) { + printf("frame > endPos!! frame = %d >= endPos %d, i->time() %d, frameOffset %d curPos=%d\n", frame, endPos, i->time(), frameOffset,curPos); + continue; + } + + if (frame > curPos) { + if (frame < pos) + printf("should not happen: missed event %d\n", pos -frame); + else + { + if (!_mess) + printf("should not happen - no _mess\n"); + else + { + _mess->process(buffer, curPos-pos, frame - curPos); + } + } + curPos = frame; + } + if (mp) + mp->sendEvent(*i); + else { + if (putEvent(*i)) + break; + } + } + if (endPos - curPos) + { + if (!_mess) + printf("should not happen - no _mess\n"); + else + { + _mess->process(buffer, curPos - off, endPos - curPos); + } + } + return i; +} + +//--------------------------------------------------------- +// putEvent +// return true on error (busy) +//--------------------------------------------------------- + +bool MessSynthIF::putEvent(const MidiPlayEvent& ev) + { + if (midiOutputTrace) + ev.dump(); + if (_mess) + return _mess->processEvent(ev); + return true; + } diff --git a/muse2/muse/synth.h b/muse2/muse/synth.h new file mode 100644 index 00000000..627d276f --- /dev/null +++ b/muse2/muse/synth.h @@ -0,0 +1,290 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: synth.h,v 1.22.2.12 2009/12/06 10:05:00 terminator356 Exp $ +// (C) Copyright 2000-2004 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __SYNTH_H__ +#define __SYNTH_H__ + +#include +//Added by qt3to4: +#include +#include +#include +#include + +#include "globals.h" +#include "node.h" +#include "instruments/minstrument.h" +#include "mididev.h" +#include "midiport.h" +#include "track.h" +#include "stringparam.h" + +//class MidiEvent; +class MidiPlayEvent; +class Mess; +struct MESS; + +class SynthI; +class SynthIF; + +//--------------------------------------------------------- +// Synth +// software synthesizer +//--------------------------------------------------------- + +class Synth { + protected: + QFileInfo info; + int _instances; + QString _name; + QString _description; + QString _maker; + QString _version; + + public: + //Synth(const QFileInfo& fi); + //Synth(const QFileInfo& fi, QString label); + Synth(const QFileInfo& fi, QString label, QString descr, QString maker, QString ver); + + 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 baseName(bool complete = true) /*const*/ { return info.baseName(complete); } // ddskrjo + QString name() const { return _name; } + QString dirPath(bool complete = true) const { return info.dirPath(complete); } + QString filePath() const { return info.filePath(); } + QString description() const { return _description; } + QString version() const { return _version; } + //QString maker() const { return _version; } ?? + QString maker() const { return _maker; } + + //virtual void* instantiate() = 0; + + //virtual SynthIF* createSIF() const = 0; + virtual SynthIF* createSIF(SynthI*) = 0; + }; + +//--------------------------------------------------------- +// MessSynth +//--------------------------------------------------------- + +class MessSynth : public Synth { + const MESS* _descr; + + public: + //MessSynth(const QFileInfo& fi) : Synth(fi) { descr = 0; } + //MessSynth(const QFileInfo& fi) : Synth(fi, fi.baseName()) { descr = 0; } + MessSynth(const QFileInfo& fi, QString label, QString descr, QString maker, QString ver) : + Synth(fi, label, descr, maker, ver) { _descr = 0; } + + virtual ~MessSynth() {} + //virtual const char* description() const; + //virtual const char* version() const; + + //virtual void* instantiate(); + virtual void* instantiate(const QString&); + + //virtual SynthIF* createSIF() const; + virtual SynthIF* createSIF(SynthI*); + }; + +class Mess; + +//--------------------------------------------------------- +// SynthIF +// synth instance interface +//--------------------------------------------------------- + +class SynthIF { + protected: + SynthI* synti; + + public: + //SynthIF() {} + SynthIF(SynthI* s) { synti = s; } + virtual ~SynthIF() {} + + virtual bool initGui() = 0; + virtual void guiHeartBeat() = 0; + 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 preProcessAlways() = 0; + virtual iMPEvent getData(MidiPort*, MPEventList*, iMPEvent, unsigned pos, int ports, unsigned n, float** buffer) = 0; + virtual bool putEvent(const MidiPlayEvent& ev) = 0; + virtual MidiPlayEvent receiveEvent() = 0; + virtual int eventsPending() const = 0; + + //virtual bool init(Synth* s) = 0; + + virtual int channels() const = 0; + virtual int totalOutChannels() const = 0; + virtual int totalInChannels() const = 0; + virtual void deactivate3() = 0; + virtual const char* getPatchName(int, int, int, bool) const = 0; + virtual const char* getPatchName(int, int, MType, bool) = 0; + virtual void populatePatchPopup(Q3PopupMenu*, int, MType, bool) = 0; + virtual void write(int level, Xml& xml) const = 0; + virtual float getParameter(unsigned long idx) const = 0; + virtual void setParameter(unsigned long idx, float value) = 0; + virtual int getControllerInfo(int id, const char** name, int* ctrl, int* min, int* max, int* initval) = 0; + }; + +//--------------------------------------------------------- +// SynthI +// software synthesizer instance +// Track +// MidiDevice +// MidiInstrument +//--------------------------------------------------------- + +class SynthI : public AudioTrack, public MidiDevice, + public MidiInstrument + { + SynthIF* _sif; + + protected: + Synth* synthesizer; + MidiFifo putFifo; + + // List of initial floating point parameters, for synths which use them. + // Used once upon song reload, then discarded. + std::vector initParams; + // List of gui controls to update upon heartbeat. + std::vector _guiUpdateControls; + // Update gui program upon heartbeat. + bool _guiUpdateProgram; + // Initial, and running, string parameters for synths which use them, like dssi. + StringParamMap _stringParamMap; + // Current bank and program for synths which use them, like dssi. + // In cases like dssi which have no 'hi' and 'lo' bank, just use _curBankL. + unsigned long _curBankH; + unsigned long _curBankL; + unsigned long _curProgram; + + void preProcessAlways(); + bool getData(unsigned a, int b, unsigned c, float** data); + + //bool putEvent(const MidiPlayEvent& ev); + + virtual QString open(); + virtual void close(); + + virtual bool putMidiEvent(const MidiPlayEvent&) {return true;} + //bool putMidiEvent(const MidiEvent&); + + virtual Track* newTrack() const { return 0; } + + public: + friend class SynthIF; + friend class MessSynthIF; + friend class DssiSynthIF; + friend class VstSynthIF; + + SynthI(); + virtual ~SynthI(); + //SynthI* clone() const { return new SynthI(*this); } + SynthI* clone(bool /*cloneParts*/) const { return new SynthI(*this); } + + virtual inline int deviceType() { return SYNTH_MIDI; } + + SynthIF* sif() const { return _sif; } + bool initInstance(Synth* s, const QString& instanceName); + + void readProgram(Xml&, const QString&); + void read(Xml&); + virtual void write(int, Xml&) const; + + void setName(const QString& s); + QString name() const { return AudioTrack::name(); } + + Synth* synth() const { return synthesizer; } + virtual bool isSynti() const { return true; } + + virtual const char* getPatchName(int ch, int prog, MType t, bool dr) { + return _sif->getPatchName(ch, prog, t, dr); + } + + virtual void populatePatchPopup(Q3PopupMenu* m, int i, MType t, bool d) { + _sif->populatePatchPopup(m, i, t, d); + } + + // void setParameter(const char* name, const char* value) const; // Not required + //StringParamMap& stringParameters() { return _stringParamMap; } // Not required + void currentProg(unsigned long */*prog*/, unsigned long */*bankL*/, unsigned long */*bankH*/); + + void guiHeartBeat() { return _sif->guiHeartBeat(); } + bool initGui() const { return _sif->initGui(); } + 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); + } + + bool putEvent(const MidiPlayEvent& ev); + + MidiPlayEvent 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 true; } + }; + +//--------------------------------------------------------- +// MessSynthIF +// mess synthesizer instance +//--------------------------------------------------------- + +class MessSynthIF : public SynthIF { + Mess* _mess; + + public: + //MessSynthIF() { _mess = 0; } + MessSynthIF(SynthI* s) : SynthIF(s) { _mess = 0; } + virtual ~MessSynthIF() { } + + virtual bool initGui() { return true; }; + virtual void guiHeartBeat() { } + 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 preProcessAlways(); + virtual iMPEvent getData(MidiPort*, MPEventList*, iMPEvent, unsigned pos, int ports, unsigned n, float** buffer); + virtual bool putEvent(const MidiPlayEvent& ev); + virtual MidiPlayEvent receiveEvent(); + virtual int eventsPending() const; + //virtual bool init(Synth* s); + bool init(Synth* s, SynthI* si); + + virtual int channels() const; + virtual int totalOutChannels() const; + virtual int totalInChannels() const; + virtual void deactivate3(); + virtual const char* getPatchName(int, int, int, bool) const { return ""; } + virtual const char* getPatchName(int, int, MType, bool); + virtual void populatePatchPopup(Q3PopupMenu*, int, MType, bool); + virtual void write(int level, Xml& xml) const; + virtual float getParameter(unsigned long) const { return 0.0; } + virtual void setParameter(unsigned long, float) {} + virtual int getControllerInfo(int id, const char** name, int* ctrl, int* min, int* max, int* initval); + }; + +extern std::vector synthis; // array of available synthis +#endif + diff --git a/muse2/muse/tempo.cpp b/muse2/muse/tempo.cpp new file mode 100644 index 00000000..418ec031 --- /dev/null +++ b/muse2/muse/tempo.cpp @@ -0,0 +1,503 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: tempo.cpp,v 1.7.2.7 2008/05/21 00:28:52 terminator356 Exp $ +// +// (C) Copyright 1999/2000 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include +#include + +#include "tempo.h" +#include "globals.h" +#include "gconfig.h" +#include "xml.h" + +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) / (config.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() HALLO\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(); + return 0; + } + unsigned dtick = tick - i->second->tick; + double dtime = double(dtick) / (config.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(config.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 * config.division * 10000.0 / te); + } + else + tick = lrint((double(frame)/double(sampleRate)) * _globalTempo * config.division * 10000.0 / double(_tempo)); + if (sn) + *sn = _tempoSN; + return tick; + } + +//--------------------------------------------------------- +// deltaTick2frame +//--------------------------------------------------------- + +unsigned TempoList::deltaTick2frame(unsigned tick1, unsigned tick2, int* sn) const + { + int f1, f2; + if (useList) { + ciTEvent i = upper_bound(tick1); + if (i == end()) { + printf("TempoList::deltaTick2frame: tick1:%d not found\n", tick1); + // abort(); + return 0; + } + unsigned dtick = tick1 - i->second->tick; + double dtime = double(dtick) / (config.division * _globalTempo * 10000.0/ i->second->tempo); + unsigned dframe = lrint(dtime * sampleRate); + f1 = i->second->frame + dframe; + + i = upper_bound(tick2); + if (i == end()) { + return 0; + } + dtick = tick2 - i->second->tick; + dtime = double(dtick) / (config.division * _globalTempo * 10000.0/ i->second->tempo); + dframe = lrint(dtime * sampleRate); + f2 = i->second->frame + dframe; + } + else { + double t = (double(tick1) * double(_tempo)) / (double(config.division) * _globalTempo * 10000.0); + f1 = lrint(t * sampleRate); + + t = (double(tick2) * double(_tempo)) / (double(config.division) * _globalTempo * 10000.0); + f2 = lrint(t * sampleRate); + } + if (sn) + *sn = _tempoSN; + // FIXME: Caution: This should be rounded off properly somehow, but how to do that? + // But it seems to work so far. + return f2 - f1; + } + + +//--------------------------------------------------------- +// deltaFrame2tick +//--------------------------------------------------------- + +unsigned TempoList::deltaFrame2tick(unsigned frame1, unsigned frame2, int* sn) const + { + unsigned tick1, tick2; + if (useList) { + ciTEvent e; + for (e = begin(); e != end();) { + ciTEvent ee = e; + ++ee; + if (ee == end()) + break; + if (frame1 < ee->second->frame) + break; + e = ee; + } + unsigned te = e->second->tempo; + int dframe = frame1 - e->second->frame; + double dtime = double(dframe) / double(sampleRate); + tick1 = e->second->tick + lrint(dtime * _globalTempo * config.division * 10000.0 / te); + + for (e = begin(); e != end();) { + ciTEvent ee = e; + ++ee; + if (ee == end()) + break; + if (frame2 < ee->second->frame) + break; + e = ee; + } + te = e->second->tempo; + dframe = frame2 - e->second->frame; + dtime = double(dframe) / double(sampleRate); + tick2 = e->second->tick + lrint(dtime * _globalTempo * config.division * 10000.0 / te); + } + else + { + tick1 = lrint((double(frame1)/double(sampleRate)) * _globalTempo * config.division * 10000.0 / double(_tempo)); + tick2 = lrint((double(frame2)/double(sampleRate)) * _globalTempo * config.division * 10000.0 / double(_tempo)); + } + if (sn) + *sn = _tempoSN; + // FIXME: Caution: This should be rounded off properly somehow, but how to do that? + // But it seems to work so far. + return tick2 - tick1; + } + +//--------------------------------------------------------- +// TempoList::write +//--------------------------------------------------------- + +void TempoList::write(int level, Xml& xml) const + { + xml.put(level++, "", _tempo); + if (_globalTempo != 100) + xml.intTag(level, "globalTempo", _globalTempo); + for (ciTEvent i = begin(); i != end(); ++i) + i->second->write(level, xml, i->first); + xml.tag(level, "/tempolist"); + } + +//--------------------------------------------------------- +// TempoList::read +//--------------------------------------------------------- + +void TempoList::read(Xml& xml) + { + for (;;) { + Xml::Token token = xml.parse(); + const QString& tag = xml.s1(); + switch (token) { + case Xml::Error: + case Xml::End: + return; + case Xml::TagStart: + if (tag == "tempo") { + TEvent* t = new TEvent(); + unsigned tick = t->read(xml); + iTEvent pos = find(tick); + if (pos != end()) + erase(pos); + insert(std::pair (tick, t)); + } + else if (tag == "globalTempo") + _globalTempo = xml.parseInt(); + else + xml.unknown("TempoList"); + break; + case Xml::Attribut: + if (tag == "fix") + _tempo = xml.s2().toInt(); + break; + case Xml::TagEnd: + if (tag == "tempolist") { + normalize(); + ++_tempoSN; + return; + } + default: + break; + } + } + } + +//--------------------------------------------------------- +// TEvent::write +//--------------------------------------------------------- + +void TEvent::write(int level, Xml& xml, int at) const + { + xml.tag(level++, "tempo at=\"%d\"", at); + xml.intTag(level, "tick", tick); + xml.intTag(level, "val", tempo); + xml.tag(level, "/tempo"); + } + +//--------------------------------------------------------- +// TEvent::read +//--------------------------------------------------------- + +int TEvent::read(Xml& xml) + { + int at = 0; + for (;;) { + Xml::Token token = xml.parse(); + const QString& tag = xml.s1(); + switch (token) { + case Xml::Error: + case Xml::End: + return 0; + case Xml::TagStart: + if (tag == "tick") + tick = xml.parseInt(); + else if (tag == "val") + tempo = xml.parseInt(); + else + xml.unknown("TEvent"); + break; + case Xml::Attribut: + if (tag == "at") + at = xml.s2().toInt(); + break; + case Xml::TagEnd: + if (tag == "tempo") { + return at; + } + default: + break; + } + } + return 0; + } + + diff --git a/muse2/muse/tempo.h b/muse2/muse/tempo.h new file mode 100644 index 00000000..61ec50f5 --- /dev/null +++ b/muse2/muse/tempo.h @@ -0,0 +1,89 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: tempo.h,v 1.2.2.1 2006/09/19 19:07:09 spamatica Exp $ +// +// (C) Copyright 1999/2000 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __TEMPO_H__ +#define __TEMPO_H__ + +#include + +#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(Xml&); + void write(int, 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(Xml&); + void write(int, 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; + unsigned deltaTick2frame(unsigned tick1, unsigned tick2, int* sn = 0) const; + unsigned deltaFrame2tick(unsigned frame1, unsigned frame2, int* sn = 0) 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/muse2/muse/thread.cpp b/muse2/muse/thread.cpp new file mode 100644 index 00000000..444d5219 --- /dev/null +++ b/muse2/muse/thread.cpp @@ -0,0 +1,455 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: thread.cpp,v 1.4.2.5 2009/12/20 05:00:35 terminator356 Exp $ +// +// (C) Copyright 2001-2004 Werner Schweer (ws@seh.de) +//========================================================= + +#include "thread.h" +#include +#include +#include +#include +#include +#include + +#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(void* ptr) +void Thread::start(int prio, void* ptr) + { + // Changed by Tim. p3.3.17 + + userPtr = ptr; + pthread_attr_t* attributes = 0; + _realTimePriority = prio; + + /* + attributes = (pthread_attr_t*) malloc(sizeof(pthread_attr_t)); + pthread_attr_init(attributes); + */ + +// pthread_mutexattr_t mutexattr; +// pthread_mutexattr_init(&mutexattr); +// pthread_mutexattr_settype(&mutexattr, PTHREAD_MUTEX_TIMED_NP); +// pthread_mutex_init(&lock, &mutexattr); +// pthread_cond_init(&ready, 0); + +// pthread_mutex_lock(&lock); + + + 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)); + } + } + + + /* + if (pthread_create(&thread, attributes, ::loop, this)) + perror("creating thread failed:"); +// else +// { +// pthread_cond_wait(&ready, &lock); +// } +// pthread_mutex_unlock(&lock); + */ + + + int rv; + if ((rv = pthread_create(&thread, attributes, ::loop, this))) + { + fprintf(stderr, "creating thread <%s> failed: %s\n", + _name, strerror(rv)); + thread = 0; + } + + //undoSetuid(); + } + +//--------------------------------------------------------- +// stop +//--------------------------------------------------------- + +void Thread::stop(bool force) + { + // Changed by Tim. p3.3.17 + + if (thread == 0) + return; + //if (force && thread > 0) { + if (force) { + pthread_cancel(thread); + threadStop(); + } + _running = false; + if (thread) { + if (pthread_join(thread, 0)) { + // perror("Failed to join sequencer thread"); + } + } + } +//--------------------------------------------------------- +// Thread +// prio = 0 no realtime scheduling +//--------------------------------------------------------- + +//Thread::Thread(int prio, const char* s) +Thread::Thread(const char* s) + { + // Changed by Tim. p3.3.17 + + userPtr = 0; + _name = s; + //realTimePriority = prio; + _realTimePriority = 0; + + pfd = 0; + npfd = 0; + maxpfd = 0; + _running = false; + _pollWait = -1; + thread = 0; + + //if (debugMsg) + // printf("Start thread %s with priority %d\n", s, prio); + + // create message channels + int filedes[2]; // 0 - reading 1 - writing + if (pipe(filedes) == -1) { + perror("thread:creating pipe"); + exit(-1); + } + toThreadFdr = filedes[0]; + toThreadFdw = filedes[1]; + + if (pipe(filedes) == -1) { + perror("thread: creating pipe"); + exit(-1); + } + fromThreadFdr = filedes[0]; + fromThreadFdw = filedes[1]; + +// pthread_mutexattr_t mutexattr; +// pthread_mutexattr_init(&mutexattr); +// pthread_mutexattr_settype(&mutexattr, PTHREAD_MUTEX_TIMED_NP); +// pthread_mutex_init(&lock, &mutexattr); +// pthread_cond_init(&ready, 0); + } + +//--------------------------------------------------------- +// 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() + { + // Changed by Tim. p3.3.17 + + if (!debugMode) { + if (mlockall(MCL_CURRENT | MCL_FUTURE)) + perror("WARNING: Cannot lock memory:"); + } + +/* + pthread_attr_t* attributes = 0; + attributes = (pthread_attr_t*) malloc(sizeof(pthread_attr_t)); + pthread_attr_init(attributes); + + if (realTimeScheduling && realTimePriority > 0) { + + doSetuid(); +// 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 = realTimePriority; +// if (pthread_attr_setschedparam (attributes, &rt_param)) { +// printf("Cannot set scheduling priority %d for RT thread (%s)\n", +// realTimePriority, strerror(errno)); +// } + + // do the SCHED_FIFO stuff _after_ thread creation: + struct sched_param *param = new struct sched_param; + param->sched_priority = realTimePriority; + int error = pthread_setschedparam(pthread_self(), SCHED_FIFO, param); + if (error != 0) + perror( "error set_schedparam 2:"); + +// if (!debugMode) { +// if (mlockall(MCL_CURRENT|MCL_FUTURE)) +// perror("WARNING: Cannot lock memory:"); +// } + + undoSetuid(); + } + +*/ + + +/* +#define BIG_ENOUGH_STACK (1024*1024*1) + char buf[BIG_ENOUGH_STACK]; + for (int i = 0; i < BIG_ENOUGH_STACK; i++) + buf[i] = i; +#undef BIG_ENOUGH_STACK +*/ + +#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 = 0; + if ((policy = sched_getscheduler (0)) < 0) { + printf("Thread: Cannot get current client scheduler: %s\n", strerror(errno)); + } + + /* + if (debugMsg) + printf("Thread <%s> set to %s priority %d\n", + _name, policy == SCHED_FIFO ? "SCHED_FIFO" : "SCHED_OTHER", + realTimePriority); + */ + if (debugMsg) + printf("Thread <%s, id %p> has %s priority %d\n", + _name, (void *)pthread_self(), policy == SCHED_FIFO ? "SCHED_FIFO" : "SCHED_OTHER", + _realTimePriority); + + +// pthread_mutex_lock(&lock); + _running = true; +// pthread_cond_signal(&ready); +// pthread_mutex_unlock(&lock); + + 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(); + } + +//--------------------------------------------------------- +// send +// send request from gui to thread +// wait until request is processed +//--------------------------------------------------------- + +bool Thread::sendMsg(const ThreadMsg* m) +{ + // Changed by Tim. p3.3.17 + + if (_running) + { + int rv = write(toThreadFdw, &m, sizeof(ThreadMsg*)); + if (rv != sizeof(ThreadMsg*)) { + perror("Thread::sendMessage(): write pipe failed"); + return true; + } + + // wait for sequencer to finish operation + char c; + rv = read(fromThreadFdr, &c, 1); + if (rv != 1) + { + perror("Thread::sendMessage(): read pipe failed"); + return true; + } + //int c; + //rv = read(fromThreadFdr, &c, sizeof(c)); + //if (rv != sizeof(c)) { + // perror("Thread::sendMessage(): read pipe failed"); + // return true; + // } + } + else + { + // if thread is not running (during initialization) + // process commands directly: + processMsg(m); + } + return false; +} + +//--------------------------------------------------------- +// send +// 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::readMessage(): read pipe failed"); + exit(-1); + } + processMsg(p); + char c = 'x'; + int rv = write(fromThreadFdw, &c, 1); + if (rv != 1) + perror("Thread::readMessage(): write pipe failed"); + //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::readMsg1(): read pipe failed, get %d, expected %d: %s\n", + n, size, strerror(errno)); + exit(-1); + } + processMsg1(buffer); + } + diff --git a/muse2/muse/thread.h b/muse2/muse/thread.h new file mode 100644 index 00000000..f9642301 --- /dev/null +++ b/muse2/muse/thread.h @@ -0,0 +1,104 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: thread.h,v 1.1.1.1.2.2 2009/12/20 05:00:35 terminator356 Exp $ +// +// (C) Copyright 2001 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __THREAD_H__ +#define __THREAD_H__ + +#include +#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; + }; + +//--------------------------------------------------------- +// Thread +//--------------------------------------------------------- + +class Thread { + const char* _name; + volatile bool _running; + //int realTimePriority; + int _pollWait; // poll timeout in msec (-1 = infinite) + + pthread_t thread; + + int toThreadFdw; // message to thread (app write) + + PollList plist; +// pthread_mutex_t lock; +// pthread_cond_t ready; + 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(int prio, const char* name); + Thread(const char* name); + + virtual ~Thread(); + const char* name() const { return _name; } + + //virtual void start(void* ptr=0); + 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/muse2/muse/ticksynth.cpp b/muse2/muse/ticksynth.cpp new file mode 100644 index 00000000..d6d327db --- /dev/null +++ b/muse2/muse/ticksynth.cpp @@ -0,0 +1,215 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: ticksynth.cpp,v 1.8.2.7 2009/12/20 05:00:35 terminator356 Exp $ +// (C) Copyright 2004 Werner Schweer (ws@seh.de) +//========================================================= + +#include "audio.h" +#include "ticksynth.h" +#include "default_click.h" +//Added by qt3to4: +#include + +// Added by Tim. p3.3.18 +//#define METRONOME_DEBUG + +MetronomeSynthI* metronome = 0; + +class MetronomeSynth; +static MetronomeSynth* metronomeSynth = 0; + +//--------------------------------------------------------- +// MetronomeSynth +//--------------------------------------------------------- + +class MetronomeSynth : public Synth { + public: + //MetronomeSynth(const QFileInfo& fi) : Synth(fi) {} + //MetronomeSynth(const QFileInfo& fi) : Synth(fi, QString("Metronome")) {} + MetronomeSynth(const QFileInfo& fi) : Synth(fi, QString("Metronome"), QString("Metronome"), QString(), QString()) {} + virtual ~MetronomeSynth() {} + virtual void incInstances(int) {} + virtual void* instantiate(); + + //virtual SynthIF* createSIF() const; + 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() { + // data = 0; + // } + MetronomeSynthIF(SynthI* s) : SynthIF(s) { + data = 0; + } + virtual bool initGui() { return true; }; + virtual void guiHeartBeat() { } + 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 preProcessAlways() { }; + virtual iMPEvent getData(MidiPort*, MPEventList*, iMPEvent, unsigned pos, int ports, unsigned n, float** buffer); + virtual bool putEvent(const MidiPlayEvent& ev); + virtual MidiPlayEvent receiveEvent() { return MidiPlayEvent(); } + virtual int eventsPending() const { return 0; } + + //virtual bool init(Synth*) { return true; } + + virtual int channels() const { return 1; } + virtual int totalOutChannels() const { return 1; } + virtual int totalInChannels() const { return 0; } + virtual void deactivate3() {} + virtual const char* getPatchName(int, int, int, bool) const { return ""; } + virtual const char* getPatchName(int, int, MType, bool) { return ""; } + virtual void populatePatchPopup(Q3PopupMenu*, int, MType, bool) {}; + virtual void write(int, Xml&) const {} + virtual float getParameter(unsigned long) const { return 0.0; } + virtual void setParameter(unsigned long, float) {} + virtual int getControllerInfo(int, const char**, int*, int*, int*, int*) { return 0; } + }; + +//--------------------------------------------------------- +// getData +//--------------------------------------------------------- + +iMPEvent MetronomeSynthIF::getData(MidiPort*, MPEventList* el, iMPEvent i, unsigned pos, int/*ports*/, unsigned n, float** buffer) + { + // Added by Tim. p3.3.18 + #ifdef METRONOME_DEBUG + printf("MusE: MetronomeSynthIF::getData\n"); + #endif + + //set type to unsigned , due to compiler warning: comparison signed/unsigned + unsigned int curPos = pos; //prevent compiler warning: comparison signed/unsigned + unsigned int endPos = pos + n; //prevent compiler warning: comparison signed/unsigned + unsigned int off = pos; //prevent compiler warning: comparison signed/unsigned + int frameOffset = audio->getFrameOffset(); + + for (; i != el->end(); ++i) { + unsigned int frame = i->time() - frameOffset; //prevent compiler warning: comparison signed /unsigned + 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); + return el->end(); + } + +//--------------------------------------------------------- +// putEvent +//--------------------------------------------------------- + +bool MetronomeSynthIF::putEvent(const MidiPlayEvent& ev) + { + if (ev.dataA() == 0) { + data = defaultClickEmphasis; + len = defaultClickEmphasisLength; + } + else { + data = defaultClick; + len = defaultClickLength; + } + pos = 0; + return false; + } + +//--------------------------------------------------------- +// createSIF +//--------------------------------------------------------- + +//SynthIF* MetronomeSynth::createSIF() const +// { +// return new MetronomeSynthIF(); +// } +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) + { + // Added by Tim. p3.3.18 + #ifdef METRONOME_DEBUG + printf("MusE: MetronomeSynthIF::process data:%p offset:%d n:%d\n", data, offset, n); + #endif + + if (data == 0) + return; + + const float* s = data + pos; + float* d = *buffer + offset; + int l = std::min(n, len); + + for (int i = 0; i < l; ++i) + *d++ += *s++ * audioClickVolume; + pos += l; + len -= l; + if (len <= 0) + data = 0; + } + +//--------------------------------------------------------- +// initMetronome +//--------------------------------------------------------- + +void initMetronome() + { + QFileInfo fi; + metronomeSynth = new MetronomeSynth(fi); + metronome = new MetronomeSynthI(); + + QString name("metronome"); + metronome->initInstance(metronomeSynth, name); + } + +//--------------------------------------------------------- +// exitMetronome +//--------------------------------------------------------- + +void exitMetronome() +{ + if(metronome) + delete metronome; + metronome = 0; + + if(metronomeSynth) + delete metronomeSynth; + metronomeSynth = 0; +} + diff --git a/muse2/muse/ticksynth.h b/muse2/muse/ticksynth.h new file mode 100644 index 00000000..4f467bcd --- /dev/null +++ b/muse2/muse/ticksynth.h @@ -0,0 +1,22 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: ticksynth.h,v 1.1.2.3 2009/12/06 10:05:00 terminator356 Exp $ +// (C) Copyright 2004 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __TICKSYNTH_H__ +#define __TICKSYNTH_H__ + +#include "synth.h" +extern void initMetronome(); +extern void exitMetronome(); +class MetronomeSynthI : public SynthI +{ + virtual bool hasAuxSend() const { return false; } + +}; +extern MetronomeSynthI* metronome; + +#endif + diff --git a/muse2/muse/track.cpp b/muse2/muse/track.cpp new file mode 100644 index 00000000..8a51062b --- /dev/null +++ b/muse2/muse/track.cpp @@ -0,0 +1,980 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: track.cpp,v 1.34.2.11 2009/11/30 05:05:49 terminator356 Exp $ +// +// (C) Copyright 2000-2004 Werner Schweer (ws@seh.de) +//========================================================= + +//#include +#include + +#include "track.h" +#include "event.h" +#include "mididev.h" +#include "midiport.h" +#include "song.h" +#include "xml.h" +#include "plugin.h" +#include "drummap.h" +#include "audio.h" +#include "globaldefs.h" +#include "route.h" + +unsigned int Track::_soloRefCnt = 0; +Track* Track::_tmpSoloChainTrack = 0; +bool Track::_tmpSoloChainDoIns = false; +bool Track::_tmpSoloChainNoDec = false; + +//--------------------------------------------------------- +// addPortCtrlEvents +//--------------------------------------------------------- + +void addPortCtrlEvents(MidiTrack* t) +{ + const PartList* pl = t->cparts(); + for(ciPart ip = pl->begin(); ip != pl->end(); ++ip) + { + Part* part = ip->second; + const EventList* el = part->cevents(); + unsigned len = part->lenTick(); + for(ciEvent ie = el->begin(); ie != el->end(); ++ie) + { + const Event& ev = ie->second; + // Added by T356. Do not add events which are past the end of the part. + if(ev.tick() >= len) + break; + + if(ev.type() == Controller) + { + int tick = ev.tick() + part->tick(); + int cntrl = ev.dataA(); + int val = ev.dataB(); + int ch = t->outChannel(); + + MidiPort* mp = &midiPorts[t->outPort()]; + // Is it a drum controller event, according to the track port's instrument? + if(t->type() == Track::DRUM) + { + MidiController* mc = mp->drumController(cntrl); + if(mc) + { + int note = cntrl & 0x7f; + cntrl &= ~0xff; + ch = drumMap[note].channel; + mp = &midiPorts[drumMap[note].port]; + cntrl |= drumMap[note].anote; + } + } + + mp->setControllerVal(ch, tick, cntrl, val, part); + } + } + } +} + +//--------------------------------------------------------- +// removePortCtrlEvents +//--------------------------------------------------------- + +void removePortCtrlEvents(MidiTrack* t) +{ + const PartList* pl = t->cparts(); + for(ciPart ip = pl->begin(); ip != pl->end(); ++ip) + { + Part* part = ip->second; + const EventList* el = part->cevents(); + //unsigned len = part->lenTick(); + for(ciEvent ie = el->begin(); ie != el->end(); ++ie) + { + const Event& ev = ie->second; + // Added by T356. Do not remove events which are past the end of the part. + // No, actually, do remove ALL of them belonging to the part. + // Just in case there are stray values left after the part end. + //if(ev.tick() >= len) + // break; + + if(ev.type() == Controller) + { + int tick = ev.tick() + part->tick(); + int cntrl = ev.dataA(); + int ch = t->outChannel(); + + MidiPort* mp = &midiPorts[t->outPort()]; + // Is it a drum controller event, according to the track port's instrument? + if(t->type() == Track::DRUM) + { + MidiController* mc = mp->drumController(cntrl); + if(mc) + { + int note = cntrl & 0x7f; + cntrl &= ~0xff; + ch = drumMap[note].channel; + mp = &midiPorts[drumMap[note].port]; + cntrl |= drumMap[note].anote; + } + } + + mp->deleteController(ch, tick, cntrl, part); + } + } + } +} + +//--------------------------------------------------------- +// y +//--------------------------------------------------------- + +int Track::y() const + { + TrackList* tl = song->tracks(); + int yy = 0; + for (ciTrack it = tl->begin(); it != tl->end(); ++it) { + if (this == *it) + return yy; + yy += (*it)->height(); + } + printf("Track::y(%s): track not in tracklist\n", name().latin1()); + return -1; + } + +//--------------------------------------------------------- +// Track::init +//--------------------------------------------------------- + +void Track::init() + { + _activity = 0; + _lastActivity = 0; + _recordFlag = false; + _mute = false; + _solo = false; + _internalSolo = 0; + _off = false; + _channels = 0; // 1 - mono, 2 - stereo + + _volumeEnCtrl = true; + _volumeEn2Ctrl = true; + _panEnCtrl = true; + _panEn2Ctrl = true; + + _selected = false; + _height = 20; + _locked = false; + for (int i = 0; i < MAX_CHANNELS; ++i) { + //_meter[i] = 0; + //_peak[i] = 0; + _meter[i] = 0.0; + _peak[i] = 0.0; + } + } + +Track::Track(Track::TrackType t) + { + init(); + _type = t; + } + +//Track::Track(const Track& t) +Track::Track(const Track& t, bool cloneParts) + { + _activity = t._activity; + _lastActivity = t._lastActivity; + _recordFlag = t._recordFlag; + _mute = t._mute; + _solo = t._solo; + _internalSolo = t._internalSolo; + _off = t._off; + _channels = t._channels; + + _volumeEnCtrl = t._volumeEnCtrl; + _volumeEn2Ctrl = t._volumeEn2Ctrl; + _panEnCtrl = t._panEnCtrl; + _panEn2Ctrl = t._panEn2Ctrl; + + _selected = t.selected(); + _y = t._y; + _height = t._height; + _comment = t.comment(); + _name = t.name(); + _type = t.type(); + _locked = t.locked(); + + if(cloneParts) + { + const PartList* pl = t.cparts(); + for (ciPart ip = pl->begin(); ip != pl->end(); ++ip) { + Part* newPart = ip->second->clone(); + newPart->setTrack(this); + _parts.add(newPart); + } + } + else + { + _parts = *(t.cparts()); + // NOTE: We can't do this because of the way clipboard, cloneList, and undoOp::ModifyTrack, work. + // A couple of schemes were conceived to deal with cloneList being invalid, but the best way is + // to not alter the part list here. It's a big headache because: Either the parts in the cloneList + // need to be reliably looked up replaced with the new ones, or the clipboard and cloneList must be cleared. + // Fortunately the ONLY part of muse using this function is track rename (in TrackList and TrackInfo). + // So we can get away with leaving this out: + //for (iPart ip = _parts.begin(); ip != _parts.end(); ++ip) + // ip->second->setTrack(this); + } + + for (int i = 0; i < MAX_CHANNELS; ++i) { + //_meter[i] = 0; + //_peak[i] = 0; + _meter[i] = 0.0; + _peak[i] = 0.0; + } + } + +//--------------------------------------------------------- +// operator = +// Added by Tim. Parts' track members MUST point to this track, +// not some other track, so simple assignment operator won't do! +//--------------------------------------------------------- + +Track& Track::operator=(const Track& t) +{ + _activity = t._activity; + _lastActivity = t._lastActivity; + _recordFlag = t._recordFlag; + _mute = t._mute; + _solo = t._solo; + _internalSolo = t._internalSolo; + _off = t._off; + _channels = t._channels; + + _volumeEnCtrl = t._volumeEnCtrl; + _volumeEn2Ctrl = t._volumeEn2Ctrl; + _panEnCtrl = t._panEnCtrl; + _panEn2Ctrl = t._panEn2Ctrl; + + _selected = t.selected(); + _y = t._y; + _height = t._height; + _comment = t.comment(); + _name = t.name(); + _type = t.type(); + _locked = t.locked(); + + _parts = *(t.cparts()); + // NOTE: Can't do this. See comments in copy constructor. + //for (iPart ip = _parts.begin(); ip != _parts.end(); ++ip) + // ip->second->setTrack(this); + + for (int i = 0; i < MAX_CHANNELS; ++i) { + _meter[i] = t._meter[i]; + _peak[i] = t._peak[i]; + } + return *this; +} + +//--------------------------------------------------------- +// setDefaultName +// generate unique name for track +//--------------------------------------------------------- + +void Track::setDefaultName() + { + QString base; + switch(_type) { + case MIDI: + case DRUM: + case WAVE: + base = QString("Track"); + break; + case AUDIO_OUTPUT: + base = QString("Out"); + break; + case AUDIO_GROUP: + base = QString("Group"); + break; + case AUDIO_AUX: + base = QString("Aux"); + break; + case AUDIO_INPUT: + base = QString("Input"); + break; + case AUDIO_SOFTSYNTH: + base = QString("Synth"); + break; + }; + base += " "; + for (int i = 1; true; ++i) { + QString n; + n.setNum(i); + QString s = base + n; + Track* track = song->findTrack(s); + if (track == 0) { + setName(s); + break; + } + } + } + +//--------------------------------------------------------- +// clearRecAutomation +//--------------------------------------------------------- + +void Track::clearRecAutomation(bool clearList) +{ + _volumeEnCtrl = true; + _volumeEn2Ctrl = true; + _panEnCtrl = true; + _panEn2Ctrl = true; + + if(isMidiTrack()) + return; + + AudioTrack *t = (AudioTrack*)this; + Pipeline *pl = t->efxPipe(); + PluginI *p; + for(iPluginI i = pl->begin(); i != pl->end(); ++i) + { + p = *i; + if(!p) + continue; + p->enableAllControllers(true); + } + + if(clearList) + t->recEvents()->clear(); +} + +//--------------------------------------------------------- +// dump +//--------------------------------------------------------- + +void Track::dump() const + { + printf("Track <%s>: typ %d, parts %zd sel %d\n", + _name.latin1(), _type, _parts.size(), _selected); + } + +//--------------------------------------------------------- +// MidiTrack +//--------------------------------------------------------- + +MidiTrack::MidiTrack() + : Track(MIDI) + { + init(); + _events = new EventList; + _mpevents = new MPEventList; + } + +//MidiTrack::MidiTrack(const MidiTrack& mt) +// : Track(mt) +MidiTrack::MidiTrack(const MidiTrack& mt, bool cloneParts) + : Track(mt, cloneParts) + { + _outPort = mt.outPort(); + _outChannel = mt.outChannel(); + ///_inPortMask = mt.inPortMask(); + ///_inChannelMask = mt.inChannelMask(); + _events = new EventList; + _mpevents = new MPEventList; + transposition = mt.transposition; + velocity = mt.velocity; + delay = mt.delay; + len = mt.len; + compression = mt.compression; + _recEcho = mt.recEcho(); + } + +MidiTrack::~MidiTrack() + { + delete _events; + delete _mpevents; + } + +//--------------------------------------------------------- +// init +//--------------------------------------------------------- + +void MidiTrack::init() + { + _outPort = 0; + _outChannel = 0; + // Changed by Tim. p3.3.8 + //_inPortMask = 0xffff; + ///_inPortMask = 0xffffffff; + + ///_inChannelMask = 0xffff; // "ALL" + transposition = 0; + velocity = 0; + delay = 0; + len = 100; // percent + compression = 100; // percent + _recEcho = true; + } + +//--------------------------------------------------------- +// setOutChanAndUpdate +//--------------------------------------------------------- + +void MidiTrack::setOutChanAndUpdate(int i) +{ + if(_outChannel == i) + return; + + //removePortCtrlEvents(); + removePortCtrlEvents(this); + _outChannel = i; + //addPortCtrlEvents(); + addPortCtrlEvents(this); +} + +//--------------------------------------------------------- +// setOutPortAndUpdate +//--------------------------------------------------------- + +void MidiTrack::setOutPortAndUpdate(int i) +{ + if(_outPort == i) + return; + + //removePortCtrlEvents(); + removePortCtrlEvents(this); + _outPort = i; + //addPortCtrlEvents(); + addPortCtrlEvents(this); +} + +//--------------------------------------------------------- +// setInPortAndChannelMask +// For old song files with port mask (max 32 ports) and channel mask (16 channels), +// before midi routing was added (the iR button). p3.3.48 +//--------------------------------------------------------- + +void MidiTrack::setInPortAndChannelMask(unsigned int portmask, int chanmask) +{ + //if(!portmask || !chanmask) + // return; + + //RouteList* rl = inRoutes(); + bool changed = false; + + for(int port = 0; port < 32; ++port) // 32 is the old maximum number of ports. + { + // p3.3.50 If the port was not used in the song file to begin with, just ignore it. + // This saves from having all of the first 32 ports' channels connected. + if(!midiPorts[port].foundInSongFile()) + continue; + + //if(!(portmask & (1 << port))) + // continue; + + // p3.3.50 Removed. Allow to connect to port with no device so user can change device later. + //MidiPort* mp = &midiPorts[port]; + //MidiDevice* md = mp->device(); + //if(!md) + // continue; + + //for(int ch = 0; ch < MIDI_CHANNELS; ++ch) // p3.3.50 Removed. + //{ + //if(!(chanmask & (1 << ch))) + // continue; + + //Route aRoute(md, ch); + //Route bRoute(this, ch); + Route aRoute(port, chanmask); // p3.3.50 + Route bRoute(this, chanmask); + + // p3.3.50 Removed. + //iRoute iir = rl->begin(); + //for(; iir != rl->end(); ++iir) + //{ + //if(*iir == aRoute) + // if(iir->type == Route::MIDI_PORT_ROUTE && iir->midiPort == port) // p3.3.50 + // break; + //} + + // Route wanted? + //if((portmask & (1 << port)) && (chanmask & (1 << ch))) + if(portmask & (1 << port)) // p3.3.50 + { + // Route already exists? + //if(iir != rl->end()) + // continue; + audio->msgAddRoute(aRoute, bRoute); + changed = true; + } + else + { + // Route does not exist? + //if(iir == rl->end()) + // continue; + audio->msgRemoveRoute(aRoute, bRoute); + changed = true; + } + //} + } + + if(changed) + { + audio->msgUpdateSoloStates(); + song->update(SC_ROUTE); + } +} + +/* +//--------------------------------------------------------- +// addPortCtrlEvents +//--------------------------------------------------------- + +void MidiTrack::addPortCtrlEvents() +{ + const PartList* pl = cparts(); + for(ciPart ip = pl->begin(); ip != pl->end(); ++ip) + { + Part* part = ip->second; + const EventList* el = part->cevents(); + for(ciEvent ie = el->begin(); ie != el->end(); ++ie) + { + const Event& ev = ie->second; + if(ev.type() == Controller) + { + int tick = ev.tick() + part->tick(); + int cntrl = ev.dataA(); + int val = ev.dataB(); + int ch = _outChannel; + + MidiPort* mp = &midiPorts[_outPort]; + // Is it a drum controller event, according to the track port's instrument? + if(type() == DRUM) + { + MidiController* mc = mp->drumController(cntrl); + if(mc) + { + int note = cntrl & 0x7f; + cntrl &= ~0xff; + ch = drumMap[note].channel; + mp = &midiPorts[drumMap[note].port]; + cntrl |= drumMap[note].anote; + } + } + + mp->setControllerVal(ch, tick, cntrl, val, part); + } + } + } +} + +//--------------------------------------------------------- +// removePortCtrlEvents +//--------------------------------------------------------- + +void MidiTrack::removePortCtrlEvents() +{ + const PartList* pl = cparts(); + for(ciPart ip = pl->begin(); ip != pl->end(); ++ip) + { + Part* part = ip->second; + const EventList* el = part->cevents(); + for(ciEvent ie = el->begin(); ie != el->end(); ++ie) + { + const Event& ev = ie->second; + if(ev.type() == Controller) + { + int tick = ev.tick() + part->tick(); + int cntrl = ev.dataA(); + int ch = _outChannel; + + MidiPort* mp = &midiPorts[_outPort]; + // Is it a drum controller event, according to the track port's instrument? + if(type() == DRUM) + { + MidiController* mc = mp->drumController(cntrl); + if(mc) + { + int note = cntrl & 0x7f; + cntrl &= ~0xff; + ch = drumMap[note].channel; + mp = &midiPorts[drumMap[note].port]; + cntrl |= drumMap[note].anote; + } + } + + mp->deleteController(ch, tick, cntrl, part); + } + } + } +} +*/ + +//--------------------------------------------------------- +// addPart +//--------------------------------------------------------- + +iPart Track::addPart(Part* p) + { + p->setTrack(this); + return _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; + } + +//--------------------------------------------------------- +// newPart +//--------------------------------------------------------- + +Part* MidiTrack::newPart(Part*p, bool clone) + { + MidiPart* part = clone ? new MidiPart(this, p->events()) : new MidiPart(this); + if (p) { + part->setName(p->name()); + part->setColorIndex(p->colorIndex()); + + *(PosLen*)part = *(PosLen*)p; + part->setMute(p->mute()); + } + + if(clone) + //p->chainClone(part); + chainClone(p, part); + + return part; + } + +//--------------------------------------------------------- +// automationType +//--------------------------------------------------------- + +AutomationType MidiTrack::automationType() const + { + MidiPort* port = &midiPorts[outPort()]; + return port->automationType(outChannel()); + } + +//--------------------------------------------------------- +// setAutomationType +//--------------------------------------------------------- + +void MidiTrack::setAutomationType(AutomationType t) + { + MidiPort* port = &midiPorts[outPort()]; + port->setAutomationType(outChannel(), t); + } + +//--------------------------------------------------------- +// Track::writeProperties +//--------------------------------------------------------- + +void Track::writeProperties(int level, Xml& xml) const + { + xml.strTag(level, "name", _name); + if (!_comment.isEmpty()) + xml.strTag(level, "comment", _comment); + xml.intTag(level, "record", _recordFlag); + xml.intTag(level, "mute", mute()); + xml.intTag(level, "solo", solo()); + xml.intTag(level, "off", off()); + xml.intTag(level, "channels", _channels); + xml.intTag(level, "height", _height); + xml.intTag(level, "locked", _locked); + if (_selected) + xml.intTag(level, "selected", _selected); + } + +//--------------------------------------------------------- +// Track::readProperties +//--------------------------------------------------------- + +bool Track::readProperties(Xml& xml, const QString& tag) + { + if (tag == "name") + _name = xml.parse1(); + else if (tag == "comment") + _comment = xml.parse1(); + else if (tag == "record") { + bool recordFlag = xml.parseInt(); + setRecordFlag1(recordFlag); + setRecordFlag2(recordFlag); + } + else if (tag == "mute") + _mute = xml.parseInt(); + else if (tag == "solo") + _solo = xml.parseInt(); + else if (tag == "off") + _off = xml.parseInt(); + else if (tag == "height") + _height = xml.parseInt(); + else if (tag == "channels") + { + _channels = xml.parseInt(); + if(_channels > MAX_CHANNELS) + _channels = MAX_CHANNELS; + } + else if (tag == "locked") + _locked = xml.parseInt(); + else if (tag == "selected") + _selected = xml.parseInt(); + else + return true; + return false; + } + +//--------------------------------------------------------- +// writeRouting +//--------------------------------------------------------- + +void Track::writeRouting(int level, Xml& xml) const +{ + QString s; + + if (type() == Track::AUDIO_INPUT) + { + const RouteList* rl = &_inRoutes; + for (ciRoute r = rl->begin(); r != rl->end(); ++r) + { + if(!r->name().isEmpty()) + { + s = QT_TR_NOOP("Route"); + if(r->channel != -1) + s += QString(QT_TR_NOOP(" channel=\"%1\"")).arg(r->channel); + + ///Route dst(name(), true, r->channel); + //xml.tag(level++, "Route"); + xml.tag(level++, s); + + // p3.3.38 New routing scheme. + ///xml.strTag(level, "srcNode", r->name()); + //xml.tag(level, "source type=\"%d\" name=\"%s\"/", r->type, r->name().latin1()); + s = QT_TR_NOOP("source"); + if(r->type != Route::TRACK_ROUTE) + s += QString(QT_TR_NOOP(" type=\"%1\"")).arg(r->type); + //s += QString(QT_TR_NOOP(" name=\"%1\"/")).arg(r->name()); + s += QString(QT_TR_NOOP(" name=\"%1\"/")).arg(Xml::xmlString(r->name())); + xml.tag(level, s); + + ///xml.strTag(level, "dstNode", dst.name()); + + //if(r->channel != -1) + // xml.tag(level, "dest type=\"%d\" channel=\"%d\" name=\"%s\"/", Route::TRACK_ROUTE, r->channel, name().latin1()); + //else + // xml.tag(level, "dest type=\"%d\" name=\"%s\"/", Route::TRACK_ROUTE, name().latin1()); + + //xml.tag(level, "dest name=\"%s\"/", name().latin1()); + xml.tag(level, "dest name=\"%s\"/", Xml::xmlString(name()).latin1()); + + xml.etag(level--, "Route"); + } + } + } + + const RouteList* rl = &_outRoutes; + for (ciRoute r = rl->begin(); r != rl->end(); ++r) + { + //if(!r->name().isEmpty()) + if(r->midiPort != -1 || !r->name().isEmpty()) // p3.3.49 + { + ///QString src(name()); + ///if (type() == Track::AUDIO_OUTPUT) + ///{ + ///Route s(src, false, r->channel); + ///src = s.name(); + ///} + + s = QT_TR_NOOP("Route"); + if(r->type == Route::MIDI_PORT_ROUTE) // p3.3.50 + { + if(r->channel != -1 && r->channel != 0) + s += QString(QT_TR_NOOP(" channelMask=\"%1\"")).arg(r->channel); // Use new channel mask. + } + else + { + if(r->channel != -1) + s += QString(QT_TR_NOOP(" channel=\"%1\"")).arg(r->channel); + } + if(r->channels != -1) + s += QString(QT_TR_NOOP(" channels=\"%1\"")).arg(r->channels); + if(r->remoteChannel != -1) + s += QString(QT_TR_NOOP(" remch=\"%1\"")).arg(r->remoteChannel); + + //xml.tag(level++, "Route"); + xml.tag(level++, s); + + ///xml.strTag(level, "srcNode", src); + //if(r->channel != -1) + + // Allow for a regular mono or stereo track to feed a multi-channel synti. + // thisChannel is the 'starting' channel of this source if feeding a regular track. + //if(r->type == Route::TRACK_ROUTE && r->track->isSynti() && r->channel != -1) + //if(isSynti() && r->thisChannel != -1) + //xml.tag(level, "source type=\"%d\" channel=\"%d\" name=\"%s\"/", Route::TRACK_ROUTE, r->channel, name().latin1()); + // xml.tag(level, "source type=\"%d\" channel=\"%d\" name=\"%s\"/", Route::TRACK_ROUTE, r->thisChannel, name().latin1()); + //else + + //if(r->channel != -1) + // xml.tag(level, "source type=\"%d\" channel=\"%d\" name=\"%s\"/", Route::TRACK_ROUTE, r->channel, name().latin1()); + //else + // xml.tag(level, "source type=\"%d\" name=\"%s\"/", Route::TRACK_ROUTE, name().latin1()); + //xml.tag(level, "source name=\"%s\"/", name().latin1()); + xml.tag(level, "source name=\"%s\"/", Xml::xmlString(name()).latin1()); + + ///xml.strTag(level, "dstNode", r->name()); + //if(r->channel != -1) + // xml.tag(level, "dest type=\"%d\" channel=\"%d\" name=\"%s\"/", r->type, r->channel, r->name().latin1()); + //else + // xml.tag(level, "dest type=\"%d\" name=\"%s\"/", r->type, r->name().latin1()); + + // Allow for a regular mono or stereo track to feed a multi-channel synti. + // Channel is the 'starting' channel of the destination. + //if(r->type == Route::TRACK_ROUTE && r->track->isSynti() && r->channel != -1) + + //if(r->type == Route::TRACK_ROUTE && r->track->type() == Track::AUDIO_SOFTSYNTH && r->remoteChannel != -1) + // xml.tag(level, "dest type=\"%d\" channel=\"%d\" name=\"%s\"/", r->type, r->remoteChannel, r->name().latin1()); + //else + //if(r->type == Route::MIDI_DEVICE_ROUTE) + // xml.tag(level, "dest devtype=\"%d\" name=\"%s\"/", r->device->deviceType(), r->name().latin1()); + //else + // xml.tag(level, "dest type=\"%d\" name=\"%s\"/", r->type, r->name().latin1()); + + s = QT_TR_NOOP("dest"); + + //if(r->type == Route::MIDI_DEVICE_ROUTE) // p3.3.49 Obsolete since 1.1-RC2 + // s += QString(QT_TR_NOOP(" devtype=\"%1\"")).arg(r->device->deviceType()); // + //if(r->type != Route::TRACK_ROUTE) // + if(r->type != Route::TRACK_ROUTE && r->type != Route::MIDI_PORT_ROUTE) + s += QString(QT_TR_NOOP(" type=\"%1\"")).arg(r->type); + + //s += QString(QT_TR_NOOP(" name=\"%1\"/")).arg(r->name()); + if(r->type == Route::MIDI_PORT_ROUTE) // p3.3.49 + s += QString(QT_TR_NOOP(" mport=\"%1\"/")).arg(r->midiPort); + else + s += QString(QT_TR_NOOP(" name=\"%1\"/")).arg(Xml::xmlString(r->name())); + + xml.tag(level, s); + + xml.etag(level--, "Route"); + } + } +} + +//--------------------------------------------------------- +// MidiTrack::write +//--------------------------------------------------------- + +void MidiTrack::write(int level, Xml& xml) const + { + const char* tag; + + if (type() == DRUM) + tag = "drumtrack"; + else + tag = "miditrack"; + xml.tag(level++, tag); + Track::writeProperties(level, xml); + + xml.intTag(level, "device", outPort()); + xml.intTag(level, "channel", outChannel()); + //xml.intTag(level, "inportMap", inPortMask()); + ///xml.uintTag(level, "inportMap", inPortMask()); // Obsolete + ///xml.intTag(level, "inchannelMap", inChannelMask()); // Obsolete + xml.intTag(level, "locked", _locked); + xml.intTag(level, "echo", _recEcho); + + xml.intTag(level, "transposition", transposition); + xml.intTag(level, "velocity", velocity); + xml.intTag(level, "delay", delay); + xml.intTag(level, "len", len); + xml.intTag(level, "compression", compression); + xml.intTag(level, "automation", int(automationType())); + + const PartList* pl = cparts(); + for (ciPart p = pl->begin(); p != pl->end(); ++p) + p->second->write(level, xml); + xml.etag(level, tag); + } + +//--------------------------------------------------------- +// MidiTrack::read +//--------------------------------------------------------- + +void MidiTrack::read(Xml& xml) + { + unsigned int portmask = 0; + int chanmask = 0; + + for (;;) { + Xml::Token token = xml.parse(); + const QString& tag = xml.s1(); + switch (token) { + case Xml::Error: + case Xml::End: + return; + case Xml::TagStart: + if (tag == "transposition") + transposition = xml.parseInt(); + else if (tag == "velocity") + velocity = xml.parseInt(); + else if (tag == "delay") + delay = xml.parseInt(); + else if (tag == "len") + len = xml.parseInt(); + else if (tag == "compression") + compression = xml.parseInt(); + else if (tag == "part") { + //Part* p = newPart(); + //p->read(xml); + Part* p = 0; + p = readXmlPart(xml, this); + if(p) + parts()->add(p); + } + else if (tag == "device") + setOutPort(xml.parseInt()); + else if (tag == "channel") + setOutChannel(xml.parseInt()); + else if (tag == "inportMap") + //setInPortMask(xml.parseInt()); + ///setInPortMask(xml.parseUInt()); + //xml.skip(tag); // Obsolete. + portmask = xml.parseUInt(); // p3.3.48: Support old files. + else if (tag == "inchannelMap") + ///setInChannelMask(xml.parseInt()); + //xml.skip(tag); // Obsolete. + chanmask = xml.parseInt(); // p3.3.48: Support old files. + else if (tag == "locked") + _locked = xml.parseInt(); + else if (tag == "echo") + _recEcho = xml.parseInt(); + else if (tag == "automation") + setAutomationType(AutomationType(xml.parseInt())); + else if (Track::readProperties(xml, tag)) { + // version 1.0 compatibility: + if (tag == "track" && xml.majorVersion() == 1 && xml.minorVersion() == 0) + break; + xml.unknown("MidiTrack"); + } + break; + case Xml::Attribut: + break; + case Xml::TagEnd: + if (tag == "miditrack" || tag == "drumtrack") + { + setInPortAndChannelMask(portmask, chanmask); // p3.3.48: Support old files. + return; + } + default: + break; + } + } + } + diff --git a/muse2/muse/track.h b/muse2/muse/track.h new file mode 100644 index 00000000..c0a11056 --- /dev/null +++ b/muse2/muse/track.h @@ -0,0 +1,675 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: track.h,v 1.39.2.17 2009/12/20 05:00:35 terminator356 Exp $ +// +// (C) Copyright 1999-2004 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __TRACK_H__ +#define __TRACK_H__ + +#include +#include +#include + +#include "part.h" +#include "key.h" +#include "node.h" +#include "route.h" +#include "ctrl.h" +#include "globaldefs.h" + +class Pipeline; +class Xml; +class SndFile; +class MPEventList; +class SynthI; +class PluginI; + +//--------------------------------------------------------- +// Track +//--------------------------------------------------------- + +class Track { + public: + enum TrackType { + MIDI=0, DRUM, WAVE, AUDIO_OUTPUT, AUDIO_INPUT, AUDIO_GROUP, + AUDIO_AUX, AUDIO_SOFTSYNTH + }; + private: + TrackType _type; + QString _comment; + + PartList _parts; + + void init(); + + protected: + static unsigned int _soloRefCnt; + static Track* _tmpSoloChainTrack; + static bool _tmpSoloChainDoIns; + static bool _tmpSoloChainNoDec; + + // p3.3.38 + RouteList _inRoutes; + RouteList _outRoutes; + + QString _name; + bool _recordFlag; + bool _mute; + bool _solo; + unsigned int _internalSolo; + bool _off; + int _channels; // 1 - mono, 2 - stereo + + bool _volumeEnCtrl; + bool _volumeEn2Ctrl; + bool _panEnCtrl; + bool _panEn2Ctrl; + + int _activity; + int _lastActivity; + //int _meter[MAX_CHANNELS]; + //int _peak[MAX_CHANNELS]; + double _meter[MAX_CHANNELS]; + double _peak[MAX_CHANNELS]; + + int _y; + int _height; // visual height in arranger + + bool _locked; + bool _selected; + bool readProperties(Xml& xml, const QString& tag); + void writeProperties(int level, Xml& xml) const; + + public: + Track(TrackType); + //Track(const Track&); + Track(const Track&, bool cloneParts); + virtual ~Track() {}; + virtual Track& operator=(const Track& t); + QString comment() const { return _comment; } + void setComment(const QString& s) { _comment = s; } + + int y() const; + void setY(int n) { _y = n; } + int height() const { return _height; } + void setHeight(int n) { _height = n; } + + bool selected() const { return _selected; } + void setSelected(bool f) { _selected = f; } + bool locked() const { return _locked; } + void setLocked(bool b) { _locked = b; } + + bool volumeControllerEnabled() const { return _volumeEnCtrl; } + bool volumeControllerEnabled2() const { return _volumeEn2Ctrl; } + bool panControllerEnabled() const { return _panEnCtrl; } + bool panControllerEnabled2() const { return _panEn2Ctrl; } + void enableVolumeController(bool b) { _volumeEnCtrl = b; } + void enable2VolumeController(bool b) { _volumeEn2Ctrl = b; } + void enablePanController(bool b) { _panEnCtrl = b; } + void enable2PanController(bool b) { _panEn2Ctrl = b; } + void clearRecAutomation(bool clearList); + + const QString& name() const { return _name; } + virtual void setName(const QString& s) { _name = s; } + + TrackType type() const { return _type; } + void setType(TrackType t) { _type = t; } + + // routing + RouteList* inRoutes() { return &_inRoutes; } + RouteList* outRoutes() { return &_outRoutes; } + bool noInRoute() const { return _inRoutes.empty(); } + bool noOutRoute() const { return _outRoutes.empty(); } + void writeRouting(int, Xml&) const; + + PartList* parts() { return &_parts; } + const PartList* cparts() const { return &_parts; } + Part* findPart(unsigned tick); + iPart addPart(Part* p); + + virtual void write(int, Xml&) const = 0; + + virtual Track* newTrack() const = 0; + //virtual Track* clone() const = 0; + virtual Track* clone(bool CloneParts) const = 0; + + virtual bool setRecordFlag1(bool f) = 0; + virtual void setRecordFlag2(bool f) = 0; + + virtual Part* newPart(Part*p=0, bool clone = false) = 0; + void dump() const; + virtual void splitPart(Part*, int, Part*&, Part*&); + + virtual void setMute(bool val); + virtual void setOff(bool val); + virtual void updateSoloStates(bool noDec) = 0; + virtual void updateInternalSoloStates(); + void updateSoloState(); + void setInternalSolo(unsigned int val); + static void clearSoloRefCounts(); + virtual void setSolo(bool val) = 0; + virtual bool isMute() const = 0; + + unsigned int internalSolo() const { return _internalSolo; } + bool soloMode() const { return _soloRefCnt; } + bool solo() const { return _solo; } + bool mute() const { return _mute; } + bool off() const { return _off; } + bool recordFlag() const { return _recordFlag; } + + int activity() { return _activity; } + void setActivity(int v) { _activity = v; } + int lastActivity() { return _lastActivity; } + void setLastActivity(int v) { _lastActivity = v; } + void addActivity(int v) { _activity += v; } + void resetPeaks(); + static void resetAllMeter(); + //int meter(int ch) const { return _meter[ch]; } + //int peak(int ch) const { return _peak[ch]; } + double meter(int ch) const { return _meter[ch]; } + double peak(int ch) const { return _peak[ch]; } + void resetMeter(); + + bool readProperty(Xml& xml, const QString& tag); + void setDefaultName(); + int channels() const { return _channels; } + virtual void setChannels(int n); + bool isMidiTrack() const { return type() == MIDI || type() == DRUM; } + virtual bool canRecord() const { return false; } + virtual AutomationType automationType() const = 0; + virtual void setAutomationType(AutomationType t) = 0; + }; + +//--------------------------------------------------------- +// MidiTrack +//--------------------------------------------------------- + +class MidiTrack : public Track { + //friend class AudioTrack; + //static unsigned int _soloRefCnt; + + int _outPort; + int _outChannel; + //int _inPortMask; + ///unsigned int _inPortMask; // bitmask of accepted record ports + ///int _inChannelMask; // bitmask of accepted record channels + bool _recEcho; // For midi (and audio). Whether to echo incoming record events to output device. + + EventList* _events; // tmp Events during midi import + MPEventList* _mpevents; // tmp Events druring recording + + public: + MidiTrack(); + //MidiTrack(const MidiTrack&); + MidiTrack(const MidiTrack&, bool cloneParts); + virtual ~MidiTrack(); + + void init(); + virtual AutomationType automationType() const; + virtual void setAutomationType(AutomationType); + + // play parameter + int transposition; + int velocity; + int delay; + int len; + int compression; + + virtual bool setRecordFlag1(bool f) { _recordFlag = f; return true;} + virtual void setRecordFlag2(bool) {} + + EventList* events() const { return _events; } + MPEventList* mpevents() const { return _mpevents; } + + virtual void read(Xml&); + virtual void write(int, Xml&) const; + + virtual MidiTrack* newTrack() const { return new MidiTrack(); } + //virtual MidiTrack* clone() const { return new MidiTrack(*this); } + virtual MidiTrack* clone(bool cloneParts) const { return new MidiTrack(*this, cloneParts); } + virtual Part* newPart(Part*p=0, bool clone=false); + + void setOutChannel(int i) { _outChannel = i; } + void setOutPort(int i) { _outPort = i; } + void setOutChanAndUpdate(int i); + void setOutPortAndUpdate(int i); + + //void setInPortMask(int i) { _inPortMask = i; } + ///void setInPortMask(unsigned int i) { _inPortMask = i; } // Obsolete + ///void setInChannelMask(int i) { _inChannelMask = i; } // + // Backward compatibility: For reading old songs. + void setInPortAndChannelMask(unsigned int /*portmask*/, int /*chanmask*/); + + void setRecEcho(bool b) { _recEcho = b; } + int outPort() const { return _outPort; } + //int inPortMask() const { return _inPortMask; } + ///unsigned int inPortMask() const { return _inPortMask; } + int outChannel() const { return _outChannel; } + ///int inChannelMask() const { return _inChannelMask; } + bool recEcho() const { return _recEcho; } + + virtual bool isMute() const; + virtual void setSolo(bool val); + virtual void updateSoloStates(bool noDec); + virtual void updateInternalSoloStates(); + + //bool soloMode() const { return _soloRefCnt; } + + virtual bool canRecord() const { return true; } + }; + +//--------------------------------------------------------- +// AudioTrack +// this track can hold audio automation data and can +// hold tracktypes AUDIO, AUDIO_MASTER, AUDIO_GROUP, +// AUDIO_INPUT, AUDIO_SOFTSYNTH, AUDIO_AUX +//--------------------------------------------------------- + +class AudioTrack : public Track { + //friend class MidiTrack; + //static unsigned int _soloRefCnt; + + bool _haveData; + + CtrlListList _controller; + CtrlRecList _recEvents; // recorded automation events + + bool _prefader; // prefader metering + std::vector _auxSend; + Pipeline* _efxPipe; + + AutomationType _automationType; + + //RouteList _inRoutes; + //RouteList _outRoutes; + + bool _sendMetronome; + + //void readRecfile(Xml& xml); + void readAuxSend(Xml& xml); + + protected: + float** outBuffers; + //float* outBuffers[MAX_CHANNELS]; + int _totalOutChannels; + int _totalInChannels; + + unsigned bufferPos; + virtual bool getData(unsigned, int, unsigned, float**); + SndFile* _recFile; + Fifo fifo; // fifo -> _recFile + bool _processed; + + public: + AudioTrack(TrackType t); + //AudioTrack(TrackType t, int num_out_bufs = MAX_CHANNELS); + + //AudioTrack(const AudioTrack&); + AudioTrack(const AudioTrack&, bool cloneParts); + virtual ~AudioTrack(); + + virtual bool setRecordFlag1(bool f); + virtual void setRecordFlag2(bool f); + + bool processed() { return _processed; } + //void setProcessed(bool v) { _processed = v; } + + void addController(CtrlList*); + void removeController(int id); + void swapControllerIDX(int idx1, int idx2); + + bool readProperties(Xml&, const QString&); + void writeProperties(int, Xml&) const; + + void mapRackPluginsToControllers(); + void showPendingPluginNativeGuis(); + + //virtual AudioTrack* clone() const = 0; + virtual AudioTrack* clone(bool cloneParts) const = 0; + virtual Part* newPart(Part*p=0, bool clone=false); + + SndFile* recFile() const { return _recFile; } + void setRecFile(SndFile* sf) { _recFile = sf; } + + CtrlListList* controller() { return &_controller; } + + virtual void setChannels(int n); + virtual void setTotalOutChannels(int num); + virtual int totalOutChannels() { return _totalOutChannels; } + virtual void setTotalInChannels(int num); + virtual int totalInChannels() { return _totalInChannels; } + + virtual bool isMute() const; + virtual void setSolo(bool val); + virtual void updateSoloStates(bool noDec); + virtual void updateInternalSoloStates(); + + //bool soloMode() const { return _soloRefCnt; } + + void putFifo(int channels, unsigned long n, float** bp); + + void record(); + + virtual void setMute(bool val); + virtual void setOff(bool val); + + void setSendMetronome(bool val) { _sendMetronome = val; } + bool sendMetronome() const { return _sendMetronome; } + + double volume() const; + void setVolume(double val); + double pan() const; + void setPan(double val); + + bool prefader() const { return _prefader; } + double auxSend(int idx) const; + void setAuxSend(int idx, double v); + void addAuxSend(int n); + + void setPrefader(bool val); + Pipeline* efxPipe() { return _efxPipe; } + void deleteAllEfxGuis(); + void clearEfxList(); + void addPlugin(PluginI* plugin, int idx); + + double pluginCtrlVal(int ctlID) const; + void setPluginCtrlVal(int param, double val); + + void readVolume(Xml& xml); + //void writeRouting(int, Xml&) const; + + // routing + //RouteList* inRoutes() { return &_inRoutes; } + //RouteList* outRoutes() { return &_outRoutes; } + //bool noInRoute() const { return _inRoutes.empty(); } + //bool noOutRoute() const { return _outRoutes.empty(); } + + virtual void preProcessAlways() { _processed = false; } + virtual void addData(unsigned /*samplePos*/, int /*channels*/, int /*srcStartChan*/, int /*srcChannels*/, unsigned /*frames*/, float** /*buffer*/); + virtual void copyData(unsigned /*samplePos*/, int /*channels*/, int /*srcStartChan*/, int /*srcChannels*/, unsigned /*frames*/, float** /*buffer*/); + virtual bool hasAuxSend() const { return false; } + + // automation + virtual AutomationType automationType() const { return _automationType; } + virtual void setAutomationType(AutomationType t); + void processAutomationEvents(); + CtrlRecList* recEvents() { return &_recEvents; } + void recordAutomation(int n, double v); + void startAutoRecord(int, double); + void stopAutoRecord(int, double); + void setControllerMode(int, CtrlList::Mode m); + void clearControllerEvents(int); + void seekPrevACEvent(int); + void seekNextACEvent(int); + void eraseACEvent(int, int); + void eraseRangeACEvents(int, int, int); + void addACEvent(int, int, double); + }; + +//--------------------------------------------------------- +// AudioInput +//--------------------------------------------------------- + +class AudioInput : public AudioTrack { + void* jackPorts[MAX_CHANNELS]; + virtual bool getData(unsigned, int, unsigned, float**); + + public: + AudioInput(); + //AudioInput(const AudioInput&); + AudioInput(const AudioInput&, bool cloneParts); + virtual ~AudioInput(); + //AudioInput* clone() const { return new AudioInput(*this); } + AudioInput* clone(bool cloneParts) const { return new AudioInput(*this, cloneParts); } + virtual AudioInput* newTrack() const { return new AudioInput(); } + virtual void read(Xml&); + virtual void write(int, Xml&) const; + virtual void setName(const QString& s); + void* jackPort(int channel) { return jackPorts[channel]; } + void setJackPort(int channel, void*p) { jackPorts[channel] = p; } + virtual void setChannels(int n); + virtual bool hasAuxSend() const { return true; } + }; + +//--------------------------------------------------------- +// AudioOutput +//--------------------------------------------------------- + +class AudioOutput : public AudioTrack { + void* jackPorts[MAX_CHANNELS]; + float* buffer[MAX_CHANNELS]; + float* buffer1[MAX_CHANNELS]; + unsigned long _nframes; + + float* _monitorBuffer[MAX_CHANNELS]; + + public: + AudioOutput(); + //AudioOutput(const AudioOutput&); + AudioOutput(const AudioOutput&, bool cloneParts); + virtual ~AudioOutput(); + //AudioOutput* clone() const { return new AudioOutput(*this); } + AudioOutput* clone(bool cloneParts) const { return new AudioOutput(*this, cloneParts); } + virtual AudioOutput* newTrack() const { return new AudioOutput(); } + virtual void read(Xml&); + virtual void write(int, Xml&) const; + virtual void setName(const QString& s); + void* jackPort(int channel) { return jackPorts[channel]; } + void setJackPort(int channel, void*p) { jackPorts[channel] = p; } + virtual void setChannels(int n); +// virtual bool isMute() const; + + void processInit(unsigned); + void process(unsigned pos, unsigned offset, unsigned); + void processWrite(); + void silence(unsigned); + virtual bool canRecord() const { return true; } + + float** monitorBuffer() { return _monitorBuffer; } + }; + +//--------------------------------------------------------- +// AudioGroup +//--------------------------------------------------------- + +class AudioGroup : public AudioTrack { + public: + AudioGroup() : AudioTrack(AUDIO_GROUP) { } + //AudioGroup* clone() const { return new AudioGroup(*this); } + AudioGroup* clone(bool /*cloneParts*/) const { return new AudioGroup(*this); } + virtual AudioGroup* newTrack() const { return new AudioGroup(); } + virtual void read(Xml&); + virtual void write(int, Xml&) const; + virtual bool hasAuxSend() const { return true; } + }; + +//--------------------------------------------------------- +// AudioAux +//--------------------------------------------------------- + +class AudioAux : public AudioTrack { + float* buffer[MAX_CHANNELS]; + + public: + AudioAux(); + //AudioAux* clone() const { return new AudioAux(*this); } + AudioAux* clone(bool /*cloneParts*/) const { return new AudioAux(*this); } + ~AudioAux(); + virtual AudioAux* newTrack() const { return new AudioAux(); } + virtual void read(Xml&); + virtual void write(int, Xml&) const; + virtual bool getData(unsigned, int, unsigned, float**); + virtual void setChannels(int n); + float** sendBuffer() { return buffer; } + }; + +//--------------------------------------------------------- +// WaveTrack +//--------------------------------------------------------- + +class WaveTrack : public AudioTrack { + Fifo _prefetchFifo; // prefetch Fifo + + public: + static bool firstWaveTrack; + + WaveTrack() : AudioTrack(Track::WAVE) { } + //WaveTrack(const WaveTrack& wt) : AudioTrack(wt) {} + WaveTrack(const WaveTrack& wt, bool cloneParts) : AudioTrack(wt, cloneParts) {} + + //virtual WaveTrack* clone() const { return new WaveTrack(*this); } + virtual WaveTrack* clone(bool cloneParts) const { return new WaveTrack(*this, cloneParts); } + virtual WaveTrack* newTrack() const { return new WaveTrack(); } + virtual Part* newPart(Part*p=0, bool clone=false); + + virtual void read(Xml&); + virtual void write(int, Xml&) const; + + //virtual void fetchData(unsigned pos, unsigned frames, float** bp); + virtual void fetchData(unsigned pos, unsigned frames, float** bp, bool doSeek); + + virtual bool getData(unsigned, int ch, unsigned, float** bp); + + void clearPrefetchFifo() { _prefetchFifo.clear(); } + Fifo* prefetchFifo() { return &_prefetchFifo; } + virtual void setChannels(int n); + virtual bool hasAuxSend() const { return true; } + bool canEnableRecord() const; + virtual bool canRecord() const { return true; } + }; + +//--------------------------------------------------------- +// TrackList +//--------------------------------------------------------- + +template class tracklist : public std::vector { + typedef std::vector vlist; + + public: + class iterator : public vlist::iterator { + public: + iterator() : vlist::iterator() {} + iterator(vlist::iterator i) : vlist::iterator(i) {} + + T operator*() { + return (T)(**((vlist::iterator*)this)); + } + iterator operator++(int) { + return iterator ((*(vlist::iterator*)this).operator++(0)); + } + iterator& operator++() { + return (iterator&) ((*(vlist::iterator*)this).operator++()); + } + }; + + class const_iterator : public vlist::const_iterator { + public: + const_iterator() : vlist::const_iterator() {} + const_iterator(vlist::const_iterator i) : vlist::const_iterator(i) {} + const_iterator(vlist::iterator i) : vlist::const_iterator(i) {} + + const T operator*() const { + return (T)(**((vlist::const_iterator*)this)); + } + }; + + class reverse_iterator : public vlist::reverse_iterator { + public: + reverse_iterator() : vlist::reverse_iterator() {} + reverse_iterator(vlist::reverse_iterator i) : vlist::reverse_iterator(i) {} + + T operator*() { + return (T)(**((vlist::reverse_iterator*)this)); + } + }; + + tracklist() : vlist() {} + virtual ~tracklist() {} + + void push_back(T v) { vlist::push_back(v); } + iterator begin() { return vlist::begin(); } + iterator end() { return vlist::end(); } + const_iterator begin() const { return vlist::begin(); } + const_iterator end() const { return vlist::end(); } + reverse_iterator rbegin() { return vlist::rbegin(); } + reverse_iterator rend() { return vlist::rend(); } + T& back() const { return (T&)(vlist::back()); } + T& front() const { return (T&)(vlist::front()); } + iterator find(const Track* t) { + return std::find(begin(), end(), t); + } + const_iterator find(const Track* t) const { + return std::find(begin(), end(), t); + } + unsigned index(const Track* t) const { + unsigned n = 0; + for (vlist::const_iterator i = begin(); i != end(); ++i, ++n) { + if (*i == t) + return n; + } + return -1; + } + T index(int k) const { return (*this)[k]; } + iterator index2iterator(int k) { + if ((unsigned)k >= size()) + return end(); + return begin() + k; + } + void erase(Track* t) { vlist::erase(find(t)); } + + void clearDelete() { + for (vlist::iterator i = begin(); i != end(); ++i) + delete *i; + vlist::clear(); + } + void erase(vlist::iterator i) { vlist::erase(i); } + void replace(Track* ot, Track* nt) { + for (vlist::iterator i = begin(); i != end(); ++i) { + if (*i == ot) { + *i = nt; + return; + } + } + } + }; + +typedef tracklist TrackList; +typedef TrackList::iterator iTrack; +typedef TrackList::const_iterator ciTrack; + +typedef tracklist::iterator iMidiTrack; +typedef tracklist::const_iterator ciMidiTrack; +typedef tracklist MidiTrackList; + +typedef tracklist::iterator iWaveTrack; +typedef tracklist::const_iterator ciWaveTrack; +typedef tracklist WaveTrackList; + +typedef tracklist::iterator iAudioInput; +typedef tracklist::const_iterator ciAudioInput; +typedef tracklist InputList; + +typedef tracklist::iterator iAudioOutput; +typedef tracklist::const_iterator ciAudioOutput; +typedef tracklist OutputList; + +typedef tracklist::iterator iAudioGroup; +typedef tracklist::const_iterator ciAudioGroup; +typedef tracklist GroupList; + +typedef tracklist::iterator iAudioAux; +typedef tracklist::const_iterator ciAudioAux; +typedef tracklist AuxList; + +typedef tracklist::iterator iSynthI; +typedef tracklist::const_iterator ciSynthI; +typedef tracklist SynthIList; + +extern void addPortCtrlEvents(MidiTrack* t); +extern void removePortCtrlEvents(MidiTrack* t); + +#endif + diff --git a/muse2/muse/transport.cpp b/muse2/muse/transport.cpp new file mode 100644 index 00000000..4cb206a2 --- /dev/null +++ b/muse2/muse/transport.cpp @@ -0,0 +1,673 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: transport.cpp,v 1.8.2.3 2009/07/01 10:39:42 spamatica Exp $ +// +// (C) Copyright 1999/2000 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//Added by qt3to4: +#include +#include +#include +#include +#include + +#include "song.h" +#include "transport.h" +#include "doublelabel.h" +#include "siglabel.h" +#include "globals.h" +#include "icons.h" +#include "posedit.h" +#include "sync.h" +#include "shortcuts.h" +#include "gconfig.h" +#include "app.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"); + +//--------------------------------------------------------- +// toolButton +//--------------------------------------------------------- + +static QToolButton* newButton(QWidget* parent, const QString& s, + const QString& tt, bool toggle=false, int height=25) + { + QToolButton* button = new QToolButton(parent); + button->setFixedHeight(height); + button->setText(s); + button->setToggleButton(toggle); + QToolTip::add(button, tt); + return button; + } + +static QToolButton* newButton(QWidget* parent, const QPixmap* pm, + const QString& tt, bool toggle=false) + { + QToolButton* button = new QToolButton(parent); + button->setFixedHeight(25); + button->setPixmap(*pm); + button->setToggleButton(toggle); + QToolTip::add(button, tt); + return button; + } + +//--------------------------------------------------------- +// Handle +// erlaubt das Verschieben eines Root-Windows mit der +// Maus +//--------------------------------------------------------- + +Handle::Handle(QWidget* root, QWidget* r) + : QWidget(root) + { + rootWin = r; + setFixedWidth(20); + setCursor(Qt::pointingHandCursor); + setBackgroundColor(config.transportHandleColor); + } + +//--------------------------------------------------------- +// mouseMoveEvent +//--------------------------------------------------------- + +void Handle::mouseMoveEvent(QMouseEvent* ev) + { + rootWin->move(ev->globalX()-dx, ev->globalY() - dy); + } + +//--------------------------------------------------------- +// mousePressEvent +//--------------------------------------------------------- + +void Handle::mousePressEvent(QMouseEvent* ev) + { + rootWin->raise(); + dx = ev->globalX() - rootWin->x(); + dy = ev->globalY() - rootWin->y(); + } + +//--------------------------------------------------------- +// TempoSig +// Widget f�r Tempo + Signature +//--------------------------------------------------------- + +TempoSig::TempoSig(QWidget* parent) + : QWidget(parent, "TempoSig") + { + Q3BoxLayout* vb1 = new Q3VBoxLayout(this); + vb1->setAutoAdd(true); + + Q3Frame* f = new Q3Frame(this); + f->setFrameStyle(Q3Frame::Panel | Q3Frame::Sunken); + f->setLineWidth(1); + + Q3BoxLayout* vb2 = new Q3VBoxLayout(f); + vb2->setAutoAdd(true); + + l1 = new DoubleLabel(120.0, 20.0, 400.0, f); + + l1->setSpecialText(QString("extern")); + l2 = new SigLabel(4, 4, f); + + l3 = new QLabel(tr("Tempo/Sig"), this); + l3->setFont(config.fonts[2]); + + l1->setBackgroundMode(Qt::PaletteLight); + l1->setAlignment(Qt::AlignCenter); + l1->setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed)); + l2->setBackgroundMode(Qt::PaletteLight); + l2->setAlignment(Qt::AlignCenter); + l2->setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed)); + l3->setAlignment(Qt::AlignCenter); + l3->setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed)); + + connect(l1, SIGNAL(valueChanged(double,int)), SLOT(setTempo(double))); + connect(l2, SIGNAL(valueChanged(int,int)), SIGNAL(sigChanged(int,int))); + connect(muse, SIGNAL(configChanged()), SLOT(configChanged())); + } + +//--------------------------------------------------------- +// configChanged +//--------------------------------------------------------- + +void TempoSig::configChanged() + { + l3->setFont(config.fonts[2]); + } + +//--------------------------------------------------------- +// setTempo +//--------------------------------------------------------- + +void TempoSig::setTempo(double t) + { + int tempo = int ((1000000.0 * 60.0)/t); + emit tempoChanged(tempo); + } + +//--------------------------------------------------------- +// setTempo +//--------------------------------------------------------- + +void TempoSig::setTempo(int tempo) + { + double t; + if(tempo == 0) + t = l1->off() - 1.0; + else + t = (1000000.0 * 60.0)/tempo; + + l1->blockSignals(true); + l1->setValue(t); + l1->blockSignals(false); + } + +//--------------------------------------------------------- +// setTimesig +//--------------------------------------------------------- + +void TempoSig::setTimesig(int a, int b) + { + l2->setValue(a, b); + } + +//--------------------------------------------------------- +// setRecord +//--------------------------------------------------------- + +void Transport::setRecord(bool flag) + { + buttons[5]->blockSignals(true); + buttons[5]->setOn(flag); + buttons[5]->blockSignals(false); + } + +//--------------------------------------------------------- +// Transport +//--------------------------------------------------------- + +Transport::Transport(QWidget*, const char* name) + // : QWidget(0, name, WStyle_Customize | WType_TopLevel | WStyle_Tool + //| WStyle_NoBorder | WStyle_StaysOnTop) + : QWidget(0, name, Qt::WStyle_Customize | Qt::WType_TopLevel | Qt::WStyle_NoBorder | Qt::WStyle_StaysOnTop) + { + setCaption(QString("Muse: Transport")); + setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum)); + + Q3HBoxLayout* hbox = new Q3HBoxLayout(this, 2, 5); + + hbox->setAutoAdd(true); + lefthandle = new Handle(this, this); + + //----------------------------------------------------- + // Record & Cycle Mode + //----------------------------------------------------- + + Q3VBox* box1 = new Q3VBox(this); + recMode = new QComboBox(box1); + recMode->setFocusPolicy(Qt::NoFocus); + recMode->insertItem(tr("Overdub"), Song::REC_OVERDUP); + recMode->insertItem(tr("Replace"), Song::REC_REPLACE); + recMode->setCurrentItem(song->recMode()); + l2 = new QLabel(tr("Rec Mode"), box1); + l2->setFont(config.fonts[2]); + l2->setAlignment(Qt::AlignCenter); + connect(recMode, SIGNAL(activated(int)), SLOT(setRecMode(int))); + + cycleMode = new QComboBox(box1); + cycleMode->setFocusPolicy(Qt::NoFocus); + cycleMode->insertItem(tr("Normal"), Song::CYCLE_NORMAL); + cycleMode->insertItem(tr("Mix"), Song::CYCLE_MIX); + cycleMode->insertItem(tr("Replace"), Song::CYCLE_REPLACE); + cycleMode->setCurrentItem(song->cycleMode()); + l3 = new QLabel(tr("Cycle Rec"), box1); + l3->setFont(config.fonts[2]); + l3->setAlignment(Qt::AlignCenter); + connect(cycleMode, SIGNAL(activated(int)), SLOT(setCycleMode(int))); + + //----------------------------------------------------- + // loop flags + //----------------------------------------------------- + + Q3VBox* button2 = new Q3VBox(this); + button2->setMargin(3); + + QToolButton* b1 = newButton(button2, punchinIcon, tr("punchin"), true); + QToolButton* b2 = newButton(button2, loopIcon, tr("loop"), true); + b2->setAccel(shortcuts[SHRT_TOGGLE_LOOP].key); + + QToolButton* b3 = newButton(button2, punchoutIcon, tr("punchout"), true); + QToolTip::add(b1, tr("Punch In")); + QToolTip::add(b2, tr("Loop")); + QToolTip::add(b3, tr("Punch Out")); + Q3WhatsThis::add(b1, tr("Punch In")); + + connect(b1, SIGNAL(toggled(bool)), song, SLOT(setPunchin(bool))); + connect(b2, SIGNAL(toggled(bool)), song, SLOT(setLoop(bool))); + connect(b3, SIGNAL(toggled(bool)), song, SLOT(setPunchout(bool))); + + b1->setOn(song->punchin()); + b2->setOn(song->loop()); + b3->setOn(song->punchout()); + + connect(song, SIGNAL(punchinChanged(bool)), b1, SLOT(setOn(bool))); + connect(song, SIGNAL(punchoutChanged(bool)), b3, SLOT(setOn(bool))); + connect(song, SIGNAL(loopChanged(bool)), b2, SLOT(setOn(bool))); + + //----------------------------------------------------- + // left right mark + //----------------------------------------------------- + + Q3VBox* marken = new Q3VBox(this); + tl1 = new PosEdit(marken); + l5 = new QLabel(tr("Left Mark"), marken); + l5->setFont(config.fonts[2]); + l5->setAlignment(Qt::AlignCenter); + tl2 = new PosEdit(marken); + l6 = new QLabel(tr("Right Mark"), marken); + l6->setFont(config.fonts[2]); + l6->setAlignment(Qt::AlignCenter); + + //----------------------------------------------------- + // Transport Buttons + //----------------------------------------------------- + + Q3VBox* box4 = new Q3VBox(this); + box4->setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum)); + box4->setSpacing(3); + Q3HBox* hbox1 = new Q3HBox(box4); + hbox1->setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum)); + time1 = new PosEdit(hbox1); + time2 = new PosEdit(hbox1); + time2->setSmpte(true); + time1->setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed)); + time2->setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed)); + + slider = new QSlider(0, 200000, 1000, 0, Qt::Horizontal, box4); + + tb = new Q3HBox(box4); + tb->setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum)); + + buttons[0] = newButton(tb, startIcon, tr("rewind to start")); + Q3WhatsThis::add(buttons[0], tr(startTransportText)); + + buttons[1] = newButton(tb, frewindIcon, tr("rewind")); + buttons[1]->setAutoRepeat(true); + Q3WhatsThis::add(buttons[1], tr(frewindTransportText)); + + buttons[2] = newButton(tb, fforwardIcon, tr("forward")); + buttons[2]->setAutoRepeat(true); + Q3WhatsThis::add(buttons[2], tr(fforwardTransportText)); + + buttons[3] = newButton(tb, stopIcon, tr("stop"), true); + buttons[3]->setOn(true); // set STOP + Q3WhatsThis::add(buttons[3], tr(stopTransportText)); + + buttons[4] = newButton(tb, playIcon, tr("play"), true); + Q3WhatsThis::add(buttons[4], tr(playTransportText)); + + buttons[5] = newButton(tb, record_on_Icon, tr("record"), true); + Q3WhatsThis::add(buttons[5], tr(recordTransportText)); + + for (int i = 0; i < 6; ++i) + buttons[i]->setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed)); + + + connect(buttons[3], SIGNAL(toggled(bool)), SLOT(stopToggled(bool))); + connect(buttons[4], SIGNAL(toggled(bool)), SLOT(playToggled(bool))); + + connect(buttons[5], SIGNAL(toggled(bool)), song, SLOT(setRecord(bool))); + connect(song, SIGNAL(recordChanged(bool)), SLOT(setRecord(bool))); + connect(buttons[0], SIGNAL(clicked()), song, SLOT(rewindStart())); + connect(buttons[1], SIGNAL(clicked()), song, SLOT(rewind())); + connect(buttons[2], SIGNAL(clicked()), song, SLOT(forward())); + + //----------------------------------------------------- + // AQ - Click - Sync + //----------------------------------------------------- + + Q3VBox* button1 = new Q3VBox(this); + button1->setMargin(1); + + quantizeButton = newButton(button1, tr("AC"), tr("quantize during record"), true,19); + clickButton = newButton(button1, tr("Click"), tr("metronom click on/off"), true,19); + clickButton->setAccel(shortcuts[SHRT_TOGGLE_METRO].key); + + syncButton = newButton(button1, tr("Sync"), tr("external sync on/off"), true,19); + jackTransportButton = newButton(button1, tr("Jack"), tr("Jack transport sync on/off"), true,19); + + quantizeButton->setOn(song->quantize()); + clickButton->setOn(song->click()); + syncButton->setOn(extSyncFlag.value()); + jackTransportButton->setOn(useJackTransport.value()); + + connect(quantizeButton, SIGNAL(toggled(bool)), song, SLOT(setQuantize(bool))); + connect(clickButton, SIGNAL(toggled(bool)), song, SLOT(setClick(bool))); + + connect(syncButton, SIGNAL(toggled(bool)), &extSyncFlag, SLOT(setValue(bool))); + connect(jackTransportButton, SIGNAL(toggled(bool)),&useJackTransport, SLOT(setValue(bool))); + connect(&extSyncFlag, SIGNAL(valueChanged(bool)), SLOT(syncChanged(bool))); + connect(&useJackTransport, SIGNAL(valueChanged(bool)), SLOT(jackSyncChanged(bool))); + + connect(song, SIGNAL(quantizeChanged(bool)), this, SLOT(setQuantizeFlag(bool))); + connect(song, SIGNAL(clickChanged(bool)), this, SLOT(setClickFlag(bool))); + + //----------------------------------------------------- + // Tempo/Sig + //----------------------------------------------------- + + Q3VBox* box5 = new Q3VBox(this); + tempo = new TempoSig(box5); + tempo->setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed)); + masterButton = newButton(box5, tr("Master"), tr("use master track"), true); + masterButton->setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed)); + + connect(masterButton, SIGNAL(toggled(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&))); + + connect(slider,SIGNAL(valueChanged(int)), SLOT(cposChanged(int))); + connect(song, SIGNAL(posChanged(int, unsigned, bool)), SLOT(setPos(int, unsigned, bool))); + connect(tempo, SIGNAL(tempoChanged(int)), song, SLOT(setTempo(int))); + connect(tempo, SIGNAL(sigChanged(int, int)), song, SLOT(setSig(int, int))); + connect(song, SIGNAL(playChanged(bool)), SLOT(setPlay(bool))); + connect(song, SIGNAL(songChanged(int)), this, SLOT(songChanged(int))); + connect(muse, SIGNAL(configChanged()), SLOT(configChanged())); + righthandle = new Handle(this, this); + } + +//--------------------------------------------------------- +// configChanged +//--------------------------------------------------------- + +void Transport::configChanged() + { + l2->setFont(config.fonts[2]); + l3->setFont(config.fonts[2]); + l5->setFont(config.fonts[2]); + l6->setFont(config.fonts[2]); + lefthandle->setBackgroundColor(config.transportHandleColor); + righthandle->setBackgroundColor(config.transportHandleColor); + } + +//--------------------------------------------------------- +// setTempo +//--------------------------------------------------------- + +void Transport::setTempo(int t) + { + static int tempoVal = -1; + if (t != tempoVal) { + tempo->setTempo(t); + tempoVal = t; + } + } + +//--------------------------------------------------------- +// setHandleColor +//--------------------------------------------------------- + +void Transport::setHandleColor(QColor c) + { + lefthandle->setBackgroundColor(c); + righthandle->setBackgroundColor(c); + } + +//--------------------------------------------------------- +// setTimesig +//--------------------------------------------------------- + +void Transport::setTimesig(int z, int n) + { + tempo->setTimesig(z, n); + } + +//--------------------------------------------------------- +// setPos +//--------------------------------------------------------- + +void Transport::setPos(int idx, unsigned v, bool) + { + switch (idx) { + case 0: + time1->setValue(v); + time2->setValue(v); + slider->blockSignals(true); + slider->setValue(v); + slider->blockSignals(false); + if (song->masterFlag()) + setTempo(tempomap.tempo(v)); + { + int z, n; + sigmap.timesig(v, z, n); + setTimesig(z, n); + } + break; + case 1: + tl1->setValue(v); + break; + case 2: + tl2->setValue(v); + 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]->blockSignals(true); + buttons[4]->blockSignals(true); + buttons[3]->setOn(!f); + buttons[4]->setOn(f); + buttons[3]->blockSignals(false); + buttons[4]->blockSignals(false); + } + +//--------------------------------------------------------- +// setMasterFlag +//--------------------------------------------------------- + +void Transport::setMasterFlag(bool f) + { + masterButton->setOn(f); + } + +//--------------------------------------------------------- +// setClickFlag +//--------------------------------------------------------- + +void Transport::setClickFlag(bool f) + { + clickButton->blockSignals(true); + clickButton->setOn(f); + clickButton->blockSignals(false); + } + +//--------------------------------------------------------- +// setQuantizeFlag +//--------------------------------------------------------- + +void Transport::setQuantizeFlag(bool f) + { + quantizeButton->setOn(f); + } + +//--------------------------------------------------------- +// setSyncFlag +//--------------------------------------------------------- + +void Transport::setSyncFlag(bool f) + { + syncButton->setOn(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) + { + // Is it simply a midi controller value adjustment? Forget it. + if(flags == SC_MIDI_CONTROLLER) + return; + + slider->setRange(0, song->len()); + int cpos = song->cpos(); + int t = tempomap.tempo(cpos); + if (flags & (SC_MASTER | SC_TEMPO)) { + if (extSyncFlag.value()) + setTempo(0); + else + setTempo(t); + } + if (flags & SC_SIG) { + int z, n; + sigmap.timesig(cpos, z, n); + setTimesig(z, n); + } + if (flags & SC_MASTER) + masterButton->setOn(song->masterFlag()); + } + +//--------------------------------------------------------- +// syncChanged +//--------------------------------------------------------- + +void Transport::syncChanged(bool flag) + { + syncButton->setOn(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->setOn(false); + song->setMasterFlag(false); + tempo->setTempo(0); // slave mode: show "extern" + } + else + tempo->setTempo(tempomap.tempo(song->cpos())); + playAction->setEnabled(!flag); + startAction->setEnabled(!flag); + stopAction->setEnabled(!flag); + rewindAction->setEnabled(!flag); + forwardAction->setEnabled(!flag); + } + +void Transport::jackSyncChanged(bool flag) + { + jackTransportButton->setOn(flag); + } +//--------------------------------------------------------- +// stopToggled +//--------------------------------------------------------- + +void Transport::stopToggled(bool val) + { + if (val) + song->setStop(true); + else { + buttons[3]->blockSignals(true); + buttons[3]->setOn(true); + buttons[3]->blockSignals(false); + } + } + +//--------------------------------------------------------- +// playToggled +//--------------------------------------------------------- + +void Transport::playToggled(bool val) + { + if (val) + song->setPlay(true); + else { + buttons[4]->blockSignals(true); + buttons[4]->setOn(true); + buttons[4]->blockSignals(false); + } + } + diff --git a/muse2/muse/transport.h b/muse2/muse/transport.h new file mode 100644 index 00000000..cf87ead6 --- /dev/null +++ b/muse2/muse/transport.h @@ -0,0 +1,129 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: transport.h,v 1.4 2004/06/28 21:13:16 wschweer Exp $ +// +// (C) Copyright 1999/2000 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __TRANSPORT_H__ +#define __TRANSPORT_H__ + +#include +//Added by qt3to4: +#include +#include + +class QToolButton; +class Q3HBox; +class PosEdit; +class QSlider; +class DoubleLabel; +class SigLabel; +class QComboBox; +class Pos; +class QLabel; + +//--------------------------------------------------------- +// TempoSig +//--------------------------------------------------------- + +class TempoSig : public QWidget { + DoubleLabel* l1; + SigLabel* l2; + QLabel* l3; + Q_OBJECT + + private slots: + void configChanged(); + + public slots: + void setTempo(double); + void setTempo(int tempo); + + signals: + void tempoChanged(int); + void sigChanged(int, int); + + public: + TempoSig(QWidget* parent); + void setTimesig(int a, int b); + }; + +//--------------------------------------------------------- +// Handle +//--------------------------------------------------------- + +class Handle : public QWidget { + QWidget* rootWin; + int dx, dy; + void mouseMoveEvent(QMouseEvent* ev); + void mousePressEvent(QMouseEvent* ev); + public: + Handle(QWidget* parent, QWidget* root); + }; + +class TimeLLabel; + +//--------------------------------------------------------- +// Transport +//--------------------------------------------------------- + +class Transport : public QWidget + { + PosEdit* tl1; // left mark + PosEdit* tl2; // right mark + PosEdit* time1; // tick time + PosEdit* time2; // SMPTE + QSlider* slider; + TempoSig* tempo; + Q3HBox* tb; + QToolButton* masterButton; + QComboBox* recMode; + QComboBox* cycleMode; + QToolButton* quantizeButton; + QToolButton* clickButton; + QToolButton* syncButton; + QToolButton* jackTransportButton; + QToolButton* buttons[6]; // transport buttons + QLabel* l2; + QLabel* l3; + QLabel* l5; + QLabel* l6; + + Handle *lefthandle, *righthandle; + + Q_OBJECT + + 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 jackSyncChanged(bool); + void setRecord(bool flag); + void stopToggled(bool); + void playToggled(bool); + void configChanged(); + + public slots: + void setTempo(int tempo); + void setTimesig(int a, int b); + void setPos(int,unsigned, bool); + void setMasterFlag(bool); + void setClickFlag(bool); + void setQuantizeFlag(bool); + void setSyncFlag(bool); + void setPlay(bool f); + void setHandleColor(QColor); + + public: + Transport(QWidget* parent, const char* name = 0); + QColor getHandleColor() const { return lefthandle->backgroundColor(); } + }; +#endif + diff --git a/muse2/muse/transpose.cpp b/muse2/muse/transpose.cpp new file mode 100644 index 00000000..3090b450 --- /dev/null +++ b/muse2/muse/transpose.cpp @@ -0,0 +1,92 @@ + +#include +#include +#include +#include +#include +#include "transpose.h" +#include "track.h" +#include "song.h" +#include "event.h" +#include "audio.h" + +//--------------------------------------------------------- +// Transpose +//--------------------------------------------------------- + +Transpose::Transpose(QWidget* parent, const char* name) + : TransposeDialogBase(parent, name) + { + 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(); + } + + std::vector< EventList* > doneList; + typedef std::vector< EventList* >::iterator iDoneList; + + song->startUndo(); + for (iTrack t = tracks->begin(); t != tracks->end(); ++t) { +// if (((*t)->type() == Track::MIDI || (*t)->type() == Track::DRUM) + if (((*t)->type() != Track::MIDI) + || !(parts_all->isChecked() || (*t)->selected())) + continue; + + PartList *pl = (*t)->parts(); + for (iPart p = pl->begin(); p != pl->end(); ++p) { + MidiPart *mp = (MidiPart *) p->second; + EventList* el = mp->events(); + + // Check if the event list has already been done. Skip repeated clones. + iDoneList idl; + for(idl = doneList.begin(); idl != doneList.end(); ++idl) + if(*idl == el) + break; + if(idl != doneList.end()) + break; + doneList.push_back(el); + + 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 ); + // Indicate no undo, and do not do port controller values and clone parts. + //audio->msgChangeEvent(oe, ne, mp, false); + audio->msgChangeEvent(oe, ne, mp, false, false, false); + } + } + } + song->endUndo(SC_EVENT_MODIFIED); + close(true); + } + diff --git a/muse2/muse/transpose.h b/muse2/muse/transpose.h new file mode 100644 index 00000000..a5e004f8 --- /dev/null +++ b/muse2/muse/transpose.h @@ -0,0 +1,21 @@ + +#ifndef __TRANSPOSE_H__ +#define __TRANSPOSE_H__ + +#include "transposebase.h" + +//--------------------------------------------------------- +// transpose widget +//--------------------------------------------------------- + +class Transpose : public TransposeDialogBase { + Q_OBJECT + + private slots: + virtual void accept(); + + public: + Transpose(QWidget* parent=0, const char* name=0); + }; + +#endif diff --git a/muse2/muse/undo.cpp b/muse2/muse/undo.cpp new file mode 100644 index 00000000..ba020d2f --- /dev/null +++ b/muse2/muse/undo.cpp @@ -0,0 +1,968 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: undo.cpp,v 1.12.2.9 2009/05/24 21:43:44 terminator356 Exp $ +// +// (C) Copyright 1999/2000 Werner Schweer (ws@seh.de) +//========================================================= + +#include "undo.h" +#include "song.h" +#include "globals.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", "ModifyTrack", + "AddPart", "DeletePart", "ModifyPart", + "AddEvent", "DeleteEvent", "ModifyEvent", + "AddTempo", "DeleteTempo", "AddSig", "DeleteSig", + "SwapTrack", "ModifyClip" + }; + return name[type]; + } + +//--------------------------------------------------------- +// dump +//--------------------------------------------------------- + +void UndoOp::dump() + { + printf("UndoOp: %s\n ", typeName()); + switch(type) { + case AddTrack: + case DeleteTrack: + printf("%d %s\n", trackno, oTrack->name().latin1()); + break; + case ModifyTrack: + printf("%d <%s>-<%s>\n", trackno, oTrack->name().latin1(), nTrack->name().latin1()); + 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 SwapTrack: + case DeleteSig: + case ModifyClip: + case ModifyMarker: + break; + } + } + +//--------------------------------------------------------- +// clearDelete +//--------------------------------------------------------- + +void UndoList::clearDelete() +{ + if(!empty()) + { + for(iUndo iu = begin(); iu != end(); ++iu) + { + Undo& u = *iu; + for(riUndoOp i = u.rbegin(); i != u.rend(); ++i) + { + switch(i->type) + { + case UndoOp::DeleteTrack: + if(i->oTrack) + { + delete i->oTrack; + iUndo iu2 = iu; + ++iu2; + for(; iu2 != end(); ++iu2) + { + Undo& u2 = *iu2; + for(riUndoOp i2 = u2.rbegin(); i2 != u2.rend(); ++i2) + { + if(i2->type == UndoOp::DeleteTrack) + { + if(i2->oTrack == i->oTrack) + i2->oTrack = 0; + } + } + } + } + break; + case UndoOp::ModifyTrack: + if(i->oTrack) + { + // Prevent delete i->oTrack from crashing. + switch(i->oTrack->type()) + { + case Track::AUDIO_OUTPUT: + { + AudioOutput* ao = (AudioOutput*)i->oTrack; + for(int ch = 0; ch < ao->channels(); ++ch) + ao->setJackPort(ch, 0); + } + break; + case Track::AUDIO_INPUT: + { + AudioInput* ai = (AudioInput*)i->oTrack; + for(int ch = 0; ch < ai->channels(); ++ch) + ai->setJackPort(ch, 0); + } + break; + default: + break; + } + if(!i->oTrack->isMidiTrack()) + ((AudioTrack*)i->oTrack)->clearEfxList(); + delete i->oTrack; + + iUndo iu2 = iu; + ++iu2; + for(; iu2 != end(); ++iu2) + { + Undo& u2 = *iu2; + for(riUndoOp i2 = u2.rbegin(); i2 != u2.rend(); ++i2) + { + if(i2->type == UndoOp::ModifyTrack) + { + if(i2->oTrack == i->oTrack) + i2->oTrack = 0; + } + } + } + } + break; + //case UndoOp::DeletePart: + //delete i->oPart; + // break; + //case UndoOp::DeleteTempo: + // break; + //case UndoOp::DeleteSig: + // break; + case UndoOp::ModifyMarker: + if (i->copyMarker) + delete i->copyMarker; + default: + break; + } + } + u.clear(); + } + } + + clear(); +} + +//--------------------------------------------------------- +// 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(); + for (riUndoOp i = u.rbegin(); i != u.rend(); ++i) { + switch(i->type) { + case UndoOp::AddTrack: + removeTrack2(i->oTrack); + updateFlags |= SC_TRACK_REMOVED; + break; + case UndoOp::DeleteTrack: + insertTrack2(i->oTrack, i->trackno); + // Added by T356. + chainTrackParts(i->oTrack, true); + + updateFlags |= SC_TRACK_INSERTED; + break; + case UndoOp::ModifyTrack: + { + // Added by Tim. p3.3.6 + //printf("Song::doUndo2 ModifyTrack #1 oTrack %p %s nTrack %p %s\n", i->oTrack, i->oTrack->name().latin1(), i->nTrack, i->nTrack->name().latin1()); + + // Unchain the track parts, but don't touch the ref counts. + unchainTrackParts(i->nTrack, false); + + //Track* track = i->nTrack->clone(); + Track* track = i->nTrack->clone(false); + + // A Track custom assignment operator was added by Tim. + *(i->nTrack) = *(i->oTrack); + + // Added by Tim. p3.3.6 + //printf("Song::doUndo2 ModifyTrack #2 oTrack %p %s nTrack %p %s\n", i->oTrack, i->oTrack->name().latin1(), i->nTrack, i->nTrack->name().latin1()); + + // Prevent delete i->oTrack from crashing. + switch(i->oTrack->type()) + { + case Track::AUDIO_OUTPUT: + { + AudioOutput* ao = (AudioOutput*)i->oTrack; + for(int ch = 0; ch < ao->channels(); ++ch) + ao->setJackPort(ch, 0); + } + break; + case Track::AUDIO_INPUT: + { + AudioInput* ai = (AudioInput*)i->oTrack; + for(int ch = 0; ch < ai->channels(); ++ch) + ai->setJackPort(ch, 0); + } + break; + default: + break; + } + if(!i->oTrack->isMidiTrack()) + ((AudioTrack*)i->oTrack)->clearEfxList(); + + delete i->oTrack; + i->oTrack = track; + + // Chain the track parts, but don't touch the ref counts. + chainTrackParts(i->nTrack, false); + + // Added by Tim. p3.3.6 + //printf("Song::doUndo2 ModifyTrack #3 oTrack %p %s nTrack %p %s\n", i->oTrack, i->oTrack->name().latin1(), i->nTrack, i->nTrack->name().latin1()); + + // Connect and register ports. + switch(i->nTrack->type()) + { + case Track::AUDIO_OUTPUT: + { + AudioOutput* ao = (AudioOutput*)i->nTrack; + ao->setName(ao->name()); + } + break; + case Track::AUDIO_INPUT: + { + AudioInput* ai = (AudioInput*)i->nTrack; + ai->setName(ai->name()); + } + break; + default: + break; + } + + // Update solo states, since the user may have changed soloing on other tracks. + updateSoloStates(); + + updateFlags |= SC_TRACK_MODIFIED; + } + break; + + /* + switch(i->nTrack->type()) + { + case Track::AUDIO_OUTPUT: + { + AudioOutput* ao = (AudioOutput*)i->nTrack; + for(int ch = 0; ch < ao->channels(); ++ch) + ao->setJackPort(ch, 0); + } + break; + case Track::AUDIO_INPUT: + { + AudioInput* ai = (AudioInput*)i->nTrack; + for(int ch = 0; ch < ai->channels(); ++ch) + ai->setJackPort(ch, 0); + } + break; + default: + break; + } + if(!i->nTrack->isMidiTrack()) + ((AudioTrack*)i->nTrack)->clearEfxList(); + + //delete i->oTrack; + //i->oTrack = track; + + // Remove the track. removeTrack2 takes care of unchaining the new track. + removeTrack2(i->nTrack); + + // Connect and register ports. + switch(i->oTrack->type()) + { + case Track::AUDIO_OUTPUT: + { + AudioOutput* ao = (AudioOutput*)i->oTrack; + ao->setName(ao->name()); + } + break; + case Track::AUDIO_INPUT: + { + AudioInput* ai = (AudioInput*)i->oTrack; + ai->setName(ai->name()); + } + break; + default: + break; + } + + // Insert the old track. + insertTrack2(i->oTrack, i->trackno); + // Chain the old track parts. (removeTrack2, above, takes care of unchaining the new track). + chainTrackParts(i->oTrack, true); + + // Update solo states, since the user may have changed soloing on other tracks. + updateSoloStates(); + + updateFlags |= SC_TRACK_MODIFIED; + } + 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::AddPart: + { + Part* part = i->oPart; + removePart(part); + updateFlags |= SC_PART_REMOVED; + i->oPart->events()->incARef(-1); + //i->oPart->unchainClone(); + unchainClone(i->oPart); + } + break; + case UndoOp::DeletePart: + addPart(i->oPart); + updateFlags |= SC_PART_INSERTED; + i->oPart->events()->incARef(1); + //i->oPart->chainClone(); + chainClone(i->oPart); + break; + case UndoOp::ModifyPart: + if(i->doCtrls) + removePortCtrlEvents(i->oPart, i->doClones); + changePart(i->oPart, i->nPart); + i->oPart->events()->incARef(-1); + i->nPart->events()->incARef(1); + //i->oPart->replaceClone(i->nPart); + replaceClone(i->oPart, i->nPart); + if(i->doCtrls) + addPortCtrlEvents(i->nPart, i->doClones); + updateFlags |= SC_PART_MODIFIED; + break; + case UndoOp::AddEvent: + if(i->doCtrls) + removePortCtrlEvents(i->nEvent, i->part, i->doClones); + deleteEvent(i->nEvent, i->part); + updateFlags |= SC_EVENT_REMOVED; + break; + case UndoOp::DeleteEvent: + addEvent(i->nEvent, i->part); + if(i->doCtrls) + addPortCtrlEvents(i->nEvent, i->part, i->doClones); + updateFlags |= SC_EVENT_INSERTED; + break; + case UndoOp::ModifyEvent: + if(i->doCtrls) + removePortCtrlEvents(i->oEvent, i->part, i->doClones); + changeEvent(i->oEvent, i->nEvent, i->part); + if(i->doCtrls) + addPortCtrlEvents(i->nEvent, i->part, i->doClones); + updateFlags |= SC_EVENT_MODIFIED; + break; + case UndoOp::AddTempo: + //printf("doUndo2: UndoOp::AddTempo. deleting tempo at: %d\n", i->a); + tempomap.delTempo(i->a); + updateFlags |= SC_TEMPO; + break; + case UndoOp::DeleteTempo: + //printf("doUndo2: UndoOp::DeleteTempo. adding tempo at: %d, tempo=%d\n", i->a, i->b); + tempomap.addTempo(i->a, i->b); + updateFlags |= SC_TEMPO; + break; + case UndoOp::AddSig: + sigmap.del(i->a); + updateFlags |= SC_SIG; + break; + case UndoOp::DeleteSig: + sigmap.add(i->a, i->b, i->c); + updateFlags |= SC_SIG; + break; + case UndoOp::ModifyClip: + case UndoOp::ModifyMarker: + break; + } + } + } + +//--------------------------------------------------------- +// Song::doRedo2 +//--------------------------------------------------------- + +void Song::doRedo2() + { + Undo& u = redoList->back(); + for (iUndoOp i = u.begin(); i != u.end(); ++i) { + switch(i->type) { + case UndoOp::AddTrack: + insertTrack2(i->oTrack, i->trackno); + // Added by T356. + chainTrackParts(i->oTrack, true); + + updateFlags |= SC_TRACK_INSERTED; + break; + case UndoOp::DeleteTrack: + removeTrack2(i->oTrack); + updateFlags |= SC_TRACK_REMOVED; + break; + case UndoOp::ModifyTrack: + { + // Unchain the track parts, but don't touch the ref counts. + unchainTrackParts(i->nTrack, false); + + //Track* track = i->nTrack->clone(); + Track* track = i->nTrack->clone(false); + + *(i->nTrack) = *(i->oTrack); + + // Prevent delete i->oTrack from crashing. + switch(i->oTrack->type()) + { + case Track::AUDIO_OUTPUT: + { + AudioOutput* ao = (AudioOutput*)i->oTrack; + for(int ch = 0; ch < ao->channels(); ++ch) + ao->setJackPort(ch, 0); + } + break; + case Track::AUDIO_INPUT: + { + AudioInput* ai = (AudioInput*)i->oTrack; + for(int ch = 0; ch < ai->channels(); ++ch) + ai->setJackPort(ch, 0); + } + break; + default: + break; + } + if(!i->oTrack->isMidiTrack()) + ((AudioTrack*)i->oTrack)->clearEfxList(); + + delete i->oTrack; + i->oTrack = track; + + // Chain the track parts, but don't touch the ref counts. + chainTrackParts(i->nTrack, false); + + // Connect and register ports. + switch(i->nTrack->type()) + { + case Track::AUDIO_OUTPUT: + { + AudioOutput* ao = (AudioOutput*)i->nTrack; + ao->setName(ao->name()); + } + break; + case Track::AUDIO_INPUT: + { + AudioInput* ai = (AudioInput*)i->nTrack; + ai->setName(ai->name()); + } + break; + default: + break; + } + + // Update solo states, since the user may have changed soloing on other tracks. + updateSoloStates(); + + updateFlags |= SC_TRACK_MODIFIED; + } + break; + + /* + // Prevent delete i->oTrack from crashing. + switch(i->oTrack->type()) + { + case Track::AUDIO_OUTPUT: + { + AudioOutput* ao = (AudioOutput*)i->oTrack; + for(int ch = 0; ch < ao->channels(); ++ch) + ao->setJackPort(ch, 0); + } + break; + case Track::AUDIO_INPUT: + { + AudioInput* ai = (AudioInput*)i->oTrack; + for(int ch = 0; ch < ai->channels(); ++ch) + ai->setJackPort(ch, 0); + } + break; + default: + break; + } + if(!i->oTrack->isMidiTrack()) + ((AudioTrack*)i->oTrack)->clearEfxList(); + + //delete i->oTrack; + //i->oTrack = track; + + // Remove the track. removeTrack2 takes care of unchaining the old track. + removeTrack2(i->oTrack); + + // Connect and register ports. + switch(i->nTrack->type()) + { + case Track::AUDIO_OUTPUT: + { + AudioOutput* ao = (AudioOutput*)i->nTrack; + ao->setName(ao->name()); + } + break; + case Track::AUDIO_INPUT: + { + AudioInput* ai = (AudioInput*)i->nTrack; + ai->setName(ai->name()); + } + break; + default: + break; + } + + // Insert the new track. + insertTrack2(i->nTrack, i->trackno); + // Chain the new track parts. (removeTrack2, above, takes care of unchaining the old track). + chainTrackParts(i->nTrack, true); + + // Update solo states, since the user may have changed soloing on other tracks. + updateSoloStates(); + + updateFlags |= SC_TRACK_MODIFIED; + } + 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::AddPart: + addPart(i->oPart); + updateFlags |= SC_PART_INSERTED; + i->oPart->events()->incARef(1); + //i->oPart->chainClone(); + chainClone(i->oPart); + break; + case UndoOp::DeletePart: + removePart(i->oPart); + updateFlags |= SC_PART_REMOVED; + i->oPart->events()->incARef(-1); + //i->oPart->unchainClone(); + unchainClone(i->oPart); + break; + case UndoOp::ModifyPart: + if(i->doCtrls) + removePortCtrlEvents(i->nPart, i->doClones); + changePart(i->nPart, i->oPart); + i->oPart->events()->incARef(1); + i->nPart->events()->incARef(-1); + //i->nPart->replaceClone(i->oPart); + replaceClone(i->nPart, i->oPart); + if(i->doCtrls) + addPortCtrlEvents(i->oPart, i->doClones); + updateFlags |= SC_PART_MODIFIED; + break; + case UndoOp::AddEvent: + addEvent(i->nEvent, i->part); + if(i->doCtrls) + addPortCtrlEvents(i->nEvent, i->part, i->doClones); + updateFlags |= SC_EVENT_INSERTED; + break; + case UndoOp::DeleteEvent: + if(i->doCtrls) + removePortCtrlEvents(i->nEvent, i->part, i->doClones); + deleteEvent(i->nEvent, i->part); + updateFlags |= SC_EVENT_REMOVED; + break; + case UndoOp::ModifyEvent: + if(i->doCtrls) + removePortCtrlEvents(i->nEvent, i->part, i->doClones); + changeEvent(i->nEvent, i->oEvent, i->part); + if(i->doCtrls) + addPortCtrlEvents(i->oEvent, i->part, i->doClones); + updateFlags |= SC_EVENT_MODIFIED; + break; + case UndoOp::AddTempo: + //printf("doRedo2: UndoOp::AddTempo. adding tempo at: %d with tempo=%d\n", i->a, i->b); + tempomap.addTempo(i->a, i->b); + updateFlags |= SC_TEMPO; + break; + case UndoOp::DeleteTempo: + //printf("doRedo2: UndoOp::DeleteTempo. deleting tempo at: %d with tempo=%d\n", i->a, i->b); + tempomap.delTempo(i->a); + updateFlags |= SC_TEMPO; + break; + case UndoOp::AddSig: + sigmap.add(i->a, i->b, i->c); + updateFlags |= SC_SIG; + break; + case UndoOp::DeleteSig: + sigmap.del(i->a); + updateFlags |= SC_SIG; + break; + case UndoOp::ModifyClip: + case UndoOp::ModifyMarker: + 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, Track* oldTrack, Track* newTrack) +void Song::undoOp(UndoOp::UndoType type, int n, Track* oldTrack, Track* newTrack) + { + UndoOp i; + i.type = type; + i.trackno = n; + i.oTrack = oldTrack; + i.nTrack = newTrack; + // Added by Tim. p3.3.6 + //printf("Song::undoOp ModifyTrack oTrack %p %s nTrack %p %s\n", i.oTrack, i.oTrack->name().latin1(), i.nTrack, i.nTrack->name().latin1()); + + addUndo(i); + } + +void Song::undoOp(UndoOp::UndoType type, int n, Track* track) + { + UndoOp i; + i.type = type; + i.trackno = n; + i.oTrack = 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, Event& oev, Event& nev, Part* part) +void Song::undoOp(UndoOp::UndoType type, Event& oev, Event& nev, Part* part, bool doCtrls, bool doClones) + { + UndoOp i; + i.type = type; + i.nEvent = nev; + i.oEvent = oev; + i.part = part; + i.doCtrls = doCtrls; + i.doClones = doClones; + addUndo(i); + } + +void Song::undoOp(UndoOp::UndoType type, Event& nev, Part* part, bool doCtrls, bool doClones) + { + UndoOp i; + i.type = type; + i.nEvent = nev; + i.part = part; + i.doCtrls = doCtrls; + i.doClones = doClones; + addUndo(i); + } + +//void Song::undoOp(UndoOp::UndoType type, Part* oPart, Part* nPart) +void Song::undoOp(UndoOp::UndoType type, Part* oPart, Part* nPart, bool doCtrls, bool doClones) + { + UndoOp i; + i.type = type; + i.oPart = nPart; + i.nPart = oPart; + i.doCtrls = doCtrls; + i.doClones = doClones; + addUndo(i); + } + +void Song::undoOp(UndoOp::UndoType type, int c, int ctrl, int ov, int nv) + { + UndoOp i; + i.type = type; + i.channel = c; + i.ctrl = ctrl; + i.oVal = ov; + i.nVal = nv; + 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, 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); + } + +void Song::undoOp(UndoOp::UndoType type, Marker* copyMarker, Marker* realMarker) + { + UndoOp i; + i.type = type; + i.realMarker = realMarker; + i.copyMarker = copyMarker; + + addUndo(i); + } + +//--------------------------------------------------------- +// addUndo +//--------------------------------------------------------- + +void Song::addUndo(UndoOp& i) + { + if (!undoMode) { + printf("internal error: undoOp without startUndo()\n"); + 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; + Undo& u = undoList->back(); + for (riUndoOp i = u.rbegin(); i != u.rend(); ++i) { + switch(i->type) { + case UndoOp::AddTrack: + removeTrack1(i->oTrack); + break; + case UndoOp::DeleteTrack: + insertTrack1(i->oTrack, i->trackno); + + // FIXME: Would like to put this part in Undo2, but indications + // elsewhere are that (dis)connecting jack routes must not be + // done in the realtime thread. The result is that we get a few + // "PANIC Process init: No buffer from audio device" messages + // before the routes are (dis)connected. So far seems to do no harm though... + switch(i->oTrack->type()) + { + case Track::AUDIO_OUTPUT: + case Track::AUDIO_INPUT: + connectJackRoutes((AudioTrack*)i->oTrack, false); + break; + //case Track::AUDIO_SOFTSYNTH: + //SynthI* si = (SynthI*)i->oTrack; + //si->synth()->init( + // break; + default: + break; + } + + break; + case UndoOp::ModifyClip: + SndFile::applyUndoFile(i->filename, i->tmpwavfile, i->startframe, i->endframe); + break; + + default: + break; + } + } + return false; + } + +//--------------------------------------------------------- +// doUndo3 +// non realtime context +//--------------------------------------------------------- + +void Song::doUndo3() + { + Undo& u = undoList->back(); + for (riUndoOp i = u.rbegin(); i != u.rend(); ++i) { + switch(i->type) { + case UndoOp::AddTrack: + removeTrack3(i->oTrack); + break; + case UndoOp::DeleteTrack: + insertTrack3(i->oTrack, i->trackno); + break; + case UndoOp::ModifyTrack: + // Not much choice but to do this - Tim. + //clearClipboardAndCloneList(); + break; + case UndoOp::ModifyMarker: + { + //printf("performing undo for one marker at %d\n", i->realMarker->tick()); + Marker tmpMarker = *i->realMarker; + *i->realMarker = *i->copyMarker; // swap them + *i->copyMarker = tmpMarker; + } + 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; + Undo& u = redoList->back(); + for (iUndoOp i = u.begin(); i != u.end(); ++i) { + switch(i->type) { + case UndoOp::AddTrack: + insertTrack1(i->oTrack, i->trackno); + + // FIXME: See comments in Undo1. + switch(i->oTrack->type()) + { + case Track::AUDIO_OUTPUT: + case Track::AUDIO_INPUT: + connectJackRoutes((AudioTrack*)i->oTrack, false); + break; + //case Track::AUDIO_SOFTSYNTH: + //SynthI* si = (SynthI*)i->oTrack; + //si->synth()->init( + // break; + default: + break; + } + + break; + case UndoOp::DeleteTrack: + removeTrack1(i->oTrack); + break; + case UndoOp::ModifyClip: + SndFile::applyUndoFile(i->filename, i->tmpwavfile, i->startframe, i->endframe); + break; + default: + break; + } + } + return false; + } + +//--------------------------------------------------------- +// doRedo3 +// non realtime context +//--------------------------------------------------------- + +void Song::doRedo3() + { + Undo& u = redoList->back(); + for (iUndoOp i = u.begin(); i != u.end(); ++i) { + switch(i->type) { + case UndoOp::AddTrack: + insertTrack3(i->oTrack, i->trackno); + break; + case UndoOp::DeleteTrack: + removeTrack3(i->oTrack); + break; + case UndoOp::ModifyTrack: + // Not much choice but to do this - Tim. + //clearClipboardAndCloneList(); + break; + case UndoOp::ModifyMarker: + { + //printf("performing redo for one marker at %d\n", i->realMarker->tick()); + Marker tmpMarker = *i->realMarker; + *i->realMarker = *i->copyMarker; // swap them + *i->copyMarker = tmpMarker; + } + break; + default: + break; + } + } + undoList->push_back(u); // put item on undo list + redoList->pop_back(); + dirty = true; + } + diff --git a/muse2/muse/undo.h b/muse2/muse/undo.h new file mode 100644 index 00000000..c20fe3f5 --- /dev/null +++ b/muse2/muse/undo.h @@ -0,0 +1,102 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: undo.h,v 1.6.2.5 2009/05/24 21:43:44 terminator356 Exp $ +// +// (C) Copyright 1999/2000 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __UNDO_H__ +#define __UNDO_H__ + +#include +#include +#include "event.h" +#include "marker/marker.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, ModifyTrack, + AddPart, DeletePart, ModifyPart, + AddEvent, DeleteEvent, ModifyEvent, + AddTempo, DeleteTempo, + AddSig, DeleteSig, + SwapTrack, + ModifyClip, + ModifyMarker + }; + UndoType type; + + union { + struct { + int a; + int b; + int c; + }; + struct { + Track* oTrack; + Track* nTrack; + int trackno; + }; + struct { + Part* oPart; + Part* nPart; + }; + struct { + Part* part; + }; + struct { + SigEvent* nSignature; + SigEvent* oSignature; + }; + struct { + int channel; + int ctrl; + int oVal; + int nVal; + }; + 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 { + Marker* realMarker; + Marker* copyMarker; + }; + }; + Event oEvent; + Event nEvent; + bool doCtrls; + bool doClones; + 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: + void clearDelete(); + }; + +typedef UndoList::iterator iUndo; + + +#endif // __UNDO_H__ diff --git a/muse2/muse/value.cpp b/muse2/muse/value.cpp new file mode 100644 index 00000000..0acfc6e0 --- /dev/null +++ b/muse2/muse/value.cpp @@ -0,0 +1,60 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: value.cpp,v 1.2 2004/02/28 14:58:21 wschweer Exp $ +// +// (C) Copyright 2000 Werner Schweer (ws@seh.de) +//========================================================= + +#include "value.h" +#include "xml.h" + + +IValue::IValue(QObject* parent, const char* name) + : QObject(parent, name) + { + } +BValue::BValue(QObject* parent, const char* name) + : QObject(parent, name) + { + } + +//--------------------------------------------------------- +// save +//--------------------------------------------------------- + +void BValue::save(int level, Xml& xml) + { + xml.intTag(level, name(), val); + } + +//--------------------------------------------------------- +// save +//--------------------------------------------------------- + +void IValue::save(int level, Xml& xml) + { + xml.intTag(level, name(), 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/muse2/muse/value.h b/muse2/muse/value.h new file mode 100644 index 00000000..fe3817a2 --- /dev/null +++ b/muse2/muse/value.h @@ -0,0 +1,61 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: value.h,v 1.1.1.1 2003/10/27 18:51:53 wschweer Exp $ +// +// (C) Copyright 2000 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __VALUE_H__ +#define __VALUE_H__ + +#include + +class Xml; + +//--------------------------------------------------------- +// IValue +//--------------------------------------------------------- + +class IValue : public QObject { + int val; + + Q_OBJECT + + signals: + void valueChanged(int); + + public slots: + void setValue(int v); + + public: + IValue(QObject* parent=0, const char* name=0); + int value() const { return val; } + void save(int level, Xml& xml); + }; + +//--------------------------------------------------------- +// BValue +//--------------------------------------------------------- + +class BValue : public QObject { + bool val; + + Q_OBJECT + + signals: + void valueChanged(bool); + void valueChanged(int); + + public slots: + void setValue(bool v); + void setValue(int v) { setValue(bool(v)); } + + public: + BValue(QObject* parent=0, const char* name=0); + bool value() const { return val; } + void save(int level, Xml& xml); + }; + +#endif + diff --git a/muse2/muse/vst.cpp b/muse2/muse/vst.cpp new file mode 100644 index 00000000..ddb2e87d --- /dev/null +++ b/muse2/muse/vst.cpp @@ -0,0 +1,630 @@ +//=================================================================== +// MusE +// Linux Music Editor +// $Id: vst.cpp,v 1.5.2.6 2009/12/06 10:05:00 terminator356 Exp $ +// +// This code is based on jack_fst: +// Copyright (C) 2004 Paul Davis +// Torben Hohn +// +// (C) Copyright 2004 Werner Schweer (ws@seh.de) +//=================================================================== + +#include "config.h" + +#ifdef VST_SUPPORT + +#include +#include +#include +#include +#include + +#include "vst.h" +#include "globals.h" +#include "synth.h" +#include "jackaudio.h" +#include "midi.h" +#include "xml.h" + +extern "C" void fst_error(const char *fmt, ...); +extern long vstHostCallback (AEffect*, long, long, long, void*, float); + +extern JackAudioDevice* jackAudio; + +//--------------------------------------------------------- +// vstHostCallback +//--------------------------------------------------------- + +long vstHostCallback(AEffect* effect, + long opcode, long index, long value, void* ptr, float opt) + { + static VstTimeInfo _timeInfo; + +// JackVST* jackvst = effect ? ((JackVST*) effect->user) : NULL; + jack_position_t jack_pos; + jack_transport_state_t tstate; + + switch (opcode) { + case audioMasterAutomate: + // index, value, returns 0 + effect->setParameter (effect, index, opt); + return 0; + + case audioMasterVersion: + // vst version, currently 2 (0 for older) + return 2; + + 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 = 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; + } + +//--------------------------------------------------------- +// scanVstDir +//--------------------------------------------------------- + +static void scanVstDir(const QString& s) + { + if (debugMsg) + printf("scan vst plugin dir <%s>\n", s.latin1()); + QDir pluginDir(s, QString("*.dll"), QDir::Files); + if (pluginDir.exists()) { + const QFileInfoList* list = pluginDir.entryInfoList(); + QFileInfoListIterator it(*list); + QFileInfo* fi; + while((fi = it.current())) { + char* path = strdup(fi->filePath().latin1()); + FSTInfo* info = fst_get_info(path); + if (info) { + if (info->numInputs == 0 && info->numOutputs) + //synthis.push_back(new VstSynth(*fi)); + synthis.push_back(new VstSynth(*fi, fi->baseName(), QString(), QString(), QString())); + fst_free_info(info); + } + free(path); + ++it; + } + } + } + +//--------------------------------------------------------- +// 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; + } + exit(-1); + } + +void jfst_reserve_mem (int bufsize) +{ + char buf [bufsize]; + int i; + + fprintf (stderr, "Reserving memory: base=%p, size=%d, end=%p\n", + buf, sizeof(buf), buf+sizeof(buf)); + for (i=0; iplugin->flags & effFlagsHasEditor; + } + +//--------------------------------------------------------- +// incInstances +//--------------------------------------------------------- + +void VstSynth::incInstances(int val) + { + _instances += val; + if (_instances == 0 && fstHandle) { + fst_unload(fstHandle); + fstHandle = 0; + } + } + +//--------------------------------------------------------- +// instantiate +//--------------------------------------------------------- + +void* VstSynth::instantiate() + { + ++_instances; + QString n; + n.setNum(_instances); + QString instanceName = baseName() + "-" + n; + doSetuid(); + const char* path = info.filePath().latin1(); + + fstHandle = fst_load(path); + if (fstHandle == 0) { + printf("Synth::instantiate: cannot load vst plugin %s\n", path); + undoSetuid(); + return 0; + } + FST* fst = fst_instantiate(fstHandle, vstHostCallback, 0); + if (fst == 0) { + printf("Synth::instantiate:: cannot instantiate plugin %s\n", path); + undoSetuid(); + return 0; + } + AEffect* plugin = fst->plugin; + plugin->dispatcher (plugin, effMainsChanged, 0, 1, 0, 0.0f); + + /* set program to zero */ + + plugin->dispatcher (plugin, effSetProgram, 0, 0, NULL, 0.0f); + + if (fst_run_editor(fst)) { + printf("Synth::instantiate: cannot create gui"); + undoSetuid(); + return 0; + } +// int vst_version = plugin->dispatcher (plugin, effGetVstVersion, 0, 0, NULL, 0.0f); + undoSetuid(); + return fst; + } + +//--------------------------------------------------------- +// init +//--------------------------------------------------------- + +bool VstSynthIF::init(Synth* s) + { + _fst = (FST*)((VstSynth*)s)->instantiate(); + return (_fst == 0); + } + +//--------------------------------------------------------- +// channels +//--------------------------------------------------------- + +int VstSynthIF::channels() const + { + AEffect* plugin = _fst->plugin; + return plugin->numOutputs; + } + +int VstSynthIF::totalOutChannels() const + { + AEffect* plugin = _fst->plugin; + return plugin->numOutputs; + } + +int VstSynthIF::totalInChannels() const + { + AEffect* plugin = _fst->plugin; + return plugin->numInputs; + } + +//--------------------------------------------------------- +// createSIF +//--------------------------------------------------------- + +//SynthIF* VstSynth::createSIF() const +SynthIF* VstSynth::createSIF(SynthI* s) + { + //return new VstSynthIF(); + + VstSynthIF* sif = new VstSynthIF(s); + sif->init(this, s); + return sif; + } + +//--------------------------------------------------------- +// deactivate3 +//--------------------------------------------------------- + +void VstSynthIF::deactivate3() + { + if (_fst) { + if (_guiVisible) + fst_destroy_editor(_fst); + fst_close(_fst); + _fst = 0; + } + } + +//--------------------------------------------------------- +// getParameter +//--------------------------------------------------------- + +float VstSynthIF::getParameter(unsigned long idx) const + { + return _fst->plugin->getParameter(_fst->plugin, idx); + } + +//--------------------------------------------------------- +// setParameter +//--------------------------------------------------------- + +void VstSynthIF::setParameter(unsigned long idx, float value) + { + _fst->plugin->setParameter(_fst->plugin, idx, value); + } + +//--------------------------------------------------------- +// write +//--------------------------------------------------------- + +void VstSynthIF::write(int level, Xml& xml) const + { + //--------------------------------------------- + // dump current state of synth + //--------------------------------------------- + + int len = 0; + const unsigned char* p; + AEffect* plugin = _fst->plugin; + int params = plugin->numParams; + for (int i = 0; i < params; ++i) { + float f = plugin->getParameter(plugin, i); + xml.floatTag(level, "param", f); + } + } + +//--------------------------------------------------------- +// getData +//--------------------------------------------------------- + +iMPEvent VstSynthIF::getData(MidiPort* mp, MPEventList* el, iMPEvent i, unsigned pos, int ports, unsigned n, float** buffer) + { + AEffect* plugin = _fst->plugin; + for (; i != el->end(); ++i) { + if (mp) + mp->sendEvent(*i); + else { + if (putEvent(*i)) + break; + } + } + if (plugin->flags & effFlagsCanReplacing) { + plugin->processReplacing(plugin, 0, buffer, n); + } + else { + plugin->process(plugin, 0, buffer, n); + } + return el->end(); + } + +//--------------------------------------------------------- +// putEvent +//--------------------------------------------------------- + +bool VstSynthIF::putEvent(const MidiPlayEvent& ev) + { + if (midiOutputTrace) + ev.dump(); + 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; + } + int rv = plugin->dispatcher(plugin, effProcessEvents, 0, 0, &events, 0.0f); + return false; + } +#else +void initVST() {} +#endif + diff --git a/muse2/muse/vst.h b/muse2/muse/vst.h new file mode 100644 index 00000000..38585e8e --- /dev/null +++ b/muse2/muse/vst.h @@ -0,0 +1,83 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: vst.h,v 1.11.2.3 2009/11/25 09:09:44 terminator356 Exp $ +// (C) Copyright 2004 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __VST_H__ +#define __VST_H__ + +#include "synth.h" +//Added by qt3to4: +#include + +struct _FSTHandle; +struct _FST; + +//--------------------------------------------------------- +// VstSynth +//--------------------------------------------------------- + +class VstSynth : public Synth { + _FSTHandle* fstHandle; + + public: + //VstSynth(const QFileInfo& fi) : Synth(fi) { fstHandle = 0; } + VstSynth(const QFileInfo& fi) : Synth(fi, fi->baseName()) { + fstHandle = 0; + } + + virtual ~VstSynth() {} + virtual void incInstances(int val); + virtual void* instantiate(); + //virtual SynthIF* createSIF() const; + virtual SynthIF* createSIF(SynthI*) const; + }; + +//--------------------------------------------------------- +// VstSynthIF +// VSTi synthesizer instance +//--------------------------------------------------------- + +class VstSynthIF : public SynthIF + { + _FST* _fst; + bool _guiVisible; + + public: + //VstSynthIF() { _fst = 0; _guiVisible = false; } + VstSynthIF(SynthI* s) : SynthIF(s) { + _fst = 0; + _guiVisible = false; + } + + virtual bool initGui() { return true; }; + virtual void guiHeartBeat() { } + 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 preProcessAlways() { }; + virtual iMPEvent getData(MidiPort*, MPEventList*, iMPEvent, unsigned pos, int ports, unsigned n, float** buffer) ; + virtual bool putEvent(const MidiPlayEvent& ev); + virtual MidiPlayEvent receiveEvent(); + virtual int eventsPending() const { return 0; } + virtual bool init(Synth*); + virtual int channels() const; + virtual int totalOutChannels() const; + virtual int totalInChannels() const; + virtual void deactivate3(); + virtual const char* getPatchName(int, int, int, bool) const { return ""; } + virtual const char* getPatchName(int, int, MType, bool) { return ""; } + virtual void populatePatchPopup(Q3PopupMenu*, int, MType, bool) {}; + virtual void write(int level, Xml& xml) const; + virtual float getParameter(unsigned long idx) const; + virtual void setParameter(unsigned long idx, float value); + virtual int getControllerInfo(int, const char**, int*, int*, int*, int*) { return 0; } + }; + + +#endif + diff --git a/muse2/muse/wave.cpp b/muse2/muse/wave.cpp new file mode 100644 index 00000000..761df539 --- /dev/null +++ b/muse2/muse/wave.cpp @@ -0,0 +1,1175 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: wave.cpp,v 1.19.2.20 2009/12/20 05:00:35 terminator356 Exp $ +// +// (C) Copyright 2000-2004 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "xml.h" +#include "song.h" +#include "wave.h" +#include "app.h" +#include "filedialog.h" +#include "arranger/arranger.h" +#include "globals.h" +#include "event.h" +#include "audio.h" +#include "sig.h" + +//#define WAVE_DEBUG +//#define WAVE_DEBUG_PRC + +/* +const char* audioFilePattern[] = { + "Wave/Binary (*.wav *.ogg *.bin)", + "Wave (*.wav *.ogg)", + "Binary (*.bin)", + "All Files (*)", + 0 + }; +*/ +const int cacheMag = 128; + +// ClipList* waveClips; + +SndFileList SndFile::sndFiles; + +//--------------------------------------------------------- +// SndFile +//--------------------------------------------------------- + +SndFile::SndFile(const QString& name) + { + finfo = new QFileInfo(name); + sf = 0; + sfUI = 0; + csize = 0; + cache = 0; + openFlag = false; + sndFiles.push_back(this); + refCount=0; + } + +SndFile::~SndFile() + { + if (openFlag) + close(); + for (iSndFile i = sndFiles.begin(); i != sndFiles.end(); ++i) { + if (*i == this) { + sndFiles.erase(i); + break; + } + } + delete finfo; + 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 = path(); + sfinfo.format = 0; + sf = sf_open(p.latin1(), SFM_READ, &sfinfo); + sfinfo.format = 0; + sfUI = sf_open(p.latin1(), SFM_READ, &sfinfo); + if (sf == 0 || sfUI == 0) + return true; + + writeFlag = false; + openFlag = true; + QString cacheName = finfo->dirPath(true) + QString("/") + finfo->baseName(true) + 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->dirPath(true) + + QString("/") + finfo->baseName(true) + QString(".wca"); + ::remove(cacheName.latin1()); + if (openRead()) { + printf("SndFile::update openRead(%s) failed: %s\n", path().latin1(), strerror().latin1()); + } + } + +//--------------------------------------------------------- +// readCache +//--------------------------------------------------------- + +void SndFile::readCache(const QString& path, bool showProgress) + { +// printf("readCache %s for %d samples channel %d\n", +// path.latin1(), 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.latin1(), "r"); + if (cfile) { + for (unsigned ch = 0; ch < channels(); ++ch) + fread(cache[ch], csize * sizeof(SampleV), 1, cfile); + fclose(cfile); + return; + } + + //--------------------------------------------------- + // create cache + //--------------------------------------------------- + + Q3ProgressDialog* progress = 0; + if (showProgress) { + QString label(QWidget::tr("create peakfile for ")); + label += basename(); + progress = new Q3ProgressDialog(label, + QString::null, csize, 0, 0, true); + progress->setMinimumDuration(0); + progress->show(); + } + float data[channels()][cacheMag]; + float* fp[channels()]; + for (unsigned k = 0; k < channels(); ++k) + fp[k] = &data[k][0]; + int interval = csize / 10; + + if(!interval) + interval = 1; + for (int i = 0; i < csize; i++) { + if (showProgress && ((i % interval) == 0)) + progress->setProgress(i); + seek(i * cacheMag, 0); + 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 = int(fd * 255.0); + if (idata < 0) + idata = -idata; + if (cache[ch][i].peak < idata) + cache[ch][i].peak = idata; + } + // amplify rms value +12dB + int rmsValue = int((sqrt(rms/cacheMag) * 255.0)); + if (rmsValue > 255) + rmsValue = 255; + cache[ch][i].rms = rmsValue; + } + } + if (showProgress) + progress->setProgress(csize); + writeCache(path); + if (showProgress) + delete progress; + } + +//--------------------------------------------------------- +// writeCache +//--------------------------------------------------------- + +void SndFile::writeCache(const QString& path) + { + FILE* cfile = fopen(path.latin1(), "w"); + if (cfile == 0) + return; + for (unsigned ch = 0; ch < channels(); ++ch) + fwrite(cache[ch], csize * sizeof(SampleV), 1, cfile); + fclose(cfile); + } + +//--------------------------------------------------------- +// read +//--------------------------------------------------------- + +void SndFile::read(SampleV* s, int mag, unsigned pos, bool overwrite) + { + if(overwrite) + for (unsigned ch = 0; ch < channels(); ++ch) { + s[ch].peak = 0; + s[ch].rms = 0; + } + + if (pos > samples()) { +// printf("%p pos %d > samples %d\n", this, 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_count_t ret = 0; + if(sfUI) + ret = sf_seek(sfUI, pos, SEEK_SET); + else + ret = sf_seek(sf, pos, SEEK_SET); + if(ret == -1) + return; + { + int srcChannels = channels(); + int dstChannels = sfinfo.channels; + size_t n = mag; + float** dst = fp; + float buffer[n * dstChannels]; + + size_t rn = 0; + if(sfUI) + rn = sf_readf_float(sfUI, buffer, n); + else + rn = sf_readf_float(sf, buffer, n); + if(rn != n) + return; + 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) { + + if(overwrite) + 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; + } + + if(overwrite) + s[ch].rms = rms / mag; + + else + s[ch].rms += rms / mag; + } + } + } + +//--------------------------------------------------------- +// openWrite +//--------------------------------------------------------- + +bool SndFile::openWrite() + { + if (openFlag) { + printf("SndFile:: alread open\n"); + return false; + } + QString p = path(); + sf = sf_open(p.latin1(), SFM_RDWR, &sfinfo); + sfUI = 0; + if (sf) { + openFlag = true; + writeFlag = true; + QString cacheName = finfo->dirPath(true) + + QString("/") + finfo->baseName(true) + QString(".wca"); + readCache(cacheName, true); + } + return sf == 0; + } + +//--------------------------------------------------------- +// close +//--------------------------------------------------------- + +void SndFile::close() + { + if (!openFlag) { + printf("SndFile:: alread closed\n"); + return; + } + sf_close(sf); + if (sfUI) + sf_close(sfUI); + openFlag = false; + } + +//--------------------------------------------------------- +// remove +//--------------------------------------------------------- + +void SndFile::remove() + { + if (openFlag) + close(); + QFile::remove(finfo->filePath()); + } + +QString SndFile::basename() const + { + return finfo->baseName(true); + } + +QString SndFile::path() const + { + return finfo->filePath(); + } + +QString SndFile::dirPath() const + { + return finfo->dirPath(true); + } + +QString SndFile::name() const + { + return finfo->fileName(); + } + +//--------------------------------------------------------- +// samples +//--------------------------------------------------------- + +unsigned SndFile::samples() const + { + if (!writeFlag) // if file is read only sfinfo is reliable + return sfinfo.frames; + sf_count_t curPos = sf_seek(sf, 0, SEEK_CUR); + int frames = sf_seek(sf, 0, SEEK_END); + sf_seek(sf, curPos, SEEK_SET); + return frames; + } + +//--------------------------------------------------------- +// channels +//--------------------------------------------------------- + +unsigned SndFile::channels() const + { + return sfinfo.channels; + } + +unsigned SndFile::samplerate() const + { + return sfinfo.samplerate; + } + +unsigned SndFile::format() const + { + return sfinfo.format; + } + +void SndFile::setFormat(int fmt, int ch, int rate) + { + sfinfo.samplerate = rate; + sfinfo.channels = ch; + sfinfo.format = fmt; + sfinfo.seekable = true; + sfinfo.frames = 0; + } + +//--------------------------------------------------------- +// readWithHeap +// not as realtime friendly but can retrieve bigger data +//--------------------------------------------------------- +size_t SndFile::readWithHeap(int srcChannels, float** dst, size_t n, bool overwrite) + { + float *buffer = new float[n * sfinfo.channels]; + int rn = readInternal(srcChannels,dst,n,overwrite, buffer); + delete buffer; + return rn; + } + +//--------------------------------------------------------- +// read +//--------------------------------------------------------- +size_t SndFile::read(int srcChannels, float** dst, size_t n, bool overwrite) + { + float buffer[n * sfinfo.channels]; + int rn = readInternal(srcChannels,dst,n,overwrite, buffer); + return rn; + } + +size_t SndFile::readInternal(int srcChannels, float** dst, size_t n, bool overwrite, float *buffer) +{ + size_t rn = sf_readf_float(sf, buffer, n); + + float* src = buffer; + int dstChannels = sfinfo.channels; + if (srcChannels == dstChannels) { + if(overwrite) + for (size_t i = 0; i < rn; ++i) { + for (int ch = 0; ch < srcChannels; ++ch) + *(dst[ch]+i) = *src++; + } + else + 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 + if(overwrite) + for (size_t i = 0; i < rn; ++i) + *(dst[0] + i) = src[i + i] + src[i + i + 1]; + else + 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 + if(overwrite) + for (size_t i = 0; i < rn; ++i) { + float data = *src++; + *(dst[0]+i) = data; + *(dst[1]+i) = data; + } + else + 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 +// +// A hardcoded limiter was added that limits the output at 0.99/-0.99 +// libsndfile handles signal betwee -1.0/1.0 with current setting +// outside these values there will be heavy distortion +// +//--------------------------------------------------------- + +size_t SndFile::write(int srcChannels, float** src, size_t n) + { + int dstChannels = sfinfo.channels; + //float buffer[n * dstChannels]; + float *buffer = new float[n * dstChannels]; + float *dst = buffer; + + const float limitValue=0.9999; + + + if (srcChannels == dstChannels) { + for (size_t i = 0; i < n; ++i) { + for (int ch = 0; ch < dstChannels; ++ch) + //*dst++ = *(src[ch]+i); // < limitValue ? *(src[ch]+i) : limitValue; + if (*(src[ch]+i) > 0) + *dst++ = *(src[ch]+i) < limitValue ? *(src[ch]+i) : limitValue; + else + *dst++ = *(src[ch]+i) > -limitValue ? *(src[ch]+i) : -limitValue; + } + } + else if ((srcChannels == 1) && (dstChannels == 2)) { + // mono to stereo + for (size_t i = 0; i < n; ++i) { + float data = *(src[0]+i); + if (data > 0) { + *dst++ = data < limitValue ? data : limitValue; + *dst++ = data < limitValue ? data : limitValue; + } + else { + *dst++ = data > -limitValue ? data : -limitValue; + *dst++ = data > -limitValue ? data : -limitValue; + } + } + } + else if ((srcChannels == 2) && (dstChannels == 1)) { + // stereo to mono + for (size_t i = 0; i < n; ++i) + if (*(src[0]+i) + *(src[1]+i) > 0) + *dst++ = (*(src[0]+i) + *(src[1]+i)) < limitValue ? (*(src[0]+i) + *(src[1]+i)) : limitValue; + else + *dst++ = (*(src[0]+i) + *(src[1]+i)) > -limitValue ? (*(src[0]+i) + *(src[1]+i)) : -limitValue; + } + else { + printf("SndFile:write channel mismatch %d -> %d\n", + srcChannels, dstChannels); + delete buffer; + return 0; + } + int nbr = sf_writef_float(sf, buffer, n) ; + delete buffer; + return nbr; + } + +//--------------------------------------------------------- +// seek +//--------------------------------------------------------- + +off_t SndFile::seek(off_t frames, int whence) + { + return sf_seek(sf, frames, whence); + } + +//--------------------------------------------------------- +// strerror +//--------------------------------------------------------- + +QString SndFile::strerror() const + { + char buffer[128]; + buffer[0] = 0; + sf_error_str(sf, buffer, 128); + return QString(buffer); + } + +//--------------------------------------------------------- +// search +//--------------------------------------------------------- + +SndFile* SndFileList::search(const QString& name) + { + for (iSndFile i = begin(); i != end(); ++i) { + if ((*i)->path() == name) + return *i; + } + return 0; + } + +//--------------------------------------------------------- +// getSnd +//--------------------------------------------------------- + +SndFile* getWave(const QString& inName, bool readOnlyFlag) + { + QString name = inName; + + if (QFileInfo(name).isRelative()) { + name = museProject + QString("/") + name; + } + else { + if (!QFile::exists(name)) { + if (QFile::exists(museProject + QString("/") + name)) { + name = museProject + QString("/") + name; + } + } + } +// printf("=====%s %s\n", inName.latin1(), name.latin1()); + + // only open one instance of wave file + SndFile* f = SndFile::sndFiles.search(name); + if (f == 0) { + if (!QFile::exists(name)) { + fprintf(stderr, "wave file <%s> not found\n", + name.latin1()); + return 0; + } + f = new SndFile(name); + bool error; + if (readOnlyFlag) + error = f->openRead(); + else { + error = f->openWrite(); + // if peak cache is older than wave file we reaquire the cache + QFileInfo wavinfo(name); + QString cacheName = wavinfo.dirPath(true) + QString("/") + wavinfo.baseName(true) + QString(".wca"); + QFileInfo wcainfo(cacheName); + if (!wcainfo.exists() || wcainfo.lastModified() < wavinfo.lastModified()) { + //printf("wcafile is older or does not exist!\n"); + QFile(cacheName).remove(); + f->readCache(cacheName,true); + } + + } + if (error) { + fprintf(stderr, "open wave file(%s) for %s failed: %s\n", + name.latin1(), + readOnlyFlag ? "writing" : "reading", + f->strerror().latin1()); + QMessageBox::critical(NULL, "MusE import error.", + "MusE failed to import the file.\n" + "Possibly this wasn't a sound file?\n" + "If it was check the permissions, MusE\n" + "sometimes requires write access to the file."); + + delete f; + f = 0; + } + } + else { + if (!readOnlyFlag && ! f->isWritable()) { + if (f->isOpen()) + f->close(); + f->openWrite(); + } + else { + // if peak cache is older than wave file we reaquire the cache + QFileInfo wavinfo(name); + QString cacheName = wavinfo.dirPath(true) + QString("/") + wavinfo.baseName(true) + QString(".wca"); + QFileInfo wcainfo(cacheName); + if (!wcainfo.exists() || wcainfo.lastModified() < wavinfo.lastModified()) { + //printf("wcafile is older or does not exist!\n"); + QFile(cacheName).remove(); + f->readCache(cacheName,true); + } + + } + } + 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.latin1(), tmpfile.latin1(), startframe, endframe); + SndFile* orig = sndFiles.search(original); + SndFile tmp = SndFile(tmpfile); + if (!orig) { + printf("Internal error: could not find original file: %s in filelist - Aborting\n", original.latin1()); + return; + } + + if (!orig->isOpen()) { + if (orig->openRead()) { + printf("Cannot open original file %s for reading - cannot undo! Aborting\n", original.latin1()); + return; + } + } + + if (!tmp.isOpen()) { + if (tmp.openRead()) { + printf("Could not open temporary file %s for writing - cannot undo! Aborting\n", tmpfile.latin1()); + 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, 0); + orig->readWithHeap(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, 0); + orig->write(file_channels, tmpfiledata, tmpdatalen); + + // Delete dataholder for temporary file + for (unsigned i=0; imsgIdle(false); + return; + } + tmp.seek(0, 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 an audio file you have first to select" + "a wave track")); + return; + } + //QString fn = getOpenFileName(lastWavePath, audioFilePattern, this, + QString fn = getOpenFileName(lastWavePath, audio_file_pattern, this, + tr("Import Wave File"), 0); + if (!fn.isEmpty()) { + lastWavePath = fn; + importWaveToTrack(fn); + } + } + +//--------------------------------------------------------- +// importWaveToTrack +//--------------------------------------------------------- + +bool MusE::importWaveToTrack(QString& name, unsigned tick, Track* track) + { + if (track==NULL) + track = (WaveTrack*)(arranger->curTrack()); + + SndFile* f = getWave(name, true); + + if (f == 0) { + printf("import audio file failed\n"); + return true; + } + int samples = f->samples(); + if ((unsigned)sampleRate !=f->samplerate()) { + if(QMessageBox::question(this, tr("Import Wavefile"), + tr("This wave file has a samplerate of %1,\n" + "as opposed to current setting %2.\n" + "Do you still want to import it?").arg(f->samplerate()).arg(sampleRate), + tr("&Yes"), tr("&No"), + QString::null, 0, 1 )) + { + //printf("why won't muse let me delete the file object? %d\n", f->getRefCount()); + if (f->getRefCount() == 0) + delete f; + return true; + } + } + track->setChannels(f->channels()); + + WavePart* part = new WavePart((WaveTrack *)track); + if (tick) + part->setTick(tick); + else + part->setTick(song->cpos()); + part->setLenFrame(samples); + + Event event(Wave); + SndFileR sf(f); + event.setSndFile(sf); + event.setSpos(0); + event.setLenFrame(samples); + part->addEvent(event); + + part->setName(QFileInfo(name).baseName(true)); + audio->msgAddPart(part); + unsigned endTick = part->tick() + part->lenTick(); + if (song->len() < endTick) + song->setLen(endTick); + return false; + } +#if 0 +//--------------------------------------------------------- +// Clip +//--------------------------------------------------------- + +ClipBase::ClipBase(const SndFileR& file, int start, int l) + : f(file) + { + refCount = 0; + for (int i = 1; true; ++i) { + _name.sprintf("%s.%d", f.basename().latin1(), i); + ciClip ic = waveClips->begin(); + for (; ic != waveClips->end(); ++ic) { + if ((*ic)->name() == _name) + break; + } + if (ic == waveClips->end()) + break; + // try another name + } + _spos = start; + len = l; + deleted = false; + lrefs = 0; + waveClips->add(this); + } + +//--------------------------------------------------------- +// read +//--------------------------------------------------------- + +void ClipBase::read(unsigned srcOffset, float** buffer, int channel, unsigned n) + { + if (f.isNull()) + return; + f.seek(srcOffset + _spos, 0); + f.read(channel, buffer, n); + } + +ClipBase::~ClipBase() + { + waveClips->remove(this); + } + +//--------------------------------------------------------- +// ClipList::write(level, xml) +//--------------------------------------------------------- + +void ClipList::write(int level, Xml& xml) const + { + for (ciClip i = begin(); i != end(); ++i) { + ClipBase* clip = *i; + // only write visible clips + if (clip->references()) + (*i)->write(level, xml); + } + } + +//--------------------------------------------------------- +// ClipBase::write(level, xml) +//--------------------------------------------------------- + +void ClipBase::write(int level, Xml& xml) const + { + xml.tag(level++, "clip"); + QString path = f.dirPath(); + + // + // waves in the project dirctory are stored + // with relative path name, others with absolute path + // + if (path == museProject) + xml.strTag(level, "file", f.name()); + else + xml.strTag(level, "file", f.path()); + + xml.strTag(level, "name", _name); + xml.intTag(level, "tick", _spos); + xml.intTag(level, "len", len); + xml.etag(level, "clip"); + } + +//--------------------------------------------------------- +// ClipBase::read +//--------------------------------------------------------- + +ClipBase* readClip(Xml& xml) + { + SndFile* f = 0; + QString name; + unsigned spos = 0; + int len = 0; + + for (;;) { + Xml::Token token = xml.parse(); + const QString& tag = xml.s1(); + switch (token) { + case Xml::Error: + case Xml::End: + return 0; + case Xml::TagStart: + if (tag == "file") + f = getWave(xml.parse1(), false); + else if (tag == "name") + name = xml.parse1(); + else if (tag == "tick") + spos = xml.parseInt(); + else if (tag == "len") + len = xml.parseInt(); + else + xml.unknown("Clip"); + break; + case Xml::TagEnd: + if (tag == "clip") { + if (!f) + printf("clip: file not found\n"); + ClipBase* clip = new ClipBase(f, spos, len); + clip->setName(name); + return clip; + } + default: + break; + } + } + } + +//--------------------------------------------------------- +// search +//--------------------------------------------------------- + +Clip ClipList::search(const QString& name) const + { + for (ciClip i = begin(); i != end(); ++i) + if ((*i)->name() == name) + return Clip(*i); + fprintf(stderr, "ClipList: clip <%s> not found\n", + name.latin1()); + return Clip(); + } + +//--------------------------------------------------------- +// remove +//--------------------------------------------------------- + +void ClipList::remove(ClipBase* clip) + { + for (iClip i = begin(); i != end(); ++i) { + if (*i == clip) { + erase(i); + return; + } + } + printf("ClipList:remove: clip not found\n"); + } + +//--------------------------------------------------------- +// idx +//--------------------------------------------------------- + +int ClipList::idx(const Clip& clip) const + { + int n = 0; + for (ciClip i = begin(); i != end(); ++i, ++n) { + if (clip == *i) + return n; + } + return -1; + } +#endif + +//--------------------------------------------------------- +// cmdAddRecordedWave +//--------------------------------------------------------- + +//void Song::cmdAddRecordedWave(WaveTrack* track, const Pos& s, const Pos& e) +void Song::cmdAddRecordedWave(WaveTrack* track, Pos s, Pos e) + { + SndFile* f = track->recFile(); + if (f == 0) { + printf("cmdAddRecordedWave: no snd file for track <%s>\n", + track->name().latin1()); + return; + } + + // Removed by Tim. p3.3.8 + //unsigned startTick = roundDownBar(s.tick()); + //unsigned endTick = roundUpBar(e.tick()); + + // Added by Tim. p3.3.8 + + if((audio->loopCount() > 0 && s.tick() > lPos().tick()) || (punchin() && s.tick() < lPos().tick())) + s.setTick(lPos().tick()); + // If we are looping, just set the end to the right marker, since we don't know how many loops have occurred. + // (Fixed: Added Audio::loopCount) + // Otherwise if punchout is on, limit the end to the right marker. + //if(loop() || (punchout() && e.tick() > rPos().tick()) ) + if((audio->loopCount() > 0) || (punchout() && e.tick() > rPos().tick()) ) + e.setTick(rPos().tick()); + // No part to be created? Delete the rec sound file. + if(s.tick() >= e.tick()) + { + QString s = f->path(); + delete f; + // The function which calls this function already does this immediately after. But do it here anyway. + track->setRecFile(0); + remove(s.latin1()); + if(debugMsg) + printf("Song::cmdAddRecordedWave: remove file %s\n", s.latin1()); + return; + } + // Round the start down using the Arranger part snap raster value. + unsigned startTick = sigmap.raster1(s.tick(), song->recRaster()); + // Round the end up using the Arranger part snap raster value. + unsigned endTick = sigmap.raster2(e.tick(), song->recRaster()); + + f->update(); + + WavePart* part = new WavePart(track); + part->setTick(startTick); + part->setLenTick(endTick - startTick); + part->setName(track->name()); + + // create Event + Event event(Wave); + SndFileR sf(f); + event.setSndFile(sf); + // We are done with the _recFile member. Set to zero. The function which + // calls this function already does this immediately after. But do it here anyway. + track->setRecFile(0); + + event.setSpos(0); + + // Since the part start was snapped down, we must apply the difference so that the + // wave event tick lines up with when the user actually started recording. + // Added by Tim. p3.3.8 + event.setTick(s.tick() - startTick); + + + event.setLenFrame(e.frame() - s.frame()); + part->addEvent(event); + + song->cmdAddPart(part); + + if (song->len() < endTick) + song->setLen(endTick); + } + +//--------------------------------------------------------- +// 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.latin1()); + strcpy(tmpfile_charstr, tmpfile.latin1()); + 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) + if (--(sf->refCount) == 0) { + delete sf; + sf=NULL; + } + } diff --git a/muse2/muse/wave.h b/muse2/muse/wave.h new file mode 100644 index 00000000..f83e5bdb --- /dev/null +++ b/muse2/muse/wave.h @@ -0,0 +1,264 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: wave.h,v 1.5.2.7 2009/12/20 05:00:35 terminator356 Exp $ +// +// (C) Copyright 1999/2004 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __WAVE_H__ +#define __WAVE_H__ + +#include +#include +#include +#include + +class Xml; + +//--------------------------------------------------------- +// SampleV +// peak file value +//--------------------------------------------------------- + +struct SampleV { + unsigned char peak; + unsigned char rms; + }; + +//--------------------------------------------------------- +// SndFileList +//--------------------------------------------------------- + +class SndFile; +class SndFileList : public std::list { + public: + SndFile* search(const QString& name); + }; + +typedef SndFileList::iterator iSndFile; +typedef SndFileList::const_iterator ciSndFile; + +//--------------------------------------------------------- +// SndFile +//--------------------------------------------------------- + +class SndFile { + //static SndFileList _sndFiles; + QFileInfo* finfo; + SNDFILE* sf; + SNDFILE* sfUI; + SF_INFO sfinfo; + SampleV** cache; + int csize; //!< frames in cache + + void writeCache(const QString& path); + + bool openFlag; + bool writeFlag; + size_t readInternal(int srcChannels, float** dst, size_t n, bool overwrite, float *buffer); + + protected: + int refCount; + + public: + SndFile(const QString& name); + ~SndFile(); + int getRefCount() { return refCount; } + + static SndFileList sndFiles; + static void applyUndoFile(const QString& original, const QString& tmpfile, unsigned sx, unsigned ex); + + void readCache(const QString& path, bool progress); + + bool openRead(); //!< returns true on error + bool openWrite(); //!< returns true on error + void close(); + void remove(); + + bool isOpen() const { return openFlag; } + bool isWritable() const { return writeFlag; } + void update(); + + QString basename() const; //!< filename without extension + QString dirPath() const; //!< path + QString path() const; //!< path with filename + QString name() const; //!< filename + + 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, bool overwrite = true); + size_t readWithHeap(int channel, float**, size_t, bool overwrite = true); + size_t readDirect(float* buf, size_t n) { return sf_readf_float(sf, buf, n); } + size_t write(int channel, float**, size_t); + + off_t seek(off_t frames, int whence); + void read(SampleV* s, int mag, unsigned pos, bool overwrite = true); + QString strerror() const; + + static SndFile* search(const QString& name); + 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(); } + + QString basename() const { return sf->basename(); } + QString dirPath() const { return sf->dirPath(); } + QString path() const { return sf->path(); } + QString name() const { return sf->name(); } + + 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 readWithHeap(int channel, float** f, size_t n, bool overwrite = true) { + return sf->readWithHeap(channel, f, n, overwrite); + } + size_t read(int channel, float** f, size_t n, bool overwrite = true) { + return sf->read(channel, f, n, overwrite); + } + size_t readDirect(float* f, size_t n) { return sf->readDirect(f, n); } + + size_t write(int channel, float** f, size_t n) { + return sf->write(channel, f, n); + } + off_t seek(off_t frames, int whence) { + return sf->seek(frames, whence); + } + void read(SampleV* s, int mag, unsigned pos, bool overwrite = true) { + sf->read(s, mag, pos, overwrite); + } + QString strerror() const { return sf->strerror(); } + }; + + +#if 0 + +class Clip; +//--------------------------------------------------------- +// ClipBase +//--------------------------------------------------------- + +class ClipBase { + protected: + QString _name; + SndFileR f; + int _spos; // start sample position in WaveFile + int len; // len of clip + int lrefs; // logical references + bool deleted; + int refCount; + + public: + ClipBase(const SndFileR& f, int start, int len); + ~ClipBase(); + const QString& name() const { return _name; } + void setName(const QString& s) { _name = s; } + int spos() const { return _spos; } + void setSpos(int s) { _spos = s; } + SndFileR file1() const { return f; } + + void read(unsigned, float**, int, unsigned); + void write(int, Xml&) const; + int samples() const { return len; } + void setSamples(int s) { len = s; } + int getRefCount() const { return refCount; } + int references() const { return lrefs; } + void incRefs() { ++lrefs; } + void decRefs() { --lrefs; } + friend class WaveEvent; + }; + +//--------------------------------------------------------- +// Clip +//--------------------------------------------------------- + +class Clip { + ClipBase* clip; + + public: + Clip(); + Clip(ClipBase* clip); + Clip(const SndFileR& f, int start, int len); + Clip(const Clip&); + Clip& operator=(const Clip&); + bool operator==(const Clip& c) const { return clip == c.clip; } + bool operator==(ClipBase* c) const { return clip == c; } + ~Clip(); + + // ClipBase* clipBase() const { return clip; } + bool isNull() const { return clip == 0; } + int getRefCount() const { return clip->getRefCount(); } + + const QString& name() const { return clip->name(); } + void setName(const QString& s) { clip->setName(s); } + int spos() const { return clip->spos(); } + void setSpos(int s) { clip->setSpos(s); } + SndFileR file1() const { return clip->file1(); } + + void read(unsigned off, float** f, int ch, unsigned nn) { + clip->read(off, f, ch, nn); + } + int samples() const { return clip->samples(); } + void setSamples(int s) { clip->setSamples(s); } + int references() const { return clip->references(); } + void incRefs() { clip->incRefs(); } + void decRefs() { clip->decRefs(); } + }; + +//--------------------------------------------------------- +// ClipList +//--------------------------------------------------------- + +class ClipList : public std::list { + public: + int idx(const Clip&) const; + Clip search(const QString&) const; + void write(int, Xml&) const; + void add(ClipBase* clip) { push_back(clip); } + void remove(ClipBase*); + }; + +typedef ClipList::iterator iClip; +typedef ClipList::const_iterator ciClip; +extern ClipBase* readClip(Xml& xml); +#endif + +extern SndFile* getWave(const QString& name, bool readOnlyFlag); +#endif + diff --git a/muse2/muse/waveedit/Makefile.am b/muse2/muse/waveedit/Makefile.am new file mode 100644 index 00000000..0ab4f829 --- /dev/null +++ b/muse2/muse/waveedit/Makefile.am @@ -0,0 +1,18 @@ +include $(top_srcdir)/common.am + +if PCH +AM_CXXFLAGS += -include $(top_srcdir)/all.h +endif + +noinst_LIBRARIES = libwaveedit.a + +dist_libwaveedit_a_SOURCES = \ + waveedit.cpp waveedit.h \ + waveview.cpp waveview.h \ + editgainbase.ui \ + editgain.cpp editgain.h + +nodist_libwaveedit_a_SOURCES = \ + moc_waveedit.cpp \ + moc_waveview.cpp \ + moc_editgain.cpp diff --git a/muse2/muse/waveedit/Makefile.in b/muse2/muse/waveedit/Makefile.in new file mode 100644 index 00000000..c9b5cf47 --- /dev/null +++ b/muse2/muse/waveedit/Makefile.in @@ -0,0 +1,606 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/common.am +@PCH_TRUE@am__append_1 = -include $(top_srcdir)/all.h +subdir = muse/waveedit +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal-include.m4 \ + $(top_srcdir)/m4/alsa.m4 $(top_srcdir)/m4/docbook.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +LIBRARIES = $(noinst_LIBRARIES) +ARFLAGS = cru +libwaveedit_a_AR = $(AR) $(ARFLAGS) +libwaveedit_a_LIBADD = +dist_libwaveedit_a_OBJECTS = waveedit.$(OBJEXT) waveview.$(OBJEXT) \ + editgainbase.$(OBJEXT) editgain.$(OBJEXT) +nodist_libwaveedit_a_OBJECTS = moc_waveedit.$(OBJEXT) \ + moc_waveview.$(OBJEXT) moc_editgain.$(OBJEXT) +libwaveedit_a_OBJECTS = $(dist_libwaveedit_a_OBJECTS) \ + $(nodist_libwaveedit_a_OBJECTS) +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +CXXLD = $(CXX) +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(dist_libwaveedit_a_SOURCES) \ + $(nodist_libwaveedit_a_SOURCES) +DIST_SOURCES = $(dist_libwaveedit_a_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DOCBOOKSTYLE = @DOCBOOKSTYLE@ +DOCBOOKTARGETS = @DOCBOOKTARGETS@ +DOT = @DOT@ +DOTPATH = @DOTPATH@ +DOXYGEN = @DOXYGEN@ +DOXYGEN_TREEVIEW = @DOXYGEN_TREEVIEW@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FLUIDSYNTHDIRS = @FLUIDSYNTHDIRS@ +FST_CFLAGS = @FST_CFLAGS@ +FST_LIBS = @FST_LIBS@ +Fluidsynth_CFLAGS = @Fluidsynth_CFLAGS@ +Fluidsynth_LIBS = @Fluidsynth_LIBS@ +GIVERTCAP = @GIVERTCAP@ +GREP = @GREP@ +HAVEDOT = @HAVEDOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_LIBS = @JACK_LIBS@ +JADE = @JADE@ +LASH_CFLAGS = @LASH_CFLAGS@ +LASH_LIBS = @LASH_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LO_CFLAGS = @LO_CFLAGS@ +LO_LIBS = @LO_LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MUSECXXFLAGS = @MUSECXXFLAGS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NSGMLS = @NSGMLS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PCH = @PCH@ +PERL = @PERL@ +PKG_CONFIG = @PKG_CONFIG@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIB = @PYTHON_LIB@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QTDIR_BIN = @QTDIR_BIN@ +QTDIR_INC = @QTDIR_INC@ +QT_LIBS = @QT_LIBS@ +RANLIB = @RANLIB@ +SAMPLERATE_CFLAGS = @SAMPLERATE_CFLAGS@ +SAMPLERATE_LIBS = @SAMPLERATE_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ +SNDFILE_LIBS = @SNDFILE_LIBS@ +STRIP = @STRIP@ +SUIDBUILD = @SUIDBUILD@ +SUIDINSTALL = @SUIDINSTALL@ +USE_SSE = @USE_SSE@ +UUID_CFLAGS = @UUID_CFLAGS@ +UUID_LIBS = @UUID_LIBS@ +VERSION = @VERSION@ +XMKMF = @XMKMF@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +have_docbook = @have_docbook@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +synth_fluid = @synth_fluid@ +synth_fluidsynth = @synth_fluidsynth@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AM_CXXFLAGS = $(MUSECXXFLAGS) -I.. -I$(top_srcdir)/synti \ + -I$(top_srcdir)/muse/widgets -DQT_SHARED -DQT_THREAD_SUPPORT \ + -DQT_PLUGIN $(QTDIR_INC) -DQT3_SUPPORT $(am__append_1) +AM_CPPFLAGS = +MOC = $(QTDIR_BIN)/moc +#UIC = $(QTDIR_BIN)/uic3 +UIC = /usr/bin/uic3 +UIFILES = $(wildcard *.ui) +MOCFILES = $(shell for h in $(filter %.h,$(SOURCES)); do \ + if grep -q Q_OBJECT $$h; then \ + echo $$h | sed "s/\(.*\)\.h/moc_\1.cpp/"; \ + fi; \ + done) + +BUILT_SOURCES = $(MOCFILES) $(UIFILES:%.ui=%.h) +MOSTLYCLEANFILES = $(MOCFILES) $(UIFILES:%.ui=%.h) +SUFFIXES = .ui .h.gch +noinst_LIBRARIES = libwaveedit.a +dist_libwaveedit_a_SOURCES = \ + waveedit.cpp waveedit.h \ + waveview.cpp waveview.h \ + editgainbase.ui \ + editgain.cpp editgain.h + +nodist_libwaveedit_a_SOURCES = \ + moc_waveedit.cpp \ + moc_waveview.cpp \ + moc_editgain.cpp + +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: .ui .h.gch .cpp .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/common.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu muse/waveedit/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu muse/waveedit/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-noinstLIBRARIES: + -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) +libwaveedit.a: $(libwaveedit_a_OBJECTS) $(libwaveedit_a_DEPENDENCIES) + -rm -f libwaveedit.a + $(libwaveedit_a_AR) libwaveedit.a $(libwaveedit_a_OBJECTS) $(libwaveedit_a_LIBADD) + $(RANLIB) libwaveedit.a + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/editgain.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/moc_editgain.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/moc_waveedit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/moc_waveview.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/waveedit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/waveview.Po@am__quote@ + +.cpp.o: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< + +.cpp.obj: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.cpp.lo: +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-am +all-am: Makefile $(LIBRARIES) +installdirs: +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +clean: clean-am + +clean-am: clean-generic clean-libtool clean-noinstLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: all check install install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-noinstLIBRARIES ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags uninstall uninstall-am + + +de: + @for base in $(MOCFILES); do echo -e "\t$${base}.cpp $${base}.h \\"; done + +nde: + @for base in $(MOCFILES); do echo -e "\tmoc_$${base}.cpp \\"; done + +.ui.o: %.h + $(UIC) -L $(top_srcdir)/muse/widgets -o $*.cpp -impl $*.h $*.ui + $(MOC) $*.h >> $*.cpp + $(CXXCOMPILE) -c $*.cpp -o $*.o + $(RM) $*.cpp moc_$*.cpp moc_$*.o + +.ui.lo: %.h + $(UIC) -L $(top_srcdir)/muse/widgets -o $*.cpp -impl $*.h $*.ui + $(MOC) $*.h >> $*.cpp + $(LTCXXCOMPILE) -c $*.cpp -o $*.lo + $(RM) $*.cpp moc_$*.cpp moc_$*.lo moc_$*.o + +moc_%.cpp: %.h + $(MOC) $< -o $@ + +%.h: %.ui + $(UIC) -o $@ $< +# $(UIC) -L $(top_srcdir)/muse/widgets -o $@ $< + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/muse2/muse/waveedit/editgain.cpp b/muse2/muse/waveedit/editgain.cpp new file mode 100644 index 00000000..ef9b781c --- /dev/null +++ b/muse2/muse/waveedit/editgain.cpp @@ -0,0 +1,91 @@ +// +// C++ Implementation: editgain +// +// Description: +// +// +// Author: Mathias Lundgren , (C) 2005 +// +// Copyright: See COPYING file that comes with this distribution +// +// + +#include +#include + +#include "editgain.h" + +EditGain::EditGain(QWidget* parent, int initGainValue) + : EditGainBase(parent, "editgain", false) + { + sliderGain->setValue(sliderGain->maxValue() - initGainValue); + connect(buttonReset, SIGNAL(pressed()), this, SLOT(resetPressed())); + connect(buttonApply, SIGNAL(pressed()), this, SLOT(applyPressed())); + connect(buttonCancel,SIGNAL(pressed()), this, SLOT(cancelPressed())); + connect(sliderGain, SIGNAL(valueChanged(int)), this, SLOT(gainChanged(int))); + if (sliderGain->value() != 100) + buttonReset->setEnabled(true); + } + + +EditGain::~EditGain() + { + } + + +/*! + \fn EditGain::resetPressed + */ +void EditGain::resetPressed() + { + sliderGain->blockSignals(true); + sliderGain->setValue(100); + sliderGain->blockSignals(false); + buttonReset->setEnabled(false); + buttonApply->setEnabled(false); + } + + +/*! + \fn EditGain::applyPressed() + */ +void EditGain::applyPressed() + { + done(QDialog::Accepted); + } + + +/*! + \fn EditGain::cancelPressed() + */ +void EditGain::cancelPressed() + { + done(QDialog::Rejected); + } + + + +/*! + \fn EditGain::gainChanged(int value) + */ +void EditGain::gainChanged(int value) + { + gain = sliderGain->maxValue() - value; + if (sliderGain->value() != 100) { + buttonReset->setEnabled(true); + buttonApply->setEnabled(true); + } + else { + buttonReset->setEnabled(false); + buttonApply->setEnabled(false); + } + } + + +/*! + \fn EditGain::getGain() + */ +int EditGain::getGain() + { + return gain; + } diff --git a/muse2/muse/waveedit/editgain.h b/muse2/muse/waveedit/editgain.h new file mode 100644 index 00000000..2094388b --- /dev/null +++ b/muse2/muse/waveedit/editgain.h @@ -0,0 +1,37 @@ +// +// C++ Interface: editgain +// +// Description: +// +// +// Author: Mathias Lundgren , (C) 2005 +// +// Copyright: See COPYING file that comes with this distribution +// +// + +#ifndef EDITGAIN_H +#define EDITGAIN_H + +#include "editgainbase.h" + +class EditGain : public EditGainBase +{ + Q_OBJECT +public: + EditGain(QWidget* parent = 0, int initGainValue=100); + + ~EditGain(); + int getGain(); + +private: + int gain; + +private slots: + void resetPressed(); + void applyPressed(); + void cancelPressed(); + void gainChanged(int value); +}; + +#endif diff --git a/muse2/muse/waveedit/editgainbase.ui b/muse2/muse/waveedit/editgainbase.ui new file mode 100644 index 00000000..b23cd70e --- /dev/null +++ b/muse2/muse/waveedit/editgainbase.ui @@ -0,0 +1,302 @@ + +EditGainBase + + + EditGainBase + + + + 0 + 0 + 284 + 367 + + + + MusE: Modify gain + + + + unnamed + + + + groupBox2 + + + Gain + + + + unnamed + + + + layout14 + + + + unnamed + + + + spacer6 + + + Horizontal + + + Expanding + + + + 90 + 41 + + + + + + sliderGain + + + + 40 + 150 + + + + 200 + + + 100 + + + Vertical + + + Both + + + 10 + + + + + layout13 + + + + unnamed + + + + textLabel2 + + + 200% + + + + + spacer4 + + + Vertical + + + Expanding + + + + 30 + 109 + + + + + + textLabel1 + + + 100% + + + + + spacer3 + + + Vertical + + + Expanding + + + + 30 + 108 + + + + + + textLabel3 + + + 0% + + + + + + + spacer7 + + + Horizontal + + + Expanding + + + + 51 + 31 + + + + + + + + layout16 + + + + unnamed + + + + spacer11 + + + Horizontal + + + Expanding + + + + 70 + 31 + + + + + + buttonReset + + + false + + + &Reset + + + Alt+R + + + + + spacer12 + + + Horizontal + + + Expanding + + + + 71 + 31 + + + + + + + + + + buttonGroup2 + + + + + + + unnamed + + + + layout6 + + + + unnamed + + + + buttonApply + + + false + + + &Apply + + + Alt+A + + + + + spacer5 + + + Horizontal + + + Expanding + + + + 61 + 31 + + + + + + buttonCancel + + + true + + + &Cancel + + + Alt+C + + + + + + + + + + diff --git a/muse2/muse/waveedit/waveedit.cpp b/muse2/muse/waveedit/waveedit.cpp new file mode 100644 index 00000000..b342c14d --- /dev/null +++ b/muse2/muse/waveedit/waveedit.cpp @@ -0,0 +1,413 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: waveedit.cpp,v 1.5.2.12 2009/04/06 01:24:54 terminator356 Exp $ +// (C) Copyright 2000 Werner Schweer (ws@seh.de) +//========================================================= + +#include "app.h" +#include "xml.h" +#include "waveedit.h" +#include "mtscale.h" +#include "scrollscale.h" +#include "waveview.h" +#include "ttoolbar.h" +#include "globals.h" +#include "audio.h" +#include "utils.h" +#include "song.h" +#include "poslabel.h" +#include "gconfig.h" +#include "icons.h" +#include "shortcuts.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//Added by qt3to4: +#include +#include +#include + +extern QColor readColor(Xml& xml); + +int WaveEdit::_widthInit = 600; +int WaveEdit::_heightInit = 400; + +//--------------------------------------------------------- +// closeEvent +//--------------------------------------------------------- + +void WaveEdit::closeEvent(QCloseEvent* e) + { + emit deleted((unsigned long)this); + e->accept(); + } + +//--------------------------------------------------------- +// WaveEdit +//--------------------------------------------------------- + +WaveEdit::WaveEdit(PartList* pl) + : MidiEditor(1, 1, pl) + { + resize(_widthInit, _heightInit); + + //---------Pulldown Menu---------------------------- + Q3PopupMenu* menuFile = new Q3PopupMenu(this); + Q3PopupMenu* menuEdit = new Q3PopupMenu(this); + menuBar()->insertItem(tr("&File"), menuFile); + menuBar()->insertItem(tr("&Edit"), menuEdit); + menuFunctions = new Q3PopupMenu(this); + menuBar()->insertItem(tr("Func&tions"), menuFunctions); + + menuGain = new Q3PopupMenu(this); + menuGain->insertItem(tr("200%"), CMD_GAIN_200); + menuGain->insertItem(tr("150%"), CMD_GAIN_150); + menuGain->insertItem(tr("75%"), CMD_GAIN_75); + menuGain->insertItem(tr("50%"), CMD_GAIN_50); + menuGain->insertItem(tr("25%"), CMD_GAIN_25); + menuGain->insertItem(tr("Other"), CMD_GAIN_FREE); + menuFunctions->insertItem(tr("&Gain"), menuGain); + menuFunctions->insertSeparator(); + + menuEdit->insertItem(tr("Edit in E&xternal Editor"), CMD_EDIT_EXTERNAL); + menuFunctions->insertItem(tr("Mute Selection"), CMD_MUTE); + menuFunctions->insertItem(tr("Normalize Selection"), CMD_NORMALIZE); + menuFunctions->insertItem(tr("Fade In Selection"), CMD_FADE_IN); + menuFunctions->insertItem(tr("Fade Out Selection"), CMD_FADE_OUT); + menuFunctions->insertItem(tr("Reverse Selection"), CMD_REVERSE); + + select = new Q3PopupMenu(this); + select->insertItem(QIcon(*select_allIcon), tr("Select &All"), CMD_SELECT_ALL); + select->insertItem(QIcon(*select_deselect_allIcon), tr("&Deselect All"), CMD_SELECT_NONE); + + menuEdit->insertItem(QIcon(*selectIcon), tr("Select"), select); + + connect(menuFunctions, SIGNAL(activated(int)), SLOT(cmd(int))); + connect(menuFile, SIGNAL(activated(int)), SLOT(cmd(int))); + connect(select, SIGNAL(activated(int)), SLOT(cmd(int))); + connect(menuGain, SIGNAL(activated(int)), SLOT(cmd(int))); + connect(menuEdit, SIGNAL(activated(int)), SLOT(cmd(int))); + + //---------ToolBar---------------------------------- + tools = new Q3ToolBar(this, "waveedit-tools"); + undoRedo->addTo(tools); + + Q3Accel* qa = new Q3Accel(this); + qa->connectItem(qa->insertItem(Qt::CTRL+Qt::Key_Z), song, SLOT(undo())); + qa->connectItem(qa->insertItem(Qt::CTRL+Qt::Key_Y), song, SLOT(redo())); + connect(muse, SIGNAL(configChanged()), SLOT(configChanged())); + + + //-------------------------------------------------- + // Transport Bar + Q3ToolBar* transport = new Q3ToolBar(this); + transportAction->addTo(transport); + + //-------------------------------------------------- + // ToolBar: Solo Cursor1 Cursor2 + + tb1 = new Q3ToolBar(this, "pianoroll-tools"); + + tb1->setLabel(tr("weTools")); + solo = new QToolButton(tb1); + solo->setText(tr("Solo")); + solo->setToggleButton(true); + connect(solo, SIGNAL(toggled(bool)), SLOT(soloChanged(bool))); + + QLabel* label = new QLabel(tr("Cursor"), tb1, "Cursor"); + label->setAlignment(Qt::AlignRight|Qt::AlignVCenter); + label->setIndent(3); + pos1 = new PosLabel(tb1); + pos2 = new PosLabel(tb1); + pos2->setSmpte(true); + + //--------------------------------------------------- + // Rest + //--------------------------------------------------- + + int yscale = 256; + int xscale; + + if (!parts()->empty()) { // Roughly match total size of part + Part* firstPart = parts()->begin()->second; + xscale = 0 - firstPart->lenFrame()/_widthInit; + } + else { + xscale = -8000; + } + + hscroll = new ScrollScale(1, -32768, xscale, 10000, Qt::Horizontal, mainw, 0, true, 10000.0); + view = new WaveView(this, mainw, xscale, yscale); + wview = view; // HACK! + + QSizeGrip* corner = new QSizeGrip(mainw); + ymag = new QSlider(1, 256, 256, yscale, Qt::Vertical, mainw); + time = new MTScale(&_raster, mainw, xscale, true); + ymag->setFixedWidth(16); + connect(ymag, SIGNAL(valueChanged(int)), view, SLOT(setYScale(int))); + time->setOrigin(0, 0); + + mainGrid->setRowStretch(0, 100); + mainGrid->setColStretch(0, 100); + + mainGrid->addMultiCellWidget(time, 0, 0, 0, 1); + mainGrid->addMultiCellWidget(hLine(mainw), 1, 1, 0, 1); + mainGrid->addWidget(view, 2, 0); + mainGrid->addWidget(ymag, 2, 1); + mainGrid->addWidget(hscroll, 3, 0); + mainGrid->addWidget(corner, 3, 1, Qt::AlignBottom | Qt::AlignRight); + + connect(hscroll, SIGNAL(scrollChanged(int)), view, SLOT(setXPos(int))); + connect(hscroll, SIGNAL(scaleChanged(int)), view, SLOT(setXMag(int))); + setCaption(view->getCaption()); + connect(view, SIGNAL(followEvent(int)), hscroll, SLOT(setOffset(int))); + + connect(hscroll, SIGNAL(scrollChanged(int)), time, SLOT(setXPos(int))); + connect(hscroll, SIGNAL(scaleChanged(int)), time, SLOT(setXMag(int))); +// connect(time, SIGNAL(timeChanged(unsigned)), SLOT(setTime(unsigned))); + connect(view, SIGNAL(timeChanged(unsigned)), SLOT(setTime(unsigned))); + + connect(hscroll, SIGNAL(scaleChanged(int)), SLOT(updateHScrollRange())); + connect(song, SIGNAL(songChanged(int)), SLOT(songChanged1(int))); + + updateHScrollRange(); + configChanged(); + + if(!parts()->empty()) + { + WavePart* part = (WavePart*)(parts()->begin()->second); + solo->setOn(part->track()->solo()); + } + } + +//--------------------------------------------------------- +// configChanged +//--------------------------------------------------------- + +void WaveEdit::configChanged() + { + view->setBg(config.waveEditBackgroundColor); + select->setAccel(shortcuts[SHRT_SELECT_ALL].key, CMD_SELECT_ALL); + select->setAccel(shortcuts[SHRT_SELECT_NONE].key, CMD_SELECT_NONE); + } + +//--------------------------------------------------------- +// updateHScrollRange +//--------------------------------------------------------- +void WaveEdit::updateHScrollRange() +{ + int s, e; + wview->range(&s, &e); + // Show one more measure. + e += sigmap.ticksMeasure(e); + // Show another quarter measure due to imprecise drawing at canvas end point. + e += sigmap.ticksMeasure(e) / 4; + // Compensate for the vscroll width. + //e += wview->rmapxDev(-vscroll->width()); + int s1, e1; + hscroll->range(&s1, &e1); + if(s != s1 || e != e1) + hscroll->setRange(s, e); +} + +//--------------------------------------------------------- +// setTime +//--------------------------------------------------------- + +void WaveEdit::setTime(unsigned samplepos) + { +// printf("setTime %d %x\n", samplepos, samplepos); + unsigned tick = tempomap.frame2tick(samplepos); + pos1->setValue(tick); + //pos2->setValue(tick); + pos2->setValue(samplepos); + time->setPos(3, tick, false); + } + +//--------------------------------------------------------- +// ~WaveEdit +//--------------------------------------------------------- + +WaveEdit::~WaveEdit() + { + undoRedo->removeFrom(tools); + } + +//--------------------------------------------------------- +// cmd +//--------------------------------------------------------- + +void WaveEdit::cmd(int n) + { + view->cmd(n); + } + +//--------------------------------------------------------- +// loadConfiguration +//--------------------------------------------------------- + +void WaveEdit::readConfiguration(Xml& xml) + { + for (;;) { + Xml::Token token = xml.parse(); + const QString& tag = xml.s1(); + switch (token) { + case Xml::TagStart: + if (tag == "bgcolor") + config.waveEditBackgroundColor = readColor(xml); + else if (tag == "width") + _widthInit = xml.parseInt(); + else if (tag == "height") + _heightInit = xml.parseInt(); + else + xml.unknown("WaveEdit"); + break; + case Xml::TagEnd: + if (tag == "waveedit") + return; + default: + break; + case Xml::Error: + case Xml::End: + return; + } + } + } + +//--------------------------------------------------------- +// saveConfiguration +//--------------------------------------------------------- + +void WaveEdit::writeConfiguration(int level, Xml& xml) + { + xml.tag(level++, "waveedit"); + xml.colorTag(level, "bgcolor", config.waveEditBackgroundColor); + xml.intTag(level, "width", _widthInit); + xml.intTag(level, "height", _heightInit); + xml.tag(level, "/waveedit"); + } + +//--------------------------------------------------------- +// writeStatus +//--------------------------------------------------------- + +void WaveEdit::writeStatus(int level, Xml& xml) const + { + writePartList(level, xml); + xml.tag(level++, "waveedit"); + MidiEditor::writeStatus(level, xml); + xml.intTag(level, "xpos", hscroll->pos()); + xml.intTag(level, "xmag", hscroll->mag()); + xml.intTag(level, "ymag", ymag->value()); + xml.tag(level, "/waveedit"); + } + +//--------------------------------------------------------- +// readStatus +//--------------------------------------------------------- + +void WaveEdit::readStatus(Xml& xml) + { + for (;;) { + Xml::Token token = xml.parse(); + if (token == Xml::Error || token == Xml::End) + break; + QString tag = xml.s1(); + switch (token) { + case Xml::TagStart: + if (tag == "midieditor") + MidiEditor::readStatus(xml); + else if (tag == "xmag") + hscroll->setMag(xml.parseInt()); + else if (tag == "ymag") + ymag->setValue(xml.parseInt()); + else if (tag == "xpos") + hscroll->setPos(xml.parseInt()); + else + xml.unknown("WaveEdit"); + break; + case Xml::TagEnd: + if (tag == "waveedit") + return; + default: + break; + } + } + } + +//--------------------------------------------------------- +// resizeEvent +//--------------------------------------------------------- + +void WaveEdit::resizeEvent(QResizeEvent* ev) + { + QWidget::resizeEvent(ev); + _widthInit = ev->size().width(); + _heightInit = ev->size().height(); + } + +//--------------------------------------------------------- +// songChanged1 +// signal from "song" +//--------------------------------------------------------- + +void WaveEdit::songChanged1(int bits) + { + + if (bits & SC_SOLO) + { + WavePart* part = (WavePart*)(parts()->begin()->second); + solo->blockSignals(true); + solo->setOn(part->track()->solo()); + solo->blockSignals(false); + } + + songChanged(bits); + } + + +//--------------------------------------------------------- +// soloChanged +// signal from solo button +//--------------------------------------------------------- + +void WaveEdit::soloChanged(bool flag) + { + WavePart* part = (WavePart*)(parts()->begin()->second); + audio->msgSetSolo(part->track(), flag); + song->update(SC_SOLO); + } + +//--------------------------------------------------------- +// viewKeyPressEvent +//--------------------------------------------------------- + +void WaveEdit::keyPressEvent(QKeyEvent* event) + { + int key = event->key(); + if (key == Qt::Key_Escape) { + close(); + return; + } + else { + event->ignore(); + } + } + + diff --git a/muse2/muse/waveedit/waveedit.h b/muse2/muse/waveedit/waveedit.h new file mode 100644 index 00000000..eac0e5bf --- /dev/null +++ b/muse2/muse/waveedit/waveedit.h @@ -0,0 +1,79 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: waveedit.h,v 1.3.2.8 2008/01/26 07:23:21 terminator356 Exp $ +// (C) Copyright 2000 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __WAVE_EDIT_H__ +#define __WAVE_EDIT_H__ + +#include +//Added by qt3to4: +#include +#include +#include +#include +#include "midieditor.h" + +class QToolButton; +class PartList; +class WaveView; +class ScrollScale; +class QSlider; +class PosLabel; +class QResizeEvent; +class SNode; + +//--------------------------------------------------------- +// WaveEdit +//--------------------------------------------------------- + +class WaveEdit : public MidiEditor { + WaveView* view; + QSlider* ymag; + Q3ToolBar* tools; + Q3ToolBar* tb1; + QToolButton* solo; + PosLabel* pos1; + PosLabel* pos2; + + static int _widthInit, _heightInit; + + Q_OBJECT + virtual void closeEvent(QCloseEvent*); + virtual void resizeEvent(QResizeEvent* ev); + virtual void keyPressEvent(QKeyEvent*); + + Q3PopupMenu* menuFunctions, *select, *menuGain; + + private slots: + void cmd(int); + void setTime(unsigned t); + void songChanged1(int); + void soloChanged(bool flag); + + public slots: + void configChanged(); + + virtual void updateHScrollRange(); + + signals: + void deleted(unsigned long); + + public: + WaveEdit(PartList*); + ~WaveEdit(); + virtual void readStatus(Xml&); + virtual void writeStatus(int, Xml&) const; + static void readConfiguration(Xml&); + static void writeConfiguration(int, Xml&); + + 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 }; + }; + +#endif + diff --git a/muse2/muse/waveedit/waveview.cpp b/muse2/muse/waveedit/waveview.cpp new file mode 100644 index 00000000..f0ece122 --- /dev/null +++ b/muse2/muse/waveedit/waveview.cpp @@ -0,0 +1,936 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: waveview.cpp,v 1.10.2.16 2009/11/14 03:37:48 terminator356 Exp $ +// (C) Copyright 2000 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include +#include + +#include +#include +#include +#include +//Added by qt3to4: +#include + +#include "editgain.h" +#include "globals.h" +#include "wave.h" +#include "waveview.h" +#include "song.h" +#include "event.h" +#include "waveedit.h" +#include "audio.h" +#include "gconfig.h" + +bool modifyWarnedYet = false; +//--------------------------------------------------------- +// WaveView +//--------------------------------------------------------- + +WaveView::WaveView(MidiEditor* pr, QWidget* parent, int xscale, int yscale) + : View(parent, xscale, 1) + { + editor = pr; + setVirt(true); + pos[0] = tempomap.tick2frame(song->cpos()); + pos[1] = tempomap.tick2frame(song->lpos()); + pos[2] = tempomap.tick2frame(song->rpos()); + yScale = yscale; + mode = NORMAL; + selectionStart = 0; + selectionStop = 0; + lastGainvalue = 100; + + setMouseTracking(true); + setBg(QColor(192, 208, 255)); + + if (editor->parts()->empty()) { + curPart = 0; + curPartId = -1; + } + else { + curPart = (WavePart*)(editor->parts()->begin()->second); + curPartId = curPart->sn(); + } + + + connect(song, SIGNAL(posChanged(int,unsigned,bool)), SLOT(setPos(int,unsigned,bool))); + connect(song, SIGNAL(songChanged(int)), SLOT(songChanged(int))); + songChanged(SC_SELECTION); + } + +//--------------------------------------------------------- +// setYScale +//--------------------------------------------------------- + +void WaveView::setYScale(int val) + { + yScale = val; + redraw(); + } + +//--------------------------------------------------------- +// draw +//--------------------------------------------------------- + +void WaveView::pdraw(QPainter& p, const QRect& rr) + { + int x1 = rr.x(); + int x2 = rr.right() + 1; + if (x1 < 0) + x1 = 0; + if (x2 > width()) + x2 = width(); + int hh = height(); + int h = hh/2; + int y = rr.y() + h; + + // Added by T356. + int xScale = xmag; + if (xScale < 0) + xScale = -xScale; + + for (iPart ip = editor->parts()->begin(); ip != editor->parts()->end(); ++ip) { + WavePart* wp = (WavePart*)(ip->second); + int channels = wp->track()->channels(); + int px = wp->frame(); + + EventList* el = wp->events(); + for (iEvent e = el->begin(); e != el->end(); ++e) { + Event event = e->second; + if (event.empty()) + continue; + SndFileR f = event.sndFile(); + if (f.isNull()) + continue; + + unsigned peoffset = px + event.frame() - event.spos(); + int sx, ex; + + sx = event.frame() + px + xScale/2; + ex = sx + event.lenFrame(); + sx = sx / xScale - xpos; + ex = ex / xScale - xpos; + + if (sx < x1) + sx = x1; + if (ex > x2) + ex = x2; + + int pos = (xpos + sx) * xScale + event.spos() - event.frame() - px; + + //printf("pos=%d xpos=%d sx=%d ex=%d xScale=%d event.spos=%d event.frame=%d px=%d\n", + // pos, xpos, sx, ex, xScale, event.spos(), event.frame(), px); + + h = hh / (channels * 2); + int cc = hh % (channels * 2) ? 0 : 1; + + for (int i = sx; i < ex; i++) { + y = rr.y() + h; + SampleV sa[f.channels()]; + f.read(sa, xScale, pos); + pos += xScale; + if (pos < event.spos()) + continue; + + int selectionStartPos = selectionStart - peoffset; // Offset transformed to event coords + int selectionStopPos = selectionStop - peoffset; + + for (int k = 0; k < channels; ++k) { + int kk = k % f.channels(); + int peak = (sa[kk].peak * (h - 1)) / yScale; + int rms = (sa[kk].rms * (h - 1)) / yScale; + if (peak > h) + peak = h; + if (rms > h) + rms = h; + QColor peak_color = QColor(Qt::darkGray); + QColor rms_color = QColor(Qt::black); + + // Changed by T356. Reduces (but not eliminates) drawing artifacts. + //if (pos > selectionStartPos && pos < selectionStopPos) { + if (pos > selectionStartPos && pos <= selectionStopPos) { + + peak_color = QColor(Qt::lightGray); + rms_color = QColor(Qt::white); + // Draw inverted + p.setPen(QColor(Qt::black)); + p.drawLine(i, y - h + cc, i, y + h - cc ); + } + p.setPen(peak_color); + p.drawLine(i, y - peak - cc, i, y + peak); + p.setPen(rms_color); + p.drawLine(i, y - rms - cc, i, y + rms); + y += 2 * h; + } + } + } + } + View::pdraw(p, rr); + } + +//--------------------------------------------------------- +// draw +//--------------------------------------------------------- + +void WaveView::draw(QPainter& p, const QRect& r) + { + unsigned x = r.x() < 0 ? 0 : r.x(); + unsigned y = r.y() < 0 ? 0 : r.y(); + int w = r.width(); + int h = r.height(); + + unsigned x2 = x + w; + unsigned y2 = y + h; + + // + // draw marker & centerline + // + p.setPen(Qt::red); + if (pos[0] >= x && pos[0] < x2) { + p.drawLine(pos[0], y, pos[0], y2); + } + p.setPen(Qt::blue); + if (pos[1] >= x && pos[1] < x2) { + p.drawLine(pos[1], y, pos[1], y2); + } + if (pos[2] >= x && pos[2] < x2) + p.drawLine(pos[2], y, pos[2], y2); + + // Changed by T356. Support multiple (or none) selected parts. + //int n = curPart->track()->channels(); + int n = 1; + if(curPart) + n = curPart->track()->channels(); + + int hn = h / n; + int hh = hn / 2; + for (int i = 0; i < n; ++i) { + int h2 = hn * i; + int center = hh + h2; + p.setPen(QColor(i & i ? Qt::red : Qt::blue)); + p.drawLine(x, center, x2, center); + p.setPen(QColor(Qt::black)); + p.drawLine(x, h2, x2, h2); + } + } + +//--------------------------------------------------------- +// getCaption +//--------------------------------------------------------- + +QString WaveView::getCaption() const + { + + // Changed by T356. Support multiple (or none) selected parts. + //return QString("Part ") + curPart->name(); + if(curPart) + return QString("Part ") + curPart->name(); + else + return QString("Part "); + + } + +//--------------------------------------------------------- +// songChanged +//--------------------------------------------------------- + +void WaveView::songChanged(int flags) + { + // Is it simply a midi controller value adjustment? Forget it. + if(flags == SC_MIDI_CONTROLLER) + return; + + if (flags & SC_SELECTION) { + startSample = MAXINT; + endSample = 0; + curPart = 0; + for (iPart p = editor->parts()->begin(); p != editor->parts()->end(); ++p) { + WavePart* part = (WavePart*)(p->second); + if (part->sn() == curPartId) + curPart = part; + int ssample = part->frame(); + int esample = ssample + part->lenFrame(); + if (ssample < startSample) { + startSample = ssample; + //printf("startSample = %d\n", startSample); + } + if (esample > endSample) { + endSample = esample; + //printf("endSample = %d\n", endSample); + } + } + } + if (flags & SC_CLIP_MODIFIED) { + redraw(); // Boring, but the only thing possible to do + } + if (flags & SC_TEMPO) { + setPos(0, song->cpos(), false); + setPos(1, song->lpos(), false); + setPos(2, song->rpos(), false); + } + redraw(); + } + +//--------------------------------------------------------- +// setPos +// set one of three markers +// idx - 0-cpos 1-lpos 2-rpos +// flag - emit followEvent() +//--------------------------------------------------------- + +void WaveView::setPos(int idx, unsigned val, bool adjustScrollbar) + { + val = tempomap.tick2frame(val); + if (pos[idx] == val) + return; + int opos = mapx(pos[idx]); + int npos = mapx(val); + + if (adjustScrollbar && idx == 0) { + switch (song->follow()) { + case Song::NO: + break; + case Song::JUMP: + if (npos >= width()) { + int ppos = val - xorg - rmapxDev(width()/4); + if (ppos < 0) + ppos = 0; + emit followEvent(ppos); + opos = mapx(pos[idx]); + npos = mapx(val); + } + else if (npos < 0) { + int ppos = val - xorg - rmapxDev(width()*3/4); + if (ppos < 0) + ppos = 0; + emit followEvent(ppos); + opos = mapx(pos[idx]); + npos = mapx(val); + } + break; + case Song::CONTINUOUS: + if (npos > (width()*5)/8) { + int ppos = pos[idx] - xorg - rmapxDev(width()*5/8); + if (ppos < 0) + ppos = 0; + emit followEvent(ppos); + opos = mapx(pos[idx]); + npos = mapx(val); + } + else if (npos < (width()*3)/8) { + int ppos = pos[idx] - xorg - rmapxDev(width()*3/8); + if (ppos < 0) + ppos = 0; + emit followEvent(ppos); + opos = mapx(pos[idx]); + npos = mapx(val); + } + break; + } + } + + int x; + int w = 1; + if (opos > npos) { + w += opos - npos; + x = npos; + } + else { + w += npos - opos; + x = opos; + } + pos[idx] = val; + redraw(QRect(x, 0, w, height())); + } + +//--------------------------------------------------------- +// viewMousePressEvent +//--------------------------------------------------------- + +void WaveView::viewMousePressEvent(QMouseEvent* event) + { + button = event->button(); + unsigned x = event->x(); + + switch (button) { + case Qt::LeftButton: + if (mode == NORMAL) { + // redraw and reset: + if (selectionStart != selectionStop) { + selectionStart = selectionStop = 0; + redraw(); + } + mode = DRAG; + dragstartx = x; + selectionStart = selectionStop = x; + } + break; + + case Qt::MidButton: + case Qt::RightButton: + default: + break; + } + viewMouseMoveEvent(event); + } + +//--------------------------------------------------------- +// viewMouseReleaseEvent +//--------------------------------------------------------- +void WaveView::viewMouseReleaseEvent(QMouseEvent* /*event*/) + { + button = Qt::NoButton; + + if (mode == DRAG) { + mode = NORMAL; + //printf("selectionStart=%d selectionStop=%d\n", selectionStart, selectionStop); + } + } + +//--------------------------------------------------------- +// viewMouseMoveEvent +//--------------------------------------------------------- + +void WaveView::viewMouseMoveEvent(QMouseEvent* event) + { + unsigned x = event->x(); + emit timeChanged(x); + + int i; + switch (button) { + case Qt::LeftButton: + i = 0; + if (mode == DRAG) { + if (x < dragstartx) { + selectionStart = x; + selectionStop = dragstartx; + } + else { + selectionStart = dragstartx; + selectionStop = x; + } + } + break; + case Qt::MidButton: + i = 1; + break; + case Qt::RightButton: + i = 2; + break; + default: + return; + } + Pos p(tempomap.frame2tick(x), true); + song->setPos(i, p); + } + +//--------------------------------------------------------- +// range +// returns range in samples +//--------------------------------------------------------- + +void WaveView::range(int* s, int *e) + { + + PartList* lst = editor->parts(); + if(lst->empty()) + { + *s = 0; + *e = tempomap.tick2frame(song->len()); + return; + } + int ps = song->len(), pe = 0; + int tps, tpe; + for(iPart ip = lst->begin(); ip != lst->end(); ++ip) + { + tps = ip->second->tick(); + if(tps < ps) + ps = tps; + tpe = tps + ip->second->lenTick(); + if(tpe > pe) + pe = tpe; + } + *s = tempomap.tick2frame(ps); + *e = tempomap.tick2frame(pe); + } + +//--------------------------------------------------------- +// cmd +//--------------------------------------------------------- +void WaveView::cmd(int n) + { + 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--; + WavePart* beg = (WavePart*) iBeg->second; + WavePart* end = (WavePart*) iEnd->second; + selectionStart = beg->frame(); + selectionStop = end->frame() + end->lenFrame(); + redraw(); + } + break; + + case WaveEdit::CMD_EDIT_EXTERNAL: + modifyoperation = EDIT_EXTERNAL; + break; + + case WaveEdit::CMD_SELECT_NONE: + selectionStart = selectionStop = 0; + redraw(); + 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; + } + 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 + QMessageBox::information(this, + QString("MusE"), + QWidget::tr("No selection. Ignoring")); + + return; + } + + //if(!modifyWarnedYet) + //{ + // modifyWarnedYet = true; + // if(QMessageBox::warning(this, QString("Muse"), + // tr("Warning! Muse currently operates directly on the sound file.\n" + // "Undo is supported, but NOT after exit, WITH OR WITHOUT A SAVE!\n" + // "If you are stuck, try deleting the associated .wca file and reloading."), tr("&Ok"), tr("&Cancel"), + // QString::null, 0, 1 ) != 0) + // return; + //} + modifySelection(modifyoperation, selectionStart, selectionStop, paramA); + } + } + + +//--------------------------------------------------------- +// getSelection +//--------------------------------------------------------- +WaveSelectionList WaveView::getSelection(unsigned startpos, unsigned stoppos) + { + WaveSelectionList selection; + + for (iPart ip = editor->parts()->begin(); ip != editor->parts()->end(); ++ip) { + WavePart* wp = (WavePart*)(ip->second); + unsigned part_offset = wp->frame(); + + EventList* el = wp->events(); + //printf("eventlist length=%d\n",el->size()); + + 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().latin1()); + WaveEventSelection s; + s.file = file; + s.startframe = sx; + s.endframe = ex+1; + //printf("sx=%d ex=%d\n",sx,ex); + selection.push_back(s); + } + } + } + + return selection; + } + +//--------------------------------------------------------- +// modifySelection +//--------------------------------------------------------- +void WaveView::modifySelection(int operation, unsigned startpos, unsigned stoppos, double paramA) + { + 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); + redraw(); + } + +//--------------------------------------------------------- +// muteSelection +//--------------------------------------------------------- +void WaveView::muteSelection(unsigned channels, float** data, unsigned length) + { + // Set everything to 0! + for (unsigned i=0; i loudest) + loudest = data[i][j]; + } + } + + double scale = 0.99 / (double)loudest; + + for (unsigned i=0; iAudio:External Waveditor\nis set to a valid editor.")); + } + + if (exttmpFile.openRead()) { + printf("Could not reopen temporary file!\n"); + } + else { + // Re-read file again + exttmpFile.seek(0, 0); + size_t sz = exttmpFile.readWithHeap(file_channels, tmpdata, tmpdatalen); + if (sz != tmpdatalen) { + // File must have been shrunken - not good. Alert user. + QMessageBox::critical(this, tr("MusE - file size changed"), + tr("When editing in external editor - you should not change the filesize\nsince it must fit the selected region.\n\nMissing data is muted")); + for (unsigned i=0; i +//Added by qt3to4: +#include +#include "wave.h" + +class PartList; +class QPainter; +class QRect; +class WavePart; +class MidiEditor; +class SndFileR; + +struct WaveEventSelection { + SndFileR file; + unsigned startframe; + unsigned endframe; + }; + +typedef std::list WaveSelectionList; +typedef std::list::iterator iWaveSelection; + +//--------------------------------------------------------- +// WaveView +//--------------------------------------------------------- + +class WaveView : public View { + MidiEditor* editor; + unsigned pos[3]; + int yScale; + int button; + int startSample; + int endSample; + + WavePart* curPart; + int curPartId; + + enum { NORMAL, DRAG } mode; + enum { MUTE = 0, NORMALIZE, FADE_IN, FADE_OUT, REVERSE, GAIN, EDIT_EXTERNAL }; //!< Modify operations + + unsigned selectionStart, selectionStop, dragstartx; + + Q_OBJECT + virtual void pdraw(QPainter&, const QRect&); + virtual void draw(QPainter&, const QRect&); + virtual void viewMousePressEvent(QMouseEvent*); + virtual void viewMouseMoveEvent(QMouseEvent*); + virtual void viewMouseReleaseEvent(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 + + + private slots: + void setPos(int idx, unsigned val, bool adjustScrollbar); + + public slots: + void setYScale(int); + void songChanged(int type); + + signals: + void followEvent(int); + void timeChanged(unsigned); + + public: + WaveView(MidiEditor*, QWidget* parent, int xscale, int yscale); + QString getCaption() const; + void range(int*, int*); + void cmd(int n); + WavePart* part() { return curPart; } + }; + +#endif + diff --git a/muse2/muse/waveevent.cpp b/muse2/muse/waveevent.cpp new file mode 100644 index 00000000..98bfe8cc --- /dev/null +++ b/muse2/muse/waveevent.cpp @@ -0,0 +1,453 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: waveevent.cpp,v 1.9.2.6 2009/12/20 05:00:35 terminator356 Exp $ +// +// (C) Copyright 2000-2003 Werner Schweer (ws@seh.de) +//========================================================= + +#include "audioconvert.h" +#include "globals.h" +#include "event.h" +#include "waveevent.h" +#include "xml.h" +#include "wave.h" +#include +#include + +// Added by Tim. p3.3.18 +//#define USE_SAMPLERATE +// +//#define WAVEEVENT_DEBUG +//#define WAVEEVENT_DEBUG_PRC + +//--------------------------------------------------------- +// WaveEvent +//--------------------------------------------------------- + +WaveEventBase::WaveEventBase(EventType t) + : EventBase(t) + { + deleted = false; + } + +//--------------------------------------------------------- +// WaveEventBase::clone +//--------------------------------------------------------- + +EventBase* WaveEventBase::clone() +{ + return new WaveEventBase(*this); +} + +//--------------------------------------------------------- +// WaveEvent::mid +//--------------------------------------------------------- + +EventBase* WaveEventBase::mid(unsigned b, unsigned e) + { + WaveEventBase* ev = new WaveEventBase(*this); + unsigned fr = frame(); + unsigned start = fr - b; + if(b > fr) + { + start = 0; + ev->setSpos(spos() + b - fr); + } + unsigned end = endFrame(); + + if (e < end) + end = e; + + ev->setFrame(start); + ev->setLenFrame(end - b - start); + return ev; + } + +//--------------------------------------------------------- +// dump +//--------------------------------------------------------- + +void WaveEventBase::dump(int n) const + { + EventBase::dump(n); + } + +//--------------------------------------------------------- +// WaveEventBase::read +//--------------------------------------------------------- + +void WaveEventBase::read(Xml& xml) + { + for (;;) { + Xml::Token token = xml.parse(); + const QString& tag = xml.s1(); + switch (token) { + case Xml::Error: + case Xml::End: + case Xml::Attribut: + return; + case Xml::TagStart: + if (tag == "poslen") + PosLen::read(xml, "poslen"); + else if (tag == "frame") + _spos = xml.parseInt(); + else if (tag == "file") { + SndFile* wf = getWave(xml.parse1(), true); + if (wf) { + f = SndFileR(wf); + } + } + else + xml.unknown("Event"); + break; + case Xml::TagEnd: + if (tag == "event") { + Pos::setType(FRAMES); // DEBUG + return; + } + default: + break; + } + } + } + +//--------------------------------------------------------- +// write +//--------------------------------------------------------- + +//void WaveEventBase::write(int level, Xml& xml, const Pos& offset) const +void WaveEventBase::write(int level, Xml& xml, const Pos& offset, bool forcePath) const + { + if (f.isNull()) + return; + xml.tag(level++, "event"); + PosLen wpos(*this); + wpos += offset; +// if (offset) +// wpos.setTick(wpos.tick() + offset); + wpos.write(level, xml, "poslen"); + xml.intTag(level, "frame", _spos); // offset in wave file + + // + // waves in the project dirctory are stored + // with relative path name, others with absolute path + // + QString path = f.dirPath(); + + //if (path.contains(museProject)) { + if (!forcePath && path.contains(museProject)) { + // extract museProject. + QString newName = f.path().remove(museProject+"/"); + xml.strTag(level, "file", newName); + } + else + xml.strTag(level, "file", f.path()); + xml.etag(level, "event"); + } + +//void WaveEventBase::read(unsigned offset, float** buffer, int channel, int n, bool overwrite) +//void WaveEventBase::readAudio(unsigned offset, float** buffer, int channel, int n, bool doSeek, bool overwrite) +//off_t WaveEventBase::readAudio(SRC_STATE* src_state, off_t sfCurFrame, unsigned offset, float** buffer, int channel, int n, bool doSeek, bool overwrite) +//off_t WaveEventBase::readAudio(AudioConverter* audConv, off_t sfCurFrame, unsigned offset, float** buffer, int channel, int n, bool doSeek, bool overwrite) +// p3.3.33 +void WaveEventBase::readAudio(WavePart* part, unsigned offset, float** buffer, int channel, int n, bool doSeek, bool overwrite) +{ + // Added by Tim. p3.3.17 + #ifdef WAVEEVENT_DEBUG_PRC + printf("WaveEventBase::readAudio audConv:%p sfCurFrame:%ld offset:%u channel:%d n:%d\n", audConv, sfCurFrame, offset, channel, n); + #endif + + // Changed by Tim. p3.3.18 + #ifdef USE_SAMPLERATE + + // TODO: + >>>>>>>>>>>+++++++++++++++++++++++++++++ + // If we have a valid audio converter then use it to do the processing. Otherwise just a normal seek + read. + if(audConv) + //sfCurFrame = audConv->process(f, sfCurFrame, offset + _spos, buffer, channel, n, doSeek, overwrite); + sfCurFrame = audConv->readAudio(f, sfCurFrame, offset, buffer, channel, n, doSeek, overwrite); + else + { + if(!f.isNull()) + { + sfCurFrame = f.seek(offset + _spos, 0); + sfCurFrame += f.read(channel, buffer, n, overwrite); + } + } + //return sfCurFrame; + return; + + /* + unsigned fsrate = f.samplerate(); + int fchan = f.channels(); + off_t frame = offset + _spos; + //bool resample = src_state && ((unsigned)sampleRate != fsrate); + bool resample = audConv && audConv->isValid() && ((unsigned)sampleRate != fsrate); + + // Is a 'transport' seek requested? (Not to be requested with every read! Should only be for 'first read' seeks, or positional 'transport' seeks.) + // Due to the support of sound file references in MusE, seek must ALWAYS be done before read, as before, + // except now we alter the seek position if sample rate conversion is being used and remember the seek positions. + if(doSeek) + { + if(!resample) + { + // Sample rates are the same. Just a regular seek, no conversion. + sfCurFrame = f.seek(frame, 0); + } + else + { + // Sample rates are different. Seek to a calculated 'sample rate ratio factored' position. + + double srcratio = (double)fsrate / (double)sampleRate; + //long inSize = long((double)frames * _src_ratio) + 1 // From MusE-2 file converter. + off_t newfr = (off_t)floor(((double)frame * srcratio)); // From simplesynth. + + //_sfCurFrame = sf_seek(sf, newfr, 0); + sfCurFrame = f.seek(newfr, 0); + + // Added by Tim. p3.3.17 + #ifdef WAVEEVENT_DEBUG_PRC + printf("WaveEventBase::readAudio Seek frame:%ld converted to frame:%ld _sfCurFrame:%ld\n", frame, newfr, sfCurFrame); + #endif + + // Reset the src converter. It's current state is meaningless now. + //int srcerr = src_reset(src_state); + int srcerr = audConv->reset(); + if(srcerr != 0) + printf("WaveEventBase::readAudio Converter reset failed: %s\n", src_strerror(srcerr)); + } + } + else + { + // No seek requested. Are the rates the same? + if(!resample) + // Sample rates are the same. Just a regular seek, no conversion. + sfCurFrame = f.seek(frame, 0); + else + { + // Added by Tim. p3.3.17 + #ifdef WAVEEVENT_DEBUG_PRC + printf("WaveEventBase::readAudio No 'transport' seek, rates different. Seeking to _sfCurFrame:%ld\n", sfCurFrame); + #endif + + // Sample rates are different. We can't just tell seek to go to an absolute calculated position, + // since the last position can vary - it might not be what the calculated position is. + // We must use the last position left by SRC conversion, ie. let the file position progress on its own. + sfCurFrame = f.seek(sfCurFrame, 0); + } + } + + // Do we not need to resample? + if(!resample) + { + return sfCurFrame + f.read(channel, buffer, n, overwrite); + } + + size_t rn; + + if((sampleRate == 0) || (fsrate == 0)) + { + if(debugMsg) + printf("WaveEventBase::readAudio Using SRC: Error: sampleRate or file samplerate is zero!\n"); + return sfCurFrame; + } + + // Ratio is defined as output sample rate over input samplerate. + double srcratio = (double)sampleRate / (double)fsrate; + long outFrames = n; + //long outSize = outFrames * channel; + long outSize = outFrames * fchan; + + //long inSize = long(outSize * srcratio) + 1 // From MusE-2 file converter. + //long inSize = (long)floor(((double)outSize / srcratio)); // From simplesynth. + //long inFrames = (long)floor(((double)outFrames / srcratio)); // From simplesynth. + long inFrames = (long)ceil(((double)outFrames / srcratio)); // From simplesynth. + //long inFrames = (long)floor(double(outFrames * sfinfo.samplerate) / double(sampleRate)); // From simplesynth. + + // Extra input compensation - sometimes src requires more input frames than expected in order to + // always get a reliable number of used out frames ! + //inFrames = inFrames / (srcratio / 2.0); + long inComp = 10; + inFrames += inComp; + + long inSize = inFrames * fchan; + //long inSize = inFrames * channel; + + float inbuffer[inSize]; + float outbuffer[outSize]; + + //float* poutbuf; + + // If the number of file channels is the same as the process channels AND we want overwrite, we can get away with direct copying. + //if(overwrite && channel == fchan) + // Point the out buffer directly at the return buffers. + // poutbuf = buffer; + //else + // Point the out buffer at our local buffers. + // poutbuf = &outbuffer[0]; + + // Converter channels are fixed at creation time! Can't change them on the fly. Can't use 'channel' paramter. + //rn = f.read(inbuffer, inFrames); + rn = f.readDirect(inbuffer, inFrames); + + // convert + SRC_DATA srcdata; + srcdata.data_in = inbuffer; + srcdata.data_out = outbuffer; + //srcdata.data_out = poutbuf; + //srcdata.input_frames = inSize; + srcdata.input_frames = rn; + srcdata.output_frames = outFrames; + srcdata.end_of_input = ((long)rn != inFrames); + srcdata.src_ratio = srcratio; + + #ifdef WAVEEVENT_DEBUG_PRC + printf("WaveEventBase::readAudio %s processing converter... inFrames:%ld inSize:%ld outFrames:%ld outSize:%ld rn:%d", + f.name().latin1(), inFrames, inSize, outFrames, outSize, rn); + #endif + + //int srcerr = src_process(src_state, &srcdata); + int srcerr = audConv->process(&srcdata); + if(srcerr != 0) + { + printf("\nWaveEventBase::readAudio SampleRate converter process failed: %s\n", src_strerror(srcerr)); + return sfCurFrame += rn; + } + + #ifdef WAVEEVENT_DEBUG_PRC + printf(" frames used in:%ld out:%ld\n", srcdata.input_frames_used, srcdata.output_frames_gen); + #endif + + // If the number of frames read by the soundfile equals the input frames, go back. + // Otherwise we have reached the end of the file, so going back is useless since + // there shouldn't be any further calls. (Definitely get buffer underruns if further calls!) + if((long)rn == inFrames) + { + // Go back by the amount of unused frames. + sf_count_t seekn = inFrames - srcdata.input_frames_used; + if(seekn != 0) + { + #ifdef WAVEEVENT_DEBUG_PRC + printf("WaveEventBase::readAudio Seek-back by:%d\n", seekn); + #endif + sfCurFrame = f.seek(-seekn, SEEK_CUR); + } + else + sfCurFrame += rn; + } + else + sfCurFrame += rn; + + if(debugMsg) + { + if(srcdata.output_frames_gen != outFrames) + printf("WaveEventBase::readAudio %s output_frames_gen:%ld != outFrames:%ld outSize:%ld inFrames:%ld srcdata.input_frames_used:%ld inSize:%ld rn:%d\n", + f.name().latin1(), srcdata.output_frames_gen, outFrames, outSize, inFrames, srcdata.input_frames_used, inSize, rn); + } + + if(inFrames != (long)rn) + { + if(debugMsg) + printf("WaveEventBase::readAudio %s rn:%zd != inFrames:%ld output_frames_gen:%ld outFrames:%ld outSize:%ld srcdata.input_frames_used:%ld inSize:%ld\n", + f.name().latin1(), rn, inFrames, srcdata.output_frames_gen, outFrames, outSize, srcdata.input_frames_used, inSize); + + // We've reached the end of the file. Convert the number of frames read. + //rn = (double)rn * srcratio + 1; + rn = (long)floor((double)rn * srcratio); + if(rn > (size_t)outFrames) + rn = outFrames; + } + else + if(srcdata.output_frames_gen != outFrames) + { + // SRC didn't give us the number of frames we requested. + // This can occasionally be radically different from the requested frames, or zero, + // even when ample excess input frames are supplied. + // We're not done converting yet - we haven't reached the end of the file. + // We must do something with the buffer. So let's zero whatever SRC didn't fill. + // FIXME: Instead of zeroing, try processing more input data until the out buffer is full. + long b = srcdata.output_frames_gen * channel; + long e = outFrames * channel; + for(long i = b; i < e; ++i) + outbuffer[i] = 0.0f; + //poutbuf[i] = 0.0f; + rn = outFrames; + } + else + rn = outFrames; + + float* poutbuf = &outbuffer[0]; + if(fchan == channel) + { + if(overwrite) + for (size_t i = 0; i < rn; ++i) + { + for(int ch = 0; ch < channel; ++ch) + *(buffer[ch] + i) = *poutbuf++; + } + else + for(size_t i = 0; i < rn; ++i) + { + for(int ch = 0; ch < channel; ++ch) + *(buffer[ch] + i) += *poutbuf++; + } + } + else if((fchan == 2) && (channel == 1)) + { + // stereo to mono + if(overwrite) + for(size_t i = 0; i < rn; ++i) + *(buffer[0] + i) = poutbuf[i + i] + poutbuf[i + i + 1]; + else + for(size_t i = 0; i < rn; ++i) + *(buffer[0] + i) += poutbuf[i + i] + poutbuf[i + i + 1]; + } + else if((fchan == 1) && (channel == 2)) + { + // mono to stereo + if(overwrite) + for(size_t i = 0; i < rn; ++i) + { + float data = *poutbuf++; + *(buffer[0]+i) = data; + *(buffer[1]+i) = data; + } + else + for(size_t i = 0; i < rn; ++i) + { + float data = *poutbuf++; + *(buffer[0]+i) += data; + *(buffer[1]+i) += data; + } + } + else + { + if(debugMsg) + printf("WaveEventBase::readAudio Channel mismatch: source chans:%d -> dst chans:%d\n", fchan, channel); + } + + return sfCurFrame; + */ + + + #else + if(f.isNull()) + return; + //return sfCurFrame; + + //sfCurFrame = f.seek(offset + _spos, 0); + //sfCurFrame += f.read(channel, buffer, n, overwrite); + f.seek(offset + _spos, 0); + f.read(channel, buffer, n, overwrite); + + // p3.3.41 + //fprintf(stderr, "WaveEventBase::readAudio data: n:%ld %e %e %e %e\n", n, buffer[0][0], buffer[0][1], buffer[0][2], buffer[0][3]); + + + //return sfCurFrame; + return; + #endif + +} + diff --git a/muse2/muse/waveevent.h b/muse2/muse/waveevent.h new file mode 100644 index 00000000..4ea4918b --- /dev/null +++ b/muse2/muse/waveevent.h @@ -0,0 +1,64 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: waveevent.h,v 1.6.2.4 2009/12/20 05:00:35 terminator356 Exp $ +// +// (C) Copyright 1999-2004 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __WAVE_EVENT_H__ +#define __WAVE_EVENT_H__ + +//#include +#include + +#include "eventbase.h" + +class AudioConverter; +class WavePart; + +//--------------------------------------------------------- +// WaveEvent +//--------------------------------------------------------- + +class WaveEventBase : public EventBase { + QString _name; + SndFileR f; + int _spos; // start sample position in WaveFile + bool deleted; + + // p3.3.31 + //virtual EventBase* clone() { return new WaveEventBase(*this); } + virtual EventBase* clone(); + + public: + WaveEventBase(EventType t); + virtual ~WaveEventBase() {} + + virtual void read(Xml&); + //virtual void write(int, Xml&, const Pos& offset) const; + virtual void write(int, Xml&, const Pos& offset, bool forcePath = false) 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; } + + // Changed by Tim. p3.3.17 + //virtual void read(unsigned offset, float** bpp, int channels, int nn, bool overwrite = true); + //virtual void readAudio(unsigned /*offset*/, float** /*bpp*/, int /*channels*/, int /*nn*/, bool /*doSeek*/, bool /*overwrite*/); + //virtual off_t readAudio(SRC_STATE* /*src_state*/, off_t /*sfCurFrame*/, unsigned /*offset*/, + // float** /*bpp*/, int /*channels*/, int /*nn*/, bool /*doSeek*/, bool /*overwrite*/); + //virtual off_t readAudio(AudioConverter* /*audConv*/, off_t /*sfCurFrame*/, unsigned /*offset*/, + // float** /*bpp*/, int /*channels*/, int /*nn*/, bool /*doSeek*/, bool /*overwrite*/); + virtual void readAudio(WavePart* /*part*/, unsigned /*offset*/, + float** /*bpp*/, int /*channels*/, int /*nn*/, bool /*doSeek*/, bool /*overwrite*/); + }; + +#endif + diff --git a/muse2/muse/wavetrack.cpp b/muse2/muse/wavetrack.cpp new file mode 100644 index 00000000..0c2298a8 --- /dev/null +++ b/muse2/muse/wavetrack.cpp @@ -0,0 +1,360 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: wavetrack.cpp,v 1.15.2.12 2009/12/20 05:00:35 terminator356 Exp $ +// +// (C) Copyright 2003 Werner Schweer (ws@seh.de) +//========================================================= + +#include "track.h" +#include "event.h" +#include "audio.h" +#include "wave.h" +#include "xml.h" +#include "song.h" +#include "globals.h" +#include "gconfig.h" +#include "al/dsp.h" + +// Added by Tim. p3.3.18 +//#define WAVETRACK_DEBUG + +//--------------------------------------------------------- +// fetchData +// called from prefetch thread +//--------------------------------------------------------- + +//void WaveTrack::fetchData(unsigned pos, unsigned samples, float** bp) +void WaveTrack::fetchData(unsigned pos, unsigned samples, float** bp, bool doSeek) + { + // Added by Tim. p3.3.17 + #ifdef WAVETRACK_DEBUG + printf("WaveTrack::fetchData %s samples:%lu pos:%u\n", name().latin1(), samples, pos); + #endif + + // reset buffer to zero + for (int i = 0; i < channels(); ++i) + memset(bp[i], 0, samples * sizeof(float)); + + // p3.3.29 + // Process only if track is not off. + if(!off()) + { + + PartList* pl = parts(); + unsigned n = samples; + for (iPart ip = pl->begin(); ip != pl->end(); ++ip) { + WavePart* part = (WavePart*)(ip->second); + // Changed by Tim. p3.3.17 + //if (part->mute() || isMute()) + if (part->mute()) + continue; + + unsigned p_spos = part->frame(); + unsigned p_epos = p_spos + part->lenFrame(); + if (pos + n < p_spos) + break; + 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; + unsigned nn = event.lenFrame(); + unsigned e_epos = e_spos + nn; + + if (pos + n < e_spos) + break; + if (pos >= e_epos) + continue; + + int offset = e_spos - pos; + + unsigned srcOffset, dstOffset; + if (offset > 0) { + nn = n - offset; + srcOffset = 0; + dstOffset = offset; + } + else { + srcOffset = -offset; + dstOffset = 0; + + nn += offset; + if (nn > n) + nn = n; + } + float* bpp[channels()]; + for (int i = 0; i < channels(); ++i) + bpp[i] = bp[i] + dstOffset; + + // By T356. Allow overlapping parts or events to mix together ! + // Since the buffers are cleared above, just read and add (don't overwrite) the samples. + //event.read(srcOffset, bpp, channels(), nn); + //event.read(srcOffset, bpp, channels(), nn, false); + //event.readAudio(srcOffset, bpp, channels(), nn, doSeek, false); + // p3.3.33 + event.readAudio(part, srcOffset, bpp, channels(), nn, doSeek, false); + + } + } + } + + if(config.useDenormalBias) { + // add denormal bias to outdata + for (int i = 0; i < channels(); ++i) + for (int j = 0; j < samples; ++j) + { + bp[i][j] +=denormalBias; + + /* + // p3.3.41 + if(j & 1) + bp[i][j] -=denormalBias; + else + bp[i][j] +=denormalBias; + */ + } + } + + // p3.3.41 + //fprintf(stderr, "WaveTrack::fetchData data: samples:%ld %e %e %e %e\n", samples, bp[0][0], bp[0][1], bp[0][2], bp[0][3]); + + _prefetchFifo.add(); + } + +//--------------------------------------------------------- +// write +//--------------------------------------------------------- + +void WaveTrack::write(int level, Xml& xml) const + { + xml.tag(level++, "wavetrack"); + AudioTrack::writeProperties(level, xml); + const PartList* pl = cparts(); + for (ciPart p = pl->begin(); p != pl->end(); ++p) + p->second->write(level, xml); + xml.etag(level, "wavetrack"); + } + +//--------------------------------------------------------- +// read +//--------------------------------------------------------- + +void WaveTrack::read(Xml& xml) + { + for (;;) { + Xml::Token token = xml.parse(); + const QString& tag = xml.s1(); + switch (token) { + case Xml::Error: + case Xml::End: + return; + case Xml::TagStart: + if (tag == "part") { + //Part* p = newPart(); + //p->read(xml); + Part* p = 0; + p = readXmlPart(xml, this); + if(p) + parts()->add(p); + } + else if (AudioTrack::readProperties(xml, tag)) + xml.unknown("WaveTrack"); + break; + case Xml::Attribut: + break; + case Xml::TagEnd: + if (tag == "wavetrack") { + mapRackPluginsToControllers(); + return; + } + default: + break; + } + } + } + +//--------------------------------------------------------- +// newPart +//--------------------------------------------------------- + +Part* WaveTrack::newPart(Part*p, bool clone) + { + WavePart* part = clone ? new WavePart(this, p->events()) : new WavePart(this); + if (p) { + part->setName(p->name()); + part->setColorIndex(p->colorIndex()); + + *(PosLen*)part = *(PosLen*)p; + part->setMute(p->mute()); + } + + if(clone) + //p->chainClone(part); + chainClone(p, part); + + return part; + } + +//--------------------------------------------------------- +// getData +//--------------------------------------------------------- + +bool WaveTrack::getData(unsigned framePos, int channels, unsigned nframe, float** bp) + { + //if(debugMsg) + // printf("WaveTrack::getData framePos:%u channels:%d nframe:%u processed?:%d\n", framePos, channels, nframe, processed()); + + if ((song->bounceTrack != this) && !noInRoute()) { + RouteList* irl = inRoutes(); + iRoute i = irl->begin(); + if(i->track->isMidiTrack()) + { + if(debugMsg) + printf("WaveTrack::getData: Error: First route is a midi track route!\n"); + return false; + } + // p3.3.38 + //((AudioTrack*)i->track)->copyData(framePos, channels, nframe, bp); + ((AudioTrack*)i->track)->copyData(framePos, channels, + //(i->track->type() == Track::AUDIO_SOFTSYNTH && i->channel != -1) ? i->channel : 0, + i->channel, + i->channels, + nframe, bp); + + ++i; + for (; i != irl->end(); ++i) + { + if(i->track->isMidiTrack()) + { + if(debugMsg) + printf("WaveTrack::getData: Error: Route is a midi track route!\n"); + //return false; + continue; + } + // p3.3.38 + //((AudioTrack*)i->track)->addData(framePos, channels, nframe, bp); + ((AudioTrack*)i->track)->addData(framePos, channels, + //(i->track->type() == Track::AUDIO_SOFTSYNTH && i->channel != -1) ? i->channel : 0, + i->channel, + i->channels, + nframe, bp); + + } + if (recordFlag()) { + if (audio->isRecording() && recFile()) { + if (audio->freewheel()) { + } + else { + if (fifo.put(channels, nframe, bp, audio->pos().frame())) + printf("WaveTrack::getData(%d, %d, %d): fifo overrun\n", + framePos, channels, nframe); + } + } + return true; + } + } + if (!audio->isPlaying()) + return false; + + // Removed by T356. Multiple out route cacheing now handled by AudioTrack::copyData and ::addData. + /* + if (outRoutes()->size() > 1) { + if (bufferPos != framePos) { + // Added by Tim. p3.3.16 + printf("WaveTrack::getData bufferPos:%d != framePos\n", bufferPos); + + bufferPos = framePos; + if (audio->freewheel()) { + // when freewheeling, read data direct from file: + fetchData(bufferPos, nframe, outBuffers); + } + else { + unsigned pos; + if (_prefetchFifo.get(channels, nframe, outBuffers, &pos)) { + printf("WaveTrack::getData(%s) fifo underrun\n", + name().latin1()); + return false; + } + if (pos != framePos) { + printf("fifo get error expected %d, got %d\n", + framePos, pos); + if (debugMsg) + printf("fifo get error expected %d, got %d\n", + framePos, pos); + while (pos < framePos) { + if (_prefetchFifo.get(channels, nframe, bp, &pos)) { + printf("WaveTrack::getData(%s) fifo underrun\n", + name().latin1()); + return false; + } + } + } + } + } + for (int i = 0; i < channels; ++i) + //memcpy(bp[i], outBuffers[i], nframe * sizeof(float)); + AL::dsp->cpy(bp[i], outBuffers[i], nframe); + } + else { + */ + + //printf("WaveTrack::getData no out routes\n"); + + if (audio->freewheel()) { + + // when freewheeling, read data direct from file: + // Indicate do not seek file before each read. + // Changed by Tim. p3.3.17 + //fetchData(framePos, nframe, bp); + fetchData(framePos, nframe, bp, false); + + } + else { + unsigned pos; + if (_prefetchFifo.get(channels, nframe, bp, &pos)) { + printf("WaveTrack::getData(%s) fifo underrun\n", + name().latin1()); + return false; + } + if (pos != framePos) { + if (debugMsg) + printf("fifo get error expected %d, got %d\n", + framePos, pos); + while (pos < framePos) { + if (_prefetchFifo.get(channels, nframe, bp, &pos)) { + printf("WaveTrack::getData(%s) fifo underrun\n", + name().latin1()); + return false; + } + } + } + + // p3.3.41 + //fprintf(stderr, "WaveTrack::getData %s data: nframe:%ld %e %e %e %e\n", name().latin1(), nframe, bp[0][0], bp[0][1], bp[0][2], bp[0][3]); + + } + //} + return true; + } + +//--------------------------------------------------------- +// 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(); + } + } + } + diff --git a/muse2/muse/widgets/.cvsignore b/muse2/muse/widgets/.cvsignore new file mode 100644 index 00000000..89de206f --- /dev/null +++ b/muse2/muse/widgets/.cvsignore @@ -0,0 +1,23 @@ +appearancebase.h +audioconfbase.h +ccontrolbase.h +cliplisteditorbase.h +commentbase.h +editctrl7dialogbase.h +editmetadialogbase.h +editnotedialogbase.h +editsysexdialogbase.h +gatetimebase.h +gensetbase.h +itransformbase.h +metronomebase.h +midirawbase.h +midisync.h +mittransposebase.h +mixdowndialogbase.h +synthconfigbase.h +trackinfobase.h +transformbase.h +transposebase.h +velocitybase.h +fdialogbuttons.h diff --git a/muse2/muse/widgets/Makefile.am b/muse2/muse/widgets/Makefile.am new file mode 100644 index 00000000..9a551264 --- /dev/null +++ b/muse2/muse/widgets/Makefile.am @@ -0,0 +1,262 @@ +include $(top_srcdir)/common.am + +## musewidgetsplugin_so_CPPFLAGS = $(MUSECXXFLAGS) -fPIC -I.. -I$(top_srcdir)/synti \ +## -DQT_THREAD_SUPPORT -DQT_SHARED -DQT_PLUGIN +libwidgets_a_CPPFLAGS = $(MUSECXXFLAGS) -I.. -I$(top_srcdir)/synti + +if PCH +libwidgets_a_CPPFLAGS += -include $(top_srcdir)/all.h +## musewidgetsplugin_so_CPPFLAGS += -include $(top_srcdir)/all-pic.h +endif + +AM_CXXFLAGS +=-DSVNVERSION=\"$(shell svnversion)\" + + +noinst_LIBRARIES = libwidgets.a + +dist_libwidgets_a_SOURCES = \ + utils.cpp utils.h \ + citem.cpp citem.h \ + vscale.cpp vscale.h \ + drange.cpp drange.h \ + sclif.cpp sclif.h \ + dimap.cpp dimap.h \ + scldiv.cpp scldiv.h \ + mmath.cpp mmath.h \ + scldraw.cpp scldraw.h \ + action.h \ + \ + scrollscale.cpp scrollscale.h \ + view.cpp view.h \ + nentry.cpp nentry.h \ + mtscale.cpp mtscale.h \ + sigscale.cpp sigscale.h \ + hitscale.cpp hitscale.h \ + intlabel.cpp intlabel.h \ + doublelabel.cpp doublelabel.h \ + canvas.cpp canvas.h \ + noteinfo.cpp noteinfo.h \ + dentry.cpp dentry.h \ + siglabel.cpp siglabel.h \ + ttoolbar.cpp ttoolbar.h \ + ttoolbutton.cpp ttoolbutton.h \ + tb1.cpp tb1.h \ + lcombo.cpp lcombo.h \ + swidget.cpp swidget.h \ + tempolabel.cpp tempolabel.h \ + tools.cpp tools.h \ + fontsel.cpp fontsel.h \ + ctrlcombo.cpp ctrlcombo.h \ + sliderbase.cpp sliderbase.h \ + slider.cpp slider.h \ + midisyncimpl.cpp midisyncimpl.h \ + header.cpp header.h \ + knob.cpp knob.h \ + mlabel.cpp mlabel.h \ + genset.cpp genset.h \ + mixdowndialog.cpp mixdowndialog.h \ + spinboxFP.cpp spinboxFP.h \ + spinbox.cpp spinbox.h \ + comboQuant.cpp comboQuant.h \ + bigtime.cpp bigtime.h \ + comment.cpp comment.h \ + splitter.cpp splitter.h \ + gatetime.cpp gatetime.h \ + velocity.cpp velocity.h \ + metronome.cpp metronome.h \ + posedit.cpp posedit.h section.h \ + pitchedit.cpp pitchedit.h \ + pitchlabel.cpp pitchlabel.h \ + poslabel.cpp poslabel.h \ + filedialog.cpp filedialog.h \ + sigedit.cpp sigedit.h \ + shortcutconfig.cpp shortcutconfig.h \ + shortcutcapturedialog.cpp shortcutcapturedialog.h \ + combobox.cpp combobox.h \ + checkbox.cpp checkbox.h \ + aboutbox_impl.cpp aboutbox_impl.h \ + popupmenu.cpp popupmenu.h \ + listitem.h \ + menutitleitem.h \ + \ + midisync.ui \ + gensetbase.ui \ + mixdowndialogbase.ui \ + transposebase.ui \ + transformbase.ui \ + appearancebase.ui \ + itransformbase.ui \ + commentbase.ui \ + synthconfigbase.ui \ + gatetimebase.ui \ + velocitybase.ui \ + metronomebase.ui \ + mtrackinfobase.ui \ + wtrackinfobase.ui \ + editctrl7dialogbase.ui \ + editmetadialogbase.ui \ + editnotedialogbase.ui \ + editsysexdialogbase.ui \ + cliplisteditorbase.ui \ + mittransposebase.ui \ + fdialogbuttons.ui \ + shortcutconfigbase.ui \ + shortcutcapturedialogbase.ui \ + aboutbox.ui \ + songinfo.ui \ + didyouknow.ui \ + configmidifilebase.ui + +nodist_libwidgets_a_SOURCES = \ + moc_scrollscale.cpp \ + moc_view.cpp \ + moc_nentry.cpp \ + moc_mtscale.cpp \ + moc_sigscale.cpp \ + moc_hitscale.cpp \ + moc_intlabel.cpp \ + moc_doublelabel.cpp \ + moc_canvas.cpp \ + moc_noteinfo.cpp \ + moc_dentry.cpp \ + moc_siglabel.cpp \ + moc_ttoolbar.cpp \ + moc_ttoolbutton.cpp \ + moc_tb1.cpp \ + moc_lcombo.cpp \ + moc_swidget.cpp \ + moc_tempolabel.cpp \ + moc_tools.cpp \ + moc_popupmenu.cpp \ + moc_fontsel.cpp \ + moc_ctrlcombo.cpp \ + moc_sliderbase.cpp \ + moc_slider.cpp \ + moc_midisyncimpl.cpp \ + moc_header.cpp \ + moc_knob.cpp \ + moc_mlabel.cpp \ + moc_genset.cpp \ + moc_mixdowndialog.cpp \ + moc_spinboxFP.cpp \ + moc_spinbox.cpp \ + moc_comboQuant.cpp \ + moc_bigtime.cpp \ + moc_comment.cpp \ + moc_splitter.cpp \ + moc_gatetime.cpp \ + moc_velocity.cpp \ + moc_metronome.cpp \ + moc_posedit.cpp \ + moc_pitchedit.cpp \ + moc_pitchlabel.cpp \ + moc_poslabel.cpp \ + moc_filedialog.cpp \ + moc_sigedit.cpp \ + moc_shortcutconfig.cpp \ + moc_shortcutcapturedialog.cpp \ + moc_combobox.cpp \ + moc_aboutbox_impl.cpp\ + moc_aboutbox.cpp \ + moc_songinfo.cpp \ + moc_didyouknow.cpp \ + moc_checkbox.cpp \ + moc_vscale.cpp \ + moc_action.cpp + +# inst_PROGRAMS = musewidgetsplugin.so +# instdir = $(pkglibdir)/qtplugins/designer +# +### widgetsplugin_LTLIBRARIES = musewidgetsplugin.la +### widgetsplugindir = $(pkglibdir)/qtplugin + +#dist_musewidgetsplugin_so_SOURCES = \ +# musewidgetsplug.cpp \ +# sigedit.h \ +# $(top_srcdir)/muse/xml.cpp $(top_srcdir)/muse/tempo.cpp \ +# $(top_srcdir)/muse/sig.cpp $(top_srcdir)/muse/pos.cpp + +#nodist_musewidgetsplugin_so_SOURCES = \ +# moc_posedit.non-libtool.cpp moc_poslabel.non-libtool.cpp \ +# moc_sigedit.non-libtool.cpp \ +# moc_pitchedit.non-libtool.cpp moc_pitchlabel.non-libtool.cpp \ +# moc_tempolabel.non-libtool.cpp \ +# \ +# posedit.non-libtool.cpp poslabel.non-libtool.cpp \ +# pitchedit.non-libtool.cpp pitchlabel.non-libtool.cpp \ +# sigedit.non-libtool.cpp \ +# tempolabel.non-libtool.cpp \ +# slider.non-libtool.cpp moc_slider.non-libtool.cpp \ +# sliderbase.non-libtool.cpp moc_sliderbase.non-libtool.cpp \ +# sclif.non-libtool.cpp \ +# scldiv.non-libtool.cpp mmath.non-libtool.cpp scldraw.non-libtool.cpp \ +# dimap.non-libtool.cpp drange.non-libtool.cpp \ +# doublelabel.non-libtool.cpp moc_doublelabel.non-libtool.cpp \ +# dentry.non-libtool.cpp moc_dentry.non-libtool.cpp \ +# checkbox.non-libtool.cpp moc_checkbox.non-libtool.cpp \ +# combobox.non-libtool.cpp moc_combobox.non-libtool.cpp + +#musewidgetsplugin_so_LDFLAGS = --whole-archive -fno-exceptions -shared \ +# -Wl,-soname,libmusewidgetsplugin.so.1 $(QT_LIBS) -lasound + +#musewidgetsplug.o: musewidgetsplug.cpp +# $(CXXCOMPILE) -fPIC -DQT_THREAD_SUPPORT -DQT_SHARED -DQT_PLUGIN -c musewidgetsplug.cpp + +EXTRA_DIST = ctrlcombo.cw + +# This is for stuff that needs the widgets, but dosn't build them with +# libtool + +BUILT_SOURCES += \ + posedit.non-libtool.cpp \ + poslabel.non-libtool.cpp \ + pitchedit.non-libtool.cpp \ + pitchlabel.non-libtool.cpp \ + sigedit.non-libtool.cpp \ + tempolabel.non-libtool.cpp \ + slider.non-libtool.cpp \ + sliderbase.non-libtool.cpp \ + sclif.non-libtool.cpp \ + moc_posedit.non-libtool.cpp \ + moc_poslabel.non-libtool.cpp \ + moc_sigedit.non-libtool.cpp \ + moc_pitchedit.non-libtool.cpp \ + moc_pitchlabel.non-libtool.cpp \ + moc_tempolabel.non-libtool.cpp \ + moc_slider.non-libtool.cpp \ + moc_sliderbase.non-libtool.cpp \ + scldiv.non-libtool.cpp mmath.non-libtool.cpp scldraw.non-libtool.cpp \ + dimap.non-libtool.cpp drange.non-libtool.cpp \ + doublelabel.non-libtool.cpp moc_doublelabel.non-libtool.cpp \ + dentry.non-libtool.cpp moc_dentry.non-libtool.cpp \ + checkbox.non-libtool.cpp moc_checkbox.non-libtool.cpp \ + combobox.non-libtool.cpp moc_combobox.non-libtool.cpp + +%.non-libtool.cpp: %.cpp + $(LN_S) $*.cpp $*.non-libtool.cpp + +CLEANFILES = \ + posedit.non-libtool.cpp \ + poslabel.non-libtool.cpp \ + pitchedit.non-libtool.cpp \ + pitchlabel.non-libtool.cpp \ + sigedit.non-libtool.cpp \ + tempolabel.non-libtool.cpp \ + slider.non-libtool.cpp \ + sliderbase.non-libtool.cpp \ + sclif.non-libtool.cpp \ + moc_posedit.non-libtool.cpp \ + moc_poslabel.non-libtool.cpp \ + moc_sigedit.non-libtool.cpp \ + moc_pitchedit.non-libtool.cpp \ + moc_pitchlabel.non-libtool.cpp \ + moc_tempolabel.non-libtool.cpp \ + moc_slider.non-libtool.cpp \ + moc_sliderbase.non-libtool.cpp \ + scldiv.non-libtool.cpp mmath.non-libtool.cpp scldraw.non-libtool.cpp \ + dimap.non-libtool.cpp drange.non-libtool.cpp \ + doublelabel.non-libtool.cpp moc_doublelabel.non-libtool.cpp \ + dentry.non-libtool.cpp moc_dentry.non-libtool.cpp \ + checkbox.non-libtool.cpp moc_checkbox.non-libtool.cpp \ + combobox.non-libtool.cpp moc_combobox.non-libtool.cpp + diff --git a/muse2/muse/widgets/Makefile.in b/muse2/muse/widgets/Makefile.in new file mode 100644 index 00000000..01b5747c --- /dev/null +++ b/muse2/muse/widgets/Makefile.in @@ -0,0 +1,2647 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/common.am +@PCH_TRUE@am__append_1 = -include $(top_srcdir)/all.h +subdir = muse/widgets +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal-include.m4 \ + $(top_srcdir)/m4/alsa.m4 $(top_srcdir)/m4/docbook.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +LIBRARIES = $(noinst_LIBRARIES) +ARFLAGS = cru +libwidgets_a_AR = $(AR) $(ARFLAGS) +libwidgets_a_LIBADD = +dist_libwidgets_a_OBJECTS = libwidgets_a-utils.$(OBJEXT) \ + libwidgets_a-citem.$(OBJEXT) libwidgets_a-vscale.$(OBJEXT) \ + libwidgets_a-drange.$(OBJEXT) libwidgets_a-sclif.$(OBJEXT) \ + libwidgets_a-dimap.$(OBJEXT) libwidgets_a-scldiv.$(OBJEXT) \ + libwidgets_a-mmath.$(OBJEXT) libwidgets_a-scldraw.$(OBJEXT) \ + libwidgets_a-scrollscale.$(OBJEXT) libwidgets_a-view.$(OBJEXT) \ + libwidgets_a-nentry.$(OBJEXT) libwidgets_a-mtscale.$(OBJEXT) \ + libwidgets_a-sigscale.$(OBJEXT) \ + libwidgets_a-hitscale.$(OBJEXT) \ + libwidgets_a-intlabel.$(OBJEXT) \ + libwidgets_a-doublelabel.$(OBJEXT) \ + libwidgets_a-canvas.$(OBJEXT) libwidgets_a-noteinfo.$(OBJEXT) \ + libwidgets_a-dentry.$(OBJEXT) libwidgets_a-siglabel.$(OBJEXT) \ + libwidgets_a-ttoolbar.$(OBJEXT) \ + libwidgets_a-ttoolbutton.$(OBJEXT) libwidgets_a-tb1.$(OBJEXT) \ + libwidgets_a-lcombo.$(OBJEXT) libwidgets_a-swidget.$(OBJEXT) \ + libwidgets_a-tempolabel.$(OBJEXT) libwidgets_a-tools.$(OBJEXT) \ + libwidgets_a-fontsel.$(OBJEXT) \ + libwidgets_a-ctrlcombo.$(OBJEXT) \ + libwidgets_a-sliderbase.$(OBJEXT) \ + libwidgets_a-slider.$(OBJEXT) \ + libwidgets_a-midisyncimpl.$(OBJEXT) \ + libwidgets_a-header.$(OBJEXT) libwidgets_a-knob.$(OBJEXT) \ + libwidgets_a-mlabel.$(OBJEXT) libwidgets_a-genset.$(OBJEXT) \ + libwidgets_a-mixdowndialog.$(OBJEXT) \ + libwidgets_a-spinboxFP.$(OBJEXT) \ + libwidgets_a-spinbox.$(OBJEXT) \ + libwidgets_a-comboQuant.$(OBJEXT) \ + libwidgets_a-bigtime.$(OBJEXT) libwidgets_a-comment.$(OBJEXT) \ + libwidgets_a-splitter.$(OBJEXT) \ + libwidgets_a-gatetime.$(OBJEXT) \ + libwidgets_a-velocity.$(OBJEXT) \ + libwidgets_a-metronome.$(OBJEXT) \ + libwidgets_a-posedit.$(OBJEXT) \ + libwidgets_a-pitchedit.$(OBJEXT) \ + libwidgets_a-pitchlabel.$(OBJEXT) \ + libwidgets_a-poslabel.$(OBJEXT) \ + libwidgets_a-filedialog.$(OBJEXT) \ + libwidgets_a-sigedit.$(OBJEXT) \ + libwidgets_a-shortcutconfig.$(OBJEXT) \ + libwidgets_a-shortcutcapturedialog.$(OBJEXT) \ + libwidgets_a-combobox.$(OBJEXT) \ + libwidgets_a-checkbox.$(OBJEXT) \ + libwidgets_a-aboutbox_impl.$(OBJEXT) \ + libwidgets_a-popupmenu.$(OBJEXT) midisync.$(OBJEXT) \ + gensetbase.$(OBJEXT) mixdowndialogbase.$(OBJEXT) \ + transposebase.$(OBJEXT) transformbase.$(OBJEXT) \ + appearancebase.$(OBJEXT) itransformbase.$(OBJEXT) \ + commentbase.$(OBJEXT) synthconfigbase.$(OBJEXT) \ + gatetimebase.$(OBJEXT) velocitybase.$(OBJEXT) \ + metronomebase.$(OBJEXT) mtrackinfobase.$(OBJEXT) \ + wtrackinfobase.$(OBJEXT) editctrl7dialogbase.$(OBJEXT) \ + editmetadialogbase.$(OBJEXT) editnotedialogbase.$(OBJEXT) \ + editsysexdialogbase.$(OBJEXT) cliplisteditorbase.$(OBJEXT) \ + mittransposebase.$(OBJEXT) fdialogbuttons.$(OBJEXT) \ + shortcutconfigbase.$(OBJEXT) \ + shortcutcapturedialogbase.$(OBJEXT) aboutbox.$(OBJEXT) \ + songinfo.$(OBJEXT) didyouknow.$(OBJEXT) \ + configmidifilebase.$(OBJEXT) +nodist_libwidgets_a_OBJECTS = libwidgets_a-moc_scrollscale.$(OBJEXT) \ + libwidgets_a-moc_view.$(OBJEXT) \ + libwidgets_a-moc_nentry.$(OBJEXT) \ + libwidgets_a-moc_mtscale.$(OBJEXT) \ + libwidgets_a-moc_sigscale.$(OBJEXT) \ + libwidgets_a-moc_hitscale.$(OBJEXT) \ + libwidgets_a-moc_intlabel.$(OBJEXT) \ + libwidgets_a-moc_doublelabel.$(OBJEXT) \ + libwidgets_a-moc_canvas.$(OBJEXT) \ + libwidgets_a-moc_noteinfo.$(OBJEXT) \ + libwidgets_a-moc_dentry.$(OBJEXT) \ + libwidgets_a-moc_siglabel.$(OBJEXT) \ + libwidgets_a-moc_ttoolbar.$(OBJEXT) \ + libwidgets_a-moc_ttoolbutton.$(OBJEXT) \ + libwidgets_a-moc_tb1.$(OBJEXT) \ + libwidgets_a-moc_lcombo.$(OBJEXT) \ + libwidgets_a-moc_swidget.$(OBJEXT) \ + libwidgets_a-moc_tempolabel.$(OBJEXT) \ + libwidgets_a-moc_tools.$(OBJEXT) \ + libwidgets_a-moc_popupmenu.$(OBJEXT) \ + libwidgets_a-moc_fontsel.$(OBJEXT) \ + libwidgets_a-moc_ctrlcombo.$(OBJEXT) \ + libwidgets_a-moc_sliderbase.$(OBJEXT) \ + libwidgets_a-moc_slider.$(OBJEXT) \ + libwidgets_a-moc_midisyncimpl.$(OBJEXT) \ + libwidgets_a-moc_header.$(OBJEXT) \ + libwidgets_a-moc_knob.$(OBJEXT) \ + libwidgets_a-moc_mlabel.$(OBJEXT) \ + libwidgets_a-moc_genset.$(OBJEXT) \ + libwidgets_a-moc_mixdowndialog.$(OBJEXT) \ + libwidgets_a-moc_spinboxFP.$(OBJEXT) \ + libwidgets_a-moc_spinbox.$(OBJEXT) \ + libwidgets_a-moc_comboQuant.$(OBJEXT) \ + libwidgets_a-moc_bigtime.$(OBJEXT) \ + libwidgets_a-moc_comment.$(OBJEXT) \ + libwidgets_a-moc_splitter.$(OBJEXT) \ + libwidgets_a-moc_gatetime.$(OBJEXT) \ + libwidgets_a-moc_velocity.$(OBJEXT) \ + libwidgets_a-moc_metronome.$(OBJEXT) \ + libwidgets_a-moc_posedit.$(OBJEXT) \ + libwidgets_a-moc_pitchedit.$(OBJEXT) \ + libwidgets_a-moc_pitchlabel.$(OBJEXT) \ + libwidgets_a-moc_poslabel.$(OBJEXT) \ + libwidgets_a-moc_filedialog.$(OBJEXT) \ + libwidgets_a-moc_sigedit.$(OBJEXT) \ + libwidgets_a-moc_shortcutconfig.$(OBJEXT) \ + libwidgets_a-moc_shortcutcapturedialog.$(OBJEXT) \ + libwidgets_a-moc_combobox.$(OBJEXT) \ + libwidgets_a-moc_aboutbox_impl.$(OBJEXT) \ + libwidgets_a-moc_aboutbox.$(OBJEXT) \ + libwidgets_a-moc_songinfo.$(OBJEXT) \ + libwidgets_a-moc_didyouknow.$(OBJEXT) \ + libwidgets_a-moc_checkbox.$(OBJEXT) \ + libwidgets_a-moc_vscale.$(OBJEXT) \ + libwidgets_a-moc_action.$(OBJEXT) +libwidgets_a_OBJECTS = $(dist_libwidgets_a_OBJECTS) \ + $(nodist_libwidgets_a_OBJECTS) +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +CXXLD = $(CXX) +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(dist_libwidgets_a_SOURCES) $(nodist_libwidgets_a_SOURCES) +DIST_SOURCES = $(dist_libwidgets_a_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DOCBOOKSTYLE = @DOCBOOKSTYLE@ +DOCBOOKTARGETS = @DOCBOOKTARGETS@ +DOT = @DOT@ +DOTPATH = @DOTPATH@ +DOXYGEN = @DOXYGEN@ +DOXYGEN_TREEVIEW = @DOXYGEN_TREEVIEW@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FLUIDSYNTHDIRS = @FLUIDSYNTHDIRS@ +FST_CFLAGS = @FST_CFLAGS@ +FST_LIBS = @FST_LIBS@ +Fluidsynth_CFLAGS = @Fluidsynth_CFLAGS@ +Fluidsynth_LIBS = @Fluidsynth_LIBS@ +GIVERTCAP = @GIVERTCAP@ +GREP = @GREP@ +HAVEDOT = @HAVEDOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_LIBS = @JACK_LIBS@ +JADE = @JADE@ +LASH_CFLAGS = @LASH_CFLAGS@ +LASH_LIBS = @LASH_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LO_CFLAGS = @LO_CFLAGS@ +LO_LIBS = @LO_LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MUSECXXFLAGS = @MUSECXXFLAGS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NSGMLS = @NSGMLS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PCH = @PCH@ +PERL = @PERL@ +PKG_CONFIG = @PKG_CONFIG@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIB = @PYTHON_LIB@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QTDIR_BIN = @QTDIR_BIN@ +QTDIR_INC = @QTDIR_INC@ +QT_LIBS = @QT_LIBS@ +RANLIB = @RANLIB@ +SAMPLERATE_CFLAGS = @SAMPLERATE_CFLAGS@ +SAMPLERATE_LIBS = @SAMPLERATE_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ +SNDFILE_LIBS = @SNDFILE_LIBS@ +STRIP = @STRIP@ +SUIDBUILD = @SUIDBUILD@ +SUIDINSTALL = @SUIDINSTALL@ +USE_SSE = @USE_SSE@ +UUID_CFLAGS = @UUID_CFLAGS@ +UUID_LIBS = @UUID_LIBS@ +VERSION = @VERSION@ +XMKMF = @XMKMF@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +have_docbook = @have_docbook@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +synth_fluid = @synth_fluid@ +synth_fluidsynth = @synth_fluidsynth@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AM_CXXFLAGS = $(MUSECXXFLAGS) -I.. -I$(top_srcdir)/synti \ + -I$(top_srcdir)/muse/widgets -DQT_SHARED -DQT_THREAD_SUPPORT \ + -DQT_PLUGIN $(QTDIR_INC) -DQT3_SUPPORT -DSVNVERSION=\"$(shell \ + svnversion)\" +AM_CPPFLAGS = +MOC = $(QTDIR_BIN)/moc +#UIC = $(QTDIR_BIN)/uic3 +UIC = /usr/bin/uic3 +UIFILES = $(wildcard *.ui) +MOCFILES = $(shell for h in $(filter %.h,$(SOURCES)); do \ + if grep -q Q_OBJECT $$h; then \ + echo $$h | sed "s/\(.*\)\.h/moc_\1.cpp/"; \ + fi; \ + done) + + +# This is for stuff that needs the widgets, but dosn't build them with +# libtool +BUILT_SOURCES = $(MOCFILES) $(UIFILES:%.ui=%.h) \ + posedit.non-libtool.cpp poslabel.non-libtool.cpp \ + pitchedit.non-libtool.cpp pitchlabel.non-libtool.cpp \ + sigedit.non-libtool.cpp tempolabel.non-libtool.cpp \ + slider.non-libtool.cpp sliderbase.non-libtool.cpp \ + sclif.non-libtool.cpp moc_posedit.non-libtool.cpp \ + moc_poslabel.non-libtool.cpp moc_sigedit.non-libtool.cpp \ + moc_pitchedit.non-libtool.cpp moc_pitchlabel.non-libtool.cpp \ + moc_tempolabel.non-libtool.cpp moc_slider.non-libtool.cpp \ + moc_sliderbase.non-libtool.cpp scldiv.non-libtool.cpp \ + mmath.non-libtool.cpp scldraw.non-libtool.cpp \ + dimap.non-libtool.cpp drange.non-libtool.cpp \ + doublelabel.non-libtool.cpp moc_doublelabel.non-libtool.cpp \ + dentry.non-libtool.cpp moc_dentry.non-libtool.cpp \ + checkbox.non-libtool.cpp moc_checkbox.non-libtool.cpp \ + combobox.non-libtool.cpp moc_combobox.non-libtool.cpp +MOSTLYCLEANFILES = $(MOCFILES) $(UIFILES:%.ui=%.h) +SUFFIXES = .ui .h.gch +libwidgets_a_CPPFLAGS = $(MUSECXXFLAGS) -I.. -I$(top_srcdir)/synti \ + $(am__append_1) +noinst_LIBRARIES = libwidgets.a +dist_libwidgets_a_SOURCES = \ + utils.cpp utils.h \ + citem.cpp citem.h \ + vscale.cpp vscale.h \ + drange.cpp drange.h \ + sclif.cpp sclif.h \ + dimap.cpp dimap.h \ + scldiv.cpp scldiv.h \ + mmath.cpp mmath.h \ + scldraw.cpp scldraw.h \ + action.h \ + \ + scrollscale.cpp scrollscale.h \ + view.cpp view.h \ + nentry.cpp nentry.h \ + mtscale.cpp mtscale.h \ + sigscale.cpp sigscale.h \ + hitscale.cpp hitscale.h \ + intlabel.cpp intlabel.h \ + doublelabel.cpp doublelabel.h \ + canvas.cpp canvas.h \ + noteinfo.cpp noteinfo.h \ + dentry.cpp dentry.h \ + siglabel.cpp siglabel.h \ + ttoolbar.cpp ttoolbar.h \ + ttoolbutton.cpp ttoolbutton.h \ + tb1.cpp tb1.h \ + lcombo.cpp lcombo.h \ + swidget.cpp swidget.h \ + tempolabel.cpp tempolabel.h \ + tools.cpp tools.h \ + fontsel.cpp fontsel.h \ + ctrlcombo.cpp ctrlcombo.h \ + sliderbase.cpp sliderbase.h \ + slider.cpp slider.h \ + midisyncimpl.cpp midisyncimpl.h \ + header.cpp header.h \ + knob.cpp knob.h \ + mlabel.cpp mlabel.h \ + genset.cpp genset.h \ + mixdowndialog.cpp mixdowndialog.h \ + spinboxFP.cpp spinboxFP.h \ + spinbox.cpp spinbox.h \ + comboQuant.cpp comboQuant.h \ + bigtime.cpp bigtime.h \ + comment.cpp comment.h \ + splitter.cpp splitter.h \ + gatetime.cpp gatetime.h \ + velocity.cpp velocity.h \ + metronome.cpp metronome.h \ + posedit.cpp posedit.h section.h \ + pitchedit.cpp pitchedit.h \ + pitchlabel.cpp pitchlabel.h \ + poslabel.cpp poslabel.h \ + filedialog.cpp filedialog.h \ + sigedit.cpp sigedit.h \ + shortcutconfig.cpp shortcutconfig.h \ + shortcutcapturedialog.cpp shortcutcapturedialog.h \ + combobox.cpp combobox.h \ + checkbox.cpp checkbox.h \ + aboutbox_impl.cpp aboutbox_impl.h \ + popupmenu.cpp popupmenu.h \ + listitem.h \ + menutitleitem.h \ + \ + midisync.ui \ + gensetbase.ui \ + mixdowndialogbase.ui \ + transposebase.ui \ + transformbase.ui \ + appearancebase.ui \ + itransformbase.ui \ + commentbase.ui \ + synthconfigbase.ui \ + gatetimebase.ui \ + velocitybase.ui \ + metronomebase.ui \ + mtrackinfobase.ui \ + wtrackinfobase.ui \ + editctrl7dialogbase.ui \ + editmetadialogbase.ui \ + editnotedialogbase.ui \ + editsysexdialogbase.ui \ + cliplisteditorbase.ui \ + mittransposebase.ui \ + fdialogbuttons.ui \ + shortcutconfigbase.ui \ + shortcutcapturedialogbase.ui \ + aboutbox.ui \ + songinfo.ui \ + didyouknow.ui \ + configmidifilebase.ui + +nodist_libwidgets_a_SOURCES = \ + moc_scrollscale.cpp \ + moc_view.cpp \ + moc_nentry.cpp \ + moc_mtscale.cpp \ + moc_sigscale.cpp \ + moc_hitscale.cpp \ + moc_intlabel.cpp \ + moc_doublelabel.cpp \ + moc_canvas.cpp \ + moc_noteinfo.cpp \ + moc_dentry.cpp \ + moc_siglabel.cpp \ + moc_ttoolbar.cpp \ + moc_ttoolbutton.cpp \ + moc_tb1.cpp \ + moc_lcombo.cpp \ + moc_swidget.cpp \ + moc_tempolabel.cpp \ + moc_tools.cpp \ + moc_popupmenu.cpp \ + moc_fontsel.cpp \ + moc_ctrlcombo.cpp \ + moc_sliderbase.cpp \ + moc_slider.cpp \ + moc_midisyncimpl.cpp \ + moc_header.cpp \ + moc_knob.cpp \ + moc_mlabel.cpp \ + moc_genset.cpp \ + moc_mixdowndialog.cpp \ + moc_spinboxFP.cpp \ + moc_spinbox.cpp \ + moc_comboQuant.cpp \ + moc_bigtime.cpp \ + moc_comment.cpp \ + moc_splitter.cpp \ + moc_gatetime.cpp \ + moc_velocity.cpp \ + moc_metronome.cpp \ + moc_posedit.cpp \ + moc_pitchedit.cpp \ + moc_pitchlabel.cpp \ + moc_poslabel.cpp \ + moc_filedialog.cpp \ + moc_sigedit.cpp \ + moc_shortcutconfig.cpp \ + moc_shortcutcapturedialog.cpp \ + moc_combobox.cpp \ + moc_aboutbox_impl.cpp\ + moc_aboutbox.cpp \ + moc_songinfo.cpp \ + moc_didyouknow.cpp \ + moc_checkbox.cpp \ + moc_vscale.cpp \ + moc_action.cpp + + +# inst_PROGRAMS = musewidgetsplugin.so +# instdir = $(pkglibdir)/qtplugins/designer +# +### widgetsplugin_LTLIBRARIES = musewidgetsplugin.la +### widgetsplugindir = $(pkglibdir)/qtplugin + +#dist_musewidgetsplugin_so_SOURCES = \ +# musewidgetsplug.cpp \ +# sigedit.h \ +# $(top_srcdir)/muse/xml.cpp $(top_srcdir)/muse/tempo.cpp \ +# $(top_srcdir)/muse/sig.cpp $(top_srcdir)/muse/pos.cpp + +#nodist_musewidgetsplugin_so_SOURCES = \ +# moc_posedit.non-libtool.cpp moc_poslabel.non-libtool.cpp \ +# moc_sigedit.non-libtool.cpp \ +# moc_pitchedit.non-libtool.cpp moc_pitchlabel.non-libtool.cpp \ +# moc_tempolabel.non-libtool.cpp \ +# \ +# posedit.non-libtool.cpp poslabel.non-libtool.cpp \ +# pitchedit.non-libtool.cpp pitchlabel.non-libtool.cpp \ +# sigedit.non-libtool.cpp \ +# tempolabel.non-libtool.cpp \ +# slider.non-libtool.cpp moc_slider.non-libtool.cpp \ +# sliderbase.non-libtool.cpp moc_sliderbase.non-libtool.cpp \ +# sclif.non-libtool.cpp \ +# scldiv.non-libtool.cpp mmath.non-libtool.cpp scldraw.non-libtool.cpp \ +# dimap.non-libtool.cpp drange.non-libtool.cpp \ +# doublelabel.non-libtool.cpp moc_doublelabel.non-libtool.cpp \ +# dentry.non-libtool.cpp moc_dentry.non-libtool.cpp \ +# checkbox.non-libtool.cpp moc_checkbox.non-libtool.cpp \ +# combobox.non-libtool.cpp moc_combobox.non-libtool.cpp + +#musewidgetsplugin_so_LDFLAGS = --whole-archive -fno-exceptions -shared \ +# -Wl,-soname,libmusewidgetsplugin.so.1 $(QT_LIBS) -lasound + +#musewidgetsplug.o: musewidgetsplug.cpp +# $(CXXCOMPILE) -fPIC -DQT_THREAD_SUPPORT -DQT_SHARED -DQT_PLUGIN -c musewidgetsplug.cpp +EXTRA_DIST = ctrlcombo.cw +CLEANFILES = \ + posedit.non-libtool.cpp \ + poslabel.non-libtool.cpp \ + pitchedit.non-libtool.cpp \ + pitchlabel.non-libtool.cpp \ + sigedit.non-libtool.cpp \ + tempolabel.non-libtool.cpp \ + slider.non-libtool.cpp \ + sliderbase.non-libtool.cpp \ + sclif.non-libtool.cpp \ + moc_posedit.non-libtool.cpp \ + moc_poslabel.non-libtool.cpp \ + moc_sigedit.non-libtool.cpp \ + moc_pitchedit.non-libtool.cpp \ + moc_pitchlabel.non-libtool.cpp \ + moc_tempolabel.non-libtool.cpp \ + moc_slider.non-libtool.cpp \ + moc_sliderbase.non-libtool.cpp \ + scldiv.non-libtool.cpp mmath.non-libtool.cpp scldraw.non-libtool.cpp \ + dimap.non-libtool.cpp drange.non-libtool.cpp \ + doublelabel.non-libtool.cpp moc_doublelabel.non-libtool.cpp \ + dentry.non-libtool.cpp moc_dentry.non-libtool.cpp \ + checkbox.non-libtool.cpp moc_checkbox.non-libtool.cpp \ + combobox.non-libtool.cpp moc_combobox.non-libtool.cpp + +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: .ui .h.gch .cpp .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/common.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu muse/widgets/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu muse/widgets/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-noinstLIBRARIES: + -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) +libwidgets.a: $(libwidgets_a_OBJECTS) $(libwidgets_a_DEPENDENCIES) + -rm -f libwidgets.a + $(libwidgets_a_AR) libwidgets.a $(libwidgets_a_OBJECTS) $(libwidgets_a_LIBADD) + $(RANLIB) libwidgets.a + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-aboutbox_impl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-bigtime.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-canvas.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-checkbox.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-citem.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-comboQuant.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-combobox.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-comment.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-ctrlcombo.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-dentry.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-dimap.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-doublelabel.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-drange.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-filedialog.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-fontsel.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-gatetime.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-genset.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-header.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-hitscale.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-intlabel.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-knob.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-lcombo.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-metronome.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-midisyncimpl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-mixdowndialog.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-mlabel.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-mmath.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_aboutbox.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_aboutbox_impl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_action.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_bigtime.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_canvas.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_checkbox.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_comboQuant.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_combobox.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_comment.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_ctrlcombo.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_dentry.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_didyouknow.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_doublelabel.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_filedialog.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_fontsel.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_gatetime.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_genset.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_header.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_hitscale.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_intlabel.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_knob.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_lcombo.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_metronome.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_midisyncimpl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_mixdowndialog.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_mlabel.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_mtscale.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_nentry.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_noteinfo.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_pitchedit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_pitchlabel.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_popupmenu.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_posedit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_poslabel.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_scrollscale.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_shortcutcapturedialog.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_shortcutconfig.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_sigedit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_siglabel.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_sigscale.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_slider.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_sliderbase.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_songinfo.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_spinbox.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_spinboxFP.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_splitter.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_swidget.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_tb1.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_tempolabel.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_tools.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_ttoolbar.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_ttoolbutton.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_velocity.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_view.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_vscale.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-mtscale.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-nentry.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-noteinfo.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-pitchedit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-pitchlabel.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-popupmenu.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-posedit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-poslabel.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-scldiv.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-scldraw.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-sclif.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-scrollscale.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-shortcutcapturedialog.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-shortcutconfig.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-sigedit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-siglabel.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-sigscale.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-slider.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-sliderbase.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-spinbox.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-spinboxFP.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-splitter.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-swidget.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-tb1.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-tempolabel.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-tools.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-ttoolbar.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-ttoolbutton.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-utils.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-velocity.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-view.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-vscale.Po@am__quote@ + +.cpp.o: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< + +.cpp.obj: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.cpp.lo: +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< + +libwidgets_a-utils.o: utils.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-utils.o -MD -MP -MF $(DEPDIR)/libwidgets_a-utils.Tpo -c -o libwidgets_a-utils.o `test -f 'utils.cpp' || echo '$(srcdir)/'`utils.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-utils.Tpo $(DEPDIR)/libwidgets_a-utils.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='utils.cpp' object='libwidgets_a-utils.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-utils.o `test -f 'utils.cpp' || echo '$(srcdir)/'`utils.cpp + +libwidgets_a-utils.obj: utils.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-utils.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-utils.Tpo -c -o libwidgets_a-utils.obj `if test -f 'utils.cpp'; then $(CYGPATH_W) 'utils.cpp'; else $(CYGPATH_W) '$(srcdir)/utils.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-utils.Tpo $(DEPDIR)/libwidgets_a-utils.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='utils.cpp' object='libwidgets_a-utils.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-utils.obj `if test -f 'utils.cpp'; then $(CYGPATH_W) 'utils.cpp'; else $(CYGPATH_W) '$(srcdir)/utils.cpp'; fi` + +libwidgets_a-citem.o: citem.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-citem.o -MD -MP -MF $(DEPDIR)/libwidgets_a-citem.Tpo -c -o libwidgets_a-citem.o `test -f 'citem.cpp' || echo '$(srcdir)/'`citem.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-citem.Tpo $(DEPDIR)/libwidgets_a-citem.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='citem.cpp' object='libwidgets_a-citem.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-citem.o `test -f 'citem.cpp' || echo '$(srcdir)/'`citem.cpp + +libwidgets_a-citem.obj: citem.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-citem.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-citem.Tpo -c -o libwidgets_a-citem.obj `if test -f 'citem.cpp'; then $(CYGPATH_W) 'citem.cpp'; else $(CYGPATH_W) '$(srcdir)/citem.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-citem.Tpo $(DEPDIR)/libwidgets_a-citem.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='citem.cpp' object='libwidgets_a-citem.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-citem.obj `if test -f 'citem.cpp'; then $(CYGPATH_W) 'citem.cpp'; else $(CYGPATH_W) '$(srcdir)/citem.cpp'; fi` + +libwidgets_a-vscale.o: vscale.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-vscale.o -MD -MP -MF $(DEPDIR)/libwidgets_a-vscale.Tpo -c -o libwidgets_a-vscale.o `test -f 'vscale.cpp' || echo '$(srcdir)/'`vscale.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-vscale.Tpo $(DEPDIR)/libwidgets_a-vscale.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='vscale.cpp' object='libwidgets_a-vscale.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-vscale.o `test -f 'vscale.cpp' || echo '$(srcdir)/'`vscale.cpp + +libwidgets_a-vscale.obj: vscale.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-vscale.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-vscale.Tpo -c -o libwidgets_a-vscale.obj `if test -f 'vscale.cpp'; then $(CYGPATH_W) 'vscale.cpp'; else $(CYGPATH_W) '$(srcdir)/vscale.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-vscale.Tpo $(DEPDIR)/libwidgets_a-vscale.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='vscale.cpp' object='libwidgets_a-vscale.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-vscale.obj `if test -f 'vscale.cpp'; then $(CYGPATH_W) 'vscale.cpp'; else $(CYGPATH_W) '$(srcdir)/vscale.cpp'; fi` + +libwidgets_a-drange.o: drange.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-drange.o -MD -MP -MF $(DEPDIR)/libwidgets_a-drange.Tpo -c -o libwidgets_a-drange.o `test -f 'drange.cpp' || echo '$(srcdir)/'`drange.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-drange.Tpo $(DEPDIR)/libwidgets_a-drange.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='drange.cpp' object='libwidgets_a-drange.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-drange.o `test -f 'drange.cpp' || echo '$(srcdir)/'`drange.cpp + +libwidgets_a-drange.obj: drange.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-drange.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-drange.Tpo -c -o libwidgets_a-drange.obj `if test -f 'drange.cpp'; then $(CYGPATH_W) 'drange.cpp'; else $(CYGPATH_W) '$(srcdir)/drange.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-drange.Tpo $(DEPDIR)/libwidgets_a-drange.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='drange.cpp' object='libwidgets_a-drange.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-drange.obj `if test -f 'drange.cpp'; then $(CYGPATH_W) 'drange.cpp'; else $(CYGPATH_W) '$(srcdir)/drange.cpp'; fi` + +libwidgets_a-sclif.o: sclif.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-sclif.o -MD -MP -MF $(DEPDIR)/libwidgets_a-sclif.Tpo -c -o libwidgets_a-sclif.o `test -f 'sclif.cpp' || echo '$(srcdir)/'`sclif.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-sclif.Tpo $(DEPDIR)/libwidgets_a-sclif.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='sclif.cpp' object='libwidgets_a-sclif.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-sclif.o `test -f 'sclif.cpp' || echo '$(srcdir)/'`sclif.cpp + +libwidgets_a-sclif.obj: sclif.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-sclif.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-sclif.Tpo -c -o libwidgets_a-sclif.obj `if test -f 'sclif.cpp'; then $(CYGPATH_W) 'sclif.cpp'; else $(CYGPATH_W) '$(srcdir)/sclif.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-sclif.Tpo $(DEPDIR)/libwidgets_a-sclif.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='sclif.cpp' object='libwidgets_a-sclif.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-sclif.obj `if test -f 'sclif.cpp'; then $(CYGPATH_W) 'sclif.cpp'; else $(CYGPATH_W) '$(srcdir)/sclif.cpp'; fi` + +libwidgets_a-dimap.o: dimap.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-dimap.o -MD -MP -MF $(DEPDIR)/libwidgets_a-dimap.Tpo -c -o libwidgets_a-dimap.o `test -f 'dimap.cpp' || echo '$(srcdir)/'`dimap.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-dimap.Tpo $(DEPDIR)/libwidgets_a-dimap.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='dimap.cpp' object='libwidgets_a-dimap.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-dimap.o `test -f 'dimap.cpp' || echo '$(srcdir)/'`dimap.cpp + +libwidgets_a-dimap.obj: dimap.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-dimap.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-dimap.Tpo -c -o libwidgets_a-dimap.obj `if test -f 'dimap.cpp'; then $(CYGPATH_W) 'dimap.cpp'; else $(CYGPATH_W) '$(srcdir)/dimap.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-dimap.Tpo $(DEPDIR)/libwidgets_a-dimap.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='dimap.cpp' object='libwidgets_a-dimap.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-dimap.obj `if test -f 'dimap.cpp'; then $(CYGPATH_W) 'dimap.cpp'; else $(CYGPATH_W) '$(srcdir)/dimap.cpp'; fi` + +libwidgets_a-scldiv.o: scldiv.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-scldiv.o -MD -MP -MF $(DEPDIR)/libwidgets_a-scldiv.Tpo -c -o libwidgets_a-scldiv.o `test -f 'scldiv.cpp' || echo '$(srcdir)/'`scldiv.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-scldiv.Tpo $(DEPDIR)/libwidgets_a-scldiv.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='scldiv.cpp' object='libwidgets_a-scldiv.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-scldiv.o `test -f 'scldiv.cpp' || echo '$(srcdir)/'`scldiv.cpp + +libwidgets_a-scldiv.obj: scldiv.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-scldiv.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-scldiv.Tpo -c -o libwidgets_a-scldiv.obj `if test -f 'scldiv.cpp'; then $(CYGPATH_W) 'scldiv.cpp'; else $(CYGPATH_W) '$(srcdir)/scldiv.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-scldiv.Tpo $(DEPDIR)/libwidgets_a-scldiv.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='scldiv.cpp' object='libwidgets_a-scldiv.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-scldiv.obj `if test -f 'scldiv.cpp'; then $(CYGPATH_W) 'scldiv.cpp'; else $(CYGPATH_W) '$(srcdir)/scldiv.cpp'; fi` + +libwidgets_a-mmath.o: mmath.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-mmath.o -MD -MP -MF $(DEPDIR)/libwidgets_a-mmath.Tpo -c -o libwidgets_a-mmath.o `test -f 'mmath.cpp' || echo '$(srcdir)/'`mmath.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-mmath.Tpo $(DEPDIR)/libwidgets_a-mmath.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='mmath.cpp' object='libwidgets_a-mmath.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-mmath.o `test -f 'mmath.cpp' || echo '$(srcdir)/'`mmath.cpp + +libwidgets_a-mmath.obj: mmath.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-mmath.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-mmath.Tpo -c -o libwidgets_a-mmath.obj `if test -f 'mmath.cpp'; then $(CYGPATH_W) 'mmath.cpp'; else $(CYGPATH_W) '$(srcdir)/mmath.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-mmath.Tpo $(DEPDIR)/libwidgets_a-mmath.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='mmath.cpp' object='libwidgets_a-mmath.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-mmath.obj `if test -f 'mmath.cpp'; then $(CYGPATH_W) 'mmath.cpp'; else $(CYGPATH_W) '$(srcdir)/mmath.cpp'; fi` + +libwidgets_a-scldraw.o: scldraw.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-scldraw.o -MD -MP -MF $(DEPDIR)/libwidgets_a-scldraw.Tpo -c -o libwidgets_a-scldraw.o `test -f 'scldraw.cpp' || echo '$(srcdir)/'`scldraw.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-scldraw.Tpo $(DEPDIR)/libwidgets_a-scldraw.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='scldraw.cpp' object='libwidgets_a-scldraw.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-scldraw.o `test -f 'scldraw.cpp' || echo '$(srcdir)/'`scldraw.cpp + +libwidgets_a-scldraw.obj: scldraw.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-scldraw.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-scldraw.Tpo -c -o libwidgets_a-scldraw.obj `if test -f 'scldraw.cpp'; then $(CYGPATH_W) 'scldraw.cpp'; else $(CYGPATH_W) '$(srcdir)/scldraw.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-scldraw.Tpo $(DEPDIR)/libwidgets_a-scldraw.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='scldraw.cpp' object='libwidgets_a-scldraw.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-scldraw.obj `if test -f 'scldraw.cpp'; then $(CYGPATH_W) 'scldraw.cpp'; else $(CYGPATH_W) '$(srcdir)/scldraw.cpp'; fi` + +libwidgets_a-scrollscale.o: scrollscale.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-scrollscale.o -MD -MP -MF $(DEPDIR)/libwidgets_a-scrollscale.Tpo -c -o libwidgets_a-scrollscale.o `test -f 'scrollscale.cpp' || echo '$(srcdir)/'`scrollscale.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-scrollscale.Tpo $(DEPDIR)/libwidgets_a-scrollscale.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='scrollscale.cpp' object='libwidgets_a-scrollscale.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-scrollscale.o `test -f 'scrollscale.cpp' || echo '$(srcdir)/'`scrollscale.cpp + +libwidgets_a-scrollscale.obj: scrollscale.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-scrollscale.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-scrollscale.Tpo -c -o libwidgets_a-scrollscale.obj `if test -f 'scrollscale.cpp'; then $(CYGPATH_W) 'scrollscale.cpp'; else $(CYGPATH_W) '$(srcdir)/scrollscale.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-scrollscale.Tpo $(DEPDIR)/libwidgets_a-scrollscale.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='scrollscale.cpp' object='libwidgets_a-scrollscale.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-scrollscale.obj `if test -f 'scrollscale.cpp'; then $(CYGPATH_W) 'scrollscale.cpp'; else $(CYGPATH_W) '$(srcdir)/scrollscale.cpp'; fi` + +libwidgets_a-view.o: view.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-view.o -MD -MP -MF $(DEPDIR)/libwidgets_a-view.Tpo -c -o libwidgets_a-view.o `test -f 'view.cpp' || echo '$(srcdir)/'`view.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-view.Tpo $(DEPDIR)/libwidgets_a-view.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='view.cpp' object='libwidgets_a-view.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-view.o `test -f 'view.cpp' || echo '$(srcdir)/'`view.cpp + +libwidgets_a-view.obj: view.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-view.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-view.Tpo -c -o libwidgets_a-view.obj `if test -f 'view.cpp'; then $(CYGPATH_W) 'view.cpp'; else $(CYGPATH_W) '$(srcdir)/view.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-view.Tpo $(DEPDIR)/libwidgets_a-view.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='view.cpp' object='libwidgets_a-view.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-view.obj `if test -f 'view.cpp'; then $(CYGPATH_W) 'view.cpp'; else $(CYGPATH_W) '$(srcdir)/view.cpp'; fi` + +libwidgets_a-nentry.o: nentry.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-nentry.o -MD -MP -MF $(DEPDIR)/libwidgets_a-nentry.Tpo -c -o libwidgets_a-nentry.o `test -f 'nentry.cpp' || echo '$(srcdir)/'`nentry.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-nentry.Tpo $(DEPDIR)/libwidgets_a-nentry.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='nentry.cpp' object='libwidgets_a-nentry.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-nentry.o `test -f 'nentry.cpp' || echo '$(srcdir)/'`nentry.cpp + +libwidgets_a-nentry.obj: nentry.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-nentry.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-nentry.Tpo -c -o libwidgets_a-nentry.obj `if test -f 'nentry.cpp'; then $(CYGPATH_W) 'nentry.cpp'; else $(CYGPATH_W) '$(srcdir)/nentry.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-nentry.Tpo $(DEPDIR)/libwidgets_a-nentry.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='nentry.cpp' object='libwidgets_a-nentry.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-nentry.obj `if test -f 'nentry.cpp'; then $(CYGPATH_W) 'nentry.cpp'; else $(CYGPATH_W) '$(srcdir)/nentry.cpp'; fi` + +libwidgets_a-mtscale.o: mtscale.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-mtscale.o -MD -MP -MF $(DEPDIR)/libwidgets_a-mtscale.Tpo -c -o libwidgets_a-mtscale.o `test -f 'mtscale.cpp' || echo '$(srcdir)/'`mtscale.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-mtscale.Tpo $(DEPDIR)/libwidgets_a-mtscale.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='mtscale.cpp' object='libwidgets_a-mtscale.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-mtscale.o `test -f 'mtscale.cpp' || echo '$(srcdir)/'`mtscale.cpp + +libwidgets_a-mtscale.obj: mtscale.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-mtscale.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-mtscale.Tpo -c -o libwidgets_a-mtscale.obj `if test -f 'mtscale.cpp'; then $(CYGPATH_W) 'mtscale.cpp'; else $(CYGPATH_W) '$(srcdir)/mtscale.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-mtscale.Tpo $(DEPDIR)/libwidgets_a-mtscale.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='mtscale.cpp' object='libwidgets_a-mtscale.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-mtscale.obj `if test -f 'mtscale.cpp'; then $(CYGPATH_W) 'mtscale.cpp'; else $(CYGPATH_W) '$(srcdir)/mtscale.cpp'; fi` + +libwidgets_a-sigscale.o: sigscale.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-sigscale.o -MD -MP -MF $(DEPDIR)/libwidgets_a-sigscale.Tpo -c -o libwidgets_a-sigscale.o `test -f 'sigscale.cpp' || echo '$(srcdir)/'`sigscale.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-sigscale.Tpo $(DEPDIR)/libwidgets_a-sigscale.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='sigscale.cpp' object='libwidgets_a-sigscale.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-sigscale.o `test -f 'sigscale.cpp' || echo '$(srcdir)/'`sigscale.cpp + +libwidgets_a-sigscale.obj: sigscale.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-sigscale.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-sigscale.Tpo -c -o libwidgets_a-sigscale.obj `if test -f 'sigscale.cpp'; then $(CYGPATH_W) 'sigscale.cpp'; else $(CYGPATH_W) '$(srcdir)/sigscale.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-sigscale.Tpo $(DEPDIR)/libwidgets_a-sigscale.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='sigscale.cpp' object='libwidgets_a-sigscale.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-sigscale.obj `if test -f 'sigscale.cpp'; then $(CYGPATH_W) 'sigscale.cpp'; else $(CYGPATH_W) '$(srcdir)/sigscale.cpp'; fi` + +libwidgets_a-hitscale.o: hitscale.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-hitscale.o -MD -MP -MF $(DEPDIR)/libwidgets_a-hitscale.Tpo -c -o libwidgets_a-hitscale.o `test -f 'hitscale.cpp' || echo '$(srcdir)/'`hitscale.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-hitscale.Tpo $(DEPDIR)/libwidgets_a-hitscale.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='hitscale.cpp' object='libwidgets_a-hitscale.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-hitscale.o `test -f 'hitscale.cpp' || echo '$(srcdir)/'`hitscale.cpp + +libwidgets_a-hitscale.obj: hitscale.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-hitscale.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-hitscale.Tpo -c -o libwidgets_a-hitscale.obj `if test -f 'hitscale.cpp'; then $(CYGPATH_W) 'hitscale.cpp'; else $(CYGPATH_W) '$(srcdir)/hitscale.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-hitscale.Tpo $(DEPDIR)/libwidgets_a-hitscale.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='hitscale.cpp' object='libwidgets_a-hitscale.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-hitscale.obj `if test -f 'hitscale.cpp'; then $(CYGPATH_W) 'hitscale.cpp'; else $(CYGPATH_W) '$(srcdir)/hitscale.cpp'; fi` + +libwidgets_a-intlabel.o: intlabel.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-intlabel.o -MD -MP -MF $(DEPDIR)/libwidgets_a-intlabel.Tpo -c -o libwidgets_a-intlabel.o `test -f 'intlabel.cpp' || echo '$(srcdir)/'`intlabel.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-intlabel.Tpo $(DEPDIR)/libwidgets_a-intlabel.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='intlabel.cpp' object='libwidgets_a-intlabel.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-intlabel.o `test -f 'intlabel.cpp' || echo '$(srcdir)/'`intlabel.cpp + +libwidgets_a-intlabel.obj: intlabel.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-intlabel.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-intlabel.Tpo -c -o libwidgets_a-intlabel.obj `if test -f 'intlabel.cpp'; then $(CYGPATH_W) 'intlabel.cpp'; else $(CYGPATH_W) '$(srcdir)/intlabel.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-intlabel.Tpo $(DEPDIR)/libwidgets_a-intlabel.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='intlabel.cpp' object='libwidgets_a-intlabel.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-intlabel.obj `if test -f 'intlabel.cpp'; then $(CYGPATH_W) 'intlabel.cpp'; else $(CYGPATH_W) '$(srcdir)/intlabel.cpp'; fi` + +libwidgets_a-doublelabel.o: doublelabel.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-doublelabel.o -MD -MP -MF $(DEPDIR)/libwidgets_a-doublelabel.Tpo -c -o libwidgets_a-doublelabel.o `test -f 'doublelabel.cpp' || echo '$(srcdir)/'`doublelabel.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-doublelabel.Tpo $(DEPDIR)/libwidgets_a-doublelabel.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='doublelabel.cpp' object='libwidgets_a-doublelabel.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-doublelabel.o `test -f 'doublelabel.cpp' || echo '$(srcdir)/'`doublelabel.cpp + +libwidgets_a-doublelabel.obj: doublelabel.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-doublelabel.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-doublelabel.Tpo -c -o libwidgets_a-doublelabel.obj `if test -f 'doublelabel.cpp'; then $(CYGPATH_W) 'doublelabel.cpp'; else $(CYGPATH_W) '$(srcdir)/doublelabel.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-doublelabel.Tpo $(DEPDIR)/libwidgets_a-doublelabel.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='doublelabel.cpp' object='libwidgets_a-doublelabel.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-doublelabel.obj `if test -f 'doublelabel.cpp'; then $(CYGPATH_W) 'doublelabel.cpp'; else $(CYGPATH_W) '$(srcdir)/doublelabel.cpp'; fi` + +libwidgets_a-canvas.o: canvas.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-canvas.o -MD -MP -MF $(DEPDIR)/libwidgets_a-canvas.Tpo -c -o libwidgets_a-canvas.o `test -f 'canvas.cpp' || echo '$(srcdir)/'`canvas.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-canvas.Tpo $(DEPDIR)/libwidgets_a-canvas.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='canvas.cpp' object='libwidgets_a-canvas.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-canvas.o `test -f 'canvas.cpp' || echo '$(srcdir)/'`canvas.cpp + +libwidgets_a-canvas.obj: canvas.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-canvas.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-canvas.Tpo -c -o libwidgets_a-canvas.obj `if test -f 'canvas.cpp'; then $(CYGPATH_W) 'canvas.cpp'; else $(CYGPATH_W) '$(srcdir)/canvas.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-canvas.Tpo $(DEPDIR)/libwidgets_a-canvas.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='canvas.cpp' object='libwidgets_a-canvas.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-canvas.obj `if test -f 'canvas.cpp'; then $(CYGPATH_W) 'canvas.cpp'; else $(CYGPATH_W) '$(srcdir)/canvas.cpp'; fi` + +libwidgets_a-noteinfo.o: noteinfo.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-noteinfo.o -MD -MP -MF $(DEPDIR)/libwidgets_a-noteinfo.Tpo -c -o libwidgets_a-noteinfo.o `test -f 'noteinfo.cpp' || echo '$(srcdir)/'`noteinfo.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-noteinfo.Tpo $(DEPDIR)/libwidgets_a-noteinfo.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='noteinfo.cpp' object='libwidgets_a-noteinfo.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-noteinfo.o `test -f 'noteinfo.cpp' || echo '$(srcdir)/'`noteinfo.cpp + +libwidgets_a-noteinfo.obj: noteinfo.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-noteinfo.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-noteinfo.Tpo -c -o libwidgets_a-noteinfo.obj `if test -f 'noteinfo.cpp'; then $(CYGPATH_W) 'noteinfo.cpp'; else $(CYGPATH_W) '$(srcdir)/noteinfo.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-noteinfo.Tpo $(DEPDIR)/libwidgets_a-noteinfo.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='noteinfo.cpp' object='libwidgets_a-noteinfo.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-noteinfo.obj `if test -f 'noteinfo.cpp'; then $(CYGPATH_W) 'noteinfo.cpp'; else $(CYGPATH_W) '$(srcdir)/noteinfo.cpp'; fi` + +libwidgets_a-dentry.o: dentry.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-dentry.o -MD -MP -MF $(DEPDIR)/libwidgets_a-dentry.Tpo -c -o libwidgets_a-dentry.o `test -f 'dentry.cpp' || echo '$(srcdir)/'`dentry.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-dentry.Tpo $(DEPDIR)/libwidgets_a-dentry.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='dentry.cpp' object='libwidgets_a-dentry.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-dentry.o `test -f 'dentry.cpp' || echo '$(srcdir)/'`dentry.cpp + +libwidgets_a-dentry.obj: dentry.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-dentry.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-dentry.Tpo -c -o libwidgets_a-dentry.obj `if test -f 'dentry.cpp'; then $(CYGPATH_W) 'dentry.cpp'; else $(CYGPATH_W) '$(srcdir)/dentry.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-dentry.Tpo $(DEPDIR)/libwidgets_a-dentry.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='dentry.cpp' object='libwidgets_a-dentry.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-dentry.obj `if test -f 'dentry.cpp'; then $(CYGPATH_W) 'dentry.cpp'; else $(CYGPATH_W) '$(srcdir)/dentry.cpp'; fi` + +libwidgets_a-siglabel.o: siglabel.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-siglabel.o -MD -MP -MF $(DEPDIR)/libwidgets_a-siglabel.Tpo -c -o libwidgets_a-siglabel.o `test -f 'siglabel.cpp' || echo '$(srcdir)/'`siglabel.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-siglabel.Tpo $(DEPDIR)/libwidgets_a-siglabel.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='siglabel.cpp' object='libwidgets_a-siglabel.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-siglabel.o `test -f 'siglabel.cpp' || echo '$(srcdir)/'`siglabel.cpp + +libwidgets_a-siglabel.obj: siglabel.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-siglabel.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-siglabel.Tpo -c -o libwidgets_a-siglabel.obj `if test -f 'siglabel.cpp'; then $(CYGPATH_W) 'siglabel.cpp'; else $(CYGPATH_W) '$(srcdir)/siglabel.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-siglabel.Tpo $(DEPDIR)/libwidgets_a-siglabel.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='siglabel.cpp' object='libwidgets_a-siglabel.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-siglabel.obj `if test -f 'siglabel.cpp'; then $(CYGPATH_W) 'siglabel.cpp'; else $(CYGPATH_W) '$(srcdir)/siglabel.cpp'; fi` + +libwidgets_a-ttoolbar.o: ttoolbar.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-ttoolbar.o -MD -MP -MF $(DEPDIR)/libwidgets_a-ttoolbar.Tpo -c -o libwidgets_a-ttoolbar.o `test -f 'ttoolbar.cpp' || echo '$(srcdir)/'`ttoolbar.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-ttoolbar.Tpo $(DEPDIR)/libwidgets_a-ttoolbar.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='ttoolbar.cpp' object='libwidgets_a-ttoolbar.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-ttoolbar.o `test -f 'ttoolbar.cpp' || echo '$(srcdir)/'`ttoolbar.cpp + +libwidgets_a-ttoolbar.obj: ttoolbar.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-ttoolbar.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-ttoolbar.Tpo -c -o libwidgets_a-ttoolbar.obj `if test -f 'ttoolbar.cpp'; then $(CYGPATH_W) 'ttoolbar.cpp'; else $(CYGPATH_W) '$(srcdir)/ttoolbar.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-ttoolbar.Tpo $(DEPDIR)/libwidgets_a-ttoolbar.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='ttoolbar.cpp' object='libwidgets_a-ttoolbar.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-ttoolbar.obj `if test -f 'ttoolbar.cpp'; then $(CYGPATH_W) 'ttoolbar.cpp'; else $(CYGPATH_W) '$(srcdir)/ttoolbar.cpp'; fi` + +libwidgets_a-ttoolbutton.o: ttoolbutton.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-ttoolbutton.o -MD -MP -MF $(DEPDIR)/libwidgets_a-ttoolbutton.Tpo -c -o libwidgets_a-ttoolbutton.o `test -f 'ttoolbutton.cpp' || echo '$(srcdir)/'`ttoolbutton.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-ttoolbutton.Tpo $(DEPDIR)/libwidgets_a-ttoolbutton.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='ttoolbutton.cpp' object='libwidgets_a-ttoolbutton.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-ttoolbutton.o `test -f 'ttoolbutton.cpp' || echo '$(srcdir)/'`ttoolbutton.cpp + +libwidgets_a-ttoolbutton.obj: ttoolbutton.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-ttoolbutton.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-ttoolbutton.Tpo -c -o libwidgets_a-ttoolbutton.obj `if test -f 'ttoolbutton.cpp'; then $(CYGPATH_W) 'ttoolbutton.cpp'; else $(CYGPATH_W) '$(srcdir)/ttoolbutton.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-ttoolbutton.Tpo $(DEPDIR)/libwidgets_a-ttoolbutton.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='ttoolbutton.cpp' object='libwidgets_a-ttoolbutton.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-ttoolbutton.obj `if test -f 'ttoolbutton.cpp'; then $(CYGPATH_W) 'ttoolbutton.cpp'; else $(CYGPATH_W) '$(srcdir)/ttoolbutton.cpp'; fi` + +libwidgets_a-tb1.o: tb1.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-tb1.o -MD -MP -MF $(DEPDIR)/libwidgets_a-tb1.Tpo -c -o libwidgets_a-tb1.o `test -f 'tb1.cpp' || echo '$(srcdir)/'`tb1.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-tb1.Tpo $(DEPDIR)/libwidgets_a-tb1.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='tb1.cpp' object='libwidgets_a-tb1.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-tb1.o `test -f 'tb1.cpp' || echo '$(srcdir)/'`tb1.cpp + +libwidgets_a-tb1.obj: tb1.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-tb1.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-tb1.Tpo -c -o libwidgets_a-tb1.obj `if test -f 'tb1.cpp'; then $(CYGPATH_W) 'tb1.cpp'; else $(CYGPATH_W) '$(srcdir)/tb1.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-tb1.Tpo $(DEPDIR)/libwidgets_a-tb1.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='tb1.cpp' object='libwidgets_a-tb1.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-tb1.obj `if test -f 'tb1.cpp'; then $(CYGPATH_W) 'tb1.cpp'; else $(CYGPATH_W) '$(srcdir)/tb1.cpp'; fi` + +libwidgets_a-lcombo.o: lcombo.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-lcombo.o -MD -MP -MF $(DEPDIR)/libwidgets_a-lcombo.Tpo -c -o libwidgets_a-lcombo.o `test -f 'lcombo.cpp' || echo '$(srcdir)/'`lcombo.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-lcombo.Tpo $(DEPDIR)/libwidgets_a-lcombo.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='lcombo.cpp' object='libwidgets_a-lcombo.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-lcombo.o `test -f 'lcombo.cpp' || echo '$(srcdir)/'`lcombo.cpp + +libwidgets_a-lcombo.obj: lcombo.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-lcombo.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-lcombo.Tpo -c -o libwidgets_a-lcombo.obj `if test -f 'lcombo.cpp'; then $(CYGPATH_W) 'lcombo.cpp'; else $(CYGPATH_W) '$(srcdir)/lcombo.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-lcombo.Tpo $(DEPDIR)/libwidgets_a-lcombo.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='lcombo.cpp' object='libwidgets_a-lcombo.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-lcombo.obj `if test -f 'lcombo.cpp'; then $(CYGPATH_W) 'lcombo.cpp'; else $(CYGPATH_W) '$(srcdir)/lcombo.cpp'; fi` + +libwidgets_a-swidget.o: swidget.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-swidget.o -MD -MP -MF $(DEPDIR)/libwidgets_a-swidget.Tpo -c -o libwidgets_a-swidget.o `test -f 'swidget.cpp' || echo '$(srcdir)/'`swidget.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-swidget.Tpo $(DEPDIR)/libwidgets_a-swidget.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='swidget.cpp' object='libwidgets_a-swidget.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-swidget.o `test -f 'swidget.cpp' || echo '$(srcdir)/'`swidget.cpp + +libwidgets_a-swidget.obj: swidget.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-swidget.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-swidget.Tpo -c -o libwidgets_a-swidget.obj `if test -f 'swidget.cpp'; then $(CYGPATH_W) 'swidget.cpp'; else $(CYGPATH_W) '$(srcdir)/swidget.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-swidget.Tpo $(DEPDIR)/libwidgets_a-swidget.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='swidget.cpp' object='libwidgets_a-swidget.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-swidget.obj `if test -f 'swidget.cpp'; then $(CYGPATH_W) 'swidget.cpp'; else $(CYGPATH_W) '$(srcdir)/swidget.cpp'; fi` + +libwidgets_a-tempolabel.o: tempolabel.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-tempolabel.o -MD -MP -MF $(DEPDIR)/libwidgets_a-tempolabel.Tpo -c -o libwidgets_a-tempolabel.o `test -f 'tempolabel.cpp' || echo '$(srcdir)/'`tempolabel.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-tempolabel.Tpo $(DEPDIR)/libwidgets_a-tempolabel.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='tempolabel.cpp' object='libwidgets_a-tempolabel.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-tempolabel.o `test -f 'tempolabel.cpp' || echo '$(srcdir)/'`tempolabel.cpp + +libwidgets_a-tempolabel.obj: tempolabel.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-tempolabel.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-tempolabel.Tpo -c -o libwidgets_a-tempolabel.obj `if test -f 'tempolabel.cpp'; then $(CYGPATH_W) 'tempolabel.cpp'; else $(CYGPATH_W) '$(srcdir)/tempolabel.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-tempolabel.Tpo $(DEPDIR)/libwidgets_a-tempolabel.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='tempolabel.cpp' object='libwidgets_a-tempolabel.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-tempolabel.obj `if test -f 'tempolabel.cpp'; then $(CYGPATH_W) 'tempolabel.cpp'; else $(CYGPATH_W) '$(srcdir)/tempolabel.cpp'; fi` + +libwidgets_a-tools.o: tools.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-tools.o -MD -MP -MF $(DEPDIR)/libwidgets_a-tools.Tpo -c -o libwidgets_a-tools.o `test -f 'tools.cpp' || echo '$(srcdir)/'`tools.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-tools.Tpo $(DEPDIR)/libwidgets_a-tools.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='tools.cpp' object='libwidgets_a-tools.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-tools.o `test -f 'tools.cpp' || echo '$(srcdir)/'`tools.cpp + +libwidgets_a-tools.obj: tools.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-tools.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-tools.Tpo -c -o libwidgets_a-tools.obj `if test -f 'tools.cpp'; then $(CYGPATH_W) 'tools.cpp'; else $(CYGPATH_W) '$(srcdir)/tools.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-tools.Tpo $(DEPDIR)/libwidgets_a-tools.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='tools.cpp' object='libwidgets_a-tools.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-tools.obj `if test -f 'tools.cpp'; then $(CYGPATH_W) 'tools.cpp'; else $(CYGPATH_W) '$(srcdir)/tools.cpp'; fi` + +libwidgets_a-fontsel.o: fontsel.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-fontsel.o -MD -MP -MF $(DEPDIR)/libwidgets_a-fontsel.Tpo -c -o libwidgets_a-fontsel.o `test -f 'fontsel.cpp' || echo '$(srcdir)/'`fontsel.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-fontsel.Tpo $(DEPDIR)/libwidgets_a-fontsel.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='fontsel.cpp' object='libwidgets_a-fontsel.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-fontsel.o `test -f 'fontsel.cpp' || echo '$(srcdir)/'`fontsel.cpp + +libwidgets_a-fontsel.obj: fontsel.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-fontsel.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-fontsel.Tpo -c -o libwidgets_a-fontsel.obj `if test -f 'fontsel.cpp'; then $(CYGPATH_W) 'fontsel.cpp'; else $(CYGPATH_W) '$(srcdir)/fontsel.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-fontsel.Tpo $(DEPDIR)/libwidgets_a-fontsel.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='fontsel.cpp' object='libwidgets_a-fontsel.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-fontsel.obj `if test -f 'fontsel.cpp'; then $(CYGPATH_W) 'fontsel.cpp'; else $(CYGPATH_W) '$(srcdir)/fontsel.cpp'; fi` + +libwidgets_a-ctrlcombo.o: ctrlcombo.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-ctrlcombo.o -MD -MP -MF $(DEPDIR)/libwidgets_a-ctrlcombo.Tpo -c -o libwidgets_a-ctrlcombo.o `test -f 'ctrlcombo.cpp' || echo '$(srcdir)/'`ctrlcombo.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-ctrlcombo.Tpo $(DEPDIR)/libwidgets_a-ctrlcombo.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='ctrlcombo.cpp' object='libwidgets_a-ctrlcombo.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-ctrlcombo.o `test -f 'ctrlcombo.cpp' || echo '$(srcdir)/'`ctrlcombo.cpp + +libwidgets_a-ctrlcombo.obj: ctrlcombo.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-ctrlcombo.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-ctrlcombo.Tpo -c -o libwidgets_a-ctrlcombo.obj `if test -f 'ctrlcombo.cpp'; then $(CYGPATH_W) 'ctrlcombo.cpp'; else $(CYGPATH_W) '$(srcdir)/ctrlcombo.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-ctrlcombo.Tpo $(DEPDIR)/libwidgets_a-ctrlcombo.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='ctrlcombo.cpp' object='libwidgets_a-ctrlcombo.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-ctrlcombo.obj `if test -f 'ctrlcombo.cpp'; then $(CYGPATH_W) 'ctrlcombo.cpp'; else $(CYGPATH_W) '$(srcdir)/ctrlcombo.cpp'; fi` + +libwidgets_a-sliderbase.o: sliderbase.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-sliderbase.o -MD -MP -MF $(DEPDIR)/libwidgets_a-sliderbase.Tpo -c -o libwidgets_a-sliderbase.o `test -f 'sliderbase.cpp' || echo '$(srcdir)/'`sliderbase.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-sliderbase.Tpo $(DEPDIR)/libwidgets_a-sliderbase.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='sliderbase.cpp' object='libwidgets_a-sliderbase.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-sliderbase.o `test -f 'sliderbase.cpp' || echo '$(srcdir)/'`sliderbase.cpp + +libwidgets_a-sliderbase.obj: sliderbase.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-sliderbase.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-sliderbase.Tpo -c -o libwidgets_a-sliderbase.obj `if test -f 'sliderbase.cpp'; then $(CYGPATH_W) 'sliderbase.cpp'; else $(CYGPATH_W) '$(srcdir)/sliderbase.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-sliderbase.Tpo $(DEPDIR)/libwidgets_a-sliderbase.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='sliderbase.cpp' object='libwidgets_a-sliderbase.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-sliderbase.obj `if test -f 'sliderbase.cpp'; then $(CYGPATH_W) 'sliderbase.cpp'; else $(CYGPATH_W) '$(srcdir)/sliderbase.cpp'; fi` + +libwidgets_a-slider.o: slider.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-slider.o -MD -MP -MF $(DEPDIR)/libwidgets_a-slider.Tpo -c -o libwidgets_a-slider.o `test -f 'slider.cpp' || echo '$(srcdir)/'`slider.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-slider.Tpo $(DEPDIR)/libwidgets_a-slider.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='slider.cpp' object='libwidgets_a-slider.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-slider.o `test -f 'slider.cpp' || echo '$(srcdir)/'`slider.cpp + +libwidgets_a-slider.obj: slider.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-slider.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-slider.Tpo -c -o libwidgets_a-slider.obj `if test -f 'slider.cpp'; then $(CYGPATH_W) 'slider.cpp'; else $(CYGPATH_W) '$(srcdir)/slider.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-slider.Tpo $(DEPDIR)/libwidgets_a-slider.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='slider.cpp' object='libwidgets_a-slider.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-slider.obj `if test -f 'slider.cpp'; then $(CYGPATH_W) 'slider.cpp'; else $(CYGPATH_W) '$(srcdir)/slider.cpp'; fi` + +libwidgets_a-midisyncimpl.o: midisyncimpl.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-midisyncimpl.o -MD -MP -MF $(DEPDIR)/libwidgets_a-midisyncimpl.Tpo -c -o libwidgets_a-midisyncimpl.o `test -f 'midisyncimpl.cpp' || echo '$(srcdir)/'`midisyncimpl.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-midisyncimpl.Tpo $(DEPDIR)/libwidgets_a-midisyncimpl.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='midisyncimpl.cpp' object='libwidgets_a-midisyncimpl.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-midisyncimpl.o `test -f 'midisyncimpl.cpp' || echo '$(srcdir)/'`midisyncimpl.cpp + +libwidgets_a-midisyncimpl.obj: midisyncimpl.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-midisyncimpl.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-midisyncimpl.Tpo -c -o libwidgets_a-midisyncimpl.obj `if test -f 'midisyncimpl.cpp'; then $(CYGPATH_W) 'midisyncimpl.cpp'; else $(CYGPATH_W) '$(srcdir)/midisyncimpl.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-midisyncimpl.Tpo $(DEPDIR)/libwidgets_a-midisyncimpl.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='midisyncimpl.cpp' object='libwidgets_a-midisyncimpl.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-midisyncimpl.obj `if test -f 'midisyncimpl.cpp'; then $(CYGPATH_W) 'midisyncimpl.cpp'; else $(CYGPATH_W) '$(srcdir)/midisyncimpl.cpp'; fi` + +libwidgets_a-header.o: header.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-header.o -MD -MP -MF $(DEPDIR)/libwidgets_a-header.Tpo -c -o libwidgets_a-header.o `test -f 'header.cpp' || echo '$(srcdir)/'`header.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-header.Tpo $(DEPDIR)/libwidgets_a-header.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='header.cpp' object='libwidgets_a-header.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-header.o `test -f 'header.cpp' || echo '$(srcdir)/'`header.cpp + +libwidgets_a-header.obj: header.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-header.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-header.Tpo -c -o libwidgets_a-header.obj `if test -f 'header.cpp'; then $(CYGPATH_W) 'header.cpp'; else $(CYGPATH_W) '$(srcdir)/header.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-header.Tpo $(DEPDIR)/libwidgets_a-header.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='header.cpp' object='libwidgets_a-header.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-header.obj `if test -f 'header.cpp'; then $(CYGPATH_W) 'header.cpp'; else $(CYGPATH_W) '$(srcdir)/header.cpp'; fi` + +libwidgets_a-knob.o: knob.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-knob.o -MD -MP -MF $(DEPDIR)/libwidgets_a-knob.Tpo -c -o libwidgets_a-knob.o `test -f 'knob.cpp' || echo '$(srcdir)/'`knob.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-knob.Tpo $(DEPDIR)/libwidgets_a-knob.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='knob.cpp' object='libwidgets_a-knob.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-knob.o `test -f 'knob.cpp' || echo '$(srcdir)/'`knob.cpp + +libwidgets_a-knob.obj: knob.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-knob.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-knob.Tpo -c -o libwidgets_a-knob.obj `if test -f 'knob.cpp'; then $(CYGPATH_W) 'knob.cpp'; else $(CYGPATH_W) '$(srcdir)/knob.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-knob.Tpo $(DEPDIR)/libwidgets_a-knob.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='knob.cpp' object='libwidgets_a-knob.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-knob.obj `if test -f 'knob.cpp'; then $(CYGPATH_W) 'knob.cpp'; else $(CYGPATH_W) '$(srcdir)/knob.cpp'; fi` + +libwidgets_a-mlabel.o: mlabel.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-mlabel.o -MD -MP -MF $(DEPDIR)/libwidgets_a-mlabel.Tpo -c -o libwidgets_a-mlabel.o `test -f 'mlabel.cpp' || echo '$(srcdir)/'`mlabel.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-mlabel.Tpo $(DEPDIR)/libwidgets_a-mlabel.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='mlabel.cpp' object='libwidgets_a-mlabel.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-mlabel.o `test -f 'mlabel.cpp' || echo '$(srcdir)/'`mlabel.cpp + +libwidgets_a-mlabel.obj: mlabel.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-mlabel.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-mlabel.Tpo -c -o libwidgets_a-mlabel.obj `if test -f 'mlabel.cpp'; then $(CYGPATH_W) 'mlabel.cpp'; else $(CYGPATH_W) '$(srcdir)/mlabel.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-mlabel.Tpo $(DEPDIR)/libwidgets_a-mlabel.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='mlabel.cpp' object='libwidgets_a-mlabel.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-mlabel.obj `if test -f 'mlabel.cpp'; then $(CYGPATH_W) 'mlabel.cpp'; else $(CYGPATH_W) '$(srcdir)/mlabel.cpp'; fi` + +libwidgets_a-genset.o: genset.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-genset.o -MD -MP -MF $(DEPDIR)/libwidgets_a-genset.Tpo -c -o libwidgets_a-genset.o `test -f 'genset.cpp' || echo '$(srcdir)/'`genset.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-genset.Tpo $(DEPDIR)/libwidgets_a-genset.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='genset.cpp' object='libwidgets_a-genset.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-genset.o `test -f 'genset.cpp' || echo '$(srcdir)/'`genset.cpp + +libwidgets_a-genset.obj: genset.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-genset.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-genset.Tpo -c -o libwidgets_a-genset.obj `if test -f 'genset.cpp'; then $(CYGPATH_W) 'genset.cpp'; else $(CYGPATH_W) '$(srcdir)/genset.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-genset.Tpo $(DEPDIR)/libwidgets_a-genset.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='genset.cpp' object='libwidgets_a-genset.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-genset.obj `if test -f 'genset.cpp'; then $(CYGPATH_W) 'genset.cpp'; else $(CYGPATH_W) '$(srcdir)/genset.cpp'; fi` + +libwidgets_a-mixdowndialog.o: mixdowndialog.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-mixdowndialog.o -MD -MP -MF $(DEPDIR)/libwidgets_a-mixdowndialog.Tpo -c -o libwidgets_a-mixdowndialog.o `test -f 'mixdowndialog.cpp' || echo '$(srcdir)/'`mixdowndialog.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-mixdowndialog.Tpo $(DEPDIR)/libwidgets_a-mixdowndialog.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='mixdowndialog.cpp' object='libwidgets_a-mixdowndialog.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-mixdowndialog.o `test -f 'mixdowndialog.cpp' || echo '$(srcdir)/'`mixdowndialog.cpp + +libwidgets_a-mixdowndialog.obj: mixdowndialog.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-mixdowndialog.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-mixdowndialog.Tpo -c -o libwidgets_a-mixdowndialog.obj `if test -f 'mixdowndialog.cpp'; then $(CYGPATH_W) 'mixdowndialog.cpp'; else $(CYGPATH_W) '$(srcdir)/mixdowndialog.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-mixdowndialog.Tpo $(DEPDIR)/libwidgets_a-mixdowndialog.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='mixdowndialog.cpp' object='libwidgets_a-mixdowndialog.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-mixdowndialog.obj `if test -f 'mixdowndialog.cpp'; then $(CYGPATH_W) 'mixdowndialog.cpp'; else $(CYGPATH_W) '$(srcdir)/mixdowndialog.cpp'; fi` + +libwidgets_a-spinboxFP.o: spinboxFP.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-spinboxFP.o -MD -MP -MF $(DEPDIR)/libwidgets_a-spinboxFP.Tpo -c -o libwidgets_a-spinboxFP.o `test -f 'spinboxFP.cpp' || echo '$(srcdir)/'`spinboxFP.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-spinboxFP.Tpo $(DEPDIR)/libwidgets_a-spinboxFP.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='spinboxFP.cpp' object='libwidgets_a-spinboxFP.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-spinboxFP.o `test -f 'spinboxFP.cpp' || echo '$(srcdir)/'`spinboxFP.cpp + +libwidgets_a-spinboxFP.obj: spinboxFP.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-spinboxFP.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-spinboxFP.Tpo -c -o libwidgets_a-spinboxFP.obj `if test -f 'spinboxFP.cpp'; then $(CYGPATH_W) 'spinboxFP.cpp'; else $(CYGPATH_W) '$(srcdir)/spinboxFP.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-spinboxFP.Tpo $(DEPDIR)/libwidgets_a-spinboxFP.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='spinboxFP.cpp' object='libwidgets_a-spinboxFP.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-spinboxFP.obj `if test -f 'spinboxFP.cpp'; then $(CYGPATH_W) 'spinboxFP.cpp'; else $(CYGPATH_W) '$(srcdir)/spinboxFP.cpp'; fi` + +libwidgets_a-spinbox.o: spinbox.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-spinbox.o -MD -MP -MF $(DEPDIR)/libwidgets_a-spinbox.Tpo -c -o libwidgets_a-spinbox.o `test -f 'spinbox.cpp' || echo '$(srcdir)/'`spinbox.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-spinbox.Tpo $(DEPDIR)/libwidgets_a-spinbox.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='spinbox.cpp' object='libwidgets_a-spinbox.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-spinbox.o `test -f 'spinbox.cpp' || echo '$(srcdir)/'`spinbox.cpp + +libwidgets_a-spinbox.obj: spinbox.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-spinbox.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-spinbox.Tpo -c -o libwidgets_a-spinbox.obj `if test -f 'spinbox.cpp'; then $(CYGPATH_W) 'spinbox.cpp'; else $(CYGPATH_W) '$(srcdir)/spinbox.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-spinbox.Tpo $(DEPDIR)/libwidgets_a-spinbox.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='spinbox.cpp' object='libwidgets_a-spinbox.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-spinbox.obj `if test -f 'spinbox.cpp'; then $(CYGPATH_W) 'spinbox.cpp'; else $(CYGPATH_W) '$(srcdir)/spinbox.cpp'; fi` + +libwidgets_a-comboQuant.o: comboQuant.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-comboQuant.o -MD -MP -MF $(DEPDIR)/libwidgets_a-comboQuant.Tpo -c -o libwidgets_a-comboQuant.o `test -f 'comboQuant.cpp' || echo '$(srcdir)/'`comboQuant.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-comboQuant.Tpo $(DEPDIR)/libwidgets_a-comboQuant.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='comboQuant.cpp' object='libwidgets_a-comboQuant.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-comboQuant.o `test -f 'comboQuant.cpp' || echo '$(srcdir)/'`comboQuant.cpp + +libwidgets_a-comboQuant.obj: comboQuant.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-comboQuant.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-comboQuant.Tpo -c -o libwidgets_a-comboQuant.obj `if test -f 'comboQuant.cpp'; then $(CYGPATH_W) 'comboQuant.cpp'; else $(CYGPATH_W) '$(srcdir)/comboQuant.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-comboQuant.Tpo $(DEPDIR)/libwidgets_a-comboQuant.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='comboQuant.cpp' object='libwidgets_a-comboQuant.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-comboQuant.obj `if test -f 'comboQuant.cpp'; then $(CYGPATH_W) 'comboQuant.cpp'; else $(CYGPATH_W) '$(srcdir)/comboQuant.cpp'; fi` + +libwidgets_a-bigtime.o: bigtime.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-bigtime.o -MD -MP -MF $(DEPDIR)/libwidgets_a-bigtime.Tpo -c -o libwidgets_a-bigtime.o `test -f 'bigtime.cpp' || echo '$(srcdir)/'`bigtime.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-bigtime.Tpo $(DEPDIR)/libwidgets_a-bigtime.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='bigtime.cpp' object='libwidgets_a-bigtime.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-bigtime.o `test -f 'bigtime.cpp' || echo '$(srcdir)/'`bigtime.cpp + +libwidgets_a-bigtime.obj: bigtime.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-bigtime.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-bigtime.Tpo -c -o libwidgets_a-bigtime.obj `if test -f 'bigtime.cpp'; then $(CYGPATH_W) 'bigtime.cpp'; else $(CYGPATH_W) '$(srcdir)/bigtime.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-bigtime.Tpo $(DEPDIR)/libwidgets_a-bigtime.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='bigtime.cpp' object='libwidgets_a-bigtime.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-bigtime.obj `if test -f 'bigtime.cpp'; then $(CYGPATH_W) 'bigtime.cpp'; else $(CYGPATH_W) '$(srcdir)/bigtime.cpp'; fi` + +libwidgets_a-comment.o: comment.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-comment.o -MD -MP -MF $(DEPDIR)/libwidgets_a-comment.Tpo -c -o libwidgets_a-comment.o `test -f 'comment.cpp' || echo '$(srcdir)/'`comment.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-comment.Tpo $(DEPDIR)/libwidgets_a-comment.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='comment.cpp' object='libwidgets_a-comment.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-comment.o `test -f 'comment.cpp' || echo '$(srcdir)/'`comment.cpp + +libwidgets_a-comment.obj: comment.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-comment.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-comment.Tpo -c -o libwidgets_a-comment.obj `if test -f 'comment.cpp'; then $(CYGPATH_W) 'comment.cpp'; else $(CYGPATH_W) '$(srcdir)/comment.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-comment.Tpo $(DEPDIR)/libwidgets_a-comment.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='comment.cpp' object='libwidgets_a-comment.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-comment.obj `if test -f 'comment.cpp'; then $(CYGPATH_W) 'comment.cpp'; else $(CYGPATH_W) '$(srcdir)/comment.cpp'; fi` + +libwidgets_a-splitter.o: splitter.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-splitter.o -MD -MP -MF $(DEPDIR)/libwidgets_a-splitter.Tpo -c -o libwidgets_a-splitter.o `test -f 'splitter.cpp' || echo '$(srcdir)/'`splitter.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-splitter.Tpo $(DEPDIR)/libwidgets_a-splitter.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='splitter.cpp' object='libwidgets_a-splitter.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-splitter.o `test -f 'splitter.cpp' || echo '$(srcdir)/'`splitter.cpp + +libwidgets_a-splitter.obj: splitter.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-splitter.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-splitter.Tpo -c -o libwidgets_a-splitter.obj `if test -f 'splitter.cpp'; then $(CYGPATH_W) 'splitter.cpp'; else $(CYGPATH_W) '$(srcdir)/splitter.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-splitter.Tpo $(DEPDIR)/libwidgets_a-splitter.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='splitter.cpp' object='libwidgets_a-splitter.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-splitter.obj `if test -f 'splitter.cpp'; then $(CYGPATH_W) 'splitter.cpp'; else $(CYGPATH_W) '$(srcdir)/splitter.cpp'; fi` + +libwidgets_a-gatetime.o: gatetime.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-gatetime.o -MD -MP -MF $(DEPDIR)/libwidgets_a-gatetime.Tpo -c -o libwidgets_a-gatetime.o `test -f 'gatetime.cpp' || echo '$(srcdir)/'`gatetime.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-gatetime.Tpo $(DEPDIR)/libwidgets_a-gatetime.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='gatetime.cpp' object='libwidgets_a-gatetime.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-gatetime.o `test -f 'gatetime.cpp' || echo '$(srcdir)/'`gatetime.cpp + +libwidgets_a-gatetime.obj: gatetime.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-gatetime.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-gatetime.Tpo -c -o libwidgets_a-gatetime.obj `if test -f 'gatetime.cpp'; then $(CYGPATH_W) 'gatetime.cpp'; else $(CYGPATH_W) '$(srcdir)/gatetime.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-gatetime.Tpo $(DEPDIR)/libwidgets_a-gatetime.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='gatetime.cpp' object='libwidgets_a-gatetime.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-gatetime.obj `if test -f 'gatetime.cpp'; then $(CYGPATH_W) 'gatetime.cpp'; else $(CYGPATH_W) '$(srcdir)/gatetime.cpp'; fi` + +libwidgets_a-velocity.o: velocity.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-velocity.o -MD -MP -MF $(DEPDIR)/libwidgets_a-velocity.Tpo -c -o libwidgets_a-velocity.o `test -f 'velocity.cpp' || echo '$(srcdir)/'`velocity.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-velocity.Tpo $(DEPDIR)/libwidgets_a-velocity.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='velocity.cpp' object='libwidgets_a-velocity.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-velocity.o `test -f 'velocity.cpp' || echo '$(srcdir)/'`velocity.cpp + +libwidgets_a-velocity.obj: velocity.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-velocity.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-velocity.Tpo -c -o libwidgets_a-velocity.obj `if test -f 'velocity.cpp'; then $(CYGPATH_W) 'velocity.cpp'; else $(CYGPATH_W) '$(srcdir)/velocity.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-velocity.Tpo $(DEPDIR)/libwidgets_a-velocity.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='velocity.cpp' object='libwidgets_a-velocity.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-velocity.obj `if test -f 'velocity.cpp'; then $(CYGPATH_W) 'velocity.cpp'; else $(CYGPATH_W) '$(srcdir)/velocity.cpp'; fi` + +libwidgets_a-metronome.o: metronome.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-metronome.o -MD -MP -MF $(DEPDIR)/libwidgets_a-metronome.Tpo -c -o libwidgets_a-metronome.o `test -f 'metronome.cpp' || echo '$(srcdir)/'`metronome.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-metronome.Tpo $(DEPDIR)/libwidgets_a-metronome.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='metronome.cpp' object='libwidgets_a-metronome.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-metronome.o `test -f 'metronome.cpp' || echo '$(srcdir)/'`metronome.cpp + +libwidgets_a-metronome.obj: metronome.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-metronome.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-metronome.Tpo -c -o libwidgets_a-metronome.obj `if test -f 'metronome.cpp'; then $(CYGPATH_W) 'metronome.cpp'; else $(CYGPATH_W) '$(srcdir)/metronome.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-metronome.Tpo $(DEPDIR)/libwidgets_a-metronome.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='metronome.cpp' object='libwidgets_a-metronome.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-metronome.obj `if test -f 'metronome.cpp'; then $(CYGPATH_W) 'metronome.cpp'; else $(CYGPATH_W) '$(srcdir)/metronome.cpp'; fi` + +libwidgets_a-posedit.o: posedit.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-posedit.o -MD -MP -MF $(DEPDIR)/libwidgets_a-posedit.Tpo -c -o libwidgets_a-posedit.o `test -f 'posedit.cpp' || echo '$(srcdir)/'`posedit.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-posedit.Tpo $(DEPDIR)/libwidgets_a-posedit.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='posedit.cpp' object='libwidgets_a-posedit.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-posedit.o `test -f 'posedit.cpp' || echo '$(srcdir)/'`posedit.cpp + +libwidgets_a-posedit.obj: posedit.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-posedit.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-posedit.Tpo -c -o libwidgets_a-posedit.obj `if test -f 'posedit.cpp'; then $(CYGPATH_W) 'posedit.cpp'; else $(CYGPATH_W) '$(srcdir)/posedit.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-posedit.Tpo $(DEPDIR)/libwidgets_a-posedit.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='posedit.cpp' object='libwidgets_a-posedit.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-posedit.obj `if test -f 'posedit.cpp'; then $(CYGPATH_W) 'posedit.cpp'; else $(CYGPATH_W) '$(srcdir)/posedit.cpp'; fi` + +libwidgets_a-pitchedit.o: pitchedit.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-pitchedit.o -MD -MP -MF $(DEPDIR)/libwidgets_a-pitchedit.Tpo -c -o libwidgets_a-pitchedit.o `test -f 'pitchedit.cpp' || echo '$(srcdir)/'`pitchedit.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-pitchedit.Tpo $(DEPDIR)/libwidgets_a-pitchedit.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='pitchedit.cpp' object='libwidgets_a-pitchedit.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-pitchedit.o `test -f 'pitchedit.cpp' || echo '$(srcdir)/'`pitchedit.cpp + +libwidgets_a-pitchedit.obj: pitchedit.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-pitchedit.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-pitchedit.Tpo -c -o libwidgets_a-pitchedit.obj `if test -f 'pitchedit.cpp'; then $(CYGPATH_W) 'pitchedit.cpp'; else $(CYGPATH_W) '$(srcdir)/pitchedit.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-pitchedit.Tpo $(DEPDIR)/libwidgets_a-pitchedit.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='pitchedit.cpp' object='libwidgets_a-pitchedit.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-pitchedit.obj `if test -f 'pitchedit.cpp'; then $(CYGPATH_W) 'pitchedit.cpp'; else $(CYGPATH_W) '$(srcdir)/pitchedit.cpp'; fi` + +libwidgets_a-pitchlabel.o: pitchlabel.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-pitchlabel.o -MD -MP -MF $(DEPDIR)/libwidgets_a-pitchlabel.Tpo -c -o libwidgets_a-pitchlabel.o `test -f 'pitchlabel.cpp' || echo '$(srcdir)/'`pitchlabel.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-pitchlabel.Tpo $(DEPDIR)/libwidgets_a-pitchlabel.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='pitchlabel.cpp' object='libwidgets_a-pitchlabel.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-pitchlabel.o `test -f 'pitchlabel.cpp' || echo '$(srcdir)/'`pitchlabel.cpp + +libwidgets_a-pitchlabel.obj: pitchlabel.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-pitchlabel.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-pitchlabel.Tpo -c -o libwidgets_a-pitchlabel.obj `if test -f 'pitchlabel.cpp'; then $(CYGPATH_W) 'pitchlabel.cpp'; else $(CYGPATH_W) '$(srcdir)/pitchlabel.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-pitchlabel.Tpo $(DEPDIR)/libwidgets_a-pitchlabel.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='pitchlabel.cpp' object='libwidgets_a-pitchlabel.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-pitchlabel.obj `if test -f 'pitchlabel.cpp'; then $(CYGPATH_W) 'pitchlabel.cpp'; else $(CYGPATH_W) '$(srcdir)/pitchlabel.cpp'; fi` + +libwidgets_a-poslabel.o: poslabel.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-poslabel.o -MD -MP -MF $(DEPDIR)/libwidgets_a-poslabel.Tpo -c -o libwidgets_a-poslabel.o `test -f 'poslabel.cpp' || echo '$(srcdir)/'`poslabel.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-poslabel.Tpo $(DEPDIR)/libwidgets_a-poslabel.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='poslabel.cpp' object='libwidgets_a-poslabel.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-poslabel.o `test -f 'poslabel.cpp' || echo '$(srcdir)/'`poslabel.cpp + +libwidgets_a-poslabel.obj: poslabel.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-poslabel.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-poslabel.Tpo -c -o libwidgets_a-poslabel.obj `if test -f 'poslabel.cpp'; then $(CYGPATH_W) 'poslabel.cpp'; else $(CYGPATH_W) '$(srcdir)/poslabel.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-poslabel.Tpo $(DEPDIR)/libwidgets_a-poslabel.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='poslabel.cpp' object='libwidgets_a-poslabel.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-poslabel.obj `if test -f 'poslabel.cpp'; then $(CYGPATH_W) 'poslabel.cpp'; else $(CYGPATH_W) '$(srcdir)/poslabel.cpp'; fi` + +libwidgets_a-filedialog.o: filedialog.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-filedialog.o -MD -MP -MF $(DEPDIR)/libwidgets_a-filedialog.Tpo -c -o libwidgets_a-filedialog.o `test -f 'filedialog.cpp' || echo '$(srcdir)/'`filedialog.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-filedialog.Tpo $(DEPDIR)/libwidgets_a-filedialog.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='filedialog.cpp' object='libwidgets_a-filedialog.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-filedialog.o `test -f 'filedialog.cpp' || echo '$(srcdir)/'`filedialog.cpp + +libwidgets_a-filedialog.obj: filedialog.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-filedialog.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-filedialog.Tpo -c -o libwidgets_a-filedialog.obj `if test -f 'filedialog.cpp'; then $(CYGPATH_W) 'filedialog.cpp'; else $(CYGPATH_W) '$(srcdir)/filedialog.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-filedialog.Tpo $(DEPDIR)/libwidgets_a-filedialog.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='filedialog.cpp' object='libwidgets_a-filedialog.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-filedialog.obj `if test -f 'filedialog.cpp'; then $(CYGPATH_W) 'filedialog.cpp'; else $(CYGPATH_W) '$(srcdir)/filedialog.cpp'; fi` + +libwidgets_a-sigedit.o: sigedit.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-sigedit.o -MD -MP -MF $(DEPDIR)/libwidgets_a-sigedit.Tpo -c -o libwidgets_a-sigedit.o `test -f 'sigedit.cpp' || echo '$(srcdir)/'`sigedit.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-sigedit.Tpo $(DEPDIR)/libwidgets_a-sigedit.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='sigedit.cpp' object='libwidgets_a-sigedit.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-sigedit.o `test -f 'sigedit.cpp' || echo '$(srcdir)/'`sigedit.cpp + +libwidgets_a-sigedit.obj: sigedit.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-sigedit.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-sigedit.Tpo -c -o libwidgets_a-sigedit.obj `if test -f 'sigedit.cpp'; then $(CYGPATH_W) 'sigedit.cpp'; else $(CYGPATH_W) '$(srcdir)/sigedit.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-sigedit.Tpo $(DEPDIR)/libwidgets_a-sigedit.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='sigedit.cpp' object='libwidgets_a-sigedit.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-sigedit.obj `if test -f 'sigedit.cpp'; then $(CYGPATH_W) 'sigedit.cpp'; else $(CYGPATH_W) '$(srcdir)/sigedit.cpp'; fi` + +libwidgets_a-shortcutconfig.o: shortcutconfig.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-shortcutconfig.o -MD -MP -MF $(DEPDIR)/libwidgets_a-shortcutconfig.Tpo -c -o libwidgets_a-shortcutconfig.o `test -f 'shortcutconfig.cpp' || echo '$(srcdir)/'`shortcutconfig.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-shortcutconfig.Tpo $(DEPDIR)/libwidgets_a-shortcutconfig.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='shortcutconfig.cpp' object='libwidgets_a-shortcutconfig.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-shortcutconfig.o `test -f 'shortcutconfig.cpp' || echo '$(srcdir)/'`shortcutconfig.cpp + +libwidgets_a-shortcutconfig.obj: shortcutconfig.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-shortcutconfig.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-shortcutconfig.Tpo -c -o libwidgets_a-shortcutconfig.obj `if test -f 'shortcutconfig.cpp'; then $(CYGPATH_W) 'shortcutconfig.cpp'; else $(CYGPATH_W) '$(srcdir)/shortcutconfig.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-shortcutconfig.Tpo $(DEPDIR)/libwidgets_a-shortcutconfig.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='shortcutconfig.cpp' object='libwidgets_a-shortcutconfig.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-shortcutconfig.obj `if test -f 'shortcutconfig.cpp'; then $(CYGPATH_W) 'shortcutconfig.cpp'; else $(CYGPATH_W) '$(srcdir)/shortcutconfig.cpp'; fi` + +libwidgets_a-shortcutcapturedialog.o: shortcutcapturedialog.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-shortcutcapturedialog.o -MD -MP -MF $(DEPDIR)/libwidgets_a-shortcutcapturedialog.Tpo -c -o libwidgets_a-shortcutcapturedialog.o `test -f 'shortcutcapturedialog.cpp' || echo '$(srcdir)/'`shortcutcapturedialog.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-shortcutcapturedialog.Tpo $(DEPDIR)/libwidgets_a-shortcutcapturedialog.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='shortcutcapturedialog.cpp' object='libwidgets_a-shortcutcapturedialog.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-shortcutcapturedialog.o `test -f 'shortcutcapturedialog.cpp' || echo '$(srcdir)/'`shortcutcapturedialog.cpp + +libwidgets_a-shortcutcapturedialog.obj: shortcutcapturedialog.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-shortcutcapturedialog.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-shortcutcapturedialog.Tpo -c -o libwidgets_a-shortcutcapturedialog.obj `if test -f 'shortcutcapturedialog.cpp'; then $(CYGPATH_W) 'shortcutcapturedialog.cpp'; else $(CYGPATH_W) '$(srcdir)/shortcutcapturedialog.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-shortcutcapturedialog.Tpo $(DEPDIR)/libwidgets_a-shortcutcapturedialog.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='shortcutcapturedialog.cpp' object='libwidgets_a-shortcutcapturedialog.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-shortcutcapturedialog.obj `if test -f 'shortcutcapturedialog.cpp'; then $(CYGPATH_W) 'shortcutcapturedialog.cpp'; else $(CYGPATH_W) '$(srcdir)/shortcutcapturedialog.cpp'; fi` + +libwidgets_a-combobox.o: combobox.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-combobox.o -MD -MP -MF $(DEPDIR)/libwidgets_a-combobox.Tpo -c -o libwidgets_a-combobox.o `test -f 'combobox.cpp' || echo '$(srcdir)/'`combobox.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-combobox.Tpo $(DEPDIR)/libwidgets_a-combobox.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='combobox.cpp' object='libwidgets_a-combobox.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-combobox.o `test -f 'combobox.cpp' || echo '$(srcdir)/'`combobox.cpp + +libwidgets_a-combobox.obj: combobox.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-combobox.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-combobox.Tpo -c -o libwidgets_a-combobox.obj `if test -f 'combobox.cpp'; then $(CYGPATH_W) 'combobox.cpp'; else $(CYGPATH_W) '$(srcdir)/combobox.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-combobox.Tpo $(DEPDIR)/libwidgets_a-combobox.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='combobox.cpp' object='libwidgets_a-combobox.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-combobox.obj `if test -f 'combobox.cpp'; then $(CYGPATH_W) 'combobox.cpp'; else $(CYGPATH_W) '$(srcdir)/combobox.cpp'; fi` + +libwidgets_a-checkbox.o: checkbox.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-checkbox.o -MD -MP -MF $(DEPDIR)/libwidgets_a-checkbox.Tpo -c -o libwidgets_a-checkbox.o `test -f 'checkbox.cpp' || echo '$(srcdir)/'`checkbox.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-checkbox.Tpo $(DEPDIR)/libwidgets_a-checkbox.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='checkbox.cpp' object='libwidgets_a-checkbox.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-checkbox.o `test -f 'checkbox.cpp' || echo '$(srcdir)/'`checkbox.cpp + +libwidgets_a-checkbox.obj: checkbox.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-checkbox.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-checkbox.Tpo -c -o libwidgets_a-checkbox.obj `if test -f 'checkbox.cpp'; then $(CYGPATH_W) 'checkbox.cpp'; else $(CYGPATH_W) '$(srcdir)/checkbox.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-checkbox.Tpo $(DEPDIR)/libwidgets_a-checkbox.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='checkbox.cpp' object='libwidgets_a-checkbox.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-checkbox.obj `if test -f 'checkbox.cpp'; then $(CYGPATH_W) 'checkbox.cpp'; else $(CYGPATH_W) '$(srcdir)/checkbox.cpp'; fi` + +libwidgets_a-aboutbox_impl.o: aboutbox_impl.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-aboutbox_impl.o -MD -MP -MF $(DEPDIR)/libwidgets_a-aboutbox_impl.Tpo -c -o libwidgets_a-aboutbox_impl.o `test -f 'aboutbox_impl.cpp' || echo '$(srcdir)/'`aboutbox_impl.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-aboutbox_impl.Tpo $(DEPDIR)/libwidgets_a-aboutbox_impl.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='aboutbox_impl.cpp' object='libwidgets_a-aboutbox_impl.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-aboutbox_impl.o `test -f 'aboutbox_impl.cpp' || echo '$(srcdir)/'`aboutbox_impl.cpp + +libwidgets_a-aboutbox_impl.obj: aboutbox_impl.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-aboutbox_impl.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-aboutbox_impl.Tpo -c -o libwidgets_a-aboutbox_impl.obj `if test -f 'aboutbox_impl.cpp'; then $(CYGPATH_W) 'aboutbox_impl.cpp'; else $(CYGPATH_W) '$(srcdir)/aboutbox_impl.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-aboutbox_impl.Tpo $(DEPDIR)/libwidgets_a-aboutbox_impl.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='aboutbox_impl.cpp' object='libwidgets_a-aboutbox_impl.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-aboutbox_impl.obj `if test -f 'aboutbox_impl.cpp'; then $(CYGPATH_W) 'aboutbox_impl.cpp'; else $(CYGPATH_W) '$(srcdir)/aboutbox_impl.cpp'; fi` + +libwidgets_a-popupmenu.o: popupmenu.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-popupmenu.o -MD -MP -MF $(DEPDIR)/libwidgets_a-popupmenu.Tpo -c -o libwidgets_a-popupmenu.o `test -f 'popupmenu.cpp' || echo '$(srcdir)/'`popupmenu.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-popupmenu.Tpo $(DEPDIR)/libwidgets_a-popupmenu.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='popupmenu.cpp' object='libwidgets_a-popupmenu.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-popupmenu.o `test -f 'popupmenu.cpp' || echo '$(srcdir)/'`popupmenu.cpp + +libwidgets_a-popupmenu.obj: popupmenu.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-popupmenu.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-popupmenu.Tpo -c -o libwidgets_a-popupmenu.obj `if test -f 'popupmenu.cpp'; then $(CYGPATH_W) 'popupmenu.cpp'; else $(CYGPATH_W) '$(srcdir)/popupmenu.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-popupmenu.Tpo $(DEPDIR)/libwidgets_a-popupmenu.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='popupmenu.cpp' object='libwidgets_a-popupmenu.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-popupmenu.obj `if test -f 'popupmenu.cpp'; then $(CYGPATH_W) 'popupmenu.cpp'; else $(CYGPATH_W) '$(srcdir)/popupmenu.cpp'; fi` + +libwidgets_a-moc_scrollscale.o: moc_scrollscale.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_scrollscale.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_scrollscale.Tpo -c -o libwidgets_a-moc_scrollscale.o `test -f 'moc_scrollscale.cpp' || echo '$(srcdir)/'`moc_scrollscale.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_scrollscale.Tpo $(DEPDIR)/libwidgets_a-moc_scrollscale.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_scrollscale.cpp' object='libwidgets_a-moc_scrollscale.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_scrollscale.o `test -f 'moc_scrollscale.cpp' || echo '$(srcdir)/'`moc_scrollscale.cpp + +libwidgets_a-moc_scrollscale.obj: moc_scrollscale.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_scrollscale.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_scrollscale.Tpo -c -o libwidgets_a-moc_scrollscale.obj `if test -f 'moc_scrollscale.cpp'; then $(CYGPATH_W) 'moc_scrollscale.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_scrollscale.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_scrollscale.Tpo $(DEPDIR)/libwidgets_a-moc_scrollscale.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_scrollscale.cpp' object='libwidgets_a-moc_scrollscale.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_scrollscale.obj `if test -f 'moc_scrollscale.cpp'; then $(CYGPATH_W) 'moc_scrollscale.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_scrollscale.cpp'; fi` + +libwidgets_a-moc_view.o: moc_view.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_view.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_view.Tpo -c -o libwidgets_a-moc_view.o `test -f 'moc_view.cpp' || echo '$(srcdir)/'`moc_view.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_view.Tpo $(DEPDIR)/libwidgets_a-moc_view.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_view.cpp' object='libwidgets_a-moc_view.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_view.o `test -f 'moc_view.cpp' || echo '$(srcdir)/'`moc_view.cpp + +libwidgets_a-moc_view.obj: moc_view.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_view.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_view.Tpo -c -o libwidgets_a-moc_view.obj `if test -f 'moc_view.cpp'; then $(CYGPATH_W) 'moc_view.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_view.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_view.Tpo $(DEPDIR)/libwidgets_a-moc_view.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_view.cpp' object='libwidgets_a-moc_view.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_view.obj `if test -f 'moc_view.cpp'; then $(CYGPATH_W) 'moc_view.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_view.cpp'; fi` + +libwidgets_a-moc_nentry.o: moc_nentry.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_nentry.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_nentry.Tpo -c -o libwidgets_a-moc_nentry.o `test -f 'moc_nentry.cpp' || echo '$(srcdir)/'`moc_nentry.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_nentry.Tpo $(DEPDIR)/libwidgets_a-moc_nentry.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_nentry.cpp' object='libwidgets_a-moc_nentry.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_nentry.o `test -f 'moc_nentry.cpp' || echo '$(srcdir)/'`moc_nentry.cpp + +libwidgets_a-moc_nentry.obj: moc_nentry.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_nentry.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_nentry.Tpo -c -o libwidgets_a-moc_nentry.obj `if test -f 'moc_nentry.cpp'; then $(CYGPATH_W) 'moc_nentry.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_nentry.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_nentry.Tpo $(DEPDIR)/libwidgets_a-moc_nentry.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_nentry.cpp' object='libwidgets_a-moc_nentry.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_nentry.obj `if test -f 'moc_nentry.cpp'; then $(CYGPATH_W) 'moc_nentry.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_nentry.cpp'; fi` + +libwidgets_a-moc_mtscale.o: moc_mtscale.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_mtscale.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_mtscale.Tpo -c -o libwidgets_a-moc_mtscale.o `test -f 'moc_mtscale.cpp' || echo '$(srcdir)/'`moc_mtscale.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_mtscale.Tpo $(DEPDIR)/libwidgets_a-moc_mtscale.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_mtscale.cpp' object='libwidgets_a-moc_mtscale.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_mtscale.o `test -f 'moc_mtscale.cpp' || echo '$(srcdir)/'`moc_mtscale.cpp + +libwidgets_a-moc_mtscale.obj: moc_mtscale.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_mtscale.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_mtscale.Tpo -c -o libwidgets_a-moc_mtscale.obj `if test -f 'moc_mtscale.cpp'; then $(CYGPATH_W) 'moc_mtscale.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_mtscale.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_mtscale.Tpo $(DEPDIR)/libwidgets_a-moc_mtscale.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_mtscale.cpp' object='libwidgets_a-moc_mtscale.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_mtscale.obj `if test -f 'moc_mtscale.cpp'; then $(CYGPATH_W) 'moc_mtscale.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_mtscale.cpp'; fi` + +libwidgets_a-moc_sigscale.o: moc_sigscale.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_sigscale.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_sigscale.Tpo -c -o libwidgets_a-moc_sigscale.o `test -f 'moc_sigscale.cpp' || echo '$(srcdir)/'`moc_sigscale.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_sigscale.Tpo $(DEPDIR)/libwidgets_a-moc_sigscale.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_sigscale.cpp' object='libwidgets_a-moc_sigscale.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_sigscale.o `test -f 'moc_sigscale.cpp' || echo '$(srcdir)/'`moc_sigscale.cpp + +libwidgets_a-moc_sigscale.obj: moc_sigscale.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_sigscale.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_sigscale.Tpo -c -o libwidgets_a-moc_sigscale.obj `if test -f 'moc_sigscale.cpp'; then $(CYGPATH_W) 'moc_sigscale.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_sigscale.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_sigscale.Tpo $(DEPDIR)/libwidgets_a-moc_sigscale.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_sigscale.cpp' object='libwidgets_a-moc_sigscale.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_sigscale.obj `if test -f 'moc_sigscale.cpp'; then $(CYGPATH_W) 'moc_sigscale.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_sigscale.cpp'; fi` + +libwidgets_a-moc_hitscale.o: moc_hitscale.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_hitscale.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_hitscale.Tpo -c -o libwidgets_a-moc_hitscale.o `test -f 'moc_hitscale.cpp' || echo '$(srcdir)/'`moc_hitscale.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_hitscale.Tpo $(DEPDIR)/libwidgets_a-moc_hitscale.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_hitscale.cpp' object='libwidgets_a-moc_hitscale.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_hitscale.o `test -f 'moc_hitscale.cpp' || echo '$(srcdir)/'`moc_hitscale.cpp + +libwidgets_a-moc_hitscale.obj: moc_hitscale.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_hitscale.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_hitscale.Tpo -c -o libwidgets_a-moc_hitscale.obj `if test -f 'moc_hitscale.cpp'; then $(CYGPATH_W) 'moc_hitscale.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_hitscale.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_hitscale.Tpo $(DEPDIR)/libwidgets_a-moc_hitscale.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_hitscale.cpp' object='libwidgets_a-moc_hitscale.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_hitscale.obj `if test -f 'moc_hitscale.cpp'; then $(CYGPATH_W) 'moc_hitscale.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_hitscale.cpp'; fi` + +libwidgets_a-moc_intlabel.o: moc_intlabel.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_intlabel.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_intlabel.Tpo -c -o libwidgets_a-moc_intlabel.o `test -f 'moc_intlabel.cpp' || echo '$(srcdir)/'`moc_intlabel.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_intlabel.Tpo $(DEPDIR)/libwidgets_a-moc_intlabel.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_intlabel.cpp' object='libwidgets_a-moc_intlabel.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_intlabel.o `test -f 'moc_intlabel.cpp' || echo '$(srcdir)/'`moc_intlabel.cpp + +libwidgets_a-moc_intlabel.obj: moc_intlabel.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_intlabel.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_intlabel.Tpo -c -o libwidgets_a-moc_intlabel.obj `if test -f 'moc_intlabel.cpp'; then $(CYGPATH_W) 'moc_intlabel.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_intlabel.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_intlabel.Tpo $(DEPDIR)/libwidgets_a-moc_intlabel.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_intlabel.cpp' object='libwidgets_a-moc_intlabel.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_intlabel.obj `if test -f 'moc_intlabel.cpp'; then $(CYGPATH_W) 'moc_intlabel.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_intlabel.cpp'; fi` + +libwidgets_a-moc_doublelabel.o: moc_doublelabel.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_doublelabel.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_doublelabel.Tpo -c -o libwidgets_a-moc_doublelabel.o `test -f 'moc_doublelabel.cpp' || echo '$(srcdir)/'`moc_doublelabel.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_doublelabel.Tpo $(DEPDIR)/libwidgets_a-moc_doublelabel.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_doublelabel.cpp' object='libwidgets_a-moc_doublelabel.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_doublelabel.o `test -f 'moc_doublelabel.cpp' || echo '$(srcdir)/'`moc_doublelabel.cpp + +libwidgets_a-moc_doublelabel.obj: moc_doublelabel.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_doublelabel.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_doublelabel.Tpo -c -o libwidgets_a-moc_doublelabel.obj `if test -f 'moc_doublelabel.cpp'; then $(CYGPATH_W) 'moc_doublelabel.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_doublelabel.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_doublelabel.Tpo $(DEPDIR)/libwidgets_a-moc_doublelabel.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_doublelabel.cpp' object='libwidgets_a-moc_doublelabel.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_doublelabel.obj `if test -f 'moc_doublelabel.cpp'; then $(CYGPATH_W) 'moc_doublelabel.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_doublelabel.cpp'; fi` + +libwidgets_a-moc_canvas.o: moc_canvas.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_canvas.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_canvas.Tpo -c -o libwidgets_a-moc_canvas.o `test -f 'moc_canvas.cpp' || echo '$(srcdir)/'`moc_canvas.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_canvas.Tpo $(DEPDIR)/libwidgets_a-moc_canvas.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_canvas.cpp' object='libwidgets_a-moc_canvas.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_canvas.o `test -f 'moc_canvas.cpp' || echo '$(srcdir)/'`moc_canvas.cpp + +libwidgets_a-moc_canvas.obj: moc_canvas.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_canvas.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_canvas.Tpo -c -o libwidgets_a-moc_canvas.obj `if test -f 'moc_canvas.cpp'; then $(CYGPATH_W) 'moc_canvas.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_canvas.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_canvas.Tpo $(DEPDIR)/libwidgets_a-moc_canvas.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_canvas.cpp' object='libwidgets_a-moc_canvas.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_canvas.obj `if test -f 'moc_canvas.cpp'; then $(CYGPATH_W) 'moc_canvas.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_canvas.cpp'; fi` + +libwidgets_a-moc_noteinfo.o: moc_noteinfo.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_noteinfo.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_noteinfo.Tpo -c -o libwidgets_a-moc_noteinfo.o `test -f 'moc_noteinfo.cpp' || echo '$(srcdir)/'`moc_noteinfo.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_noteinfo.Tpo $(DEPDIR)/libwidgets_a-moc_noteinfo.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_noteinfo.cpp' object='libwidgets_a-moc_noteinfo.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_noteinfo.o `test -f 'moc_noteinfo.cpp' || echo '$(srcdir)/'`moc_noteinfo.cpp + +libwidgets_a-moc_noteinfo.obj: moc_noteinfo.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_noteinfo.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_noteinfo.Tpo -c -o libwidgets_a-moc_noteinfo.obj `if test -f 'moc_noteinfo.cpp'; then $(CYGPATH_W) 'moc_noteinfo.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_noteinfo.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_noteinfo.Tpo $(DEPDIR)/libwidgets_a-moc_noteinfo.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_noteinfo.cpp' object='libwidgets_a-moc_noteinfo.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_noteinfo.obj `if test -f 'moc_noteinfo.cpp'; then $(CYGPATH_W) 'moc_noteinfo.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_noteinfo.cpp'; fi` + +libwidgets_a-moc_dentry.o: moc_dentry.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_dentry.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_dentry.Tpo -c -o libwidgets_a-moc_dentry.o `test -f 'moc_dentry.cpp' || echo '$(srcdir)/'`moc_dentry.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_dentry.Tpo $(DEPDIR)/libwidgets_a-moc_dentry.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_dentry.cpp' object='libwidgets_a-moc_dentry.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_dentry.o `test -f 'moc_dentry.cpp' || echo '$(srcdir)/'`moc_dentry.cpp + +libwidgets_a-moc_dentry.obj: moc_dentry.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_dentry.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_dentry.Tpo -c -o libwidgets_a-moc_dentry.obj `if test -f 'moc_dentry.cpp'; then $(CYGPATH_W) 'moc_dentry.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_dentry.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_dentry.Tpo $(DEPDIR)/libwidgets_a-moc_dentry.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_dentry.cpp' object='libwidgets_a-moc_dentry.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_dentry.obj `if test -f 'moc_dentry.cpp'; then $(CYGPATH_W) 'moc_dentry.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_dentry.cpp'; fi` + +libwidgets_a-moc_siglabel.o: moc_siglabel.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_siglabel.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_siglabel.Tpo -c -o libwidgets_a-moc_siglabel.o `test -f 'moc_siglabel.cpp' || echo '$(srcdir)/'`moc_siglabel.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_siglabel.Tpo $(DEPDIR)/libwidgets_a-moc_siglabel.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_siglabel.cpp' object='libwidgets_a-moc_siglabel.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_siglabel.o `test -f 'moc_siglabel.cpp' || echo '$(srcdir)/'`moc_siglabel.cpp + +libwidgets_a-moc_siglabel.obj: moc_siglabel.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_siglabel.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_siglabel.Tpo -c -o libwidgets_a-moc_siglabel.obj `if test -f 'moc_siglabel.cpp'; then $(CYGPATH_W) 'moc_siglabel.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_siglabel.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_siglabel.Tpo $(DEPDIR)/libwidgets_a-moc_siglabel.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_siglabel.cpp' object='libwidgets_a-moc_siglabel.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_siglabel.obj `if test -f 'moc_siglabel.cpp'; then $(CYGPATH_W) 'moc_siglabel.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_siglabel.cpp'; fi` + +libwidgets_a-moc_ttoolbar.o: moc_ttoolbar.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_ttoolbar.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_ttoolbar.Tpo -c -o libwidgets_a-moc_ttoolbar.o `test -f 'moc_ttoolbar.cpp' || echo '$(srcdir)/'`moc_ttoolbar.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_ttoolbar.Tpo $(DEPDIR)/libwidgets_a-moc_ttoolbar.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_ttoolbar.cpp' object='libwidgets_a-moc_ttoolbar.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_ttoolbar.o `test -f 'moc_ttoolbar.cpp' || echo '$(srcdir)/'`moc_ttoolbar.cpp + +libwidgets_a-moc_ttoolbar.obj: moc_ttoolbar.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_ttoolbar.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_ttoolbar.Tpo -c -o libwidgets_a-moc_ttoolbar.obj `if test -f 'moc_ttoolbar.cpp'; then $(CYGPATH_W) 'moc_ttoolbar.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_ttoolbar.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_ttoolbar.Tpo $(DEPDIR)/libwidgets_a-moc_ttoolbar.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_ttoolbar.cpp' object='libwidgets_a-moc_ttoolbar.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_ttoolbar.obj `if test -f 'moc_ttoolbar.cpp'; then $(CYGPATH_W) 'moc_ttoolbar.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_ttoolbar.cpp'; fi` + +libwidgets_a-moc_ttoolbutton.o: moc_ttoolbutton.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_ttoolbutton.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_ttoolbutton.Tpo -c -o libwidgets_a-moc_ttoolbutton.o `test -f 'moc_ttoolbutton.cpp' || echo '$(srcdir)/'`moc_ttoolbutton.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_ttoolbutton.Tpo $(DEPDIR)/libwidgets_a-moc_ttoolbutton.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_ttoolbutton.cpp' object='libwidgets_a-moc_ttoolbutton.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_ttoolbutton.o `test -f 'moc_ttoolbutton.cpp' || echo '$(srcdir)/'`moc_ttoolbutton.cpp + +libwidgets_a-moc_ttoolbutton.obj: moc_ttoolbutton.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_ttoolbutton.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_ttoolbutton.Tpo -c -o libwidgets_a-moc_ttoolbutton.obj `if test -f 'moc_ttoolbutton.cpp'; then $(CYGPATH_W) 'moc_ttoolbutton.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_ttoolbutton.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_ttoolbutton.Tpo $(DEPDIR)/libwidgets_a-moc_ttoolbutton.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_ttoolbutton.cpp' object='libwidgets_a-moc_ttoolbutton.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_ttoolbutton.obj `if test -f 'moc_ttoolbutton.cpp'; then $(CYGPATH_W) 'moc_ttoolbutton.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_ttoolbutton.cpp'; fi` + +libwidgets_a-moc_tb1.o: moc_tb1.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_tb1.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_tb1.Tpo -c -o libwidgets_a-moc_tb1.o `test -f 'moc_tb1.cpp' || echo '$(srcdir)/'`moc_tb1.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_tb1.Tpo $(DEPDIR)/libwidgets_a-moc_tb1.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_tb1.cpp' object='libwidgets_a-moc_tb1.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_tb1.o `test -f 'moc_tb1.cpp' || echo '$(srcdir)/'`moc_tb1.cpp + +libwidgets_a-moc_tb1.obj: moc_tb1.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_tb1.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_tb1.Tpo -c -o libwidgets_a-moc_tb1.obj `if test -f 'moc_tb1.cpp'; then $(CYGPATH_W) 'moc_tb1.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_tb1.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_tb1.Tpo $(DEPDIR)/libwidgets_a-moc_tb1.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_tb1.cpp' object='libwidgets_a-moc_tb1.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_tb1.obj `if test -f 'moc_tb1.cpp'; then $(CYGPATH_W) 'moc_tb1.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_tb1.cpp'; fi` + +libwidgets_a-moc_lcombo.o: moc_lcombo.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_lcombo.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_lcombo.Tpo -c -o libwidgets_a-moc_lcombo.o `test -f 'moc_lcombo.cpp' || echo '$(srcdir)/'`moc_lcombo.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_lcombo.Tpo $(DEPDIR)/libwidgets_a-moc_lcombo.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_lcombo.cpp' object='libwidgets_a-moc_lcombo.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_lcombo.o `test -f 'moc_lcombo.cpp' || echo '$(srcdir)/'`moc_lcombo.cpp + +libwidgets_a-moc_lcombo.obj: moc_lcombo.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_lcombo.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_lcombo.Tpo -c -o libwidgets_a-moc_lcombo.obj `if test -f 'moc_lcombo.cpp'; then $(CYGPATH_W) 'moc_lcombo.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_lcombo.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_lcombo.Tpo $(DEPDIR)/libwidgets_a-moc_lcombo.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_lcombo.cpp' object='libwidgets_a-moc_lcombo.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_lcombo.obj `if test -f 'moc_lcombo.cpp'; then $(CYGPATH_W) 'moc_lcombo.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_lcombo.cpp'; fi` + +libwidgets_a-moc_swidget.o: moc_swidget.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_swidget.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_swidget.Tpo -c -o libwidgets_a-moc_swidget.o `test -f 'moc_swidget.cpp' || echo '$(srcdir)/'`moc_swidget.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_swidget.Tpo $(DEPDIR)/libwidgets_a-moc_swidget.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_swidget.cpp' object='libwidgets_a-moc_swidget.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_swidget.o `test -f 'moc_swidget.cpp' || echo '$(srcdir)/'`moc_swidget.cpp + +libwidgets_a-moc_swidget.obj: moc_swidget.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_swidget.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_swidget.Tpo -c -o libwidgets_a-moc_swidget.obj `if test -f 'moc_swidget.cpp'; then $(CYGPATH_W) 'moc_swidget.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_swidget.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_swidget.Tpo $(DEPDIR)/libwidgets_a-moc_swidget.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_swidget.cpp' object='libwidgets_a-moc_swidget.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_swidget.obj `if test -f 'moc_swidget.cpp'; then $(CYGPATH_W) 'moc_swidget.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_swidget.cpp'; fi` + +libwidgets_a-moc_tempolabel.o: moc_tempolabel.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_tempolabel.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_tempolabel.Tpo -c -o libwidgets_a-moc_tempolabel.o `test -f 'moc_tempolabel.cpp' || echo '$(srcdir)/'`moc_tempolabel.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_tempolabel.Tpo $(DEPDIR)/libwidgets_a-moc_tempolabel.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_tempolabel.cpp' object='libwidgets_a-moc_tempolabel.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_tempolabel.o `test -f 'moc_tempolabel.cpp' || echo '$(srcdir)/'`moc_tempolabel.cpp + +libwidgets_a-moc_tempolabel.obj: moc_tempolabel.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_tempolabel.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_tempolabel.Tpo -c -o libwidgets_a-moc_tempolabel.obj `if test -f 'moc_tempolabel.cpp'; then $(CYGPATH_W) 'moc_tempolabel.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_tempolabel.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_tempolabel.Tpo $(DEPDIR)/libwidgets_a-moc_tempolabel.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_tempolabel.cpp' object='libwidgets_a-moc_tempolabel.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_tempolabel.obj `if test -f 'moc_tempolabel.cpp'; then $(CYGPATH_W) 'moc_tempolabel.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_tempolabel.cpp'; fi` + +libwidgets_a-moc_tools.o: moc_tools.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_tools.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_tools.Tpo -c -o libwidgets_a-moc_tools.o `test -f 'moc_tools.cpp' || echo '$(srcdir)/'`moc_tools.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_tools.Tpo $(DEPDIR)/libwidgets_a-moc_tools.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_tools.cpp' object='libwidgets_a-moc_tools.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_tools.o `test -f 'moc_tools.cpp' || echo '$(srcdir)/'`moc_tools.cpp + +libwidgets_a-moc_tools.obj: moc_tools.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_tools.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_tools.Tpo -c -o libwidgets_a-moc_tools.obj `if test -f 'moc_tools.cpp'; then $(CYGPATH_W) 'moc_tools.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_tools.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_tools.Tpo $(DEPDIR)/libwidgets_a-moc_tools.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_tools.cpp' object='libwidgets_a-moc_tools.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_tools.obj `if test -f 'moc_tools.cpp'; then $(CYGPATH_W) 'moc_tools.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_tools.cpp'; fi` + +libwidgets_a-moc_popupmenu.o: moc_popupmenu.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_popupmenu.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_popupmenu.Tpo -c -o libwidgets_a-moc_popupmenu.o `test -f 'moc_popupmenu.cpp' || echo '$(srcdir)/'`moc_popupmenu.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_popupmenu.Tpo $(DEPDIR)/libwidgets_a-moc_popupmenu.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_popupmenu.cpp' object='libwidgets_a-moc_popupmenu.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_popupmenu.o `test -f 'moc_popupmenu.cpp' || echo '$(srcdir)/'`moc_popupmenu.cpp + +libwidgets_a-moc_popupmenu.obj: moc_popupmenu.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_popupmenu.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_popupmenu.Tpo -c -o libwidgets_a-moc_popupmenu.obj `if test -f 'moc_popupmenu.cpp'; then $(CYGPATH_W) 'moc_popupmenu.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_popupmenu.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_popupmenu.Tpo $(DEPDIR)/libwidgets_a-moc_popupmenu.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_popupmenu.cpp' object='libwidgets_a-moc_popupmenu.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_popupmenu.obj `if test -f 'moc_popupmenu.cpp'; then $(CYGPATH_W) 'moc_popupmenu.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_popupmenu.cpp'; fi` + +libwidgets_a-moc_fontsel.o: moc_fontsel.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_fontsel.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_fontsel.Tpo -c -o libwidgets_a-moc_fontsel.o `test -f 'moc_fontsel.cpp' || echo '$(srcdir)/'`moc_fontsel.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_fontsel.Tpo $(DEPDIR)/libwidgets_a-moc_fontsel.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_fontsel.cpp' object='libwidgets_a-moc_fontsel.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_fontsel.o `test -f 'moc_fontsel.cpp' || echo '$(srcdir)/'`moc_fontsel.cpp + +libwidgets_a-moc_fontsel.obj: moc_fontsel.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_fontsel.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_fontsel.Tpo -c -o libwidgets_a-moc_fontsel.obj `if test -f 'moc_fontsel.cpp'; then $(CYGPATH_W) 'moc_fontsel.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_fontsel.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_fontsel.Tpo $(DEPDIR)/libwidgets_a-moc_fontsel.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_fontsel.cpp' object='libwidgets_a-moc_fontsel.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_fontsel.obj `if test -f 'moc_fontsel.cpp'; then $(CYGPATH_W) 'moc_fontsel.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_fontsel.cpp'; fi` + +libwidgets_a-moc_ctrlcombo.o: moc_ctrlcombo.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_ctrlcombo.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_ctrlcombo.Tpo -c -o libwidgets_a-moc_ctrlcombo.o `test -f 'moc_ctrlcombo.cpp' || echo '$(srcdir)/'`moc_ctrlcombo.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_ctrlcombo.Tpo $(DEPDIR)/libwidgets_a-moc_ctrlcombo.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_ctrlcombo.cpp' object='libwidgets_a-moc_ctrlcombo.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_ctrlcombo.o `test -f 'moc_ctrlcombo.cpp' || echo '$(srcdir)/'`moc_ctrlcombo.cpp + +libwidgets_a-moc_ctrlcombo.obj: moc_ctrlcombo.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_ctrlcombo.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_ctrlcombo.Tpo -c -o libwidgets_a-moc_ctrlcombo.obj `if test -f 'moc_ctrlcombo.cpp'; then $(CYGPATH_W) 'moc_ctrlcombo.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_ctrlcombo.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_ctrlcombo.Tpo $(DEPDIR)/libwidgets_a-moc_ctrlcombo.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_ctrlcombo.cpp' object='libwidgets_a-moc_ctrlcombo.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_ctrlcombo.obj `if test -f 'moc_ctrlcombo.cpp'; then $(CYGPATH_W) 'moc_ctrlcombo.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_ctrlcombo.cpp'; fi` + +libwidgets_a-moc_sliderbase.o: moc_sliderbase.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_sliderbase.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_sliderbase.Tpo -c -o libwidgets_a-moc_sliderbase.o `test -f 'moc_sliderbase.cpp' || echo '$(srcdir)/'`moc_sliderbase.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_sliderbase.Tpo $(DEPDIR)/libwidgets_a-moc_sliderbase.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_sliderbase.cpp' object='libwidgets_a-moc_sliderbase.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_sliderbase.o `test -f 'moc_sliderbase.cpp' || echo '$(srcdir)/'`moc_sliderbase.cpp + +libwidgets_a-moc_sliderbase.obj: moc_sliderbase.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_sliderbase.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_sliderbase.Tpo -c -o libwidgets_a-moc_sliderbase.obj `if test -f 'moc_sliderbase.cpp'; then $(CYGPATH_W) 'moc_sliderbase.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_sliderbase.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_sliderbase.Tpo $(DEPDIR)/libwidgets_a-moc_sliderbase.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_sliderbase.cpp' object='libwidgets_a-moc_sliderbase.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_sliderbase.obj `if test -f 'moc_sliderbase.cpp'; then $(CYGPATH_W) 'moc_sliderbase.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_sliderbase.cpp'; fi` + +libwidgets_a-moc_slider.o: moc_slider.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_slider.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_slider.Tpo -c -o libwidgets_a-moc_slider.o `test -f 'moc_slider.cpp' || echo '$(srcdir)/'`moc_slider.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_slider.Tpo $(DEPDIR)/libwidgets_a-moc_slider.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_slider.cpp' object='libwidgets_a-moc_slider.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_slider.o `test -f 'moc_slider.cpp' || echo '$(srcdir)/'`moc_slider.cpp + +libwidgets_a-moc_slider.obj: moc_slider.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_slider.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_slider.Tpo -c -o libwidgets_a-moc_slider.obj `if test -f 'moc_slider.cpp'; then $(CYGPATH_W) 'moc_slider.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_slider.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_slider.Tpo $(DEPDIR)/libwidgets_a-moc_slider.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_slider.cpp' object='libwidgets_a-moc_slider.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_slider.obj `if test -f 'moc_slider.cpp'; then $(CYGPATH_W) 'moc_slider.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_slider.cpp'; fi` + +libwidgets_a-moc_midisyncimpl.o: moc_midisyncimpl.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_midisyncimpl.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_midisyncimpl.Tpo -c -o libwidgets_a-moc_midisyncimpl.o `test -f 'moc_midisyncimpl.cpp' || echo '$(srcdir)/'`moc_midisyncimpl.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_midisyncimpl.Tpo $(DEPDIR)/libwidgets_a-moc_midisyncimpl.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_midisyncimpl.cpp' object='libwidgets_a-moc_midisyncimpl.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_midisyncimpl.o `test -f 'moc_midisyncimpl.cpp' || echo '$(srcdir)/'`moc_midisyncimpl.cpp + +libwidgets_a-moc_midisyncimpl.obj: moc_midisyncimpl.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_midisyncimpl.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_midisyncimpl.Tpo -c -o libwidgets_a-moc_midisyncimpl.obj `if test -f 'moc_midisyncimpl.cpp'; then $(CYGPATH_W) 'moc_midisyncimpl.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_midisyncimpl.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_midisyncimpl.Tpo $(DEPDIR)/libwidgets_a-moc_midisyncimpl.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_midisyncimpl.cpp' object='libwidgets_a-moc_midisyncimpl.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_midisyncimpl.obj `if test -f 'moc_midisyncimpl.cpp'; then $(CYGPATH_W) 'moc_midisyncimpl.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_midisyncimpl.cpp'; fi` + +libwidgets_a-moc_header.o: moc_header.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_header.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_header.Tpo -c -o libwidgets_a-moc_header.o `test -f 'moc_header.cpp' || echo '$(srcdir)/'`moc_header.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_header.Tpo $(DEPDIR)/libwidgets_a-moc_header.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_header.cpp' object='libwidgets_a-moc_header.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_header.o `test -f 'moc_header.cpp' || echo '$(srcdir)/'`moc_header.cpp + +libwidgets_a-moc_header.obj: moc_header.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_header.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_header.Tpo -c -o libwidgets_a-moc_header.obj `if test -f 'moc_header.cpp'; then $(CYGPATH_W) 'moc_header.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_header.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_header.Tpo $(DEPDIR)/libwidgets_a-moc_header.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_header.cpp' object='libwidgets_a-moc_header.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_header.obj `if test -f 'moc_header.cpp'; then $(CYGPATH_W) 'moc_header.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_header.cpp'; fi` + +libwidgets_a-moc_knob.o: moc_knob.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_knob.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_knob.Tpo -c -o libwidgets_a-moc_knob.o `test -f 'moc_knob.cpp' || echo '$(srcdir)/'`moc_knob.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_knob.Tpo $(DEPDIR)/libwidgets_a-moc_knob.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_knob.cpp' object='libwidgets_a-moc_knob.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_knob.o `test -f 'moc_knob.cpp' || echo '$(srcdir)/'`moc_knob.cpp + +libwidgets_a-moc_knob.obj: moc_knob.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_knob.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_knob.Tpo -c -o libwidgets_a-moc_knob.obj `if test -f 'moc_knob.cpp'; then $(CYGPATH_W) 'moc_knob.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_knob.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_knob.Tpo $(DEPDIR)/libwidgets_a-moc_knob.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_knob.cpp' object='libwidgets_a-moc_knob.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_knob.obj `if test -f 'moc_knob.cpp'; then $(CYGPATH_W) 'moc_knob.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_knob.cpp'; fi` + +libwidgets_a-moc_mlabel.o: moc_mlabel.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_mlabel.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_mlabel.Tpo -c -o libwidgets_a-moc_mlabel.o `test -f 'moc_mlabel.cpp' || echo '$(srcdir)/'`moc_mlabel.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_mlabel.Tpo $(DEPDIR)/libwidgets_a-moc_mlabel.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_mlabel.cpp' object='libwidgets_a-moc_mlabel.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_mlabel.o `test -f 'moc_mlabel.cpp' || echo '$(srcdir)/'`moc_mlabel.cpp + +libwidgets_a-moc_mlabel.obj: moc_mlabel.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_mlabel.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_mlabel.Tpo -c -o libwidgets_a-moc_mlabel.obj `if test -f 'moc_mlabel.cpp'; then $(CYGPATH_W) 'moc_mlabel.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_mlabel.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_mlabel.Tpo $(DEPDIR)/libwidgets_a-moc_mlabel.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_mlabel.cpp' object='libwidgets_a-moc_mlabel.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_mlabel.obj `if test -f 'moc_mlabel.cpp'; then $(CYGPATH_W) 'moc_mlabel.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_mlabel.cpp'; fi` + +libwidgets_a-moc_genset.o: moc_genset.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_genset.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_genset.Tpo -c -o libwidgets_a-moc_genset.o `test -f 'moc_genset.cpp' || echo '$(srcdir)/'`moc_genset.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_genset.Tpo $(DEPDIR)/libwidgets_a-moc_genset.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_genset.cpp' object='libwidgets_a-moc_genset.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_genset.o `test -f 'moc_genset.cpp' || echo '$(srcdir)/'`moc_genset.cpp + +libwidgets_a-moc_genset.obj: moc_genset.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_genset.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_genset.Tpo -c -o libwidgets_a-moc_genset.obj `if test -f 'moc_genset.cpp'; then $(CYGPATH_W) 'moc_genset.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_genset.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_genset.Tpo $(DEPDIR)/libwidgets_a-moc_genset.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_genset.cpp' object='libwidgets_a-moc_genset.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_genset.obj `if test -f 'moc_genset.cpp'; then $(CYGPATH_W) 'moc_genset.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_genset.cpp'; fi` + +libwidgets_a-moc_mixdowndialog.o: moc_mixdowndialog.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_mixdowndialog.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_mixdowndialog.Tpo -c -o libwidgets_a-moc_mixdowndialog.o `test -f 'moc_mixdowndialog.cpp' || echo '$(srcdir)/'`moc_mixdowndialog.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_mixdowndialog.Tpo $(DEPDIR)/libwidgets_a-moc_mixdowndialog.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_mixdowndialog.cpp' object='libwidgets_a-moc_mixdowndialog.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_mixdowndialog.o `test -f 'moc_mixdowndialog.cpp' || echo '$(srcdir)/'`moc_mixdowndialog.cpp + +libwidgets_a-moc_mixdowndialog.obj: moc_mixdowndialog.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_mixdowndialog.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_mixdowndialog.Tpo -c -o libwidgets_a-moc_mixdowndialog.obj `if test -f 'moc_mixdowndialog.cpp'; then $(CYGPATH_W) 'moc_mixdowndialog.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_mixdowndialog.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_mixdowndialog.Tpo $(DEPDIR)/libwidgets_a-moc_mixdowndialog.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_mixdowndialog.cpp' object='libwidgets_a-moc_mixdowndialog.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_mixdowndialog.obj `if test -f 'moc_mixdowndialog.cpp'; then $(CYGPATH_W) 'moc_mixdowndialog.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_mixdowndialog.cpp'; fi` + +libwidgets_a-moc_spinboxFP.o: moc_spinboxFP.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_spinboxFP.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_spinboxFP.Tpo -c -o libwidgets_a-moc_spinboxFP.o `test -f 'moc_spinboxFP.cpp' || echo '$(srcdir)/'`moc_spinboxFP.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_spinboxFP.Tpo $(DEPDIR)/libwidgets_a-moc_spinboxFP.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_spinboxFP.cpp' object='libwidgets_a-moc_spinboxFP.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_spinboxFP.o `test -f 'moc_spinboxFP.cpp' || echo '$(srcdir)/'`moc_spinboxFP.cpp + +libwidgets_a-moc_spinboxFP.obj: moc_spinboxFP.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_spinboxFP.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_spinboxFP.Tpo -c -o libwidgets_a-moc_spinboxFP.obj `if test -f 'moc_spinboxFP.cpp'; then $(CYGPATH_W) 'moc_spinboxFP.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_spinboxFP.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_spinboxFP.Tpo $(DEPDIR)/libwidgets_a-moc_spinboxFP.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_spinboxFP.cpp' object='libwidgets_a-moc_spinboxFP.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_spinboxFP.obj `if test -f 'moc_spinboxFP.cpp'; then $(CYGPATH_W) 'moc_spinboxFP.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_spinboxFP.cpp'; fi` + +libwidgets_a-moc_spinbox.o: moc_spinbox.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_spinbox.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_spinbox.Tpo -c -o libwidgets_a-moc_spinbox.o `test -f 'moc_spinbox.cpp' || echo '$(srcdir)/'`moc_spinbox.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_spinbox.Tpo $(DEPDIR)/libwidgets_a-moc_spinbox.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_spinbox.cpp' object='libwidgets_a-moc_spinbox.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_spinbox.o `test -f 'moc_spinbox.cpp' || echo '$(srcdir)/'`moc_spinbox.cpp + +libwidgets_a-moc_spinbox.obj: moc_spinbox.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_spinbox.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_spinbox.Tpo -c -o libwidgets_a-moc_spinbox.obj `if test -f 'moc_spinbox.cpp'; then $(CYGPATH_W) 'moc_spinbox.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_spinbox.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_spinbox.Tpo $(DEPDIR)/libwidgets_a-moc_spinbox.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_spinbox.cpp' object='libwidgets_a-moc_spinbox.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_spinbox.obj `if test -f 'moc_spinbox.cpp'; then $(CYGPATH_W) 'moc_spinbox.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_spinbox.cpp'; fi` + +libwidgets_a-moc_comboQuant.o: moc_comboQuant.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_comboQuant.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_comboQuant.Tpo -c -o libwidgets_a-moc_comboQuant.o `test -f 'moc_comboQuant.cpp' || echo '$(srcdir)/'`moc_comboQuant.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_comboQuant.Tpo $(DEPDIR)/libwidgets_a-moc_comboQuant.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_comboQuant.cpp' object='libwidgets_a-moc_comboQuant.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_comboQuant.o `test -f 'moc_comboQuant.cpp' || echo '$(srcdir)/'`moc_comboQuant.cpp + +libwidgets_a-moc_comboQuant.obj: moc_comboQuant.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_comboQuant.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_comboQuant.Tpo -c -o libwidgets_a-moc_comboQuant.obj `if test -f 'moc_comboQuant.cpp'; then $(CYGPATH_W) 'moc_comboQuant.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_comboQuant.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_comboQuant.Tpo $(DEPDIR)/libwidgets_a-moc_comboQuant.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_comboQuant.cpp' object='libwidgets_a-moc_comboQuant.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_comboQuant.obj `if test -f 'moc_comboQuant.cpp'; then $(CYGPATH_W) 'moc_comboQuant.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_comboQuant.cpp'; fi` + +libwidgets_a-moc_bigtime.o: moc_bigtime.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_bigtime.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_bigtime.Tpo -c -o libwidgets_a-moc_bigtime.o `test -f 'moc_bigtime.cpp' || echo '$(srcdir)/'`moc_bigtime.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_bigtime.Tpo $(DEPDIR)/libwidgets_a-moc_bigtime.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_bigtime.cpp' object='libwidgets_a-moc_bigtime.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_bigtime.o `test -f 'moc_bigtime.cpp' || echo '$(srcdir)/'`moc_bigtime.cpp + +libwidgets_a-moc_bigtime.obj: moc_bigtime.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_bigtime.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_bigtime.Tpo -c -o libwidgets_a-moc_bigtime.obj `if test -f 'moc_bigtime.cpp'; then $(CYGPATH_W) 'moc_bigtime.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_bigtime.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_bigtime.Tpo $(DEPDIR)/libwidgets_a-moc_bigtime.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_bigtime.cpp' object='libwidgets_a-moc_bigtime.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_bigtime.obj `if test -f 'moc_bigtime.cpp'; then $(CYGPATH_W) 'moc_bigtime.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_bigtime.cpp'; fi` + +libwidgets_a-moc_comment.o: moc_comment.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_comment.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_comment.Tpo -c -o libwidgets_a-moc_comment.o `test -f 'moc_comment.cpp' || echo '$(srcdir)/'`moc_comment.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_comment.Tpo $(DEPDIR)/libwidgets_a-moc_comment.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_comment.cpp' object='libwidgets_a-moc_comment.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_comment.o `test -f 'moc_comment.cpp' || echo '$(srcdir)/'`moc_comment.cpp + +libwidgets_a-moc_comment.obj: moc_comment.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_comment.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_comment.Tpo -c -o libwidgets_a-moc_comment.obj `if test -f 'moc_comment.cpp'; then $(CYGPATH_W) 'moc_comment.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_comment.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_comment.Tpo $(DEPDIR)/libwidgets_a-moc_comment.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_comment.cpp' object='libwidgets_a-moc_comment.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_comment.obj `if test -f 'moc_comment.cpp'; then $(CYGPATH_W) 'moc_comment.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_comment.cpp'; fi` + +libwidgets_a-moc_splitter.o: moc_splitter.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_splitter.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_splitter.Tpo -c -o libwidgets_a-moc_splitter.o `test -f 'moc_splitter.cpp' || echo '$(srcdir)/'`moc_splitter.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_splitter.Tpo $(DEPDIR)/libwidgets_a-moc_splitter.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_splitter.cpp' object='libwidgets_a-moc_splitter.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_splitter.o `test -f 'moc_splitter.cpp' || echo '$(srcdir)/'`moc_splitter.cpp + +libwidgets_a-moc_splitter.obj: moc_splitter.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_splitter.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_splitter.Tpo -c -o libwidgets_a-moc_splitter.obj `if test -f 'moc_splitter.cpp'; then $(CYGPATH_W) 'moc_splitter.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_splitter.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_splitter.Tpo $(DEPDIR)/libwidgets_a-moc_splitter.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_splitter.cpp' object='libwidgets_a-moc_splitter.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_splitter.obj `if test -f 'moc_splitter.cpp'; then $(CYGPATH_W) 'moc_splitter.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_splitter.cpp'; fi` + +libwidgets_a-moc_gatetime.o: moc_gatetime.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_gatetime.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_gatetime.Tpo -c -o libwidgets_a-moc_gatetime.o `test -f 'moc_gatetime.cpp' || echo '$(srcdir)/'`moc_gatetime.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_gatetime.Tpo $(DEPDIR)/libwidgets_a-moc_gatetime.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_gatetime.cpp' object='libwidgets_a-moc_gatetime.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_gatetime.o `test -f 'moc_gatetime.cpp' || echo '$(srcdir)/'`moc_gatetime.cpp + +libwidgets_a-moc_gatetime.obj: moc_gatetime.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_gatetime.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_gatetime.Tpo -c -o libwidgets_a-moc_gatetime.obj `if test -f 'moc_gatetime.cpp'; then $(CYGPATH_W) 'moc_gatetime.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_gatetime.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_gatetime.Tpo $(DEPDIR)/libwidgets_a-moc_gatetime.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_gatetime.cpp' object='libwidgets_a-moc_gatetime.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_gatetime.obj `if test -f 'moc_gatetime.cpp'; then $(CYGPATH_W) 'moc_gatetime.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_gatetime.cpp'; fi` + +libwidgets_a-moc_velocity.o: moc_velocity.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_velocity.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_velocity.Tpo -c -o libwidgets_a-moc_velocity.o `test -f 'moc_velocity.cpp' || echo '$(srcdir)/'`moc_velocity.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_velocity.Tpo $(DEPDIR)/libwidgets_a-moc_velocity.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_velocity.cpp' object='libwidgets_a-moc_velocity.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_velocity.o `test -f 'moc_velocity.cpp' || echo '$(srcdir)/'`moc_velocity.cpp + +libwidgets_a-moc_velocity.obj: moc_velocity.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_velocity.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_velocity.Tpo -c -o libwidgets_a-moc_velocity.obj `if test -f 'moc_velocity.cpp'; then $(CYGPATH_W) 'moc_velocity.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_velocity.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_velocity.Tpo $(DEPDIR)/libwidgets_a-moc_velocity.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_velocity.cpp' object='libwidgets_a-moc_velocity.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_velocity.obj `if test -f 'moc_velocity.cpp'; then $(CYGPATH_W) 'moc_velocity.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_velocity.cpp'; fi` + +libwidgets_a-moc_metronome.o: moc_metronome.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_metronome.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_metronome.Tpo -c -o libwidgets_a-moc_metronome.o `test -f 'moc_metronome.cpp' || echo '$(srcdir)/'`moc_metronome.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_metronome.Tpo $(DEPDIR)/libwidgets_a-moc_metronome.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_metronome.cpp' object='libwidgets_a-moc_metronome.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_metronome.o `test -f 'moc_metronome.cpp' || echo '$(srcdir)/'`moc_metronome.cpp + +libwidgets_a-moc_metronome.obj: moc_metronome.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_metronome.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_metronome.Tpo -c -o libwidgets_a-moc_metronome.obj `if test -f 'moc_metronome.cpp'; then $(CYGPATH_W) 'moc_metronome.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_metronome.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_metronome.Tpo $(DEPDIR)/libwidgets_a-moc_metronome.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_metronome.cpp' object='libwidgets_a-moc_metronome.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_metronome.obj `if test -f 'moc_metronome.cpp'; then $(CYGPATH_W) 'moc_metronome.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_metronome.cpp'; fi` + +libwidgets_a-moc_posedit.o: moc_posedit.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_posedit.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_posedit.Tpo -c -o libwidgets_a-moc_posedit.o `test -f 'moc_posedit.cpp' || echo '$(srcdir)/'`moc_posedit.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_posedit.Tpo $(DEPDIR)/libwidgets_a-moc_posedit.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_posedit.cpp' object='libwidgets_a-moc_posedit.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_posedit.o `test -f 'moc_posedit.cpp' || echo '$(srcdir)/'`moc_posedit.cpp + +libwidgets_a-moc_posedit.obj: moc_posedit.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_posedit.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_posedit.Tpo -c -o libwidgets_a-moc_posedit.obj `if test -f 'moc_posedit.cpp'; then $(CYGPATH_W) 'moc_posedit.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_posedit.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_posedit.Tpo $(DEPDIR)/libwidgets_a-moc_posedit.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_posedit.cpp' object='libwidgets_a-moc_posedit.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_posedit.obj `if test -f 'moc_posedit.cpp'; then $(CYGPATH_W) 'moc_posedit.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_posedit.cpp'; fi` + +libwidgets_a-moc_pitchedit.o: moc_pitchedit.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_pitchedit.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_pitchedit.Tpo -c -o libwidgets_a-moc_pitchedit.o `test -f 'moc_pitchedit.cpp' || echo '$(srcdir)/'`moc_pitchedit.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_pitchedit.Tpo $(DEPDIR)/libwidgets_a-moc_pitchedit.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_pitchedit.cpp' object='libwidgets_a-moc_pitchedit.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_pitchedit.o `test -f 'moc_pitchedit.cpp' || echo '$(srcdir)/'`moc_pitchedit.cpp + +libwidgets_a-moc_pitchedit.obj: moc_pitchedit.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_pitchedit.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_pitchedit.Tpo -c -o libwidgets_a-moc_pitchedit.obj `if test -f 'moc_pitchedit.cpp'; then $(CYGPATH_W) 'moc_pitchedit.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_pitchedit.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_pitchedit.Tpo $(DEPDIR)/libwidgets_a-moc_pitchedit.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_pitchedit.cpp' object='libwidgets_a-moc_pitchedit.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_pitchedit.obj `if test -f 'moc_pitchedit.cpp'; then $(CYGPATH_W) 'moc_pitchedit.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_pitchedit.cpp'; fi` + +libwidgets_a-moc_pitchlabel.o: moc_pitchlabel.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_pitchlabel.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_pitchlabel.Tpo -c -o libwidgets_a-moc_pitchlabel.o `test -f 'moc_pitchlabel.cpp' || echo '$(srcdir)/'`moc_pitchlabel.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_pitchlabel.Tpo $(DEPDIR)/libwidgets_a-moc_pitchlabel.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_pitchlabel.cpp' object='libwidgets_a-moc_pitchlabel.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_pitchlabel.o `test -f 'moc_pitchlabel.cpp' || echo '$(srcdir)/'`moc_pitchlabel.cpp + +libwidgets_a-moc_pitchlabel.obj: moc_pitchlabel.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_pitchlabel.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_pitchlabel.Tpo -c -o libwidgets_a-moc_pitchlabel.obj `if test -f 'moc_pitchlabel.cpp'; then $(CYGPATH_W) 'moc_pitchlabel.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_pitchlabel.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_pitchlabel.Tpo $(DEPDIR)/libwidgets_a-moc_pitchlabel.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_pitchlabel.cpp' object='libwidgets_a-moc_pitchlabel.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_pitchlabel.obj `if test -f 'moc_pitchlabel.cpp'; then $(CYGPATH_W) 'moc_pitchlabel.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_pitchlabel.cpp'; fi` + +libwidgets_a-moc_poslabel.o: moc_poslabel.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_poslabel.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_poslabel.Tpo -c -o libwidgets_a-moc_poslabel.o `test -f 'moc_poslabel.cpp' || echo '$(srcdir)/'`moc_poslabel.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_poslabel.Tpo $(DEPDIR)/libwidgets_a-moc_poslabel.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_poslabel.cpp' object='libwidgets_a-moc_poslabel.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_poslabel.o `test -f 'moc_poslabel.cpp' || echo '$(srcdir)/'`moc_poslabel.cpp + +libwidgets_a-moc_poslabel.obj: moc_poslabel.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_poslabel.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_poslabel.Tpo -c -o libwidgets_a-moc_poslabel.obj `if test -f 'moc_poslabel.cpp'; then $(CYGPATH_W) 'moc_poslabel.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_poslabel.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_poslabel.Tpo $(DEPDIR)/libwidgets_a-moc_poslabel.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_poslabel.cpp' object='libwidgets_a-moc_poslabel.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_poslabel.obj `if test -f 'moc_poslabel.cpp'; then $(CYGPATH_W) 'moc_poslabel.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_poslabel.cpp'; fi` + +libwidgets_a-moc_filedialog.o: moc_filedialog.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_filedialog.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_filedialog.Tpo -c -o libwidgets_a-moc_filedialog.o `test -f 'moc_filedialog.cpp' || echo '$(srcdir)/'`moc_filedialog.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_filedialog.Tpo $(DEPDIR)/libwidgets_a-moc_filedialog.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_filedialog.cpp' object='libwidgets_a-moc_filedialog.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_filedialog.o `test -f 'moc_filedialog.cpp' || echo '$(srcdir)/'`moc_filedialog.cpp + +libwidgets_a-moc_filedialog.obj: moc_filedialog.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_filedialog.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_filedialog.Tpo -c -o libwidgets_a-moc_filedialog.obj `if test -f 'moc_filedialog.cpp'; then $(CYGPATH_W) 'moc_filedialog.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_filedialog.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_filedialog.Tpo $(DEPDIR)/libwidgets_a-moc_filedialog.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_filedialog.cpp' object='libwidgets_a-moc_filedialog.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_filedialog.obj `if test -f 'moc_filedialog.cpp'; then $(CYGPATH_W) 'moc_filedialog.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_filedialog.cpp'; fi` + +libwidgets_a-moc_sigedit.o: moc_sigedit.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_sigedit.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_sigedit.Tpo -c -o libwidgets_a-moc_sigedit.o `test -f 'moc_sigedit.cpp' || echo '$(srcdir)/'`moc_sigedit.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_sigedit.Tpo $(DEPDIR)/libwidgets_a-moc_sigedit.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_sigedit.cpp' object='libwidgets_a-moc_sigedit.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_sigedit.o `test -f 'moc_sigedit.cpp' || echo '$(srcdir)/'`moc_sigedit.cpp + +libwidgets_a-moc_sigedit.obj: moc_sigedit.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_sigedit.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_sigedit.Tpo -c -o libwidgets_a-moc_sigedit.obj `if test -f 'moc_sigedit.cpp'; then $(CYGPATH_W) 'moc_sigedit.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_sigedit.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_sigedit.Tpo $(DEPDIR)/libwidgets_a-moc_sigedit.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_sigedit.cpp' object='libwidgets_a-moc_sigedit.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_sigedit.obj `if test -f 'moc_sigedit.cpp'; then $(CYGPATH_W) 'moc_sigedit.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_sigedit.cpp'; fi` + +libwidgets_a-moc_shortcutconfig.o: moc_shortcutconfig.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_shortcutconfig.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_shortcutconfig.Tpo -c -o libwidgets_a-moc_shortcutconfig.o `test -f 'moc_shortcutconfig.cpp' || echo '$(srcdir)/'`moc_shortcutconfig.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_shortcutconfig.Tpo $(DEPDIR)/libwidgets_a-moc_shortcutconfig.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_shortcutconfig.cpp' object='libwidgets_a-moc_shortcutconfig.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_shortcutconfig.o `test -f 'moc_shortcutconfig.cpp' || echo '$(srcdir)/'`moc_shortcutconfig.cpp + +libwidgets_a-moc_shortcutconfig.obj: moc_shortcutconfig.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_shortcutconfig.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_shortcutconfig.Tpo -c -o libwidgets_a-moc_shortcutconfig.obj `if test -f 'moc_shortcutconfig.cpp'; then $(CYGPATH_W) 'moc_shortcutconfig.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_shortcutconfig.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_shortcutconfig.Tpo $(DEPDIR)/libwidgets_a-moc_shortcutconfig.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_shortcutconfig.cpp' object='libwidgets_a-moc_shortcutconfig.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_shortcutconfig.obj `if test -f 'moc_shortcutconfig.cpp'; then $(CYGPATH_W) 'moc_shortcutconfig.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_shortcutconfig.cpp'; fi` + +libwidgets_a-moc_shortcutcapturedialog.o: moc_shortcutcapturedialog.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_shortcutcapturedialog.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_shortcutcapturedialog.Tpo -c -o libwidgets_a-moc_shortcutcapturedialog.o `test -f 'moc_shortcutcapturedialog.cpp' || echo '$(srcdir)/'`moc_shortcutcapturedialog.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_shortcutcapturedialog.Tpo $(DEPDIR)/libwidgets_a-moc_shortcutcapturedialog.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_shortcutcapturedialog.cpp' object='libwidgets_a-moc_shortcutcapturedialog.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_shortcutcapturedialog.o `test -f 'moc_shortcutcapturedialog.cpp' || echo '$(srcdir)/'`moc_shortcutcapturedialog.cpp + +libwidgets_a-moc_shortcutcapturedialog.obj: moc_shortcutcapturedialog.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_shortcutcapturedialog.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_shortcutcapturedialog.Tpo -c -o libwidgets_a-moc_shortcutcapturedialog.obj `if test -f 'moc_shortcutcapturedialog.cpp'; then $(CYGPATH_W) 'moc_shortcutcapturedialog.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_shortcutcapturedialog.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_shortcutcapturedialog.Tpo $(DEPDIR)/libwidgets_a-moc_shortcutcapturedialog.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_shortcutcapturedialog.cpp' object='libwidgets_a-moc_shortcutcapturedialog.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_shortcutcapturedialog.obj `if test -f 'moc_shortcutcapturedialog.cpp'; then $(CYGPATH_W) 'moc_shortcutcapturedialog.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_shortcutcapturedialog.cpp'; fi` + +libwidgets_a-moc_combobox.o: moc_combobox.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_combobox.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_combobox.Tpo -c -o libwidgets_a-moc_combobox.o `test -f 'moc_combobox.cpp' || echo '$(srcdir)/'`moc_combobox.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_combobox.Tpo $(DEPDIR)/libwidgets_a-moc_combobox.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_combobox.cpp' object='libwidgets_a-moc_combobox.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_combobox.o `test -f 'moc_combobox.cpp' || echo '$(srcdir)/'`moc_combobox.cpp + +libwidgets_a-moc_combobox.obj: moc_combobox.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_combobox.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_combobox.Tpo -c -o libwidgets_a-moc_combobox.obj `if test -f 'moc_combobox.cpp'; then $(CYGPATH_W) 'moc_combobox.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_combobox.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_combobox.Tpo $(DEPDIR)/libwidgets_a-moc_combobox.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_combobox.cpp' object='libwidgets_a-moc_combobox.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_combobox.obj `if test -f 'moc_combobox.cpp'; then $(CYGPATH_W) 'moc_combobox.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_combobox.cpp'; fi` + +libwidgets_a-moc_aboutbox_impl.o: moc_aboutbox_impl.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_aboutbox_impl.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_aboutbox_impl.Tpo -c -o libwidgets_a-moc_aboutbox_impl.o `test -f 'moc_aboutbox_impl.cpp' || echo '$(srcdir)/'`moc_aboutbox_impl.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_aboutbox_impl.Tpo $(DEPDIR)/libwidgets_a-moc_aboutbox_impl.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_aboutbox_impl.cpp' object='libwidgets_a-moc_aboutbox_impl.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_aboutbox_impl.o `test -f 'moc_aboutbox_impl.cpp' || echo '$(srcdir)/'`moc_aboutbox_impl.cpp + +libwidgets_a-moc_aboutbox_impl.obj: moc_aboutbox_impl.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_aboutbox_impl.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_aboutbox_impl.Tpo -c -o libwidgets_a-moc_aboutbox_impl.obj `if test -f 'moc_aboutbox_impl.cpp'; then $(CYGPATH_W) 'moc_aboutbox_impl.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_aboutbox_impl.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_aboutbox_impl.Tpo $(DEPDIR)/libwidgets_a-moc_aboutbox_impl.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_aboutbox_impl.cpp' object='libwidgets_a-moc_aboutbox_impl.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_aboutbox_impl.obj `if test -f 'moc_aboutbox_impl.cpp'; then $(CYGPATH_W) 'moc_aboutbox_impl.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_aboutbox_impl.cpp'; fi` + +libwidgets_a-moc_aboutbox.o: moc_aboutbox.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_aboutbox.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_aboutbox.Tpo -c -o libwidgets_a-moc_aboutbox.o `test -f 'moc_aboutbox.cpp' || echo '$(srcdir)/'`moc_aboutbox.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_aboutbox.Tpo $(DEPDIR)/libwidgets_a-moc_aboutbox.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_aboutbox.cpp' object='libwidgets_a-moc_aboutbox.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_aboutbox.o `test -f 'moc_aboutbox.cpp' || echo '$(srcdir)/'`moc_aboutbox.cpp + +libwidgets_a-moc_aboutbox.obj: moc_aboutbox.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_aboutbox.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_aboutbox.Tpo -c -o libwidgets_a-moc_aboutbox.obj `if test -f 'moc_aboutbox.cpp'; then $(CYGPATH_W) 'moc_aboutbox.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_aboutbox.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_aboutbox.Tpo $(DEPDIR)/libwidgets_a-moc_aboutbox.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_aboutbox.cpp' object='libwidgets_a-moc_aboutbox.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_aboutbox.obj `if test -f 'moc_aboutbox.cpp'; then $(CYGPATH_W) 'moc_aboutbox.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_aboutbox.cpp'; fi` + +libwidgets_a-moc_songinfo.o: moc_songinfo.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_songinfo.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_songinfo.Tpo -c -o libwidgets_a-moc_songinfo.o `test -f 'moc_songinfo.cpp' || echo '$(srcdir)/'`moc_songinfo.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_songinfo.Tpo $(DEPDIR)/libwidgets_a-moc_songinfo.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_songinfo.cpp' object='libwidgets_a-moc_songinfo.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_songinfo.o `test -f 'moc_songinfo.cpp' || echo '$(srcdir)/'`moc_songinfo.cpp + +libwidgets_a-moc_songinfo.obj: moc_songinfo.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_songinfo.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_songinfo.Tpo -c -o libwidgets_a-moc_songinfo.obj `if test -f 'moc_songinfo.cpp'; then $(CYGPATH_W) 'moc_songinfo.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_songinfo.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_songinfo.Tpo $(DEPDIR)/libwidgets_a-moc_songinfo.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_songinfo.cpp' object='libwidgets_a-moc_songinfo.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_songinfo.obj `if test -f 'moc_songinfo.cpp'; then $(CYGPATH_W) 'moc_songinfo.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_songinfo.cpp'; fi` + +libwidgets_a-moc_didyouknow.o: moc_didyouknow.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_didyouknow.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_didyouknow.Tpo -c -o libwidgets_a-moc_didyouknow.o `test -f 'moc_didyouknow.cpp' || echo '$(srcdir)/'`moc_didyouknow.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_didyouknow.Tpo $(DEPDIR)/libwidgets_a-moc_didyouknow.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_didyouknow.cpp' object='libwidgets_a-moc_didyouknow.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_didyouknow.o `test -f 'moc_didyouknow.cpp' || echo '$(srcdir)/'`moc_didyouknow.cpp + +libwidgets_a-moc_didyouknow.obj: moc_didyouknow.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_didyouknow.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_didyouknow.Tpo -c -o libwidgets_a-moc_didyouknow.obj `if test -f 'moc_didyouknow.cpp'; then $(CYGPATH_W) 'moc_didyouknow.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_didyouknow.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_didyouknow.Tpo $(DEPDIR)/libwidgets_a-moc_didyouknow.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_didyouknow.cpp' object='libwidgets_a-moc_didyouknow.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_didyouknow.obj `if test -f 'moc_didyouknow.cpp'; then $(CYGPATH_W) 'moc_didyouknow.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_didyouknow.cpp'; fi` + +libwidgets_a-moc_checkbox.o: moc_checkbox.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_checkbox.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_checkbox.Tpo -c -o libwidgets_a-moc_checkbox.o `test -f 'moc_checkbox.cpp' || echo '$(srcdir)/'`moc_checkbox.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_checkbox.Tpo $(DEPDIR)/libwidgets_a-moc_checkbox.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_checkbox.cpp' object='libwidgets_a-moc_checkbox.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_checkbox.o `test -f 'moc_checkbox.cpp' || echo '$(srcdir)/'`moc_checkbox.cpp + +libwidgets_a-moc_checkbox.obj: moc_checkbox.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_checkbox.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_checkbox.Tpo -c -o libwidgets_a-moc_checkbox.obj `if test -f 'moc_checkbox.cpp'; then $(CYGPATH_W) 'moc_checkbox.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_checkbox.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_checkbox.Tpo $(DEPDIR)/libwidgets_a-moc_checkbox.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_checkbox.cpp' object='libwidgets_a-moc_checkbox.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_checkbox.obj `if test -f 'moc_checkbox.cpp'; then $(CYGPATH_W) 'moc_checkbox.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_checkbox.cpp'; fi` + +libwidgets_a-moc_vscale.o: moc_vscale.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_vscale.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_vscale.Tpo -c -o libwidgets_a-moc_vscale.o `test -f 'moc_vscale.cpp' || echo '$(srcdir)/'`moc_vscale.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_vscale.Tpo $(DEPDIR)/libwidgets_a-moc_vscale.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_vscale.cpp' object='libwidgets_a-moc_vscale.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_vscale.o `test -f 'moc_vscale.cpp' || echo '$(srcdir)/'`moc_vscale.cpp + +libwidgets_a-moc_vscale.obj: moc_vscale.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_vscale.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_vscale.Tpo -c -o libwidgets_a-moc_vscale.obj `if test -f 'moc_vscale.cpp'; then $(CYGPATH_W) 'moc_vscale.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_vscale.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_vscale.Tpo $(DEPDIR)/libwidgets_a-moc_vscale.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_vscale.cpp' object='libwidgets_a-moc_vscale.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_vscale.obj `if test -f 'moc_vscale.cpp'; then $(CYGPATH_W) 'moc_vscale.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_vscale.cpp'; fi` + +libwidgets_a-moc_action.o: moc_action.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_action.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_action.Tpo -c -o libwidgets_a-moc_action.o `test -f 'moc_action.cpp' || echo '$(srcdir)/'`moc_action.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_action.Tpo $(DEPDIR)/libwidgets_a-moc_action.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_action.cpp' object='libwidgets_a-moc_action.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_action.o `test -f 'moc_action.cpp' || echo '$(srcdir)/'`moc_action.cpp + +libwidgets_a-moc_action.obj: moc_action.cpp +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_action.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_action.Tpo -c -o libwidgets_a-moc_action.obj `if test -f 'moc_action.cpp'; then $(CYGPATH_W) 'moc_action.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_action.cpp'; fi` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_action.Tpo $(DEPDIR)/libwidgets_a-moc_action.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_action.cpp' object='libwidgets_a-moc_action.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_action.obj `if test -f 'moc_action.cpp'; then $(CYGPATH_W) 'moc_action.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_action.cpp'; fi` + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-am +all-am: Makefile $(LIBRARIES) +installdirs: +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +clean: clean-am + +clean-am: clean-generic clean-libtool clean-noinstLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: all check install install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-noinstLIBRARIES ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags uninstall uninstall-am + + +de: + @for base in $(MOCFILES); do echo -e "\t$${base}.cpp $${base}.h \\"; done + +nde: + @for base in $(MOCFILES); do echo -e "\tmoc_$${base}.cpp \\"; done + +.ui.o: %.h + $(UIC) -L $(top_srcdir)/muse/widgets -o $*.cpp -impl $*.h $*.ui + $(MOC) $*.h >> $*.cpp + $(CXXCOMPILE) -c $*.cpp -o $*.o + $(RM) $*.cpp moc_$*.cpp moc_$*.o + +.ui.lo: %.h + $(UIC) -L $(top_srcdir)/muse/widgets -o $*.cpp -impl $*.h $*.ui + $(MOC) $*.h >> $*.cpp + $(LTCXXCOMPILE) -c $*.cpp -o $*.lo + $(RM) $*.cpp moc_$*.cpp moc_$*.lo moc_$*.o + +moc_%.cpp: %.h + $(MOC) $< -o $@ + +%.h: %.ui + $(UIC) -o $@ $< +# $(UIC) -L $(top_srcdir)/muse/widgets -o $@ $< + +%.non-libtool.cpp: %.cpp + $(LN_S) $*.cpp $*.non-libtool.cpp + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/muse2/muse/widgets/aboutbox.ui b/muse2/muse/widgets/aboutbox.ui new file mode 100644 index 00000000..2dadb447 --- /dev/null +++ b/muse2/muse/widgets/aboutbox.ui @@ -0,0 +1,129 @@ + +AboutBox + + + AboutBox + + + + 0 + 0 + 377 + 525 + + + + + 7 + 7 + 0 + 0 + + + + + 254 + 254 + 254 + + + + + 2 + 2 + 2 + + + + AboutBox + + + + unnamed + + + + layout1 + + + + unnamed + + + + pixmapLabel1 + + + + 7 + 0 + 0 + 0 + + + + + 32767 + 32753 + + + + image0 + + + false + + + AlignCenter + + + + + versionLabel + + + Version 1.1rc2 + + + + + textLabel1 + + + (C) Copyright 1999-2010 Werner Schweer and others. +See http://www.muse-sequencer.org for new versions and +more information. + +Published under the GNU Public License + + + + + doneHere + + + &Keep On Rocking! + + + Alt+K + + + + + + + + + 789c44ddc772f250bbb5ebfe3a8aaf967aab76b10021091abbe19c03c679d76e08916c1c5f67ff27ff4b3cf71836bdab6498595333e97fffe73fd7a747fff99ffffdafb7f7f2fdaefa4fb528fffde77f261f8f8f3fffdffffffffe9ffffaefb4ddfe4fda1efc276bf77aff49fffbfff9afff1ebeb7fe53fd2769affe025e56d011b4ca04e8e88ad2d0595d91ecada0ab2b5ae303435c713800ba5c71f761e03bde0ddd156c7cad20f5974eb70cfccb0dc077248f7b86f88e9d1190ea8a3fe8465c5e0dabf4681d4f57d0f3af54678042babd0bf0a5ad837743fcecfe8d21bef44c57f480fb81a1171001cbfc2bf325a05f395e18ba11974b437ce94107e8f12ffbf78634fe65d7103f7bd805b236c5616ac85657ecfdac2077c0a69b800296ec1b22fa278f404fa9fe6b88907ebf0399923033c4770caf0cab9026f7cf404ed0f73e0c11d272d79047198b5f291cd2df6d43fccae41fd0038e3e0d11d217fd8b43ba6e20a41b0612f9c81001dbde01727d476588ef48760d6443cf10b13d3b32c497ee3f1922b6870a7a11307cff3114ab2bb6d215f41dfd6a0428faa35b80b8b40e9f01057dfc61887f294e0d447fcb10211dde000571195e1ae28af33f88b8ec568608fada00e803cb96a1bf827ff12f03c7e560cb107179fa069473bb978608fac339a0543f38060ad5fd3d437cc7e0d710ffb27b6e88b8f4bf0c11f4834d4071b9fe6788b86ce4c0005826864140fc6ce9b8942d43c4f6686188801df50132aa95fd1ae28a91ae505cb8159475c0e2578eef0c7145f16320a3fe0103e0e6c6d08ff2b16d88b86cbd0165fccbf03d3144f4bb7343fccbfddf156534f493158c1dfde70a506c0ffb8608faec1850e4764a43e45c716e88b8f43b8608d8f636305063706188a27d3c31c477ec3e0025bf72f16aa0385c1ae257b21b4344bfb73044f43bff80b1ae3834c415cbae611c0526fea572027d760c91405f7b808ac3d6a7212237d6bf28fabb27069aad0a28d5167e1848e4d410b1cdf70c1197fc1718ab7c7c1bfa011343fc4b766758453f692540457af4df0de3f88ecc50adae58c45d6cf257827e0c11b9bb1c28b862961ae28afd0ea012747e0fa87c1c1486488f834343fc4b79039424f25ecf103f3b783390847786488fe3013056237d6188709c7d19221ce73d4384a33d032abef4edc91045ea74dd1049981c00f5270a4c94a0a913e82805d4a01c6e1be87f7c034a8fe218506cab1f80c8b5ce370c1197c1998190f6818aef489f0d11b9fea921fee5ec0d98a88a5d1aa248651f86f897616658453f4912604a02f52f0c9140cb1bc374050f5182664eb1d725e014fb32448a8da680cad8bf0303e971082809270225e17403a880ed2d0339776a882fcdfeae88f4b83a03266ac6bf0c9184835b43a458911b2281f21930e54b07134324d0d10b305312de1a662b785c45ae7e8a508abd6d1a22818a3540cdd6e8c110571cfe0177f50340ad76ffc94025bc0168a55ac58721a27f5a014ae4fec010b13d2a81093f7b3930f02beb86551226f73fc0942b6efa060aee3f43fccae1be21b2217b3444220f7f8119bfd2da374446fd1c18a671c5d8b0ca86647c1cd05064545bd08907bc8f886dc7f9727f06381b66065acb29a06cc8f701a57affd110d13f390554d5b7f52f13b5a70f86488f510e4cf995b35303b7e85b4394c23c0566fccaf0c1c01d68c31049f87d678854bfda0a708aadef0b22c592c77ba0c3157bdb02d274d931440ff66875c3e9749dc8d50450221f7501ddb3fb6343a4face21c0bd21b91b19a29377b70154aa1e2706eeea97804a72ffdb10a9fea6ef98ea297a6ce01ef56e201b3e0d91a6a31f60465c36cf0d54a067037d87bf2b6872fe19e24b3f8686c8ec51d71039378802d36d2a7b64d4a181862d3344cef59f05e4dced19a0acdcb830c46375eb0be892b70f5d437415fa516f53e7ede40850deae278648d3e91898d0162eaf01a56901340d6864c3ae21a2ffdd3144e4d21ba0a3fed8a321bef4f0d510697aa32f55f4074ba04b0b339b0a887e561822fa2f7b400a3c5f19a248ddadeeea9d9ed363bc6fe0b6f603a8a774b863a007fb0751d647ef806e8dfd4d0365fd0cd09db0b83044a1cbcf01b5c9a30a98e94b878648c2ad68837a75aac7159d63437ce968d71019d53b3544465d8e818e6ad48581eaf16a8880ed1097a6e6c6153b02f2e5f1c910d910232435285fbe1786c8977f64434351e7c68628961f715bcb9c519357c0bdbe6dc03d9429a0543fb9334402156340699aff4144ee291a83ac4eb108473634c41567e7067a283f40877fe94f0ddca2370c11b08b1343e44b7747406d38bb05baba9dfc4184637f1348c9864106f4f88ec3730383195d039dbc3990013f3706ea4bdc9173a7fae20950aa1f2c0d513df67243447f780b4cb8221b19e28ac1ab81fa72034cd5a0bc013375f14f0c9195dbd143c9950d49ab344446a5178648f57c1be8aa0bf760a02f9502293f3bf81190ea377f1089dcdb0528dac96207c8b8e2e8ca1085ff67df10415ffe33acb221b9d7bfe46454fa62888c5afb3244be3c0514ceb9e903a09c5ba686b8cd4f8780326aab6b2081b6017536f3134394d35e0770cf313a02459da68c296d1ae23b6e7a020aeec52f907245fa07f12b0f4f40a6ac7c1370f39c24066e16992152fd95f4709a66df061a5822d7d00a7ef70c9140f791627da7e9cbae21aed87f0194a6c58981c2df0194a6d91f50f8e386d377efe2ec0e50d1dedb02badcc5de6f0d91403b09907245be03f454d62b0129f67908a858b6f6809c8cea1d0105699ade1af8973343fc6c6f6c88144b3f803e69ba5e1a22815ea3173c709a8ebb80d2f4e0d34093b309a8473f3830440ff67e62e0617501b8a37862884277fc07d1187cc613cec0699ace0424d0d12bd023606bb70212797d0f50293cdc020a25f2ad81d6e1d54007fed010697a4bf49da645658870fce84bebcf0a6611b9d269ba5319e25f0efa80d2747fdf405ffb165012e64b03a32c9140a5fb96831b435c71b1017474cfbe34c48d6fd0067427ec9c19a2e778b70ea48474fb10e8e991674b407371776e60a45790455c92bb3343046c632ea0f0f7896d7d53a293f76488c8f5770d51919f15d29cef78bf314466cf3e80829096978698274c32033345bf409fbb47ccdfd630a0385cec18e8a12c0d9173070740a92bc686b8623c37446cd7a2128e5d821e0f0c54e419a01294dc1ae28a5e1fd0e3dbeedc40911a1948e4a80d63f782fb3f809e3db253400566b80ba4348ec7ba42e5e3f6454025fc770968d2efac3430333215a8b7f505e404fdf6c810ed7a457a3477cbb89d9c037d75153e0c4ceadc03037a17b389819e4169a0c53d3344383a6f40a9e6e2d3c014c5df15f4c7ee0c91c8374aa031f0bb6f88b23e8b46ba72de56034079bbff6ce057a23854cecaf41850ce8dd601f50c86952192f0e007d0bce9153f5b27323d947503835dfa0e1ad8d65901f4b9bd8e1241a45872ff020cc8a803e2d2e4ee0abef60da469cb4049ae0cc4f6c8c0a3d7015071c5c5a381598d3d4394f52aeafec489bc7e65889fbd8ae673d20c76c6cf6e1bf8954dc0cf845f860858fa07f1b33d7d6917384f0c9173dd2720d5b3e903d023e7325da10ab47f0a68a6796769e011700b50cebd3d02347dadc13ea0a6efb0004a2a5049023535376ac3bd81b1adc4c08851cb10e97135022af236fd3650e82686f897f531507f56f014756eea9c5bfe18e24b0fa30d9afae6f9f068a00f3337c4cf5e1e00f4b593872f03a33d25903289b17c31444615bf001995dcaf01f4b55bb77b00ddc024968cac20f265ad0ff4d516de19180a1f182281ceb70c8c07b505eaafa7c040d30bbb82c8b9a435054acad891ae2819614d4e0dc4e59f2112f9f00318eb59ecc910a530cf0d91c8d30aa8f88e74cb1021cdbf0c910d47ba62c215e703435c71facf1005e6bc034cb9e2e6c210576cfe4164e57594c2998a54721f793b73919af70c34b0fccb5f7fecc91021ed3d02aac85fdf40ae9189d4105d96fb29a0f2b1f70e686e7e2333d06c3d19e2e639fd1050e8961b86f8d2dbb9216a7676040cf88ee4c3c0e0ce3f60ac11d69e8106e5d1c063d39e81c9fa04a8f484931968606706da0f65c3842fbdd93344dea64aa0a9aef836c477dcae1be25f0e4e0c91fba70fc08cf2b17364882b763b86c8cae7552bb55af8173f7bf70fd0bd617fd7c0b4e004d0c8d5bc0da494b1e3074384b43300327a5bf906408169a505a03bf2c6a580cc3e9f035a769277012da248078648b19b73c059a99fade86ddde85f267a8eea19984adb3550914f0065d4d38f81aed30e30e33b8efe19e23bf64b03637d1f8659dcf7ef039aaf8dacfc83c8b9642ee8469a2e223d3aceb979c710b5e1fe10d0c0ccd58681ae75cb4047e01348f57036027ac0e9259001b7e78608e94d0e685461f00e1464f6c10ba069c1e1be805a995e1ae28aed23401387c9b581e78639a025349d6b034f6bb9813eccab8076bd6803baef770f0cf1a55da5c78472da7f31c4af1cbe0153cad8516588a18a4501a87cf4fe808a3c0d68ca6114984f43dc3ca75706ee84eb02cac79efea5feace0dfaa1deb765d60ee4f0d3cf17d002a1fc508d070e969dbc05dac03f4801bfd0bc52129df001587f7b1210276be07149a187a00fafccbfa8121527de71cd06cc241cfc0e3db8d40637def06a69e1517f50bcf7f0c8c291d03cafd74084c3444d035c4b347590153aed87d0466f11dc93c2a61b769a7e2674f0c91d9c73343d49763bea3294351c6e64097bc3d9818a2819daf6ed1ddd45979f80868c835bb36b012e1c81059795b023ddd0a04999ec4734304ecfcdbc0628e1d20d7ca9d1303b768fd4ba15edf1e30d077f405b40eff5a8066f0fa1f801662dc1c1968d7d70daba027ad6b032d9d0236a1e03e0e05f42d97130329a6a04f35c8f466885f99bd03330aeef6a681c7d9e780e6d61701fb67886a7a746988b86cf3b34db314578c0cd1e79fe85fba2a30b7404a81593f3744397d8c26b8e702b3380654606ea6067a3957806e05833ba024a3bedb80aad8485faab9a4cb6d03cf0d0930251b5afa95298dc1cdbe21b261fc08cce88e4ed70c118e76c4b6d77449e23b6e0d3100b0e81b18b91a182260df1f4047b7f973436443775f4013fc6f027495515f8648b1a36d01ff7298022915f9be05d49fa8d9abde673773bedcbd1a18724d801e90df1b221c83125045ce0b4304ecb2636042e60228541b2aa0afe50dfa8e92b27e931922d52f7b803adfa71b4045f9f8c801cf58fd33d00d3c34709b6f19a8eaa5212ae1bd424a094a5a1f0616923f01330dcbc53d2a6bbabdd12891c84d9724728ef4686e17d1d0770d918405e9e13a77f169882f3d242e4dfe47f3393644c0ee360d317c3cd7cf66d4dbfd0743a4e93cc2f137c5797f02a838f45f0d8c197c022a0eb76b86884befc7100d4ab60da819bfda37c41597c706e6c4db8046470789809a7d3e0274df3f3d05181d6d0dce81b196e12c04b4a7a32140bb9e3c5e019ef37c1668706717d0da8d4ba598baf8477147ce9b679cc8864ba0ab66bc6588667c561a18c824c5eab63fbe74ab67889fddff0306ddbe0c0c1154020accbe7eb6c715c3a980f231226f5d3e0e3680fab38259dcb40a978fee8621c2b1bb0032aee84c0d2c8c4d0d3c156c039a19b91d19c8971f4314989b53a0d092a24b034f165d40634ad9bb8142a7efd038eed52e506aa8e2c210ad54bb0d54fccbeba581d9c831a091efe200d034d8e0ca40368c0c2caf8c7b76d1d5b293d144a081ff63402bff0e47860858f7db40deee19e84b1d025d06cc1e124384e3fe52c00de7483f9b72e31b3e1a98d5383470e3bb3190b78a4b4ff7b90d03f7b9074364d44926a09c1eae0119ade5d11990ab2d7c37302fa67014c07edb1039f71485bfefa2fd7a07a8243f9f1b7816db31301b3901d4d2757a86884ba703e8f9763402d48ee5fa8e01f7cafb0c60d4ba55e88a31f0fb616099a782ae52787128a0c01cff0334e23c5a1a62783056cb3540465d005d4dd7f68f0c0c1f0f004a6132f906ba04ece24940911afe002a52fb5f0646267201993d5c037a348efb278608d8de868115886d20a3813d4d01958ff31740e563b46f88f2719c007da02c0d6ced8a12347081591c19221ce343402d5d6f6860815ddf4081e9022a30d99e817be526d0e73bae6f8001ffd22f05e47ed1012aa0f764602dcb12d0e8d75e94f54157d33e57b7021e24ca31a0a53ce7cf06c61d7e81942f4d66408fdc1fbd08b8696d7d03191df8e9d8c08def11c869b6e6f702cad82949e88cda575ceacf0aeee2674b67d4eb1c5046f5fb067a391f80ee4045668854ef2e01e54b2735447adc4e055aee215046b5af80523f3b0234489d9d191864ba032aada83a35b025e2de10997df30b68d4693e04665a121075aeec6aaea0bf2de06773d2a3aba981d14240bb3ef804bada35f00468f95c3631b0c1f018e811f4c30e905160b6370cd1189c0e0594a0db6720d72d29070654e4ce9d81c9368a43f35901833b631787c35d43446eeb0b2874c59e81e80f01158734374481b96801cafd0bfd8bb261271aa57157c372a79b0212f9e009d0386ebe6660c6fb01609d52b2480c0ca9ed1ba27cf4de0056ccb4d23d4324f2e50da07c393805f208faf07dd7104f5a77774041cd5ebc00fda8b7c9fd81819b96ae28c9b9dd19507f56f0100d7df59751df8648a072075046fdbb3250915f0cb4b8ba423997ff33b0ba54a016f7ac2ba0125eed01ba673f281c1312f935ea7ed5d5cae14381b272edd5c0b4cfa5815bf41da0e7b9de8181a1ac998151b8434055ac3d07b42e787b1d202b5bfb6343548fb3095070c5edaf81816e85a3a40b777a0f54e4dceea981e55111b98973eedf185046250340f972fe64e0c67705285f4eae0d7404f601cd129fad0b34293c039473bd0450037bd30118fc6b75360c34b043409baeae5e0554a08f5360a67e10dfd1d56a978d5743a4d8b5408f5efd3703cf0da9206ec049750468c07d7a2dd048cda681a7c60c50de1ef70d91fb9b2472dd55e48edc0206dc91ef1682a8c849f264a047af70948c5c9d26061a941ca83f5109a34d9eba3894b7808a43efd740456e032a0ebd6f034304fbc05809f42a50a7e6d4c0f4641750714837001587db1340a392dbf1743275deee3c005a8f7b5819e8e30e010daa1cdd0af4b03a03346fda5d1822912f7700ad603e7b35709b272e5d2d15dd7d3210b02360a0f9ca774304ec2711743952e60e28e98f1d2f818a667ce31f30256fb73e0cf1a5cfd1839d396f998098396fd7de014de72fbf0d34d23d01d97019d563e671dccd6d43c4f66c0874553d041a65f94800e5dc3e3fdbd54340de32704bba0334a775b40968c5eec9d2c0aabd025022dfee03152335fb0a7afd59c1d32a3dd2b6d3e3e1d6c0e37d0ad0f425492e20810a7d8746d0ce4b01e9311e18222ef92ea0dad0db04265cd17d0868960d44aa6f1968e9ce018d9f8e041a1bdf3e0632d597d210f5e5fcc2c004c48f8181880f405d854165e026fe0268ae717d04686af166d3c0c2fa53032548bfa23568fbaf8678ce9eaf03a53a46fa978a1eecd11b30a53bba9705349fb83546f43b2eebd5102881ed4b4364f6f2544046f5e7809aad411fd098c166c4b6a37c49c60b40e3da7b29a06c18b5057cc7f71ba075d245cbc0f44202a88336b83444293ccc051a215907faaa5147806601cf8e0d6cb6ae0c742553433406478f80d6c18e3a404525bc2b047458c77bc08c8c3a8c52b8da941810b1ed3aa3ee9e0165d45d66606a7101a8129eac0bc8a8610ee8693e7f01a65a37cecfbaa56bdf021d2df19e005d6e16fb7780326af718d05adaeeccc060c6dcc09908fa593fdff60ce4dc09a0479ec3b18133223601adc9bbb80034f33efd35d07e0c808a9189d809ba8268fa1ebe8109bdcf0e895c5324f2f6a72065af46fc6cea8c8a15332b887f79b802c65cb1fc32d0c01e0b488fee3f40ade5edab21d2636b0b986872e9089871c50fe1a8f39687e66d401b515ef80ee7dc606a600c760c78b0fcd01049f89002caa8a31ea07cd9cf01cdae1cdc1ad8797060a0d55e07b466e2902f6d9ac7f8d22550ff454720b2a1f797ea378013b90494a657db801662e4d7019eb0fb3c32b09b740068f4fc9d2f6d968444a1d3159aa1c99e013d47edb400ad723d7b36d033181a580fa3800d80835f408dc1622420e8b75706ce867a37b0a05d5faac1e1bdc2c016805d40ab4b874b604a8f6da0049ad15f5faf0c9c861379db6b1ad0f88e199052a38e084743012d437cc7220a5de6ac6c19748a4401545af13f10a82dfc07a8be9c7e03330d3245039bb9a5cb37819404da1c015a5b7c780a94ea3a5d0ba80dc3c2405b7807a863743007340ab7bd6688f997d91130d10ab32b43e4cbe13da02523775b86b86283d8367dd848e4b801674db726d2947f69ee52ab2bd229e07c2160cd27821e55ec6f22f5ee0950364cce0564c36654e4fc6f11c52bd0d198d216a0fa72fa6688549fdf026aa5aeef0075ae465780eacbe535506a75e9ab8141b73560ac5be30fa016f72c3744c04e6e0c11f4d3c2c01cce3f60a2698e35033b0ffeaee0108d0b402b76476700cb3c9384246cbabd91732d036721fd02298f4d0744bff9c41d28ee6285f3e5e101d03aa5c919a0d50c69b4c9cdec1bbb387f0dec914800ed39bb5a03f4fcf2bb0568b56db63030c7f70c68bde5596288a2fd786e887fe9ff01c3a597023d25dd0095a69fae0c2cb0bb053430b31345aa683a2d11db2190d28eed8e80fab3825984b4ef246c2d0c1ccdb907e8797fa76b882b76a22bd94c94716bdc05340d56f0a5ca8656b60968777e771df08ee53ec0f869ebfd19f0b970af0666cddf012d8048868668e9ca6f816613ae800903337bbfc094908efe80a53c5301ff7224d0b876ff5a40d0d781ba956257c98b2182fed306528d054f80fa13b793b8250dfc40b3f16e886c58ec03caa8bb47435cb1b105a87a9cc6ad71a0b51badac02940de91bd0d7e0df27a0aed3f30850be1c3f1928fcc78096241e2e0c3c25fd18985e5807b424717a29d07ec24340cb4d8ff4b35a5f78f1cf405ffbde1019757e6388902efb021e792ea22b3948f5343f7a33706bfc02b49cf0df8d810340c9176565b23c0306e4ed56c740c0e28ad25939191978d4e801ea381f1786682eaaa862a59659b47a2d400366833d402d5dde07786a4c926760ac91cd134039f7b50be81cb4dd9e81f51f9f067a7dfe179dee416cbb5aa5f6706260d4fad8101568f205689de351d497b24e422ad014a83f71b388b23e766d78b8079484bd88edd8e385bd1cf04ee17740b13d6b0b74dfbf3030282bd0795b879b8648a0f18981118104d0d2d96124d038d502ccdb21c08abbe4fe0b483539ad2b52759df680923276f001d49f682ee26e5a393dfe5d1bd81a1abf52e9512399cf003d592cf600ed361e1d18224d6fdf0025f2e009d036027a8e5557c7389d3d1968e809a913e8885f49f50cb47b65e0c4e9998176fd04e89073d7b702a66cce33a0abbabf012891cff42b9adf3fae808cfee9fc1bc8f5c437018a686192d8f9d8403c372471dc690dca97ad36507f56f0b21af94e27cea8bb9e21f265192579e251c9987c5c415c41d769e2b52c577c699d519cba720668a6f9e112d01999378f022d5db9067462ca5a61a05ddf30b08f2faac724d5eab0ec9f211279f75940ce1d10d25485ee780ce82eb67b63889cbbfe127459dd710cf41992df25b6cd277a17514ea77eac7efa00b428edf8d5c03a364197cee6e41d50e1df58009a6b4ce78648b1873b40834c9d0c5022bfad034ad3e7682ea64ec2aba1215a98e4dd1069dabb027448d3c1d0c044596560c5ddc0c0e8c631d0558dba36b0ab84d8a65a00b1db36b0cb7707c868a5f6f5a52c7d6ba58706a606b680fa13691a37ad99332a8e8eaf4171795d18c8a87d400fcd370b033b63bb809ea237ae00cdef4ff6009d45507c03eac0df3c016aa56e4f0d9c7117b572e69cebbd1ad8bd3004381e27999486b89b3efc0854604e0d3cab3f008a6df711d0eab07e056849d1d5818189f60ca86894da37c094fab2f705d49f28c9abe2d06b3b1bee9606f6abbf033a6ded7edfc052c06b43d4a8640cd04a2571706f0d99561fef01a56689fbc094d88edb01a98e6129668648e4c539a02387d2570189bc9f1858bfbe34f0a475076839d0e186817d9e57404fddd17f40c68cc4fdd8c066b8db80e6b382652461c769faf8012860cb3f882b5a378608c7c51c206049551a1800f802746f58be019af45bef017daa476b0dd0b6f07e1bd02edfc34980b3a1fa0674d0c2f9ba81ad7ffa17adedd9db35c46d2d36f5ae20e2b2c8013d799e1f0099527dd3c092f77d400b75b6897ef3891626cad8dff4c25d0ae854c0e19e217ef62437449adedd033a5cad756ea068df013a3aedf1db10ede9a97e45893c98015ae5fa1405b7eb348d33ed6bd036d7b34703cfc81702dd1b885caa13862617862863f903d06798e1f80c187479c3c328a019508eea3134f0129528a7a9d3f47e0f509adeef1a7813c90ee024bc35305a9c1a2209274b40cb814e4b03f7a84f433428d53f8047e2a43c05b4cee06c135097f6bb6b88b2be36014a9d67b0618854af0a60ace7cae3003f681eb401e5dcbf0b03eb836e0cec1a980934b6e57fe1e9642b077abae16406c6a4bf05d4b9cb23400333f9b721326a6f1d1830d677d701268cd29e105b1787c37720a5386cfd01b782885ccfc561f266e0c4c72b40637d4961a08bbf0034ea747300e8c483eb149812975e3406bdb4ad75c11f4087c7fb947ff153c1f609a0341d0c047a8a26a4a996bf0c760da4fa42a01b4e618814ebbc1b983bf932c4af5cfb57541bfa0616c6de015a6473350558dad41aad19581aa9f42819944d778071977359f42f13e61a4fa3f0f79cd92743200536c8cae62fae88c63173defe26806af6ee05a0c88dbe809c0988f211d06046ab6d887afb6f0f50adecb6000d63e7d11864a9966a0cae0d9173a54099bd9b01cadb930743e4edfe994047eb7d1b18eed83144221f09d8499e5407064e7dbb37f08e90634007939c7f185839ac9096da6cadd88ee929c534690d5ac974f214e09c3b6919786e20d59b4fdce7a2b9c89d733faf80726efdd2c0bf7401057d796060a9c62fa091abb767035b43ef80b186c3760c8c4b29603ec9266e05b91bc7741fd0d69d9f16a0bcbd3d3444de7e648056dd1ccf0d3ccebe08b4c06e6c202bf52f1c8bd7ba7e37f016a26d43a4c7443f5bf094743901e8c324e329a01555c751e772e55c323d03322ae126f9d27ce22e16f5a570cefd5c1b085817d0bd727c0768ccf1b7050c48f5cd1d40f952dd023e41e61fa05ad98d542f5c095f0780527d7e6360ee7529a01d5b3f03bc0ce749a051c9a5817cf934d0e7cf01464793e99120a50b17ed7ad1f43fa32de4579ac6af81611c095143ce73d44601d49f0869a4d8df5449d2067460eec5b38191ef3340436add0847bf59abb28285409dbc8b8580d53fd39681a5f74780761d6d8f819c3194d709a0344ddb022d151d00ec1949eeb6057a7a2d0ddcd69606e6095301657d6706f8dcc02b60c2285cbce4af010687cf045322d7eb1ae2f9a5da0aa8738ed35f7e814c39f70fe8535f8e968648e424eeb70367d4efae811af50668f271d403d4b0fdec0113527d331afa41b3262202f605e42c5e18f3a54ae456b72fd0429d7303379c0701f7fdf32340a7245ebd0313fa30fd1130a51f542c81194958467d19d449c8534109d49f680b23e8a51368676ce0ecc10ea0a6ef77c710793b4d008dd17fcf018dc06fcc0ccc4547b12c539d32529c010585bff564e06cec7b4069ba3e1790a6b316c07adc64fa6360ffcb3130d50610fd8b969d9c46c35636ad7234e384a36e0c78cf08416f3eab5f59466773fc9740b70692b00d909549cc25f59a290a7a3951e8c67fd17f36c497c629de35f8f0ce630171e9ea5ffa2ce2dc6c015a9fbc3e33f014bd0568d9c9d98321eafe4d69889fbdfd314415bb4e00ed17cbba028e0d88a35b7be35e9ba66ff80d682cb8b503f449f5d31ba0fe448d8a9b67e534fdde03748ae6f40bd002ccaf99216ed14905e8a4451e8aaa54832af7db80ba3debfcac13e8e1c240e3d832b099765d40172ece84ac410bfc1f160606760969aa7ed0cd8740cf4037c0a4cb40c429a01555170aba56541d11b9e61349182936f13cf2e73fc00b520f019d40f5716688ef787c3470d84bb4741397d32c0114dbf13f4304acfa02b48862ff9f2152fdeadcc0a9b39f02aae9f68580499dfe1aa01bce2ca23fe9b569fa72811694f5b68194d9a6f613d063fcf46d0bc8788eda4f0df1b32715507fe2661171993a91cf87066e7c1b80560e7f7c18e2b1e951dfa17c79e9013a7c6ff40a6890697d574071f8893eeeb4594b1d657d01e83c94e2111873c5da0fa07c99968648f581be54d9305d077420d9b6be4307d60dee052ab867800eac1b45499e364399d1773807c897849bf8b4eeb1d138921e3d2da1e96c02ca8691a0feac6011393773ebf07601e844aeb7d2c01052a4e9acd937b0fad9fb0ea03524e35b40c706acbf020545aaff00a8226f2680522cd67dae8059c0be81856df7021dc2730d683dcc566660f64d576899c5f6af81592f02d6d3d8d631bfd2d3896d171f40979a7db509a440f206f4a851ed470115a8ad5fc9182cbfae8042b7d77f8032ea48e1a83f515f569079c34392bc1a22b6ef3b40a92bbe814a7bbccf019d4d79c115cd12ddd515651f5056664b40bdaddf1340a9feb666e090b76340cb5fce6f039cc8ed11a00deca707404adefe0a0a0ddd5c03631e01e398d1e69dcb24d0c99a20a31fb44ad3ace3a2fdf16960577c195097539ea326409f7bf6e40118d3a0ec9c008adc73cbc0a177bf013dad1bbf7d34d04ffe0174f2c2e9958187e65760daa367300266d4ec63fea5f9448a455cfed6f3fffb0674b0e2bf2f4047a725e78096bd2e2f0c2c5b9b002a300747018edcbf730375eedec0599d2f80b6449c170606fe5b80b6bb5c9702dac2de0ce8b1afe0ea06c8a8737b03a0a02f75ff6988a0b797c0207ab049acdaab61cc6a8653a0f944a3b4ba3566a993f06117a8b42c690acc34280b6894b6f5be2d500f25522c757aacdf18222ee50ba019bcad1f43e4dcdd1a906a27e810d0fa8f8b0ac849a06c66606e7e0e4ce8c08fb9a229762b984f00a5c7e819a83f11b9488f9e13e8e30b70022d0cf43ee700ab0892c73fa058ce0015cb12f053d2db39c069274932023466906c02139e09f7232e3da769bcf261056c981a08343b7b0b682bc2e8d1c092912940aa27f1e8d5808a94be34271c170f06760ce93b741e4afb1918736f687f02531e022eef80594032e35f9c5127bf40fd59c1e7ea1e9565ca97d6cb958132b60d6895fc4b69882b5ef702521d77fa790074b5fdf80bd019110767014ec2ead3c0fab1b181f9fd3b01e53466cd6bd0faf5cd6b03ff3211301071fc0c68a9c6e52e50501bae67409f06a57762e068ac75a08ad5fa49eb4240fb71ff084cb9cd5f2e04e44b12ad65d6cc0d444926c5ea7ce1c1fb06a8ff56f0b57a6acc72e74b0c8666b9b22149360c1cb8bd0e68ede8f8d5c08811df910e488febb879e64ed3c9be210aee92efe8e938988b89810374e68016c88c6e00a56977080c80e13ba09519570b0129368e8cca9bae40fc4bcbc0aeb47f404a593ffb05ea4f94d388cbdfb0eddb25a0def8766588242ca33d2dd20e45fb857f710b13abd36bd0deea83a851851368ba666085d9a680f9a8715fc063d354902ba31e018df6ec7c0848b1e11028bbaca84a013d02b6a312164d431ec5922f6d3e2b98471bd4777abc8c0dbcf9fc0ad081b9c98d81a21d95b0efd9c8f119a0638b92350321fd05dc48ff181876c9029c1eb343036b58af0554e43921ed15ead2be0bb8df769e0d51603a3343a4d8c514e09c9a24a67d6a98d18cdf4533de6f3e71e38bb670e014fb4a01a5581989dc2ccf6610f21650912ae780a25f6c053872e7d78022f7fe64a09c6e027de0b214d026cf07c080f271c3cff6c63c9cdd5e00d394bd1afad219abc2db91a683ba67c07e20bea3994a8c7fd90654c68e2f81fa1377d32896e55f02457facfc2b30574057a3a317803a350751924bc7f6f35640668f3e0c3cbe6d193856e2cc1039f72ce05c8556bb3230d6f76d60137c1fd0992ad99a81273ec2a1144baa1630a0049df12fcd27621b71192b815a1ff1b3e354cf0dbf6d0307e7bd1ae829ed001c879b2497408ff4d8dc05748bde5c37c4d37cc5afd4d523fa0e5bfc8a13e87b60e0d8a29181f7aee88a922b6e9f0c0ca86e19d89a71028c1921b92f019d6433181b386247219d900d97cf021e128b2130e531f23cee0de33ab2f4d7f9d9ba6647e18ff7e0d530e08e7cca97369fa884f11d95336a12fdf5ca19556e1ba2ee2fc78096cdef7e1bc839fd8b6612bfef01b596a5c0cfeaeb005999940b032f807d0774b6cb6e1ee07ca1ce55ce97dbcac02ece852182fe33013460d6be364481e9b40d1cd0f604541af91628e786c4a537056e9e0d3ccf4529ac9473ad0e4958f79c222e574ba022a3ca3d437ce95bc476e20af4ef07e8a891ce0de44b06687f43750ab0c82629ef00d5a85164f6c409543e1b224de9a04d7a1a0e3b7f30b01c2835b0d9e90cd0f6b0cebd802310066bc08cb27ecdcf66ed94c3a1f9d93a0919bbb8067aac60ee901e4d9775f52f13625b17fef897935ba0feac6011419ffe2561618854dfda01b474656f0ae8e9b5ec19224d2713c0657d0bc8b48a6064a0f0b7011d555a6e00852001948467717f99f6346dfc43c09c2fe31b039b36e786f897fcef5fa2e5af3e000d53167d01f3519797c04c85ffdac0c1df2f02e66f2ff98e8c834992310954f724a3c9797f057a2c8bbeba03a81ec944dfa14514ed7ba0c858a576088ce396d43a2172cd272a508474e676eca532d08c7f021acbf9776888d86e6c037ae2a367d0004326fa955c79bb69605ddf04d081753fd1a79b39d56315e30a18b6cd0cac40bc36f0a495008cd1b7063d038b6c3680198b28ce63a87396b5c9b99b2f035314858177c62e802ebb6c2a7eb6bee1c4944dbc6eae868a5bd2e40998d0973a2160cd6705cb5522e76d27f2ce2790aa7b2ec854a35220e756b0d636b04e6901a802c514560d1a1d2d77037a7ddaa03541c9e3ca470b509ac6a1222b6085c89121cafafd1630e38aee1fb00d693340cf84ad9d21409ab686f7806a43770ae404acf302140cc95fbe017d864cae6640498f6d44389a4f349f911e1da7fad31ee0a2fd63e024df27035bee6e00adec7a5e035cf8bb8053bd63a087f21ed0ebd1a0e467800aeece23a0349d16065e1f7e696021e8a921522c8e7f6d4e9fe75f2e0b038f2b9f060e32febb8263e0fe09680bf303031d921da0c3775c2c05fccb99a0aba71352bd6e0b3969513fdbe3816692039a7f69f701e5fef01918d05f9f1c026306dc3beb01758160cee205a83fd1e44419ebfee5feb721bee365026894656ddfc06aeca581f2710de4baf17d0085aae91050f9586e0315f932ba08d0d06f52bd0115a97eba0b4ca8403ff30067f6ef91818df48981856d070232eaa70374f897eb4f03c79eed005d0633e275a60db092e98c34cd520d773c027d9679a60b40fdf5fd2ea035139d2f415c91540a47c5645bf74540037b41aa371d9f28eb7bc094aee409bfd27ce2c6b7ba37e4a972bff5726de0a0b84f4099bdfecf40f49f01c6d892e5a3812d444f400e2c4b010f671b23604071189f1b22fab12aab86528bd2a204359b283807ad02743ad056d4a8d459f9b2616015c1bb81aa7e29a0387c7f035dfee53407b294598d363060c1617b00942c3ababa079451dd6d60c240c47c6a601dfd1898d161bd7a08a82b328bc1f88ee6138d6354c29e322aa95e0086f692c719906b8de21c609821994c0167c3bb21e2b21e05b7e7f4f8bc3170f4d19b80243c3d37c4bf3c0f81947f190e0c14dc5b0155bdb734b007ef02c85945d02d0c91d9dd53a0107c1818d96c0153e65ebbd706a6f4da80b2e102683ed1f2c7cf66ae1e2f5340a95ebd1aa82fd786a80db35b40e385eb9981fa720c688559f50828e7c6578072aeba03c6aa2f1706d64c445b98f59484b791b759dd16d2755a33b09447d0251b7eba80b2f2a96fe09d5c6f028a437fcfc000e2d4108de34f0568de74676ee0b4f937033dd813015f7af60964fcec4e5bc0adb1ab5fe9c7c3c8f0fd0c283585a55fd16364575f3a89059849951ab8796e0153c61c8751915703fd2b8855d079ee3d892f0f06cac70da023ec975d036b583301c561720f146a71af045cb15c37c41d79a99fd510e3da0c60003199ac01a59ae04bc0fb1b3e004648927134394d5de7cd2c842363017792dc1b78bd2bffe2cc7e7a36303ed635c497fe1b0199ae3834d0edc9013d235f750032bbb52472f5dd94e5c8cf06563225802630afa3e0e675f78a1bf08d81ce043febcc3e5b00f5df0aeee3570a6576ebf11a50663f1c1ba8fb29a0bc5d7604dc3c777f0c6cb8bc02349c5e5d021a1c5e3f3444be4cb78052edc78381fec719c05c5252dd1bd8e917d5b4e8a9566ec4234ffda44e6d381d03cab9c74d43fccbf717a009ff2ee951b7dac47609f4d5715e1858a4b70f0cc8eccea18125459f0296045cf78152634a8f809659b43303d3e8c706a6057360caf2ec9bc410e1681f0133162f9471272c9a3edbea8a9301507f56f01efdd3becb0729d6ec098870fc760c118ebd9980e2b0b103a8383cbe02da95166fba5a0175ff16d0dda35a025a9ad08dc6b15f37b0bc89f50850cebdf60d0c446c09b87bc456d91a58ed92c4ab0457c0fab15d40cfea03fdcb40b91f79dbaf9fb4236f1f464087a9d6e32fa0feace0333a3503df6f974700699a4c760d9c12a02b3487b37620a0126ee95f94a6ef6d8031e9c4bfa22a36d51595aad88521527d320318fc4b2671d31ae8a139a94e00b5b8dfd1180c94a6adf2c9c0bde15da03bf2a721f225e65f6ae8930dd7d7029eb4ba77c0807b76ae2f1d53e7da3d03c383436046beb449c23ae7b8ab178096f2cc5e802e2deef536903298714902d52d2ec3a58740c1134eb56de060b42da04f153b3907ea4f14dc0858e92af67863e034ad1780e290cc4f04dc6f1f0e01cd363d9640a9bef68e2152fded01d0d27bee510d44f9982e00ad93ae4680f6e13c45292c7b0c6624935f406df24b02d05a2695fe4559791ac5a1ac9334cad88cf4c8349d1f6777d4a0f241912a33ed5e483b065ebb7b010cb8e2fccec0dbd4886d56d1c05e64c0440b522f05dca22fbf81a9464862a8a25463d06aef031d96249647061a25f2b6e9f5c7bfbc0219539c930fa0c8e93a9d03034ad029f9d27c56308d6a3a7673f1d5136889f71ba0e9c9f53fe05796801a83ea1c98aa315837b02137726edc538aedc5fd76ec8529a36fa04bf379b306e82160f30c5046c53e9c15b055e5de1039f742389a59f168b54f0cac3dff36c4cfae09aa94f77a7d005a9674db1768a8334ad0b8ce399eb3b781ae327bcb40e7dbc003de3549986b29e0e503d0a74139e900f56705f7d17c56ceca590f18a8ee1702b2f2770c68be72f301d054dac635a0967fb20d688bc8e40e607b58b24c0ce4fe1cd0597b37fc8b1f78d705ca979f8581e3a30f0d9151bdccc076a84d60ccbff467065eb87e6060a5ecab8151eb5ba0e2572ede0c5191f32b03ab082a60c68059375a98aaaed934172dc0b94f48f3949a7dbd23206fdbe44bae756cd7bb02ae481f819c05219d5f03071a7681820180eb3540b7936bfd8b5a87dbd4c05312395797315a9857034bcec8ece613ed7ab4631397c2971b6020980934b8f30c946a5032033b969f004df9ee7c019a385cb60195c24994a049733e50fcec05a07afbba0bccd8e2fe19919b7874746d0d50917a3e35b00b6b6e60575acfc0905a6260979ebec37b8a8e0dec069b18e839fe1a7817380954df7018504d05f4d7e39de435b0c42ab98fc1d0495d0a7949f93d9032cc70dd13e8fef202f4d80270fd24a095ba4c0cbcf7ed0ce8530adb434314989311507fa2bb11756eea46e9f90dd07b577ebb00b99f2c7b06ce429a029a585ecf0df4603b805ba94360a6566acb104326cb48f5ba5507266d03b5e10650efe2f905e06cca24390118f84fe65160a61a946d5dec011aeb9bf3b3d9803be107b175f928be0cdc1adb86286383c21005a6776ea0fba52b3423717663603dee8f8143443f0c91b7bd129802d7d1659936532191fba78072bf3312e4dc3d8640c923cf353f5bb730acc71d002a30279b40fd89b844bb3e7381f9fc3044b1fc9a0363e07bdfc029899f069e817240456a7b024c54a41e0dc4a507b80d8a51fc66b313ad6514ba9953fde9c9c0bec60d03d3e82f06f69b0e81a972bf32d03adc1b38b43b5a87595d91a3af3dff01a6a4e9f108a83f512b5777a0a2ed347dfb034e037e0748d32456dbae8034fd002a9d9a7068a0d52e00763f25b36f60a624dc0c501226cb7ba04b9a9ef602b28aeed7cd3aa0048aa9a315303aba66e0e65919a2147e9d0033fee5fccdc026f87f01799bc25f740d1cd9fe03745206dd087adde2128e5fa0d0526242da8c3c04ac1b98145e025ae778b9059454b1ee15306668af730e54f4f96f3360ca3dfbe422a0f9448aad1a94a2e3cc8e61fda2e3cc9edd009560dbc0d8f8bb21f276b10168abdbdaa1811ddc1360ca2a93c7c2c02b0e7203dbb11f02b4e93b99a440478d7407d03ecfd91cc874442871f1b4cfef1550912fef0340c5e1b530d0383e1be23b1e22d53bcdfa8e68e8d70d2cd2fb027416d2e51a30509f4ee0bcfd01b482a84dbe34ddcd683ee70676603e0113c61d66bbc08ce6735806349f087a04acebd6f2f90370663f19381ef8d310bff27000286fe350e61aa66a3e0b036306fa172da2d8d835446310fbc59af7699395932ee0bc05b292c66074074c7856ff3a0b70bebc560636a1cd810ed05f37b0c77b60e0cc8c2f4364547a6aa031e8035a5e99b50c11b0fd3740c7f4b4f41d85ba5fa458dd18d0dbba0058e3dcbafc05b496b63b012afa7429e9d1bc703e9acf19507f56103bda8b5499dd7abb31f0cec71f60027c2d0c6c62ad0065f6e2dec0cb5ce680327b3d9a8bb4a7177ecc86001376c9b46b603be5a581d53f078086901e75c580637aaab88ba5598f9cdb89929c3ab3972f06327bcbc073f626a0e662d80634467f496c73ad94ed1c19d846a0ef98b2b8a54baad7b532827e4b6c9baa1c702b20e74ef8d2e613018b8adc73ce3d760c9c6c7c084c546fc786f88eaf0c50cec5d9e92b886afaf00ecc742a4fb4b83d9fbbb1b907b09a2199ee035d65e51260ee3599de013d65e50f90d3b51e476c7b75cd66e51f017336c4f2861544def627066ae5a6817df33b8648f5b57540eb3e774e0d64c335906b7087e8e75a33713b00a67a9adf30f034af2b663c9a77a261eb296f937102a4392b768f0434d2976d03cfc8c7408f8a7c72686005401487ccb93fdb01a6ea7e6d19e25fbe0f809972ffce40357d0c50bd6d6d5f035acbb2b507b01023992d004d0d4cef0d91fb5302e6b982c704d0795bcb16a0079a8ba8b759c6deb72466138acce33071da5ad1cce9f09a7b7e25d72ac633425ae72def267d07facc8b7596c058e37444bfee4d31da931b989de55fea8a1c70bd0e741943e9ee09c8dbee1990e6cc9d7c09a8fb173706ce73bc047a340627e45cf389248c062577ab3d3906a66a0c2a03c5611370ee47d0f3e614e668d7ff80c30952408766febe19a23178280117871fc0c5610f50076d7907145a691f2539af1f34e95b6e03cacaf99d81359b8f066ec02f067a062320d390496260c7e1b181e3a4f60574372e4a431487bd3520efb14c7cdf10d17f7c07fac044011b305e78a59fad782ae81c003356cb5d3f1898f0271ccdd347042c37d0d93c073a3c267473034f2727062652c7401768ef18582aba0ba4f43eafcf0c8c7d9e1838e26f00f4721695f4808c66ebb405d49f15c41691a250c16d3d5606864c7e0deccffe0438802b995d1b28da912f854bf2cf07a00363361f01774872a0a7bbd82ec03c72b2bc0598144e9684a36eb6d8e8182d6ea10576ad98c22a0a95c2d6536ee010f30d03e75bae0b18c82ccf011d3598cd0d513e3e06409fbbd80bd1cf4bad0fda01263c6876e2a1a870ee77c640ca6ce4e58f81dc1f1a3870aa6560cc91ac6c6e9f513efe0968c7ae3b808ac395ae5071383906eabf48b1b857f65d1c9e8e010ead4ae65f06faa7d148f79bf3e6a331b833d0d23d021d607665885bd2c39b81919a1f402fe99a6d1898f7280015a9d919a0a6ef610c68e1c13435b0c8661f605634492281fa9ed5388f2e7edfc5a1ca0d511cb20343fc4b496ceb7acae42321cdb52e78780a0c623023b927faf99839f1aa03544ca35f11f4ba41216f09bacb47e701e8a9049d001905e6b265a0a5bb15706becec1898f7d802f280e13be95117214e2bf8165082967b40fd891626823e70098a03da56408189341db8b978e50ae7fe43d71077c2c510d0c1466b47065a980c70eef700a6af93785b780dcc8b25e3e8f50db28ac62016a317036765b26de01d212f02ee627136430d7df5a574855aa9bb789c1d146d2d035e021dd607753e812e99ddf900728618dba5809c6b2740015c8f0c3cf07e1b28419b067ad2bb06e65f888bb3f2f818a83f91519162a58fb49b4756364b130218972add3abc1f1ae2573ed6005a87d6ef27a0cc7ed80352eafeefc4403fe8125071d89e0219f797d903a08d06b33bc0c5e10a28995cda8b44f61a81d6f72f40deb63e7301b9ff750c0c80f4dac04ed02e30652fcfd91c98d14349895c5d4de9385f00cacaced0c0468316d057bdcd0cfda8b704bdce396e059581574ef50cece49a01f56705cf912f63e7edecd4105ffa760b74b837cc4f0d9c2df705e8c8b2cf3fe065501f866850be0f01e5fef7ad81ba7f0df474bafa0220f75b9b05a0dc9f3f036e1d22b6e3e6188d0818ffe2ac8c25672b60ceb30f947a5d03416f961e448392015a7b1e2ff9ab61c6cec7f186819c03ea06967369bb023de1f4803e55bd9b19e8b012f43a2b39fbb863a0bb9103a5aa7acfc0a2b48121fee5eac3c02439d9d05014984b039b9ce339bbea75b46775626084243770c6cc3dc07b0113faa7559db734062f40a67783750c2c24ff06b44671630fd0015cb325c0f29764766fa0b37903e8889d78b1770d3a89220e562c2ae7fec3cc10b5f2fb1f30d6f286c4c0e90d070626fd22b3ab3af77999ed3ed057af8f146bee0e912f2780b2f2f2cbc036c61e3006aebe0dd4fd8e816302ef0c8cd28e0dac93261b9adf09e81a78c3e5ad21e21287331613e57eebdfaf211279de07d43abc1f19681d4a2027b37f7b80ce735cff3090d9eb0033cdc96c0494caec3d8089c3649603537a06cb1d03ddd148e4667b7aa4d857dc7026f5e32b876666804e25feba15f0e4f9b206a87cbcfd1ad8ff7264e0c93333f08ea167a0d2a14407c08c26e72a5aed49d3e1882f4d819212747d68604bc48f8185a09706960355808bd4295051822e0606c6d7df0d3cae902f0d45fb3136b08a31526cea02b3e81838df3207ba5c116fcb5a014740b60d3c6a14404a67f363dd10793b3f0668725a5ffa179a9cd6cf2790ab77f10bb0da25595e032a30cb5d80836b92927fc9531e236f097a9db7f4830e01e5ed6766e0dd3e1bc004b8253d0a56cab62e47409e736ae43f0353476f4049f9b83a02c6059b04d60ccc8aee0115ed47e7129814ecb2c90d2cd5e81b180b6e1b783ab902a6c0c999213adf84c3c79d2671be43d19c6e1a49f8f96de045c50b20e766c1dcfcccedc7a6beb4d00eee7d6040cf8039ad06683ff42f6a3f6605a0b54e67d15ccc9c2f5f47063608dd0253a0dd31303b7b2288999124e9023a90ec311ae95991652c4d3803723d241e00633a1397ba624a365c7e18981a20e8cd27eed9ab82db6ffb00d0876d20d32d7a69e08d3939a0547f6803a4696bf3092895a61702eec8f3174035eaa102b4dce3a608a8d39431831d4069fade37449a3eae19a27c3c65c08cf6f4b36b88aa7ef61350a43a1ce90ce869ef3d71a9b38169f46760acd984d780e6b382e9aa03dfff3b54f5f508e8a9d9aa0c11b0b78e81136337804cadd41250aa2fee0015edef23430c54cddf011d8ef43b3550f8770dac834d0072aeb5de17a82f750eb0482f898e510dac0048e2dd82fd4e9d73bc07ef18d099b28b0c50bedccd0c9caa310e28dac0e527907156c538052ab2614812369f153caefa0efdae537df16ce0d513c780cae97c0fa828968bc8fdae97349ff1a5aea6e5c0c001e406868f6304bedf755c5e7303e5f411e800d7f706cefd3a07baccf16da680467b4ee701cd67059328c9a963fb7a0c642a741303bb49bb808e08fdfc0178536febab0fe8a598b125a2069d0a186fc85d01af4899011525e861c3c041712d80b7652533fdca548bc1a2ee372f40657f8360467a7c1b18c53f1805384de79706b676bd1988dc39d065bea1b56160bee110c899d11c11f4e613cde7ea1ed5ef39d5a35daf41a9fed236b03dec1850aaefdd019c199acc334015f9e70b50aacf8f8031a9bed90794c80fb706127900a8173c57c03863267988f2d1cb98f04f1ea640572b327781946e4f8b9fad6f6b6c2388c2df539ab6e2bdb32b8854ff9c01297073688854ff3a30b00591f428585c9bdc1d1b589e7d6f60877f0f2832e2a2ef1833437342c09a4fb41f7145e69c8bb5b42b6030f404d019bb6f5303a7126f02ae400f002793268f7f1091fbd5cf525f5aeb9f80aac7fc1598e9e97511905524f24514feacd02e8a4f02e644fe9c1898e1bd3490c8fa0e9de619933a35b056b2f5fd69e0acf017036786de0139f5763d15d06c5d3d02fd8c294efdec94bee5304ad0ea08cc48f5c8cadca9fe6fcd10a9fe960205f07e62e0d0ee7b4067317efe1a88dc3130a653b375004c54a376802977c2f91ba00a34ff1790b5591c77fa1190ebb0fd8768a473a7e9f4dbc06324016b26f4a3ee9740ce6cc2781ba8729e5ef9d9fa319163df23f757db275710af766e261348c2a713406741bffe0125790b508abddc033a9bf26b00943c9a2f16804e28fb9d013a396ef319701246252c9c62a368d88a423b423ef915a747bca46b059ceff063887f899da0cda406579caf015a5d1ae78ff59b499c2863271b40fd89ba1f41ef3b81e806f69d406f3d402f807d3f3550c6d6009d4afcf508e828ca873ea014fbf90638c22d797c3190840340074dae9d003375d06e0274024432ef00dabf7f1a79db77efe26d246046f393c83909abccc0e3db3fa0d024d78f40b7822d031d6722d7fcc52d3a6ad4c0691a27b4f79b3365231c711adf0a78b5c0ba8137e66c032a961f27808e91fc7a324409fa6e013a35f25bffa2b3f6b60e019da4b7ad8029d5b76f80991e68ae029a575c44aaf31d4af5647e00741944584463d0cc367136c33ba0358a7bd13f1d28915b7148d30a580d75226080284e03aea1afb75544ad1c349f48e480d289bc3c354422bffe01457b0828913fd78112d86a19684f134087ff7eeb4b95c83f3f006fc84de25d47354c29fc8b350385ffc510d9f09b033a8a7263dfc0fe97e83a957ff9d2033a540f9e804be7cbc32b402fa75546f5289da631b1dc00a97e4f7a140360ff0828392c6a3837f040530163fa30b378062aebdac126e74fa0fec4cfc67d6eec8c7ae918c8db1c1870c5f39781fab263202b370065e5d7b381ac1c02caca8d03a052fff4d71079bbbd00f4f6e38d1640deb67ee7065ee5130ddb5827d9b4767a80326a4ef4eb7c6168af6b60796574bfc65ebb318d818871d1d1b00b2956e71c335684c339f7991ad881f92c6048ed35034a1d78f908282b1312b960e1633289d18d71fdc8cbe62ff2a5f944ce45d7a972cec529012ba0129e1968e97601e5dc77098c7582ee9181cea67e4539b7fe034cc8b9dfbe819bf80298026b4381b2b20066caca6f43d4cadd281f559db7dcb44e0ddcb4ae811e59f9b065880e7c193dd8aa59b2bcfa8e837f00d9d0babb31c4af7cf2a575be3066f069e0dd82f19454359f6882233d264ef5590994c0dbcc40aa8f8131f07b6f886cd8be0394eabb6b805bba488f89cfdc59fc026cfa4e167340857f310594400f9b40c6fe6cfa9693faa18857d5f22f7502f15695474009f4f460603fe19b8137e4921e45c5770c4f0cbcc89a2bea34655ddf35507f22d5a38a4d9da6cfdf06daa0174069babb0e4cb41c289a8ba952acb5f30338c56640a604fa07e42c8ddc8b9bc5d471b99b1a78c3f6a52192f0e70e9870c5eb2330d591a9fc4af389563b9a8b9963fb746a88c83dde03bc4fbcb51c1a38a2eb0f38d67b03d099e59b87804ee0debe0566ea4a463fe8ef3cd8584a5c438f7ee1ded24019fb0254a46604dd0d6c45380aade75f6c011352ec977fa91388ed9491fbb3ba2d64d1e2ea67076d473f8ea15d01bd8b070367fd6e0095ae383250e7ee8109f05e19385aef3940a779268f2dc0d1ff01323a029b37018a4bebedc7c0f4d304d0fa8fd3bb80e613ed7a84a3e3c83dfc028acbc6d240d01340ef24df6e1b387695efa8e3426dc800f236599c00c425597c03390bfce7170175d039a07eddc023cf7640bfcdb6ac61dfc0f17c1d408b9fce4601cd276ac3eaae3ee83ab6cb3343c4f62d03266a4f97066646a27c74f3b1069837010d880c8f031cd2f9c2c0f8fa21d0d13dfb014839196c9c039a463fde0a683e5170e35f52c7e561cdc00b4fbf0095c2f5234087ddeef02f753bc68b58724059b9710b642a96c7409fa3b1164786b88b3d47d14e9b3588512cdf8019937e07512c5345bff5b930b06d6f0a74d5b0bd04349f28c9118e9e23f73b0074b6fe7607d079e33b8581821b65aca763ac93786f640d9cfa962c3e039a5387032640c6f8fabf8f00452e4922a37a755cd81ff506282eb33d03bde00a4881e1872112b9ea029a683f8e8c5abddb7905b1507890393d6237470dbc61bb15bb0656c043d119a013da77fa06f6e1c4cf36c737b22c6913d0d18bbfd116660e7aac955c01b94f38fa1e1d3d12c40af7e17b0a64ac923f8ed661f55a95885c2450eeb844a77705749d3600c565bb67602c270a4cfe97d95da0643dee63b441795d70b9e1f0b37d8d4c7cdc01c4a515af215e015b210f0c1c6af604642cd5182e0cbc45e417c889fe5e228879d3e4fe3ca06ed959deb00dd49f887ee44be1e87ffe01d371d15c143ec37d872b74946db288142b0a9da6156f84ad1fe67512f82b5738e8b1b2ab863c63c7d0a981771eec19181188a2bd5af819491805b7efa0c7e6c041bf79a367446ecb40b13c33909551d59b33dd18b5be0558ba9224fc4b5f67bb7cf22b0a7aeb636160248f80f50be0fe02e8b300e22e03062ac95f8688dcf63930e5297accafd41fee623d0307c347c0068e7eecc05c0137e014e800ff760d91c85b17c094f458c40d67e066eb296e6b0347eee5c0c0211a37409f5b52bcf2a1019e2b5b27c08069b093c8ecd55f646554f5d2418f178dd6a0a0ffac19986bdc0774fceb1eff92a7ccadbd454fa9ec17ac33f8980384b415afab6c8090269f8668b6e2adb2350c748c5394b1b2f9ac205ec630183ba4cb918153457505c77ab7be5e0d8c3b4c01c565fb09e094a2e48e2b8aae0677221ce33a606c225902257016756edc7ce2361f0d5bf517d24b030377db006f606fcd1f0dcc688e0085f4f70bd0cbb0e99f56f57d8e37b146b1ac1cb05811b1025e423d01c63a5a2f0374bcc546dc1b260ed86469e0a4c50b8093d15b6fb981b29e0808fae716d0d39cd6af21427ac0cf2a60ad8f998137d26f1b38b2ec07a8588f7b7762e0bda2511c26832e8df4711ba83f910d51b3a78e5c55028a5c1c14b7023a68038003da9269346c53b5c9496c22a94107b53c9c0284b4f5b134b0f46d139800cf530347a81c031c4e90dc47259cd6918b1bcef135507fa29c46eb30735c76360cbc5f7d0e285f365f814c23ac91403307ec6168888ec0d31a3025a4ad28ebb3ba77c950e70e507f22d557ad65d976c0e2ece315f0ca876d40e705c7ab2756c0b28225a0c3a13ff60cd4864720d758f04340dd1360589f2b728d18cdcf03eab8449afe3b036601496b3760d0d6f9303b01cd279acf5546951d073d7650ad80a077814c8723fd0a88cbc621a0a07f57808ef7dcdd0ad066c9d64b2ba019538c9ec10e3065d2ef6017202ead9d6703b33c65401db978b2b8cb01b6da27f7fb40c6bacf5362db7c22a35665acec3ab6d521a0d8def7053a9f3f0572e07568e0949111d027fa6b7fc07befb380bce098af68e96a983233725f042872ad38706a05acd97c36307a7e0274b862fa6ee0089573014df0492472b7f944598f8c4a1dfd494b406ce7ba42d17fe91a1871de35f0eabc5f40c5e125c2910edacc15bc1c021de2f2d403ba8275802d6649b96fe0d4fb6f20d3cee9b780e613918b02d3735ce2d0aab2f71797b981f3a51e00bd5f7deb1850de6e2480cea6fc59074ac6a57e225f7a799b8d5b6bfc8a77a37fde0538b671b6cb0a78e9e1b621eed99ffcec803d9ac95d01b0ffb6751205b7d77ce24ba338648eed7c13d0b1bc14ba0638c7f906e813fdaf7f40a981998b0085a3f59a1a786a7c067a01c318caaa61c6f4f55de47eee80c51bfb6a50c0e61b8608d87d0f50c0de0a40c7484eb962a01da9f76b4006ecf50dd1380e5f029a4f8463d5eb2bff4e028f33325710e1887b7659f8b4e897852102769f017aafe84fa458e170c4cbe357c07bbdde815cadf65140f38970ac6ed165dfe198bd020a47bc74b9ecfbb8e4fbdc10e1783d0374126735334412fedb027406e2dbc2c092c416a06dd07bfc6ca18780cdc8ecbee312af575b015d9675a0a0ab70a72bb47d70182dcc6a2a31523d0affc0b17dfe3170f8cd0ba02364b74a4027e9adaf013a7af1731b9802dfe706ce1089f468f64646f4f723e80305bd95bc18683ef9d2e6413262bb0168efdb3601abef5264f626507fa22447a12bffcad81ff0e2c43540b19daf1bc8fd0740fb09e3c5ef6539d0c6adb76f40f384fb870696addd026541137c064c584a3c8cbabffa8b80ad1e02cab1c3112f712bc73e0f76ad63605fc129a09338e31c8172ec80c5eb6e57c0ced857a0044e23a4e3e613e1883bd0df31b42fa98133779680ce627c1d013ac06f3d5afeaa502ff829f2b6aa4b1def16fc00148e7815e90a78a0a900566327f1c2e41510fd1760c2c0ccc95540f389c21f756ee2b8c490c90a18d93c00b405607dc7c0345834e393fa96c418db3ed0610cf66b0dc819b7242b274dd98ef23102b4b2fcf9c4c0ea5202563ff3b105716ce018b828c993ba5cb2ef750b18976cde206075f4d9a2da01ea4f443f9acfa9d363dc0314fdf2dbc0b9e72f804ee27c3d3744c0b61f009d2cb8194df0b4dfa5d57e8f249c2a72c3f7ae81ede93b0626eb5bc084cd2cf77fc0bb8e0858dd8b618ced1dc8e9c30c5f81fa13918ba66fe6c8c5428c1a742eedc7c8c04e9d7b4091fb172579e633107f9f8094a329e239aa9c29e8c3f73f60d47a6988f2f1fe064ce38ae13b5734f5218af633507f222eabda306e3be89f2706cefe3900b4f162e328c0273f7df7028a94952a8b7640bfe0896f9605346f078f62790a6803d97c044c81a40266c0681ed07c561007a38d3b0e7ab56fa0fbf50ce8ccd0f78e81fbed4e804fb0db3a0174ced5fb39a0b36e3e2e000eae4966b38041a10d5384c3417fff3450b4270165bb60e6ac67e0b12912b9d37c221b56356adc9cc6c77b35ba0622370374b0e27d24e1dff17cf777800e687b13a464e54609f418bb88299b71b72e633c03457a7415f42169da000b41a74007186d07349f682e222ea9835ef601ade77f6f013a35f22ed234755cdef81785b4b5f612a09f1dc6f2ca15b020e4da40c7b90b74b9a2f5078c0745c14d9b4f347dabc78471cf21adf60cf4d896014ae424162d8e7b2a1fadf528b83dfd6c6bb66360ddd60690163c6afc1a0858a47aaff9ac200eed1e670ec7dd0fa037c2c6db8f57c0be93a8a659aeb5b49377038ff75182b2fe8447c045340659fdd4c89c6754b1ac0e7adcd60ece81547b01db06bee3d9c063c22fd0e38abb5303b3096f40cec8d52e21ad6f49a418d1af9328ae3826facd27a2bfea7f8c7347ff3b322a77f4bfbe001d6878bf007482dddb3da0f38326e38092599e2456338c73c5b6f5c1cf2a72adad1703eb937545a6f4b804fa0cccbc6f0a1833383e0c683e51a3a29c168e5cbc2dbc6e5df556b7cd03a0a3d66102e8dcaff575a064d7e26f54d3e66c1b86c3a2ce150e69726ee039ea0bc8b58b33dad3d5a900515fa202f51db078c3f60a222eb16fad06ad3e5ebb3270f33c06747ee18720d581867b80ce30fbd900d8399d2c3e02dc6ac72989cd987d047df8be6d6010b20098c4481e7a823eabf63e819205cbc771b3582ddb8bcc8e2235706ce32dee3528b68b5b4071b99f033a72e8eb0da89818da8dd672d0af38bd21b6cb35bd73821ecf0d2be029690be8335fb96809884b0cddd4a0b83ceb4bc7dacaf402547d5ea0f40c4c58ba7212957035f111b91f65ac746ce76b068efbb801b496f6fd0ad0114cf75340a7ae4437705cd6bd0d4e487d0a18a4c4655101131afa1863ab7bbc447f181b401ae0c16a7d080c80e328b8ab479cb85746391dffc5e509d04bece3748f1544e462c3430d3a368076bd81f8d2fb19a0c8ad25c0a4c7f6d248d33aba7d76c7ad017d20def65b83829eac1b5853f30c94c049b4a7abbf156caf4615c6d55f5c7e0c1197b50a50395dbb041497b70150b121776b0ce8dd3e6fff02ea9e6364d45d14a9aace5c56ca5e03459f774e97409f6d8c0717007119bedf1a78f2fc06c6406cc61f57cd2722170934c9592bd95a5606164ee700914b6226603cd1970ee9e44d543d92bb570387888e808a0a7412b7c649f389ea111d81a9c311ef7f59013b207e0196bdb67ef42fbcc8a975b70be86092d7a840d3a2cbd68ccf28dad3ba5d67ad64b474d366d544a429ffe2902663038be21706b6854f80095750d51b60615b94d369f389d846259c39b6d329c07abad6f8d710b1a56730cb595fd85adc007d1ac7cf7d40e7f6bcbc004a8f789dc7b8d948cf4aa648c259d161c7d076548f59d33a468312995d3f47f14cf8b60710db611c46b8026e6b77c014388e9bc5acf944e456e951b51db9788b590d5a3db8fe0711dbf52d6040a7f7f79f80d8c6cee9ca7bde5bdf8f017d3d7bec5f053860c9938176ec0c98f5d9883232705bdb08683e119755f5a83a0efad7af8115bb5b400e2cfe0105fd8fbb35400790bf5f0468776d32fb0ca86b1487574c814a53582540d087b17776053c6915860869c2cf8e3533f2fc047419cadab905c6dcc48f3f02aa3625f96407a83f2b88554855d7e911c7beaf8021c639a0f4981e1928da27801268a17f29f5c833067442c8da05a0732636df02bc41f9e300d0ab6bbef9176fc9dc680734739a51c6d6039c40f3998195906f069e2b77810e895c12d29a18723d17540ca9456c5327d0cb33a0773d9373e95f8a1d028516a4fe007d9dd6780e28c53e8e009d23f07e19e03ddeeb1b80b6b96e8c0dac644a039a29ee68e9f602941eadf52540f487ef3786087abc43b7795718b03702520add716454da7ce25f5677d3aaf717fd6343043dce93ae41e9316b1b78f63807067ade9f007a25ea5314879e37c16f9d02da8e5d2e0214f4e1fb9381d5e9bf400aaced00150f01c7c380ba38b0c22c01521a9463bea3f944f457cf1e55e6e84f1280b7ffb4aa2d03cb1a0f0096bdb6e2a0961ac60cddc4d2ea2aab83cefe971450d093d21057bc8e811e701f799b359f0858548ffcaf581680de4b1caf66adf2a2ad46fadac054c926a0edd8bfcf403f63ec33daa0dce18837c1af200a6e39073260af054ce9c11e77039a4f7c4714fec2218de3e76b18a87711595978bbfed727a090c696ff1a4a363c24512c0b8563188fb32be088ae43030b86f895ba1b1ce5f46b024cd404479d5b1d2f16418f2fed3be8b38981f5a725a037064fa606cac78381ba7f0694ff97bdebda6e2357821f33ef7594453e3247052a4b6f139973e6d7df2ea0070a96e37a57debddac5f1a1cbc3e10c80424734144852203df0b474ad40ac4b70dfced3cc697a8261d92e8e19f72ef3ba03748ff78502a7e9ebebafc840d94e2ed871c9b8e5f3425f8effdb77b1f7c83ebf5ce4004d7bad29e0a775bec70eb0374d6205d297b367d60b10eaf269771d09a0398ae8d8899b3d4d8f46ebebcfcadb699ea3a57a367db996ade966007541a7576414b066b50089af9baded4ccef27ffb2b9684be7bdb71d1013ad8e915e9dbaaeee09fa4673ddb627306d01c01bb38728fa606fd2c6ffd4ca8ef52b65a8eefa70987752b3d7cf7e8366595805ac093b5025905cead3435d125fba4760d0a9e9f345120523da86bbf128888b65fe9da1e0b329186381bf63982f4575a8b0707687542fd15b101355fdbae74c608b292d08e7ee89ec396c41420ed315b365180f4e4d1f6c602a79a698f6d5981f4dc9542a840ba5972d95420dd1e36b313377409439e5dd74379520d608e150814b8b08f6efeb39d6c2550244faa5ace8d03ec15a58e02612af85a0aa4271896ecc845a7272af74b7a85dbc3bb891448d23d01766ca34c7ab0f7c85340e31e189715488f785cd8991c65d58ec2d6322a62ccd7feac1dca2848f383726305d2d7f72f1da0c6d9408130abb241df36883417ffdceab811ffb742cb0a8bd8f55867ea00fba4f67c3101c2b40bbb0ed0a5afaf40942e17f6e5621e18656f9a2870a4ab43ce5720d64d2435fb72b1bcad1e6d5450c0d797ab060ae8cb21b8778056a1b97280b50a6c728b01d49a1f2910e95792b903d46374ab40ac0ed573bb48c7fcdf8ead159e89eb0f5b245280f4f55776814dd2bd809ecdd80d137917dd80aa57a4cf01eb3d3780faa4730ac40ad85d8b61222bbffdd9d9428113353576770a6454513c4faf90ffed609bb18df678e6a71d978903eca317b70ed08cee8d054e35391fa5b602e9019fddb202696ae44e7fc56d855cde594016652d2874610199b86a79ee148835f21e8e14481418de58401463d5600b0a042af86c6831da77ef52ea39c0becb225220d62bece98306b05724fa1599b89acb72ad40fab6f6dc15010ed5b0b287b819407773d42d20545746cd2d903dd5a806b216702f17dc39c0ce53af6581704f81c2d601d6d2eaed2990a8e539b21d74e05ece16ce8b0edca3b7b30aa44f1aeb574eb36969ac4481744f62e15c01ddd88755d502b2d2e9863afbfa3229b36a67db3e3d489f14f38602fbfae841df017a90b53e984875ad90aa3715d1a81da4cf2133594d62a3194487cf4379ad40a2b2d296f58e0e65c9d19b2e2ce036f76c8b0ed0a4673b930fe9b6b7b3f0d002e9a3b7160507a8c973afc0415613b8770a1c6996eba8a4c0a9dab7b52b05b2a17a8ce60a446a14cd2d818edcb49c9d299028d0b5cf71741ae9f6e382ed7531ac6cd4cb4beca31fa50f060f0ed01a00070a1c5ac0b3b52a0c60276ec1c897e8f834d0c4d86e600159a554d7b6f7384eef8160e4007b8f5c0a1c2950bb53e04427ee38ab40a083bdcd2890a89297180b2712a3485f3f3ab180bba94d803080fa716f153856a07ce9003bfaf6e080e8347d3974ed409d66f675ae974205d2cd5ff1ca02eea6ded601ea66182a70a240ed5e8153b56f9733051255596c991ed114f65497b27b1304d84f756d7b8f4c662fdd17ad5f11ed42e7baedb18c9f1aabf620496a1bfa1cdea503b40b8f15385560d57380a69a3f2910a9f23dd59bcaa2a371b11b058e75a08a460f92c9116a9fb653c09d7960399795f543dd83790b04beba3bd6f657b2eec1fcc4017accfd430a689f467ad330a357ac91029a69bfbb7280e6491f29e05bc0ebd51488351f666287d297e553f34f6f15486bee14ec40f9b27e68e981a502e9f1f2392b2c7c91d9562109060aa44fea5fa4803ea93dff36629e8e05fa46538a02f71ce38202870ad883bd0508d52f65cfe53180aeeb7606b97d495e6c17d820fd59d10815487f7674e800cdb61d2aa03d86f5ad0241aa9f161ca0eaa8e58bac169156bdb7540fddbbd8038205d077f16ccc3312b3409fa3345220ab066f6ea840fa1cf6bc35036852c98d02e983156307d807dbd839261a7ca4559a970a6423cdfeb1938e1abdfa4f170aa4fba3b62505d294c4cd9d02916e9a6858452072cf610f5f3480e6290d1448a309b54705e2500f84e92b906842eac42ed25174126908cb1299aab5f6c78d02ba9d01b6dc471467d2cab523fba47170982651542c20f256f7596414481fcc9e436300cd63db2a1029901f3840eb5dd8918ba54f55ffb0622d394d2b928756954c82e374ae6715384d7f65ae40605fdfebd83e4da40bed15552f05f4d1edd9b502a4cf610f6013204e1fccae748928a4da1fa64fe3bdd3f4eca74d6c814ca2151f27530bc82aa545ef1e14886d26a4d71d5b403a4873e0f715d09f6dd9f36f0da025db870a240a2c0716700f66cf3b89f7dd83d9d87cbc2f43a9958d4f2d90dea365ddd806d03a68e716909b6a08aba540a0737d6844527c202fa70f669fe3c07d257806ec57ec31c402eca74faaf790e15627a4591de243b743663eb780c87d3dbde3588158cd955dce02eea6c1b503d4b1bba7c081afea57d301ea50b5c370749a1eb1d439b14078a4d93fa39e05d27bc01e306e00f5c31c287098e6c1e61538d2b4d7fc9302c70ad42629a066b53dd84a8cdb6355261a76061da73785d5a50ca06e97810247be263f3d2a90feca26afc089caa8f15081245265e2d20232a9d4e0ad2820ffdb97332b5d7c9209550bb6a5e408a8d0b2c711b294bc263d0fb70a1c2b50ca2a70a22956abbe02994043e06d057c55696db9e4f8344c73262a0ab89bb65b0eb00fd67d50e0c4577563a180fe0a8ae70af86a9aafece89f8adeacef62d990c9a4b57edb96d919f7e8f3b502a7aa3877821408b400795981aca69b169f1ca07bce360ed09d3a9e0241a0dc1f2810aa57216fe75886636780f2b50227b11a9a9640dcd2ad01ff950269bd1c5b7921ce5275b637bd5440df05f19e035453ca2b90f135dbc5722e1b1fe88419db3ef5d32b105ca580bebe7fa640da1fb32707e861c74d07d8fea84c14f0034dbddf2a10683665fe428138b2f3b46a970b5f7a443365edeb07d90315af39dba7817b0e5bf3cf00ba33e54c015f013f768096f9ba4a01d550765b05d2e7a8d9970b64bdb4f3b478a0405619658f9c8ac34c909a0976e4c2f04065830d0c5132ea73d8d3900ca03bda2f140814580e1588d5dd51d3afc8cfaa7562df25ca1ee902db8e2ce0fa7474a040a840616701115b1ab2b97380d610992b2072cdf6585d8130b6f728d95f89b3d97497cd9d02b126b5da03fae2d8fd6cd7778066fca740a480b771806663ef29a05e386f60055f1ca7cef2d8525dd4220df8d7331670378d970ed02cd79d02b1025e4f814445d2dc4e98244ea32bdb63058e55bb18151590f1b7bd6e045fc25dbe766ceb390bb85f89f61da0c9b5e9158902b3d801ba6a2b20aa806e89385520a3b3b0f76001fe6f5fce8c4bb29f3dd1e9505c2a10e88698646301d17275165e2890feecb89202912a027d0bc8fc507bffc901eab66d28b01fa88724e3007553ee2b70a0337977ad40ea10294f1410f65bbe6415486235de6d271fb8e7b0a7ec1a40fdc9270ae87320ec3bc06a8e76f7820047fa60a59d02c7ea8828b71ca00bec5681d35097f1860354ff3855208ab4d262c1023254f61ed56c0aa403655fff5008a402f8568140f758857716a0b7cf12c8b340fa2e183452407f763355e040af085a0eb07c997514385460e42b7014e9191003058e0355697d07a81bea52819348fd4123054e438d36dd3a40a31a7d05b2eadcd9a45fc9ea82b24a7fd65729e69d59807cb0d3329302daa7eb5081fd581f2cbd623fed64db6347d9d37467ac02ae837a1b07d82b6a070aa41d344b1ca095e3da0a1c059abf9e7580869fce14d02ec42cbd693ad72799148855bb785020a35efcee950259d5617245057cf58e2e470a84ead62fec2b10c7aa18d9c13e925ed57dc05305e47fdb41766a1fbb97b3a52904d09783f5d21a4037f41714385620397280cab99e02597ddbce42015fdf253f5420b4ea86d7ab3ac08e4ba5a240a2e275a43f2b7cd0788351ad793e8ef6badd6acff37114b0e736194087a1abc0a9ce64bfe9002dd571a74036d40d970f0ed04dcee94dfd5013fcd39f0d745c8a8902a1cef5d9a1037475e82810a9105ffb0ac4aa7fe46c9f9e70a9b7d3724f8183588faa6d2b7094d8079bcd1da0476fda95ff34eba72bcc8d02898a689b9dcef8945a5aeb92055c17f67b0ed0024bfb0a9c2810ed39409d08a70a689f7a364344804ca8ce9d3b05d24eb6399b0204ba5c6c0a0a24aad1db32e77419e8c42d7b0a9c245a76c4ae7419f76095aa033432d255201dfd76e0003bfaf5ac0299d4a3b84b015d82673d05d2e9606bca0ae0875a4e6aa340acf1a8a15de8592ec7ce8fcaa302f2f0b6c7ec7291750fd68503ec734cc70aa40fb6ba4f01ed535515b2699f62d65740a7a5d74e81503b396f472e2b825ed32b770a1caa76b16d2970146b51a2a202a7fa2eb9b202195d827bf729a02f371e3840b799184b8b69b0daa7f63cbe849b3475f2f71da0ee8e8d02be4e98fe42814087217c74801e623f55205256ce060ed034cf7307680277518138e5ad5da5fc644f45d2ec2805224bb1321438d025787dafc0913a55e6170e50977c568163edd365fa957426577d054e55ced5a629a0cc0eba0a6454fbcc8f15c8ea3d6a170ed013726f15f075a0ecd11349904d4b4115eccb05aed747fb0a68af63b27280edf5e94401ed75587fb2003ac7bcdea502e930843d056235346b4d051205aa5307d83861d74e874086414358eb1488547896143850ab60364a01bda2e32b70a80b8ad74d011d97e29e0247ea505d8e1538510d65749f02dac9eb8202a70a58eb44804c3a94550758cee5d29fcdead896d29bfa2aa2d70f29a0142bda2e0c5daf6f6f144827ff72cf016a69dd29102ad0ef3a40fd1f670a440a4ca70eb03f5b4f7f254e81ad03d4d28a154814b027071a40fd85fae8c9beca4abb695380235d722a530768fca5a2c0710a5c3b407d064307e886cb8e02276aac16720a9caa5a3c3b562013eb49bd430768359c590ae84015460af84ad3e9630ae8b894c60aa436f2e42a05123b94fdb202f2bfed75bb6c45fe81ee35b7db900438d18d9f919d0e6289eb4cae361548c776d451201dca2914488772dc7480ee79bf53201d4a7b68aa00e940f52cb323a198fa710305f6d374c22705528a4d670a1cdac5d1eb151da0b1d79e023ab6988d1da0bbd2f4c192e3505505a480f25695bc88c5a02de0394013c9b50bddd86e4f14c8467a4ac42005f48af9a5036cafef6e1448f5d3ce690aa821315f3840f350e60e50152eedb140753aeb5233808ac6f41e81ae0e85bc02a12e06cb690ae884d9a6cf11e957c6cf80ea747628633fa3bb490b56d98cdd606f4e1da0349da4809a09f6704e01522297a70ed0429376858993d49f3c593a40771d5d2b904e98e593036c2737a0c08102b634b8015434e614d02985c1b902473aa5bab70e50ed33bdc7910ea53dd84a80d4033f9d3b4023de5b07a872b550e054e7a9df7080eed1bc4b81580f4fbb5720a35fa99d394045e3d201ba4a3d3840d5c0e77be826d6490aa84d68f7790a90553fcc74e500ade35c73806643e51ca075add35ff195739db903b43af28303d4cb72e500f5c3741508d445d02b3b4033654b29905a9e6d07a86377e400d5c74e1ca0f52d2f1408f58a4dd101da415307e8ba3e4b01a5e938fdd9d40f53dc4f017521d9e3a208a8d9b49c384063afee2b892e6c697fc4b11d86e28503ecaf94330eb033793b4c01fd9552de01763aacae1da0e962a70e5063f519d0aa807685e18e32fbb6553b4f1347c2c25881947385030552ce8dda0ed07a397d050e1518371ca0993b3d058e1458dd3a4073588f15384e7359360e50ffe99502270a8c9e1ca0ea68d3019a77b150e054af583e3a40adb524055499881f1ca0f1db890219bd423d35494a53cfee8d34800652d3b74d731546890374b7e0d201766c07be0354e96d39403366d60ed04eae2be0eb3deab70e5005cd7380c691670ed0520c6b07d8b19d6e1c608761ba7580edc2fa4e81407f7671e4003bf9876b07d8e7283d3ac00a605b8bd100ba06cd1c60f5f57ee200fb60d5e72bb43874d701f6c1a6eec154004ff71508f539468f0e50efd78303749bfcca01ba35f4c6017a4e40db019a58bf73802e6c2507a87c79fe592d8c564b015de96a7305227db0cdd8011aa03a76804ad3d8019a5670ee00db63f5b603d42bf97c85fad89e1ca02956296f23edc26ac6012a92720e50f56be000dd40367580ee7ddb77808edcbd03549aa6c390aea7d5746ac7fab60dcf015a36a0e600dd09bae7004da02a3a408f365a3940a7f6f357ec400dce1c6007ca567a26a0fd517a70807a25330e50ebf5de015ab9d63dbaaefcd1c601f6e52a33076874160eb0f1065b32c4001af17e7e0ecd0b5e3a405f2eef004d474e891cab9c9b161ca001cc9103b4b2a0eb421538f39603749e961ca0dac533a071a0aa03b4f2827bb04403104d07e8fe97f46d9374e2ce1ca0c7ced41ca0274dec3b4065c38303346dedc4011a9049d78f44c77675e300d5930f1ca0c712450eb01d34764faa833d3e7480d6ed5939403be8c9017ac4e3d2014ae4b903344debc201baf23f3fbaed8fc9a50354c7bd76803add1207a823337480ed8f613ab6496aaeb80753bb61b77380168aeb3940fbe3c8017a98edc201b63f86570e50d75edf016a15641da0543f7680ea1f8103d4687e7e74d5f99fbfa2f3c38dbe2a46836740ab57961ca0d90cf86c9fedb37d60fbe4e167fb6c1fdf3e79f8d93edbc7b74f1e7eb6cff6f1ed93879fedb37d7cfbe4e167fb6c1fdf3e79f8d93edbc7b74f1e7eb6ffdbe67df4033cb74f1e7eb6ffc3e6b716416b11b616d1473f89b64f1e7eb6ffb716b716496bd16e2d3aad45f7a31f46db270f3fdbff55ebb516fdd662d05a0c5b8b516b316e2d261ffd486c9f3cfc6cff276dda5acc5a8b796bb130245cb616abd662dd5a6c3efac1d83e79f8d9fe1fdab6b5d8b516b9d622df5a145a8b626b516a2dcaad45a5b5a87ef4b3b17df2f0b3fde75badb5a8b7168dd6a2694878d65a9cb71617adc5656bd16a2dae8cdbe6831ff293879fed3fdc8460d7adc54d6b71db5adcb516f7adc5436bf1d85a3cb5167badc57e6b71d05a1cb616471ffd9c9f3cfc6cffd976dc5a9cb416a7ad45a6b5c8c2033c0f9e0f2f301ae91ebc105e042f86977cf4a37ef2f0b3fd171bbc36bc0ebc2ebc9e21611fde00de10de08ded8f0f012de04de14de0cdefcc31ff893879fed3fd5e02de02de1ade0ade16d0c09b7f0766216c2cb8930849787578057845732242cc3abc0fb606fcdff110fe1d5e0d5a5fd2121a3cff6db1bbc06bc263ca1dc39bc0b4342917b2d7857265a28e035bc1b78b72f487807ef1edec3c73ef97f9987f01ee13dc1134b601fde01bc437847f08ee19dc03b85978197850ff87f509ee167fbe506df871fc00fe147f0e3d6e20ebe187e059a857e1b7e077e573452f83df87df803f843f823f863f813f8d38f5d9dff9b3c843f833f87bf80bf84bf82bf86bf81bf357feee0e7e0e7e117e017e197e0cbd85484909f72f25fdae057e1d7e0d7e137e037e19fc13f877f41df8c7f09bf451e8a52ea5f91842209fd6bf837f06f0d0985aef7f01fe03f7ee02bfcd7784819e83fc1df83bf6f287700ff10fe11fc63f3e709fc53f819f8590440e021f0110408420411821841f2c9c67f5743d046d041d045d043d0270983018221821182b108435a86818ce9c53309451d1549184c49c26086608e608160f9816ff19fe221821582b52195106c43e2055b043b0439d3e4431e41c170f2d050744b511914119410941154105411d410d43ffc5d3edbb71b8206822602e1d839820b0497085a08ae105c23b841708b4038c680a18955e40d09a7081ed4260c1e113ca524dc43b0ffb1aff3dfe1218203da81c12102a1dfb1a1dc0982530419d3b2e6f30942909c2fa9187a4ac5d04718200c8d01295f597df84b7db62f1bc208618c3041d846d841d845d843d85712860384439a85e108e118e184240ca78c1386338473840b844b842b846b9230dc20dc7ef84bfd477888708730472e89c219e68df4930f3218c5b4c9e712a9189611562815c32ac21ac23ac2865a8c61933a6a7886f01ce105c24b842d84571ffe769fcd3684d7d477c21b84b708ef10de237c40f888f089ea68b887709f0ed2f000a12cc7f7c62c94613d32243c46786248287320a3241449f80790b0f5dfe021c22cf5c908cf248c3c443ea2005168fe8c10c5881223154f10b58d767a84a86344e286da69d4a5ad18f510f5110d100d118d108d114d104d3ffc1dffcf1ba219a239a205a225a2152219af0da22da21d2219ee3ca2024918154db450549e716b514454425446544154a56326aa9184515d49183510353ffcd56cfbd7f310d119a273e3fc7c49c20bc340d7028a44f2d0aaa6a93c141e8a3c141e06a053877fcad72f0d2d2f11b5484b118fd115a26b1378fcf8f7fd7f6b74bc45373419a25b447788ee113d2012f009d11ea27daaa3d101a24344b2b01e233a31517b196ea15c065116315412c61e4918fb2a09e3e0c3dfceb57f370fa9a8c42195c93822afe2d8689e05958471f22c0fad5e1ab78dca9a2763c5448c3be6c391fe2956a568aad668144ec65d1592fe12710f711ff1e0c35ff9ffaad1dcf00e110f118f108f114f104f11cf10cf110baf9646121a120643062ae215cd42bfcd38a117215e23de9084f116f10e710e713e256101b108cfda87bfa36dff621e22165e951157e81d8dabc6357a4261481e46cf4a695ca3521acb42d840dc447c46aec6e7869617a9784c3d37ca4359448d54943bfb2b0a4646418a88e5c3d36760e39f185c1183f115473396a5f606f12de23bc4f7881f10cb3f3d9184f11ed5d1781ff10179180e4512d231130b758f10cb3a7b427594249411cf20ce22011d33a93afac9c3df31548987c4a7599804c6e95241121aa53431d2af80c4988589b404491b49074917490f491fc900c910c9c80433b62a0fe941cd20193ff330992099d285432a16683a86e7486622873ffcf5ffab0dbe0ceb1cc902c912c90a898cc206c916c90e490e499ef189a44012867b488a340b931292b251474748641a5491d490d491349484495325617286e4fcc3dff1cbf66fe521920b2497485a8627079466146b3650716afc31594abce40ac935921b24b748ee90dc237940f288e409c9de0b1dd528a52254ad30d4b49b9487a29dcab4102a864deaa8917058c6fee05330fe0dc37a88e408c931921324c21f5916b368036d0f6d1fed00ed10ed086d3140ae993e4a8df486be99608c76d25aeca3dd46bb4312b6bb2461bb674898d5607d72cec0637865721e1fff9c94c67f250fd1eea33d6068a13d343ccc5294b547868a366a7f4271d796b199a03d457b86f61ced05da4bb45768afd1dea02d83b4433ba792f09984c6381412b6f3d44be5feed02da4552b15d2215db650ac67685ce9bcfa8c6ef1a53fa63aed9ff220645976957d1aea12d746aa02d7d7e86f639da32e29768b70c09ef280c9584f7685fa17d8df60ddab768df3d93b02dfff480f623da4f68efa12d443da0bc6dcb8411dd75f0872418ff4b79788cf689892bf469bf9136267f8dda699e6c8c65513c453b8376161da0e3a1e3a313a013a213a113a393a0d346a7834e97996ec1069dde8b04d454125a61684928f25078286ab050b1d337827188ce009de18777c8bfbda13342678cce049d293a3374e6e82cd059a2b342678d8e8cce169d1d3a3974f2e814cce6fa2cd5516e2cf4ccd6de163a45744ae894d1a93c93502461a78a4e0d9d3a3a0d749a8c097b029ea1734e2a0642cbc30f576dfe7d3ca45221169abfe0ce09dfe4c1085b021b3cac99d0459e824e0463e7029d4b746484aed0b946e7069d5b74eed0b947e7019d47749ed0d97bab8b5a1968192896a165201b9e9b50913aea3e5db59d7d740e3ebc5bfea58dd660e790fa4be788867de7181df97c8a4e069d2c75d12ed0f5d0f5e91aed062677744012da0c524f34cc31ba21ba11ba31ba09baed679bb0db41b78b6e0fdd3eba037487e88ed01d3303b93b41778aee8c3b72ba7374171fdb0f7f220fd1fd56c62d0386dd95918732006b5251a413030cf2c50dd5cbeed6785c4e28ebba3b7473e8ca1016d02da25b42b78c6e055db9ac866e1dddc6f3260c6120b9b742b7a9f40bfc17ac2bf0876cb3886da2a686e7e89e7d06187f6e94c9c00374a5eb2ee8d6ee5ea2db42f70add6b746fd0bd45f70edd7b86e9bd0b741fe8951112fae75447a3a3b4ec5a99917a4f18f888ae306acfc4092d09f7d13d60f4bf7b68787844bd37923b1f2b0f45419507601288b0f7e463b5d33f8e87e89ea29b41378b1ed07ba76ba851c47df47c934333a676da0b289a447b6498616d36521cb1899e9904645a2f442f422f462f41af8d5e07bd2e7a3df4e43e03f486a49fe59e23de4bd63168f15e7384e4071fbd91d9aef1f17df8e737fa637a63f426e84de9b5eecdd09ba3b76064a2b7446f85de1abd0d8313c1157551666f0f6813f664914d98c3ed4987efd0cb3152dfcba35740af4812f64a8c13f6cae855d0ab9287bd1a7a75f41acac35e13bd33f4ced1bb40ef9221ca5e0bbd2bf43ed207fe67f1103de9a65bf4a4bb653c1ed07b44ef09bd3d786d5307d65c436bbeccf0bdb78f9eb403f40e2991848d91e18c68aa22cae8f84e1b1d2d324e47e81d9b76629afcf594265f2ff3cc37e6b5f5ccae45d342bb2b2a6d4c0437cdfe2bafdc27631d1bbd43a3f6bc5c3e7c69f016e6f9a7e8654d5df7d854d464431fe87bef35b86bec57cc77cd4d7837ff4fa8f6f72b432c62502821b640df473f403f443f423f463f41bf8d7e07fd2efa3df4fbea178d0a14837d6943c609c321faa28ee6586026a932521f3ca03f467fc25d1442c2fe14fd19fa73f417868155cac3fe92fb5165e6f457e8afd1df9087d65bd3dfd2441425abbffbc06ef9a378280393433f8f7e01fd22faa5b495d1afa05f45bf867e1dfd06c3f7fd26fad277e754504530f62fd0bf44bf85fe15dd2761c0e882a8ac547bd2d6bf666b0f49d7fe8d69b7c6f339e4bf724ff0ebeb2df2b2f126777a87a8af840c0e55305ad3512eebdfa3ffd05a1cb34c43ff11fd27d3f64cdbff0bcddee1c9dcf3516ece9fe81f58d2722f6c2f9b52f4c387f2fd86beccfb23f4e5b14fd03f453f837e160360e061e06310303cf8520c760aa288520c4687f4ca4427188418442cb5d66e631033676d9060d0e67ec278c7b4b54107832e063d124fe8f79287833e0683b73c1c0c19031313b133fc40d5f45d1eeafaed166fb3df396d5f5fbf5f5e66d76fbb84ffe0fa8dc188c27030c660f28284afdb608ac10c03e9d305064b0c56148c8335f746249724e4604309299c1c6c49cbc18ecc7cd906395a95223fe39e49e61e6290d70ffc5cc0a0f8dce20a9bb07a5032b14ad3c2b3675a5a42aa6c2c182a9a30e3a08c41e5afb1eebb84fcb22945537e2a39ff0466d2bb36a832c36950332e991803e14c03832625e1e00c83738607450c8a3568c4a0718a1abf68284ac705b7320d2eb87f622083db62907020f7bcc6c0ecace72e8a1506327fee30b8678e8748ddc183310e1d0f7be4e1e01183270cf69ea317c2c348e6d5fe0746a12c0fedcafda40bf6e0e02fb56f4d202319ec42de53d5cb2de4181c92845ce78e3038c6e0e4ab6c24214f31c86090c510187a18fa24e43060847d281f22aaac3420af308cb9060b398709866dd33a46785e62d865468ea8b5c31e867d13081991ba2c637384e1c06c803a37fb832b2f789b52d471d24a4861233d4650ad5804f27088e148dffdaf76dd0f52712f15bfaf9b8c2f8d6daab8ffb8cc9cd012f373188e319c908ac32986330ce7182e305c62b8c2708de1861a69fb02c3ad9181d9e730bd4d581bee58e2292a6398637c22a96398c7b08061919b7afd3b0c4b18cabf564833fa45a5ffab64e0b0a63c1444f8f99287c33a79386cd055336c7ea0d7943cfcabc4fb4bb32a9d3dc3330ccf31bc601468280c69617845367e838aae0daf31bcc1f01643198c7b0c1f307cc4f00943b9add0521878486929cce41ec52a5bdc621b1e19a21e93a8c25261a61878c313f253c4a9f0d33ba65075e414716a65a913a78e905447ef68438ac5481db5458bd49789728a61e66fefbd1f62e3e37333b434ebe0df4b4bfa3f445b112d7498c5084cf11d7918f918051885184518c5182518b531ea60d46588a27d8951cf24ac0d98ba1d703b2f4bad25157a65467d8c06180d59e56934c268cc1a33a309134747538c6618cd315a304e483fc29c9e52cbc3d1f22d0f472be5a1f784d19a8f3ada7c5420f1efe4e14f4c29e9942d463b8ca4a3f31815cc32d9e2687d5b2abe69a32246f26719a30a46558c6ac6b33a262d47758c1a9c13a32699393ac3e89cfc14f3d251b4336659374bcbd1059db1ed0ac9195e282d4797e46418aaba6b39296aad68b38e8d56303a2a263239e445aeb8d0fc5d1df83382f1251b2d21a90a192393d6c4f4777112bd6b56ca0b6534af31ba618acce816a33b8cee550c8e1e309271110ec8e8ef73ff8408c3d101f5526e6592eb0fd3e3285634084747f4caf4e486c7189d60748a5106a32cc62009c71ea226b5dfce39c63ec9d6695035151e5a9128b251786843f92f7938161dea808935618471f85199dfff080f7f64328da517624663c709c66d8c3b1877b9648e7b18f7bfafa6be69e301c6438c47188f319e603c65e2cb78465a5a69d9937f9a63bcc078495556c8199d9399e3957252a4a5884ad23256696939395e2b27c71b95939690563cd298349a6ae81b1db5c58a1be32dc63b8c7318e7ffcee5ecaf51d135c349e317f8f5ddcf264f45c6aec024b5b1f4808c4819e30ac6551583e31ac6c28106c64d46eaad6f4618383ec358d6c7adad7a68ea8e0a78c184b581296cd12b305d662c03d1c2f88a396b24e1b5cdde6692daf8863c1cdf52f4758fbecac3f19df2b03b230f7b2d13973ef92813f19b3c1cdf7fabfddec9347e30247cc4f889cbe4780f6301e5190eb9768a293f3ec2f818e31312f2c739393ec5388371161360e261e2631230ec310931893089e97415c37292183d36a0c014553632a2328898b56339a9a232a69d2972d21252e4a498974e71b5e2d1796bc568141d75d2c6a4c354d54917931e26fdbf7339fb4d543406fcb3b3e7673c3ddc383f1930517b32c46484c918930926534c661cc1c95cc5e06481c91293154314cc1a8dc840ff4c0315dc597f82c91a930dbd32932db346273b4c728cd44fa4330b9814750bc5a48449597f9d99311386e92d0f2715e521a95835b41cbee2a1084fcbc349953c0c56888b7f000fbf4dbcefb65f9e4c931a26754c1a98343139e33229e324eba598ef1cb373fad344420a212717985c1a5af648cb498ba2f207c939b9c2e41a931b4c6450ef30b967b2b86f42209307725244a5d2f2914aac884a6fff59484e9e9ee5e4648f425208e9cb6df75f1152cc48918d623732bba0c8e8c8e4c0842b07981cd28b3391e978fc5757b47f8a8aae59c5f51bc62475429a64262621a660206b9f70e914930c265966c970554dc5e0141483530f539f0c144534de43274f31383a64987e1aa4b9325326ac2575ba46a7e17390d0bfc734c254ec5b577774826982695bf55266b10d30ed280fe583e56177a43c9c769f7938ed21a8632a2accece378f817e9f7cb8474b3672afd35c474c48307383663a6f64e2774a04da7ccae98ce98e8d4ef603a675592e90253e959c1d798ca9582ec30cd619ac754ee50c4b444db72fc15720a21a7654c2b985631ad311a39adb30091e8aed6a4ecaec8c96983eaabb52a3de3869d369f8dc9e919a6e78c5b4e8d25393512d2b1519455cb4696bae963dac2547e5466d20dd938bdc5f4eef72f67df62e36fa1e241aab56edf5892ba71be7b4153b07dca14dfa9f044faf0912be6f409d33d4cf7550c8a35d8bdd7cd139681ed16d3d6a243ba46fd4b6e9e980a37a4a38e303dc6f484c50ea7a79866189f089ee81a9d66317bb555821b9a661e03834233117a9687d6652acda5b6090f673e66c1fb3c9c85ff211efef894b2f366664b18488f07cca9173b811b3d976c9d9d19b0d024fb7afc308b1965629dbc166609666dcc3ae6cf2e663dcca42b07980d3193ee1e6336c16c8ad9ec99992f09399b63b6c06c89d90ab335661bee011742ceb6149261ac6e1e1192969056428697ea809dede87a159555c4e32c4742cef2cf6c9c15a8a95a357556a48938935f2c635661aaddac8a590db3fa5f5dcefe12151fbf4dc5373c7c4145d34c20043379972653b46767a62e5e05b373cca42b2e290645791131689da2ce1ab479db8e81ddc06c622ab1bed3ac650e2794debba241183c306b945e1919cd6bba466737340867b798ddbd15c87191a188d93d6966fda5b387e7d085f0d0a5b67d8d87c3e6479575ff9b79f883f369f6c80dd4930663b589e872430e4c7f289f1944920fd2b8580ea8b44445bab3a323f3679175f292323fc840ca05d1a1093ddd312351c678f684999044a82ebf7288d91166c7989dd061e038393bc52c8359167360ee61ee3f4b4821a44c3211928315cd1e21a458927313a5a4ca7a46092966a488c77988798479fcccc679a28904f4a91ac1386f63dec1bc8b790ff33e05e35cc0e16f5bcefe612ace47988f319f603e35f54762e6d6cf6798cf315f60bec47cc5d8a08841e714b579dbb2d4ced79681a6e2e83eeb3b7922517deaa2f30d2384f32d4bcbcc77dc3f31be54d7e83c4712cef39817be9cca9466e31bee69ea8e29f48472423cc7c39729a6c2c377f5d279919e9e8f7099fe233cfcee649a97302fb3a6483832ae6a694393cbbbe33eebe0deec31bbc2bcc2ecde4006be6aceee917950a3537bb231aeed6bb30fad04bf2b8a4d6bf188799d69507287798376bf9f08515b8b26e6d2ce303fc7fc02f34bcc5b1aa8b4849ccb0f5d637e83f92d5340e67724e4fc1ef387571ed7e113b3eae68f1a9f9c3f61be87f93ee6f23af2d7a3576c9c1f1b35555e5366ea29e6f22b59e69dcbec597858f8bf6139fba7a8a8245c045884584458c4a6c64f158b048b36161d8625c48c5f742906173d2cfab42f343618290317035144ddf6255375db94b49039106521a3dfbea341d89f7013d3a480c548bd328b31be22af9816638dc35e9379a45ff2d0a6987e9b87e31071e93fcdc36f4ca6c594ebdf62c6223f2cc0ecb3d088211b794582e5ed19ae2c7ce0c9f0cf5b8b03564a97b5b39f37e5f14c5b2ccc09afa6c95fbd22164b5e292c157b63b116ba929f830b5371fd9ecc1449bbd840f4abc50e8b1c1679b52a45322fe4eb25c80abda86051a5845cd4b0a8d38c14ad5508b968d0a9f31c9694076b62714636ca32b190b9780951b116570c7258355504a3e8a88b6b2c6eb0b885c86d790c11293211e5c1fe221b7f1715bf692862f184c51e6be1491306fa47904161271fb2f7fa89094bec6121b85c7cc294d1ce5653462d0323e9db53266db3e6efc896dce630d9e084e8a28b0c8bac094bfd5b2cc1ac51eb95597a2fbc326fda84a412a594b1c14713afef3dc7f1bfe4a18b1fbee4e1d2270f3f2274f1751e2e839f687f918acb10cb88cb21c7e382ca497c489fcd3266b183f10519d5cbd19b4ab3a18565c2a3b3966d2c3bc6b05c63d9c5b2c7c62a5dc7fc301df15f270d73f07289aaceb2cfa43959713d51775b86d572e7116b5d8ac88d57580eb01c62295f1c6339a1905c4eb19c6139c77281e5124bb966ad845c6e4848b121455f15f128faea58aed962b9c3527e2b8fa53c7f11cb1296652c2b5856554d15c198c82bc81d64e01b5836b13cc3f21ccb0b2c2fff4c2a2a0397f2d857585e6379c3cd4ac2c08ef4b950e50ecb7bf5c70ce45d1eb07cc4f209cb3d2cf769d28fcf540bb59b27a8881e617960d41ce9ab431ecdcb018a189c105db42da379c45c9960ca5c99a1f4a1fcfac9373446cc42ca37ab942e4f1927ec0e9e7968b720becb431bc79f54b1cc9087fe0cedfe9fc1c39f62e06f61e3322bb4a175be0259174e8dc33ac2cac3ca67a69b106915601532bb572467d7ecfbf4662c961e8386447c82955c1f6395d0c72d7f12042ff00758b5797da7c430d4aa6388dae13de5ce2bb1d63614b3fe155523599b8593ab1e567dace48b43ac468c8eacc6584db09a6235e3fef1d906abb91252231ff2d30bba73564bb271b5c26a8d955c269f7758e5b0ca6355a09a1a8d281857f2d3f25265ac2a5855b1aa6155e79eac5503abe64750f13bda295667589dd30e64d5c90e5617585d62253d7385d535932e56378c30f596584927df6175cfe8fcd4a73346186877f1da42a3e6805eb132684d481b1dd12fba7a505db457648470f588d5931a8423e9f6bd6f6f8660f44f94526ea4689acdbe4375d288187cc343eb2f7d99d7f69287abfd0f0921bee0e12fd3ef9709a94e1aa1cd01c3448331779489c812a127b24b245e542167847b42bcd5215647e49bd0ac53a6eab23a367b5eaeb13a61ca2f0fd31a529ff16fcc9f432282af4eb1ca188bff891e70a1e82a4be5476e28b7253343662d0a27a787b2049093913036a16db906d61ed63ed601cdc8b52011d631d6098f85127d352e330e696d48118f83952aabeb36d61dacbb58f7b0ee633dc07a88f508eb3105e37a42c138c8633dc57a86f51ceb05d64bac5758af79fd37a21a3fc2c6df2b12d71bacb758ef18126495d72c8bf7ac7358cbf3174cce93bc69d1047b9f343abf2ed1cbed9f71ef9261a031056fb02ed3292a62904647990bae6837b23286d209158edaf4d4ec60b2950e4de1ed75f507aadf4f4827a7940e06cfc6e14b1e5a3f8d48cb3779de2f79b8ae996cef7fda656a78f81b19f8b36c9449b3ae63dd20e54440891a2966ba6895eb26e59eac9122cd44b2097fd66764ddfa9c0413bda5bbc7a8eefa8219f7ccf73da526b3be34194f97fcc0fc4399f72d5e2097adaf68f477851ee6f83b61af3073748cf50dc5a688d6d1807a917072fcc88540342559aafd2b3a8448c85bacefb0be678872fd80f523d64f58ef61bd4f7d3599d1805ccbbb1cd2c53a30e1c7f59161a3fc843cfc29d619acb3d8001b0f1b1f9b4005e3a0844d48ed6e1361136393b070cea4834d1b9bce3f4bc52f44e2a68b4d0f9bfe33030379f80136436c46aa888e1eb019633361aeb68dce6fa64c13b52141cb403105792a68df8a4131f8b98b570c8db151526465dccc98ad264366374f044fdcc12424dc48fbfe1e0826f108a958ed62ac110b310e5f3a691c0f592daaf976df93f7441e5afb303934a1fcff120f7f908d9b25362b2e8af3f2b3cee95f536a094944ee6dcc39e6324e42a4a96197302dde72e1dcac397262488c324c38146566b361930ff2573abbc78c3bc9659b2d8b2688c223df25635bdcb726641e9d60b37bcb498a5f635bb66fe8ef111b75b1a6d6bac96193c7a6804d111be14f199b0a365526346f6ad45785906240da349d518da6a3b07153c7a6814d139b336cceb1b9c0e6129b16d96805e3e60a1b79c81b6c848d77d8489fc8e4967779c266ef63a8b8d9c7e6801543c8405b61648acd2136f23ac7544427f216271a1814457473aafe98685f4f7de91b066e323405bd6d6b31a45354b48ce894659da46365c99351ee2626461f7240397669def6564cbe1fad68f8ac94f6d7f4d0d02b53339b0f4d529b90d0c50f5d7ea9db07fcffc2c3efb271eb61eb3fdb7b62a98be6b90d98d12b524b7415618b0834218fb0c8bb23f1b6217dd92c96be331b40976607da18de3ddb3632e72d1b2b7f1bf39fb609afdcb6f92d4b4e61a6dc6adbe16d45600eda1495f25bf28b2278c5501142f6f2d87619d8f4629aa95e917e236fcc08cab6876d1fdb01b6436c47d88eb19d603ba578dcce545f15ebd1b1713bc77681ed12db15b66b6c37d86eb1dda960b4aed46d0e5bf9c502b6f282256ccbd856b0ad625bc3f69be1feaf51f1d7b4d36d03db26b6672c034b066e58386b7b8eed05b697d8b64c52e1817a44b7d215d7d8dea83fa67d4977a89581e1be31052fa988f6ed99132b8ac1ed2dfb53c4e0e08af52c44b59185759a31e74f649ecf9fd8defd301926dcebe4578cd5f7c84df75b99030fa64d4948cb439bd7f6233c0caffff98df9ff140fbfa4a2205b61880cfc1e5d2c62f8893812fd530d3f7382b965a04830117d947b1943bf1da9257c133b7e3132352a334c38e4a1762bd332f4744b1390478be478cda4c8b556be25e414de9296c29903de9606c9d6a8b2232324db547d45079627911521aad29214414d07acaca939fa93443c6e0fb19589788ced09b6a7d866b0cd6207ec3c9e616ac5e3ce6782ce7243368aa6ba0bb00bb18bb08bb14bb06b63d7c1ae8b5d8f8271d7c76e80dd10bb117663ec04996237a35ab89b63b7f827a8b85b62b73247971b06764dfdf2dd1abb0d765bec764cbb175370f4488fa853447b1be6c7b4e5a572cf0c8c8ecdd64153da70c7b0133d70a2f0ef0a5ce0c4c217abbe57c4ce0cab3da7deeaa2bbd24f1d558f5d9995d7ac524a0f4d9fb5f38484a2a4ec2ad855c94652b1cab46fe1a1dd7f68eb44591e4e1316ec78c9c37f3c94ff0ff2d0b151fedcd578acf9aede5ad4b06b50fac9a4df3539fb65784627af1828e3b43b237364b4844bc23d0694eee8d19edd60778edd05d75131ebd9f22c1d3bcfb1c93f8992234daef427a4288fddcad10720b41c65c9c925484851629936754b42526bbda00ebc361ea095c96f14292db36777496d6ad7a23f89e73c17e876dfc9dcbac64e9ee416bb3beceeb113ca3d9a79f0a4d6e3c4c76e8f6cdced6377809d50f408bb63ec4eb03bc52e43f96305e32e4b1d3507e43ce47cfa5173017221e31cb9e85b16e3af6ba78681b918b9845ed0b0ca8277c9c254a0939f6e23d741aecb24fbf13e6312620ae67a0c0ce6fa9a1f933321c1fe90c5d47243e636e546ccc4c88d4dbaf60ab98911835376a058fb2206a56f450d1195444656c6c2fa45a7117253e4663fb7c3238ca8940ab5ac52daab2a096535240f2bc8cd898848141eda7dc0b905bf22eccd2d599f26b7e2fe431bc75fedffd77928d22fb7a60034f44b5b0fb90de58f0c0c5d2fc6dd2264103125a24f744e211e599752aefd409ad19336fb4e0bd7da725bc3cf2cbf2be39ddb195adef1b6424811aa9690b1a712525456b1247339da9062b7e4f27c3c993ab258c81c72d6a32857ed36bc5b2415e606e40ac8c9fc2b2157464ec6be4a454894a25c8dca6a5053368aa69aab23d740ae89dc1972e7c85d2077895c4b0563bf451d357785dcb509cdc99537c8dd227787dc3d720fc87d3ddcff6b3ccc0909e5cf7d66a50547a662729ff9063999a687c81d998da0f2bbc7340517c7cc505beef1ecc1dc09f363ec260961605232dbe76f99bd14dc3399a97d45c5c18ac1f8d8745d426b5cd6b89db1ea5f9e0a9a3b452e835cf67595baefd534f26a4c317739a5b3875418a62494269ff36001451189c243a1ebd8e7f6a8ee947513fb5b26e28cd6c87b7f360fa93d7ebdfd0803857e79ff25fd900fd216221f715464ea0bf7568f947ba23d0a43847b421b1924ffded4ffb9453e463e6193b533df7ed51268b3170c4bbcd87e4bbeeec8f952660aab85db8e90b22acbef52653d45be63c4e30879135096d5c1b27163669268d1c103fdabed0e3d7ec2c6f008f91ef27de407c80f91972f8e919f203fa56f80ae82335556693a5e918df919f273e417c82f915f212f5db4417eab82d13a6ff23be473c8e7912f205f445e5e4abe5841be8a7cedaf52315f47be817c937179fa423766d7729989e9f933e4cf91bf604c62d12503b9076d435370d46135271b18cc5f3224e8184867cc3d5d599e492accb7e8708e8f986e2166b6749a283b748a8ed8b12206658595fee778c99b5e237ff3ba54e4d6d62e4a2b777c8587a294b2f8cd13f2b7544aa5abf3772f84e193f2706b3414e161a7ce00a35cdf39230f3b07c8df9387414267cfb0f947f2f0db0cfc2e21df13802f1868db83f19a6cb8a94cd44e2183688fa249d25e9f290349aa947b34e27fb8398a5a66bea4a5d0db1252745af9b9bcf1958bca2a4aaf8847cb46792a963f19d19d435f42c869e4954d2832a1412b0bbc3a724accf5f16e5b8b3dfae5f3322d64a2ef232fc37c88fc11733b648a58d33188958d1d21ed31f227c80bf333148cf92c0aa02bd566a586e774de143c147c14021442161a2c44dc5854885148de4985fb111e16da2874e8bf5dc8e72e4b2d8b165a30bbb40a7d1406280c5118312a388ac9c0ed150a636e95e8ad79f0a04dd41645d4d63224038d338689da1e77cc0c22d30f1b86645d9e9aac62d281d2938509c5a03d12944323379fa23043612eeaf11b1e6a19b16736be158f2cb22692cd860d0b0b0abd574a69ca432167c1948ae226fd31d36e0a661330eb79ef58bfd4f1d0e7a17a28acff0c1efe1403bf64a37c786101be47bfb4153674bac8d21867280045465906be21e1cf32f06bb47432d311d269ad227b6579766ca447e791ab83b05164a3886b3156c5a4119daadd35e901c7ac5614839ede65c498e73047bb51d4b0a884c216851d0ac2a23c0a0514648a97c8c65eddb0718f6ca4a62a3d5046a1824215851a0563a14eff4da1c188bf75de0ce46e4d14ce28150be7285ca07089420b852b83cba4b979b57fea5d2a166e5190b9788fc2030a8f3cfca33d62561acf1158b29c8748e0c2130a7b28ec332a68dda12341e4bb87281c99fa31f6ccb39666875a06062366e4fb97a28832d6ea8b2e3a673f2c3b5419d6374ca2106d62744af3db8a41b10bac4b26dca0708cc2097c59686431f2bfc643c7c6d7fb1e27a490534a0b866f6f9452f2708ffa0883190d86f8c316373db9e452c743b133ff201efe32036dfbbe007cc3c32c75429181c2016bf809316830a43cb4ba6811bf81876f9ae5a4f0dc12527ebae8bdc34659bcb76dda8df4ad6f9fd55406398c4f759570c92ffa5453a7472806288628469c94c5184579f8368a1d14bb28f6a83b0dccb127968da2a9ce368cfe17fb280e501ca23842718ce2843146a1a208469151ab228a53146728ce515ca0b8447185e21ac50d8a5b16412bee50cca19847b180a25c5c42b1cc6d1cc50a8a55146b28d6516c30252d09a9850a0393a9297f7c46a95b6ca27886a27cb8a03b54183859d01dba3945f112c51643f3f1929563b468c51119689d31cc983fa322ea8d994cef4d98fdcbdd33304bd5099d5ec52b3adba865a487f24aff17af51bc31e57081e22d8a77a29a7ec9c337547cc9461e08dd3e349ed2639343337feba171c6a1f476dfd46bebafcce6c37bf250be3b0e78bec5b4c7faa5f4f7f4ff0c1efe1506be1680df67a06dc57b141f68a45112fada848a6f44e26f27e19772d21292fa6a5edd39f254c2c6d5131566b15a197b4cd5d4a1394d8193ec5c1daa9c7642a747e39028b100642873f790c1ebe2138a7b28eea37880a25c73644a33f4186856d9686a0288d1583c46f1044599fd1914b38cf897402a3209ae809287928f528052885284528c5282521ba50e4a5d6e84ef1ca1d4e3e7529f7f2e6fb48d8be654d60a7da13627c62fb0087220f719a034446984d2985be685813620b138615470d4a52918eddb03cf749b12f70af6b953b43f620919cf87278f3431d59cdaccb967c2601a9d17cb5fcc7e51f24b532aff5cf2e64cda2ecd509a2b09a5c9dc2b2d505a7e69227ec9c3e7565ad1cccb2de87a91fe94ce7c97870c24deb3cc3e8f7c3245314aeb1745846d719ad73cfcc7b73ebde0e12f0b40c3c0172ed01f63a06da50d4a5b4e7afa4e5cf355243e4bc5e4efa5e24b2149dacf5459b5a6a3b071638cc676cfa4ecac291845d19279667554b1186db05104a3588c62144515664e7a117371261b967b28ed50caa1944749185544a964121d8d6c945962d9582aa354414966987caea3d440a9491d7527ec3a633eea4cbe788e92f0f312a5164a57285da324aa4493871f8762b399a3c8a5c9671e8a7cc2121574c364e8891106f2f00fe30eedcb776f51ba43e91ea507941e9f19b8dc6354b0b37d71eee780d9a10c09de9281c198b97edcaf34626050de7130a6cb8ad6729d8a68778f8a8328a2b278c92a26fa8e138339e1e4535a153ee561ff11a53d94f6d3a21b3fc8c303860145be494f8ab8db4edff2503ec85f05145129ab9ef4b65c690f99111ef62e9f83f8cb8cf2702c6bd3e1c7f1f077a8a03fc740e5a12ce1c7540565c6330c986513fdf0251b858a3fcb43ee559345f7849919f33ced10f93ccdd22bf0e3841495d8b1516c57d1a9ac9a5a3a558b717df9ec4a95c9b73ee32c0c67d451d74deaa8dd48238da50cfd37a52cca403c45d943d94739d0cad3cf9a6a86d1ff724835b51ca11ca39ca0dc46b9837217e51ea38bd100e53eabdd94073c376ebd663c83c7928b5dbd652b0fcdd1c879c621622300fd9d39ce112c739cb47893f208e531ca136e9977b969e52919381dd319539e3147941e51bb5fbe681878afce98f29c196adca4766914d13e7572d1086c7e8c280b34a75becabf6bdc6063928f2bb0b9497afce62b0ad27f75ca1bc367bacbeaf9a6a6befd3d2e3eefb21d732310e450525f7def070caa0e2b06af24e1fa9c7dae0a1f07030240f6d10bf77c57a6d96871fa397fe820afa05037f8e84b4074c2b6f50de52e00466930b8f507e4883846968de862ebe4d1bb9a0bc433987721ee502ca45944b289751aea05c45b9c6cfb1e075941b2837513e43591645f9f3e2fbe251f4647924958d19e6caedce985be78fd479233aaa7fc31c202b15c36366a8d3465a9b1d5b3eb77189edd416f25ca2dc42f98a4504cbd728dfa02c9d70a776a3e84ec2c6f53e8dc6dd1ecaf2520fb418cb8f8c6a94851e02ee934b7df9d68139c72a6f0e6fdc986d10639ea314d6f57471c14500b68be6e00d21b6305c7ef418e513944f51ceb068853a63527728cb37855a3ca61bd89306cd3625980dbb22062f680ab200c29e49136d6b6d5f7a446fb82a6d4dc82736815fa78896b3a800150fb9ec3bc7a2d8e6fb544d73eb1fe561c5a74cb3bbeffdf92ba5545a25d00f5ba3fc770f794da74e0dd6f2d0062dfa5b54420de25b1e5622c6423e266ef19346e01bfafd1c091d036dabc4a824265a30d1f4179b0ac36c9897e2d1d735f565eb4f4906fb5974d74a1b950e2a5d547a18dfffc0cb4f528ad651e9a332a0f0fc9a0149813ce3c3e4cca1422399584375ded8a846654473d1517175f4ec47152a56c6ac1b402a26d4eb2a1354a6a8cc5849a932476581ca92ce06a6650d54c5dad418f7afc8cc58a3b2a1f3a6229366874a0e953c33e092d6f33973c98235fc83229b3bc3b8232f556019d5ad7ca5888a3c4619950a6b376d4eb8498249143d8a4131052b552de62ba660a5668efb2c9181cb0353a06400bfc5132678d6d20d33fb4411e5e99f317371572726e121478d7dbb6fcce9342c613bb0223ddca0fbe0dde3896ccb1b139107ecbdc3c377a858696ac4829d76a83ca43c4ca9f85229e5c14f0d0d5a88081ddfe80ee097418b7991496d3efe601ebe6704fe3409df30507978868ad0ef4a3345adefd426a3552e4cce9a212703be8fa4c14b7ac848779ff82d2712bd3b542e5169a1f20ba50d841bd7accd5eb96111947735589958be39725d1e461e3578a4fd3394297e4b7371d07e45c5a8ca9a7ff3ed3315c55c5cc626f966c46ccc8a3ced3d2a0f2cc45a7944e509953d54f65139307b766a9c55a2a6b27be58243c6182b47a8c8e713c3c653543274a5da0ae2c2497b4823c969ca520d4a867e595481aa87aacf22a2ab1b16117d199348f25ac5d01ebb4b4574a00109af856ac00451630a72abc462c50d28cb440bfb6e66d405a89f6718e0910e917194c172aeb5d92dd7b86a886a846a6cea857f8587621c895e5a4dde75d5bcc3c36a9bee16e676f7a8760a0f3568b1a74d7acf0ac35e4dcfe5b6ce52f956b5f3eca4e1e187a993c6f2d0abff793cfc2215e67792d0b66a973e49d164589af251e34b3296f2a7cd0b1595b5daa376faa54814a43079feab0cbf58265519f8c15fe9141e3e551da23a42758ceae49d1f951f124d551e8c4fbea3535e968097549405c2eea2b252d12aa842c5c582e1352fa0ab835a5f0ed529aa3366ae4c5a2c54559da32abfbe642e4e75c5195635051dabd2b68c40e4ce1963acee5095efe6512d302bd595f797261faa45544ba89651ada05ae5c104b66c4cb5866a5dd3d3aa0d549ba89e694cc22aa27adaeec80624e80e0d27a64ad08531058bba6d57de6bbe6356039d3123faae64eca42ba44364986cb0574cf4ea39aa17e6acd503542f516d31bcf95591f888aa3cf9f50ff1b07ac3d4d0d93d95086ef6add23eec9e29155dabde9a74b69aeec4ef34a9c78a526a4f0216a5d43a691c0f57fba8de99fdf81fb2efe91b0c7c1d8af815127e8381cac37b92cdee21143d53ac0b7b8c1637c2c86c93de94117afa51ff8ac8abeade5fee179faf56dd374de6d021aa47a81ebffd2d518699799741f58416238b1a1dbda2a2e86c622b8e06b415a7235618105b71b1682d0e4cd9ab22f7a7c77ba89eb238723563d898d5c33caa59d4809a879a8f5a805a885a845a8c5a825a9b89a6b50e8b6ed4baa8f550eba336406d88da08b5316a13d4a6e618829ea9207ac8f4b4da0cb539b3b4c70d3a4547fbcfc7ee520c0ecc36a5be61e0b8b578e0e3d11933663abb988293a679858132d0a6a78dcc7e259b032c5de1dc69e106b5056ac625d333adb64261ce5efd2a0f3d0accdadad4c2f99e6a5adbd0d1221aa6cd65b33ca41d68a8681b35d57b158676e7a1350e5d469b28a5c9c52b278d3f639d9bdaf6cfe0a175c31806feed249456db194fcce839776c15d1f6a8e550cba35620196ac59ff094d6fea2d399e91a5cb99587a6d5ca0865d25750abd2ebf0f217e9c8d9198dfa94abc9aec8cd53eb6b8616ad07b55643adae1ed461ce5211e30bba3a3cb333488cb15a03b5266a67a89d7367c36ef7aaea71ed02b54bd45aa85da1768dda0d6ad26f77a8dda326847c44ed09b53dd4f6cd2903c7ac5c484a5f90815444f7a98b4ef79f372b4d85ab07acd1ec9f213aa018f42e69b86e720c48b072cc23f749f4762ca3363de470c86ac295c56c1714a5c332d0bba729c8586b6a1d6c65ed3844ed48c5a02937cc26cbbaa89dbeff2d13b1764c135114d4ef8ac4da09ab4231823fd09dbe8e8aae9184d5e713660603631cde6bb9445b1eeaa571689da5e1357ad71fcdc33414e1dadf4e42f2f094e3376ed1d890592ba35ecba096451d9603dc9351f77e9487c3b23b75e4171a35d2fe9e3921dc7bc5c3ed93e1e716751ff500f5f0151b455395a5a41ed17f2316a3988beb0bb3a09c70eedab8a2dda5b1ec3098c15dc51103df2c513786df668e985022e8a31ea39ea06e4ebce299103d9e0329429247d0a527798c4d1b98e33d26e6743ab940b847f686fc9663e0e801f50e5d322e51dbd650b35b25c446952580e7498cd41d3aafb33caca8cdde8dd19f232de94b27f0890624c8c053cdc5173bf9a5bd50efd24d5def19761dbce261ff89e2aede4f0f127f8f87f501ea434e896ff3b03e427d6cc4da98a71ada0a344239e6d3dc3f374bc2376569ecb643d1696de4b03ea1526a334bc538ac441fcdc32f18f86d1efe36124aab4f519f311e2073b47d8dba0ce702f5e53307ea2b4aa12f8db42fcd453315fe5a8f1ccbc3dbb3c4d903ee19e4399951651475f96b45960621dee655d82331e9e9dc916c028ceb4bb38bf29c545c25d4e8b8edc0507199382ad2ee9a6ce80bf1fadcc2276c8c657e6cc9c651cc1c170a3473e895689842339ed0da32a797a58d1be4bb3c4a8979a187b403ad0cb40cacef2806451775a52beab9e70c35c6245af04518ca5c14e957625cde0b51cf3341afdd51064e4f5fc940bb1b465ed629a2a286d40ba817512f712ebd2ebf6f7878807a99ffcaba1b5f1189d2b70519c1ca777828c661bd4a1e8a526a2b233a9168d9683fd8e3b80b190ac37a8d9143310ead52dadee716fe7a9d4ae91b274d34fbb8faa5c613f3e324fc3e0f7f9c84e46103f526e3ddf533d4cfc9ba9782883c7c2fc427cbf0eefc3d1e5efe85ee985a9a1913e50bd594e7ce833b861c22d32b58a2de42fdea151b1902bda7d0886ae688a2b22aa86fa8d86e5341ad5f1b27ea13772a885ae827e814e8ba8ce59f6e90e48c78bc252719ee33e5096d63718a0353b4f780f8e684dcabd668078a162aa6a0c8c0d113cb69db149997a52be8222a322e1fdca37ec7dcb4fa3d53b48b11439ded1b6e22e166cbf273505eb550938e2f2ff832d9b0fec0a86cdd64f9d76511d97b87876ca06a4a967e4d35dde3059499deb7a858dfa7409bb6f5a451aa9dfd17f5a00eb510862083071586aa94be38d3c2462cde18871fccc3d414fc0061a8b24516cb43d48fde325079f8858384410b9fbe01e6bebd0cf45da1fceb1e67a33b995fdcd5cc5f5faba6dc0d605453fbd8d29681b9ec80d908f513d44f5f198d950be3fb1d9b7272665ffffae695826aa92852d1efb516fb46108d2897b88ff686c7c4d7338ce9d5b3ac4bdf0049e5cea29326b22e778c86c7261f847862012e8e78cd66428fa868a1e326fd313636684a5770cf2e43f3d0ecd07082866fdca1fbdca95419ab3386e9411774027347a8477ddbca4061a0dd2a615be9048d008dd090e4d82c522218fbaf8ec1703c14854b58da88becac39e71d548a3ccfc3a0f1bb149efae9862a4a658b0a5a228a8f668a7be5556ab465a0e986d234ae9cce7575ea695be310e8587d53b13b4f889aa1cbf9587ef91f0d779f85324fc91d6782fa98dfbebefcd165ebc5c987f9d84acc590fa48e5d9b8db6dfa4a359557b3aaa903d9454683b56f2d6c6cb4d1e8bc6263def8f4c562ec15e9441d0de9412dfa68745921b2d1a382dacb715fbf171acf4d9e5e4ae64ff7b9c12f3a6044a1b3e3c956ab7bf2aa3c658d50a125dd9ec7e60897277ec8f5e883291c907e364bdbe5888a749daf2966e91185392fc48604739a9b164e99982ecfe3cd68a50f6e28036d34825bd2727c0bcb40d7db621e4f4a4c51ea65cdc14fa6e0b7d760aeb6289f7aaef01bd5741fb5352fe87ddd5523baab5cf30d578d18878d3eb9c4c3d5ea0c1ece8cd013ca8dcc61a3b6c95f2d09ad30b47bf06d1a8d4d6713a5d4452c5e1a87c2c37f3ca9ed5b3cfc5348481e0edee1e1dcec4b6a0ccde68c146c8cbec534522bfeeabfbed5420f08ca84f852351d1cbc4058d88b06b665afb4c6188d091df72f4329c11373c4596ee7863aaaa87cdd4713cc301e541e16304eabfd5f1ac1784de78da8a9b9913926fe8e392e4cb9be60b84fd8d5ef9166b93e4f895c9aa394c4f69b8eb94342f44fb130ed5ec1780f8d29cdce948194b7db43fa69f32d7a89bae6dcf9a882c6cc6c1c395519280c1c5fa131d7f409a6dabfdc02ba87d91d1a0bc396d747d0e46f18272491bee4e1231a4bb67778985251be5e5e9bf0c65778580dd1305b9644be313f6668b2730768acc9c697cd9250aee934cd9e43e329952f5229cdaa30eccea9940ef69f95d2de076cc6ff381efe3809eb32729b777828c6e1a4c8d831b7d23b1e6ebff9b6be991f5f96c4f35f070cad83d45a8307af40eaab4635758849a0d3cbecab4927888810bbb1b17b959463d9b8d970ae0ff3dc1914ce583e90fba4626e5d9f3499aae2f760020646529d938d9ec7981e8f649107c8d1ba63b8ef8ab4145593f542f7198867e9de4b3d5b57a45f644eb01b1d92c936397b2e066ac76c962fd30e14092c0cf44cb5d85dd314d2be65565a30e5ea268a067784e68d486f3fd32f6aa09143236f56b4e3774ea1c9fb543ebdf6575c357d5a802c0bf0351efabca051b07f7d87878d22fd9ced638ab8e846a9680b07bf699684a2918a65680b43f52e34a7d4e676bf148663a17789c290c6e1479d7ff8bb78f8db49c8c05de1fdf8c41824a150f1250fbf57809df346ac94d7f54e481b1171b9f5cbdf352f3b35ed053fe94a8d5faaa6fc57a3c1ea65f60539358dd7a15146a3425fe24bb3560caded01ad2f56a61b52156cdf6a94bf5135c1baa209f45f9aed8b1786398f94638d9ad9f1d02727c5c6e34624232afb83f47c48d11deae49e9fa805c8523145d28f46e093c603c522e5593d3d7354c1319f843bb94e59f79546e01d555059355e31d090b0d130b98d53d2e66ba74109c768e35dbeefaaa9ef314228bdf75557cd13d55ad14e7befbb6ad068d2b4a3afe5d894eebea1da69d9f8b209427064b6263e3d870dc53274c230efbd12865629fd8843d7becac35ff494fe933c6c9c69fdd2d18bbcb3c6f977784803cfea3c2fc9b9a06249feb4d9dc4f9b3d38aa73be02df534dad066b5f30670d8c2dfba47181c6251aade778234dac191a579cfaa311d9d8b8261b6dfa9ba8a995717a28953931ae714309d6b845fdde6c7bf769da8970131bcf9eeee8b5a8c1da53221b77e6a0c83a73b2c5fc6b88095da2d929f7112330a932bd8e07164494c9b68ebd4d881123f04b47a8330583056a25b248b44a79f76f9cca264879456fcd7b3c34ab55cb88bb6f64d544683c7ccd55431e8a34e3b9bf3e3966a9d85f918d9690f683208d47c62ae89e797a1686a3b9562b7d230cab77a6e4d42ba5f4dd8a387f040f7f8352fa5324a471f8958c36d19a5626c99b652c2c096596ec7f4f1e72678dcca45720931e1f6999581e3a2ae6d69ae0fef279c8319f33c621ce6b9af2d0f495119b227b3536e3a37180c6e1ab57b08938fe986523da5d6337822e9c41cc3db5a39cd11b23731cd50b424625fa7218720ce0774df2e7b971b496cc31ac2b73aef50537c88bf239b8e43e0fd1789789ee94ef99123bfe88f906cc532fbe5241bfece7a12c0147681cb35293cc8dda9a7f7e8387364e58b3cae717f250ba5ac49d10f51bae9ac609d9ce41799787a768644c82e81939d66b926cc246d13f8590b635b204e59f9aa07bc6af3c0bc3976ed2a5ff56187a8faf2b794fad1fee1f60e3efe3e1df210ca535dfcba4e14624732e97e85132952dd8f47fa41c3a2917b49d6a4a3fb83c95e890f2676df5dc848df252b2f6f7a07f4d296a679bd1480d629cab546ee57ac7e197c146f7ee9518cd00cd10cd179aaa8dfeb38ca771ab762a246454a5e998d418de1009c9805ed59cac2a94be36b49c8394db377e9d4b52ce9dcdea1579252b35f5e902dd5df26e724fff868ea2d5e333fda40f6d65ca77b7598b71db8c919c5b8f28fb4db841474be13b07068bd814a117b4df9387c794751a99f80a151b1113bea9bbbec7c366422275a70c060a15a973fad451453652057dd40f8290a567bcac73a6c230dc71b7a18d197e290cdb7da394be340ea7ae7da376e3bf90873f4b423a69de739626664bae4c269bdc68c11f4b2b25f168e6a94787e2ae67323972c63df0b2d507e4a14c0bea632ff065a0f4631ed640be6ee69f917e16a90f4c77198f8e8859697213db9a6d738acb02cdce3b2fc5ca038f1a751cdc1877ce9339d7b16d94c9d01cdb18d392ec46a4999879425169932d15ce97c7d409f7341dd4289fbb33d24f56ae7065aa9064b5cac19b4278cd2e9a3d34fbdc2a41633b3644722740ed995df3ab37a723bee561deec24ece1bd50bec79d4db56f46f3f33e79d8c3bbae1a34078c37b40f4d458c803aa790adbf31a5130d27ed0769220919b86f53896d0e5f9c63f13a66e8846178f5c53a3efda2fd5d82f10fe7e1119aa3f7792892707c451e8e4d442bdca039feb177f69d6a6a3879436af58c9c943fdf50d1e6bbbfe621fb41c0e6c4b18e97e54cd4cb215a7acc542293dbbe6c3649a0394573f62af4ff4665e5664b63000b7f849622ca7a4516c31e24dcf120eae52243a7eb68680e753ca69db9be66facec8165c1db3e8e3c816a4bc632fd922232f63805fb6a634592396681ab269f1ef17e740490f8834fbb68928fd204cabbd17ca97c6f5cb3a54bf9e55434f4ff2aeab06cd358924c2ad63cacc3437a66e62c092a4c249d704115cae11126a024dea9eb1c270da4773cb98e12c54cbf0ad87c67f8f877f979afaefe4a12872fe2d279928573b93f556effef8193d66de505ea1b97b2658df9aa3af79281aa9ccb937f290a4dd270fadcc9426976d1fad6c7ca6a25c231a9de8726f7848f595914c7eab9943338f66e1d9a7fa663387a325f71fe7b5fa38cfcfc9d036a67c5b52a1b5a7eed8c40691787299ad4329c4fb5a22ee97ce986611cd92d90478f9aa0e2ad9985291dabb4945fe9689f86876fd46e65b5f5091ab55c9ecf7fd1a0f4d78439372bee46119cd0a4925aae6f8864ca30f46085945b346eec99ff25766bda52474c58247eb678dd491309aa539346fc215eff3f06f62e31fcec3e9fbf35226dcf2c8d450cbe88e9bef440e5ff3b06facbe661dcdc633bbe4c5bf544da50d4c6cfa0d152dbb7cdfa9a644e4af0e31aa29955e6ee3bc79c54393d8c5c710a16ab5d6a64c8b3334cfb9e77831e619d4cd6f56cd79a917d882c8b6baa43b5ce06bc4a3c9778966eb0b50da359a37667db9258596c11715c18d6064fe6d8b2ff86d13b1b4249f656d7ad7447cce7dfb8acb54d638d278ff1d1eae6bd42aad6acae4980b53a5c610d235f92bf3d70e58fc4248d8bca36bc716a1b124ec0c95844e237d2776ff2d1efe76a3f1cfe6e157b7ff4eb99bc15a3b32ff9af73f7552176740798de6039a8fafa49c4c2f3aebbe504d99d1e6bfa39ad62baf5453bee0e533d2b3e18dcbb73c94bf0a69b9c1ea4979680dc8e6139ac24061c281296ff56354fcb926f73f44f3086d13746d1ea37982e629cf57b4b533ad5f4ae4951869ef56e6a7f7f8cae89cdf3411e575446cd201f69e6a5a2fab72fbd58d882bd650dc3ebd270f33a493a897e3c06c5f3a346aa721a46bdc51716cfee980296cd3e41509df48c2f74988342cfc2354fc0d82f15fc8c3d01c212af692d84ea280090fd7a29364d3579a7c372f891c683cd097f0867242b6e29d2a9cae5118f67186b7a05838321d9d6aea594fcfc93342723e1ae7e1e53baaa94c7469325fdf3872282d8ded7ae651427ea9964f4ad8deb1d2dcfb06de05ce7c9c05efffab68bf6721cee4cf186709a6039cb55f5573a7f00fb8f9483aff5d1eca0a225d51dae3e76fb96a7c9299bb7edfe3a1bca3dce19db251290f85edc24361e3973c3ceb30f82e223139a0eb45d8d83115102d276d93cf82c83fd968a1084faab2af49c862505f25e18ff3f07751f1cfe521b7ff362aef4c26df9070b3a699349a50073beb3e93507ab6ddff6e6a127fe2ac47da084f9cce29cc2139976ff929443aebbfe5a7583872f14b6f8df561bc14924593e62674b5e2f1a56aca485a59c5e31b1e5a6d96de8e15ce842a439c8dd815a2b54a3b1bff8fbc336b4ade79defe8bc97917fb7208ee22fbce19b8032ea8a8f8ea9fbea62793c92420e2f2bd7fffa76acac2881893f9a4af5ea687aafc75114fdadd21559fa8fa1c5a8ac5f8556ea8d2a4ea0b55970089ff65f92babf0064128d353a976febf6239e4d7f897954015a73102a1129c238074d60d0abe6d0e9952e6102ef41a0e518a34500b11ddb6c2547da5db1c88621377a51cbfd90a400a9332f8359b41f621598edac5dc468e4a96c21b6e7c646f05a12ef457e33b34febb1c52f58daa7195a5ec164a3cf0e254f5146d51d54f424c2aaa24e2f4b3980dcfe30fa07590d01c0a8a3c33aa256c781256a1ea477798584e5683a7235c9db935466a0259d29427d389ea07e148536600c41ec670c8170a29909952777e3eb35a468382ea1e55f7a97a40d543f42838cda3f89619ab1ea9ddcb5ac0af7a4cd513aa9e52b542d533aa56a95aa36a5ddf5c064f720f783dd266592a16562a43082bad58754335fe60cbcfffe694826d4c63513c517ee03cce1ecaf2287e08ae599baf7ffdacaba481b3de628a4cc36206b44e1fd160c61ba90a9b14c0e3c12f78f091498a6eee6139a578cd865045473742f8b97318e5f03b34feaf71c8a2f4a98d6d09ef0bbac3e2418ebd294038f6d4c62333bbff64ec1a16aab27d6ba23518a308186c148f689ad082d3468edfccd6cfe613d0925a3f9e08a883667b098ec8c09199cb21cf66d47fb525c911e250ac655518b6ea0acc00a5475465e4da1887ef54ed50b5ab468faa7d9c7f7510ba71e6e6f2ef82904b4dbb1902e4878a2de1c45a7811cba1807a920d6feb1d328c2ae639c763ae3c8e72a831e3471e7e714da806ff6049f52871381ce2398bb5f34f30741355a486ac602a18fc2d5b4b6978a117daabb5857e5446c9a5cd8a69770e77a3f11fae6bab0e637a168e1fe11c5eaeb0425c76a739bbd17431879eba49f0bf7d0ecf637a8d507544d504f45535a99a35581c3224acca0e1211697a05689d280ecf15369e10b786bac811ac036ac324ca871b0e71dc57b6510e5147de068ab11cf24f11906ce80b655f5ebe0b13e5b8b27ba62becc21cf2c0a3e700a711e550c6d85f3321aa550ca3ed22f263053531498bc3108d008fff10707d8db18708d5cc611257d1aa1a5f9aa232a9ad72ad610eb14cf451af1564a9594d2100c3ee9f3009f616ea5b6506abe950a65e27093f5f4eb1bd73b801c52f4553ff650e3331a2f4d2436de451170b88d0daf4892aa54094c2ed3ec545f773b2ea1e84da1c50a54c557e18e79468bcc35c39b5d429e0998125275121b55a3c339c442203664b537ce6c83dc2bcf11f42623acca1e8d82ac570284120348998c770c817e7504514510216e190079386ec42229ec31365ee98e4580ed90cca1bf801217ad5b89146a9e2f35b2a9e19e1500da088f59c7c7a571a4b87433c4ad45dde10aa41055c3252da76a91eaf2d40c52273f20a1a792cc754cd63f00b1e6206a5ff5a90a6df7241d3178ce1660eb7378cfff07a8b6885f7b5da3c78dcc56a71ec82a6b6b33c3cd32e9f7078a1f6cdf2d9a36a419944db1816a94654f3b4b0dcefb9d294ad416d8c691a95a63cb91d690acbd00c62a458c6fa2a0c041c0a9c557239648aaa2a498018cf853bf0179b307a510e3d49998c7032b11c4adae0f43096437c8b297ea1656ad41e4e942d625928b11c83a20c29eb630eb193763c87ba088e1d3c349b19c570084adbb84a6ec1b715aae1df45c4959cbe1828c060eda3d646d0ec4359bc27b87f672b3df8351378fffe251bb8b331dccce19634fe17eb80b7e4f0b0e472f8d0a2f7155ab83387ab6b7f5bd9a4e6909d43bee817e209b4f441753f824bccf7af36a1dab9a64e9073a4294f622c458d444d31f5ef5c690a0977174a1b626bdb67606c38e4f9ca735a78b339844954868b4d659443660ff192927eed700859db5239f7380e79f02f1ec882c9883d04660d55d4928ce7b0acae098b73a9d77338c450e1507e4f205913110e95137bac7cdd2887fc86137889916cbee150addb38582a7fd2e2b0c60faf823689b89b97eab1ab6ca3195ff00363c742a9df3f45f15f5d8f5fbb727b25de1de89ed9c2e1f514f5cab56b7105b57358bbc13d600ea7ed780e6bb7549b526d16a850788349d745c483fcce8d9a6a1959721389f0fdc23152e90f6fe72a98344906381c0a4e558ae150a4a9543c4775e97e573b69fca3580ea59c1a65ae711cc2deaafc5e2c87d0847baacdcc753c87680afc8aff5a42ac663f703b6c035ff19aafad3a818834e56ff9af2312935cc3a12a57424df928cce19c6e6aca6a9d086992a9c223d88c4f12129f8852b5bee4e739dc4ce39739fc239358bb73db619c174020f6337903879779044b6bf7be9638099c43e61029c4380e214a1fa8f6187028314f9835cb21e4d7ec223ad214e1d092d27b89d0c1b3ae3e6838e4d923ed03ed1829ece1cce510b6f755c316b587423ed31be590876444f81c6239d4beeb553c8700f50267be8e43fe2878ce47f11c2ec505552b126d0e83f8aa02122b27daa608cea5117f62a09ccc351cf21baaa41a94584d316a0bb4877a3a0f4ca2dc7adcfd213411bb275b571ac78ad25fe5701d8dff5dbfb62f71681bc3bb7dcde125abca277df9ec208dde2ac4e7b0f64cb5177f2ca9f60a42d8d4d4dea8f64e357ec4b25d2df96f28536d8f6a7cbf0fa876188653c2a1cfca677ba3d909d58ea8764c357e71eaff3a7f4e856a6754ab52ad061b683834aea06d0ccbaa725560732094213db06339145bca0f8b580e7185958fa7a4a9cb21a2355990665c4487437e0fff2e9ff33a0ef934f8d7a5462f86431559955c259f6134ab81368a43adbad771883710e9456a620cebd800ebb68a75bd2a122e7929a0c810f21cf81e84c618fe368751147f81c31f41b1da0ead091af7b43164089fda485db02e9d3c51ad11e31caaadb3d670d8a45a8b6a6daa75ac831b46976abd90f5abf5a936d8ee77650c80ae24f4459a3a1c02bca5ceda3b1c221ea3fcb4722786435ca5928a49266338e471a08aada5898ec3218a63e7f829ffad580e5147da80629f5c8738c42392f5ff886a09aa25d5332b45b574dc3f5e568fa40cd5f89197538fadb1ea01eba3c806f34c55e4aee390df8095fb647198c7eee5cca157442537dfe8cb7d3f363e068ddf82507b86bb71b8038a368dbbf411fe3193b801c55a219cae286945ca1c22647a8fc575574c4531e41cc67258a76072d43daa8fbf4291fcd64473583f57c6f3abbf7e41f54b5d54c9bc4539c4fe2a8950f6c2d843fea327aaf2269643ac4b5071cb0887b8475a0c27e239c4c5bf44d8691d87381f9500140ef957ea5754bffef2bf1f1a69aadf307bba930d9f3f9316da14d1e6d0c3a3044e35423554bfa58f11467d8ab5bf6727585a3193e4840ecb7d0742a348ff924343e3260effc224ae43b13e0b2044e7887c00218ff7151289f539d5ef629c4397c3fb8d903ce0695d7fa4fa428d27aa3fc73de0db08a24e87915fe7b1a4fa2bd5dfd4afbf43ebd657915f3fa5fa878ebb38d214e0f9b045399495078771ba54a4e9812a4888b587fcad14793ab7553844427f068bba8643dce583a4ce22f29bebcf9b2ee3971f4c25b5aaf8423cc0351caada7a256b1587659a5c6283d10f0f1d6898c3f9082fce3f7097bfdb676d6c43f837d2d41e3b72f8eb28da1c5e0fb02fa22852865036a64793bfaab4400f713826d95a593b8d6b392c517d4fe7e531dddf42397abef7f57da5b8ccd4b956faca9e4c07aa60cd8fcdb0e9387cb56abef9130e2db7f305124eba7746a5a98a2b86a4a9cda13872124175381469ca2302a1be47675d8958c67028c571a6c02dc61e8ed509bfe23584a8c3d211d58fa97e42f55378c2f50ad5cfa85eb5061fa9e1d9c48f3976a4eb75d730f269c30b9585d115bfd634cc21ff88ff057647eb0db5af285be613ec5dc1040a87d2261855a63b0748e321fc8f38fc0d14b7e7308aa2cd215ab6bc610887b2f9aed7a7f767f1077479f7c761c0e1c593c56133461dd586e1dc8314af846b68d8d4ac7323ebadd0fa26899a4acad124f401733b645ad947125750f0abdb1f3e0ea46908c2579d42e0730b206c5b67d25555781701879501d57b2a50b4b7c673b3878a4bb1ad6366706216873ca07b55b69d2d58f01755cfb5e54453c4306f08d5a0c14f0e5e2ebf4607e163eb730ef121481125fc3c47c54feb5b9b758b3daf0fa048cb046378778cb617676a0ba7f91c0dda6e1fa89ada0d42478efe5fe4f0ab28da34d6adeec0e3071843db1e9ebf60117065121fa47938ff84439ebb4e8e9e01d87b7673f44c573d620730deb5590badb44860769a83b2aa98cd2c5b86e0ef26b42b28a0da1ce22970a0a5a9c321d8533986780e93f840ac9c541cd6d7454db6918b699cadcde189ea445acf586f534f0a592455529b55f07f64b288b14ba52a4a08a031540217c47e1aa2777343856a12a185c5125095cdba99e17a96ea39f20a88d04c4fd0335f38c4968673d843f4d87fa6c5ecab66d00ecc7c9fc3efa06871f88fa0c8e3681a24f1d9399c1e8438c42e7c2bd8c3a79ee6d009d2a8aa428bc37c78b625d47477cab8932a78387039c42428b8f39599915a169b43e68a359e1c9444854c62b4c4b58c002a570fb434b5394460f3c25deb6438e4e92ed5a4510e6baa8ae05065f3f9c4820ccaaea35e341ce2feb27a84d3ebffb441c1924559e52c1ee6060ef79106c447c9fa0cdbc796c206bec8aba1b3c03f58b8787c450d8f1a6328d28b67d8c3f1b36ed626dd4ad12bf15d2dc37f127fe413092a3b08adc7ef7f92c35f41f1a81a6c008c9ad202086c4c749086bf7d2c83c3c679d35e666182340e878d8bd03c6b5cba108a3dc4a3fdcd2d1fe5af8dabf04c552dde94df15234d91eeb38ad75046d3a28615636cdc28a537733994d649fceb538ae150d61089348d7288751b6af57ae3d63a5e81d967ec8f9b088ab01e467d6c5b3d6bac513f578edc43e81771d37d1711eada7a8e9cde85960e8b83ca67b58143fe1cf97f8543fe7073a3f1d3535cb7c97594439de1e00bd29852630602d9187e289f7071ad396463383d43a7e0eb2c16e6a3ff4565736642558a5ffedb1cfe9249fc2a8a8d79d0fafafe114294f11363b8f7a8396cdcc9568731411a97c3709ca6f110c3a1a02875d5f641548df5c21ce67411a9c8c8d04a8b842e16b3ebb9f948e3d1b236af4a89295c6d0e550d9a82edc88550b377a1daba2463382cab04037f60cd02a6b1d07747078112a1208d09d5f0adc1d2ca25bc3ef3bbd882c297a6a79227341c26421c4ed42a4a3eb88143e93cc0a62f669dd4089f76a63a38afe3b0f1047fa1f10c63d8e0ff6b490d7ee2bc51e35d1bc327b5cbafec6ae88d68fcb4c91b045dffcb1cfe298aa7e360e5219aea167c4ba89c43d1a58d9574d1575514af88984d5b1a429bc3f11335c219bf93b8a66c3c30dd2fddf2516689e7a89d33ac4ffce5114bddf02288915ee8ea67c3e1892ac2ac5953bcbed4bcb111733814db72183186c221cfc5632559a31ceeab02319c6739f0f4f45639ead6a02227aba3a60e87889a1eeaeaa246490f3ee10fbfd91c7f78cdf20f27d7210ea5258f08cb751cf2182bbb8acdb6221cf290ee24b3985e8cd4e007ae0a5f37f6b1e57de340ed0e708eedb11a87d438a2c631354ea8718a9e34d21c71b261af98b140f8bfc0e1efa9d3ed693cbad43b9661c78521c0139328106a0e2b74bbf4393c454384a373b43f70385ccca87116e2d06933632327ab10a2e5dd0d3bd692d4c82119d80e49d372473783b0ed21561b4f2d3355534d2e4a60c3e110ed4c1f41f2346ef92f4eefd277651d7b3851667ca0ea57e460c92c3e5479c223fc74bf1be2d054969e26f44f9d60a970c8ef44e19ef973ddc838560e70e478bdae070ad65f61f4b0363f11b3540a953d0dbdcb88cb619d1a2a90d36852a305089ff9a971821ee78f1f00f2f602fb0e34d86de9508395540feb80c76b43a35fe2f02f43a65fe0f0ef503cf42b4bcfdf5056fad0d4281a0ecf7942f735879707aa1190e210edf4cefdda6e15bf39bfa086558656bf8e8750702aabc51351695ab33844d1e95c77fe9640a52d4dc1492b244d99d8869dfddf572d12156f0e8712a141b0e7317ecda118bd587b0851cd7fc88aeed61f554598e2f0c46fc01135862bb515397f327f422c87481eee1a8095c1ff17da9f8b4318c7211fe7ff8bff503454d3485023498d1435d2d4c860af38ec6a7e85ed3a5e736a53d71a985c5e604f01ef921a8c2e8bd83c350a1b44e9ff08877f80e2661a0d87e34770f83ad4f8c940478c7b6a1475129f9d4369ddc5d2f4f11806d07078b98ffe084dabaead5659cba196a617312d12514b69e6f76528407a60ad339cca2650972169cab370cfae44d90f6a4a9b9e6b0f8f5536ffac1bc3a148532cf8788de11031c912359d92bd8e2af4292259caa77d5b64a791c627d49ca8c4661b0f827a068f0979fa4836dfe1b0f4ed18ace439f842d9ada56c0ed125718929e170d83c473ca67941cd4b6a5e51f39adece6832c06e028f254038ddc7f6a9f7f718f36bc079a3846bf3869ab7d4e4e7d08c9a73abe8f4f27f8dc3ff16c5e69d5f565ad01c8a491408c121bfe75e6d06a6383c7dd4fdb998c3db67f884c2e1d339f69a6cdac1c0cc260e25c27910eea48880cad2e270147078d6d52b0f6d8790a7141fb4a52993e9708810e82c1489150e459a1eaba6a6f16b7f2f7467803087b8ec224d9b8fbba0829185a9671463382c85ce3f3a9a0b8cd81ff138562e226b63e9c518e550ba2d63e185c3e1133612bd7da2e6b3c26849ab5b583f3186b7d7d8cce36e0f9ddd91c7ea6156f003faada9b6947cc26e59fc2bcd576a3299efd45c51f3834eef7f95c39d515ccfe1dfa0184b63b3a49dc3f103387c7fd728cae0d78b0235cbd4dc036cd7fcccdbd71ccafe929357b44b40f53dc1756c1e6ccba1387e48213442011854a8453814152aed6d9c36c130898980c3c3579743668cb56bc332d486431dec3972213cd6893815b089ea52b5e010dd2ed86e1c224eb31b8dcd23e5468639b46bbbf960a4e5a97a006543fddd9c38cd4c55fcf0994b36df6da531c295440b0cab3771f3989afc810324249a7c132b3086e3398ce1fc8aee73d8c5f1a548cd3334d1643f85096c56916466e7852709cf99c73d6c75ccef6729dbac611bac669d9a0d6a36a9d9a2669b9a1df45c6ef27ceb51b3ff7f90c32fa3e8d0785856a2b48f4d54aea7b8a0cc9e3df87237f9d93f544ee0a9ee6069389cb6d0cf6baad218cd11352d55595b0fa149e8c3c4cdc21cc6d943e9e0846647e176dde2bf890c2b7762383445a4b11c1eabca6c533d63735856abec19c5633b23fa165cc02ad6b06bdbc8e7d94ce20952676392a2661aa351a366064b2beb4f4836d60f903974a0adbf47ec6125f8e971d285102d4f55f55939ba2546c021ce8aaf09f284712d6d70d1aed476030221b39743a2c22b204fd8cc53b300cdc9c670baa7b6a353c6904ddf4303c6902194357108e6a5304378cef0131c8b543ff02d160994e9ad43b74318d57bc5f3356bd722b50849b296877d290f9ea835a6d6845ae73cbbfe190ebf87e2ee34b62e74e6902f225f4abea66212cd68f095bac4936cec216dc8cee1e969c0216bd19b3b94d7b0a3d8baa296f538af472a696c63286821a06a558a6ee650fa703abdbae1c8d1271c325ab5760c877c7cac96b1470bbb919fb850905b4f96d68d5c3a5c6dfebb2759f28bbc9b4e79b7241824646a776ae37f64662d65662c4db76fcda1953fe4ff25caa13878535a03a1b2871feaf4bc351c225cd408b6916addd2f414556cad2936156dcde8f586a665bacfd26b01c690bd4151a4a8e8e80510b2e7e240789ec76e28b21f56e50ecb74d860de26b06bdd79169ff9a8b6b2835d3dc7fe451f356acda97547ad7b6a3d50eb915a0b6a319fcfd4da76c78b5d39945dfefe111479b4963a48b3542b9e5649d7243eb5a9f54aad3788cfe35e0c877767e093696cbd536bb589c3508da8bf5385740ddccca16056d9d3e904db219c2a93250e67596d8f11e59091b3eb36112cb1d2860c1bd3185d60b1afdad28412210fc1753b9d4b754b3c87ba3f5dd7e550c2a476d14feb23c46168c5534494f24035f623864921463944365f953db44a7876c89892e610eddbae706e620c5b65fa18528b9fbf27d4daa7d6810ac0e4b4312c957578868de151176ea1ac01308a94270ccba8e901a89b0cb134e7bd885d6bafced0035e7683c48690af105cfc090c36fb9cad436a1de1f3a7fb9a6afe109e840c70eb985a7c26a7d4e267c419b5aabfc6e1ae28fe0a8dad1aca4a5fee711df991c6cf36c724f2356ad5a9d54086b05a8028b539c47e40a7689b77c57aa349ad96cb61943d7b48ecd15ec414e530a4422f42bd49a7a4730cb2d3d33a0ee1885a6986c65500219f8074958fae7212695aaf05bf783a0aae9b772dc1de180879483096cf279e432bb952ef8439dcb3106dc7700869dad1b987751cce92ba5f965d1481cef97e93c58abf1b6cab438b1b2c716263e825a8d5d5c6503cc3ab8a56a46f96226508f71ea148c52d647ec418aeae106238cee9cd212f4b60af3c4487b1eb81ca4efb35ccec043d97002ad38bf4581e9fffb1af3dcf855ae2c34678c1cf881eb5fabfc9e106143772f8f328b6d4357a684154088707be3ae551bec1956af10d1b8143367ac2e1e9a3e6f0e61e8944760ec16122c461adf30984a236a10c2fd7c44b3321e4d0cde930d4365fc2a188f4cce2e33476ff0be37ad555d37ee3224a50547f54326c0f1378b3feb48a8aa39aeb96542535656a2e5c0e85bd03d505dce6d0ac39ac5ae2534abd030eed759869bde829cc21fe9c6a97ba9ec3843ac39b902fba6f381ceacbce6f6ba5a0485f8e68b9a416dfc18c3286efd8f3d83b84a414452ae199cd8a7475a9d6c715f14c6f65b5317cea00b9c953fc463d9f8e525e0526fe130e7f08c56d696ce5d4dadf0bc8063689fc7813696a3864f9f1c6f630affa73bd82c3a373cd2113282fd8395ccca855087358f99c4331899565204d6d0e6b87210ec5e2890ab51b04e3d9efef5dc14ffd2020990e2df66d5a91d89a8a7606d9c2816e136c0f3ed22a06bfd2a6d07543df2af9510965b1510ef924cf549223ca61cb5e4b15d6a5b0c0762ce70315e4c76a5f2a630fa59f4de5622d872c4a91de2c079fd3b2b6194616f11417bcedc13364457a9386286d8f11e77c4dc318b26768361e6745badf82228d85d028d2f60410b2316443375b50a50563c88af4b2b8d51ec9d171cd9f79fe9bfee11fa2f8398dcc21bbcbac28f852429ae60393283482c326b52f6238e4af92481c3f51fb92da57bb70c8e750a560655388c3b7902e9d2a8f0b4b19aec25d4955b1a8ac6fb239acf7431ca228d48a46d613d09c2c11a577f8c18b5e6e8f00e9180b2342eb688f10f9b0af5b288f9f527d3a3ef02127b2b8f1009fd958a876e3077a546748f1873a5f9d86da254a87a87ad88e19da71c20f2a18fba843b278a1068a90f6a97d8d2e21b15d6dd836da1cca0658ed1b1d9e593d61d56ffb963e1ada189e3f537b1a1843168aec164ab5a3ed161edd21ac60c233acaae0e094d4d6d18fda18a2fdf44ec6b03dfbe538cd9fa3b88946e67032c245640e214d1587621265c045bca7e33492f8676f210e2baae61b3b72a5a93da7f61db5edf516db71283d638c950be9d28ebb899a54ba9c755d0ed93ec8c113aba14673a163aa4682b61f42abddb71c75552e675d345c4fb427dffbf247b99f7c183286c2219f2732f5dffbe4d05f2928b369b70057ebc8da8ff009d9184ef819ba4082818de16a42f336d20cf30e3c3771db8c5b28c690a74728461a09cff08cba7fc4f3fd92edfff52e109ed59b2f995f0a99c671b819c53fa0b1fd840718385ce09ab2cce0e79c83222b93f633387cde8773281c4a618dc46cd84eb659b92dc31c7e6cc5a14853c9a73b1cf253bc9273a569e54217d694edee4f17bab0e6d4129f3c9bc7e3506744f44a9a864a433f1ffb5837c89f13e61017f3f00d366a773c1e54cbd3b1cbe14a5581d6dfbe5b6b8a51829c463569644b0cbe146dbe6b6f688e78fc46ed7718c3c70f9a3dd0790e614c49183e96113b59e7168a226531755f74c333df51a487756aaf7e2f85b886c3bf45d105b2fda1f6fa2de26aaeae7416912fb4ad4e5999b44b210e272a7b613864e7b05dd630b7f7f0b127afdb4238557ed7a14a0f3a8150d997cff10fcb93408506632289f5408896559925d619bd86a2a3a76a1bc6f63e72e8303b1fe152323577f920ffa88ede8d2a2872848fdaefda10eacba82b758ed40aa6f267549c6239059a38bd2305c2ffbb64dba31cae94f93d4850fb0020f1e7b70f556f9b8bb5e53b389e8296c699f36f1d21ca5551fb4c45b7a6691f539b1dc2536a57b0d8b77d46edaa4abb4f50a7c6c670917715a9d439da6e2114e932ac480b3f109e59f003a2f6aba9fcf51c7e1bc5dd696cd7f10c6351c17e3642358a43631205c5a32eb51b6887b11c033cd6a218297f77d83a5288eda6cf614b135eb9f804bf5020741e2a1f152b27fbf2496ed000b6affae122876e71680eda0e6159ed3953ee84384440e830a68aaddcd19d328ec39bc9ecab427059a918e5f043ed8ec8a09a088d33a40c3db6471bd28c87a16d2d429dbc55b69d7fea242dcc38551d0cb08229122c9581561a4738e7180edbb47f888748bb83329a36dfdf1ebd66b4319c3d861286d16c21bb85b18a941fe8ac48b5311cef680cdb7dd4be6d5de9f6d31cfe5728b607b8827c29c5455caa1635c6248a3a6565d2e69b3752fb339feafd996567663189e030e17398d41c1e277507a758f61cb5290118ec7c980c628cd24d90679b7d9550ad229ba8cd035d2a98554d918d6f12657b7a7b85a1bcaddc8974ce9fe8d5ee91125c9c0f56212762389c5c6bb3c63ffa885df8ab4aaef9dbd85e89d8ad71be767b19d917c46c8768776a4355da353e79355ccb21dab7eda992eef08e34ed14ddded17e46d94376ecf945965e07b4c8d15b8d6e8e600cdf2c452a6e61f926523a1355a42a3c2309c3ddc23307396ae79c851abfc36179fcab287ed963140e5957084592cdb74d225f7d76d3db796a17b0b249e4a840283ba4f391698bda45b56fe90375acf8beaca9dd667ca84d20f0fc0ecf57d91ec3d9a86c72adb76d3a4eea72edca05fe17a12eb087b266376773a8fcbad77067449f43ac545cbaf6500083e2cd91b5e96f600fa512c08bdc2cb9a128255f2ae911b587278010027b1cc3e16aa8174ff2f128873c26c2e1682d8733f53f328a3a48e373d8f1e8a94f9d317526d439a7ce05752e5177f671469d2b650cf341c2709d5bb859919ebfed1823ed5cdb0ba60c8dbfc3e17750fc691aa973838bc88f347111259bcfc2c3e6901f8a9d5bea4cb13373c0e1871a451c613bd999e1ce75e6d4b9b38dc6e728b269e213e6d936559b3785259ca2abe4ce6369012833582ce4b16a82845d229621eb57b9d0752d666553596d9f24e438556c467fda109a078aaab97121141b58517d74a210cadd94538a42a8777acae1a362b797c17f7485afb11c96de74ce730387f204c1c20b1fc277be8ff76830b3e017fcd07ca4ce02c6f0fe0ec6f0569592ea7a6ea5480d8476fd9a31862ca32a775a917e3f3cd37aa0936594c3cd86f17b1cfe098adb00499d2770c857f35d385c06d27475ada335fc50ecf0b3ea45731840f8a1a529385c22c6dd79a5ce9beb82562e3670a826b41ab01e0335ef2de4641b2348d0b03d11661cbd073f73663b84aef50bf651f35d416b68fd59d98b72a8a235680e10c3a1a4ecf911f011d70843a4e9692278bed81c1a27306a0c97ea3ac89a2cc733140ec5454479da3a0e5563a8b1920f81317c47af27be6ba5257556d4f9a04e09c6903dc37107d564a69efbfd0d6e21d64fbcc7242a4c095b9030ec51a50a6338eeef6409cbd4d98b85d059c4f8d31c7e13c51fa2913afbb88eec673387ec73eb6cbe254dc16101d9a4ce01f4a73186e53e06bfd01c1e2a7b7844d537f74f602a77e2398420f4a7e66aa8770b8e6ed309072c224d9925efdabd9e6ad322ed076a697aa5e7ba19a281a3053496fe0c1943234d51c51ab7e9efb1ea582555dd510ef97f9702b7d85e18e204cabfef70b81aea608c6d0fede54e52f48396506b381417f138a97b07778ea9dc4343ee490a26b1c377ff541b4359ecfbd684223dea6a456ad616da101a457ab00084d184e10ec6f09afde1c20608a38b897f94c3cd28feb4618c05923a15aa3ce3826a1771a8a5a92412d924f2b3901f8a2f45ea9c051c3281f33b0c3189932bea5471f33a35ead46368e739ba19429988e58edee321842236698993a65731fe24c2a1477ce9b4243e561d81a5f985cfa1326e09ab33a2af4b25b62435dffbee0e168aed6cd09acdb9b0a8b6e9c440b852a5e1c2b603a1708893bc52ef0c43687a964ac14d2c8713b56eab3c8e17a5b08109ed3fe3a7cc61833a4deab4687145377ca7dad4e9d0f9133cc3fb9c2ae9f6ebb99130b4dc4214731bb7707dc2d0aee7fe9a31ec52a747e3631e5b7268d3f8131c7e1fc59d68344052a78fe7596780cbca1cae2e914534d2544c223f14efefa933f439fcd010f298adc0e1e331754620b693a04e32def03a8ea203a10c04604a815235c8496ad1414e7cb6a834e537cb416160bfab8be61c697af81a48532344259720d576d1c4bd5af81703218c7342c7455d63a8ce4a7a69c736a4514ea00a11c77128c198c9753c87d2e47bbfbb9e43f53ce23fcdbfd8e67b9442e9cc451b8df1610fd3a8a1b9eec11896cab8c5e55b881aa348d7b9853f1b9eb9a8502723106e407173438d9fe0f04750dc9546eaa8d278561741a866a94da2e1504a6a3ab9180e61128b681ed5516feeb0492caed5c0958b60d3a5288432350fd4b26057bccd61529c2c9ca850e1d91e62d042471e03696a5cc1d3c3409a86384c88fe74eda1c026cc38d77035d20577fc66d718aa7f734ada74c770a88a01f89ac47228c2d55bc3a1ac819282ef351c6a61cf5fbb8462eedb2afad0cc87d4f5a83bd66152ac096c05094356a40642c72d14456a270c837aeef28e8ab4d9b1215c47e336ed6dbecde1a728fe1e8ddd0974055f537111a5e0db4853536eca72a57b0e0eaf525a945e6730449a560ad4bdc0ef762f1d0e1d0bacd3ebf83602a14853e956ea36143c65e4e2a5e978ec1e94b8883de9fd6867284b216c47b3142806cada4b9c42290af1031d6328038504af311c96c73a83e2fcd7266d58eee8a8669443d1ea530a5c44a71dc67e573b90eb38949636dd2bea5ec318ce966ac79801756fc87b823144e78b048ca1ad48e3dd424b91b280b213861ff51d1386dd5b6cb718c7a143e396cda6b6017223873f88e29768ec4ec1210b0c961952558322892b375ae3f5a83b0387c639140e79f0b7c2213f29bb73eade6dfa73fb6a9fa958088d1645cc731263274f5e639cabd370e3333928711d3b2ce9bb762114a5fec649dcaf46ba41636cd69ed1e55f897288d34ee8b8a80ba1bab36c9311228a405842584b67021d0865e09191d02ea20da170b81ae9874e3448a3874ab176efa9fb803ad2db3b6c53c134761fd12378f6a0abd84c3db73186f6b22603a109cf18452ae199dd1469294fddc5660e0d8adb73f8298a8a432708f15514bf44e33640769f10ece2679b846a10325d04d2d42412d967e83e236fc11c1a081f26f82a2e62f7054fcaeef2f3bf28c52222c962a56925e74a53891c229916793fb364773d13eab4d5b295ed910e4b4e64976c61b2e116d088b094bf155f3d9308aad83ec2890a59f62132d5e1b03cd691cf380ef153d9cb2d9643fe1cc93dc472b854db989727f1c6504235fcd32ea3f886dd452f3ad83aa6fb4edd155a39798728e9becf07256ca68854d7af596ea194b099158676c27087f0cc7196ba1f0ce1961c7ed5246e08e1f81c6e46f1670de3a734764b78aa3187d77d1daa8995a6fc98ec96a9bb177078fb84c128f2b7dd7dea1ee026750f3f81104f6e2596d6a1587a931a9490411369aa77bd0ebf591610bbfea44f9d3922a905f94c118a65697f1896a6c61be4130867edb534357ee0475c3529b6b549c640f871a24b5b27d72e84522e23b1ab28877ca156439d7b58bbf7a82a1e5a6b0f47d43d82b8ed1e6373dff3264c62f7043d825fb3da18ae6ea04851cf5d088a481db7d028523b6128e199dd12865dbe98e75fe270e756a8eb39fc3e8a3bd018cb64b702892fa11a7611ef7d1751a4a9e190b50a383c7339e4a139ac2a0e6b9f708809a4ba684a10621d8dd21ad03189076ac7eca834051863973a87e48f9390912cfb853822779d84a11015ceda6b0ecb63bd163ecaa196a6f3780e459aca3f15e5908f8fd5db1c63283ea138d5cb35bd12e5818282ef380ebb75eaaae63ddd2636159df3911675dbe8d4c4c670f688c4bdad486d084dfd9a2852e979611286ddceee2b0cc70b51a45fe570fb98cd86ca9b30873f82e2ce341a20bb5da80bbeb2c64534d2d4b88892bab8dba36e4f074bbbec0ab2af3fc466eeed233dea7c834768235f9dea604695707c7ca236546b63ff2679674ddea652e7663a321268043ac64ed7fc51fa33276834584fe2330f54fb0c233ef933eb1db55f7ccb3a872bb4d0af9febbde0f7f2c18f360cd99b1e7defafe2ff7a5b6d2027ec9daaade03ea2dbaa8d75edb5e06a065ae3f455e3c6113e99cfb0be8f7fa7ac9e44e8537c88bf221710ff4e112b9e6c0ef9470dc29b6339aca7d445f63796e113e826f039d17fb39ba46e8aba696d0c6fe46086de573a3cd365ad98a32ebb6d85f06d2d528fa8e7516f1c6a00b59b223dc8516f6220dc81c36d32191bea51231c7e8ae21fd0d83bc7356599212ea22cbc70a4a934ade10767ef021cf62ed57c6a51ef8a7afc0937d4bba5de947a33eacd31cff8e6b54a018732b3eb9720e7f04d6d8b7d87b90220dfb47dc0f2f6117eb7d6a3690288361678ffbefab677a7a66f0dcb8545dac9afd7abd849827f85df80b9dec7b7f52e7ed494d50c87584a2fa3bd8f3f87dfdac7c9608cb05f227fd4714bfff5c6837adb18834f807f8bcf049fa9febaa008f7f24abb8b36877217c4e8d96e61bda2a67b021fc867c89fdfb851a7d15667a59e1d7cb9f8a7fcf8c03fa210aa97825c8570c81f1ecb21ff0bfc8663b5e1f66aa4af7f5d3da77af7d47ba0de23f516d47ba2de33f55ea8b7a4deab3686fccede9b4e18f6defddbbaa21edfe512f5cad4db535ff78122de7cf0dd15868b0bea1dda10eecce10614372fd188e3f00751dc0dc8de11425e08992a17f1a185ba41c3219a9a7ef835dfccdbb1e2503dbc7ba7749dc46069daab50ef0cefec55e19bb119a9a933613b23cfd403e53549759519f2206743c41cf22ce4d7550a42177a17417f1c08781faac34543cfe3c975509252b6d613c9d4e439ed48d39a9ad3356b09bc44475b1ffa24ed6ce199dec549a55b14c0d3842f4d55e745074209dbca820f73efd8c6b6d54e6c3a8074a42500632657469a382efdb529b2189f8d67fb482f2f341cf2f1d8dec16db5ea979f38fc5a1e7c8d1b2d4a7b351a8fe016f6eaf82bbd06f59ad463d2da30862c70844351a4bd8efab61b2cb4c72ab68956a43da6ba0f3b198467764a18f60654d9ff290ed7d1b81387dba0f87b34f68678b6f1c59d2d826c7eac34f5f84ea8a2b69e42a29744ad70c0610ab793399c5ceb5ed786c3da9b36623684d2581a2116352f9b0a5de33b2d27ba4d46c0e152a3256b5b658983d1a807cb500847a06ddc6892cd6a06366e2e876ab12c9f616d14ca164ed45633f2b72444046c1e3487b2ae3296c3e3a4a9eac6e7406a1e5a2128157191b09348fa533f5dc14710f954f5a2c717f8118b6a9b43d9cb691d87fc3843e5b7bae0ac08f89dec19de2ee0c9df1d534fb5aeebb1a2c9224c7afe8c92ee8786cf610131d25e4e7d9b8f710ba584ad57c0900650bbad3084222d3a107e9fc30dd5a75fe4f09768dc06c8be6ab7cc6e37eb8d56562fbc70a4a970c82e44dfa3fe98fa13ea9f8340e6900773d8bf00872c6ffa97a10f97693156d35af6be8c192a665357ee13db2519b521d4264b4773845f8b3d54bd24d47aa8241ad8c09f3c539dd748ed3e5f850264ef0b6f56b53b7644a43ad366cde6900d114f5cf9ebcc39ab5033d05ead871732d7d17b1b6909558e73a4718d5e70f9914474daaa07871d5592c7071e3d9ee230612d38541908292be51ff1df351cf2bf36b55cc4580e25e255afe9f7f7afa8cff7f786fab7d49f527f46fd39f5ef90332c9551d27dfee2ebd277481eb675dda29ba80862a485503d7769f56563c88ab47f1f85f0dfe3704b1477a0710390fd07d537b1a75cc4c22617919f9afd47ea2ff08cef3f6908c5243287fd671464f45fe2395c8df45ed0eb501425f6f978d0b981d68d0e2180c3a4bfc76052ed73e887289a93d02a5b1e7bcf4afd26dd8825d3bbcd5f670e83d0a85a9114bdce1f277a774725adb5f9351c4eaeb5b5e4d76c27db47a1b4a114a34b530cf1f11c0e8d8b18cba1287ff4daca507fb9f6bfe8bf52ff0d89fb45417328297bdcd6f7108492b537256cdf5c61d85f4515e9bfcae16fd31805b2afba188c7d1751b2f9b1d2945d880e5fcd12dcbf7ed987304dfd3d3aeb61e52138dc8fe790ff297bb7bd288a00a9e64e68691b113a7f55f8562df9526d2ff02759a98abbc8afd988018043bd8e3608c9bee8108893364033d25ae8c2ea3446476f05611a64e850f3892e3773ae6dd92f4097d316356b7328944aa45439b14185f772a26bb2e55fb039e40bce1cca32ae68e360e1509674cc54bfe0fe01f50fa9cfc81d53ff84faac81d912b2853ca3be7ae2f46b30862c70f0baaeeb66d8fdeb37b4221508df9d12b66f240cfb4deab76221fc0d0e37a3e8f7a759574ab2038a3bd36846bf4dfd8e0a992a1751b2f9b1d2147bdcf1d5ec525fc53ffb7d40c883699c318103ac1fed0f314d11f09c2af1e673084956d98422f6cd6d69908c6294ee4f9ab489eebacde72c66adf11062499ab5c9b7fc4ee150a226e66d126e61f16927f1f877d93facb7428b1e0486c9b5e6102b332ef53242a5459bd2ac6d12d7365f8cdee45a73c862d8f67b652192cfa12e300aaabae7fa1914e2b00a14657db3db182a0951cd974e2fad5424f7f97cfaa89b791ad3fdab122c09ea27e119f6556cac9fd609435c8d9cca127f503fa36e6b56bb85fc2c964515d2249f15693f47fd3cf50b5f3686357edcc7b885bfcae1061afd7dd7365475fd3d8d03a281879cacb888a6e03bd64564cf7e30a6814a030ece030e071734b8843d1c5ca9449cca92f17fcaaf85437bd7cb581a255e7adc0caadee41299ce8292096ca8297bdcd291c6e36430bf51847da4aedba98e52d60ef5fa3d838108c57ad75d025f1b6a60a28b7185e49a18a8f3c0d4974d315a844318e73dbddecae150aa49c5458c722855dd92ebb739948bd32ae980aa0de1beb2fc5de5f14acf72dc9a6b1adc00c28b3656fd3e4c68704b83293cc3817a320ee6ba840dbfebd7cd0ceed48fee3584665145e519cfe8c1036eebe0719784e1604183a7ff84c35814c31cfe068d3b0039e0cbf402bdc1aa63b0c4c32f244d875a9a8a8b78d4a501df9237ed690cde69c0ec7dd0a04483320df668b01fb852ab91c561229e438322f26c130d493d15e4f77886c916f36d950e61a896ca3234151848faa9741c8f7a472506f783d20209541e5f859e7de28822a8731ef026b996b6ca3a067f5d0d3e014948d6275afaca28bd85a4a97d0b241e53ee041c3a775ca2c48643bb8046dae4d8ba9485289e2c5dffb43350dd3c580ec8ff32f357184aab0189660f0e687048037e714c83131a9cd2a0428333ffc655758c54383c5763e0fbd5ec250eea34e0676e530dc6cff7de079daf43c873a64733da99c3dd52171b6814fff03474577e03c52f01090efb8a43cb4534d2d4d47c0b87cd2a0d063418d2807f314183645022235193410accf014977267e190678cb31b7b2c8d678f2ab1ae2a5aeccf046c55784112129430469530179be350418f4c4a86e7f44e73c8b353a22646ebf22ce7f3a9d780b76df7f803017cd5ad104211420570b2536a272ac4f08afe5c45aad826aa519afcfb6cc9eddb2de7c0a714e510eb09c76a2de228c42196fc8e705525aedbf66b7d70ad3efcb61749edc10ed234c8d0201b13a1610f7090a3415e270c3faa0187a864bca44181064508d45e3f7c5b1f694834f46838fe1a844b14733384bfcde136281a1ac16128a3f507347e0ae47042677b0882898b680abe63a5e9ea9c863c2e54063f8dde0ac34b7ce56f8757687439bcc6073a7f22ea1c6eb68db257a6119c6c859c8717ff54ca569c700b1b13a9d2740e4a3827a4367d4118ea176a1db4d9e05f9785854eb6b0f4e637351dbb1cc247dd8bbfd7aba1ca6a74f429b9ab2b869ac3d885bf7c7ade75385463d5944ed402cbe10d9635cd47749ba55bd69f031adea237e97d0e897bf61dcca28acbbcce52d8cb9ade8b6e1736164ad29274dca7e1f46b1c76d90e3ffd3b1ccad8c8e19628ee4ce33a2087331ace3587ec224a369f1d03bbb0462f475421d3459e867788911a0e798043b593e9f081868f91bff299318c0552fa3ef057ccf58ecbe1c9ab0e2d3aa646d634d8d495defc0e8b1687d219c0ed8fa60221d1150fe58926b93c7639d40d8b231caefc2d87e338d4d2544e295ad82deb3fa21082c3137d86b18d30440f0f17347e4619cdcd19cdf9e63ed1f0199b8ace1ed17e06e199824e18462114b7d02caa3009c3dd7a5e0c5f9a2fef02e13fc9a1dcc275634b1abf03a4c3a46cbdc6979b9f7ca6e05b4ca2bd1cf1e80e55a6f7f734f433164ce0ed025ff9dbe12beee5f08d86ef2e87eb8234dba0286d3ca5579209e1484f4176fc9cf92dedc9740ace1f62d04c9a4ea6becab66b60ecb481e99f6d8fd29b5ef5bf5411143b30234530b62e0d5214a7ba278d7392c18360e2fe212997995cebd2992887e204ae46f11c0e57ca1e7e20523a3ea2f91c4b9c862518c3eb5b1a9691ab308ad45e652f890a815062a4df4f181ed669b86720fc2739744235ff218d3286fb501dec229e5ee882ef75d254aa4c87077476177088e2297e7da84a9f7a343c7243171b82349f0e4151622d365db09347a14c83206756afdb07459a3aef943513369c2bbfdb67d44649632bb30d68c824ee050d3b9c5b23b56fb11cca563c51db2b825c121b0e842247a5fc35cae1f0181d688627343c45e78bb363d038acd0f00cfba82dce91b8bfdbc77edaa2486d088d22650825462a09439e0f3c2b3eea5f4e182e2e6858b521fc2739dc6c0f7740f19b400e6b78e0b10f60423551692a1cb29819b33de4475d23c421046a13bf386cd17bb8d7a8720e9b2f591e3ba2381be9bd681c0e459a3a9906097e8a18767c3f479acaa23ed715bcd0b6288c874e36d8a898ff4ef7f08f7028d2f438e942a8ab494f74f56c944313f98c42288d30e489e01ac3b6b27e1d1a7669d8a3c535cd5e69d8c7e6be374750315e2fac48e320d4ad100bee0ac32f2b52764a87ff34877add9a991f3f4ee30e400e47b8d62654232ea24853b7b0260f2f7fc8775dc56904c2aea7bcc414124dc3349d66d671b81b8af8adc9754c27a58f13bdfd836b27e72115baeee06aa42da78d81a4e0ed83267c225d2d0c2ac2928e9afac977874351981f27311c0af3b6edb50233ba8f4eec02fcd5506f0215823043873dd4730fb37454a5610efe218c21bbf479f4806615d39868453a3d0841288af460a1dd425b91eeb6c2b0c58f838203e1bfcaa1b92bdba0b81b8ddb03392cd248557bb38b28d97c7e224a4753579ae6116a5be469e4690e19c2a9aaeb1f8d6934a1d1398d2e3670b8238d3cff24001391a66ed8534bd3b92b4de5a08db1eaec8219ef2027a908070f693f510eef33b1f417d74b3ed0b9f872e324c1e84068d4f27e3796431d8fb117e09b00e93ca55b451a08cba734ba44e319e670a4aa7f46d7e07074036378ab5ae5a31b622150a43684a67ecd56a43baf3064453abafd12843f92c7ff36877f40e3a7408ea6349ae1a24b36dfb888d1c21a7e944aa86634d71c3284c2616949a33b1af18f1e421f0e51978d1d5f4351bae547a56934ec69c22aced4771a4ff0af7bd7ae0a95cf14065c364e43fd0b0d8a467f462194788c6b878d3b3ad27ee0326e7b43d1ba710b0e75870ec3e1e811fd4859858e9f69b440bfbcd1138df8f58bf20cf3c855dc3fa8c633d758502aa9421b4251a4f6a28a9df7301c2d692ff73fc2a164c39c1bb3258adf043216cbd12b8dde10aa312ee25a69aa4235ecf18fde61090d873c18cbd10a3775f411fa70cc9b780eb7a7514b535917eb5cb4b19f27705468399ca6e7192c076deaca639d907032e912d471c050f633244d0d24b258b13c76395ca9558527afeeed367f4b608b72c89f29eb1ea3ab2b66ca18ca9a606d0c4bd891f289a19dc2450484651aedd1db111a934aaec256a402a12cf0bdb7200c12868fd831668726f9cf656ac428d27f98c3e8d3faef693463b44f95393c01934574b217c6244a367fcc46ef804687210ecf78061ce1fda3e35010ff330eb7a571a62a45e77e3ff900b944bc3415db651b3a593fb10a872845523ac112e66d12d965491a8196e3d209cb895e946443688624186339940a98a83114d88c8be870b89c6841cb1c36cf11249ba8fd2a1ec688918ef886329c153408bedb43ae62751e52a406c2e35ca048838d44ad96a4e5af34801a9dd1c88d91fecf72b8038d3f02e4a8a639942ce260192f4d2554c322677e4da3bae6f0ea195f791e8c1a4077d40c7df2761c7e0a247e54eea890fd3040519c259ee80e5da242a307c5a0d970ca4ea6368433d5653876b7b3c9b5aee48c6614646b9a28841256711224e66f49f0d3b18786ed6315957120343dda70d75a346aab7d7ed4fe4d3729a40d471d1a75e9ad8ac6a40f0de42a58914ac2d086d0760b6314a94a186ecfe121eba01ecdbc1d38fc9120cdef70b81b8ddf0172d48733a05dc40dd254b9887c5f47031a0d6934520ddafcee6623f65592344a61811f9ae7071c624ad586aa1ed2af47adf7b066772f1f0b2a962645cb236b6aa741c6129ddd2e23b5a03d5d867a7ca155285fe7b6ea2525f37e96d4bbc4d824d455396be92d4482845ef8169cc69d46749c1ee922ece81d91f200e96a651e0dd80ee024be331d5a48ed6bd9298b3962384ce033f9d28dd268c156b7dad58d3234cad22847a3bc5e713f528b7d47454a10253cdc237967b740893125269438a7c4c556ff66e2727d8cf49e1257eb20fc873974427f3f4be30e4026aea1438443c95ec44a5371111337a8034edc52624a891925e694b8a304df89074a3c5262a1bb9b098a33d5af85271c33c328a259db480dbf651bcf3c44eac31c9e64b16697c7deb31ea8f6ee612aeb162c2d9465a363c503eab675ef8c8cae113f48e81a4e9b43c90738c613a77a15aae71493283af3b8a17bb7c99015b7b5362892d1507ffde435e0706955bd9ab891e150e2b1b81435d59a6d8c955c4c94fc8fd5192e91be7a08e4e0845d5daa6233f28189274a3c53e285124bf4bf48bc52e28d12efea472b4a7c205791506ba613655cb1c41e25f62971408943f542e83aa6044f80534a54287146892a25d4c28b449d120d359a9468a9d18e87f07a48add10663f84f7238b9fe1a87dfa1717b26131db4fd61d75c5c445de0e64bd38756489a26d41a9c442fd0a5c7377891603807546338fde57cc2211a8ab67816c6d8bdfa39deb9dffb5caf8ae1c25240d54ee2b8ad53fc3c296d6d292d61f82f9a193f3bb174e050a734020e5b98f48e0a15e1e71c641e0ed582afea3446970a8708632603148dbf6a73288b09f969b2f4abd8cae1c0ec4152ae093e410a4d1d0e4fa5751d83c402a148375514d03c74b005502241892425d4f924d208cf2432be35cb6a396a179126546fa8443e2861dbe7fbab4c68a2b8ad224d9282f07f8e435d2becd752fd0d8d9b994c7a941c875c44c95e38d2747509699a9cc01e26cf2979a1394c5ee2ebe890925794bca6a46a1ec313ee433589504b90e2e95a2a995a7bdb9643d6f35885d452daccf7278d8cd4689da937289b26cbf66447241dad51bb4dc9a43fbed20659ea726c18f85b73d0c0261c4a5b0d27c3de562d64cc6208fbcef227c8b34338ecaaa783f973fc42fc40f387ce1e35ed9263e4bfe518433e92bc85187e9c91c713ab86a4c5f40ca9a3e4941e4b9454922139875b9854d2bab7722114b730798f166cc907dd854d7a5e241fbfc0617241c9a7ff590e2585688710fe184807cb245fd01774a4fca8855cc41869ca1c2ee166245f29c913e25d8d95ffe283923c0fca6a5e7ee093cf742bd1f580b18f74b62d87e828051317fa912c235e8df4c5942ebdd2d3adae1a93b2273655cd82d9753c79c3aa7f7ecd47ea6a5d2c8b4367a9919820a977b179d31c9e6bb9682715b4833ad24d8da5ef9b2cd845dfb7b3804374b252123d183ddda28ecf1663a49f62337f71a3c361f994927b94dca7e401250fb10a74c02f18bc634af2ade49faacec5fcb8bce49ba5fe74b21a40c8eaa672a7131512237576d5de9ec34e9992351fc25d8234ff1887ff2d8d78bed629d9d0a19ad28795bdb06a4d8d344d36b772eb794a95deb4cde17939e329ebfa819ac3066dcd614a94a4fbd3fdaeaef6823d546ea17c8b08cac1c69354f44655e8ccdfa42dcae134a1fbc4d89edb3617842f05ffad2d3bd38143d406582ea29fb84fb628d9d64ef26844c90e1a61f0d764176da092fe2aea645f759d496a0e0542a3484d1d69b4846d4b0ecb7c1a030bc2ff510e3f221555bbd1f85340268728621217514bd3d79034d5cba08608bb75d92be019c0732249c91425d36a642899a5648e92795d6f19e1304aa3e1506511b085cb671caae08a5db33af365a484fbeb6ae6c92a75d9b35eb63ac44e126a8e361ea9b2c411930c9404a0d18a465b3abbbb08877b795d351a6a9aa674e97e572f2c3457b5ac167048e7f283a53abd7d0469cc1b7007476ebf9cd5509f83e4429793b03154fe5bff09d73659a4d20b96fca688521e4aba1f1a94526d355213889794f2c053170184922d348d67a25dd852975b7198baa2d4f5a710fef31c1a1df553347e13c8d40dee043f148fea813495a8a9bd0c6ab280b3c14fe2d42da5a6949ac1337ce8a83801df9b391d5d53ea4ef7565bc3a14d63c0a178928dc7f8a422f0aba9f72bd18558a22d4d479a437ed150bde555298fde29cd583969f4563f0f1d7c506b1744853ab94159866fbe95fe54d34478f191c5a194c83c841743208aa36cf2992a706bdde0eaa98abf6048ed9ba9cea9aa6dd8843da9be329f96baa794eab3965205b729369bef947aa2d433aad8eef6b0ae22f5a239e49b955a061c1ab75014e960a91755f01db74bd85e542429f5ba09c2b326a5deb63186ffe31c7e87c6dd984cbd439630879f4ad3d44adda70f4a9528550e384ced516a9f520794526189c67033877a180e67496debe0da8539943ef3f5225e37fc30c66ce84a5350a79ee58dabc0d0490d8dcda1388476f65c88b53790107324189b23959c0ec646fb530887aa498cf2e8c28b920c871fbecbca67e2686003bc6e763cd31c8a45d510f2879c50ea585d7f7e714aa90a565aa4ce28554515dbea865235ecd98437d4a15f520dcda1a95fdba048b5a1537e47aab5b61b0d2b5294ce78dfe7f05308ff0d0ebf4fe3f64ca6da94ea2054c31cda51d368423fd5d57d84523c03fa941a58634829e97134d18be8b7e350bf6e9574c00346e312dfde1675eb6e48cd4bf026cd97e46d4885b7fdd10d3a791fbc6851671b3ac3a1084bdb2209b1f60612b1d21479ff7d8d5c5b754f753954d89423bbd50b87d203d2ed0d37421e12bb061ce0111374a69b9b2a36ed22b2224d25e8698222d2946cd4a1faa00f56944a512a4da90ca5b2c19669a91cee572aaf3934106a451a5e5461d773a70a9452bb3ba589d25e5c095b2f02e17fcce1f610fa1c86da0d455a30fc36901bb04c8f293d813e91ecc566699a3cc343377dee6e94d79f207697bea0f4a5fed82f710809b71fea4a26bc356e546ade377dd5123609ac9f85df06e18ae395a596b246d71915ea7388992da9b980ba84ab42e5a074c837a68f7f4be29ffc74906c61c0e19956a1d175ba7a4ba623edecc5d703a9de702839cae8cd9bec0516fc81e92b64890ede90a5485f53fa86d2b76ebbba7e036d48d36a7b8ff40cf72bd5d51cb2a2e90cb42235256c50a4652a5fb9256ce939a5ef1487f731a533e9873fe3f0c78da1c5a10c49e54b21ff57c74f01698ff423a5177834dad2b4d20aa4a9f4359515fa5258b328a0e03bfd04517a53a5c919346afa19adc1d22ffa63916a5f43e076233e6ca3b6bf0e1d997ab295af9bd23086ceb67e0f6a19aec3a144741c692a4dd022956578c484a4a9b511af147fc6ecce9bd4f9c0e88a0d295573623fe69379b6a49794e667e202add399c687311658a4f9e9f94ee9152eb8acab403db7aa2395bdec0f165a8e066ea1a54865db26bee3cce19675a4c7594a7ffc1484ff06872b2b99bb1b8d3f0e64ba84aa9acdd2549b445558233bcfa4cb0187fc22bd47697ef4fa1d2b300bbfc561fc28a17d751839a52dd11ab4628e6814c5d085e6fd48c73c1d15eaacbeb5898d1222414e4782ce463ad9101c0fb6aad79d6c62384cfa7e609443354fd2ac5a13747e81e6dc3216b7943ea4f4117ab12df228257d68ea4515b297bd10284314692b1bb442942e6c2c7ff88e6f59cfbd6099731c07e1ff250ebf43e34f01993e51a19ab1ce5e44a5a9bdfce25c366363ea4e35878b6b7c4d5e52ba42e933fd9998c1bfc0e14c252a1c63cb5ab4a28abced83534fc76066c91087a8b677ac9fa54203433712db1b8387940a3b211991a6ba1e2d0421cef9e344af2a8c2eda902e38d12a36f9c07495d235baa882c0f91d4ad8265794ae53ba815e6cab1bacabe0dbc13785bd06af1f03a1bdd6de2caa18f7bfb0d237b968be5cfcffc1e13769fc2690e926eecaf9dbdaa8a969b9afa5691e3320dd8225140eb5346d53ba6338d4c6eac7876e0f113e285d7d9d839281108fd1ccfba8f5b3a5a94d42b0ee364cc872e24b56074565f7602a47ee98a7fccf4fb81c4a7876358ce130ddc589a57bba67ecf90779ec16b20bc74ee300eb2ac6f75804632b5221b07267b985be22351b897e49913e75293d5c03e1ff550ebf4fe36e4ca6d90f492817d197a6dd4e204d9d1a375916dce4e77492d229cd210f48d3341d357fd71eb2955ba9a57dce71c5864bbea7362d931558e2a78949940d926c128204a005c33ce5b7668a10a29708ba1c6abb17e570e6af5a9e0d5d1475ac75ecfe896186d219154863df2c07b7f026850587e93ca50bd851f4728595be78265e69456a43286ea1a348a5846d7b458ac84d713d84ffb739fc4120b7c732bd50d97c254ded5a537bf945b0f585dfe13b43c04f386420331e65c694517f1161771544e1f1e3d2b4dc8991a6402eec948a345d8d82f7082d93707b42a342ed84841c54ab905c426643fd09510e252423b43bd2147533237f078184f5a7958195f3094cf129b552e8089c39a7cc05652ec1e17804699ab9c28afbfb3cc233aba4dad1de52a47c9b04425b91dacb7cbfa44833d794b9f97108ff530ecbe32f73f8e3406e4034730b17d191a6b189447111b13c9f399c06f690c7b44e99191d64f487a3cb93171a3f8522760b7555a88e8544a5a9771db693432d2c43d66fa457fd45a3a3a6258ccd9b94c2448fa3c6e0c40f17bbd2547d7e2284a2f95bd2a4c3a09e9903c28b0e65eef0a3cc3d36ae600e330f94794457041d9e092b52213080d052a4d278e64b8a34b3a0ccd37f620c7f99c300c52f72f8db34f2c83cabc7e453246a6a9944bbd614edd95f28c363a908ac61b06dccbc524677220bec61747c539ac6aad0e544f57d091dd475734e08871f106eef898456a1d1788934b0704ddf5097a4b9290a159241fc33620f25c083cfb7b625b77d5113837d4f52e61d1c2ef949b7c207be33991f6ab07dcbe9b61708cf2c03456a20346ee17714698d2d6159dda97f57947e83c3b2bf5f8284ce761bbfc2e11eee50549a46a335469ade3f60bfeeccbee6f0ec042f32079439d413771d84df07325685cec46f8ce42d65f3d0f883b6e61cea2688210e877e7e2fc2a1a48223290a958a98681b1b40a8b6dcf9108b3d8ca0a876d758f9af53f7b0849522da22668e28734c9913b8889953dd10717c0fbfc08e911a08c52dfca6223d2c52a64299b38d1cae85f07f8d4393a7facef8310eab6873c0cfcb75d2d48ed698ec055cc49a16a5cce1d931cc63a64e4fa79b8ce1f78194dc3df08848535895f09b1ffaae9de45f7f500b1a02a75171581e87a5694227f1a2056b623f5dde4671d2d4a26e9ef2bdca6100a74471845edc8806659ae09021bccd628d2f8eb428d3a64c07dd811fcb78025ee603456a4368dc423b46fa51ffa222ed52a6e7df977fd739fc3687a5b8bd44be09e477d31eec84f455d56f589a9e5e04b53512ad395804d274754399019216c2e1531faf33fc141f7d0dc21dc88caa50d1ab48183a7066f56228fbc3459a221be985688cdd4322c80a86bd41e9951a1b92d1d274e85a3f1d8ff121343b79ccfcd841260157502094186946e569327c928768e52ce119c9da9b558542a0710b610c7755a4f53965d29f41f84f3887dfe6d00e9aff388d3b6399c9f82ea2254d63a335469abebf5126ab15a97008699ac3ce19dfe77033a29eea46614b53a10b7a75e8be5f56453a07a5c0d0fa4c102b9b9c3a12549ae747a5a938fc31598a643824630ddddc356e674844cb585f14700d9f26a071aad2f7e943ca14294bd8c950c23368cead14e93a08f9b96967edb3de1762a4d9b1754dfebfe5f03780dc92ccec048f4c7e70965611696a456b2a77be345da2ac915dc4ec79c0218f748ab217bfcba10c59a117e2d3d3693ae79d3a56990a1d944216e7a08eb20c43bcc9d2874868d40a81464ca26c95e14028fbc949f622b663321bdeec256ce075065f6f17c8ddf72f287b45d96b84679edad8b689c588b42195a84c144253472a1b896eaf48b33794bddd82c35f740e7f2958ba2b87bf47e33a44b35344c9ca975a9ada356ef1d19a219a9a2e33949d8538e4d7d9f9af4338b37cbc305daaab77f8cd9e5a323f1bc51d0c43ab0aaf8355c8b351449a465c41f016e6507a58e93850c4244a7427ca61f60e3fcade03c2d90a256c8fc7b49851f681b28f70c5df57a89e6119d29e68b7d0106820741569f90b8ab47547d9c5af1ac37f80c38f935d38fc4b20cf3a9455debc444dd924f28db44da21dad3189c4f13d659f7590061c4ef022fb42d9e5afa3a8a5690824df1b8c93a68ef19c7ada6a85384ce9504df0ad02521a9a4479d32150274531d429c18834c5a77da8288e0be12b65df28fb8e9d0c99c3f3221d9d537645d90fca96d0f6e2b18cea197ef0b1223dcee91d0b0d84adac86d0285259e6ebac30dc30166c75cbee93eeff26871ffe662f3b70f8fb4c628af457b86db6348d466b6491be49249659c9ec51765f73e81581e203237df01726d1f1f1a66ba4e92c4e9a8a45c5764ee17796de42cee4ccfef56104b964589a86edde43dfd1a5ba1f8f642f0c84cd2c650fe110668f28cb4fb113ba7dc21e32e7ccc629652b08cfb02bbe4a6a45fad00af213b631341b188a22e59bf805457a1652a49b38fc2744e9b73994364aa682f19be34bca73c34f319388b255dc12234dc52406d19ab04994680d3fa179966455f642381c8f904eccd671cf7e9bc3a80a9dc53b7eba838663279981f224569aaad84f30f9740847bd532faa0a12f7929d1f39c8e159202199687454163a05c6b041b3374465b24d1a3e52b6852bc9fe61b68d1eead37dbf7ac6d33152d9b1d08150ba3ff113939f9b08cf2845baa531ec9429dbf9be31fc12879f42d57c59f0881cfc0d0e7f8ac66d98b4d7a1c67098521c7611b6e68768d6d3d254a2354e6d8d3189224d7996647b94ed071cb249cc0e28ebd7e9ff1e8a927e700ae8e21d3f4f7724713e41ac5668fe992c5f78fec9af9bffc834bcd2ae60c40f94651c224d1d152a9a4843c866308176c0b868aa90a0b18707d90d6399a27107e199fb07159e59e8d299901c356ea19fb5e7fbc5befdf6315228d2b47b597e42943ac87d89198170cbf1431cfe2c8db1582e27f11beec998a7fcebf84efda696a648e85bd11a59096527304cb4861fd5d90c6555028327d3585542b279ac37dc5bf81b26312a4da7b18e1fb4a5ab42a7caa2ae46e199e7ef1be39cfc5c367e8ace4b64059b66cb2a1b4569b711ddc14af4b0f099cd01c2db076c2c79ca2a340f17315ba06c11ebaa513dd3455c7a751552a49a401f42be2902a128527e866ebf87618e50ccbd2d879bf05b272cbf6ab8becae1964c4638fc88ee22f29b40ce55d65b1ee7f1c670185cd69ca7b3179248149358a9fa2ba1c2e5a6fc7836d23437d62e22ca913f0064fa70d363f5a73814cf2d4ad7e43a469a96c3d5e7334f8171a2a466082dfd998e3445bfb64ae47f49f959fbe0ffd2a672a572fa31298a91aec5c94dd0768d2164e7f03a8d084dab43b973ca5d50ee12d533d8d3b7802b6c62a45a888621341b181a45ba658cf4ac49b9abaf1ac3a8adfb412fee9b1c6e00f28b1cfe0690f2d45f0de37f3ab59e733975fff8693aeec3d1dff75015652730ec0d30245a23d23477a3a5e95825a0f9ebe48c72b71b6fea0f30b9c9f173f4aa684b3c772282739e72cf472f23740e9ec4fcfaccf35b81446dc5c837b65665ac91a6c93ae5a6a89b91947d6989654d39b54b4f6e4eb93be4849edaa81f64d16114a94da00da19db5dfdf4e91d6ae29771ff7748b979a7f134df91908bd17193693bb72f883400a87a69eceb88bfa346c0e1fd01448a4e9ba688dddcacd48d316cfaa47ed22f2ac9abdc324e6165b71f81d2c67142f4d63919ba9065051c1591ebb76404c59f4d75d112b63e84bd630877c843f1906d01cf47f85cfad7b45b92714aff1e5e28b76935259fb3dcab1567cc1e226596ecf8f39a3486d0205c268d67e4b457a58a4dcd258b95faafffccf39b481541c96c21bbc7c89c3ef03291c4aab223922a7a1037dd6d4d9cba1439e98445b9aea684d9c491c3ff8d2f455bb88ac4b9943946575b63589df1a49edf8d9f2692e952bce3b5351152a8233224d8791cff4b4040d49539f2e5de0163189e20bc498ca21e5dea8dda6fb57bd79963742da905fe7de75ef195b919a6edc510825462acdb9b757a4b915e53e76c82bfcb631fc250e79581c1a1477e3706726b52eb59a97c9421bf15e9c29922ba9ec854ae89b688d74dd771218d7ea390d69bad4d2f4c997a6cce15c02a7f5dfe730a5556898ae38c78f6254e8ccf3db52840fda5e9f19a22302022dded649537c78f8fd8327ca957126b93dd8c0ab14209cb69033cced53ee006db8eef675c29021acdcb910569e0161346bbfa52265c9933bfc6d08ff5b0e6d452a2713e650c6f739fc12938643e3224ae4462fcc73383cc2ad0aa4e94693c853446a6b5e8748e8e7fc6cbe7008abc873ebe49739a46d1d3f319e1a0c6b8840707f3d569a2662b812fba6256b9c34b54c25667cee940ed42dc89cc0069eb22f9aa6ca019dbd51aea21386afaa45a514737706f110ee5c479a3bdb2dc9fe8f8b52835cec39afe3d0140dff1c90ebe044be3bb2e44a8e44a7ce70488775c81b89d64413184e4e5fa235e86bcad2b41ab88858bfc38ffc1ae5fec02426234985b5d234aa42752c74e6403bf47bdbf81f8891929ec59ff2163295f8910f61659fae935499d1aa82d0e8e903ba3f4daee8bc4db90675aed01a581a40f1d3cd760bf982cb3010caf2c2afc648c70b2a15ff4d08bfc4a16debb639f9380e635a2dfc0e8d8649535217761163a6144c62534bd36d4c223fb08f7348608cbb946b0559c4b93f72d320a7ff5b43652fdca4422a5a1983a117dd870f0295b8dc7d142ddd8d2e72d1244f1bc9ad195753cff85c1b9708a1d10efe68ae8b74057398eb51ae8f84a15e61b80c1215864003a128529da8f84a1de953975a8d7fd6186ee0d050e79fc9974f7e4b0e7f194829fb90508d1c51cb9dd670a89eac6212f91ea3dcb41c2430d699c48faa92a683c0457c1ad37913af7fdd2492ffaf850fea661311e3e9aa50d231e4e8c118af4f29fce845936c44ac34555b622808873ab95aee534e65747309046918c55c52270c5fd51a6b51a44854442ca1bd67d3971469b945b9d4df40f87d51ba01bcddea57bfcae1ef0029ea48aa6ae48824f1a3711a7098c63d630e8368cd7a93681218fc08674d95cb84a42973c85f1138fd6d2f319a54a0786f30d096c1417c1b28db8d68495224e6ba797e4169c4244a548c1569f25271d8875b78fb44b92ce57294cb53ae40b9225ae0991236a3486dfc6c63f8d4d1dbc56caf48f3c4e7f06f1ac3e0177de4ec0bf8d5b19ec3d5f0eb1cfe2890c64534ad90449dce86c1cc33b370d0d3d90b234d25a72f2b30d69944f667eef629efe90550224d99c3db0730b95b2e71ebb126fd908a73fc62a529c539789e5f3bba5d364202609109a4572ae6c780104fa81a02a4a525e527943fa7fc05e52f69dec10a4356a4ab2b84be8c228d4268777fda5e91e6afa8dfda19c21fe7701d759bc77780f439b451fc1a873f84a5bdea4a1f1cfa3d5afc69a75d2c4292d74853db24caa2c47526f1324ff96bcadf84a4e96d1634f291dfcd25525cbd0bc5e524480b75dbf4094561158a1b19e7f5e90e17ceafcfd4b6aaeab83b1bf89df95bca4fd5bab03ed4c1d13912f7ec2bf25fcccfb097a8a3484dbb277b0c965a9156aa5f5bd954bba66667072df7b3101af0f4648bdec1adc70e46d2e2d0d0f82d0e7765d2751113b28447a5dafc4ba30b2089f2734853c7249a4589eb4c220baad50de5ef108ae039c78f7f6d1255d7a3fcfdaf9a445c1037404af1dee02c15ad80d114392a54a4a93b4ba28532fe71e03d8c99ee7cc7f30f947fc495b94e2351c1ba945fe417947f42099b74614306481215853808fd5d44bfbad6beb4f80e84bb71e87fbb8ebacf9eaa3fcd6484435d8e98fc2114b7c67239d155044bd308d0f31701686d609179a1a529cb1e89d68849941652b649e4f92126f141adc0b82f509e55d08b368986431e4c667e199ab53f3b7444c451a1293ffd10be7f7a7d7df4a0a342e3bd3ebf443ee20aaae79d3bdd4fdee9fd166b7c9317d8384df216d719cabf62c35056a4b2a84262a4523ae32852265056369918e9f6fd484b79ea7e8bc36df10b89cccf0af4ff1cc8751cfe38849fc1394fe9821ebdf06aa49ff7ca45d45710d7c817ab469a1a9368ba9b3a26512a4ed9a561c7e69235d81be5dfb54964cf50a4e9ec0d406607a826597b29bfc521ce5fe766c3f72f829c06261a0b0d3b78fa9d928075de294d68fc3f64dd6feda606733dbfa2c9291e406c81f36acfa6d347ca97e89e9f5665caefa1e78534c9f7fada2d940db4dd61c548b757a4cb2ce56362333f620c4322d32e67779a06fd1b406ee0d0da0fe86f8629ac53cea1ba8812aa49594f32bf934af7037e85485359a4efe4129d45186212db131428e70f22d11a85227b8cf9c32f5dd32f5d7dbf8e2cc64645de6fb2fc61baa42946e813b2f1d254ade58d99df2a281d7ccba66ff24af923254d8f0161996508937942f953143fe82e6c8b2051610ca03d7653a4f90a1d9fff148438124bdda77d9f7f92c91d81dc86c3d11f3169a4e93c2573480c60e8f92d1692bf0e7a58161c6b124d2e31b454df37892b7ef09f51beea466bd0fde10c76325ffb2514719f64e56114b9c88a9e3869aae98a391895a62ae01c33c555d31afd3a778ab66bcce12485029a0e2b73d57826dfa07c13e1197e6699acbd242a243de858c2dd14697241a5a79d8d61d8b58bdf293db431f34f01f90b4ceec0e16f028995e0da45b4c233d2e09dfc69943247a87beba7809549e419609bc468c0464c22d25f3ccf5a6a65f044476b6e1fc0213a553f50bebd519d7e63f004d2aa3b7c5c6f0f1ab193b1d234ac42f53bad83c1034b49d30887feaa8e7c07aee0fc8e2ee734bca4bcda5734dfa36a8af27d28d2d54d102335890a40181946916edf21bf7547f9c1f610865c3bd3a82ed24c609bf1634cfea86a551c2e23fb10c28dd9cce10f02990c5e88345d0536d077110d87b68b78a4a3a6fc00b64de2be170ad8040ddd7c93785f403f457bf9854853e6106344f9d8d509df1d5a9ac27c6d81dc2c150d90ead686b3f88361de4816acc44c747ef3132bcf119e44373518c3db05be85344d503e49f9141655b022bdcc8714a9583f67048a748ca7e1368a744de98ccda1ebdad94d3da23d047662f2cf81dc8643bd93c40e1c7e9bc9877ec0a1f411434ccfe770838b587a42fed748d3ed4d2292d1f768f51d3289596d1279309ff9f4af98c4991717204d457d3c1dd7890648d5c5713f360e39897ec54953862d43f92c52f6e71ff009994664297294cf53be804515a248f942b98a343c76dbb32975152de6f61fb211ea368f7f0ac86d99fc944343e38e1cee84a59f30d4af552d81c5a1eb22ead6808e34b54da2e9f92d26d1046c90c350269185d6a24079553b123589cb3c802cfc06847e1d59549a467cbca8e02413209da7ec23e69d91991d6327f5a3ade051618cb66bb315b285b2c77d614285732a5c84b2f692a88885d028d22fed22ca8ab493096e6ed0eb71b8712efd334cfe0e90711ccad66b3fc0e17670ea3fa75e4bf622c421c5bb8852f256b8f4a58e1fad899ac44a35c624f2242b5c51e13ac64bbc39038a48634468f9993174ca65b48d8aa98c49c5074895b275d18a788378bf72f55d0e73ea040a37289d292de9e61e5f19c5c22d15a6ba15a251a4c62d646d1fab48bfd482ed7a488519fe23afb2fed1fce914fa0b267fc6486eed43fe3d8791a193cef26d52d7d6855456d66f921b71114b459dd037397d4631eb0526d156a78e49e4a77e61ae5b0cdb81533689952268f48a54b8fb050ebdb825ce31d2947cc1192656e23aa918e4c2d254c5f113aa6adc3a58b84754a6f04085472a2cb067d3e44af5053ea4c293de3b4d76f365456adc42be74326c456ac748b74c541478bce840cb6c9b34f5b799fc1f01720d8701187fc2a1bd1dca7262fca2e0618fb968b988ca7fd031d5c232de249a1cc6511ddaa9db41c0c636893cdb0aaf58a41f1b38952d6fd962fcb4a3d8943a324cb2f0c18837182b3841972ac1ddc61bc40c503dc57d08dfe00db2f52bbc233a5ae0231f7495c642a742890a65acb57f7fd76bede116aa6c215b42c321bf96216ee19714e9d93e15f64253dcb376cbf96d26ff6d20377368fe8d5fe6506feb677f6b95d1cc3cff32b95944bc6e14e820e77a899b0236056d125717aadcb41574ddb74d224bd38b8e76147f348dd194d5b7e1dc7dac34b504a75384915521e588d7b70a2e5a705c95ece2c5f1397a5b9c5fa0e54c611f7fab7080c633de2915d8181ed1c7bede2e46ea488d5bc817cd7028c356a45b66edeb732a1cc7cf6f4da35de7f84d26bf6524ffc887dc89c35f0532e9872efc6f259f16085192ab1358c8a92f4d674a9ae6293089fbbe3ad528fabd1565531a09d888493c58e0d95f38a1c2a90ad858e535d333a0281bc1f36bb493fa05691a76fcf06d6c58c5cae2041724569afa79d7f0712d4da950a1bb337ade47f1da2c4dfd032a9c81c3ce1475a48b736c1723fd4859919afa35464e86cda1de386deb18e9e2820ad54f26b7673621ffff1148c5e143641bd0b51cfe069609bf9b83ffadda25d38d91aac6bbb6853462354824da390cd33543da0d4becd4a8533189fce02fd4d0eddb9844591f2c390c761119451e6c240b3f89a22d4d438233927ed03e5e5885aa83c998008c0a74c548d30fb6780d349b6163c8de209a7327a9d004f6851615da6885e8f5827ea4d2fa4916134639b415e9962dd80a1d2a74b799e26b68dc12cbdf52ad7f00a4cfa1d96ac28cad38fc112615877a5eaa23baaecd3280e2225a1652ee997611bb0bca7483bbbe8d3ae549265ee2eb900a3d2af443390c3b60c31cdedeff54bd5b485a87b5a5462e0ad23a69aa44acfbce68429f3f960feef5d09ceebc88f687b70bba519b5ef11d2f0cb09b2f2bd2fb0262c8fc60e2c793c9161a080d8a2c28647921b2f657349c6e01215fe1d19726ba1fc2d9bc56ee7f10c86d39b469342b71771c5fe430544ce7effbb5c1459cf97de0c5bca48fad720d65128d3a353dddcc96893c9960124b084588492c24fc6d837d756a0236cce17c0e77b1b0a0821b1dd97900cb2833532fbe180d17272e403afd3c51a1f01e51817dc2343cc3490a10b2496cb256cc50214bc372b0a5363f984ca2c28150065f3d40b87531371469eed3184974baeb10c0e734fe8b40ee601ee338d489846f72b83d968998221e4b76da0630e4225aac52ab817e8a8e4974d4a964f6d924cabe34fcc8e739a74d226356d814b06114f97521be87ca2e1c321e4a74449173bdc13869da94847ef4d76768611a3a9267cfb04845a2a2a797353184a52515c7549c6079a16ec1a614a94954c442b843c38be239152fbeca616860f2983e29ff6781dcc061e24739dc307c0e03177168fd936103380b056f42ac162fe34da2d35ed14e27569eb5495c66a87885fa12b32d94a028011be430e61ac5e275ec529d5d38dc5e9a4ebd980029ffbaaab6097328ed18fdab747a0fb7b07883cb5bbc45c38b99720efb7b549c52e739680abcba08252ac6aa2e37c4a152a4fc2cdb7e7961f6898ab3afceeccf69fc9cc99dddc8ff8cc67f81c391e6d0774af5a9fbb25357fd4e43d2d47111d5837f1fe51a8e4974d4a9bda137d46941f73865835078a5c669a04e9d74a23689731cc9b95668471425ec398d485355f31db593b101d21869aa1ae168f9509cc3f4dd3ec12815efb0daf0791f35a5c57b2a3e608daf6c53e1262a1efd6171681215ac32b6710beb736ae5bf300d76a3f1ef81dc78aa3b03b99ec379ea0b17f19b1c06c1a184e670ead91cea259e9b5dc45211dda0eda960a3e8a853899df2f41293c8926c7543c547ecc766ab538362a04ee738588c6fe5f06593a824807b3c927ef0a56934402ac99ef052a05942ef7e517c42c9e879912a052a3ea31954a18e6c61f1858aaa8be4ddbe760b255111b8853e87c624dac5dcdbb88587ac845f779f129fd398f839207795ac3f6a213fe3d0dbbaf2fd3b433a3e04c1a1942d3bad15686b5c4413472dbeb913623fe228da0b85797af1cc132ff1324fc577ec74bbf08b4e9dd8a9a078e5014594bcfd80a38893b756c73737788333bb2986a7ef9ffaf5c8d4516da686c748d68f0942947dc2b3b992a67c89d8189668f608b7d06ce52b8ad4ec558890b2c5e10ec5dcc532f293db5b981da6bbd018bb63cacf03f9ebe6712387f1fffc6f8c8455d73af40598969dc17a50df45b42d64c845acec53712f34219cd8a9e328ca827db6036212bd1e15f775c0c656a726b32f8e22a3c840f21bbe8d627cd8332c4d7df0bc506ac720a7f778b2e7933a583ca08b051df7b0e2feaa4ec54364f0ba47543c22ef10b5b5d2754614a9242a243718e5f0abc5dcc5639adf6f1127ff092637d0f8c7407e8f46c5a1d9efe5530e7f8bc984553f30d436306876e0afd1d675fa2987cc50a6313970a7456c1ac36e763a5113914de2926898a0e20902364e66df2eb2111467af78cff750f48b45872e9caa9241fdb3233d394470865b5a36653bfbd5283c8d864a94b2feac20713fbf838b787a4cc5332a56a958d39db96545c5c142bb85129b8972c8afa5ebcc968a74c18e687d0b087f94c9cd34fe3c90bbd0b819488b437b0326b306621beff947c80cf296099f437f27f738173144a62d561357d857dde1709da368d4e96089903d9bc4c6848a0d2a3681a29dd98f3a8a8c22bfe6b7e50fbf1341c5c9e3529b2508a358e4941b998d1e24e9c66d1f6441586c51a645c5364c2273d8df53a19a0e15bbd82b86dd42a95f3bce410818b7d0406838b413155b96ce147b7472b89debf573643a349add8a7e06c8bf308f711c1a1abfcae177b00c5cc404e852d4690ea79eed2286380ca4a925568bfd189318cd28da690c9e85ec20b142c36eeff7541c60a585761423eda40c8a47298d62915daf6d83a8c6c1f3c14b451ac68efc83ce844885d64c9b83ec0d9a059c6536836cd293544c51314d67477ab38aec0b1533f456f79b91e675d719c72d743814455a5a6dab4891a8c87e2328f253d6321198932f03f947e6716b0e25abfe1d0ebfc6a7e5222af09a3a1b960d0951bd7c3b20d3ff4ceb3dc51c75caa1f9319cea12f0d87a3751a712b0c176627b54cc53b1a0d5a9e328daf56e6c126fef703cb3a462d1e36702b9a5301abca9ddee212423d5bf938cf1f1ece5d131d2d49f37624e757ffe245f172c2f3c3df668e2d139389c5c51becd1e2dbd35d1ed42b2852651216b0b1d0885435d3af38515151e5d6e9cc7df67f2cf68fc6bf3f85f70180fa7bf10d1e7d0501736809e6d218d1ba90bbefdf7781409eb39ead4ae7793221b9e7cec26c97a28afc7b2157419479151348ea241915dc42bfe5b37389eed33941e4da959c23aa900bc91035e64a8fba47738b4903b66c6ae43c8c1dc4de8ec31d89d4ee72d46b2771a1469f64d38a4ec018df6a9724917552cebe896e9a8ab8a48955b286b7c4db69091eb76421c763b5f2d9df1686e29d21dc62f3169d1f80f9bc7cd1c26fe8e431efef50a62a4818b1892a621eaa6316ea44777e883b21945bd56b81c52a7ad2ce628cbb6bb3d8feeb53a1547d18ed98451c450eff1e8c1a3478f161e3d7d615256f6a8fde0a3e8cf80e34baa4e838de8f4c106d52f81a87db04a54eb519e9f02cf585f3fadb310f5e8051867efd88ba56c05d9d1bd479d2dbc2fba6e61944349546cbd7ba147af1ebd7d2587fe834c6e43e3488b8ecd40fe77346ee630f993987d6e12930e87c6218cba883675515619548fde63664c6cccc64e639cab4d69d824be0e3d5a79f41172144d72dfce64088a2c530fdea8f4e251c9434f6cc6789faabdcfeea2bacdece0318707cbd0bd3f9dd3f8842a17f64184641afccef02c612cbb098f0eb029051b7096ca8f47b4c70f85438f8e3c3a266f8faeafe9f612198b45014f1928520b421906c2afaef13dcb7a74b27e127f1fce9f6252d1b88d79b40396213e7f4eacfec31c26fc38edd0262a223b53510b1975233d3a7503a751146d4791d5a97494ba2c2993b8a47386aa42e927cb51b4c2a7e74d8fceb48b383da1d5823ef8949e69c6bfc552b046737e43dda38647fca2b5e9eef2b7072f541b871ed86c1e5b1f54595a65f7ea9dd3048edb2b45f96b8d9f1a6d9492c26857d439743cea7ad4236f4e7c31c64d3a7f6cbed49a2f877499a1eb1b9a3dc05df4fa5a971a0e7533d2add7f8965b1ef5b783f0fb58fe08902357ac9a6546525f29cdac6523401d42fb75d75171388b9408f91cea29fe471c0e837c49383013e322468237d1f77814c9250a8776f8d4a068ab533617b25fe2dd1e8addd8241a47f1b0c736d0239ef7ec958d68f94a4fef74d9a2c3735a9cd24d1a4c7ef0c4670395a4db8be60b73c8c639ed518686474187585b70f2a5aee460e8ca9360174a9e07876f54ff80b594cdf0e4a69c75a9f64627afc13bd3ac84f99fcd7994c773c12be0c49ec71e15c8634898a806bf100ee9f19d5edef8ace8ba4dde3e3f2ce8f9909e3fe8e2044f1f3b51b1a522f5881e4fc246e30f98fc0e8d236d18053cc0368a19b2f5d82e7a75171a7d0ecd8470511cbae9ff5fe550e74b920e51b601d415dee1c08c2356c5487a3c479cf21a1b453b7c6a3b8aa24e1ff75507fe26eaa1473cdbc69e37f1bc73cfbbf0bc4bcfbbf2bc6bcfbba1c7b186f071422c1a794c2e611b27fc9e5bcf9bd25d89962c08cb9e37f3bcb9e7dd79de3d25ebfede4ffe95ff38a556890e2dba78c01be4c7cd18af655d188f7de6f01076529ed959e68a4fec81ea49cf7b54357705cf5b78de93e73d375ff829a34ce269aff9b254f67004937875040e6fcfc9ebd2c5215d146891a69b7dba9fa3e4cd53cfa6ad207ca1dcf34ed1c89f62723387fedb8cf513f6ec96d9b2f1263fec640884b245fc77bdc72fd018e6300a6484c398c29c9f4431e96bb088ec8c8991465cc4c87b3c6f890a8f4f51b4b76d2b7dc02cb0495c5da3feeb9c3fe4d5f3de3cef9d16279eb7f23cb677250f68ed0142368302e1e40de32d4def27304a6c1b674bcfdbf7bc037a7ea7fd0b624e2e339e77e879479e77ec79273ab621b3642f8fc08c6c8aac75d1044672ef597f2b6a96bfd64b08cca8777ade29bba69e57f1fe5f75e7d59cca0eb4ebfbf3334edfab9c439d2b70c006279ccddd646000639b60a8fafefbe9566b349ac880edbdf7b7aa8bc22ce28c9e793b49822b806b801bb1c437bf1560b72727c821eb617b722dc0123032396c4f76148a288cf2bb89e0517873fcc962fe40cbd5784774792af24e6ff1b272b722c4fa29999581d46f4e0d4606632596da7e973674e82814b310fe318d051c6aabbc7dc7ef901946cb7bf713499795216251a511e85f5e9468068a8c22724819425945f49694cfa8d545ff8406e5e73da083070f008f62fc0cf00480b72f00af006f04219a8da0a233b325ac73a27129bd567459fb88ca16c0368d72d61cff82983c455ddd01d805d813a385b80e284f73bb27ea8f89f8e4f459dc76283dc3b10a0f856b21eebaa28f711ffec0033144a40f8164f0985843e5b6acf664286a23d24367246aefe2b3dd9ee09f673187931949e24c88f75b61f5e94a815fafe78aaf85683d88d101f9e48d27aa3762a81c7e90a780474933798e9f553c58ff84c94821e280d94877f1e132af6259ab0864b6c1f3ef695cc561053dfc4d3ed9350db7b2ca9614c01521a29aa0202f936039f12a5269142581dce04643ed9e72898b6d6abf7426d402363b10f347b1e8a16280e582e581e5831580d505ab07561fac10ac016920b12721fc5c90a148a2838ad1e3744e285a43b04660bd0bd4c6f737921d70c4c0133d5f7807e203ff770cd6077178e1a9f1c486702272cd861a613c32d035bd7d04eb13ac2fca122187d6042c7c267eb7195818fea137fe24393c11b0a43ccd39faa8782acf047ab093397188deb244b13d699330a2240681f818894b0cf67cdae2627e47cd370b871a1bfa67e4a5072fb2c44f8da6607dd3663515138f559834ff34358d4338d35408f79618e87a5f776d1b0019cdbcab9a59fd3d1a5772d8f9450e2b81aa7e466ef857dce0a6565294afd548877245c6dd29588b047e7851e7f40c7aa12363ad9aef632aaf79871416d26a115dd10bc4fc5ad8afe2037db607b0d02345006a60d5c13a010be13c03eb1cac460c617720c68ef8bca2d0d1be240ef10e65535fc142602e857b2ca618582ec4a945ab157e2d69f487f8864db05a605d81750dd68db83e93dbdc07e26e4caea91a825123eefd12ac5bd179a080b0df127d7ced1d586db0eec17a10ce908c381c0afb5db49e8533165f1792c3baccd36c218a9443b21e9146c9a12ba6bee89ed1a581c5107d72744d47bcbcf7a19a1e45c7ca02eb09ace7fc693ab903f73db320a0f9bf9ca2649f90dd421dad654de751f0680c8c7e23ce30e75a451a15d899cc6ab8fd0fd0f8dfe250c2c6df75c74cbac48b79c41be2edd30f805634832ba24e1dd0edf850bebf0052d7ea2a5f945a253fd3e57b5eab66d6a1d186630e1560784a92386f53cdcd6fd2001de0284796de28496375c0da026b1b2cd4db5db0f6c0da07eb00ac43348230bca25b8410a3440e20316274bfc03a02eb98a84614dd06254564084a0c60e888cfb2016c0b6c1b6c076c176c0f6c9f50c45871d95428e2383edb063b00bb4b6bc90d5e4972ed1ed87db043b007c2f205e0a56724d02787810a0e97751934de925f7a366614c5c70ea1e87c88e1adf0f68587cee7037d2b144378a6f5a3bebf456328161ecdccc0ab151eb4dd2db08709bd32f163a24c23129a69e33415dbd4ce79025b399071ce59d2627ee2ba4026c6ccaac2e31fd0b892c3ad7f9cc38ee2d0744dd58ca7b7b60a14f7559123e14bc8eb196f2a9c7e1c476db40dc6a98c73cce6529e0dcc9288a3cd9273825007be17a256539285cee7cc21d5b2dfc11e83fd4121a2fd09f617d813b0a760cf005dd3cf2b05e108c1f8067b41628851228ae4f49b3cd58b39d84bb06b6023159e14c3232ae579289b0bb04fa8226f9f9270612419e0b5e315ec33717b0af639d80db02f003576ef10eca66823b12df1d1c5f71453fc025762e0081b2f2bb7c4a137a3e0109d52e75d7c35c5702993a5f820feef3dd8d7c2db451a6589ff81f2a55648c9d25e8732342c86f8c552624835465f5c1e8ab727ba2e6833632a1af176aec9fd4f951148e6805e74d4e34540e662b94c360fe45e02aa00a93687ad587b8c80fc551a5772b861aae687ae697427da108fa953cb2b6ec7ed08ecd5c46b4c45474a576395ebd201fb06ecdb2853eae7d40c4d495cf84a1271388e46b4cceec781ec47f1da1344fa0e75056c1ccd0f603f82fd043632f902c4cc1bb227ed5b0c90ed90989c5c508503f944c7f5fe84b05ce033f12ba10bfd49c5f4e91e410e6760e39bef80bd0bf61e95f55087e7f8fefb621bffeba03d7915e879da08e111d8c718605219c5b15072c1b1c171809609961cc29d724a5b975439b470d422722331fe06c713ee99700f0945782449b4faa2f12ee6f8db7d31ac9318bedf912f803f7ff616af5e437bcb7c8aa6239a1605a886113fdc51c0fe27e9763e8a2693bce0bfe19a3613a056a171d149b4da523522af12b812c8c14e9eafb8aa13202ca8ba6f44237318259dfe250e25721de5e59393d051d4694dd3291cf63c135a176d899172475918e396880e38beb809148a9c20cd95448c12491297b1240e1e2961335e8a564f8c6a524feec0092865ea74c1e981d30727046700ce109c11a0044908c11903ba7ca18c15d13b452ce7bbc2ffa46a87ff090eda17f088c737070f9c29383370e6e07c8b69482ef1e0019c05384b706ae0a02fdd04e7049c53944170cec03907a701ce053897c41e4238da15ee2939a520a872282b16edc95404be18b854c48777516f138ad63d72084e532c9ec843c62b02ca72b741aef8b82ec3634789e1e8988e4cf00a4e0b9cab1484ca169db8bf87522676e27f8b50347ddae5a5c96155266b4653eb6027ae04560732676191b5802c66721d1a4d0e0b68fc1b0e951ba9c1c363aa2faee46f7462ad63ea74f6656a67b25b86479a5a175ca7d1f07d2e71d45ec799520c1a5112f55a35e6f26d14254e29718a0152e3898626d73066bb9465f9d8c5310dce0d38b7e020906d70eec1416070583f81f30c0ef289a3f643da9b18be8aaf5762efeb458c518e302694b50d7ca48f08e105628b72b3e39644715bdc2363327142ad678816b28d8ab707ce3e3807403de81762811f7144b57be7182c4b468343b2480cc5574bd8ef24a15fa83328e9f7323844bfb443a99a7a1bdf9e9c521443041ea35f147ce78b9c702d86f5ae5a38035f8ec7c717e26244bdacb946b059c656b69d7c5c534c32bd49212da2311fc8452731e2f17417e57572818c93ae9bb5e654d0c96a346639cc02f9c6b9905f068f363fc91c6808c8063b713991a9d3ab0c9b8950f6ec9553f1a6c0d3256f7570e53b70b27b7949cd30ae954cd81892480b642425111d3354061c9a28898844f04ce5b5a92f00af1723706d701d705d703d707d700370bbe0f6c4d7409c34c0ed138168cb6dbac510f1eb99bcd3494be6545f54d00847e086e00e44fb16df19dc21b8f8ceefa27925bc6f7289ad4770c7e07e80fb09ee9718f489c3700aee045cbc45e19d910c2284ee9e70f785fda422c3da3bb7958aaf0b724a510fe1012551a2f84ed91a746dfd0be15fd2070d1ee85a834e388aa1256748e915bed1691f3c813b2f84908d0345c5a15c25a0084593495d8cc9c49625402698546323724d57265a55ea480f922a75856a349ae5378e8fc2f215902b71a8edad64ddc55257f34d1d1aad78d20a8f6c7c99e4239b0c02590353d4711b4422cede5615a784dfcf4b15d33900f75b9513fd2861a317c86049bcdf17ada1eced7aa3b1c8b5441ca0bd2d31bf21071263b920a0410cf7e02ec05d5292c6ad815b07f704dc5370cfc03d0774f66a2d702fd0c4f08dec73416d37bd193d82042296a34bf25a3168aca3fee165a2092ebee40adc6b706f28ad8a1fdadb02f716dc3b7051c4ee45b7293bb991c007a06d70f6093f7247f7549a94b4b42dec172d86d4566ae1d5e13292c419b9a61819bae754ccec4ba99f3f9026bf4769520c8f7917448f265e808b1c3eababa4692914f1fc6a495c4a0e539a99b1446c8986c05448f324878d95ac8274d261648a46358a4a06fccf84315b120fb5ea16d2f8530e6333c1e3cc55d28548f0c66748c5eb05417c22388c82c0e565320edc52c268c481eac9e907a312d3610fdc97a4771ad5305812f5ae6c24894023524b22aad3d79242291cbe9309a51c6109ee2bb86f94a471117264661bdc1d707701c1381d88fa9798ef294325b4cec926c4276149de6948c1e4e7b7e85d8b7794be7d700fa84cef1e12ed2853e82bce8ec145d93c064f88de8020f400f00a42496029839c237586f488f4480500952b500c31324431b47ab2784885118a12cf8ec4e49362dde51dfabd949e698c68fd286f21dad7717a068fc3f2465c85e0d93910e662b9e824bcd3123fd68c2d3587788a8b43ca5c2015fc9ac365c67d65027543d28a94c9dfd09860d2882a23abc261673578ba59362f984ee08767eb72a60cef678f389f065e73c558e43be18ec671a0218cecf1673d5285b4ae32bd81e780e7c6dea9da39f826924499b0e1bdbb6d3922dfdbb124c2b918ed53ee74bcc0e08ab4a53602cf03cf072f00af4b7ae8f5c0eb8387c37700de103c7cc2bb18fb68248f5c63f41c22135dd3cf2bf0c6144652f206c4b009de07789fe07d813711bd3792a9e70e78532a54a00b8a21a53707f42411b611c68d2e150c511555e1fe44d52ae0be3d3915b69c63a13994924891217eed1990b0a3bc0f7c6a57189e50df82358ad23353f248eb78ac1680feb979caca0dcf9de19dd2092df76699497e894ad83457e67852402adf475723cd71a83cd2b702e7f0dfa0310fce2a1cf21a2a7a958748f1cc2ef5b5f0636bb964784745f976da696102a75179caa48e3fbd280e8cddd74e9c4333e381f71740d272bdd3d41634a809ce218dcb915c851e910890b13a5514becec5cc22efb41e0a62ef043cbc458f149f700e5e033c04e6123ce4aa05de95f86e8ad9940cc345c40f657086b236a6fba887fe9e08af297f33a4b5fdc1bb06ef06bc5bf0eec4cb58ec9d81d706ef1ebc07f01ec17b229f13eec81d255ff48edc51d94d4a5ddd80c1e79c6a866091185286863b4bd93a949e813149fa6c97ba85460724f5f33bca4851e636f248f1205878a09ec17b499fbb942551548950be86e2c1e7053e72fd586d7882b48a66d3ada540aa6a64a227aea31ed4d326ca2b73ff2a8d1cc79572a8e689749404e5361c1510183b9f2902193fd3ea8f318db928b2dc2582c3adf85aa0008b82438e451361405459e2897c913082f79ae39df254e054a71b4ae2f737357991771a08e740ccf6d157a406948f5d6a4c41f7cfdb010fd503856b0b3c7c73fc7317bc3df0f6c13b10e7afe01d8ac504bc23344adb50e31b7a9837e4a0865780ef306a9148765bc247fc8e29318388a142ee5c51f35af71a7c0b7c1b7c8720ac8d88409641d93aa3a638715838b8151f36a5672484141c4a3d24f5864731b8a32601ce91ce0ea860c8e91974bfb5474acdeec7d4bfe6bb8aa5721453582ea23d4b6461b0d0892d4ab7dac18aec4e1645dd4b60e6ea2ae52dff111a57a9a2e6507e15aeda2d231d3311e2287c63fcb204227e29e34f49990e1e38fb626a5d0e755170c81a18b73e6d2592da3268041f2ffbb31845ce9d2aef544a2202c3091b94c4a04fde29ba6ded2bca2bce6fc83bb506b23deda83d399765ba63d1ad83ef831f6070087e17fc1ef87df043f031503c047f2896e88ee2e32342919234d762ba20bfd45e906b1ade08c71357cfe22200ff1dfc31f81fb42d31f573ef89dd1bf03fc1ff12d31d6ae326fcf036c43f6563b78290c342d9d51d7ba42a3874cfc8231d5f895997facbb547ba3c551e29e748f157d79662e708fc49cc52f6025a8ee2325245bc634a62812915d59268e678ca99646f0b6f75871abbb8eb55d82bd2f84b09d57c0e75bed83c5e598af0967e6d31811be0d71709c347b2de0b046ae3141d079a2919f63ce31efc380e54b922d57511293cb73bca07c19f8aabfd44a0c8dea94ed868ef1463249e87e12d6815509a9ef749658cd6a7800f3985af4e51d9b226823bf067e0cfc1ff067f21395c825f03bf2ece3df04fc03f05ff0cfc73595d1c9377ea37289b3a98919b3abaa219fddd11087cce05f897a490037c9326f82da08502844ccf4823025f2831e38cca2154332dea7d6a61738fe90ad23fa14a0c7ada735930e41c295e71a866f38c4703fc6b737d003ac559144bb0ac4705273e11c57e6c6ca6776ae739b1290879b0f147730924d5325a348df0bf47a3e4307538ca4152bf3983df0f096c0e94e17d7c72ea0a4a1c1a09d2b8081be54239144969a0ce9e717c3888e6d7c429b54bf06fd281229713adcc3c8cc690bc538ca0165df24eada1acecbb94b399fae4ec51367229860b113880bea58f40b6c1bf07ff01fc476978fd46ea9ec1c74bc02b0a23a9e27800fe1ba1b84489c6abc3841eece3cbb7a84cef6fcbc5e090c01d99f9444f75176f113fd24024903ab997b2991b7d5d592db4c7e48e6a19fcbaa45bca918ec5644a330ca98fd497cd3a81ca91a2cb4deb9a2e49fc691db7b9b8ba1157577422b867850dcf75398aa971c2ae879af36eaf8e2d2fb6d7c8f1d03894576dee0728eae4d619a0b569fc4783c62487d541d2aab5f28515f1636b9d28c3ff324f92e250ffc8ed98c6b8814676faea24b5d64015e236d5b0e013a0a3f903272e639c0a5ae7050345d33bbddf8fe761608c8728b6afa92394cb89e89d5231d0a5886bf28500102736deee091bf1db07ff009d52f0d1294537ef58fe1a80c012df57627ea0509cb420b021704815272df24ec3292d2e13b8107810f810041074913756bff6642827343d1381f63b2d3fc3891986b0652902a9706f73cd50ce756a531f69f04449a6c183fcfe6d99238dd635e5d699e015821ea083cae7cb4491e761e9535905451d28b277ba32d9635620f1b5d96012eff39b5f6cc7c9982a532b7281fccf048d1187d541625a2c8b8c83ba0d04b0083fb6e61619dd77d569a8e73501ea5ca839154d7b9e9c95d1a91aa981320831e6cb70e473fd299a900e1453e544e59d02e54e3950c4411cf4c83b9d3f52451139f9bc17a72efa8414b6a1771a84100c2018423082e01d8231041f107c4280c01f413011f34308a610cc28833af6c510a99b0bcfa1cc4d7720f61a107c43b0806009418d6023f0dae482a23181f60bcdf1857b71fe253e6cfa68544285df031b4168ddab4205cf6cfa5ad23747ef9aabf6e86cf37617f81b4763b1f308413d71e2f02cf0c164145988b2968b22d72418453b88f92c31469725919d4f7dade74fe1e0a84aef68d114a7d4f4a5bf75532ba12839acc29282678bf06b3662c33fd9932c22b0440073f16363cef59b5f6c17fe60ed919a95091d1ceaa96eac81b477fca5f2648c0721c04fbf8f666378e498e9ca7ec23bfda074226d1be8c826cc134afacff629e7d17ba306b199454ba1814528766b109c427006c1390408d505049710342140f5bb12a748e6b5f8be86e046ccf721b8a54091e875284af41c5a152e68030a2c4d997f25e4be6b8a3dc26f80e12807845427c44fe4e635091eb13746861fc95c216a63ea3a701bd43a33bfa6b0900b15a9b0102f3a18243fe195e2297dd688016b358a7970aa646691679be5d0443755f6e080a8bc7d746379fc576934382c21500ba049e0d538362487b32c1b08a0899f4960fc715bf47df227a7747273a1391ac88fab56b8669cec8ee6dd40f09c988dc181626eb31bba70184de108a6497a871428f63aa43318287a73d9b1d910c3256532d14125145f809c3dfc880e045b106c43b003c12e047b62893e27427820960e048794bc098e08c5e0507c3d41700c5d21eb108e6c16bda35490c3bd3234078a7d51d9c6edcb807026979fa1f651d941daa1d986f865bebe69d938fc7a0b5b8585e8577358c8cddcdcbf4661e1490e845914e9003ee69cf1229de484b6f66c57667ab4371bd512d34dde2b9bb9abd398caaffe4b284a0e8b08d4025844e0851f1bfec9715d0981550430f559fc71786b07793fd5380acc189f183d1d46aaa5ea28d01ea9298c3a687c7f812ea8c5dd348a66a0c8533116aeaaec2f76e438ee51dfd9f792321fcebe387da34a867f81aa4878d823e1d6114571f6065d0bba36741de8ba24895d0fba3e740371d2846e17ba3de8f6c57207ba217407d01d4277045d6a8b11cd670affd05acf64349fb02d06b72c839c1a559918a8f35c0a32a8cba9f75bb40c54f04861e1cc5761a1ae16a283dd18aab0102f3a57f8d1e37c08d92050282ee5a1cb3ea108452e63688657469517db8a136332c0ea69c115815c49e3bf11312639ccbaa05508bcb833cc5734961058845f2e81daf08b99e58a1484268d9cadc9c681ac81ba078a27daa8bab0ccf70caf69555c730d1bced9e86d83e3bed3a5f24ebf17547c0bc734c44743aa077cc9e66985e21ba9a2b705dd0fe87e42f70bba93f604556e0add1974e7d0fd86ee02ba4b2027761fba75e89e88193e7e0add33248dea10835b659f5200311484a18c0647aa77943231247de482d21cdf3335bd9016bf688bd19e9c5141612174cfe3feb593b10a0bf1e222c342f17623ae82b4e7c2196c6d9a106ee32e81368965c23ba5d6e282a8922b815ca02e68effe431a75f4f88f0b63c4e10f096c1d248c3dd58d0934f1d39fc592184fdc2c3d108c59dc711a952bb493c31ea96c2ca63fa3693bd06d40f7224691d2a746cec60c1439778ade293c53ac853a33f02967f3b14f5572381333f41eb789169a0d38872014bd47e1a1ea5e228dd045194455bc82ee35746fa07b0bdd3b298c6de8dea38e11c35f0d9a4acf86ece1ad33961a38e286b5a845a64ed4b98768b2a3e09c57a0a1052f3cb9100e7caab0906754b897f4b517db2a2cc40078f004dd07b13ba5218b83218ba2c9a4aed47155b01c456d29ef3415617258c8e7376fca45a5b988bf4be32f34c4ad4123d7f17f89c0b3a9b2e639dd328dd55dd05cfccccf0263b9e59cc963da8c23a59bc5f998728198cfaef648f5bc55990a07df85ee638ca2993ea59ccd51dc02ce8122af28c5950c44d16f52ce66e66048065d647e5b66508418a2ee3d43f7457ccdc418a97b852e3aab1de8a25a6e43173dd25d49e39eecff1c492db5e4ba322302cfeacaa6ed37245039a2f0205a4f14014ee634f383edec883ad7fa4bb5ea0c5d0ef083f6a9170ffde77934c717af20e6b4a6ee01740f1374554731c56d098af8b659ef94b32f8a8a667ec74cf9648b3fa5b1b041fc9751643d3cf911811a3f2690ed729f0c1fc197d0dbfe8c40fe387ca679a0f32792151c2f5dc41fa8d55012936ee4834a184f511c8ec475238162f01a2f9f612e63c3fd6e18289ede534dbc5617e31a15f7470331edd39c8c7e8d5044f9a2e9480fd03d869e10f8fe2347345e69e9fd9e053d1b7a0ef45ce861d0c8753fa97804704d4a1ffa9f356e9121025b2f948ca9b781963fdd95e2a90c09a45b9a1b39a64fff5a50d3cfec80d623e5dc8cd9448a782f6fa01740af4b63805bc3345d09472683a2ec82502140360f57c4a46ed0594611bb7e93f2c98aff228db5f92a6dfc098a1d83c3bf2010edea49196b6396c08af8991f87e7d2ec6e5541e02a08358a6657fe523503a9a0512dcd70c9352be8f5a0d78f51e49637d5677394ced98c8e687c8fe57cf65e40053a44f1d4a2f4e9a02d2613e9a09e51bdc1dd15180df642e1be118ac309f406d01b426f04bd77e88da1f711b5a1c9feece60bdd69be44b3071f984059129c93eef98db491a77a2a73335d9a683f3b5213edf5126cbc15e98cb60186de27f4bea03751bc992852f076526814ae471471cea64442359366c286f33d4c60d1848c52795c3b74dc8046fd5575e8f837c21871f84704a29dcf94e11338ccdb8c4036bc1ff5b81a87fe32ae555481d09caba613a75c69e486725bb6bdf4a6d09be5a3a82746c5e95399b35974a9becf287a7289b78f3d42115d4459d36b4f5e695535caca84d09b8bde8378df17e36341999b4be87d436f411329be1ad05bca42bc2dd56f162ff1c4ab1e62f827d7e4968493c9fb7712c2279a40eced53fe367ca792bdcacd3ca9b98536e257131d54c23af44e44ad23f62fa077aa742f42910e4b36c55d826209843265aaa6776b02d925296a3a2d07722d795c97c612615c41e3e6284a0eff82c018bf3036fc933dd575034ef3b39a8d9cd53496c9a5bbaa40686aa39e45a5a7cf486184de19f4ce731c545645b3cf66b14d19486b44e9531cf71ac5452f8122d429f3e90c450f9d5284ed02634542717020c66df185e4238d4de8b5a07705bd6be8212db7d0bb23fcd00b450d44025b8f8c1cadb6463d6b91d1566a4f54c0748f55c97e7440b9194e90b6d1256e8b165e5fee45ab2e2c684f049ab05bc212d07b80dea30252ab22d35511457c55ca8f35f1338735cfd3cf2de5ff2fa231df59dd10c5a88eaf52290d038f559998b508bc1691d5e896b5b14800f3f1333eab75925e50e3d498c5bf018745b6e840ef298da2779c4051afa0c1133270c4bf2324c784e2c04f38a81245caac7cd894b9714f64b8f82c2e8ec4722906285f67e2fd009d55e1a230be00b18ada85df610b7adbd0db81de2ef4f6a0b70fbd03e81d42ef087ac7d017728f8a36413803310dc4ec55f47ce88338fe86be057d1bfa8eb87718bcac2193c23b13a36fe17e40df85be270e2f44e7544dc4c9f65a9828725191af629cb3512999668ca8369e45a1f3f3258d35e59315ff88c6b5dcd4b2d0716d1a937dde7c80184886642d0235848504d644eb5519fdef39bdf35a04f2a7e01d3a9106813acae7549e79683686906d770c7d3fdebc2d1745bdbedbf8845084674211850851c4f0cc47d51a52daa67b1aa3480d37e864de884f8f7a6efa81687c8af7908491697c0fa1df857e8fe4b1df873efe3980fe10fa23e8bf8bbd67e88f45f3561c5fd3dafb7de4e713fa5fd09f407f0afd19f4e7d04708172877f9ecc1a5703fc54728fc1dd1fb14dd1dc068133ae2c3a7fdbd6b5371b705fd1ac0beb8fbcc41d16452a3a8279a65c58409d43d1e258da99bc9e3dfd1982b8ccb6846c1f2b2401bd743b160be0503a94552a52b3723b09626f0e221367c02a755d70d38f1413c9d26814623a29a54fa7308b9f1ff18c7683db14dcd4a149d09150918459a9631a4baa27f49394c706551e18c16d4b0df857f4685fefe09f491c6334adea0838a28a22193235bbcf72590e7d06f40ff02fa97d04732f3e95a69a2ff203040eddf89feb5086734a96a7a289c36ed37de1b8b1ef27c251c0924d248705e8bce23f46ff251e49e0d9eae9d1dafda0b0523a75ad28253511eff5d1a799a8e8685f37c752baf01600d14f3e65b647bdc748b2932c9a89438a2b10066343026d05576b64db7f81ca6b18abb1bd37eae7aa0529315f5995b360be76557e1d0dc9f688143ffb61045734ec654c428c6aa7820a7fc7d5289bfe70a6f8fdc485a91cd973ddc4fc2d9126e0dfa77d0c7c7bf63614c0229de7bd0bf87fe03f41fd7c3efe299740fa11a5e8825d0da70fd4b9a5d857ff606e2f19e980cd179eed0dee31f3dd1bd11ef360189afc23b6f28b94fd07f8eda7d157eaaf650a41e75b902bf99772daa6a6c208fbf42e37a28361361adf9f5d48200326598d0c6aa2826e75b5499b5a4e73d51995e32b331816c171e19dec1e7b3cfb99ac0e8b3e88a30cbd7735d265e5efe144269d07f81feab383f4e36be45257e7369298c15cf0e9583aa55f17b292647c2f914ed1beeb6a1950be1918a13b449e88970b6a1ff26025b7ca07bd9115f5315319af62e81fc42cf1325149f8f7ab52b5e4ec41045ec5ea65ec66c14f205a8b7be402943d8be2f69e7a9e994ee2c3bb4f9d4e2354163bf05fd3d92c7ee95e8bd933c7ea088dd92838ac288408ebea45aee43ff403ccce2e27bae715f0477866443ca9232631579ac183a16d3b8913046cbc4945f2cf4bce4aa34a6f33415662d15cd99e0ec0e3aaecc8f82a45695c0d654d9d996bcf34abc15a57cb2a85331c35d711db9d88e37d3dd084265d701a9a24651b783eb6e9b742fb8938815e19ca6f08f97545e77d1c93c94e9cd86ac4f0c694aa1752bba75d103e1218a475218f772680ccfa07f0ca180106885b8d0a2fd6d429bb63d45adeba3e2bdd1d68bbc6738de8e5fc4e4829648f53ff369c4e70f2fe5fe6db40607d1d81b097450c36f258fbd0f726519c8600f420742571c3a6a8cdad1fa973ca649344e923d1b05399eff75342ea2a5d252ad3f8c287f1c3f596f7fa4685c81625e9ff766b396f441e78c2bfbae488ea27115816817f7ca9846ae7314e57b4cb1a50fdaca9fb1a5bf3fb780f055aa62585888623d4edba00dcfd4cc8c271c34f7d4f8a6e7ef338ad648eedf16a118be53e66634a024eaa826604cd53f9a1e31a25985b0a0e44dcf82d013bd27087d3100caa6eaa091390c0308bb10f620ec43184238807008e1889681a305fc5f84754efb84cf7769eb454da3771ed3f8d8a67de0960d452302ac69b4be207c57f288d1636f5ff9abdd6b11ec886097f23acd0b08c7800e393b6c3c12a81cf5a442064e89f35c99ea4096ccde28d29f3569dc3c682cc9dfd4d5c60de9da46bc19d90a14937dde3f2430db0fa02b13880a2b1b0b23a2984b60f32c367afc21470073dd5d7c9036afcee097fae65cefda18427650c34f71d54ba0c8b3f897b734494acf1be6cd6a6865fe235943efd214f8de16cd57fcfea4350be113c22fde8194c245eb5eeecae4d0726cceb6f89ad33a37e144845d6a10ffe898da08e114c219847308bf215c40b884b006619d68b417691a71b4a5685c5a62d220fdc45b6412c5f3be4f7fe2fdc527fd49ff2b6573be2dea42caac441483c96e93d4127dd7774bec1f418807f6964e349d5cd7b0073a415ca6e2fe8d950ab9b13cae1f37fe5ed0585ad8d0282a37b510c5a8cf3b5743f2bdd0551ddbe5bd325c9cd051255124b59121bc9c2b6b7694119f6e1abf984033dff3409f98faf2b95f9b1b8e37e3900feb2e4ac1a95a602a35390351e4d53468e3cee446dfe33a95f8fba7e2d1a7d2a25edb063c5acbd0ea538d1ec3c5c1ad2c69a08f7a22ba35f18983f8517828fb37b2e81f62940884e239840d0851972e216c42d882f00ac26b086fc469281ab3348dd639dd5f6ef10e8db48e38ed948aaeef276d241e3d9396fa476835b1289e1248086f493939a4ec85e4c1ba0f82ae057710b621bc8fe37ce5f2443492ddc5c3831d253529a7b1a13cae4563b5ceb83261fc49c5bf1a8d06874532f853024b2bf53a3b1aa75eb695422284e7736548269de68755d1a62b2fbd055fdbfcc296a582c635c5d0dc8f9af6184ea148e1a24ca2365dcadc703d8357d3a877e38d4d0781f05b72566e87a6e7ce5eb58f2a6a633999704413f0f1fdbd1d3119a09b2adc2d31c0b388fe2abeea01c24708d16b7d86f005c257492386881dda5a03cfeb101fbc81701b42fc7317428ce8f621447a0ff1562c77c4d2a6953896dbe0bcd10e8d8399daf146d2183bb448e3744e34b254da515459bb148b1772624f8e48211bf82947cac15157552fa6112fa0ba830a0dafbf4a27a5547266cec4f21fa0b162d0f817c2a8b68a48bba992c3950456f4423720d02c51a472a45a00f174b2a74a7eec7602451d6aea68934eff34ff9291f5992dd95c3ab5d7134313c5f058ada6919fb93952cbbde935a646ef34fd6f2e77ade936a89e31dba7eaa2fd4a6dd9c39adc5cf18e8471e0d28cfbef9a7086b44271e0894f4fcc30489b5314894123ca54ed0a90cc810d0307062e0c3c18f8b45cea208041572c5df181fef0544e2faec3a007833e0c427a1531b92fea5f068de3048ddaa1456f76be4334eac0d2a411fdd5e1250c063018aa1043c7fc711a5c248604fb32daafd140529755a8b0c4a7f1c480b568ac52e1f8278531db7c630e9e64d06870f817046edc1397530b895c53d51627dfdc7c9a99fea1e7340abf6aea7be24fb383d54a98c721a13818a9c58853e1222f6f930a17797206868bdc865aab53b8f82597d5182f55332a0a234d1d74e496bd355a08e3ab2577387c10b581f8fe80c1bb78f00889f72ff0cfc5770b06635a036e80fff54946ebdf7c89da8d58a0078e7c7e291afd210c26d0251a613085c18c69a4fde1c25d5ae7df0b634f55bba94c6322b09c128718bb0e3a30c0ebc2771ce16769c4d37a11add5408c19fe6a2e8d0c241a3e9951641af59d1fd2b8819bfa47c2a868d41c6e4660c9c8fe95aed492f40c6753532de3fab3e823e4fff2441bfd43f8fb177d49fced8bceba102adb3b81c12281a2e9a3f2f236ca479573ff666f346591e74985639a293f3ba2eaa2dfa45affd739ad118e11237a8c7e43ceb4b028955a1b09079507e5ae26fc5d4282b655944b0f4f173040c51bc3e08416bf199cc2e00c06e73068c0e00202d44c54ad2f18342361641af19953e5a60e505aaf6170c36e2ad19812468410a417faf942c5fd8f90dae22ea7f2f0cac09e7d962c907872b97b912e79615ef4f890a4310252fb356a401ea8eb2fcf68d54c56af70fc4784313b7ea6b6c1e1df696049a768593b4e49435c141c529af43cb9408ef105284f3b8b6b3e5cf6d1e57e5de4d0bf823af8a2a0712d0e51157d949ddb048a6649837d54ef282ef4eb9e9be91ecd94a7a55097e4a37e1cd05a3254d5d8077450bd3d18b4a9dc0f23f1d584c13d0c1e803627fe242fd1f1447f24fc6de1dea001923fefd3b2a8836718bcc0e0551a2a36aad6160cb681a63b93304a0955c2a8dc546f64048d1f72cbd40695f8c339150fbd81b0f1889d09b834da743cb9b4e1a3bc2c4639b6148da887bc38030f064ecbe5e7729234928f3a3632ab0d3554748331bf2d9f387a5ac4e46f048d9b08e35a28460d3aed89daad359a8f5f9e8cd958034b085ce982e674023ce4d721f1718ef5f3e597e649250e5f74581333a7f4f920565bedc9079ae81f0beba23d598850881078ffe368cfba2dd5bf1a0596201092dd443dc39c2dc5ebbe159534d0477de80be78036756361c488717947abcb34de297f738a9c2393fbe26842ad330d97e234741751b2c26ba98a53a271b80b8303181c8a192a247aaac7d420d0bd852188da1d0c2d18da30746829714671e8c2d083a10fc340dcefc2b04b0d34769338bf78164bd4c026f5e5e027c29b9e2a458d727840783ca92545eee82c2432de5c7cda8e992107d54b848e591a133561b3f078aeeac96c9a46d53a721ecd1988d60de45957ebbaa97f248cf5688742dd0b9df956490e3726309b89c91258dd055dd90d97cecd7011d255b38db3e4e37d9a1c7469e2979839959ab4712177e4ebe3b0b32af770a2eb3811cd37717e2da6a970919337754adee839c46ab1a9a55a6cca14c6619d6afd248cdfb4456120579d1a5fc1b007c3be9a2a817e69ff525ccc49b530841b5dca5d3146b4263f6c8bd1b55c1dfc0886210c07301cc270241afb307c87e198dcd7e1070c3fc5cda178f3c4912d2cd980ea3c284387130d093420543f102f4ce10e2f3c19775dd2742776200f148dcd8ea29189e253402937237a4ca5554d1a29c56a943af06d75d0a869d4c3c944918167f9e5ccb9298c7ce7d785313b9551ce3b515ac71fbdca7336d6a7a9e2886e16076e4e60855638b30d801d21ee8ccb7eeec55d342db5183fb3559597a55a8f4641bd9d0d10a38fb48faa57ec1f8dd5d26fbcde945e59430b23d5fa8d88d17e85e1170c27e2ea239623f743b6652366326582c1db1cd50cbff3a1f868d1568aecaca23c06288373723e5d94be6f182e441d083c36c48f2d0be14d170d864b71e188bb3a893f4ff6e181a8fbbcd4443963fc681a9143dd334c51e2348e1b7369d4401266e62ad56122a79aa531258c4c23effba0c77d5f4454476a79a9264cfc5418f59ffc3e1cecac39ad84e3c35529fe9510aeccc4fc90c05c01d404ea161cd329e28c79ea43f9044350865faa4fb52517fc0bd79c5e74e788ab4cb8c866c94de759183979b3f0d48429bdf49b16c6198a580df0ce969f78ff70979ab0ad06f5b5745b54ca436dc488113dd5cf050c4f8076f6f569d79ada250578ad50ccb6c9db7c77ca20948e280ccf60782e8e5d9954906e278f189d44387d52577d3b8826e2641665a78111352772b39b3e53d9cc6a421b1fe2c08fe712645338ab85b19118fd7d618c5bfdce8d446079398b074692c6148a6dbdcf270f959cf4caaac6a00c8a11871b8782ff0502532d38bafa8ff7a986514b7f227e2bcb2a9ba591ed2e920d711828ae81e2188fc649dc149e0a1ad14d1d455bbbe50ae35b1d8511860d9ae93bbc48bfb9edd30488ee0e31f611884f3c71b2ef6cf14a4585d91795e07b380e9a945f4127162dc521e2c77750fd3ce4ff1e10e6bd6e62965d6a54e83f79c221cffad52dddd9d9897db96c29f74e510c6fc48d253452bd510373277dd45442b5581855f9d18f01a8cb65e979c4c66194b108bd92dc46f413222cd9713d35b63ae579cc4d639fa58a6d7a152a9fc67a6deb3aa2ff0c815504d0c4efa2adec6ca28cfebc971dadc98fa36be7a08cbd9c8ea2815c57caab8aa205a28103a5401831683423c6f7fb781f9b110672a84b2d185ee57ac5a27f4faee9475fcd0fecde5013f6bb257a23c0d81209b477147e1a429343a57bd7946ed9bb9299a70e799ebcb6854a39d8e9e5d5358a1187722da9adfce18806d1bac04d49da7974a652349a9e2ae757cd3a472a85b3521855b5230200cf1abe0f478c3a8b9e12468d62e2371a0b58f3f2140957b991be36993fbf5c18f3502c5eaf6d2d088baa117f4460ae009af89d7c913587ca4e9fc9f07fe94c275b5279ae86c6afa89b2f71a9da22c5b0d21a5548a3838ee24d3e8ac3334aa5ea8851a65261780b430ceadac571e9987042a1431aeda6185f281aaf86c29722d970c9c9fc94c811789f0461b8a4c9f871e1c19319e0375ee99c88c29f7f3556adf0451cf2c8d37e290259a20ca74f71184981d934f6538a68a45c4e9468a18a949b9f502d12467c49a20b674bbd8f1eae39284640eab6673d50a905ef2029a177f41c72b3cfe3c74d203768978d39fc890cae5b0ffc4502b5ff594420e3777248761d2a2385bc8fbd2026535f44cbf3c6e6f1a1348055d15315b743d168269a51cd6caafdc9c208c37bd1be07c787e1c38a37eccb702e45236a20fe2967035392330829ddc24092fa5dca628c276b303b8a40b9b7990a78f8da1c31a6b42ec7066a111ab5ecda49616864ab4d42e9adf0bfe8b87989a8c1a49151649678809147eae5d4368a68e4528766004fd0d9342795aa872e0fd1d4a43cbe8f0fb2b49adce29f4c6922dd10c5a5ea697e82c9cac21871583e43623347f457085ce982160920e3a709bcb1c8fa5bcaf011e5afeacf72e3135938872b736d6ad2ae1b5568a462c3f995f87c4a73f8e18ac73a0c1fc5ee050c9faae766e90d4d1a4903efd3b20997307c168b96f8eeaa4d79599d2a5a2a3da84d3fc1cc16a6b2f9fc3473a2304759a424d98a4554ae48e45ac2fc2030951dd5c3d2acfb3384fcbf7aa0f238a48ff31296fa265c6b4949284f4528af9de84aa92e9cb0075b228c090effd011cdadc8ff1981590134f1bb7b23bbde26bb75c8f0417cd5f93c4eb4b6e4352f6785d5d2a381ff8583ac424e55d8dbe253c0f045b46ae2c3139fcfe2fc4cb4f0301e57cf0025dfb025eb7b97054fb028f0e3c59afe312b592f83af029c7da998f9cc772993899654b4a6561bf4d5f8e43903095b95e9c9fde8a208b324c84ca962b18f6a70f8a73298db10f3170456c1efe194ecba4f765ba35b7c02be55ec329da97a63497f42f64a84f7f17a4f34ae556ffc07cca2dea030da03ebdfe5108dbcb8bc186fa5e8a5498846ac3e3b3ceae26b7db11f9bfad0f25264616c5901c26ac91bc9e11fc960ae235ad610531a07e61258510073f143bb7921bbfb50868fe36bf19d39cb8a5f492ff150d29690faedd442306b4ff6ff7b34b22d545ef49fe79097ae21b12acdb8145191b80e86aab8af8753495740c9dc8e2a7e66ae30a650ccd2b8661ed5e4300961c5e6985f71447f97c01201cce2f7f04e76bb24bb7923c307f125f856f4fe5ff495b8e458fd57f3c9c6434c7daaff451a8575f1b7fe6a76b9411c9abc7046c5fc67ea38c7d34de550c9f694afe898fb3d61dcd83b2d459139fc990cfec411fd53024b04308bdffd92ec7948d63ba65b52c86da9908772858e0775ce5634a327eb22780ec2adff268d3277daf97d6de4ac0c57cff5d227e584301bf161f4d4c0e031609685cd446bee64ab9631f5b14418abc78abf8e621e8d06871503a1b8566374fd95c86095507025812bd330e504a604b004bf9b67b2fb1ad9dd3bddd2832f4a21591ef5b9acd200d48a960898daff611a7feca9f28e34948011920143b28af48a38d123419feb437596d9f8bcf32558b564b4d3658f3f12c68d7dd48d6afddce7bd66a376ec95d57e5f064b32316b1158248029fc10b32c7ed625d96d479a27ad434fa3f7399559d68e71824b5bcfcd15e8f0f8e090ed6f981afd53234f75b0b39a463bdab99e8bfe97727e3d1e8d44f75246b5142a1df5bffaf4f159e333c8213d3d28cf2f9f6b4da346b19cc6a235018a44b8bc41e71ff4510d0ecb7dd1fca4e8fa32b8d211fd45028b0450ab1f135888df1ed9c319d9dd58190389ef891f8adf509ff51478d985e77432f64c4e3f0be1afd1da84c650a85dca1939b94fab6a92c653cf0b05e1afd64d119a162d5cfa0e3ec850e1a9311d133e3bf8279f2f0ee057d2981246a6f18f84f19ff4512314230eab54264a92a29bc9607547f417094c0920e2c70426d42f89dfed8eb839277bda226bdb745f2b645fba5545e0e9c0c66c796580fb424e2c5ed759b5b813ad7a635d25026962a1a046d3c51b8d0c3a7d6d3af2789cf908332d2630fa5ce02d3d81e97a57475b3b1d7887cf02fe179f972a342ac18c68dccc4d4d75ae6a1a53d31d2b76ae16a1f8c39246cce1da32980be1af3aa2bf4860d605cd11c00c7ec89e891fb28776df25bb3d26bb99cbdb737a15be39d73cf4e048fd22b3d747ff3a1a581d3af2b57965a816742ef16d9b727d3499041230590f397afe82fada10b953b979289d7deef0d2f3e5efe9eb315d0c0c339302061fc1e3a98f2447d468f8201f6d3c326bd1a851d7c2c8345677533713c6eac99baa3eea7a999b88c37fd217cd95c1724754d7033726b04c0023ff33ab7e29fc903dc2ef91ecae4b76bb2ded919e86ef762347a7e9a1a5d24ba966576d3492e4dcabf7170ad50cb468163c3e52978d5a78c44ca140a3717946e79b37b7ea835436901da43b940ee5653b1075e567dea9ecff6585e00a1fc49fc331761133f85f74303d753c7f48a3e63c4563b99bba56c4588ee25ff8a8d9891a1914b9bff4577dd16cc6e217653037175a9dc08400eea505308b5f2c7d117b0c5e1bc86e1fa4a1263c90e11dfc2f7c397e168db3b7c4af30bb5bf52fd266ba7cfc423c0e78b83818339f937a66ae23a787ac997ed4d7855c31c9765dc7a16f9b0e3833c3d8a4e4911ee4e399a49181e4e39fa5913367256f9beba65611c69f448cff7cb898e070dd2e998d7dd18a32984b204398ad46a408cc16218a0834fd4f1dfb95e3a7d963fc6e9fc8da16d99d4f767b2d1f017a37fc1af80df578d214f16fd1c6579675cd7c872c9f1af854a05531d64ae9c9a5d4613ed45911c33ff960e2ada2d153346a79ac4263d6075ee9a6ea5f51924afd398a7f1f2ef2be6b2b6bf41bf9a2d593a259192c77448b08acae8129024d01d4ce6715fc62f6d0aea4b5c8ee84bcf5e9e5f85934e66a31423cd4cc068394f10f342df769e6fb64f9ccad0a54f7f1b2b304f17ff10d4d72f00e1e733cc81427ef28c73e4b63ca53e50be57d943f5bcb4d2dcfdf940be3aff8a8e5258d4d518c38ac0861795eb4a440bf6e34982b83b9a1606e2e3497c02217d40cffccc02f763eb5e79995be147b37cac24bb29b1b32bc83cfa1f7f4e41736e8d2adadda78941759f6f9b9a09a6466992c1fd0b940eaa1ccc24897bc1a1d527d0943c3fb1bd368068db96e6a49c4b8168a268d8528baff3c8a3cdf625556a6a87de48729999268702d19341dd1742626a3815917b45000f3d42f96be883dc6cf04efd697f6aceca6a38cfe6cd167d1588c069f369deecfb767fae6f8a3f097a65e98a53405672e9645f53a13484eccf28378ab5e2e41c2a34787eb51e58df95a5646634116a78a9b6a6686aa478cebfaa8ab9be0fe10c588c3df0d08cb7dd1a2da60151934db62528ea8598dd88cc054ea258d5f247d59f64cf01472b6b47bb28706d9ed476cf4846bfa1acc9556f212c39fc35fef4e7e731adf9dc438be374836f934c94c8dec845af6e3ffc55b3eb07c9b0aedf4a7e051bdefaa10ba3a8da9a0d14ca8a6dcd48d85b1bcdcff47999b9fb5bf490eff14c2a2027d6e4a665d19cc3aa2a96260ae175a48a0218045ea97c62fc55e06bcf636d95da0ec4128bb6dcadb7bfa2cfc62f8b5f93a9232ad1ef8d3e84b3e290f59a76709839db815563b7b7c2711893d27729894d43d5366966d72fd49131bf33df196ae111d196c1f2bcba5517f50118d2937b54818aba452b33eeaca5affaf646eaaa298b34455c4e1cf21ac529ca89e924995255232b8d2114d1503ab10582e8045f869dd4bb197a50ead7daeecce53767b22ad496f821f4a40ee4585cd9479f40d392e45e330551b7e7ffc21f80359f069f41f47816ea457fca77626b30a56d1a5cc8a185f1ce9fe333d9f2a37d1db6669cc0d1a7325375718737d542d8c157dd4ff1e8a5cb73021ac9c1adda038510e61892f5a5506f31cd12a04a63530e37f9ace670abf5cf64cf012c8a17d47d6356c46464fb355cd837f8b36ea136059be4adab5b214a27c4d8995f354b9dcf4ab650c7c97742999498d4d9a9cbdd5e498912a75fcbdd3cbf9f86b14d33416086349c4985b63fcb98f9a6d0d5f9144ad5ccfa886a2c1e1cf21ac1e10aeeb8ba692a2e53258140a56d5c056023f2d8025f8a5d84b806722378b6caeacdf49190c5fe9710692b091bdacf4139ee2642c1b5f26b840a22c0927fda22b45a6c65233a9b2c1db0991ccf52a73e1c94db7e48898248a5eb593278cd5f02e12c65c1fb53a8a2b0bfd1bd4333645f1fffecffffb3fff1fe8219226 + + + + + doneHere + clicked() + AboutBox + close() + + + + diff --git a/muse2/muse/widgets/aboutbox_impl.cpp b/muse2/muse/widgets/aboutbox_impl.cpp new file mode 100644 index 00000000..9ea20aad --- /dev/null +++ b/muse2/muse/widgets/aboutbox_impl.cpp @@ -0,0 +1,10 @@ +#include +#include "aboutbox_impl.h" +#include "config.h" + +AboutBoxImpl::AboutBoxImpl() +{ + QString version(VERSION); + QString svnrevision(SVNVERSION); + versionLabel->setText("Version: " + version + " (svn revision: "+ svnrevision +")"); +} diff --git a/muse2/muse/widgets/aboutbox_impl.h b/muse2/muse/widgets/aboutbox_impl.h new file mode 100644 index 00000000..4584de9a --- /dev/null +++ b/muse2/muse/widgets/aboutbox_impl.h @@ -0,0 +1,16 @@ +#ifndef ABOUTBOXIMPL_H +#define ABOUTBOXIMPL_H + +#include "aboutbox.h" + +class AboutBoxImpl : public AboutBox +{ + Q_OBJECT + +public: + AboutBoxImpl(); + + +}; + +#endif // ABOUTBOXIMPL_H diff --git a/muse2/muse/widgets/action.h b/muse2/muse/widgets/action.h new file mode 100644 index 00000000..74635f0a --- /dev/null +++ b/muse2/muse/widgets/action.h @@ -0,0 +1,32 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: action.h,v 1.1.1.1.2.1 2008/01/19 13:33:46 wschweer Exp $ +// (C) Copyright 2001 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __ACTION_H__ +#define __ACTION_H__ + +#include + +//--------------------------------------------------------- +// Action +//--------------------------------------------------------- + +class Action : public Q3Action { + Q_OBJECT + int _id; + + public: + Action(QObject* parent, int i, const char* name = 0, bool toggle = false) + : Q3Action(parent, name, toggle) { + _id = i; + } + void setId(int i) { _id = i; } + int id() const { return _id; } + }; + + +#endif + diff --git a/muse2/muse/widgets/appearancebase.ui b/muse2/muse/widgets/appearancebase.ui new file mode 100644 index 00000000..7c9a3e97 --- /dev/null +++ b/muse2/muse/widgets/appearancebase.ui @@ -0,0 +1,1764 @@ + +AppearanceDialogBase + + + AppearanceDialogBase + + + + 0 + 0 + 591 + 597 + + + + MusE: Appearance settings + + + + unnamed + + + + TabWidget2 + + + + 3 + 7 + 0 + 0 + + + + + tab + + + Arranger + + + + unnamed + + + 11 + + + 6 + + + + ButtonGroup3 + + + Parts + + + true + + + + unnamed + + + 11 + + + 6 + + + + partShownames + + + show names + + + + + partShowevents + + + show events + + + + + partShowCakes + + + show Cakewalk Style + + + + + + + eventButtonGroup + + + Events + + + + unnamed + + + 11 + + + 6 + + + + eventNoteon + + + note on + + + + + eventPolypressure + + + poly pressure + + + + + eventController + + + controller + + + + + eventAftertouch + + + aftertouch + + + + + eventPitchbend + + + pitch bend + + + + + eventProgramchange + + + program change + + + + + eventSpecial + + + special + + + + + + + GroupBox2 + + + Background picture + + + + unnamed + + + 11 + + + 6 + + + + currentBgLabel + + + + 7 + 1 + 0 + 0 + + + + bg + + + AlignVCenter|AlignLeft + + + -1 + + + + + + + selectBgButton + + + select... + + + + + clearBgButton + + + clear + + + + + + + arrGrid + + + show snap grid + + + + + + + tab + + + Colors + + + + + unnamed + + + + aPalette + + + NoFocus + + + Palette + + + true + + + 0 + + + + unnamed + + + 0 + + + + palette0 + + + + 7 + 7 + 0 + 0 + + + + + + + true + + + true + + + + + palette1 + + + + 7 + 7 + 0 + 0 + + + + + + + true + + + 1 + + + + + palette2 + + + + 7 + 7 + 0 + 0 + + + + + + + true + + + 2 + + + + + palette3 + + + + 7 + 7 + 0 + 0 + + + + + + + true + + + 3 + + + + + palette4 + + + + 7 + 7 + 0 + 0 + + + + + + + true + + + 4 + + + + + palette5 + + + + 7 + 7 + 0 + 0 + + + + + + + true + + + 5 + + + + + palette8 + + + + 7 + 7 + 0 + 0 + + + + + + + true + + + 8 + + + + + palette9 + + + + 7 + 7 + 0 + 0 + + + + + + + true + + + 9 + + + + + palette10 + + + + 7 + 7 + 0 + 0 + + + + + 238 + 222 + 222 + + + + + + + true + + + 10 + + + + + palette11 + + + + 7 + 7 + 0 + 0 + + + + + + + true + + + 11 + + + + + palette12 + + + + 7 + 7 + 0 + 0 + + + + + + + true + + + 12 + + + + + palette13 + + + + 7 + 7 + 0 + 0 + + + + + + + true + + + 13 + + + + + palette7 + + + + 7 + 7 + 0 + 0 + + + + + + + true + + + 7 + + + + + palette6 + + + + 7 + 7 + 0 + 0 + + + + + + + true + + + 6 + + + + + palette15 + + + + 7 + 7 + 0 + 0 + + + + + + + true + + + 15 + + + + + palette14 + + + + 7 + 7 + 0 + 0 + + + + + + + true + + + 14 + + + + + + + addToPalette + + + add to palette + + + + + colorframe + + + + 7 + 7 + 0 + 0 + + + + StyledPanel + + + Sunken + + + + + layout4 + + + + unnamed + + + + rval + + + 255 + + + + + hslider + + + 255 + + + Horizontal + + + + + textLabel3_2 + + + B + + + AlignCenter + + + + + textLabel5_2 + + + S + + + AlignCenter + + + + + textLabel4_2 + + + H + + + AlignCenter + + + + + bval + + + 255 + + + + + vslider + + + 255 + + + Horizontal + + + + + textLabel6_2 + + + V + + + AlignCenter + + + + + textLabel2_2 + + + G + + + AlignCenter + + + + + sval + + + 255 + + + + + gslider + + + 255 + + + Horizontal + + + + + sslider + + + 255 + + + Horizontal + + + + + bslider + + + 255 + + + Horizontal + + + + + gval + + + 255 + + + + + rslider + + + + 7 + 7 + 0 + 0 + + + + 0 + + + 255 + + + true + + + Horizontal + + + NoMarks + + + + + vval + + + 255 + + + + + hval + + + 255 + + + + + textLabel1 + + + R + + + AlignCenter + + + + + + + + Items + + + false + + + false + + + + itemList + + + true + + + true + + + AllColumns + + + + + + botColorSpacer + + + Vertical + + + Expanding + + + + 20 + 40 + + + + + + + + tab + + + Style/Fonts + + + + unnamed + + + + GroupBox18 + + + + 7 + 5 + 0 + 0 + + + + QT Theme + + + + unnamed + + + 11 + + + 6 + + + + layout4 + + + + unnamed + + + + + Windows + + + + + MusE + + + + + Metal + + + + + Norwegian Wood + + + + + Platinum + + + + + CDE + + + + + Motif + + + + + Motif Plus + + + + themeComboBox + + + + 1 + 0 + 0 + 0 + + + + + + Spacer2 + + + Horizontal + + + Expanding + + + + 190 + 20 + + + + + + + + spacer3 + + + Vertical + + + Expanding + + + + 20 + 40 + + + + + + + + GroupBox6 + + + Fonts + + + + unnamed + + + 11 + + + 6 + + + + textLabel2 + + + Family + + + + + TextLabel1_1 + + + Size + + + + + textLabel4 + + + Font 1 + + + + + textLabel5 + + + Font 2 + + + + + textLabel6 + + + Font 3 + + + + + fontName0 + + + + 7 + 0 + 0 + 0 + + + + + + fontName1 + + + + 7 + 0 + 0 + 0 + + + + + + fontName2 + + + + 7 + 0 + 0 + 0 + + + + + + fontName3 + + + + 7 + 0 + 0 + 0 + + + + + + textLabel3 + + + Font 0 + + + + + fontSize0 + + + + 4 + 0 + 0 + 0 + + + + + + fontSize1 + + + + 4 + 0 + 0 + 0 + + + + + + fontSize2 + + + + 4 + 0 + 0 + 0 + + + + + + fontSize3 + + + + 4 + 0 + 0 + 0 + + + + + + bold1 + + + Bold + + + + + bold2 + + + Bold + + + + + bold3 + + + Bold + + + + + bold0 + + + Bold + + + + + italic2 + + + Italic + + + + + italic3 + + + Italic + + + + + italic1 + + + Italic + + + + + italic0 + + + Italic + + + + + fontBrowse0 + + + + 4 + 1 + 0 + 0 + + + + ... + + + + + fontBrowse1 + + + + 4 + 1 + 0 + 0 + + + + ... + + + + + fontBrowse2 + + + + 4 + 1 + 0 + 0 + + + + ... + + + + + fontBrowse3 + + + + 4 + 1 + 0 + 0 + + + + ... + + + + + textLabel7 + + + Font 4 + + + + + fontName4 + + + + 7 + 0 + 0 + 0 + + + + + + textLabel7_2 + + + Font 5 + + + + + fontName5 + + + + 7 + 0 + 0 + 0 + + + + + + textLabel7_3 + + + Font 6 + + + + + fontName6 + + + + 7 + 0 + 0 + 0 + + + + + + fontSize6 + + + + 4 + 0 + 0 + 0 + + + + + + bold6 + + + Bold + + + + + italic6 + + + Italic + + + + + fontBrowse6 + + + + 4 + 1 + 0 + 0 + + + + ... + + + + + fontSize4 + + + + 4 + 0 + 0 + 0 + + + + + + fontSize5 + + + + 4 + 0 + 0 + 0 + + + + + + bold4 + + + Bold + + + + + bold5 + + + Bold + + + + + italic4 + + + Italic + + + + + italic5 + + + Italic + + + + + fontBrowse4 + + + + 4 + 1 + 0 + 0 + + + + ... + + + + + fontBrowse5 + + + + 4 + 1 + 0 + 0 + + + + ... + + + + + + + + + + Layout2 + + + + unnamed + + + 0 + + + 6 + + + + Spacer1 + + + Horizontal + + + Expanding + + + + 20 + 20 + + + + + + applyButton + + + Apply + + + + + okButton + + + Ok + + + true + + + + + cancelButton + + + Cancel + + + + + + + + + rslider + valueChanged(int) + rval + setValue(int) + + + gslider + valueChanged(int) + gval + setValue(int) + + + bslider + valueChanged(int) + bval + setValue(int) + + + hslider + valueChanged(int) + hval + setValue(int) + + + sslider + valueChanged(int) + sval + setValue(int) + + + vslider + valueChanged(int) + vval + setValue(int) + + + rval + valueChanged(int) + rslider + setValue(int) + + + gval + valueChanged(int) + gslider + setValue(int) + + + bval + valueChanged(int) + bslider + setValue(int) + + + hval + valueChanged(int) + hslider + setValue(int) + + + sval + valueChanged(int) + sslider + setValue(int) + + + vval + valueChanged(int) + vslider + setValue(int) + + + + TabWidget2 + itemList + palette0 + palette1 + palette2 + palette3 + palette4 + palette5 + palette6 + palette7 + palette8 + palette9 + palette10 + palette11 + palette12 + palette13 + palette14 + palette15 + addToPalette + rval + rslider + gval + gslider + bval + bslider + hval + hslider + sval + sslider + vval + vslider + applyButton + okButton + cancelButton + partShownames + partShowevents + partShowCakes + eventNoteon + eventPolypressure + eventController + eventAftertouch + eventPitchbend + eventProgramchange + eventSpecial + selectBgButton + arrGrid + themeComboBox + fontName0 + fontName1 + fontName2 + fontName3 + fontSize0 + fontSize1 + fontSize2 + fontSize3 + bold1 + bold2 + bold3 + bold0 + italic2 + italic3 + italic1 + italic0 + fontName4 + fontName5 + fontSize4 + fontSize5 + bold4 + bold5 + italic4 + italic5 + + + new_slot() + + + diff --git a/muse2/muse/widgets/bigtime.cpp b/muse2/muse/widgets/bigtime.cpp new file mode 100644 index 00000000..16cfe071 --- /dev/null +++ b/muse2/muse/widgets/bigtime.cpp @@ -0,0 +1,442 @@ +#include +#include +#include +#include +#include +//Added by qt3to4: +#include +#include +#include + +#include +#include "globals.h" +#include "bigtime.h" +#include "song.h" +#include "app.h" +#include "gconfig.h" + +extern int mtcType; + +// +// the bigtime widget +// display is split into several parts to avoid flickering. +// + +//--------------------------------------------------------- +// BigTime +//--------------------------------------------------------- + +BigTime::BigTime(QWidget* parent) + : QWidget(parent, 0, Qt::WType_TopLevel | Qt::WStyle_StaysOnTop) + { + + tickmode = true; + dwin = new QWidget(this, "bigtime-dwin", Qt::WStyle_StaysOnTop); + dwin->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding)); + fmtButton = new QCheckBox(QString(""), this); + fmtButton->resize(18,18); + fmtButton->setChecked(true); + QToolTip::add(fmtButton, tr("format display")); + barLabel = new QLabel(dwin); + beatLabel = new QLabel(dwin); + tickLabel = new QLabel(dwin); + //hourLabel = new QLabel(dwin); + minLabel = new QLabel(dwin); + secLabel = new QLabel(dwin); + frameLabel = new QLabel(dwin); + subFrameLabel = new QLabel(dwin); + sep1 = new QLabel(QString("."), dwin); + sep2 = new QLabel(QString("."), dwin); + sep3 = new QLabel(QString(":"), dwin); + sep4 = new QLabel(QString(":"), dwin); + sep5 = new QLabel(QString(":"), dwin); + absTickLabel = new QLabel(dwin); + absFrameLabel = new QLabel(dwin); + QToolTip::add(barLabel, tr("bar")); + QToolTip::add(beatLabel, tr("beat")); + QToolTip::add(tickLabel, tr("tick")); + //QToolTip::add(hourLabel, tr("hour")); + QToolTip::add(minLabel, tr("minute")); + QToolTip::add(secLabel, tr("second")); + QToolTip::add(frameLabel, tr("frame")); + QToolTip::add(subFrameLabel, tr("subframe")); + QToolTip::add(absTickLabel, tr("tick")); + QToolTip::add(absFrameLabel, tr("frame")); + fmtButtonToggled(true); + connect(fmtButton, SIGNAL(toggled(bool)), SLOT(fmtButtonToggled(bool))); + //oldbar = oldbeat = oldtick = oldhour = oldmin = oldsec = oldframe = -1; + oldbar = oldbeat = oldtick = oldmin = oldsec = oldframe = oldsubframe = -1; + oldAbsTick = oldAbsFrame = -1; + setString(MAXINT); + + configChanged(); + + QFont f(QString("Courier")); + f.setPixelSize(10); + + dwin->setFont(f); + setCaption(tr("MusE: Bigtime")); + } + + +//--------------------------------------------------------- +// fmtButtonToggled +//--------------------------------------------------------- + +void BigTime::fmtButtonToggled(bool v) +{ + if(v) + { + tickmode = true; + + barLabel->setEnabled(true); + beatLabel->setEnabled(true); + tickLabel->setEnabled(true); + //hourLabel->setEnabled(true); + minLabel->setEnabled(true); + secLabel->setEnabled(true); + frameLabel->setEnabled(true); + subFrameLabel->setEnabled(true); + sep1->setEnabled(true); + sep2->setEnabled(true); + sep3->setEnabled(true); + sep4->setEnabled(true); + sep5->setEnabled(true); + absTickLabel->setEnabled(false); + absFrameLabel->setEnabled(false); + + barLabel->show(); + beatLabel->show(); + tickLabel->show(); + //hourLabel->show(); + minLabel->show(); + secLabel->show(); + frameLabel->show(); + subFrameLabel->show(); + sep1->show(); + sep2->show(); + sep3->show(); + sep4->show(); + sep5->show(); + absTickLabel->hide(); + absFrameLabel->hide(); + } + else + { + tickmode = false; + + barLabel->setEnabled(false); + beatLabel->setEnabled(false); + tickLabel->setEnabled(false); + //hourLabel->setEnabled(false); + minLabel->setEnabled(false); + secLabel->setEnabled(false); + frameLabel->setEnabled(false); + subFrameLabel->setEnabled(false); + sep1->setEnabled(false); + sep2->setEnabled(false); + sep3->setEnabled(false); + sep4->setEnabled(false); + sep5->setEnabled(false); + absTickLabel->setEnabled(true); + absFrameLabel->setEnabled(true); + + barLabel->hide(); + beatLabel->hide(); + tickLabel->hide(); + //hourLabel->hide(); + minLabel->hide(); + secLabel->hide(); + frameLabel->hide(); + subFrameLabel->hide(); + sep1->hide(); + sep2->hide(); + sep3->hide(); + sep4->hide(); + sep5->hide(); + absTickLabel->show(); + absFrameLabel->show(); + } +} + +//--------------------------------------------------------- +// 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(unsigned v) + { + if (v == MAXINT) { + barLabel->setText(QString("----")); + beatLabel->setText(QString("--")); + tickLabel->setText(QString("---")); + //hourLabel->setText(QString("--")); + //minLabel->setText(QString("--")); + minLabel->setText(QString("---")); + secLabel->setText(QString("--")); + frameLabel->setText(QString("--")); + subFrameLabel->setText(QString("--")); + + absTickLabel->setText(QString("----------")); + absFrameLabel->setText(QString("----------")); + oldAbsTick = oldAbsFrame = -1; + //oldbar = oldbeat = oldtick = oldhour = oldmin = oldsec = oldframe = -1; + oldbar = oldbeat = oldtick = oldmin = oldsec = oldframe = oldsubframe = -1; + return true; + } + + unsigned absFrame = tempomap.tick2frame(v); + int bar, beat; + unsigned tick; + sigmap.tickValues(v, &bar, &beat, &tick); + double time = double(absFrame)/double(sampleRate); + //int hour = int(time) / 3600; + //int min = (int(time) / 60) % 60; + 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; + + if(oldAbsTick != v) { + s.sprintf("%010d", v); + absTickLabel->setText(s); + oldAbsTick = v; + } + if(oldAbsFrame != absFrame) { + s.sprintf("%010d", absFrame); + absFrameLabel->setText(s); + oldAbsFrame = absFrame; + } + 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); + s.sprintf("%03d", 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; + } + + if(oldsubframe != subframe) { + s.sprintf("%02u", subframe); + subFrameLabel->setText(s); + oldsubframe = subframe; + } + + return false; + } + +//--------------------------------------------------------- +// setPos +//--------------------------------------------------------- + +void BigTime::setPos(int idx, unsigned v, bool) + { + if (idx == 0) + setString(v); + } + +//--------------------------------------------------------- +// resizeEvent +//--------------------------------------------------------- + +void BigTime::resizeEvent(QResizeEvent *ev) + { + dwin->resize(ev->size()); + QFont f = dwin->font(); + QFontMetrics fm(f); + int fs = f.pixelSize(); + int hspace = 20; + //int tw = fm.width(QString("00:00:00:00")); + int tw = fm.width(QString("000: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); + + + dwin->setFont(f); + int digitWidth = dwin->fontMetrics().width(QString("0")); + int vspace = (ev->size().height() - (fs*2)) / 3; + int tickY = vspace; + + int timeY = vspace*2 + fs; + int absTickY = tickY; + int absFrameY = timeY; + 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); + minLabel->resize(digitWidth*3, fs); + secLabel->resize(digitWidth*2, fs); + frameLabel->resize(digitWidth*2, fs); + subFrameLabel->resize(digitWidth*2, fs); + + absTickLabel->resize(digitWidth*10, fs); + absFrameLabel->resize(digitWidth*10, 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); + minLabel->move( hspace + (digitWidth*0), timeY); + sep3->move( hspace + (digitWidth*3), timeY); + secLabel->move( hspace + (digitWidth*4), timeY); + sep4->move( hspace + (digitWidth*6), timeY); + frameLabel->move( hspace + (digitWidth*7), timeY); + sep5->move( hspace + (digitWidth*9), timeY); + subFrameLabel->move( hspace + (digitWidth*10), timeY); + + absTickLabel->move( hspace + (digitWidth*0), absTickY); + absFrameLabel->move( hspace + (digitWidth*0), absFrameY); + } + +//--------------------------------------------------------- +// setForegroundColor +//--------------------------------------------------------- + +void BigTime::setFgColor(QColor c) + { + QColorGroup cg = palette().active(); + cg.setColor(QColorGroup::Foreground, c); + QPalette newpalette(cg, cg, cg); + setPalette(newpalette); + + barLabel->setPalette(newpalette); + beatLabel->setPalette(newpalette); + tickLabel->setPalette(newpalette); + //hourLabel->setPalette(newpalette); + minLabel->setPalette(newpalette); + secLabel->setPalette(newpalette); + frameLabel->setPalette(newpalette); + subFrameLabel->setPalette(newpalette); + + absTickLabel->setPalette(newpalette); + absFrameLabel->setPalette(newpalette); + sep1->setPalette(newpalette); + sep2->setPalette(newpalette); + sep3->setPalette(newpalette); + sep4->setPalette(newpalette); + sep5->setPalette(newpalette); + } + +//--------------------------------------------------------- +// setBackgroundColor +//--------------------------------------------------------- + +void BigTime::setBgColor(QColor c) + { + QColorGroup cg = palette().active(); + cg.setColor(QColorGroup::Background, c); + QPalette newpalette(cg, cg, cg); + setPalette(newpalette); + + barLabel->setPalette(newpalette); + beatLabel->setPalette(newpalette); + tickLabel->setPalette(newpalette); + //hourLabel->setPalette(newpalette); + minLabel->setPalette(newpalette); + secLabel->setPalette(newpalette); + frameLabel->setPalette(newpalette); + subFrameLabel->setPalette(newpalette); + + absTickLabel->setPalette(newpalette); + absFrameLabel->setPalette(newpalette); + sep1->setPalette(newpalette); + sep2->setPalette(newpalette); + sep3->setPalette(newpalette); + sep4->setPalette(newpalette); + sep5->setPalette(newpalette); + + setBackgroundColor(c); + } + diff --git a/muse2/muse/widgets/bigtime.h b/muse2/muse/widgets/bigtime.h new file mode 100644 index 00000000..5e173cb0 --- /dev/null +++ b/muse2/muse/widgets/bigtime.h @@ -0,0 +1,55 @@ +#ifndef __BIGTIME_H__ +#define __BIGTIME_H__ + +#include +#include + +#include +//Added by qt3to4: +#include +#include +class MusE; + +//--------------------------------------------------------- +// BigTime +//--------------------------------------------------------- + +class BigTime : public QWidget { + bool tickmode; + MusE* seq; + Q_OBJECT + + bool setString(unsigned); + + QWidget *dwin; + QCheckBox *fmtButton; + QLabel *absTickLabel; + QLabel *absFrameLabel; + QLabel *barLabel, *beatLabel, *tickLabel, + //*hourLabel, *minLabel, *secLabel, *frameLabel, + *minLabel, *secLabel, *frameLabel, *subFrameLabel, + *sep1, *sep2, *sep3, *sep4, *sep5; + + //int oldbar, oldbeat, oldhour, oldmin, oldsec, oldframe; + int oldbar, oldbeat, oldmin, oldsec, oldframe, oldsubframe; + unsigned oldtick; + unsigned oldAbsTick, oldAbsFrame; + void setFgColor(QColor c); + void setBgColor(QColor c); + + protected: + virtual void resizeEvent(QResizeEvent*); + virtual void closeEvent(QCloseEvent*); + + public slots: + void setPos(int, unsigned, bool); + void configChanged(); + void fmtButtonToggled(bool); + signals: + void closed(); + + public: + BigTime(QWidget* parent); + }; + +#endif diff --git a/muse2/muse/widgets/canvas.cpp b/muse2/muse/widgets/canvas.cpp new file mode 100644 index 00000000..ef5ee0de --- /dev/null +++ b/muse2/muse/widgets/canvas.cpp @@ -0,0 +1,1405 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: canvas.cpp,v 1.10.2.17 2009/05/03 04:14:01 terminator356 Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#include + +#include "canvas.h" +#include +#include +#include +#include +#include +//Added by qt3to4: +#include +#include +#include + +#include "song.h" +#include "event.h" +#include "citem.h" +#include "icons.h" +#include "../marker/marker.h" +#include "part.h" + +#define ABS(x) ((x) < 0) ? -(x) : (x) + +//--------------------------------------------------------- +// Canvas +//--------------------------------------------------------- + +Canvas::Canvas(QWidget* parent, int sx, int sy, const char* name) + : View(parent, sx, sy, name) + { + canvasTools = 0; + itemPopupMenu = 0; + + canScrollLeft = true; + canScrollRight = true; + canScrollUp = true; + canScrollDown = true; + hscrollDir = HSCROLL_NONE; + vscrollDir = VSCROLL_NONE; + scrollTimer=NULL; + + scrollSpeed=10; // hardcoded scroll jump + + drag = DRAG_OFF; + _tool = PointerTool; + pos[0] = song->cpos(); + pos[1] = song->lpos(); + pos[2] = song->rpos(); + curPart = NULL; + curPartId = -1; + curItem = NULL; + connect(song, SIGNAL(posChanged(int, unsigned, bool)), this, SLOT(setPos(int, unsigned, bool))); + } + +//--------------------------------------------------------- +// setPos +// set one of three markers +// idx - 0-cpos 1-lpos 2-rpos +// flag - emit followEvent() +//--------------------------------------------------------- + +void Canvas::setPos(int idx, unsigned val, bool adjustScrollbar) + { + //if (pos[idx] == val) // Seems to be some refresh problems here, pos[idx] might be val but the gui not updated. + // return; // skipping this return forces update even if values match. Matching values only seem + // to occur when initializing + int opos = mapx(pos[idx]); + int npos = mapx(val); + + if (adjustScrollbar && idx == 0) { + switch (song->follow()) { + case Song::NO: + break; + case Song::JUMP: + if (npos >= width()) { + int ppos = val - xorg - rmapxDev(width()/8); + if (ppos < 0) + ppos = 0; + emit followEvent(ppos); + opos = mapx(pos[idx]); + npos = mapx(val); + } + else if (npos < 0) { + int ppos = val - xorg - rmapxDev(width()*3/4); + if (ppos < 0) + ppos = 0; + emit followEvent(ppos); + opos = mapx(pos[idx]); + npos = mapx(val); + } + break; + case Song::CONTINUOUS: + if (npos > (width()/2)) { + int ppos = pos[idx] - xorg - rmapxDev(width()/2); + if (ppos < 0) + ppos = 0; + emit followEvent(ppos); + opos = mapx(pos[idx]); + npos = mapx(val); + } + else if (npos < (width()/2)) { + int ppos = pos[idx] - xorg - rmapxDev(width()/2); + if (ppos < 0) + ppos = 0; + emit followEvent(ppos); + opos = mapx(pos[idx]); + npos = mapx(val); + } + break; + } + } + + int x; + int w = 1; + if (opos > npos) { + w += opos - npos; + x = npos; + } + else { + w += npos - opos; + x = opos; + } + pos[idx] = val; + redraw(QRect(x-1, 0, w+2, height())); + } + +//--------------------------------------------------------- +// draw +//--------------------------------------------------------- + +void Canvas::draw(QPainter& p, const QRect& rect) + { +// printf("draw canvas %x virt %d\n", this, virt()); + + int x = rect.x(); + int y = rect.y(); + int w = rect.width(); + int h = rect.height(); + int x2 = x + w; + + if (virt()) { + drawCanvas(p, rect); + + //--------------------------------------------------- + // draw Canvas Items + //--------------------------------------------------- + + iCItem to(items.lower_bound(x2)); + + // Draw items from other parts behind all others. + // Only for items with events (not arranger parts). + for(iCItem i = items.begin(); i != to; ++i) + { + CItem* ci = i->second; + if(!ci->event().empty() && ci->part() != curPart) + { + drawItem(p, ci, rect); + } + } + + for (iCItem i = items.begin(); i != to; ++i) + { + CItem* ci = i->second; + // Draw unselected parts behind selected. + if(!ci->isSelected() && !ci->isMoving() && (ci->event().empty() || ci->part() == curPart)) + { + drawItem(p, ci, rect); + } + } + + // Draw selected parts in front of unselected. + for (iCItem i = items.begin(); i != to; ++i) + { + CItem* ci = i->second; + if(ci->isSelected() && !ci->isMoving() && (ci->event().empty() || ci->part() == curPart)) + { + drawItem(p, ci, rect); + } + } + to = moving.lower_bound(x2); + for (iCItem i = moving.begin(); i != to; ++i) + { + drawItem(p, i->second, rect); + } + } + else { + p.save(); + setPainter(p); + + if (xmag <= 0) { + x -= 1; + w += 2; + x = (x + xpos + rmapx(xorg)) * (-xmag); + w = w * (-xmag); + } + else { + x = (x + xpos + rmapx(xorg)) / xmag; + w = (w + xmag - 1) / xmag; + x -= 1; + w += 2; + } + if (ymag <= 0) { + y -= 1; + h += 2; + y = (y + ypos + rmapy(yorg)) * (-ymag); + h = h * (-ymag); + } + else { + y = (rect.y() + ypos + rmapy(yorg))/ymag; + h = (rect.height()+ymag-1)/ymag; + y -= 1; + h += 2; + } + + if (x < 0) + x = 0; + if (y < 0) + y = 0; + x2 = x + w; + + drawCanvas(p, QRect(x, y, w, h)); + p.restore(); + + //--------------------------------------------------- + // draw Canvas Items + //--------------------------------------------------- + + // Draw items from other parts behind all others. + // Only for items with events (not arranger parts). + for(iCItem i = items.begin(); i != items.end(); ++i) + { + CItem* ci = i->second; + if(!ci->event().empty() && ci->part() != curPart) + { + drawItem(p, ci, rect); + } + } + + for (iCItem i = items.begin(); i != items.end(); ++i) { + CItem* ci = i->second; + // Draw unselected parts behind selected. + if(!ci->isSelected() && !ci->isMoving() && (ci->event().empty() || ci->part() == curPart)) + { + drawItem(p, ci, rect); + } + } + + // Draw selected parts in front of unselected. + for (iCItem i = items.begin(); i != items.end(); ++i) { + CItem* ci = i->second; + if(ci->isSelected() && !ci->isMoving() && (ci->event().empty() || ci->part() == curPart)) + { + drawItem(p, ci, rect); + } + } + for (iCItem i = moving.begin(); i != moving.end(); ++i) + { + drawItem(p, i->second, rect); + } + p.save(); + setPainter(p); + } + + //--------------------------------------------------- + // draw marker + //--------------------------------------------------- + + int y2 = y + h; + MarkerList* marker = song->marker(); + for (iMarker m = marker->begin(); m != marker->end(); ++m) { + int xp = m->second.tick(); + if (xp >= x && xp < x+w) { + p.setPen(Qt::green); + p.drawLine(xp, y, xp, y2); + } + } + + //--------------------------------------------------- + // draw location marker + //--------------------------------------------------- + + p.setPen(Qt::blue); + if (pos[1] >= unsigned(x) && pos[1] < unsigned(x2)) { + p.drawLine(pos[1], y, pos[1], y2); + } + if (pos[2] >= unsigned(x) && pos[2] < unsigned(x2)) + p.drawLine(pos[2], y, pos[2], y2); + p.setPen(Qt::red); + if (pos[0] >= unsigned(x) && pos[0] < unsigned(x2)) { + p.drawLine(pos[0], y, pos[0], y2); + } + + //--------------------------------------------------- + // draw lasso + //--------------------------------------------------- + + if (drag == DRAG_LASSO) { + p.setPen(Qt::blue); + p.setBrush(Qt::NoBrush); + p.drawRect(lasso); + } + + //--------------------------------------------------- + // draw moving items + //--------------------------------------------------- + + if(virt()) + { + for(iCItem i = moving.begin(); i != moving.end(); ++i) + drawMoving(p, i->second, rect); + } + else + { + p.restore(); + for(iCItem i = moving.begin(); i != moving.end(); ++i) + drawMoving(p, i->second, rect); + setPainter(p); + } + } + +#define WHEEL_STEPSIZE 40 +#define WHEEL_DELTA 120 + +//--------------------------------------------------------- +// wheelEvent +//--------------------------------------------------------- +void Canvas::wheelEvent(QWheelEvent* ev) + { + int delta = ev->delta() / WHEEL_DELTA; + int ypixelscale = rmapyDev(1); + + if (ypixelscale <= 0) + ypixelscale = 1; + + int scrollstep = WHEEL_STEPSIZE * (-delta); + if (ev->state() == Qt::ShiftModifier) + scrollstep = scrollstep / 10; + + int newYpos = ypos + ypixelscale * scrollstep; + + if (newYpos < 0) + newYpos = 0; + + //setYPos(newYpos); + emit verticalScroll((unsigned)newYpos); + + } + +void Canvas::redirectedWheelEvent(QWheelEvent* ev) + { + wheelEvent(ev); + } + +//--------------------------------------------------------- +// deselectAll +//--------------------------------------------------------- + +void Canvas::deselectAll() + { + for (iCItem i = items.begin(); i != items.end(); ++i) + i->second->setSelected(false); + } + +//--------------------------------------------------------- +// selectItem +//--------------------------------------------------------- + +void Canvas::selectItem(CItem* e, bool flag) + { + e->setSelected(flag); + } + +//--------------------------------------------------------- +// startMoving +// copy selection-List to moving-List +//--------------------------------------------------------- + +void Canvas::startMoving(const QPoint& pos, DragType) + { + for (iCItem i = items.begin(); i != items.end(); ++i) { + if (i->second->isSelected()) { + i->second->setMoving(true); + moving.add(i->second); + } + } + moveItems(pos, 0); + } + +//--------------------------------------------------------- +// moveItems +// dir = 0 move in all directions +// 1 move only horizontal +// 2 move only vertical +//--------------------------------------------------------- + +void Canvas::moveItems(const QPoint& pos, int dir = 0, bool rasterize) + { + int dp; + if(rasterize) + dp = y2pitch(pos.y()) - y2pitch(start.y()); + else + dp = pos.y() - start.y(); + int dx = pos.x() - start.x(); + if (dir == 1) + dp = 0; + else if (dir == 2) + dx = 0; + for (iCItem i = moving.begin(); i != moving.end(); ++i) { + int x = i->second->pos().x(); + int y = i->second->pos().y(); + int nx = x + dx; + int ny; + QPoint mp; + if(rasterize) + { + ny = pitch2y(y2pitch(y) + dp); + mp = raster(QPoint(nx, ny)); + } + else + { + ny = y + dp; + mp = QPoint(nx, ny); + } + if (i->second->mp() != mp) { + i->second->setMp(mp); + itemMoved(i->second, mp); + } + } + redraw(); + } + +//--------------------------------------------------------- +// viewKeyPressEvent +//--------------------------------------------------------- + +void Canvas::viewKeyPressEvent(QKeyEvent* event) + { + keyPress(event); + } + +//--------------------------------------------------------- +// viewMousePressEvent +//--------------------------------------------------------- + +void Canvas::viewMousePressEvent(QMouseEvent* event) + { + keyState = event->state(); + + // special events if right button is clicked while operations + // like moving or drawing lasso is performed. + if (event->stateAfter() & Qt::RightButton) { + switch (drag) { + case DRAG_LASSO: + drag = DRAG_OFF; + redraw(); + return; + case DRAG_MOVE: + drag = DRAG_OFF; + endMoveItems (start, MOVE_MOVE, 0); + return; + default: + break; + } + } + + // ignore event if (another) button is already active: + if (keyState & (Qt::LeftButton|Qt::RightButton|Qt::MidButton)) { + return; + } + bool shift = keyState & Qt::ShiftModifier; + bool alt = keyState & Qt::AltModifier; + bool ctrl = keyState & Qt::ControlModifier; + start = event->pos(); + + //--------------------------------------------------- + // set curItem to item mouse is pointing + // (if any) + //--------------------------------------------------- + + if (virt()) + curItem = items.find(start); + else { + curItem = 0; + iCItem ius; + bool usfound = false; + for (iCItem i = items.begin(); i != items.end(); ++i) { + QRect box = i->second->bbox(); + int x = rmapxDev(box.x()); + int y = rmapyDev(box.y()); + int w = rmapxDev(box.width()); + int h = rmapyDev(box.height()); + QRect r(x, y, w, h); + r.moveBy(i->second->pos().x(), i->second->pos().y()); + if (r.contains(start)) { + if(i->second->isSelected()) + { + curItem = i->second; + break; + } + else + if(!usfound) + { + ius = i; + usfound = true; + } + } + } + if(!curItem && usfound) + curItem = ius->second; + } + + if (curItem && (event->button() == Qt::MidButton)) { + if (!curItem->isSelected()) { + selectItem(curItem, true); + updateSelection(); + redraw(); + } + startDrag(curItem, shift); + } + else if (event->button() == Qt::RightButton) { + if (curItem) { + if (shift) { + drag = DRAG_RESIZE; + setCursor(); + int dx = start.x() - curItem->x(); + curItem->setWidth(dx); + start.setX(curItem->x()); + deselectAll(); + selectItem(curItem, true); + updateSelection(); + redraw(); + } + else { + itemPopupMenu = genItemPopup(curItem); + if (itemPopupMenu) { + int n = itemPopupMenu->exec(QCursor::pos()); + if (n != -1) + itemPopup(curItem, n, start); + delete itemPopupMenu; + } + } + } + else { + canvasPopupMenu = genCanvasPopup(); + if (canvasPopupMenu) { + int n = canvasPopupMenu->exec(QCursor::pos(), 0); + if (n != -1) + canvasPopup(n); + delete canvasPopupMenu; + } + } + } + else if (event->button() == Qt::LeftButton) { + switch (_tool) { + case PointerTool: + if (curItem) { + if (curItem->part() != curPart) { + curPart = curItem->part(); + curPartId = curPart->sn(); + curPartChanged(); + } + itemPressed(curItem); + // Changed by T356. Alt is default reserved for moving the whole window in KDE. Changed to Shift-Alt. + // Hmm, nope, shift-alt is also reserved sometimes. Must find a way to bypass, + // why make user turn off setting? Left alone for now... + if (shift) + drag = DRAG_COPY_START; + else if (alt) { + drag = DRAG_CLONE_START; + } + // + //if (shift) + //{ + // if (alt) + // drag = DRAG_CLONE_START; + // else + // drag = DRAG_COPY_START; + //} + else if (ctrl) { //Select all on the same pitch (e.g. same y-value) + deselectAll(); + //printf("Yes, ctrl and press\n"); + for (iCItem i = items.begin(); i != items.end(); ++i) { + if (i->second->y() == curItem->y() ) + selectItem(i->second, true); + } + updateSelection(); + redraw(); + } + else + drag = DRAG_MOVE_START; + } + else + drag = DRAG_LASSO_START; + setCursor(); + break; + + case RubberTool: + deleteItem(start); + drag = DRAG_DELETE; + setCursor(); + break; + + case PencilTool: + if (curItem) { + drag = DRAG_RESIZE; + setCursor(); + int dx = start.x() - curItem->x(); + curItem->setWidth(dx); + start.setX(curItem->x()); + } + else { + drag = DRAG_NEW; + setCursor(); + curItem = newItem(start, event->state()); + if (curItem) + items.add(curItem); + else { + drag = DRAG_OFF; + setCursor(); + } + } + deselectAll(); + if (curItem) + selectItem(curItem, true); + updateSelection(); + redraw(); + break; + + default: + break; + } + } + mousePress(event); + } + +void Canvas::scrollTimerDone() +{ + //printf("Canvas::scrollTimerDone drag:%d doScroll:%d\n", drag, doScroll); + + if (drag != DRAG_OFF && doScroll) + { + //printf("Canvas::scrollTimerDone drag != DRAG_OFF && doScroll\n"); + + bool doHMove = false; + bool doVMove = false; + int hoff = rmapx(xOffset())+mapx(xorg)-1; + int curxpos; + switch(hscrollDir) + { + case HSCROLL_RIGHT: + hoff += scrollSpeed; + switch(drag) + { + case DRAG_NEW: + case DRAG_RESIZE: + case DRAGX_MOVE: + case DRAGX_COPY: + case DRAGX_CLONE: + case DRAGY_MOVE: + case DRAGY_COPY: + case DRAGY_CLONE: + case DRAG_MOVE: + case DRAG_COPY: + case DRAG_CLONE: + emit horizontalScrollNoLimit(hoff); + canScrollLeft = true; + ev_pos.setX(rmapxDev(rmapx(ev_pos.x()) + scrollSpeed)); + doHMove = true; + break; + default: + if(canScrollRight) + { + curxpos = xpos; + emit horizontalScroll(hoff); + if(xpos <= curxpos) + { + canScrollRight = false; + } + else + { + canScrollLeft = true; + ev_pos.setX(rmapxDev(rmapx(ev_pos.x()) + scrollSpeed)); + doHMove = true; + } + } + else + { + } + break; + } + break; + case HSCROLL_LEFT: + if(canScrollLeft) + { + curxpos = xpos; + hoff -= scrollSpeed; + emit horizontalScroll(hoff); + if(xpos >= curxpos) + { + canScrollLeft = false; + } + else + { + canScrollRight = true; + ev_pos.setX(rmapxDev(rmapx(ev_pos.x()) - scrollSpeed)); + doHMove = true; + } + } + else + { + } + break; + default: + break; + } + int voff = rmapy(yOffset())+mapy(yorg); + int curypos; + switch(vscrollDir) + { + case VSCROLL_DOWN: + if(canScrollDown) + { + curypos = ypos; + voff += scrollSpeed; + emit verticalScroll(voff); + if(ypos <= curypos) + { + canScrollDown = false; + } + else + { + canScrollUp = true; + ev_pos.setY(rmapyDev(rmapy(ev_pos.y()) + scrollSpeed)); + doVMove = true; + } + } + else + { + } + break; + case VSCROLL_UP: + if(canScrollUp) + { + curypos = ypos; + voff -= scrollSpeed; + emit verticalScroll(voff); + if(ypos >= curypos) + { + canScrollUp = false; + } + else + { + canScrollDown = true; + ev_pos.setY(rmapyDev(rmapy(ev_pos.y()) - scrollSpeed)); + doVMove = true; + } + } + else + { + } + break; + default: + break; + } + + //printf("Canvas::scrollTimerDone doHMove:%d doVMove:%d\n", doHMove, doVMove); + + if(!doHMove && !doVMove) + { + delete scrollTimer; + scrollTimer=NULL; + doScroll = false; + return; + } + QPoint dist = ev_pos - start; + switch(drag) + { + case DRAG_MOVE: + case DRAG_COPY: + case DRAG_CLONE: + moveItems(ev_pos, 0, false); + break; + case DRAGX_MOVE: + case DRAGX_COPY: + case DRAGX_CLONE: + moveItems(ev_pos, 1, false); + break; + case DRAGY_MOVE: + case DRAGY_COPY: + case DRAGY_CLONE: + moveItems(ev_pos, 2, false); + break; + case DRAG_LASSO: + lasso = QRect(start.x(), start.y(), dist.x(), dist.y()); + redraw(); + break; + case DRAG_NEW: + case DRAG_RESIZE: + if (dist.x()) { + if (dist.x() < 1) + curItem->setWidth(1); + else + curItem->setWidth(dist.x()); + redraw(); + } + break; + default: + break; + } + //printf("Canvas::scrollTimerDone starting scrollTimer: Currently active?%d\n", scrollTimer->isActive()); + + // p3.3.43 Make sure to yield to other events (for up to 3 seconds), otherwise other events + // take a long time to reach us, causing scrolling to take a painfully long time to stop. + // FIXME: Didn't help at all. + //qApp->processEvents(); + // No, try up to 100 ms for each yield. + //qApp->processEvents(100); + // + //scrollTimer->start( 40, TRUE ); // X ms single-shot timer + // OK, changing the timeout from 40 to 80 helped. + scrollTimer->start( 80, TRUE ); // X ms single-shot timer + } + else + { + //printf("Canvas::scrollTimerDone !(drag != DRAG_OFF && doScroll) deleting scrollTimer\n"); + + delete scrollTimer; + scrollTimer=NULL; + } +} + + +//--------------------------------------------------------- +// viewMouseMoveEvent +//--------------------------------------------------------- + +void Canvas::viewMouseMoveEvent(QMouseEvent* event) + { + + ev_pos = event->pos(); + QPoint dist = ev_pos - start; + int ax = ABS(rmapx(dist.x())); + int ay = ABS(rmapy(dist.y())); + bool moving = (ax >= 2) || (ay > 2); + + // set scrolling variables: doScroll, scrollRight + if (drag != DRAG_OFF) { + + + int ex = rmapx(event->x())+mapx(0); + if(ex < 40 && canScrollLeft) + hscrollDir = HSCROLL_LEFT; + else + if(ex > (width() - 40)) + switch(drag) + { + case DRAG_NEW: + case DRAG_RESIZE: + case DRAGX_MOVE: + case DRAGX_COPY: + case DRAGX_CLONE: + case DRAGY_MOVE: + case DRAGY_COPY: + case DRAGY_CLONE: + case DRAG_MOVE: + case DRAG_COPY: + case DRAG_CLONE: + hscrollDir = HSCROLL_RIGHT; + break; + default: + if(canScrollRight) + hscrollDir = HSCROLL_RIGHT; + else + hscrollDir = HSCROLL_NONE; + break; + } + else + hscrollDir = HSCROLL_NONE; + int ey = rmapy(event->y())+mapy(0); + if(ey < 15 && canScrollUp) + vscrollDir = VSCROLL_UP; + else + if(ey > (height() - 15) && canScrollDown) + vscrollDir = VSCROLL_DOWN; + else + vscrollDir = VSCROLL_NONE; + if(hscrollDir != HSCROLL_NONE || vscrollDir != VSCROLL_NONE) + { + doScroll=true; + if (!scrollTimer) + { + scrollTimer= new QTimer(this); + connect( scrollTimer, SIGNAL(timeout()), SLOT(scrollTimerDone()) ); + scrollTimer->start( 0, TRUE ); // single-shot timer + } + } + else + doScroll=false; + + } + else + { + doScroll=false; + + canScrollLeft = true; + canScrollRight = true; + canScrollUp = true; + canScrollDown = true; + } + + switch (drag) { + case DRAG_LASSO_START: + if (!moving) + break; + drag = DRAG_LASSO; + setCursor(); + // proceed with DRAG_LASSO: + + case DRAG_LASSO: + { + lasso = QRect(start.x(), start.y(), dist.x(), dist.y()); + + // printf("xorg=%d xmag=%d event->x=%d, mapx(xorg)=%d rmapx0=%d xOffset=%d rmapx(xOffset()=%d\n", + // xorg, xmag, event->x(),mapx(xorg), rmapx(0), xOffset(),rmapx(xOffset())); + + } + redraw(); + break; + + case DRAG_MOVE_START: + case DRAG_COPY_START: + case DRAG_CLONE_START: + if (!moving) + break; + if (keyState & Qt::ControlModifier) { + if (ax > ay) { + if (drag == DRAG_MOVE_START) + drag = DRAGX_MOVE; + else if (drag == DRAG_COPY_START) + drag = DRAGX_COPY; + else + drag = DRAGX_CLONE; + } + else { + if (drag == DRAG_MOVE_START) + drag = DRAGY_MOVE; + else if (drag == DRAG_COPY_START) + drag = DRAGY_COPY; + else + drag = DRAGY_CLONE; + } + } + else { + if (drag == DRAG_MOVE_START) + drag = DRAG_MOVE; + else if (drag == DRAG_COPY_START) + drag = DRAG_COPY; + else + drag = DRAG_CLONE; + } + setCursor(); + if (!curItem->isSelected()) { + if (drag == DRAG_MOVE) + deselectAll(); + selectItem(curItem, true); + updateSelection(); + redraw(); + } + DragType dt; + if (drag == DRAG_MOVE) + dt = MOVE_MOVE; + else if (drag == DRAG_COPY) + dt = MOVE_COPY; + else + dt = MOVE_CLONE; + + startMoving(ev_pos, dt); + break; + + case DRAG_MOVE: + case DRAG_COPY: + case DRAG_CLONE: + + if(!scrollTimer) + moveItems(ev_pos, 0); + break; + + case DRAGX_MOVE: + case DRAGX_COPY: + case DRAGX_CLONE: + if(!scrollTimer) + moveItems(ev_pos, 1); + break; + + case DRAGY_MOVE: + case DRAGY_COPY: + case DRAGY_CLONE: + if(!scrollTimer) + moveItems(ev_pos, 2); + break; + + case DRAG_NEW: + case DRAG_RESIZE: + if (dist.x()) { + if (dist.x() < 1) + curItem->setWidth(1); + else + curItem->setWidth(dist.x()); + redraw(); + } + break; + case DRAG_DELETE: + deleteItem(ev_pos); + break; + + case DRAG_OFF: + break; + } + + mouseMove(ev_pos); + } + +//--------------------------------------------------------- +// viewMouseReleaseEvent +//--------------------------------------------------------- + +void Canvas::viewMouseReleaseEvent(QMouseEvent* event) + { +// printf("release %x %x\n", event->state(), event->button()); + + doScroll = false; + canScrollLeft = true; + canScrollRight = true; + canScrollUp = true; + canScrollDown = true; + if (event->state() & (Qt::LeftButton|Qt::RightButton|Qt::MidButton) & ~(event->button())) { + printf("ignore %x %x\n", keyState, event->button()); + return; + } + + QPoint pos = event->pos(); + bool shift = event->state() & Qt::ShiftModifier; + bool redrawFlag = false; + + switch (drag) { + case DRAG_MOVE_START: + case DRAG_COPY_START: + case DRAG_CLONE_START: + if (!shift) + deselectAll(); + selectItem(curItem, !(shift && curItem->isSelected())); + updateSelection(); + redrawFlag = true; + itemReleased(curItem, curItem->pos()); + break; + case DRAG_COPY: + endMoveItems(pos, MOVE_COPY, 0); + break; + case DRAGX_COPY: + endMoveItems(pos, MOVE_COPY, 1); + break; + case DRAGY_COPY: + endMoveItems(pos, MOVE_COPY, 2); + break; + case DRAG_MOVE: + endMoveItems(pos, MOVE_MOVE, 0); + break; + case DRAGX_MOVE: + endMoveItems(pos, MOVE_MOVE, 1); + break; + case DRAGY_MOVE: + endMoveItems(pos, MOVE_MOVE, 2); + break; + case DRAG_CLONE: + endMoveItems(pos, MOVE_CLONE, 0); + break; + case DRAGX_CLONE: + endMoveItems(pos, MOVE_CLONE, 1); + break; + case DRAGY_CLONE: + endMoveItems(pos, MOVE_CLONE, 2); + 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.normalize(); + selectLasso(shift); + updateSelection(); + redrawFlag = true; + break; + + case DRAG_DELETE: + break; + } + //printf("Canvas::viewMouseReleaseEvent setting drag to DRAG_OFF\n"); + + drag = DRAG_OFF; + if (redrawFlag) + redraw(); + setCursor(); + } + +//--------------------------------------------------------- +// selectLasso +//--------------------------------------------------------- + +void Canvas::selectLasso(bool toggle) + { + int n = 0; + if (virt()) { + for (iCItem i = items.begin(); i != items.end(); ++i) { + if (i->second->intersects(lasso)) { + selectItem(i->second, !(toggle && i->second->isSelected())); + ++n; + } + } + } + else { + for (iCItem i = items.begin(); i != items.end(); ++i) { + QRect box = i->second->bbox(); + int x = rmapxDev(box.x()); + int y = rmapyDev(box.y()); + int w = rmapxDev(box.width()); + int h = rmapyDev(box.height()); + QRect r(x, y, w, h); + r.moveBy(i->second->pos().x(), i->second->pos().y()); + if (r.intersects(lasso)) { + selectItem(i->second, !(toggle && i->second->isSelected())); + ++n; + } + } + } + + + + if (n) { + updateSelection(); + redraw(); + } + } + +//--------------------------------------------------------- +// endMoveItems +// dir = 0 move in all directions +// 1 move only horizontal +// 2 move only vertical +//--------------------------------------------------------- + +void Canvas::endMoveItems(const QPoint& pos, DragType dragtype, int dir) + { + startUndo(dragtype); + + int dp = y2pitch(pos.y()) - y2pitch(start.y()); + int dx = pos.x() - start.x(); + + if (dir == 1) + dp = 0; + else if (dir == 2) + dx = 0; + + + + int modified = 0; + + // Removed by T356. + /* + for (iCItem i = moving.begin(); i != moving.end(); ++i) { + int x = i->second->pos().x(); + int y = i->second->pos().y(); + int nx = x + dx; + int ny = pitch2y(y2pitch(y) + dp); + QPoint newpos = raster(QPoint(nx, ny)); + selectItem(i->second, true); + + if (moveItem(i->second, newpos, dragtype, &modified)) + i->second->move(newpos); + if (moving.size() == 1) { + itemReleased(curItem, newpos); + } + if (dragtype == MOVE_COPY || dragtype == MOVE_CLONE) + selectItem(i->second, false); + } + */ + + moveCanvasItems(moving, dp, dx, dragtype, &modified); + + endUndo(dragtype, modified); + moving.clear(); + updateSelection(); + redraw(); + } + +//--------------------------------------------------------- +// getCurrentDrag +// returns 0 if there is no drag operation +//--------------------------------------------------------- + +int Canvas::getCurrentDrag() + { + printf("getCurrentDrag=%d\n", drag); + return drag; + } + +//--------------------------------------------------------- +// deleteItem +//--------------------------------------------------------- + +void Canvas::deleteItem(const QPoint& p) + { + if (virt()) { + for (iCItem i = items.begin(); i != items.end(); ++i) { + if (i->second->contains(p)) { + selectItem(i->second, false); + if (!deleteItem(i->second)) { + if (drag == DRAG_DELETE) + drag = DRAG_OFF; + } + break; + } + } + } + else { + for (iCItem i = items.begin(); i != items.end(); ++i) { + QRect box = i->second->bbox(); + int x = rmapxDev(box.x()); + int y = rmapyDev(box.y()); + int w = rmapxDev(box.width()); + int h = rmapyDev(box.height()); + QRect r(x, y, w, h); + r.moveBy(i->second->pos().x(), i->second->pos().y()); + if (r.contains(p)) { + if (deleteItem(i->second)) { + selectItem(i->second, false); + } + break; + } + } + } + } + +//--------------------------------------------------------- +// setTool +//--------------------------------------------------------- + +void Canvas::setTool(int t) + { + if (_tool == Tool(t)) + return; + _tool = Tool(t); + setCursor(); + } + +//--------------------------------------------------------- +// setCursor +//--------------------------------------------------------- + +void Canvas::setCursor() + { + switch (drag) { + case DRAGX_MOVE: + case DRAGX_COPY: + case DRAGX_CLONE: + QWidget::setCursor(QCursor(Qt::SizeHorCursor)); + break; + + case DRAGY_MOVE: + case DRAGY_COPY: + case DRAGY_CLONE: + QWidget::setCursor(QCursor(Qt::SizeVerCursor)); + break; + + case DRAG_MOVE: + case DRAG_COPY: + case DRAG_CLONE: + QWidget::setCursor(QCursor(Qt::SizeAllCursor)); + break; + + case DRAG_RESIZE: + QWidget::setCursor(QCursor(Qt::SizeHorCursor)); + break; + + case DRAG_DELETE: + case DRAG_COPY_START: + case DRAG_CLONE_START: + case DRAG_MOVE_START: + case DRAG_NEW: + case DRAG_LASSO_START: + case DRAG_LASSO: + case DRAG_OFF: + switch(_tool) { + case PencilTool: + QWidget::setCursor(QCursor(*pencilIcon, 4, 15)); + break; + case RubberTool: + QWidget::setCursor(QCursor(*deleteIcon, 4, 15)); + break; + case GlueTool: + QWidget::setCursor(QCursor(*glueIcon, 4, 15)); + break; + case CutTool: + QWidget::setCursor(QCursor(*cutIcon, 4, 15)); + break; + case MuteTool: + QWidget::setCursor(QCursor(*editmuteIcon, 4, 15)); + break; + default: + QWidget::setCursor(QCursor(Qt::ArrowCursor)); + break; + } + break; + } + } + +//--------------------------------------------------------- +// keyPress +//--------------------------------------------------------- + +void Canvas::keyPress(QKeyEvent* event) + { + event->ignore(); + } + +//--------------------------------------------------------- +// isSingleSelection +//--------------------------------------------------------- + +bool Canvas::isSingleSelection() + { + return selectionSize() == 1; + } + +//--------------------------------------------------------- +// selectionSize +//--------------------------------------------------------- + +int Canvas::selectionSize() + { + int n = 0; + for (iCItem i = items.begin(); i != items.end(); ++i) { + if (i->second->isSelected()) + ++n; + } + return n; + } + +//--------------------------------------------------------- +// genCanvasPopup +//--------------------------------------------------------- + +Q3PopupMenu* Canvas::genCanvasPopup() + { + if (canvasTools == 0) + return 0; + Q3PopupMenu* canvasPopup = new Q3PopupMenu(this); + + for (unsigned i = 0; i < 9; ++i) { + if ((canvasTools & (1 << i))==0) + continue; + canvasPopup->insertItem(QIcon(**toolList[i].icon), tr(toolList[i].tip), 1<setActiveItem(0); + return canvasPopup; + } + +//--------------------------------------------------------- +// canvasPopup +//--------------------------------------------------------- + +void Canvas::canvasPopup(int n) + { + setTool(n); + emit toolChanged(n); + } + +void Canvas::setCurrentPart(Part* part) +{ + curItem = NULL; + deselectAll(); + curPart = part; + curPartId = curPart->sn(); + curPartChanged(); +} diff --git a/muse2/muse/widgets/canvas.h b/muse2/muse/widgets/canvas.h new file mode 100644 index 00000000..f25d1b2f --- /dev/null +++ b/muse2/muse/widgets/canvas.h @@ -0,0 +1,185 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: canvas.h,v 1.3.2.8 2009/02/02 21:38:01 terminator356 Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __CANVAS_H__ +#define __CANVAS_H__ + +#include "citem.h" +#include "view.h" +#include "tools.h" +//Added by qt3to4: +#include +#include +#include +#include + +class Q3PopupMenu; + +//--------------------------------------------------------- +// Canvas +//--------------------------------------------------------- + +class Canvas : public View { + Q_OBJECT + int canvasTools; + QTimer *scrollTimer; + + bool doScroll; + int scrollSpeed; + + QPoint ev_pos; + bool canScrollLeft; + bool canScrollRight; + bool canScrollUp; + bool canScrollDown; + protected: + enum DragMode { + DRAG_OFF, DRAG_NEW, + DRAG_MOVE_START, DRAG_MOVE, + DRAG_COPY_START, DRAG_COPY, + DRAG_CLONE_START, DRAG_CLONE, + DRAGX_MOVE, DRAGY_MOVE, + DRAGX_COPY, DRAGY_COPY, + DRAGX_CLONE, DRAGY_CLONE, + DRAG_DELETE, + DRAG_RESIZE, DRAG_LASSO_START, DRAG_LASSO, + }; + + enum DragType { + MOVE_MOVE, MOVE_COPY, MOVE_CLONE + }; + + enum HScrollDir { + HSCROLL_NONE, HSCROLL_LEFT, HSCROLL_RIGHT + }; + enum VScrollDir { + VSCROLL_NONE, VSCROLL_UP, VSCROLL_DOWN + }; + + CItemList items; + CItemList moving; + CItem* curItem; + Part* curPart; + int curPartId; + + DragMode drag; + QRect lasso; + QPoint start; + Tool _tool; + unsigned pos[3]; + + HScrollDir hscrollDir; + VScrollDir vscrollDir; + int keyState; + Q3PopupMenu* itemPopupMenu; + Q3PopupMenu* canvasPopupMenu; + + void setCursor(); + virtual void viewKeyPressEvent(QKeyEvent* event); + virtual void viewMousePressEvent(QMouseEvent* event); + virtual void viewMouseMoveEvent(QMouseEvent*); + virtual void viewMouseReleaseEvent(QMouseEvent*); + virtual void draw(QPainter&, const QRect&); + virtual void wheelEvent(QWheelEvent* e); + + virtual void mousePress(QMouseEvent*) {} + virtual void keyPress(QKeyEvent*); + virtual void mouseMove(const QPoint&) = 0; + virtual void mouseRelease(const QPoint&) {} + virtual void drawCanvas(QPainter&, const QRect&) = 0; + virtual void drawItem(QPainter&, const CItem*, const QRect&) = 0; + virtual void drawMoving(QPainter&, const CItem*, const QRect&) = 0; + virtual void updateSelection() = 0; + virtual QPoint raster(const QPoint&) const = 0; + virtual int y2pitch(int) const = 0; //CDW + virtual int pitch2y(int) const = 0; //CDW + + virtual void moveCanvasItems(CItemList&, int, int, DragType, int*) = 0; + // Changed by T356. + //virtual bool moveItem(CItem*, const QPoint&, DragType, int*) = 0; + virtual bool moveItem(CItem*, const QPoint&, DragType) = 0; + virtual CItem* newItem(const QPoint&, int state) = 0; + virtual void resizeItem(CItem*, bool noSnap=false) = 0; + virtual void newItem(CItem*, bool noSnap=false) = 0; + virtual bool deleteItem(CItem*) = 0; + virtual void startUndo(DragType) = 0; + + virtual void endUndo(DragType, int flags) = 0; + int getCurrentDrag(); + + /*! + \brief Virtual member + + Implementing class is responsible for creating a popup to be shown when the user rightclicks an item on the Canvas + \param item The canvas item that is rightclicked + \return A QPopupMenu* + */ + virtual Q3PopupMenu* genItemPopup(CItem* /*item*/) { return 0; } + + /*! + \brief Pure virtual member + + Implementing class is responsible for creating a popup to be shown when the user rightclicks an empty region of the canvas + \return A QPopupMenu* + */ + Q3PopupMenu* genCanvasPopup(); + + /*! + \brief Virtual member + + This is the function called when the user has selected an option in the popupmenu generated by genItemPopup() + \param item the canvas item the whole thing is about + \param n Command type + \param pt I think this is the position of the pointer when right mouse button was pressed + */ + virtual void itemPopup(CItem* /*item */, int /*n*/, const QPoint& /*pt*/) {} + void canvasPopup(int); + + virtual void startDrag(CItem*, bool) {} + + // selection + virtual void deselectAll(); + virtual void selectItem(CItem* e, bool); + + virtual void deleteItem(const QPoint&); + + // moving + void startMoving(const QPoint&, DragType); + + void moveItems(const QPoint&, int dir, bool rasterize = true); + void endMoveItems(const QPoint&, DragType, int dir); + + virtual void selectLasso(bool toggle); + + virtual void itemPressed(const CItem*) {} + virtual void itemReleased(const CItem*, const QPoint&) {} + virtual void itemMoved(const CItem*, const QPoint&) {} + virtual void curPartChanged() {} + + public slots: + void setTool(int t); + void setPos(int, unsigned, bool adjustScrollbar); + void scrollTimerDone(void); + void redirectedWheelEvent(QWheelEvent*); + + signals: + void followEvent(int); + void toolChanged(int); + void verticalScroll(unsigned); + void horizontalScroll(unsigned); + void horizontalScrollNoLimit(unsigned); + public: + Canvas(QWidget* parent, int sx, int sy, const char* name = 0); + bool isSingleSelection(); + int selectionSize(); + Tool tool() const { return _tool; } + Part* part() const { return curPart; } + void setCurrentPart(Part*); + void setCanvasTools(int n) { canvasTools = n; } + }; +#endif + diff --git a/muse2/muse/widgets/checkbox.cpp b/muse2/muse/widgets/checkbox.cpp new file mode 100644 index 00000000..3cded268 --- /dev/null +++ b/muse2/muse/widgets/checkbox.cpp @@ -0,0 +1,58 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: checkbox.cpp,v 1.2.2.2 2006/10/29 07:54:52 terminator356 Exp $ +// (C) Copyright 2004 Werner Schweer (ws@seh.de) +//========================================================= + +#include "checkbox.h" +//Added by qt3to4: +#include + +//--------------------------------------------------------- +// CheckBox +//--------------------------------------------------------- + +CheckBox::CheckBox(QWidget* parent, int i, const char* name) + : QCheckBox(parent, name) + { + _id = i; + connect(this, SIGNAL(toggled(bool)), SLOT(hasToggled(bool))); + } + +void CheckBox::hasToggled(bool val) + { + emit toggleChanged(val, _id); + } + +//------------------------------------------------------------ +// mousePressEvent +//------------------------------------------------------------ + +void CheckBox::mousePressEvent(QMouseEvent *e) +{ + if(e->button() == Qt::RightButton) + emit checkboxRightClicked(e->globalPos(), _id); + else + { + if(isChecked()) + setChecked(false); + else + setChecked(true); + emit checkboxPressed(_id); + } +} + +//------------------------------------------------------------ +// mouseReleaseEvent +//------------------------------------------------------------ + +void CheckBox::mouseReleaseEvent(QMouseEvent *e) +{ + if(e->button() == Qt::RightButton) + return; + + emit checkboxReleased(_id); +} + + diff --git a/muse2/muse/widgets/checkbox.h b/muse2/muse/widgets/checkbox.h new file mode 100644 index 00000000..26209987 --- /dev/null +++ b/muse2/muse/widgets/checkbox.h @@ -0,0 +1,45 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: checkbox.h,v 1.2.2.2 2006/10/29 07:54:52 terminator356 Exp $ +// (C) Copyright 2004 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __CHECKBOX_H__ +#define __CHECKBOX_H__ + +#include +//Added by qt3to4: +#include + +//--------------------------------------------------------- +// CheckBox +//--------------------------------------------------------- + +class CheckBox : public QCheckBox { + Q_OBJECT + Q_PROPERTY( int id READ id WRITE setId ) + + int _id; + + protected: + void mousePressEvent(QMouseEvent *e); + void mouseReleaseEvent(QMouseEvent *e); + + private slots: + void hasToggled(bool val); + + signals: + void toggleChanged(bool, int); + void checkboxPressed(int); + void checkboxReleased(int); + void checkboxRightClicked(const QPoint &, int); + + public: + CheckBox(QWidget* parent, int i, const char* name = 0); + int id() const { return _id; } + void setId(int i) { _id = i; } + }; + +#endif + diff --git a/muse2/muse/widgets/citem.cpp b/muse2/muse/widgets/citem.cpp new file mode 100644 index 00000000..2974196d --- /dev/null +++ b/muse2/muse/widgets/citem.cpp @@ -0,0 +1,93 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: citem.cpp,v 1.2.2.3 2008/01/26 07:23:21 terminator356 Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#include "part.h" +#include "citem.h" +#include + +//--------------------------------------------------------- +// CItem +//--------------------------------------------------------- + +CItem::CItem() + { + _isMoving = false; + } + +CItem::CItem(const QPoint&p, const QRect& r) + { + _pos = p; + _bbox = r; + _isMoving = false; + } + +// Changed by Tim. p3.3.20 +//CItem::CItem(Event e, Part* p) +CItem::CItem(const Event& e, Part* p) + { + _event = e; + _part = p; + _isMoving = false; + } + +//--------------------------------------------------------- +// 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 + { + rciCItem ius; + bool usfound = false; + for (rciCItem i = rbegin(); i != rend(); ++i) { + if (i->second->contains(pos)) + { + if(i->second->isSelected()) + return i->second; + + else + { + if(!usfound) + { + ius = i; + usfound = true; + } + } + } + } + if(usfound) + return ius->second; + else + return 0; + } + +//--------------------------------------------------------- +// CItemList +//--------------------------------------------------------- + +void CItemList::add(CItem* item) + { + std::multimap >::insert(std::pair (item->bbox().x(), item)); + } + diff --git a/muse2/muse/widgets/citem.h b/muse2/muse/widgets/citem.h new file mode 100644 index 00000000..c58b6bb1 --- /dev/null +++ b/muse2/muse/widgets/citem.h @@ -0,0 +1,90 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: citem.h,v 1.2.2.1 2006/10/04 18:45:35 spamatica Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __CITEM_H__ +#define __CITEM_H__ + +#include +#include +#include + +#include "event.h" + +class Event; +class Part; + +//--------------------------------------------------------- +// CItem +// virtuelle Basisklasse fr alle Canvas Item's +//--------------------------------------------------------- + +class CItem { + private: + Event _event; + Part* _part; + + protected: + bool _isMoving; + QPoint moving; + QRect _bbox; + QPoint _pos; + + public: + CItem(const QPoint& p, const QRect& r); + CItem(); + // Changed by Tim. p3.3.20 + //CItem(Event e, Part* p); + CItem(const Event& e, Part* p); + + bool isMoving() const { return _isMoving; } + void setMoving(bool f) { _isMoving = f; } + bool isSelected() const; + void setSelected(bool f); + + int width() const { return _bbox.width(); } + void setWidth(int l) { _bbox.setWidth(l); } + void setHeight(int l) { _bbox.setHeight(l); } + void setMp(const QPoint&p) { moving = p; } + const QPoint mp() const { return moving; } + int x() const { return _pos.x(); } + int y() const { return _pos.y(); } + void setY(int y) { _bbox.setY(y); } + QPoint pos() const { return _pos; } + void setPos(const QPoint& p) { _pos = p; } + int height() const { return _bbox.height(); } + const QRect& bbox() const { return _bbox; } + void setBBox(const QRect& r) { _bbox = r; } + void move(const QPoint& tl) { + _bbox.moveTopLeft(tl); + _pos = tl; + } + bool contains(const QPoint& p) const { return _bbox.contains(p); } + bool intersects(const QRect& r) const { return r.intersects(_bbox); } + + Event event() const { return _event; } + void setEvent(Event& e) { _event = e; } + Part* part() const { return _part; } + void setPart(Part* p) { _part = p; } + }; + +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/muse2/muse/widgets/cliplisteditorbase.ui b/muse2/muse/widgets/cliplisteditorbase.ui new file mode 100644 index 00000000..272c578c --- /dev/null +++ b/muse2/muse/widgets/cliplisteditorbase.ui @@ -0,0 +1,168 @@ + +ClipListEditorBase + + + ClipListEditorBase + + + + 0 + 0 + 600 + 480 + + + + MusE: ClipList + + + + unnamed + + + 11 + + + 6 + + + + + Name + + + true + + + true + + + + + Refs + + + true + + + true + + + + + Start + + + true + + + true + + + + + Len + + + true + + + true + + + + + Data + + + true + + + true + + + + view + + + true + + + true + + + + + GroupBox1 + + + Clip Properties + + + + unnamed + + + 11 + + + 6 + + + + TextLabel1 + + + Pos: + + + + + start + + + true + + + + + TextLabel2 + + + Len: + + + + + len + + + true + + + + + Spacer1 + + + Horizontal + + + Expanding + + + + 20 + 20 + + + + + + + + + posedit.h + + + diff --git a/muse2/muse/widgets/comboQuant.cpp b/muse2/muse/widgets/comboQuant.cpp new file mode 100644 index 00000000..4a81bc8e --- /dev/null +++ b/muse2/muse/widgets/comboQuant.cpp @@ -0,0 +1,61 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: comboQuant.cpp,v 1.1.1.1 2003/10/27 18:54:52 wschweer Exp $ +// (C) Copyright 2001 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#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, const char* name) + : QComboBox(parent, name) + { + Q3ListBox* qlist = new Q3ListBox(this); + qlist->setMinimumWidth(95); + //setListBox(qlist); ddskrjo + qlist->setColumnMode(3); + for (int i = 0; i < 24; i++) + qlist->insertItem(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]) { + setCurrentItem(i); + return; + } + } + } + diff --git a/muse2/muse/widgets/comboQuant.h b/muse2/muse/widgets/comboQuant.h new file mode 100644 index 00000000..0031fa33 --- /dev/null +++ b/muse2/muse/widgets/comboQuant.h @@ -0,0 +1,33 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: comboQuant.h,v 1.1.1.1 2003/10/27 18:54:30 wschweer Exp $ +// (C) Copyright 2001 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __COMBOQUANT_H__ +#define __COMBOQUANT_H__ + +#include +#include + +//--------------------------------------------------------- +// ComboQuant +//--------------------------------------------------------- + +class ComboQuant : public QComboBox { + Q_OBJECT + + private slots: + void activated(int); + + signals: + void valueChanged(int); + + public: + ComboQuant(QWidget* parent = 0, const char* name = 0); + void setValue(int val); + }; + +#endif + diff --git a/muse2/muse/widgets/combobox.cpp b/muse2/muse/widgets/combobox.cpp new file mode 100644 index 00000000..35959636 --- /dev/null +++ b/muse2/muse/widgets/combobox.cpp @@ -0,0 +1,74 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: combobox.cpp,v 1.4 2004/05/06 15:08:07 wschweer Exp $ +// (C) Copyright 2004 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include +//Added by qt3to4: +#include +#include +#include +#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/muse2/muse/widgets/combobox.h b/muse2/muse/widgets/combobox.h new file mode 100644 index 00000000..99bb382c --- /dev/null +++ b/muse2/muse/widgets/combobox.h @@ -0,0 +1,49 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: combobox.h,v 1.3 2004/02/29 12:12:36 wschweer Exp $ +// (C) Copyright 2004 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __COMBOBOX_H__ +#define __COMBOBOX_H__ + +#include +//Added by qt3to4: +#include +#include + +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/muse2/muse/widgets/comment.cpp b/muse2/muse/widgets/comment.cpp new file mode 100644 index 00000000..ef727859 --- /dev/null +++ b/muse2/muse/widgets/comment.cpp @@ -0,0 +1,86 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: comment.cpp,v 1.2 2004/02/08 18:30:00 wschweer Exp $ +// (C) Copyright 2001 Werner Schweer (ws@seh.de) +//========================================================= + +#include "comment.h" +#include "song.h" +#include "track.h" +#include +#include + +//--------------------------------------------------------- +// Comment +//--------------------------------------------------------- + +Comment::Comment(QWidget* parent, const char* name) + : CommentBase(parent, name) + { + } + +//--------------------------------------------------------- +// textChanged +//--------------------------------------------------------- + +void Comment::textChanged() + { + setText(textentry->text()); + } + +//--------------------------------------------------------- +// TrackComment +//--------------------------------------------------------- + +TrackComment::TrackComment(Track* t, QWidget* parent, const char* name) + : Comment(parent, name) + { + setCaption(tr("MusE: Track Comment")); + track = t; + connect(song, SIGNAL(songChanged(int)), SLOT(songChanged(int))); + textentry->setText(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; + + // check if track still exists: + TrackList* tl = song->tracks(); + iTrack it; + for (it = tl->begin(); it != tl->end(); ++it) { + if (track == *it) + break; + } + if (it == tl->end()) { + close(true); + return; + } + label2->setText(track->name()); + if (track->comment() != textentry->text()) { + disconnect(textentry, SIGNAL(textChanged()), this, SLOT(textChanged())); + textentry->setText(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/muse2/muse/widgets/comment.h b/muse2/muse/widgets/comment.h new file mode 100644 index 00000000..f3fbd547 --- /dev/null +++ b/muse2/muse/widgets/comment.h @@ -0,0 +1,53 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: comment.h,v 1.2 2004/02/08 18:30:00 wschweer Exp $ +// (C) Copyright 2001 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __COMMENT_H__ +#define __COMMENT_H__ + +#include +#include "commentbase.h" + +class Xml; +class Track; + +//--------------------------------------------------------- +// Comment +//--------------------------------------------------------- + +class Comment : public CommentBase { + Q_OBJECT + + private: + virtual void setText(const QString& s) = 0; + + private slots: + void textChanged(); + + public: + Comment(QWidget* parent, const char* name = 0); + }; + +//--------------------------------------------------------- +// 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*, const char* name = 0); + }; + +#endif + diff --git a/muse2/muse/widgets/commentbase.ui b/muse2/muse/widgets/commentbase.ui new file mode 100644 index 00000000..a4bed010 --- /dev/null +++ b/muse2/muse/widgets/commentbase.ui @@ -0,0 +1,116 @@ + +CommentBase + + QWidget + + name + CommentBase + + + geometry + + 0 + 0 + 387 + 205 + + + + caption + Form1 + + + + margin + 11 + + + spacing + 6 + + + QLayoutWidget + + name + Layout1 + + + + margin + 0 + + + spacing + 6 + + + QLabel + + name + label1 + + + sizePolicy + + 4 + 1 + + + + text + Track Comment + + + + QLabel + + name + label2 + + + font + + 12 + 1 + + + + frameShape + Box + + + frameShadow + Sunken + + + midLineWidth + 1 + + + text + Track 1 + + + + + + QMultiLineEdit + + name + textentry + + + font + + 12 + 1 + + + + frameShape + WinPanel + + + + + diff --git a/muse2/muse/widgets/configmidifilebase.ui b/muse2/muse/widgets/configmidifilebase.ui new file mode 100644 index 00000000..4ba53d7e --- /dev/null +++ b/muse2/muse/widgets/configmidifilebase.ui @@ -0,0 +1,259 @@ + +ConfigMidiFileBase + + + ConfigMidiFileBase + + + + 0 + 0 + 548 + 353 + + + + MusE: Config Midi File Import/Export + + + true + + + + unnamed + + + + midiImportGroupBox + + + + 5 + 1 + 0 + 0 + + + + Import: + + + + unnamed + + + + splitPartsCheckBox + + + Split tracks into &parts + + + Alt+P + + + Split tracks into parts, or one single part + + + + + + + midiExportGroupBox + + + + 5 + 7 + 0 + 0 + + + + Export: + + + + unnamed + + + + copyrightEdit + + + + + + 96 + + + + + 192 + + + + + 384 + + + + divisionCombo + + + + + extendedFormat + + + true + + + Enable extended smf format (currently not implemented) + + + + + twoByteTimeSigs + + + Use &2-byte time signatures instead of standard 4 + + + Alt+2 + + + + + textLabel2 + + + Copyright: + + + + + textLabel3 + + + Format: + + + + + textLabel1 + + + Division: + + + + + optNoteOffs + + + Save space by replacing note-offs with &zero velocity note-ons + + + Alt+Z + + + + + + 0 (single track) + + + + + 1 (multiple tracks) + + + + formatCombo + + + + + + + Layout1 + + + + unnamed + + + 0 + + + 6 + + + + Horizontal Spacing2 + + + Horizontal + + + Expanding + + + + 20 + 20 + + + + + + buttonOk + + + &OK + + + + + + true + + + true + + + + + buttonCancel + + + &Cancel + + + + + + true + + + + + + + + + buttonOk + clicked() + ConfigMidiFileBase + accept() + + + buttonCancel + clicked() + ConfigMidiFileBase + reject() + + + + diff --git a/muse2/muse/widgets/ctrlcombo.cpp b/muse2/muse/widgets/ctrlcombo.cpp new file mode 100644 index 00000000..26512639 --- /dev/null +++ b/muse2/muse/widgets/ctrlcombo.cpp @@ -0,0 +1,56 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: ctrlcombo.cpp,v 1.1.1.1 2003/10/27 18:55:02 wschweer Exp $ +// +// (C) Copyright 1999/2000 Werner Schweer (ws@seh.de) +//========================================================= + +#include "ctrlcombo.h" + +//--------------------------------------------------------- +// CtrlComboBox +//--------------------------------------------------------- + +CtrlComboBox::CtrlComboBox(QWidget* parent, const char* name) + : QComboBox(parent, name) + { + 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) + insertItem(QString(ctxt[i])); + } + diff --git a/muse2/muse/widgets/ctrlcombo.cw b/muse2/muse/widgets/ctrlcombo.cw new file mode 100644 index 00000000..f4f5b2ac --- /dev/null +++ b/muse2/muse/widgets/ctrlcombo.cw @@ -0,0 +1,22 @@ + + + + CtrlComboBox +
ctrlcombo.h
+ + 50 + 20 + + 0 + + 5 + 5 + + + 789c6dd2c10ac2300c00d07bbf2234b7229d1be245fc04c5a3201e4615f430059d0711ff5ddb2e6bb236ec90eed134cb5a19d8ef36602af5ecdbfeeac05dda0798d3abebde87e3faa374d3807fa0d633a52d38d8de6f679fe33fc776e196f53cd010188256a3600a292882096246517815ca99884606e18044a3a40d91824820924265a7923a2e8bcd05f33db1173e002913175f2a6be6d3294871a2d95fa00e8a94ee017b69d339d90df1e77c57ea072ede6758 + + activated(int index) + activated(const QString&) +
+
+
diff --git a/muse2/muse/widgets/ctrlcombo.h b/muse2/muse/widgets/ctrlcombo.h new file mode 100644 index 00000000..8aa134e3 --- /dev/null +++ b/muse2/muse/widgets/ctrlcombo.h @@ -0,0 +1,22 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: ctrlcombo.h,v 1.1.1.1 2003/10/27 18:54:30 wschweer Exp $ +// +// (C) Copyright 1999/2000 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __CTRLGRP_H__ +#define __CTRLGRP_H__ + +#include + +class CtrlComboBox : public QComboBox { + Q_OBJECT + public: + CtrlComboBox(QWidget* parent, const char* name = 0); + }; + + +#endif + diff --git a/muse2/muse/widgets/dentry.cpp b/muse2/muse/widgets/dentry.cpp new file mode 100644 index 00000000..61c0d096 --- /dev/null +++ b/muse2/muse/widgets/dentry.cpp @@ -0,0 +1,243 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: dentry.cpp,v 1.1.1.1.2.3 2008/08/18 00:15:26 terminator356 Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#include "dentry.h" +#include +#include +#include +//Added by qt3to4: +#include +#include +#include +#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, const char* name) : QLineEdit(parent, name) + { + _slider = 0; + _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; + } + +//--------------------------------------------------------- +// contextMenuEvent +//--------------------------------------------------------- + +void Dentry::contextMenuEvent(QContextMenuEvent * e) +{ + e->accept(); +} + +//--------------------------------------------------------- +// setFrame +//--------------------------------------------------------- + +void Dentry::setFrame(bool flag) + { + drawFrame = flag; + QLineEdit::setFrame(drawFrame); + update(); + } + +//--------------------------------------------------------- +// endEdit +//--------------------------------------------------------- + +void Dentry::endEdit() + { + if (edited()) { + 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) + { + // Avoid unwanted wheel events from outside the control. + // Tested: No go, can't seem to determine where event came from. + /* + const QPoint gp = mapToGlobal(event->pos()); + const QRect gr = QRect(mapToGlobal(rect().topLeft()), mapToGlobal(rect().bottomRight())); + if(!gr.contains(gp)) + */ + //if(sender() != this) + //{ + // event->ignore(); + // return; + //} + + event->accept(); + + int delta = event->delta(); + + if (delta < 0) + { + if(_slider) + _slider->stepPages(-1); + else + decValue(-1.0); + } + else if (delta > 0) + { + if(_slider) + _slider->stepPages(1); + else + 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: + if(_slider) + _slider->stepPages(-1); + else + decValue(evx); + break; + case Qt::RightButton: + if(_slider) + _slider->stepPages(1); + else + 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(); + emit doubleClicked(_id); + } + +//--------------------------------------------------------- +// 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/muse2/muse/widgets/dentry.h b/muse2/muse/widgets/dentry.h new file mode 100644 index 00000000..58f1ef6f --- /dev/null +++ b/muse2/muse/widgets/dentry.h @@ -0,0 +1,79 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: dentry.h,v 1.1.1.1.2.3 2008/08/18 00:15:26 terminator356 Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __DENTRY_H__ +#define __DENTRY_H__ + +#include +//Added by qt3to4: +#include +#include +#include + +#include "sliderbase.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 ) + + SliderBase* _slider; + 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*); + void contextMenuEvent(QContextMenuEvent*); + + 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); + void doubleClicked(int); + + public slots: + virtual void setValue(double); + + public: + Dentry(QWidget*, const char* name=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; } + SliderBase* slider() const { return _slider; } + void setSlider(SliderBase* s) { _slider = s; } + }; +#endif diff --git a/muse2/muse/widgets/didyouknow.ui b/muse2/muse/widgets/didyouknow.ui new file mode 100644 index 00000000..005fa7b6 --- /dev/null +++ b/muse2/muse/widgets/didyouknow.ui @@ -0,0 +1,102 @@ + +DidYouKnow + + + DidYouKnow + + + + 0 + 0 + 494 + 249 + + + + Did you know? + + + + unnamed + + + + layout6 + + + + unnamed + + + + tipText + + + true + + + + + layout5 + + + + unnamed + + + + dontShowCheckBox + + + Don't show on startup + + + + + spacer7 + + + Horizontal + + + Expanding + + + + 121 + 31 + + + + + + nextButton + + + Next tip + + + + + closeButton + + + Close + + + + + + + + + + + closeButton + clicked() + DidYouKnow + accept() + + + + diff --git a/muse2/muse/widgets/dimap.cpp b/muse2/muse/widgets/dimap.cpp new file mode 100644 index 00000000..1f87358c --- /dev/null +++ b/muse2/muse/widgets/dimap.cpp @@ -0,0 +1,308 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: dimap.cpp,v 1.1.1.1 2003/10/27 18:55:11 wschweer Exp $ + +// Copyright (C) 1997 Josef Wilgen +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License, version 2, +// as published by the Free Software Foundation. +// +// (C) Copyright 2000 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include "dimap.h" +#include "mmath.h" + +const double DiMap::LogMin = 1.0e-150; +const double DiMap::LogMax = 1.0e150; + +// DiMap - Map a double interval into an integer interval +// +// The DiMap class maps an interval of type double into an interval of +// type integer. It consists +// of two intervals D = [d1, d2] (double) and I = [i1, i2] (int), which are +// specified with the @DiMap::setDblRange@ and @DiMap::setIntRange@ +// members. The point d1 is mapped to the point i1, and d2 is mapped to i2. +// Any point inside or outside D can be mapped to a point inside or outside +// I using @DiMap::transform@ or @DiMap::limTransform@ or vice versa +// using @QwtPlot::invTransform@. D can be scaled linearly or +// logarithmically, as specified with @DiMap::setDblRange@. + +//------------------------------------------------------------ +//.F DiMap::DiMap (1) +// Construct a DiMap instance. +// +//.u Syntax +//.f DiMap::DiMap() +// +//.u Description +// The double and integer intervals are both set to [0,1]. +//------------------------------------------------------------ + +DiMap::DiMap() + { + d_x1 = 0.0; + d_x2 = 1.0; + d_y1 = 0; + d_y2 = 1; + d_cnv = 1.0; + } + +//------------------------------------------------------------ +//.F DiMap::DiMap (2) +// Construct a DiMap instance with initial integer +// and double intervals +// +//.u Syntax +//.f DiMap::DiMap(int i1, int i2, double d1, double d2, bool logarithmic) +// +//.u Parameters +//.p int i1 -- first border of integer interval +// int i2 -- second border of integer interval +// double d1 -- first border of double interval +// double d2 -- second border of double interval +// bool logarithmic -- logarithmic mapping, TRUE or FALSE. Defaults +// to FALSE. +//------------------------------------------------------------ + +DiMap::DiMap(int i1, int i2, double d1, double d2, bool logarithmic) + { + d_log = logarithmic; + setIntRange(i1,i2); + setDblRange(d1, d2); + } + +//------------------------------------------------------------ +//.F DiMap::~DiMap +// Destroy a DiMap instance. +// +//.u Syntax +//.f DiMap::~DiMap() +//------------------------------------------------------------ + +DiMap::~DiMap() + { + } + +//------------------------------------------------------------ +//.F DiMap::contains (1) +// Returns TRUE if a value x lies inside or at the border of the +// map's double range. +// +//.u Syntax +//.f bool DiMap::contains(double x) +// +//.u Parameters +//.p double x -- value +//------------------------------------------------------------ + +bool DiMap::contains(double x) const + { + return ( (x >= qwtMin(d_x1, d_x1)) && (x <= qwtMax(d_x1, d_x2))); + } + +//------------------------------------------------------------ +//.F DiMap::contains (2) +// Returns TRUE if a value x lies inside or at the border of the +// map's integer range +// +//.u Syntax +//.f bool DiMap::contains(int x) +// +//.u Parameters +//.p int x -- value +//------------------------------------------------------------ + +bool DiMap::contains(int x) const + { + return ( (x >= qwtMin(d_y1, d_y1)) && (x <= qwtMax(d_y1, d_y2))); + } + +//------------------------------------------------------------ +//.F DiMap::setDblRange +// Specify the borders of the double interval +// +//.u Syntax +//.f void DiMap::setDblRange(double d1, double d2, bool lg = FALSE) +// +//.u Parameters +//.p double d1 -- first border +// double d2 -- second border +// bool lg -- logarithmic (TRUE) or linear (FALSE) +// scaling. Defaults to FALSE. +//------------------------------------------------------------ + +void DiMap::setDblRange(double d1, double d2, bool lg) + { + if (lg) { + d_log = true; + if (d1 < LogMin) + d1 = LogMin; + else if (d1 > LogMax) + d1 = LogMax; + + if (d2 < LogMin) + d2 = LogMin; + else if (d2 > LogMax) + d2 = LogMax; + + d_x1 = log(d1); + d_x2 = log(d2); + } + else { + d_log = FALSE; + d_x1 = d1; + d_x2 = d2; + } + newFactor(); + } + +//------------------------------------------------------------ +//.F DiMap::setIntRange +// Specify the borders of the integer interval +// +//.u Syntax +//.f void DiMap::setIntRange(int i1, int i2) +// +//.u Parameters +//.p int i1 -- first border +// int i2 -- second border +//------------------------------------------------------------ + +void DiMap::setIntRange(int i1, int i2) + { + d_y1 = i1; + d_y2 = i2; + newFactor(); + } + +//------------------------------------------------------------ +//.F DiMap::transform +// Transform a point in double interval into an point in the +// integer interval +// +//.u Syntax +//.f int DiMap::transform(double x) +// +//.u Parameters +//.p double x +// +//.u Return Value +//.t +// linear mapping: -- rint(i1 + (i2 - i1) / (d2 - d1) * (x - d1)) +// logarithmic mapping: -- rint(i1 + (i2 - i1) / log(d2 / d1) * log(x / d1)) +// +//.u Note +// The specified point is allowed to lie outside the intervals. If you +// want to limit the returned value, use @DiMap::limTransform@. +//------------------------------------------------------------ + +int DiMap::transform(double x) const + { + if (d_log) + return (d_y1 + int(rint( (log(x) - d_x1) * d_cnv ))); + else + return (d_y1 + int(rint( (x - d_x1) * d_cnv ))); + } + +//------------------------------------------------------------ +//.F DiMap::invTransform +// Transform an integer value into a double value +// +//.u Syntax +//.f double DiMap::invTransform(int y) +// +//.u Parameters +//.p int y -- integer value to be transformed +// +//.u Return Value +//.t +// linear mapping: -- d1 + (d2 - d1) / (i2 - i1) * (y - i1) +// logarithmic mapping: -- d1 + (d2 - d1) / log(i2 / i1) * log(y / i1) +//------------------------------------------------------------ + +double DiMap::invTransform(int y) const + { + if (d_cnv == 0.0) + return 0.0; + else { + if (d_log) + return exp(d_x1 + double(y - d_y1) / d_cnv ); + else + return ( d_x1 + double(y - d_y1) / d_cnv ); + } + } + +//------------------------------------------------------------ +//.F DiMap::limTransform +// Transform and limit +// +//.u Syntax +//.f int DiMap::limTransform(double x) +// +//.u Parameters +//.p double x +// +//.u Return Value +// transformed value +// +//.u Description +// The function is similar to @DiMap::transform@, but limits the input value +// to the nearest border of the map's double interval if it lies outside +// that interval. +//------------------------------------------------------------ + +int DiMap::limTransform(double x) const + { + if ( x > qwtMax(d_x1, d_x2) ) + x = qwtMax(d_x1, d_x2); + else if ( x < qwtMin(d_x1, d_x2)) + x = qwtMin(d_x1, d_x2); + return transform(x); + } + +//------------------------------------------------------------ +//.F DiMap::xTransform +// Exact transformation +// +//.u Syntax +//.f double DiMap::dTransform(double x) +// +//.u Parameters +//.p double x -- value to be transformed +// +//.u Return Value +//.t +// linear mapping: -- i1 + (i2 - i1) / (d2 - d1) * (x - d1) +// logarithmic mapping: -- i1 + (i2 - i1) / log(d2 / d1) * log(x / d1) +// +//.u Description +// This function is similar to @DiMap::transform@, but +// makes the integer interval appear to be double. +//------------------------------------------------------------ + +double DiMap::xTransform(double x) const + { + double rv; + + if (d_log) + rv = double(d_y1) + (log(x) - d_x1) * d_cnv; + else + rv = double(d_y1) + (x - d_x1) * d_cnv; + return rv; + } + +//------------------------------------------------------------ +//.F DiMap::newFactor +// Re-calculate the conversion factor. +//------------------------------------------------------------ + +void DiMap::newFactor() + { + if (d_x2 != d_x1) + d_cnv = double(d_y2 - d_y1) / (d_x2 - d_x1); + else + d_cnv = 0.0; + } diff --git a/muse2/muse/widgets/dimap.h b/muse2/muse/widgets/dimap.h new file mode 100644 index 00000000..5e9ac3ee --- /dev/null +++ b/muse2/muse/widgets/dimap.h @@ -0,0 +1,55 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: dimap.h,v 1.1.1.1 2003/10/27 18:54:28 wschweer Exp $ +// +// Copyright (C) 1997 Josef Wilgen +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License, version 2, +// as published by the Free Software Foundation. +// +// (C) Copyright 2000 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __DIMAP_H__ +#define __DIMAP_H__ + +#include + +class DiMap + { + double d_x1, d_x2; // double interval boundaries + int d_y1,d_y2; // integer interval boundaries + double d_cnv; // conversion factor + bool d_log; // logarithmic scale? + + void newFactor(); + + public: + static const double LogMin; + static const double LogMax; + + DiMap(); + DiMap(int, int, double, double, bool lg = FALSE); + ~DiMap(); + + + bool contains(double x) const; + bool contains(int x) const; + + void setIntRange(int i1, int i2); + void setDblRange(double d1, double d2, bool lg = FALSE); + + int transform(double x) const; + double invTransform(int i) const; + int limTransform(double x) const; + double xTransform(double x) const; + + double d1() const { return d_x1;} + double d2() const { return d_x2;} + int i1() const { return d_y1;} + int i2() const { return d_y2;} + bool logarithmic() const { return d_log;} + }; + +#endif diff --git a/muse2/muse/widgets/doublelabel.cpp b/muse2/muse/widgets/doublelabel.cpp new file mode 100644 index 00000000..c20de1e2 --- /dev/null +++ b/muse2/muse/widgets/doublelabel.cpp @@ -0,0 +1,189 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: doublelabel.cpp,v 1.1.1.1.2.2 2008/08/18 00:15:26 terminator356 Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#include + +#include "doublelabel.h" +#include +#include +#include +#include + +#include "utils.h" + +//--------------------------------------------------------- +// DoubleLabel +//--------------------------------------------------------- + +DoubleLabel::DoubleLabel(QWidget* parent, const char* name) + : Dentry(parent, name), _specialText("---") + { + min = 0.0; + max = 1.0; + _off = -1.0; + _precision = 3; + setValue(0.0); + } + +DoubleLabel::DoubleLabel(double _val, double m, double mx, QWidget* parent) + : Dentry(parent), _specialText("---") + { + min = m; + max = mx; + _off = m - 1.0; + _precision = 3; + setValue(_val); + } + +//--------------------------------------------------------- +// setOff +//--------------------------------------------------------- + +void DoubleLabel::setOff(double v) +{ + _off = v; + setString(val); +} + +//--------------------------------------------------------- +// calcIncrement() +//--------------------------------------------------------- + +double DoubleLabel::calcIncrement() const +{ + double dif; + if(max - min > 0) + dif = max - min; + else + dif = min - max; + + if(dif <= 10.0) + return 0.1; + else + if(dif <= 100.0) + return 1.0; + else + return 10.0; +} + +//--------------------------------------------------------- +// setString +//--------------------------------------------------------- + +bool DoubleLabel::setString(double v) + { + if(v <= _off || v > max) + { + setText(_specialText); + return true; + } + else + if(v < min) + { + setText(QString("---")); + return true; + } + else + { + QString s; + 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 >= max) + return; + double inc = calcIncrement(); + if(val + inc >= max) + setValue(max); + else + setValue(val + inc); + emit valueChanged(val, _id); + } + +//--------------------------------------------------------- +// decValue +//--------------------------------------------------------- + +void DoubleLabel::decValue(double) + { + if(val <= min) + return; + double inc = calcIncrement(); + if(val - inc <= min) + setValue(min); + else + setValue(val - inc); + 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 + 6; +#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/muse2/muse/widgets/doublelabel.h b/muse2/muse/widgets/doublelabel.h new file mode 100644 index 00000000..6698ec57 --- /dev/null +++ b/muse2/muse/widgets/doublelabel.h @@ -0,0 +1,60 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: doublelabel.h,v 1.2.2.3 2008/08/18 00:15:26 terminator356 Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __DOUBLELABEL_H__ +#define __DOUBLELABEL_H__ + +#include "dentry.h" + +//--------------------------------------------------------- +// DoubleLabel +//--------------------------------------------------------- + +class DoubleLabel : public Dentry { + Q_OBJECT + + 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, _off; + QString _specialText; // text to show if value outside min,max + QString _suffix; + int _precision; + + double calcIncrement() const; + + 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; } + double off() const { return _off; } + void setMinValue(double v) { min = v; } + void setMaxValue(double v) { max = v; } + void setRange(double a, double b) { _off = a - (min - _off); min = a; max = b; } + void setOff(double v); + 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/muse2/muse/widgets/drange.cpp b/muse2/muse/widgets/drange.cpp new file mode 100644 index 00000000..5c986403 --- /dev/null +++ b/muse2/muse/widgets/drange.cpp @@ -0,0 +1,262 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: drange.cpp,v 1.2.2.1 2009/03/09 02:05:18 terminator356 Exp $ +// +// Copyright (C) 1997 Josef Wilgen +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License, version 2, +// as published by the Free Software Foundation. +// +// (C) Copyright 2000 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include "mmath.h" +#include "drange.h" + +const double DoubleRange::MinRelStep = 1.0e-10; +const double DoubleRange::DefaultRelStep = 1.0e-2; +const double DoubleRange::MinEps = 1.0e-10; + +//----------------------------------------------------------- +// This class is useful as a base class or a member for sliders. +// It represents an interval of type double within which a value can +// be moved. The value can be either an arbitrary point inside +// the interval (see @DoubleRange::setValue@), or it can be fitted +// into a step raster (see @DoubleRange::fitValue@ and +// @DoubleRange::incValue@). +// +// As a special case, a DoubleRange can be periodic, which means that +// a value outside the interval will be mapped to a value inside the +// interval when @DoubleRange::setValue@, @DoubleRange::fitValue@, +// @DoubleRange::incValue@ or @DoubleRange::incPages@ are called. +//------------------------------------------------------------ + +//--------------------------------------------------------- +// doubleRange +//--------------------------------------------------------- + +DoubleRange::DoubleRange() + { + d_minValue = 0; + d_maxValue = 100.0; + d_prevValue = 0.0; + d_exactPrevValue = 0.0; + d_exactValue = 0.0; + d_value = 0.0; + d_step = 0.1; + d_periodic = FALSE; + } + +//--------------------------------------------------------- +// setNewValue +//--------------------------------------------------------- + +void DoubleRange::setNewValue(double x, bool align) + { + d_prevValue = d_value; + + double vmin = qwtMin(d_minValue, d_maxValue); + double vmax = qwtMax(d_minValue, d_maxValue); + + // Range check + + if (x < vmin) { + if ((d_periodic) && (vmin != vmax)) + d_value = x + ceil((vmin - x) / (vmax - vmin)) + * (vmax - vmin); + else + d_value = vmin; + } + else if (x > vmax) { + if ((d_periodic) && (vmin != vmax)) + d_value = x - ceil( ( x - vmax) / (vmax - vmin )) + * (vmax - vmin); + else + d_value = vmax; + } + else + d_value = x; + + d_exactPrevValue = d_exactValue; + d_exactValue = d_value; + + // align to grid + if (align) { + if (d_step != 0.0) + d_value = d_minValue + rint((d_value - d_minValue) / d_step ) * d_step; + else + d_value = d_minValue; + + // correct rounding error at the border + if (fabs(d_value - d_maxValue) < MinEps * qwtAbs(d_step)) + d_value = d_maxValue; + + // correct rounding error if value = 0 + if (fabs(d_value) < MinEps * qwtAbs(d_step)) + d_value = 0.0; + } + if (d_prevValue != d_value) + valueChange(); + } + +//--------------------------------------------------------- +// fitValue +// Adjust the value to the closest point in the step +// raster. +// The value is clipped when it lies outside the range. +// When the range is @DoubleRange::periodic@, it will +// be mapped to a point in the interval such that +//--------------------------------------------------------- + +void DoubleRange::fitValue(double x) + { + setNewValue(x, true); + } + +//--------------------------------------------------------- +// setValue +// Set a new value without adjusting to the step raster +// The value is clipped when it lies outside the range. +// When the range is @DoubleRange::periodic@, it will +// be mapped to a point in the interval such that +// +// new value := x + n * (max. value - min. value) +// +// with an integer number n. +//--------------------------------------------------------- + +void DoubleRange::setValue(double x) + { + setNewValue(x, false); + } + +//--------------------------------------------------------- +// setRange +// Specify range and step size +// - A change of the range changes the value if it lies outside the +// new range. The current value +// will *not* be adjusted to the new step raster. +// - vmax < vmin is allowed. +// - If the step size is left out or set to zero, it will be +// set to 1/100 of the interval length. +// - If the step size has an absurd value, it will be corrected +// to a better one. +//--------------------------------------------------------- + +void DoubleRange::setRange(double vmin, double vmax, double vstep, int pageSize) + { + bool rchg = ((d_maxValue != vmax) || (d_minValue != vmin)); + + if (rchg) { + d_minValue = vmin; + d_maxValue = vmax; + } + + // + // look if the step width has an acceptable + // value or otherwise change it. + // + setStep(vstep); + + // + // limit page size + // + d_pageSize = qwtLim(pageSize,0, int(qwtAbs((d_maxValue - d_minValue) / d_step))); + + // + // If the value lies out of the range, it + // will be changed. Note that it will not be adjusted to + // the new step width. + setNewValue(d_value, false); + + // call notifier after the step width has been + // adjusted. + if (rchg) + rangeChange(); + } + +//--------------------------------------------------------- +// setStep +// Change the step raster +// +// The value will *not* be adjusted to the new step raster. +//--------------------------------------------------------- + +void DoubleRange::setStep(double vstep) + { + double newStep,intv; + + intv = d_maxValue - d_minValue; + + if (vstep == 0.0) + newStep = intv * DefaultRelStep; + else { + if (((intv > 0) && (vstep < 0)) || ((intv < 0) && (vstep > 0))) + newStep = -vstep; + else + newStep = vstep; + + if ( fabs(newStep) < fabs(MinRelStep * intv) ) + newStep = MinRelStep * intv; + } + + if (newStep != d_step) { + d_step = newStep; + stepChange(); + } + } + +//--------------------------------------------------------- +// setPeriodic +// Make the range periodic +// +// When the range is periodic, the value will be set to a point +// inside the interval such that +// +// point = value + n * width +// +// if the user tries to set a new value which is outside the range. +// If the range is nonperiodic (the default), values outside the +// range will be clipped. +//--------------------------------------------------------- + +void DoubleRange::setPeriodic(bool tf) + { + d_periodic = tf; + } + +//------------------------------------------------------------ +// incValue +// Increment the value by a specified number of steps +// +// As a result of this operation, the new value will always be +// adjusted to the step raster. +//------------------------------------------------------------ + +void DoubleRange::incValue(int nSteps) + { + setNewValue(d_value + double(nSteps) * d_step, true); + } + +//--------------------------------------------------------- +// incPages +// Increment the value by a specified number of pages +//--------------------------------------------------------- + +void DoubleRange::incPages(int nPages) + { + setNewValue(d_value + double(nPages) * double(d_pageSize) + * d_step, true); + } + +//--------------------------------------------------------- +// step +//--------------------------------------------------------- + +double DoubleRange::step() const + { + return qwtAbs(d_step); + } + diff --git a/muse2/muse/widgets/drange.h b/muse2/muse/widgets/drange.h new file mode 100644 index 00000000..1ee3dd21 --- /dev/null +++ b/muse2/muse/widgets/drange.h @@ -0,0 +1,71 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: drange.h,v 1.1.1.1.2.1 2007/01/27 14:52:43 spamatica Exp $ +// +// Copyright (C) 1997 Josef Wilgen +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License, version 2, +// as published by the Free Software Foundation. +// +// (C) Copyright 2000 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __DOUBLE_RANGE_H__ +#define __DOUBLE_RANGE_H__ + +#include + +//--------------------------------------------------------- +// DoubleRange +//--------------------------------------------------------- + +class DoubleRange + { + static const double MinRelStep; + static const double DefaultRelStep; + static const double MinEps; + + double d_minValue; + double d_maxValue; + double d_step; + int d_pageSize; + double d_value; + double d_exactValue; + double d_exactPrevValue; + double d_prevValue; + bool d_periodic; + + void setNewValue(double x, bool align = false); + + protected: + double exactValue() const { return d_exactValue; } + double exactPrevValue() const { return d_exactPrevValue; } + double prevValue() const { return d_prevValue; } + virtual void valueChange() {} + virtual void stepChange() {} + virtual void rangeChange() {} + + public: + DoubleRange(); + virtual ~DoubleRange(){}; + + double value() const { return d_value; } + virtual void setValue(double); + + virtual void fitValue(double); + virtual void incValue(int); + virtual void incPages(int); + void setPeriodic(bool tf); + void setRange(double vmin, double vmax, double vstep = 0.0, + int pagesize = 1); + void setStep(double); + + double maxValue() const { return d_maxValue; } + double minValue() const { return d_minValue; } + bool periodic() const { return d_periodic; } + int pageSize() const { return d_pageSize; } + double step() const; + }; + +#endif diff --git a/muse2/muse/widgets/editctrl7dialogbase.ui b/muse2/muse/widgets/editctrl7dialogbase.ui new file mode 100644 index 00000000..6d649555 --- /dev/null +++ b/muse2/muse/widgets/editctrl7dialogbase.ui @@ -0,0 +1,214 @@ + +EditCtrl7DialogBase + + + EditCtrl7DialogBase + + + + 0 + 0 + 331 + 160 + + + + MusE: Enter Controller + + + true + + + + unnamed + + + 11 + + + 6 + + + + Layout12 + + + + unnamed + + + 0 + + + 6 + + + + Layout11 + + + + unnamed + + + 0 + + + 6 + + + + TextLabel3 + + + Controller: + + + + + PosEdit3 + + + + + SpinBox2 + + + + + TextLabel2 + + + Time Position: + + + + + SpinBox3 + + + + + TextLabel4 + + + Value: + + + + + + + Spacer7 + + + Horizontal + + + Expanding + + + + 20 + 20 + + + + + + + + Slider1 + + + Horizontal + + + controller value + + + + + Layout1 + + + + unnamed + + + 0 + + + 6 + + + + Horizontal Spacing2 + + + Horizontal + + + Expanding + + + + 20 + 20 + + + + + + buttonOk + + + OK + + + 0 + + + true + + + true + + + + + buttonCancel + + + Cancel + + + 0 + + + true + + + + + + + + + buttonOk + clicked() + EditCtrl7DialogBase + accept() + + + buttonCancel + clicked() + EditCtrl7DialogBase + reject() + + + + posedit.h + + + diff --git a/muse2/muse/widgets/editmetadialogbase.ui b/muse2/muse/widgets/editmetadialogbase.ui new file mode 100644 index 00000000..573930b9 --- /dev/null +++ b/muse2/muse/widgets/editmetadialogbase.ui @@ -0,0 +1,254 @@ + +EditMetaDialogBase + + + EditMetaDialogBase + + + + 0 + 0 + 475 + 285 + + + + MusE: Enter Meta Event + + + true + + + + unnamed + + + 11 + + + 6 + + + + TextEdit1 + + + + + Layout1 + + + + unnamed + + + 0 + + + 6 + + + + Horizontal Spacing2 + + + Horizontal + + + Expanding + + + + 20 + 20 + + + + + + buttonOk + + + OK + + + 0 + + + true + + + true + + + + + buttonCancel + + + Cancel + + + 0 + + + true + + + + + + + TextLabel1_2 + + + TextLabel1 + + + + + Spacer5 + + + Horizontal + + + Expanding + + + + 20 + 20 + + + + + + saveButton + + + + + + image0 + + + + + loadButton + + + + + + image1 + + + + + Layout8 + + + + unnamed + + + 0 + + + 6 + + + + TextLabel1 + + + Time Position: + + + + + TextLabel2 + + + + 4 + 1 + 0 + 0 + + + + Meta Type: + + + + + CheckBox1 + + + Enter Hex + + + + + SpinBox1 + + + + 4 + 0 + 0 + 0 + + + + + + metaTypeLabel + + + + 4 + 1 + 0 + 0 + + + + + + PosEdit1 + + + + + + + + + 789c8dd35d6fda301406e07b7e05aaefaae934719c9068dac5cabebab60c3668d34dbb308e03edfab11518eda6fdf71d9f7382a02dd3fa16a407bf716c07f676db65ffb8bdbbd79acdedfcdcb5ddd4deb677abc5d5d5fd97af2f7eb776b46ee37fc7b4f5ceb3d6ce60de76eddecdb50f80254245f447ae1b2731d9af5c909dd888abc686fb11398f5c9493278d63f634388e42c89fc9790879dc58f3f8a1b8b9de06eb2884fc536cc431b9d04ef3face82933869f6d3131bf18c5c24b9eca72b76e232d8c42692fd9d8a9bfd9e90adc98d258fc44e7c1b9cea281a1bf2909d46293d0cf8244ec53fc876d5df5fb9227f171bf147765aa47cbf0fe24a7c139ce955ffa2b14bc9d7e25c7cc4cee28cd77345b691737cfd65e38afb07ecacc8f87edf823b491cc9f839bb137712b212a7e277c179a28de7efe3abe0c225a6ae83d5845d1485235b71c586b7c1d6989cfb50909db596fb53b167c3cbe0b1e9c4327fcd1e6b39ef813813bf2657abbe628fad9c675fecc56f825d9a17b29e3b7125d77bb6d37cdeaa126772fef7e4aa903efc62dbe6fec076969f8772622fcf270faed24acbf977c49958937d652b3eef4cecd98a7e7f3ef3da67349e8a337142f6decaf332622f3e0eaeb35ad7dc7f2fcec40b725d5bd9df5c5cb307f3ff0ff74181853138a8f015e257a9251398825af52d9c632ee01b5cc215e61a730137f01d7e606e3133cc74adaf30f3ad593ce8ffc4f6f29ffde593f3dfc13dfcc2f797b0bf91307f77a31fd6bf6deec5a3f534fd57f01adee0eb2dbcc35d6fcebfd93fc06c9bfbfdd6fefe963cec1fc211e6f1bc9c63eaf736fa1f30fd8df67a7ff0a8ff71954f9421660427708a29f12c6770b6d6ff8c8d7fb77bd88fd6fa43e985d12e354227b4ce2096f7f5fe88528286040cbe52c8a00339147887117e5fe28dfe12ef1d52622f8c0f2157007da594ddd23fa574d518df8f7065ebfd9327fa25a58bab2871d743e554a5140cb05f3ed1b7f4fd0bbbd4388e67826d8fed5a4df0d312c737fa74871e9d88c6a746c1b5d46a8afd1e5e71f8b04f6734c5abb627a2dfef9fe7adbfc6a22669 + + + 789c8dd64b53db481000e03bbfc2c5dca8ad8e3492c652a5727008ef77121c87ad3d8c4663e327066cc0a4f6bf6f4f774b3c422da139f0797aba5b23c9c5878d56eff4a8b5f161ed76611743d77297f6a6b5512da7d3d5dfff7cfab5b6ae750b7f8ba4a5d7ff5a5b3f5bb45cebf86ae603402154443fc1ea869c47291b66c17114b928a7f5153b04792c4ed99091f310e4c7608debbc1fac3817976227f53a6c9d6aae47fd74d1e43f88eb79066c9deb827c2f766c2027b1aee77d64275112d3faa938153b72a1e57ad48c9de4b27e179cc63a97eb5d8aebf9af1af3bc0bb24d22f16670a6b328b5944fd793d9acc8c8908a2bb6ba0e36da64866e9eba255b53889db832bcbf086e97eda25dd2fa9db86203edcf932c92f349d878bb12b226977991737e2eaed86a145ca47843d8cbda454af9b13813b7c9ae280a478ec4155b55c1363555c2f76fc8b6b1ac4f6b5bae7721cec49fc9aed9bf605bcbebeab231f73f117bb69a0497693b4bf9fefe64975ad6cbda25f73b161b718f5c95567cd4b8a2fd73b167c38f6097392d3eaced3272576cc407e4ca59b169ccf5add8b3613fb8ca2a2d3eaf5df1fe3db161ab3ed95756d6bf37e6ef875db117d3797a63ebe7d1b3bd96f59ddade90bf890d5bd1f78df7853cdf70c3b6b1789bedade77a5f83fbd84fd62bb197e77dca2e4d9b9fdf2d765ff7b9ff17b111d3fbd4efe37e9a1fe6ec524bbd8ed88807b5b9be02b1957e7db6d3f27ef9daf23e9d898d7822b6f27e0d6bcbfb32167bf1885d69797faec4867db6f8f3783b1f541defe73fe53eed79daf73aff75cdd77d5ee6ffdebfdef1fff3bf5f1f2c9418f6cfce071c54e0a10f0370efe763f6250c61046398c014357b196fe47bb8c26c0f73b87e23dc6ff913aceee1066e6121b1843bfcfc1ee30156f0585f77933f810e7c864df842b105dbb003bbb007fb7000877004c77082712af96758fd2b563d806f183bf01dcea10b3fa0073fe10222884143022964cdfc73aabe85b9db52fb1c0c56ee61d50b68430e059cd6f3e3600a16ca62ff901f7ae02ce82e1ca9923ae4ca85bb26f53baac2ea21c7d33cbbaa8fd90738d131d58f21518367e713663fc1fe7bb86717a70fd719a6c1eaea520dd50852357eca5713d80cdd69a273d8a7da940d276a8ad3276af6fcfcd5157e5eaa39e67431b30b87f8772f64cbecd7f513c7ff3fa95bccc21d386d0fcf1a4f9b2a2fb076a496ea4edd3fbfbf6aac96d8b38d95ea68438c79233c758dd90f3c7b93bf528f6aa0ee5fc480a243b17af6fcfcfb71ed3f846c790e + + + + + buttonOk + clicked() + EditMetaDialogBase + accept() + + + buttonCancel + clicked() + EditMetaDialogBase + reject() + + + + posedit.h + + + diff --git a/muse2/muse/widgets/editnotedialogbase.ui b/muse2/muse/widgets/editnotedialogbase.ui new file mode 100644 index 00000000..e6e01441 --- /dev/null +++ b/muse2/muse/widgets/editnotedialogbase.ui @@ -0,0 +1,202 @@ + +EditNoteDialogBase + + + EditNoteDialogBase + + + + 0 + 0 + 231 + 182 + + + + MusE: Enter Note + + + true + + + + unnamed + + + 11 + + + 6 + + + + Layout1 + + + + unnamed + + + 0 + + + 6 + + + + Horizontal Spacing2 + + + Horizontal + + + Expanding + + + + 20 + 20 + + + + + + buttonOk + + + OK + + + 0 + + + true + + + true + + + + + buttonCancel + + + Cancel + + + 0 + + + true + + + + + + + TextLabel2 + + + Length: + + + + + TextLabel1 + + + Time Position: + + + + + TextLabel3 + + + Pitch: + + + + + TextLabel4 + + + Velocity On: + + + + + TextLabel5 + + + Velocity Off: + + + + + epos + + + + + il1 + + + 1000000 + + + 1 + + + + + il2 + + + 127 + + + + + il3 + + + 127 + + + + + pl + + + + + + + buttonOk + clicked() + EditNoteDialogBase + accept() + + + buttonCancel + clicked() + EditNoteDialogBase + reject() + + + + pos + il1 + pl + il2 + il3 + buttonOk + buttonCancel + + + posedit.h + pitchedit.h + + + diff --git a/muse2/muse/widgets/editsysexdialogbase.ui b/muse2/muse/widgets/editsysexdialogbase.ui new file mode 100644 index 00000000..cfd91cdb --- /dev/null +++ b/muse2/muse/widgets/editsysexdialogbase.ui @@ -0,0 +1,209 @@ + +EditSysexDialogBase + + + EditSysexDialogBase + + + + 0 + 0 + 433 + 330 + + + + MusE: Enter SysEx + + + true + + + + unnamed + + + 11 + + + 6 + + + + Layout3 + + + + unnamed + + + 0 + + + 6 + + + + TextLabel1 + + + TimePosition: + + + + + epos + + + + + Spacer2 + + + Horizontal + + + Expanding + + + + 20 + 20 + + + + + + saveButton + + + + + + image0 + + + + + loadButton + + + + + + image1 + + + + + + + edit + + + + + TextLabel2 + + + Comment: + + + + + comment + + + + + Layout1 + + + + unnamed + + + 0 + + + 6 + + + + Horizontal Spacing2 + + + Horizontal + + + Expanding + + + + 20 + 20 + + + + + + buttonOk + + + OK + + + 0 + + + true + + + true + + + + + buttonCancel + + + Cancel + + + 0 + + + true + + + + + + + + + 789c8dd35d6fda301406e07b7e05aaefaae934719c9068dac5cabebab60c3668d34dbb308e03edfab11518eda6fdf71d9f7382a02dd3fa16a407bf716c07f676db65ffb8bdbbd79acdedfcdcb5ddd4deb677abc5d5d5fd97af2f7eb776b46ee37fc7b4f5ceb3d6ce60de76eddecdb50f80254245f447ae1b2731d9af5c909dd888abc686fb11398f5c9493278d63f634388e42c89fc9790879dc58f3f8a1b8b9de06eb2884fc536cc431b9d04ef3face82933869f6d3131bf18c5c24b9eca72b76e232d8c42692fd9d8a9bfd9e90adc98d258fc44e7c1b9cea281a1bf2909d46293d0cf8244ec53fc876d5df5fb9227f171bf147765aa47cbf0fe24a7c139ce955ffa2b14bc9d7e25c7cc4cee28cd77345b691737cfd65e38afb07ecacc8f87edf823b491cc9f839bb137712b212a7e277c179a28de7efe3abe0c225a6ae83d5845d1485235b71c586b7c1d6989cfb50909db596fb53b167c3cbe0b1e9c4327fcd1e6b39ef813813bf2657abbe628fad9c675fecc56f825d9a17b29e3b7125d77bb6d37cdeaa126772fef7e4aa903efc62dbe6fec076969f8772622fcf270faed24acbf977c49958937d652b3eef4cecd98a7e7f3ef3da67349e8a337142f6decaf332622f3e0eaeb35ad7dc7f2fcec40b725d5bd9df5c5cb307f3ff0ff74181853138a8f015e257a9251398825af52d9c632ee01b5cc215e61a730137f01d7e606e3133cc74adaf30f3ad593ce8ffc4f6f29ffde593f3dfc13dfcc2f797b0bf91307f77a31fd6bf6deec5a3f534fd57f01adee0eb2dbcc35d6fcebfd93fc06c9bfbfdd6fefe963cec1fc211e6f1bc9c63eaf736fa1f30fd8df67a7ff0a8ff71954f9421660427708a29f12c6770b6d6ff8c8d7fb77bd88fd6fa43e985d12e354227b4ce2096f7f5fe88528286040cbe52c8a00339147887117e5fe28dfe12ef1d52622f8c0f2157007da594ddd23fa574d518df8f7065ebfd9327fa25a58bab2871d743e554a5140cb05f3ed1b7f4fd0bbbd4388e67826d8fed5a4df0d312c737fa74871e9d88c6a746c1b5d46a8afd1e5e71f8b04f6734c5abb627a2dfef9fe7adbfc6a22669 + + + 789c8dd64b53db481000e03bbfc2c5dca8ad8e3492c652a5727008ef77121c87ad3d8c4663e327066cc0a4f6bf6f4f774b3c422da139f0797aba5b23c9c5878d56eff4a8b5f161ed76611743d77297f6a6b5512da7d3d5dfff7cfab5b6ae750b7f8ba4a5d7ff5a5b3f5bb45cebf86ae603402154443fc1ea869c47291b66c17114b928a7f5153b04792c4ed99091f310e4c7608debbc1fac3817976227f53a6c9d6aae47fd74d1e43f88eb79066c9deb827c2f766c2027b1aee77d64275112d3faa938153b72a1e57ad48c9de4b27e179cc63a97eb5d8aebf9af1af3bc0bb24d22f16670a6b328b5944fd793d9acc8c8908a2bb6ba0e36da64866e9eba255b53889db832bcbf086e97eda25dd2fa9db86203edcf932c92f349d878bb12b226977991737e2eaed86a145ca47843d8cbda454af9b13813b7c9ae280a478ec4155b55c1363555c2f76fc8b6b1ac4f6b5bae7721cec49fc9aed9bf605bcbebeab231f73f117bb69a0497693b4bf9fefe64975ad6cbda25f73b161b718f5c95567cd4b8a2fd73b167c38f6097392d3eaced3272576cc407e4ca59b169ccf5add8b3613fb8ca2a2d3eaf5df1fe3db161ab3ed95756d6bf37e6ef875db117d3797a63ebe7d1b3bd96f59ddade90bf890d5bd1f78df7853cdf70c3b6b1789bedade77a5f83fbd84fd62bb197e77dca2e4d9b9fdf2d765ff7b9ff17b111d3fbd4efe37e9a1fe6ec524bbd8ed88807b5b9be02b1957e7db6d3f27ef9daf23e9d898d7822b6f27e0d6bcbfb32167bf1885d69797faec4867db6f8f3783b1f541defe73fe53eed79daf73aff75cdd77d5ee6ffdebfdef1fff3bf5f1f2c9418f6cfce071c54e0a10f0370efe763f6250c61046398c014357b196fe47bb8c26c0f73b87e23dc6ff913aceee1066e6121b1843bfcfc1ee30156f0585f77933f810e7c864df842b105dbb003bbb007fb7000877004c77082712af96758fd2b563d806f183bf01dcea10b3fa0073fe10222884143022964cdfc73aabe85b9db52fb1c0c56ee61d50b68430e059cd6f3e3600a16ca62ff901f7ae02ce82e1ca9923ae4ca85bb26f53baac2ea21c7d33cbbaa8fd90738d131d58f21518367e713663fc1fe7bb86717a70fd719a6c1eaea520dd50852357eca5713d80cdd69a273d8a7da940d276a8ad3276af6fcfcd5157e5eaa39e67431b30b87f8772f64cbecd7f513c7ff3fa95bccc21d386d0fcf1a4f9b2a2fb076a496ea4edd3fbfbf6aac96d8b38d95ea68438c79233c758dd90f3c7b93bf528f6aa0ee5fc480a243b17af6fcfcfb71ed3f846c790e + + + + + buttonOk + clicked() + EditSysexDialogBase + accept() + + + buttonCancel + clicked() + EditSysexDialogBase + reject() + + + + posedit.h + + + diff --git a/muse2/muse/widgets/fdialogbuttons.ui b/muse2/muse/widgets/fdialogbuttons.ui new file mode 100644 index 00000000..33c79814 --- /dev/null +++ b/muse2/muse/widgets/fdialogbuttons.ui @@ -0,0 +1,204 @@ + +FileDialogButtons + + + FileDialogButtons + + + + 0 + 0 + 175 + 438 + + + + + 5 + 5 + 0 + 0 + + + + Form1 + + + + unnamed + + + 11 + + + 6 + + + + pathGroup + + + 0 + + + + + + true + + + true + + + + unnamed + + + + globalButton + + + + + + true + + + image0 + + + true + + + true + + + Global + + + 0 + + + + + userButton + + + + + + true + + + image1 + + + true + + + true + + + User + + + 0 + + + + + projectButton + + + + + + true + + + image2 + + + true + + + true + + + Project + + + + + + + Spacer1 + + + Vertical + + + Expanding + + + + 20 + 60 + + + + + + loadAllGroup + + + Load: + + + true + + + + unnamed + + + + loadAllButton + + + Songdata + +Cofiguration + + + + + loadSongButton + + + only +Songdata + + + true + + + 0 + + + + + + + + + 789cad965b73e2481285dffb57383adf3a3672102021c5c63ed86e5ff10ddfdaee89794824617cc137c0b789fdef9bca3ca5a66dd8d999d9aec6e673294f9dcaca4af8e5cbd2d9c1eed2975f3e8d2732b9cc97f2a13c2e7d29a6a3d1ebafbffdebf74f9f5bed25fd1f7592a5e6e77f7cfadc9b2ce54b7b77b765054c0ad4b07fc603e77623918ae919dceeb48c6f9ce322ed572c6bc669236fa4363f74aee34fc039e213e7b8d1f1f86770ec4ca7ce699cc7c6b715478d6a98bf6fceaae7f1afceaae7fa54b3eb75c0716af3528033677e724e63c98d6f03f7db16ff669c467964fbe307e7a0cfd760e8f30518faf252b3fb49c1c81fad3bd7eb413fcdc0bbce595c783eba15371bd530fd3be7b8403e2681b17e59b3af97392711ce6f1038f3f5cec0b1b3907327ca2c3ff4cd390d7e1ec1c1ef8e731615565fc2c6599279bcdc80839ff3c0d0ffee1cd6e3041c637e2fb0f87ad760e8d37e60ccaf3987f3a51c5cf40be3c2398be07f195cc0ff65c5ad28f895dcb913f2d500073f17e0e0e725b0cfcb2db8c0f30735fbf3abce6904ee83437e2370f0df7456ffc6fc1d1c637ec559e23231be0397d8df57e32abfae0faed72b9db3701fef9d453c9e5a15b7a376a31d99de15b80dbe700ee72702ceb05ecf39cbe0bf012e7c3d3e77ee377d3d3e0becfb61d7135dcffa8d74c1a9331d3a4b04ff78be8eb7f38f9b7123b6e648c7ce69a8f7d839f823ab87583a05fc6f39a7387f8e9c25cefdf901589cc5f493661225b61eef394be9f3bce3dc4ffc7eb1f5af44d250cfd6af3a2d41bd72d3393c2f47c6fd4e86fe543aa791f7031a3bd7fafb6001ef82437d98bfb4d509fde4c039e8c92e38f43fcc6bbcfbb1fca77d9d773f4330fa21df81433fb0fac9da29f22b1bce59b86fe03cd443e004bc06467d8aed2fcbb3507f3be0d08f9e9cfb09ea6dd339c4f33a18f9a0ed8aa52d11cee3158cf397a1731fe74947ce7989fb3732ce05fd487a60c1e74f0a2e31df770e7a72edacfb77bf5bce45e2fa62fefb6d29bd3e64dbb9df44bd5c8213f0917311ee430f9c94beff17b060be6d5c68bcd76b0e1667590797b82f783e477dc92a18f9e43767d5777e059703df8fed2f8f75ff1ebfe29c37715e31389c5fcbb928a187e7cba6b3587fcf0b7ddefd4ec1b89fbc0d0ef771e21ce27939b0fbe33138815fdb4f11e7a87fce9c0b9c978cc1b87f34710ef1fc0816e8399745a8ef6370a8cf1370a8cfa97389f313fb3e512605ea4f46ce25ce5beec1a81fb6ef5f651d4f0c0ee773050ef93d0c0cff53e741c8cf6acd03d3db0427ce6ceb0f923abeeb5cc73f83437e6ec08278fbbc1a0c6abd1138ccf7c103e7dee4ef8f1f3a4c61fc1d1d16eeebc8b9f86b6adee779c0173ce44bbe32b5cb3faf663ad77cc323be35b53b55b9ffe8ed8f766d3a0ffcc8639ef054a39fde790b6ab9be7f5eec137e5ef895df789957f4b5aa11b3de46a6f0555f237bdf5fa8f3c06bbcce1bbcc95baa3851b59fbd6d43ed4ab52ac5aeef748ece0eeff21eeff381aaad73cfbc4dd4d9211fa952ae4ac77cc2a7aa52a9dd7f74643adff88ccff93b373852b5a6a9b9b796aa0dd4519b63554ab8c329677c42fcde91dd27e27312ea534e0595dca0c18cb7095dd0902ee94ab50674adaf1b1af131ddcef34377744f0f9a8f5b7aacd482371af3064d684a4ff44c2fea6cd9f296d02bbdcdcb332dd30aadd2575aa3075ad7517b536707b4c12fb4a9ce5e788526fa7b8bb6a93bd7cf0eedd21eedd381aaf52b35f3e66a3d3ab47d6ed291664df346c7f3fdd0099dd2373aa373fa4e0d555b7de72da2e66cde5467ae1f6a519b624aa8432965c242ea6def83b728e44d64417efcaeebc7a5e4fab54e3ff664b0c09b9d825c2cf2a32a23ab53ad7e19566a7c31e3ed5ddee472be1fb9b29b53d5bcd6aad65897bb72ed6af3bcc9cd423fa32ad655886524a3aa66f59dedf4a7bcedcbaddc2dcccfacca3d9fca833cf0b13cca587fdebbda0f6f32a9fcfcdc41e0e73eb429f752a9e8c8746ccb54a6d59d9227fda6f5aca7f022af959f1f9dad1a9e9fca039fba8a7b511f631d6f3aa6b22c2b36a6aab62a5f7583337e6674d678a84f3d9a8f937a4795974a656a1aebda3d72ce644336e56abe9ff09eaa3da882bdc6418563f5b3255b9ceb8e87b2ad7fefcef7e3990a7f911d5ddd7dd45e54675db3bfab2ac7b2b7c8cfecf9d56afbbabee7055e2a15cddd81f4febb9fd9fe56eff44a63b7b4db1fcba179a954a61ffdcc7e2e7f1cb5b7a91ca8d6b6eea8a73f8fdefb09f5335fe3839a768b4a855e7ff6f3a30e17f999ebed48f6a52b1bc1cfecbdf8638d0f797ba7f2bffb79ffb9f77efcdfbe47fdfb9f9ffe03facd42d6 + + + 789ca5975973db3a1285dff32b5ce9b7d414ae2889145953f3e07ddf774fcd433748598be54df2a65bf3dfa7893e60ecd83735531386297f017070d06834e13f7e2c5c1cec2efcf8e3db74c6b3a15ff0037e5cf8513e4d266ffffcd73ffefcf6bdd35dd0bfed225b687fffdbb7ef8e17fcc2dedd6d1580dec1e1ec7d8b28502bfc093c0577c177c6dd56c635cb2eb86b4cfbe0bc27a17d05ec7b9d30fe3a70ae0279cdfe119c1bd3a17196143ef01b3835f66b3527ada49b043ff2649cb6f2a02fabe0143c03174537f08bb1ea07f6d63f57bd30bf9c80bdb17b334ecbdcd6f31cd9c6bb7be32c41fb040cbf720b2ec0af91398ca7ccb848ca34700f9c5659e8dfadb9ddaa9fe0f701dc351636ceb03e4e8c7b0987f9b80d8e7eaac836bfec052eda79bb087c0af660328efeb905c6fae9c0b8d1f791a15f820bf8e9804b31bfd0cf13ebcf070d5bff71645f06ee8253314ec1d0a7f5c8a64f6b0d87fe74078ef31f366ced27c69c58fc79a9e64ed2f69d24ecf7a271a7652c621cd7eb5ec1717faf1b367f5d7089f697862d7e7de33c81ff5570f4eb1b36bf1bc645e243feb80c8cf8d043646b27f8672ec379e7edc0badf9db0dfcef48b0e58968d9bfddc01637dee160cff7461dcf8357f4591c0cf7964f8b907c31f97e002ebb17815d236bfb414d9f6c785fedda4e3bbb63f03e36ecb984fc05d633f6ed8ead79a71939f33e3383f4d8ce37c6ccc3a5f18cf9bc63a9f7106863ebf8273cc370063bcdc18f762fd98825363d7332e4ae4ff9331e33cb8d45818fe825edaeee66928fb7c6a9cb68c69cf38477d953730f68b368d39e6530e8ef9f3d8b0ed27e693ac0afb23478175b8d573ee19777d6af158344e0b63bf0e2ed1fe6cacf919e6f3217fb2763c7f3236ce92ccd6b762dc2b2c5ef46a9c235ff9c1389e079e82511fe4ce38c693198cf5f9703e326ee37be85f8c9bf36ffa9ca5f81eee834bb033cef1bda10138d6d391713c8fae30d67cb7f587fad8eb34f30fc0f81efb393837e6c2382bed7bcb67c6bd042cc605f69f5d64e4ffbe715c3faf822bec37fa4b86fc3b890cffc7e0cafcbba38643bb0ff5a327bdc2ee07de834b63be37ce637d5c312e50efe4da58daa8179163be84f179130f5f1ac7f3e847c6bdd2ee079c1be709ee0bc760dc1f68cbb888f5bcd5b0d5bb3370ac77953123df7c381fb9c4f9ddd0388ff97a6b1cfb1319fb58dfb6c088af84f98b6e9a5afef927e33cc5fde60a1cef3bf7c645ccbf6330faf39db1c6d3e667e3389f3b8d6c7e7cf053784d3fbb2f1d1a473fd233d6f369f7416f9c97a83717c64dfe41af88f7870c1cef4b4bc6cd7e0f8c3dea9d84fb84965bf8f19b60dc0ff9c8b8d9bf148cfc924b63c6fd8366c69adf36dfd0d8237ff931b2d53bb76d5cb68d7d381fecd3785e97c029ee9707c6bd14f928c68cf3271be0143c073378135c21ffccbf6fcedbae7119f367a761f317ce9374a33f498d99510f8760e8cb2832f27b6e2c6d7c2f4a7086f62be3983ff4645ce2fbe043be499916c89fc4b888e7c1e62f55dfcefb2218fa7ed6b0b59f8319f57dddd8235fdca5715c3f6d8319fbb704aefa96dfa19ee87695e6cf5d19c77c702330831fc095b1ac1bc7f9fd3318e3651b1cef5f7de312e78ba660363f6e0f1cf36d3932daa15f617d6e2532d663fdcbb81ed93216d4733933f638ffae0d467df78b60064fc118cf6bc625d6434760f8a51de3c6df5a64f89f8133f80df79132cd0a3bbfbe6f9c27761ff5afc645acdfc7c63ed67f06c7ef551519bf5f8d8c4b7c5f09fa65662c8f91719fba05235fa8308eeba12432d6b30fc67adc6ac3fdc0676036f6a65fe529eea7136361dcaf5bc625eebf6e0c8ef5f9001cf3e90d8c7a45a791cd2f9f1b47ffbc0cc6f9a4e7c8e69f7230f2913a0d07ff14c7c77c7c6a38b44b8857a5bf3eda7d4d72638f7ae31e8d63bcfd101cef439b91713ee6e00afbb3631ce34f6370dcbfddc8d6ce1760ac87f71ab6f5c4fed17f380f55e5e3794f8c9b7cee83113f7e01235ff83232f4afc0d077e7c6fd36da058c7cf1217ffb5919eb59c738fa7773708cffa1713fc6a3ddb0cd77038ef979d1b0b5bf80e1d7857ad6ef37e337c0b1ff041cfb57e0bef1e1ccd1fffb065dd69fdebfa28faffffde5ff7ff37ee1a774953e7dd5b96ed4fe473f6ea023076ee8466eac5a3741edbff2f68b9fdacbc4ddba3b77af6a0fee3170ad366dd44af559feeaf3939f997b72cfee45c7bfaada5be36de2e6aa35d5f171d5e2167ffafce467c92dbb157d56dd5a50fbe96dac4aebaab781b7729b414dbef4b3e5b6f5dd71bbaab7e7f67ff1367607aa76a33a87aa74a33f43e9939f2377ec4ef439d567479fdadb993b7717ee527d5db996ba485c5bffedab5a4763552b7df6d375a9cb5ccfe5ae2047440c6fcf24ee8e3c9554519fae6940431ab93e8d43cce4573f744313baa53bbaa7077a54b5139ad2cc9dd2133dd38b2abd8658ddd571235d296165bffaa1455aa2655aa1555aa375daa04db74a5bea8d699b766897f6689f0ee8908e2c6e74fc177e4ee8c49dd3299da9ca395dd0255d510bde6a5709b5a9435dddcf99c6ada2f42ffc64d4a35c7b17ec98982977e7ac171e5a672dc3dce76b1ef0d02d236ed5577e34cac2231ef38d1bf0846ff94ef7fd9caef85e551ef89184a73ce3277eaee316f6f4fc4b3f9af9fcc2affcc6735ee4255ed678e4aab3c2abbca6bed6798356d5db1d6d604fcfbef2c39a9f7ca33bd0e62d3754a56dde51955d7df7546597f7f9a05ea1c66d950feb3d753b7cf4859f327839e6133ed5f72c783ae70b5ee64b7dafb8a537f9367754ad5bdfe1556df0a51ff392718f737d332e6a4f9ab5b5975dedac011211af37db4afab537b9feeca7f6a22a273290a1ebcb4806faf3b8f614cee48daecebcddca8d4ce4b6f6267772ffd14fed8586c1cb5c4f8e56068db57a9287e069122a47e536e451a63293277996177995b78f7e425cb6a2178c3a94f93b4f37561f65d16dca922ccb8aacaadada7b3f7c23ebb2517b91cde0253e732adf7ba2b90cf958b6f4b4eb79976dd991dd0f7e845f65cf2dca3ed53e267220877264754f8ee544f6e454cf75a56f5f867226e7ee814672219b3ac7e54f3fa6a83a575a552a6949a2bf9974825242a974636ce22b67ae2557eabda53a1ff2193a591d1be9492e85779eea0aafff2788cd24be7adf905a457fd1fde007f9b3e8452b5d15eee17d7fed07b51f5fcfb0d17859f7c3da8beee9d88f64e4c7f2e97c453ffec64ffcadbff3f7d18f7ff08f7e5a7bf13359f74faaa25e54e5f9b77e5efcab7f533ff3c60f1effa8df8bb1ee7cbda2b95ff423d5f9540f1b3f2f7ec92ffb155d578ccf4fa555bfc6a77edd8baa78b9fcda0f6fe9be77fc86dff45bfa6ebb0e557af2e5d3a3df08def43bba97bb9fcfd717fddf3f9ffb4cf1363af0f35b9df7dff2afda3fd49fdfa97cba637c6cfffeefbf7ffb0ffbcaf966 + + + 789ca598d96e23cb0d86efe7298ce1dd4150475b4bdd0872e17d5fe4dd0e7241b25a966ccbabbc0679f7948a3f35b667264890d1e8603e5515fb278bc5629f3fff983bdddb9efbe3cf6f8f139e8c744e87fc30f7477c1a8fdffefe8fbffdf3dbf776676efab768cdb5beffe5dbf7c0733ab7737b5367a00fd09f7c1c9104d4c87f323f823bc6f10d5c36cacc0b606ddaf89d71b301aec19d669eaf87e012fc005670cfb8a5ed6666ac6f378c6505ac1de355e34ec3384e66cc59ffad7337b34470c7380ec0a5cdd7cab9c8619337e75e7bcab4ed5c4a1e873f1db5713d362e8ac2ec9d806337dbd353e36e13cfbf0417c6bae60c7b67cef63c3d07478c5fcfd8c6378c7b4df0c4b9ea647e0217187f0657a5d97b75669bff629cb6cbe66f3a579af533b832fbd20647b1f55bc655c579be369cb5c83c3466c67cc4836b1b977563618d995bc6da8d793c5c642ed3065b3e9abdd2f38f2760e41b5b3ccb76c7f6972d9ea5e78396e0d2f62bbe1b170de4c3c019f13a0257369f768dbb4df33706708578af3adb7a7a0347cc1f19f79a361e09ecfbbf0e8ed84ff8cf8c785e194bcbe2a3b02775cce79bf7a7dc6cb4ca5695b96bece78b3ae0b26de34bc67ebef80ddc317f79138cfc9777638f0f379c2d5f54c105c69be00ae769011cc143e32ef24f8e9d916f47ce96afdc0217164fae8dab66ddcdfe1599d3fea39e5c1bbb7f326f5c20ffc32b389a7e317b697f8df9ddd9e6cb05b8002fced8e66f83715ec2dd8c6d7ccb19fe404f17fb2d9733363d23e31ef24d4e9ced3c91c5a3ac9a960fd40617831c0fcef5a2d5987e32b78dd3fa7cdeb8032ea06fd719faaec138dfbce08cf53be0081e189785ed47ccf169551dc5f952e36e61fe92adaf66cf1f833d3e05385afed39171897850e96ce37c08c679a2ca19fa179dadde9033fca35567c477c519f3efc1a87f7c635cf9f3f7c06effc0989bb61fb40f66e390f3abddf4f3a94d30f2977a60b5f32aafc69e0fe105ec7a4733b6e737c0d1e249985f16d8af0076ff96c1f08f969c31be66ecf9162a30ecd1b133e63f3a233fefc0febc796366ab5f21e747bb727f756c3c3bbfb760b5fb97edf95517f544578c67f79f389b3f72605ce2fcf03318f9129fc0881793b1fb176c3faa547fb35e5a00fb7ee6fea3d3f4fe250c8d5dbfbe833bd68fc82e58d19f60fd6cff0e8d4bdca7746b2c2d7b9ee6fdeaf0cc5e178c7e879c613fdc18fbfed389b1ef07df3a63bf1ec0111c666cf7cdbd3137b17fa5b1429f34c18cfb6a00ae8d25d7a7a2e5f775bc067b7f3631f6fac12bc6b3fb3a800b63da32f6fe451fc1b87fe5d419fb7f67cc5e3f095ca03fb931ae5b8341d697cf5f2a8e0dcb3fb1f5ecfd20bf802be378058e18cff5abdb4afda1f973052e8c65c9d8e34913b0dfef6c2c8cfbee065c9b3ecee7bfcbddcafa1d3e0647f4a3f7c6decfd1e58cad3e3e184b0bf6198ce7c99a7144bec7ec6fafdd6d5a7fc09760f4b7bc0e463f2b6cdcf3f9af60cc27f0acfe88b1742d3fc3b1736df97608463e71aedf3df1fe984fc0de9f75c1e8a7e5ca585aa8df0246becad838c27f2e9d2dde92f3a54cfad1cf457034962de312fd9e3c80bd3f1a1a57b86fe3bcb1f7c3e1085cc3df036385ffd230aebbd093fbb532f967f52c8c8c4bf45f61c338f5d7b63ee743d5f17e93d78c4bf45ff1068cfb5a968d2b8c531fecf7793476fbe1d419fd88b1f6bcbf1163cfbf78615c816507ecf35f8cb9b6faa56cecfb476aacc84f36bdeaf1d1dc4fa4f28878eb8e7185fe4eb7c1dedf3d19b3f77ffbc67e1e381a2bce673871c67d9ffb49d659fde91857decf6d837dbc6fcc35ee778c479c475667dc376733b6fd3f37ae3d3f72fd93e40fdebfda60f40bdc3766ef279b609fff662c2d8c0fc05dac877d7f5fa353e38878874d30ce8be6fc9658a15f8cb63e32fa51d90333c66f8dd3f36dbc04635cfb60e44368187b3cc216d8cf6bbebf53f380faae07c69e3f5280bbc6710cf6f7af0e18efafba68ac58af3760ac0fbbc611e7979e9ca1efd9b86ee17c2f39a39e637e8d7ce28b19db38f40f106fcaf54ca3d78f28e0da584d4f4c7a8defc0a8af1ac0be7e098cfa4a7bc6337f368c5d3fad3bc3bf0918e73fcccfd8f4db7e44d71f72fec5147f7b5e5430ea71b83456bcff867bb0cf7f007bbfe1e30c7dd7c611eb6908f6ffdfb000f6fdd93176bd6111ecf99cf333d6fefead7bc68afe301460d4435d02a3df9567b0afb7e7d7d1d75f81bd9ef6c1de2faf18cffa936cafeeaadfd795b1d70fba00778d95c098af2de3dae78fc1984f6760f81f96c11eaf73e381d723cc1f78bc72fdac937fc8f755b0dfe72d30f62bec813ddfccbfdaf783ec79b53f2f3c817dbf723e0c92bfc8bf36d8fbf575e31af594dec13e7fdf78e0f5f61a8c71da9cb13d2ff71783c12c5f3a608fd700ecf15a339ee97f03fbfa31d8d7d7e081717f12e8fffd66bb9cfef5f12be9a3d3ff7ef9fd3f7c7fa127863a7d06c9cec5ccdaffa8270cd3ca611885cb70956c5d676bff95b62f7aa65ac6e126dc86bb64ed3e3c649e5a7b9c598b4967fcaaf3273d93f0149eb3672fc9daeb4cdb38bc255b8f69bd7b2de1fd87ce9ff4cc8785b01896c27258c92b7e685b4d96d6d22f6ff8d6613d5b935fead9089be9bb15b6c34ed84dd63e6bdb0bfd64e33afdb29fe3f7e6967ed273100ec351380e27e134593bcbdaceb38e46d2d50cadd00e9d50242dddf45b27c56a6ae9673dbd50868a021131092945689beabaa59a067441431ad1255d51da4f1ae798c9573d7443b77447f7f4408f3421726df444cf94bca3d71cabdb69dce82d8ce8dd3cfbaa87e6698116698996698556696da62dd23a6dd0266dd136edd02eed59dca8ff1b3dfb7440877444c7c9ca49b2f651db099dd25958a3736aa41d984f71aba9f91b3d2d6a873bea50415dea51491587646d69aa8d8953eb337d5d0e3b885bfd1b3da905e5417a95bee0218ff892aff89ac77c43ab7c6bdaf88eeff96116b7b5dfe879e4479ef0133ff34bb2f31a86fcc6ef3ccf0b74c48b88db52f214710be7bfd5b394b42cf30aaf263b6bbcce1bbcc95bbccd3bbceb719b6ae3bd69dcc219f77fa587f79396033e4c768ef8984ff834293ae3736ea41ebc15eeb89dbaf1e28736d65fe9e16ed2d2e392ab3440a95b94304a2f752fa2b9571cc8850c6524973fb4c9d5cf7ae47aaa45c67223b772c723b99707794c9626f224cff222aff226efe9332f0bb268da6449963fea911559cd7129654dd66583bab2295bb22d3bd4945dd993be3c4f4f81eccb811cca51b27621c77222a71ff5242b67722e0d69262d2d69875a9ef924f5e13b52240b5d59969e94526950a26b7a4ffd9bc8a1aabca7deef831ead75a0173ad4915eea95a699a96aedc9533a898370afe3a4eb299da9822ef42659bb9567bd0beb7a9fb4c58f7af4411ff55a27faa4cffaa2af9ace1f8f528e0d5375b8d2f730d2791ae882dea4efa22e4919eee93ae9edeb727ac24c0f4f744557754dd7754337754bb7d3beafe573d809631deb8eece8ae2e262d7b494b3f69dc4fbff5434b97f5e0839e433dd2633dd1533dd3736d689347daca3539d94a7e6d693b3d7b493b69dfb296d4a3bf252bddcf7a82684fcbf43a16f43452eab2441751efc6533bbc467dba8afa434bb2b217a314fafe518ffd2bf56903d3142fd2ec40efa9d6d5e93b9cde0c7c42579fb5242b375ff5c0d230691ac54bd98b9aaae7f4165c0bad789547d3ec789de22366258e35c46427de7ed5932ddd4d35c5fbf8903c6ba5bb6140fd1fa3662d75df57f131e552579e3eeb4167903f3c8993f8a47da9e273caa3767cf964c73ee98e88afc9d3e6e7fc41ed714d6ff13dcee75d0ea9a67f5ccf5fb59996afe77d6669212ec6a5e4d93daf7c5cf975dec7cf977af88b191fac7cea313e8f7dffd75fbffd1bbcd1c249 + + + + diff --git a/muse2/muse/widgets/filedialog.cpp b/muse2/muse/widgets/filedialog.cpp new file mode 100644 index 00000000..6ffa6f69 --- /dev/null +++ b/muse2/muse/widgets/filedialog.cpp @@ -0,0 +1,534 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: filedialog.cpp,v 1.3.2.3 2005/06/19 06:32:07 lunar_shuttle Exp $ +// (C) Copyright 2000 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "filedialog.h" +#include "fdialogbuttons.h" +#include "../globals.h" + +MFileDialog::ViewType MFileDialog::lastViewUsed = GLOBAL_VIEW; +QString MFileDialog::lastUserDir = ""; +QString MFileDialog::lastGlobalDir = ""; + +//--------------------------------------------------------- +// createDir +// return true if dir could not created +//--------------------------------------------------------- + +static bool createDir(const QString& s) + { + QString sl("/"); + QStringList l = QStringList::split(sl, s); + QString path(sl); + QDir dir; + for (QStringList::Iterator it = l.begin(); it != l.end(); ++it) { + dir.setPath(path); + if (!QDir(path + sl + *it).exists()) { + if (!dir.mkdir(*it)) { + printf("mkdir failed: %s %s\n", + path.latin1(), (*it).latin1()); + return true; + } + } + path += sl; + path += *it; + } + return false; + } + +//--------------------------------------------------------- +// testDirCreate +// return true if dir does not exist +//--------------------------------------------------------- + +static bool testDirCreate(QWidget* parent, const QString& path) + { + QDir dir(path); + if (!dir.exists()) { + int n = QMessageBox::information(parent, + QWidget::tr("MusE: get file name"), + QWidget::tr("the directory\n") + path + + QWidget::tr("\ndoes not exist\ncreate?"), + QWidget::tr("&Create"), + QWidget::tr("Cancel"), + QString::null, 1, 1); + if (n == 0) { + if (createDir(path)) { + QMessageBox::critical(parent, + QWidget::tr("MusE: create directory"), + QWidget::tr("creating dir failed") + ); + return true; + } + return false; + } + return true; + } + return false; + } + +//--------------------------------------------------------- +// globalToggled +//--------------------------------------------------------- + +void MFileDialog::globalToggled(bool flag) + { + if (flag) { + buttons->userButton->setOn(!flag); + buttons->projectButton->setOn(!flag); + if (lastGlobalDir.isEmpty()) + lastGlobalDir = museGlobalShare + QString("/") + baseDir; // Initialize if first time + QString dir = lastGlobalDir; + setDir(dir); + lastViewUsed = GLOBAL_VIEW; + } + } + +//--------------------------------------------------------- +// userToggled +//--------------------------------------------------------- + +void MFileDialog::userToggled(bool flag) + { + if (flag) { + buttons->globalButton->setOn(!flag); + buttons->projectButton->setOn(!flag); + + + if (lastUserDir.isEmpty()) { + lastUserDir = museUser + QString("/") + baseDir; // Initialize if first time + } + + if (testDirCreate(this, lastUserDir)) + setDir(museUser); + else + setDir(lastUserDir); + + lastViewUsed = USER_VIEW; + } + } + +//--------------------------------------------------------- +// projectToggled +//--------------------------------------------------------- + +void MFileDialog::projectToggled(bool flag) + { + if (flag) { + buttons->globalButton->setOn(!flag); + buttons->userButton->setOn(!flag); + + QString s; + if (museProject == museProjectInitPath ) { + // if project path is uninitialized, meaning it is still set to museProjectInitPath. + // then project path is set to current pwd instead. + s = QString(getcwd(0,0)) + QString("/"); + } + else + s = museProject + QString("/"); // + baseDir; + + if (testDirCreate(this, s)) + setDir(museProject); + else + setDir(s); + lastViewUsed = PROJECT_VIEW; + } + } + + +//--------------------------------------------------------- +// MFileDialog +//--------------------------------------------------------- + +MFileDialog::MFileDialog(const QString& dir, + const QString& filter, QWidget* parent, bool writeFlag) + : Q3FileDialog(QString("."), filter, parent, 0, true) + { + showButtons = false; + if (dir.length() > 0 && dir[0] == QChar('/')) { + buttons = 0; + setDir(dir); + } + else { + baseDir = dir; + showButtons = true; + buttons = new FileDialogButtons(this, "fdialogbuttons"); + addLeftWidget(buttons); + connect(buttons->globalButton, SIGNAL(toggled(bool)), SLOT(globalToggled(bool))); + connect(buttons->userButton, SIGNAL(toggled(bool)), SLOT(userToggled(bool))); + connect(buttons->projectButton, SIGNAL(toggled(bool)), SLOT(projectToggled(bool))); + connect(this, SIGNAL(dirEntered(const QString&)), SLOT(directoryChanged(const QString&))); + if (writeFlag) { + buttons->globalButton->setEnabled(false); + switch (lastViewUsed) { + case GLOBAL_VIEW: + case PROJECT_VIEW: + buttons->projectButton->setOn(true); + break; + + case USER_VIEW: + buttons->userButton->setOn(true); + break; + } + } + else { + switch (lastViewUsed) { + case GLOBAL_VIEW: + buttons->globalButton->setOn(true); + break; + + case PROJECT_VIEW: + buttons->projectButton->setOn(true); + break; + + case USER_VIEW: + buttons->userButton->setOn(true); + break; + } + + } + buttons->loadAllGroup->setShown(false); + } + } + +//--------------------------------------------------------- +// MFileDialog::directoryChanged +//--------------------------------------------------------- +void MFileDialog::directoryChanged(const QString&) + { + ViewType currentView = GLOBAL_VIEW; + const QDir* ndir = dir(); + QString newdir = ndir->absPath().latin1(); + delete ndir; // We're owners of this one so we should delete it + if (buttons->projectButton->isOn()) + currentView = PROJECT_VIEW; + else if (buttons->userButton->isOn()) + currentView = USER_VIEW; + + switch (currentView) { + case GLOBAL_VIEW: + lastGlobalDir = newdir; + break; + + case USER_VIEW: + lastUserDir = newdir; + break; + + case PROJECT_VIEW: // Do nothing + default: + break; + } + } + +//--------------------------------------------------------- +// ContentsPreview +//--------------------------------------------------------- + +ContentsPreview::~ContentsPreview() + { + if (bg) + delete bg; + } + +//--------------------------------------------------------- +// ContentsPreview::showPreview +//--------------------------------------------------------- + +void ContentsPreview::previewUrl(const Q3Url& url) + { + if (!url.isLocalFile()) + return; + if (url.path() == path) + return; + path = url.path(); + if (bg) + delete bg; + bg = new QPixmap(path); + if (bg) + setBackgroundPixmap(*bg); + } + +//--------------------------------------------------------- +// getFilterExtension +//--------------------------------------------------------- + +QString getFilterExtension(const QString &filter) +{ + // + // Return the first extension found. Must contain at least one * character. + // + + int pos = filter.find('*'); + if(pos == -1) + return QString(); + + QString filt; + int len = filter.length(); + ++pos; + for( ; pos < len; ++pos) + { + QChar c = filter[pos]; + if((c == ')') || (c == ';') || (c == ',') || (c == ' ')) + break; + filt += filter[pos]; + } + return filt; +} + +//--------------------------------------------------------- +// getOpenFileName +//--------------------------------------------------------- + +QString getOpenFileName(const QString &startWith, + //const char** filters, QWidget* parent, const QString& name, bool* all) + const QStringList& filters, QWidget* parent, const QString& name, bool* all) + { + QString initialSelection; + MFileDialog *dlg = new MFileDialog(startWith, QString::null, parent, false); + dlg->setFilters(filters); + dlg->setCaption(name); + if (all) + dlg->buttons->loadAllGroup->setShown(true); + if (!initialSelection.isEmpty()) + dlg->setSelection(initialSelection); + dlg->setMode(Q3FileDialog::ExistingFile); + QString result; + if (dlg->exec() == QDialog::Accepted) { + result = dlg->selectedFile(); + if (all) { + *all = dlg->buttons->loadAllButton->isOn(); + } + } + delete dlg; + return result; + } + +//--------------------------------------------------------- +// getSaveFileName +//--------------------------------------------------------- + +QString getSaveFileName(const QString &startWith, + //const char** filters, QWidget* parent, const QString& name) + const QStringList& filters, QWidget* parent, const QString& name) + { + MFileDialog *dlg = new MFileDialog(startWith, QString::null, parent, true); + dlg->setFilters(filters); + dlg->setCaption(name); + dlg->setMode(Q3FileDialog::AnyFile); + QString result; + if (dlg->exec() == QDialog::Accepted) + result = dlg->selectedFile(); + + + // Added by T356. + if(!result.isEmpty()) + { + QString filt = dlg->selectedFilter(); + filt = getFilterExtension(filt); + // Do we have a valid extension? + if(!filt.isEmpty()) + { + // If the rightmost characters of the filename do not already contain + // the extension, add the extension to the filename. + //if(result.right(filt.length()) != filt) + if(!result.endsWith(filt)) + result += filt; + } + else + { + // No valid extension, or just * was given. Although it would be nice to allow no extension + // or any desired extension by commenting this section out, it's probably not a good idea to do so. + // + // NOTE: Most calls to this routine getSaveFileName() are followed by fileOpen(), + // which can tack on its own extension, but only if the *complete* extension is blank. + // So there is some overlap going on. Enabling this actually stops that action, + // but only if there are no errors in the list of filters. fileOpen() will act as a 'catchall'. + // + // Force the filter list to the first one (the preferred one), and then get the filter. + dlg->setSelectedFilter(0); + filt = dlg->selectedFilter(); + filt = getFilterExtension(filt); + + // Do we have a valid extension? + if(!filt.isEmpty()) + { + // If the rightmost characters of the filename do not already contain + // the extension, add the extension to the filename. + //if(result.right(filt.length()) != filt) + if(!result.endsWith(filt)) + result += filt; + } + } + } + + delete dlg; + return result; + } + +//--------------------------------------------------------- +// getImageFileName +//--------------------------------------------------------- + +QString getImageFileName(const QString& startWith, + //const char** filters, QWidget* parent, const QString& name) + const QStringList& filters, QWidget* parent, const QString& name) + { + QString initialSelection; + QString* workingDirectory = new QString(QDir::currentDirPath()); + if (!startWith.isEmpty() ) { + QFileInfo fi(startWith); + if (fi.exists() && fi.isDir()) { + *workingDirectory = startWith; + } + else if (fi.exists() && fi.isFile()) { + *workingDirectory = fi.dirPath(TRUE); + initialSelection = fi.absFilePath(); + } + } + MFileDialog *dlg = new MFileDialog(*workingDirectory, QString::null, + parent); + + dlg->setContentsPreviewEnabled(true); + ContentsPreview* preview = new ContentsPreview(dlg); + dlg->setContentsPreview(preview, preview); + dlg->setPreviewMode(Q3FileDialog::Contents); + + dlg->setCaption(name); + dlg->setFilters(filters); + dlg->setMode(Q3FileDialog::ExistingFile); + QString result; + if (!initialSelection.isEmpty()) + dlg->setSelection( initialSelection); + if (dlg->exec() == QDialog::Accepted) { + result = dlg->selectedFile(); + } + delete dlg; + return result; + } + +//--------------------------------------------------------- +// fileOpen +// opens file "name" with extension "ext" in mode "mode" +// handles "name.ext.bz2" and "name.ext.gz" +// +// mode = "r" or "w" +// popenFlag set to true on return if file was opened +// with popen() (and therefore must be closed +// with pclose()) +// 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 +//--------------------------------------------------------- + +FILE* fileOpen(QWidget* parent, QString name, const QString& ext, + const char* mode, bool& popenFlag, bool noError, + bool overwriteWarning) + { + QFileInfo info(name); + QString zip; + + popenFlag = false; + if (info.extension(true) == "") { + name += ext; + info.setFile(name); + } + else if (info.extension(false) == "gz") { + popenFlag = true; + zip = QString("gzip"); + } + else if (info.extension(false) == "bz2") { + popenFlag = true; + zip = QString("bzip2"); + } + + if (strcmp(mode,"w") == 0 && 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; + } + } + FILE* fp = 0; + if (popenFlag) { + if (strcmp(mode, "r") == 0) + zip += QString(" -d < "); + else + zip += QString(" > "); + zip += name; + fp = popen(zip.ascii(), mode); + } + else { + fp = fopen(name.ascii(), mode); + } + if (fp == 0 && !noError) { + QString s(QWidget::tr("Open File\n") + name + QWidget::tr("\nfailed: ") + + QString(strerror(errno))); + QMessageBox::critical(parent, QWidget::tr("MusE: Open File"), s); + return 0; + } + return fp; + } + +//--------------------------------------------------------- +// MFile +//--------------------------------------------------------- + +MFile::MFile(const QString& _path, const QString& _ext) + : path(_path), ext(_ext) + { + f = 0; + isPopen = false; + } + +MFile::~MFile() + { + if (f) { + if (isPopen) + pclose(f); + else + fclose(f); + } + } + +//--------------------------------------------------------- +// open +//--------------------------------------------------------- + +//FILE* MFile::open(const char* mode, const char** pattern, +FILE* MFile::open(const char* mode, const QStringList& pattern, + QWidget* parent, bool noError, bool warnIfOverwrite, const QString& caption) + { + QString name; + if (strcmp(mode, "r") == 0) + name = getOpenFileName(path, pattern, parent, caption, 0); + else + name = getSaveFileName(path, pattern, parent, caption); + if (name.isEmpty()) + return 0; + f = fileOpen(parent, name, ext, mode, isPopen, noError, + warnIfOverwrite); + return f; + } + diff --git a/muse2/muse/widgets/filedialog.h b/muse2/muse/widgets/filedialog.h new file mode 100644 index 00000000..2208b5bc --- /dev/null +++ b/muse2/muse/widgets/filedialog.h @@ -0,0 +1,92 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: filedialog.h,v 1.2.2.2 2008/01/19 13:33:46 wschweer Exp $ +// (C) Copyright 2000 Werner Schweer (ws@seh.de) +//========================================================= + +#include +//Added by qt3to4: +#include + +class FileDialogButtons; +class QStringList; + +//--------------------------------------------------------- +// MFileDialog +//--------------------------------------------------------- + +class MFileDialog : public Q3FileDialog { + Q_OBJECT + + enum ViewType { GLOBAL_VIEW, PROJECT_VIEW, USER_VIEW }; //!< The three different viewtypes + static ViewType lastViewUsed; + static QString lastUserDir, lastGlobalDir; + bool showButtons; + QString baseDir; + + private slots: + void globalToggled(bool); + void userToggled(bool); + void projectToggled(bool); + void directoryChanged(const QString& directory); + + public: + FileDialogButtons* buttons; + MFileDialog(const QString& dir, const QString& filter = QString::null, + QWidget* parent = 0, bool writeFlag = false); + }; + +//--------------------------------------------------------- +// ContentsPreview +//--------------------------------------------------------- + +class ContentsPreview : public QWidget, public Q3FilePreview { + Q_OBJECT + + virtual void previewUrl(const Q3Url &url); + QString path; + QPixmap* bg; + + public: + ContentsPreview(QWidget* parent, const char* name=0) + : QWidget(parent, name) { + bg = 0; + } + ~ContentsPreview(); + }; + +//QString getSaveFileName(const QString& startWidth, const char** filter, +QString getSaveFileName(const QString& startWidth, const QStringList& filters, + QWidget* parent, const QString& name); +//QString getOpenFileName(const QString& startWidth, const char** filter, +QString getOpenFileName(const QString& startWidth, const QStringList& filters, + QWidget* parent, const QString& name, bool* openAll); +//QString getImageFileName(const QString& startWith, const char** filters, +QString getImageFileName(const QString& startWith, const QStringList& filters, + QWidget* parent, const QString& name); + +FILE* fileOpen(QWidget*, QString, const QString&, + const char*, bool&, bool = false, bool = false); + + +//--------------------------------------------------------- +// MFile +// "Muse" File +//--------------------------------------------------------- + +class MFile { + bool isPopen; + FILE* f; + QString path; + QString ext; + + public: + MFile(const QString& path, const QString& ext); + ~MFile(); + //FILE* open(const char* mode, const char** pattern, + FILE* open(const char* mode, const QStringList& pattern, + QWidget* parent, bool noError, + bool warnIfOverwrite, const QString& caption); + }; + diff --git a/muse2/muse/widgets/fontsel.cpp b/muse2/muse/widgets/fontsel.cpp new file mode 100644 index 00000000..a6808ff1 --- /dev/null +++ b/muse2/muse/widgets/fontsel.cpp @@ -0,0 +1,137 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: fontsel.cpp,v 1.1.1.1 2003/10/27 18:55:02 wschweer Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include +#include +//#include +#include +#include +#include +#include +#include +#include +//Added by qt3to4: +#include + +#include "icons.h" +#include "fontsel.h" + +//--------------------------------------------------------- +// FontSel +//--------------------------------------------------------- + +FontSel::FontSel(QWidget* parent, const QFont& f, const QString& name) + : QWidget(parent) + { + _font = f; + Q3HBoxLayout* box = new Q3HBoxLayout(this); + + cb = new QComboBox(this); + cb->setFixedWidth(80); + cb->insertItem(QString("arial")); + cb->insertItem(QString("avantgarde")); + cb->insertItem(QString("charter")); + cb->insertItem(QString("garamond")); + cb->insertItem(QString("gillsans")); + cb->insertItem(QString("helvetica")); + cb->insertItem(QString("times")); + cb->insertItem(QString("terminal")); + cb->insertItem(QString("utopia")); + cb->insertItem(QString("new century schoolbook")); + + QLabel* l1 = new QLabel(tr("Size:"), this); + s1 = new QSpinBox(8, 48, 1, this); + + fcb1 = new QToolButton(this); + fcb1->setToggleButton(true); + fcb1->setPixmap(*(boldIcon)); + + fcb2 = new QToolButton(this); + fcb2->setToggleButton(true); + fcb2->setPixmap(*(italicIcon)); + + fcb3 = new QToolButton(this); + fcb3->setToggleButton(true); + fcb3->setPixmap(*(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->setOn(_font.weight() == QFont::Bold); + fcb2->setOn(_font.italic()); + fcb3->setOn(_font.underline()); + int i; + for (i = 0; i < cb->count(); ++i) { + QString s = cb->text(i); + if (s == _font.family()) { + cb->setCurrentItem(i); + break; + } + } + if (i == cb->count()) { + cb->insertItem(_font.family()); + cb->setCurrentItem(i); + } + } + +//--------------------------------------------------------- +// font +//--------------------------------------------------------- + +const QFont& FontSel::font() + { + _font.setPointSize(s1->value()); + _font.setWeight(fcb1->isOn() ? QFont::Bold : QFont::Normal); + _font.setItalic(fcb2->isOn()); + _font.setUnderline(fcb3->isOn()); + _font.setFamily(cb->currentText()); + return _font; + } + diff --git a/muse2/muse/widgets/fontsel.h b/muse2/muse/widgets/fontsel.h new file mode 100644 index 00000000..1b906aab --- /dev/null +++ b/muse2/muse/widgets/fontsel.h @@ -0,0 +1,45 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: fontsel.h,v 1.1.1.1.2.1 2008/01/19 13:33:46 wschweer Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __FONTSEL_H__ +#define __FONTSEL_H__ + +#include +#include "song.h" + +class QFont; +class QSpinBox; +class QToolButton; +class QComboBox; + +//--------------------------------------------------------- +// FontSel +//--------------------------------------------------------- + +class FontSel : public QWidget { + Q_OBJECT + + QFont _font; + QSpinBox* s1; + QToolButton* fcb1; + QToolButton* fcb2; + QToolButton* fcb3; + QComboBox* cb; + + void setFont(); + + private slots: + void fontSelect(); + + public: + FontSel(QWidget* parent, const QFont&, const QString&); + const QFont& font(); + }; + + +#endif + diff --git a/muse2/muse/widgets/gatetime.cpp b/muse2/muse/widgets/gatetime.cpp new file mode 100644 index 00000000..412d4d4c --- /dev/null +++ b/muse2/muse/widgets/gatetime.cpp @@ -0,0 +1,46 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: gatetime.cpp,v 1.1.1.1 2003/10/27 18:54:37 wschweer Exp $ +// (C) Copyright 2001 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include +//#include +#include + +#include "gatetime.h" + +#include "song.h" + +//--------------------------------------------------------- +// GateTime +//--------------------------------------------------------- + +GateTime::GateTime(QWidget* parent, const char* name) + : GateTimeBase(parent, name, true) + { + } + +//--------------------------------------------------------- +// accept +//--------------------------------------------------------- + +void GateTime::accept() + { + _range = rangeGroup->id(rangeGroup->selected()); + _rateVal = rate->value(); + _offsetVal = offset->value(); + GateTimeBase::accept(); + } + +//--------------------------------------------------------- +// setRange +//--------------------------------------------------------- + +void GateTime::setRange(int id) + { + rangeGroup->setButton(id); + } + diff --git a/muse2/muse/widgets/gatetime.h b/muse2/muse/widgets/gatetime.h new file mode 100644 index 00000000..c3e5b883 --- /dev/null +++ b/muse2/muse/widgets/gatetime.h @@ -0,0 +1,36 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: gatetime.h,v 1.1.1.1.2.1 2008/01/19 13:33:47 wschweer Exp $ +// (C) Copyright 2001 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __GATETIME_H__ +#define __GATETIME_H__ + +#include "gatetimebase.h" + +//--------------------------------------------------------- +// GateTime +//--------------------------------------------------------- + +class GateTime : public GateTimeBase { + Q_OBJECT + + int _range; + int _rateVal; + int _offsetVal; + + protected slots: + void accept(); + + public: + GateTime(QWidget* parent, const char* name = 0); + void setRange(int id); + int range() const { return _range; } + int rateVal() const { return _rateVal; } + int offsetVal() const { return _offsetVal; } + }; + +#endif + diff --git a/muse2/muse/widgets/gatetimebase.ui b/muse2/muse/widgets/gatetimebase.ui new file mode 100644 index 00000000..fe696076 --- /dev/null +++ b/muse2/muse/widgets/gatetimebase.ui @@ -0,0 +1,285 @@ + +GateTimeBase + + QDialog + + name + GateTimeBase + + + geometry + + 0 + 0 + 275 + 266 + + + + caption + MusE: Modify Gate Time + + + + margin + 11 + + + spacing + 6 + + + QButtonGroup + + name + rangeGroup + + + title + Range + + + exclusive + true + + + + margin + 11 + + + spacing + 6 + + + QRadioButton + + name + RadioButton5 + + + text + All Events + + + buttonGroupId + 0 + + + + QRadioButton + + name + RadioButton6 + + + text + Selected Events + + + checked + true + + + buttonGroupId + 1 + + + + QRadioButton + + name + RadioButton7 + + + text + Looped Events + + + buttonGroupId + 2 + + + + QRadioButton + + name + RadioButton8 + + + text + Selected & Looped + + + buttonGroupId + 3 + + + + + + QGroupBox + + name + GroupBox3 + + + title + Values + + + + margin + 11 + + + spacing + 6 + + + QLabel + + name + TextLabel3 + + + text + Rate: + + + + QLabel + + name + TextLabel4 + + + text + Offset: + + + + QSpinBox + + name + rate + + + suffix + % + + + maxValue + 200 + + + value + 100 + + + + QSpinBox + + name + offset + + + maxValue + 999 + + + minValue + -999 + + + lineStep + 1 + + + + + + QLayoutWidget + + name + Layout3 + + + + margin + 0 + + + spacing + 6 + + + + name + Spacer1 + + + orientation + Horizontal + + + sizeType + Expanding + + + sizeHint + + 20 + 20 + + + + + QPushButton + + name + okButton + + + text + OK + + + autoDefault + false + + + default + true + + + + QPushButton + + name + cancelButton + + + text + Cancel + + + + + + + + + okButton + clicked() + GateTimeBase + accept() + + + cancelButton + clicked() + GateTimeBase + reject() + + + diff --git a/muse2/muse/widgets/genset.cpp b/muse2/muse/widgets/genset.cpp new file mode 100644 index 00000000..79f190d0 --- /dev/null +++ b/muse2/muse/widgets/genset.cpp @@ -0,0 +1,444 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: genset.cpp,v 1.7.2.8 2009/12/01 03:52:40 terminator356 Exp $ +// +// (C) Copyright 2001-2004 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include +#include +#include +#include +#include +#include +#include +//Added by qt3to4: +#include + +#include "genset.h" +#include "app.h" +#include "gconfig.h" +#include "midiseq.h" +#include "globals.h" + +static int rtcResolutions[] = { + 1024, 2048, 4096, 8192, 16384, 32768 + }; +static int divisions[] = { + 48, 96, 192, 384, 768, 1536, 3072, 6144, 12288 + }; +static int dummyAudioBufSizes[] = { + 16, 32, 64, 128, 256, 512, 1024, 2048 + }; + +//--------------------------------------------------------- +// GlobalSettingsConfig +//--------------------------------------------------------- + +GlobalSettingsConfig::GlobalSettingsConfig(QWidget* parent, const char* name) + : GlobalSettingsDialogBase(parent, name) + { + for (unsigned i = 0; i < sizeof(rtcResolutions)/sizeof(*rtcResolutions); ++i) { + if (rtcResolutions[i] == config.rtcTicks) { + rtcResolutionSelect->setCurrentItem(i); + break; + } + } + for (unsigned i = 0; i < sizeof(divisions)/sizeof(*divisions); ++i) { + if (divisions[i] == config.division) { + midiDivisionSelect->setCurrentItem(i); + break; + } + } + for (unsigned i = 0; i < sizeof(divisions)/sizeof(*divisions); ++i) { + if (divisions[i] == config.guiDivision) { + guiDivisionSelect->setCurrentItem(i); + break; + } + } + for (unsigned i = 0; i < sizeof(dummyAudioBufSizes)/sizeof(*dummyAudioBufSizes); ++i) { + if (dummyAudioBufSizes[i] == config.dummyAudioBufSize) { + dummyAudioSize->setCurrentItem(i); + break; + } + } + + guiRefreshSelect->setValue(config.guiRefresh); + minSliderSelect->setValue(int(config.minSlider)); + minMeterSelect->setValue(config.minMeter); + freewheelCheckBox->setChecked(config.freewheelMode); + denormalCheckBox->setChecked(config.useDenormalBias); + outputLimiterCheckBox->setChecked(config.useOutputLimiter); + vstInPlaceCheckBox->setChecked(config.vstInPlace); + dummyAudioRate->setValue(config.dummyAudioSampleRate); + + //DummyAudioDevice* dad = dynamic_cast(audioDevice); + //dummyAudioRealRate->setText(dad ? QString().setNum(sampleRate) : "---"); + dummyAudioRealRate->setText(QString().setNum(sampleRate)); + + helpBrowser->setText(config.helpBrowser); + startSongEntry->setText(config.startSong); + startSongGroup->setButton(config.startMode); + + showTransport->setChecked(config.transportVisible); + showBigtime->setChecked(config.bigTimeVisible); + //showMixer->setChecked(config.mixerVisible); + showMixer->setChecked(config.mixer1Visible); + showMixer2->setChecked(config.mixer2Visible); + + arrangerX->setValue(config.geometryMain.x()); + arrangerY->setValue(config.geometryMain.y()); + arrangerW->setValue(config.geometryMain.width()); + arrangerH->setValue(config.geometryMain.height()); + + 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()); + + //mixerX->setValue(config.geometryMixer.x()); + //mixerY->setValue(config.geometryMixer.y()); + //mixerW->setValue(config.geometryMixer.width()); + //mixerH->setValue(config.geometryMixer.height()); + mixerX->setValue(config.mixer1.geometry.x()); + mixerY->setValue(config.mixer1.geometry.y()); + mixerW->setValue(config.mixer1.geometry.width()); + mixerH->setValue(config.mixer1.geometry.height()); + mixer2X->setValue(config.mixer2.geometry.x()); + mixer2Y->setValue(config.mixer2.geometry.y()); + mixer2W->setValue(config.mixer2.geometry.width()); + mixer2H->setValue(config.mixer2.geometry.height()); + + //setMixerCurrent->setEnabled(muse->mixerWindow()); + setMixerCurrent->setEnabled(muse->mixer1Window()); + setMixer2Current->setEnabled(muse->mixer2Window()); + + setBigtimeCurrent->setEnabled(muse->bigtimeWindow()); + setTransportCurrent->setEnabled(muse->transportWindow()); + + showSplash->setChecked(config.showSplashScreen); + showDidYouKnow->setChecked(config.showDidYouKnow); + externalWavEditorSelect->setText(config.externalWavEditor); + oldStyleStopCheckBox->setChecked(config.useOldStyleStopShortCut); + moveArmedCheckBox->setChecked(config.moveArmedCheckBox); + + //updateSettings(); // TESTING + + connect(applyButton, SIGNAL(clicked()), SLOT(apply())); + connect(okButton, SIGNAL(clicked()), SLOT(ok())); + connect(cancelButton, SIGNAL(clicked()), SLOT(cancel())); + connect(setMixerCurrent, SIGNAL(clicked()), SLOT(mixerCurrent())); + connect(setMixer2Current, SIGNAL(clicked()), SLOT(mixer2Current())); + connect(setBigtimeCurrent, SIGNAL(clicked()), SLOT(bigtimeCurrent())); + connect(setArrangerCurrent, SIGNAL(clicked()), SLOT(arrangerCurrent())); + connect(setTransportCurrent, SIGNAL(clicked()), SLOT(transportCurrent())); + } + +//--------------------------------------------------------- +// updateSettings +//--------------------------------------------------------- + +void GlobalSettingsConfig::updateSettings() +{ + for (unsigned i = 0; i < sizeof(rtcResolutions)/sizeof(*rtcResolutions); ++i) { + if (rtcResolutions[i] == config.rtcTicks) { + rtcResolutionSelect->setCurrentItem(i); + break; + } + } + for (unsigned i = 0; i < sizeof(divisions)/sizeof(*divisions); ++i) { + if (divisions[i] == config.division) { + midiDivisionSelect->setCurrentItem(i); + break; + } + } + for (unsigned i = 0; i < sizeof(divisions)/sizeof(*divisions); ++i) { + if (divisions[i] == config.guiDivision) { + guiDivisionSelect->setCurrentItem(i); + break; + } + } + for (unsigned i = 0; i < sizeof(dummyAudioBufSizes)/sizeof(*dummyAudioBufSizes); ++i) { + if (dummyAudioBufSizes[i] == config.dummyAudioBufSize) { + dummyAudioSize->setCurrentItem(i); + break; + } + } + + guiRefreshSelect->setValue(config.guiRefresh); + minSliderSelect->setValue(int(config.minSlider)); + minMeterSelect->setValue(config.minMeter); + freewheelCheckBox->setChecked(config.freewheelMode); + denormalCheckBox->setChecked(config.useDenormalBias); + outputLimiterCheckBox->setChecked(config.useOutputLimiter); + vstInPlaceCheckBox->setChecked(config.vstInPlace); + dummyAudioRate->setValue(config.dummyAudioSampleRate); + + //DummyAudioDevice* dad = dynamic_cast(audioDevice); + //dummyAudioRealRate->setText(dad ? QString().setNum(sampleRate) : "---"); + dummyAudioRealRate->setText(QString().setNum(sampleRate)); + + helpBrowser->setText(config.helpBrowser); + startSongEntry->setText(config.startSong); + startSongGroup->setButton(config.startMode); + + showTransport->setChecked(config.transportVisible); + showBigtime->setChecked(config.bigTimeVisible); + //showMixer->setChecked(config.mixerVisible); + showMixer->setChecked(config.mixer1Visible); + showMixer2->setChecked(config.mixer2Visible); + + arrangerX->setValue(config.geometryMain.x()); + arrangerY->setValue(config.geometryMain.y()); + arrangerW->setValue(config.geometryMain.width()); + arrangerH->setValue(config.geometryMain.height()); + + 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()); + + //mixerX->setValue(config.geometryMixer.x()); + //mixerY->setValue(config.geometryMixer.y()); + //mixerW->setValue(config.geometryMixer.width()); + //mixerH->setValue(config.geometryMixer.height()); + mixerX->setValue(config.mixer1.geometry.x()); + mixerY->setValue(config.mixer1.geometry.y()); + mixerW->setValue(config.mixer1.geometry.width()); + mixerH->setValue(config.mixer1.geometry.height()); + mixer2X->setValue(config.mixer2.geometry.x()); + mixer2Y->setValue(config.mixer2.geometry.y()); + mixer2W->setValue(config.mixer2.geometry.width()); + mixer2H->setValue(config.mixer2.geometry.height()); + + //setMixerCurrent->setEnabled(muse->mixerWindow()); + setMixerCurrent->setEnabled(muse->mixer1Window()); + setMixer2Current->setEnabled(muse->mixer2Window()); + + setBigtimeCurrent->setEnabled(muse->bigtimeWindow()); + setTransportCurrent->setEnabled(muse->transportWindow()); + + showSplash->setChecked(config.showSplashScreen); + showDidYouKnow->setChecked(config.showDidYouKnow); + externalWavEditorSelect->setText(config.externalWavEditor); + oldStyleStopCheckBox->setChecked(config.useOldStyleStopShortCut); + moveArmedCheckBox->setChecked(config.moveArmedCheckBox); +} + +//--------------------------------------------------------- +// showEvent +//--------------------------------------------------------- + +void GlobalSettingsConfig::showEvent(QShowEvent* e) +{ + QDialog::showEvent(e); + //updateSettings(); // TESTING +} + +//--------------------------------------------------------- +// apply +//--------------------------------------------------------- + +void GlobalSettingsConfig::apply() + { + int rtcticks = rtcResolutionSelect->currentItem(); + config.guiRefresh = guiRefreshSelect->value(); + config.minSlider = minSliderSelect->value(); + config.minMeter = minMeterSelect->value(); + config.freewheelMode = freewheelCheckBox->isChecked(); + config.useDenormalBias = denormalCheckBox->isChecked(); + config.useOutputLimiter = outputLimiterCheckBox->isChecked(); + config.vstInPlace = vstInPlaceCheckBox->isChecked(); + config.rtcTicks = rtcResolutions[rtcticks]; + config.helpBrowser = helpBrowser->text(); + config.startSong = startSongEntry->text(); + config.startMode = startSongGroup->selectedId(); + int das = dummyAudioSize->currentItem(); + config.dummyAudioBufSize = dummyAudioBufSizes[das]; + config.dummyAudioSampleRate = dummyAudioRate->value(); + + int div = midiDivisionSelect->currentItem(); + config.division = divisions[div]; + div = guiDivisionSelect->currentItem(); + config.guiDivision = divisions[div]; + + config.transportVisible = showTransport->isChecked(); + config.bigTimeVisible = showBigtime->isChecked(); + //config.mixerVisible = showMixer->isChecked(); + config.mixer1Visible = showMixer->isChecked(); + config.mixer2Visible = showMixer2->isChecked(); + + config.geometryMain.setX(arrangerX->value()); + config.geometryMain.setY(arrangerY->value()); + config.geometryMain.setWidth(arrangerW->value()); + config.geometryMain.setHeight(arrangerH->value()); + + 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.geometryMixer.setX(mixerX->value()); + //config.geometryMixer.setY(mixerY->value()); + //config.geometryMixer.setWidth(mixerW->value()); + //config.geometryMixer.setHeight(mixerH->value()); + config.mixer1.geometry.setX(mixerX->value()); + config.mixer1.geometry.setY(mixerY->value()); + config.mixer1.geometry.setWidth(mixerW->value()); + config.mixer1.geometry.setHeight(mixerH->value()); + config.mixer2.geometry.setX(mixer2X->value()); + config.mixer2.geometry.setY(mixer2Y->value()); + config.mixer2.geometry.setWidth(mixer2W->value()); + config.mixer2.geometry.setHeight(mixer2H->value()); + + config.showSplashScreen = showSplash->isChecked(); + config.showDidYouKnow = showDidYouKnow->isChecked(); + config.externalWavEditor = externalWavEditorSelect->text(); + config.useOldStyleStopShortCut = oldStyleStopCheckBox->isChecked(); + config.moveArmedCheckBox = moveArmedCheckBox->isChecked(); + //muse->showMixer(config.mixerVisible); + 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->mixerWindow(); + //if (w) { + // w->resize(config.geometryMixer.size()); + // w->move(config.geometryMixer.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->resize(config.geometryMain.size()); + muse->move(config.geometryMain.topLeft()); + + muse->setHeartBeat(); // set guiRefresh + midiSeq->msgSetRtc(); // set midi tick rate + muse->changeConfig(true); // save settings + } + +//--------------------------------------------------------- +// ok +//--------------------------------------------------------- + +void GlobalSettingsConfig::ok() + { + apply(); + close(); + } + +//--------------------------------------------------------- +// cancel +//--------------------------------------------------------- + +void GlobalSettingsConfig::cancel() + { + close(); + } + +//--------------------------------------------------------- +// mixerCurrent +//--------------------------------------------------------- + +void GlobalSettingsConfig::mixerCurrent() + { + QWidget* w = muse->mixer1Window(); + if (!w) + return; + QRect r(w->frameGeometry()); + mixerX->setValue(r.x()); + mixerY->setValue(r.y()); + mixerW->setValue(r.width()); + mixerH->setValue(r.height()); + } + +//--------------------------------------------------------- +// mixer2Current +//--------------------------------------------------------- + +void GlobalSettingsConfig::mixer2Current() + { + QWidget* w = muse->mixer2Window(); + if (!w) + return; + QRect r(w->frameGeometry()); + mixer2X->setValue(r.x()); + mixer2Y->setValue(r.y()); + mixer2W->setValue(r.width()); + mixer2H->setValue(r.height()); + } + +//--------------------------------------------------------- +// bigtimeCurrent +//--------------------------------------------------------- + +void GlobalSettingsConfig::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 GlobalSettingsConfig::arrangerCurrent() + { + QRect r(muse->frameGeometry()); + arrangerX->setValue(r.x()); + arrangerY->setValue(r.y()); + arrangerW->setValue(r.width()); + arrangerH->setValue(r.height()); + } + +//--------------------------------------------------------- +// transportCurrent +//--------------------------------------------------------- + +void GlobalSettingsConfig::transportCurrent() + { + QWidget* w = muse->transportWindow(); + if (!w) + return; + QRect r(w->frameGeometry()); + transportX->setValue(r.x()); + transportY->setValue(r.y()); + } + diff --git a/muse2/muse/widgets/genset.h b/muse2/muse/widgets/genset.h new file mode 100644 index 00000000..375cf197 --- /dev/null +++ b/muse2/muse/widgets/genset.h @@ -0,0 +1,41 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: genset.h,v 1.3 2004/01/25 09:55:17 wschweer Exp $ +// +// (C) Copyright 2001 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __GENSET_H__ +#define __GENSET_H__ + +#include "gensetbase.h" +//Added by qt3to4: +#include + +//--------------------------------------------------------- +// GlobalSettingsConfig +//--------------------------------------------------------- + +class GlobalSettingsConfig : public GlobalSettingsDialogBase { + Q_OBJECT + + private slots: + void updateSettings(); + void apply(); + void ok(); + void cancel(); + void mixerCurrent(); + void mixer2Current(); + void bigtimeCurrent(); + void arrangerCurrent(); + void transportCurrent(); + + protected: + void showEvent(QShowEvent*); + + public: + GlobalSettingsConfig(QWidget* parent=0, const char* name=0); + }; + +#endif diff --git a/muse2/muse/widgets/gensetbase.ui b/muse2/muse/widgets/gensetbase.ui new file mode 100644 index 00000000..5de2dbd7 --- /dev/null +++ b/muse2/muse/widgets/gensetbase.ui @@ -0,0 +1,1470 @@ + +GlobalSettingsDialogBase + + + GlobalSettingsDialogBase + + + + 0 + 0 + 494 + 499 + + + + MusE: Global Settings + + + + unnamed + + + 11 + + + 6 + + + + TabWidget2 + + + + 7 + 5 + 0 + 0 + + + + + TabPage + + + Application + + + + unnamed + + + + groupBox4 + + + + 5 + 5 + 0 + 0 + + + + Views + + + + unnamed + + + + transportY + + + 9999 + + + y-pos + + + + + showTransport + + + show + + + + + transportX + + + 9999 + + + x-pos + + + + + arrangerH + + + 9999 + + + height + + + + + arrangerW + + + 9999 + + + width + + + + + arrangerY + + + 9999 + + + y-pos + + + + + arrangerX + + + 9999 + + + x-pos + + + + + showBigtime + + + show + + + + + bigtimeX + + + 9999 + + + x-pos + + + + + bigtimeY + + + 9999 + + + y-pos + + + + + bigtimeW + + + 9999 + + + width + + + + + bigtimeH + + + 9999 + + + height + + + + + showMixer + + + show + + + + + showMixer2 + + + show + + + + + textLabel4 + + + + 5 + 0 + 0 + 0 + + + + Mixer A + + + + + textLabel4_2 + + + + 5 + 0 + 0 + 0 + + + + Mixer B + + + + + textLabel3 + + + + 5 + 0 + 0 + 0 + + + + Big Time + + + + + textLabel1_3 + + + + 5 + 0 + 0 + 0 + + + + Arranger + + + + + textLabel2 + + + + 5 + 0 + 0 + 0 + + + + Transport + + + + + mixerH + + + 9999 + + + height + + + + + mixerW + + + 9999 + + + width + + + + + mixerY + + + 9999 + + + y-pos + + + + + mixerX + + + 9999 + + + x-pos + + + + + setMixerCurrent + + + + 1 + 0 + 0 + 0 + + + + Cur + + + set current values + + + + + mixer2H + + + 9999 + + + height + + + + + mixer2W + + + 9999 + + + width + + + + + mixer2Y + + + 9999 + + + y-pos + + + + + mixer2X + + + 9999 + + + x-pos + + + + + setMixer2Current + + + + 1 + 0 + 0 + 0 + + + + Cur + + + set current values + + + + + setBigtimeCurrent + + + + 5 + 0 + 0 + 0 + + + + Cur + + + set current values + + + + + setArrangerCurrent + + + + 5 + 0 + 0 + 0 + + + + Cur + + + set current values + + + + + setTransportCurrent + + + + 5 + 0 + 0 + 0 + + + + Cur + + + set current values + + + + + + + groupBox3 + + + Start Muse + + + + unnamed + + + + layout12 + + + + unnamed + + + + layout5 + + + + unnamed + + + 9 + + + + showSplash + + + show splash screen + + + + + showDidYouKnow + + + show "Did you know?" dialog + + + + + spacer4 + + + Vertical + + + Expanding + + + + 20 + 20 + + + + + + + + spacer7_2 + + + Vertical + + + Expanding + + + + 20 + 51 + + + + + + layout2 + + + + unnamed + + + + textLabel1_2 + + + start song: + + + + + startSongEntry + + + + + + + startSongGroup + + + Start song + + + + startLastButton + + + + 13 + 12 + 222 + 20 + + + + start with last song + + + true + + + 0 + + + + + startEmptyButton + + + + 13 + 38 + 222 + 20 + + + + + 1 + 0 + 0 + 0 + + + + start with template: default.med + + + false + + + 1 + + + + + startSongButton + + + + 13 + 64 + 222 + 20 + + + + start with song + + + 2 + + + + + + + + + + + + tab + + + Audio + + + + unnamed + + + + GroupBox4 + + + Mixer + + + + unnamed + + + 11 + + + 6 + + + + minSliderSelect + + + dB + + + 0 + + + -100 + + + 10 + + + -60 + + + + + TextLabel3_2 + + + min. Meter Value + + + + + TextLabel2_2 + + + min. Slider Val + + + + + minMeterSelect + + + dB + + + 0 + + + -100 + + + 10 + + + -60 + + + + + freewheelLabel + + + Use Jack freewheel mode if possible. +(Speeds up bounce operations). + + + + + denormalCheckBox + + + + + + + + freewheelCheckBox + + + + + + + + textLabel1_5 + + + Enable denormal protection + + + + + textLabel1_5_2 + + + Enable output limiter + + + + + outputLimiterCheckBox + + + + + + + + vstInPlaceTextLabel + + + Enable in-place processing for VST plugins. +(Requires restart.) + + + + + vstInPlaceCheckBox + + + + + + Turn this off if VST Ladspa effect rack plugins do not work or feedback loudly, even if they are supposed to be in-place capable. + + + + + + + groupBox13 + + + External Waveditor + + + + unnamed + + + + layout6 + + + + unnamed + + + + layout12 + + + + unnamed + + + + textLabel2_2 + + + + 5 + 5 + 1 + 0 + + + + External Waveditor command + + + + + spacer13 + + + Horizontal + + + Expanding + + + + 60 + 23 + + + + + + externalWavEditorSelect + + + + 7 + 0 + 2 + 0 + + + + + + + + textLabel1_6 + + + + 8 + + + + Note: External editor opened from the internal editor. + + + + + + + + + dummyAudioGroupBox + + + Dummy Audio Driver (settings require restart) + + + + unnamed + + + + dummyAudioRateLabel + + + Preferred sample rate + + + + + dummyAudioRate + + + Hz + + + 200000 + + + 3000 + + + 10 + + + 44100 + + + Actual rate used depends on limitations of + timer used. If a high rate timer is available, + short periods can be used with high sample rates. +Period affects midi playback resolution. +Shorter periods are desirable. + + + + + dummyAudioRealRateLabel + + + Actual rate used now (dummy or not): + + + + + dummyAudioRealRate + + + --- + + + + + dummyAudioSizeLabel + + + Period size (Frames per period): + + + + + + 16 + + + + + 32 + + + + + 64 + + + + + 128 + + + + + 256 + + + + + 512 + + + + + 1024 + + + + + 2048 + + + + dummyAudioSize + + + + + + + + + tab + + + Midi + + + + unnamed + + + 11 + + + 6 + + + + GroupBox2 + + + Ticks + + + + unnamed + + + 11 + + + 6 + + + + TextLabel3 + + + RTC Resolution +(Ticks/Sec) + + + + + + 1024 + + + + + 2048 + + + + + 4096 + + + + + 8192 + + + + + 16384 + + + + + 32768 + + + + rtcResolutionSelect + + + + + midiResLabel + + + Midi Resolution +(Ticks/Quarternote) + + + + + + 48 + + + + + 96 + + + + + 192 + + + + + 384 + + + + + 768 + + + + + 1536 + + + + + 3072 + + + + + 6144 + + + + + 12288 + + + + midiDivisionSelect + + + 3 + + + + + TextLabel4 + + + Displayed Resolution +(Ticks/Quarternote) + + + + + + 48 + + + + + 96 + + + + + 192 + + + + + 384 + + + + + 768 + + + + + 1536 + + + + + 3072 + + + + + 6144 + + + + + 12288 + + + + guiDivisionSelect + + + 3 + + + + + + + + + tab + + + GUI + + + + unnamed + + + + textLabel1 + + + Help Browser: + + + + + TextLabel1 + + + GUI Refresh Rate + + + + + guiRefreshSelect + + + /sec + + + 100 + + + 2 + + + 20 + + + + + helpBrowser + + + + + spacer2 + + + Vertical + + + Expanding + + + + 20 + 240 + + + + + + spacer3 + + + Vertical + + + Expanding + + + + 20 + 240 + + + + + + oldStyleStopCheckBox + + + + 0 + 0 + 0 + 0 + + + + + + + + + moveArmedCheckBox + + + + 0 + 0 + 0 + 0 + + + + + + + + + spacer7 + + + Horizontal + + + Expanding + + + + 270 + 20 + + + + + + textLabel1_4 + + + Use old-style stop shortcut: + + + + + textLabel1_4_2 + + + Move single armed track with selection + + + + + spacer7_3 + + + Horizontal + + + Expanding + + + + 210 + 20 + + + + + + + + + Layout6 + + + + unnamed + + + 0 + + + 6 + + + + Spacer1 + + + Horizontal + + + Expanding + + + + 20 + 20 + + + + + + applyButton + + + &Apply + + + + + okButton + + + &Ok + + + true + + + + + cancelButton + + + &Cancel + + + + + + + + diff --git a/muse2/muse/widgets/header.cpp b/muse2/muse/widgets/header.cpp new file mode 100644 index 00000000..6cbf9c3a --- /dev/null +++ b/muse2/muse/widgets/header.cpp @@ -0,0 +1,62 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: header.cpp,v 1.1.1.1 2003/10/27 18:55:05 wschweer Exp $ +// (C) Copyright 2000 Werner Schweer (ws@seh.de) +//========================================================= + +#include "header.h" +#include "xml.h" +#include + +//--------------------------------------------------------- +// readStatus +//--------------------------------------------------------- + +void Header::readStatus(Xml& xml) + { + for (;;) { + Xml::Token token = xml.parse(); + const QString& tag = xml.s1(); + switch (token) { + case Xml::Error: + case Xml::End: + return; + case Xml::Text: + { + QStringList l = QStringList::split(QString(" "), tag); + int index = count(); + for (QStringList::Iterator it = l.begin(); it != l.end(); ++it) { + int section = (*it).toInt(); + moveSection(section, index); + --index; + } + } + break; + case Xml::TagStart: + xml.unknown("Header"); + break; + case Xml::TagEnd: + if (tag == name()) + return; + default: + break; + } + } + } + +//--------------------------------------------------------- +// writeStatus +//--------------------------------------------------------- + +void Header::writeStatus(int level, Xml& xml) const + { + //xml.nput(level, "<%s> ", name()); + xml.nput(level, "<%s> ", Xml::xmlString(name()).latin1()); + int n = count() - 1; + for (int i = n; i >= 0; --i) + xml.nput("%d ", mapToSection(i)); + //xml.put("", name()); + xml.put("", Xml::xmlString(name()).latin1()); + } + diff --git a/muse2/muse/widgets/header.h b/muse2/muse/widgets/header.h new file mode 100644 index 00000000..11b69b66 --- /dev/null +++ b/muse2/muse/widgets/header.h @@ -0,0 +1,30 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: header.h,v 1.1.1.1 2003/10/27 18:55:03 wschweer Exp $ +// (C) Copyright 2000 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __HEADER_H__ +#define __HEADER_H__ + +#include + +class Xml; + +//--------------------------------------------------------- +// Header +//--------------------------------------------------------- + +class Header : public Q3Header { + Q_OBJECT + + public: + Header(QWidget* parent=0, const char* name=0) + : Q3Header(parent, name) {} + Header(int sections, QWidget* parent=0, const char* name=0) + : Q3Header(sections, parent, name) {} + void writeStatus(int level, Xml&) const; + void readStatus(Xml&); + }; +#endif diff --git a/muse2/muse/widgets/hitscale.cpp b/muse2/muse/widgets/hitscale.cpp new file mode 100644 index 00000000..2d7c5267 --- /dev/null +++ b/muse2/muse/widgets/hitscale.cpp @@ -0,0 +1,134 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: hitscale.cpp,v 1.3.2.1 2007/01/27 14:52:43 spamatica Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#include "hitscale.h" +#include "midieditor.h" +#include +//Added by qt3to4: +#include +#include + +#include "song.h" + +//--------------------------------------------------------- +// HitScale +//--------------------------------------------------------- + +HitScale::HitScale(int* r, QWidget* parent, int xs) + : View(parent, xs, 1) + { + raster = r; + pos[0] = song->cpos(); + pos[1] = song->lpos(); + pos[2] = song->rpos(); + button = Qt::NoButton; + setMouseTracking(true); + connect(song, SIGNAL(posChanged(int, unsigned, bool)), this, SLOT(setPos(int, unsigned, bool))); + setFixedHeight(18); + } + +//--------------------------------------------------------- +// setPos +//--------------------------------------------------------- + +void HitScale::setPos(int idx, unsigned val, bool) + { + if (val == pos[idx]) + return; + unsigned int opos = mapx(pos[idx]); // in order preventing comparison of sigend & unsigned int ??is this OK? + pos[idx] = val; + if (!isVisible()) + return; + val = mapx(val); + int x = -9; + int w = 18; + if (opos > val) { //here would be the comparison signed/unsigned + w += opos - val; + x += val; + } + else { + w += val - opos; + x += opos; + } + paint(QRect(x, 0, w, height())); + } + +void HitScale::viewMousePressEvent(QMouseEvent* event) + { + button = event->button(); + viewMouseMoveEvent(event); + } + +void HitScale::viewMouseReleaseEvent(QMouseEvent*) + { + button = Qt::NoButton; + } + +void HitScale::viewMouseMoveEvent(QMouseEvent* event) + { + int x = sigmap.raster(event->x(), *raster); + emit timeChanged(x); + int i; + switch (button) { + case Qt::LeftButton: + i = 0; + break; + case Qt::MidButton: + i = 1; + break; + case Qt::RightButton: + i = 2; + break; + default: + return; + } + Pos p(x, true); + song->setPos(i, p); + } + +//--------------------------------------------------------- +// leaveEvent +//--------------------------------------------------------- + +void HitScale::leaveEvent(QEvent*) + { + emit timeChanged(-1); + } + +//--------------------------------------------------------- +// draw +//--------------------------------------------------------- + +void HitScale::pdraw(QPainter& p, const QRect& r) + { + int x = r.x(); + int w = r.width(); + +// x -= 10; +// w += 20; + + if (x < 0) + x = 0; + + //--------------------------------------------------- + // draw location marker + //--------------------------------------------------- + + p.setPen(Qt::red); + int xp = mapx(pos[0]); + if (xp >= x && xp < x+w) + p.drawLine(xp, 0, xp, height()); + p.setPen(Qt::blue); + xp = mapx(pos[1]); + if (xp >= x && xp < x+w) + p.drawLine(xp, 0, xp, height()); + xp = mapx(pos[2]); + if (xp >= x && xp < x+w) + p.drawLine(xp, 0, xp, height()); + } + + diff --git a/muse2/muse/widgets/hitscale.h b/muse2/muse/widgets/hitscale.h new file mode 100644 index 00000000..85711e71 --- /dev/null +++ b/muse2/muse/widgets/hitscale.h @@ -0,0 +1,50 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: hitscale.h,v 1.2 2004/01/11 18:55:37 wschweer Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __HITSCALE_H__ +#define __HITSCALE_H__ + +#include "view.h" +//Added by qt3to4: +#include +#include + +class QPainter; +class MidiEditor; + +//--------------------------------------------------------- +// HitScale +// scale for midi track +//--------------------------------------------------------- + +class HitScale : public View { + Q_OBJECT + int* raster; + unsigned pos[3]; + int button; + + signals: +// void posChanged(int, int); + + protected: + virtual void pdraw(QPainter&, const QRect&); + virtual void viewMousePressEvent(QMouseEvent* event); + virtual void viewMouseMoveEvent(QMouseEvent* event); + virtual void viewMouseReleaseEvent(QMouseEvent* event); + virtual void leaveEvent(QEvent*e); + + signals: + void timeChanged(int); + + public slots: + void setPos(int, unsigned, bool); + + public: + HitScale(int* raster, QWidget* parent, int xscale); + }; +#endif + diff --git a/muse2/muse/widgets/intlabel.cpp b/muse2/muse/widgets/intlabel.cpp new file mode 100644 index 00000000..8835e79d --- /dev/null +++ b/muse2/muse/widgets/intlabel.cpp @@ -0,0 +1,144 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: intlabel.cpp,v 1.1.1.1.2.1 2008/08/18 00:15:26 terminator356 Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#include + +#include "intlabel.h" +#include +#include +#include + +#include "utils.h" + +//--------------------------------------------------------- +// IntLabel +//--------------------------------------------------------- + +IntLabel::IntLabel(int _val, int _min, int _max, QWidget* parent, + int _off, const QString& str, int lPos) + : Nentry(parent, str, lPos) + { + specialValue = "off"; + min = _min; + max = _max; + val = _val+1; // dont optimize away + off = _off; + setValue(_val); + int len = num2cols(min, max); + setSize(len); + } + +void IntLabel::setSpecialValueText(const QString& s) + { + specialValue = s; + setString(val); + } + +//--------------------------------------------------------- +// setRange +//--------------------------------------------------------- + +void IntLabel::setRange(int mn, int mx) +{ + min = mn; + max = mx; + setSize(num2cols(min, max)); + int v = val; + if(val < mn) + v = mn; + else + if(val > mx) + v = mx; + setValue(v); +} + +//--------------------------------------------------------- +// setString +//--------------------------------------------------------- + +bool IntLabel::setString(int v, bool editable) + { + if (v < min || v > max) { + setText(QString("---")); + return true; + } + else if (v == off) { + if (editable) + setText(QString("")); + else + setText(specialValue); + } + else { + QString s; + s.setNum(v); + if (!editable) + s += suffix; + setText(s); + } + return false; + } + +//--------------------------------------------------------- +// setSValue +//--------------------------------------------------------- + +bool IntLabel::setSValue(const QString& s) + { + int v; + if (s == specialValue) + v = off; + else { + bool ok; + v = s.toInt(&ok); + if (!ok) + return true; + if (v < min) + v = min; + if (v > max) + v = max; + } + if (v != val) { + setValue(v); + emit valueChanged(val); + } + return false; + } + +//--------------------------------------------------------- +// incValue +//--------------------------------------------------------- + +void IntLabel::incValue(int) + { + if (val < max) { + setValue(val+1); + emit valueChanged(val); + } + } + +//--------------------------------------------------------- +// decValue +//--------------------------------------------------------- + +void IntLabel::decValue(int) + { + if (val > min) { + setValue(val-1); + emit valueChanged(val); + } + } + +//--------------------------------------------------------- +// setOff +//--------------------------------------------------------- + +void IntLabel::setOff(int v) + { + off = v; + setString(val); + } + diff --git a/muse2/muse/widgets/intlabel.h b/muse2/muse/widgets/intlabel.h new file mode 100644 index 00000000..df452891 --- /dev/null +++ b/muse2/muse/widgets/intlabel.h @@ -0,0 +1,46 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: intlabel.h,v 1.1.1.1.2.2 2008/08/18 00:15:26 terminator356 Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __INTLABEL_H__ +#define __INTLABEL_H__ + +#include +#include "nentry.h" + +class QString; + +//--------------------------------------------------------- +// IntLabel +//--------------------------------------------------------- + +class IntLabel : public Nentry { + Q_OBJECT + + int min, max, off; + QString suffix; + QString specialValue; + + 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); + void setRange(int, int); + }; + +#endif diff --git a/muse2/muse/widgets/itransformbase.ui b/muse2/muse/widgets/itransformbase.ui new file mode 100644 index 00000000..1c4a9387 --- /dev/null +++ b/muse2/muse/widgets/itransformbase.ui @@ -0,0 +1,1296 @@ + +MidiInputTransformDialogBase + + + MidiInputTransformDialogBase + + + + 0 + 0 + 760 + 587 + + + + MusE: Midi Input Transformator + + + true + + + + unnamed + + + 11 + + + 6 + + + + GroupBox3 + + + Filter + + + + unnamed + + + 11 + + + 6 + + + + + All + + + + + Equal + + + + + Unequal + + + + selEventOp + + + + + + Note + + + + + Poly Pressure + + + + + Control Change + + + + + Aftertouch + + + + + Pitch Bend + + + + + NRPN + + + + + RPN + + + + selType + + + + + TextLabel3 + + + Value 2 + + + + + TextLabel2 + + + Value 1 + + + + + TextLabel1 + + + Event Type + + + + + + Ignore + + + + + Equal + + + + + Unequal + + + + + Higher + + + + + Lower + + + + + Inside + + + + + Outside + + + + selVal1Op + + + + + selVal1b + + + 127 + + + + + selVal2b + + + 127 + + + + + selVal1a + + + 127 + + + + + + Ignore + + + + + Equal + + + + + Unequal + + + + + Higher + + + + + Lower + + + + + Inside + + + + + Outside + + + + selVal2Op + + + + + + Ignore + + + + + Equal + + + + + Unequal + + + + + Higher + + + + + Lower + + + + + Inside + + + + + Outside + + + + selPortOp + + + + + + Ignore + + + + + Equal + + + + + Unequal + + + + + Higher + + + + + Lower + + + + + Inside + + + + + Outside + + + + selChannelOp + + + + + TextLabel2_2 + + + Channel + + + + + TextLabel1_3 + + + Port + + + + + selVal2a + + + 127 + + + + + selChannelVala + + + 127 + + + + + selPortVala + + + 127 + + + + + selChannelValb + + + 127 + + + + + selPortValb + + + 127 + + + + + + + GroupBox5 + + + Processing + + + + unnamed + + + 11 + + + 6 + + + + TextLabel5 + + + Event Type + + + + + + Keep + + + + + Fix + + + + procEventOp + + + + + + Poly Pressure + + + + + Control Change + + + + + Aftertouch + + + + + Pitch Bend + + + + + NRPN + + + + + RPN + + + + procType + + + + + + Keep + + + + + Plus + + + + + Minus + + + + + Multiply + + + + + Divide + + + + + Fix + + + + + Value 2 + + + + + Invert + + + + + ScaleMap + + + + + Flip + + + + + Dyn + + + + + Random + + + + procVal1Op + + + + + TextLabel6 + + + Value 1 + + + + + TextLabel7 + + + Value 2 + + + + + procVal1b + + + 9999 + + + + + procVal2b + + + 9999 + + + + + procVal1a + + + 99999999 + + + + + procChannelValb + + + 127 + + + + + procPortValb + + + 127 + + + + + TextLabel1_3_2 + + + Port + + + + + + Keep + + + + + Plus + + + + + Minus + + + + + Multiply + + + + + Divide + + + + + Fix + + + + + Value 1 + + + + + Invert + + + + + Dyn + + + + + Random + + + + procVal2Op + + + + + + Keep + + + + + Plus + + + + + Minus + + + + + Multiply + + + + + Divide + + + + + Fix + + + + + Value 1 + + + + + Invert + + + + + Dyn + + + + + Random + + + + procChannelOp + + + + + + Keep + + + + + Plus + + + + + Minus + + + + + Multiply + + + + + Divide + + + + + Fix + + + + + Value 1 + + + + + Invert + + + + + Dyn + + + + + Random + + + + procPortOp + + + + + TextLabel2_2_2 + + + Channel + + + + + procVal2a + + + 99999999 + + + + + procPortVala + + + 99999999 + + + + + procChannelVala + + + 99999999 + + + + + + + GroupBox5_2 + + + + 4 + 5 + 0 + 0 + + + + Modules + + + + unnamed + + + 11 + + + 6 + + + + modulGroup + + + + 5 + 7 + 0 + 0 + + + + NoFrame + + + Plain + + + 0 + + + + + + true + + + true + + + + unnamed + + + + modul1select + + + + 5 + 1 + 0 + 0 + + + + 1 + + + true + + + true + + + 0 + + + + + modul2select + + + 2 + + + true + + + 1 + + + + + modul3select + + + 3 + + + true + + + 2 + + + + + modul4select + + + 4 + + + true + + + 3 + + + + + + + modul1enable + + + + 4 + 0 + 0 + 0 + + + + + + + enable modul 1 + + + + + modul2enable + + + + 4 + 0 + 0 + 0 + + + + + + + enable modul 2 + + + + + modul3enable + + + + 4 + 0 + 0 + 0 + + + + + + + enable modul 3 + + + + + modul4enable + + + + 4 + 0 + 0 + 0 + + + + + + + enable modul 4 + + + + + + + GroupBox6_2 + + + + 3 + 5 + 0 + 0 + + + + Preset + + + + unnamed + + + 11 + + + 6 + + + + Layout5_3 + + + + unnamed + + + 0 + + + 6 + + + + TextLabel13_2 + + + Name: + + + + + nameEntry + + + + 3 + 0 + 0 + 0 + + + + + + + + TextLabel14_2 + + + Comment: + + + + + commentEntry + + + + 1 + 7 + 0 + 0 + + + + + + + + GroupBox7_2 + + + + 4 + 5 + 0 + 0 + + + + Function + + + + unnamed + + + 11 + + + 6 + + + + funcOp + + + + + + + Layout4 + + + + unnamed + + + 0 + + + 6 + + + + buttonNew + + + &New + + + true + + + create new preset + + + + + buttonDelete + + + &Delete + + + true + + + delete preset + + + + + Horizontal Spacing2 + + + Horizontal + + + Expanding + + + + 20 + 20 + + + + + + buttonOk + + + &Dismiss + + + true + + + true + + + + + + + Layout7 + + + + unnamed + + + 0 + + + 6 + + + + TextLabel1_2 + + + PresetList + + + + + presetList + + + + 3 + 3 + 0 + 0 + + + + + + + + + + SpinBoxFP +
spinboxFP.h
+ + 50 + 20 + + 0 + + 5 + 5 + 0 + 0 + + image0 + valueChanged(int value) + valueChanged(const QString&) + setValue(int) + setPrefix(const QString&) + setSuffix(const QString&) + stepUp() + stepDown() + precision + minValue + maxValue +
+
+ + + 789c6dd2c10ac2300c00d07bbf2234b7229d1be245fc04c5a3201e4615f430059d0711ff5ddb2e6bb236ec90eed134cb5a19d8ef36602af5ecdbfeeac05dda0798d3abebde87e3faa374d3807fa0d633a52d38d8de6f679fe33fc776e196f53cd010188256a3600a292882096246517815ca99884606e18044a3a40d91824820924265a7923a2e8bcd05f33db1173e002913175f2a6be6d3294871a2d95fa00e8a94ee017b69d339d90df1e77c57ea072ede6758 + + + + + buttonOk + clicked() + MidiInputTransformDialogBase + accept() + + + + selEventOp + selType + selVal1Op + selVal1a + selVal1b + selVal2Op + selVal2a + selVal2b + selPortOp + selPortVala + selPortValb + selChannelOp + selChannelVala + selChannelValb + procEventOp + procType + procVal1Op + procVal1b + procVal2Op + procVal2b + procPortOp + procPortValb + procChannelOp + procChannelValb + modul1enable + modul2enable + modul3enable + modul4enable + funcOp + nameEntry + commentEntry + presetList + buttonNew + buttonDelete + buttonOk + + + + spinboxFP.h + +
diff --git a/muse2/muse/widgets/knob.cpp b/muse2/muse/widgets/knob.cpp new file mode 100644 index 00000000..bfc46e77 --- /dev/null +++ b/muse2/muse/widgets/knob.cpp @@ -0,0 +1,506 @@ +//====================================================================== +// MusE +// Linux Music Editor +// $Id: knob.cpp,v 1.3.2.3 2009/03/09 02:05:18 terminator356 Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +// +// Adapted from Qwt Lib: +// Copyright (C) 1997 Josef Wilgen +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License, version 2, +// as published by the Free Software Foundation. +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// You should have received a copy of the 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 "knob.h" +#include +#include "mmath.h" + +#include +#include +//Added by qt3to4: +#include +#include + +//--------------------------------------------------------- +// The QwtKnob widget imitates look and behaviour of a volume knob on a radio. +// It contains +// a scale around the knob which is set up automatically or can +// be configured manually (see @^QwtScaleIf@). +// Automatic scrolling is enabled when the user presses a mouse +// button on the scale. For a description of signals, slots and other +// members, see QwtSliderBase@. +//--------------------------------------------------------- + + +//--------------------------------------------------------- +// Knob +//--------------------------------------------------------- + +Knob::Knob(QWidget* parent, const char* name) + : SliderBase(parent, name) + { + hasScale = false; + + d_borderWidth = 2; + d_borderDist = 4; + d_totalAngle = 270.0; + d_scaleDist = 1; + d_symbol = Line; + d_maxScaleTicks = 11; + d_knobWidth = 30; + _faceColSel = FALSE; + d_faceColor = backgroundColor(); + d_curFaceColor = d_faceColor; + d_altFaceColor = d_faceColor; + d_markerColor = foregroundColor(); + d_dotWidth = 8; + + setMinimumSize(30,30); + setUpdateTime(50); + } + +//------------------------------------------------------------ +// QwtKnob::setTotalAngle +// Set the total angle by which the knob can be turned +// +// Syntax +// void QwtKnob::setTotalAngle(double angle) +// +// Parameters +// double angle -- angle in degrees. +// +// Description +// The default angle is 270 degrees. It is possible to specify +// an angle of more than 360 degrees so that the knob can be +// turned several times around its axis. +//------------------------------------------------------------ + +void Knob::setTotalAngle (double angle) + { + if (angle < 10.0) + d_totalAngle = 10.0; + else + d_totalAngle = angle; + d_scale.setAngleRange( -0.5 * d_totalAngle, 0.5 * d_totalAngle); + } + +//------------------------------------------------------------ +// QwtKnob::drawKnob +// const QRect &r -- borders of the knob +//------------------------------------------------------------ + +void Knob::drawKnob(QPainter* p, const QRect& r) + { + QRect aRect; + + QColorGroup g = colorGroup(); + QPen pn; + int bw2 = d_borderWidth / 2; + + aRect.setRect(r.x() + bw2, + r.y() + bw2, + r.width() - 2*bw2, + r.height() - 2*bw2); + + // + // draw button face + // + p->setPen(Qt::NoPen); + p->setBrush(d_curFaceColor); + p->drawEllipse(aRect); + + // + // draw button shades + // + pn.setWidth(d_borderWidth); + + + pn.setColor(g.light()); + p->setPen(pn); + p->drawArc(aRect, 45*16,180*16); + + pn.setColor(g.dark()); + p->setPen(pn); + p->drawArc(aRect, 225*16,180*16); + + // + // draw marker + // + drawMarker(p, d_angle, d_markerColor); + } + +//------------------------------------------------------------ +//.F QwtSliderBase::valueChange +// Notify change of value +// +//.u Parameters +// double x -- new value +// +//.u Description +// Sets the slider's value to the nearest multiple +// of the step size. +//------------------------------------------------------------ + +void Knob::valueChange() + { + recalcAngle(); + d_newVal++; + repaint(kRect, FALSE); + SliderBase::valueChange(); + } + +//------------------------------------------------------------ +//.F QwtKnob::getValue +// Determine the value corresponding to a specified position +// +//.u Parameters: +// const QPoint &p -- point +// +//.u Description: +// Called by QwtSliderBase +//------------------------------------------------------------ + +double Knob::getValue(const QPoint &p) + { + double newValue; + double oneTurn; + double eqValue; + double arc; + + const QRect& r = rect(); + + double dx = double((r.x() + r.width() / 2) - p.x() ); + double dy = double((r.y() + r.height() / 2) - p.y() ); + + arc = atan2(-dx,dy) * 180.0 / M_PI; + + newValue = 0.5 * (minValue() + maxValue()) + + (arc + d_nTurns * 360.0) * (maxValue() - minValue()) + / d_totalAngle; + + oneTurn = fabs(maxValue() - minValue()) * 360.0 / d_totalAngle; + eqValue = value() + d_mouseOffset; + + if (fabs(newValue - eqValue) > 0.5 * oneTurn) + { + if (newValue < eqValue) + newValue += oneTurn; + else + newValue -= oneTurn; + } + + return newValue; + +} + + + +//------------------------------------------------------------ +//.- +//.F QwtKnob::setScrollMode +// Determine the scrolling mode and direction +// corresponding to a specified position +// +//.u Parameters +// const QPoint &p -- point in question +// +//.u Description +// Called by QwtSliderBase +//------------------------------------------------------------ +void Knob::getScrollMode( QPoint &p, const Qt::ButtonState &/*button*/, int &scrollMode, int &direction)// prevent compiler warning : unsused parameter +{ + int dx, dy, r; + double arc; + + /*Qt::ButtonState but= button ;*/ // prevent compiler warning : unsused variable + r = kRect.width() / 2; + + dx = kRect.x() + r - p.x(); + dy = kRect.y() + r - p.y(); + + if ( (dx * dx) + (dy * dy) <= (r * r)) // point is inside the knob + { + scrollMode = ScrMouse; + direction = 0; + } + else // point lies outside + { + scrollMode = ScrTimer; + arc = atan2(double(-dx),double(dy)) * 180.0 / M_PI; + if ( arc < d_angle) + direction = -1; + else if (arc > d_angle) + direction = 1; + else + direction = 0; + } + return; +} + + + +//------------------------------------------------------------ +//.F QwtKnob::rangeChange +// Notify a change of the range +// +//.u Description +// Called by QwtSliderBase +//------------------------------------------------------------ + +void Knob::rangeChange() +{ + if (!hasUserScale()) + { + d_scale.setScale(minValue(), maxValue(), + d_maxMajor, d_maxMinor); + } + recalcAngle(); + resize(size()); + repaint(FALSE); +} + +//--------------------------------------------------------- +// resizeEvent +//--------------------------------------------------------- + +void Knob::resizeEvent(QResizeEvent *) + { + int width, width_2; + + const QRect& r = rect(); + +// printf("resize %d %d %d\n", r.height(), r.width(), d_knobWidth); + +// width = qwtMin(qwtMin(r.height(), r.width()), d_knobWidth); + width = qwtMin(r.height(), r.width()); + width_2 = width / 2; + + int x = r.x() + r.width() / 2 - width_2; + int y = r.y() + r.height() / 2 - width_2; + + kRect.setRect(x, y, width, width); + + x = kRect.x() - d_scaleDist; + y = kRect.y() - d_scaleDist; + int w = width + 2 * d_scaleDist; + + d_scale.setGeometry(x, y, w, ScaleDraw::Round); + } + +//------------------------------------------------------------ +// paintEvent +//------------------------------------------------------------ + +void Knob::paintEvent(QPaintEvent* e) + { + QPainter p(this); + const QRect &r = e->rect(); + + if ((r == kRect) && d_newVal ) { // event from valueChange() + if (d_newVal > 1) // lost paintEvents()? + drawKnob(&p, kRect); + else { + drawMarker(&p, d_oldAngle, d_curFaceColor); + drawMarker(&p, d_angle, d_markerColor); + } + } + else { + p.eraseRect(rect()); + if (hasScale) + d_scale.draw(&p); + drawKnob(&p, kRect); + } + d_newVal = 0; + } + +//------------------------------------------------------------ +//.- +//.F QwtKnob::drawMarker +// Draw the marker at the knob's front +// +//.u Parameters +//.p QPainter *p -- painter +// double arc -- angle of the marker +// const QColor &c -- marker color +// +//.u Syntax +// void QwtKnob::drawMarker(QPainter *p) +// +//------------------------------------------------------------ +void Knob::drawMarker(QPainter *p, double arc, const QColor &c) +{ + + QPen pn; + int radius; + double rb,re; + double rarc; + + rarc = arc * M_PI / 180.0; + double ca = cos(rarc); + double sa = - sin(rarc); + radius = kRect.width() / 2 - d_borderWidth; + if (radius < 3) radius = 3; + int ym = kRect.y() + radius + d_borderWidth; + int xm = kRect.x() + radius + d_borderWidth; + + switch (d_symbol) + { + case Dot: + + p->setBrush(c); + p->setPen(Qt::NoPen); + rb = double(qwtMax(radius - 4 - d_dotWidth / 2, 0)); + p->drawEllipse(xm - int(rint(sa * rb)) - d_dotWidth / 2, + ym - int(rint(ca * rb)) - d_dotWidth / 2, + d_dotWidth, d_dotWidth); + + break; + + case Line: + + pn.setColor(c); + pn.setWidth(2); + p->setPen(pn); + + rb = qwtMax(double((radius - 4) / 3.0), 0.0); + re = qwtMax(double(radius - 4), 0.0); + + p->drawLine( xm - int(rint(sa * rb)), + ym - int(rint(ca * rb)), + xm - int(rint(sa * re)), + ym - int(rint(ca * re))); + + break; + } + + +} + +//------------------------------------------------------------ +// +//.F QwtKnob::setKnobWidth +// Change the knob's width. +// +//.u Syntax +//.f void QwtKnob::setKnobWidth(int w) +// +//.u Parameters +//.p int w -- new width +// +//.u Description +// The specified width must be >= 5, or it will be clipped. +// +//------------------------------------------------------------ +void Knob::setKnobWidth(int w) +{ + d_knobWidth = qwtMax(w,5); + resize(size()); + repaint(FALSE); +} + +//------------------------------------------------------------ +// +//.F QwtKnob::setBorderWidth +// Set the knob's border width +// +//.u Syntax +//.f void QwtKnob::setBorderWidth(int bw) +// +//.u Parameters +//.p int bw -- new border width +// +//------------------------------------------------------------ +void Knob::setBorderWidth(int bw) +{ + d_borderWidth = qwtMax(bw, 0); + resize(size()); + repaint(FALSE); +} + +//------------------------------------------------------------ +//.- +//.F QwtKnob::recalcAngle +// Recalculate the marker angle corresponding to the +// current value +// +//.u Syntax +//.f void QwtKnob::recalcAngle() +// +//------------------------------------------------------------ +void Knob::recalcAngle() +{ + d_oldAngle = d_angle; + + // + // calculate the angle corresponding to the value + // + if (maxValue() == minValue()) + { + d_angle = 0; + d_nTurns = 0; + } + else + { + d_angle = (value() - 0.5 * (minValue() + maxValue())) + / (maxValue() - minValue()) * d_totalAngle; + d_nTurns = floor((d_angle + 180.0) / 360.0); + d_angle = d_angle - d_nTurns * 360.0; + + } + +} + +//------------------------------------------------------------ +// setFaceColor +//------------------------------------------------------------ +void Knob::setFaceColor(const QColor c) +{ + d_faceColor = c; + if(!_faceColSel) + //update(FALSE); + repaint(FALSE); +} + +//------------------------------------------------------------ +// setAltFaceColor +//------------------------------------------------------------ +void Knob::setAltFaceColor(const QColor c) +{ + d_altFaceColor = c; + if(_faceColSel) + //update(FALSE); + repaint(FALSE); +} + +//------------------------------------------------------------ +// selectFaceColor +//------------------------------------------------------------ +void Knob::selectFaceColor(bool alt) +{ + _faceColSel = alt; + if(alt) + d_curFaceColor = d_altFaceColor; + else + d_curFaceColor = d_faceColor; + //update(FALSE); + repaint(FALSE); +} + +//------------------------------------------------------------ +// setMarkerColor +//------------------------------------------------------------ +void Knob::setMarkerColor(const QColor c) +{ + d_markerColor = c; + //update(FALSE); + repaint(FALSE); +} + diff --git a/muse2/muse/widgets/knob.h b/muse2/muse/widgets/knob.h new file mode 100644 index 00000000..baaf9a50 --- /dev/null +++ b/muse2/muse/widgets/knob.h @@ -0,0 +1,78 @@ +#ifndef QWT_KNOB_H +#define QWT_KNOB_H + +#include +#include +#include +//Added by qt3to4: +#include +#include + + +//--------------------------------------------------------- +// Knob +//--------------------------------------------------------- + +class Knob : public SliderBase, public ScaleIf + { + Q_OBJECT + + public: + enum Symbol { Line, Dot }; + + private: + bool hasScale; + + int d_borderWidth; + int d_borderDist; + int d_scaleDist; + int d_maxScaleTicks; + int d_newVal; + int d_knobWidth; + int d_dotWidth; + + Symbol d_symbol; + double d_angle; + double d_oldAngle; + double d_totalAngle; + double d_nTurns; + + QRect kRect; + bool _faceColSel; + QColor d_faceColor; + QColor d_curFaceColor; + QColor d_altFaceColor; + QColor d_markerColor; + + void recalcAngle(); + void valueChange(); + void rangeChange(); + void drawKnob(QPainter *p, const QRect &r); + void drawMarker(QPainter *p, double arc, const QColor &c); + + void paintEvent(QPaintEvent *e); + void resizeEvent(QResizeEvent *e); + double getValue(const QPoint &p); + void getScrollMode( QPoint &p, const Qt::ButtonState &button, int &scrollMode, int &direction ); + void scaleChange() { repaint(false); } + void fontChange(const QFont &) { repaint(false); } + + public: + Knob(QWidget* parent = 0, const char *name = 0); + ~Knob() {} + + void setKnobWidth(int w); + void setTotalAngle (double angle); + void setBorderWidth(int bw); + void selectFaceColor(bool alt); + bool selectedFaceColor() { return _faceColSel; } + QColor faceColor() { return d_faceColor; } + void setFaceColor(const QColor c); + QColor altFaceColor() { return d_altFaceColor; } + void setAltFaceColor(const QColor c); + QColor markerColor() { return d_markerColor; } + void setMarkerColor(const QColor c); + }; + + +#endif diff --git a/muse2/muse/widgets/lcombo.cpp b/muse2/muse/widgets/lcombo.cpp new file mode 100644 index 00000000..fa647002 --- /dev/null +++ b/muse2/muse/widgets/lcombo.cpp @@ -0,0 +1,49 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: lcombo.cpp,v 1.1.1.1.2.3 2009/07/01 22:14:56 spamatica Exp $ +// (C) Copyright 2000 Werner Schweer (ws@seh.de) +//========================================================= + +#include "lcombo.h" + +#include +#include +#include +//Added by qt3to4: +#include + +//--------------------------------------------------------- +// LabelCombo +//--------------------------------------------------------- + +LabelCombo::LabelCombo(const QString& txt, QWidget* parent, + const char* name) : QWidget(parent, name) + { +// setFixedHeight(20); + Q3HBoxLayout* layout = new Q3HBoxLayout(this); + QLabel* label = new QLabel(txt, this); + box = new QComboBox(false, this); + layout->addStretch(); + layout->addSpacing(5); + layout->addWidget(label); + layout->addSpacing(5); + layout->addWidget(box); + layout->addSpacing(5); + layout->addStretch(); + connect(box, SIGNAL(activated(int)), SIGNAL(activated(int))); + } + +void LabelCombo::insertItem(const QString& txt, int index) + { + box->insertItem(txt, index); + } + +void LabelCombo::clearFocus() +{ + box->clearFocus(); +} +void LabelCombo::setFocusPolicy ( Qt::FocusPolicy fp ) +{ + box->setFocusPolicy(fp); +} \ No newline at end of file diff --git a/muse2/muse/widgets/lcombo.h b/muse2/muse/widgets/lcombo.h new file mode 100644 index 00000000..f2332847 --- /dev/null +++ b/muse2/muse/widgets/lcombo.h @@ -0,0 +1,40 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: lcombo.h,v 1.1.1.1.2.3 2009/07/01 22:14:56 spamatica Exp $ +// (C) Copyright 2000 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __LCOMBO_H__ +#define __LCOMBO_H__ + +#include +#include + +class QString; +class Q3ListBox; + +//--------------------------------------------------------- +// LabelCombo +//--------------------------------------------------------- + +class LabelCombo : public QWidget { + QComboBox* box; + Q_OBJECT + + signals: + void activated(int); + + public slots: + void clearFocus(); + public: + LabelCombo(const QString& label, QWidget* parent, + const char* name=0); + void insertItem(const QString& txt, int index=-1); + void setCurrentItem(int i) { box->setCurrentItem(i); } + //void setListBox(Q3ListBox* lb) { box->setListBox(lb); } // ddskrjo + void setFocusPolicy ( Qt::FocusPolicy fp ); + + }; + +#endif diff --git a/muse2/muse/widgets/listitem.h b/muse2/muse/widgets/listitem.h new file mode 100644 index 00000000..56b0f3d4 --- /dev/null +++ b/muse2/muse/widgets/listitem.h @@ -0,0 +1,85 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: listitem.h,v 1.1.2.1 2008/08/18 00:15:26 terminator356 Exp $ +// +// (C) Copyright 1999/2000 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __LISTITEM_H__ +#define __LISTITEM_H__ + +//#include +//#include +#include + +class QString; +class Q3ListBox; +class Q3ListBoxText; +//class QListView; +//class QListViewItem; +class ListBoxData; +class ListViewData; + +//--------------------------------------------------------- +// ListBoxData +//--------------------------------------------------------- + +class ListBoxData : public Q3ListBoxText +{ + void* _data; + + public: + ListBoxData(Q3ListBox* listbox, const QString& text = QString::null) + : Q3ListBoxText(listbox, text) { _data = 0; } + ListBoxData(const QString& text = QString::null) : Q3ListBoxText(text) { _data = 0; } + ListBoxData(Q3ListBox* listbox, const QString& text, ListBoxData* after) + : Q3ListBoxText(listbox, text, (Q3ListBoxText*)after) { _data = 0; } + ~ListBoxData() { } + + virtual void setText(const QString& text) { Q3ListBoxText::setText(text); } + void* data() { return _data; } + void setData(void* dat) { _data = dat; } +}; + +//--------------------------------------------------------- +// ListViewData +//--------------------------------------------------------- + +class ListViewData : public Q3ListViewItem +{ + void* _data; + + public: + ListViewData(Q3ListView* parent) : Q3ListViewItem(parent) { _data = 0; } + //ListViewData(ListViewData* parent) : QListViewItem((QListViewItem*)parent) { _data = 0; } + ListViewData(ListViewData* parent) : Q3ListViewItem(parent) { _data = 0; } + //ListViewData(QListView* parent, ListViewData* after) : QListViewItem(parent, (QListViewItem*)after) { _data = 0; } + ListViewData(Q3ListView* parent, ListViewData* after) : Q3ListViewItem(parent, after) { _data = 0; } + //ListViewData(ListViewData* parent, ListViewData* after) : QListViewItem((QListViewItem*)parent, (QListViewItem*)after) { _data = 0; } + ListViewData(ListViewData* parent, ListViewData* after) : Q3ListViewItem(parent, after) { _data = 0; } + ListViewData(Q3ListView* parent, QString label1, QString label2 = QString::null, QString label3 = QString::null, QString label4 = QString::null, + QString label5 = QString::null, QString label6 = QString::null, QString label7 = QString::null, QString label8 = QString::null) + : Q3ListViewItem(parent, label1, label2, label3, label4, label5, label6, label7, label8) { _data = 0; } + ListViewData(ListViewData* parent, QString label1, QString label2 = QString::null, QString label3 = QString::null, QString label4 = QString::null, + QString label5 = QString::null, QString label6 = QString::null, QString label7 = QString::null, QString label8 = QString::null) + //: QListViewItem((QListViewItem*)parent, label1, label2, label3, label4, label5, label6, label7, label8) { _data = 0; } + : Q3ListViewItem(parent, label1, label2, label3, label4, label5, label6, label7, label8) { _data = 0; } + ListViewData(Q3ListView* parent, ListViewData* after, QString label1, QString label2 = QString::null, QString label3 = QString::null, QString label4 = QString::null, + QString label5 = QString::null, QString label6 = QString::null, QString label7 = QString::null, QString label8 = QString::null) + //: QListViewItem(parent, (QListViewItem*)after, label1, label2, label3, label4, label5, label6, label7, label8) { _data = 0; } + : Q3ListViewItem(parent, after, label1, label2, label3, label4, label5, label6, label7, label8) { _data = 0; } + ListViewData(ListViewData* parent, ListViewData* after, QString label1, QString label2 = QString::null, QString label3 = QString::null, QString label4 = QString::null, + QString label5 = QString::null, QString label6 = QString::null, QString label7 = QString::null, QString label8 = QString::null) + //: QListViewItem((QListViewItem*)parent, (QListViewItem*)after, label1, label2, label3, label4, label5, label6, label7, label8) { _data = 0; } + : Q3ListViewItem(parent, after, label1, label2, label3, label4, label5, label6, label7, label8) { _data = 0; } + ~ListViewData() { } + + void* data() { return _data; } + void setData(void* dat) { _data = dat; } +}; + + + +#endif + diff --git a/muse2/muse/widgets/menutitleitem.h b/muse2/muse/widgets/menutitleitem.h new file mode 100644 index 00000000..5f821512 --- /dev/null +++ b/muse2/muse/widgets/menutitleitem.h @@ -0,0 +1,29 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: menutitleitem.h,v 1.1.2.1 2009/06/10 00:34:59 terminator356 Exp $ +// (C) Copyright 1999-2001 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __MENU_TITLE_ITEM_H__ +#define __MENU_TITLE_ITEM_H__ + +#include + +//--------------------------------------------------------- +// MenuTitleItem +//--------------------------------------------------------- + +class MenuTitleItem { //: public QCustomMenuItem { ddskrjo + 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/muse2/muse/widgets/metronome.cpp b/muse2/muse/widgets/metronome.cpp new file mode 100644 index 00000000..091a8a56 --- /dev/null +++ b/muse2/muse/widgets/metronome.cpp @@ -0,0 +1,186 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: metronome.cpp,v 1.2.2.1 2009/12/20 05:00:35 terminator356 Exp $ +// +// (C) Copyright 2001 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include "metronome.h" +#include +#include +#include +#include +//Added by qt3to4: +#include +#include "globals.h" +#include "song.h" +#include "track.h" +#include "audio.h" + +//--------------------------------------------------------- +// MetronomeConfig +//--------------------------------------------------------- + +MetronomeConfig::MetronomeConfig(QWidget* parent, const char* name) + : MetronomeConfigBase(parent, name) + { + connect(buttonApply, SIGNAL(clicked()), SLOT(apply())); + connect(midiClick, SIGNAL(toggled(bool)), SLOT(midiClickChanged(bool))); + connect(precountEnable, SIGNAL(toggled(bool)), SLOT(precountEnableChanged(bool))); + connect(precountFromMastertrack, SIGNAL(toggled(bool)), + SLOT(precountFromMastertrackChanged(bool))); + connect(audioBeepRoutesButton, SIGNAL(clicked()), SLOT(audioBeepRoutesClicked())); + connect(volumeSlider, SIGNAL(valueChanged(int)), SLOT(beepVolumeChanged(int))); + + measureNote->setValue(measureClickNote); + measureVelocity->setValue(measureClickVelo); + beatNote->setValue(beatClickNote); + beatVelocity->setValue(beatClickVelo); + midiChannel->setValue(clickChan+1); + midiPort->setValue(clickPort+1); + + /* + precountBars->setValue(preMeasures); + precountEnable->setChecked(precountEnableFlag); + precountFromMastertrack->setChecked(precountFromMastertrackFlag); + precountSigZ->setValue(::precountSigZ); + precountSigN->setValue(::precountSigN); + precountPrerecord->setChecked(::precountPrerecord); + precountPreroll->setChecked(::precountPreroll); + */ + + midiClick->setChecked(midiClickFlag); + audioBeep->setChecked(audioClickFlag); + } + +//--------------------------------------------------------- +// audioBeepRoutesClicked +//--------------------------------------------------------- + +void MetronomeConfig::audioBeepRoutesClicked() +{ + if(song->outputs()->size() == 0) + return; + + //QPopupMenu* pup = new QPopupMenu(audioBeepRoutesButton); + Q3PopupMenu* pup = new Q3PopupMenu(this); + pup->setCheckable(true); + + OutputList* ol = song->outputs(); + + int nn = 0; + for(iAudioOutput iao = ol->begin(); iao != ol->end(); ++iao) + { + int id = pup->insertItem(QT_TR_NOOP((*iao)->name()), nn); + if((*iao)->sendMetronome()) + pup->setItemChecked(id, true); + ++nn; + } + + int n = pup->exec(QCursor::pos()); + if(n != -1) + { + //QString s(pup->text(n)); + nn = 0; + for(iAudioOutput iao = ol->begin(); iao != ol->end(); ++iao) + { + //if(((*iao)->name() == s) && (n == nn)) + if(n == nn) + { + //(*iao)->setSendMetronome(); + audio->msgSetSendMetronome(*iao, !pup->isItemChecked(n)); + //song->update(SC_ROUTE); + break; + } + ++nn; + } + } + + delete pup; + audioBeepRoutesButton->setDown(false); // pup->exec() catches mouse release event +} + +//--------------------------------------------------------- +// accept +//--------------------------------------------------------- + +void MetronomeConfig::accept() + { + apply(); + MetronomeConfigBase::accept(); + } + +//--------------------------------------------------------- +// apply +//--------------------------------------------------------- + +void MetronomeConfig::apply() + { + measureClickNote = measureNote->value(); + measureClickVelo = measureVelocity->value(); + beatClickNote = beatNote->value(); + beatClickVelo = beatVelocity->value(); + clickChan = midiChannel->value() - 1; + clickPort = midiPort->value() - 1; + preMeasures = precountBars->value(); + /* + precountEnableFlag = precountEnable->isChecked(); + precountFromMastertrackFlag = precountFromMastertrack->isChecked(); + ::precountSigZ = precountSigZ->value(); + ::precountSigN = precountSigN->value(); + ::precountPrerecord = precountPrerecord->isChecked(); + ::precountPreroll = precountPreroll->isChecked(); + */ + midiClickFlag = midiClick->isChecked(); + audioClickFlag = audioBeep->isChecked(); + //audioVolumeChanged = volumeSlider->value(); + } + +//--------------------------------------------------------- +// reject +//--------------------------------------------------------- + +void MetronomeConfig::reject() + { + MetronomeConfigBase::reject(); + } + +//--------------------------------------------------------- +// midiClickChanged +//--------------------------------------------------------- + +void MetronomeConfig::midiClickChanged(bool flag) + { + measureNote->setEnabled(flag); + measureVelocity->setEnabled(flag); + beatNote->setEnabled(flag); + beatVelocity->setEnabled(flag); + midiChannel->setEnabled(flag); + midiPort->setEnabled(flag); + } + +void MetronomeConfig::precountEnableChanged(bool flag) + { + /* + precountBars->setEnabled(flag); + precountFromMastertrack->setEnabled(flag); + precountSigZ->setEnabled(flag && !precountFromMastertrack->isChecked()); + precountSigN->setEnabled(flag && !precountFromMastertrack->isChecked()); + */ + } + +void MetronomeConfig::precountFromMastertrackChanged(bool flag) + { + /* + precountSigZ->setEnabled(!flag); + precountSigN->setEnabled(!flag); + */ + } + +void MetronomeConfig::beepVolumeChanged(int volume) + { + // this value is directly applied, not using th Apply button, it just seems more usable this way. + audioClickVolume=volume/100.0; + } diff --git a/muse2/muse/widgets/metronome.h b/muse2/muse/widgets/metronome.h new file mode 100644 index 00000000..200d1875 --- /dev/null +++ b/muse2/muse/widgets/metronome.h @@ -0,0 +1,34 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: metronome.h,v 1.1.1.1.2.1 2009/12/20 05:00:35 terminator356 Exp $ +// +// (C) Copyright 2001 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __METRONOME_H__ +#define __METRONOME_H__ + +#include "metronomebase.h" + +//--------------------------------------------------------- +// MetronomeConfig +//--------------------------------------------------------- + +class MetronomeConfig : public MetronomeConfigBase { + Q_OBJECT + + private slots: + virtual void accept(); + void apply(); + virtual void reject(); + virtual void audioBeepRoutesClicked(); + void midiClickChanged(bool); + void precountEnableChanged(bool); + void precountFromMastertrackChanged(bool); + void beepVolumeChanged(int); + + public: + MetronomeConfig(QWidget* parent, const char* name = 0); + }; +#endif diff --git a/muse2/muse/widgets/metronomebase.ui b/muse2/muse/widgets/metronomebase.ui new file mode 100644 index 00000000..c30f5bf1 --- /dev/null +++ b/muse2/muse/widgets/metronomebase.ui @@ -0,0 +1,604 @@ + +MetronomeConfigBase + + + MetronomeConfigBase + + + + 0 + 0 + 557 + 347 + + + + MusE: Metronome Config + + + true + + + + unnamed + + + 11 + + + 6 + + + + layout20 + + + + unnamed + + + + GroupBox1 + + + Metronome + + + + unnamed + + + 11 + + + 6 + + + + layout18 + + + + unnamed + + + + audioBeepLayout + + + + unnamed + + + + audioBeep + + + Audio Beep + + + + + audioBeepRoutesButton + + + Choose outputs... + + + true + + + + + + + layout17 + + + + unnamed + + + + volumeSlider + + + 0 + + + 100 + + + 1 + + + 10 + + + 50 + + + Horizontal + + + + + volumeLabel + + + 50 + + + + + textLabel1 + + + % Audio volume + + + + + + + midiClick + + + MIDI Click + + + true + + + + + Layout11 + + + + unnamed + + + 0 + + + 6 + + + + Layout10 + + + + unnamed + + + 0 + + + 6 + + + + TextLabel5 + + + Midi Channel + + + + + TextLabel1 + + + Measure Note + + + + + midiChannel + + + 16 + + + 1 + + + + + TextLabel2 + + + Measure Velocity + + + + + TextLabel4 + + + Beat Velocity + + + + + midiPort + + + 16 + + + 1 + + + + + TextLabel3 + + + Beat Note + + + + + beatNote + + + + + measureVelocity + + + 127 + + + + + measureNote + + + + + TextLabel6 + + + Midi Port + + + + + beatVelocity + + + 127 + + + + + + + Spacer10 + + + Horizontal + + + Expanding + + + + 20 + 20 + + + + + + + + + + + + GroupBox2 + + + Precount + + + + unnamed + + + 11 + + + 6 + + + + precountEnable + + + false + + + enable + + + false + + + + + Layout6 + + + + unnamed + + + 0 + + + 6 + + + + precountBars + + + false + + + 10 + + + 1 + + + 2 + + + + + TextLabel7 + + + Bars + + + + + + + precountFromMastertrack + + + false + + + From Mastertrack + + + true + + + + + Layout5 + + + + unnamed + + + 0 + + + 6 + + + + precountSigZ + + + false + + + 32 + + + 1 + + + 4 + + + + + TextLabel8 + + + / + + + + + precountSigN + + + false + + + 64 + + + 2 + + + 4 + + + + + TextLabel9 + + + Signature + + + + + + + precountPrerecord + + + false + + + Prerecord + + + + + precountPreroll + + + false + + + Preroll + + + + + + + layout19 + + + + unnamed + + + + textLabel3 + + + Hint: Enable metronome in Transportpanel + + + + + Horizontal Spacing2 + + + Horizontal + + + Expanding + + + + 8 + 20 + + + + + + buttonApply + + + &Apply + + + Alt+A + + + true + + + + + buttonOk + + + &OK + + + Alt+O + + + true + + + true + + + + + buttonCancel + + + &Cancel + + + Alt+C + + + true + + + + + + + + + + + buttonOk + clicked() + MetronomeConfigBase + accept() + + + buttonCancel + clicked() + MetronomeConfigBase + reject() + + + volumeSlider + valueChanged(int) + volumeLabel + setNum(int) + + + + audioBeep + audioBeepRoutesButton + midiClick + measureNote + measureVelocity + beatNote + beatVelocity + midiChannel + midiPort + precountEnable + precountBars + precountFromMastertrack + precountSigZ + precountPrerecord + precountPreroll + precountSigN + buttonApply + buttonOk + buttonCancel + + + diff --git a/muse2/muse/widgets/midisync.ui b/muse2/muse/widgets/midisync.ui new file mode 100644 index 00000000..f9c9a816 --- /dev/null +++ b/muse2/muse/widgets/midisync.ui @@ -0,0 +1,443 @@ + +MidiSyncConfigBase +midi sync +configuration dialog +werner schweer + + + MidiSyncConfigBase + + + + 0 + 0 + 574 + 419 + + + + MusE: Midi Sync + + + + unnamed + + + + ApplyOk + + + + unnamed + + + 0 + + + 6 + + + + Spacer1_2 + + + Horizontal + + + Expanding + + + + 20 + 20 + + + + + + applyButton + + + Apply + + + + + okButton + + + Ok + + + true + + + + + cancelButton + + + Cancel + + + + + + + GroupBox13 + + + true + + + MTC + + + + unnamed + + + 11 + + + 6 + + + + layout7 + + + + unnamed + + + + textLabel2 + + + Type: + + + + + + 24 + + + + + 25 + + + + + 30D + + + + + 30N + + + + mtcSyncType + + + + 1 + 1 + 0 + 0 + + + + + + spacer4 + + + Horizontal + + + Expanding + + + + 40 + 20 + + + + + + + + layout5 + + + + unnamed + + + + textLabel1 + + + Offset: + + + + + mtcOffH + + + false + + + 23 + + + hour + + + + + TextLabel2 + + + h + + + + + mtcOffM + + + false + + + 59 + + + minute + + + + + TextLabel3 + + + m + + + + + mtcOffS + + + false + + + 59 + + + second + + + + + TextLabel4 + + + s + + + + + mtcOffF + + + false + + + 30 + + + frame + + + + + TextLabel5 + + + f + + + + + mtcOffSf + + + false + + + subframe + + + + + + + + + syncGen + + + Sync receiving and sending + + + + unnamed + + + + useJackTransportCheckbox + + + true + + + Use Jack transport + + + false + + + Send and receive Jack transport + + + Send and receive Jack transport information, + including stop, start and position. + + + + + jackTransportMasterCheckbox + + + true + + + Jack transport Timebase Master + + + true + + + Make MusE the Jack transport Timebase Master + + + Make MusE the Jack transport Timebase Master. +Allows Jack to show time as + MusE Bars, Beats, and Ticks. +MusE will try to become master, but other + Jack clients can also take over later. +You can always click here again for Master. + + + + + extSyncCheckbox + + + true + + + Slave to external sync + + + false + + + Control MusE timing by external midi clock or MTC sync + + + When in slave mode, tempo is + controlled externally. +MusE can sync to midi clock, or MTC quarter frame sync. +Enabled inputs in the list will + be in effect (RMC, RMMC, RMTC). + + + + + syncDelayLayout + + + + + syncDelaySpinBox + + + ms + + + 60000 + + + 0 + + + 1 + + + 1 + + + Send start to first clock delay + + + Allows 'slow sync' devices time + to synchronize to MusE. This value is the + delay from sending start to sending + the first clock. + + + + + syncDelayLabel + + + Send sync delay + + + AlignVCenter|AlignLeft + + + + + + + devicesListView + + + + + + + + mtcOffH + mtcOffM + mtcOffS + mtcOffF + mtcOffSf + applyButton + okButton + cancelButton + + + mopslot() + + + diff --git a/muse2/muse/widgets/midisyncimpl.cpp b/muse2/muse/widgets/midisyncimpl.cpp new file mode 100644 index 00000000..e763c62f --- /dev/null +++ b/muse2/muse/widgets/midisyncimpl.cpp @@ -0,0 +1,1294 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: midisyncimpl.cpp,v 1.1.1.1.2.4 2009/05/03 04:14:01 terminator356 Exp $ +// +// (C) Copyright 1999/2000 Werner Schweer (ws@seh.de) +//========================================================= + +//#include "midisyncimpl.h" +//#include "sync.h" +//#include "globals.h" + +#include +#include +#include +#include +#include +#include +//#include +#include +#include +//#include +#include +//Added by qt3to4: +#include + +#include "app.h" +#include "song.h" +#include "midiport.h" +#include "midiseq.h" +#include "mididev.h" +#include "icons.h" +#include "sync.h" +#include "globals.h" +#include "midisyncimpl.h" +#include "driver/audiodev.h" +#include "audio.h" + +enum { DEVCOL_NO = 0, DEVCOL_NAME, DEVCOL_IN, DEVCOL_TICKIN, DEVCOL_MRTIN, DEVCOL_MMCIN, DEVCOL_MTCIN, DEVCOL_MTCTYPE, + DEVCOL_RID, DEVCOL_RCLK, DEVCOL_RMRT, DEVCOL_RMMC, DEVCOL_RMTC, DEVCOL_RREWSTART, + DEVCOL_TID, DEVCOL_TCLK, DEVCOL_TMRT, DEVCOL_TMMC, DEVCOL_TMTC, /* DEVCOL_TREWSTART, */ }; + +//MidiSyncInfo tmpMidiSyncPorts[MIDI_PORTS]; + +//--------------------------------------------------------- +// MSyncHeaderTip::maybeTip +//--------------------------------------------------------- + +void MSyncHeaderTip::maybeTip(const QPoint &pos) + { + Q3Header* w = (Q3Header*)_parent->parentWidget(); + int section = w->sectionAt(pos.x()); + if (section == -1) + return; + QRect r(w->sectionPos(section), 0, w->sectionSize(section), + w->height()); + QString p; + switch (section) { + case DEVCOL_NO: p = Q3Header::tr("Port Number"); break; + case DEVCOL_NAME: p = Q3Header::tr("Name of the midi device associated with" + " this port number"); break; + case DEVCOL_IN: p = Q3Header::tr("Midi clock input detected"); break; + case DEVCOL_TICKIN: p = Q3Header::tr("Midi tick input detected"); break; + case DEVCOL_MRTIN: p = Q3Header::tr("Midi real time input detected"); break; + case DEVCOL_MMCIN: p = Q3Header::tr("MMC input detected"); break; + case DEVCOL_MTCIN: p = Q3Header::tr("MTC input detected"); break; + case DEVCOL_MTCTYPE: p = Q3Header::tr("Detected SMPTE format"); break; + case DEVCOL_RID: p = Q3Header::tr("Receive id number. 127 = Global. Double click to edit."); break; + case DEVCOL_RCLK: p = Q3Header::tr("Accept midi clock input"); break; + case DEVCOL_RMRT: p = Q3Header::tr("Accept midi real time input"); break; + case DEVCOL_RMMC: p = Q3Header::tr("Accept MMC input"); break; + case DEVCOL_RMTC: p = Q3Header::tr("Accept MTC input"); break; + case DEVCOL_RREWSTART: p = Q3Header::tr("Receive start rewinds before playing"); break; + case DEVCOL_TID: p = Q3Header::tr("Transmit id number. 127 = Global. Double click to edit."); break; + case DEVCOL_TCLK: p = Q3Header::tr("Send midi clock output"); break; + case DEVCOL_TMRT: p = Q3Header::tr("Send midi realtime output"); break; + case DEVCOL_TMMC: p = Q3Header::tr("Send MMC output"); break; + case DEVCOL_TMTC: p = Q3Header::tr("Send MTC output"); break; + //case DEVCOL_TREWSTART: p = QHeader::tr("Send continue instead of start"); break; + default: return; + } + //tip(r, p); ddskrjo + } + +//--------------------------------------------------------- +// MSyncWhatsThis::text +//--------------------------------------------------------- + +QString MSyncWhatsThis::text(const QPoint& pos) +{ + int n = header->cellAt(pos.x()); + if (n == -1) + return QString::null; + switch (header->mapToLogical(n)) { + case DEVCOL_NO: + return Q3Header::tr("Port Number"); + case DEVCOL_NAME: + return Q3Header::tr("Name of the midi device associated with this port number"); + case DEVCOL_IN: + return Q3Header::tr("Midi clock input detected.\n" + "Current port actually used is red.\nClick to force a port to be used."); + case DEVCOL_TICKIN: + return Q3Header::tr("Midi tick input detected"); + case DEVCOL_MRTIN: + return Q3Header::tr("Midi realtime input detected, including\n start/stop/continue, and song position."); + case DEVCOL_MMCIN: + return Q3Header::tr("MMC input detected, including stop/play/deferred play, and locate."); + //"Current port actually used is red. Click to force a port to be current."); + case DEVCOL_MTCIN: + return Q3Header::tr("MTC input detected, including forward quarter-frame sync and full-frame locate.\n" + "Current port actually used is red. Click to force a port to be current."); + case DEVCOL_MTCTYPE: + return Q3Header::tr("Detected SMPTE format: 24fps, 25fps, 30fps drop frame, or 30fps non-drop\n" + "Detects format of MTC quarter and full frame, and MMC locate."); + case DEVCOL_RID: + return Q3Header::tr("Receive id number. 127 = global receive all, even if not global."); + case DEVCOL_RCLK: + return Q3Header::tr("Accept midi clock input. Only one input is used for clock.\n" + "Auto-acquire: If two or more port realtime inputs are enabled,\n" + " the first clock detected is used, until clock is lost,\n" + " then another can take over. Best if each turns off its clock\n" + " at stop, so MusE can re-acquire the clock from another port.\n" + "Click on detect indicator to force another."); + case DEVCOL_RMRT: + return Q3Header::tr("Accept midi realtime input, including\n start/stop/continue, and song position.\n" + "Non-clock events (start,stop etc) are\n accepted by ALL enabled ports.\n" + "This means you may have several master\n devices connected, and muse will accept\n" + " input from them."); + case DEVCOL_RMMC: + return Q3Header::tr("Accept MMC input, including stop/play/deferred play, and locate."); + case DEVCOL_RMTC: + return Q3Header::tr("Accept MTC input, including forward quarter-frame sync and full-frame locate.\n" + "See 'rc' column for more help."); + case DEVCOL_RREWSTART: + return Q3Header::tr("When start is received, rewind before playing.\n" + "Note: It may be impossible to rewind fast\n" + " enough to synchronize with the external device."); + case DEVCOL_TID: + return Q3Header::tr("Transmit id number. 127 = global transmit to all."); + case DEVCOL_TCLK: + return Q3Header::tr("Send midi clock output. If 'Slave to External Sync' is chosen,\n" + " muse can re-transmit clock to any other chosen ports."); + case DEVCOL_TMRT: + return Q3Header::tr("Send midi realtime output, including start/stop/continue,\n" + " and song position. If 'Slave to external sync' is chosen,\n" + " muse can re-transmit midi realtime input messages to any\n" + " other chosen ports. This means you may have several slave\n" + " devices connected, and muse can re-send realtime messages\n" + " to any or all of them."); + case DEVCOL_TMMC: + return Q3Header::tr("Send MMC output"); + case DEVCOL_TMTC: + return Q3Header::tr("Send MTC output"); + //case DEVCOL_TREWSTART: + // return QHeader::tr("When transport is starting, send continue instead of start.\n"); + default: + break; + } + return QString::null; +} + +/* +//--------------------------------------------------------- +// MidiSyncLViewItem +// setDevice +//--------------------------------------------------------- + +void MidiSyncLViewItem::setDevice(MidiDevice* d) +{ + _device = d; + if(_device) + _syncInfo.copyParams(_device->syncInfo()); +} +*/ + +//--------------------------------------------------------- +// MidiSyncLViewItem +// setPort +//--------------------------------------------------------- + +void MidiSyncLViewItem::setPort(int port) +{ + _port = port; + if(_port < 0 || port > MIDI_PORTS) + return; + + //_syncInfo.copyParams(midiPorts[port].syncInfo()); + copyFromSyncInfo(midiPorts[port].syncInfo()); +} + +//--------------------------------------------------------- +// MidiSyncLViewItem +// copyFromSyncInfo +//--------------------------------------------------------- + +void MidiSyncLViewItem::copyFromSyncInfo(const MidiSyncInfo &sp) +{ + _idOut = sp.idOut(); + _idIn = sp.idIn(); + _sendMC = sp.MCOut(); + _sendMRT = sp.MRTOut(); + _sendMMC = sp.MMCOut(); + _sendMTC = sp.MTCOut(); + _recMC = sp.MCIn(); + _recMRT = sp.MRTIn(); + _recMMC = sp.MMCIn(); + _recMTC = sp.MTCIn(); + _recRewOnStart = sp.recRewOnStart(); + //_sendContNotStart = sp.sendContNotStart(); +} + +//--------------------------------------------------------- +// MidiSyncLViewItem +// copyToSyncInfo +//--------------------------------------------------------- + +void MidiSyncLViewItem::copyToSyncInfo(MidiSyncInfo &sp) +{ + sp.setIdOut(_idOut); + sp.setIdIn(_idIn); + sp.setMCOut(_sendMC); + sp.setMRTOut(_sendMRT); + sp.setMMCOut(_sendMMC); + sp.setMTCOut(_sendMTC); + sp.setMCIn(_recMC); + sp.setMRTIn(_recMRT); + sp.setMMCIn(_recMMC); + sp.setMTCIn(_recMTC); + sp.setRecRewOnStart(_recRewOnStart); + //sp.setSendContNotStart(_sendContNotStart); +} + +//--------------------------------------------------------- +// MidiSyncConfig +// Midi Sync Config +//--------------------------------------------------------- + +MidiSyncConfig::MidiSyncConfig(QWidget* parent, const char* name) + : MidiSyncConfigBase(parent, name) +{ + _synctooltip = 0; + + _dirty = false; + applyButton->setEnabled(false); + + //inHeartBeat = true; + + //for(int i = 0; i < MIDI_PORTS; ++i) + // tmpMidiSyncPorts[i] = midiSyncPorts[i]; + + //bool ext = extSyncFlag.value(); + //syncMode->setButton(int(ext)); + //syncChanged(ext); +// extSyncCheckbox->setChecked(extSyncFlag.value()); + +// dstDevId->setValue(txDeviceId); +// srcDevId->setValue(rxDeviceId); +// srcSyncPort->setValue(rxSyncPort + 1); +// dstSyncPort->setValue(txSyncPort + 1); + +// mtcSync->setChecked(genMTCSync); +// mcSync->setChecked(genMCSync); +// midiMachineControl->setChecked(genMMC); + +// acceptMTCCheckbox->setChecked(acceptMTC); + //acceptMTCCheckbox->setChecked(false); +// acceptMCCheckbox->setChecked(acceptMC); +// acceptMMCCheckbox->setChecked(acceptMMC); + +// mtcSyncType->setCurrentItem(mtcType); + +// mtcOffH->setValue(mtcOffset.h()); +// mtcOffM->setValue(mtcOffset.m()); +// mtcOffS->setValue(mtcOffset.s()); +// mtcOffF->setValue(mtcOffset.f()); +// mtcOffSf->setValue(mtcOffset.sf()); + + + + + devicesListView->setSorting(-1); + devicesListView->setAllColumnsShowFocus(true); + devicesListView->addColumn(tr("Port")); + devicesListView->addColumn(tr("Device Name"), 120); + devicesListView->addColumn(tr("c")); + devicesListView->addColumn(tr("k")); + devicesListView->addColumn(tr("r")); + devicesListView->addColumn(tr("m")); + devicesListView->addColumn(tr("t")); + devicesListView->addColumn(tr("type")); + devicesListView->addColumn(tr("rid")); // Receive + devicesListView->addColumn(tr("rc")); // Receive + devicesListView->addColumn(tr("rr")); // Receive + devicesListView->addColumn(tr("rm")); // Receive + devicesListView->addColumn(tr("rt")); // Receive + devicesListView->addColumn(tr("rw")); // Receive + devicesListView->addColumn(tr("tid")); // Transmit + devicesListView->addColumn(tr("tc")); // Transmit + devicesListView->addColumn(tr("tr")); // Transmit + devicesListView->addColumn(tr("tm")); // Transmit + devicesListView->addColumn(tr("tt")); // Transmit + //devicesListView->addColumn(tr("trs")); // Transmit + devicesListView->setFocusPolicy(Qt::NoFocus); + + devicesListView->setColumnAlignment(DEVCOL_NO, Qt::AlignHCenter); + devicesListView->setColumnAlignment(DEVCOL_IN, Qt::AlignCenter); + devicesListView->setColumnAlignment(DEVCOL_TICKIN, Qt::AlignCenter); + devicesListView->setColumnAlignment(DEVCOL_MRTIN, Qt::AlignCenter); + devicesListView->setColumnAlignment(DEVCOL_MMCIN, Qt::AlignCenter); + devicesListView->setColumnAlignment(DEVCOL_MTCIN, Qt::AlignCenter); + //devicesListView->setColumnAlignment(DEVCOL_MTCTYPE, AlignCenter); + //devicesListView->setColumnAlignment(DEVCOL_RID, AlignCenter); + devicesListView->setColumnAlignment(DEVCOL_RCLK, Qt::AlignCenter); + devicesListView->setColumnAlignment(DEVCOL_RMRT, Qt::AlignCenter); + devicesListView->setColumnAlignment(DEVCOL_RMMC, Qt::AlignCenter); + devicesListView->setColumnAlignment(DEVCOL_RMTC, Qt::AlignCenter); + devicesListView->setColumnAlignment(DEVCOL_RREWSTART, Qt::AlignCenter); + //devicesListView->setColumnAlignment(DEVCOL_TID, AlignCenter); + devicesListView->setColumnAlignment(DEVCOL_TCLK, Qt::AlignCenter); + devicesListView->setColumnAlignment(DEVCOL_TMRT, Qt::AlignCenter); + devicesListView->setColumnAlignment(DEVCOL_TMMC, Qt::AlignCenter); + devicesListView->setColumnAlignment(DEVCOL_TMTC, Qt::AlignCenter); + //devicesListView->setColumnAlignment(DEVCOL_TREWSTART, AlignCenter); + devicesListView->header()->setResizeEnabled(false, DEVCOL_NO); + devicesListView->header()->setResizeEnabled(false, DEVCOL_IN); + devicesListView->header()->setResizeEnabled(false, DEVCOL_TICKIN); + devicesListView->header()->setResizeEnabled(false, DEVCOL_MRTIN); + devicesListView->header()->setResizeEnabled(false, DEVCOL_MMCIN); + devicesListView->header()->setResizeEnabled(false, DEVCOL_MTCIN); + devicesListView->header()->setResizeEnabled(false, DEVCOL_RCLK); + devicesListView->header()->setResizeEnabled(false, DEVCOL_RMRT); + devicesListView->header()->setResizeEnabled(false, DEVCOL_RMMC); + devicesListView->header()->setResizeEnabled(false, DEVCOL_RMTC); + devicesListView->header()->setResizeEnabled(false, DEVCOL_RMTC); + devicesListView->header()->setResizeEnabled(false, DEVCOL_RREWSTART); + devicesListView->header()->setResizeEnabled(false, DEVCOL_TCLK); + devicesListView->header()->setResizeEnabled(false, DEVCOL_TMRT); + devicesListView->header()->setResizeEnabled(false, DEVCOL_TMMC); + //devicesListView->header()->setResizeEnabled(false, DEVCOL_TREWSTART); + //devicesListView->setResizeMode(QListView::LastColumn); + devicesListView->setResizeMode(Q3ListView::NoColumn); + + + new MSyncWhatsThis(devicesListView, devicesListView->header()); + _synctooltip = new MSyncHeaderTip(devicesListView->header()); + //MSyncHeaderTip::add(devicesListView->header(), QString("Midi sync ports")); + +// updateSyncInfoLV(); + + songChanged(-1); + + //connect(devicesListView, SIGNAL(pressed(QListViewItem*,const QPoint&,int)), + // this, SLOT(dlvClicked(QListViewItem*,const QPoint&,int))); + connect(devicesListView, SIGNAL(mouseButtonClicked(int, Q3ListViewItem*,const QPoint&, int)), + this, SLOT(dlvClicked(int, Q3ListViewItem*,const QPoint&, int))); + connect(devicesListView, SIGNAL(doubleClicked(Q3ListViewItem*,const QPoint&,int)), + this, SLOT(dlvDoubleClicked(Q3ListViewItem*,const QPoint&,int))); + //connect(devicesListView, SIGNAL(itemRenamed(QListViewItem*, int, const QString&)), + // this, SLOT(renameOk(QListViewItem*, int, const QString&))); + + connect(okButton, SIGNAL(clicked()), SLOT(ok())); + connect(applyButton, SIGNAL(clicked()), SLOT(apply())); + connect(cancelButton, SIGNAL(clicked()), SLOT(cancel())); + + //connect(syncMode, SIGNAL(clicked(int)), SLOT(syncChanged(int))); + connect(extSyncCheckbox, SIGNAL(clicked()), SLOT(syncChanged())); + connect(mtcSyncType, SIGNAL(activated(int)), SLOT(syncChanged())); + connect(useJackTransportCheckbox, SIGNAL(clicked()), SLOT(syncChanged())); + connect(jackTransportMasterCheckbox, SIGNAL(clicked()), SLOT(syncChanged())); + connect(&extSyncFlag, SIGNAL(valueChanged(bool)), SLOT(extSyncChanged(bool))); + connect(syncDelaySpinBox, SIGNAL(valueChanged(int)), SLOT(syncChanged())); + + // Done in show(). + //connect(song, SIGNAL(songChanged(int)), SLOT(songChanged(int))); + //connect(heartBeatTimer, SIGNAL(timeout()), SLOT(heartBeat())); + + //inHeartBeat = false; +} + +MidiSyncConfig::~MidiSyncConfig() +{ + delete _synctooltip; +} + +//--------------------------------------------------------- +// songChanged +//--------------------------------------------------------- + +void MidiSyncConfig::songChanged(int flags) +{ + // Is it simply a midi controller value adjustment? Forget it. Otherwise, it's mainly midi port/device changes we want. + if(flags == SC_MIDI_CONTROLLER || + !(flags & (SC_CONFIG | SC_MASTER | SC_TEMPO | SC_SIG | SC_TRACK_INSERTED | SC_TRACK_REMOVED | SC_TRACK_MODIFIED | + SC_PART_INSERTED | SC_PART_REMOVED | SC_PART_MODIFIED | SC_EVENT_INSERTED | SC_EVENT_REMOVED | SC_EVENT_MODIFIED | + SC_MIDI_CONTROLLER_ADD))) + return; + + // Reset dirty flag, since we're loading new values. + _dirty = false; + if(applyButton->isEnabled()) + applyButton->setEnabled(false); + + //for(int i = 0; i < MIDI_PORTS; ++i) + // tmpMidiSyncPorts[i] = midiSyncPorts[i]; + + extSyncCheckbox->blockSignals(true); + useJackTransportCheckbox->blockSignals(true); + jackTransportMasterCheckbox->blockSignals(true); + syncDelaySpinBox->blockSignals(true); + extSyncCheckbox->setChecked(extSyncFlag.value()); + useJackTransportCheckbox->setChecked(useJackTransport.value()); + jackTransportMasterCheckbox->setChecked(jackTransportMaster); + //jackTransportMasterCheckbox->setEnabled(useJackTransport); + syncDelaySpinBox->setValue(syncSendFirstClockDelay); + syncDelaySpinBox->blockSignals(false); + jackTransportMasterCheckbox->blockSignals(false); + useJackTransportCheckbox->blockSignals(false); + extSyncCheckbox->blockSignals(false); + + mtcSyncType->setCurrentItem(mtcType); + + mtcOffH->blockSignals(true); + mtcOffM->blockSignals(true); + mtcOffS->blockSignals(true); + mtcOffF->blockSignals(true); + mtcOffSf->blockSignals(true); + mtcOffH->setValue(mtcOffset.h()); + mtcOffM->setValue(mtcOffset.m()); + mtcOffS->setValue(mtcOffset.s()); + mtcOffF->setValue(mtcOffset.f()); + mtcOffSf->setValue(mtcOffset.sf()); + mtcOffH->blockSignals(false); + mtcOffM->blockSignals(false); + mtcOffS->blockSignals(false); + mtcOffF->blockSignals(false); + mtcOffSf->blockSignals(false); + + updateSyncInfoLV(); + + //selectionChanged(); +} + +//--------------------------------------------------------- +// heartBeat +//--------------------------------------------------------- + +void MidiSyncConfig::heartBeat() +{ + //inHeartBeat = true; + + MidiSyncLViewItem* lvi = (MidiSyncLViewItem*)devicesListView->firstChild(); + while(lvi) + { + int port = lvi->port(); + if(port >= 0 && port < MIDI_PORTS) + { + bool sdet = midiPorts[port].syncInfo().MCSyncDetect(); + if(sdet) + { + if(port == curMidiSyncInPort) + { + if(!lvi->_curDet) + { + // Added by Tim. p3.3.6 + //printf("MidiSyncConfig::heartBeat setting current red icon\n"); + + lvi->_curDet = true; + lvi->_inDet = false; + lvi->setPixmap(DEVCOL_IN, *record1_Icon); + } + } + else + if(!lvi->_inDet) + { + // Added by Tim. p3.3.6 + //printf("MidiSyncConfig::heartBeat setting non-current green icon\n"); + + lvi->_inDet = true; + lvi->_curDet = false; + lvi->setPixmap(DEVCOL_IN, *dotIcon); + } + } + else + { + if(lvi->_curDet || lvi->_inDet) + { + // Added by Tim. p3.3.6 + //printf("MidiSyncConfig::heartBeat setting off icon\n"); + + lvi->_curDet = false; + lvi->_inDet = false; + lvi->setPixmap(DEVCOL_IN, *dothIcon); + } + } + + sdet = midiPorts[port].syncInfo().tickDetect(); + if(sdet) + { + if(!lvi->_tickDet) + { + // Added by Tim. p3.3.6 + //printf("MidiSyncConfig::heartBeat setting tick on icon\n"); + + lvi->_tickDet = true; + lvi->setPixmap(DEVCOL_TICKIN, *dotIcon); + } + } + else + { + if(lvi->_tickDet) + { + // Added by Tim. p3.3.6 + //printf("MidiSyncConfig::heartBeat setting tick off icon\n"); + + lvi->_tickDet = false; + lvi->setPixmap(DEVCOL_TICKIN, *dothIcon); + } + } + + sdet = midiPorts[port].syncInfo().MRTDetect(); + if(sdet) + { + if(!lvi->_MRTDet) + { + // Added by Tim. p3.3.6 + //printf("MidiSyncConfig::heartBeat setting MRT on icon\n"); + + lvi->_MRTDet = true; + lvi->setPixmap(DEVCOL_MRTIN, *dotIcon); + } + } + else + { + if(lvi->_MRTDet) + { + // Added by Tim. p3.3.6 + //printf("MidiSyncConfig::heartBeat setting MRT off icon\n"); + + lvi->_MRTDet = false; + lvi->setPixmap(DEVCOL_MRTIN, *dothIcon); + } + } + + int type = midiPorts[port].syncInfo().recMTCtype(); + sdet = midiPorts[port].syncInfo().MMCDetect(); + bool mtcdet = midiPorts[port].syncInfo().MTCDetect(); + if(sdet) + { + if(!lvi->_MMCDet) + { + // Added by Tim. p3.3.6 + //printf("MidiSyncConfig::heartBeat setting MMC on icon\n"); + + lvi->_MMCDet = true; + lvi->setPixmap(DEVCOL_MMCIN, *dotIcon); + } + // MMC locate command can contain SMPTE format type. Update now. + if(!mtcdet && lvi->_recMTCtype != type) + { + lvi->_recMTCtype = type; + switch(type) + { + case 0: + lvi->setText(DEVCOL_MTCTYPE, "24"); + break; + case 1: + lvi->setText(DEVCOL_MTCTYPE, "25"); + break; + case 2: + lvi->setText(DEVCOL_MTCTYPE, "30D"); + break; + case 3: + lvi->setText(DEVCOL_MTCTYPE, "30N"); + break; + default: + lvi->setText(DEVCOL_MTCTYPE, "??"); + break; + } + } + } + else + { + if(lvi->_MMCDet) + { + // Added by Tim. p3.3.6 + //printf("MidiSyncConfig::heartBeat setting MMC off icon\n"); + + lvi->_MMCDet = false; + lvi->setPixmap(DEVCOL_MMCIN, *dothIcon); + } + } + + if(mtcdet) + { + if(port == curMidiSyncInPort) + { + if(!lvi->_curMTCDet) + { + // Added by Tim. p3.3.6 + //printf("MidiSyncConfig::heartBeat setting current red icon\n"); + + lvi->_curMTCDet = true; + lvi->_MTCDet = false; + lvi->setPixmap(DEVCOL_MTCIN, *record1_Icon); + } + } + else + if(!lvi->_MTCDet) + { + // Added by Tim. p3.3.6 + //printf("MidiSyncConfig::heartBeat setting MTC on icon\n"); + + lvi->_MTCDet = true; + lvi->_curMTCDet = false; + lvi->setPixmap(DEVCOL_MTCIN, *dotIcon); + } + + if(lvi->_recMTCtype != type) + { + lvi->_recMTCtype = type; + switch(type) + { + case 0: + lvi->setText(DEVCOL_MTCTYPE, "24"); + break; + case 1: + lvi->setText(DEVCOL_MTCTYPE, "25"); + break; + case 2: + lvi->setText(DEVCOL_MTCTYPE, "30D"); + break; + case 3: + lvi->setText(DEVCOL_MTCTYPE, "30N"); + break; + default: + lvi->setText(DEVCOL_MTCTYPE, "??"); + break; + } + } + } + else + { + if(lvi->_curMTCDet || lvi->_MTCDet) + { + // Added by Tim. p3.3.6 + //printf("MidiSyncConfig::heartBeat setting MTC off icon\n"); + + lvi->_MTCDet = false; + lvi->_curMTCDet = false; + lvi->setPixmap(DEVCOL_MTCIN, *dothIcon); + } + } + } + + //MidiDevice* dev = lvi->device(); + //bool sdet = dev->syncInfo().MCSyncDetect(); + //if(lvi->pixmap(DEVCOL_IN) != (sdet ? *dotIcon : *dothIcon)) + // lvi->setPixmap(DEVCOL_IN, sdet ? *dotIcon : *dothIcon); + + lvi = (MidiSyncLViewItem*)lvi->nextSibling(); + } + + //inHeartBeat = false; +} + +//--------------------------------------------------------- +// syncChanged +// val = 1 - Master Mode +// 0 - Slave Mode +//--------------------------------------------------------- + +void MidiSyncConfig::syncChanged() + { + setDirty(); + + //jackTransportMasterCheckbox->setEnabled(useJackTransport); + + //acceptMTCCheckbox->setEnabled(val); +// acceptMTCCheckbox->setEnabled(false); +// acceptMCCheckbox->setEnabled(val); +// acceptMMCCheckbox->setEnabled(val); + } + +//--------------------------------------------------------- +// extSyncChanged +//--------------------------------------------------------- + +void MidiSyncConfig::extSyncChanged(bool v) + { + extSyncCheckbox->blockSignals(true); + extSyncCheckbox->setChecked(v); +// if(v) +// song->setMasterFlag(false); + extSyncCheckbox->blockSignals(false); + } + +//--------------------------------------------------------- +// ok Pressed +//--------------------------------------------------------- + +void MidiSyncConfig::ok() + { + apply(); + cancel(); + } + +//--------------------------------------------------------- +// cancel Pressed +//--------------------------------------------------------- + +void MidiSyncConfig::cancel() + { + _dirty = false; + if(applyButton->isEnabled()) + applyButton->setEnabled(false); + + close(false); + } + +//--------------------------------------------------------- +// show +//--------------------------------------------------------- + +void MidiSyncConfig::show() +{ + songChanged(-1); + connect(song, SIGNAL(songChanged(int)), SLOT(songChanged(int))); + connect(heartBeatTimer, SIGNAL(timeout()), SLOT(heartBeat())); + QDialog::show(); +} + +//--------------------------------------------------------- +// closeEvent +//--------------------------------------------------------- + +void MidiSyncConfig::closeEvent(QCloseEvent* e) + { + if(_dirty) + { + int n = QMessageBox::warning(this, tr("MusE"), + tr("Settings have changed\n" + "Apply sync settings?"), + tr("&Apply"), tr("&No"), tr("&Abort"), 0, 2); + + if(n == 2) + { + e->ignore(); + return; + } + + if(n == 0) + apply(); + } + + //emit deleted((unsigned long)this); + + disconnect(heartBeatTimer, SIGNAL(timeout()), this, SLOT(heartBeat())); + disconnect(song, SIGNAL(songChanged(int)), this, SLOT(songChanged(int))); + + e->accept(); + } + +//--------------------------------------------------------- +// apply Pressed +//--------------------------------------------------------- + +void MidiSyncConfig::apply() +{ +// txDeviceId = dstDevId->value(); +// rxDeviceId = srcDevId->value(); +// rxSyncPort = srcSyncPort->value() - 1; +// txSyncPort = dstSyncPort->value() - 1; + +// genMTCSync = mtcSync->isChecked(); +// genMCSync = mcSync->isChecked(); +// genMMC = midiMachineControl->isChecked(); + + syncSendFirstClockDelay = syncDelaySpinBox->value(); + + mtcType = mtcSyncType->currentItem(); + //extSyncFlag.setValue(syncMode->id(syncMode->selected())); + //extSyncFlag.blockSignals(true); + extSyncFlag.setValue(extSyncCheckbox->isChecked()); +// if(extSyncFlag.value()) +// song->setMasterFlag(false); + //extSyncFlag.blockSignals(false); + useJackTransport.setValue(useJackTransportCheckbox->isChecked()); +// if(useJackTransport) + jackTransportMaster = jackTransportMasterCheckbox->isChecked(); +// else +// jackTransportMaster = false; +// jackTransportMasterCheckbox->setEnabled(useJackTransport); + if(audioDevice) + audioDevice->setMaster(jackTransportMaster); + + 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(); + + MidiSyncLViewItem* lvi = (MidiSyncLViewItem*)devicesListView->firstChild(); + while(lvi) + { + //MidiDevice* dev = lvi->device(); + // Does the device really exist? + //if(midiDevices.find(dev) != midiDevices.end()) + // dev->syncInfo().copyParams(lvi->syncInfo()); + int port = lvi->port(); + if(port >= 0 && port < MIDI_PORTS) + //midiPorts[port].syncInfo().copyParams(lvi->syncInfo()); + lvi->copyToSyncInfo(midiPorts[port].syncInfo()); + + lvi = (MidiSyncLViewItem*)lvi->nextSibling(); + } + + //muse->changeConfig(true); // save settings + + _dirty = false; + if(applyButton->isEnabled()) + applyButton->setEnabled(false); + + // Do not call this. Causes freeze sometimes. Only will be needed if extra pollfds are used by midi seq thread. + //midiSeq->msgUpdatePollFd(); +} + +//--------------------------------------------------------- +// updateSyncInfoLV +//--------------------------------------------------------- + +void MidiSyncConfig::updateSyncInfoLV() + { + devicesListView->clear(); + for(int i = MIDI_PORTS-1; i >= 0; --i) + { + MidiPort* port = &midiPorts[i]; + MidiDevice* dev = port->device(); + // p3.3.31 + // Don't show if it is a synthesizer device. + // Hmm, some synths might support transport commands or even sync? + // If anything, the DSSI or VST synths just might... + // TODO: Must test to see if it screws any of them up, especially clock out. + // Also, if we do this, we must prevent such messages from reaching + // those ports at several other places in the code. + //if(dev && dev->isSynti()) + // continue; + + QString s; + s.setNum(i+1); + MidiSyncLViewItem* lvi = new MidiSyncLViewItem(devicesListView); + lvi->setPort(i); // setPort will copy parameters. + //MidiSyncInfo& si = lvi->syncInfo(); + //si.copyParams(port->syncInfo()); + //lvi.copyFromSyncInfo(port->syncInfo()); + MidiSyncInfo& portsi = port->syncInfo(); + + lvi->setText(DEVCOL_NO, s); + + if (dev) + lvi->setText(DEVCOL_NAME, dev->name()); + else + lvi->setText(DEVCOL_NAME, tr("")); + + if(portsi.MCSyncDetect()) + { + if(i == curMidiSyncInPort) + { + lvi->_curDet = true; + lvi->_inDet = false; + lvi->setPixmap(DEVCOL_IN, *record1_Icon); + } + else + { + lvi->_curDet = false; + lvi->_inDet = true; + lvi->setPixmap(DEVCOL_IN, *dotIcon); + } + } + else + { + lvi->_curDet = false; + lvi->_inDet = false; + lvi->setPixmap(DEVCOL_IN, *dothIcon); + } + + if(portsi.tickDetect()) + { + lvi->_tickDet = true; + lvi->setPixmap(DEVCOL_TICKIN, *dotIcon); + } + else + { + lvi->_tickDet = false; + lvi->setPixmap(DEVCOL_TICKIN, *dothIcon); + } + + if(portsi.MRTDetect()) + { + lvi->_MRTDet = true; + lvi->setPixmap(DEVCOL_MRTIN, *dotIcon); + } + else + { + lvi->_MRTDet = false; + lvi->setPixmap(DEVCOL_MRTIN, *dothIcon); + } + + if(portsi.MMCDetect()) + { + lvi->_MMCDet = true; + lvi->setPixmap(DEVCOL_MMCIN, *dotIcon); + // MMC locate command can have SMPTE format bits... + if(lvi->_recMTCtype != portsi.recMTCtype()) + { + switch(portsi.recMTCtype()) + { + case 0: + lvi->setText(DEVCOL_MTCTYPE, "24"); + break; + case 1: + lvi->setText(DEVCOL_MTCTYPE, "25"); + break; + case 2: + lvi->setText(DEVCOL_MTCTYPE, "30D"); + break; + case 3: + lvi->setText(DEVCOL_MTCTYPE, "30N"); + break; + default: + lvi->setText(DEVCOL_MTCTYPE, "??"); + break; + } + } + } + else + { + lvi->_MMCDet = false; + lvi->setPixmap(DEVCOL_MMCIN, *dothIcon); + } + + if(portsi.MTCDetect()) + { + if(i == curMidiSyncInPort) + { + lvi->_curMTCDet = true; + lvi->_MTCDet = false; + lvi->setPixmap(DEVCOL_MTCIN, *record1_Icon); + } + else + { + lvi->_curMTCDet = false; + lvi->_MTCDet = true; + lvi->setPixmap(DEVCOL_MTCIN, *dotIcon); + } + + if(lvi->_recMTCtype != portsi.recMTCtype()) + { + switch(portsi.recMTCtype()) + { + case 0: + lvi->setText(DEVCOL_MTCTYPE, "24"); + break; + case 1: + lvi->setText(DEVCOL_MTCTYPE, "25"); + break; + case 2: + lvi->setText(DEVCOL_MTCTYPE, "30D"); + break; + case 3: + lvi->setText(DEVCOL_MTCTYPE, "30N"); + break; + default: + lvi->setText(DEVCOL_MTCTYPE, "??"); + break; + } + } + } + else + { + lvi->_curMTCDet = false; + lvi->_MTCDet = false; + lvi->setPixmap(DEVCOL_MTCIN, *dothIcon); + //lvi->setText(DEVCOL_MTCTYPE, "--"); + } + + //lvi->setText(DEVCOL_RID, QString().setNum(si.idIn()) ); + //lvi->setRenameEnabled(DEVCOL_RID, true); + //lvi->setPixmap(DEVCOL_RCLK, si.MCIn() ? *dotIcon : *dothIcon); + //lvi->setPixmap(DEVCOL_RMMC, si.MMCIn() ? *dotIcon : *dothIcon); + //lvi->setPixmap(DEVCOL_RMTC, si.MTCIn() ? *dotIcon : *dothIcon); + lvi->setText(DEVCOL_RID, QString().setNum(lvi->_idIn) ); + lvi->setPixmap(DEVCOL_RCLK, lvi->_recMC ? *dotIcon : *dothIcon); + lvi->setPixmap(DEVCOL_RMRT, lvi->_recMRT ? *dotIcon : *dothIcon); + lvi->setPixmap(DEVCOL_RMMC, lvi->_recMMC ? *dotIcon : *dothIcon); + lvi->setPixmap(DEVCOL_RMTC, lvi->_recMTC ? *dotIcon : *dothIcon); + lvi->setPixmap(DEVCOL_RREWSTART, lvi->_recRewOnStart ? *dotIcon : *dothIcon); + + //lvi->setText(DEVCOL_TID, QString().setNum(si.idOut()) ); + //lvi->setRenameEnabled(DEVCOL_TID, true); + //lvi->setPixmap(DEVCOL_TCLK, si.MCOut() ? *dotIcon : *dothIcon); + //lvi->setPixmap(DEVCOL_TMMC, si.MMCOut() ? *dotIcon : *dothIcon); + //lvi->setPixmap(DEVCOL_TMTC, si.MTCOut() ? *dotIcon : *dothIcon); + lvi->setText(DEVCOL_TID, QString().setNum(lvi->_idOut) ); + lvi->setPixmap(DEVCOL_TCLK, lvi->_sendMC ? *dotIcon : *dothIcon); + lvi->setPixmap(DEVCOL_TMRT, lvi->_sendMRT ? *dotIcon : *dothIcon); + lvi->setPixmap(DEVCOL_TMMC, lvi->_sendMMC ? *dotIcon : *dothIcon); + lvi->setPixmap(DEVCOL_TMTC, lvi->_sendMTC ? *dotIcon : *dothIcon); + //lvi->setPixmap(DEVCOL_TREWSTART, lvi->_sendContNotStart ? *dotIcon : *dothIcon); + + devicesListView->insertItem(lvi); + } + + /* + for(iMidiDevice id = midiDevices.begin(); id != midiDevices.end(); ++id) + { + MidiDevice* dev = *id; + + //MidiPort* port = &midiPorts[i]; + //MidiDevice* dev = port->device(); + MidiSyncLViewItem* lvi = new MidiSyncLViewItem(devicesListView); + //lvi->setPort(i); + // setDevice will copy parameters. + lvi->setDevice(dev); + MidiSyncInfo& si = lvi->syncInfo(); + //si.copyParams(dev->syncInfo()); + + lvi->setText(DEVCOL_NAME, dev->name()); + + lvi->setPixmap(DEVCOL_IN, si.MCSyncDetect() ? *dotIcon : *dothIcon); + + lvi->setText(DEVCOL_RID, QString().setNum(si.idIn()) ); + lvi->setPixmap(DEVCOL_RCLK, si.MCIn() ? *dotIcon : *dothIcon); + lvi->setPixmap(DEVCOL_RMMC, si.MMCIn() ? *dotIcon : *dothIcon); + lvi->setPixmap(DEVCOL_RMTC, si.MTCIn() ? *dotIcon : *dothIcon); + + lvi->setText(DEVCOL_TID, QString().setNum(si.idOut()) ); + lvi->setPixmap(DEVCOL_TCLK, si.MCOut() ? *dotIcon : *dothIcon); + lvi->setPixmap(DEVCOL_TMMC, si.MMCOut() ? *dotIcon : *dothIcon); + lvi->setPixmap(DEVCOL_TMTC, si.MTCOut() ? *dotIcon : *dothIcon); + + devicesListView->insertItem(lvi); + } + */ + + } + + +//--------------------------------------------------------- +// dlvClicked +//--------------------------------------------------------- + +//void MidiSyncConfig::dlvClicked(QListViewItem* item, const QPoint&, int col) +void MidiSyncConfig::dlvClicked(int /*button*/, Q3ListViewItem* item, const QPoint&, int col) +{ + if (item == 0) + return; + + MidiSyncLViewItem* lvi = (MidiSyncLViewItem*)item; + int no = lvi->port(); + if (no < 0 || no >= MIDI_PORTS) + return; + //MidiDevice* dev = lvi->device(); + // Does the device really exist? + //if(midiDevices.find(dev) == midiDevices.end()) + // return; + + //int n; + //MidiPort* port = &midiPorts[no]; + //MidiDevice* dev = port->device(); + //int rwFlags = dev ? dev->rwFlags() : 0; + //int openFlags = dev ? dev->openFlags() : 0; + //MidiSyncInfo& si = lvi->syncInfo(); + //MidiSyncInfo& portsi = midiPorts[no].syncInfo(); + + switch (col) + { + case DEVCOL_NO: + break; + case DEVCOL_NAME: + break; + case DEVCOL_IN: + // If this is not the current midi sync in port, and sync in from this port is enabled, + // and sync is in fact detected on this port, allow the user to force this port to now be the + // current sync in port. + //if(no != curMidiSyncInPort && si.MCIn() && midiPorts[no].syncInfo().MCSyncDetect()) + //if(no != curMidiSyncInPort && lvi->_recMC && midiPorts[no].syncInfo().MCSyncDetect()) + if(no != curMidiSyncInPort) + { + if(lvi->_recMC && midiPorts[no].syncInfo().MCSyncDetect()) + { + curMidiSyncInPort = no; + lvi->setPixmap(DEVCOL_IN, *record1_Icon); + } + if(lvi->_recMTC && midiPorts[no].syncInfo().MTCDetect()) + { + curMidiSyncInPort = no; + lvi->setPixmap(DEVCOL_MTCIN, *record1_Icon); + } + } + break; + case DEVCOL_TICKIN: + break; + case DEVCOL_MMCIN: + break; + case DEVCOL_MTCIN: + // If this is not the current midi sync in port, and sync in from this port is enabled, + // and sync is in fact detected on this port, allow the user to force this port to now be the + // current sync in port. + //if(no != curMidiSyncInPort && si.MTCIn() && midiPorts[no].syncInfo().MTCDetect()) + //if(no != curMidiSyncInPort && lvi->_recMTC && midiPorts[no].syncInfo().MTCDetect()) + if(no != curMidiSyncInPort) + { + if(lvi->_recMTC && midiPorts[no].syncInfo().MTCDetect()) + { + curMidiSyncInPort = no; + lvi->setPixmap(DEVCOL_MTCIN, *record1_Icon); + } + if(lvi->_recMC && midiPorts[no].syncInfo().MCSyncDetect()) + { + curMidiSyncInPort = no; + lvi->setPixmap(DEVCOL_IN, *record1_Icon); + } + } + break; + case DEVCOL_MTCTYPE: + break; + case DEVCOL_RID: + break; + case DEVCOL_RCLK: + //si.setMCIn(si.MCIn() ? false : true); + //lvi->setPixmap(DEVCOL_RCLK, si.MCIn() ? *dotIcon : *dothIcon); + lvi->_recMC = (lvi->_recMC ? false : true); + lvi->setPixmap(DEVCOL_RCLK, lvi->_recMC ? *dotIcon : *dothIcon); + setDirty(); + break; + case DEVCOL_RMRT: + lvi->_recMRT = (lvi->_recMRT ? false : true); + lvi->setPixmap(DEVCOL_RMRT, lvi->_recMRT ? *dotIcon : *dothIcon); + setDirty(); + break; + case DEVCOL_RMMC: + //si.setMMCIn(si.MMCIn() ? false : true); + //lvi->setPixmap(DEVCOL_RMMC, si.MMCIn() ? *dotIcon : *dothIcon); + lvi->_recMMC = (lvi->_recMMC ? false : true); + lvi->setPixmap(DEVCOL_RMMC, lvi->_recMMC ? *dotIcon : *dothIcon); + setDirty(); + break; + case DEVCOL_RMTC: + //si.setMTCIn(si.MTCIn() ? false : true); + //lvi->setPixmap(DEVCOL_RMTC, si.MTCIn() ? *dotIcon : *dothIcon); + lvi->_recMTC = (lvi->_recMTC ? false : true); + lvi->setPixmap(DEVCOL_RMTC, lvi->_recMTC ? *dotIcon : *dothIcon); + setDirty(); + break; + case DEVCOL_RREWSTART: + lvi->_recRewOnStart = (lvi->_recRewOnStart ? false : true); + lvi->setPixmap(DEVCOL_RREWSTART, lvi->_recRewOnStart ? *dotIcon : *dothIcon); + setDirty(); + break; + case DEVCOL_TID: + break; + case DEVCOL_TCLK: + //si.setMCOut(si.MCOut() ? false : true); + //lvi->setPixmap(DEVCOL_TCLK, si.MCOut() ? *dotIcon : *dothIcon); + lvi->_sendMC = (lvi->_sendMC ? false : true); + lvi->setPixmap(DEVCOL_TCLK, lvi->_sendMC ? *dotIcon : *dothIcon); + setDirty(); + break; + case DEVCOL_TMRT: + lvi->_sendMRT = (lvi->_sendMRT ? false : true); + lvi->setPixmap(DEVCOL_TMRT, lvi->_sendMRT ? *dotIcon : *dothIcon); + setDirty(); + break; + case DEVCOL_TMMC: + //si.setMMCOut(si.MMCOut() ? false : true); + //lvi->setPixmap(DEVCOL_TMMC, si.MMCOut() ? *dotIcon : *dothIcon); + lvi->_sendMMC = (lvi->_sendMMC ? false : true); + lvi->setPixmap(DEVCOL_TMMC, lvi->_sendMMC ? *dotIcon : *dothIcon); + setDirty(); + break; + case DEVCOL_TMTC: + //si.setMTCOut(si.MTCOut() ? false : true); + //lvi->setPixmap(DEVCOL_TMTC, si.MTCOut() ? *dotIcon : *dothIcon); + lvi->_sendMTC = (lvi->_sendMTC ? false : true); + lvi->setPixmap(DEVCOL_TMTC, lvi->_sendMTC ? *dotIcon : *dothIcon); + setDirty(); + break; + //case DEVCOL_TREWSTART: + // lvi->_sendContNotStart = (lvi->_sendContNotStart ? false : true); + // lvi->setPixmap(DEVCOL_TREWSTART, lvi->_sendContNotStart ? *dotIcon : *dothIcon); + // setDirty(); + // break; + } + //songChanged(-1); +} + +//--------------------------------------------------------- +// dlvDoubleClicked +//--------------------------------------------------------- + +void MidiSyncConfig::dlvDoubleClicked(Q3ListViewItem* item, const QPoint&, int col) +{ + if(!item) + return; + + MidiSyncLViewItem* lvi = (MidiSyncLViewItem*)item; + + //if(col == DEVCOL_RID) + // lvi->startRename(DEVCOL_RID); + //else + //if(col == DEVCOL_TID) + // lvi->startRename(DEVCOL_TID); + + bool ok = false; + if(col == DEVCOL_RID) + { + //int val = lvi->syncInfo().idIn(); + int val = lvi->_idIn; + int newval = QInputDialog::getInteger("Muse: Sync info" , "Enter new id number (127 = all):", val, 0, 127, 1, &ok, this); + if(ok) + { + //lvi->syncInfo().setIdIn(newval); + lvi->_idIn = newval; + lvi->setText(DEVCOL_RID, QString().setNum(newval)); + } + } + else + if(col == DEVCOL_TID) + { + //int val = lvi->syncInfo().idOut(); + int val = lvi->_idOut; + int newval = QInputDialog::getInteger("Muse: Sync info" , "Enter new id number (127 = global):", val, 0, 127, 1, &ok, this); + if(ok) + { + //lvi->syncInfo().setIdOut(newval); + lvi->_idOut = newval; + lvi->setText(DEVCOL_TID, QString().setNum(newval)); + } + } + + if(ok) + setDirty(); +} + +/* +//--------------------------------------------------------- +// renameOk +//--------------------------------------------------------- +//void MidiSyncConfig::renameOk(QListViewItem* item, int col) +void MidiSyncConfig::renameOk(QListViewItem* item, int col, const QString & text) +{ + if(!item) + return; + + MidiSyncLViewItem* lvi = (MidiSyncLViewItem*)item; + QString t = text; + bool ok; + int id = text.toInt(&ok); + if(!ok) + { + lvi->setText(t); + return; + } + if(col == DEVCOL_RID) + { + //lvi->syncInfo().setIdIn(id); + lvi->_idIn = id; + setDirty(); + } + else + if(col == DEVCOL_TID) + { + //lvi->syncInfo().setIdOut(id); + lvi->_idOut = id; + setDirty(); + } +} +*/ + +//--------------------------------------------------------- +// MidiSyncConfig::setDirty +//--------------------------------------------------------- + +void MidiSyncConfig::setDirty() +{ + _dirty = true; + if(!applyButton->isEnabled()) + applyButton->setEnabled(true); +} + diff --git a/muse2/muse/widgets/midisyncimpl.h b/muse2/muse/widgets/midisyncimpl.h new file mode 100644 index 00000000..a804e85f --- /dev/null +++ b/muse2/muse/widgets/midisyncimpl.h @@ -0,0 +1,150 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: midisyncimpl.h,v 1.1.1.1.2.3 2009/05/03 04:14:01 terminator356 Exp $ +// +// (C) Copyright 1999/2000 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __MIDISYNCIMPL_H__ +#define __MIDISYNCIMPL_H__ + +#include +#include +#include +//Added by qt3to4: +#include +//#include +#include "midisync.h" +#include "sync.h" + +//class QWhatsThis; +//class QListView; +//class QListViewItem; +class Q3Header; +//class MidiDevice; + +//---------------------------------------------------------- +// MSyncHeaderTip +//---------------------------------------------------------- + +class MSyncHeaderTip /*: public QToolTip ddskrjo*/ { + QWidget *_parent; + public: + MSyncHeaderTip(QWidget * parent) : _parent(parent) {} // ddskrjo + virtual ~MSyncHeaderTip() {} + protected: + void maybeTip(const QPoint &); + }; + +//--------------------------------------------------------- +// MSyncWhatsThis +//--------------------------------------------------------- + +class MSyncWhatsThis : public Q3WhatsThis { + Q3Header* header; + + protected: + QString text(const QPoint&); + + public: + MSyncWhatsThis(QWidget* parent, Q3Header* h) : Q3WhatsThis(parent) { + header = h; + } + }; + +class MidiSyncLViewItem : public Q3ListViewItem +{ + //MidiSyncInfo _syncInfo; + //MidiDevice* _device; + int _port; + + //protected: + //int _port; + + public: + MidiSyncLViewItem(Q3ListView* parent) + : Q3ListViewItem(parent) { _port = -1; _inDet = _curDet = _tickDet = false; } + //: QListViewItem(parent) { _device = 0; } + + //MidiSyncLViewItem(QListView* parent, QListViewItem* after) + // : QListViewItem(parent, after) { _port = -1; } + + //virtual QString text(int column) const; + //virtual unsigned tick() = 0; + + //int _port; + bool _inDet; + bool _curDet; + bool _curMTCDet; + bool _tickDet; + bool _MRTDet; + bool _MMCDet; + bool _MTCDet; + int _recMTCtype; + + int _idOut; + int _idIn; + + bool _sendMC; + bool _sendMRT; + bool _sendMMC; + bool _sendMTC; + bool _recMC; + bool _recMRT; + bool _recMMC; + bool _recMTC; + + bool _recRewOnStart; + //bool _sendContNotStart; + + int port() const { return _port; } + void setPort(int port); + //MidiDevice* device() const { return _device; } + //void setDevice(MidiDevice* d); + + //MidiSyncInfo& syncInfo() { return _syncInfo; } + void copyFromSyncInfo(const MidiSyncInfo &sp); + void copyToSyncInfo(MidiSyncInfo &sp); +}; + +//--------------------------------------------------------- +// MSConfig +//--------------------------------------------------------- + +class MidiSyncConfig : public MidiSyncConfigBase { + Q_OBJECT + MSyncHeaderTip* _synctooltip; + + bool inHeartBeat; + bool _dirty; + + void updateSyncInfoLV(); + void closeEvent(QCloseEvent*); + + private slots: + void heartBeat(); + void syncChanged(); + void extSyncChanged(bool v); + void ok(); + void cancel(); + void apply(); + //void dlvClicked(QListViewItem*, const QPoint&, int); + void dlvClicked(int, Q3ListViewItem*, const QPoint&, int); + void dlvDoubleClicked(Q3ListViewItem*, const QPoint&, int); + //void renameOk(QListViewItem*, int, const QString&); + void songChanged(int); + + //signals: + // void deleted(unsigned long); + + public: + MidiSyncConfig(QWidget* parent=0, const char* name=0); + //MidiSyncConfig(); + ~MidiSyncConfig(); + void show(); + void setDirty(); + }; + +#endif + diff --git a/muse2/muse/widgets/mittransposebase.ui b/muse2/muse/widgets/mittransposebase.ui new file mode 100644 index 00000000..60cd4d9b --- /dev/null +++ b/muse2/muse/widgets/mittransposebase.ui @@ -0,0 +1,117 @@ + +MITTransposeBase + + + MITTransposeBase + + + + 0 + 0 + 423 + 50 + + + + MusE: Midi Input Plugin: Transpose + + + + unnamed + + + 11 + + + 6 + + + + onCheckBox + + + On + + + + + TextLabel1 + + + TriggerKey + + + AlignVCenter|AlignRight + + + 5 + + + + + triggerKeySpinBox + + + + + TextLabel2 + + + Transpose: + + + AlignVCenter|AlignRight + + + 5 + + + + + transposeLabel + + + + 5 + 0 + 0 + 0 + + + + + 255 + 255 + 255 + + + + Panel + + + 2 + + + 2 + + + 2 + + + +0 + + + AlignVCenter|AlignRight + + + 5 + + + + + + + pitchedit.h + + + diff --git a/muse2/muse/widgets/mixdowndialog.cpp b/muse2/muse/widgets/mixdowndialog.cpp new file mode 100644 index 00000000..0681ca2e --- /dev/null +++ b/muse2/muse/widgets/mixdowndialog.cpp @@ -0,0 +1,108 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: mixdowndialog.cpp,v 1.1.1.1 2003/10/27 18:55:02 wschweer Exp $ +// (C) Copyright 2001 Werner Schweer (ws@seh.de) +//========================================================= + +#include "mixdowndialog.h" +#include "globals.h" +#include +#include +#include +#include +#include +#include "wave.h" + +//--------------------------------------------------------- +// sndFileOpen +// sf - old soundfile, used to preset file parameters +//--------------------------------------------------------- + +SndFile* getSndFile(const SndFile* sf, QWidget* parent, const char* name) + { + MixdownFileDialog* dialog = new MixdownFileDialog(sf, parent, + name, true); + dialog->exec(); + SndFile* sndFile = dialog->sndFile(); + delete dialog; + return sndFile; + } + +//--------------------------------------------------------- +// MixdownFileDialog +//--------------------------------------------------------- + +MixdownFileDialog::MixdownFileDialog(const SndFile* _sf, + QWidget* parent, const char* name, bool /*modal*/, Qt::WFlags fl) + : MixdownFileDialogBase(parent, name, true, fl) + { + 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->path()); + comboChannel->setCurrentItem(channels); + comboFormat->setCurrentItem(format); + } + } + +//--------------------------------------------------------- +// accept +//--------------------------------------------------------- + +void MixdownFileDialog::accept() + { + QString oldpath; + unsigned channel = comboChannel->currentItem(); + unsigned format = comboFormat->currentItem(); + 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, sampleRate); + done(1); + } + +//--------------------------------------------------------- +// fdialog +//--------------------------------------------------------- + +void MixdownFileDialog::fdialog() + { + QString oldpath; + if (sf) + oldpath = sf->path(); + QString path = Q3FileDialog::getSaveFileName( + oldpath, tr("Wave Files (*.wav);;All Files (*)"), this, "MixdownFileDialog"); + if (!path.isEmpty()) + editPath->setText(path); + } + diff --git a/muse2/muse/widgets/mixdowndialog.h b/muse2/muse/widgets/mixdowndialog.h new file mode 100644 index 00000000..95440b38 --- /dev/null +++ b/muse2/muse/widgets/mixdowndialog.h @@ -0,0 +1,37 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: mixdowndialog.h,v 1.1.1.1 2003/10/27 18:54:28 wschweer Exp $ +// (C) Copyright 2001 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __MIXDOWNDIALOG_H__ +#define __MIXDOWNDIALOG_H__ + +#include "mixdowndialogbase.h" + +class SndFile; + +extern SndFile* getSndFile(const SndFile* sf, QWidget* parent, + const char* name); + +//--------------------------------------------------------- +// MixdownFileDialog +//--------------------------------------------------------- + +class MixdownFileDialog : public MixdownFileDialogBase { + Q_OBJECT + SndFile* sf; + + private slots: + void fdialog(); + virtual void accept(); + + public: + MixdownFileDialog(const SndFile* f, QWidget* parent = 0, + const char* name = 0, bool modal = false, Qt::WFlags fl = 0); + SndFile* sndFile() { return sf; } + }; + +#endif + diff --git a/muse2/muse/widgets/mixdowndialogbase.ui b/muse2/muse/widgets/mixdowndialogbase.ui new file mode 100644 index 00000000..830d2a8e --- /dev/null +++ b/muse2/muse/widgets/mixdowndialogbase.ui @@ -0,0 +1,224 @@ + +MixdownFileDialogBase + + + MixdownFileDialogBase + + + + 0 + 0 + 381 + 116 + + + + MusE: Set Mixdown Wavefile + + + true + + + + unnamed + + + 11 + + + 6 + + + + Layout1 + + + + unnamed + + + 0 + + + 6 + + + + Horizontal Spacing2 + + + Horizontal + + + Expanding + + + + 20 + 20 + + + + + + buttonOk + + + &OK + + + true + + + true + + + + + buttonCancel + + + &Cancel + + + true + + + + + + + TextLabel1 + + + File Path + + + + + TextLabel2 + + + Channel + + + + + Layout5 + + + + unnamed + + + 0 + + + 6 + + + + editPath + + + + + buttonPath + + + + + + image0 + + + + + + + + Stereo + + + + + Mono + + + + + 5.1 + + + + comboChannel + + + + + + wav,16 Bit + + + + + wav, 24 Bit + + + + + wav, 32 Bit (float) + + + + comboFormat + + + + + TextLabel3 + + + Format + + + + + Spacer1 + + + Horizontal + + + Expanding + + + + 20 + 20 + + + + + + + + 789c5d8fb10ac2301040f77c45e86d45ac955607f1131447411c2e97141daaa07510f1dfcd256992fadae1de23e9d1aa94c7c34e9695780e385c49d2051fb2d4afbe7f9fcedb8f28ea95b4ef5ad6c54c147349727fbf199ec1ceb070b01a566cb0c68655b3524b4b6a5989551b7e5891b5eb105b64555eb541725b1c60f1536c36b80aa9417636dd1de37fcbcea5cfc71d804a2178625316f4406a90e31b02254203d216f7db06c20ed77c1adb34a516526cd314ce6570fb6ec40ff56a68fe + + + + + buttonOk + clicked() + MixdownFileDialogBase + accept() + + + buttonCancel + clicked() + MixdownFileDialogBase + reject() + + + + diff --git a/muse2/muse/widgets/mktest b/muse2/muse/widgets/mktest new file mode 100644 index 00000000..08738898 --- /dev/null +++ b/muse2/muse/widgets/mktest @@ -0,0 +1,5 @@ +CPPFLAGS = -I/usr/qt/include -I.. + +mops: mops.o musewidgetsplug.o + g++ -o mops mops.o musewidgetsplug.o -L . -l musewidgetsplugin -L /usr/qt/lib -l qt-mt + diff --git a/muse2/muse/widgets/mlabel.cpp b/muse2/muse/widgets/mlabel.cpp new file mode 100644 index 00000000..a6c1b183 --- /dev/null +++ b/muse2/muse/widgets/mlabel.cpp @@ -0,0 +1,17 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: mlabel.cpp,v 1.1.1.1 2003/10/27 18:55:03 wschweer Exp $ +// (C) Copyright 2000 Werner Schweer (ws@seh.de) +//========================================================= + +#include "mlabel.h" +//Added by qt3to4: +#include + + +void MLabel::mousePressEvent(QMouseEvent*) + { + emit mousePressed(); + } + diff --git a/muse2/muse/widgets/mlabel.h b/muse2/muse/widgets/mlabel.h new file mode 100644 index 00000000..490e8686 --- /dev/null +++ b/muse2/muse/widgets/mlabel.h @@ -0,0 +1,39 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: mlabel.h,v 1.1.1.1 2003/10/27 18:55:03 wschweer Exp $ +// (C) Copyright 2000 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __MLABEL_H__ +#define __MLABEL_H__ + +#include +//Added by qt3to4: +#include + +//--------------------------------------------------------- +// MLabel +// label widged which sends signal mousePressed +// on mousePressEvent +//--------------------------------------------------------- + +class MLabel : public QLabel { + + Q_OBJECT + + protected: + virtual void mousePressEvent(QMouseEvent*); + + signals: + void mousePressed(); + + public: + MLabel(const QString& txt, QWidget* parent, const char* name = 0) + : QLabel(txt, parent, name) {}; + + MLabel(QWidget* parent, const char* name = 0) + : QLabel(parent, name) {}; + }; +#endif + diff --git a/muse2/muse/widgets/mmath.cpp b/muse2/muse/widgets/mmath.cpp new file mode 100644 index 00000000..acc8e25a --- /dev/null +++ b/muse2/muse/widgets/mmath.cpp @@ -0,0 +1,300 @@ +#include +#include "mmath.h" + +// QwtMath - a set of mathematical routines +// +// qwtGetMin -- Find the smallest value in an array +// qwtGetMax -- Find the largest value in an array +// qwtTwistArray -- invert the order of an array +// qwtFloor125 -- Find the largest value fitting in a 1-2-5 pattern +// qwtCeil125 -- Find the smallest value fitting in a 1-2-5 pattern +// qwtChkMono -- Check for monotony +// qwtLinSpace -- construct an array of equally spaced values +// qwtLogSpace -- construct an array of logarithmically equally spaced values +// qwtMax -- Return the largest of two values +// qwtMin -- Return the smallest of two values +// qwtAbs -- return the absolute value +// qwtSign -- Return the sign of a number +// qwtSqr -- Return the square of a number +// qwtCopyArray -- Copy an array into another +// qwtShiftArray -- Shift an array +// qwtSwap -- Swap two values +// qwtSort (1) -- Sort two values +// qwtSort (2) -- Sort two values +// qwtInt -- Return nearest integer +// qwtLim -- Limit a values + + +//------------------------------------------------------------ +//.F qwtGetMin +// Find the smallest value in an array +// +//.u Syntax +//.f double qwtGetMin(double *array, int size) +// +//.u Parameters +//.p double *array, int size +// +//------------------------------------------------------------ + +double qwtGetMin(double *array, int size) +{ + double rv; + int i; + + if (size > 0) + { + rv = array[0]; + for (i=1; i< size; i++) + rv = qwtMin(rv, array[i]); + return rv; + } + else + return 0.0; + +} + + +//------------------------------------------------------------ +// +//.F qwtGetMax +// Find the largest value in an array +// +//.u Syntax +//.f double qwtGetMax(double *array, int size) +// +//.u Parameters +//.p double *array, int size +// +//------------------------------------------------------------ +double qwtGetMax(double *array, int size) +{ + double rv; + int i; + + if (size > 0) + { + rv = array[0]; + for (i=1; i< size; i++) + rv = qwtMax(rv, array[i]); + return rv; + } + else + return 0.0; + +} + + +//------------------------------------------------------------ +// +//.F qwtCeil125 +// Find the smallest value out of {1,2,5}*10^n with an integer number n +// which is greater than or equal to x +// +//.u Syntax +//.f double qwtCeil125(double x) +// +//.u Parameters +//.p double x +// +//------------------------------------------------------------ +double qwtCeil125( double x) +{ + double lx, rv; + double p10, fr; + double sign = ( x > 0) ? 1.0 : -1.0; + + if (x == 0.0) return 0.0; + + lx = log10(fabs(x)); + p10 = floor(lx); + fr = pow(10.0,lx - p10); + if (fr <=1.0) + fr = 1.0; + else if (fr <= 2.0) + fr = 2.0; + else if (fr <= 5.0) + fr = 5.0; + else + fr = 10.0; + rv = fr * pow(10.0,p10); + return sign * rv; +} + + +//------------------------------------------------------------ +// +//.F qwtFloor125 +// Find the largest value out of {1,2,5}*10^n with an integer number n +// which is smaller than or equal to x +// +//.u Syntax +//.f double qwtFloor125(double x) +// +//.u Parameters +//.p double x +// +//------------------------------------------------------------ +double qwtFloor125( double x) +{ + double lx, rv; + double p10, fr; + double sign = ( x > 0) ? 1.0 : -1.0; + + if (x == 0.0) return 0.0; + + lx = log10(fabs(x)); + p10 = floor(lx); + fr = pow(10.0,lx - p10); + if (fr >= 10.0) + fr = 10.0; + else if (fr >= 5.0) + fr = 5.0; + else if (fr >= 2.0) + fr = 2.0; + else + fr = 1.0; + rv = fr * pow(10.0,p10); + return sign * rv; +} + + +//------------------------------------------------------------ +// +//.F qwtChkMono +// Checks if an array is a strictly monotonic sequence +// +//.u Syntax +//.f int qwtChkMono(double *array, int size) +// +//.u Parameters +//.p double *array -- pointer to a double array +// int size -- size of the array +// +//.u Return Value +//.t 0 -- sequence is not strictly monotonic +// 1 -- sequence is strictly monotonically increasing +// -1 -- sequence is strictly monotonically decreasing +// +//------------------------------------------------------------ +int qwtChkMono(double *array, int size) +{ + int rv, i; + + if (size < 2) return 0; + + rv = qwtSign(array[1] - array[0]); + for (i=1;i 0) + { + array[0] = xmin; + array[imax] = xmax; + step = (xmax - xmin) / double(imax); + + for (i=1;i +inline int qwtSign(const T& x) +{ + if (x > T(0)) + return 1; + else if (x < T(0)) + return (-1); + else + return 0; +} + +inline int qwtInt(double x) +{ + return int(rint(x)); +} + +template +inline T qwtAbs (const T& x) +{ + return( x > T(0) ? x : -x ); +} + +template +inline const T& qwtMax (const T& x, const T& y) +{ + return ( x > y ? x : y ); +} + +template +inline const T& qwtMin ( const T& x, const T& y) +{ + return ( x < y ? x : y ); +} + + +template +T qwtLim(const T& x, const T& x1, const T& x2) +{ + T rv; + T xmin, xmax; + + xmin = qwtMin(x1, x2); + xmax = qwtMax(x1, x2); + + if ( x < xmin ) + rv = xmin; + else if ( x > xmax ) + rv = xmax; + else + rv = x; + + return rv; +} + +#endif + diff --git a/muse2/muse/widgets/moc_aboutbox.cpp b/muse2/muse/widgets/moc_aboutbox.cpp new file mode 100644 index 00000000..3a5b4311 --- /dev/null +++ b/muse2/muse/widgets/moc_aboutbox.cpp @@ -0,0 +1,81 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'aboutbox.h' +** +** Created: Wed Oct 13 19:43:36 2010 +** by: The Qt Meta Object Compiler version 62 (Qt 4.6.2) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "aboutbox.h" +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'aboutbox.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 62 +#error "This file was generated using the moc from 4.6.2. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +QT_BEGIN_MOC_NAMESPACE +static const uint qt_meta_data_AboutBox[] = { + + // content: + 4, // revision + 0, // classname + 0, 0, // classinfo + 1, 14, // methods + 0, 0, // properties + 0, 0, // enums/sets + 0, 0, // constructors + 0, // flags + 0, // signalCount + + // slots: signature, parameters, type, tag, flags + 10, 9, 9, 9, 0x09, + + 0 // eod +}; + +static const char qt_meta_stringdata_AboutBox[] = { + "AboutBox\0\0languageChange()\0" +}; + +const QMetaObject AboutBox::staticMetaObject = { + { &QDialog::staticMetaObject, qt_meta_stringdata_AboutBox, + qt_meta_data_AboutBox, 0 } +}; + +#ifdef Q_NO_DATA_RELOCATION +const QMetaObject &AboutBox::getStaticMetaObject() { return staticMetaObject; } +#endif //Q_NO_DATA_RELOCATION + +const QMetaObject *AboutBox::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject; +} + +void *AboutBox::qt_metacast(const char *_clname) +{ + if (!_clname) return 0; + if (!strcmp(_clname, qt_meta_stringdata_AboutBox)) + return static_cast(const_cast< AboutBox*>(this)); + if (!strcmp(_clname, "Ui::AboutBox")) + return static_cast< Ui::AboutBox*>(const_cast< AboutBox*>(this)); + return QDialog::qt_metacast(_clname); +} + +int AboutBox::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; + default: ; + } + _id -= 1; + } + return _id; +} +QT_END_MOC_NAMESPACE diff --git a/muse2/muse/widgets/moc_didyouknow.cpp b/muse2/muse/widgets/moc_didyouknow.cpp new file mode 100644 index 00000000..45ca9eaa --- /dev/null +++ b/muse2/muse/widgets/moc_didyouknow.cpp @@ -0,0 +1,81 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'didyouknow.h' +** +** Created: Wed Oct 13 19:43:38 2010 +** by: The Qt Meta Object Compiler version 62 (Qt 4.6.2) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "didyouknow.h" +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'didyouknow.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 62 +#error "This file was generated using the moc from 4.6.2. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +QT_BEGIN_MOC_NAMESPACE +static const uint qt_meta_data_DidYouKnow[] = { + + // content: + 4, // revision + 0, // classname + 0, 0, // classinfo + 1, 14, // methods + 0, 0, // properties + 0, 0, // enums/sets + 0, 0, // constructors + 0, // flags + 0, // signalCount + + // slots: signature, parameters, type, tag, flags + 12, 11, 11, 11, 0x09, + + 0 // eod +}; + +static const char qt_meta_stringdata_DidYouKnow[] = { + "DidYouKnow\0\0languageChange()\0" +}; + +const QMetaObject DidYouKnow::staticMetaObject = { + { &QDialog::staticMetaObject, qt_meta_stringdata_DidYouKnow, + qt_meta_data_DidYouKnow, 0 } +}; + +#ifdef Q_NO_DATA_RELOCATION +const QMetaObject &DidYouKnow::getStaticMetaObject() { return staticMetaObject; } +#endif //Q_NO_DATA_RELOCATION + +const QMetaObject *DidYouKnow::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject; +} + +void *DidYouKnow::qt_metacast(const char *_clname) +{ + if (!_clname) return 0; + if (!strcmp(_clname, qt_meta_stringdata_DidYouKnow)) + return static_cast(const_cast< DidYouKnow*>(this)); + if (!strcmp(_clname, "Ui::DidYouKnow")) + return static_cast< Ui::DidYouKnow*>(const_cast< DidYouKnow*>(this)); + return QDialog::qt_metacast(_clname); +} + +int DidYouKnow::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; + default: ; + } + _id -= 1; + } + return _id; +} +QT_END_MOC_NAMESPACE diff --git a/muse2/muse/widgets/moc_songinfo.cpp b/muse2/muse/widgets/moc_songinfo.cpp new file mode 100644 index 00000000..9b35549c --- /dev/null +++ b/muse2/muse/widgets/moc_songinfo.cpp @@ -0,0 +1,84 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'songinfo.h' +** +** Created: Wed Oct 13 19:43:37 2010 +** by: The Qt Meta Object Compiler version 62 (Qt 4.6.2) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "songinfo.h" +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'songinfo.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 62 +#error "This file was generated using the moc from 4.6.2. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +QT_BEGIN_MOC_NAMESPACE +static const uint qt_meta_data_SongInfo[] = { + + // content: + 4, // revision + 0, // classname + 0, 0, // classinfo + 2, 14, // methods + 0, 0, // properties + 0, 0, // enums/sets + 0, 0, // constructors + 0, // flags + 0, // signalCount + + // slots: signature, parameters, type, tag, flags + 10, 9, 9, 9, 0x0a, + 29, 9, 9, 9, 0x09, + + 0 // eod +}; + +static const char qt_meta_stringdata_SongInfo[] = { + "SongInfo\0\0buttonOk_clicked()\0" + "languageChange()\0" +}; + +const QMetaObject SongInfo::staticMetaObject = { + { &QDialog::staticMetaObject, qt_meta_stringdata_SongInfo, + qt_meta_data_SongInfo, 0 } +}; + +#ifdef Q_NO_DATA_RELOCATION +const QMetaObject &SongInfo::getStaticMetaObject() { return staticMetaObject; } +#endif //Q_NO_DATA_RELOCATION + +const QMetaObject *SongInfo::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject; +} + +void *SongInfo::qt_metacast(const char *_clname) +{ + if (!_clname) return 0; + if (!strcmp(_clname, qt_meta_stringdata_SongInfo)) + return static_cast(const_cast< SongInfo*>(this)); + if (!strcmp(_clname, "Ui::SongInfo")) + return static_cast< Ui::SongInfo*>(const_cast< SongInfo*>(this)); + return QDialog::qt_metacast(_clname); +} + +int SongInfo::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: buttonOk_clicked(); break; + case 1: languageChange(); break; + default: ; + } + _id -= 2; + } + return _id; +} +QT_END_MOC_NAMESPACE diff --git a/muse2/muse/widgets/moc_ttoolbar.cpp b/muse2/muse/widgets/moc_ttoolbar.cpp new file mode 100644 index 00000000..e69de29b diff --git a/muse2/muse/widgets/mtrackinfobase.ui b/muse2/muse/widgets/mtrackinfobase.ui new file mode 100644 index 00000000..3d2b274a --- /dev/null +++ b/muse2/muse/widgets/mtrackinfobase.ui @@ -0,0 +1,1067 @@ + +MidiTrackInfoBase + + + MidiTrackInfoBase + + + + 0 + 0 + 149 + 555 + + + + + 5 + 3 + 0 + 0 + + + + + 0 + 0 + + + + + 32767 + 32767 + + + + MusE: TrackInfo + + + + + + + + + + unnamed + + + 0 + + + 0 + + + Minimum + + + + iOutputChannel + + + + 5 + 0 + 0 + 0 + + + + 16 + + + 1 + + + output channel + + + all midi events are sent to this output channel + + + + + trackNameLabel + + + + 2 + 1 + 0 + 0 + + + + AlignCenter | WordBreak + + + + + iLen + + + + 5 + 0 + 0 + 0 + + + + % + + + 200 + + + 25 + + + 100 + + + + + iOutput + + + + 7 + 0 + 0 + 0 + + + + output port + + + + + TextLabel2 + + + + 5 + 0 + 0 + 0 + + + + 0 + + + 1 + + + Out ch + + + + + iVerz + + + + 5 + 0 + 0 + 0 + + + + off + + + 1000 + + + -1000 + + + + + iAnschl + + + + 5 + 0 + 0 + 0 + + + + 127 + + + -127 + + + 0 + + + + + iKompr + + + + 5 + 0 + 0 + 0 + + + + + + + % + + + 200 + + + 25 + + + 100 + + + + + iTransp + + + + 1 + 0 + 0 + 0 + + + + off + + + 127 + + + -127 + + + 1 + + + + + TextLabel9 + + + + 5 + 0 + 0 + 0 + + + + Transp. + + + 2 + + + + + TextLabel10 + + + + 5 + 0 + 0 + 0 + + + + Delay + + + 2 + + + + + TextLabel13 + + + + 5 + 0 + 0 + 0 + + + + Compr. + + + 2 + + + + + TextLabel12 + + + + 5 + 0 + 0 + 0 + + + + Velocity + + + 0 + + + + + TextLabel11 + + + + 5 + 0 + 0 + 0 + + + + Length + + + 2 + + + + + routingLayout + + + + + iRButton + + + + 1 + 1 + 0 + 0 + + + + iR + + + input routing + + + + + oRButton + + + + 1 + 1 + 0 + 0 + + + + oR + + + output routing + + + + + + + routingLayout2 + + + + + iChanDetectLabel + + + + 5 + 0 + 0 + 0 + + + + W + + + AlignCenter + + + input detect + + + Input detect indicator. Detects all note on-off, controller, aftertouch, + program change, and pitchbend (but not sysex or realtime) events + on the selected channels, on the selected midi ports. + + + + + recEchoButton + + + + 14 + 32767 + + + + + 1 + 1 + 0 + 0 + + + + true + + + Echo recording events to output. + + + Echo + + + + + echoSpacer + + + Horizontal + + + Maximum + + + + 4 + 2 + + + + + + + + TextLabel1_2 + + + + 7 + 4 + 0 + 0 + + + + WinPanel + + + Raised + + + 1 + + + 1 + + + Channel Info + + + AlignCenter + + + + + iPatch + + + + 7 + 0 + 0 + 0 + + + + <unknown> + + + Select instrument patch + + + + + textLabel1 + + + + 5 + 0 + 0 + 0 + + + + Record: + + + AlignVCenter|AlignRight + + + + + recLayout + + + + unnamed + + + + recSpacer + + + Horizontal + + + Maximum + + + + 4 + 2 + + + + + + recordButton + + + + 1 + 1 + 0 + 0 + + + + All + + + Add all settings to song + + + + + allRecSpacer + + + Horizontal + + + Maximum + + + + 4 + 2 + + + + + + + + iHBank + + + + 5 + 0 + 0 + 0 + + + + off + + + 128 + + + 0 + + + 0 + + + Bank Select MSB. Double-click on/off. + + + + + TextLabel4 + + + + 5 + 0 + 0 + 0 + + + + 1 + + + 0 + + + H-Bank + + + 2 + + + + + iLBank + + + + 5 + 0 + 0 + 0 + + + + off + + + 128 + + + 0 + + + 0 + + + Bank Select LSB. Double-click on/off. + + + + + TextLabel5 + + + + 5 + 0 + 0 + 0 + + + + 1 + + + 0 + + + L-Bank + + + 2 + + + + + iProgram + + + + 5 + 0 + 0 + 0 + + + + off + + + 128 + + + 0 + + + 0 + + + Program. Double-click on/off. + + + + + progLayout + + + + unnamed + + + 0 + + + 0 + + + + progSpacer + + + Horizontal + + + Maximum + + + + 4 + 2 + + + + + + progRecButton + + + + 1 + 1 + 0 + 0 + + + + Prog. + + + Add bank + prog settings to song + + + + + progRecSpacer + + + Horizontal + + + Maximum + + + + 4 + 2 + + + + + + + + iLautst + + + + 5 + 0 + 0 + 0 + + + + off + + + 127 + + + -1 + + + -1 + + + Volume. Double-click on/off. + + + + + volLayout + + + + unnamed + + + 0 + + + 0 + + + + volSpacer + + + Horizontal + + + Maximum + + + + 4 + 2 + + + + + + volRecButton + + + + 1 + 1 + 0 + 0 + + + + Vol. + + + Add vol setting to song + + + + + volRecSpacer + + + Horizontal + + + Maximum + + + + 4 + 2 + + + + + + + + iPan + + + + 5 + 0 + 0 + 0 + + + + off + + + 63 + + + -65 + + + -65 + + + Change stereo position. Double-click on/off. + + + Change stereo position. Double-click on/off. + + + + + panLayout + + + + unnamed + + + 0 + + + 0 + + + + panSpacer + + + Horizontal + + + Maximum + + + + 4 + 2 + + + + + + panRecButton + + + + 1 + 1 + 0 + 0 + + + + Pan + + + Add pan setting to song + + + + + panRecSpacer + + + Horizontal + + + Maximum + + + + 4 + 2 + + + + + + + + spacer5 + + + Vertical + + + Expanding + + + + 20 + 40 + + + + + + + + SpinBox +
spinbox.h
+ + 50 + 20 + + 0 + + 5 + 5 + 0 + 0 + + image0 +
+
+ + + 89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000003b149444154388dad945f4c5b551cc73fe7dc4b7b4bcba0762d45c43114323599ee6192609c51d883892ce083f1718b3ebb185f8dc91e972cf39d2d2a2f1af664b6f1e0fe3863a0718969700eb0c52142da0242a1bd6d696f7bcff101585203ceb8fd9ece39f99dcff9fe7edf939f88c562ec465f5f9fe609442c161362173c3e3eae7b7a7ac8e7f36432196cdbfe4f907c3e4f2291201e8fe338cec3737357e9e8e828aded1e229d650e1f2d51754b082110124c13a4dc5ea341eb9dc284c0558a853f3ce8cb0677ef500fde7d39d2596679e326597b8e9abb85d7a770ab16ab6983ec5a05b487a70e36f0f4e10afe408d6a558310980108478dba4a1e8233990c5d474b64ed39aa3a8fe5f3317fbf81dbd70bccfeb205947632fd74f6589c1c6ea2f70d03a58ba0c1f2c9bdc1b66de3b8256a6e11cbe7e3ee1d181b590124fe2693aeee08d223c82c3a2c24b7b874bec8f26288774f7bd054504aef0dde6e99c0eb83f9fb266323cb80a27fb0958141836044605a2ee5523393371cc646fee2da37195aa35d0c0c5b4859ac03d7e91712dcaac5adab3650a3ff9d08ef7dd8404bb48869e5d958b5b87dadc4c9a1464e9f0d0326df7ebd86bd2e310cb1bf62d384d59441f2d70a070e1c60e09489929b988681bdd9cc97170bcc4c65595f71f8e0e3301337fc24a7732467831875a47f289652b0be5e4151e6d07316c1b0c0340d8ab92023e76d66a6b2840e36d2fb7a13fee632475e6edc367ea98a90fb98b7dd6310ca0328a44761582e1bab41befabcc0ec940d28bc5e93b68e064cab84e1d9beaeb48934eac1f53b01c1b000fca496aa54b61a99fcde61662a4b4b4b23d1680be9d426173e4df3602a48ea411989a4fd590f52a8fd156b05ed9d350e3defe3cfdf4b4c7ce770ea7d3fb9f520afbe1620daeee5c26735d20b9b9cfb6811a754a439e4e5c5639a4caa1e5caf586bfc0197b78702005cb9b4cae4cd3267ce8638fe964bd72b393e39d74928d242617303a756a37f284447770dcdbffc6384a05a85de1306e9a52057c7527c7131c3c42d3f475eb2303c82d4fc3276d6811db37efeb148723082d9b08f79f97c1e5729109a9a28307cc622d2d6cdf52b2b24efe548dedb00142009862cfa879ee1a71f6cec928353511472fbf4389148b0b0e0c108081412458dfe21c9f11351e67e7358595468246d1d1e5e38a6e9e851bc39d84ab502a669331dafec0d8ec7e3e8cb06e1a881d727d1ae40180a434a8c9db129a54126ad48a7358c2b4c5352c8c374bcccdab2bb37d8719cba79fab8211f9df218e0582c261e95f8bfc04f1a1e8bc5c4dfe0a190172af6a9690000000049454e44ae426082 + + + + iOutput + iOutputChannel + iTransp + iVerz + iLen + iAnschl + iKompr + iPatch + iHBank + iLBank + iProgram + iLautst + iPan + + +
diff --git a/muse2/muse/widgets/mtscale.cpp b/muse2/muse/widgets/mtscale.cpp new file mode 100644 index 00000000..42d04275 --- /dev/null +++ b/muse2/muse/widgets/mtscale.cpp @@ -0,0 +1,425 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: mtscale.cpp,v 1.8.2.7 2009/05/03 04:14:01 terminator356 Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#include + +#include +#include +#include +//Added by qt3to4: +#include +#include +#include +#include "mtscale.h" +#include "midieditor.h" +#include "globals.h" +#include "song.h" +#include "../marker/marker.h" +#include "../marker/markerview.h" +#include "icons.h" +#include "gconfig.h" + +//--------------------------------------------------------- +// MTScale +// Midi Time Scale +//--------------------------------------------------------- + +MTScale::MTScale(int* r, QWidget* parent, int xs, bool _mode) + : View(parent, xs, 1) + { + waveMode = _mode; + QToolTip::add(this, tr("bar scale")); + barLocator = false; + raster = r; + if (waveMode) { + pos[0] = tempomap.tick2frame(song->cpos()); + pos[1] = tempomap.tick2frame(song->lpos()); + pos[2] = tempomap.tick2frame(song->rpos()); + } + else { + pos[0] = song->cpos(); + pos[1] = song->lpos(); + pos[2] = song->rpos(); + } + pos[3] = MAXINT; // do not show + button = Qt::NoButton; + setMouseTracking(true); + connect(song, SIGNAL(posChanged(int, unsigned, bool)), SLOT(setPos(int, unsigned, bool))); + connect(song, SIGNAL(songChanged(int)), SLOT(songChanged(int))); + connect(song, SIGNAL(markerChanged(int)), SLOT(redraw())); + + setFixedHeight(28); + setBg(QColor(0xe0, 0xe0, 0xe0)); + } + +//--------------------------------------------------------- +// songChanged +//--------------------------------------------------------- + +void MTScale::songChanged(int type) + { + if (type & (SC_SIG|SC_TEMPO)) { + if ((type & SC_TEMPO) && waveMode) { + pos[0] = tempomap.tick2frame(song->cpos()); + pos[1] = tempomap.tick2frame(song->lpos()); + pos[2] = tempomap.tick2frame(song->rpos()); + } + redraw(); + } + } + +//--------------------------------------------------------- +// setPos +//--------------------------------------------------------- + +void MTScale::setPos(int idx, unsigned val, bool) + { + if (val == MAXINT) { + if (idx == 3) { + pos[3] = MAXINT; + redraw(QRect(0, 0, width(), height())); + } + return; + } + if (waveMode) + val = tempomap.tick2frame(val); + if (val == pos[idx]) + return; + //unsigned opos = mapx(pos[idx] == MAXINT ? val : pos[idx]); + int opos = mapx(pos[idx] == MAXINT ? val : pos[idx]); + pos[idx] = val; + if (!isVisible()) + return; + + int tval = mapx(val); + int x = -9; + int w = 18; + + if (tval < 0) { // tval<0 occurs whenever the window is scrolled left, so I switched to signed int (ml) + //printf("MTScale::setPos - idx:%d val:%d tval:%d opos:%d w:%d h:%d\n", idx, val, tval, opos, width(), height()); + + redraw(QRect(0,0,width(),height())); + return; + } + //if (opos > (unsigned int) tval) { //prevent compiler warning: comparison signed/unsigned + if (opos > tval) { + w += opos - tval; + x += tval; + } + else { + w += tval - opos; + x += opos; + } + //printf("MTScale::setPos idx:%d val:%d tval:%d opos:%d x:%d w:%d h:%d\n", idx, val, tval, opos, x, w, height()); + + redraw(QRect(x, 0, w, height())); + } + +//--------------------------------------------------------- +// viewMousePressEvent +//--------------------------------------------------------- + +void MTScale::viewMousePressEvent(QMouseEvent* event) + { + button = event->button(); + viewMouseMoveEvent(event); + } + +//--------------------------------------------------------- +// viewMouseReleaseEvent +//--------------------------------------------------------- + +void MTScale::viewMouseReleaseEvent(QMouseEvent*) + { + button = Qt::NoButton; + } + +//--------------------------------------------------------- +// viewMouseMoveEvent +//--------------------------------------------------------- + +void MTScale::viewMouseMoveEvent(QMouseEvent* event) + { + if (event->state() & Qt::ShiftModifier ) + setCursor(QCursor(Qt::PointingHandCursor)); + else + setCursor(QCursor(Qt::ArrowCursor)); + + int x = event->x(); + if (waveMode) + x = tempomap.frame2tick(x); + x = sigmap.raster(x, *raster); + if (x < 0) + x = 0; + emit timeChanged(x); + int i; + switch (button) { + case Qt::LeftButton: + i = 0; + break; + case Qt::MidButton: + i = 1; + break; + case Qt::RightButton: + i = 2; + break; + default: + return; // if no button is pressed the function returns here + } + Pos p(x, true); + + if(i== 0 && (event->state() & Qt::ShiftModifier )) { // If shift +LMB we add a marker + Marker *alreadyExists = song->getMarkerAt(x); + if (!alreadyExists) { + song->addMarker(QString(""), x, false); + // Removed p3.3.43 + // Song::addMarker() already emits a 'markerChanged'. + //emit addMarker(x); + } + } + else if (i== 2 && (event->state() & Qt::ShiftModifier )) { // If shift +RMB we remove a marker + Marker *toRemove = song->getMarkerAt(x); + if (toRemove) + song->removeMarker(toRemove); + else + printf("No marker to remove\n"); + } + else + song->setPos(i, p); // all other cases: relocating one of the locators + } + +//--------------------------------------------------------- +// leaveEvent +//--------------------------------------------------------- + +void MTScale::leaveEvent(QEvent*) + { + emit timeChanged(MAXINT); + } + +//--------------------------------------------------------- +// draw +//--------------------------------------------------------- + +void MTScale::pdraw(QPainter& p, const QRect& r) + { + int x = r.x(); + int w = r.width(); + + // Added by Tim. p3.3.6 + //printf("MTScale::pdraw x:%d w:%d\n", x, w); + + x -= 20; + w += 40; // wg. Text + + //--------------------------------------------------- + // draw Marker + //--------------------------------------------------- + + int y = 12; + p.setPen(Qt::black); + p.setFont(config.fonts[4]); + p.drawLine(r.x(), y+1, r.x() + r.width(), y+1); + QRect tr(r); + tr.setHeight(12); + MarkerList* marker = song->marker(); + for (iMarker m = marker->begin(); m != marker->end(); ++m) { + + int xp; + if(waveMode) + xp = mapx(m->second.frame()); + else + xp = mapx(m->second.tick()); + if (xp > x+w) + break; + int xe = r.x() + r.width(); + iMarker mm = m; + ++mm; + if (mm != marker->end()) { + + if(waveMode) + xe = mapx(tempomap.tick2frame(mm->first)); + else + xe = mapx(mm->first); + } + + QRect tr(xp, 0, xe-xp, 13); + //if (m->second.current()) + // p.fillRect(tr, white); + + QRect wr = r.intersect(tr); + //if (r.intersects(tr)) + if(!wr.isEmpty()) + { + if (m->second.current()) + { + //p.fillRect(tr, white); + p.fillRect(wr, Qt::white); + } + + int x2; + //iMarker mm = m; + //++mm; + if (mm != marker->end()) + { + if(waveMode) + x2 = mapx(tempomap.tick2frame(mm->first)); + else + x2 = mapx(mm->first); + } + else + x2 = xp+200; + + //printf("MTScale::pdraw marker %s xp:%d y:%d h:%d r.x:%d r.w:%d\n", m->second.name().latin1(), xp, height(), y, r.x(), r.width()); + + // Must be reasonable about very low negative x values! With long songs > 15min + // and with high horizontal magnification, 'ghost' drawings appeared, + // apparently the result of truncation later (xp = -65006 caused ghosting + // at bar 245 with magnification at max.), even with correct clipping region + // applied to painter in View::paint(). Tim. Apr 5 2009 + // Quote: "Warning: Note that QPainter does not attempt to work around + // coordinate limitations in the underlying window system. Some platforms may + // behave incorrectly with coordinates as small as +/-4000." + if(xp >= -32) + p.drawPixmap(xp, 0, *flagIconS); + + if(xp >= -1023) + { + QRect r = QRect(xp+10, 0, x2-xp, 12); + p.setPen(Qt::black); + p.drawText(r, Qt::AlignLeft|Qt::AlignVCenter, m->second.name()); + } + + if(xp >= 0) + { + p.setPen(Qt::green); + p.drawLine(xp, y, xp, height()); + } + } + } + + //--------------------------------------------------- + // draw location marker + //--------------------------------------------------- + + int h = height()-12; + + if (barLocator) { + p.setPen(Qt::red); + int xp = mapx(pos[0]); + if (xp >= x && xp < x+w) + p.drawLine(xp, y, xp, h); + p.setPen(Qt::blue); + xp = mapx(pos[1]); + if (xp >= x && xp < x+w) + p.drawLine(xp, y, xp, h); + xp = mapx(pos[2]); + if (xp >= x && xp < x+w) + p.drawLine(xp, y, xp, h); + } + else { + for (int i = 0; i < 3; ++i) { + int xp = mapx(pos[i]); + if (xp >= x && xp < x+w) { + QPixmap* pm = markIcon[i]; + p.drawPixmap(xp - pm->width()/2, y-1, *pm); + } + } + } + p.setPen(Qt::black); + if (pos[3] != MAXINT) { + int xp = mapx(pos[3]); + if (xp >= x && xp < x+w) + p.drawLine(xp, 0, xp, height()); + } + + unsigned ctick; + int bar1, bar2, beat; + unsigned tick; + + if (waveMode) { + ctick = tempomap.frame2tick(mapxDev(x)); + sigmap.tickValues(ctick, &bar1, &beat, &tick); + sigmap.tickValues(tempomap.frame2tick(mapxDev(x+w)), + &bar2, &beat, &tick); + } + else { + ctick = mapxDev(x); + sigmap.tickValues(ctick, &bar1, &beat, &tick); + sigmap.tickValues(mapxDev(x+w), &bar2, &beat, &tick); + } + +//printf("bar %d %d-%d=%d\n", bar, ntick, stick, ntick-stick); + + int stick = sigmap.bar2tick(bar1, 0, 0); + int ntick; + for (int bar = bar1; bar <= bar2; bar++, stick = ntick) { + ntick = sigmap.bar2tick(bar+1, 0, 0); + int tpix, a, b=0; + if (waveMode) { + a = tempomap.tick2frame(ntick); + b = tempomap.tick2frame(stick); + tpix = rmapx(a - b); + } + else { + tpix = rmapx(ntick - stick); + } + if (tpix < 64) { + // don�t show beats if measure is this small + int n = 1; + if (tpix < 32) + n = 2; + if (tpix <= 16) + n = 4; + if (tpix < 8) + n = 8; + if (tpix <= 4) + n = 16; + if (tpix <= 2) + n = 32; + if (bar % n) + continue; + p.setFont(config.fonts[3]); + int x = mapx(waveMode ? b : stick); + QString s; + s.setNum(bar + 1); + p.drawLine(x, y+1, x, y+1+h); +// QRect r = QRect(x+2, y, 0, h); + QRect r = QRect(x+2, y, 1000, h); + p.drawText(r, Qt::AlignLeft|Qt::AlignVCenter|Qt::TextDontClip, s); + } + else { + int z, n; + sigmap.timesig(stick, z, n); + for (int beat = 0; beat < z; beat++) { + int xx = sigmap.bar2tick(bar, beat, 0); + if (waveMode) + xx = tempomap.tick2frame(xx); + int xp = mapx(xx); + QString s; + QRect r(xp+2, y, 1000, h); + int y1; + int num; + if (beat == 0) { + num = bar + 1; + y1 = y + 1; + p.setFont(config.fonts[3]); + } + else { + num = beat + 1; + y1 = y + 7; + p.setFont(config.fonts[1]); + r.setY(y+3); + } + s.setNum(num); + p.drawLine(xp, y1, xp, y+1+h); + p.drawText(r, Qt::AlignLeft|Qt::AlignVCenter|Qt::TextDontClip, s); + } + } + } + } + diff --git a/muse2/muse/widgets/mtscale.h b/muse2/muse/widgets/mtscale.h new file mode 100644 index 00000000..c632a24b --- /dev/null +++ b/muse2/muse/widgets/mtscale.h @@ -0,0 +1,53 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: mtscale.h,v 1.3 2004/04/27 22:27:06 spamatica Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __MTSCALE_H__ +#define __MTSCALE_H__ + +#include "view.h" +//Added by qt3to4: +#include +#include + +class QPainter; + +//--------------------------------------------------------- +// MTScale +// scale for midi track +//--------------------------------------------------------- + +class MTScale : public View { + Q_OBJECT + int* raster; + unsigned pos[4]; + int button; + bool barLocator; + bool waveMode; + + private slots: + void songChanged(int); + + protected: + virtual void pdraw(QPainter&, const QRect&); + virtual void viewMousePressEvent(QMouseEvent* event); + virtual void viewMouseMoveEvent(QMouseEvent* event); + virtual void viewMouseReleaseEvent(QMouseEvent* event); + virtual void leaveEvent(QEvent*e); + + signals: + void timeChanged(unsigned); + //void addMarker(int); + + public slots: + void setPos(int, unsigned, bool); + + public: + MTScale(int* raster, QWidget* parent, int xscale, bool f = false); + void setBarLocator(bool f) { barLocator = f; } + }; +#endif + diff --git a/muse2/muse/widgets/musewidgetsplug.cpp b/muse2/muse/widgets/musewidgetsplug.cpp new file mode 100644 index 00000000..4a7f5f24 --- /dev/null +++ b/muse2/muse/widgets/musewidgetsplug.cpp @@ -0,0 +1,539 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: musewidgetsplug.cpp,v 1.9.2.9 2009/12/01 03:52:40 terminator356 Exp $ +// (C) Copyright 2001-2003 Werner Schweer (ws@seh.de) +//========================================================= + +// this file makes some of the MusE widgets available +// to QT-Designer + +#include +//Added by qt3to4: +#include +#include "posedit.h" +#include "poslabel.h" +#include "pitchedit.h" +#include "pitchlabel.h" +#include "sig.h" +#include "tempo.h" +#include "tempolabel.h" +#include "sigedit.h" +#include "slider.h" +#include "doublelabel.h" +#include "checkbox.h" +#include "combobox.h" +#include "gconfig.h" + +int sampleRate = 44100; // some dummy values to get things compiled/linked +int division = 384; +int mtcType = 0; +bool hIsB = false; + +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" + }; + +GlobalConfigValues config = { + { + QColor(0xff, 0xff, 0xff), // palette + QColor(0xff, 0xff, 0xff), + QColor(0xff, 0xff, 0xff), + QColor(0xff, 0xff, 0xff), + QColor(0xff, 0xff, 0xff), + QColor(0xff, 0xff, 0xff), + QColor(0xff, 0xff, 0xff), + QColor(0xff, 0xff, 0xff), + QColor(0xff, 0xff, 0xff), + QColor(0xff, 0xff, 0xff), + QColor(0xff, 0xff, 0xff), + QColor(0xff, 0xff, 0xff), + QColor(0xff, 0xff, 0xff), + QColor(0xff, 0xff, 0xff), + QColor(0xff, 0xff, 0xff), + QColor(0xff, 0xff, 0xff) + }, + { + 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(0, 0, 255), // transportHandleColor; + QColor(255, 0, 0), // bigTimeForegroundColor; + QColor(0, 0, 0), // bigTimeBackgroundColor; + QColor(200, 200, 200), // waveEditBackgroundColor; + { + QFont(QString("arial"), 10, QFont::Normal), + QFont(QString("arial"), 8, QFont::Normal), + QFont(QString("arial"), 10, QFont::Normal), + QFont(QString("arial"), 10, QFont::Bold), + QFont(QString("arial"), 8, QFont::Bold), // timescale numbers + QFont(QString("Lucidatypewriter"), 14, QFont::Bold), + QFont(QString("arial"), 8, QFont::Bold, true) // Mixer strip labels. Looks and fits better with bold + italic than bold alone, + // at the price of only few more pixels than Normal mode. + }, + QColor(0xff, 0xff, 0xff), // trackBg; + QColor(0x80, 0xff, 0x80), // selected track Bg; + QColor(0x00, 0x00, 0x00), // selected track Fg; + QColor(0xff, 0xff, 0xff), // midiTrackBg; + QColor(255, 170, 0), // ctrlGraphFg; Medium orange + QColor(0xff, 0xff, 0xff), // drumTrackBg; + QColor(0xff, 0xff, 0xff), // waveTrackBg; + QColor(0xff, 0xff, 0xff), // outputTrackBg; + QColor(0xff, 0xff, 0xff), // inputTrackBg; + QColor(0xff, 0xff, 0xff), // groupTrackBg; + QColor(0xff, 0xff, 0xff), // auxTrackBg; + QColor(0xff, 0xff, 0xff), // synthTrackBg; + QColor(98, 124, 168), // part canvas bg + QColor(98, 124, 168), // mixerBg; + + 384, // division; + 1024, // rtcTicks + -60, // int minMeter; + -60.0, // double minSlider; + false, // use Jack freewheel + 20, // int guiRefresh; + QString(""), // helpBrowser + true, // extendedMidi + 384, // division for smf export + QString(""), // copyright string for smf export + 1, // smf export file format + false, // midi export file 2 byte timesigs instead of 4 + true, // optimize midi export file note offs + true, // Split imported tracks into multiple parts. + 1, // startMode + QString(""), // start song path + 384, // gui division + QRect(0, 0, 400, 300), // GeometryMain; + QRect(0, 0, 200, 100), // GeometryTransport; + QRect(0, 0, 600, 200), // GeometryBigTime; + QRect(0, 0, 400, 300), // GeometryPianoroll; + QRect(0, 0, 400, 300), // GeometryDrumedit; + //QRect(0, 0, 300, 500), // GeometryMixer; // Obsolete + { + QString("Mixer A"), + QRect(0, 0, 300, 500), // Mixer1 + true, true, true, true, + true, true, true, true + }, + { + QString("Mixer B"), + QRect(200, 200, 300, 500), // Mixer2 + true, true, true, true, + true, true, true, true + }, + true, // TransportVisible; + false, // BigTimeVisible; + false, // mixer1Visible; + false, // mixer2Visible; + + false, // markerVisible; // This line was missing 2007-01-08 (willyfoobar) + true, // showSplashScreen + 1, // canvasShowPartType 1 - names, 2 events + 5, // canvasShowPartEvent + false, // canvasShowGrid; + QString(""), // canvasBgPixmap; + QString(""), // style + QString(""), // externalWavEditor //this line was missing 2007-01-08 (willyfoobar) + false, // useOldStyleStopShortCut + true, // moveArmedCheckBox + true, // useDenormalBias + false, // useOutputLimiter + true, // showDidYouKnow + false // vstInPlace Enable VST in-place processing + 44100, // Dummy audio preferred sample rate + 512 // Dummy audio buffer size + }; + +//--------------------------------------------------------- +// 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]); + if (hIsB) { + if (s == "h") + s = "b"; + else if (s == "H") + s = "B"; + } + return s + o; + } + + +/* XPM */ +static const char* slider_pixmap[]={ +"22 22 50 1", +". c None", +"f c #004005", +"g c #004007", +"h c #004107", +"m c #004108", +"j c #00430a", +"E c #00501f", +"s c #005021", +"e c #014006", +"l c #024006", +"F c #095e34", +"D c #0b572a", +"k c #0b582b", +"n c #0f5328", +"u c #12562d", +"o c #155a35", +"p c #165c38", +"q c #165c39", +"i c #17501a", +"I c #175522", +"r c #18603f", +"N c #18795e", +"t c #187a60", +"R c #1e5a29", +"y c #22633d", +"O c #307755", +"B c #408262", +"v c #439191", +"G c #468667", +"d c #4c7a51", +"H c #4d8a6c", +"J c #569174", +"C c #599276", +"P c #5e967a", +"A c #63b1c2", +"V c #659477", +"Q c #659b80", +"S c #6da087", +"w c #70b2bc", +"x c #72b5c0", +"z c #74b7c3", +"K c #79a891", +"a c #7ea48a", +"T c #8cb4a0", +"L c #a3c3b3", +"M c #b7d8d1", +"U c #bedcd5", +"c c #c3d2c3", +"b c #f1f5f1", +"# c #ffffff", +"......................", +"......................", +"......................", +"......................", +"......................", +"......###a............", +"......#bcad...........", +"......#bcad...........", +"......#bcad...........", +"..efgh#bcaihhhhhhhjk..", +".lmnop#bcaippppppqrst.", +".huvwx#bcayxxxxxxzABC.", +".DEFGH#bcaIHHHHHHJKLM.", +"..NOPQ#bcaRQQQQQQSTU..", +"......#bcad...........", +"......#bcad...........", +"......#bcad...........", +"......VVVVd...........", +".......dddd...........", +"......................", +"......................", +"......................"}; +static const char *posedit_pixmap[] = { + "22 22 8 1", + " c Gray100", + ". c Gray97", + "X c #4f504f", + "o c #00007f", + "O c Gray0", + "+ c none", + "@ c Gray0", + "# c Gray0", + "++++++++++++++++++++++", + "++++++++++++++++++++++", + "++++++++++++++++++++++", + "++++++++++++++++++++++", + "+OOOOOOOOOOOOOOOOOOOO+", + "OOXXXXXXXXXXXXXXXXXXOO", + "OXX. OO OO O", + "OX. oo O O", + "OX. oo O .O", + "OX ooo oooo O O", + "OX oo oo oo O O", + "OX oooo oo oo O O", + "OX oo oo oo oo O O", + "OX oo oo oo oo O O", + "OX oooo oooo O O", + "OX OO OO O", + "OO..................OO", + "+OOOOOOOOOOOOOOOOOOOO+", + "++++++++++++++++++++++", + "++++++++++++++++++++++", + "++++++++++++++++++++++", + "++++++++++++++++++++++" + }; + +static const char *pitchedit_pixmap[] = { + "22 22 8 1", + " c Gray100", + ". c Gray97", + "X c #4f504f", + "o c #00007f", + "O c Gray0", + "+ c none", + "@ c Gray0", + "# c Gray0", + "++++++++++++++++++++++", + "++++++++++++++++++++++", + "++++++++++++++++++++++", + "++++++++++++++++++++++", + "+OOOOOOOOOOOOOOOOOOOO+", + "OOXXXXXXXXXXXXXXXXXXOO", + "OXX. OO OO O", + "OX. o O O", + "OX. oo O .O", + "OX o o O O", + "OX o O O", + "OX o o O O", + "OX oooo O O", + "OX o O O", + "OX O O", + "OX OO OO O", + "OO..................OO", + "+OOOOOOOOOOOOOOOOOOOO+", + "++++++++++++++++++++++", + "++++++++++++++++++++++", + "++++++++++++++++++++++", + "++++++++++++++++++++++" + }; + +//--------------------------------------------------------- +// MusEPlugin +//--------------------------------------------------------- + +class MusEPlugin : public QWidgetPlugin { + public: + MusEPlugin() {} + ~MusEPlugin() {} + QStringList keys() const; + QWidget* create(const QString& key, QWidget* parent=0, + const char* name = 0); + QString group(const QString& key) const; + QIcon iconSet(const QString& key) const; + QString includeFile(const QString& key) const; + QString toolTip(const QString& key) const; + QString whatsThis(const QString& key) const; + bool isContainer(const QString& key) const; + }; + +//--------------------------------------------------------- +// keys +//--------------------------------------------------------- + +QStringList MusEPlugin::keys() const + { + QStringList list; + list << QString("PosEdit") + << QString("PitchEdit") + << QString("PosLabel") + << QString("PitchLabel") + << QString("TempoLabel") + << QString("TempoEdit") + << QString("SigEdit") + << QString("Slider") + << QString("DoubleLabel") + << QString("CheckBox") + << QString("ComboBox") + ; + return list; + } + +//--------------------------------------------------------- +// create +//--------------------------------------------------------- + +QWidget* MusEPlugin::create(const QString& key, QWidget* parent, + const char* name) + { + if (key == QString("PosEdit")) + return new PosEdit(parent, name); + else if (key == QString("PitchEdit")) + return new PitchEdit(parent, name); + else if (key == QString("PitchLabel")) + return new PitchLabel(parent, name); + else if (key == QString("PosLabel")) + return new PosLabel(parent, name); + else if (key == QString("TempoLabel")) + return new TempoLabel(parent, name); + else if (key == QString("TempoEdit")) + return new TempoEdit(parent, name); + else if (key == QString("SigEdit")) + return new SigEdit(parent, name); + else if (key == QString("Slider")) + return new Slider(parent, name); + else if (key == QString("DoubleLabel")) + return new DoubleLabel(parent, name); + else if (key == QString("CheckBox")) + return new CheckBox(parent, -1, name); + else if (key == QString("ComboBox")) + return new ComboBox(parent, name); + return 0; + } + +//--------------------------------------------------------- +// group +//--------------------------------------------------------- + +QString MusEPlugin::group(const QString& /*key*/) const + { + return QString("MusE"); + } + +//--------------------------------------------------------- +// iconSet +//--------------------------------------------------------- + +QIcon MusEPlugin::iconSet(const QString& key) const + { + if (key == "PosEdit" || key == "PosLabel") + return QIcon(QPixmap(posedit_pixmap)); + else if (key == "PitchEdit" || key == "PitchLabel") + return QIcon(QPixmap(pitchedit_pixmap)); + else if (key == "TempoEdit" || key == "TempoLabel") + return QIcon(QPixmap(pitchedit_pixmap)); + else if (key == "SigEdit") + return QIcon(QPixmap(pitchedit_pixmap)); + else if (key == QString("Slider")) + return QIcon(QPixmap(slider_pixmap)); +// else if (key == QString("CheckBox")) +// return QIconSet(QPixmap(slider_pixmap)); +// else if (key == QString("ComboBox")) +// return QIconSet(QPixmap(slider_pixmap)); + return QIcon(); + } + +//--------------------------------------------------------- +// includeFile +//--------------------------------------------------------- + +QString MusEPlugin::includeFile(const QString& key) const + { + if (key == QString("PosEdit")) + return QString("posedit.h"); + else if (key == QString("PitchEdit")) + return QString("pitchedit.h"); + else if (key == QString("PitchLabel")) + return QString("pitchlabel.h"); + else if (key == QString("PosLabel")) + return QString("poslabel.h"); + else if (key == QString("TempoLabel")) + return QString("tempolabel.h"); + else if (key == QString("TempoEdit")) + return QString("tempolabel.h"); + else if (key == QString("SigEdit")) + return QString("sigedit.h"); + else if (key == QString("Slider")) + return QString("slider.h"); + else if (key == QString("DoubleLabel")) + return QString("dentry.h"); + else if (key == QString("CheckBox")) + return QString("checkbox.h"); + else if (key == QString("ComboBox")) + return QString("combobox.h"); + return QString::null; + } + +//--------------------------------------------------------- +// toolTip +//--------------------------------------------------------- + +QString MusEPlugin::toolTip (const QString& key) const + { + if (key == QString("PosEdit")) + return QString("midi time position editor"); + else if (key == QString("PitchEdit")) + return QString("midi pitch spinbox"); + else if (key == QString("PitchLabel")) + return QString("midi pitch label"); + else if (key == QString("PosLabel")) + return QString("midi time position label"); + else if (key == QString("TempoLabel")) + return QString("midi tempo label"); + else if (key == QString("TempoEdit")) + return QString("midi tempo spinbox"); + else if (key == QString("SigEdit")) + return QString("midi signature spinbox"); + else if (key == QString("Slider")) + return QString("slider for double values"); + else if (key == QString("DoubleLabel")) + return QString("entry/label for double values"); + else if (key == QString("CheckBox")) + return QString("checkbox with id"); + else if (key == QString("ComboBox")) + return QString("combobox with id"); + return QString::null; + } + +//--------------------------------------------------------- +// whatsThis +//--------------------------------------------------------- + +QString MusEPlugin::whatsThis (const QString& key) const + { + if (key == QString("PosEdit")) + return QString("midi time position editor"); + else if (key == QString("PitchEdit")) + return QString("midi pitch spinbox"); + else if (key == QString("PitchLabel")) + return QString("midi pitch label"); + else if (key == QString("PosLabel")) + return QString("midi time position label"); + else if (key == QString("TempoLabel")) + return QString("midi tempo label"); + else if (key == QString("TempoEdit")) + return QString("midi tempo spinbox"); + else if (key == QString("SigEdit")) + return QString("midi signature spinbox"); + else if (key == QString("Slider")) + return QString("slider for double values"); + else if (key == QString("DoubleLabel")) + return QString("entry/label for double values"); + else if (key == QString("CheckBox")) + return QString("checkbox with id"); + else if (key == QString("ComboBox")) + return QString("combobox with id"); + return QString::null; + } + +//--------------------------------------------------------- +// isContainer +//--------------------------------------------------------- + +bool MusEPlugin::isContainer (const QString& /*key*/) const + { + return false; + } + +Q_EXPORT_PLUGIN(MusEPlugin) + diff --git a/muse2/muse/widgets/nentry.cpp b/muse2/muse/widgets/nentry.cpp new file mode 100644 index 00000000..c4006112 --- /dev/null +++ b/muse2/muse/widgets/nentry.cpp @@ -0,0 +1,407 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: nentry.cpp,v 1.1.1.1.2.1 2008/05/21 00:28:54 terminator356 Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include +//Added by qt3to4: +#include +#include +#include +#include +#include +#include +#include "nentry.h" +#include +#include +#include +#include "globals.h" +#include +#include + +#define TIMER1 400 +#define TIMER2 200 +#define TIMEC 7 +#define TIMER3 100 +#define TIMEC2 20 +#define TIMER4 50 + +NentryFilter::NentryFilter(QObject* parent) + : QObject(parent) + { + } + +void Nentry::setText(const QString& s) + { + edit->setText(s); + } + +//--------------------------------------------------------- +// eventFilter +//--------------------------------------------------------- + +bool NentryFilter::eventFilter(QObject*, QEvent* event) + { + Nentry* e = (Nentry*)parent(); + if (event->type() == QEvent::MouseButtonPress) { + e->mousePress((QMouseEvent*)event); + return true; + } + if (event->type() == QEvent::MouseMove) { + e->mouseMove((QMouseEvent*)event); + return true; + } + if (event->type() == QEvent::MouseButtonDblClick) { + e->mouseDoubleClick((QMouseEvent*)event); + return true; + } + if (event->type() == QEvent::MouseButtonRelease) { + e->mouseRelease((QMouseEvent*)event); + return true; + } + if (event->type() == QEvent::Wheel) { + e->wheel((QWheelEvent*)event); + return true; + } + if (event->type() == QEvent::KeyPress) { + return e->keyPress((QKeyEvent*)event); + } + if (event->type() == QEvent::ContextMenu) { + return e->contextMenu((QContextMenuEvent*)event); + } + return false; + } + +//--------------------------------------------------------- +// Nentry +// lineedit int values +//--------------------------------------------------------- + +Nentry::Nentry(QWidget* parent, const QString& txt, + int _lPos, bool dark) : Q3Frame(parent) + { + focusW = 0; + lPos = _lPos; + edit = new QLineEdit(this); + timer = new QTimer(this); + filter = new NentryFilter(this); + drawFrame = false; + edit->installEventFilter(filter); + edit->setFrame(drawFrame); + + connect(timer, SIGNAL(timeout()), SLOT(repeat())); + connect(edit, SIGNAL(returnPressed()), SLOT(endEdit())); + edit->setCursor(QCursor(Qt::arrowCursor)); +// edit->setFont(font3); + val = 0; + layout = new Q3HBoxLayout(this); + if (txt == "") { + layout->addWidget(edit, 1, Qt::AlignHCenter); + } + else { + label = new QLabel(txt, this); + if (lPos == 0) { + layout->addStretch(5); + layout->addSpacing(5); + layout->addWidget(label); + layout->addSpacing(5); + layout->addWidget(edit); + layout->addSpacing(5); + layout->addStretch(5); + } + else { + label->setAlignment(Qt::AlignLeft); + layout->addWidget(edit, 0, Qt::AlignRight); + layout->addSpacing(5); + layout->addWidget(label, 100, Qt::AlignRight|Qt::AlignVCenter); + } + } + if (dark) { + setDark(); + } + edit->setFocusPolicy(Qt::NoFocus); + } + +void Nentry::setFocusPolicy(Qt::FocusPolicy policy) + { + edit->setFocusPolicy(policy); + } + +void Nentry::setDark() + { + const QPalette& oldpalette = edit->palette(); + QColorGroup cg1 = oldpalette.active(); + cg1.setColor(QColorGroup::Base, cg1.background()); + QPalette newpalette(cg1, cg1, cg1); + edit->setPalette(newpalette); + } + +//--------------------------------------------------------- +// setSize +//--------------------------------------------------------- + +void Nentry::setSize(int n) + { + QString s("0000000000000000"); + QFontMetrics fm = edit->fontMetrics(); + int w; + if (n <= 16) + w = fm.width(s, n); + else + w = fm.width('0') * n; + + edit->setFixedWidth(w + 14); + } + +//--------------------------------------------------------- +// setFrame +//--------------------------------------------------------- + +void Nentry::setFrame(bool flag) + { + drawFrame = flag; + edit->setFrame(drawFrame); + } + +//--------------------------------------------------------- +// endEdit +//--------------------------------------------------------- + +void Nentry::endEdit() + { + if (edit->edited()) { + if (setSValue(edit->text())) { + setString(val, false); + return; + } + edit->setEdited(false); + } + if (focusW) + focusW->setFocus(); + focusW = 0; + edit->clearFocus(); + if (!drawFrame) + edit->setFrame(false); + setString(val, false); + } + +//--------------------------------------------------------- +// contextMenuEvent +//--------------------------------------------------------- + +bool Nentry::contextMenu(QContextMenuEvent *e) +{ + e->accept(); + return true; +} +//--------------------------------------------------------- +// mousePress +//--------------------------------------------------------- + +void Nentry::mousePress(QMouseEvent* event) + { + button = event->button(); + starty = event->y(); + evx = event->x(); + if (event->button() == Qt::LeftButton) { + focusW = qApp->focusWidget(); + edit->setFocus(); + edit->setFrame(true); + setString(val, true); + } + else { + timecount = 0; + repeat(); + timer->start(TIMER1); + } + } + +//--------------------------------------------------------- +// repeat +//--------------------------------------------------------- + +void Nentry::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; + } + if (focusW) + focusW->setFocus(); + edit->clearFocus(); + } + +//--------------------------------------------------------- +// mouseRelease +//--------------------------------------------------------- + +void Nentry::mouseRelease(QMouseEvent* event) + { + button = Qt::NoButton; + timer->stop(); + if (event->button() != Qt::LeftButton) { + if (focusW) + focusW->setFocus(); + edit->clearFocus(); + } + } + +//--------------------------------------------------------- +// mouseMove +//--------------------------------------------------------- + +void Nentry::mouseMove(QMouseEvent*) + { + switch (button) { + case Qt::LeftButton: + break; + case Qt::MidButton: + break; + case Qt::RightButton: + break; + default: + break; + } + } + +//--------------------------------------------------------- +// mouseDoubleClick +//--------------------------------------------------------- + +void Nentry::mouseDoubleClick(QMouseEvent* event) + { + if (event->button() != Qt::LeftButton) { + mousePress(event); + return; + } + } + +//--------------------------------------------------------- +// wheel +//--------------------------------------------------------- + +void Nentry::wheel(QWheelEvent* event) + { + int n = event->delta(); + if (n > 0) + incValue(n); + else + decValue(-n); + event->accept(); + } + +//--------------------------------------------------------- +// setValue +//--------------------------------------------------------- + +void Nentry::setValue(int v) + { + if (v == val) + return; + if (setString(v)) { + if (!drawFrame) + edit->setFrame(false); + edit->setEnabled(false); + } + else { + edit->setEnabled(true); + } + val = v; + } + +//--------------------------------------------------------- +// keyPress +//--------------------------------------------------------- + +bool Nentry::keyPress(QKeyEvent* event) + { + bool shift = event->state() & Qt::ShiftModifier; + bool ctrl = event->state() & Qt::ControlModifier; + int key = event->key(); + + if (shift) { + switch(key) { + case Qt::Key_Left: + case Qt::Key_Right: + return false; + default: + return true; + } + return true; + } + if (ctrl) { + switch(key) { + case Qt::Key_A: + case Qt::Key_B: + case Qt::Key_C: + case Qt::Key_D: + case Qt::Key_E: + case Qt::Key_F: + case Qt::Key_H: + case Qt::Key_V: + case Qt::Key_X: + case Qt::Key_Z: + case Qt::Key_Y: + return false; + default: + return true; + } + return true; + } + if (event->state()) + return true; + switch (key) { + case Qt::Key_Up: incValue(0); return true; + case Qt::Key_Down: decValue(0); return true; + case 0x30: + case 0x31: + case 0x32: + case 0x33: + case 0x34: + case 0x35: + case 0x36: + case 0x37: + case 0x38: + case 0x39: + case Qt::Key_Minus: + case Qt::Key_Left: + case Qt::Key_Right: + case Qt::Key_Backspace: + case Qt::Key_Home: + case Qt::Key_End: + case Qt::Key_Delete: + case Qt::Key_Return: + return false; + default: + break; + } + return true; + } + diff --git a/muse2/muse/widgets/nentry.h b/muse2/muse/widgets/nentry.h new file mode 100644 index 00000000..30ddd930 --- /dev/null +++ b/muse2/muse/widgets/nentry.h @@ -0,0 +1,93 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: nentry.h,v 1.1.1.1.2.2 2008/05/21 00:28:54 terminator356 Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __NENTRY_H__ +#define __NENTRY_H__ + +#include +#include +#include +//Added by qt3to4: +#include +#include +#include +#include +#include +#include +#include + +class QTimer; +class Q3HBoxLayout; +class QLabel; + +class NentryFilter : public QObject { + Q_OBJECT + + protected: + bool eventFilter(QObject* object, QEvent* event); + public: + NentryFilter(QObject* parent); + }; + +//--------------------------------------------------------- +// Nentry +// numerical entry widget with optional label +//--------------------------------------------------------- + +class Nentry : public Q3Frame { + Q_OBJECT + + int button; + int starty; + bool drawFrame; + QTimer* timer; + int evx; + int timecount; + Q3HBoxLayout* layout; + QObject* filter; + QLabel* label; + int lPos; // label Position 0 - left, 1 - right + QWidget* focusW; + + protected: + QLineEdit* edit; + int val; + virtual void incValue(int x) = 0; + virtual void decValue(int x) = 0; + virtual bool setString(int, bool editable = false) = 0; + virtual bool setSValue(const QString&) = 0; + + private slots: + void repeat(); + + protected slots: + void endEdit(); + + public slots: + virtual void setValue(int); + + public: + Nentry(QWidget* parent, const QString& txt = QString(""), + int lPos = 0, bool dark=false); + + int value() const { return val; } + void setFrame(bool); + //void setAlignment(int flag) { edit->setAlignment(flag); } + void setText(const QString& s); + void setSize(int n); + void setDark(); + + void mousePress(QMouseEvent*); + void mouseMove(QMouseEvent*); + void mouseDoubleClick(QMouseEvent*); + void mouseRelease(QMouseEvent*); + void wheel(QWheelEvent*); + bool keyPress(QKeyEvent*); + void setFocusPolicy(Qt::FocusPolicy); + bool contextMenu(QContextMenuEvent*); + }; +#endif diff --git a/muse2/muse/widgets/noteinfo.cpp b/muse2/muse/widgets/noteinfo.cpp new file mode 100644 index 00000000..59bce4b9 --- /dev/null +++ b/muse2/muse/widgets/noteinfo.cpp @@ -0,0 +1,178 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: noteinfo.cpp,v 1.4.2.1 2008/08/18 00:15:26 terminator356 Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#include "config.h" + +#include "noteinfo.h" +#include +#include +#include "song.h" +#include "globals.h" +#include "posedit.h" +#include "pitchedit.h" + +//--------------------------------------------------- +// NoteInfo +// ToolBar +// Start, L�nge, Note, Velo an, Velo aus, Kanal +//--------------------------------------------------- + +NoteInfo::NoteInfo(Q3MainWindow* parent) + : Q3ToolBar(tr("Note Info"), parent) + { + deltaMode = false; + + QLabel* label = new QLabel(tr("Start"), this, "Start"); + label->setAlignment(Qt::AlignRight|Qt::AlignVCenter); + label->setIndent(3); + selTime = new PosEdit(this, "Start"); + + label = new QLabel(tr("Len"), this, "Len"); + label->setAlignment(Qt::AlignRight|Qt::AlignVCenter); + label->setIndent(3); + selLen = new QSpinBox(0, 100000, 1, this); + + label = new QLabel(tr("Pitch"), this, "Pitch"); + label->setAlignment(Qt::AlignRight|Qt::AlignVCenter); + label->setIndent(3); + selPitch = new PitchEdit(this, "selPitch"); + + label = new QLabel(tr("Velo On"), this, "Velocity On"); + label->setAlignment(Qt::AlignRight|Qt::AlignVCenter); + label->setIndent(3); + selVelOn = new QSpinBox(0, 127, 1, this); + + label = new QLabel(tr("Velo Off"), this, "Velocity Off"); + label->setAlignment(Qt::AlignRight|Qt::AlignVCenter); + label->setIndent(3); + selVelOff = new QSpinBox(0, 127, 1, this); + + 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/muse2/muse/widgets/noteinfo.h b/muse2/muse/widgets/noteinfo.h new file mode 100644 index 00000000..00c798fb --- /dev/null +++ b/muse2/muse/widgets/noteinfo.h @@ -0,0 +1,52 @@ +// MusE +// Linux Music Editor +// $Id: noteinfo.h,v 1.3 2004/01/09 17:12:54 wschweer Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __NOTE_INFO_H__ +#define __NOTE_INFO_H__ + +#include + +class PosEdit; +class QSpinBox; +class PitchEdit; +class Q3MainWindow; +class Pos; + +//--------------------------------------------------------- +// NoteInfo +//--------------------------------------------------------- + +class NoteInfo : public Q3ToolBar { + PosEdit* selTime; + QSpinBox* selLen; + PitchEdit* selPitch; + QSpinBox* selVelOn; + QSpinBox* selVelOff; + bool deltaMode; + + Q_OBJECT + + public: + enum ValType {VAL_TIME, VAL_LEN, VAL_VELON, VAL_VELOFF, VAL_PITCH }; + NoteInfo(Q3MainWindow* 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/muse2/muse/widgets/pitchedit.cpp b/muse2/muse/widgets/pitchedit.cpp new file mode 100644 index 00000000..6ecdc4a0 --- /dev/null +++ b/muse2/muse/widgets/pitchedit.cpp @@ -0,0 +1,64 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: pitchedit.cpp,v 1.2 2004/01/09 17:12:54 wschweer Exp $ +// (C) Copyright 2001 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include "pitchedit.h" +#include "helper.h" + +#include +#include + +//--------------------------------------------------------- +// PitchEdit +//--------------------------------------------------------- + +PitchEdit::PitchEdit(QWidget* parent, const char* name) + : QSpinBox(0, 127, 1, parent, name) + { + deltaMode = false; + } + +//--------------------------------------------------------- +// 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("PitchEdit: 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/muse2/muse/widgets/pitchedit.h b/muse2/muse/widgets/pitchedit.h new file mode 100644 index 00000000..9c474f08 --- /dev/null +++ b/muse2/muse/widgets/pitchedit.h @@ -0,0 +1,33 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: pitchedit.h,v 1.2 2004/01/09 17:12:54 wschweer Exp $ +// (C) Copyright 2001 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __PITCHEDIT_H__ +#define __PITCHEDIT_H__ + +#include + +//--------------------------------------------------------- +// PitchEdit +//--------------------------------------------------------- + +class PitchEdit : public QSpinBox { + Q_OBJECT + + bool deltaMode; + + protected: + virtual QString mapValueToText(int v); + virtual int mapTextToValue(bool* ok); + + public: + PitchEdit(QWidget* parent, const char* name = 0); + void setDeltaMode(bool); + }; + +extern QString pitch2string(int v); + +#endif diff --git a/muse2/muse/widgets/pitchlabel.cpp b/muse2/muse/widgets/pitchlabel.cpp new file mode 100644 index 00000000..f53e6fa5 --- /dev/null +++ b/muse2/muse/widgets/pitchlabel.cpp @@ -0,0 +1,95 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: pitchlabel.cpp,v 1.2 2004/05/16 16:55:01 wschweer Exp $ +// (C) Copyright 2001 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include +//Added by qt3to4: +#include +#include "pitchedit.h" +#include "pitchlabel.h" +#include "helper.h" + +//--------------------------------------------------------- +// PitchLabel +//--------------------------------------------------------- + +PitchLabel::PitchLabel(QWidget* parent, const char* name) + : QLabel(parent, name) + { + _pitchMode = true; + _value = -1; + setFrameStyle(WinPanel | Sunken); + setLineWidth(2); + setMidLineWidth(3); + setValue(0); + int fw = style()->pixelMetric(QStyle::PM_DefaultFrameWidth, 0, this); // ddskrjo 0 + 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, 0, this); // ddskrjo 0 + 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/muse2/muse/widgets/pitchlabel.h b/muse2/muse/widgets/pitchlabel.h new file mode 100644 index 00000000..1da83ecc --- /dev/null +++ b/muse2/muse/widgets/pitchlabel.h @@ -0,0 +1,41 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: pitchlabel.h,v 1.1.1.1 2003/10/27 18:54:49 wschweer Exp $ +// (C) Copyright 2001 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __PITCHLABEL_H__ +#define __PITCHLABEL_H__ + +#include + +//--------------------------------------------------------- +// 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(QWidget* parent, const char* name = 0); + int value() const { return _value; } + void setPitchMode(bool val); + bool pitchMode() const { return _pitchMode; } + }; + + +#endif + + + diff --git a/muse2/muse/widgets/popupmenu.cpp b/muse2/muse/widgets/popupmenu.cpp new file mode 100644 index 00000000..05eb64f6 --- /dev/null +++ b/muse2/muse/widgets/popupmenu.cpp @@ -0,0 +1,2770 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: popupmenu.cpp,v 1.1.1.1 2010/07/18 03:21:00 terminator356 Exp $ +// +// (C) Copyright 1999-2010 Werner Schweer (ws@seh.de) +// +// PopupMenu sub-class of QPopupMenu created by Tim. +//========================================================= + + + +//========================================================= +// +// NOTICE: This sub-class of QPopupMenu *automatically* deletes +// and *clears* any sub popup menus, when clear() is called. +// Therefore a parent widget is *not* necessary when +// creating sub popup menus to add to the popup. +// +//========================================================= + + +// MusE: want no menu bar here. Can't use, not needed for now anyway. +#define QT_NO_MENUBAR +#define QT_NO_WHATSTHIS + +#include +//#include +#include +//Added by qt3to4: +#include +#include +#include +//#include +//#include +//#include + +#include "popupmenu.h" + +// used to provide ONE single-shot timer +//static QTimer * singleSingleShot = 0; +//static bool preventAnimation = FALSE; +// Used to detect motion prior to mouse-release +static int motion; +static PopupMenu* active_popup_menu = 0; + +/* +static void cleanup() +{ + delete singleSingleShot; + singleSingleShot = 0; +} + +static void popupSubMenuLater( int msec, QPopupMenu * receiver ) { +//static void popupSubMenuLater( int msec, PopupMenu * receiver ) { + if ( !singleSingleShot ) { + singleSingleShot = new QTimer( qApp, "popup submenu timer" ); + qAddPostRoutine( cleanup ); + } + + singleSingleShot->disconnect( SIGNAL(timeout()) ); + QObject::connect( singleSingleShot, SIGNAL(timeout()), + receiver, SLOT(subMenuTimer()) ); + singleSingleShot->start( msec, TRUE ); +} +*/ + +/* +//====================== +// MenuDataData +//====================== + +class QMenuDataData { +public: + QMenuDataData(); + QGuardedPtr aWidget; + int aInt; +}; + +//====================== +// QPopupMenuPrivate +//====================== + +class QPopupMenuPrivate { +public: + struct Scroll { + enum { ScrollNone=0, ScrollUp=0x01, ScrollDown=0x02 }; + uint scrollable : 2; + uint direction : 1; + int topScrollableIndex, scrollableSize; + QTime lastScroll; + QTimer *scrolltimer; + } scroll; + QSize calcSize; + QRegion mouseMoveBuffer; +}; +*/ + +//====================== +// PopupMenu +//====================== + +PopupMenu::PopupMenu(QWidget* parent, const char* name) + : Q3PopupMenu(parent, name) +{ + // It's too bad QPopupMenu::d is private. + // It will be redundant and this will be our own private member. + //d = new QPopupMenuPrivate; + //d->scroll.scrollableSize = d->scroll.topScrollableIndex = 0; + //d->scroll.scrollable = QPopupMenuPrivate::Scroll::ScrollNone; + //d->scroll.scrolltimer = 0; +} + +PopupMenu::~PopupMenu() +{ + //if(d->scroll.scrolltimer) + // delete d->scroll.scrolltimer; + + //preventAnimation = FALSE; + //delete d; + + // Make sure to clear the popup so that any child popups are also deleted ! + //popup->clear(); +} + +void PopupMenu::menuDelPopup(Q3PopupMenu *popup) +{ + //printf("PopupMenu::menuDelPopup deleting popup...\n"); + + // Make sure to clear the popup so that any child popups are also deleted ! + // Tested OK. All the popups are deleted. + popup->clear(); + + popup->disconnect( SIGNAL(activatedRedirect(int)) ); + popup->disconnect( SIGNAL(highlightedRedirect(int)) ); + disconnect( popup, SIGNAL(destroyed(QObject*)), + this, SLOT(popupDestroyed(QObject*)) ); + delete popup; +} + +/* +void PopupMenu::setFirstItemActive() +{ + QMenuItemListIt it(*QPopupMenu::mitems); + register QMenuItem *mi; + int ai = 0; + //if(d->scroll.scrollable) + // ai = d->scroll.topScrollableIndex; + while ( (mi=it.current()) ) + { + ++it; + if(!mi->isSeparator() && mi->id() != QMenuData::d->aInt && + (style().styleHint(QStyle::SH_PopupMenu_AllowActiveAndDisabled, this) || mi->isEnabledAndVisible())) + { + setActiveItem( ai ); + return; + } + ai++; + } + QPopupMenu::actItem = -1; +} +*/ + +/* +void PopupMenu::hideAllPopups() +{ + //register QMenuData *top = this; // find top level popup + register MenuData *top = this; // find top level popup + if ( !preventAnimation ) + QTimer::singleShot( 10, this, SLOT(allowAnimation()) ); + preventAnimation = TRUE; + + if ( !isPopup() ) + return; // nothing to do + + //while ( top->parentMenu && top->parentMenu->isPopupMenu + while ( top->parentMenu && ((MenuData*)top->parentMenu)->isPopupMenu + //&& ((QPopupMenu*)top->parentMenu)->isPopup() ) + && ((PopupMenu*)((MenuData*)top->parentMenu))->isPopup() ) + //top = top->parentMenu; + top = (MenuData*)top->parentMenu; + //((QPopupMenu*)top)->hide(); // cascade from top level + ((PopupMenu*)top)->hide(); // cascade from top level + +#ifndef QT_NO_WHATSTHIS + if (whatsThisItem) { + qWhatsThisBDH(); + whatsThisItem = 0; + } +#endif + +} +*/ + +/* +void PopupMenu::hidePopups() +{ + if ( !preventAnimation ) + QTimer::singleShot( 10, this, SLOT(allowAnimation()) ); + preventAnimation = TRUE; + + //QMenuItemListIt it(*mitems); + QMenuItemListIt it(*MenuData::mitems); + register QMenuItem *mi; + while ( (mi=it.current()) ) { + ++it; + if ( mi->popup() && mi->popup()->parentMenu == this ) //avoid circularity + mi->popup()->hide(); + } + popupActive = -1; // no active sub menu + if(style().styleHint(QStyle::SH_PopupMenu_SubMenuPopupDelay, this)) + d->mouseMoveBuffer = QRegion(); + + QRect mfrect = itemGeometry( actItem ); + setMicroFocusHint( mfrect.x(), mfrect.y(), mfrect.width(), mfrect.height(), FALSE ); +} +*/ + +bool PopupMenu::tryMenuBar( QMouseEvent *e ) +{ +#if 0 // ddskrjo + register QMenuData *top = this; // find top level + //register PopupMenu *top = this; // find top level + //while ( top->parentMenu ) + while ( ((PopupMenu*)top)->parentMenu ) + //top = top->parentMenu; + //top = (MenuData*)top->parentMenu; + top = ((PopupMenu*)top)->parentMenu; +#ifndef QT_NO_MENUBAR + return top->isMenuBar ? + ((QMenuBar *)top)->tryMouseEvent( this, e ) : + ((Q3PopupMenu*)top)->tryMouseEvent(this, e ); +#else + //return ((QPopupMenu*)top)->tryMouseEvent(this, e ); + return ((PopupMenu*)top)->tryMouseEvent(this, e ); +#endif + +#endif + return false; // ddskrjo +} + +//bool PopupMenu::tryMouseEvent( QPopupMenu *p, QMouseEvent * e) +bool PopupMenu::tryMouseEvent( PopupMenu *p, QMouseEvent * e) +{ + if ( p == this ) + return FALSE; + QPoint pos = mapFromGlobal( e->globalPos() ); + if ( !rect().contains( pos ) ) // outside + return FALSE; + QMouseEvent ee( e->type(), pos, e->globalPos(), e->button(), e->state() ); + event( &ee ); + return TRUE; +} + +/* +void PopupMenu::byeMenuBar() +{ +#ifndef QT_NO_MENUBAR + //register QMenuData *top = this; // find top level + register MenuData *top = this; // find top level + while ( top->parentMenu ) + top = top->parentMenu; +#endif + hideAllPopups(); +#ifndef QT_NO_MENUBAR + if ( top->isMenuBar ) + ((QMenuBar *)top)->goodbye(); +#endif +} +*/ + +void PopupMenu::actSig(int id, bool inwhatsthis) +{ + if(!inwhatsthis) + { + emit activated( id ); +#if defined(QT_ACCESSIBILITY_SUPPORT) + if(!fromAccel) + QAccessible::updateAccessibility(this, indexOf(id)+1, QAccessible::MenuCommand); +#endif + } + else + { +#ifndef QT_NO_WHATSTHIS + QRect r(itemGeometry(indexOf(id))); + QPoint p(r.center().x(), r.bottom()); + QString whatsThis = findItem(id)->whatsThis(); + if(whatsThis.isNull()) + whatsThis = Q3WhatsThis::textFor(this, p); + Q3WhatsThis::leaveWhatsThisMode(whatsThis, mapToGlobal(p), this); +#endif + } + + //emit activatedRedirect(id); ddskrjo +} + +/* +void PopupMenu::mousePressEvent(QMouseEvent *e) +{ + printf("PopupMenu::mousePressEvent\n"); + + + //int sh = style().pixelMetric(QStyle::PM_PopupMenuScrollerHeight, this); + //if (rect().contains(e->pos()) && + // ((d->scroll.scrollable & QPopupMenuPrivate::Scroll::ScrollUp && e->pos().y() <= sh) || //up + // (d->scroll.scrollable & QPopupMenuPrivate::Scroll::ScrollDown && + // e->pos().y() >= contentsRect().height() - sh))) //down + // return; + + mouseBtDn = TRUE; // mouse button down + int item = itemAtPos( e->pos() ); + if ( item == -1 ) { + //if ( !rect().contains(e->pos()) && !tryMenuBar(e) ) { + // byeMenuBar(); + //} + return; + } + register QMenuItem *mi = mitems->at(item); + ///if ( item != actItem ) // new item activated + /// setActiveItem( item ); + + QPopupMenu *popup = mi->popup(); + if(popup) + { + if(popup->isVisible()) // sub menu already open + { + //int pactItem = popup->actItem; + //popup->actItem = -1; + //popup->hidePopups(); + //popup->updateRow( pactItem ); + } + else // open sub menu + { + //hidePopups(); + popupSubMenuLater( 20, this ); + } + } + else + { + //hidePopups(); + } +} +*/ + +void PopupMenu::mouseReleaseEvent(QMouseEvent *e) +{ +#if 0 // ddskrjo + // do not hide a standalone context menu on press-release, unless + // the user moved the mouse significantly + //if(!parentMenu && !mouseBtDn && actItem < 0 && motion < 6) + // return; + + //mouseBtDn = FALSE; + //MenuData::mouseBtDn = FALSE; + Q3PopupMenu::mouseBtDn = FALSE; + + // if the user released the mouse outside the menu, pass control + // to the menubar or our parent menu + //int sh = style().pixelMetric(QStyle::PM_PopupMenuScrollerHeight, this); + if(!rect().contains(e->pos()) && tryMenuBar(e)) + return; + //else + //if((d->scroll.scrollable & QPopupMenuPrivate::Scroll::ScrollUp && e->pos().y() <= sh) || //up + // (d->scroll.scrollable & QPopupMenuPrivate::Scroll::ScrollDown && + // e->pos().y() >= contentsRect().height() - sh)) //down + // return; + + if(Q3PopupMenu::actItem < 0) + { + // we do not have an active item + // if the release is inside without motion (happens with + // oversized popup menus on small screens), ignore it + if(rect().contains(e->pos()) && motion < 6) + return; + ///else + /// byeMenuBar(); + } + else + { + // selected menu item! + register QMenuItem *mi = Q3PopupMenu::mitems->at(Q3PopupMenu::actItem); + if(mi->widget()) + { + QWidget* widgetAt = QApplication::widgetAt(e->globalPos(), TRUE); + if(widgetAt && widgetAt != this) + { + QMouseEvent me(e->type(), widgetAt->mapFromGlobal(e->globalPos()), + e->globalPos(), e->button(), e->state()); + QApplication::sendEvent( widgetAt, &me ); + } + } + //QPopupMenu *popup = mi->popup(); + PopupMenu *popup = (PopupMenu*)mi->popup(); +#ifndef QT_NO_WHATSTHIS + bool b = Q3WhatsThis::inWhatsThisMode(); +#else + const bool b = FALSE; +#endif + if(!mi->isEnabledAndVisible()) + { +#ifndef QT_NO_WHATSTHIS + if(b) + { + actItem = -1; + updateItem(mi->id()); + byeMenuBar(); + actSig(mi->id(), b); + } +#endif + } + else + if(popup) + { + //popup->setFirstItemActive(); + } + else + { + // normal menu item + ///byeMenuBar(); // deactivate menu bar + if(mi->isEnabledAndVisible()) + { + ///QPopupMenu::actItem = -1; + Q3PopupMenu::updateItem(mi->id()); + active_popup_menu = this; + QPointer signal = mi->signal(); + actSig(mi->id(), b); + if(signal && !b) + signal->activate(); + active_popup_menu = 0; + } + } + } +#endif +} + + + + + + +/**************************************************************************** +** +** Implementation of QPopupMenu class +** +** Created : 941128 +** +** Copyright (C) 1992-2008 Trolltech ASA. All rights reserved. +** +** This file is part of the widgets module of the Qt GUI Toolkit. +** +** This file may be used under the terms of the GNU General +** Public License versions 2.0 or 3.0 as published by the Free +** Software Foundation and appearing in the files LICENSE.GPL2 +** and LICENSE.GPL3 included in the packaging of this file. +** Alternatively you may (at your option) use any later version +** of the GNU General Public License if such license has been +** publicly approved by Trolltech ASA (or its successors, if any) +** and the KDE Free Qt Foundation. +** +** Please review the following information to ensure GNU General +** Public Licensing requirements will be met: +** http://trolltech.com/products/qt/licenses/licensing/opensource/. +** If you are unsure which license is appropriate for your use, please +** review the following information: +** http://trolltech.com/products/qt/licenses/licensing/licensingoverview +** or contact the sales department at sales@trolltech.com. +** +** This file may be used under the terms of the Q Public License as +** defined by Trolltech ASA and appearing in the file LICENSE.QPL +** included in the packaging of this file. Licensees holding valid Qt +** Commercial licenses may use this file in accordance with the Qt +** Commercial License Agreement provided with the Software. +** +** This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +** INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted +** herein. +** +**********************************************************************/ + +/* +#include "popupmenu.h" +#ifndef QT_NO_POPUPMENU +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//#include +#include +#include +#include +#include +#if defined(QT_ACCESSIBILITY_SUPPORT) +#include +#endif + +//#define ANIMATED_POPUP +//#define BLEND_POPUP + +// Motif style parameters + +static const int motifArrowHMargin = 6; // arrow horizontal margin +static const int motifArrowVMargin = 2; // arrow vertical margin + +#if 0 +# define DEBUG_SLOPPY_SUBMENU +#endif + +// used for internal communication +static PopupMenu * syncMenu = 0; +static int syncMenuId = 0; + +// Used to detect motion prior to mouse-release +static int motion; + +// used to provide ONE single-shot timer +static QTimer * singleSingleShot = 0; + +static bool supressAboutToShow = FALSE; + +static void cleanup() +{ + delete singleSingleShot; + singleSingleShot = 0; +} + +static void popupSubMenuLater( int msec, PopupMenu * receiver ) { + if ( !singleSingleShot ) { + singleSingleShot = new QTimer( qApp, "popup submenu timer" ); + qAddPostRoutine( cleanup ); + } + + singleSingleShot->disconnect( SIGNAL(timeout()) ); + QObject::connect( singleSingleShot, SIGNAL(timeout()), + receiver, SLOT(subMenuTimer()) ); + singleSingleShot->start( msec, TRUE ); +} + +static bool preventAnimation = FALSE; + +#ifndef QT_NO_WHATSTHIS +extern void qWhatsThisBDH(); +static QMenuItem* whatsThisItem = 0; +#endif + +class QMenuDataData { + // attention: also defined in qmenudata.cpp +public: + QMenuDataData(); + QGuardedPtr aWidget; + int aInt; +}; + +class QPopupMenuPrivate { +public: + struct Scroll { + enum { ScrollNone=0, ScrollUp=0x01, ScrollDown=0x02 }; + uint scrollable : 2; + uint direction : 1; + int topScrollableIndex, scrollableSize; + QTime lastScroll; + QTimer *scrolltimer; + } scroll; + QSize calcSize; + QRegion mouseMoveBuffer; +}; + +static PopupMenu* active_popup_menu = 0; + +PopupMenu::PopupMenu( QWidget *parent, const char *name ) + : QFrame( parent, name, WType_Popup | WNoAutoErase ) +{ + d = new QPopupMenuPrivate; + d->scroll.scrollableSize = d->scroll.topScrollableIndex = 0; + d->scroll.scrollable = QPopupMenuPrivate::Scroll::ScrollNone; + d->scroll.scrolltimer = 0; + isPopupMenu = TRUE; +#ifndef QT_NO_ACCEL + autoaccel = 0; + accelDisabled = FALSE; +#endif + popupActive = -1; + snapToMouse = TRUE; + tab = 0; + checkable = 0; + tornOff = 0; + pendingDelayedContentsChanges = 0; + pendingDelayedStateChanges = 0; + maxPMWidth = 0; + + tab = 0; + ncols = 1; + setFrameStyle( QFrame::PopupPanel | QFrame::Raised ); + setMouseTracking(style().styleHint(QStyle::SH_PopupMenu_MouseTracking, this)); + //style().polishPopupMenu( this ); + style().polishPopupMenu( (QPopupMenu*)this ); + setBackgroundMode( PaletteButton ); + connectModalRecursionSafety = 0; + + setFocusPolicy( StrongFocus ); +} + +PopupMenu::~PopupMenu() +{ + if ( syncMenu == this && qApp ) { + qApp->exit_loop(); + syncMenu = 0; + } + + if(d->scroll.scrolltimer) + delete d->scroll.scrolltimer; + + if ( isVisible() ) { + parentMenu = 0; + hidePopups(); + } + + delete (QWidget*) QMenuData::d->aWidget; // tear-off menu + + preventAnimation = FALSE; + delete d; +} + + +void PopupMenu::updateItem( int id ) // update popup menu item +{ + updateRow( indexOf(id) ); +} + + +void PopupMenu::setCheckable( bool enable ) +{ + if ( isCheckable() != enable ) { + checkable = enable; + badSize = TRUE; + if ( QMenuData::d->aWidget ) + ( (PopupMenu*)(QWidget*)QMenuData::d->aWidget)->setCheckable( enable ); + } +} + +bool PopupMenu::isCheckable() const +{ + return checkable; +} + +void PopupMenu::menuContentsChanged() +{ + // here the part that can't be delayed + QMenuData::menuContentsChanged(); + badSize = TRUE; // might change the size +#if defined(Q_WS_MAC) && !defined(QMAC_QMENUBAR_NO_NATIVE) + mac_dirty_popup = 1; +#endif + if( pendingDelayedContentsChanges ) + return; + pendingDelayedContentsChanges = 1; + if( !pendingDelayedStateChanges ) // if the timer hasn't been started yet + QTimer::singleShot( 0, this, SLOT(performDelayedChanges())); +} + +void PopupMenu::performDelayedContentsChanged() +{ + pendingDelayedContentsChanges = 0; + // here the part the can be delayed +#ifndef QT_NO_ACCEL + // if performDelayedStateChanged() will be called too, + // it will call updateAccel() too, no need to do it twice + if( !pendingDelayedStateChanges ) + updateAccel( 0 ); +#endif + if ( isVisible() ) { + if ( tornOff ) + return; + updateSize(TRUE); + update(); + } + PopupMenu* p = (PopupMenu*)(QWidget*)QMenuData::d->aWidget; + if ( p && p->isVisible() ) { + p->updateSize(TRUE); + p->update(); + } +#if defined(Q_WS_MAC) && !defined(QMAC_QMENUBAR_NO_NATIVE) + mac_dirty_popup = 1; +#endif +} + + +void PopupMenu::menuStateChanged() +{ + // here the part that can't be delayed + if( pendingDelayedStateChanges ) + return; + pendingDelayedStateChanges = 1; + if( !pendingDelayedContentsChanges ) // if the timer hasn't been started yet + QTimer::singleShot( 0, this, SLOT(performDelayedChanges())); +} + +void PopupMenu::performDelayedStateChanged() +{ + pendingDelayedStateChanges = 0; + // here the part that can be delayed +#ifndef QT_NO_ACCEL + updateAccel( 0 ); // ### when we have a good solution for the accel vs. focus widget problem, remove that. That is only a workaround + // if you remove this, see performDelayedContentsChanged() +#endif + update(); + if ( QMenuData::d->aWidget ) + QMenuData::d->aWidget->update(); +} + +void PopupMenu::performDelayedChanges() +{ + if( pendingDelayedContentsChanges ) + performDelayedContentsChanged(); + if( pendingDelayedStateChanges ) + performDelayedStateChanged(); +} + +void PopupMenu::menuInsPopup( PopupMenu *popup ) +{ + connect( popup, SIGNAL(activatedRedirect(int)), + SLOT(subActivated(int)) ); + connect( popup, SIGNAL(highlightedRedirect(int)), + SLOT(subHighlighted(int)) ); + connect( popup, SIGNAL(destroyed(QObject*)), + this, SLOT(popupDestroyed(QObject*)) ); +} + +void PopupMenu::menuDelPopup( PopupMenu *popup ) +{ + popup->disconnect( SIGNAL(activatedRedirect(int)) ); + popup->disconnect( SIGNAL(highlightedRedirect(int)) ); + disconnect( popup, SIGNAL(destroyed(QObject*)), + this, SLOT(popupDestroyed(QObject*)) ); +} + + +void PopupMenu::frameChanged() +{ + menuContentsChanged(); +} + +void PopupMenu::popup( const QPoint &pos, int indexAtPoint ) +{ + if ( !isPopup() && isVisible() ) + hide(); + + //avoid circularity + if ( isVisible() || !isEnabled() ) + return; + +#if defined(Q_WS_MAC) && !defined(QMAC_QMENUBAR_NO_NATIVE) + if( macPopupMenu(pos, indexAtPoint )) + return; +#endif + +#if (QT_VERSION-0 >= 0x040000) +#error "Fix this now" + // #### should move to QWidget - anything might need this functionality, + // #### since anything can have WType_Popup window flag. + // #### This includes stuff in QPushButton and some stuff for setting + // #### the geometry of QDialog. + // QPopupMenu + // ::exec() + // ::popup() + // QPushButton (shouldn't require QMenuPopup) + // ::popupPressed + // Some stuff in qwidget.cpp for dialogs... can't remember exactly. + // Also the code here indicatets the parameter should be a rect, not a + // point. +#endif + + if(d->scroll.scrollable) { + d->scroll.scrollable = QPopupMenuPrivate::Scroll::ScrollNone; + d->scroll.topScrollableIndex = d->scroll.scrollableSize = 0; + badSize = TRUE; + } + updateSize(); + + QPoint mouse = QCursor::pos(); + snapToMouse = pos == mouse; + + // have to emit here as a menu might be setup in a slot connected + // to aboutToShow which will change the size of the menu + bool s = supressAboutToShow; + supressAboutToShow = TRUE; + if ( !s) { + emit aboutToShow(); + updateSize(TRUE); + } + + int screen_num; + if (QApplication::desktop()->isVirtualDesktop()) + screen_num = + QApplication::desktop()->screenNumber( QApplication::reverseLayout() ? + pos+QPoint(width(),0) : pos ); + else + screen_num = QApplication::desktop()->screenNumber( this ); +#ifdef Q_WS_MAC + QRect screen = QApplication::desktop()->availableGeometry( screen_num ); +#else + QRect screen = QApplication::desktop()->screenGeometry( screen_num ); +#endif + int sw = screen.width(); // screen width + int sh = screen.height(); // screen height + int sx = screen.x(); // screen pos + int sy = screen.y(); + int x = pos.x(); + int y = pos.y(); + if ( indexAtPoint >= 0 ) // don't subtract when < 0 + y -= itemGeometry( indexAtPoint ).y(); // (would subtract 2 pixels!) + int w = width(); + int h = height(); + + if ( snapToMouse ) { + if ( qApp->reverseLayout() ) + x -= w; + if ( x+w > sx+sw ) + x = mouse.x()-w; + if ( y+h > sy+sh ) + y = mouse.y()-h; + if ( x < sx ) + x = mouse.x(); + if ( y < sy ) + y = sy; + } + + if ( x+w > sx+sw ) // the complete widget must + x = sx+sw - w; // be visible + if ( y+h > sy+sh ) + y = sy+sh - h; + if ( x < sx ) + x = sx; + if ( y < sy ) + y = sy; + + if(style().styleHint(QStyle::SH_PopupMenu_Scrollable, this)) { + int off_top = 0, off_bottom = 0; + if(y+h > sy+sh) + off_bottom = (y+h) - (sy+sh); + if(y < sy) + off_top = sy - y; + if(off_bottom || off_top) { + int ch = updateSize().height(); //store the old height, before setting scrollable --Sam + const int vextra = style().pixelMetric(QStyle::PM_PopupMenuFrameVerticalExtra, this); + d->scroll.scrollableSize = h - off_top - off_bottom - 2*vextra; + if(off_top) { + move( x, y = sy ); + d->scroll.scrollable = d->scroll.scrollable | QPopupMenuPrivate::Scroll::ScrollUp; + } + if( off_bottom ) + d->scroll.scrollable = d->scroll.scrollable | QPopupMenuPrivate::Scroll::ScrollDown; + if( off_top != off_bottom && indexAtPoint >= 0 ) { + ch -= (vextra * 2); + if(ch > sh) //no bigger than the screen! + ch = sh; + if( ch > d->scroll.scrollableSize ) + d->scroll.scrollableSize = ch; + } + + updateSize(TRUE); //now set the size using the scrollable/scrollableSize as above + w = width(); + h = height(); + if(indexAtPoint >= 0) { + if(off_top) { //scroll to it + register QMenuItem *mi = NULL; + QMenuItemListIt it(*mitems); + for(int tmp_y = 0; tmp_y < off_top && (mi=it.current()); ) { + QSize sz = style().sizeFromContents(QStyle::CT_PopupMenuItem, this, + QSize(0, itemHeight( mi )), + QStyleOption(mi,maxPMWidth,0)); + tmp_y += sz.height(); + d->scroll.topScrollableIndex++; + } + } + } + } + } + move( x, y ); + motion=0; + actItem = -1; + +#ifndef QT_NO_EFFECTS + int hGuess = qApp->reverseLayout() ? QEffects::LeftScroll : QEffects::RightScroll; + int vGuess = QEffects::DownScroll; + if ( qApp->reverseLayout() ) { + if ( snapToMouse && ( x + w/2 > mouse.x() ) || + ( parentMenu && parentMenu->isPopupMenu && + ( x + w/2 > ((PopupMenu*)parentMenu)->x() ) ) ) + hGuess = QEffects::RightScroll; + } else { + if ( snapToMouse && ( x + w/2 < mouse.x() ) || + ( parentMenu && parentMenu->isPopupMenu && + ( x + w/2 < ((PopupMenu*)parentMenu)->x() ) ) ) + hGuess = QEffects::LeftScroll; + } + +#ifndef QT_NO_MENUBAR + if ( snapToMouse && ( y + h/2 < mouse.y() ) || + ( parentMenu && parentMenu->isMenuBar && + ( y + h/2 < ((QMenuBar*)parentMenu)->mapToGlobal( ((QMenuBar*)parentMenu)->pos() ).y() ) ) ) + vGuess = QEffects::UpScroll; +#endif + + if ( QApplication::isEffectEnabled( UI_AnimateMenu ) && + preventAnimation == FALSE ) { + if ( QApplication::isEffectEnabled( UI_FadeMenu ) ) + qFadeEffect( this ); + else if ( parentMenu ) + qScrollEffect( this, parentMenu->isPopupMenu ? hGuess : vGuess ); + else + qScrollEffect( this, hGuess | vGuess ); + } else +#endif + { + show(); + } +#if defined(QT_ACCESSIBILITY_SUPPORT) + QAccessible::updateAccessibility( this, 0, QAccessible::PopupMenuStart ); +#endif +} + +void PopupMenu::subActivated( int id ) +{ + emit activatedRedirect( id ); +} + +void PopupMenu::subHighlighted( int id ) +{ + emit highlightedRedirect( id ); +} + +static bool fromAccel = FALSE; + +#ifndef QT_NO_ACCEL +void PopupMenu::accelActivated( int id ) +{ + QMenuItem *mi = findItem( id ); + if ( mi && mi->isEnabledAndVisible() ) { + QGuardedPtr signal = mi->signal(); + fromAccel = TRUE; + actSig( mi->id() ); + fromAccel = FALSE; + if ( signal ) + signal->activate(); + } +} + +void PopupMenu::accelDestroyed() // accel about to be deleted +{ + autoaccel = 0; // don't delete it twice! +} +#endif //QT_NO_ACCEL + +void PopupMenu::popupDestroyed( QObject *o ) +{ + removePopup( (PopupMenu*)o ); +} + +void PopupMenu::actSig( int id, bool inwhatsthis ) +{ + if ( !inwhatsthis ) { + emit activated( id ); +#if defined(QT_ACCESSIBILITY_SUPPORT) + if ( !fromAccel ) + QAccessible::updateAccessibility( this, indexOf(id)+1, QAccessible::MenuCommand ); +#endif + } else { +#ifndef QT_NO_WHATSTHIS + QRect r( itemGeometry( indexOf( id ) ) ); + QPoint p( r.center().x(), r.bottom() ); + QString whatsThis = findItem( id )->whatsThis(); + if ( whatsThis.isNull() ) + whatsThis = QWhatsThis::textFor( this, p ); + QWhatsThis::leaveWhatsThisMode( whatsThis, mapToGlobal( p ), this ); +#endif + } + + emit activatedRedirect( id ); +} + +void PopupMenu::hilitSig( int id ) +{ + emit highlighted( id ); + emit highlightedRedirect( id ); + +#if defined(QT_ACCESSIBILITY_SUPPORT) + QAccessible::updateAccessibility( this, indexOf(id)+1, QAccessible::Focus ); + QAccessible::updateAccessibility( this, indexOf(id)+1, QAccessible::Selection ); +#endif +} + +void PopupMenu::setFirstItemActive() +{ + QMenuItemListIt it(*mitems); + register QMenuItem *mi; + int ai = 0; + if(d->scroll.scrollable) + ai = d->scroll.topScrollableIndex; + while ( (mi=it.current()) ) { + ++it; + if ( !mi->isSeparator() && mi->id() != QMenuData::d->aInt && + ( style().styleHint( QStyle::SH_PopupMenu_AllowActiveAndDisabled, this ) || mi->isEnabledAndVisible() )) { + setActiveItem( ai ); + return; + } + ai++; + } + actItem = -1; +} + +void PopupMenu::hideAllPopups() +{ + register QMenuData *top = this; // find top level popup + if ( !preventAnimation ) + QTimer::singleShot( 10, this, SLOT(allowAnimation()) ); + preventAnimation = TRUE; + + if ( !isPopup() ) + return; // nothing to do + + while ( top->parentMenu && top->parentMenu->isPopupMenu + && ((PopupMenu*)top->parentMenu)->isPopup() ) + top = top->parentMenu; + ((PopupMenu*)top)->hide(); // cascade from top level + +#ifndef QT_NO_WHATSTHIS + if (whatsThisItem) { + qWhatsThisBDH(); + whatsThisItem = 0; + } +#endif + +} + +void PopupMenu::hidePopups() +{ + if ( !preventAnimation ) + QTimer::singleShot( 10, this, SLOT(allowAnimation()) ); + preventAnimation = TRUE; + + QMenuItemListIt it(*mitems); + register QMenuItem *mi; + while ( (mi=it.current()) ) { + ++it; + if ( mi->popup() && mi->popup()->parentMenu == this ) //avoid circularity + mi->popup()->hide(); + } + popupActive = -1; // no active sub menu + if(style().styleHint(QStyle::SH_PopupMenu_SubMenuPopupDelay, this)) + d->mouseMoveBuffer = QRegion(); + + QRect mfrect = itemGeometry( actItem ); + setMicroFocusHint( mfrect.x(), mfrect.y(), mfrect.width(), mfrect.height(), FALSE ); +} + +bool PopupMenu::tryMenuBar( QMouseEvent *e ) +{ + register QMenuData *top = this; // find top level + while ( top->parentMenu ) + top = top->parentMenu; +#ifndef QT_NO_MENUBAR + return top->isMenuBar ? + ((QMenuBar *)top)->tryMouseEvent( this, e ) : + ((PopupMenu*)top)->tryMouseEvent(this, e ); +#else + return ((PopupMenu*)top)->tryMouseEvent(this, e ); +#endif +} + +bool PopupMenu::tryMouseEvent( PopupMenu *p, QMouseEvent * e) +{ + if ( p == this ) + return FALSE; + QPoint pos = mapFromGlobal( e->globalPos() ); + if ( !rect().contains( pos ) ) // outside + return FALSE; + QMouseEvent ee( e->type(), pos, e->globalPos(), e->button(), e->state() ); + event( &ee ); + return TRUE; +} + +void PopupMenu::byeMenuBar() +{ +#ifndef QT_NO_MENUBAR + register QMenuData *top = this; // find top level + while ( top->parentMenu ) + top = top->parentMenu; +#endif + hideAllPopups(); +#ifndef QT_NO_MENUBAR + if ( top->isMenuBar ) + ((QMenuBar *)top)->goodbye(); +#endif +} + +int PopupMenu::itemAtPos( const QPoint &pos, bool ignoreSeparator ) const +{ + if ( !contentsRect().contains(pos) ) + return -1; + + int row = 0; + int x = contentsRect().x(); + int y = contentsRect().y(); + QMenuItem *mi; + QMenuItemListIt it( *mitems ); + if(d->scroll.scrollable) { + if(d->scroll.topScrollableIndex) { + for( ; (mi = it.current()) && row < d->scroll.topScrollableIndex; row++) + ++it; + if(!mi) { + row = 0; + it.toFirst(); + } + y += style().pixelMetric(QStyle::PM_PopupMenuScrollerHeight, this); + } + } + int itemw = contentsRect().width() / ncols; + QSize sz; + while ( (mi=it.current()) ) { + if(d->scroll.scrollable & QPopupMenuPrivate::Scroll::ScrollDown && + y >= contentsRect().height() - style().pixelMetric(QStyle::PM_PopupMenuScrollerHeight, this)) + return -1; + ++it; + if ( !mi->isVisible() ) { + ++row; + continue; + } + int itemh = itemHeight( mi ); + + sz = style().sizeFromContents(QStyle::CT_PopupMenuItem, this, + QSize(0, itemh), + QStyleOption(mi,maxPMWidth)); + sz = sz.expandedTo(QSize(itemw, sz.height())); + itemw = sz.width(); + itemh = sz.height(); + + if ( ncols > 1 && y + itemh > contentsRect().bottom() ) { + y = contentsRect().y(); + x +=itemw; + } + if ( QRect( x, y, itemw, itemh ).contains( pos ) ) + break; + y += itemh; + ++row; + } + + if ( mi && ( !ignoreSeparator || !mi->isSeparator() ) ) + return row; + return -1; +} + +QRect PopupMenu::itemGeometry( int index ) +{ + QMenuItem *mi; + QSize sz; + int row = 0, scrollh = 0; + int x = contentsRect().x(); + int y = contentsRect().y(); + QMenuItemListIt it( *mitems ); + if(d->scroll.scrollable & QPopupMenuPrivate::Scroll::ScrollUp) { + scrollh = style().pixelMetric(QStyle::PM_PopupMenuScrollerHeight, this); + y += scrollh; + if(d->scroll.topScrollableIndex) { + for( ; (mi = it.current()) && row < d->scroll.topScrollableIndex; row++) + ++it; + if(!mi) { + row = 0; + it.toFirst(); + } + } + } + int itemw = contentsRect().width() / ncols; + while ( (mi=it.current()) ) { + if(d->scroll.scrollable & QPopupMenuPrivate::Scroll::ScrollDown && + y >= contentsRect().height() - scrollh) + break; + ++it; + if ( !mi->isVisible() ) { + ++row; + continue; + } + int itemh = itemHeight( mi ); + + sz = style().sizeFromContents(QStyle::CT_PopupMenuItem, this, + QSize(0, itemh), + QStyleOption(mi,maxPMWidth)); + sz = sz.expandedTo(QSize(itemw, sz.height())); + itemw = sz.width(); + itemh = sz.height(); + if(d->scroll.scrollable & QPopupMenuPrivate::Scroll::ScrollDown && + (y + itemh > contentsRect().height() - scrollh)) + itemh -= (y + itemh) - (contentsRect().height() - scrollh); + if ( ncols > 1 && y + itemh > contentsRect().bottom() ) { + y = contentsRect().y(); + x +=itemw; + } + if ( row == index ) + return QRect( x,y,itemw,itemh ); + y += itemh; + ++row; + } + + return QRect(0,0,0,0); +} + +QSize PopupMenu::updateSize(bool force_update, bool do_resize) +{ + polish(); + if ( count() == 0 ) { + QSize ret = QSize( 50, 8 ); + if(do_resize) + setFixedSize( ret ); + badSize = TRUE; + return ret; + } + + int scrheight = 0; + if(d->scroll.scrollableSize) { + if(d->scroll.scrollable & QPopupMenuPrivate::Scroll::ScrollUp) + scrheight += style().pixelMetric(QStyle::PM_PopupMenuScrollerHeight, this); + if(d->scroll.scrollable & QPopupMenuPrivate::Scroll::ScrollDown) + scrheight += style().pixelMetric(QStyle::PM_PopupMenuScrollerHeight, this); + } + + if(badSize || force_update) { +#ifndef QT_NO_ACCEL + updateAccel( 0 ); +#endif + int height = 0; + int max_width = 0, max_height = 0; + QFontMetrics fm = fontMetrics(); + register QMenuItem *mi; + maxPMWidth = 0; + int maxWidgetWidth = 0; + tab = 0; + + for ( QMenuItemListIt it( *mitems ); it.current(); ++it ) { + mi = it.current(); + QWidget *miw = mi->widget(); + if (miw) { + if ( miw->parentWidget() != this ) + miw->reparent( this, QPoint(0,0), TRUE ); + // widget items musn't propgate mouse events + ((PopupMenu*)miw)->setWFlags(WNoMousePropagation); + } + if ( mi->custom() ) + mi->custom()->setFont( font() ); + if ( mi->iconSet() != 0) + maxPMWidth = QMAX( maxPMWidth, + mi->iconSet()->pixmap( QIconSet::Small, QIconSet::Normal ).width() + 4 ); + } + + int dh = QApplication::desktop()->height(); + ncols = 1; + + for ( QMenuItemListIt it2( *mitems ); it2.current(); ++it2 ) { + mi = it2.current(); + if ( !mi->isVisible() ) + continue; + int w = 0; + int itemHeight = PopupMenu::itemHeight( mi ); + + if ( mi->widget() ) { + QSize s( mi->widget()->sizeHint() ); + s = s.expandedTo( mi->widget()->minimumSize() ); + mi->widget()->resize( s ); + if ( s.width() > maxWidgetWidth ) + maxWidgetWidth = s.width(); + itemHeight = s.height(); + } else { + if( ! mi->isSeparator() ) { + if ( mi->custom() ) { + if ( mi->custom()->fullSpan() ) { + maxWidgetWidth = QMAX( maxWidgetWidth, + mi->custom()->sizeHint().width() ); + } else { + QSize s ( mi->custom()->sizeHint() ); + w += s.width(); + } + } + + w += maxPMWidth; + + if (! mi->text().isNull()) { + QString s = mi->text(); + int t; + if ( (t = s.find('\t')) >= 0 ) { // string contains tab + w += fm.width( s, t ); + w -= s.contains('&') * fm.width('&'); + w += s.contains("&&") * fm.width('&'); + int tw = fm.width( s.mid(t + 1) ); + if ( tw > tab) + tab = tw; + } else { + w += fm.width( s ); + w -= s.contains('&') * fm.width('&'); + w += s.contains("&&") * fm.width('&'); + } + } else if (mi->pixmap()) + w += mi->pixmap()->width(); + } else { + if ( mi->custom() ) { + QSize s ( mi->custom()->sizeHint() ); + w += s.width(); + } else { + w = itemHeight = 2; + } + } + + QSize sz = style().sizeFromContents(QStyle::CT_PopupMenuItem, this, + QSize(w, itemHeight), + QStyleOption(mi,maxPMWidth)); + + w = sz.width(); + itemHeight = sz.height(); + +#if defined(QT_CHECK_NULL) + if ( mi->text().isNull() && !mi->pixmap() && !mi->iconSet() && + !mi->isSeparator() && !mi->widget() && !mi->custom() ) + qWarning( "PopupMenu: (%s) Popup has invalid menu item", + name( "unnamed" ) ); +#endif + } + height += itemHeight; + if(style().styleHint(QStyle::SH_PopupMenu_Scrollable, this)) { + if(scrheight && height >= d->scroll.scrollableSize - scrheight) { + height = d->scroll.scrollableSize - scrheight; + break; + } + } else if( height + 2*frameWidth() >= dh ) { + ncols++; + max_height = QMAX(max_height, height - itemHeight); + height = itemHeight; + } + if ( w > max_width ) + max_width = w; + } + if( ncols == 1 && !max_height ) + max_height = height; + + if(style().styleHint(QStyle::SH_PopupMenu_Scrollable, this)) { + height += scrheight; + setMouseTracking(TRUE); + } + + if ( tab ) + tab -= fontMetrics().minRightBearing(); + else + max_width -= fontMetrics().minRightBearing(); + + if ( max_width + tab < maxWidgetWidth ) + max_width = maxWidgetWidth - tab; + + const int fw = frameWidth(); + int extra_width = (fw+style().pixelMetric(QStyle::PM_PopupMenuFrameHorizontalExtra, this)) * 2, + extra_height = (fw+style().pixelMetric(QStyle::PM_PopupMenuFrameVerticalExtra, this)) * 2; + if ( ncols == 1 ) + d->calcSize = QSize( QMAX( minimumWidth(), max_width + tab + extra_width ), + QMAX( minimumHeight() , height + extra_height ) ); + else + d->calcSize = QSize( QMAX( minimumWidth(), (ncols*(max_width + tab)) + extra_width ), + QMAX( minimumHeight(), QMIN( max_height + extra_height + 1, dh ) ) ); + badSize = FALSE; + } + + { + // Position the widget items. It could be done in drawContents + // but this way we get less flicker. + QSize sz; + int x = contentsRect().x(); + int y = contentsRect().y(); + int itemw = contentsRect().width() / ncols; + for(QMenuItemListIt it(*mitems); it.current(); ++it) { + QMenuItem *mi = it.current(); + if ( !mi->isVisible() ) + continue; + + int itemh = itemHeight( mi ); + + sz = style().sizeFromContents(QStyle::CT_PopupMenuItem, this, + QSize(0, itemh), QStyleOption(mi,maxPMWidth)); + sz = sz.expandedTo(QSize(itemw, sz.height())); + itemw = sz.width(); + itemh = sz.height(); + + if ( ncols > 1 && y + itemh > contentsRect().bottom() ) { + y = contentsRect().y(); + x +=itemw; + } + if ( mi->widget() ) + mi->widget()->setGeometry( x, y, itemw, mi->widget()->height() ); + y += itemh; + } + } + + if( do_resize && size() != d->calcSize ) { + setMaximumSize( d->calcSize ); + d->calcSize = maximumSize(); //let the max size adjust it (virtual) + resize( d->calcSize ); + } + return d->calcSize; +} + +#ifndef QT_NO_ACCEL +void PopupMenu::updateAccel( QWidget *parent ) +{ + QMenuItemListIt it(*mitems); + register QMenuItem *mi; + + if ( parent ) { + delete autoaccel; + autoaccel = 0; + } else if ( !autoaccel ) { + // we have no parent. Rather than ignoring any accelerators we try to find this popup's main window + if ( tornOff ) { + parent = this; + } else { + QWidget *w = (QWidget *) this; + parent = w->parentWidget(); + while ( (!w->testWFlags(WType_TopLevel) || !w->testWFlags(WType_Popup)) && parent ) { + w = parent; + parent = parent->parentWidget(); + } + } + } + + if ( parent == 0 && autoaccel == 0 ) + return; + + if ( autoaccel ) // build it from scratch + autoaccel->clear(); + else { + // create an autoaccel in any case, even if we might not use + // it immediately. Maybe the user needs it later. + autoaccel = new QAccel( parent, this ); + connect( autoaccel, SIGNAL(activated(int)), + SLOT(accelActivated(int)) ); + connect( autoaccel, SIGNAL(activatedAmbiguously(int)), + SLOT(accelActivated(int)) ); + connect( autoaccel, SIGNAL(destroyed()), + SLOT(accelDestroyed()) ); + if ( accelDisabled ) + autoaccel->setEnabled( FALSE ); + } + while ( (mi=it.current()) ) { + ++it; + QKeySequence k = mi->key(); + if ( (int)k ) { + int id = autoaccel->insertItem( k, mi->id() ); +#ifndef QT_NO_WHATSTHIS + autoaccel->setWhatsThis( id, mi->whatsThis() ); +#endif + } + if ( !mi->text().isNull() || mi->custom() ) { + QString s = mi->text(); + int i = s.find('\t'); + + // Note: Only looking at the first key in the sequence! + if ( (int)k && (int)k != Key_unknown ) { + QString t = (QString)mi->key(); + if ( i >= 0 ) + s.replace( i+1, s.length()-i, t ); + else { + s += '\t'; + s += t; + } + } else if ( !k ) { + if ( i >= 0 ) + s.truncate( i ); + } + if ( s != mi->text() ) { + mi->setText( s ); + badSize = TRUE; + } + } + if ( mi->popup() && parent ) { // call recursively + // reuse + PopupMenu* popup = mi->popup(); + if (!popup->avoid_circularity) { + popup->avoid_circularity = 1; + popup->updateAccel( parent ); + popup->avoid_circularity = 0; + } + } + } +} + +void PopupMenu::enableAccel( bool enable ) +{ + if ( autoaccel ) + autoaccel->setEnabled( enable ); + accelDisabled = !enable; // rememeber when updateAccel + QMenuItemListIt it(*mitems); + register QMenuItem *mi; + while ( (mi=it.current()) ) { // do the same for sub popups + ++it; + if ( mi->popup() ) // call recursively + mi->popup()->enableAccel( enable ); + } +} +#endif + +void PopupMenu::setFont( const QFont &font ) +{ + QWidget::setFont( font ); + badSize = TRUE; + if ( isVisible() ) { + updateSize(); + update(); + } +} + +void PopupMenu::show() +{ + if ( !isPopup() && isVisible() ) + hide(); + + if ( isVisible() ) { + supressAboutToShow = FALSE; + QWidget::show(); + return; + } + if (!supressAboutToShow) + emit aboutToShow(); + else + supressAboutToShow = FALSE; + performDelayedChanges(); + updateSize(TRUE); + QWidget::show(); + popupActive = -1; + if(style().styleHint(QStyle::SH_PopupMenu_SubMenuPopupDelay, this)) + d->mouseMoveBuffer = QRegion(); +} + +void PopupMenu::hide() +{ + if ( syncMenu == this && qApp ) { + qApp->exit_loop(); + syncMenu = 0; + } + + if ( !isVisible() ) { + QWidget::hide(); + return; + } + emit aboutToHide(); + + actItem = popupActive = -1; + if(style().styleHint(QStyle::SH_PopupMenu_SubMenuPopupDelay, this)) + d->mouseMoveBuffer = QRegion(); + mouseBtDn = FALSE; // mouse button up +#if defined(QT_ACCESSIBILITY_SUPPORT) + QAccessible::updateAccessibility( this, 0, QAccessible::PopupMenuEnd ); +#endif + parentMenu = 0; + hidePopups(); + QWidget::hide(); +} + +int PopupMenu::itemHeight( int row ) const +{ + return itemHeight( mitems->at( row ) ); +} + +int PopupMenu::itemHeight( QMenuItem *mi ) const +{ + if ( mi->widget() ) + return mi->widget()->height(); + if ( mi->custom() && mi->custom()->fullSpan() ) + return mi->custom()->sizeHint().height(); + + QFontMetrics fm(fontMetrics()); + int h = 0; + if ( mi->isSeparator() ) // separator height + h = 2; + else if ( mi->pixmap() ) // pixmap height + h = mi->pixmap()->height(); + else // text height + h = fm.height(); + + if ( !mi->isSeparator() && mi->iconSet() != 0 ) + h = QMAX(h, mi->iconSet()->pixmap( QIconSet::Small, + QIconSet::Normal ).height()); + if ( mi->custom() ) + h = QMAX(h, mi->custom()->sizeHint().height()); + + return h; +} + +void PopupMenu::drawItem( QPainter* p, int tab_, QMenuItem* mi, + bool act, int x, int y, int w, int h) +{ + QStyle::SFlags flags = QStyle::Style_Default; + if (isEnabled() && mi->isEnabledAndVisible() && (!mi->popup() || mi->popup()->isEnabled()) ) + flags |= QStyle::Style_Enabled; + if (act) + flags |= QStyle::Style_Active; + if (mouseBtDn) + flags |= QStyle::Style_Down; + + const QColorGroup &cg = ((flags&QStyle::Style_Enabled) ? colorGroup() : palette().disabled() ); + + if ( mi->custom() && mi->custom()->fullSpan() ) { + QMenuItem dummy; + style().drawControl(QStyle::CE_PopupMenuItem, p, this, QRect(x, y, w, h), cg, + flags, QStyleOption(&dummy,maxPMWidth,tab_)); + mi->custom()->paint( p, cg, act, flags&QStyle::Style_Enabled, x, y, w, h ); + } else + style().drawControl(QStyle::CE_PopupMenuItem, p, this, QRect(x, y, w, h), cg, + flags, QStyleOption(mi,maxPMWidth,tab_)); +} + +void PopupMenu::drawContents( QPainter* p ) +{ + QMenuItemListIt it(*mitems); + QMenuItem *mi = 0; + int row = 0; + int x = contentsRect().x(); + int y = contentsRect().y(); + if(d->scroll.scrollable) { + if(d->scroll.topScrollableIndex) { + for( ; (mi = it.current()) && row < d->scroll.topScrollableIndex; row++) + ++it; + if(!mi) + it.toFirst(); + } + if(d->scroll.scrollable & QPopupMenuPrivate::Scroll::ScrollUp) { + QRect rect(x, y, contentsRect().width(), + style().pixelMetric(QStyle::PM_PopupMenuScrollerHeight, this)); + if(!p->hasClipping() || p->clipRegion().contains(rect)) { + QStyle::SFlags flags = QStyle::Style_Up; + if (isEnabled()) + flags |= QStyle::Style_Enabled; + style().drawControl(QStyle::CE_PopupMenuScroller, p, this, rect, + colorGroup(), flags, QStyleOption(maxPMWidth)); + } + y += rect.height(); + } + } + + int itemw = contentsRect().width() / ncols; + QSize sz; + QStyle::SFlags flags; + while ( (mi=it.current()) ) { + if(d->scroll.scrollable & QPopupMenuPrivate::Scroll::ScrollDown && + y >= contentsRect().height() - style().pixelMetric(QStyle::PM_PopupMenuScrollerHeight, this)) + break; + ++it; + if ( !mi->isVisible() ) { + ++row; + continue; + } + int itemh = itemHeight( mi ); + sz = style().sizeFromContents(QStyle::CT_PopupMenuItem, this, + QSize(0, itemh), + QStyleOption(mi,maxPMWidth,0) + ); + sz = sz.expandedTo(QSize(itemw, sz.height())); + itemw = sz.width(); + itemh = sz.height(); + + if ( ncols > 1 && y + itemh > contentsRect().bottom() ) { + if ( y < contentsRect().bottom() ) { + QRect rect(x, y, itemw, contentsRect().bottom() - y); + if(!p->hasClipping() || p->clipRegion().contains(rect)) { + flags = QStyle::Style_Default; + if (isEnabled() && mi->isEnabledAndVisible()) + flags |= QStyle::Style_Enabled; + style().drawControl(QStyle::CE_PopupMenuItem, p, this, rect, + colorGroup(), flags, QStyleOption((QMenuItem*)0,maxPMWidth)); + } + } + y = contentsRect().y(); + x +=itemw; + } + if (!mi->widget() && (!p->hasClipping() || p->clipRegion().contains(QRect(x, y, itemw, itemh)))) + drawItem( p, tab, mi, row == actItem, x, y, itemw, itemh ); + y += itemh; + ++row; + } + if ( y < contentsRect().bottom() ) { + QRect rect(x, y, itemw, contentsRect().bottom() - y); + if(!p->hasClipping() || p->clipRegion().contains(rect)) { + flags = QStyle::Style_Default; + if ( isEnabled() ) + flags |= QStyle::Style_Enabled; + style().drawControl(QStyle::CE_PopupMenuItem, p, this, rect, + colorGroup(), flags, QStyleOption((QMenuItem*)0,maxPMWidth)); + } + } + if( d->scroll.scrollable & QPopupMenuPrivate::Scroll::ScrollDown ) { + int sh = style().pixelMetric(QStyle::PM_PopupMenuScrollerHeight, this); + QRect rect(x, contentsRect().height() - sh, contentsRect().width(), sh); + if(!p->hasClipping() || p->clipRegion().contains(rect)) { + QStyle::SFlags flags = QStyle::Style_Down; + if (isEnabled()) + flags |= QStyle::Style_Enabled; + style().drawControl(QStyle::CE_PopupMenuScroller, p, this, rect, + colorGroup(), flags, QStyleOption(maxPMWidth)); + } + } +#if defined( DEBUG_SLOPPY_SUBMENU ) + if ( style().styleHint(QStyle::SH_PopupMenu_SloppySubMenus, this )) { + p->setClipRegion( d->mouseMoveBuffer ); + p->fillRect( d->mouseMoveBuffer.boundingRect(), colorGroup().brush( QColorGroup::Highlight ) ); + } +#endif +} + +void PopupMenu::paintEvent( QPaintEvent *e ) +{ + QFrame::paintEvent( e ); +} + +void PopupMenu::closeEvent( QCloseEvent * e) { + e->accept(); + byeMenuBar(); +} + +void PopupMenu::mousePressEvent( QMouseEvent *e ) +{ + int sh = style().pixelMetric(QStyle::PM_PopupMenuScrollerHeight, this); + if (rect().contains(e->pos()) && + ((d->scroll.scrollable & QPopupMenuPrivate::Scroll::ScrollUp && e->pos().y() <= sh) || //up + (d->scroll.scrollable & QPopupMenuPrivate::Scroll::ScrollDown && + e->pos().y() >= contentsRect().height() - sh))) //down + return; + + mouseBtDn = TRUE; // mouse button down + int item = itemAtPos( e->pos() ); + if ( item == -1 ) { + if ( !rect().contains(e->pos()) && !tryMenuBar(e) ) { + byeMenuBar(); + } + return; + } + register QMenuItem *mi = mitems->at(item); + if ( item != actItem ) // new item activated + setActiveItem( item ); + + PopupMenu *popup = mi->popup(); + if ( popup ) { + if ( popup->isVisible() ) { // sub menu already open + int pactItem = popup->actItem; + popup->actItem = -1; + popup->hidePopups(); + popup->updateRow( pactItem ); + } else { // open sub menu + hidePopups(); + popupSubMenuLater( 20, this ); + } + } else { + hidePopups(); + } +} + +void PopupMenu::mouseReleaseEvent( QMouseEvent *e ) +{ + // do not hide a standalone context menu on press-release, unless + // the user moved the mouse significantly + if ( !parentMenu && !mouseBtDn && actItem < 0 && motion < 6 ) + return; + + mouseBtDn = FALSE; + + // if the user released the mouse outside the menu, pass control + // to the menubar or our parent menu + int sh = style().pixelMetric(QStyle::PM_PopupMenuScrollerHeight, this); + if ( !rect().contains( e->pos() ) && tryMenuBar(e) ) + return; + else if((d->scroll.scrollable & QPopupMenuPrivate::Scroll::ScrollUp && e->pos().y() <= sh) || //up + (d->scroll.scrollable & QPopupMenuPrivate::Scroll::ScrollDown && + e->pos().y() >= contentsRect().height() - sh)) //down + return; + + if ( actItem < 0 ) { // we do not have an active item + // if the release is inside without motion (happens with + // oversized popup menus on small screens), ignore it + if ( rect().contains( e->pos() ) && motion < 6 ) + return; + else + byeMenuBar(); + } else { // selected menu item! + register QMenuItem *mi = mitems->at(actItem); + if ( mi ->widget() ) { + QWidget* widgetAt = QApplication::widgetAt( e->globalPos(), TRUE ); + if ( widgetAt && widgetAt != this ) { + QMouseEvent me( e->type(), widgetAt->mapFromGlobal( e->globalPos() ), + e->globalPos(), e->button(), e->state() ); + QApplication::sendEvent( widgetAt, &me ); + } + } + PopupMenu *popup = mi->popup(); +#ifndef QT_NO_WHATSTHIS + bool b = QWhatsThis::inWhatsThisMode(); +#else + const bool b = FALSE; +#endif + if ( !mi->isEnabledAndVisible() ) { +#ifndef QT_NO_WHATSTHIS + if ( b ) { + actItem = -1; + updateItem( mi->id() ); + byeMenuBar(); + actSig( mi->id(), b); + } +#endif + } else if ( popup ) { + popup->setFirstItemActive(); + } else { // normal menu item + byeMenuBar(); // deactivate menu bar + if ( mi->isEnabledAndVisible() ) { + actItem = -1; + updateItem( mi->id() ); + active_popup_menu = this; + QGuardedPtr signal = mi->signal(); + actSig( mi->id(), b ); + if ( signal && !b ) + signal->activate(); + active_popup_menu = 0; + } + } + } +} + +void PopupMenu::mouseMoveEvent( QMouseEvent *e ) +{ + motion++; + + if ( parentMenu && parentMenu->isPopupMenu ) { + PopupMenu* p = (PopupMenu*)parentMenu; + int myIndex; + + p->findPopup( this, &myIndex ); + QPoint pPos = p->mapFromParent( e->globalPos() ); + if ( p->actItem != myIndex && !p->rect().contains( pPos ) ) + p->setActiveItem( myIndex ); + + if ( style().styleHint(QStyle::SH_PopupMenu_SloppySubMenus, this )) { + p->d->mouseMoveBuffer = QRegion(); +#ifdef DEBUG_SLOPPY_SUBMENU + p->repaint(); +#endif + } + } + + if ( (e->state() & Qt::MouseButtonMask) == 0 && + !hasMouseTracking() ) + return; + + if(d->scroll.scrollable && e->pos().x() >= rect().x() && e->pos().x() <= rect().width()) { + int sh = style().pixelMetric(QStyle::PM_PopupMenuScrollerHeight, this); + if((d->scroll.scrollable & QPopupMenuPrivate::Scroll::ScrollUp && e->pos().y() <= sh) || + (d->scroll.scrollable & QPopupMenuPrivate::Scroll::ScrollDown && e->pos().y() >= height()-sh)) { + if(!d->scroll.scrolltimer) { + d->scroll.scrolltimer = new QTimer(this, "popup scroll timer"); + QObject::connect( d->scroll.scrolltimer, SIGNAL(timeout()), + this, SLOT(subScrollTimer()) ); + } + if(!d->scroll.scrolltimer->isActive()) + d->scroll.scrolltimer->start(40); + return; + } + } + + int item = itemAtPos( e->pos() ); + if ( item == -1 ) { // no valid item + int lastActItem = actItem; + actItem = -1; + if ( lastActItem >= 0 ) + updateRow( lastActItem ); + if ( lastActItem > 0 || + ( !rect().contains( e->pos() ) && !tryMenuBar( e ) ) ) { + popupSubMenuLater(style().styleHint(QStyle::SH_PopupMenu_SubMenuPopupDelay, + this), this); + } + } else { // mouse on valid item + // but did not register mouse press + if ( (e->state() & Qt::MouseButtonMask) && !mouseBtDn ) + mouseBtDn = TRUE; // so mouseReleaseEvent will pop down + + register QMenuItem *mi = mitems->at( item ); + + if ( mi->widget() ) { + QWidget* widgetAt = QApplication::widgetAt( e->globalPos(), TRUE ); + if ( widgetAt && widgetAt != this ) { + QMouseEvent me( e->type(), widgetAt->mapFromGlobal( e->globalPos() ), + e->globalPos(), e->button(), e->state() ); + QApplication::sendEvent( widgetAt, &me ); + } + } + + if ( actItem == item ) + return; + + if ( style().styleHint(QStyle::SH_PopupMenu_SloppySubMenus, this) && + d->mouseMoveBuffer.contains( e->pos() ) ) { + actItem = item; + popupSubMenuLater( style().styleHint(QStyle::SH_PopupMenu_SubMenuPopupDelay, this) * 6, + this ); + return; + } + + if ( mi->popup() || ( popupActive >= 0 && popupActive != item )) + popupSubMenuLater( style().styleHint(QStyle::SH_PopupMenu_SubMenuPopupDelay, this), + this ); + else if ( singleSingleShot ) + singleSingleShot->stop(); + + if ( item != actItem ) + setActiveItem( item ); + } +} + +void PopupMenu::keyPressEvent( QKeyEvent *e ) +{ + QMenuItem *mi = 0; + PopupMenu *popup; + int dy = 0; + bool ok_key = TRUE; + + int key = e->key(); + if ( QApplication::reverseLayout() ) { + // in reverse mode opening and closing keys for submenues are reversed + if ( key == Key_Left ) + key = Key_Right; + else if ( key == Key_Right ) + key = Key_Left; + } + + switch ( key ) { + case Key_Tab: + // ignore tab, otherwise it will be passed to the menubar + break; + + case Key_Up: + dy = -1; + break; + + case Key_Down: + dy = 1; + break; + + case Key_Alt: + if ( style().styleHint(QStyle::SH_MenuBar_AltKeyNavigation, this) ) + byeMenuBar(); + break; + + case Key_Escape: + if ( tornOff ) { + close(); + return; + } + // just hide one + { + QMenuData* p = parentMenu; + hide(); +#ifndef QT_NO_MENUBAR + if ( p && p->isMenuBar ) + ((QMenuBar*) p)->goodbye( TRUE ); +#endif + } + break; + + case Key_Left: + if ( ncols > 1 && actItem >= 0 ) { + QRect r( itemGeometry( actItem ) ); + int newActItem = itemAtPos( QPoint( r.left() - 1, r.center().y() ) ); + if ( newActItem >= 0 ) { + setActiveItem( newActItem ); + break; + } + } + if ( parentMenu && parentMenu->isPopupMenu ) { + ((PopupMenu *)parentMenu)->hidePopups(); + if ( singleSingleShot ) + singleSingleShot->stop(); + break; + } + + ok_key = FALSE; + break; + + case Key_Right: + if ( actItem >= 0 && ( mi=mitems->at(actItem) )->isEnabledAndVisible() && (popup=mi->popup()) ) { + hidePopups(); + if ( singleSingleShot ) + singleSingleShot->stop(); + // ### The next two lines were switched to fix the problem with the first item of the + // submenu not being highlighted...any reason why they should have been the other way?? + subMenuTimer(); + popup->setFirstItemActive(); + break; + } else if ( actItem == -1 && ( parentMenu && !parentMenu->isMenuBar )) { + dy = 1; + break; + } + if ( ncols > 1 && actItem >= 0 ) { + QRect r( itemGeometry( actItem ) ); + int newActItem = itemAtPos( QPoint( r.right() + 1, r.center().y() ) ); + if ( newActItem >= 0 ) { + setActiveItem( newActItem ); + break; + } + } + ok_key = FALSE; + break; + + case Key_Space: + if (! style().styleHint(QStyle::SH_PopupMenu_SpaceActivatesItem, this)) + break; + // for motif, fall through + + case Key_Return: + case Key_Enter: + { + if ( actItem < 0 ) + break; +#ifndef QT_NO_WHATSTHIS + bool b = QWhatsThis::inWhatsThisMode(); +#else + const bool b = FALSE; +#endif + mi = mitems->at( actItem ); + if ( !mi->isEnabled() && !b ) + break; + popup = mi->popup(); + if ( popup ) { + hidePopups(); + popupSubMenuLater( 20, this ); + popup->setFirstItemActive(); + } else { + actItem = -1; + updateItem( mi->id() ); + byeMenuBar(); + if ( mi->isEnabledAndVisible() || b ) { + active_popup_menu = this; + QGuardedPtr signal = mi->signal(); + actSig( mi->id(), b ); + if ( signal && !b ) + signal->activate(); + active_popup_menu = 0; + } + } + } + break; +#ifndef QT_NO_WHATSTHIS + case Key_F1: + if ( actItem < 0 || e->state() != ShiftButton) + break; + mi = mitems->at( actItem ); + if ( !mi->whatsThis().isNull() ){ + if ( !QWhatsThis::inWhatsThisMode() ) + QWhatsThis::enterWhatsThisMode(); + QRect r( itemGeometry( actItem) ); + QWhatsThis::leaveWhatsThisMode( mi->whatsThis(), mapToGlobal( r.bottomLeft()) ); + } + //fall-through! +#endif + default: + ok_key = FALSE; + + } + if ( !ok_key && + ( !e->state() || e->state() == AltButton || e->state() == ShiftButton ) && + e->text().length()==1 ) { + QChar c = e->text()[0].upper(); + + QMenuItemListIt it(*mitems); + QMenuItem* first = 0; + QMenuItem* currentSelected = 0; + QMenuItem* firstAfterCurrent = 0; + + register QMenuItem *m; + mi = 0; + int indx = 0; + int clashCount = 0; + while ( (m=it.current()) ) { + ++it; + QString s = m->text(); + if ( !s.isEmpty() ) { + int i = s.find( '&' ); + while ( i >= 0 && i < (int)s.length() - 1 ) { + if ( s[i+1].upper() == c ) { + ok_key = TRUE; + clashCount++; + if ( !first ) + first = m; + if ( indx == actItem ) + currentSelected = m; + else if ( !firstAfterCurrent && currentSelected ) + firstAfterCurrent = m; + break; + } else if ( s[i+1] == '&' ) { + i = s.find( '&', i+2 ); + } else { + break; + } + } + } + if ( mi ) + break; + indx++; + } + + if ( 1 == clashCount ) { // No clashes, continue with selection + mi = first; + popup = mi->popup(); + if ( popup ) { + setActiveItem( indexOf(mi->id()) ); + hidePopups(); + popupSubMenuLater( 20, this ); + popup->setFirstItemActive(); + } else { + byeMenuBar(); +#ifndef QT_NO_WHATSTHIS + bool b = QWhatsThis::inWhatsThisMode(); +#else + const bool b = FALSE; +#endif + if ( mi->isEnabledAndVisible() || b ) { + active_popup_menu = this; + QGuardedPtr signal = mi->signal(); + actSig( mi->id(), b ); + if ( signal && !b ) + signal->activate(); + active_popup_menu = 0; + } + } + } else if ( clashCount > 1 ) { // Clashes, highlight next... + // If there's clashes and no one is selected, use first one + // or if there is no clashes _after_ current, use first one + if ( !currentSelected || (currentSelected && !firstAfterCurrent)) + dy = indexOf( first->id() ) - actItem; + else + dy = indexOf( firstAfterCurrent->id() ) - actItem; + } + } +#ifndef QT_NO_MENUBAR + if ( !ok_key ) { // send to menu bar + register QMenuData *top = this; // find top level + while ( top->parentMenu ) + top = top->parentMenu; + if ( top->isMenuBar ) { + int beforeId = top->actItem; + ((QMenuBar*)top)->tryKeyEvent( this, e ); + if ( beforeId != top->actItem ) + ok_key = TRUE; + } + } +#endif + if ( actItem < 0 ) { + if ( dy > 0 ) { + setFirstItemActive(); + } else if ( dy < 0 ) { + QMenuItemListIt it(*mitems); + it.toLast(); + register QMenuItem *mi; + int ai = count() - 1; + while ( (mi=it.current()) ) { + --it; + if ( !mi->isSeparator() && mi->id() != QMenuData::d->aInt ) { + setActiveItem( ai ); + return; + } + ai--; + } + actItem = -1; + } + return; + } + + if ( dy ) { // highlight next/prev + register int i = actItem; + int c = mitems->count(); + for(int n = c; n; n--) { + i = i + dy; + if(d->scroll.scrollable) { + if(d->scroll.scrolltimer) + d->scroll.scrolltimer->stop(); + if(i < 0) + i = 0; + else if(i >= c) + i = c - 1; + } else { + if ( i == c ) + i = 0; + else if ( i < 0 ) + i = c - 1; + } + mi = mitems->at( i ); + if ( !mi || !mi->isVisible() ) + continue; + + if ( !mi->isSeparator() && + ( style().styleHint(QStyle::SH_PopupMenu_AllowActiveAndDisabled, this) + || mi->isEnabledAndVisible() ) ) + break; + } + if ( i != actItem ) + setActiveItem( i ); + if(d->scroll.scrollable) { //need to scroll to make it visible? + QRect r = itemGeometry(actItem); + if(r.isNull() || r.height() < itemHeight(mitems->at(actItem))) { + bool refresh = FALSE; + if(d->scroll.scrollable & QPopupMenuPrivate::Scroll::ScrollUp && dy == -1) { //up + if(d->scroll.topScrollableIndex >= 0) { + d->scroll.topScrollableIndex--; + refresh = TRUE; + } + } else if(d->scroll.scrollable & QPopupMenuPrivate::Scroll::ScrollDown) { //down + QMenuItemListIt it(*mitems); + int sh = style().pixelMetric(QStyle::PM_PopupMenuScrollerHeight, this); + for(int i = 0, y = ((d->scroll.scrollable & QPopupMenuPrivate::Scroll::ScrollUp) ? sh : 0); it.current(); i++, ++it) { + if(i >= d->scroll.topScrollableIndex) { + int itemh = itemHeight(it.current()); + QSize sz = style().sizeFromContents(QStyle::CT_PopupMenuItem, this, + QSize(0, itemh), + QStyleOption(it.current(),maxPMWidth,0)); + y += sz.height(); + if(y > (contentsRect().height()-sh)) { + if(sz.height() > sh || !it.atLast()) + d->scroll.topScrollableIndex++; + refresh = TRUE; + break; + } + } + } + } + if(refresh) { + updateScrollerState(); + update(); + } + } + } + } + +#ifdef Q_OS_WIN32 + if ( !ok_key && + !( e->key() == Key_Control || e->key() == Key_Shift || e->key() == Key_Meta ) ) + qApp->beep(); +#endif // Q_OS_WIN32 +} + +void PopupMenu::timerEvent( QTimerEvent *e ) +{ + QFrame::timerEvent( e ); +} + +void PopupMenu::leaveEvent( QEvent * ) +{ + if ( testWFlags( WStyle_Tool ) && style().styleHint(QStyle::SH_PopupMenu_MouseTracking, this) ) { + int lastActItem = actItem; + actItem = -1; + if ( lastActItem >= 0 ) + updateRow( lastActItem ); + } +} + +void PopupMenu::styleChange( QStyle& old ) +{ + QFrame::styleChange( old ); + setMouseTracking(style().styleHint(QStyle::SH_PopupMenu_MouseTracking, this)); + style().polishPopupMenu( this ); + updateSize(TRUE); +} + +void PopupMenu::enabledChange( bool ) +{ + if ( QMenuData::d->aWidget ) // torn-off menu + QMenuData::d->aWidget->setEnabled( isEnabled() ); +} + +int PopupMenu::columns() const +{ + return ncols; +} + +// This private slot handles the scrolling popupmenu +void PopupMenu::subScrollTimer() { + QPoint pos = QCursor::pos(); + if(!d->scroll.scrollable || !isVisible()) { + if(d->scroll.scrolltimer) + d->scroll.scrolltimer->stop(); + return; + } else if(pos.x() > x() + width() || pos.x() < x()) { + return; + } + int sh = style().pixelMetric(QStyle::PM_PopupMenuScrollerHeight, this); + if(!d->scroll.lastScroll.isValid()) { + d->scroll.lastScroll = QTime::currentTime(); + } else { + int factor=0; + if(pos.y() < y()) + factor = y() - pos.y(); + else if(pos.y() > y() + height()) + factor = pos.y() - (y() + height()); + int msecs = 250 - ((factor / 10) * 40); + if(d->scroll.lastScroll.msecsTo(QTime::currentTime()) < QMAX(0, msecs)) + return; + d->scroll.lastScroll = QTime::currentTime(); + } + if(d->scroll.scrollable & QPopupMenuPrivate::Scroll::ScrollUp && pos.y() <= y() + sh) { //up + if(d->scroll.topScrollableIndex > 0) { + d->scroll.topScrollableIndex--; + updateScrollerState(); + update(contentsRect()); + } + } else if(d->scroll.scrollable & QPopupMenuPrivate::Scroll::ScrollDown && + pos.y() >= (y() + contentsRect().height()) - sh) { //down + QMenuItemListIt it(*mitems); + for(int i = 0, y = contentsRect().y() + sh; it.current(); i++, ++it) { + if(i >= d->scroll.topScrollableIndex) { + int itemh = itemHeight(it.current()); + QSize sz = style().sizeFromContents(QStyle::CT_PopupMenuItem, this, QSize(0, itemh), + QStyleOption(it.current(),maxPMWidth,0)); + y += sz.height(); + if(y > contentsRect().height() - sh) { + d->scroll.topScrollableIndex++; + updateScrollerState(); + update(contentsRect()); + break; + } + } + } + } +} + +// This private slot handles the delayed submenu effects + +void PopupMenu::subMenuTimer() { + + if ( !isVisible() || (actItem < 0 && popupActive < 0) || actItem == popupActive ) + return; + + if ( popupActive >= 0 ) { + hidePopups(); + popupActive = -1; + } + + // hidePopups() may change actItem etc. + if ( !isVisible() || actItem < 0 || actItem == popupActive ) + return; + + QMenuItem *mi = mitems->at(actItem); + if ( !mi || !mi->isEnabledAndVisible() ) + return; + + PopupMenu *popup = mi->popup(); + if ( !popup || !popup->isEnabled() ) + return; + + //avoid circularity + if ( popup->isVisible() ) + return; + + Q_ASSERT( popup->parentMenu == 0 ); + popup->parentMenu = this; // set parent menu + + emit popup->aboutToShow(); + supressAboutToShow = TRUE; + + + QRect r( itemGeometry( actItem ) ); + QPoint p; + QSize ps = popup->sizeHint(); + if( QApplication::reverseLayout() ) { + p = QPoint( r.left() + motifArrowHMargin - ps.width(), r.top() + motifArrowVMargin ); + p = mapToGlobal( p ); + + bool right = FALSE; + if ( ( parentMenu && parentMenu->isPopupMenu && + ((PopupMenu*)parentMenu)->geometry().x() < geometry().x() ) || + p.x() < 0 ) + right = TRUE; + if ( right && (ps.width() > QApplication::desktop()->width() - mapToGlobal( r.topRight() ).x() ) ) + right = FALSE; + if ( right ) + p.setX( mapToGlobal( r.topRight() ).x() ); + } else { + p = QPoint( r.right() - motifArrowHMargin, r.top() + motifArrowVMargin ); + p = mapToGlobal( p ); + + bool left = FALSE; + if ( ( parentMenu && parentMenu->isPopupMenu && + ((PopupMenu*)parentMenu)->geometry().x() > geometry().x() ) || + p.x() + ps.width() > QApplication::desktop()->width() ) + left = TRUE; + if ( left && (ps.width() > mapToGlobal( r.topLeft() ).x() ) ) + left = FALSE; + if ( left ) + p.setX( mapToGlobal( r.topLeft() ).x() - ps.width() ); + } + QRect pr = popup->itemGeometry(popup->count() - 1); + if (p.y() + ps.height() > QApplication::desktop()->height() && + p.y() - ps.height() + (QCOORD) pr.height() >= 0) + p.setY( p.y() - ps.height() + (QCOORD) pr.height()); + + if ( style().styleHint(QStyle::SH_PopupMenu_SloppySubMenus, this )) { + QPoint cur = QCursor::pos(); + if ( r.contains( mapFromGlobal( cur ) ) ) { + QPoint pts[4]; + pts[0] = QPoint( cur.x(), cur.y() - 2 ); + pts[3] = QPoint( cur.x(), cur.y() + 2 ); + if ( p.x() >= cur.x() ) { + pts[1] = QPoint( geometry().right(), p.y() ); + pts[2] = QPoint( geometry().right(), p.y() + ps.height() ); + } else { + pts[1] = QPoint( p.x() + ps.width(), p.y() ); + pts[2] = QPoint( p.x() + ps.width(), p.y() + ps.height() ); + } + QPointArray points( 4 ); + for( int i = 0; i < 4; i++ ) + points.setPoint( i, mapFromGlobal( pts[i] ) ); + d->mouseMoveBuffer = QRegion( points ); + repaint(); + } + } + + popupActive = actItem; + popup->popup( p ); +} + +void PopupMenu::allowAnimation() +{ + preventAnimation = FALSE; +} + +void PopupMenu::updateRow( int row ) +{ + if ( !isVisible() ) + return; + + if ( badSize ) { + updateSize(); + update(); + return; + } + updateSize(); + QRect r = itemGeometry( row ); + if ( !r.isNull() ) // can happen via the scroller + repaint( r ); +} + +int PopupMenu::exec( const QPoint & pos, int indexAtPoint ) +{ + snapToMouse = TRUE; + if ( !qApp ) + return -1; + + PopupMenu* priorSyncMenu = syncMenu; + + syncMenu = this; + syncMenuId = -1; + + QGuardedPtr that = this; + connectModal( that, TRUE ); + popup( pos, indexAtPoint ); + qApp->enter_loop(); + connectModal( that, FALSE ); + + syncMenu = priorSyncMenu; + return syncMenuId; +} + + + +// Connect the popup and all its submenus to modalActivation() if +// \a doConnect is true, otherwise disconnect. +void PopupMenu::connectModal( PopupMenu* receiver, bool doConnect ) +{ + if ( !receiver ) + return; + + connectModalRecursionSafety = doConnect; + + if ( doConnect ) + connect( this, SIGNAL(activated(int)), + receiver, SLOT(modalActivation(int)) ); + else + disconnect( this, SIGNAL(activated(int)), + receiver, SLOT(modalActivation(int)) ); + + QMenuItemListIt it(*mitems); + register QMenuItem *mi; + while ( (mi=it.current()) ) { + ++it; + if ( mi->popup() && mi->popup() != receiver + && (bool)(mi->popup()->connectModalRecursionSafety) != doConnect ) + mi->popup()->connectModal( receiver, doConnect ); //avoid circular + } +} + +int PopupMenu::exec() +{ + return exec(mapToGlobal(QPoint(0,0))); +} + + +// Internal slot used for exec(). + +void PopupMenu::modalActivation( int id ) +{ + syncMenuId = id; +} + +void PopupMenu::setActiveItem( int i ) +{ + int lastActItem = actItem; + actItem = i; + if ( lastActItem >= 0 ) + updateRow( lastActItem ); + if ( i >= 0 && i != lastActItem ) + updateRow( i ); + QMenuItem *mi = mitems->at( actItem ); + if ( !mi ) + return; + + if ( mi->widget() && mi->widget()->isFocusEnabled() ) { + mi->widget()->setFocus(); + } else { + setFocus(); + QRect mfrect = itemGeometry( actItem ); + setMicroFocusHint( mfrect.x(), mfrect.y(), mfrect.width(), mfrect.height(), FALSE ); + } + if ( mi->id() != -1 ) + hilitSig( mi->id() ); +#ifndef QT_NO_WHATSTHIS + if (whatsThisItem && whatsThisItem != mi) { + qWhatsThisBDH(); + } + whatsThisItem = mi; +#endif +} + +QSize PopupMenu::sizeHint() const +{ + constPolish(); + PopupMenu* that = (PopupMenu*) this; + //We do not need a resize here, just the sizeHint.. + return that->updateSize(FALSE, FALSE).expandedTo( QApplication::globalStrut() ); +} + +int PopupMenu::idAt( const QPoint& pos ) const +{ + return idAt( itemAtPos( pos ) ); +} + +bool PopupMenu::customWhatsThis() const +{ + return TRUE; +} + +bool PopupMenu::focusNextPrevChild( bool next ) +{ + register QMenuItem *mi; + int dy = next? 1 : -1; + if ( dy && actItem < 0 ) { + setFirstItemActive(); + } else if ( dy ) { // highlight next/prev + register int i = actItem; + int c = mitems->count(); + int n = c; + while ( n-- ) { + i = i + dy; + if ( i == c ) + i = 0; + else if ( i < 0 ) + i = c - 1; + mi = mitems->at( i ); + if ( mi && !mi->isSeparator() && + ( ( style().styleHint(QStyle::SH_PopupMenu_AllowActiveAndDisabled, this) + && mi->isVisible() ) + || mi->isEnabledAndVisible() ) ) + break; + } + if ( i != actItem ) + setActiveItem( i ); + } + return TRUE; +} + +void PopupMenu::focusInEvent( QFocusEvent * ) +{ +} + +void PopupMenu::focusOutEvent( QFocusEvent * ) +{ +} + +class QTearOffMenuItem : public QCustomMenuItem +{ +public: + QTearOffMenuItem() + { + } + ~QTearOffMenuItem() + { + } + void paint( QPainter* p, const QColorGroup& cg, bool, + bool, int x, int y, int w, int h ) + { + p->setPen( QPen( cg.dark(), 1, DashLine ) ); + p->drawLine( x+2, y+h/2-1, x+w-4, y+h/2-1 ); + p->setPen( QPen( cg.light(), 1, DashLine ) ); + p->drawLine( x+2, y+h/2, x+w-4, y+h/2 ); + } + bool fullSpan() const + { + return TRUE; + } + + QSize sizeHint() + { + return QSize( 20, 6 ); + } +}; + +int PopupMenu::insertTearOffHandle( int id, int index ) +{ + int myid = insertItem( new QTearOffMenuItem, id, index ); + connectItem( myid, this, SLOT( toggleTearOff() ) ); + QMenuData::d->aInt = myid; + return myid; +} + +void PopupMenu::toggleTearOff() +{ + if ( active_popup_menu && active_popup_menu->tornOff ) { + active_popup_menu->close(); + } else if (QMenuData::d->aWidget ) { + delete (QWidget*) QMenuData::d->aWidget; // delete the old one + } else { + // create a tear off menu + PopupMenu* p = new PopupMenu( parentWidget(), "tear off menu" ); + connect( p, SIGNAL( activated(int) ), this, SIGNAL( activated(int) ) ); + connect( p, SIGNAL( highlighted(int) ), this, SIGNAL( highlighted(int) ) ); +#ifndef QT_NO_WIDGET_TOPEXTRA + p->setCaption( caption() ); +#endif + p->setCheckable( isCheckable() ); + p->reparent( parentWidget(), WType_TopLevel | WStyle_Tool | + WNoAutoErase | WDestructiveClose, + geometry().topLeft(), FALSE ); + p->mitems->setAutoDelete( FALSE ); + p->tornOff = TRUE; + for ( QMenuItemListIt it( *mitems ); it.current(); ++it ) { + if ( it.current()->id() != QMenuData::d->aInt && !it.current()->widget() ) + p->mitems->append( it.current() ); + } + p->show(); + QMenuData::d->aWidget = p; + } +} + +void PopupMenu::activateItemAt( int index ) +{ + if ( index >= 0 && index < (int) mitems->count() ) { + QMenuItem *mi = mitems->at( index ); + if ( index != actItem ) // new item activated + setActiveItem( index ); + PopupMenu *popup = mi->popup(); + if ( popup ) { + if ( popup->isVisible() ) { // sub menu already open + int pactItem = popup->actItem; + popup->actItem = -1; + popup->hidePopups(); + popup->updateRow( pactItem ); + } else { // open sub menu + hidePopups(); + actItem = index; + subMenuTimer(); + popup->setFirstItemActive(); + } + } else { + byeMenuBar(); // deactivate menu bar + +#ifndef QT_NO_WHATSTHIS + bool b = QWhatsThis::inWhatsThisMode(); +#else + const bool b = FALSE; +#endif + if ( !mi->isEnabledAndVisible() ) { +#ifndef QT_NO_WHATSTHIS + if ( b ) { + actItem = -1; + updateItem( mi->id() ); + byeMenuBar(); + actSig( mi->id(), b); + } +#endif + } else { + byeMenuBar(); // deactivate menu bar + if ( mi->isEnabledAndVisible() ) { + actItem = -1; + updateItem( mi->id() ); + active_popup_menu = this; + QGuardedPtr signal = mi->signal(); + actSig( mi->id(), b ); + if ( signal && !b ) + signal->activate(); + active_popup_menu = 0; + } + } + } + } else { + if ( tornOff ) { + close(); + } else { + QMenuData* p = parentMenu; + hide(); +#ifndef QT_NO_MENUBAR + if ( p && p->isMenuBar ) + ((QMenuBar*) p)->goodbye( TRUE ); +#endif + } + } + +} + +void +PopupMenu::updateScrollerState() +{ + uint old_scrollable = d->scroll.scrollable; + d->scroll.scrollable = QPopupMenuPrivate::Scroll::ScrollNone; + if(!style().styleHint(QStyle::SH_PopupMenu_Scrollable, this)) + return; + + QMenuItem *mi; + QMenuItemListIt it( *mitems ); + if(d->scroll.topScrollableIndex) { + for(int row = 0; (mi = it.current()) && row < d->scroll.topScrollableIndex; row++) + ++it; + if(!mi) + it.toFirst(); + } + int y = 0, sh = style().pixelMetric(QStyle::PM_PopupMenuScrollerHeight, this); + if(!it.atFirst()) { + // can't use |= because of a bug/feature in IBM xlC 5.0.2 + d->scroll.scrollable = d->scroll.scrollable | QPopupMenuPrivate::Scroll::ScrollUp; + y += sh; + } + while ( (mi=it.current()) ) { + ++it; + int myheight = contentsRect().height(); + QSize sz = style().sizeFromContents(QStyle::CT_PopupMenuItem, this, + QSize(0, itemHeight( mi )), + QStyleOption(mi,maxPMWidth)); + if(y + sz.height() >= myheight) { + d->scroll.scrollable = d->scroll.scrollable | QPopupMenuPrivate::Scroll::ScrollDown; + break; + } + y += sz.height(); + } + if((d->scroll.scrollable & QPopupMenuPrivate::Scroll::ScrollUp) && + !(old_scrollable & QPopupMenuPrivate::Scroll::ScrollUp)) + d->scroll.topScrollableIndex++; +} + +#endif // QT_NO_POPUPMENU + +*/ diff --git a/muse2/muse/widgets/popupmenu.h b/muse2/muse/widgets/popupmenu.h new file mode 100644 index 00000000..138e45e1 --- /dev/null +++ b/muse2/muse/widgets/popupmenu.h @@ -0,0 +1,303 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: popupmenu.h,v 1.1.1.1 2010/07/18 03:18:00 terminator356 Exp $ +// +// (C) Copyright 1999-2010 Werner Schweer (ws@seh.de) +// +// PopupMenu sub-class of QPopupMenu created by Tim. +//========================================================= + + + +//========================================================= +// +// NOTICE: This sub-class of QPopupMenu *automatically* deletes +// and *clears* any sub popup menus, when clear() is called. +// Therefore a parent widget is *not* necessary when +// creating sub popup menus to add to the popup. +// +//========================================================= + + + +#ifndef __POPUPMENU_H__ +#define __POPUPMENU_H__ + +#include +//Added by qt3to4: +#include +//#include + +class QWidget; +class QMouseEvent; + +//class MenuData : public QMenuData +//{ + //friend class QMenuBar; +// friend class QPopupMenu; +// friend class PopupMenu; + +// Q_OBJECT + //private: +//}; + +/* +// Internal class to get access to protected QMenuData members. +class MenuData : public QMenuData +{ + friend class QPopupMenu; + friend class QMenuData; + friend class PopupMenu; + +private: + +public: + MenuData() : QMenuData() { } + virtual ~MenuData() { } +}; +*/ + +//class Q_EXPORT PopupMenu : public QPopupMenu +class PopupMenu : public Q3PopupMenu +//class PopupMenu : public QPopupMenu, public MenuData +{ + friend class QMenuData; + //friend class QMenuBar; + friend class Q3PopupMenu; + friend class QMenuBar; + //friend class MenuData; + + Q_OBJECT + private: + // QPopupMenu::d is private, so this is our own private. + //QPopupMenuPrivate *d; + + //virtual void setFirstItemActive(); + //void hideAllPopups(); + //void hidePopups(); + bool tryMenuBar(QMouseEvent *); + //bool tryMouseEvent(QPopupMenu *, QMouseEvent *); + bool tryMouseEvent(PopupMenu *, QMouseEvent *); + //void byeMenuBar(); + void actSig(int, bool = FALSE); + virtual void menuDelPopup(Q3PopupMenu *); + + protected: + //int actItem; + + //void mousePressEvent(QMouseEvent *); + void mouseReleaseEvent(QMouseEvent *); + + public: + PopupMenu(QWidget* parent=0, const char* name=0); + ~PopupMenu(); +}; + +#endif + + + + +/**************************************************************************** +** +** Definition of QPopupMenu class +** +** Created : 941128 +** +** Copyright (C) 1992-2008 Trolltech ASA. All rights reserved. +** +** This file is part of the widgets module of the Qt GUI Toolkit. +** +** This file may be used under the terms of the GNU General +** Public License versions 2.0 or 3.0 as published by the Free +** Software Foundation and appearing in the files LICENSE.GPL2 +** and LICENSE.GPL3 included in the packaging of this file. +** Alternatively you may (at your option) use any later version +** of the GNU General Public License if such license has been +** publicly approved by Trolltech ASA (or its successors, if any) +** and the KDE Free Qt Foundation. +** +** Please review the following information to ensure GNU General +** Public Licensing requirements will be met: +** http://trolltech.com/products/qt/licenses/licensing/opensource/. +** If you are unsure which license is appropriate for your use, please +** review the following information: +** http://trolltech.com/products/qt/licenses/licensing/licensingoverview +** or contact the sales department at sales@trolltech.com. +** +** This file may be used under the terms of the Q Public License as +** defined by Trolltech ASA and appearing in the file LICENSE.QPL +** included in the packaging of this file. Licensees holding valid Qt +** Commercial licenses may use this file in accordance with the Qt +** Commercial License Agreement provided with the Software. +** +** This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +** INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted +** herein. +** +**********************************************************************/ + +/* +#ifndef __POPUPMENU_H__ +#define __POPUPMENU_H__ + +#ifndef QT_H +#include +#include +#endif // QT_H + +#ifndef QT_NO_POPUPMENU +class QPopupMenuPrivate; + +class Q_EXPORT PopupMenu : public QFrame, public QMenuData +{ + Q_OBJECT + Q_PROPERTY( bool checkable READ isCheckable WRITE setCheckable ) +public: + PopupMenu( QWidget* parent=0, const char* name=0 ); + ~PopupMenu(); + + void popup( const QPoint & pos, int indexAtPoint = -1 ); // open + void updateItem( int id ); + + virtual void setCheckable( bool ); + bool isCheckable() const; + + void setFont( const QFont & ); + void show(); + void hide(); + + int exec(); + int exec( const QPoint & pos, int indexAtPoint = 0 ); // modal + + virtual void setActiveItem( int ); + QSize sizeHint() const; + + int idAt( int index ) const { return QMenuData::idAt( index ); } + int idAt( const QPoint& pos ) const; + + bool customWhatsThis() const; + + int insertTearOffHandle( int id=-1, int index=-1 ); + + void activateItemAt( int index ); + QRect itemGeometry( int index ); + + +signals: + void activated( int itemId ); + void highlighted( int itemId ); + void activatedRedirect( int itemId ); // to parent menu + void highlightedRedirect( int itemId ); + void aboutToShow(); + void aboutToHide(); + +protected: + int itemHeight( int ) const; + int itemHeight( QMenuItem* mi ) const; + void drawItem( QPainter* p, int tab, QMenuItem* mi, + bool act, int x, int y, int w, int h); + + void drawContents( QPainter * ); + + void closeEvent( QCloseEvent *e ); + void paintEvent( QPaintEvent * ); + void mousePressEvent( QMouseEvent * ); + void mouseReleaseEvent( QMouseEvent * ); + void mouseMoveEvent( QMouseEvent * ); + void keyPressEvent( QKeyEvent * ); + void focusInEvent( QFocusEvent * ); + void focusOutEvent( QFocusEvent * ); + void timerEvent( QTimerEvent * ); + void leaveEvent( QEvent * ); + void styleChange( QStyle& ); + void enabledChange( bool ); + int columns() const; + + bool focusNextPrevChild( bool next ); + + int itemAtPos( const QPoint &, bool ignoreSeparator = TRUE ) const; + +private slots: + void subActivated( int itemId ); + void subHighlighted( int itemId ); +#ifndef QT_NO_ACCEL + void accelActivated( int itemId ); + void accelDestroyed(); +#endif + void popupDestroyed( QObject* ); + void modalActivation( int ); + + void subMenuTimer(); + void subScrollTimer(); + void allowAnimation(); + void toggleTearOff(); + + void performDelayedChanges(); + +private: + void updateScrollerState(); + void menuContentsChanged(); + void menuStateChanged(); + void performDelayedContentsChanged(); + void performDelayedStateChanged(); + void menuInsPopup( PopupMenu * ); + void menuDelPopup( PopupMenu * ); + void frameChanged(); + + void actSig( int, bool = FALSE ); + void hilitSig( int ); + virtual void setFirstItemActive(); + void hideAllPopups(); + void hidePopups(); + bool tryMenuBar( QMouseEvent * ); + void byeMenuBar(); + + QSize updateSize(bool force_recalc=FALSE, bool do_resize=TRUE); + void updateRow( int row ); +#ifndef QT_NO_ACCEL + void updateAccel( QWidget * ); + void enableAccel( bool ); +#endif + QPopupMenuPrivate *d; +#ifndef QT_NO_ACCEL + QAccel *autoaccel; +#endif + +#if defined(Q_WS_MAC) && !defined(QMAC_QMENUBAR_NO_NATIVE) + bool macPopupMenu(const QPoint &, int); + uint mac_dirty_popup : 1; +#endif + + int popupActive; + int tab; + uint accelDisabled : 1; + uint checkable : 1; + uint connectModalRecursionSafety : 1; + uint tornOff : 1; + uint pendingDelayedContentsChanges : 1; + uint pendingDelayedStateChanges : 1; + int maxPMWidth; + int ncols; + bool snapToMouse; + bool tryMouseEvent( PopupMenu *, QMouseEvent * ); + + friend class QMenuData; + friend class QMenuBar; + + void connectModal(PopupMenu* receiver, bool doConnect); + +private: // Disabled copy constructor and operator= +#if defined(Q_DISABLE_COPY) + PopupMenu( const PopupMenu & ); + PopupMenu &operator=( const PopupMenu & ); +#endif +}; + + +#endif // QT_NO_POPUPMENU + +#endif // QPOPUPMENU_H +*/ \ No newline at end of file diff --git a/muse2/muse/widgets/posedit.cpp b/muse2/muse/widgets/posedit.cpp new file mode 100644 index 00000000..9fad1a6f --- /dev/null +++ b/muse2/muse/widgets/posedit.cpp @@ -0,0 +1,875 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: posedit.cpp,v 1.3.2.2 2008/05/21 00:28:54 terminator356 Exp $ +// (C) Copyright 2001 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include +#include +#include +#include +#include +#include +//Added by qt3to4: +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "posedit.h" +#include "sig.h" + +extern int mtcType; + +//--------------------------------------------------------- +// QNumberSection +//--------------------------------------------------------- + +class QNumberSection + { + int selstart; + int selend; + + public: + QNumberSection(int selStart = 0, int selEnd = 0) + : selstart(selStart), selend(selEnd ) {} + int selectionStart() const { return selstart; } + void setSelectionStart(int s) { selstart = s; } + int selectionEnd() const { return selend; } + void setSelectionEnd( int s ) { selend = s; } + int width() const { return selend - selstart; } + }; + +//--------------------------------------------------------- +// PosEditor +//--------------------------------------------------------- + +class PosEditor : public QWidget + { + PosEdit* cw; + bool frm; + QPixmap *pm; + int focusSec; + Q3ValueList sections; + QString sep; + int offset; + + int section(const QPoint&); + + protected: + void init(); + bool event(QEvent *e); + void resizeEvent(QResizeEvent*); + void paintEvent(QPaintEvent*); + void mousePressEvent(QMouseEvent *e); + + void applyFocusSelection() {} + + public: + PosEditor(PosEdit* Q_PARENT, const char * Q_NAME ); + ~PosEditor(); + + void setControlWidget(PosEdit * widget); + PosEdit* controlWidget() const; + + void setSeparator(const QString& s) { sep = s; } + QString separator() const { return sep; } + int focusSection() const { return focusSec; } + + bool setFocusSection(int s); + void appendSection(const QNumberSection& sec); + void clearSections(); + void setSectionSelection(int sec, int selstart, int selend); + bool eventFilter(QObject *o, QEvent *e); + }; + +//--------------------------------------------------------- +// section +//--------------------------------------------------------- + +int PosEditor::section(const QPoint& pt) + { + if (pm->isNull()) + return -1; + QPainter p(pm); + int fw = frm ? style()->pixelMetric(QStyle::PM_DefaultFrameWidth) : 0; + int x = 2 + fw; + int y = 0; + int w = width(); + int h = height(); + for (unsigned int i = 0; i < sections.count(); ++i) { + QString s = cw->sectionFormattedText(i); + QRect bb = p.boundingRect(x, y, w, h, Qt::AlignVCenter|Qt::AlignLeft, s); + int nx = bb.x() + bb.width(); + if (pt.x() >= x && pt.x() < nx) + return i; + x = nx; + if (i < sections.count()-1) { + QString s = sep; + p.drawText(x, y, w, h, Qt::AlignVCenter|Qt::AlignLeft, s, -1, &bb); + x = bb.x() + bb.width(); + } + } + return -1; + } + +//--------------------------------------------------------- +// PosEditor +//--------------------------------------------------------- + +PosEditor::PosEditor(PosEdit* parent, const char* name) + : QWidget(parent, name), sep(".") + { + cw = parent; + frm = true; + focusSec = 0; + pm = new QPixmap; + offset = 0; + init(); + } + +//--------------------------------------------------------- +// ~PosEditor +//--------------------------------------------------------- + +PosEditor::~PosEditor() + { + delete pm; + } + +//--------------------------------------------------------- +// init +//--------------------------------------------------------- + +void PosEditor::init() + { + setBackgroundMode(Qt::PaletteBase); + setFocusSection(-1); + setKeyCompression(true); + installEventFilter(this); + setFocusPolicy(Qt::WheelFocus); + } + +//--------------------------------------------------------- +// event +//--------------------------------------------------------- + +bool PosEditor::event(QEvent *e) + { + if (e->type() == QEvent::FocusIn || e->type() == QEvent::FocusOut) { + repaint( rect(), false); + } + else if (e->type() == QEvent::ShortcutOverride) { + QKeyEvent* ke = (QKeyEvent*) e; + switch (ke->key()) { + case Qt::Key_Delete: + case Qt::Key_Backspace: + case Qt::Key_Up: + case Qt::Key_Down: + case Qt::Key_Left: + case Qt::Key_Right: + ke->accept(); + default: + break; + } + } + return QWidget::event(e); + } + +void PosEditor::resizeEvent(QResizeEvent *e) + { + pm->resize(e->size()); + QWidget::resizeEvent(e); + } + +//--------------------------------------------------------- +// paintEvent +//--------------------------------------------------------- + +void PosEditor::paintEvent(QPaintEvent *) + { + if (pm->isNull()) + return; + + const QColorGroup & cg = colorGroup(); + QPainter p(pm); + p.setPen(colorGroup().text()); + QBrush bg = cg.brush(QColorGroup::Base); + + int fw = frm ? style()->pixelMetric(QStyle::PM_DefaultFrameWidth) : 0; + int x = 2 + fw; + int y = 0; + int w = width(); + int h = height(); + p.fillRect(0, 0, w, h, bg); + + for (unsigned int i = 0; i < sections.count(); ++i) { + QRect bb; + QString s = cw->sectionFormattedText(i); + + if (hasFocus() && (int(i) == focusSec)) { + QBrush bg = cg.brush(QColorGroup::Highlight); + QRect r = p.boundingRect(x, y, w, h, Qt::AlignVCenter|Qt::AlignLeft, s, -1); + p.setPen(colorGroup().highlightedText()); + p.fillRect(r, bg); + } + else + p.setPen(colorGroup().text()); + p.drawText(x, y, w, h, Qt::AlignVCenter|Qt::AlignLeft, s, -1, &bb); + x = bb.x() + bb.width(); + if (i < sections.count()-1) { + QString s = sep; + p.drawText(x, y, w, h, Qt::AlignVCenter|Qt::AlignLeft, s, -1, &bb); + x = bb.x() + bb.width(); + } + } + p.end(); + bitBlt(this, 0, 0, pm); + } + +//--------------------------------------------------------- +// mousePressEvent +//--------------------------------------------------------- + +void PosEditor::mousePressEvent(QMouseEvent *e) + { + QPoint p(e->pos().x(), 0); + int sec = section(p); + if (sec != -1) { + cw->setFocusSection(sec); + repaint(rect(), false); + } + } + +//--------------------------------------------------------- +// eventFilter +//--------------------------------------------------------- + +bool PosEditor::eventFilter(QObject *o, QEvent *e) + { + if (o != this) + return false; + if (e->type() != QEvent::KeyPress ) + return false; + + QKeyEvent *ke = (QKeyEvent*)e; + switch (ke->key()) { + case Qt::Key_Right: + if (unsigned(focusSec) <= sections.count()) { + if (cw->setFocusSection(focusSec+1)) + repaint(rect(), false); + } + return true; + case Qt::Key_Left: + if (focusSec > 0 ) { + if (cw->setFocusSection(focusSec-1)) + repaint(rect(), false); + } + return true; + case Qt::Key_Up: + cw->stepUp(); + return true; + case Qt::Key_Down: + cw->stepDown(); + return true; + case Qt::Key_Backspace: + case Qt::Key_Delete: + cw->removeLastNumber(focusSec); + return true; + case Qt::Key_Return: + cw->enterPressed(); + return true; + default: + QString txt = ke->text(); + if (!txt.isEmpty() && !sep.isEmpty() && txt[0] == sep[0]) { + // do the same thing as KEY_RIGHT when the user presses the separator key + if (unsigned(focusSec) < sections.count()) { + if (cw->setFocusSection(focusSec+1)) + repaint(rect(), false); + } + return true; + } + int num = txt[0].digitValue(); + if (num != -1) { + cw->addNumber(focusSec, num); + return true; + } + } + return false; + } + +void PosEditor::appendSection(const QNumberSection& sec) + { + sections.append(sec); + } +void PosEditor::clearSections() + { + sections.clear(); + } + +//--------------------------------------------------------- +// setSectionSelection +//--------------------------------------------------------- + +void PosEditor::setSectionSelection(int secNo, int selstart, int selend) + { + if (secNo < 0 || secNo > (int)sections.count()) + return; + sections[secNo].setSelectionStart(selstart); + sections[secNo].setSelectionEnd(selend); + } + +//--------------------------------------------------------- +// setFocusSection +//--------------------------------------------------------- + +bool PosEditor::setFocusSection(int idx) + { + if (idx > (int)sections.count()-1 || idx < 0) + return false; + if (idx != focusSec) { + focusSec = idx; + applyFocusSelection(); + return true; + } + return false; + } + +//--------------------------------------------------------- +// PosEdit +//--------------------------------------------------------- + +PosEdit::PosEdit(QWidget* parent, const char* name) + : QWidget(parent, name) + { + init(); + updateButtons(); + } + +PosEdit::PosEdit(const Pos& time, QWidget* parent, const char* name) + : QWidget(parent, name) + { + init(); + setValue(time); + updateButtons(); + } + +PosEdit::~PosEdit() + { + } + +//--------------------------------------------------------- +// init +//--------------------------------------------------------- + +void PosEdit::init() + { + ed = new PosEditor(this, "pos editor"); + controls = new Q3SpinWidget(this, "pos edit controls"); + controls->setEditWidget(ed); + setFocusProxy(ed); + connect(controls, SIGNAL(stepUpPressed()), SLOT(stepUp())); + connect(controls, SIGNAL(stepDownPressed()), SLOT(stepDown())); + connect(this, SIGNAL(valueChanged(const Pos&)),SLOT(updateButtons())); + + overwrite = false; + timerId = 0; + typing = false; + min = Pos(0); + max = Pos(MAX_TICK); + changed = false; + adv = false; + + + static Section s_midiSections[3] = { // measure, beat, tick + { 0, 4, 1, 0 }, + { 5, 2, 1, 0 }, + { 8, 3, 0, 0 } + }; + static Section s_smpteSections[4] = { // minute second frame subframe + { 0, 3, 0, 0 }, + { 4, 2, 0, 0 }, + { 7, 2, 0, 0 }, + { 10, 2, 0, 0 } + }; + memcpy(midiSections, s_midiSections, sizeof(s_midiSections)); + memcpy(smpteSections, s_smpteSections, sizeof(s_smpteSections)); + + _smpte = false; // show position in smpte format + sec = midiSections; + setSections(); + setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed)); + } + +//--------------------------------------------------------- +// setSetions +//--------------------------------------------------------- + +void PosEdit::setSections() + { + ed->clearSections(); + ed->appendSection(QNumberSection(0,0)); + ed->appendSection(QNumberSection(0,0)); + ed->appendSection(QNumberSection(0,0)); + if (_smpte) { + ed->appendSection(QNumberSection(0,0)); + ed->setSeparator(QString(":")); + } + else { + ed->setSeparator(QString(".")); + } + } + +//--------------------------------------------------------- +// smpte +//--------------------------------------------------------- + +bool PosEdit::smpte() const + { + return _smpte; + } + +//--------------------------------------------------------- +// setSmpte +//--------------------------------------------------------- + +void PosEdit::setSmpte(bool f) + { + _smpte = f; + sec = f ? smpteSections : midiSections; + setSections(); + ed->repaint(ed->rect(), false); + } + +//--------------------------------------------------------- +// minValue +//--------------------------------------------------------- + +Pos PosEdit::minValue() const + { + return min; + } + +//--------------------------------------------------------- +// maxValue +//--------------------------------------------------------- + +Pos PosEdit::maxValue() const + { + return max; + } + +//--------------------------------------------------------- +// setRange +//--------------------------------------------------------- + +void PosEdit::setRange(const Pos& _min, const Pos& _max) + { + if (min.isValid()) + min = _min; + if (max.isValid()) + max = _max; + } + +//--------------------------------------------------------- +// setValue +//--------------------------------------------------------- + +void PosEdit::setValue(const Pos& time) + { + if (time > maxValue() || time < minValue()) + return; + if (_smpte) + time.msf(&(sec[0].val), &(sec[1].val), &(sec[2].val), + &(sec[3].val)); + else + time.mbt(&(sec[0].val), &(sec[1].val), &(sec[2].val)); + changed = false; + + updateButtons(); + ed->repaint(ed->rect(), false); + } + +void PosEdit::setValue(const QString& s) + { + Pos time(s); + setValue(time); + } + +void PosEdit::setValue(int t) + { + Pos time(t); + setValue(time); + } + +Pos PosEdit::pos() const + { + if (_smpte) { + if (Pos::isValid(sec[0].val, sec[1].val, sec[2].val, sec[3].val)) + return Pos(sec[0].val, sec[1].val, sec[2].val, sec[3].val); + } + else { + if (Pos::isValid(sec[0].val, sec[1].val, sec[2].val)) + return Pos(sec[0].val, sec[1].val, sec[2].val); + } + return Pos(); + } + +void PosEdit::setSeparator(const QString& s) + { + ed->setSeparator(s); + } + +QString PosEdit::separator() const + { + return ed->separator(); + } + +bool PosEdit::event(QEvent *e) + { + if (e->type() == QEvent::FocusOut) { + typing = false; + if (changed) { + emit valueChanged(pos() ); + changed = false; + } + } + return QWidget::event(e); + } + +void PosEdit::timerEvent(QTimerEvent *) + { + overwrite = true; + } + +//--------------------------------------------------------- +// stepUp +//--------------------------------------------------------- + +void PosEdit::stepUp() + { + int secNo = ed->focusSection(); + bool accepted = false; + + if (!outOfRange(secNo, sec[secNo].val+1)) { + accepted = true; + setSec(secNo, sec[secNo].val+1); + } + if (accepted) { + changed = true; + Pos p = pos(); + emit valueChanged(p); + } + ed->repaint(ed->rect(), false); + } + +//--------------------------------------------------------- +// stepDown +//--------------------------------------------------------- + +void PosEdit::stepDown() + { + int secNo = ed->focusSection(); + bool accepted = false; + if (!outOfRange(secNo, sec[secNo].val-1)) { + accepted = true; + setSec(secNo, sec[secNo].val-1); + } + if (accepted) { + changed = true; + emit valueChanged(pos()); + } + ed->repaint(ed->rect(), false); + } + +//--------------------------------------------------------- +// sectionFormattedText +// Returns the formatted number for section sec. +//--------------------------------------------------------- + +QString PosEdit::sectionFormattedText(int secNo) + { + QString txt = sectionText(secNo); + int so = sec[secNo].offset; + int len = sec[secNo].len; + int eo = so + len; + + if (typing && secNo == ed->focusSection()) + ed->setSectionSelection(secNo, eo - txt.length(), eo); + else + ed->setSectionSelection(secNo, so, eo); + txt = txt.rightJustify(len, '0'); + return txt; + } + +//--------------------------------------------------------- +// setFocusSection +//--------------------------------------------------------- + +bool PosEdit::setFocusSection(int s) + { + if (s != ed->focusSection()) { + killTimer(timerId); + overwrite = true; + typing = false; + int so = sec[s].offset; + int eo = so + sec[s].len; + ed->setSectionSelection(s, so, eo); + if (changed) { + emit valueChanged(pos()); + changed = false; + } + } + return ed->setFocusSection(s); + } + +//--------------------------------------------------------- +// setSec +//--------------------------------------------------------- + +void PosEdit::setSec(int secNo, int val) + { + if (val < 0) + val = 0; + if (_smpte) { + switch(secNo) { + case 0: + break; + case 1: + if (val > 59) + val = 59; + break; + case 2: + switch(mtcType) { + case 0: // 24 frames sec + if (val > 23) + val = 23; + break; + case 1: + if (val > 24) + val = 24; + break; + case 2: // 30 drop frame + case 3: // 30 non drop frame + if (val > 29) + val = 29; + break; + } + break; + case 3: + if (val > 99) + val = 99; + } + } + else { + switch(secNo) { + case 0: + break; + case 1: + { + int z, n; + int tick = sigmap.bar2tick(sec[0].val, val, sec[2].val); + sigmap.timesig(tick, z, n); + if (val >= n) + val = n-1; + } + break; + case 2: + { + int tick = sigmap.bar2tick(sec[0].val, sec[1].val, val); + int tb = sigmap.ticksBeat(tick); + if (val >= tb) + val = tb-1; + } + break; + } + } + sec[secNo].val = val; + } + +//--------------------------------------------------------- +// sectionText +// Returns the text of section \a sec. +//--------------------------------------------------------- + +QString PosEdit::sectionText(int secNo) + { + return QString::number(sec[secNo].val + sec[secNo].voff); + } + +//--------------------------------------------------------- +// outOfRange +// return true if out of range +//--------------------------------------------------------- + +bool PosEdit::outOfRange(int secNo, int val) const + { + if (val < 0) + return true; + int limit = MAXINT; + if (_smpte) { + switch(secNo) { + case 0: + break; + case 1: + limit = 59; + break; + case 2: + switch(mtcType) { + case 0: // 24 frames sec + limit = 23; + break; + case 1: + limit = 24; + break; + case 2: // 30 drop frame + case 3: // 30 non drop frame + limit = 29; + break; + } + break; + case 3: + limit = 99; + break; + } + } + else { + switch(secNo) { + case 0: + break; + case 1: + { + int z; + int tick = sigmap.bar2tick(sec[0].val, val, sec[2].val); + sigmap.timesig(tick, z, limit); + limit -= 1; + } + break; + case 2: + int tick = sigmap.bar2tick(sec[0].val, sec[1].val, val); + limit = sigmap.ticksBeat(tick) - 1; + break; + } + } + return val > limit; + } + +//--------------------------------------------------------- +// addNumber +//--------------------------------------------------------- + +void PosEdit::addNumber(int secNo, int num) + { + if (secNo == -1) + return; + killTimer(timerId); + bool accepted = false; + typing = true; + int voff = sec[secNo].voff; + + QString txt = sectionText(secNo); + + if (txt.length() == sec[secNo].len) { + if (!outOfRange(secNo, num - voff)) { + accepted = true; + sec[secNo].val = num - voff; + } + } + else { + txt += QString::number(num); + int temp = txt.toInt() - voff; + if (outOfRange(secNo, temp)) + txt = sectionText(secNo); + else { + accepted = true; + sec[secNo].val = temp; + } + if (adv && (txt.length() == sec[secNo].len)) { + setFocusSection(ed->focusSection() + 1); + } + } + changed = accepted; + if (accepted) + emit valueChanged(pos()); + timerId = startTimer(qApp->doubleClickInterval()*4); + ed->repaint(ed->rect(), false); + } + +//--------------------------------------------------------- +// removeLastNumber +//--------------------------------------------------------- + +void PosEdit::removeLastNumber(int secNo) + { + if (secNo == -1) + return; + QString txt = QString::number(sec[secNo].val); + txt = txt.mid(0, txt.length() - 1); + sec[secNo].val = txt.toInt() - sec[secNo].voff; + ed->repaint(ed->rect(), false); + } + +//--------------------------------------------------------- +// resizeEvent +//--------------------------------------------------------- + +void PosEdit::resizeEvent(QResizeEvent *) + { + controls->resize(width(), height()); + } + +//--------------------------------------------------------- +// sizeHint +//--------------------------------------------------------- + +QSize PosEdit::sizeHint() const + { + QFontMetrics fm(font()); + int fw = style()->pixelMetric(QStyle::PM_DefaultFrameWidth,0, this); // ddskrjo 0 + int h = fm.height() + fw * 2; + int w = 4 + controls->upRect().width() + fw * 4; + if (_smpte) + w += fm.width('9') * 10 + fm.width(ed->separator()) * 3; + else + w += fm.width('9') * 10 + fm.width(ed->separator()) * 2; + return QSize(w, h).expandedTo(QApplication::globalStrut()); + } + +//--------------------------------------------------------- +// updateButtons +//--------------------------------------------------------- + +void PosEdit::updateButtons() + { + bool upEnabled = isEnabled() && (pos() < maxValue()); + bool downEnabled = isEnabled() && (pos() > minValue()); + + //printf("PosEdit::updateButtons smpte:%d upEnabled:%d downEnabled:%d\n", smpte(), upEnabled, downEnabled); + + controls->setUpEnabled(upEnabled); + controls->setDownEnabled(downEnabled); + } + +//--------------------------------------------------------- +// enterPressed +//--------------------------------------------------------- +void PosEdit::enterPressed() + { + emit returnPressed(); + } + +//--------------------------------------------------------- +// setEnabled +//--------------------------------------------------------- +void PosEdit::setEnabled(bool v) +{ + QWidget::setEnabled(v); + updateButtons(); +} diff --git a/muse2/muse/widgets/posedit.h b/muse2/muse/widgets/posedit.h new file mode 100644 index 00000000..163746ad --- /dev/null +++ b/muse2/muse/widgets/posedit.h @@ -0,0 +1,106 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: posedit.h,v 1.1.1.1.2.1 2004/12/27 19:47:25 lunar_shuttle Exp $ +// (C) Copyright 2001 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __POSEDIT_H__ +#define __POSEDIT_H__ + +#include +#include +//Added by qt3to4: +#include +#include +#include +#include "pos.h" + +class PosEditor; +class Q3SpinWidget; + +#include "section.h" + +//--------------------------------------------------------- +// PosEdit +//--------------------------------------------------------- + +class PosEdit : public QWidget + { + Q_OBJECT + Q_PROPERTY(QString separator READ separator WRITE setSeparator) + Q_PROPERTY(bool smpte READ smpte WRITE setSmpte) + + void init(); + void setSections(); + QString sectionText(int sec); + Section midiSections[3]; + Section smpteSections[4]; + Section* sec; + + bool _smpte; + + bool adv; + bool overwrite; + int timerId; + bool typing; + Pos min; + Pos max; + bool changed; + PosEditor *ed; + Q3SpinWidget* controls; + + private slots: + void stepUp(); + void stepDown(); + + signals: + void valueChanged(const Pos&); + void returnPressed(); + + protected: + bool event(QEvent *e ); + void timerEvent(QTimerEvent* e); + void resizeEvent(QResizeEvent*); + QString sectionFormattedText(int sec); + void addNumber(int sec, int num); + void removeLastNumber(int sec); + bool setFocusSection(int s); + + virtual bool outOfRange(int, int) const; + virtual void setSec(int, int); + friend class PosEditor; + + protected slots: + void updateButtons(); + + public slots: + virtual void setValue(const Pos& time); + void setValue(int t); + void setValue(const QString& s); + // Added p3.3.43 + virtual void setEnabled(bool); + + public: + PosEdit(QWidget*, const char* = 0); + PosEdit(const Pos& time, QWidget*, const char* = 0); + ~PosEdit(); + + QSize sizeHint() const; + Pos pos() const; + virtual void setAutoAdvance(bool advance) { adv = advance; } + bool autoAdvance() const { return adv; } + + virtual void setMinValue(const Pos& d) { setRange(d, maxValue()); } + Pos minValue() const; + virtual void setMaxValue( const Pos& d ) { setRange(minValue(), d ); } + Pos maxValue() const; + virtual void setRange(const Pos& min, const Pos& max); + QString separator() const; + virtual void setSeparator(const QString& s); + void setSmpte(bool); + bool smpte() const; + void enterPressed(); + }; + +#endif diff --git a/muse2/muse/widgets/poslabel.cpp b/muse2/muse/widgets/poslabel.cpp new file mode 100644 index 00000000..3066b640 --- /dev/null +++ b/muse2/muse/widgets/poslabel.cpp @@ -0,0 +1,152 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: poslabel.cpp,v 1.2.2.2 2009/04/06 01:24:55 terminator356 Exp $ +// (C) Copyright 2001 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include +#include +#include +//Added by qt3to4: +#include + +#include "poslabel.h" +#include "sig.h" +#include "tempo.h" +#include "globals.h" + +extern int mtcType; + +//--------------------------------------------------------- +// PosLabel +//--------------------------------------------------------- + +PosLabel::PosLabel(QWidget* parent, const char* name) + : QLabel(parent, name) + { + _tickValue = 0; + _sampleValue = 0; + _smpte = false; + setFrameStyle(WinPanel | Sunken); + setLineWidth(2); + setMidLineWidth(3); + int fw = style()->pixelMetric(QStyle::PM_DefaultFrameWidth, 0, this); // ddskrjo 0 + setIndent(fw); + updateValue(); + } + +//--------------------------------------------------------- +// sizeHint +//--------------------------------------------------------- + +QSize PosLabel::sizeHint() const + { + QFontMetrics fm(font()); + int fw = style()->pixelMetric(QStyle::PM_DefaultFrameWidth, 0, this); // ddskrjo 0 + 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) { + double time = double(_sampleValue) / 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); + s.sprintf("%03d:%02d:%02d:%02d", min, sec, frame, subframe); + } + else { + int bar, beat; + unsigned tick; + sigmap.tickValues(_tickValue, &bar, &beat, &tick); + //s.sprintf("%04d.%02d.%03ud", bar+1, beat+1, tick); + s.sprintf("%04d.%02d.%03u", bar+1, beat+1, tick); + } + setText(s); + } + +//--------------------------------------------------------- +// setSampleValue +//--------------------------------------------------------- + +void PosLabel::setSampleValue(unsigned val) + { + if (val == _sampleValue) + return; + _sampleValue = val; + updateValue(); + } + +//--------------------------------------------------------- +// setTickValue +//--------------------------------------------------------- + +void PosLabel::setTickValue(unsigned val) + { + if (val == _tickValue) + return; + if (val >= MAX_TICK) + abort(); + _tickValue = val; + updateValue(); + } + +//--------------------------------------------------------- +// setValue +//--------------------------------------------------------- + +void PosLabel::setValue(unsigned val) + { + unsigned oval = _smpte ? _sampleValue : _tickValue; + if (val == oval) + return; + if (_smpte) + _sampleValue = val; + else + _tickValue = val; + updateValue(); + } + +//--------------------------------------------------------- +// setSmpte +//--------------------------------------------------------- + +void PosLabel::setSmpte(bool val) + { + _smpte = val; + if (val) + _sampleValue = tempomap.tick2frame(_tickValue); + else + _tickValue = tempomap.frame2tick(_sampleValue); + updateValue(); + } + diff --git a/muse2/muse/widgets/poslabel.h b/muse2/muse/widgets/poslabel.h new file mode 100644 index 00000000..06cd0b09 --- /dev/null +++ b/muse2/muse/widgets/poslabel.h @@ -0,0 +1,45 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: poslabel.h,v 1.2 2004/01/11 18:55:37 wschweer Exp $ +// (C) Copyright 2001 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __POSLABEL_H__ +#define __POSLABEL_H__ + +#include + +//--------------------------------------------------------- +// PosLabel +//--------------------------------------------------------- + +class PosLabel : public QLabel { + bool _smpte; + unsigned _tickValue; + unsigned _sampleValue; + Q_OBJECT + + void updateValue(); + + protected: + QSize sizeHint() const; + + public slots: + void setTickValue(unsigned); + void setSampleValue(unsigned); + void setValue(unsigned); + + public: + PosLabel(QWidget* parent, const char* name = 0); + unsigned value() const { return _smpte ? _sampleValue : _tickValue; } + unsigned tickValue() const { return _tickValue; } + unsigned sampleValue() const { return _sampleValue; } + void setSmpte(bool); + bool smpte() const { return _smpte; } + }; + + +#endif + + diff --git a/muse2/muse/widgets/scldiv.cpp b/muse2/muse/widgets/scldiv.cpp new file mode 100644 index 00000000..a0b0e628 --- /dev/null +++ b/muse2/muse/widgets/scldiv.cpp @@ -0,0 +1,652 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: scldiv.cpp,v 1.1.1.1 2003/10/27 18:54:32 wschweer Exp $ +// +// Copyright (C) 1997 Josef Wilgen +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License, version 2, +// as published by the Free Software Foundation. +// +// (C) Copyright 2000 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include "scldiv.h" +#include "mmath.h" +//Added by qt3to4: +#include + +// ScaleDiv - A class for building scale divisions +// +// The ScaleDiv class can build +// linear and logarithmic scale divisions for specified +// intervals. It uses an adjustable algorithm to +// generate the major and minor step widths automatically. +// A scale division has a minimum value, a maximum value, +// a vector of major marks, and a vector of minor marks. +// +// ScaleDiv uses implicit sharing for the mark vectors. +// +// Build a logarithmic scale division from 0.01 to 1000 +// and print out the major and minor marks. +//.c +// #include +// #include +// +// main() +// { +// int i,k; +// ScaleDiv sd; +// +// sd.rebuild(0.01, 100, 10, 10, TRUE, 0.0); +// +// k=0; +// for (i=0;i vmax) + { + if (val > vmax + delta_max) rv = FALSE; + val = vmax; + } + return rv; + +} + +//------------------------------------------------------------ +//.F ScaleDiv::ScaleDiv +// Construct a ScaleDiv instance. +// +//.u Syntax +//.f ScaleDiv::ScaleDiv() +//------------------------------------------------------------ + +ScaleDiv::ScaleDiv() + { + d_lBound = 0.0; + d_hBound = 0.0; + d_majStep = 0.0; + d_log = FALSE; + } + +//------------------------------------------------------------ +//.F ScaleDiv::~ScaleDiv +// Destroy a ScaleDiv instance. +// +//.u Syntax +//.f ScaleDiv::~ScaleDiv() +//------------------------------------------------------------ + +ScaleDiv::~ScaleDiv() + { + } + +//------------------------------------------------------------ +//.F ScaleDiv::ScaleDiv +// Copy Constructor +// +//.u Syntax +//.f ScaleDiv::ScaleDiv(const ScaleDiv &s) +// +//.u Parameters +//.p const ScaleDiv &s -- scale division to be copied +//------------------------------------------------------------ + +ScaleDiv::ScaleDiv(const ScaleDiv &s) + { + copy(s); + } + +//------------------------------------------------------------ +//.F ScaleDiv::operator= +// Assignment operator +// +//.u Syntax +//.f ScaleDiv & ScaleDiv::operator=(const ScaleDiv &s) +// +//.u Parameters +//.p const ScaleDiv &s -- scale divison to be assigned +//------------------------------------------------------------ + +ScaleDiv& ScaleDiv::operator=(const ScaleDiv &s) + { + copy(s); + return *this; + } + +//------------------------------------------------------------ +//.F ScaleDiv::copy +// Copy member data from another ScaleDiv instance. +// +//.u Syntax +//.f void ScaleDiv::copy(const ScaleDiv &s) +// +//.u Parameters +//.p const ScaleDiv &s +//------------------------------------------------------------ + +void ScaleDiv::copy(const ScaleDiv &s) + { + d_lBound = s.d_lBound; + d_hBound = s.d_hBound; + d_log = s.d_log; + d_majStep = s.d_majStep; + d_minMarks = s.d_minMarks; + d_majMarks = s.d_majMarks; + } + +//------------------------------------------------------------ +//.F ScaleDiv::rebuild +// Build a scale width major and minor divisions +// +//.p +// double x1 -- first boundary value +// double x2 -- second boundary value +// int maxMajSteps -- max. number of major step intervals +// int maxMinSteps -- max. number of minor step intervals +// bool log -- logarithmic division (TRUE/FALSE) +// double step -- fixed major step width. Defaults to 0.0. +// bool ascend -- if TRUE, sort in ascending order from min(x1, x2) +// to max(x1, x2). If FALSE, sort in the direction +// from x1 to x2. Defaults to TRUE. +// +//.u Return Value +// True if the arrays have been allocated successfully. +// +//.u Description +// If no fixed step width is specified or if it is set to 0, the +// major step width will be calculated automatically according to the +// the value of maxMajSteps. The maxMajSteps parameter has no effect +// if a fixed step size is specified. The minor step width is always +// calculated automatically. +// If the step width is to be calculated automatically, the algorithm +// tries to find reasonable values fitting into the scheme {1,2,5}*10^n +// with an integer number n for linear scales. +// For logarithmic scales, there are three different cases: +//.i +// -- If the major step width is one decade, the minor marks +// will fit into one of the schemes {1,2,...9}, {2,4,6,8}, {2,5} or {5}, +// depending on the maxMinSteps parameter. +// -- If the major step size spans +// more than one decade, the minor step size will be {1,2,5}*10^n decades +// with a natural number n. +// -- If the whole range is less than one decade, a linear scale +// division will be built +// +//.u Note +// For logarithmic scales, the step width is measured in decades. +//------------------------------------------------------------ + +bool ScaleDiv::rebuild(double x1, double x2, int maxMajSteps, int maxMinSteps, + bool log, double step, bool ascend) +{ + + int rv; + + d_lBound = qwtMin(x1, x2); + d_hBound = qwtMax(x1, x2); + d_log = log; + + if (d_log) + rv = buildLogDiv(maxMajSteps,maxMinSteps,step); + else + rv = buildLinDiv(maxMajSteps, maxMinSteps, step); + + if ((!ascend) && (x2 < x1)) + { + d_lBound = x1; + d_hBound = x2; + qwtTwistArray(d_majMarks.data(), d_majMarks.size()); + qwtTwistArray(d_minMarks.data(), d_minMarks.size()); + } + + return rv; + +} + +//------------------------------------------------------------ +//.F ScaleDiv::buildLinDiv +// Build a linear scale division in ascending order +// +//.u Syntax +//.f bool ScaleDiv::buildLinDiv(int majSteps, int minSteps, double step) +// +//.u Parameters +//.p int maxSteps -- max. number of step intervals +// double step -- fixed step width +// +//.u Return Value +// TRUE if array has been successfully resized +// +//.u Description +// If the 'step' parameter is set to 0.0, this function +// cal[culates the step width automatically according to +// the value of 'maxSteps'. MaxSteps must be greater than or +// equal to 2. It will be guessed if an invalid value is specified. +// The maximum possible number of steps is limited to 10000. +// The maxSteps parameter has no effect if a fixed step width is +// specified. +// +//.u Note +// This function uses the data members d_lBound and d_hBound and assumes +// that d_hBound > d_lBound. +//------------------------------------------------------------ + +bool ScaleDiv::buildLinDiv(int maxMajSteps, int maxMinSteps, double step) + { + + int nMaj, nMin, minSize, i0,i,k; + double val, mval; + double firstTick, lastTick; + double minStep; + Q3MemArray buffer; + bool rv = TRUE; + + // parameter range check + maxMajSteps = qwtMax(1, maxMajSteps); + maxMinSteps = qwtMax(0, maxMinSteps); + step = qwtAbs(step); + + // detach arrays + d_majMarks.duplicate(0,0); + d_minMarks.duplicate(0,0); + + if (d_lBound == d_hBound) return TRUE; + + // + // Set up major divisions + // + if (step == 0.0) + d_majStep = qwtCeil125(qwtAbs(d_hBound - d_lBound) * 0.999999 + / double(maxMajSteps)); + else + d_majStep = step; + + if (d_majStep == 0.0) return TRUE; + + firstTick = ceil( (d_lBound - step_eps * d_majStep) / d_majStep) * d_majStep; + lastTick = floor( (d_hBound + step_eps * d_majStep) / d_majStep) * d_majStep; + + nMaj = qwtMin(10000, int(rint((lastTick - firstTick) / d_majStep)) + 1); + + if ((rv = d_majMarks.resize(nMaj))) + qwtLinSpace(d_majMarks.data(), d_majMarks.size(), firstTick, lastTick); + else + return FALSE; + + // + // Set up minor divisions + // + if (maxMinSteps < 1) // no minor divs + return TRUE; + + minStep = qwtCeil125( d_majStep / double(maxMinSteps) ); + + if (minStep == 0.0) return TRUE; + + nMin = qwtAbs(int(rint(d_majStep / minStep))) - 1; // # minor steps per interval + + // Do the minor steps fit into the interval? + if ( qwtAbs(double(nMin + 1) * minStep - d_majStep) > step_eps * d_majStep) + { + nMin = 1; + minStep = d_majStep * 0.5; + } + + // Are there minor ticks below the first major tick? + if (d_majMarks[0] > d_lBound ) + i0 = -1; + else + i0 = 0; + + // resize buffer to the maximum possible number of minor ticks + rv = buffer.resize(nMin * (nMaj + 1)); + + // calculate minor ticks + if (rv) + { + minSize = 0; + for (i = i0; i < (int)d_majMarks.size(); i++) + { + if (i >= 0) + val = d_majMarks[i]; + else + val = d_majMarks[0] - d_majStep; + + for (k=0; k< nMin; k++) + { + mval = (val += minStep); + if (limRange(mval, d_lBound, d_hBound, border_eps)) + { + buffer[minSize] = mval; + minSize++; + } + } + } + d_minMarks.duplicate(buffer.data(), minSize); + } + + return rv; + } + +//------------------------------------------------------------ +//.F ScaleDiv::buildLogDiv +// Build a logarithmic scale division +// +//.u Syntax +//.f bool ScaleDiv::buildLogDiv(int maxMajSteps, int maxMinSteps, int majStep) +// +//.u Parameters +//.p int maxMajSteps, int maxMinSteps, int majStep +// +//.u Return Value +// True if memory has been successfully allocated +// +//.u Note +// This function uses the data members d_lBound and d_hBound and assumes +// that d_hBound > d_lBound. +//------------------------------------------------------------ + +bool ScaleDiv::buildLogDiv(int maxMajSteps, int maxMinSteps, double majStep) + { + double firstTick, lastTick; + double lFirst, lLast; + double val, sval, minStep, minFactor; + int nMaj, nMin, minSize, i, k, k0, kstep, kmax, i0; + int rv = TRUE; + double width; + + Q3MemArray buffer; + + + // Parameter range check + maxMajSteps = qwtMax(1, qwtAbs(maxMajSteps)); + maxMinSteps = qwtMax(0, qwtAbs(maxMinSteps)); + majStep = qwtAbs(majStep); + + // boundary check + limRange(d_hBound, LOG_MIN, LOG_MAX); + limRange(d_lBound, LOG_MIN, LOG_MAX); + + // detach arrays + d_majMarks.duplicate(0,0); + d_minMarks.duplicate(0,0); + + if (d_lBound == d_hBound) return TRUE; + + // scale width in decades + width = log10(d_hBound) - log10(d_lBound); + + // scale width is less than one decade -> build linear scale + if (width < 1.0) + { + rv = buildLinDiv(maxMajSteps, maxMinSteps, 0.0); + // convert step width to decades + if (d_majStep > 0) + d_majStep = log10(d_majStep); + + return rv; + } + + // + // Set up major scale divisions + // + if (majStep == 0.0) + d_majStep = qwtCeil125( width * 0.999999 / double(maxMajSteps)); + else + d_majStep = majStep; + + // major step must be >= 1 decade + d_majStep = qwtMax(d_majStep, 1.0); + + + lFirst = ceil((log10(d_lBound) - step_eps * d_majStep) / d_majStep) * d_majStep; + lLast = floor((log10(d_hBound) + step_eps * d_majStep) / d_majStep) * d_majStep; + + firstTick = pow(10.0, lFirst); + lastTick = pow(10.0, lLast); + + nMaj = qwtMin(10000, int(rint(qwtAbs(lLast - lFirst) / d_majStep)) + 1); + + if (d_majMarks.resize(nMaj)) + qwtLogSpace(d_majMarks.data(), d_majMarks.size(), firstTick, lastTick); + else + return FALSE; + + + // + // Set up minor scale divisions + // + + if ((d_majMarks.size() < 1) || (maxMinSteps < 1)) return TRUE; // no minor marks + + if (d_majStep < 1.1) // major step width is one decade + { + if (maxMinSteps >= 8) + { + k0 = 2; + kmax = 9; + kstep = 1; + minSize = (d_majMarks.size() + 1) * 8; + } + else if (maxMinSteps >= 4) + { + k0 = 2; + kmax = 8; + kstep = 2; + minSize = (d_majMarks.size() + 1) * 4; + } + else if (maxMinSteps >= 2) + { + k0 = 2; + kmax = 5; + kstep = 3; + minSize = (d_majMarks.size() + 1) * 2; + } + else + { + k0 = 5; + kmax = 5; + kstep = 1; + minSize = (d_majMarks.size() + 1); + } + + // resize buffer to the max. possible number of minor marks + buffer.resize(minSize); + + // Are there minor ticks below the first major tick? + if ( d_lBound < firstTick ) + i0 = -1; + else + i0 = 0; + + minSize = 0; + for (i = i0; i< (int)d_majMarks.size(); i++) + { + if (i >= 0) + val = d_majMarks[i]; + else + val = d_majMarks[0] / pow(10.0, d_majStep); + + for (k=k0; k<= kmax; k+=kstep) + { + sval = val * double(k); + if (limRange(sval, d_lBound, d_hBound, border_eps)) + { + buffer[minSize] = sval; + minSize++; + } + } + } + + // copy values into the minMarks array + d_minMarks.duplicate(buffer.data(), minSize); + + } + else // major step > one decade + { + + // substep width in decades, at least one decade + minStep = qwtCeil125( (d_majStep - step_eps * (d_majStep / double(maxMinSteps))) + / double(maxMinSteps) ); + minStep = qwtMax(1.0, minStep); + + // # subticks per interval + nMin = int(rint(d_majStep / minStep)) - 1; + + // Do the minor steps fit into the interval? + if ( qwtAbs( double(nMin + 1) * minStep - d_majStep) > step_eps * d_majStep) + nMin = 0; + + if (nMin < 1) return TRUE; // no subticks + + // resize buffer to max. possible number of subticks + buffer.resize((d_majMarks.size() + 1) * nMin ); + + // substep factor = 10^substeps + minFactor = qwtMax(pow(10,minStep), 10.0); + + // Are there minor ticks below the first major tick? + if ( d_lBound < firstTick ) + i0 = -1; + else + i0 = 0; + + minSize = 0; + for (i = i0; i< (int)d_majMarks.size(); i++) + { + if (i >= 0) + val = d_majMarks[i]; + else + val = firstTick / pow(10.0, d_majStep); + + for (k=0; k< nMin; k++) + { + sval = (val *= minFactor); + if (limRange(sval, d_lBound, d_hBound, border_eps)) + { + buffer[minSize] = sval; + minSize++; + } + } + } + d_minMarks.duplicate(buffer.data(), minSize); + } + + return rv; +} + +//------------------------------------------------------------ +//.F ScaleDiv::operator== +// Equality operator +// +//.u Syntax +//.f int ScaleDiv::operator==(const ScaleDiv &s) +// +//.u Parameters +//.p const ScaleDiv &s +// +//.u Return Value +// TRUE if this instance is equal to s +//------------------------------------------------------------ + +int ScaleDiv::operator==(const ScaleDiv &s) const + { + if (d_lBound != s.d_lBound) + return 0; + if (d_hBound != s.d_hBound) + return 0; + if (d_log != s.d_log) + return 0; + if (d_majStep != s.d_majStep) + return 0; + if (d_majMarks != s.d_majMarks) + return 0; + return (d_minMarks == s.d_minMarks); + } + +//------------------------------------------------------------ +//.F ScaleDiv::operator!= +// Inequality +// +//.u Syntax +//.f int ScaleDiv::operator!=(const ScaleDiv &s) +// +//.u Parameters +//.p const ScaleDiv &s +// +//.u Return Value +// TRUE if this instance is not equal to s +//------------------------------------------------------------ + +int ScaleDiv::operator!=(const ScaleDiv &s) const + { + return (!(*this == s)); + } + +//------------------------------------------------------------ +//.F ScaleDiv::reset +// Detach the shared data and set everything to zero. +// +//.u Syntax +//.f void ScaleDiv::reset() +//------------------------------------------------------------ + +void ScaleDiv::reset() + { + // detach arrays + d_majMarks.duplicate(0,0); + d_minMarks.duplicate(0,0); + + d_lBound = 0.0; + d_hBound = 0.0; + d_majStep = 0.0; + d_log = FALSE; + } + + + + + + + + diff --git a/muse2/muse/widgets/scldiv.h b/muse2/muse/widgets/scldiv.h new file mode 100644 index 00000000..fcb4951c --- /dev/null +++ b/muse2/muse/widgets/scldiv.h @@ -0,0 +1,57 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: scldiv.h,v 1.1.1.1 2003/10/27 18:54:43 wschweer Exp $ +// +// Copyright (C) 1997 Josef Wilgen +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License, version 2, +// as published by the Free Software Foundation. +// +// (C) Copyright 2000 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __SCLDIV_H__ +#define __SCLDIV_H__ + +#include +#include + +class ScaleDiv + { + double d_lBound; + double d_hBound; + double d_majStep; + bool d_log; + + Q3MemArray d_majMarks; + Q3MemArray d_minMarks; + + void copy(const ScaleDiv &s); + + bool buildLinDiv(int maxMajMark, int maxMinMark, double step = 0.0); + bool buildLogDiv(int maxMajMark, int maxMinMark, double step = 0.0); + + public: + ScaleDiv (); + virtual ~ScaleDiv(); + ScaleDiv(const ScaleDiv& s); + + ScaleDiv& operator= (const ScaleDiv &s); + int operator== (const ScaleDiv &s) const; + int operator!= (const ScaleDiv &s) const; + + double lBound() const { return d_lBound; } + double hBound() const { return d_hBound; } + int minCnt() const { return d_minMarks.size(); } + int majCnt() const { return d_majMarks.size(); } + bool logScale() const { return d_log; } + double majMark(int i) const { return d_majMarks[i]; } + double minMark(int i) const { return d_minMarks[i]; } + double majStep() const { return d_majStep; } + void reset(); + bool rebuild(double lBound, double hBound, int maxMaj, int maxMin, + bool log, double step = 0.0, bool ascend = TRUE); + }; + +#endif diff --git a/muse2/muse/widgets/scldraw.cpp b/muse2/muse/widgets/scldraw.cpp new file mode 100644 index 00000000..b72d1000 --- /dev/null +++ b/muse2/muse/widgets/scldraw.cpp @@ -0,0 +1,881 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: scldraw.cpp,v 1.1.1.1 2003/10/27 18:54:36 wschweer Exp $ +// +// Copyright (C) 1997 Josef Wilgen +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License, version 2, +// as published by the Free Software Foundation. +// +// (C) Copyright 2000 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include "scldraw.h" +#include +#include +#include +#include "mmath.h" + + +int const ScaleDraw::minLen = 10; + +const double step_eps = 1.0e-6; +static const double WorstCase = -8.8888888888888888888888e-88; + +//------------------------------------------------------------ +//.H ScaleDraw | 3 | 30/08/97 | Qwt Widget Library | Qwt Programmer's Manual +//.I scldraw Different Scales +//.U NAME +// ScaleDraw - A class for drawing scales +// +//.U SYNOPSIS +// #include +// +//.U DESCRIPTION +// ScaleDraw can be used to draw linear or logarithmic scales. +// A scale has an origin, +// an orientation and a length, which all can be specified with +// @ScaleDraw::setGeometry@. +// After a scale division has been specified as a @^QwtScaleDiv@ object +// using @ScaleDraw::setScale (1)@ +// or determined internally using @ScaleDraw::setScale (2)@, +// the scale can be drawn with the @QwtScaleDiv::draw@ member. +// +//.U INHERITED CLASSES +// @QwtDiMap@ +// +//.U PUBLIC MEMBERS +//.R +// ScaleDraw::ScaleDraw -- constructor +// ScaleDraw::setScale (1) -- set scale using QwtScaleDiv +// ScaleDraw::setScale (2) -- set scale directly +// ScaleDraw::setGeometry -- specify geometry +// ScaleDraw::setAngleRange -- specify angle range for round scales +// ScaleDraw::setLabelFormat -- set number format +// ScaleDraw::scalediv -- return scale division +// ScaleDraw::orientation -- return orientation +// ScaleDraw::maxBoundingRect -- return maximum bounding rectangle +// ScaleDraw::maxWidth -- return maximum width +// ScaleDraw::maxHeight -- return maximum height +// ScaleDraw::maxLabelWidth -- return maximum width of the number labels +// ScaleDraw::draw -- draw the scale +// +//.U STATIC DATA MEMBERS +//.t +// enum ScaleDraw::Orientation { Left, Right, Top, Bottom, Round } -- +// Scale orientation +//------------------------------------------------------------ + +//------------------------------------------------------------ +//.U MEMBER FUNCTION DESCRIPTION +//------------------------------------------------------------ + +//------------------------------------------------------------ +// +//.F ScaleDraw::ScaleDraw +// +// Constructor +//.u Description +// The range of the scale is initialized to [0, 100], +// the angle range is set to [-135, 135], the geometry +// is initialized such that the origin is at (0,0), the +// length is 100, and the orientation is ScaleDraw::Bottom. +// +//------------------------------------------------------------ +ScaleDraw::ScaleDraw() +{ +/* d_hpad = 6; + d_vpad = 3; + d_majLen = 8; + d_medLen = 6; + d_minLen = 4; + */ + + d_hpad = 3; + d_vpad = 1; + d_majLen = 4; + d_medLen = 3; + d_minLen = 2; + + d_minAngle = -135 * 16; + d_maxAngle = 135 * 16; + d_fmt = 'g'; + d_prec = 4; + + // initialize scale and geometry + setGeometry(0,0,100,Bottom); + setScale(0,100,0,0,10); +} + + +//------------------------------------------------------------ +// +//.F ScaleDraw::setScale (1) +// Adjust the range of the scale +// +//.u Syntax +//.f void ScaleDraw::setScale(double x1, double x2, double step, int logscale) +// +//.u Parameters +//.p double x1 -- value at the left/low endpoint of the scale +// double x2 -- value at the right/high endpoint of the scale +// double step -- step size (default : 0.0) +// int logscale -- logarithmic scale (default : 0) +// +//.u Description +// If step == 0.0, the step width is calculated automatically +// dependent on the maximal number of scale ticks. +// +//------------------------------------------------------------ +void ScaleDraw::setScale(double x1, double x2, int maxMajIntv, + int maxMinIntv, double step, int logscale) +{ + d_scldiv.rebuild( x1, x2, maxMajIntv, maxMinIntv, logscale, step, FALSE ); + setDblRange( d_scldiv.lBound(), d_scldiv.hBound(), d_scldiv.logScale()); +} + + +//------------------------------------------------------------ +// +//.F ScaleDraw::setScale (2) +// Change the scale division +// +//.u Syntax +//.f void ScaleDraw::setScale(QwtAutoScale &as) +// +//.u Parameters +//.p const QwtScaleDiv& sd -- new scale division +// +//------------------------------------------------------------ + +void ScaleDraw::setScale(const ScaleDiv &s) +{ + d_scldiv = s; + setDblRange(d_scldiv.lBound(),d_scldiv.hBound(),d_scldiv.logScale()); +} + + + +//------------------------------------------------------------ +//.F ScaleDraw::draw +// Draw the scale +//.u Parameters +//.p QPainter *p -- the painter +//------------------------------------------------------------ + +void ScaleDraw::draw(QPainter *p) const + { + double val,hval,majTick; + + int i,k,kmax; + + for (i=0; i< d_scldiv.majCnt(); i++) + { + val = d_scldiv.majMark(i); + drawTick(p, val, d_majLen); + drawLabel(p, val); + } + + if (d_scldiv.logScale()) + { + for (i=0; i< d_scldiv.minCnt(); i++) + { + drawTick(p,d_scldiv.minMark(i),d_minLen); + } + } + else + { + k = 0; + kmax = d_scldiv.majCnt() - 1; + if (kmax > 0) + { + majTick = d_scldiv.majMark(0); + hval = majTick - 0.5 * d_scldiv.majStep(); + + for (i=0; i< d_scldiv.minCnt(); i++) + { + val = d_scldiv.minMark(i); + if (val > majTick) + { + if (k < kmax) + { + k++; + majTick = d_scldiv.majMark(k); + } + else + { + majTick += d_scldiv.majMark(kmax) + d_scldiv.majStep(); + } + hval = majTick - 0.5 * d_scldiv.majStep(); + + } + if (qwtAbs(val-hval) < step_eps * d_scldiv.majStep()) + drawTick(p, val, d_medLen); + else + drawTick(p, val, d_minLen); + } + } + } + + // + // draw backbone + // + //if (d_baseEnabled) + drawBackbone(p); + +} + + +//------------------------------------------------------------ +//.F ScaleDraw::drawTick +// Draws a singls scale tick +// +//.u Parameters +//.p QPainter *p, double val, int len +//------------------------------------------------------------ + +void ScaleDraw::drawTick(QPainter *p, double val, int len) const + { + int tval = transform(val); + double arc; + int x1, x2, y1, y2; + + switch(d_orient) + { + case Right: + + p->drawLine(d_xorg, tval, d_xorg + len, tval); + break; + + case Bottom: + + p->drawLine(tval, d_yorg, tval, d_yorg + len); + break; + + case Left: + + p->drawLine(d_xorg, tval, d_xorg - len, tval); + break; + + case Round: + + if ((tval <= d_minAngle + 359 * 16) || (tval >= d_minAngle - 359 * 16)) + { + arc = double(tval) / 16.0 * M_PI / 180.0; + x1 = qwtInt(d_xCenter + sin(arc) * d_radius); + x2 = qwtInt(d_xCenter + sin(arc) * (d_radius + double(len))); + y1 = qwtInt(d_yCenter - cos(arc) * d_radius); + y2 = qwtInt(d_yCenter - cos(arc) * (d_radius + double(len))); + p->drawLine(x1, y1, x2, y2); + } + break; + + case Top: + default: + + p->drawLine(tval, d_yorg, tval, d_yorg - len); + break; + + + } + +} + + + + +//------------------------------------------------------------ +//.- +//.F ScaleDraw::drawLabel +// Draws the number label for a major scale tick +// +//.u Parameters +//.p QPainter *p, double val +// +//------------------------------------------------------------ +void ScaleDraw::drawLabel(QPainter *p, double val) const +{ + + static QString label; + static double pi_4 = M_PI * 0.25; + static double pi_75 = M_PI * 0.75; + + double arc; + int xpos, ypos; + int tval; + + QFontMetrics fm = p->fontMetrics(); + + tval = transform(val); + + // correct rounding errors if val = 0 + if ((!d_scldiv.logScale()) && (qwtAbs(val) < qwtAbs(step_eps * d_scldiv.majStep()))) + val = 0.0; + + label.setNum(val, d_fmt, d_prec); + + switch(d_orient) + { + case Right: + p->drawText(d_xorg + d_majLen + d_hpad, + tval + (fm.ascent()-1) / 2, + label); + break; + case Left: + p->drawText(d_xorg - d_majLen - d_hpad - fm.width(label), + tval + (fm.ascent() -1) / 2, + label); + break; + case Bottom: + p->drawText(tval - (fm.width(label)-1) / 2, d_yorg + d_majLen + d_vpad + fm.ascent(), label); + break; + case Round: + + if ((tval > d_minAngle + 359 * 16) || (tval < d_minAngle - 359 * 16)) + break; + + arc = double(tval) / 16.0 * M_PI / 180.0; + + // Map arc into the interval -pi <= arc <= pi + if ((arc < -M_PI) || (arc > M_PI)) + arc -= floor((arc + M_PI) / M_PI * 0.5) * 2.0 * M_PI; + + xpos = 1 + qwtInt(d_xCenter + (d_radius + double(d_majLen + d_vpad)) * sin(arc)); + ypos = qwtInt(d_yCenter - (d_radius + double(d_majLen + d_vpad)) * cos(arc)); + + if (arc < -pi_75) + { + p->drawText(xpos - qwtInt(double(fm.width(label)) + * (1.0 + (arc + pi_75) * M_2_PI) ), + ypos + fm.ascent() - 1, + label); + } + else if (arc < -M_PI_4) + { + p->drawText(xpos - fm.width(label), + + + ypos - qwtInt(double(fm.ascent() - 1) + * (arc + M_PI_4) * M_2_PI), + label); + } + else if (arc < pi_4) + { + p->drawText(xpos + qwtInt(double(fm.width(label)) + * ( arc - M_PI_4 ) * M_2_PI ), + ypos, + label); + } + else if (arc < pi_75) + { + p->drawText(xpos, + ypos + qwtInt(double(fm.ascent() - 1) + * (arc - M_PI_4) * M_2_PI), + label); + } + else + { + p->drawText(xpos - qwtInt(double(fm.width(label)) + * ( arc - pi_75) * M_2_PI ), + ypos + fm.ascent() - 1, + label); + } + break; + case Top: + default: + p->drawText(tval - (fm.width(label)-1) / 2, d_yorg - d_majLen - d_vpad, label); + break; + } + + + +} + +//------------------------------------------------------------ +//.- +//.F ScaleDraw::drawBackbone +// Draws the baseline of the scale +// +// +//.u Parameters +//.p QPainter *p +// +//------------------------------------------------------------ +void ScaleDraw::drawBackbone(QPainter *p) const +{ + int bw2; + int a1, a2; + bw2 = p->pen().width() / 2; + + + switch(d_orient) + { + case Left: + p->drawLine(d_xorg - bw2, d_yorg, d_xorg - bw2, d_yorg + d_len - 1); + break; + case Right: + p->drawLine(d_xorg + bw2, d_yorg, d_xorg + bw2, d_yorg + d_len - 1); + break; + case Round: + + a1 = qwtMin(i1(), i2()) - 90 * 16; + a2 = qwtMax(i1(), i2()) - 90 * 16; + + p->drawArc(d_xorg, d_yorg, d_len, + d_len, + -a2, a2 - a1 + 1); // counterclockwise + + break; + + case Top: + p->drawLine(d_xorg, d_yorg - bw2, d_xorg + d_len - 1, d_yorg-bw2); + break; + case Bottom: + p->drawLine(d_xorg, d_yorg+bw2, d_xorg + d_len - 1, d_yorg+bw2); + break; + default: + p->drawLine(d_xorg, d_yorg, d_xorg + d_len - 1, d_yorg); + break; + } + +} + + +//------------------------------------------------------------ +// +//.F ScaleDraw::setGeometry +// Specify the geometry of the scale +// +// +//.u Parameters +//.p int xorigin -- x coordinate of the origin +// int yorigin -- y coordinate of the origin +// int length -- length or diameter of the scale +// Orientation o -- The orientation +// +//.u Description +// +// The parameters xorigin, yorigin and length have different meanings, +// dependent on the +// orientation: +//.t +// ScaleDraw::Left -- The origin is the topmost point of the +// baseline. The baseline is a vertical line with the +// specified length. Scale marks and labels are drawn +// at the left of the baseline. +// +// ScaleDraw::Right -- The origin is the topmost point of the +// baseline. The baseline is a vertical line with the +// specified length. Scale marks and labels are drawn +// at the right of the baseline. +// +// ScaleDraw::Top -- The origin is the leftmost point of the +// baseline. The baseline is a horizontal line with the +// specified length. Scale marks and labels are drawn +// above the baseline. +// +// ScaleDraw::Bottom -- The origin is the leftmost point of the +// baseline. The baseline is a horizontal line with the +// specified length. Scale marks and labels are drawn +// below the baseline. +// +// ScaleDraw::Round -- The origin is the top left corner of the +// bounding rectangle of the baseline circle. The baseline +// is the segment of a circle with a diameter of the specified length. +// Scale marks and labels are drawn outside the baseline +// circle. +// +//------------------------------------------------------------ +void ScaleDraw::setGeometry(int xorigin, int yorigin, int length, OrientationX o) +{ + + d_xorg = xorigin; + d_yorg = yorigin; + d_radius = double(length) * 0.5; + d_xCenter = double(xorigin) + double(length) * 0.5; + d_yCenter = double(yorigin) + double(length) * 0.5; + + if (length > minLen) + d_len = length; + else + d_len = minLen; + + d_orient = o; + + switch(d_orient) + { + case Left: + case Right: + setIntRange(d_yorg + d_len - 1, d_yorg); + break; + case Round: + setIntRange(d_minAngle, d_maxAngle); + break; + case Top: + case Bottom: + default: + setIntRange(d_xorg, d_xorg + d_len - 1); + break; + } +} + + + +//------------------------------------------------------------ +// +//.F ScaleDraw::maxWidth +// Return the maximum width of the scale for a specified QPainter +// +//.u Syntax +//.f int ScaleDraw::maxWidth(QPainter *p) +// +//.u Parameters +//.p QPainter *p -- painter +// bool worst -- if TRUE, assume the worst possible case. If FALSE, +// calculate the real maximum width, which is more +// CPU intensive. +// +//------------------------------------------------------------ +int ScaleDraw::maxWidth(QPainter *p, bool worst) const +{ + int rv = 0; + int bw = p->pen().width(); + + QString s; + + QFontMetrics fm = p->fontMetrics(); + + rv = maxLabelWidth(p,worst); + + switch (d_orient) + { + case Left: + case Right: + rv += (bw + d_hpad + d_majLen); + break; + case Round: + rv += (bw + d_vpad + d_majLen); + break; + case Top: + case Bottom: + default: + rv += d_len; + } + + return rv; + +} + +//------------------------------------------------------------ +// +//.F ScaleDraw::maxHeight +// Return the maximum height of the scale for the +// specified painter +// +//.u Syntax +//.f int ScaleDraw::maxHeight(QPainter *p) +// +//.u Parameters +//.p QPainter *p +// +//------------------------------------------------------------ +int ScaleDraw::maxHeight(QPainter *p) const +{ + + int rv = 0; + int bw = p->pen().width(); + + p->save(); + QFontMetrics fm = p->fontMetrics(); + + switch (d_orient) + { + case Top: + case Bottom: + case Round: + rv = bw + d_vpad + d_majLen + fm.height(); + break; + case Left: + case Right: + default: + rv = d_len + ((fm.height() + 1) / 2); + } + + return rv; + +} + +//------------------------------------------------------------ +// +//.F ScaleDraw:maxBoundingRect +// Return the maximum bounding rectangle of the scale +// for a specified painter +// +//.u Parameters +//.p QPainter *p -- painter +// +//.u Description +// The bounding rectangle is not very exact for round scales +// with strange angle ranges. +// +//------------------------------------------------------------ +QRect ScaleDraw::maxBoundingRect(QPainter *p) const +{ + int i, wl,h,wmax; + int a, ar, amin, amax; + double arc; + + QRect r; + + QFontMetrics fm = p->fontMetrics(); + + wl = maxLabelWidth(p, TRUE); + h = fm.height(); + + switch(d_orient) + { + case Left: + + r = QRect( d_xorg - d_hpad - d_majLen - wl, + d_yorg - fm.ascent(), + d_majLen + d_hpad + wl, + d_len + fm.height()); + break; + + case Right: + + r = QRect( d_xorg, + d_yorg - fm.ascent(), + d_majLen + d_hpad + wl, + d_len + fm.height()); + break; + + case Top: + + r = QRect ( d_xorg - wl / 2, + d_yorg - d_majLen - fm.ascent(), + d_len + wl, + d_majLen + d_vpad + fm.ascent()); + break; + + case Bottom: + + r = QRect ( d_xorg - wl / 2, + d_yorg, + d_len + wl, + d_majLen + d_vpad + fm.height()); + break; + + case Round: + + amin = 2880; + amax = 0; + ar = 0; + + for (i=0; i< d_scldiv.majCnt(); i++) + { + a = transform(d_scldiv.majMark(i)); + + while (a > 2880) a -= 5760; + while (a < - 2880) a += 5760; + + ar = qwtAbs(a); + + if (ar < amin) amin = ar; + if (ar > amax) amax = ar; + + } + + for (i=0; i< d_scldiv.minCnt(); i++) + { + a = transform(d_scldiv.majMark(i)); + + while (a > 2880) a -= 5760; + while (a < - 2880) a += 5760; + + ar = qwtAbs(a); + + if (ar < amin) amin = ar; + if (ar > amax) amax = ar; + } + + arc = double(amin) / 16.0 * M_PI / 180.0; + r.setTop(qwtInt(d_yCenter - (d_radius + double(d_majLen + d_vpad)) * cos(arc)) + + fm.ascent() ); + + arc = double(amax) / 16.0 * M_PI / 180.0; + r.setBottom(qwtInt(d_yCenter - (d_radius + double(d_majLen + d_vpad)) * cos(arc)) + + fm.height() ); + + wmax = d_len + d_majLen + d_hpad + wl; + + r.setLeft(d_xorg - d_majLen - d_hpad - wl); + r.setWidth(d_len + 2*(d_majLen + d_hpad + wl)); + break; + } + + return r; + +} + +//------------------------------------------------------------ +// +//.F ScaleDraw::setAngleRange +// Adjust the baseline circle segment for round scales. +// +//.u Syntax +//.f void ScaleDraw::setAngleRange(double angle1, double angle2) +// +//.u Parameters +//.p double angle1, double angle2 +// boundaries of the angle interval in degrees. +// +//.u Description +// The baseline will be drawn from min(angle1,angle2) to max(angle1, angle2). +// The settings have no effect if the scale orientation is not set to +// ScaleDraw::Round. The default setting is [ -135, 135 ]. +// An angle of 0 degrees corresponds to the 12 o'clock position, +// and positive angles count in a clockwise direction. +// +//.u Note +//.i +// -- The angle range is limited to [-360, 360] degrees. Angles exceeding +// this range will be clipped. +// -- For angles more than 359 degrees above or below min(angle1, angle2), +// scale marks will not be drawn. +// -- If you need a counterclockwise scale, use @QwtScaleDiv::setRange (1)@ +// or @QwtScaleDiv::setRange (2)@. +//------------------------------------------------------------ +void ScaleDraw::setAngleRange(double angle1, double angle2) +{ + int amin, amax; + + angle1 = qwtLim(angle1, -360.0, 360.0); + angle2 = qwtLim(angle2, -360.0, 360.0); + amin = int(rint(qwtMin(angle1, angle2) * 16.0)); + amax = int(rint(qwtMax(angle1, angle2) * 16.0)); + + if (amin == amax) + { + amin -= 1; + amax += 1; + } + + d_minAngle = amin; + d_maxAngle = amax; + setIntRange(d_minAngle, d_maxAngle); + +} + + +//------------------------------------------------------------ +// +//.F ScaleDraw::setLabelFormat +// Set the number format for the major scale labels +// +//.u Syntax +//.f void ScaleDraw::setLabelFormat(char f, int prec) +// +//.u Parameters +//.p char f -- format character +// int prec -- precision +// +//.u Description +// Format character and precision have the same meaning as for the +// QString class. +// +//.u See also +// QString::setNum in the Qt manual +// +//------------------------------------------------------------ +void ScaleDraw::setLabelFormat(char f, int prec) +{ + d_fmt = f; + d_prec = prec; +} + +//------------------------------------------------------------ +// +//.F ScaleDraw::maxLabelWidth +// Return the maximum width of a label +// +//.u Syntax +//.f int ScaleDraw::maxLabelWidth(QPainter *p, int worst) +// +//.u Parameters +//.p QPainter *p -- painter +// int worst -- If TRUE, take the worst case. If FALSE, take +// the actual width of the largest label. +// +//------------------------------------------------------------ +int ScaleDraw::maxLabelWidth(QPainter *p, int worst) const +{ + + int i,rv = 0; + double val; + QString s; + + + QFontMetrics fm = p->fontMetrics(); + + if (worst) // worst case + { + s.setNum(WorstCase, d_fmt, d_prec); + rv = fm.width(s); + } + else // actual width + { + for (i=0;i +#include +#include "dimap.h" +#include "scldiv.h" +#include +#include +#include + +class QPainter; +class AutoScale; + +class ScaleDraw : public DiMap { + public: + enum OrientationX { Bottom, Top, Left, Right, Round }; + + private: + ScaleDiv d_scldiv; + static const int minLen; + OrientationX d_orient; + + int d_xorg; + int d_yorg; + int d_len; + + int d_hpad; + int d_vpad; + + int d_medLen; + int d_majLen; + int d_minLen; + + int d_minAngle; + int d_maxAngle; + + double d_xCenter; + double d_yCenter; + double d_radius; + + char d_fmt; + int d_prec; + + void drawTick(QPainter *p, double val, int len) const; + void drawBackbone(QPainter *p) const; + void drawLabel(QPainter *p, double val) const; + + public: + + ScaleDraw(); + + void setScale(const ScaleDiv &s); + void setScale(double vmin, double vmax, int maxMajIntv, int maxMinIntv, + double step = 0.0, int logarithmic = 0); + void setGeometry(int xorigin, int yorigin, int length, OrientationX o); + void setAngleRange(double angle1, double angle2); + void setLabelFormat(char f, int prec); + + const ScaleDiv& scaleDiv() const { return d_scldiv; } + OrientationX orientation() const { return d_orient; } + QRect maxBoundingRect(QPainter *p) const; + int maxWidth(QPainter *p, bool worst = TRUE) const; + int maxHeight(QPainter *p) const; + int maxLabelWidth(QPainter *p, int worst = TRUE) const; + void draw(QPainter *p) const; + }; + +#endif + + + + + + + diff --git a/muse2/muse/widgets/sclif.cpp b/muse2/muse/widgets/sclif.cpp new file mode 100644 index 00000000..8740bc53 --- /dev/null +++ b/muse2/muse/widgets/sclif.cpp @@ -0,0 +1,205 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: sclif.cpp,v 1.1.1.1 2003/10/27 18:55:10 wschweer Exp $ + +// Copyright (C) 1997 Josef Wilgen +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License, version 2, +// as published by the Free Software Foundation. +// +// (C) Copyright 2000 Werner Schweer (ws@seh.de) +//========================================================= + +#include "sclif.h" + +// ScaleIf - An interface class for widgets containing a scale +// +// This interface class is used to provide classes +// with a protected ScaleDraw member and a public +// interface to access that scale. +// +// The primary purpose of this class is to define +// a common interface for classes which are supposed to +// contain a ScaleDraw class. It provides a protected +// ScaleDraw member +// called d_scale and a couple of public member functions +// which allow direct but restricted access +// to this scale by the user. +// Widgets derived from this class have +// to implement the member function scaleChange(), +// which is called to notify changes of the +// scale parameters and usually requires repainting or +// resizing respectively. +// In general, a class derived from ScaleIf is +// expected to manage the division and the position of its scale internally +// when no user-defined scale is set. It should take the d_maxMinor +// and d_maxMajor members into account, which can be set by the user. +// An implementation can check if a user-defined scale is set by calling the +// @ScaleIf::hasUserScale@ member. + +//------------------------------------------------------------ +// ScaleIf::ScaleIf +// Construct a ScaleIf instance +// +// Syntax +// ScaleIf::ScaleIf() +//------------------------------------------------------------ + +ScaleIf::ScaleIf() + { + d_userScale = FALSE; + d_maxMajor = 5; + d_maxMinor = 3; + d_scale.setScale(0.0,100.0,d_maxMajor, d_maxMinor); + } + +//------------------------------------------------------------ +// ScaleIf::setScale (1) +// Specify a user-defined scale. +// +// Syntax +// void ScaleIf::setScale(double vmin, double vmax, int logarithmic) +// +// Parameters +// double vmin, double vmax -- boundary values +// int logarithmic -- If != 0, Build a logarithmic scale +// +// Description +// By default, the widget is supposed to control the range of its scale +// automatically, but sometimes it is desirable to have a user-defined +// scale which is not in sync with +// the widget's range, e.g. if a logarithmic scale is needed +// (sliders don't support that) or if the scale is required +// to have a fixed range (say 0...100%), independent of the +// widget's range. +// +// See also +// @ScaleIf::autoScale@ +//------------------------------------------------------------ + +void ScaleIf::setScale(double vmin, double vmax, int logarithmic) + { + setScale(vmin,vmax,0.0,logarithmic); + } + +//------------------------------------------------------------ +// ScaleIf::setScale (2) +// Specify a user-defined scale. +// +// Syntax +// void ScaleIf::setScale(double vmin, double vmax, int logarithmic) +// +// Parameters +// double vmin, double vmax -- interval boundaries +// int step -- major step size +// int logarithmic -- If != 0, build a logarithmic scale +// +// Description +// By default, the widget is supposed to control the range of its scale +// automatically, but sometimes it is desirable to have a user-defined +// scale which is not in sync with +// the widget's range, e.g. if a logarithmic scale is needed +// (sliders don't support that) or if the scale is required +// to have a fixed range (say 0...100%), independent of the +// widget's range. +//------------------------------------------------------------ + +void ScaleIf::setScale(double vmin, double vmax, double step, int logarithmic) + { + ScaleDiv oldscl(d_scale.scaleDiv()); + + d_scale.setScale(vmin, vmax, d_maxMajor, d_maxMinor, step, logarithmic); + d_userScale = TRUE; + if (oldscl != d_scale.scaleDiv()) + scaleChange(); + } + +//------------------------------------------------------------ +// Scale::setScale +// Assign a user-defined scale division +// +// Syntax +// void Scale::setScale(const ScaleDiv &s) +// +// Parameters +// const ScaleDiv &s -- scale division +//------------------------------------------------------------ + +void ScaleIf::setScale(const ScaleDiv &s) + { + d_scale.setScale(s); + scaleChange(); + } + +//------------------------------------------------------------ +// ScaleIf::autoScale +// Advise the widget to control the scale range +// internally. +// Syntax +// void ScaleIf::autoScale +// +// Description +// Autoscaling is on by default. +//------------------------------------------------------------ + +void ScaleIf::autoScale() + { + if (!d_userScale) { + d_userScale = FALSE; + scaleChange(); + } + } + +//------------------------------------------------------------ +// ScaleIf::setScaleMaxMajor +// Set the maximum number of major tick intervals. +// +// Syntax +// void ScaleIf::setScaleMaxMajor(int ticks) +// +// Parameters +// int ticks -- maximal number of major ticks. +// +// Description +// The scale's major ticks are calculated automatically such that +// the number of major intervals does not exceed . +// The default value is 5. +//------------------------------------------------------------ + +void ScaleIf::setScaleMaxMajor(int ticks) + { + if (ticks != d_maxMajor) { + d_maxMajor = ticks; + d_scale.setScale(d_scale.scaleDiv().lBound(), d_scale.scaleDiv().hBound(), + d_maxMajor, d_maxMinor, 0.0,d_scale.scaleDiv().logScale()); + scaleChange(); + } + } + +//------------------------------------------------------------ +// ScaleIf::setScaleMaxMinor +// Set the maximum number of minor tick intervals +// +// Syntax +// void ScaleIf::setScaleMaxMinor(int ticks) +// +// Parameters +// int ticks +// +// Description +// The scale's minor ticks are calculated automatically such that +// the number of minor intervals does not exceed . +// The default value is 3. +//------------------------------------------------------------ + +void ScaleIf::setScaleMaxMinor(int ticks) + { + if ( ticks != d_maxMinor) { + d_maxMinor = ticks; + d_scale.setScale(d_scale.scaleDiv().lBound(), d_scale.scaleDiv().hBound(), + d_maxMajor, d_maxMinor, 0.0, d_scale.scaleDiv().logScale()); + scaleChange(); + } + } + diff --git a/muse2/muse/widgets/sclif.h b/muse2/muse/widgets/sclif.h new file mode 100644 index 00000000..86c0ecb6 --- /dev/null +++ b/muse2/muse/widgets/sclif.h @@ -0,0 +1,51 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: sclif.h,v 1.1.1.1 2003/10/27 18:54:33 wschweer Exp $ + +// Copyright (C) 1997 Josef Wilgen +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License, version 2, +// as published by the Free Software Foundation. +// +// (C) Copyright 2000 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __SCALE_IF_H__ +#define __SCALE_IF_H__ + +#include +#include "scldraw.h" + +//--------------------------------------------------------- +// ScaleIf +//--------------------------------------------------------- + +class ScaleIf + { + bool d_userScale; + + protected: + ScaleDraw d_scale; + int d_maxMajor; + int d_maxMinor; + bool hasUserScale() {return d_userScale;} + virtual void scaleChange() = 0; + + public: + ScaleIf(); + virtual ~ScaleIf() {}; + + void setScale (double vmin, double vmax, int logarithmic = 0); + void setScale (double vmin, double vmax, double step, int logarithmic = 0); + void setScale(const ScaleDiv &s); + void setScaleMaxMajor( int ticks); + void setScaleMaxMinor( int ticks); + void autoScale(); + + int scaleMaxMinor() const {return d_maxMinor;} + int scaleMaxMajor() const {return d_maxMinor;} + }; + +#endif + diff --git a/muse2/muse/widgets/scrollscale.cpp b/muse2/muse/widgets/scrollscale.cpp new file mode 100644 index 00000000..1ff22c6a --- /dev/null +++ b/muse2/muse/widgets/scrollscale.cpp @@ -0,0 +1,499 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: scrollscale.cpp,v 1.2.2.2 2009/11/04 17:43:25 lunar_shuttle Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include +#include +#include +#include +#include +#include +#include +//Added by qt3to4: +#include +#include + +// #include "globals.h" +#include "scrollscale.h" +#include "icons.h" + +//--------------------------------------------------------- +// setScale +// "val" - slider value in range 0-1024 +//--------------------------------------------------------- + +void ScrollScale::setScale ( int val ) +{ + int off = offset(); + if ( invers ) + val = 1024 - val; + double min, max; + if ( scaleMin < 0 ) + min = 1.0/ ( -scaleMin ); + else + min = double ( scaleMin ); + + if ( scaleMax < 0 ) + max = 1.0/ ( -scaleMax ); + else + max = double ( scaleMax ); + + double diff = max-min; + double fkt = double ( val ) /1024.0; + double v = ( pow ( logbase, fkt )-1 ) / ( logbase-1 ); + double scale; + if ( invers ) + scale = max - v * diff; + else + scale = min + v * diff; + + if ( scale < 1.0 ) + scaleVal = - ( int ( 1.0 / scale ) ); + else + scaleVal = int ( scale ); + if ( scaleVal == -1 ) // nur so + scaleVal = 1; + +#if 0 + if ( scaleMax > scaleMin ) + { + if ( scale < scaleMin ) + scale = scaleMin; + else if ( scale > scaleMax ) + scale = scaleMax; + } + else + { + if ( scale < scaleMax ) + scale = scaleMax; + else if ( scale > scaleMin ) + scale = scaleMin; + } +#endif + + emit scaleChanged ( scaleVal ); + if ( !noScale ) + setRange ( minVal, maxVal ); + + int i = ( scroll->orientation() == Qt::Horizontal ) ? width() : height(); + int pos, pmax; + if ( scaleVal < 1 ) + { + pos = ( off-scaleVal/2 ) / ( -scaleVal ); + pmax = ( maxVal-scaleVal-1 ) / ( -scaleVal ) - i; + } + else + { + pos = off * scaleVal; + pmax = maxVal * scaleVal - i; + } + if(pos > pmax) + pos = pmax; + setPos(pos); +} + +//--------------------------------------------------------- +// setMag +//--------------------------------------------------------- + +void ScrollScale::setMag ( int cs ) +{ + scale->setValue ( cs ); + setScale ( cs ); +} + +//--------------------------------------------------------- +// setRange +// min,max ticks +//--------------------------------------------------------- + +void ScrollScale::setRange ( int min, int max ) +{ +// if ((min != minVal) && (max != maxVal)) +// return; + minVal = min; + maxVal = max; + int i = ( scroll->orientation() == Qt::Horizontal ) ? width() : height(); + + if ( !noScale ) + { + if ( scaleVal < 1 ) + { + min = minVal / ( -scaleVal ); + max = ( maxVal-scaleVal-1 ) / ( -scaleVal ) - i; + } + else + { + min = minVal * scaleVal; + max = maxVal * scaleVal - i; + } + } + else + max -= i; + if ( max < 0 ) + max = 0; + if ( min < 0 ) + min = 0; + if ( min > max ) + max = min; + + scroll->setRange ( min, max ); + + // qt doesn't check this... + if ( scroll->value() < min ) + scroll->setValue ( min ); + if ( scroll->value() > max ) + scroll->setValue ( max ); + scroll->setSteps ( 20, i ); +} + +//--------------------------------------------------------- +// setPos +// pos in pixel +//--------------------------------------------------------- + +void ScrollScale::setPos ( unsigned pos ) +{ + + scroll->setValue ( pos ); +} + +//--------------------------------------------------------- +// setPosNoLimit +// pos in pixel +//--------------------------------------------------------- + +void ScrollScale::setPosNoLimit ( unsigned pos ) +{ + //printf ( "ScrollScale::setPosNoLimit pos:%d scaleVal:%d offset ticks:%d\n", pos, scaleVal, pos2offset ( pos ) ); + + if((int)pos > scroll->maxValue()) + scroll->setMaxValue(pos); + scroll->setValue(pos); +} + +//--------------------------------------------------------- +// resizeEvent +//--------------------------------------------------------- + +void ScrollScale::resizeEvent ( QResizeEvent* ) +{ + setScale ( scale->value() ); +} + +//--------------------------------------------------------- +// ScrollScale +//--------------------------------------------------------- + +ScrollScale::ScrollScale ( int s1, int s2, int cs, int max_, Qt::Orientation o, + QWidget* parent, int min_, bool inv, double bas ) + : QWidget ( parent ) +{ + noScale = false; + _page = 0; + _pages = 1; + pageButtons = false; + showMagFlag = true; + scaleMin = s1; + scaleMax = s2; + minVal = min_; + maxVal = max_; + up = 0; + down = 0; + logbase = bas; + invers = inv; + + double min, max; + if ( scaleMin < 0 ) + min = 1.0/ ( -scaleMin ); + else + min = double ( scaleMin ); + + if ( scaleMax < 0 ) + max = 1.0/ ( -scaleMax ); + else + max = double ( scaleMax ); + + double cmag = ( cs < 0 ) ? ( 1.0/ ( -cs ) ) : double ( cs ); + double diff = max-min; + + // + // search initial value for slider + // + int cur = 512; + int delta = 256; + for ( int i = 0; i < 8; ++i ) + { + int tryVal = invers ? 1025 - cur : cur; + double fkt = double ( tryVal ) /1024.0; + double v = ( pow ( logbase, fkt )-1 ) / ( logbase-1 ); + double scale = invers ? ( max - v * diff ) : ( min + v * diff ); + if ( scale == cmag ) // not very likely + break; + //printf("iteration %d invers:%d soll %f(cur:%d) - ist %f\n", i, invers, scale, cur, cmag); + int dd = invers ? -delta : delta; + cur += ( scale < cmag ) ? dd : -dd; + delta/=2; + } + + scale = new QSlider ( 0, 1024, 1, cur, o, this ); + scroll = new QScrollBar ( o, this ); + setScale ( cur ); + + if ( o == Qt::Horizontal ) + { + box = new Q3BoxLayout ( this, Q3BoxLayout::LeftToRight ); + scale->setMaximumWidth ( 70 ); + scroll->setMinimumWidth ( 50 ); + } + else + { + box = new Q3BoxLayout ( this, Q3BoxLayout::Down ); + scroll->setMinimumHeight ( 50 ); + scale->setMaximumHeight ( 70 ); + } + box->addWidget ( scroll, 10 ); + box->addWidget ( scale, 5 ); + connect ( scale, SIGNAL ( valueChanged ( int ) ), SLOT ( setScale ( int ) ) ); + connect ( scale, SIGNAL ( valueChanged ( int ) ), SIGNAL ( lscaleChanged ( int ) ) ); + connect ( scroll, SIGNAL ( valueChanged ( int ) ), SIGNAL ( scrollChanged ( int ) ) ); +} + +//--------------------------------------------------------- +// setPageButtons +//--------------------------------------------------------- + +void ScrollScale::setPageButtons ( bool flag ) +{ + if ( flag == pageButtons ) + return; + + if ( flag ) + { + if ( up == 0 ) + { + up = new QToolButton ( this ); + up->setPixmap ( * ( upIcon ) ); + down = new QToolButton ( this ); + down->setPixmap ( * ( downIcon ) ); + pageNo = new QLabel ( this ); + QString s; + s.setNum ( _page+1 ); + pageNo->setText ( s ); + QToolTip::add ( down, tr ( "next page" ) ); + QToolTip::add ( up, tr ( "previous page" ) ); + QToolTip::add ( pageNo, tr ( "current page number" ) ); + box->insertWidget ( 1, up ); + box->insertWidget ( 2, down ); + box->insertSpacing ( 3, 5 ); + box->insertWidget ( 4, pageNo ); + box->insertSpacing ( 5, 5 ); + connect ( up, SIGNAL ( clicked() ), SLOT ( pageUp() ) ); + connect ( down, SIGNAL ( clicked() ), SLOT ( pageDown() ) ); + } + up->show(); + down->show(); + pageNo->show(); + if ( _page == ( _pages-1 ) ) + down->setEnabled ( false ); + if ( _page == 0 ) + up->setEnabled ( false ); + } + else + { + up->hide(); + down->hide(); + } + pageButtons = flag; +} + +//--------------------------------------------------------- +// showMag +//--------------------------------------------------------- + +void ScrollScale::showMag ( bool flag ) +{ + showMagFlag = flag; + if ( flag ) + scale->show(); + else + scale->hide(); + box->activate(); +} + +//--------------------------------------------------------- +// offset +//--------------------------------------------------------- +int ScrollScale::offset() +{ + return pos2offset ( scroll->value() ); +} + +//--------------------------------------------------------- +// pos2offset +//--------------------------------------------------------- +int ScrollScale::pos2offset ( int pos ) +{ + if ( scaleVal < 1 ) + return pos * ( -scaleVal ) + scaleVal/2; + else + return pos / scaleVal; +} + +//--------------------------------------------------------- +// setOffset +// val in tick +//--------------------------------------------------------- + +void ScrollScale::setOffset ( int val ) +{ + int i = ( scroll->orientation() == Qt::Horizontal ) ? width() : height(); + int pos, max; + + if ( scaleVal < 1 ) + { + pos = ( val-scaleVal/2 ) / ( -scaleVal ); + max = ( maxVal-scaleVal-1 ) / ( -scaleVal ) - i; + } + else + { + pos = val * scaleVal; + max = maxVal * scaleVal - i; + } + if ( pos > max ) + { + int min; + if ( scaleVal < 1 ) + { + maxVal = ( pos + width() ) * ( -scaleVal ); + min = ( minVal-scaleVal/2 ) / ( -scaleVal ); + max = ( maxVal-scaleVal/2 ) / ( -scaleVal ) - i; + } + else + { + maxVal = ( pos + width() + scaleVal/2 ) /scaleVal; + min = minVal * scaleVal; + max = maxVal * scaleVal - i; + } + + if ( max < 0 ) + max = 0; + if ( min < 0 ) + min = 0; + if ( min > max ) + max = min; + scroll->setRange ( min, max ); + } + + setPos ( pos ); +} + +//--------------------------------------------------------- +// pageUp +// goto previous page +//--------------------------------------------------------- + +void ScrollScale::pageUp() +{ + if ( _page ) + { + --_page; + emit newPage ( _page ); + QString s; + s.setNum ( _page+1 ); + pageNo->setText ( s ); + if ( _page == 0 ) + up->setEnabled ( false ); + if ( _page == ( _pages-2 ) ) + down->setEnabled ( true ); + } +} + +//--------------------------------------------------------- +// pageDown +// goto next page +//--------------------------------------------------------- + +void ScrollScale::pageDown() +{ + if ( _page + 1 < _pages ) + { + ++_page; + emit newPage ( _page ); + QString s; + s.setNum ( _page+1 ); + pageNo->setText ( s ); + if ( _page == ( _pages-1 ) ) + down->setEnabled ( false ); + if ( _page == 1 ) + up->setEnabled ( true ); + } +} + +//--------------------------------------------------------- +// setPages +//--------------------------------------------------------- + +void ScrollScale::setPages ( int n ) +{ + _pages = n; + if ( _page >= _pages ) + { + _page = _pages-1; + emit newPage ( _page ); + QString s; + s.setNum ( _page+1 ); + pageNo->setText ( s ); + } + up->setEnabled ( _page ); + down->setEnabled ( _page < ( _pages-1 ) ); +} + +int ScrollScale::pos() const +{ + return scroll->value(); +} + +int ScrollScale::mag() const +{ + return scale->value(); +} + +/** + * Hardcoded hackish function that corresponds to the values used for the scrollscales in PianoRoll and DrumEditor + * since I couldn't easily create any inverse function from the [0,1024]-range to detect where a zoom actually occurs + * (mg) + */ +int ScrollScale::getQuickZoomLevel(int mag) +{ + if (mag == 0) + return 0; + + for (int i=0; i<24; i++) { + int val1 = ScrollScale::convertQuickZoomLevelToMag(i); + int val2 = ScrollScale::convertQuickZoomLevelToMag(i + 1); + if (mag > val1 && mag <= val2) + return i + 1; + } + + return -1; + +} + +/** + * Function returning the boundary values for a zoom change, hardcoded corresponding to the values used in PianoRoll + * and DrumEditor + */ +int ScrollScale::convertQuickZoomLevelToMag(int zoomlevel) +{ + int vals[] = { 0, 1, 15, 30, 46, 62, 80, 99, 119, 140, 163, + 187, 214, 242, 274, 308, 346, 388, 436, 491, 555, 631, + 726, 849, 1024 }; + + return vals[zoomlevel]; +} + diff --git a/muse2/muse/widgets/scrollscale.h b/muse2/muse/widgets/scrollscale.h new file mode 100644 index 00000000..572e5906 --- /dev/null +++ b/muse2/muse/widgets/scrollscale.h @@ -0,0 +1,90 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: scrollscale.h,v 1.2.2.3 2009/11/04 17:43:26 lunar_shuttle Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __SCROLLSCALE_H__ +#define __SCROLLSCALE_H__ + +#include +#include +//Added by qt3to4: +#include +#include +#include + +// class QSlider; +class QScrollBar; +class Q3BoxLayout; +class QToolButton; +class QLabel; + +//--------------------------------------------------------- +// ScrollScale +//--------------------------------------------------------- + +class ScrollScale : public QWidget { + QSlider* scale; + QScrollBar* scroll; + int minVal, maxVal; + int scaleVal, scaleMin, scaleMax; + bool showMagFlag; + Q3BoxLayout* box; + bool noScale; + bool pageButtons; + int _page; + int _pages; + QToolButton* up; + QToolButton* down; + QLabel* pageNo; + bool invers; + double logbase; + + virtual void resizeEvent(QResizeEvent*); + Q_OBJECT + + private slots: + void pageUp(); + void pageDown(); + + public slots: + void setPos(unsigned); + void setPosNoLimit(unsigned); + void setMag(int); + void setOffset(int val); + void setScale(int); + + signals: + void scaleChanged(int); + void lscaleChanged(int); + void scrollChanged(int); + void newPage(int); + + public: + ScrollScale(int, int, int, int max, Qt::Orientation, + QWidget*, int min = 0, bool i=false, double vv = 10.0); + int xmag() const { return scale->value(); } + void setXmag(int val) { scale->setValue(val); } + void setRange(int, int); + void showMag(bool); + void setNoScale(bool flag) { noScale = flag; } + void setPageButtons(bool flag); + void setPage(int n) { _page = n; } + int page() const { return _page; } + int pages() const { return _pages; } + void setPages(int n); + int pos() const; + int mag() const; + int getScaleValue() const { return scaleVal; } + void range(int* b, int* e) const { *b = minVal; *e = maxVal; } + + int offset(); + int pos2offset(int pos); + static int getQuickZoomLevel(int mag); + static int convertQuickZoomLevelToMag(int zoomlvl); + }; + +#endif + diff --git a/muse2/muse/widgets/section.h b/muse2/muse/widgets/section.h new file mode 100644 index 00000000..7aaa4778 --- /dev/null +++ b/muse2/muse/widgets/section.h @@ -0,0 +1,19 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: section.h,v 1.1.1.1 2003/10/27 18:54:27 wschweer Exp $ +// (C) Copyright 2002 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __SECTION_H__ +#define __SECTION_H__ + +struct Section { + int offset; + unsigned len; + int voff; + int val; + }; + +#endif + diff --git a/muse2/muse/widgets/shortcutcapturedialog.cpp b/muse2/muse/widgets/shortcutcapturedialog.cpp new file mode 100644 index 00000000..c33b32bf --- /dev/null +++ b/muse2/muse/widgets/shortcutcapturedialog.cpp @@ -0,0 +1,87 @@ +// +// C++ Implementation: shortcutcapturedialog +// +// Description: +// Dialog window for capturing keyboard shortcuts +// +// Author: Mathias Lundgren , (C) 2003 +// +// Copyright: Mathias Lundgren (lunar_shuttle@users.sourceforge.net) (C) 2003 +// +// +#include "shortcutcapturedialog.h" +#include "shortcuts.h" +#include +#include +#include +#include +//Added by qt3to4: +#include + +ShortcutCaptureDialog::ShortcutCaptureDialog(QWidget* parent, const char* name, int index) + : ShortcutCaptureDialogBase(parent, name, true) + { + QKeySequence q = QKeySequence(shortcuts[index].key); + oshrtLabel->setText(q); + connect(okButton, SIGNAL( clicked() ), this, SLOT( apply() ) ); + connect(cancelButton, SIGNAL(pressed()), this, SLOT(cancel())); + shortcutindex = index; + grabKeyboard(); + okButton->setText(tr("Ok")); + cancelButton->setText(tr("Cancel")); + } + +ShortcutCaptureDialog::~ShortcutCaptureDialog() + { + releaseKeyboard(); + } + +void ShortcutCaptureDialog::keyPressEvent(QKeyEvent* e) + { + bool shift, alt, ctrl, conflict = false, realkey = false; + QString msgString = ""; + int temp_key; + shift = e->state() & Qt::ShiftModifier; + ctrl = e->state() & Qt::ControlModifier; + alt = e->state() & Qt::AltModifier; + //printf("Key total: %d, alt: %d, ctrl: %d shift: %d\n",e->key(), alt, ctrl, shift); + temp_key = e->key(); + temp_key += (shift ? Qt::SHIFT : 0); + temp_key += (ctrl ? Qt::CTRL : 0); + temp_key += (alt ? Qt::ALT : 0); + //printf("Final key assembled: %d\n",temp_key); + + // Check if this is a "real" key that completes a valid shortcut: + int k = e->key(); + if (k < 256 || k == Qt::Key_Enter || k == Qt::Key_Return || (k >= Qt::Key_F1 && k <= Qt::Key_F12) || k == Qt::Key_Home || k == Qt::Key_PageUp + || k == Qt::Key_PageDown || k == Qt::Key_End || k == Qt::Key_Insert || k == Qt::Key_Delete) { + key = temp_key; + realkey = true; + QKeySequence q = QKeySequence(key); + QString keyString = q; + if (keyString != QString::null) + nshrtLabel->setText(q); + + // Check against conflicting shortcuts + for (int i=0; i < SHRT_NUM_OF_ELEMENTS; i++) { + if (shortcuts[i].key == key && (shortcuts[i].type & (shortcuts[shortcutindex].type | GLOBAL_SHRT | INVIS_SHRT))) { + msgString = tr("Shortcut conflicts with ") + QString(shortcuts[i].descr); + conflict = true; + break; + } + } + } + messageLabel->setText(msgString); + okButton->setEnabled(conflict == false && realkey); + if (!realkey) + nshrtLabel->setText(tr("Undefined")); + + + } + +void ShortcutCaptureDialog::apply() + { + //return the shortcut to configurator widget: + done(key); + } + diff --git a/muse2/muse/widgets/shortcutcapturedialog.h b/muse2/muse/widgets/shortcutcapturedialog.h new file mode 100644 index 00000000..5a16a90f --- /dev/null +++ b/muse2/muse/widgets/shortcutcapturedialog.h @@ -0,0 +1,35 @@ +// +// C++ Interface: shortcutcapturedialog +// +// Description: +// Dialog window for capturing keyboard shortcuts +// +// Author: Mathias Lundgren , (C) 2003 +// +// Copyright: Mathias Lundgren (lunar_shuttle@users.sourceforge.net) (C) 2003 +// +// + +#include "shortcuts.h" +#include "filedialog.h" +#include "shortcutcapturedialogbase.h" +//Added by qt3to4: +#include + +class ShortcutCaptureDialog : public ShortcutCaptureDialogBase + { + Q_OBJECT + private: + int shortcutindex; + void keyPressEvent(QKeyEvent* e); + int key; + + private slots: + void apply(); + void cancel() { reject(); }; + + public: + ShortcutCaptureDialog(QWidget* parent, const char* name = 0, int index=0); + ~ShortcutCaptureDialog(); + }; + diff --git a/muse2/muse/widgets/shortcutcapturedialogbase.ui b/muse2/muse/widgets/shortcutcapturedialogbase.ui new file mode 100644 index 00000000..031c86e1 --- /dev/null +++ b/muse2/muse/widgets/shortcutcapturedialogbase.ui @@ -0,0 +1,134 @@ + +ShortcutCaptureDialogBase + + + ShortcutCaptureDialogBase + + + + 0 + 0 + 323 + 285 + + + + Enter shortcut sequence + + + true + + + + unnamed + + + + descrLabel + + + Press keys to enter shortcut sequence! + + + AlignCenter + + + + + messageLabel + + + + + + + + layout11 + + + + unnamed + + + + oshrtTextLabel + + + Old shortcut: + + + + + oshrtLabel + + + Undefined + + + + + + + layout12 + + + + unnamed + + + + nshrtTextLabel + + + New shortcut: + + + + + nshrtLabel + + + Undefined + + + + + + + layout7 + + + + unnamed + + + + okButton + + + false + + + OK + + + + + + + + cancelButton + + + Cancel + + + + + + + + + + + diff --git a/muse2/muse/widgets/shortcutconfig.cpp b/muse2/muse/widgets/shortcutconfig.cpp new file mode 100644 index 00000000..b3288e6d --- /dev/null +++ b/muse2/muse/widgets/shortcutconfig.cpp @@ -0,0 +1,115 @@ +// +// C++ Implementation: shortcutconfig +// +// Description: +// Dialog for configuring keyboard shortcuts +// +// Author: Mathias Lundgren , (C) 2003 +// +// Copyright: Mathias Lundgren (lunar_shuttle@users.sourceforge.net) (C) 2003 +// +// +#include +#include +//Added by qt3to4: +#include +#include "shortcutconfig.h" +#include "shortcutcapturedialog.h" +#include "shortcuts.h" + +ShortcutConfig::ShortcutConfig(QWidget* parent, const char* name) + : ShortcutConfigBase(parent, name, true) + { + connect(cgListView, SIGNAL(selectionChanged(Q3ListViewItem* )), + this, SLOT(categorySelChanged(Q3ListViewItem*))); + connect(scListView, SIGNAL(selectionChanged(Q3ListViewItem* )), + this, SLOT(shortcutSelChanged(Q3ListViewItem*))); + connect(defineButton, SIGNAL(pressed()), this, SLOT(assignShortcut())); + connect(clearButton, SIGNAL(pressed()), this, SLOT(clearShortcut())); + connect(applyButton, SIGNAL(pressed()), this, SLOT(assignAll())); + + current_category = ALL_SHRT; + cgListView->setSorting(SHRT_CATEGORY_COL, -1); + _config_changed = false; + + //Fill up category listview: + SCListViewItem* newItem; + for (int i=0; i < SHRT_NUM_OF_CATEGORIES; i++) { + newItem = new SCListViewItem(cgListView, i); + newItem->setText(SHRT_CATEGORY_COL, shortcut_category[i].name); + cgListView->insertItem(newItem); + } + updateSCListView(); + } + +void ShortcutConfig::updateSCListView(int category) + { + scListView->clear(); + SCListViewItem* newItem; + for (int i=0; i < SHRT_NUM_OF_ELEMENTS; i++) { + if (shortcuts[i].type & category) { + newItem = new SCListViewItem(scListView, i); + newItem->setText(SHRT_DESCR_COL, tr(shortcuts[i].descr)); + QKeySequence key = QKeySequence(shortcuts[i].key); + newItem->setText(SHRT_SHRTCUT_COL, key); + } + } + } + +void ShortcutConfig::assignShortcut() + { + SCListViewItem* active = (SCListViewItem*) scListView->selectedItem(); + int shortcutindex = active->getIndex(); + ShortcutCaptureDialog* sc = new ShortcutCaptureDialog(this, "sccapture", shortcutindex); + int key = sc->exec(); + delete(sc); + if (key != Rejected) { + shortcuts[shortcutindex].key = key; + QKeySequence keySequence = QKeySequence(key); + active->setText(SHRT_SHRTCUT_COL, keySequence); + _config_changed = true; + } + clearButton->setEnabled(true); + defineButton->setDown(false); + } + +void ShortcutConfig::clearShortcut() + { + SCListViewItem* active = (SCListViewItem*) scListView->selectedItem(); + int shortcutindex = active->getIndex(); + shortcuts[shortcutindex].key = 0; //Cleared + active->setText(SHRT_SHRTCUT_COL,""); + clearButton->setDown(false); + clearButton->setEnabled(false); + _config_changed = true; + } + +void ShortcutConfig::categorySelChanged(Q3ListViewItem* i) + { + SCListViewItem* item = (SCListViewItem*) i; + current_category = shortcut_category[item->getIndex()].id_flag; + updateSCListView(current_category); + } + +void ShortcutConfig::shortcutSelChanged(Q3ListViewItem* in_item) + { + defineButton->setEnabled(true); + SCListViewItem* active = (SCListViewItem*) in_item; + int index = active->getIndex(); + if (shortcuts[index].key != 0) + clearButton->setEnabled(true); + else + clearButton->setEnabled(false); + } + +void ShortcutConfig::closeEvent(QCloseEvent* /*e*/) // prevent compiler warning : unused variable + { + done(_config_changed); + } + + +void ShortcutConfig::assignAll() + { + applyButton->setDown(false); + done(_config_changed); + } diff --git a/muse2/muse/widgets/shortcutconfig.h b/muse2/muse/widgets/shortcutconfig.h new file mode 100644 index 00000000..b1f2857f --- /dev/null +++ b/muse2/muse/widgets/shortcutconfig.h @@ -0,0 +1,61 @@ +// +// 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 "shortcutconfigbase.h" +#include +//Added by qt3to4: +#include + +#define SHRT_CATEGORY_COL 0 +enum + { + SHRT_DESCR_COL = 0, + SHRT_SHRTCUT_COL + }; + +class SCListViewItem : public Q3ListViewItem { + private: + int index; + + public: + SCListViewItem(Q3ListView* parent, int i) + : Q3ListViewItem(parent), index(i) { } + int getIndex() { return index; } + +}; + + +class ShortcutConfig : public ShortcutConfigBase { + Q_OBJECT + private: + int current_category; + void updateSCListView(int category); + void updateSCListView() { updateSCListView(current_category); } + void closeEvent(QCloseEvent *e); + + private slots: + void categorySelChanged(Q3ListViewItem*); + void shortcutSelChanged(Q3ListViewItem*); + void assignShortcut(); + void clearShortcut(); + void assignAll(); + + + public: + ShortcutConfig(QWidget* parent, const char* name = 0); + bool _config_changed; + +}; + +#endif diff --git a/muse2/muse/widgets/shortcutconfigbase.ui b/muse2/muse/widgets/shortcutconfigbase.ui new file mode 100644 index 00000000..2947106c --- /dev/null +++ b/muse2/muse/widgets/shortcutconfigbase.ui @@ -0,0 +1,207 @@ + +ShortcutConfigBase + + + ShortcutConfigBase + + + + 0 + 0 + 466 + 403 + + + + Configure Keyboard Shortcuts + + + true + + + + unnamed + + + + groupBox3 + + + 0 + + + 0 + + + + + + + unnamed + + + 0 + + + 3 + + + + + Shortcut Category + + + true + + + false + + + + cgListView + + + + 1 + 7 + 1 + 0 + + + + + 105 + 200 + + + + + + + Description + + + true + + + true + + + + + Shortcut + + + true + + + true + + + + scListView + + + + 5 + 7 + 2 + 0 + + + + + 170 + 230 + + + + + + + + layout5 + + + + unnamed + + + + spacer3 + + + Horizontal + + + Expanding + + + + 150 + 21 + + + + + + clearButton + + + false + + + &Clear + + + Alt+C + + + + + defineButton + + + false + + + &Define + + + Alt+D + + + + + spacer2 + + + Horizontal + + + Expanding + + + + 30 + 21 + + + + + + applyButton + + + &Apply + + + Alt+A + + + + + + + + diff --git a/muse2/muse/widgets/sigedit.cpp b/muse2/muse/widgets/sigedit.cpp new file mode 100644 index 00000000..4d8c30b4 --- /dev/null +++ b/muse2/muse/widgets/sigedit.cpp @@ -0,0 +1,755 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: sigedit.cpp,v 1.1.1.1.2.1 2004/12/28 23:23:51 lunar_shuttle Exp $ +// (C) Copyright 2001 Werner Schweer (ws@seh.de) +//========================================================= + +#include "sigedit.h" + +#include +#include +#include +#include +#include +#include +#include +#include +//Added by qt3to4: +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "sig.h" + +extern int mtcType; + +bool Sig::isValid() const +{ + if((z < 1) || (z > 63)) + return false; + + switch(n) + { + case 1: + case 2: + case 3: + case 4: + case 8: + case 16: + case 32: + case 64: + case 128: + return true; + default: + return false; + } +} + + +//--------------------------------------------------------- +// NumberSection +//--------------------------------------------------------- + +class NumberSection + { + int selstart; + int selend; + + public: + NumberSection(int selStart = 0, int selEnd = 0) + : selstart(selStart), selend(selEnd ) {} + int selectionStart() const { return selstart; } + void setSelectionStart(int s) { selstart = s; } + int selectionEnd() const { return selend; } + void setSelectionEnd( int s ) { selend = s; } + int width() const { return selend - selstart; } + }; + +//--------------------------------------------------------- +// SigEditor +//--------------------------------------------------------- + +class SigEditor : public QWidget + { + SigEdit* cw; + bool frm; + QPixmap *pm; + int focusSec; + Q3ValueList sections; + int offset; + + int section(const QPoint&); + + protected: + void init(); + bool event(QEvent *e); + void resizeEvent(QResizeEvent*); + void paintEvent(QPaintEvent*); + void mousePressEvent(QMouseEvent *e); + void applyFocusSelection() {} + + public: + SigEditor(SigEdit* parent, const char* name); + ~SigEditor(); + + void setControlWidget(SigEdit * widget); + SigEdit* controlWidget() const; + + int focusSection() const { return focusSec; } + + bool setFocusSection(int s); + void appendSection(const NumberSection& sec); + void clearSections(); + void setSectionSelection(int sec, int selstart, int selend); + bool eventFilter(QObject *o, QEvent *e); + }; + +//--------------------------------------------------------- +// section +//--------------------------------------------------------- + +int SigEditor::section(const QPoint& pt) + { + if (pm->isNull()) + return -1; + QPainter p(pm); + int fw = frm ? style()->pixelMetric(QStyle::PM_DefaultFrameWidth) : 0; + int x = 2 + fw; + int y = 0; + int w = width(); + int h = height(); + for (unsigned int i = 0; i < sections.count(); ++i) { + QString s = cw->sectionFormattedText(i); + QRect bb = p.boundingRect(x, y, w, h, Qt::AlignVCenter|Qt::AlignLeft, s); + int nx = bb.x() + bb.width(); + if (pt.x() >= x && pt.x() < nx) + return i; + x = nx; + if (i < sections.count()-1) { + QString s("/"); + p.drawText(x, y, w, h, Qt::AlignVCenter|Qt::AlignLeft, s, -1, &bb); + x = bb.x() + bb.width(); + } + } + return -1; + } + +//--------------------------------------------------------- +// SigEditor +//--------------------------------------------------------- + +SigEditor::SigEditor(SigEdit* parent, const char* name) + : QWidget(parent, name) + { + cw = parent; + frm = true; + focusSec = 0; + pm = new QPixmap; + offset = 0; + init(); + } + +//--------------------------------------------------------- +// ~SigEditor +//--------------------------------------------------------- + +SigEditor::~SigEditor() + { + delete pm; + } + +//--------------------------------------------------------- +// init +//--------------------------------------------------------- + +void SigEditor::init() + { + setBackgroundMode(Qt::PaletteBase); + setFocusSection(-1); + setKeyCompression(true); + installEventFilter(this); + setFocusPolicy(Qt::WheelFocus); + } + +//--------------------------------------------------------- +// event +//--------------------------------------------------------- + +bool SigEditor::event(QEvent *e) + { + if (e->type() == QEvent::FocusIn || e->type() == QEvent::FocusOut) { + repaint( rect(), false); + } + else if (e->type() == QEvent::ShortcutOverride) { + QKeyEvent* ke = (QKeyEvent*) e; + switch (ke->key()) { + case Qt::Key_Delete: + case Qt::Key_Backspace: + case Qt::Key_Up: + case Qt::Key_Down: + case Qt::Key_Left: + case Qt::Key_Right: + ke->accept(); + default: + break; + } + } + return QWidget::event(e); + } + +void SigEditor::resizeEvent(QResizeEvent *e) + { + pm->resize(e->size()); + QWidget::resizeEvent(e); + } + +//--------------------------------------------------------- +// paintEvent +//--------------------------------------------------------- + +void SigEditor::paintEvent(QPaintEvent *) + { + if (pm->isNull()) + return; + + const QColorGroup & cg = colorGroup(); + QPainter p(pm); + p.setPen(colorGroup().text()); + QBrush bg = cg.brush(QColorGroup::Base); + + int fw = frm ? style()->pixelMetric(QStyle::PM_DefaultFrameWidth) : 0; + int x = 2 + fw; + int y = 0; + int w = width(); + int h = height(); + p.fillRect(0, 0, w, h, bg); + + for (unsigned int i = 0; i < sections.count(); ++i) { + QRect bb; + QString s = cw->sectionFormattedText(i); + + if (hasFocus() && (int(i) == focusSec)) { + QBrush bg = cg.brush(QColorGroup::Highlight); + QRect r = p.boundingRect(x, y, w, h, Qt::AlignVCenter|Qt::AlignLeft, s, -1); + p.setPen(colorGroup().highlightedText()); + p.fillRect(r, bg); + } + else + p.setPen(colorGroup().text()); + p.drawText(x, y, w, h, Qt::AlignVCenter|Qt::AlignLeft, s, -1, &bb); + x = bb.x() + bb.width(); + if (i < sections.count()-1) { + QString s("/"); + p.drawText(x, y, w, h, Qt::AlignVCenter|Qt::AlignLeft, s, -1, &bb); + x = bb.x() + bb.width(); + } + } + p.end(); + bitBlt(this, 0, 0, pm); + } + +//--------------------------------------------------------- +// mousePressEvent +//--------------------------------------------------------- + +void SigEditor::mousePressEvent(QMouseEvent *e) + { + QPoint p(e->pos().x(), 0); + int sec = section(p); + if (sec != -1) { + cw->setFocusSection(sec); + repaint(rect(), false); + } + } + +//--------------------------------------------------------- +// eventFilter +//--------------------------------------------------------- + +bool SigEditor::eventFilter(QObject *o, QEvent *e) + { + if (o != this) + return false; + if (e->type() != QEvent::KeyPress ) + return false; + + QKeyEvent *ke = (QKeyEvent*)e; + switch (ke->key()) { + case Qt::Key_Right: + if (unsigned(focusSec) <= sections.count()) { + if (cw->setFocusSection(focusSec+1)) + repaint(rect(), false); + } + return true; + case Qt::Key_Left: + if (focusSec > 0 ) { + if (cw->setFocusSection(focusSec-1)) + repaint(rect(), false); + } + return true; + case Qt::Key_Up: + cw->stepUp(); + return true; + case Qt::Key_Down: + cw->stepDown(); + return true; + case Qt::Key_Backspace: + case Qt::Key_Delete: + cw->removeLastNumber(focusSec); + return true; + case Qt::Key_Enter: + case Qt::Key_Return: + cw->enterPressed(); + return true; + default: + QString txt = ke->text(); + if (!txt.isEmpty() && txt[0] == '/') { + // do the same thing as KEY_RIGHT when the user presses the separator key + if (focusSec < (signed)(sections.count())) { + if (cw->setFocusSection(focusSec+1)) + repaint(rect(), false); + } + return true; + } + int num = txt[0].digitValue(); + + //printf("SigEditor::eventFilter num:%d\n", num); + + if (num != -1) { + cw->addNumber(focusSec, num); + return true; + } + } + return false; + } + +void SigEditor::appendSection(const NumberSection& sec) + { + sections.append(sec); + } +void SigEditor::clearSections() + { + sections.clear(); + } + +//--------------------------------------------------------- +// setSectionSelection +//--------------------------------------------------------- + +void SigEditor::setSectionSelection(int secNo, int selstart, int selend) + { + if (secNo < 0 || secNo > (int)sections.count()) + return; + sections[secNo].setSelectionStart(selstart); + sections[secNo].setSelectionEnd(selend); + } + +//--------------------------------------------------------- +// setFocusSection +//--------------------------------------------------------- + +bool SigEditor::setFocusSection(int idx) + { + if (idx > (int)sections.count()-1 || idx < 0) + return false; + if (idx != focusSec) { + focusSec = idx; + applyFocusSelection(); + return true; + } + return false; + } + +//--------------------------------------------------------- +// SigEdit +//--------------------------------------------------------- + +SigEdit::SigEdit(QWidget* parent, const char* name) + : QWidget(parent, name) + { + init(); + updateButtons(); + } + +SigEdit::~SigEdit() + { + } + +//--------------------------------------------------------- +// init +//--------------------------------------------------------- + +void SigEdit::init() + { + ed = new SigEditor(this, "pos editor"); + controls = new Q3SpinWidget(this, "pos edit controls"); + controls->setEditWidget(ed); + setFocusProxy(ed); + connect(controls, SIGNAL(stepUpPressed()), SLOT(stepUp())); + connect(controls, SIGNAL(stepDownPressed()), SLOT(stepDown())); + connect(this, SIGNAL(valueChanged(int,int)),SLOT(updateButtons())); + + overwrite = false; + timerId = 0; + typing = false; + changed = false; + adv = false; + + sec[0].offset = 0; + sec[0].len = 2; + sec[0].val = 4; + sec[0].voff = 0; + sec[1].offset = 3; + sec[1].len = 3; + sec[1].val = 4; + sec[1].voff = 0; + ed->clearSections(); + ed->appendSection(NumberSection(0,0)); + ed->appendSection(NumberSection(0,0)); + setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed)); + } + +//--------------------------------------------------------- +// setValue +//--------------------------------------------------------- + +void SigEdit::setValue(const Sig& sig) + { + sec[0].val = sig.z; + sec[1].val = sig.n; + changed = false; + ed->repaint(ed->rect(), false); + } + +void SigEdit::setValue(const QString& s) + { + int z, n; + sscanf(s.latin1(), "%d/%d", &z, &n); + Sig sig(z, n); + setValue(sig); + } + +Sig SigEdit::sig() const + { + Sig sig(sec[0].val, sec[1].val); + return sig; + } + +bool SigEdit::event(QEvent *e) + { + if (e->type() == QEvent::FocusOut) { + typing = false; + if (changed) { + emit valueChanged(sig().z, sig().n); + changed = false; + } + } + return QWidget::event(e); + } + +void SigEdit::timerEvent(QTimerEvent *) + { + overwrite = true; + } + +//--------------------------------------------------------- +// stepUp +//--------------------------------------------------------- + +void SigEdit::stepUp() + { + bool accepted = false; + int secNo = ed->focusSection(); + int val = sec[secNo].val; + if (secNo == 0) { + if (val < 63) { + ++val; + accepted = true; + } + } + else { + accepted = true; + switch(val) { + case 1: val = 2; break; + case 2: val = 3; break; + case 3: val = 4; break; + case 4: val = 8; break; + case 8: val = 16; break; + case 16: val = 32; break; + case 32: val = 64; break; + case 64: val = 128; break; + case 128: accepted = false; break; + } + } + if (accepted) { + setSec(secNo, val); + changed = true; + emit valueChanged(sec[0].val, sec[1].val); + } + ed->repaint(ed->rect(), false); + } + +//--------------------------------------------------------- +// stepDown +//--------------------------------------------------------- + +void SigEdit::stepDown() + { + bool accepted = false; + int secNo = ed->focusSection(); + int val = sec[secNo].val; + if (secNo == 0) { + if (val > 1) { + --val; + accepted = true; + } + } + else { + accepted = true; + switch(val) { + case 1: accepted = false; break; + case 2: val = 1; break; + case 3: val = 2; break; + case 4: val = 3; break; + case 8: val = 4; break; + case 16: val = 8; break; + case 32: val = 16; break; + case 64: val = 32; break; + case 128: val = 64; break; + } + } + if (accepted) { + setSec(secNo, val); + changed = true; + emit valueChanged(sec[0].val, sec[1].val); + } + ed->repaint(ed->rect(), false); + } + +//--------------------------------------------------------- +// sectionFormattedText +// Returns the formatted number for section sec. +//--------------------------------------------------------- + +QString SigEdit::sectionFormattedText(int secNo) + { + QString txt = sectionText(secNo); + + int so = sec[secNo].offset; + int len = sec[secNo].len; + int eo = so + len; + + if (typing && secNo == ed->focusSection()) + ed->setSectionSelection(secNo, eo - txt.length(), eo); + else + ed->setSectionSelection(secNo, so, eo); + if (secNo == 0) + txt = txt.rightJustify(len, ' '); +// else +// txt = txt.leftJustify(len, ' '); + return txt; + } + +//--------------------------------------------------------- +// setFocusSection +//--------------------------------------------------------- + +bool SigEdit::setFocusSection(int s) + { + if (s != ed->focusSection()) { + killTimer(timerId); + overwrite = true; + typing = false; + int so = sec[s].offset; + int eo = so + sec[s].len; + ed->setSectionSelection(s, so, eo); + if (changed) { + emit valueChanged(sig().z, sig().n); + changed = false; + } + } + return ed->setFocusSection(s); + } + +//--------------------------------------------------------- +// setSec +//--------------------------------------------------------- + +void SigEdit::setSec(int secNo, int val) + { + sec[secNo].val = val; + } + +//--------------------------------------------------------- +// sectionText +// Returns the text of section \a sec. +//--------------------------------------------------------- + +QString SigEdit::sectionText(int secNo) + { + return QString::number(sec[secNo].val + sec[secNo].voff); + } + +//--------------------------------------------------------- +// outOfRange +// return true if out of range +//--------------------------------------------------------- + +bool SigEdit::outOfRange(int secNo, int val) const + { + if (secNo == 0) + return ((val < 1) || (val > 63)); + switch (val) { + case 1: + case 2: + case 3: + case 4: + case 8: + case 16: + case 32: + case 64: + case 128: + // Changed p3.3.43 + //return true; + return false; + default: + // Changed p3.3.43 + //return false; + return true; + } + } + +//--------------------------------------------------------- +// addNumber +//--------------------------------------------------------- + +void SigEdit::addNumber(int secNo, int num) + { + if (secNo == -1) + return; + killTimer(timerId); + bool accepted = false; + typing = true; + int voff = sec[secNo].voff; + + QString txt = sectionText(secNo); + + //printf("SigEdit::addNumber secNo:%d num:%d voff:%d txt:%s\n", secNo, num, voff, txt.latin1()); + + if (txt.length() == sec[secNo].len) { + //printf("SigEdit::addNumber txt.length() == sec[secNo].len (%d)\n", sec[secNo].len); + + if (!outOfRange(secNo, num - voff)) { + //printf("SigEdit::addNumber accepted\n"); + + accepted = true; + sec[secNo].val = num - voff; + } + } + else { + //printf("SigEdit::addNumber txt.length() != sec[secNo].len (%d)\n", sec[secNo].len); + + txt += QString::number(num); + int temp = txt.toInt() - voff; + if (outOfRange(secNo, temp)) + { + //printf("SigEdit::addNumber not accepted secNo:%d txt:%s temp:%d\n", secNo, txt.latin1(), temp); + + txt = sectionText(secNo); + } + else { + //printf("SigEdit::addNumber accepted\n"); + + accepted = true; + sec[secNo].val = temp; + } + if (adv && (txt.length() == sec[secNo].len)) { + setFocusSection(ed->focusSection() + 1); + } + } + changed = accepted; + if (accepted) + emit valueChanged(sig().z, sig().n); + timerId = startTimer(qApp->doubleClickInterval()*4); + ed->repaint(ed->rect(), false); + } + +//--------------------------------------------------------- +// removeLastNumber +//--------------------------------------------------------- + +void SigEdit::removeLastNumber(int secNo) + { + if (secNo == -1) + return; + QString txt = QString::number(sec[secNo].val); + txt = txt.mid(0, txt.length() - 1); + sec[secNo].val = txt.toInt() - sec[secNo].voff; + ed->repaint(ed->rect(), false); + } + +//--------------------------------------------------------- +// resizeEvent +//--------------------------------------------------------- + +void SigEdit::resizeEvent(QResizeEvent *) + { + controls->resize(width(), height()); + } + +//--------------------------------------------------------- +// sizeHint +//--------------------------------------------------------- + +QSize SigEdit::sizeHint() const + { + QFontMetrics fm(font()); + int fw = style()->pixelMetric(QStyle::PM_DefaultFrameWidth, 0, this); // ddskrjo + int h = fm.height() + fw * 2; + int w = 2 + controls->upRect().width() + fw * 4; + w += fm.width('9') * 5 + fm.width('/'); + return QSize(w, h).expandedTo(QApplication::globalStrut()); + } + +//--------------------------------------------------------- +// updateButtons +//--------------------------------------------------------- + +void SigEdit::updateButtons() + { + int secNo = ed->focusSection(); + int val = sec[secNo].val; + + bool upEnabled; + bool downEnabled; + + if (secNo == 0) { + upEnabled = val < 63; + downEnabled = val > 1; + } + else { + upEnabled = true; + downEnabled = true; + switch (val) { + case 1: downEnabled = false; break; + case 128: upEnabled = false; break; + } + } + controls->setUpEnabled(isEnabled() && upEnabled); + controls->setDownEnabled(isEnabled() && downEnabled); + } + +//--------------------------------------------------------- +// enterPressed +//! emit returnPressed +//--------------------------------------------------------- +void SigEdit::enterPressed() + { + emit returnPressed(); + } diff --git a/muse2/muse/widgets/sigedit.h b/muse2/muse/widgets/sigedit.h new file mode 100644 index 00000000..f600c44f --- /dev/null +++ b/muse2/muse/widgets/sigedit.h @@ -0,0 +1,90 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: sigedit.h,v 1.1.1.1.2.1 2004/12/28 23:23:51 lunar_shuttle Exp $ +// (C) Copyright 2002 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __SIGEDIT_H__ +#define __SIGEDIT_H__ + +#include +#include +//Added by qt3to4: +#include +#include +#include + +class SigEditor; +class Q3SpinWidget; + +struct Sig { + int z; + int n; + public: + Sig(int _z, int _n) : z(_z), n(_n) {} + bool isValid() const; + }; + +#include "section.h" + +//--------------------------------------------------------- +// SigEdit +//--------------------------------------------------------- + +class SigEdit : public QWidget + { + Q_OBJECT + void init(); + + QString sectionText(int sec); + Section sec[2]; + + bool adv; + bool overwrite; + int timerId; + bool typing; + bool changed; + SigEditor *ed; + Q3SpinWidget* controls; + + private slots: + void stepUp(); + void stepDown(); + + signals: + void valueChanged(int, int); + void returnPressed(); + + protected: + bool event(QEvent *e ); + void timerEvent(QTimerEvent* e); + void resizeEvent(QResizeEvent*); + QString sectionFormattedText(int sec); + void addNumber(int sec, int num); + void removeLastNumber(int sec); + bool setFocusSection(int s); + + virtual bool outOfRange(int, int) const; + virtual void setSec(int, int); + friend class SigEditor; + + protected slots: + void updateButtons(); + + public slots: + virtual void setValue(const Sig& sig); + void setValue(const QString& s); + + public: + SigEdit(QWidget*, const char* = 0); + ~SigEdit(); + + QSize sizeHint() const; + Sig sig() const; + virtual void setAutoAdvance(bool advance) { adv = advance; } + bool autoAdvance() const { return adv; } + void enterPressed(); + }; + +#endif diff --git a/muse2/muse/widgets/siglabel.cpp b/muse2/muse/widgets/siglabel.cpp new file mode 100644 index 00000000..54338ab6 --- /dev/null +++ b/muse2/muse/widgets/siglabel.cpp @@ -0,0 +1,157 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: siglabel.cpp,v 1.1.1.1 2003/10/27 18:54:28 wschweer Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#include "siglabel.h" +#include + +#define TIMER1 400 +#define TIMER2 200 +#define TIMEC 7 +#define TIMER3 100 +#define TIMEC2 20 +#define TIMER4 50 + +#include "globals.h" +//Added by qt3to4: +#include +#include +#include + +//--------------------------------------------------------- +// SigLabel +// edit Signature Values (4/4) +//--------------------------------------------------------- + +SigLabel::SigLabel(int a, int b, QWidget* parent) : QLabel(parent) + { + z = n = 0; + setFocusPolicy(Qt::NoFocus); + setAlignment(Qt::AlignCenter); + setValue(a, b); + } + +//--------------------------------------------------------- +// 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/muse2/muse/widgets/siglabel.h b/muse2/muse/widgets/siglabel.h new file mode 100644 index 00000000..4f93a7b8 --- /dev/null +++ b/muse2/muse/widgets/siglabel.h @@ -0,0 +1,42 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: siglabel.h,v 1.1.1.1 2003/10/27 18:54:56 wschweer Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __SIGLABEL_H__ +#define __SIGLABEL_H__ + +#include +//Added by qt3to4: +#include +#include + +//--------------------------------------------------------- +// 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(int z, int n, QWidget*); + void value(int& a, int& b) const { a = z; b = n; } + void setFrame(bool); + }; +#endif + diff --git a/muse2/muse/widgets/sigscale.cpp b/muse2/muse/widgets/sigscale.cpp new file mode 100644 index 00000000..2735d8d2 --- /dev/null +++ b/muse2/muse/widgets/sigscale.cpp @@ -0,0 +1,152 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: sigscale.cpp,v 1.6 2004/04/11 13:03:32 wschweer Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#include + +#include +#include +//Added by qt3to4: +#include +#include + +#include "globals.h" +#include "midieditor.h" +#include "sigscale.h" +#include "song.h" +#include "gconfig.h" + +//--------------------------------------------------------- +// SigScale +//--------------------------------------------------------- + +SigScale::SigScale(int* r, QWidget* parent, int xs) + : View(parent, xs, 1) + { + QToolTip::add(this, tr("signature scale")); + raster = r; + pos[0] = song->cpos(); + pos[1] = song->lpos(); + pos[2] = song->rpos(); + button = Qt::NoButton; + setMouseTracking(true); + connect(song, SIGNAL(posChanged(int, unsigned, bool)), this, SLOT(setPos(int, unsigned, bool))); + setFixedHeight(18); + } + +//--------------------------------------------------------- +// setPos +//--------------------------------------------------------- + +void SigScale::setPos(int idx, unsigned val, bool) + { + if (val == pos[idx]) + return; + unsigned opos = mapx(pos[idx]); + pos[idx] = val; + if (!isVisible()) + return; + val = mapx(val); + int x = -9; + int w = 18; + if (opos > val) { + w += opos - val; + x += val; + } + else { + w += val - opos; + x += opos; + } + redraw(QRect(x, 0, w, height())); + } + +void SigScale::viewMousePressEvent(QMouseEvent* event) + { + button = event->button(); + viewMouseMoveEvent(event); + } + +void SigScale::viewMouseReleaseEvent(QMouseEvent*) + { + button = Qt::NoButton; + } + +void SigScale::viewMouseMoveEvent(QMouseEvent* event) + { + int x = sigmap.raster(event->x(), *raster); + emit timeChanged(x); + int i; + switch (button) { + case Qt::LeftButton: + i = 0; + break; + case Qt::MidButton: + i = 1; + break; + case Qt::RightButton: + i = 2; + break; + default: + return; + } + Pos p(x, true); + song->setPos(i, p); + } + +//--------------------------------------------------------- +// leaveEvent +//--------------------------------------------------------- + +void SigScale::leaveEvent(QEvent*) + { +// emit timeChanged(MAXINT); + } + +//--------------------------------------------------------- +// draw +//--------------------------------------------------------- + +void SigScale::pdraw(QPainter& p, const QRect& r) + { + int x = r.x(); + int w = r.width(); + int h = height(); + + if (x < 0) + x = 0; + p.setFont(config.fonts[3]); + for (ciSigEvent si = sigmap.begin(); si != sigmap.end(); ++si) { + SigEvent* e = si->second; + int xp = mapx(e->tick); + if (xp > x+w) + break; + if (xp+40 < x) + continue; + p.drawLine(xp, 0, xp, h/2); + p.drawLine(xp, h/2, xp+5, h/2); + QString s; + s.sprintf("%d/%d", e->z, e->n); + p.drawText(xp+8, h-6, s); + } + + //--------------------------------------------------- + // draw location marker + //--------------------------------------------------- + + p.setPen(Qt::red); + int xp = mapx(pos[0]); + if (xp >= x && xp < x+w) + p.drawLine(xp, 0, xp, h); + p.setPen(Qt::blue); + xp = mapx(pos[1]); + if (xp >= x && xp < x+w) + p.drawLine(xp, 0, xp, h); + xp = mapx(pos[2]); + if (xp >= x && xp < x+w) + p.drawLine(xp, 0, xp, h); + } + + diff --git a/muse2/muse/widgets/sigscale.h b/muse2/muse/widgets/sigscale.h new file mode 100644 index 00000000..d66d9a73 --- /dev/null +++ b/muse2/muse/widgets/sigscale.h @@ -0,0 +1,50 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: sigscale.h,v 1.2 2004/01/11 18:55:37 wschweer Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __SIGSCALE_H__ +#define __SIGSCALE_H__ + +#include "view.h" +//Added by qt3to4: +#include +#include + +class QPainter; +class MidiEditor; + +//--------------------------------------------------------- +// SigScale +// Time Signature Scale +//--------------------------------------------------------- + +class SigScale : public View { + Q_OBJECT + int* raster; + unsigned pos[3]; + int button; + + signals: + void posChanged(unsigned, unsigned); + + protected: + virtual void pdraw(QPainter&, const QRect&); + virtual void viewMousePressEvent(QMouseEvent* event); + virtual void viewMouseMoveEvent(QMouseEvent* event); + virtual void viewMouseReleaseEvent(QMouseEvent* event); + virtual void leaveEvent(QEvent*e); + + signals: + void timeChanged(unsigned); + + public slots: + void setPos(int, unsigned, bool); + + public: + SigScale(int* raster, QWidget* parent, int xscale); + }; +#endif + diff --git a/muse2/muse/widgets/slider.cpp b/muse2/muse/widgets/slider.cpp new file mode 100644 index 00000000..f93cadc1 --- /dev/null +++ b/muse2/muse/widgets/slider.cpp @@ -0,0 +1,930 @@ +#include +#include "mmath.h" +#include +#include +#include +//Added by qt3to4: +#include +#include + +#include "slider.h" + +//------------------------------------------------------------- +// Slider - The Slider Widget +// +// Slider is a slider widget which operates on an interval +// of type double. Slider supports different layouts as +// well as a scale. +//------------------------------------------------------------ + +//------------------------------------------------------------ +//.F Slider::Slider +// +// Constructor +// +//.u Syntax: +//.f Slider::Slider(QWidget *parent, const char *name, Orientation orient = Horizontal, ScalePos scalePos = None, int bgStyle = BgTrough) +// +//.u Parameters +//.p +// QWidget *parent -- parent widget +// const char *name -- The Widget's name. Default = 0. +// Orientation Orient -- Orientation of the slider. Can be Slider::Horizontal +// or Slider::Vertical. +// Defaults to Horizontal. +// ScalePos scalePos -- Position of the scale. Can be Slider::None, +// Slider::Left, Slider::Right, Slider::Top, +// or Slider::Bottom. Defaults to Slider::None. +// int bgStyle -- Background style. Slider::BgTrough draws the +// slider button in a trough, Slider::BgSlot draws +// a slot underneath the button. An or-combination of both +// may also be used. The default is Slider::BgTrough. +//------------------------------------------------------------ + +Slider::Slider(QWidget *parent, const char *name, + Qt::Orientation orient, ScalePos scalePos, int bgStyle) + : SliderBase(parent,name) + { + if (bgStyle == BgSlot) { + d_thumbLength = 16; + d_thumbHalf = 8; + d_thumbWidth = 30; + } + else { + d_thumbLength = 30; + d_thumbHalf = 15; + d_thumbWidth = 16; + } + + d_borderWidth = 2; + d_scaleDist = 4; + d_scaleStep = 0.0; + d_scalePos = scalePos; + d_xMargin = 0; + d_yMargin = 0; + d_bgStyle = bgStyle; + + if (bgStyle & BgTrough) + d_bwTrough = d_borderWidth; + else + d_bwTrough = 0; + + d_sliderRect.setRect(0, 0, 8, 8); + setOrientation(orient); + } + +//------------------------------------------------------------ +//.F Slider::~Slider +// Destructor +//.u Syntax +//.f Slider::~Slider() +//------------------------------------------------------------ + +Slider::~Slider() + { + } + +//------------------------------------------------------------ +// +//.F Slider::setBorderWidth +// Change the slider's border width +// +//.u Syntax +//.f void Slider::setBorderWidth(int bd) +// +//.u Parameters +//.p int bd -- border width +// +//------------------------------------------------------------ + +void Slider::setBorderWidth(int bd) +{ + d_borderWidth = qwtMin(qwtMax(bd,0),10); + if (d_bgStyle & BgTrough) + d_bwTrough = d_borderWidth; + else + d_bwTrough = 0; +} + +//---------------------------------------------------- +// +//.F Slider::setThumbLength +// +// Set the slider's thumb length +// +//.u Syntax +// void Slider::setThumbLength(int l) +// +//.u Parameters +//.p int l -- new length +// +//----------------------------------------------------- +void Slider::setThumbLength(int l) +{ + d_thumbLength = qwtMax(l,8); + d_thumbHalf = d_thumbLength / 2; + resize(size()); +} + +//------------------------------------------------------------ +// +//.F Slider::setThumbWidth +// Change the width of the thumb +// +//.u Syntax +//.p void Slider::setThumbWidth(int w) +// +//.u Parameters +//.p int w -- new width +// +//------------------------------------------------------------ +void Slider::setThumbWidth(int w) +{ + d_thumbWidth = qwtMax(w,4); + resize(size()); +} + + +//------------------------------------------------------------ +//.- +//.F Slider::scaleChange +// Notify changed scale +// +//.u Syntax +//.f void Slider::scaleChange() +// +//.u Description +// Called by QwtScaledWidget +// +//------------------------------------------------------------ +void Slider::scaleChange() +{ + if (!hasUserScale()) + d_scale.setScale(minValue(), maxValue(), d_maxMajor, d_maxMinor); + update(); +} + + +//------------------------------------------------------------ +//.- +//.F Slider::fontChange +// Notify change in font +// +//.u Syntax +//.f Slider::fontChange(const QFont &oldFont) +// +//------------------------------------------------------------ +void Slider::fontChange(const QFont & /*oldFont*/) +{ + repaint(FALSE); +} + +//------------------------------------------------------------ +// drawSlider +// Draw the slider into the specified rectangle. +//------------------------------------------------------------ + +void Slider::drawSlider(QPainter *p, const QRect &r) + { + QColorGroup g = colorGroup(); + QBrush brBack(g.background()); + QBrush brMid; + QBrush brDark(g.dark()); + + QRect cr; + + int ipos,dist1; + double rpos; + int lineDist; + + if (d_bwTrough > 0) { + qDrawShadePanel(p, r.x(), r.y(), + r.width(), r.height(), + g, TRUE, d_bwTrough,0); + cr.setRect(r.x() + d_bwTrough, + r.y() + d_bwTrough, + r.width() - 2*d_bwTrough, + r.height() - 2*d_bwTrough); + brMid = QBrush(g.mid()); + } + else { + cr = r; + brMid = brBack; + } + + rpos = (value() - minValue()) / (maxValue() - minValue()); + + lineDist = d_borderWidth - 1; + if (lineDist < 1) lineDist = 1; + + if (d_orient == Qt::Horizontal) + { + + dist1 = int(double(cr.width() - d_thumbLength) * rpos); + ipos = cr.x() + dist1; + markerPos = ipos + d_thumbHalf; + + // + // draw background + // + if (d_bgStyle & BgSlot) + { + drawHsBgSlot(p, cr, QRect(ipos, cr.y(), d_thumbLength, cr.height()), brMid); + } + else + { + p->fillRect(cr.x(),cr.y(),dist1,cr.height(),brMid); + p->fillRect(ipos + d_thumbLength, cr.y(), + cr.width() - d_thumbLength - dist1, cr.height(),brMid); + } + + // + // Draw thumb + // + qDrawShadePanel(p,ipos, cr.y(), d_thumbLength, cr.height(), + colorGroup(), FALSE, d_borderWidth, &brBack); + + if (lineDist > 1) + qDrawShadeLine(p,markerPos, cr.y() + lineDist , markerPos, + cr.y() + cr.height() - lineDist, + colorGroup(), TRUE, 1); + else + { + p->setPen(g.dark()); + p->drawLine(markerPos -1 , cr.y() + lineDist, markerPos -1, + cr.y() + cr.height() - lineDist - 1); + p->setPen(g.light()); + p->drawLine(markerPos, cr.y() + lineDist, markerPos, + cr.y() + cr.height() - lineDist - 1); + } + + + } + else + { + dist1 = int(double(cr.height() - d_thumbLength) * (1.0 - rpos)); + ipos = cr.y() + dist1; + markerPos = ipos + d_thumbHalf; + + if ( d_bgStyle & BgSlot) + { + drawVsBgSlot(p, cr, QRect(cr.left(), ipos, cr.width(), + d_thumbLength), brMid); + } + else + { + p->fillRect(cr.x(),cr.y(),cr.width(),ipos,brMid); + p->fillRect(cr.x(), ipos + d_thumbLength, cr.width(), + cr.height() - d_thumbLength - dist1, brMid); + } + + qDrawShadePanel(p,cr.x(),ipos , cr.width(), d_thumbLength, + colorGroup(),FALSE,d_borderWidth, &brBack); + if (lineDist > 1) + qDrawShadeLine(p, cr.x() + lineDist , markerPos, + cr.x() + cr.width() - lineDist, markerPos, + colorGroup(), TRUE, 1); + else { + + p->setPen(g.dark()); + p->drawLine(cr.x() + lineDist, markerPos - 1 , + cr.x() + cr.width() - lineDist - 1, markerPos - 1); + p->setPen(g.light()); + p->drawLine(cr.x() + lineDist, markerPos, + cr.x() + cr.width() - lineDist - 1 , markerPos); + } + } + +} + +//------------------------------------------------------------ +//.- +//.F Slider::drawSlotBg +// +// +//.u Syntax +//.f void Slider::drawSlotBg(QPainter *p, const QRect &rBound, const QRect &rThumb, const QRect &rSlot, const QBrush &brBack) +// +//.u Parameters +//.p QPainter *p, const QRect &rBound, const QRect &rThumb, const QRect &rSlot, const QBrush &brBack +// +//------------------------------------------------------------ +void Slider::drawHsBgSlot(QPainter *p, const QRect &rBound, const QRect &rThumb, const QBrush &brBack) +{ + int ws, ds, dLeft; + int lPos, rPos; + QRect rSlot; + const QColorGroup &g = colorGroup(); + + ws = rBound.height(); + if ((ws / 2) * 2 != ws) + ws = 5; + else + ws = 4; + + ds = qwtMax(1, d_thumbLength/2 - 4); + dLeft = rThumb.left() - rBound.left(); + + rSlot = QRect(rBound.x() + ds, rBound.y() + (rBound.height() - ws) / 2, + rBound.width() - 2 * ds, ws); + + rPos = qwtMin(rSlot.x(), rThumb.left()); + + if (rThumb.left() > rBound.x()) + { + p->fillRect(rBound.x(),rBound.y(),dLeft, rSlot.top() - rBound.top(), brBack); + p->fillRect(rBound.x(),rSlot.bottom() + 1,dLeft, + rBound.bottom() - rSlot.bottom(),brBack); + if (rPos > rBound.left()) + p->fillRect(rBound.x(),rSlot.y(), + rPos - rBound.left(),ws,brBack); + + p->setPen(g.dark()); + if (rSlot.x() < rThumb.left()) + p->drawLine(rSlot.x(), rSlot.bottom(), rSlot.x(), rSlot.top()); + if (rSlot.x() < rThumb.left() - 1) + { + p->drawLine(rSlot.x(), rSlot.top(), rThumb.left() - 1, rSlot.top()); + p->setPen(g.light()); + p->drawLine(rSlot.x() + 1, rSlot.bottom(), + rThumb.left() - 1, rSlot.bottom()); + + p->fillRect(rSlot.x() + 1, rSlot.y() + 1, dLeft - ds -1, + rSlot.height() -2, QBrush(Qt::black)); + + } + } + + lPos = qwtMax(rSlot.right(), rThumb.right()) + 1; + if (rThumb.right() < rBound.right()) + { + p->fillRect(rThumb.right() + 1,rBound.y(),rBound.right() - rThumb.right(), + rSlot.top() - rBound.top(), brBack); + p->fillRect(rThumb.right() + 1,rSlot.bottom() + 1, + rBound.right() - rThumb.right(), + rBound.bottom() - rSlot.bottom(),brBack); + if (lPos <= rBound.right()) + p->fillRect(lPos, rSlot.y() , rBound.right() - lPos + 1, ws ,brBack); + + p->setPen(g.dark()); + if (rSlot.right() > rThumb.right()) + { + p->drawLine(rThumb.right() + 1, rSlot.top(), rSlot.right(), rSlot.top()); + p->setPen(g.light()); + p->drawLine(rSlot.right(), rSlot.bottom(), rSlot.right(), rSlot.top() + 1); + } + + if (rSlot.right() > rThumb.right() + 1) + { + p->setPen(g.light()); + p->drawLine(rThumb.right() + 1, rSlot.bottom(), + rSlot.right() -1, rSlot.bottom()); + p->fillRect(rThumb.right() + 1, rSlot.y() + 1, + rSlot.right() - rThumb.right() - 1, + rSlot.height() -2, QBrush(Qt::black)); + } + } + +} + +//------------------------------------------------------------ +//.- +//.F Slider::drawVsBgSlot +// +// +//.u Syntax +//.f void Slider::drawVsBgSlot(QPainter *p, const QRect &rBound, const QRect &rThumb, const QBrush &brBack) +// +//.u Parameters +//.p QPainter *p, const QRect &rBound, const QRect &rThumb, const QBrush &brBack +// +//.u Return Value +// +//.u Description +// +//------------------------------------------------------------ +void Slider::drawVsBgSlot(QPainter *p, const QRect &rBound, const QRect &rThumb, const QBrush &brBack) +{ + + int ws, ds, dTop; + int lPos, hPos; + QRect rSlot; + const QColorGroup &g = colorGroup(); + + ws = rBound.width(); + if ((ws / 2) * 2 != ws) + ws = 5; + else + ws = 4; + + ds = qwtMax(1, d_thumbLength/2 - 4); + dTop = rThumb.top() - rBound.top(); + + rSlot = QRect(rBound.x() + (rBound.width() - ws) / 2, rBound.y() + ds, + ws, rBound.height() - 2 * ds); + + hPos = qwtMin(rSlot.y(), rThumb.top()); + + if (rThumb.top() > rBound.top()) + { + p->fillRect(rBound.x(),rBound.y(), rSlot.left() - rBound.left(),dTop, brBack); + p->fillRect(rSlot.right() + 1, rBound.y(), + rBound.right() - rSlot.right(), dTop,brBack); + if (hPos > rBound.top()) + p->fillRect(rSlot.x(),rBound.y(), ws, + hPos - rBound.top(),brBack); + + p->setPen(g.dark()); + if (rSlot.top() < rThumb.top()) + p->drawLine(rSlot.left(), rSlot.top(), rSlot.right(), rSlot.top()); + + + if (rSlot.top() < rThumb.top() - 1) + { + p->drawLine(rSlot.left(), rThumb.top() - 1, rSlot.left(), rSlot.top()); + p->setPen(g.light()); + p->drawLine(rSlot.right(), rSlot.top() + 1, rSlot.right(), + rThumb.top() - 1); + + p->fillRect(rSlot.x() + 1, rSlot.y() + 1, rSlot.width() - 2, + dTop - ds -1, QBrush(Qt::black)); + + } + } + + lPos = qwtMax(rSlot.bottom(), rThumb.bottom()) + 1; + if (rThumb.bottom() < rBound.bottom()) + { + p->fillRect(rBound.left(), rThumb.bottom() + 1, + rSlot.left() - rBound.left(), + rBound.bottom() - rThumb.bottom(), brBack); + p->fillRect(rSlot.right() + 1, rThumb.bottom() + 1, + rBound.right() - rSlot.right(), + rBound.bottom() - rThumb.bottom(), brBack); + if (lPos <= rBound.bottom()) + p->fillRect(rSlot.left(), lPos, ws, rBound.bottom() - lPos + 1, brBack); + + p->setPen(g.dark()); + if (rSlot.bottom() > rThumb.bottom()) + { + p->drawLine(rSlot.left(), rThumb.bottom() + 1, rSlot.left(), rSlot.bottom()); + p->setPen(g.light()); + p->drawLine(rSlot.left() * 1, rSlot.bottom(), rSlot.right(), rSlot.bottom()); + } + + if (rSlot.bottom() > rThumb.bottom() + 1) + { + p->setPen(g.light()); + p->drawLine(rSlot.right(), rThumb.bottom() + 1, rSlot.right(), + rSlot.bottom()); + p->fillRect(rSlot.left() + 1, rThumb.bottom() + 1, + rSlot.width() - 2, rSlot.bottom() - rThumb.bottom() - 1, + QBrush(Qt::black)); + } + } + +} + +//------------------------------------------------------------ +//.- +//.F Slider::getValue +// Determine the value corresponding to a specified +// mouse location. +// +//.u Syntax +//.f double Slider::getValue(const QPoint &p) +// +//.u Parameters +//.p const QPoint &p -- +// +//.u Description +// Called by SliderBase +//------------------------------------------------------------ +double Slider::getValue( const QPoint &p) +{ + double rv; + int pos; + QRect r = d_sliderRect; + + r.setLeft(r.left() + d_bwTrough); + r.setRight(r.right() - d_bwTrough); + r.setTop(r.top() - d_bwTrough); + r.setBottom(r.bottom() - d_bwTrough); + + if (d_orient == Qt::Horizontal) + { + + if (r.width() <= d_thumbLength) + { + rv = 0.5 * (minValue() + maxValue()); + } + else + { + pos = p.x() - r.x() - d_thumbHalf; + rv = minValue() + + rint( (maxValue() - minValue()) * double(pos) + / double(r.width() - d_thumbLength) + / step() ) * step(); + } + + } + else + { + if (r.height() <= d_thumbLength) + { + rv = 0.5 * (minValue() + maxValue()); + } + else + { + pos = p.y() - r.y() - d_thumbHalf; + rv = minValue() + + rint( (maxValue() - minValue()) * + (1.0 - double(pos) + / double(r.height() - d_thumbLength)) + / step() ) * step(); + } + + } + + return(rv); +} + + +//------------------------------------------------------------ +//.- +//.F Slider::getScrollMode +// Determine scrolling mode and direction +// +//.u Syntax +//.f void Slider::getScrollMode( const QPoint &p, int &scrollMode, int &direction ) +// +//.u Parameters +//.p const QPoint &p -- point +// +//.u Description +// Called by SliderBase +// +//------------------------------------------------------------ +void Slider::getScrollMode( QPoint &p, const Qt::ButtonState &button, int &scrollMode, int &direction ) +{ + if(cursorHoming() && button == Qt::LeftButton) + { + if(d_sliderRect.contains(p)) + { + scrollMode = ScrMouse; + direction = 0; + + int mp = 0; + QRect cr; + QPoint cp; + int ipos,dist1; + double rpos; + int lineDist; + + if(d_bwTrough > 0) + cr.setRect(d_sliderRect.x() + d_bwTrough, + d_sliderRect.y() + d_bwTrough, + d_sliderRect.width() - 2*d_bwTrough, + d_sliderRect.height() - 2*d_bwTrough); + else + cr = d_sliderRect; + + rpos = (value() - minValue()) / (maxValue() - minValue()); + + lineDist = d_borderWidth - 1; + if(lineDist < 1) lineDist = 1; + + if(d_orient == Qt::Horizontal) + { + dist1 = int(double(cr.width() - d_thumbLength) * rpos); + ipos = cr.x() + dist1; + mp = ipos + d_thumbHalf; + + p.setX(mp); + cp = mapToGlobal( QPoint(mp, p.y()) ); + } + else + { + dist1 = int(double(cr.height() - d_thumbLength) * (1.0 - rpos)); + ipos = cr.y() + dist1; + mp = ipos + d_thumbHalf; + p.setY(mp); + cp = mapToGlobal( QPoint(p.x(), mp) ); + } + cursor().setPos(cp.x(), cp.y()); + } + } + else + { + int currentPos; + if (d_orient == Qt::Horizontal) + currentPos = p.x(); + else + currentPos = p.y(); + + if (d_sliderRect.contains(p)) + { + if ((currentPos > markerPos - d_thumbHalf) + && (currentPos < markerPos + d_thumbHalf)) + { + scrollMode = ScrMouse; + direction = 0; + } + else + { + scrollMode = ScrPage; + if (((currentPos > markerPos) && (d_orient == Qt::Horizontal)) + || ((currentPos <= markerPos) && (d_orient != Qt::Horizontal))) + direction = 1; + else + direction = -1; + } + } + else + { + scrollMode = ScrNone; + direction = 0; + } + + } +} + +//------------------------------------------------------------ +//.F Slider::paintEvent +// Qt paint event +// +//.u Syntax +//.f void Slider::paintEvent(QPaintEvent *e) +//------------------------------------------------------------ + +void Slider::paintEvent(QPaintEvent* /*e*/) + { + QPainter p; + + if (p.begin(this)) { + if (d_scalePos != None) { + p.fillRect(this->rect(), this->backgroundColor()); + d_scale.draw(&p); + } + drawSlider(&p, d_sliderRect); + } + p.end(); + } + +//------------------------------------------------------------ +//.F Slider::resizeEvent +// Qt resize event +// +//.u Parameters +//.p QResizeEvent *e +// +//.u Syntax +//.f void Slider::resizeEvent(QResizeEvent *e) +//------------------------------------------------------------ + +void Slider::resizeEvent(QResizeEvent *e) +{ + + d_resized = TRUE; + QSize s = e->size(); + int sliderWidth = d_thumbWidth + 2 * d_bwTrough; + + // reposition slider + if(d_orient == Qt::Horizontal) + { + switch(d_scalePos) + { + case Top: + + d_sliderRect.setRect(this->rect().x() + d_xMargin, + this->rect().y() + s.height() - 1 + - d_yMargin - sliderWidth, + s.width() - 2 * d_xMargin, + sliderWidth); + d_scale.setGeometry(d_sliderRect.x() + d_bwTrough + d_thumbHalf, + d_sliderRect.y() - d_scaleDist, + d_sliderRect.width() - d_thumbLength - 2*d_bwTrough, + ScaleDraw::Top); + + break; + + case Bottom: + + d_sliderRect.setRect(this->rect().x() + d_xMargin, + this->rect().y() + d_yMargin, + s.width() - 2*d_xMargin, + sliderWidth); + d_scale.setGeometry(d_sliderRect.x() + d_bwTrough + d_thumbHalf, + d_sliderRect.y() + d_sliderRect.height() + d_scaleDist, + d_sliderRect.width() - d_thumbLength - 2*d_bwTrough, + ScaleDraw::Bottom); + + break; + + default: + d_sliderRect.setRect(this->rect().x(), this->rect().x(), + s.width(), s.height()); + break; + } + } + else + { + switch(d_scalePos) + { + case Left: + d_sliderRect.setRect(this->rect().x() + s.width() + - sliderWidth - 1 - d_xMargin, + this->rect().y() + d_yMargin, + sliderWidth, + s.height() - 2 * d_yMargin); + d_scale.setGeometry(d_sliderRect.x() - d_scaleDist, + d_sliderRect.y() + d_thumbHalf + d_bwTrough, + s.height() - d_thumbLength - 2*d_bwTrough, + ScaleDraw::Left); + + break; + case Right: + d_sliderRect.setRect(this->rect().x() + d_xMargin, + this->rect().y() + d_yMargin, + sliderWidth, + s.height() - 2* d_yMargin); + d_scale.setGeometry(this->rect().x() + d_sliderRect.width() + + d_scaleDist, + d_sliderRect.y() + d_thumbHalf + d_bwTrough, + s.height() - d_thumbLength - 2*d_bwTrough, + ScaleDraw::Right); + break; + default: + d_sliderRect.setRect(this->rect().x(), this->rect().x(), + s.width(), s.height()); + break; + } + } + +} + +//------------------------------------------------------------ +//.- +//.F Slider::valueChange +// Notify change of value +// +//.u Syntax +//.f void Slider::valueChange() +// +//------------------------------------------------------------ + +void Slider::valueChange() + { + QPainter p; + + p.begin(this); + drawSlider(&p, d_sliderRect); + p.end(); + + SliderBase::valueChange(); + } + +//------------------------------------------------------------ +//.- +//.F Slider::rangeChange +// Notify change of range +// +//.u Description +// +//.u Syntax +//.f void Slider::rangeChange() +// +//------------------------------------------------------------ +void Slider::rangeChange() +{ + if (!hasUserScale()) + d_scale.setScale(minValue(), maxValue(), d_maxMajor, d_maxMinor); + SliderBase::rangeChange(); + repaint(FALSE); +} + +//------------------------------------------------------------ +// +//.F Slider::setMargins +// Set distances between the widget's border and +// internals. +// +//.u Syntax +//.f void Slider::setMargins(int hor, int vert) +// +//.u Parameters +//.p int hor, int vert -- Margins +// +//------------------------------------------------------------ +void Slider::setMargins(int hor, int vert) +{ + d_xMargin = qwtMax(0, hor); + d_yMargin = qwtMin(0, vert); + resize(this->size()); +} + +//------------------------------------------------------------ +// +//.F Slider::sizeHint +// Return a recommended size +// +//.u Syntax +//.f QSize Slider::sizeHint() const +// +//.u Note +// The return value of sizeHint() depends on the font and the +// scale. +//------------------------------------------------------------ + +QSize Slider::sizeHint() //const ddskrjo + { + QPainter p; + int msWidth = 0, msHeight = 0; + + int w = 40; + int h = 40; + if (d_scalePos != None) { + if (p.begin(this)) { + msWidth = d_scale.maxWidth(&p, FALSE); + msHeight = d_scale.maxHeight(&p); + } + p.end(); + + switch(d_orient) { + case Qt::Vertical: + w = 2*d_xMargin + d_thumbWidth + 2*d_bwTrough + msWidth + d_scaleDist + 2; + break; + case Qt::Horizontal: + h = 2*d_yMargin + d_thumbWidth + 2*d_bwTrough + msHeight + d_scaleDist; + break; + } + } + else { // no scale + switch(d_orient) { + case Qt::Vertical: + w = 16 + 2 * d_bwTrough; + break; + case Qt::Horizontal: + h = 16 + 2 * d_bwTrough; + break; + } + } + return QSize(w, h); + } + +//--------------------------------------------------------- +// setOrientation +//--------------------------------------------------------- + +void Slider::setOrientation(Qt::Orientation o) + { + d_orient = o; + ScaleDraw::OrientationX so = ScaleDraw::Bottom; + switch(d_orient) { + case Qt::Vertical: + if (d_scalePos == Right) + so = ScaleDraw::Right; + else + so = ScaleDraw::Left; + break; + case Qt::Horizontal: + if (d_scalePos == Bottom) + so = ScaleDraw::Bottom; + else + so = ScaleDraw::Top; + break; + } + + d_scale.setGeometry(0, 0, 40, so); + if (d_orient == Qt::Vertical) + setMinimumSize(10,20); + else + setMinimumSize(20,10); + QRect r = geometry(); + setGeometry(r.x(), r.y(), r.height(), r.width()); + update(); + } + +Qt::Orientation Slider::orientation() const + { + return d_orient; + } + +double Slider::lineStep() const + { + return 1.0; + } + +double Slider::pageStep() const + { + return 1.0; + } + +void Slider::setLineStep(double) + { + } + +void Slider::setPageStep(double) + { + } + diff --git a/muse2/muse/widgets/slider.h b/muse2/muse/widgets/slider.h new file mode 100644 index 00000000..499229e1 --- /dev/null +++ b/muse2/muse/widgets/slider.h @@ -0,0 +1,98 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: slider.h,v 1.3.2.2 2008/01/19 13:33:47 wschweer Exp $ +// +// Copyright (C) 1997 Josef Wilgen +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License, version 2, +// as published by the Free Software Foundation. +// +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __SLIDER_H__ +#define __SLIDER_H__ + +#include "sclif.h" +#include "sliderbase.h" +#include "scldraw.h" +//Added by qt3to4: +#include +#include + +//--------------------------------------------------------- +// Slider +//--------------------------------------------------------- + +class Slider : public SliderBase, public ScaleIf + { + Q_OBJECT + + public: + enum ScalePos { None, Left, Right, Top, Bottom }; + enum { BgTrough = 0x1, BgSlot = 0x2 }; + + private: + Q_PROPERTY( double lineStep READ lineStep WRITE setLineStep ) + Q_PROPERTY( double pageStep READ pageStep WRITE setPageStep ) + Q_PROPERTY( Qt::Orientation orientation READ orientation WRITE setOrientation ) + + QRect d_sliderRect; + + int d_thumbLength; + int d_thumbHalf; + int d_thumbWidth; + int d_borderWidth; + int d_bwTrough; + int d_scaleDist; + int d_xMargin; + int d_yMargin; + + int d_resized; + bool d_autoResize; + double d_scaleStep; + + Qt::Orientation d_orient; + ScalePos d_scalePos; + int d_bgStyle; + int markerPos; + + void drawHsBgSlot(QPainter *, const QRect&, const QRect&,const QBrush&); + void drawVsBgSlot(QPainter *, const QRect&, const QRect&,const QBrush&); + + protected: + virtual void drawSlider (QPainter *p, const QRect &r); + double getValue(const QPoint &p); + void getScrollMode( QPoint &p, const Qt::ButtonState &button, int &scrollMode, int &direction); + void resizeEvent(QResizeEvent *e); + void paintEvent (QPaintEvent *e); + void valueChange(); + void rangeChange(); + void scaleChange(); + void fontChange(const QFont &oldFont); + + public: + Slider(QWidget *parent, const char *name = 0, + Qt::Orientation orient = Qt::Vertical, + ScalePos scalePos = None, + int bgStyle = BgTrough); + + ~Slider(); + void setThumbLength(int l); + void setThumbWidth(int w); + + void setOrientation(Qt::Orientation o); + Qt::Orientation orientation() const; + + double lineStep() const; + double pageStep() const; + + void setLineStep(double); + void setPageStep(double); + + void setBorderWidth(int bw); + void setMargins(int x, int y); + QSize sizeHint(); // const; + }; +#endif diff --git a/muse2/muse/widgets/sliderbase.cpp b/muse2/muse/widgets/sliderbase.cpp new file mode 100644 index 00000000..0d814d3c --- /dev/null +++ b/muse2/muse/widgets/sliderbase.cpp @@ -0,0 +1,726 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: sliderbase.cpp,v 1.4.2.4 2007/01/27 14:52:43 spamatica Exp $ + +// Copyright (C) 1997 Josef Wilgen +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License, version 2, +// as published by the Free Software Foundation. +// +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include "sliderbase.h" +#include "mmath.h" +//Added by qt3to4: +#include +#include +#include + +// DESCRIPTION +// SliderBase is a base class for +// slider widgets. QwtSliderBase handles the mouse events +// and updates the slider's value accordingly. Derived classes +// only have to implement the @QwtSliderBase::getValue@ and +// @QwtSliderBase::getScrollMode@ members, and should react to a +// @QwtSliderbase::valueChange@, which normally requires repainting. + +//------------------------------------------------------------ +//.F SliderBase::SliderBase +// Constructor +// +//.u Syntax +//.f SliderBase::SliderBase(QWidget *parent, const char *name) +// +//.u Parameters +//.p QWidget *parent, const char *name +// +//------------------------------------------------------------ + +SliderBase::SliderBase(QWidget *parent, const char *name) +: QWidget(parent, name) + { + _id = -1; + _cursorHoming = false; + _ignoreMouseMove = false; + d_tmrID = 0; + d_updTime = 150; + d_mass = 0.0; + d_tracking = true; + d_mouseOffset = 0.0; + d_scrollMode = ScrNone; + setRange(0.0, 1.0, 0.1); + } + +//------------------------------------------------------------ +//.F SliderBase::~SliderBase +// Destructor +// +//.u Syntax +//.f SliderBase::~SliderBase() +//------------------------------------------------------------ + +SliderBase::~SliderBase() + { + if (d_tmrID) + killTimer(d_tmrID); + } + + +//------------------------------------------------------------ +//.F void SliderBase::wheelEvent(QWheelEvent *e) +// Add wheel event handling +// +//.u Syntax +//.f void SliderBase::wheelEvent(QWheelEvent *e) +//------------------------------------------------------------ +void SliderBase::wheelEvent(QWheelEvent *e) +{ + // Avoid unwanted wheel events from outside the control. + // Just in case it grabs focus somehow. + // Tested: No go, can't seem to determine where event came from. + /* + const QPoint gp = mapToGlobal(e->pos()); + const QRect gr = QRect(mapToGlobal(rect().topLeft()), mapToGlobal(rect().bottomRight())); + if(!gr.contains(gp)) + { + e->ignore(); + return; + } */ + + e->accept(); + + float inc = (maxValue() - minValue()) / 40; + if (e->state() == Qt::ShiftModifier) + inc = inc / 10; + + if(inc < step()) + inc = step(); + + if(e->delta() > 0) + setValue(value()+inc); + else + setValue(value()-inc); + + emit sliderMoved(value(), _id); +} + + +//------------------------------------------------------------ +//.F SliderBase::stopMoving +// Stop updating if automatic scrolling is active +// +//.u Syntax +//.f void SliderBase::stopMoving() +//------------------------------------------------------------ + +void SliderBase::stopMoving() + { + if(d_tmrID) { + killTimer(d_tmrID); + d_tmrID = 0; + } + } + +//------------------------------------------------------------ +//.F SliderBase::setUpdateTime +// Specify the update interval for automatic scrolling +// +//.u Syntax +//.f void SliderBase::setUpdateTime(int t) +// +//.u Parameters +//.p int t -- update interval in milliseconds +// +//.u See also +// @SliderBase::getScrollMode@ +//------------------------------------------------------------ + +void SliderBase::setUpdateTime(int t) + { + if (t < 50) + t = 50; + d_updTime = t; + } + +//------------------------------------------------------------ +//.F SliderBase::mousePressEvent +// Mouse press event handler +// +//.u Syntax +//.f void SliderBase::mousePressEvent(QMouseEvent *e) +// +//.u Parameters +//.p QMouseEvent *e -- Qt Mouse press event +//------------------------------------------------------------ + +void SliderBase::mousePressEvent(QMouseEvent *e) + { + QPoint p = e->pos(); + const Qt::ButtonState button = e->button(); + d_timerTick = 0; + + getScrollMode(p, button, d_scrollMode, d_direction); + stopMoving(); + + switch(d_scrollMode) { + case ScrPage: + case ScrTimer: + d_mouseOffset = 0; + DoubleRange::incPages(d_direction); + emit sliderMoved(value(), _id); + d_tmrID = startTimer(qwtMax(250, 2 * d_updTime)); + break; + + case ScrMouse: + d_speed = 0; + if(button == Qt::RightButton) + { + emit sliderRightClicked(e->globalPos(), _id); + break; + } + d_time.start(); + if(_cursorHoming && button == Qt::LeftButton) + { + _ignoreMouseMove = true; + d_mouseOffset = 0.0; + } + else + d_mouseOffset = getValue(p) - value(); + + emit sliderPressed(_id); + break; + + default: + d_mouseOffset = 0; + d_direction = 0; + break; + } + } + + +//------------------------------------------------------------ +//.- +//.F SliderBase::buttonRelease +// Emit a valueChanged() signal if necessary +// +//.u Syntax +//.f void SliderBase::buttonReleased() +// +//------------------------------------------------------------ +void SliderBase::buttonReleased() +{ + if ((!d_tracking) || (value() != prevValue())) + emit valueChanged(value(), _id); +} + + +//------------------------------------------------------------ +// +//.F SliderBase::mouseReleaseEvent +// Mouse Release Event handler +// +//.u Syntax +//.f void SliderBase::mouseReleaseEvent(QMouseEvent *e) +// +//.u Parameters +//.p QMouseEvent *e -- Qt Mouse Event +// +//------------------------------------------------------------ +void SliderBase::mouseReleaseEvent(QMouseEvent *e) +{ + int ms = 0; + /*double inc = step(); */ // prevent compiler warning: unused variable + _ignoreMouseMove = false; + const Qt::ButtonState button = e->button(); + + switch(d_scrollMode) + { + + case ScrMouse: + + if(button == Qt::RightButton) + { + d_scrollMode = ScrNone; + break; + } + if(_cursorHoming && button == Qt::LeftButton) + d_scrollMode = ScrNone; + else + { + setPosition(e->pos()); + d_direction = 0; + d_mouseOffset = 0; + if (d_mass > 0.0) + { + ms = d_time.elapsed(); + if ((fabs(d_speed) > 0.0) && (ms < 50)) + d_tmrID = startTimer(d_updTime); + } + else + { + d_scrollMode = ScrNone; + buttonReleased(); + } + } + emit sliderReleased(_id); + + break; + + case ScrDirect: + + setPosition(e->pos()); + d_direction = 0; + d_mouseOffset = 0; + d_scrollMode = ScrNone; + buttonReleased(); + break; + + case ScrPage: + stopMoving(); + d_timerTick = 0; + buttonReleased(); + d_scrollMode = ScrNone; + break; + + case ScrTimer: + stopMoving(); + d_timerTick = 0; + buttonReleased(); + d_scrollMode = ScrNone; + break; + + default: + d_scrollMode = ScrNone; + buttonReleased(); + } +} + + +//------------------------------------------------------------ +// +//.F SliderBase::setPosition +// Move the slider to a specified point, adjust the value +// and emit signals if necessary +// +//.u Syntax +//.f void SliderBase::setPosition(const QPoint &p) +// +//.u Parameters +//.p const QPoint &p +// +//------------------------------------------------------------ +void SliderBase::setPosition(const QPoint &p) +{ + DoubleRange::fitValue(getValue(p) - d_mouseOffset); +} + + +//------------------------------------------------------------ +// +//.F SliderBase::setTracking +// +// Enables or disables tracking. +// +//.u Syntax +//.f void SliderBase::setTracking(bool enable) +// +//.u Parameters +//.p bool enable -- enable (TRUE) or disable (FALSE) tracking +// +//.u Description +// +// If tracking is enabled, the slider emits a +// valueChanged() signal whenever its value +// changes (the default behaviour). If tracking +// is disabled, the value changed() signal will only +// be emitted if +//.i -- the user releases the mouse +// button and the value has changed or +// -- at the end of automatic scrolling. +//.P +// Tracking is enabled by default. +//------------------------------------------------------------ +void SliderBase::setTracking(bool enable) +{ + d_tracking = enable; +} + +//------------------------------------------------------------ +//.- +//.F SliderBase::mouseMoveEvent +// Mouse Move Event handler +// +//.u Syntax +//.f void SliderBase::mouseMoveEvent(QMouseEvent *e) +// +//.u Parameters +//.p QMouseEvent *e -- Qt Mouse Move Event +// +//------------------------------------------------------------ +void SliderBase::mouseMoveEvent(QMouseEvent *e) +{ + if(_ignoreMouseMove) + { + _ignoreMouseMove = false; + return; + } + + double ms = 0.0; + if (d_scrollMode == ScrMouse ) + { + setPosition(e->pos()); + if (d_mass > 0.0) + { + ms = double(d_time.elapsed()); + if (ms < 1.0) ms = 1.0; + d_speed = (exactValue() - exactPrevValue()) / ms; + d_time.start(); + } + if (value() != prevValue()) + emit sliderMoved(value(), _id); + } + +} + + + +//------------------------------------------------------------ +// +//.F SliderBase::timerEvent +// Timer event handler +// +//.u Syntax +//.f void SliderBase::timerEvent(QTimerEvent *e) +// +//.u Parameters +//.p QTimerEvent *e -- Qt timer event +// +//------------------------------------------------------------ + +void SliderBase::timerEvent(QTimerEvent*) +{ + double newval; + double inc = step(); + + switch (d_scrollMode) + { + case ScrMouse: + if (d_mass > 0.0) + { + d_speed *= exp( - double(d_updTime) * 0.001 / d_mass ); + newval = exactValue() + d_speed * double(d_updTime); + DoubleRange::fitValue(newval); + // stop if d_speed < one step per second + if (fabs(d_speed) < 0.001 * fabs(step())) + { + d_speed = 0; + stopMoving(); + buttonReleased(); + } + + } + else + stopMoving(); + + break; + + case ScrPage: + DoubleRange::incPages(d_direction); + + if (value() != prevValue()) + emit sliderMoved(value(), _id); + + if (!d_timerTick) + { + killTimer(d_tmrID); + d_tmrID = startTimer(d_updTime); + } + break; + case ScrTimer: + DoubleRange::fitValue(value() + double(d_direction) * inc); + + if (value() != prevValue()) + emit sliderMoved(value(), _id); + + if (!d_timerTick) + { + killTimer(d_tmrID); + d_tmrID = startTimer(d_updTime); + } + break; + default: + stopMoving(); + break; + } + + d_timerTick = 1; +} + + +//------------------------------------------------------------ +// +//.F SliderBase::valueChange +// Notify change of value +// +//.u Syntax +//.f void SliderBase::valueChange() +// +//.u Parameters +//.p double x -- new value +// +//.u Description +// This function can be reimplemented by derived classes +// in order to keep track of changes, i.e. repaint the widget. +// The default implementation emits a valueChanged() signal +// if tracking is enabled. +// +//------------------------------------------------------------ +void SliderBase::valueChange() +{ + if (d_tracking) + emit valueChanged(value(), _id); +} + +//------------------------------------------------------------ +// +//.F SliderBase::setMass +// Set the slider's mass for flywheel effect. +// +//.u Syntax +//.f void SliderBase::setMass(double val) +// +//.u Parameters +//.p double val -- new mass in kg +// +//.u Description +// +// If the slider's mass is greater then 0, it will continue +// to move after the mouse button has been released. Its speed +// decreases with time at a rate depending on the slider's mass. +// A large mass means that it will continue to move for a +// long time. +// +// Limits: If the mass is smaller than 1g, it is set to zero. +// The maximal mass is limited to 100kg. +// +// Derived widgets may overload this function to make it public. +// +//------------------------------------------------------------ +void SliderBase::setMass(double val) +{ + if (val < 0.001) + d_mass = 0.0; + else if (val > 100.0) + d_mass = 100.0; + else + d_mass = val; +} + + +//------------------------------------------------------------ +// +//.F SliderBase::setValue +// Move the slider to a specified value +// +//.u Syntax +//.f void SliderBase::setValue(double val) +// +//.u Parameters +//.p double val -- new value +// +//.u Description +// This function can be used to move the slider to a value +// which is not an integer multiple of the step size. +// +//.u See also +// @SliderBase::fitValue@ +//------------------------------------------------------------ + +void SliderBase::setValue(double val) + { + if (d_scrollMode == ScrMouse) + stopMoving(); + DoubleRange::setValue(val); + } + + +//------------------------------------------------------------ +// +//.F QSlider::fitValue +// Set the slider's value to the nearest integer multiple +// of the step size. +// +//.u Syntax +//.f void SliderBase::fitValue(double val) +// +//.u See also: +// @SliderBase::setValue@ +//------------------------------------------------------------ +void SliderBase::fitValue(double val) +{ + if (d_scrollMode == ScrMouse) stopMoving(); + DoubleRange::fitValue(val); +} + + +//------------------------------------------------------------ +// +//.F SliderBase::incValue +// Increment the value by a specified number of steps +// +//.u Syntax +//.f void SliderBase::incValue(int steps) +// +//.u Parameters +//.p int steps -- number of steps +// +//------------------------------------------------------------ +void SliderBase::incValue(int steps) +{ + if (d_scrollMode == ScrMouse) stopMoving(); + DoubleRange::incValue(steps); +} + + +//------------------------------------------------------------ +// +//.F SliderBase::stepPage +// Increment the value by a specified number of steps +// +//.u Syntax +//.f void SliderBase::stepPages(int pages) +// +//.u Parameters +//.p int pages -- +/- number of pages +// +//.u Description +// Steps the control as if pager was clicked. +// Designed to be called from outside (like from a buddy label), rather than from +// the control itself. Calls DoubleRange::incPages, which normally causes valueChange() +// (and emits valueChanged), but also emits sliderMoved. +// +//------------------------------------------------------------ +void SliderBase::stepPages(int pages) +{ + DoubleRange::incPages(pages); + emit sliderMoved(value(), _id); +} + + +//------------------------------------------------------------ +// +//.F SliderBase::getValue +// Determine the value corresponding to a specified poind +// +//.u Syntax +//.f void SliderBase::getValue(const QPoint &p) +// +//.u Parameters +//.p const QPoint &p -- point +// +//.u Description +// This is an abstract virtual function which is called when +// the user presses or releases a mouse button or moves the +// mouse. It has to be implemented by the derived class. +// +//------------------------------------------------------------ + +//------------------------------------------------------------ +// +//.F SliderBase::getScrollMode +// Determine what to do when the user presses a mouse button. +// +//.u Syntax +//.f void SliderBase::getScrollMode(const QPoint &p, int &scrollMode, int &direction) +// +//.u Input Parameters +//.p const QPoint &p -- point where the mouse was pressed +// +//.u Output parameters +// int &scrollMode -- The scrolling mode +// int &direction -- direction: 1, 0, or -1. +// +//.u Description +// This function is abstract and has to be implemented by derived classes. +// It is called on a mousePress event. The derived class can determine +// what should happen next in dependence of the position where the mouse +// was pressed by returning scrolling mode and direction. SliderBase +// knows the following modes: +//.t +// SliderBase::ScrNone -- Scrolling switched off. Don't change the value. +// SliderBase::ScrMouse -- Change the value while the user keeps the +// button pressed and moves the mouse. +// SliderBase::ScrTimer -- Automatic scrolling. Increment the value +// in the specified direction as long as +// the user keeps the button pressed. +// SliderBase::ScrPage -- Automatic scrolling. Same as ScrTimer, but +// increment by page size. +// +// +//------------------------------------------------------------ + +//------------------------------------------------------------ +// +//.F SliderBase::valueChanged +// Notify a change of value. +// +//.u Syntax +//.f void SliderBase::valueChanged(double value, int id) +// +//.u Parameters +//.p double value -- new value +// +//.u Description +// In the default setting +// (tracking enabled), this signal will be emitted every +// time the value changes ( see setTracking() ). +//------------------------------------------------------------ + +//------------------------------------------------------------ +// +//.F SliderBase::sliderPressed +// This signal is emitted when the user presses the +// movable part of the slider (start ScrMouse Mode). +// +//.u Syntax +//.f void SliderBase::sliderPressed() +// +//------------------------------------------------------------ + +//------------------------------------------------------------ +// +//.F SliderBase::SliderReleased +// This signal is emitted when the user releases the +// movable part of the slider. +// +//.u Syntax +//.f void QwtSliderbase::SliderReleased() +// +//------------------------------------------------------------ + + +//------------------------------------------------------------ +// +//.F SliderBase::sliderMoved +// This signal is emitted when the user moves the +// slider with the mouse. +// +//.u Syntax +//.f void SliderBase::sliderMoved(double value, int _id) +// +//.u Parameters +//.p double value -- new value +// +//------------------------------------------------------------ + + + + + + + + + diff --git a/muse2/muse/widgets/sliderbase.h b/muse2/muse/widgets/sliderbase.h new file mode 100644 index 00000000..d2de6f7c --- /dev/null +++ b/muse2/muse/widgets/sliderbase.h @@ -0,0 +1,107 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: sliderbase.h,v 1.4.2.3 2006/11/14 06:28:37 terminator356 Exp $ + +// Copyright (C) 1997 Josef Wilgen +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License, version 2, +// as published by the Free Software Foundation. +// +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __SLIDERBASE_H__ +#define __SLIDERBASE_H__ + +#include "drange.h" +#include +#include +#include +//#include +#include +//Added by qt3to4: +#include +#include +#include + +//--------------------------------------------------------- +// SliderBase +//--------------------------------------------------------- + +class SliderBase : public QWidget, public DoubleRange + { + 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( double value READ value WRITE setValue ) + + int _id; + int d_tmrID; + int d_updTime; + int d_timerTick; + QTime d_time; + double d_speed; + double d_mass; + bool _cursorHoming; + bool _ignoreMouseMove; + + void buttonReleased(); + + protected: + int d_scrollMode; + double d_mouseOffset; + int d_direction; + int d_tracking; + + virtual void setMass(double val); + void setPosition(const QPoint &p); + virtual void valueChange(); + virtual double mass() const { return d_mass; } + + void wheelEvent(QWheelEvent *e); + void timerEvent(QTimerEvent *e); + void mousePressEvent(QMouseEvent *e); + void mouseReleaseEvent(QMouseEvent *e); + void mouseMoveEvent(QMouseEvent *e); + virtual double getValue(const QPoint & p) = 0; + virtual void getScrollMode( QPoint &p, const Qt::ButtonState &button, + int &scrollMode, int &direction) = 0; + + public slots: + void setValue(double val); + void fitValue(double val); + void incValue(int steps); + + signals: + void valueChanged(double value, int id); + void sliderPressed(int id); + void sliderReleased(int id); + void sliderMoved(double value, int id); + void sliderRightClicked(const QPoint &p, int id); + + public: + enum { ScrNone, ScrMouse, ScrTimer, ScrDirect, ScrPage }; + + SliderBase( QWidget *parent = 0, const char *name = 0 ); + ~SliderBase(); + + bool cursorHoming() const { return _cursorHoming; } + void setCursorHoming(bool b) { _cursorHoming = b; } + void setUpdateTime(int t); + // void incValue(double nSteps); + void stopMoving(); + void setTracking(bool enable); + + double value() const { return DoubleRange::value(); } + void stepPages(int pages); + double minValue() const { return DoubleRange::minValue(); } + double maxValue() const { return DoubleRange::maxValue(); } + void setMinValue(double v) { DoubleRange::setRange(v, maxValue(), 0.0, 1); } + void setMaxValue(double v) { DoubleRange::setRange(minValue(), v, 0.0, 1); } + int id() const { return _id; } + void setId(int i) { _id = i; } + }; + +#endif diff --git a/muse2/muse/widgets/songinfo.ui b/muse2/muse/widgets/songinfo.ui new file mode 100644 index 00000000..2e4e7e80 --- /dev/null +++ b/muse2/muse/widgets/songinfo.ui @@ -0,0 +1,115 @@ + +SongInfo + + + SongInfo + + + + 0 + 0 + 403 + 274 + + + + Song Information + + + + unnamed + + + + layout2 + + + + unnamed + + + 0 + + + + songInfoText + + + + + layout1 + + + + unnamed + + + + spacer1 + + + Horizontal + + + Expanding + + + + 311 + 20 + + + + + + buttonCancel + + + &Cancel + + + Alt+C + + + + + buttonOk + + + &Ok + + + Alt+O + + + true + + + + + + + + + + + buttonOk + clicked() + SongInfo + accept() + + + buttonCancel + clicked() + SongInfo + reject() + + + + songinfo.ui.h + + + buttonOk_clicked() + + + diff --git a/muse2/muse/widgets/spinbox.cpp b/muse2/muse/widgets/spinbox.cpp new file mode 100644 index 00000000..6eed0ba6 --- /dev/null +++ b/muse2/muse/widgets/spinbox.cpp @@ -0,0 +1,83 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: spinbox.cpp,v 1.1.2.3 2009/07/09 18:27:11 terminator356 Exp $ +// (C) Copyright 2001 Werner Schweer (ws@seh.de) +//========================================================= +#include +//Added by qt3to4: +#include +#include +#include "spinbox.h" + +//--------------------------------------------------------- +// SpinBox +//--------------------------------------------------------- + +SpinBox::SpinBox(QWidget* parent, const char* name) + : QSpinBox(parent, name) +{ + _clearFocus = true; +} + +SpinBox::SpinBox(int minValue, int maxValue, int step, QWidget* parent, const char* name) + : QSpinBox(minValue, maxValue, step, parent, name) +{ + _clearFocus = true; +} + +bool SpinBox::eventFilter(QObject* o, QEvent* ev) +{ + // if (o != (QObject*)editor()) ddskrjo can't find editor() + // return QSpinBox::eventFilter(o,ev); + + bool retval = FALSE; + if(ev->type() == QEvent::KeyPress) + { + QKeyEvent* k = (QKeyEvent*)ev; + if(k->key() == Qt::Key_Up || k->key() == Qt::Key_Down) + { + // stepUp/stepDown will be called. Set this now. + _clearFocus = false; + } + else if (k->key() == Qt::Key_Enter || k->key() == Qt::Key_Return) + { + // With this line, two enter presses after an edit will clear focus. + // Without, just one enter press clears the focus. + //if(!editor()->isModified()) + { + clearFocus(); + return TRUE; + } + } + } + else + if(ev->type() == QEvent::MouseButtonDblClick) + { + emit doubleClicked(); + return TRUE; + } + + retval = QSpinBox::eventFilter(o, ev); + + return retval; +} + +void SpinBox::stepUp() +{ + QSpinBox::stepUp(); + if(_clearFocus) + clearFocus(); + else + _clearFocus = true; +} + +void SpinBox::stepDown() +{ + QSpinBox::stepDown(); + if(_clearFocus) + clearFocus(); + else + _clearFocus = true; +} + diff --git a/muse2/muse/widgets/spinbox.h b/muse2/muse/widgets/spinbox.h new file mode 100644 index 00000000..6eaa2da7 --- /dev/null +++ b/muse2/muse/widgets/spinbox.h @@ -0,0 +1,44 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: spinbox.h,v 1.1.2.2 2009/02/02 21:38:01 terminator356 Exp $ +// (C) Copyright 2001 Werner Schweer (ws@seh.de) +//========================================================= + +// SpinBox: +// Click up/down, or mousewheel, or hit enter with un-modified text (which means enter TWICE for modified text), +// and the control will give up focus, thereby allowing you to use global shortcut keys afterwards. +// Up/down keys still keep the focus. +#ifndef __SPINBOX_H__ +#define __SPINBOX_H__ + +#include +//Added by qt3to4: +#include + +//--------------------------------------------------------- +// SpinBox +//--------------------------------------------------------- + +class SpinBox : public QSpinBox { + Q_OBJECT + + bool _clearFocus; + + protected: + bool eventFilter(QObject* obj, QEvent* ev); + + public slots: + virtual void stepUp(); + virtual void stepDown(); + + signals: + void doubleClicked(); + + public: + SpinBox(QWidget* parent=0, const char* name = 0); + SpinBox(int minValue, int maxValue, int step = 1, QWidget* parent=0, const char* name = 0); +}; + +#endif + diff --git a/muse2/muse/widgets/spinboxFP.cpp b/muse2/muse/widgets/spinboxFP.cpp new file mode 100644 index 00000000..c2906940 --- /dev/null +++ b/muse2/muse/widgets/spinboxFP.cpp @@ -0,0 +1,80 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: spinboxFP.cpp,v 1.1.1.1 2003/10/27 18:55:03 wschweer Exp $ +// (C) Copyright 2001 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include + +//#include +#include +#include "spinboxFP.h" + +//--------------------------------------------------------- +// SpinBoxFP +//--------------------------------------------------------- + +SpinBoxFP::SpinBoxFP(QWidget* parent, const char* name) + : QSpinBox(parent, name) + { + _precision = 0; + //setValidator(new QDoubleValidator(this)); ddskrjo + } + +SpinBoxFP::SpinBoxFP(int minValue, int maxValue, int step, QWidget* parent, const char* name) + : QSpinBox(minValue, maxValue, step, parent, name) + { + _precision = 0; + //setValidator(new QDoubleValidator(this)); ddskrjo + } + +//--------------------------------------------------------- +// setPrecision +//--------------------------------------------------------- + +void SpinBoxFP::setPrecision(int val) + { + _precision = val; + //updateDisplay(); ddskrjo + } + +//--------------------------------------------------------- +// mapValueToText +//--------------------------------------------------------- + +QString SpinBoxFP::mapValueToText(int value) + { + if (_precision) { + QString s; + int div = int(exp10(_precision)); +// printf("val %d, prec %d, div %d\n", value, _precision, div); + s.sprintf("%d.%0*d", value/div, _precision, value%div); + return s; + } + return textFromValue(value); // ddskrjo + } + +//--------------------------------------------------------- +// mapTextToValue +//--------------------------------------------------------- +/* ddskrjo +int SpinBoxFP::mapTextToValue(bool* ok) + { + QString qs = cleanText(); + if (_precision) { + const char* s = qs.latin1(); + int a, b; + int n = sscanf(s, "%d.%d", &a, &b); + if (n != 2) { + *ok = false; + return 0; + } + int div = int(exp10(_precision)); + return a * div + b; + } + return QSpinBox::mapTextToValue(ok); + } + +*/ diff --git a/muse2/muse/widgets/spinboxFP.h b/muse2/muse/widgets/spinboxFP.h new file mode 100644 index 00000000..760a7d06 --- /dev/null +++ b/muse2/muse/widgets/spinboxFP.h @@ -0,0 +1,35 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: spinboxFP.h,v 1.1.1.1.2.1 2008/05/21 00:28:54 terminator356 Exp $ +// (C) Copyright 2001 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __SPINBOXFP_H__ +#define __SPINBOXFP_H__ + +#include + +//--------------------------------------------------------- +// SpinBoxFP +//--------------------------------------------------------- + +class SpinBoxFP : public QSpinBox { + Q_OBJECT + Q_PROPERTY( int precision READ precision WRITE setPrecision ) + + int _precision; + + protected: + virtual QString mapValueToText(int value); + //virtual int mapTextToValue(bool* ok); + + public: + SpinBoxFP(QWidget* parent=0, const char* name = 0); + SpinBoxFP(int minValue, int maxValue, int step = 1, QWidget* parent=0, const char* name = 0); + void setPrecision(int val); + int precision() const { return _precision; } + }; + +#endif + diff --git a/muse2/muse/widgets/splitter.cpp b/muse2/muse/widgets/splitter.cpp new file mode 100644 index 00000000..d1f9cfd9 --- /dev/null +++ b/muse2/muse/widgets/splitter.cpp @@ -0,0 +1,77 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: splitter.cpp,v 1.1.1.1 2003/10/27 18:54:59 wschweer Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#include "splitter.h" +#include "xml.h" +#include +//Added by qt3to4: +#include + +//--------------------------------------------------------- +// Splitter +//--------------------------------------------------------- + +Splitter::Splitter(Qt::Orientation o, QWidget* parent, const char* name) + : QSplitter(o, parent, name) + { + setOpaqueResize(true); + } + +//--------------------------------------------------------- +// saveConfiguration +//--------------------------------------------------------- + +void Splitter::writeStatus(int level, Xml& xml) + { + Q3ValueList vl = sizes(); + //xml.nput(level++, "<%s>", name()); + xml.nput(level++, "<%s>", Xml::xmlString(name()).latin1()); + Q3ValueListIterator ivl = vl.begin(); + for (; ivl != vl.end(); ++ivl) { + xml.nput("%d ", *ivl); + } + //xml.nput("\n", name()); + xml.nput("\n", Xml::xmlString(name()).latin1()); + } + +//--------------------------------------------------------- +// loadConfiguration +//--------------------------------------------------------- + +void Splitter::readStatus(Xml& xml) + { + Q3ValueList vl; + + for (;;) { + Xml::Token token = xml.parse(); + const QString& tag = xml.s1(); + switch (token) { + case Xml::Error: + case Xml::End: + return; + case Xml::TagStart: + xml.unknown("Splitter"); + break; + case Xml::Text: + { + QStringList sl = QStringList::split(' ', tag); + for (QStringList::Iterator it = sl.begin(); it != sl.end(); ++it) { + int val = (*it).toInt(); + vl.append(val); + } + } + break; + case Xml::TagEnd: + if (tag == name()) { + setSizes(vl); + return; + } + default: + break; + } + } + } diff --git a/muse2/muse/widgets/splitter.h b/muse2/muse/widgets/splitter.h new file mode 100644 index 00000000..8be4da5b --- /dev/null +++ b/muse2/muse/widgets/splitter.h @@ -0,0 +1,29 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: splitter.h,v 1.1.1.1 2003/10/27 18:54:51 wschweer Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __SPLITTER_H__ +#define __SPLITTER_H__ + +#include + +class Xml; + +//--------------------------------------------------------- +// Splitter +//--------------------------------------------------------- + +class Splitter : public QSplitter { + Q_OBJECT + + public: + Splitter(Qt::Orientation o, QWidget* parent, const char* name); + void writeStatus(int level, Xml&); + void readStatus(Xml&); + }; + +#endif + diff --git a/muse2/muse/widgets/swidget.cpp b/muse2/muse/widgets/swidget.cpp new file mode 100644 index 00000000..29cece1e --- /dev/null +++ b/muse2/muse/widgets/swidget.cpp @@ -0,0 +1,20 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: swidget.cpp,v 1.1.1.1 2003/10/27 18:54:27 wschweer Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#include "swidget.h" +//Added by qt3to4: +#include + +//--------------------------------------------------------- +// resizeEvent +//--------------------------------------------------------- + +void SWidget::resizeEvent(QResizeEvent* ev) + { + emit heightChanged(ev->size().height()); + } + diff --git a/muse2/muse/widgets/swidget.h b/muse2/muse/widgets/swidget.h new file mode 100644 index 00000000..806fe538 --- /dev/null +++ b/muse2/muse/widgets/swidget.h @@ -0,0 +1,33 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: swidget.h,v 1.1.1.1 2003/10/27 18:54:49 wschweer Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __SWIDGET_H__ +#define __SWIDGET_H__ + +#include +//Added by qt3to4: +#include + +//--------------------------------------------------------- +// SWidget +// a simple widget which emits a heighChanged signal +// on received ResizeEvent´s +//--------------------------------------------------------- + +class SWidget : public QWidget { + virtual void resizeEvent(QResizeEvent*); + Q_OBJECT + + signals: + void heightChanged(int); + + public: + SWidget(QWidget* parent) : QWidget(parent) {} + }; + +#endif + diff --git a/muse2/muse/widgets/synthconfigbase.ui b/muse2/muse/widgets/synthconfigbase.ui new file mode 100644 index 00000000..761c8fb8 --- /dev/null +++ b/muse2/muse/widgets/synthconfigbase.ui @@ -0,0 +1,247 @@ + +SynthConfigBase + + + SynthConfigBase + + + + 0 + 0 + 630 + 492 + + + + MusE: Synth Configuration + + + + unnamed + + + + GroupBox3 + + + Instances + + + + unnamed + + + + + Name + + + false + + + true + + + + + Midi Port + + + false + + + false + + + + instanceList + + + true + + + + + layout2 + + + + unnamed + + + + removeInstance + + + Remove Instance + + + + + Spacer2 + + + Horizontal + + + Expanding + + + + 113 + 20 + + + + + + + + + + groupBox10 + + + Midi connections + + + + unnamed + + + + mdevView + + + + + + + GroupBox2 + + + GroupBoxPanel + + + Sunken + + + Soft Synthesizer + + + + unnamed + + + + Layout1 + + + + unnamed + + + 0 + + + 6 + + + + addInstance + + + Add Instance + + + + + Spacer1 + + + Horizontal + + + Expanding + + + + 20 + 20 + + + + + + + + + File + + + false + + + true + + + + + Inst + + + false + + + false + + + + + Name + + + false + + + true + + + + + Version + + + true + + + true + + + + + Description + + + true + + + true + + + + synthList + + + true + + + list of available software synthesizers + + + + + + + + diff --git a/muse2/muse/widgets/synthwizardbase.h b/muse2/muse/widgets/synthwizardbase.h new file mode 100644 index 00000000..61d3985c --- /dev/null +++ b/muse2/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.5 2003/11/12 18:55:06 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 Q3VBoxLayout; +class Q3HBoxLayout; +class Q3GridLayout; +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: + Q3VBoxLayout* WizardPageLayout; + Q3VBoxLayout* GroupBox2Layout; + Q3HBoxLayout* Layout1; + Q3VBoxLayout* GroupBox3Layout; + Q3HBoxLayout* Layout3; + +protected slots: + virtual void languageChange(); + +}; + +#endif // SYNTHCONFIGBASE_H diff --git a/muse2/muse/widgets/tb1.cpp b/muse2/muse/widgets/tb1.cpp new file mode 100644 index 00000000..8aa6225f --- /dev/null +++ b/muse2/muse/widgets/tb1.cpp @@ -0,0 +1,225 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: tb1.cpp,v 1.3.2.2 2007/01/04 00:35:17 terminator356 Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include +#include + +#include +#include +#include +#include + +#include "config.h" +#include "lcombo.h" +#include "tb1.h" +#include "globals.h" +#include "poslabel.h" +#include "pitchlabel.h" + +static int rasterTable[] = { + //------ 8 4 2 + 1, 4, 8, 16, 32, 64, 128, 256, 512, 1024, + 1, 6, 12, 24, 48, 96, 192, 384, 768, 1536, + 1, 9, 18, 36, 72, 144, 288, 576, 1152, 2304 + }; + +static const char* rasterStrings[] = { + QT_TR_NOOP("Off"), "2pp", "5pp", "64T", "32T", "16T", "8T", "4T", "2T", "1T", + QT_TR_NOOP("Off"), "3pp", "6pp", "64", "32", "16", "8", "4", "2", "1", + QT_TR_NOOP("Off"), "4pp", "7pp", "64.", "32.", "16.", "8.", "4.", "2.", "1." + }; + +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." + }; + +//--------------------------------------------------------- +// genToolbar +// solo time pitch raster quant +//--------------------------------------------------------- + +Toolbar1::Toolbar1(Q3MainWindow* parent, int r, int q, bool sp) + : Q3ToolBar(QString("Qant'n'Snap-tools"), parent) + { + showPitch = sp; + setHorizontalStretchable(false); + + solo = new QToolButton(this); + solo->setText(tr("Solo")); + solo->setToggleButton(true); + + //--------------------------------------------------- + // Cursor Position + //--------------------------------------------------- + + QLabel* label = new QLabel(tr("Cursor"), this, "Cursor"); + label->setAlignment(Qt::AlignRight|Qt::AlignVCenter); + label->setIndent(3); + pos = new PosLabel(this, "pos"); + if (showPitch) { + pitch = new PitchLabel(this); + pitch->setEnabled(false); + } + + //--------------------------------------------------- + // Raster, Quant. + //--------------------------------------------------- + + raster = new LabelCombo(tr("Snap"), this); + quant = new LabelCombo(tr("Quantize"), this); + + Q3ListBox* rlist = new Q3ListBox(this); + Q3ListBox* qlist = new Q3ListBox(this); + rlist->setMinimumWidth(95); + qlist->setMinimumWidth(95); + //raster->setListBox(rlist); ddskrjo + //quant->setListBox(qlist); ddskrjo + rlist->setColumnMode(3); + qlist->setColumnMode(3); + for (int i = 0; i < 30; i++) + rlist->insertItem(tr(rasterStrings[i]), i); + for (int i = 0; i < 24; i++) + qlist->insertItem(tr(quantStrings[i]), i); + setRaster(r); + setQuant(q); + + //--------------------------------------------------- + // To Menu + //--------------------------------------------------- + + LabelCombo* to = new LabelCombo(tr("To"), this); + Q3ListBox* toList = new Q3ListBox(this); + //to->setListBox(toList); ddskrjo + toList->insertItem(tr("All Events"), 0); + toList->insertItem(tr("Looped Ev."), CMD_RANGE_LOOP); + toList->insertItem(tr("Selected Ev."), CMD_RANGE_SELECTED); + toList->insertItem(tr("Looped+Sel."), CMD_RANGE_LOOP | CMD_RANGE_SELECTED); + + connect(raster, SIGNAL(activated(int)), SLOT(_rasterChanged(int))); + connect(quant, SIGNAL(activated(int)), SLOT(_quantChanged(int))); + connect(to, SIGNAL(activated(int)), SIGNAL(toChanged(int))); + connect(solo, SIGNAL(toggled(bool)), SIGNAL(soloChanged(bool))); + pos->setEnabled(false); + } + +//--------------------------------------------------------- +// rasterChanged +//--------------------------------------------------------- + +void Toolbar1::_rasterChanged(int index) + { + emit rasterChanged(rasterTable[index]); + } + +//--------------------------------------------------------- +// quantChanged +//--------------------------------------------------------- + +void Toolbar1::_quantChanged(int index) + { + emit quantChanged(quantTable[index]); + } + +//--------------------------------------------------------- +// setPitch +//--------------------------------------------------------- + +void Toolbar1::setPitch(int val) + { + if (showPitch) { + pitch->setEnabled(val != -1); + pitch->setPitch(val); + } + } + +void Toolbar1::setInt(int val) + { + if (showPitch) { + pitch->setEnabled(val != -1); + pitch->setInt(val); + } + } + +//--------------------------------------------------------- +// setTime +//--------------------------------------------------------- + +void Toolbar1::setTime(unsigned val) + { + if (!pos->isVisible()) { + printf("NOT visible\n"); + return; + } + if (val == MAXINT) + pos->setEnabled(false); + else { + pos->setEnabled(true); + pos->setValue(val); + } + } + +//--------------------------------------------------------- +// setRaster +//--------------------------------------------------------- + +void Toolbar1::setRaster(int val) + { + for (unsigned i = 0; i < sizeof(rasterTable)/sizeof(*rasterTable); i++) { + if (val == rasterTable[i]) { + raster->setCurrentItem(i); + return; + } + } + printf("setRaster(%d) not defined\n", val); + raster->setCurrentItem(0); + } + +//--------------------------------------------------------- +// setQuant +//--------------------------------------------------------- + +void Toolbar1::setQuant(int val) + { + for (unsigned i = 0; i < sizeof(quantTable)/sizeof(*quantTable); i++) { + if (val == quantTable[i]) { + quant->setCurrentItem(i); + return; + } + } + printf("setQuant(%d) not defined\n", val); + quant->setCurrentItem(0); + } + +//--------------------------------------------------------- +// setSolo +//--------------------------------------------------------- + +void Toolbar1::setSolo(bool flag) + { + solo->blockSignals(true); + solo->setOn(flag); + solo->blockSignals(false); + } + +//--------------------------------------------------------- +// setPitchMode +//--------------------------------------------------------- + +void Toolbar1::setPitchMode(bool /*flag*/) + { +// pitch->setPitchMode(flag); + } + diff --git a/muse2/muse/widgets/tb1.h b/muse2/muse/widgets/tb1.h new file mode 100644 index 00000000..b6d7860a --- /dev/null +++ b/muse2/muse/widgets/tb1.h @@ -0,0 +1,57 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: tb1.h,v 1.2 2004/01/11 18:55:37 wschweer Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __TB1_H__ +#define __TB1_H__ + +#include +#include + +class PosLabel; +class PitchLabel; +class Track; +class LabelCombo; +class QToolButton; + +//--------------------------------------------------------- +// Toolbar1 +//--------------------------------------------------------- + +class Toolbar1 : public Q3ToolBar { + QToolButton* solo; + PosLabel* pos; + PitchLabel* pitch; + LabelCombo* quant; + LabelCombo* raster; + bool showPitch; + Q_OBJECT + + private slots: + void _rasterChanged(int); + void _quantChanged(int); + + public slots: + void setTime(unsigned); + 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(Q3MainWindow* parent, int r=96, + int q=96, bool showPitch=true); + void setSolo(bool val); + void setPitchMode(bool flag); + }; + +#endif diff --git a/muse2/muse/widgets/tempolabel.cpp b/muse2/muse/widgets/tempolabel.cpp new file mode 100644 index 00000000..35f75b09 --- /dev/null +++ b/muse2/muse/widgets/tempolabel.cpp @@ -0,0 +1,126 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: tempolabel.cpp,v 1.1.1.1 2003/10/27 18:54:29 wschweer Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include +#include +//Added by qt3to4: +#include +#include "tempolabel.h" + +//--------------------------------------------------------- +// TempoLabel +//--------------------------------------------------------- + +TempoLabel::TempoLabel(QWidget* parent, const char* name) + : QLabel(parent, name) + { + 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()); + } + +//--------------------------------------------------------- +// TempoSpinBox +//--------------------------------------------------------- + +TempoEdit::TempoEdit(QWidget* parent, const char* name) + : QSpinBox(parent, name) + { + setLineStep(100); + setMaxValue(60000); + setMinValue(3000); + //setValidator(new QDoubleValidator(this)); ddskrjo + connect(this, SIGNAL(valueChanged(int)), SLOT(tempoChanged(int))); + } + +//--------------------------------------------------------- +// sizeHint +//--------------------------------------------------------- + +QSize TempoEdit::sizeHint() const + { + QFontMetrics fm(font()); + int fw = style()->pixelMetric(QStyle::PM_DefaultFrameWidth,0, this); // ddskrjo + int h = fm.height() + fw * 2; + int w = 2 + fm.width(QString("000.00")) + fw * 4 + 30; + return QSize(w, h).expandedTo(QApplication::globalStrut()); + } + +//--------------------------------------------------------- +// mapValueToText +//--------------------------------------------------------- + +QString TempoEdit::mapValueToText(int val) + { + double v = val / 100.0; + return QString("%1").arg(v, 3, 'f', 2); + } + +//--------------------------------------------------------- +// mapTextToValue +//--------------------------------------------------------- + +int TempoEdit::mapTextToValue(bool* ok) + { + double v = text().toDouble(ok); + return int(v * 100); + } + +//--------------------------------------------------------- +// tempoChanged +//--------------------------------------------------------- + +void TempoEdit::tempoChanged(int val) + { + emit valueChanged(double(val)/100.0); + } + +//--------------------------------------------------------- +// setValue +//--------------------------------------------------------- + +void TempoEdit::setValue(double val) + { + QSpinBox::setValue(int(val*100)); + } + diff --git a/muse2/muse/widgets/tempolabel.h b/muse2/muse/widgets/tempolabel.h new file mode 100644 index 00000000..587938d7 --- /dev/null +++ b/muse2/muse/widgets/tempolabel.h @@ -0,0 +1,60 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: tempolabel.h,v 1.1.1.1 2003/10/27 18:55:05 wschweer Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __TEMPOLABEL_H__ +#define __TEMPOLABEL_H__ + +#include +#include + +//--------------------------------------------------------- +// TempoLabel +//--------------------------------------------------------- + +class TempoLabel : public QLabel { + double _value; + + Q_OBJECT + + protected: + QSize sizeHint() const; + + public slots: + void setValue(int); + void setValue(double); + + public: + TempoLabel(QWidget*, const char* name = 0); + }; + +//--------------------------------------------------------- +// TempoEdit +//--------------------------------------------------------- + +class TempoEdit : public QSpinBox { + Q_OBJECT + + protected: + QSize sizeHint() const; + virtual QString mapValueToText(int); + virtual int mapTextToValue(bool*); + + private slots: + void tempoChanged(int); + + public slots: + void setValue(double); + + signals: + void valueChanged(double); + + public: + TempoEdit(QWidget*, const char* name = 0); + }; + +#endif + diff --git a/muse2/muse/widgets/tools.cpp b/muse2/muse/widgets/tools.cpp new file mode 100644 index 00000000..7816f632 --- /dev/null +++ b/muse2/muse/widgets/tools.cpp @@ -0,0 +1,139 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: tools.cpp,v 1.2 2004/04/28 21:56:13 spamatica Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#include "tools.h" +#include +#include +#include +#include +#include +#include +//Added by qt3to4: +#include + +#include "icons.h" +#include "action.h" + +const char* infoPointer = QT_TR_NOOP("select Pointer Tool:\n" + "with the pointer tool you can:\n" + " select parts\n" + " move parts\n" + " copy parts"); +const char* infoPencil = QT_TR_NOOP("select Pencil Tool:\n" + "with the pencil tool you can:\n" + " create new parts\n" + " modify length of parts"); +const char* infoDel = QT_TR_NOOP("select Delete Tool:\n" + "with the delete tool you can delete parts"); +const char* infoCut = QT_TR_NOOP("select Cut Tool:\n" + "with the cut tool you can split a part"); +const char* infoGlue = QT_TR_NOOP("select Glue Tool:\n" + "with the glue tool you can glue two parts"); +const char* infoScore = QT_TR_NOOP("select Score Tool:\n"); +const char* infoQuant = QT_TR_NOOP("select Quantize Tool:\n" + "insert display quantize event"); +const char* infoDraw = QT_TR_NOOP("select Drawing Tool"); +const char* infoMute = QT_TR_NOOP("select Muting Tool:\n" + "click on part to mute/unmute"); + +ToolB toolList[] = { + {&pointerIcon, QT_TR_NOOP("pointer"), infoPointer }, + {&pencilIcon, QT_TR_NOOP("pencil"), infoPencil }, + {&deleteIcon, QT_TR_NOOP("eraser"), infoDel }, + {&cutIcon, QT_TR_NOOP("cutter"), infoCut }, + {¬e1Icon, QT_TR_NOOP("score"), infoScore }, + {&glueIcon, QT_TR_NOOP("glue"), infoGlue }, + {&quantIcon, QT_TR_NOOP("quantize"), infoQuant }, + {&drawIcon, QT_TR_NOOP("draw"), infoDraw }, + {&editmuteIcon, QT_TR_NOOP("mute parts"), infoMute }, + }; + +//--------------------------------------------------------- +// EditToolBar +//--------------------------------------------------------- + +EditToolBar::EditToolBar(Q3MainWindow* parent, int tools, const char*) + : Q3ToolBar(tr("Edit Tools"), parent) + { + Q3ActionGroup* action = new Q3ActionGroup(parent, "editaction", true); + + nactions = 0; + for (unsigned i = 0; i < sizeof(toolList)/sizeof(*toolList); ++i) { + if ((tools & (1 << i))==0) + continue; + ++nactions; + } + actions = new Action*[nactions]; + bool first = true; + int n = 0; + for (unsigned i = 0; i < sizeof(toolList)/sizeof(*toolList); ++i) { + if ((tools & (1 << i))==0) + continue; + ToolB* t = &toolList[i]; + + Action* a = new Action(action, 1<tip, true); + actions[n] = a; + a->setIconSet(QIcon(**(t->icon))); + a->setToolTip(tr(t->tip)); + a->setWhatsThis(tr(t->ltip)); + if (first) { + a->setOn(true); + first = false; + } + ++n; + } + action->addTo(this); + connect(action, SIGNAL(selected(Q3Action*)), SLOT(toolChanged(QAction*))); + } + +//--------------------------------------------------------- +// toolChanged +//--------------------------------------------------------- + +void EditToolBar::toolChanged(Q3Action* action) + { + emit toolChanged(((Action*)action)->id()); + } + +//--------------------------------------------------------- +// ~EditToolBar +//--------------------------------------------------------- + +EditToolBar::~EditToolBar() + { + delete actions; + } + +//--------------------------------------------------------- +// set +//--------------------------------------------------------- + +void EditToolBar::set(int id) + { + for (int i = 0; i < nactions; ++i) { + Action* action = actions[i]; + if (action->id() == id) { + action->setOn(true); + return; + } + } + } + +//--------------------------------------------------------- +// curTool +//--------------------------------------------------------- + +int EditToolBar::curTool() + { + for (int i = 0; i < nactions; ++i) { + Action* action = actions[i]; + if (action->isOn()) + return action->id(); + } + return -1; + } + diff --git a/muse2/muse/widgets/tools.h b/muse2/muse/widgets/tools.h new file mode 100644 index 00000000..efe5d57c --- /dev/null +++ b/muse2/muse/widgets/tools.h @@ -0,0 +1,57 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: tools.h,v 1.1.1.1 2003/10/27 18:54:49 wschweer Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __TOOLS_H__ +#define __TOOLS_H__ + +#include +//Added by qt3to4: +#include + +class Q3Action; +class Action; +class Q3MainWindow; + +enum Tool { PointerTool=1, PencilTool=2, RubberTool=4, CutTool=8, + ScoreTool=16, GlueTool=32, QuantTool=64, DrawTool=128, MuteTool=256}; + +const int arrangerTools = PointerTool | PencilTool | RubberTool | CutTool | GlueTool | MuteTool; + +struct ToolB { + QPixmap** icon; + const char* tip; + const char* ltip; + }; + +extern ToolB toolList[]; + +//--------------------------------------------------------- +// EditToolBar +//--------------------------------------------------------- + +class EditToolBar : public Q3ToolBar { + Q_OBJECT + Action** actions; + int nactions; + + private slots: + void toolChanged(Q3Action* action); + + signals: + void toolChanged(int); + + public slots: + void set(int id); + + public: + EditToolBar(Q3MainWindow*, int, const char* name = 0); + ~EditToolBar(); + int curTool(); + }; + +#endif + diff --git a/muse2/muse/widgets/transformbase.ui b/muse2/muse/widgets/transformbase.ui new file mode 100644 index 00000000..06aea442 --- /dev/null +++ b/muse2/muse/widgets/transformbase.ui @@ -0,0 +1,1146 @@ + +MidiTransformDialogBase + + + MidiTransformDialogBase + + + + 0 + 0 + 636 + 521 + + + + MusE: Midi Transformator + + + true + + + + unnamed + + + 11 + + + 6 + + + + Layout4 + + + + unnamed + + + 0 + + + 6 + + + + buttonNew + + + &New + + + true + + + + + buttonDelete + + + &Delete + + + true + + + + + Horizontal Spacing2 + + + Horizontal + + + Expanding + + + + 20 + 20 + + + + + + buttonApply + + + &Apply + + + true + + + + + buttonOk + + + &OK + + + true + + + true + + + + + buttonCancel + + + &Cancel + + + true + + + + + + + Layout4 + + + + unnamed + + + 0 + + + 6 + + + + TextLabel1_2 + + + PresetList + + + + + presetList + + + + 3 + 3 + 0 + 0 + + + + + + + + GroupBox5 + + + Processing + + + + unnamed + + + 11 + + + 6 + + + + TextLabel5 + + + Event Type + + + + + + Keep + + + + + Fix + + + + procEventOp + + + + + + Note + + + + + Poly Pressure + + + + + Control Change + + + + + Aftertouch + + + + + Pitch Bend + + + + + NRPN + + + + + RPN + + + + procType + + + + + + Keep + + + + + Plus + + + + + Minus + + + + + Multiply + + + + + Divide + + + + + Fix + + + + + Value 2 + + + + + Invert + + + + + ScaleMap + + + + + Flip + + + + + Dyn + + + + + Random + + + + procVal1Op + + + + + TextLabel6 + + + Value 1 + + + + + TextLabel7 + + + Value 2 + + + + + TextLabel10_2 + + + Length + + + + + TextLabel12 + + + Position + + + + + + Keep + + + + + Plus + + + + + Minus + + + + + Multiply + + + + + Divide + + + + + Fix + + + + + Value 1 + + + + + Invert + + + + + Dyn + + + + + Random + + + + procVal2Op + + + + + + Keep + + + + + Plus + + + + + Minus + + + + + Multiply + + + + + Divide + + + + + Fix + + + + procLenOp + + + + + procVal1b + + + 9999 + + + + + procVal2b + + + 9999 + + + + + procVal1a + + + 99999999 + + + + + + Keep + + + + + Plus + + + + + Minus + + + + + Multiply + + + + + Divide + + + + procPosOp + + + + + procVal2a + + + 99999999 + + + + + procLenA + + + 99999999 + + + + + procPosA + + + 99999999 + + + + + + + GroupBox3 + + + Filter + + + + unnamed + + + 11 + + + 6 + + + + + All + + + + + Equal + + + + + Unequal + + + + selEventOp + + + + + + Note + + + + + Poly Pressure + + + + + Control Change + + + + + Aftertouch + + + + + Pitch Bend + + + + + NRPN + + + + + RPN + + + + selType + + + + + TextLabel3 + + + Value 2 + + + + + TextLabel2 + + + Value 1 + + + + + TextLabel1 + + + Event Type + + + + + + Ignore + + + + + Equal + + + + + Unequal + + + + + Higher + + + + + Lower + + + + + Inside + + + + + Outside + + + + selVal1Op + + + + + TextLabel10 + + + Length + + + + + TextLabel11 + + + Bar Range + + + + + + Ignore + + + + + Equal + + + + + Unequal + + + + + Higher + + + + + Lower + + + + + Inside + + + + + Outside + + + + selVal2Op + + + + + + Ignore + + + + + Equal + + + + + Unequal + + + + + Higher + + + + + Lower + + + + + Inside + + + + + Outside + + + + selLenOp + + + + + + Ignore + + + + + Equal + + + + + Unequal + + + + + Higher + + + + + Lower + + + + + Inside + + + + + Outside + + + + selRangeOp + + + + + selVal1b + + + 127 + + + + + selLenA + + + 127 + + + + + selLenB + + + 127 + + + + + selVal2a + + + 127 + + + + + selVal2b + + + 127 + + + + + selVal1a + + + 127 + + + + + selBarB + + + 3 + + + + + selBarA + + + 1000 + + + 3 + + + + + + + Layout6 + + + + unnamed + + + 0 + + + 6 + + + + GroupBox6_2 + + + Preset + + + + unnamed + + + 11 + + + 6 + + + + Layout5_3 + + + + unnamed + + + 0 + + + 6 + + + + TextLabel13_2 + + + Name: + + + + + nameEntry + + + + + + + TextLabel14_2 + + + Comment: + + + + + commentEntry + + + + + + + GroupBox5_2 + + + Range + + + + unnamed + + + 11 + + + 6 + + + + processAll + + + process all events + + + + + selectedTracks + + + selected tracks + + + + + insideLoop + + + inside loop + + + + + + + GroupBox7_2 + + + Function + + + + unnamed + + + 11 + + + 6 + + + + + Select + + + + + Quantize + + + + + Delete + + + + + Transform + + + + + Insert + + + + + Copy + + + + + Extract + + + + funcOp + + + + + TextLabel9_2 + + + Quantize Value + + + + + funcQuantVal + + + + + + + + + + + SpinBoxFP +
spinboxFP.h
+ + 50 + 20 + + 0 + + 5 + 5 + 0 + 0 + + image0 + valueChanged(int value) + valueChanged(const QString&) + setValue(int) + setPrefix(const QString&) + setSuffix(const QString&) + stepUp() + stepDown() + precision + minValue + maxValue +
+ + ComboQuant +
comboQuant.h
+ + 50 + 20 + + 0 + + 5 + 5 + 0 + 0 + + image0 + valueChanged(int) + setValue(int) +
+
+ + + 789c6dd2c10ac2300c00d07bbf2234b7229d1be245fc04c5a3201e4615f430059d0711ff5ddb2e6bb236ec90eed134cb5a19d8ef36602af5ecdbfeeac05dda0798d3abebde87e3faa374d3807fa0d633a52d38d8de6f679fe33fc776e196f53cd010188256a3600a292882096246517815ca99884606e18044a3a40d91824820924265a7923a2e8bcd05f33db1173e002913175f2a6be6d3294871a2d95fa00e8a94ee017b69d339d90df1e77c57ea072ede6758 + + + + + buttonOk + clicked() + MidiTransformDialogBase + accept() + + + buttonCancel + clicked() + MidiTransformDialogBase + reject() + + + + 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/muse2/muse/widgets/transposebase.ui b/muse2/muse/widgets/transposebase.ui new file mode 100644 index 00000000..caca7a35 --- /dev/null +++ b/muse2/muse/widgets/transposebase.ui @@ -0,0 +1,252 @@ + +TransposeDialogBase + + + TransposeDialogBase + + + + 0 + 0 + 289 + 317 + + + + MusE: Midi Transpose + + + + unnamed + + + 11 + + + 6 + + + + GroupBox1 + + + Value + + + + unnamed + + + 11 + + + 6 + + + + Layout2 + + + + unnamed + + + 0 + + + 6 + + + + delta + + + + 5 + 0 + 0 + 0 + + + + -99 + + + + + TextLabel1 + + + + 3 + 1 + 0 + 0 + + + + halftones + + + + + + + + + ButtonGroup1 + + + Time + + + true + + + + unnamed + + + 11 + + + 6 + + + + time_all + + + all + + + true + + + + + time_selected + + + between markers + + + + + + + ButtonGroup2 + + + Parts + + + true + + + + unnamed + + + 11 + + + 6 + + + + parts_all + + + all + + + true + + + + + parts_selected + + + + + + all in selected tracks + + + + + + + Layout3 + + + + unnamed + + + 0 + + + 6 + + + + Spacer1 + + + Horizontal + + + Expanding + + + + 20 + 20 + + + + + + okButton + + + OK + + + false + + + true + + + + + cancelButton + + + Cancel + + + + + + + + + okButton + clicked() + TransposeDialogBase + accept() + + + cancelButton + clicked() + TransposeDialogBase + reject() + + + + diff --git a/muse2/muse/widgets/ttoolbar.cpp b/muse2/muse/widgets/ttoolbar.cpp new file mode 100644 index 00000000..fe15f885 --- /dev/null +++ b/muse2/muse/widgets/ttoolbar.cpp @@ -0,0 +1,24 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: ttoolbar.cpp,v 1.1.1.1 2003/10/27 18:54:46 wschweer Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include "globals.h" + +//--------------------------------------------------------- +// syncChanged +//--------------------------------------------------------- + +void syncChanged(bool flag) + { + startAction->setEnabled(!flag); + forwardAction->setEnabled(!flag); + rewindAction->setEnabled(!flag); + stopAction->setEnabled(!flag); + playAction->setEnabled(!flag); + } + + diff --git a/muse2/muse/widgets/ttoolbar.h b/muse2/muse/widgets/ttoolbar.h new file mode 100644 index 00000000..b7d34b2d --- /dev/null +++ b/muse2/muse/widgets/ttoolbar.h @@ -0,0 +1,9 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: ttoolbar.h,v 1.1.1.1 2003/10/27 18:54:52 wschweer Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +extern void syncChanged(bool flag); + diff --git a/muse2/muse/widgets/ttoolbutton.cpp b/muse2/muse/widgets/ttoolbutton.cpp new file mode 100644 index 00000000..bf9234c6 --- /dev/null +++ b/muse2/muse/widgets/ttoolbutton.cpp @@ -0,0 +1,30 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: ttoolbutton.cpp,v 1.1 2004/02/21 16:53:50 wschweer Exp $ +// (C) Copyright 2004 Werner Schweer (ws@seh.de) +//========================================================= + +#include +//Added by qt3to4: +#include + +#include "ttoolbutton.h" +#include "gconfig.h" +#include "icons.h" + +//--------------------------------------------------------- +// drawButton +//--------------------------------------------------------- + +void TransparentToolButton::drawButton(QPainter* p) + { + int w = width(); + int h = height(); + QIcon::Mode mode = isEnabled() ? QIcon::Normal : QIcon::Disabled; + QIcon::State state = isOn() ? QIcon::On : QIcon::Off; + const QPixmap pm(iconSet().pixmap(QIcon::Automatic, mode, state)); + p->drawPixmap(QPoint((w - pm.width())/2, (h - pm.height())/2), pm); + } + + diff --git a/muse2/muse/widgets/ttoolbutton.h b/muse2/muse/widgets/ttoolbutton.h new file mode 100644 index 00000000..381f3f18 --- /dev/null +++ b/muse2/muse/widgets/ttoolbutton.h @@ -0,0 +1,28 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: ttoolbutton.h,v 1.1 2004/02/21 16:53:51 wschweer Exp $ +// (C) Copyright 2004 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __TTOOLBUTTON_H__ +#define __TTOOLBUTTON_H__ + +#include + +//--------------------------------------------------------- +// TransparentToolButton +//--------------------------------------------------------- + +class TransparentToolButton : public QToolButton { + Q_OBJECT + + virtual void drawButton(QPainter*); + + public: + TransparentToolButton(QWidget* parent, const char* name = 0) + : QToolButton(parent, name) {} + }; + +#endif + diff --git a/muse2/muse/widgets/utils.cpp b/muse2/muse/widgets/utils.cpp new file mode 100644 index 00000000..2a4852f3 --- /dev/null +++ b/muse2/muse/widgets/utils.cpp @@ -0,0 +1,358 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: utils.cpp,v 1.1.1.1.2.3 2009/11/14 03:37:48 terminator356 Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include +#include "utils.h" +#include +#include +#include + +// Quick bit-shift lookup table +const unsigned int bitShiftLU[32] = { 0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80, + 0x100, 0x200, 0x400, 0x800, 0x1000, 0x2000, 0x4000, 0x8000, + 0x10000, 0x20000, 0x40000, 0x80000, 0x100000, 0x200000, 0x400000, 0x800000, + 0x1000000, 0x2000000, 0x4000000, 0x8000000, 0x10000000, 0x20000000, 0x40000000, 0x80000000 }; + +//--------------------------------------------------------- +// 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 +//--------------------------------------------------------- + +Q3Frame* hLine(QWidget* w) + { + Q3Frame* delim = new Q3Frame(w); + delim->setFrameStyle(Q3Frame::HLine | Q3Frame::Sunken); + return delim; + } + +//--------------------------------------------------------- +// vLine +//--------------------------------------------------------- + +Q3Frame* vLine(QWidget* w) + { + Q3Frame* delim = new Q3Frame(w); + delim->setFrameStyle(Q3Frame::VLine | Q3Frame::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) { + for (int i = 0; i < 16; ++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.latin1()); + return s; + } + +//--------------------------------------------------------- +// u32bitmap2String +//--------------------------------------------------------- +// Added by Tim. p3.3.8 + +QString u32bitmap2String(unsigned int bm) + { + QString s; +//printf("bitmap2string: bm %04x", bm); + //if (bm == 0xffff) + if (bm == 0xffffffff) + s = "all"; + else if (bm == 0) + s = "none"; + else { + bool range = false; + int first = 0; + //unsigned int first = 0; + bool needSpace = false; + //bm &= 0xffff; + //for (int i = 0; i < 17; ++i) { + for (int i = 0; i < 33; ++i) { + if ((i < 32) && ((1U << 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); + //ns.sprintf("%u", first+1); + else + ns.sprintf("%d-%d", first+1, i); + //ns.sprintf("%u-%u", first+1, i); + s += ns; + needSpace = true; + } + range = false; + } + } + } +//printf(" -> <%s>\n", s.latin1()); + return s; + } + +//--------------------------------------------------------- +// string2bitmap +//--------------------------------------------------------- + +int string2bitmap(const QString& str) + { + int val = 0; + QString ss = str.simplifyWhiteSpace(); + const char* s = ss.latin1(); +//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.latin1); + 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; + } + +//--------------------------------------------------------- +// string2u32bitmap +//--------------------------------------------------------- +// Added by Tim. p3.3.8 + +unsigned int string2u32bitmap(const QString& str) + { + //int val = 0; + unsigned int val = 0; + QString ss = str.simplifyWhiteSpace(); + const char* s = ss.latin1(); +//printf("string2bitmap <%s>\n", s); + + if (s == 0) + return 0; + if (strcmp(s, "all") == 0) + //return 0xffff; + return 0xffffffff; + if (strcmp(s, "none") == 0) + return 0; +// printf("str2bitmap: <%s> ", str.latin1); + int tval = 0; + //unsigned int tval = 0; + bool range = false; + int sval = 0; + //unsigned 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) + //for (unsigned int i = sval-1; i < tval; ++i) + val |= (1U << i); + range = false; + } + else { + val |= (1U << (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) + //for (unsigned int i = sval-1; i < tval; ++i) + val |= (1U << i); + } + else if (tval) { + val |= (1U << (tval-1)); + } + //return val & 0xffff; + return val; + } + +//--------------------------------------------------------- +// autoAdjustFontSize +// w: Widget to auto adjust font size +// s: String to fit +// ignoreWidth: Set if dealing with a vertically constrained widget - one which is free to resize horizontally. +// ignoreHeight: Set if dealing with a horizontally constrained widget - one which is free to resize vertically. +//--------------------------------------------------------- +// Added by Tim. p3.3.8 + +bool autoAdjustFontSize(Q3Frame* w, const QString& s, bool ignoreWidth, bool ignoreHeight, int max, int min) +{ + // In case the max or min was obtained from QFont::pointSize() which returns -1 + // if the font is a pixel font, or if min is greater than max... + if(!w || (min < 0) || (max < 0) || (min > max)) + return false; + + // Limit the minimum and maximum sizes to something at least readable. + if(max < 4) + max = 4; + if(min < 4) + min = 4; + + QRect cr = w->contentsRect(); + QRect r; + QFont fnt = w->font(); + // An extra amount just to be sure - I found it was still breaking up two words which would fit on one line. + int extra = 4; + // Allow at least one loop. min can be equal to max. + for(int i = max; i >= min; --i) + { + fnt.setPointSize(i); + QFontMetrics fm(fnt); + r = fm.boundingRect(s); + // Would the text fit within the widget? + if((ignoreWidth || (r.width() <= (cr.width() - extra))) && (ignoreHeight || (r.height() <= cr.height()))) + break; + } + // Added by Tim. p3.3.9 + //printf("autoAdjustFontSize: ptsz:%d widget:%s before setFont x:%d y:%d w:%d h:%d\n", fnt.pointSize(), w->name(), w->x(), w->y(), w->width(), w->height()); + + // Here we will always have a font ranging from min to max point size. + w->setFont(fnt); + // Added by Tim. p3.3.9 + //printf("autoAdjustFontSize: ptsz:%d widget:%s x:%d y:%d w:%d h:%d frame w:%d rw:%d rh:%d\n", fnt.pointSize(), w->name(), w->x(), w->y(), w->width(), w->height(), w->frameWidth(), cr.width(), cr.height()); + + // Force minimum height. Use the expected height for the highest given point size. + // This way the mixer strips aren't all different label heights, but can be larger if necessary. + // Only if ignoreHeight is set (therefore the height is adjustable). + if(ignoreHeight) + { + fnt.setPointSize(max); + QFontMetrics fm(fnt); + // Set the label's minimum height equal to the height of the font. + w->setMinimumHeight(fm.height() + 2 * w->frameWidth()); + } + + return true; +} diff --git a/muse2/muse/widgets/utils.h b/muse2/muse/widgets/utils.h new file mode 100644 index 00000000..aaf501f0 --- /dev/null +++ b/muse2/muse/widgets/utils.h @@ -0,0 +1,33 @@ +//Added by qt3to4: +#include +//========================================================= +// MusE +// Linux Music Editor +// $Id: utils.h,v 1.1.1.1.2.3 2009/11/14 03:37:48 terminator356 Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __UTILS_H__ +#define __UTILS_H__ + +class Q3Frame; +class QWidget; + +#include + +extern QString bitmap2String(int bm); +extern int string2bitmap(const QString& str); +extern QString u32bitmap2String(unsigned int bm); +extern unsigned int string2u32bitmap(const QString& str); +extern bool autoAdjustFontSize(Q3Frame* w, const QString& s, bool ignoreWidth = false, bool ignoreHeight = false, int max = 10, int min = 4); + +extern int num2cols(int min, int max); +extern Q3Frame* hLine(QWidget* parent); +extern Q3Frame* vLine(QWidget* parent); +extern void dump(const unsigned char* p, int n); +extern double curTime(); + +extern const unsigned int bitShiftLU[32]; + +#endif + diff --git a/muse2/muse/widgets/velocity.cpp b/muse2/muse/widgets/velocity.cpp new file mode 100644 index 00000000..42eed7c9 --- /dev/null +++ b/muse2/muse/widgets/velocity.cpp @@ -0,0 +1,46 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: velocity.cpp,v 1.1.1.1 2003/10/27 18:55:04 wschweer Exp $ +// (C) Copyright 2001 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include +//#include +#include + +#include "velocity.h" + +#include "song.h" + +//--------------------------------------------------------- +// Velocity +//--------------------------------------------------------- + +Velocity::Velocity(QWidget* parent, const char* name) + : VelocityBase(parent, name, true) + { + } + +//--------------------------------------------------------- +// accept +//--------------------------------------------------------- + +void Velocity::accept() + { + _range = rangeGroup->id(rangeGroup->selected()); + _rateVal = rate->value(); + _offsetVal = offset->value(); + VelocityBase::accept(); + } + +//--------------------------------------------------------- +// setRange +//--------------------------------------------------------- + +void Velocity::setRange(int id) + { + rangeGroup->setButton(id); + } + diff --git a/muse2/muse/widgets/velocity.h b/muse2/muse/widgets/velocity.h new file mode 100644 index 00000000..6d2ca60a --- /dev/null +++ b/muse2/muse/widgets/velocity.h @@ -0,0 +1,36 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: velocity.h,v 1.1.1.1 2003/10/27 18:54:51 wschweer Exp $ +// (C) Copyright 2001 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __VELOCITY_H__ +#define __VELOCITY_H__ + +#include "velocitybase.h" + +//--------------------------------------------------------- +// Velocity +//--------------------------------------------------------- + +class Velocity : public VelocityBase { + int _range; + int _rateVal; + int _offsetVal; + + Q_OBJECT + + protected slots: + void accept(); + + public: + Velocity(QWidget* parent, const char* name = 0); + void setRange(int id); + int range() const { return _range; } + int rateVal() const { return _rateVal; } + int offsetVal() const { return _offsetVal; } + }; + +#endif + diff --git a/muse2/muse/widgets/velocitybase.ui b/muse2/muse/widgets/velocitybase.ui new file mode 100644 index 00000000..e1510348 --- /dev/null +++ b/muse2/muse/widgets/velocitybase.ui @@ -0,0 +1,232 @@ + +VelocityBase + + + VelocityBase + + + + 0 + 0 + 275 + 274 + + + + MusE: Modify Velocity + + + + unnamed + + + 11 + + + 6 + + + + rangeGroup + + + Range + + + true + + + + unnamed + + + 11 + + + 6 + + + + RadioButton5 + + + All Events + + + 0 + + + + + RadioButton6 + + + Selected Events + + + true + + + 1 + + + + + RadioButton7 + + + Looped Events + + + 2 + + + + + RadioButton8 + + + Selected & Looped + + + 3 + + + + + + + GroupBox3 + + + Values + + + + unnamed + + + 11 + + + 6 + + + + TextLabel3 + + + Rate: + + + + + TextLabel4 + + + Offset: + + + + + rate + + + % + + + 200 + + + 100 + + + + + offset + + + 127 + + + 1 + + + 1 + + + + + + + Layout3 + + + + unnamed + + + 0 + + + 6 + + + + Spacer1 + + + Horizontal + + + Expanding + + + + 20 + 20 + + + + + + okButton + + + OK + + + false + + + true + + + + + cancelButton + + + Cancel + + + + + + + + + okButton + clicked() + VelocityBase + accept() + + + cancelButton + clicked() + VelocityBase + reject() + + + + diff --git a/muse2/muse/widgets/view.cpp b/muse2/muse/widgets/view.cpp new file mode 100644 index 00000000..75116415 --- /dev/null +++ b/muse2/muse/widgets/view.cpp @@ -0,0 +1,514 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: view.cpp,v 1.3.2.2 2009/04/06 01:24:55 terminator356 Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#include "view.h" +#include +#include +#include +//Added by qt3to4: +#include +#include +#include +#include +#include +#include + +//--------------------------------------------------------- +// View::View +// double xMag = (xmag < 0) ? 1.0/-xmag : double(xmag) +//--------------------------------------------------------- + +View::View(QWidget* w, int xm, int ym, const char* name) + : QWidget(w, name, Qt::WNoAutoErase | Qt::WResizeNoErase) + { + xmag = xm; + ymag = ym; + xpos = 0; + ypos = 0; + xorg = 0; + yorg = 0; + _virt = true; + setBackgroundMode(Qt::NoBackground); + brush.setStyle(Qt::SolidPattern); + brush.setColor(Qt::lightGray); + pmValid = false; + } + +//--------------------------------------------------------- +// setOrigin +//--------------------------------------------------------- + +void View::setOrigin(int x, int y) + { + xorg = x; + yorg = y; + redraw(); + } + +//--------------------------------------------------------- +// setXMag +//--------------------------------------------------------- + +void View::setXMag(int xs) + { + xmag = xs; + redraw(); + } + +//--------------------------------------------------------- +// seqYMag +//--------------------------------------------------------- + +void View::setYMag(int ys) + { + ymag = ys; + redraw(); + } + +//--------------------------------------------------------- +// setXPos +// x - phys offset +//--------------------------------------------------------- + +void View::setXPos(int x) + { + int delta = xpos - x; // - -> shift left + xpos = x; + if (pm.isNull()) + return; + if (!pmValid) { + //printf("View::setXPos !pmValid x:%d width:%d delta:%d\n", x, width(), delta); + redraw(); + return; + } + int w = width(); + int h = height(); + + QRect r; + if (delta >= w || delta <= -w) + r = QRect(0, 0, w, h); + else if (delta < 0) { // shift left + bitBlt(&pm, 0, 0, &pm, -delta, 0, w + delta, h, true); //CopyROP, true); // ddskrjo + r = QRect(w + delta, 0, -delta, h); + } + else { // shift right + bitBlt(&pm, delta, 0, &pm, 0, 0, w-delta, h, true); //CopyROP, true); // ddskrjo + r = QRect(0, 0, delta, h); + } + QRect olr = overlayRect(); + QRect olr1(olr); + olr1.moveBy(delta, 0); + + r |= olr; + r |= olr1; + + //printf("View::setXPos x:%d w:%d delta:%d r.x:%d r.w:%d\n", x, w, delta, r.x(), r.width()); + + paint(r); + update(); + } + +//--------------------------------------------------------- +// setYPos +//--------------------------------------------------------- + +void View::setYPos(int y) + { + int delta = ypos - y; // - -> shift up + ypos = y; + if (pm.isNull()) + return; + if (!pmValid) { + //printf("View::setYPos !pmValid y:%d height:%d delta:%d\n", y, height(), delta); + + redraw(); + return; + } + int w = width(); + int h = height(); + QRect r; + if (delta >= h || delta <= -h) + r = QRect(0, 0, w, h); + else if (delta < 0) { // shift up + bitBlt(&pm, 0, 0, &pm, 0, -delta, w, h + delta, true); //CopyROP, true); ddskrjo + r = QRect(0, h + delta, w, -delta); + } + else { // shift down + bitBlt(&pm, 0, delta, &pm, 0, 0, w, h-delta, true); // CopyROP, true); ddskrjo + + // NOTE: June 2 2010: On my machine with an old NV V8200 + prop drivers (curr 96.43.11), + // this is a problem. There is severe graphical corruption in some of the view-based windows. + // Not just here but several other windows (ex. ladspa browser). + // I believe (?) I saw other QT3 apps exhibit this problem, too. QT4 apps don't do it. + // Neither does it happen when xorg drivers used. + // + // However, there is one type of MusE corruption which ALL drivers seem to show, and that is + // the arranger 'grey' non-part-based tracks (Input, Output, Group etc.). + // It is also observed on another machine with an ATI card and a different linux distro. + // This change also fixes that problem, although the fact that xorg drivers show the problem + // had long made me believe that it was our drawing technique, not particularly this line. + // Meaning that perhaps this line is not the right way to fix that problem. + // + // On the other hand the two problems may be related, and only one shows with xorg drivers... + // Ultimately it could just be my NV card, as a request for similar experience in mail list + // returned all negative. + // + // FIXME: This change cures it for me, but we shouldn't leave this in - shouldn't need to do this... + // + //r = QRect(0, 0, w, delta); + // Changed p3.3.43 + r = QRect(0, 0, w, h); + + } + QRect olr = overlayRect(); + QRect olr1(olr); + olr1.moveBy(0, delta); + + r |= olr; + r |= olr1; + paint(r); + update(); + } + +//--------------------------------------------------------- +// resizeEvent +//--------------------------------------------------------- + +void View::resizeEvent(QResizeEvent* ev) + { + pm.resize(ev->size()); + pmValid = false; + } + +//--------------------------------------------------------- +// paintEvent +//--------------------------------------------------------- + +void View::paintEvent(QPaintEvent* ev) + { + //printf("View::paintEvent pmValid:%d x:%d width:%d y:%d height:%d\n", pmValid, ev->rect().x(), ev->rect().width(), ev->rect().y(), ev->rect().height()); + if (!pmValid) + paint(ev->rect()); + bitBlt(this, ev->rect().topLeft(), &pm, ev->rect(), true); // CopyROP, true); ddskrjo + } + +//--------------------------------------------------------- +// redraw +//--------------------------------------------------------- + +void View::redraw() + { + QRect r(0, 0, pm.width(), pm.height()); + //printf("View::redraw() r.x:%d r.w:%d\n", r.x(), r.width()); + paint(r); + update(); + } + +//--------------------------------------------------------- +// redraw +//--------------------------------------------------------- + +void View::redraw(const QRect& r) + { + //printf("View::redraw(QRect& r) r.x:%d r.w:%d\n", r.x(), r.width()); + paint(r); + update(r); + } + +//--------------------------------------------------------- +// paint +// r - phys coord system +//--------------------------------------------------------- + +void View::paint(const QRect& r) + { + if (pm.isNull()) + return; + QRect rr(r); + if (!pmValid) { + pmValid = true; + rr = QRect(0, 0, pm.width(), pm.height()); + } + QPainter p(&pm); + if (bgPixmap.isNull()) + p.fillRect(rr, brush); + else + p.drawTiledPixmap(rr, bgPixmap, QPoint(xpos + rmapx(xorg) + + rr.x(), ypos + rmapy(yorg) + rr.y())); + p.setClipRegion(rr); + //printf("View::paint r.x:%d w:%d\n", rr.x(), rr.width()); + pdraw(p, rr); // draw into pixmap + + p.resetXForm(); + drawOverlay(p); + } + +//--------------------------------------------------------- +// keyPressEvent +//--------------------------------------------------------- + +void View::keyPressEvent(QKeyEvent* event) + { + viewKeyPressEvent(event); + } + +//--------------------------------------------------------- +// viewKeyPressEvent +//--------------------------------------------------------- + +void View::viewKeyPressEvent(QKeyEvent* event) + { + event->ignore(); + } + +//--------------------------------------------------------- +// mousePressEvent +//--------------------------------------------------------- + +void View::mousePressEvent(QMouseEvent* ev) + { + QMouseEvent e(ev->type(), mapDev(ev->pos()), + ev->globalPos(), ev->button(), ev->state()); + viewMousePressEvent(&e); + } + +//--------------------------------------------------------- +// mouseDoubleClickEvent +//--------------------------------------------------------- + +void View::mouseDoubleClickEvent(QMouseEvent* ev) + { + QMouseEvent e(ev->type(), mapDev(ev->pos()), + ev->globalPos(), ev->button(), ev->state()); + viewMouseDoubleClickEvent(&e); + } + +//--------------------------------------------------------- +// mouseMoveEvent +//--------------------------------------------------------- + +void View::mouseMoveEvent(QMouseEvent* ev) + { + QMouseEvent e(ev->type(), mapDev(ev->pos()), + ev->globalPos(), ev->button(), ev->state()); + viewMouseMoveEvent(&e); + } + +//--------------------------------------------------------- +// mouseReleaseEvent +//--------------------------------------------------------- + +void View::mouseReleaseEvent(QMouseEvent* ev) + { + QMouseEvent e(ev->type(), mapDev(ev->pos()), + ev->globalPos(), ev->button(), ev->state()); + viewMouseReleaseEvent(&e); + } + +//--------------------------------------------------------- +// dropEvent +//--------------------------------------------------------- + +void View::dropEvent(QDropEvent* ev) + { + ev->setPoint(mapDev(ev->pos())); + viewDropEvent(ev); + } + +//--------------------------------------------------------- +// setBg +//--------------------------------------------------------- + +void View::setBg(const QPixmap& bgpm) + { + bgPixmap = bgpm; + redraw(); + } + +//--------------------------------------------------------- +// pdraw +// r - phys coords +//--------------------------------------------------------- + +void View::pdraw(QPainter& p, const QRect& r) + { + if (virt()) { + setPainter(p); + int x = r.x(); + int y = r.y(); + int w = r.width(); + int h = r.height(); + if (xmag <= 0) { + x -= 1; + w += 2; + x = (x + xpos + rmapx(xorg)) * (-xmag); + w = w * (-xmag); + } + else { + x = (x + xpos + rmapx(xorg)) / xmag; + w = (w + xmag - 1) / xmag; + x -= 1; + w += 2; + } + if (ymag <= 0) { + y -= 1; + h += 2; + y = (y + ypos + rmapy(yorg)) * (-ymag); + h = h * (-ymag); + } + else { + y = (y + ypos + rmapy(yorg)) / ymag; + h = (h + ymag - 1) / ymag; + y -= 1; + h += 2; + } + + if (x < 0) + x = 0; + if (y < 0) + y = 0; + draw(p, QRect(x, y, w, h)); + } + else + draw(p, r); + } + +//--------------------------------------------------------- +// setPainter +//--------------------------------------------------------- + +void View::setPainter(QPainter& p) + { + p.resetXForm(); + p.translate(double(-(xpos+rmapx(xorg))), double(-(ypos+rmapy(yorg)))); + double xMag = (xmag < 0) ? 1.0/(-xmag) : double(xmag); + double yMag = (ymag < 0) ? 1.0/(-ymag) : double(ymag); + p.scale(xMag, yMag); + } + +//--------------------------------------------------------- +// map +//--------------------------------------------------------- + +QRect View::map(const QRect& r) const + { + int x, y, w, h; + if (xmag < 0) { + x = r.x()/(-xmag) - (xpos + rmapx(xorg)); // round down + w = (r.width()-xmag-1) / (-xmag); // round up + } + else { + x = r.x()*xmag - (xpos + rmapx(xorg)); + w = r.width() * xmag; + } + if (ymag < 0) { + y = r.y()/-ymag - (ypos + rmapy(yorg)); + h = (r.height()-ymag-1) / (-ymag); + } + else { + y = r.y() * ymag - (ypos + rmapy(yorg)); + h = r.height() * ymag; + } + return QRect(x, y, w, h); + } + +QPoint View::map(const QPoint& p) const + { + int x, y; + if (xmag < 0) { + x = p.x()/(-xmag) - (xpos + rmapx(xorg)); // round down + } + else { + x = p.x()*xmag - (xpos + rmapx(xorg)); + } + if (ymag < 0) { + y = p.y()/-ymag - (ypos + rmapy(yorg)); + } + else { + y = p.y() * ymag - (ypos + rmapy(yorg)); + } + return QPoint(x, y); + } + +QRect View::mapDev(const QRect& r) const + { + return QRect(mapxDev(r.x()), mapyDev(r.y()), + rmapxDev(r.width()), rmapyDev(r.height())); + } + +QPoint View::mapDev(const QPoint& r) const + { + return QPoint(mapxDev(r.x()), mapyDev(r.y())); + } + +int View::mapx(int x) const + { + if (xmag < 0) { + return (x-xmag/2)/(-xmag) - (xpos + rmapx(xorg)); // round + } + else { + return (x * xmag) - (xpos + rmapx(xorg)); + } + } +int View::mapy(int y) const + { + if (ymag < 0) { + return (y-ymag/2)/(-ymag) - (ypos + rmapy(yorg)); // round + } + else { + return (y * ymag) - (ypos + rmapy(yorg)); + } + } +int View::mapxDev(int x) const + { + int val; + if (xmag <= 0) + val = (x + xpos + rmapx(xorg)) * (-xmag); + else + val = (x + xpos + rmapx(xorg) + xmag / 2) / xmag; + if (val < 0) // DEBUG + val = 0; + return val; + } + +int View::mapyDev(int y) const + { + if (ymag <= 0) + return (y + ypos + rmapy(yorg)) * (-ymag); + else + return (y + ypos + rmapy(yorg) + ymag / 2) / ymag; + } + +int View::rmapx(int x) const + { + if (xmag < 0) + return (x-xmag/2) / (-xmag); + else + return x * xmag; + } +int View::rmapy(int y) const + { + if (ymag < 0) + return (y-ymag/2) / (-ymag); + else + return y * ymag; + } +int View::rmapxDev(int x) const + { + if (xmag <= 0) + return x * (-xmag); + else + return (x + xmag/2) / xmag; + } +int View::rmapyDev(int y) const + { + if (ymag <= 0) + return y * (-ymag); + else + return (y + ymag/2) / ymag; + } + diff --git a/muse2/muse/widgets/view.h b/muse2/muse/widgets/view.h new file mode 100644 index 00000000..5eaf761f --- /dev/null +++ b/muse2/muse/widgets/view.h @@ -0,0 +1,108 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: view.h,v 1.2.2.1 2008/01/26 07:23:21 terminator356 Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __VIEW_H__ +#define __VIEW_H__ + +#include +#include +#include +#include +#include +//Added by qt3to4: +#include +#include +#include +#include +#include + +//--------------------------------------------------------- +// View +// horizontal View with double buffering +//--------------------------------------------------------- + +class View : public QWidget { + QPixmap pm; // for double buffering + bool pmValid; + QPixmap bgPixmap; // background Pixmap + QBrush brush; + bool _virt; + Q_OBJECT + + protected: + int xorg; + int yorg; + int xpos, ypos; + int xmag, ymag; + + virtual void keyPressEvent(QKeyEvent* event); + virtual void mousePressEvent(QMouseEvent* event); + virtual void mouseDoubleClickEvent(QMouseEvent* event); + virtual void mouseMoveEvent(QMouseEvent* event); + virtual void mouseReleaseEvent(QMouseEvent* event); + virtual void dropEvent(QDropEvent* event); + + virtual void draw(QPainter&, const QRect&) {} + virtual void drawOverlay(QPainter&) {} + virtual QRect overlayRect() const { return QRect(0, 0, 0, 0); } + + virtual void pdraw(QPainter&, const QRect&); + + virtual void paintEvent(QPaintEvent* ev); + void redraw(const QRect&); + + void paint(const QRect& r); + + virtual void resizeEvent(QResizeEvent*); + virtual void viewKeyPressEvent(QKeyEvent*); + virtual void viewMousePressEvent(QMouseEvent*) {} + virtual void viewMouseDoubleClickEvent(QMouseEvent*) {} + virtual void viewMouseMoveEvent(QMouseEvent*) {} + virtual void viewMouseReleaseEvent(QMouseEvent*) {} + virtual void viewDropEvent(QDropEvent*) {} + + QRect map(const QRect&) const; + QPoint map(const QPoint&) const; + QRect mapDev(const QRect&) const; + QPoint mapDev(const QPoint&) const; + + int mapx(int x) const; + int mapy(int y) const; + int mapyDev(int y) const; + int mapxDev(int x) const; + int rmapy(int y) const; + int rmapyDev(int y) const; + + void setPainter(QPainter& p); + + public slots: + void setXPos(int); + void setYPos(int); + void setXMag(int xs); + void setYMag(int ys); + void redraw(); + + public: + View(QWidget*, int, int, const char* name = 0); + void setBg(const QPixmap& pm); + void setBg(const QColor& color) { brush.setColor(color); redraw(); } + void setXOffset(int v) { setXPos(mapx(v)); } + int xOffset() const { return mapxDev(xpos)-xorg; } + int xOffsetDev() const { return xpos-rmapx(xorg); } + + int yOffset() const { return mapyDev(ypos)-yorg; } + int getXScale() const { return xmag; } + int getYScale() const { return ymag; } + void setOrigin(int x, int y); + void setVirt(bool flag) { _virt = flag; } + bool virt() const { return _virt; } + int rmapxDev(int x) const; + int rmapx(int x) const; + }; + +#endif + diff --git a/muse2/muse/widgets/vscale.cpp b/muse2/muse/widgets/vscale.cpp new file mode 100644 index 00000000..c0679882 --- /dev/null +++ b/muse2/muse/widgets/vscale.cpp @@ -0,0 +1,27 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: vscale.cpp,v 1.1.1.1 2003/10/27 18:54:41 wschweer Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#include "vscale.h" +#include +//Added by qt3to4: +#include + +//--------------------------------------------------------- +// paintEvent +//--------------------------------------------------------- + +void VScale::paintEvent(QPaintEvent*) + { + int h = height(); + int w = width(); + QPainter p(this); + p.drawLine(w/2, h/4, w, h/4); + p.drawLine(0, h/2, w, h/2); + p.drawLine(w/2, (3*h)/4, w, (3*h)/4); + setFixedWidth(18); + } + diff --git a/muse2/muse/widgets/vscale.h b/muse2/muse/widgets/vscale.h new file mode 100644 index 00000000..b6b381ac --- /dev/null +++ b/muse2/muse/widgets/vscale.h @@ -0,0 +1,29 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: vscale.h,v 1.1.1.1.2.1 2008/01/19 13:33:47 wschweer Exp $ +// (C) Copyright 1999 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __VSCALE_H__ +#define __VSCALE_H__ + +#include +//Added by qt3to4: +#include + +//--------------------------------------------------------- +// VScale +//--------------------------------------------------------- + +class VScale : public QWidget { + Q_OBJECT + + virtual void paintEvent(QPaintEvent*); + + public: + VScale(QWidget* parent) : QWidget(parent) {} + }; + +#endif + diff --git a/muse2/muse/widgets/wtrackinfobase.ui b/muse2/muse/widgets/wtrackinfobase.ui new file mode 100644 index 00000000..a429398a --- /dev/null +++ b/muse2/muse/widgets/wtrackinfobase.ui @@ -0,0 +1,224 @@ + +WaveTrackInfoBase + + + WaveTrackInfoBase + + + + 0 + 0 + 120 + 548 + + + + + 3 + 3 + 0 + 0 + + + + + 0 + 0 + + + + + 32767 + 32767 + + + + MusE: TrackInfo + + + + + + + + + + unnamed + + + 1 + + + 1 + + + + TextLabel1 + + + + 7 + 0 + 0 + 0 + + + + WinPanel + + + Raised + + + 1 + + + 0 + + + Track Info + + + AlignCenter + + + + + iName + + + + 7 + 0 + 0 + 0 + + + + Track Name + + + Track Name + + + + + TextLabel1_2 + + + + 5 + 0 + 0 + 0 + + + + Output Route: + + + + + outputRoute + + + + 5 + 0 + 0 + 0 + + + + + + TextLabel2 + + + + 5 + 0 + 0 + 0 + + + + Input Route: + + + + + inputRoute + + + + 5 + 0 + 0 + 0 + + + + + + TextLabel1_3 + + + + 5 + 0 + 0 + 0 + + + + Ports: + + + + + + Mono + + + + + Stereo + + + + ports + + + + 5 + 0 + 0 + 0 + + + + + + Spacer1 + + + Vertical + + + Expanding + + + + 0 + 371 + + + + + + + iName + + + diff --git a/muse2/muse/widgets/wtscale.cpp b/muse2/muse/widgets/wtscale.cpp new file mode 100644 index 00000000..5976670e --- /dev/null +++ b/muse2/muse/widgets/wtscale.cpp @@ -0,0 +1,289 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: wtscale.cpp,v 1.3 2004/04/11 13:03:32 wschweer Exp $ +// (C) Copyright 2000 Werner Schweer (ws@seh.de) +//========================================================= + +#include + +#include +#include +//Added by qt3to4: +#include +#include +#include + +#include "wtscale.h" +#include "midieditor.h" +#include "globals.h" +#include "song.h" +#include "../marker/marker.h" +#include "icons.h" + +//--------------------------------------------------------- +// WTScale +// Wave Time Scale +//--------------------------------------------------------- + +WTScale::WTScale(int* r, QWidget* parent, int xs) + : View(parent, xs, 1) + { + QToolTip::add(this, tr("bar scale")); + barLocator = false; + raster = r; + pos[0] = int(song->tempomap()->tick2time(song->cpos()) * sampleRate); + pos[1] = int(song->tempomap()->tick2time(song->lpos()) * sampleRate); + pos[2] = int(song->tempomap()->tick2time(song->rpos()) * sampleRate); + pos[3] = -1; // do not show + button = Qt::NoButton; + setMouseTracking(true); + connect(song, SIGNAL(posChanged(int, unsigned, bool)), SLOT(setPos(int, unsigned, bool))); + connect(song, SIGNAL(songChanged(int)), SLOT(songChanged(int))); + connect(song, SIGNAL(markerChanged(int)), SLOT(redraw())); + setFixedHeight(28); + setBg(QColor(0xe0, 0xe0, 0xe0)); + } + +//--------------------------------------------------------- +// songChanged +//--------------------------------------------------------- + +void WTScale::songChanged(int /*type*/) + { + } + +//--------------------------------------------------------- +// setPos +//--------------------------------------------------------- + +void WTScale::setPos(int idx, unsigned val, bool adjustScrollbar) + { + val = int(song->tempomap()->tick2time(val) * sampleRate); + if (val == pos[idx]) + return; + int opos = mapx(pos[idx] == -1 ? val : pos[idx]); + pos[idx] = val; + if (!isVisible()) + return; + val = mapx(val); + int x = -9; + int w = 18; + if (opos > val) { + w += opos - val; + x += val; + } + else { + w += val - opos; + x += opos; + } + redraw(QRect(x, 0, w, height())); + } + +//--------------------------------------------------------- +// viewMousePressEvent +//--------------------------------------------------------- + +void WTScale::viewMousePressEvent(QMouseEvent* event) + { + button = event->button(); + viewMouseMoveEvent(event); + } + +//--------------------------------------------------------- +// viewMouseReleaseEvent +//--------------------------------------------------------- + +void WTScale::viewMouseReleaseEvent(QMouseEvent* event) + { + button = Qt::NoButton; + } + +//--------------------------------------------------------- +// viewMouseMoveEvent +//--------------------------------------------------------- + +void WTScale::viewMouseMoveEvent(QMouseEvent* event) + { + int x= song->tempomap()->time2tick(double(event->x())/double(sampleRate)); + x = song->raster(x, *raster); + if (x < 0) + x = 0; + emit timeChanged(x); + int i; + switch (button) { + case Qt::LeftButton: + i = 0; + break; + case Qt::MidButton: + i = 1; + break; + case Qt::RightButton: + i = 2; + break; + default: + return; + } + song->setPos(i, x); + } + +//--------------------------------------------------------- +// leaveEvent +//--------------------------------------------------------- + +void WTScale::leaveEvent(QEvent*) + { +// emit timeChanged(MAXINT); + } + +//--------------------------------------------------------- +// draw +//--------------------------------------------------------- + +void WTScale::pdraw(QPainter& p, const QRect& r) + { + int x = r.x(); + int w = r.width(); + + x -= 20; + w += 40; // wg. Text + + // + // draw Marker + // + int y = 12; + p.setPen(Qt::black); + p.setFont(font4); + p.drawLine(r.x(), y+1, r.x() + r.width(), y+1); + QRect tr(r); + tr.setHeight(12); + MarkerList* marker = song->marker(); + for (iMarker m = marker->begin(); m != marker->end(); ++m) { + int xp = mapx(int(m->second.time() * sampleRate)); + if (xp > x+w) + break; + int xe = r.x() + r.width(); + iMarker mm = m; + ++mm; + if (mm != marker->end()) { + xe = mapx(mm->first); + } + QRect tr(xp, 0, xe-xp, 13); + if (m->second.current()) { + p.fillRect(tr, Qt::white); + } + if (r.intersects(tr)) { + int x2; + 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()); + } + } + + //--------------------------------------------------- + // draw location marker + //--------------------------------------------------- + + int h = height()-12; + + if (barLocator) { + p.setPen(Qt::red); + int xp = mapx(pos[0]); + if (xp >= x && xp < x+w) + p.drawLine(xp, y, xp, h); + p.setPen(Qt::blue); + xp = mapx(pos[1]); + if (xp >= x && xp < x+w) + p.drawLine(xp, y, xp, h); + xp = mapx(pos[2]); + if (xp >= x && xp < x+w) + p.drawLine(xp, y, xp, h); + } + else { + for (int i = 0; i < 3; ++i) { + int xp = mapx(pos[i]); + if (xp >= x && xp < x+w) { + QPixmap* pm = markIcon[i]; + p.drawPixmap(xp - pm->width()/2, y-1, *pm); + } + } + } + p.setPen(Qt::black); + if (pos[3] != -1) { + int xp = mapx(pos[3]); + if (xp >= x && xp < x+w) + p.drawLine(xp, 0, xp, height()); + } + + int ctick = song->samples2tick(mapxDev(x)); + int bar1, bar2, beat, tick; + song->tickValues(ctick, &bar1, &beat, &tick); + song->tickValues(song->samples2tick(mapxDev(x+w)), &bar2, &beat, &tick); + +//printf("bar %d %d-%d=%d\n", bar, ntick, stick, ntick-stick); + + int stick = song->bar2tick(bar1, 0, 0); + int ntick; + for (int bar = bar1; bar <= bar2; bar++, stick = ntick) { + ntick = song->bar2tick(bar+1, 0, 0); + int a = song->tick2samples(ntick); + int b = song->tick2samples(stick); + int tpix = rmapx(a - b); + if (tpix < 64) { + // don´t show beats if measure is this small + int n = 1; + if (tpix < 32) + n = 2; + if (tpix <= 16) + n = 4; + if (tpix < 8) + n = 8; + if (tpix <= 4) + n = 16; + if (tpix <= 2) + n = 32; + if (bar % n) + continue; + p.setFont(font3); + int x = mapx(b); + QString s; + s.setNum(bar + 1); + p.drawLine(x, y+1, x, y+1+h); + QRect r = QRect(x+2, y, 0, h); + p.drawText(r, Qt::AlignLeft|Qt::AlignVCenter|Qt::TextDontClip, s); + } + else { + int z, n; + song->timesig(stick, z, n); + for (int beat = 0; beat < z; beat++) { + int xx = song->tick2samples(song->bar2tick(bar, beat, 0)); + int xp = mapx(xx); + QString s; + QRect r(xp+2, y, 0, h); + int y1; + int num; + if (beat == 0) { + num = bar + 1; + y1 = y + 1; + p.setFont(font3); + } + else { + num = beat + 1; + y1 = y + 7; + p.setFont(font1); + r.setY(y+3); + } + s.setNum(num); + p.drawLine(xp, y1, xp, y+1+h); + p.drawText(r, Qt::AlignLeft|Qt::AlignVCenter|Qt::TextDontClip, s); + } + } + } + } + diff --git a/muse2/muse/widgets/wtscale.h b/muse2/muse/widgets/wtscale.h new file mode 100644 index 00000000..ab378296 --- /dev/null +++ b/muse2/muse/widgets/wtscale.h @@ -0,0 +1,51 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: wtscale.h,v 1.2 2004/01/11 18:55:37 wschweer Exp $ +// (C) Copyright 2000 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __MTSCALE_H__ +#define __MTSCALE_H__ + +#include "view.h" +//Added by qt3to4: +#include +#include + +class QPainter; + +//--------------------------------------------------------- +// WTScale +// scale for wave track +//--------------------------------------------------------- + +class WTScale : public View { + Q_OBJECT + int* raster; + unsigned pos[4]; + int button; + bool barLocator; + + private slots: + void songChanged(int); + + protected: + virtual void pdraw(QPainter&, const QRect&); + virtual void viewMousePressEvent(QMouseEvent* event); + virtual void viewMouseMoveEvent(QMouseEvent* event); + virtual void viewMouseReleaseEvent(QMouseEvent* event); + virtual void leaveEvent(QEvent*e); + + signals: + void timeChanged(unsigned); + + public slots: + void setPos(int, unsigned, bool); + + public: + WTScale(int* raster, QWidget* parent, int xscale); + void setBarLocator(bool f) { barLocator = f; } + }; +#endif + diff --git a/muse2/muse/xml.cpp b/muse2/muse/xml.cpp new file mode 100644 index 00000000..88251cc8 --- /dev/null +++ b/muse2/muse/xml.cpp @@ -0,0 +1,733 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: xml.cpp,v 1.17.2.6 2009/12/07 20:48:45 spamatica Exp $ +// +// (C) Copyright 2000 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include +#include +#include +#include +#include + +#include "xml.h" + +//--------------------------------------------------------- +// Note: +// this code is a Q/D hack for reading/parsing and +// writing XML-Files +// - can only handle the XML subset used by MusE +// - may not handle misformed XML (eg. when manually +// editing MusE output) + +//--------------------------------------------------------- +// Xml +//--------------------------------------------------------- + +Xml::Xml(FILE* _f) + { + f = _f; + _line = 0; + _col = 0; + level = 0; + inTag = false; + inComment = false; + lbuffer[0] = 0; + bufptr = lbuffer; + _minorVersion = -1; + _majorVersion = -1; + } + +Xml::Xml(const char* buf) + { + f = 0; + _line = 0; + _col = 0; + level = 0; + inTag = false; + inComment = false; + bufptr = buf; + _minorVersion = -1; + _majorVersion = -1; + } + +//--------------------------------------------------------- +// next +//--------------------------------------------------------- + +void Xml::next() + { + if (*bufptr == 0) { + if (f == 0 || fgets(lbuffer, 512, f) == 0) { + c = EOF; + return; + } + bufptr = lbuffer; + } + c = *bufptr++; + if (c == '\n') { + ++_line; + _col = -1; + } + ++_col; + } + +//--------------------------------------------------------- +// nextc +// get next non space character +//--------------------------------------------------------- + +void Xml::nextc() + { + next(); + while (c == ' ' || c == '\t' || c == '\n') + next(); + } + +//--------------------------------------------------------- +// token +// read token into _s2 +//--------------------------------------------------------- + +void Xml::token(int cc) + { + char buffer[512]; + int i = 0; + for (; i < 511;) { + if (c == ' ' || c == '\t' || c == cc || c == '\n' || c == EOF) + break; + buffer[i++] = c; + next(); + } + buffer[i] = 0; + _s2 = buffer; // deep copy !? + } + +//--------------------------------------------------------- +// stoken +// read string token into _s2 +//--------------------------------------------------------- + +void Xml::stoken() + { + char buffer[1024*4]; + int i = 0; + buffer[i] = c; + ++i; + next(); + for (;i < 1024*4-1;) { + if (c == '"') { + buffer[i++] = c; + next(); + break; + } + if (c == '&') { + char entity[6]; + int k = 0; + for (; k < 6; ++k) { + next(); + if (c == EOF) + break; + else if (c == ';') { + entity[k] = 0; + if (strcmp(entity, "quot") == 0) + c = '"'; + else if (strcmp(entity, "amp") == 0) + c = '&'; + else if (strcmp(entity, "lt") == 0) + c = '<'; + else if (strcmp(entity, "gt") == 0) + c = '>'; + else if (strcmp(entity, "apos") == 0) + c = '\\'; + else + entity[k] = c; + break; + } + else + entity[k] = c; + } + if (c == EOF || k == 6) { + // dump entity + int n = 0; + buffer[i++] = '&'; + for (;(i < 511) && (n < k); ++i, ++n) + buffer[i] = entity[n]; + } + else + buffer[i++] = c; + } + else if(c != EOF) + buffer[i++] = c; + if (c == EOF) + break; + next(); + } + buffer[i] = 0; + _s2 = buffer; + } + +//--------------------------------------------------------- +// strip +// strip `"` from string +//--------------------------------------------------------- + +QString Xml::strip(const QString& s) + { + int l = s.length(); + if (l >= 2 && s[0] == '"') + return s.mid(1, l-2); + return s; + } + +//--------------------------------------------------------- +// parse +//--------------------------------------------------------- + +Xml::Token Xml::parse() + { + char buffer[1024*1024]; // increase buffer -rj + char* p; + + again: + bool endFlag = false; + nextc(); + if (c == EOF) { + printf("unexpected EOF reading *.med file at level %d, line %d, <%s><%s><%s>\n", + level, _line, _tag.latin1(), _s1.latin1(), _s2.latin1()); + return level == 0 ? End : Error; + } + + _s1 = QString(""); + if (inTag) { + //------------------- + // parse Attributes + //------------------- + if (c == '/') { + nextc(); + token('>'); + if (c != '>') { + printf("Xml: unexpected char '%c', expected '>'\n", c); + goto error; + } + _s1 = _tag; + inTag = false; + --level; + return TagEnd; + } + _s2 = QString(""); + token('='); + _s1 = _s2; + nextc(); // skip space + if (c == '"') + stoken(); + else + token('>'); + if (c == '>') + inTag = false; + else + --bufptr; + _s2 = strip(_s2); + return Attribut; + } + if (c == '<') { + //-------------- + // parse Tag + //-------------- + next(); + if (c == '/') { + endFlag = true; + next(); + } + if (c == '?') { + next(); + p = buffer; + for (;;) { + if (c == '?' || c == EOF || c == '>') + break; + *p++ = c; + // TODO: check overflow + next(); + } + *p = 0; + _s1 = QString(buffer); + if (c == EOF) { + fprintf(stderr, "XML: unexpected EOF\n"); + goto error; + } + nextc(); + if (c != '>') { + fprintf(stderr, "XML: '>' expected\n"); + goto error; + } + next(); + return Proc; + } + else if (c == '!') { // process comment + bool endc = false; + for(;;) { + next(); + if (c == '>' && endc) + break; + endc = c == '-'; + if (c == EOF) { + fprintf(stderr, "XML: unexpected EOF in comment\n"); + goto error; + } + } + goto again; + } + p = buffer; + for (;;) { + if (c == '/' || c == ' ' || c == '\t' || c == '>' || c == '\n' || c == EOF) + break; + // TODO: check overflow + *p++ = c; + next(); + } + *p = 0; + _s1 = QString(buffer); + // skip white space: + while (c == ' ' || c == '\t' || c == '\n') + next(); + if (c == '/') { + nextc(); + if (c == '>') + return Flag; + fprintf(stderr, "XML: '>' expected\n"); + goto error; + } + if (c == '?') { + nextc(); + if (c == '>') + return Proc; + fprintf(stderr, "XML: '>' expected\n"); + goto error; + } + if (c == '>') { + if (endFlag) { + --level; + return TagEnd; + } + else { + ++level; + return TagStart; + } + } + else { + _tag = _s1; + --bufptr; + inTag = true; + ++level; + if (!endFlag) { + return TagStart; + } + fprintf(stderr, "XML: endFlag expected\n"); + goto error; + } + } + else { + //-------------- + // parse Text + //-------------- + if (level == 0) { + fprintf(stderr, "XML: level = 0\n"); + goto error; + } + p = buffer; + for (;;) { + if (c == EOF || c == '<') + break; + if (c == '&') { + next(); + if (c == '<') { // be tolerant with old muse files + *p++ = '&'; + continue; + } + char name[32]; + char* dp = name; + *dp++ = c; + for (; dp-name < 31;) { + next(); + if (c == ';') + break; + *dp++ = c; + } + *dp = 0; + if (strcmp(name, "lt") == 0) + c = '<'; + else if (strcmp(name, "gt") == 0) + c = '>'; + else if (strcmp(name, "apos") == 0) + c = '\\'; + else if (strcmp(name, "quot") == 0) + c = '"'; + else if (strcmp(name, "amp") == 0) + c = '&'; + else + c = '?'; + } + *p++ = c; + next(); + } + *p = 0; + _s1 = QString(buffer); + + if (c == '<') + --bufptr; + return Text; + } +error: + fprintf(stderr, "XML Parse Error at line %d col %d\n", _line, _col+1); + return Error; + } + +//--------------------------------------------------------- +// parse(QString) +//--------------------------------------------------------- + +QString Xml::parse(const QString& tag) + { + QString a; + + for (;;) { + switch (parse()) { + case Error: + case End: + return a; + default: + case TagStart: + case Attribut: + break; + case Text: + a = _s1; + break; + case TagEnd: + if (_s1 == tag) + return a; + break; + } + } + return a; + } + +//--------------------------------------------------------- +// parse1 +//--------------------------------------------------------- + +QString Xml::parse1() + { + return parse(_s1.simplifyWhiteSpace()); + } + +//--------------------------------------------------------- +// parseInt +//--------------------------------------------------------- + +int Xml::parseInt() + { + QString s(parse1().simplifyWhiteSpace()); + bool ok; + int base = 10; + if (s.startsWith("0x") || s.startsWith("0X")) { + base = 16; + s = s.mid(2); + } + int n = s.toInt(&ok, base); + return n; + } + +//--------------------------------------------------------- +// parseUInt +//--------------------------------------------------------- +// Added by Tim. p3.3.8 + +unsigned int Xml::parseUInt() + { + QString s(parse1().simplifyWhiteSpace()); + bool ok; + int base = 10; + if (s.startsWith("0x") || s.startsWith("0X")) { + base = 16; + s = s.mid(2); + } + unsigned int n = s.toUInt(&ok, base); + return n; + } + +//--------------------------------------------------------- +// parseFloat +//--------------------------------------------------------- + +float Xml::parseFloat() + { + QString s(parse1().simplifyWhiteSpace()); + return s.toFloat(); + } + +//--------------------------------------------------------- +// parseDouble +//--------------------------------------------------------- + +double Xml::parseDouble() + { + QString s(parse1().simplifyWhiteSpace()); + return s.toDouble(); + } + +//--------------------------------------------------------- +// unknown +//--------------------------------------------------------- + +void Xml::unknown(const char* s) + { + printf("%s: unknown tag <%s> at line %d\n", + s, _s1.latin1(), _line+1); + parse1(); + } + +//--------------------------------------------------------- +// header +//--------------------------------------------------------- + +void Xml::header() + { + fprintf(f, "\n"); + } + +//--------------------------------------------------------- +// put +//--------------------------------------------------------- + +void Xml::put(const char* format, ...) + { + va_list args; + va_start(args, format); + + vfprintf(f, format, args); + va_end(args); + putc('\n', f); + } + +void Xml::put(int level, const char* format, ...) + { + va_list args; + va_start(args, format); + putLevel(level); + vfprintf(f, format, args); + va_end(args); + putc('\n', f); + } + +//--------------------------------------------------------- +// nput +//--------------------------------------------------------- + +void Xml::nput(int level, const char* format, ...) + { + va_list args; + va_start(args, format); + putLevel(level); + vfprintf(f, format, args); + va_end(args); + } + +void Xml::nput(const char* format, ...) + { + va_list args; + va_start(args, format); + vfprintf(f, format, args); + va_end(args); + } + +//--------------------------------------------------------- +// tag +//--------------------------------------------------------- + +void Xml::tag(int level, const char* format, ...) + { + va_list args; + va_start(args, format); + putLevel(level); + putc('<', f); + vfprintf(f, format, args); + va_end(args); + putc('>', f); + putc('\n', f); + } + +//--------------------------------------------------------- +// etag +//--------------------------------------------------------- + +void Xml::etag(int level, const char* format, ...) + { + va_list args; + va_start(args, format); + putLevel(level); + putc('<', f); + putc('/', f); + vfprintf(f, format, args); + va_end(args); + putc('>', f); + putc('\n', f); + } + +void Xml::putLevel(int n) + { + for (int i = 0; i < n*2; ++i) + putc(' ', f); + } + +void Xml::intTag(int level, const char* name, int val) + { + putLevel(level); + fprintf(f, "<%s>%d\n", name, val, name); + } + +void Xml::uintTag(int level, const char* name, unsigned int val) + { + putLevel(level); + fprintf(f, "<%s>%u\n", name, val, name); + } + +void Xml::floatTag(int level, const char* name, float val) + { + putLevel(level); + QString s("<%1>%2\n"); + fprintf(f, "%s", s.arg(name).arg(val).arg(name).latin1()); + } + +void Xml::doubleTag(int level, const char* name, double val) + { + putLevel(level); + QString s("<%1>%2\n"); + fprintf(f, "%s", s.arg(name).arg(val).arg(name).latin1()); + } + +void Xml::strTag(int level, const char* name, const char* val) + { + putLevel(level); + fprintf(f, "<%s>", name); + if (val) { + while (*val) { + switch(*val) { + case '&': fprintf(f, "&"); break; + case '<': fprintf(f, "<"); break; + case '>': fprintf(f, ">"); break; + case '\\': fprintf(f, "'"); break; + case '"': fprintf(f, """); break; + default: fputc(*val, f); break; + } + ++val; + } + } + fprintf(f, "\n", name); + } + +//--------------------------------------------------------- +// colorTag +//--------------------------------------------------------- + +void Xml::colorTag(int level, const char* name, const QColor& color) + { + putLevel(level); + fprintf(f, "<%s r=\"%d\" g=\"%d\" b=\"%d\">\n", + name, color.red(), color.green(), color.blue(), name); + } + +//--------------------------------------------------------- +// geometryTag +//--------------------------------------------------------- + +void Xml::geometryTag(int level, const char* name, const QWidget* g) + { + qrectTag(level, name, QRect(g->pos(), g->size())); + } + +//--------------------------------------------------------- +// qrectTag +//--------------------------------------------------------- + +void Xml::qrectTag(int level, const char* name, const QRect& r) + { + putLevel(level); + fprintf(f, "<%s x=\"%d\" y=\"%d\" w=\"%d\" h=\"%d\">\n", + name, r.x(), r.y(), r.width(), r.height(), name); + } + +//--------------------------------------------------------- +// strTag +//--------------------------------------------------------- + +void Xml::strTag(int level, const char* name, const QString& val) + { + strTag(level, name, val.latin1()); + } + +//--------------------------------------------------------- +// Xml::skip +//--------------------------------------------------------- + +void Xml::skip(const QString& etag) + { + for (;;) { + Token token = parse(); + const QString& tag = s1(); + switch (token) { + case Xml::Error: + case Xml::End: + return; + case Xml::Text: + break; + case Xml::TagEnd: + if (tag == etag) + return; + break; + case Xml::TagStart: + skip(tag); + break; + default: + break; + } + } + } + +//--------------------------------------------------------- +// xmlString +//--------------------------------------------------------- + +QString Xml::xmlString(const char* s) + { + return Xml::xmlString(QString(s)); + } + +//--------------------------------------------------------- +// xmlString +//--------------------------------------------------------- + +QString Xml::xmlString(const QString& ss) + { + QString s(ss); + s.replace('&', "&"); + s.replace('<', "<"); + s.replace('>', ">"); + s.replace('\'', "'"); + s.replace('"', """); + return s; + } + +void Xml::dump(QString &dump) + { + if (f == 0) + return; + fpos_t pos; + fgetpos(f, &pos); + rewind(f); + while(fgets(lbuffer, 512, f) != 0) + dump.append(lbuffer); + fsetpos(f, &pos); + } diff --git a/muse2/muse/xml.h b/muse2/muse/xml.h new file mode 100644 index 00000000..912ddb4a --- /dev/null +++ b/muse2/muse/xml.h @@ -0,0 +1,95 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: xml.h,v 1.8.2.3 2009/11/09 20:28:28 terminator356 Exp $ +// +// (C) Copyright 2000 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __XML_H__ +#define __XML_H__ + +#include +#include + +class QColor; +class QWidget; +class QRect; + +//--------------------------------------------------------- +// Xml +// very simple XML-like parser +//--------------------------------------------------------- + +class Xml { + FILE* f; + int _line; + int _col; + QString _s1, _s2, _tag; + int level; + bool inTag; + bool inComment; + int _minorVersion; + int _majorVersion; + + int c; // current char + char lbuffer[512]; + const char* bufptr; + + void next(); + void nextc(); + void token(int); + void stoken(); + QString strip(const QString& s); + void putLevel(int n); + + public: + enum Token {Error, TagStart, TagEnd, Flag, + Proc, Text, Attribut, End}; + int majorVersion() const { return _majorVersion; } + int minorVersion() const { return _minorVersion; } + void setVersion(int maj, int min) { + _minorVersion = min; + _majorVersion = maj; + } + Xml(FILE*); + Xml(const char*); + Token parse(); + QString parse(const QString&); + QString parse1(); + int parseInt(); + unsigned int parseUInt(); + float parseFloat(); + double parseDouble(); + void unknown(const char*); + int line() const { return _line; } // current line + int col() const { return _col; } // current col + const QString& s1() { return _s1; } + const QString& s2() { return _s2; } + void dump(QString &dump); + + void header(); + void put(const char* format, ...); + void put(int level, const char* format, ...); + void nput(int level, const char* format, ...); + void nput(const char* format, ...); + void tag(int level, const char* format, ...); + void etag(int level, const char* format, ...); + void intTag(int level, const char* const name, int val); + void uintTag(int level, const char* const name, unsigned int val); + void doubleTag(int level, const char* const name, double val); + void floatTag(int level, const char* const name, float val); + void strTag(int level, const char* const name, const char* val); + void strTag(int level, const char* const name, const QString& s); + void colorTag(int level, const char* name, const QColor& color); + void geometryTag(int level, const char* name, const QWidget* g); + void qrectTag(int level, const char* name, const QRect& r); + static QString xmlString(const QString&); + static QString xmlString(const char*); + + void skip(const QString& tag); + }; + +extern QRect readGeometry(Xml&, const QString&); +#endif + diff --git a/muse2/packaging/Makefile.am b/muse2/packaging/Makefile.am new file mode 100644 index 00000000..5e49fdf9 --- /dev/null +++ b/muse2/packaging/Makefile.am @@ -0,0 +1,5 @@ +desktop_DATA = muse.desktop +desktopdir = $(datadir)/applications +icon_DATA = muse_icon.png +icondir = $(datadir)/icons/hicolor/64x64/apps +EXTRA_DIST = muse_icon.png muse.desktop diff --git a/muse2/packaging/Makefile.in b/muse2/packaging/Makefile.in new file mode 100644 index 00000000..8db59b1e --- /dev/null +++ b/muse2/packaging/Makefile.in @@ -0,0 +1,488 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = packaging +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal-include.m4 \ + $(top_srcdir)/m4/alsa.m4 $(top_srcdir)/m4/docbook.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(desktopdir)" "$(DESTDIR)$(icondir)" +DATA = $(desktop_DATA) $(icon_DATA) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DOCBOOKSTYLE = @DOCBOOKSTYLE@ +DOCBOOKTARGETS = @DOCBOOKTARGETS@ +DOT = @DOT@ +DOTPATH = @DOTPATH@ +DOXYGEN = @DOXYGEN@ +DOXYGEN_TREEVIEW = @DOXYGEN_TREEVIEW@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FLUIDSYNTHDIRS = @FLUIDSYNTHDIRS@ +FST_CFLAGS = @FST_CFLAGS@ +FST_LIBS = @FST_LIBS@ +Fluidsynth_CFLAGS = @Fluidsynth_CFLAGS@ +Fluidsynth_LIBS = @Fluidsynth_LIBS@ +GIVERTCAP = @GIVERTCAP@ +GREP = @GREP@ +HAVEDOT = @HAVEDOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_LIBS = @JACK_LIBS@ +JADE = @JADE@ +LASH_CFLAGS = @LASH_CFLAGS@ +LASH_LIBS = @LASH_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LO_CFLAGS = @LO_CFLAGS@ +LO_LIBS = @LO_LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MUSECXXFLAGS = @MUSECXXFLAGS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NSGMLS = @NSGMLS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PCH = @PCH@ +PERL = @PERL@ +PKG_CONFIG = @PKG_CONFIG@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIB = @PYTHON_LIB@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QTDIR_BIN = @QTDIR_BIN@ +QTDIR_INC = @QTDIR_INC@ +QT_LIBS = @QT_LIBS@ +RANLIB = @RANLIB@ +SAMPLERATE_CFLAGS = @SAMPLERATE_CFLAGS@ +SAMPLERATE_LIBS = @SAMPLERATE_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ +SNDFILE_LIBS = @SNDFILE_LIBS@ +STRIP = @STRIP@ +SUIDBUILD = @SUIDBUILD@ +SUIDINSTALL = @SUIDINSTALL@ +USE_SSE = @USE_SSE@ +UUID_CFLAGS = @UUID_CFLAGS@ +UUID_LIBS = @UUID_LIBS@ +VERSION = @VERSION@ +XMKMF = @XMKMF@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +have_docbook = @have_docbook@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +synth_fluid = @synth_fluid@ +synth_fluidsynth = @synth_fluidsynth@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +desktop_DATA = muse.desktop +desktopdir = $(datadir)/applications +icon_DATA = muse_icon.png +icondir = $(datadir)/icons/hicolor/64x64/apps +EXTRA_DIST = muse_icon.png muse.desktop +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu packaging/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu packaging/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-desktopDATA: $(desktop_DATA) + @$(NORMAL_INSTALL) + test -z "$(desktopdir)" || $(MKDIR_P) "$(DESTDIR)$(desktopdir)" + @list='$(desktop_DATA)'; test -n "$(desktopdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(desktopdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(desktopdir)" || exit $$?; \ + done + +uninstall-desktopDATA: + @$(NORMAL_UNINSTALL) + @list='$(desktop_DATA)'; test -n "$(desktopdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(desktopdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(desktopdir)" && rm -f $$files +install-iconDATA: $(icon_DATA) + @$(NORMAL_INSTALL) + test -z "$(icondir)" || $(MKDIR_P) "$(DESTDIR)$(icondir)" + @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(icondir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(icondir)" || exit $$?; \ + done + +uninstall-iconDATA: + @$(NORMAL_UNINSTALL) + @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(icondir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(icondir)" && rm -f $$files +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(DATA) +installdirs: + for dir in "$(DESTDIR)$(desktopdir)" "$(DESTDIR)$(icondir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-desktopDATA install-iconDATA + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-desktopDATA uninstall-iconDATA + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + distclean distclean-generic distclean-libtool distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-desktopDATA install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-iconDATA install-info install-info-am \ + install-man install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am uninstall uninstall-am uninstall-desktopDATA \ + uninstall-iconDATA + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/muse2/packaging/muse.desktop b/muse2/packaging/muse.desktop new file mode 100644 index 00000000..c5f0c84b --- /dev/null +++ b/muse2/packaging/muse.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Name=Muse +GenericName=Audio/MIDI Sequencer +Comment=Midi Music Editor +Icon=muse_icon +Type=Application +Exec=muse +Terminal=false +Categories=Sequencer;Midi;X-Jack;X-Sequencers;X-MIDI;Audio; diff --git a/muse2/packaging/muse_icon.png b/muse2/packaging/muse_icon.png new file mode 100644 index 00000000..5a1acb96 Binary files /dev/null and b/muse2/packaging/muse_icon.png differ diff --git a/muse2/packaging/muse_mdk.spec b/muse2/packaging/muse_mdk.spec new file mode 100755 index 00000000..1a7a68ff --- /dev/null +++ b/muse2/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/muse2/plugins/Makefile.am b/muse2/plugins/Makefile.am new file mode 100644 index 00000000..fbb995c4 --- /dev/null +++ b/muse2/plugins/Makefile.am @@ -0,0 +1,5 @@ +SUBDIRS = freeverb pandelay doublechorus + +include $(top_srcdir)/common.am + +EXTRA_DIST = plugins-install.am diff --git a/muse2/plugins/Makefile.in b/muse2/plugins/Makefile.in new file mode 100644 index 00000000..63200a2b --- /dev/null +++ b/muse2/plugins/Makefile.in @@ -0,0 +1,668 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/common.am +subdir = plugins +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal-include.m4 \ + $(top_srcdir)/m4/alsa.m4 $(top_srcdir)/m4/docbook.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +ACLOCAL = @ACLOCAL@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DOCBOOKSTYLE = @DOCBOOKSTYLE@ +DOCBOOKTARGETS = @DOCBOOKTARGETS@ +DOT = @DOT@ +DOTPATH = @DOTPATH@ +DOXYGEN = @DOXYGEN@ +DOXYGEN_TREEVIEW = @DOXYGEN_TREEVIEW@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FLUIDSYNTHDIRS = @FLUIDSYNTHDIRS@ +FST_CFLAGS = @FST_CFLAGS@ +FST_LIBS = @FST_LIBS@ +Fluidsynth_CFLAGS = @Fluidsynth_CFLAGS@ +Fluidsynth_LIBS = @Fluidsynth_LIBS@ +GIVERTCAP = @GIVERTCAP@ +GREP = @GREP@ +HAVEDOT = @HAVEDOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_LIBS = @JACK_LIBS@ +JADE = @JADE@ +LASH_CFLAGS = @LASH_CFLAGS@ +LASH_LIBS = @LASH_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LO_CFLAGS = @LO_CFLAGS@ +LO_LIBS = @LO_LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MUSECXXFLAGS = @MUSECXXFLAGS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NSGMLS = @NSGMLS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PCH = @PCH@ +PERL = @PERL@ +PKG_CONFIG = @PKG_CONFIG@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIB = @PYTHON_LIB@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QTDIR_BIN = @QTDIR_BIN@ +QTDIR_INC = @QTDIR_INC@ +QT_LIBS = @QT_LIBS@ +RANLIB = @RANLIB@ +SAMPLERATE_CFLAGS = @SAMPLERATE_CFLAGS@ +SAMPLERATE_LIBS = @SAMPLERATE_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ +SNDFILE_LIBS = @SNDFILE_LIBS@ +STRIP = @STRIP@ +SUIDBUILD = @SUIDBUILD@ +SUIDINSTALL = @SUIDINSTALL@ +USE_SSE = @USE_SSE@ +UUID_CFLAGS = @UUID_CFLAGS@ +UUID_LIBS = @UUID_LIBS@ +VERSION = @VERSION@ +XMKMF = @XMKMF@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +have_docbook = @have_docbook@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +synth_fluid = @synth_fluid@ +synth_fluidsynth = @synth_fluidsynth@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +SUBDIRS = freeverb pandelay doublechorus +AM_CXXFLAGS = $(MUSECXXFLAGS) -I.. -I$(top_srcdir)/synti \ + -I$(top_srcdir)/muse/widgets -DQT_SHARED -DQT_THREAD_SUPPORT \ + -DQT_PLUGIN $(QTDIR_INC) -DQT3_SUPPORT +AM_CPPFLAGS = +MOC = $(QTDIR_BIN)/moc +#UIC = $(QTDIR_BIN)/uic3 +UIC = /usr/bin/uic3 +UIFILES = $(wildcard *.ui) +MOCFILES = $(shell for h in $(filter %.h,$(SOURCES)); do \ + if grep -q Q_OBJECT $$h; then \ + echo $$h | sed "s/\(.*\)\.h/moc_\1.cpp/"; \ + fi; \ + done) + +BUILT_SOURCES = $(MOCFILES) $(UIFILES:%.ui=%.h) +MOSTLYCLEANFILES = $(MOCFILES) $(UIFILES:%.ui=%.h) +SUFFIXES = .ui .h.gch +EXTRA_DIST = plugins-install.am +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-recursive + +.SUFFIXES: +.SUFFIXES: .ui .h.gch .lo .o +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/common.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu plugins/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu plugins/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all check \ + ctags-recursive install install-am install-strip \ + tags-recursive + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am + + +de: + @for base in $(MOCFILES); do echo -e "\t$${base}.cpp $${base}.h \\"; done + +nde: + @for base in $(MOCFILES); do echo -e "\tmoc_$${base}.cpp \\"; done + +.ui.o: %.h + $(UIC) -L $(top_srcdir)/muse/widgets -o $*.cpp -impl $*.h $*.ui + $(MOC) $*.h >> $*.cpp + $(CXXCOMPILE) -c $*.cpp -o $*.o + $(RM) $*.cpp moc_$*.cpp moc_$*.o + +.ui.lo: %.h + $(UIC) -L $(top_srcdir)/muse/widgets -o $*.cpp -impl $*.h $*.ui + $(MOC) $*.h >> $*.cpp + $(LTCXXCOMPILE) -c $*.cpp -o $*.lo + $(RM) $*.cpp moc_$*.cpp moc_$*.lo moc_$*.o + +moc_%.cpp: %.h + $(MOC) $< -o $@ + +%.h: %.ui + $(UIC) -o $@ $< +# $(UIC) -L $(top_srcdir)/muse/widgets -o $@ $< + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/muse2/plugins/doublechorus/Makefile.am b/muse2/plugins/doublechorus/Makefile.am new file mode 100644 index 00000000..40022184 --- /dev/null +++ b/muse2/plugins/doublechorus/Makefile.am @@ -0,0 +1,16 @@ +include $(top_srcdir)/common.am +include $(top_srcdir)/plugins/plugins-install.am + +AM_CXXFLAGS += -O3 -fno-exceptions -fno-rtti -ffast-math + +plugins_LTLIBRARIES = doublechorus.la + +plugins_DATA = + +doublechorus_la_SOURCES = \ + doublechorus.cpp \ + doublechorusmodel.cpp doublechorusmodel.h \ + simplechorusmodel.cpp simplechorusmodel.h +doublechorus_la_LDFLAGS = -module -avoid-version + + diff --git a/muse2/plugins/doublechorus/Makefile.in b/muse2/plugins/doublechorus/Makefile.in new file mode 100644 index 00000000..1d800d0e --- /dev/null +++ b/muse2/plugins/doublechorus/Makefile.in @@ -0,0 +1,673 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/common.am \ + $(top_srcdir)/plugins/plugins-install.am +subdir = plugins/doublechorus +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal-include.m4 \ + $(top_srcdir)/m4/alsa.m4 $(top_srcdir)/m4/docbook.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(pluginsdir)" "$(DESTDIR)$(pluginsdir)" +LTLIBRARIES = $(plugins_LTLIBRARIES) +doublechorus_la_LIBADD = +am_doublechorus_la_OBJECTS = doublechorus.lo doublechorusmodel.lo \ + simplechorusmodel.lo +doublechorus_la_OBJECTS = $(am_doublechorus_la_OBJECTS) +doublechorus_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ + $(CXXFLAGS) $(doublechorus_la_LDFLAGS) $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +CXXLD = $(CXX) +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(doublechorus_la_SOURCES) +DIST_SOURCES = $(doublechorus_la_SOURCES) +DATA = $(plugins_DATA) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DOCBOOKSTYLE = @DOCBOOKSTYLE@ +DOCBOOKTARGETS = @DOCBOOKTARGETS@ +DOT = @DOT@ +DOTPATH = @DOTPATH@ +DOXYGEN = @DOXYGEN@ +DOXYGEN_TREEVIEW = @DOXYGEN_TREEVIEW@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FLUIDSYNTHDIRS = @FLUIDSYNTHDIRS@ +FST_CFLAGS = @FST_CFLAGS@ +FST_LIBS = @FST_LIBS@ +Fluidsynth_CFLAGS = @Fluidsynth_CFLAGS@ +Fluidsynth_LIBS = @Fluidsynth_LIBS@ +GIVERTCAP = @GIVERTCAP@ +GREP = @GREP@ +HAVEDOT = @HAVEDOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_LIBS = @JACK_LIBS@ +JADE = @JADE@ +LASH_CFLAGS = @LASH_CFLAGS@ +LASH_LIBS = @LASH_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LO_CFLAGS = @LO_CFLAGS@ +LO_LIBS = @LO_LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MUSECXXFLAGS = @MUSECXXFLAGS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NSGMLS = @NSGMLS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PCH = @PCH@ +PERL = @PERL@ +PKG_CONFIG = @PKG_CONFIG@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIB = @PYTHON_LIB@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QTDIR_BIN = @QTDIR_BIN@ +QTDIR_INC = @QTDIR_INC@ +QT_LIBS = @QT_LIBS@ +RANLIB = @RANLIB@ +SAMPLERATE_CFLAGS = @SAMPLERATE_CFLAGS@ +SAMPLERATE_LIBS = @SAMPLERATE_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ +SNDFILE_LIBS = @SNDFILE_LIBS@ +STRIP = @STRIP@ +SUIDBUILD = @SUIDBUILD@ +SUIDINSTALL = @SUIDINSTALL@ +USE_SSE = @USE_SSE@ +UUID_CFLAGS = @UUID_CFLAGS@ +UUID_LIBS = @UUID_LIBS@ +VERSION = @VERSION@ +XMKMF = @XMKMF@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +have_docbook = @have_docbook@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +synth_fluid = @synth_fluid@ +synth_fluidsynth = @synth_fluidsynth@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AM_CXXFLAGS = $(MUSECXXFLAGS) -I.. -I$(top_srcdir)/synti \ + -I$(top_srcdir)/muse/widgets -DQT_SHARED -DQT_THREAD_SUPPORT \ + -DQT_PLUGIN $(QTDIR_INC) -DQT3_SUPPORT -O3 -fno-exceptions \ + -fno-rtti -ffast-math +AM_CPPFLAGS = +MOC = $(QTDIR_BIN)/moc +#UIC = $(QTDIR_BIN)/uic3 +UIC = /usr/bin/uic3 +UIFILES = $(wildcard *.ui) +MOCFILES = $(shell for h in $(filter %.h,$(SOURCES)); do \ + if grep -q Q_OBJECT $$h; then \ + echo $$h | sed "s/\(.*\)\.h/moc_\1.cpp/"; \ + fi; \ + done) + +BUILT_SOURCES = $(MOCFILES) $(UIFILES:%.ui=%.h) +MOSTLYCLEANFILES = $(MOCFILES) $(UIFILES:%.ui=%.h) +SUFFIXES = .ui .h.gch +pluginsdir = $(pkglibdir)/plugins +plugins_LTLIBRARIES = doublechorus.la +plugins_DATA = +doublechorus_la_SOURCES = \ + doublechorus.cpp \ + doublechorusmodel.cpp doublechorusmodel.h \ + simplechorusmodel.cpp simplechorusmodel.h + +doublechorus_la_LDFLAGS = -module -avoid-version +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: .ui .h.gch .cpp .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/common.am $(top_srcdir)/plugins/plugins-install.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu plugins/doublechorus/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu plugins/doublechorus/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-pluginsLTLIBRARIES: $(plugins_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(pluginsdir)" || $(MKDIR_P) "$(DESTDIR)$(pluginsdir)" + @list='$(plugins_LTLIBRARIES)'; test -n "$(pluginsdir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pluginsdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pluginsdir)"; \ + } + +uninstall-pluginsLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(plugins_LTLIBRARIES)'; test -n "$(pluginsdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pluginsdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pluginsdir)/$$f"; \ + done + +clean-pluginsLTLIBRARIES: + -test -z "$(plugins_LTLIBRARIES)" || rm -f $(plugins_LTLIBRARIES) + @list='$(plugins_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +doublechorus.la: $(doublechorus_la_OBJECTS) $(doublechorus_la_DEPENDENCIES) + $(doublechorus_la_LINK) -rpath $(pluginsdir) $(doublechorus_la_OBJECTS) $(doublechorus_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/doublechorus.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/doublechorusmodel.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/simplechorusmodel.Plo@am__quote@ + +.cpp.o: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< + +.cpp.obj: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.cpp.lo: +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-pluginsDATA: $(plugins_DATA) + @$(NORMAL_INSTALL) + test -z "$(pluginsdir)" || $(MKDIR_P) "$(DESTDIR)$(pluginsdir)" + @list='$(plugins_DATA)'; test -n "$(pluginsdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pluginsdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(pluginsdir)" || exit $$?; \ + done + +uninstall-pluginsDATA: + @$(NORMAL_UNINSTALL) + @list='$(plugins_DATA)'; test -n "$(pluginsdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(pluginsdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(pluginsdir)" && rm -f $$files + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-am +all-am: Makefile $(LTLIBRARIES) $(DATA) +installdirs: + for dir in "$(DESTDIR)$(pluginsdir)" "$(DESTDIR)$(pluginsdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +clean: clean-am + +clean-am: clean-generic clean-libtool clean-pluginsLTLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-pluginsDATA install-pluginsLTLIBRARIES + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-pluginsDATA uninstall-pluginsLTLIBRARIES + +.MAKE: all check install install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-pluginsLTLIBRARIES ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-pluginsDATA \ + install-pluginsLTLIBRARIES install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags uninstall uninstall-am \ + uninstall-pluginsDATA uninstall-pluginsLTLIBRARIES + + +de: + @for base in $(MOCFILES); do echo -e "\t$${base}.cpp $${base}.h \\"; done + +nde: + @for base in $(MOCFILES); do echo -e "\tmoc_$${base}.cpp \\"; done + +.ui.o: %.h + $(UIC) -L $(top_srcdir)/muse/widgets -o $*.cpp -impl $*.h $*.ui + $(MOC) $*.h >> $*.cpp + $(CXXCOMPILE) -c $*.cpp -o $*.o + $(RM) $*.cpp moc_$*.cpp moc_$*.o + +.ui.lo: %.h + $(UIC) -L $(top_srcdir)/muse/widgets -o $*.cpp -impl $*.h $*.ui + $(MOC) $*.h >> $*.cpp + $(LTCXXCOMPILE) -c $*.cpp -o $*.lo + $(RM) $*.cpp moc_$*.cpp moc_$*.lo moc_$*.o + +moc_%.cpp: %.h + $(MOC) $< -o $@ + +%.h: %.ui + $(UIC) -o $@ $< +# $(UIC) -L $(top_srcdir)/muse/widgets -o $@ $< + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/muse2/plugins/doublechorus/doublechorus.cpp b/muse2/plugins/doublechorus/doublechorus.cpp new file mode 100644 index 00000000..27d84336 --- /dev/null +++ b/muse2/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/muse2/plugins/doublechorus/doublechorusmodel.cpp b/muse2/plugins/doublechorus/doublechorusmodel.cpp new file mode 100644 index 00000000..01def026 --- /dev/null +++ b/muse2/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/muse2/plugins/doublechorus/doublechorusmodel.h b/muse2/plugins/doublechorus/doublechorusmodel.h new file mode 100644 index 00000000..40ce9f3f --- /dev/null +++ b/muse2/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/muse2/plugins/doublechorus/simplechorusmodel.cpp b/muse2/plugins/doublechorus/simplechorusmodel.cpp new file mode 100644 index 00000000..72015465 --- /dev/null +++ b/muse2/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> $*.cpp + $(CXXCOMPILE) -c $*.cpp -o $*.o + $(RM) $*.cpp moc_$*.cpp moc_$*.o + +.ui.lo: %.h + $(UIC) -L $(top_srcdir)/muse/widgets -o $*.cpp -impl $*.h $*.ui + $(MOC) $*.h >> $*.cpp + $(LTCXXCOMPILE) -c $*.cpp -o $*.lo + $(RM) $*.cpp moc_$*.cpp moc_$*.lo moc_$*.o + +moc_%.cpp: %.h + $(MOC) $< -o $@ + +%.h: %.ui + $(UIC) -o $@ $< +# $(UIC) -L $(top_srcdir)/muse/widgets -o $@ $< + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/muse2/plugins/freeverb/allpass.h b/muse2/plugins/freeverb/allpass.h new file mode 100644 index 00000000..4eb1c1a0 --- /dev/null +++ b/muse2/plugins/freeverb/allpass.h @@ -0,0 +1,50 @@ +// Allpass filter declaration +// +// Written by Jezar at Dreampoint, June 2000 +// http://www.dreampoint.co.uk +// This code is public domain + +#ifndef _allpass_ +#define _allpass_ +#include "denormals.h" + +//--------------------------------------------------------- +// allpass +//--------------------------------------------------------- + +class allpass + { + float feedback; + float *buffer; + int bufsize; + int bufidx; + + public: + allpass() { bufidx = 0; } + void setbuffer(float *buf, int size) { + buffer = buf; + bufsize = size; + } + float process(float input) { + float bufout = buffer[bufidx]; + undenormalise(bufout); + float output = -input + bufout; + buffer[bufidx] = input + (bufout*feedback); + if (++bufidx >= 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/muse2/plugins/freeverb/readme.txt b/muse2/plugins/freeverb/readme.txt new file mode 100644 index 00000000..2c1349a3 --- /dev/null +++ b/muse2/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/muse2/plugins/freeverb/revmodel.cpp b/muse2/plugins/freeverb/revmodel.cpp new file mode 100644 index 00000000..c72ee22b --- /dev/null +++ b/muse2/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/muse2/plugins/freeverb/revmodel.h b/muse2/plugins/freeverb/revmodel.h new file mode 100644 index 00000000..bfa1f0b3 --- /dev/null +++ b/muse2/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/muse2/plugins/freeverb/tuning.h b/muse2/plugins/freeverb/tuning.h new file mode 100644 index 00000000..ced89252 --- /dev/null +++ b/muse2/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/muse2/plugins/pandelay/Makefile.am b/muse2/plugins/pandelay/Makefile.am new file mode 100644 index 00000000..664b3170 --- /dev/null +++ b/muse2/plugins/pandelay/Makefile.am @@ -0,0 +1,16 @@ +include $(top_srcdir)/common.am +include $(top_srcdir)/plugins/plugins-install.am + +AM_CXXFLAGS += -O3 -fno-exceptions -fno-rtti -ffast-math + +plugins_LTLIBRARIES = pandelay.la + +plugins_DATA = + +pandelay_la_SOURCES = \ + ladspapandelay.cpp ladspapandelay.h \ + pandelay.cpp \ + pandelaymodel.cpp pandelaymodel.h +pandelay_la_LDFLAGS = -module -avoid-version + + diff --git a/muse2/plugins/pandelay/Makefile.in b/muse2/plugins/pandelay/Makefile.in new file mode 100644 index 00000000..bd3f80dd --- /dev/null +++ b/muse2/plugins/pandelay/Makefile.in @@ -0,0 +1,673 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/common.am \ + $(top_srcdir)/plugins/plugins-install.am +subdir = plugins/pandelay +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal-include.m4 \ + $(top_srcdir)/m4/alsa.m4 $(top_srcdir)/m4/docbook.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(pluginsdir)" "$(DESTDIR)$(pluginsdir)" +LTLIBRARIES = $(plugins_LTLIBRARIES) +pandelay_la_LIBADD = +am_pandelay_la_OBJECTS = ladspapandelay.lo pandelay.lo \ + pandelaymodel.lo +pandelay_la_OBJECTS = $(am_pandelay_la_OBJECTS) +pandelay_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ + $(CXXFLAGS) $(pandelay_la_LDFLAGS) $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +CXXLD = $(CXX) +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(pandelay_la_SOURCES) +DIST_SOURCES = $(pandelay_la_SOURCES) +DATA = $(plugins_DATA) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DOCBOOKSTYLE = @DOCBOOKSTYLE@ +DOCBOOKTARGETS = @DOCBOOKTARGETS@ +DOT = @DOT@ +DOTPATH = @DOTPATH@ +DOXYGEN = @DOXYGEN@ +DOXYGEN_TREEVIEW = @DOXYGEN_TREEVIEW@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FLUIDSYNTHDIRS = @FLUIDSYNTHDIRS@ +FST_CFLAGS = @FST_CFLAGS@ +FST_LIBS = @FST_LIBS@ +Fluidsynth_CFLAGS = @Fluidsynth_CFLAGS@ +Fluidsynth_LIBS = @Fluidsynth_LIBS@ +GIVERTCAP = @GIVERTCAP@ +GREP = @GREP@ +HAVEDOT = @HAVEDOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_LIBS = @JACK_LIBS@ +JADE = @JADE@ +LASH_CFLAGS = @LASH_CFLAGS@ +LASH_LIBS = @LASH_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LO_CFLAGS = @LO_CFLAGS@ +LO_LIBS = @LO_LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MUSECXXFLAGS = @MUSECXXFLAGS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NSGMLS = @NSGMLS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PCH = @PCH@ +PERL = @PERL@ +PKG_CONFIG = @PKG_CONFIG@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIB = @PYTHON_LIB@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QTDIR_BIN = @QTDIR_BIN@ +QTDIR_INC = @QTDIR_INC@ +QT_LIBS = @QT_LIBS@ +RANLIB = @RANLIB@ +SAMPLERATE_CFLAGS = @SAMPLERATE_CFLAGS@ +SAMPLERATE_LIBS = @SAMPLERATE_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ +SNDFILE_LIBS = @SNDFILE_LIBS@ +STRIP = @STRIP@ +SUIDBUILD = @SUIDBUILD@ +SUIDINSTALL = @SUIDINSTALL@ +USE_SSE = @USE_SSE@ +UUID_CFLAGS = @UUID_CFLAGS@ +UUID_LIBS = @UUID_LIBS@ +VERSION = @VERSION@ +XMKMF = @XMKMF@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +have_docbook = @have_docbook@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +synth_fluid = @synth_fluid@ +synth_fluidsynth = @synth_fluidsynth@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AM_CXXFLAGS = $(MUSECXXFLAGS) -I.. -I$(top_srcdir)/synti \ + -I$(top_srcdir)/muse/widgets -DQT_SHARED -DQT_THREAD_SUPPORT \ + -DQT_PLUGIN $(QTDIR_INC) -DQT3_SUPPORT -O3 -fno-exceptions \ + -fno-rtti -ffast-math +AM_CPPFLAGS = +MOC = $(QTDIR_BIN)/moc +#UIC = $(QTDIR_BIN)/uic3 +UIC = /usr/bin/uic3 +UIFILES = $(wildcard *.ui) +MOCFILES = $(shell for h in $(filter %.h,$(SOURCES)); do \ + if grep -q Q_OBJECT $$h; then \ + echo $$h | sed "s/\(.*\)\.h/moc_\1.cpp/"; \ + fi; \ + done) + +BUILT_SOURCES = $(MOCFILES) $(UIFILES:%.ui=%.h) +MOSTLYCLEANFILES = $(MOCFILES) $(UIFILES:%.ui=%.h) +SUFFIXES = .ui .h.gch +pluginsdir = $(pkglibdir)/plugins +plugins_LTLIBRARIES = pandelay.la +plugins_DATA = +pandelay_la_SOURCES = \ + ladspapandelay.cpp ladspapandelay.h \ + pandelay.cpp \ + pandelaymodel.cpp pandelaymodel.h + +pandelay_la_LDFLAGS = -module -avoid-version +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: .ui .h.gch .cpp .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/common.am $(top_srcdir)/plugins/plugins-install.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu plugins/pandelay/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu plugins/pandelay/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-pluginsLTLIBRARIES: $(plugins_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(pluginsdir)" || $(MKDIR_P) "$(DESTDIR)$(pluginsdir)" + @list='$(plugins_LTLIBRARIES)'; test -n "$(pluginsdir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pluginsdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pluginsdir)"; \ + } + +uninstall-pluginsLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(plugins_LTLIBRARIES)'; test -n "$(pluginsdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pluginsdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pluginsdir)/$$f"; \ + done + +clean-pluginsLTLIBRARIES: + -test -z "$(plugins_LTLIBRARIES)" || rm -f $(plugins_LTLIBRARIES) + @list='$(plugins_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +pandelay.la: $(pandelay_la_OBJECTS) $(pandelay_la_DEPENDENCIES) + $(pandelay_la_LINK) -rpath $(pluginsdir) $(pandelay_la_OBJECTS) $(pandelay_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ladspapandelay.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pandelay.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pandelaymodel.Plo@am__quote@ + +.cpp.o: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< + +.cpp.obj: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.cpp.lo: +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-pluginsDATA: $(plugins_DATA) + @$(NORMAL_INSTALL) + test -z "$(pluginsdir)" || $(MKDIR_P) "$(DESTDIR)$(pluginsdir)" + @list='$(plugins_DATA)'; test -n "$(pluginsdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pluginsdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(pluginsdir)" || exit $$?; \ + done + +uninstall-pluginsDATA: + @$(NORMAL_UNINSTALL) + @list='$(plugins_DATA)'; test -n "$(pluginsdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(pluginsdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(pluginsdir)" && rm -f $$files + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-am +all-am: Makefile $(LTLIBRARIES) $(DATA) +installdirs: + for dir in "$(DESTDIR)$(pluginsdir)" "$(DESTDIR)$(pluginsdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +clean: clean-am + +clean-am: clean-generic clean-libtool clean-pluginsLTLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-pluginsDATA install-pluginsLTLIBRARIES + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-pluginsDATA uninstall-pluginsLTLIBRARIES + +.MAKE: all check install install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-pluginsLTLIBRARIES ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-pluginsDATA \ + install-pluginsLTLIBRARIES install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags uninstall uninstall-am \ + uninstall-pluginsDATA uninstall-pluginsLTLIBRARIES + + +de: + @for base in $(MOCFILES); do echo -e "\t$${base}.cpp $${base}.h \\"; done + +nde: + @for base in $(MOCFILES); do echo -e "\tmoc_$${base}.cpp \\"; done + +.ui.o: %.h + $(UIC) -L $(top_srcdir)/muse/widgets -o $*.cpp -impl $*.h $*.ui + $(MOC) $*.h >> $*.cpp + $(CXXCOMPILE) -c $*.cpp -o $*.o + $(RM) $*.cpp moc_$*.cpp moc_$*.o + +.ui.lo: %.h + $(UIC) -L $(top_srcdir)/muse/widgets -o $*.cpp -impl $*.h $*.ui + $(MOC) $*.h >> $*.cpp + $(LTCXXCOMPILE) -c $*.cpp -o $*.lo + $(RM) $*.cpp moc_$*.cpp moc_$*.lo moc_$*.o + +moc_%.cpp: %.h + $(MOC) $< -o $@ + +%.h: %.ui + $(UIC) -o $@ $< +# $(UIC) -L $(top_srcdir)/muse/widgets -o $@ $< + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/muse2/plugins/pandelay/ladspapandelay.cpp b/muse2/plugins/pandelay/ladspapandelay.cpp new file mode 100644 index 00000000..b5680d3e --- /dev/null +++ b/muse2/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/muse2/plugins/pandelay/ladspapandelay.h b/muse2/plugins/pandelay/ladspapandelay.h new file mode 100644 index 00000000..ab5427a1 --- /dev/null +++ b/muse2/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/muse2/plugins/pandelay/pandelay.cpp b/muse2/plugins/pandelay/pandelay.cpp new file mode 100644 index 00000000..18ce1a41 --- /dev/null +++ b/muse2/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/muse2/plugins/pandelay/pandelaymodel.cpp b/muse2/plugins/pandelay/pandelaymodel.cpp new file mode 100644 index 00000000..a30d0646 --- /dev/null +++ b/muse2/plugins/pandelay/pandelaymodel.cpp @@ -0,0 +1,157 @@ +//=========================================================================== +// +// 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" +#include + +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; + _beatRatio = 4; + setBPM(120); + 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/muse2/plugins/pandelay/pandelaymodel.h b/muse2/plugins/pandelay/pandelaymodel.h new file mode 100644 index 00000000..65983187 --- /dev/null +++ b/muse2/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/muse2/plugins/plugins-install.am b/muse2/plugins/plugins-install.am new file mode 100644 index 00000000..86b41ecb --- /dev/null +++ b/muse2/plugins/plugins-install.am @@ -0,0 +1 @@ +pluginsdir = $(pkglibdir)/plugins \ No newline at end of file diff --git a/muse2/qt4migration.log b/muse2/qt4migration.log new file mode 100644 index 00000000..c8cdf995 --- /dev/null +++ b/muse2/qt4migration.log @@ -0,0 +1,35 @@ +This is a quick shot at converting the MusE 1.0 sources to Qt4 using the +Qt3Support compatibility classes. This far it looks quite promising the code +compiles and is runnable. When used it is quickly found that things are not +ok though. Hopefully we can fix most without too much effort + +------- +The process this far has involved processing the codebase with the tool +qt3to4 which substitutes many class types for their Qt3Support counterpart and +adds the necessary includes (it missed quite a lot of includes though) + +Known issues: + +* One .ui file compiles to a nonfunctional .h file, mtrackinfobase.h, this far +I have just commented the errenous line in the .h file (line 400 something) + +* Most things that I have touched that didn't feel 100% clear are marked with +'ddskrjo' so just grep the sources for ddskrjo to find potential issues and +things that are outright commented out. + +* configuration of QT4 is hardcoded in configure.am, must be adapted with some +clever script there is also a hardcoded path to uic3 in common.am. +We need both a way to detect this generically AND a way to use the correct uic +for files that are converted to Qt4 format. + +* QTooltip has changed significantly so code that uses this is commented out. + +* When launched there are a bunch of errors printed, mostly QPainter that most +likely point to actual problems. As I read in the migration docs previously it +was supported to draw "on" a widget outside the paintEvent this isn't supported +anymore (except with a specific define which we should probably steer clear of) + +* Can't open mixer +* Can't open transport +* Pianoroll is nonfunctional +* Drumeditor is nonfunctional (hopefully the same problem) diff --git a/muse2/share/Makefile.am b/muse2/share/Makefile.am new file mode 100644 index 00000000..f9ec31d5 --- /dev/null +++ b/muse2/share/Makefile.am @@ -0,0 +1,8 @@ +SUBDIRS = drummaps html locale wallpapers instruments \ + plugins templates pybridge scripts + +EXTRA_DIST = $(wildcard *.png) + +firstpkgdata_DATA = $(EXTRA_DIST) +firstpkgdatadir = $(pkgdatadir) + diff --git a/muse2/share/Makefile.in b/muse2/share/Makefile.in new file mode 100644 index 00000000..6e76f785 --- /dev/null +++ b/muse2/share/Makefile.in @@ -0,0 +1,670 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = share +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal-include.m4 \ + $(top_srcdir)/m4/alsa.m4 $(top_srcdir)/m4/docbook.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(firstpkgdatadir)" +DATA = $(firstpkgdata_DATA) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +ACLOCAL = @ACLOCAL@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DOCBOOKSTYLE = @DOCBOOKSTYLE@ +DOCBOOKTARGETS = @DOCBOOKTARGETS@ +DOT = @DOT@ +DOTPATH = @DOTPATH@ +DOXYGEN = @DOXYGEN@ +DOXYGEN_TREEVIEW = @DOXYGEN_TREEVIEW@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FLUIDSYNTHDIRS = @FLUIDSYNTHDIRS@ +FST_CFLAGS = @FST_CFLAGS@ +FST_LIBS = @FST_LIBS@ +Fluidsynth_CFLAGS = @Fluidsynth_CFLAGS@ +Fluidsynth_LIBS = @Fluidsynth_LIBS@ +GIVERTCAP = @GIVERTCAP@ +GREP = @GREP@ +HAVEDOT = @HAVEDOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_LIBS = @JACK_LIBS@ +JADE = @JADE@ +LASH_CFLAGS = @LASH_CFLAGS@ +LASH_LIBS = @LASH_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LO_CFLAGS = @LO_CFLAGS@ +LO_LIBS = @LO_LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MUSECXXFLAGS = @MUSECXXFLAGS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NSGMLS = @NSGMLS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PCH = @PCH@ +PERL = @PERL@ +PKG_CONFIG = @PKG_CONFIG@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIB = @PYTHON_LIB@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QTDIR_BIN = @QTDIR_BIN@ +QTDIR_INC = @QTDIR_INC@ +QT_LIBS = @QT_LIBS@ +RANLIB = @RANLIB@ +SAMPLERATE_CFLAGS = @SAMPLERATE_CFLAGS@ +SAMPLERATE_LIBS = @SAMPLERATE_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ +SNDFILE_LIBS = @SNDFILE_LIBS@ +STRIP = @STRIP@ +SUIDBUILD = @SUIDBUILD@ +SUIDINSTALL = @SUIDINSTALL@ +USE_SSE = @USE_SSE@ +UUID_CFLAGS = @UUID_CFLAGS@ +UUID_LIBS = @UUID_LIBS@ +VERSION = @VERSION@ +XMKMF = @XMKMF@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +have_docbook = @have_docbook@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +synth_fluid = @synth_fluid@ +synth_fluidsynth = @synth_fluidsynth@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +SUBDIRS = drummaps html locale wallpapers instruments \ + plugins templates pybridge scripts + +EXTRA_DIST = $(wildcard *.png) +firstpkgdata_DATA = $(EXTRA_DIST) +firstpkgdatadir = $(pkgdatadir) +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu share/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu share/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-firstpkgdataDATA: $(firstpkgdata_DATA) + @$(NORMAL_INSTALL) + test -z "$(firstpkgdatadir)" || $(MKDIR_P) "$(DESTDIR)$(firstpkgdatadir)" + @list='$(firstpkgdata_DATA)'; test -n "$(firstpkgdatadir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(firstpkgdatadir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(firstpkgdatadir)" || exit $$?; \ + done + +uninstall-firstpkgdataDATA: + @$(NORMAL_UNINSTALL) + @list='$(firstpkgdata_DATA)'; test -n "$(firstpkgdatadir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(firstpkgdatadir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(firstpkgdatadir)" && rm -f $$files + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile $(DATA) +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(firstpkgdatadir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: install-firstpkgdataDATA + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-firstpkgdataDATA + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ + install-am install-strip tags-recursive + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-firstpkgdataDATA install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am tags tags-recursive uninstall uninstall-am \ + uninstall-firstpkgdataDATA + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/muse2/share/drummaps/AKAI_SG01v_Bank_dr1.map b/muse2/share/drummaps/AKAI_SG01v_Bank_dr1.map new file mode 100644 index 00000000..adf9b5c0 --- /dev/null +++ b/muse2/share/drummaps/AKAI_SG01v_Bank_dr1.map @@ -0,0 +1,977 @@ + + + + + # Drum Set List for AKAI SG01v Bank dr1 + # generated by babarosa + # please report changes and errors + # to muse mailing list + + + BLIP#1 + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 27 + 27 + + + PLATE- + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 28 + 28 + + + BLIP#2 + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 29 + 29 + + + SCRATCH- + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 30 + 30 + + + SYN. RIM + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 31 + 31 + + + MM CLIC C2 + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 32 + 32 + + + MM CLIK C5 + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 33 + 33 + + + BLIP#2 + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 34 + 34 + + + SYN. KICK + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 35 + 35 + + + SDS5 KICK3 + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 36 + 36 + + + SIDE STICK + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 37 + 37 + + + SYN. SNRE 2 + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 38 + 38 + + + SYN. CLAPS + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 39 + 39 + + + SIM. SNRE + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 40 + 40 + + + MID AC TOM + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 41 + 41 + + + SYN. CL-HAT + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 42 + 42 + + + MID AC TOM + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 43 + 43 + + + SYN. HLF-HAT + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 44 + 44 + + + MID AC TOM + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 45 + 45 + + + SYN. OP-HAT + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 46 + 46 + + + MID AC TOM + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 47 + 47 + + + MID AC TOM + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 48 + 48 + + + CRASH + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 49 + 49 + + + MID AC TOM + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 50 + 50 + + + RIDE SYMBAL + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 51 + 51 + + + CRASH + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 52 + 52 + + + RIDE SYMBAL + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 53 + 53 + + + TAMBOURINE + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 54 + 54 + + + CRASH + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 55 + 55 + + + COWBELL + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 56 + 56 + + + CRASH + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 57 + 57 + + + FINGER SNAPS + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 58 + 58 + + + RIDE SYMBAL + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 59 + 59 + + + HI CONGA SL + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 60 + 60 + + + HI CONGA SL + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 61 + 61 + + + LO CONGA SL + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 62 + 62 + + + HI CONGA OP + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 63 + 63 + + + LOW CONGA OP + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 64 + 64 + + + TIMBAL + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 65 + 65 + + + TIMBAL + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 66 + 66 + + + AGOGO 1 + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 67 + 67 + + + AGOGO 1 + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 68 + 68 + + + SYN. MARACAS + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 69 + 69 + + + MARACAS + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 70 + 70 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 71 + 71 + + + POWER KICK + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 72 + 72 + + + SYN. RIM + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 73 + 73 + + + POWER SNRE + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 74 + 74 + + + BIG CLAP + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 75 + 75 + + + SDS5 SNARE9 + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 76 + 76 + + + MID E.TOM + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 77 + 77 + + + CL HAT + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 78 + 78 + + + MID E.TOM + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 79 + 79 + + + HLF HAT + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 80 + 80 + + + MID E.TOM + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 81 + 81 + + + OP HAT + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 82 + 82 + + + MID E.TOM + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 83 + 83 + + + MID E.TOM + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 84 + 84 + + + CRASH + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 85 + 85 + + + MID E.TOM + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 86 + 86 + + + RIDE SYMBAL + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 87 + 87 + + + WHITE NOISE + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 88 + 88 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 89 + 89 + + + BLIP#2 + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 90 + 90 + + + SYN. LO-CONGA + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 91 + 91 + + + SYN. COWBELL + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 92 + 92 + + + SYN. LO-CONGA + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 93 + 93 + + + SYN. CLAVES + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 94 + 94 + + + SYN. LO-CONGA + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 95 + 95 + + + diff --git a/muse2/share/drummaps/AKAI_SG01v_Bank_dr2.map b/muse2/share/drummaps/AKAI_SG01v_Bank_dr2.map new file mode 100644 index 00000000..46db39a0 --- /dev/null +++ b/muse2/share/drummaps/AKAI_SG01v_Bank_dr2.map @@ -0,0 +1,977 @@ + + + + + # Drum Set List for AKAI SG01v Bank dr2 + # generated by babarosa + # please report changes and errors + # to muse mailing list + + + BLIP#1 + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 27 + 27 + + + PLATE- + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 28 + 28 + + + BLIP#2 + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 29 + 29 + + + SCRATCH- + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 30 + 30 + + + SYN. RIM + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 31 + 31 + + + MM CLIC C2 + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 32 + 32 + + + MM CLIK C5 + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 33 + 33 + + + BLIP#2 + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 34 + 34 + + + SYN. KICK + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 35 + 35 + + + SDS5 KICK3 + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 36 + 36 + + + SIDE STICK + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 37 + 37 + + + SYN. SNRE 2 + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 38 + 38 + + + SYN. CLAPS + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 39 + 39 + + + SDS5 SNARE9 + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 40 + 40 + + + SIM. SNRE + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 41 + 41 + + + SYN. CL-HAT + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 42 + 42 + + + SIM. SNRE + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 43 + 43 + + + SYN. HLF-HAT + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 44 + 44 + + + SIM. SNRE + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 45 + 45 + + + SYN. OP-HAT + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 46 + 46 + + + SIM. SNRE + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 47 + 47 + + + SIM. SNRE + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 48 + 48 + + + CRASH + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 49 + 49 + + + SIM. SNRE + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 50 + 50 + + + RIDE SYMBAL + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 51 + 51 + + + CRASH + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 52 + 52 + + + RIDE SYMBAL + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 53 + 53 + + + TAMBOURINE + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 54 + 54 + + + CRASH + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 55 + 55 + + + COWBELL + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 56 + 56 + + + CRASH + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 57 + 57 + + + FINGER SNAPS + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 58 + 58 + + + RIDE SYMBAL + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 59 + 59 + + + HI CONGA SL + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 60 + 60 + + + HI CONGA SL + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 61 + 61 + + + LO CONGA SL + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 62 + 62 + + + HI CONGA OP + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 63 + 63 + + + LOW CONGA OP + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 64 + 64 + + + TIMBAL + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 65 + 65 + + + TIMBAL + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 66 + 66 + + + AGOGO 1 + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 67 + 67 + + + AGOGO 1 + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 68 + 68 + + + SYN. MARACAS + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 69 + 69 + + + MARACAS + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 70 + 70 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 71 + 71 + + + POWER KICK + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 72 + 72 + + + SYN. RIM + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 73 + 73 + + + POWER SNRE + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 74 + 74 + + + BIG CLAP + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 75 + 75 + + + SDS5 SNARE9 + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 76 + 76 + + + MID E.TOM + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 77 + 77 + + + CL HAT + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 78 + 78 + + + MID E.TOM + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 79 + 79 + + + HLF HAT + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 80 + 80 + + + MID E.TOM + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 81 + 81 + + + OP HAT + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 82 + 82 + + + MID E.TOM + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 83 + 83 + + + MID E.TOM + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 84 + 84 + + + CRASH + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 85 + 85 + + + MID E.TOM + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 86 + 86 + + + RIDE SYMBAL + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 87 + 87 + + + WHITE NOISE + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 88 + 88 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 89 + 89 + + + BLIP#2 + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 90 + 90 + + + SYN. LO-CONGA + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 91 + 91 + + + SYN. COWBELL + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 92 + 92 + + + SYN. LO-CONGA + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 93 + 93 + + + SYN. CLAVES + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 94 + 94 + + + SYN. LO-CONGA + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 95 + 95 + + + diff --git a/muse2/share/drummaps/KURZWEIL_SP2X_Drum_Map_GM_ReMap.map b/muse2/share/drummaps/KURZWEIL_SP2X_Drum_Map_GM_ReMap.map new file mode 100644 index 00000000..1106bda1 --- /dev/null +++ b/muse2/share/drummaps/KURZWEIL_SP2X_Drum_Map_GM_ReMap.map @@ -0,0 +1,1425 @@ + + + + + # Drum Set List for KURZWEIL SP2X Drum Map GM ReMap + # generated by babarosa + # please report changes and errors + # to muse mailing list + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 27 + 27 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 28 + 28 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 29 + 29 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 30 + 30 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 31 + 31 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 32 + 32 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 33 + 33 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 34 + 34 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 35 + 35 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 36 + 36 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 37 + 37 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 38 + 38 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 39 + 39 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 40 + 40 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 41 + 41 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 42 + 42 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 43 + 43 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 44 + 44 + + + Metronome Click + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 45 + 45 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 46 + 46 + + + Kick Drum 2 + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 47 + 47 + + + Kick Drum 1 + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 48 + 48 + + + Side Stick + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 49 + 49 + + + Snare Drum 1 + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 50 + 50 + + + Hand Clap + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 51 + 51 + + + Snare Drum 2 + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 52 + 52 + + + Lo Tom 2 + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 53 + 53 + + + Closed Hi Hat + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 54 + 54 + + + Lo Tom 1 + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 55 + 55 + + + Pedal Hi Hat + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 56 + 56 + + + Mid Tom 2 + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 57 + 57 + + + Open Hi Hat + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 58 + 58 + + + Mid Tom 1 + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 59 + 59 + + + Hi Tom 2 + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 60 + 60 + + + Crash Cymbal 1 + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 61 + 61 + + + Hi Tom 1 + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 62 + 62 + + + Ride Cymbal 1 + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 63 + 63 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 64 + 64 + + + Ride Bell + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 65 + 65 + + + Tambourine + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 66 + 66 + + + Splash Cymbal + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 67 + 67 + + + Cowbell + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 68 + 68 + + + Crash Cymbal 2 + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 69 + 69 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 70 + 70 + + + Ride Cymbal 2 + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 71 + 71 + + + Hi Bongo + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 72 + 72 + + + Lo Bongo + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 73 + 73 + + + Mute Conga + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 74 + 74 + + + Hi Conga + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 75 + 75 + + + Lo Conga + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 76 + 76 + + + Hi Timbale + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 77 + 77 + + + Lo Timbale + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 78 + 78 + + + Hi Agogo + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 79 + 79 + + + Lo Agogo + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 80 + 80 + + + Cabasa + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 81 + 81 + + + Maracas + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 82 + 82 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 83 + 83 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 84 + 84 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 85 + 85 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 86 + 86 + + + Clave + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 87 + 87 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 88 + 88 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 89 + 89 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 90 + 90 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 91 + 91 + + + Triangle Mute + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 92 + 92 + + + Triangle Open + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 93 + 93 + + + Shaker + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 94 + 94 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 95 + 95 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 96 + 96 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 97 + 97 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 98 + 98 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 99 + 99 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 100 + 100 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 101 + 101 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 102 + 102 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 103 + 103 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 104 + 104 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 105 + 105 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 106 + 106 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 107 + 107 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 108 + 108 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 109 + 109 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 110 + 110 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 111 + 111 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 112 + 112 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 113 + 113 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 114 + 114 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 115 + 115 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 116 + 116 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 117 + 117 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 118 + 118 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 119 + 119 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 120 + 120 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 121 + 121 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 122 + 122 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 123 + 123 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 124 + 124 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 125 + 125 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 126 + 126 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 127 + 127 + + + diff --git a/muse2/share/drummaps/KURZWEIL_SP2X_Drum_Map_Normal.map b/muse2/share/drummaps/KURZWEIL_SP2X_Drum_Map_Normal.map new file mode 100644 index 00000000..a7d9632e --- /dev/null +++ b/muse2/share/drummaps/KURZWEIL_SP2X_Drum_Map_Normal.map @@ -0,0 +1,1419 @@ + + + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 27 + 27 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 28 + 28 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 29 + 29 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 30 + 30 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 31 + 31 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 32 + 32 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 33 + 33 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 34 + 34 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 35 + 35 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 36 + 36 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 37 + 37 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 38 + 38 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 39 + 39 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 40 + 40 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 41 + 41 + + + Hard Snare 1 + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 42 + 42 + + + Kick 3 + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 43 + 43 + + + Kick 3 + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 44 + 44 + + + Snare 4 + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 45 + 45 + + + Snare 4 + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 46 + 46 + + + Crash Cymbal + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 47 + 47 + + + Floor Tom + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 48 + 48 + + + Floor Tom + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 49 + 49 + + + Lo Mid Tom + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 50 + 50 + + + Lo Mid Tom + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 51 + 51 + + + Mid Tom + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 52 + 52 + + + Mid Tom + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 53 + 53 + + + Mid Tom + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 54 + 54 + + + Hi Tom + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 55 + 55 + + + Hi Tom + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 56 + 56 + + + Hi Tom + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 57 + 57 + + + Hi Tom + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 58 + 58 + + + Kick 1 + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 59 + 59 + + + Kick 1 + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 60 + 60 + + + Kick 1 + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 61 + 61 + + + Kick 2 + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 62 + 62 + + + Kick 2 + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 63 + 63 + + + Cross Stick Ambient + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 64 + 64 + + + Cross Stick Ambient + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 65 + 65 + + + Cross Stick + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 66 + 66 + + + Snare 3 + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 67 + 67 + + + Snare 3 + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 68 + 68 + + + Snare 2 + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 69 + 69 + + + Snare 2 + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 70 + 70 + + + Soft Snare 1 + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 71 + 71 + + + Dual Snare 1 + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 72 + 72 + + + Dual Snare 1 + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 73 + 73 + + + Closed Hi-hat + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 74 + 74 + + + Closed Hi-hat + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 75 + 75 + + + Closed Hi-hat + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 76 + 76 + + + Slightly Open Hi-hat + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 77 + 77 + + + Slightly Open Hi-hat + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 78 + 78 + + + Slightly Open Hi-hat + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 79 + 79 + + + Open Hi-hat + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 80 + 80 + + + Open Hi-hat + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 81 + 81 + + + Open\Closed Hi-hat + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 82 + 82 + + + Open\Closed Hi-hat + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 83 + 83 + + + Foot Hi-hat + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 84 + 84 + + + Crash Cymbal + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 85 + 85 + + + Crash Cymbal + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 86 + 86 + + + Crash Cymbal + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 87 + 87 + + + Crash Cymbal + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 88 + 88 + + + Crash Cymbal + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 89 + 89 + + + Crash Cymbal + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 90 + 90 + + + Splash Cymbal + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 91 + 91 + + + Ride Cymbal + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 92 + 92 + + + Ride Cymbal Rim + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 93 + 93 + + + Ride Cymbal Rim\Bell + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 94 + 94 + + + Ride Cymbal Bell + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 95 + 95 + + + Ride Cymbal Bell + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 96 + 96 + + + Cowbell + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 97 + 97 + + + Hand Clap + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 98 + 98 + + + Lo Timbale\Hi Timbale + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 99 + 99 + + + Timbale Shell + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 100 + 100 + + + Conga + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 101 + 101 + + + Hi Tumba + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 102 + 102 + + + Conga + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 103 + 103 + + + Lo Tumba + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 104 + 104 + + + Clave + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 105 + 105 + + + Shakers + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 106 + 106 + + + Tambourine + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 107 + 107 + + + Tambourine + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 108 + 108 + + + Shakers + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 109 + 109 + + + Tambourine + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 110 + 110 + + + Maracas + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 111 + 111 + + + Maracas + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 112 + 112 + + + Lo Agogo + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 113 + 113 + + + Hi Agogo + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 114 + 114 + + + Lo Bongo + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 115 + 115 + + + Bongo Slap + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 116 + 116 + + + Hi Bongo + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 117 + 117 + + + Finger Snap + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 118 + 118 + + + Muted Triangle + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 119 + 119 + + + Open Triangle + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 120 + 120 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 121 + 121 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 122 + 122 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 123 + 123 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 124 + 124 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 125 + 125 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 126 + 126 + + + + 100 + 16 + 32 + 9 + 0 + 70 + 90 + 127 + 110 + 127 + 127 + + + diff --git a/muse2/share/drummaps/Makefile.am b/muse2/share/drummaps/Makefile.am new file mode 100644 index 00000000..6050b1f1 --- /dev/null +++ b/muse2/share/drummaps/Makefile.am @@ -0,0 +1,5 @@ +EXTRA_DIST = $(wildcard *.map) + +drumpkgdata_DATA = $(EXTRA_DIST) + +drumpkgdatadir = $(pkgdatadir)/drummaps diff --git a/muse2/share/drummaps/Makefile.in b/muse2/share/drummaps/Makefile.in new file mode 100644 index 00000000..62216c30 --- /dev/null +++ b/muse2/share/drummaps/Makefile.in @@ -0,0 +1,465 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = share/drummaps +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal-include.m4 \ + $(top_srcdir)/m4/alsa.m4 $(top_srcdir)/m4/docbook.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(drumpkgdatadir)" +DATA = $(drumpkgdata_DATA) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DOCBOOKSTYLE = @DOCBOOKSTYLE@ +DOCBOOKTARGETS = @DOCBOOKTARGETS@ +DOT = @DOT@ +DOTPATH = @DOTPATH@ +DOXYGEN = @DOXYGEN@ +DOXYGEN_TREEVIEW = @DOXYGEN_TREEVIEW@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FLUIDSYNTHDIRS = @FLUIDSYNTHDIRS@ +FST_CFLAGS = @FST_CFLAGS@ +FST_LIBS = @FST_LIBS@ +Fluidsynth_CFLAGS = @Fluidsynth_CFLAGS@ +Fluidsynth_LIBS = @Fluidsynth_LIBS@ +GIVERTCAP = @GIVERTCAP@ +GREP = @GREP@ +HAVEDOT = @HAVEDOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_LIBS = @JACK_LIBS@ +JADE = @JADE@ +LASH_CFLAGS = @LASH_CFLAGS@ +LASH_LIBS = @LASH_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LO_CFLAGS = @LO_CFLAGS@ +LO_LIBS = @LO_LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MUSECXXFLAGS = @MUSECXXFLAGS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NSGMLS = @NSGMLS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PCH = @PCH@ +PERL = @PERL@ +PKG_CONFIG = @PKG_CONFIG@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIB = @PYTHON_LIB@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QTDIR_BIN = @QTDIR_BIN@ +QTDIR_INC = @QTDIR_INC@ +QT_LIBS = @QT_LIBS@ +RANLIB = @RANLIB@ +SAMPLERATE_CFLAGS = @SAMPLERATE_CFLAGS@ +SAMPLERATE_LIBS = @SAMPLERATE_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ +SNDFILE_LIBS = @SNDFILE_LIBS@ +STRIP = @STRIP@ +SUIDBUILD = @SUIDBUILD@ +SUIDINSTALL = @SUIDINSTALL@ +USE_SSE = @USE_SSE@ +UUID_CFLAGS = @UUID_CFLAGS@ +UUID_LIBS = @UUID_LIBS@ +VERSION = @VERSION@ +XMKMF = @XMKMF@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +have_docbook = @have_docbook@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +synth_fluid = @synth_fluid@ +synth_fluidsynth = @synth_fluidsynth@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +EXTRA_DIST = $(wildcard *.map) +drumpkgdata_DATA = $(EXTRA_DIST) +drumpkgdatadir = $(pkgdatadir)/drummaps +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu share/drummaps/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu share/drummaps/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-drumpkgdataDATA: $(drumpkgdata_DATA) + @$(NORMAL_INSTALL) + test -z "$(drumpkgdatadir)" || $(MKDIR_P) "$(DESTDIR)$(drumpkgdatadir)" + @list='$(drumpkgdata_DATA)'; test -n "$(drumpkgdatadir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(drumpkgdatadir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(drumpkgdatadir)" || exit $$?; \ + done + +uninstall-drumpkgdataDATA: + @$(NORMAL_UNINSTALL) + @list='$(drumpkgdata_DATA)'; test -n "$(drumpkgdatadir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(drumpkgdatadir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(drumpkgdatadir)" && rm -f $$files +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(DATA) +installdirs: + for dir in "$(DESTDIR)$(drumpkgdatadir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-drumpkgdataDATA + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-drumpkgdataDATA + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + distclean distclean-generic distclean-libtool distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-drumpkgdataDATA \ + install-dvi install-dvi-am install-exec install-exec-am \ + install-html install-html-am install-info install-info-am \ + install-man install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am uninstall uninstall-am uninstall-drumpkgdataDATA + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/muse2/share/drummaps/addictive_drums.map b/muse2/share/drummaps/addictive_drums.map new file mode 100644 index 00000000..a513f67f --- /dev/null +++ b/muse2/share/drummaps/addictive_drums.map @@ -0,0 +1,1797 @@ + + + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 35 + 35 + + + Bass Drum 1 + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 36 + 36 + + + Snare1 + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 37 + 37 + + + Snare2 + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 38 + 38 + + + Snare3 + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 39 + 39 + + + Snare4 + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 40 + 40 + + + Snare5H + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 41 + 41 + + + Snare6 + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 43 + 43 + + + SideStick + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 42 + 42 + + + SideStick2 + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 44 + 44 + + + Cymbal1 + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 46 + 46 + + + Xtra + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 47 + 47 + + + HighHatStomp + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 48 + 48 + + + HighHat1 + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 49 + 49 + + + HighHat2 + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 50 + 50 + + + HighHat3 + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 51 + 51 + + + HighHat4 + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 52 + 52 + + + HighHatBell + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 53 + 53 + + + HighHatOpen1 + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 54 + 54 + + + HighHatOpen2 + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 55 + 55 + + + HighHatOpen3 + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 56 + 56 + + + HighHatOpen4 + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 57 + 57 + + + HighHatOpen5 + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 58 + 58 + + + HighHatOpenStomp + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 59 + 59 + + + Ride + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 45 + 45 + + + Ride2 + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 60 + 60 + + + Ride3 + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 61 + 61 + + + Ride4 + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 62 + 62 + + + RideHold + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 63 + 63 + + + Tom4_1 + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 65 + 65 + + + Tom4_2 + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 66 + 66 + + + Tom3_1 + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 67 + 67 + + + Tom3_2 + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 68 + 68 + + + Tom2_1 + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 69 + 69 + + + Tom2_2 + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 70 + 70 + + + Tom1_1 + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 71 + 71 + + + Tom1_2 + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 72 + 72 + + + Sticks + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 75 + 75 + + + Cymbal1 + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 77 + 77 + + + Cymbal1Grab + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 78 + 78 + + + Cymbal2 + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 79 + 79 + + + Cymbal2Grab + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 80 + 80 + + + Cymbal3 + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 81 + 81 + + + Cymbal3Grab + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 82 + 82 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 76 + 76 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 74 + 74 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 64 + 64 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 73 + 73 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 83 + 83 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 84 + 84 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 85 + 85 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 86 + 86 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 87 + 87 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 88 + 88 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 89 + 89 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 90 + 90 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 91 + 91 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 92 + 92 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 93 + 93 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 94 + 94 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 95 + 95 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 96 + 96 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 97 + 97 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 98 + 98 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 99 + 99 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 100 + 100 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 101 + 101 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 102 + 102 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 103 + 103 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 104 + 104 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 105 + 105 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 106 + 106 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 107 + 107 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 108 + 108 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 109 + 109 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 110 + 110 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 111 + 111 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 112 + 112 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 113 + 113 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 114 + 114 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 115 + 115 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 116 + 116 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 117 + 117 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 118 + 118 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 119 + 119 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 120 + 120 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 121 + 121 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 122 + 122 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 123 + 123 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 124 + 124 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 125 + 125 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 126 + 126 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 127 + 127 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 0 + 0 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 1 + 1 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 2 + 2 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 3 + 3 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 4 + 4 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 5 + 5 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 6 + 6 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 7 + 7 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 8 + 8 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 9 + 9 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 10 + 10 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 11 + 11 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 12 + 12 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 13 + 13 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 14 + 14 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 15 + 15 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 16 + 16 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 17 + 17 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 18 + 18 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 19 + 19 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 20 + 20 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 21 + 21 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 22 + 22 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 23 + 23 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 24 + 24 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 25 + 25 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 26 + 26 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 27 + 27 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 28 + 28 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 29 + 29 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 30 + 30 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 31 + 31 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 32 + 32 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 33 + 33 + + + + 100 + 16 + 32 + 0 + 0 + 70 + 90 + 110 + 127 + 34 + 34 + + + diff --git a/muse2/share/drummaps/dx200_drum.map b/muse2/share/drummaps/dx200_drum.map new file mode 100644 index 00000000..25011979 --- /dev/null +++ b/muse2/share/drummaps/dx200_drum.map @@ -0,0 +1,131 @@ + + + +PulseBass C100 +PulseBass C#111 +PulseBass D122 +PulseBass D#133 +PulseBass E144 +PulseBass F155 +PulseBass F#166 +PulseBass G177 +PulseBass G#188 +PulseBass A199 +PulseBass A#11010 +PulseBass B11111 +SineBass C11212 +SineBass C#11313 +SineBass D11414 +SineBass D#11515 +SineBass E11616 +SineBass F11717 +SineBass F#11818 +SineBass G11919 +SineBass G#12020 +SineBass A12121 +SineBass A#12222 +SineBass B12323 +PickBass C12424 +PickBass C#12525 +PickBass D12626 +PickBass D#12727 +PickBass E12828 +PickBass F12929 +PickBass F#13030 +PickBass G13131 +PickBass G#13232 +PickBass A13333 +PickBass A#13434 +PickBass B13535 +BD Analog 80813636 +BD R&B 113737 +BD R&B 213838 +BD Lo-Fi13939 +BD Jungle14040 +BD Hip 114141 +BD Hip 214242 +BD Tech14343 +BD Dist 114444 +BD Dist 214545 +BD Human 114646 +BD Human 214747 +BD Elec 114848 +BD Elec 2 90914949 +BD Elec 3 90915050 +SD Live15151 +SD R&B 115252 +SD R&B 215353 +SD Analog 80815454 +SD Hip 115555 +SD Hip 2 Lo-Fi15656 +SD Hip 315757 +SD Cut Jungle15858 +SD Dodge15959 +SD Timbra16060 +SD D&B16161 +SD Dist 90916262 +SD Elec 1 90916363 +SD Elec 2 90916464 +SD Rim 116565 +SD Rim 216666 +HH D&B Cls16767 +HH D&B Opn16868 +HH Ana Cls 1 90916969 +HH Ana Opn 1 80817070 +HH Syn Cls17171 +HH Syn Opn17272 +HH Ana Cls 2 90917373 +HH Ana Opn 2 90917474 +Tom Dist 90917575 +Tom Ana 117676 +Tom Ana 2 90917777 +Tom Synth17878 +Tom Sine17979 +Crush Sym18080 +Ride Sym18181 +Ride Bell18282 +Tambourine18383 +Tabla Open18484 +Taba Mute18585 +Tabla Nah18686 +Udu Low18787 +Udu High18888 +Udu Finger18989 +Clave 80819090 +Maracas19191 +Shaker19292 +Clap 90919393 +Scratch 119494 +Scratch 219595 +Scratch 319696 +Scratch 419797 +Ripper19898 +Zap 119999 +Zap 21100100 +Rev Low1101101 +Synth Vibra1102102 +Metal1103103 +Click1104104 +Gt Attack1105105 +Gt Power1106106 +Stab Organ1107107 +SlowBass1108108 +FingerBass1109109 +SynthBass 11110110 +SynthBass 21111111 +SynthBass 31112112 +SynthBass 41113113 +Digi Wave 11114114 +Digi Wave 21115115 +Digi Wave 31116116 +Digi Wave 41117117 +Digi Wave 51118118 +Digi Wave 61119119 +Digi Wave 71120120 + + + + + + + diff --git a/muse2/share/drummaps/sc88-pc1.map b/muse2/share/drummaps/sc88-pc1.map new file mode 100644 index 00000000..57275589 --- /dev/null +++ b/muse2/share/drummaps/sc88-pc1.map @@ -0,0 +1,329 @@ + + + + + # Drum Set List SC-88 Drum Set 1 + # + # "Program Change 1" + # "Standard Set 1" + # + + + + Snare Roll + 25 + 25 + + + Finger Snare + 26 + 26 + + + High Q + 27 + 27 + + + Slap + 28 + 28 + + + Scratch Push + 29 + 29 + + + Scratch Pull + 30 + 30 + + + Sticks + 31 + 31 + + + Square Click + 32 + 32 + + + Metronome Click + 33 + 33 + + + Metronome Bell + 34 + 34 + + + Standard 1 Kick 2 + 35 + 35 + + + Standard 1 Kick 1 + 36 + 36 + + + Side Stick + 37 + 37 + + + Standard 1 Snare 1 + 38 + 38 + + + Hand Clap + 39 + 39 + + + Standard 1 Snare 2 + 40 + 40 + + + Low Tom 2 + 41 + 41 + + + Closed Hi-hat 1 + 42 + 42 + + + Low Tom 1 + 43 + 43 + + + Pedal Hi-hat + 44 + 44 + + + Mid Tom 2 + 45 + 45 + + + Open Hi-hat 2 + 46 + 46 + + + Mid Tom 1 + 47 + 47 + + + High Tom 2 + 48 + 48 + + + Crash Cymbal 1 + 49 + 49 + + + High Tom 1 + 50 + 50 + + + Ride Cymbal 1 + 51 + 51 + + + Chinese Cymbal + 52 + 52 + + + Ride Bell + 53 + 53 + + + Tambourine + 54 + 54 + + + Splash Cymbal + 55 + 55 + + + Cowbell + 56 + 56 + + + Crash Cymbal 2 + 57 + 57 + + + Vibra Slap + 58 + 58 + + + Ride Cymbal 2 + 59 + 59 + + + High Bongo + 60 + 60 + + + Low Bongo + 61 + 61 + + + Mute High Conga + 62 + 62 + + + Open High Conga + 63 + 63 + + + Low Conga + 64 + 64 + + + High Timbale + 65 + 65 + + + Low Timbale + 66 + 66 + + + High Agogo + 67 + 67 + + + Low Agogo + 68 + 68 + + + Cabasa + 69 + 69 + + + Maracas + 70 + 70 + + + Short Hi Whistle + 71 + 71 + + + Long Low Whistle + 72 + 72 + + + Short Guiro + 73 + 73 + + + Long Guiro + 74 + 74 + + + Claves + 75 + 75 + + + High Wood Block + 76 + 76 + + + Low Wood Block + 77 + 77 + + + Mute Cuica + 78 + 78 + + + Open Cuica + 79 + 79 + + + Mute Triangle + 80 + 80 + + + Open Triangle + 81 + 81 + + + Shaker + 82 + 82 + + + Jingle Bell + 83 + 83 + + + Bell Tree + 84 + 84 + + + Castanets + 85 + 85 + + + Mute Surdo + 86 + 86 + + + Open Surdo + 87 + 87 + + + + diff --git a/muse2/share/html/COPYING.html b/muse2/share/html/COPYING.html new file mode 100644 index 00000000..86b6fa8e --- /dev/null +++ b/muse2/share/html/COPYING.html @@ -0,0 +1,353 @@ + +
+ Note that the GPL below is copyrighted by the Free Software
+ Foundation, but the instance of code that it refers to (the
+ MusE music editor) is copyrighted by me and others who 
+ actually wrote it.
+
+			Werner Schweer
+
+----------------------------------------
+
+		    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
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    
+    Copyright (C) 19yy  
+
+    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
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) 19yy name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  , 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+
+
diff --git a/muse2/share/html/Makefile.am b/muse2/share/html/Makefile.am new file mode 100644 index 00000000..8e37c8e3 --- /dev/null +++ b/muse2/share/html/Makefile.am @@ -0,0 +1,5 @@ +EXTRA_DIST = $(wildcard *.html) $(wildcard *.txt) $(wildcard *.jpg) + +htmlpkgdata_DATA = $(EXTRA_DIST) + +htmlpkgdatadir = $(pkgdatadir)/html diff --git a/muse2/share/html/Makefile.in b/muse2/share/html/Makefile.in new file mode 100644 index 00000000..23fa57c1 --- /dev/null +++ b/muse2/share/html/Makefile.in @@ -0,0 +1,465 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = share/html +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal-include.m4 \ + $(top_srcdir)/m4/alsa.m4 $(top_srcdir)/m4/docbook.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(htmlpkgdatadir)" +DATA = $(htmlpkgdata_DATA) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DOCBOOKSTYLE = @DOCBOOKSTYLE@ +DOCBOOKTARGETS = @DOCBOOKTARGETS@ +DOT = @DOT@ +DOTPATH = @DOTPATH@ +DOXYGEN = @DOXYGEN@ +DOXYGEN_TREEVIEW = @DOXYGEN_TREEVIEW@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FLUIDSYNTHDIRS = @FLUIDSYNTHDIRS@ +FST_CFLAGS = @FST_CFLAGS@ +FST_LIBS = @FST_LIBS@ +Fluidsynth_CFLAGS = @Fluidsynth_CFLAGS@ +Fluidsynth_LIBS = @Fluidsynth_LIBS@ +GIVERTCAP = @GIVERTCAP@ +GREP = @GREP@ +HAVEDOT = @HAVEDOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_LIBS = @JACK_LIBS@ +JADE = @JADE@ +LASH_CFLAGS = @LASH_CFLAGS@ +LASH_LIBS = @LASH_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LO_CFLAGS = @LO_CFLAGS@ +LO_LIBS = @LO_LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MUSECXXFLAGS = @MUSECXXFLAGS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NSGMLS = @NSGMLS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PCH = @PCH@ +PERL = @PERL@ +PKG_CONFIG = @PKG_CONFIG@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIB = @PYTHON_LIB@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QTDIR_BIN = @QTDIR_BIN@ +QTDIR_INC = @QTDIR_INC@ +QT_LIBS = @QT_LIBS@ +RANLIB = @RANLIB@ +SAMPLERATE_CFLAGS = @SAMPLERATE_CFLAGS@ +SAMPLERATE_LIBS = @SAMPLERATE_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ +SNDFILE_LIBS = @SNDFILE_LIBS@ +STRIP = @STRIP@ +SUIDBUILD = @SUIDBUILD@ +SUIDINSTALL = @SUIDINSTALL@ +USE_SSE = @USE_SSE@ +UUID_CFLAGS = @UUID_CFLAGS@ +UUID_LIBS = @UUID_LIBS@ +VERSION = @VERSION@ +XMKMF = @XMKMF@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +have_docbook = @have_docbook@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +synth_fluid = @synth_fluid@ +synth_fluidsynth = @synth_fluidsynth@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +EXTRA_DIST = $(wildcard *.html) $(wildcard *.txt) $(wildcard *.jpg) +htmlpkgdata_DATA = $(EXTRA_DIST) +htmlpkgdatadir = $(pkgdatadir)/html +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu share/html/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu share/html/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-htmlpkgdataDATA: $(htmlpkgdata_DATA) + @$(NORMAL_INSTALL) + test -z "$(htmlpkgdatadir)" || $(MKDIR_P) "$(DESTDIR)$(htmlpkgdatadir)" + @list='$(htmlpkgdata_DATA)'; test -n "$(htmlpkgdatadir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(htmlpkgdatadir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(htmlpkgdatadir)" || exit $$?; \ + done + +uninstall-htmlpkgdataDATA: + @$(NORMAL_UNINSTALL) + @list='$(htmlpkgdata_DATA)'; test -n "$(htmlpkgdatadir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(htmlpkgdatadir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(htmlpkgdatadir)" && rm -f $$files +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(DATA) +installdirs: + for dir in "$(DESTDIR)$(htmlpkgdatadir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-htmlpkgdataDATA + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-htmlpkgdataDATA + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + distclean distclean-generic distclean-libtool distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-htmlpkgdataDATA install-info install-info-am \ + install-man install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am uninstall uninstall-am uninstall-htmlpkgdataDATA + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/muse2/share/html/button_bar.jpg b/muse2/share/html/button_bar.jpg new file mode 100644 index 00000000..204328c8 Binary files /dev/null and b/muse2/share/html/button_bar.jpg differ diff --git a/muse2/share/html/getting_started.html b/muse2/share/html/getting_started.html new file mode 100644 index 00000000..0d6c4344 --- /dev/null +++ b/muse2/share/html/getting_started.html @@ -0,0 +1,89 @@ + +

MusE - The Linux (Midi) Music Editor

+ +

5. Getting Started

+

+

5.1 Creating A New Song

+

+Here's a very short tutorial on how to create a new song from scratch. + +

+ +

    +
  1. Start MusE with the name of a new song (ie. a filename that doesn't +already exist): +
    +	muse blues1.med
    +
    +Alternatively, start MusE and select File->New. The default song +name is default and the first time you select File->Save, +MusE asks you for a real name. + +
  2. Select a song type from the Type pulldown menu in the +Toolbar. This selects the capabilities of your MIDI hardware (either +NO, GM, GS, or XG). + +
  3. Doubleclick on the first empty track to create a new track. +
  4. Select the MIDI channel for the new track; click with the right mouse +button on Ch column in the track list to increment channel nummber, click +with middle mouse button to decrement. +
  5. If the TrackInfo window is not visible, press TrackInfo. +
  6. Select a MIDI instrument for the MIDI channel of your new track. +
  7. Click with the middle mouse button on ruler to set left locator mark. +
  8. Click with the right mouse button on the ruler to set right locator mark. +Note: The right mark must be set to the right of the left mark. +
  9. Double click between the left and right locators on first track to +create a new part, or select the Pencil tool and draw with the left +mouse button pressed to create a new part. +
+ +

+

5.2 Recording Events

+

+Entering Notes Manually + +

    +
  1. Select Pointer tool from toolbar +
  2. Double click on part in part canvas to start the pianoroll editor +
  3. Select Pencil tool from toolbar in the pianoroll editor +
  4. Now you can draw events into the event canvas +
+ +

+Play The Notes + +

    +
  1. Click with middle mouse button on ruler to set left locator mark +
  2. Click with right mouse button on ruler to set right locator mark +
  3. Note: right mark must be set right to left mark +
  4. Click with left mouse button on ruler to set current position between left and right locator +
  5. Select "loop" in the transport toolbar +
  6. Press play to start sequencer +
  7. You can enter new notes while the sequencer is playing +
+ +

+Some Hints + +

    +
  1. You can "play" in realtime on the piano keyboard on the left side of the pianoroll editor +
  2. You can change Channel Info and Track Info values during play +
+ +

+

5.3 Step Recording

+

+

    +
  1. Start the pianoroll editor +
  2. Click with left mouse button on ruler to set current position to the start position of your recording +
  3. Set the Snap value to the step distance +
  4. Set the Quantize value to the length of the notes to record +
  5. Enter step record mode by pressing the "S" toolbar button +
  6. Every click on the piano keyboard records a note with "Quantize" len and advances the current record position to +
  7. The next "Snap" position +
  8. Shift+click records a note without advancing the current record position +
  9. Change the current position with the cursor keys +
  10. Shift+space inserts a gap; all notes to the right of the current position move to the next snap position +
+ +
diff --git a/muse2/share/html/index.html b/muse2/share/html/index.html new file mode 100644 index 00000000..c2e5b6a7 --- /dev/null +++ b/muse2/share/html/index.html @@ -0,0 +1,66 @@ + +

MusE - The Linux Music Editor

+

+

About MusE

+ +MusE is a multitrack virtual studio for Linux that has support +for sequencing of both midi and audio and has, among other things, +support for LADSPA, Jack and ALSA.
+MusE is written by Werner Schweer and others and is published under the +
GNU General Public License. +The latest release of MusE and the up2date documentation can be found at the MusE hompage: +http://www.muse-sequencer.org/. +
+
+This is the old manual of the 0.6.3 release but there is already a new one in development, try this: +http://www.muse-sequencer.org/wiki/index.php/Manual + +

+

1. Introduction (still to be written)

+ +

+

2. Installation

+
    +
  • 2.1 How to Obtain MusE +
  • 2.2 System Requirements +
  • 2.3 Compiliation and Installation +
+ +

+

3. Invoking MusE

+
    +
  • 3.1 Invoking MusE +
  • 3.2 Command Line Options +
  • 3.3 File Types Recognized by MusE +
+ +

+

4. Window Reference Guide

+
    +
  • 4.1 The Main Window +
  • 4.2 The Arranger +
  • 4.2.1 The Left Pane +
  • 4.2.1.1 Track Info +
  • 4.2.2 The Right Pane + +
  • 4.3 The Button Bar & Menus +
+ +

+

5. Getting Started

+
    +
  • 5.1 Creating A New Song +
  • 5.2 Recording Events +
  • 5.3 Step Recording +
+ +

+

6. Mixer Automation (still to be written)

+
    +
  • 6.1 Record Automation Events (still to be written) +
+ + +

+

Glossary (still to be written)

+ diff --git a/muse2/share/html/installation.html b/muse2/share/html/installation.html new file mode 100644 index 00000000..19527333 --- /dev/null +++ b/muse2/share/html/installation.html @@ -0,0 +1,64 @@ + +

MusE - The Linux (Midi) Music Editor

+ +

2. Installation

+

+

2.1 How to Obtain MusE

+MusE is available at the MusE Homepage, located at +http://www.muse-sequencer.org/. +Download the latest non-beta release and follow the +installation instructions below. + +

2.2 System Requirements

+To run MusE on your workstation, the following conditions must be met: + + +

2.3 Compiliation and Installation

+Unpack the newly-downloaded tarball into a directory and edit +the file make.inc. +

+The most important variables to set in this file are: +

    +
  • QTDIR +
  • ALSA +
  • OSS +
+ +Point QTDIR to where your QT libraries are installed. +ALSA and OSS are boolean values (ie. yes +or no) that tell MusE how to handle Midi and Audio on your +system. It is safe to say yes to both. +

+A sample config: +

+

+	QTDIR = /usr/local/qt
+	ALSA = no
+	OSS = yes
+
+ +

+When done, save make.inc and run the following commands: +

+	make depend
+	make
+	make install
+
+ +

+Note that make install will ask for the root password, +as MusE is installed as a setuid-root binary. Setuid-root is needed to allow +MusE to get proper timing functions from the Linux kernel. +

+Hint: To get even better timing than that, run MusE with the -R option. + + diff --git a/muse2/share/html/invocation.html b/muse2/share/html/invocation.html new file mode 100644 index 00000000..778422c2 --- /dev/null +++ b/muse2/share/html/invocation.html @@ -0,0 +1,54 @@ + + + MusE: Linux Music Editor + + + + +

MusE - The Linux (Midi) Music Editor

+ +

3. Invoking MusE

+

+

3.1 Invoking MusE

+MusE is invoked from the command line by typing in: +
+	muse
+
+ +Optionally, you can use command line options of the form: + +
+	muse <options> <midifile>
+
+ +<options> : see section 3.2 below for details on options. +<midifile> can be either a standard MIDI file or a MusE +file (*.med, *.med.gz or *.med.bz2). + +

3.2 Command Line Options

+

+MusE accepts some options as listed below: +

+   -v  print version
+   -d  debug mode: no threads
+   -D  debug mode: enable some debug messages
+   -m  debug mode: trace midi Input
+   -M  debug mode: trace midi Output
+   -s  debug mode: trace sync
+   -R  enable real time scheduling
+
+ +

3.3 File Types Recognized by MusE

+

+ +
~/.MusEMusE Configuration File ("~" refers to your home directory) +
.musePrjHidden Project File; stores list of last projects +
*.medMusE song file; internal MusE format +
*.midmidi file; can be imported +
*.karkaraoke: midi file with additional information; some types can be imported +
+

+With adding the additional extensions .gz or .bz2 +you can read or write compressed files. + + diff --git a/muse2/share/html/left_pane.jpg b/muse2/share/html/left_pane.jpg new file mode 100644 index 00000000..a659e1ee Binary files /dev/null and b/muse2/share/html/left_pane.jpg differ diff --git a/muse2/share/html/main_window.jpg b/muse2/share/html/main_window.jpg new file mode 100644 index 00000000..eee1e43f Binary files /dev/null and b/muse2/share/html/main_window.jpg differ diff --git a/muse2/share/html/main_window_track_info.jpg b/muse2/share/html/main_window_track_info.jpg new file mode 100644 index 00000000..d4dc207c Binary files /dev/null and b/muse2/share/html/main_window_track_info.jpg differ diff --git a/muse2/share/html/right_pane.jpg b/muse2/share/html/right_pane.jpg new file mode 100644 index 00000000..a770a4e8 Binary files /dev/null and b/muse2/share/html/right_pane.jpg differ diff --git a/muse2/share/html/styles.css b/muse2/share/html/styles.css new file mode 100644 index 00000000..53026fa1 --- /dev/null +++ b/muse2/share/html/styles.css @@ -0,0 +1,85 @@ +:link { color: #091cef; } +:visited { color: #091cef; } + +body { + background: #eeeeee; + color: #00; + font-family: Arial, Geneva; + font-size: 10pt; + } +h1.head { + margin: 0.05em 0.3em; + font-family: Arial, helvetica, sans-serif; + color: #091cef; + } +td.head { + background: #aeb3e8; + color: #091cef; + } +td.nav { + background: #aeb3e8; + color: #000; + } +td.ld { + background: #aeb3e8; + valign: top; + width: 60; + font-weight: bold; + } +td.lh { + background: #aeb3e8; + } +td.lb { + background: #ced1e2; + } + +h3.navhead { + margin-top: 0.2em; + margin-bottom: 0em; + font-size: small; + font-family: Verdana, Geneva, Arial, sans-serif; + } + +.navlink { + font-size: small; + font-family: Verdana, Geneva, Arial, sans-serif; + } + +p, input { + font-family: Arial, Geneva; + font-size: 10pt; +} + +b { + font-family: Arial, Geneva; + font-size: 10pt; + font-weight: bold; +} + +h1 { + font-family: Arial, Geneva; + font-size: 24pt; + font-weight: bold; +} +h2 { + font-family: Arial, Geneva; + font-size: 18pt; + font-weight: bold; +} + +a { + font-family: Arial, Geneva; + font-size: 12pt; +} + +th { + font-family: Arial, Geneva; + font-size: 10pt; + +} + +td { + font-family: Arial, Geneva; + font-size: 12pt; + color: #000000; + } diff --git a/muse2/share/html/toc_.txt b/muse2/share/html/toc_.txt new file mode 100644 index 00000000..d8503ff4 --- /dev/null +++ b/muse2/share/html/toc_.txt @@ -0,0 +1,13 @@ +"Glossary" "glossary.html" +"Getting Started" "getting_started.html" ++"Window Reference Guide" "window_ref.html" + +"The Arranger" "window_ref.html" + "The Button Bar & Menus" "window_ref.html" + "The Right Pane" "window_ref.html" + +"The Left Pane" "window_ref.html" + "Track Info" "window_ref.html" + "The Main Window" "window_ref.html" +"Invoking MusE" "invocation.html" +"Installation" "installation.html" +"Introduction" "introduction.html" +"Index" "index.html" diff --git a/muse2/share/html/track_info.jpg b/muse2/share/html/track_info.jpg new file mode 100644 index 00000000..89834d71 Binary files /dev/null and b/muse2/share/html/track_info.jpg differ diff --git a/muse2/share/html/window_ref.html b/muse2/share/html/window_ref.html new file mode 100644 index 00000000..549e88d3 --- /dev/null +++ b/muse2/share/html/window_ref.html @@ -0,0 +1,180 @@ + +

MusE - The Linux (Midi) Music Editor

+ +

4. Window Reference Guide

+

+

4.1 The Main Window

+Here's a screenshot of the main window, with a standard MIDI file already +loaded: +

+ + +

+The main window is basically divided up into two panes separated by a +veritcal bar that is movable horizontally. These two panes together +are called the Arranger. + +

4.2 The Arranger

+

+The left pane of the Arranger describes each track in detail, +while the right pane describes each track graphically. + +

4.2.1 The Left Pane

+ +

+The left pane details the following information for each track: +

    +
  • A -?? +
  • M - Mute the track +
  • C - Defines whether the track is one of MIDI, Drum or Wave. +
  • Track - A freely-editable track name. +
  • Ch - Defines which MIDI Channel this track plays on. +
  • Port - Defines which MIDI port this track plays on. +
  • T -?? +
+ +You can select which track is currently "active" by simply clicking +on the track. +

+When a track's M column is clicked, that track is marked as Muted with +a red circle and upon playback that track will not be heard. To hear +the track, click on the M column for that track again. +

+Right click on the C column for a track to declare the track to be of +type MIDI, Drum or Wave. +

+The Track column is free-form, meaning that a double-click on a track's +Track column will allow you to enter a descriptive name for the track, +for example "Hot Lead Guitar". +

+The Ch column for a track is changed by right-clicking to increment the +number or middle-clicking to decrement the number. It's generally a +good idea to keep differing instruments on different MIDI channels and it's +considered common to have the drum kit on channel 10. +

+

4.2.1.1 Track Info

+

+At the bottom of the left pane, you'll see a little button labelled +"TrackInfo". When clicked, the standard information plus more about +the currently selected track is presented: +

+ +

    +
  • Track Name +
  • Channel +
  • Transpose +
  • Delay +
  • Length +
  • Velocity +
  • Compr +
+The bottom half of the TrackInfo display describes MIDI channel information: +
    +
  • MIDI Instrument +
  • H-Bank +
  • L-Bank +
  • Progr +
  • Volume +
  • Pan +
+ +

+Operations that can be performed on the left pane: + + +
Track Functions  
Select Track +
    +
  • Left Mouse Button +
+
Select multiple Tracks +
    +
  • Shift + Left Mouse Button +
+
Change Selected Track +
    +
  • Key Up: previous Track +
  • Key Down: next Track +
  • click with left mouse button in name field +
+
Move Track +
    +
  • Drag with left Mouse Button +
+
Create New Track +
    +
  • Pulldown Edit
    +
  • Ctrl T +
  • double click in empty track +
+
Delete selected Track(s) +
    +
  • Pulldown Edit +
  • Del +
+
Rename Track +
    +
  • doubleClick with left mouse button + on track name +
+
Change Midi Channel +
    +
  • left mouse button increments midi channel +
  • middle mouse button decrements midi channel +
+
Select Midi Port +
    +
  • click with right mouse button on portname; + select from pulldown menu +
+
Mute Track +
    +
  • click with left mouse button on "M" field in + Tracklist +
+
Solo Track +
    +
  • click "Solo" button +
+
+ + +

4.2.2 The Right Pane

+ +

+The right pane desribes each track graphically. Time moves from left +to right and is measured in beats that are referenced at the top of +the right pane. Tracks are displayed vertically in boxes, called +"Parts", that depict where MIDI and audio data are played. +

+The small sliders that are adjacent to the bottom right corner affect +the view of the right pane in terms of "zooming". The vertical slider +affects the height of the tracks, while the horizontal slider affects +the width. +

+Operations that can be performed on the right pane: +

+ +
To do this......Do this +
Select PartLeft Click +
Select multiple partsShift + left click +
Change selected trackKey left: previous part, Key right: next part +
Move partDrag with left mouse button +
Create new partselect Pencil tool; draw with left mouse button pressed, OR set left and right mark; double click on track +
Delete selected part(s)select rubber tool; click part to delete +
Rename partdouble click with left mouse button on part +
Copy partdrag with shift + left mouse button +
Cut partselect Cut Tool; click on part to cut +
Glue partselect Glue Tool; click on part to glue with next part +
+

+ +

4.2.3 The Button Bar & Menus

+ +

+Across the top, above the Arranger, are a menu system, icons and other +widgets that you use to manipulate your project. Most of these are +self-explanatory, while others are described later in this document. + + + + diff --git a/muse2/share/instruments/Access_Virus.idf b/muse2/share/instruments/Access_Virus.idf new file mode 100644 index 00000000..8772cde9 --- /dev/null +++ b/muse2/share/instruments/Access_Virus.idf @@ -0,0 +1,1046 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/muse2/share/instruments/Akai-SG01v.idf b/muse2/share/instruments/Akai-SG01v.idf new file mode 100644 index 00000000..7c41b429 --- /dev/null +++ b/muse2/share/instruments/Akai-SG01v.idf @@ -0,0 +1,282 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/muse2/share/instruments/Alesis-QS-78R.idf b/muse2/share/instruments/Alesis-QS-78R.idf new file mode 100644 index 00000000..303d99d5 --- /dev/null +++ b/muse2/share/instruments/Alesis-QS-78R.idf @@ -0,0 +1,674 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/muse2/share/instruments/AlesisQS6.idf b/muse2/share/instruments/AlesisQS6.idf new file mode 100644 index 00000000..cb4de5b1 --- /dev/null +++ b/muse2/share/instruments/AlesisQS6.idf @@ -0,0 +1,655 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/muse2/share/instruments/Emu-4mbgsgmmt-sf.idf b/muse2/share/instruments/Emu-4mbgsgmmt-sf.idf new file mode 100644 index 00000000..b8b312c9 --- /dev/null +++ b/muse2/share/instruments/Emu-4mbgsgmmt-sf.idf @@ -0,0 +1,440 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/muse2/share/instruments/Hammond_XB-1.idf b/muse2/share/instruments/Hammond_XB-1.idf new file mode 100644 index 00000000..06896383 --- /dev/null +++ b/muse2/share/instruments/Hammond_XB-1.idf @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/muse2/share/instruments/Korg-MS2000R.idf b/muse2/share/instruments/Korg-MS2000R.idf new file mode 100644 index 00000000..b5ad41a7 --- /dev/null +++ b/muse2/share/instruments/Korg-MS2000R.idf @@ -0,0 +1,546 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/muse2/share/instruments/Korg-X50.idf b/muse2/share/instruments/Korg-X50.idf new file mode 100644 index 00000000..e8a7b13b --- /dev/null +++ b/muse2/share/instruments/Korg-X50.idf @@ -0,0 +1,1091 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/muse2/share/instruments/Korg-X5DR-PresetA.idf b/muse2/share/instruments/Korg-X5DR-PresetA.idf new file mode 100644 index 00000000..5181ab09 --- /dev/null +++ b/muse2/share/instruments/Korg-X5DR-PresetA.idf @@ -0,0 +1,368 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/muse2/share/instruments/Korg-X5DR-PresetB.idf b/muse2/share/instruments/Korg-X5DR-PresetB.idf new file mode 100644 index 00000000..6441d816 --- /dev/null +++ b/muse2/share/instruments/Korg-X5DR-PresetB.idf @@ -0,0 +1,368 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/muse2/share/instruments/Kurzweil-SP2X.idf b/muse2/share/instruments/Kurzweil-SP2X.idf new file mode 100644 index 00000000..fbf6dd47 --- /dev/null +++ b/muse2/share/instruments/Kurzweil-SP2X.idf @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/muse2/share/instruments/MC303.idf b/muse2/share/instruments/MC303.idf new file mode 100644 index 00000000..44cf51b3 --- /dev/null +++ b/muse2/share/instruments/MC303.idf @@ -0,0 +1,526 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/muse2/share/instruments/MC505.idf b/muse2/share/instruments/MC505.idf new file mode 100644 index 00000000..dc7e7460 --- /dev/null +++ b/muse2/share/instruments/MC505.idf @@ -0,0 +1,554 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/muse2/share/instruments/Makefile.am b/muse2/share/instruments/Makefile.am new file mode 100644 index 00000000..f7f82479 --- /dev/null +++ b/muse2/share/instruments/Makefile.am @@ -0,0 +1,5 @@ +EXTRA_DIST = $(wildcard *.idf) + +instrumentspkgdata_DATA = $(EXTRA_DIST) + +instrumentspkgdatadir = $(pkgdatadir)/instruments diff --git a/muse2/share/instruments/Makefile.in b/muse2/share/instruments/Makefile.in new file mode 100644 index 00000000..1e37754b --- /dev/null +++ b/muse2/share/instruments/Makefile.in @@ -0,0 +1,466 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = share/instruments +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal-include.m4 \ + $(top_srcdir)/m4/alsa.m4 $(top_srcdir)/m4/docbook.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(instrumentspkgdatadir)" +DATA = $(instrumentspkgdata_DATA) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DOCBOOKSTYLE = @DOCBOOKSTYLE@ +DOCBOOKTARGETS = @DOCBOOKTARGETS@ +DOT = @DOT@ +DOTPATH = @DOTPATH@ +DOXYGEN = @DOXYGEN@ +DOXYGEN_TREEVIEW = @DOXYGEN_TREEVIEW@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FLUIDSYNTHDIRS = @FLUIDSYNTHDIRS@ +FST_CFLAGS = @FST_CFLAGS@ +FST_LIBS = @FST_LIBS@ +Fluidsynth_CFLAGS = @Fluidsynth_CFLAGS@ +Fluidsynth_LIBS = @Fluidsynth_LIBS@ +GIVERTCAP = @GIVERTCAP@ +GREP = @GREP@ +HAVEDOT = @HAVEDOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_LIBS = @JACK_LIBS@ +JADE = @JADE@ +LASH_CFLAGS = @LASH_CFLAGS@ +LASH_LIBS = @LASH_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LO_CFLAGS = @LO_CFLAGS@ +LO_LIBS = @LO_LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MUSECXXFLAGS = @MUSECXXFLAGS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NSGMLS = @NSGMLS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PCH = @PCH@ +PERL = @PERL@ +PKG_CONFIG = @PKG_CONFIG@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIB = @PYTHON_LIB@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QTDIR_BIN = @QTDIR_BIN@ +QTDIR_INC = @QTDIR_INC@ +QT_LIBS = @QT_LIBS@ +RANLIB = @RANLIB@ +SAMPLERATE_CFLAGS = @SAMPLERATE_CFLAGS@ +SAMPLERATE_LIBS = @SAMPLERATE_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ +SNDFILE_LIBS = @SNDFILE_LIBS@ +STRIP = @STRIP@ +SUIDBUILD = @SUIDBUILD@ +SUIDINSTALL = @SUIDINSTALL@ +USE_SSE = @USE_SSE@ +UUID_CFLAGS = @UUID_CFLAGS@ +UUID_LIBS = @UUID_LIBS@ +VERSION = @VERSION@ +XMKMF = @XMKMF@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +have_docbook = @have_docbook@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +synth_fluid = @synth_fluid@ +synth_fluidsynth = @synth_fluidsynth@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +EXTRA_DIST = $(wildcard *.idf) +instrumentspkgdata_DATA = $(EXTRA_DIST) +instrumentspkgdatadir = $(pkgdatadir)/instruments +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu share/instruments/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu share/instruments/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-instrumentspkgdataDATA: $(instrumentspkgdata_DATA) + @$(NORMAL_INSTALL) + test -z "$(instrumentspkgdatadir)" || $(MKDIR_P) "$(DESTDIR)$(instrumentspkgdatadir)" + @list='$(instrumentspkgdata_DATA)'; test -n "$(instrumentspkgdatadir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(instrumentspkgdatadir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(instrumentspkgdatadir)" || exit $$?; \ + done + +uninstall-instrumentspkgdataDATA: + @$(NORMAL_UNINSTALL) + @list='$(instrumentspkgdata_DATA)'; test -n "$(instrumentspkgdatadir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(instrumentspkgdatadir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(instrumentspkgdatadir)" && rm -f $$files +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(DATA) +installdirs: + for dir in "$(DESTDIR)$(instrumentspkgdatadir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-instrumentspkgdataDATA + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-instrumentspkgdataDATA + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + distclean distclean-generic distclean-libtool distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-instrumentspkgdataDATA \ + install-man install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am uninstall uninstall-am \ + uninstall-instrumentspkgdataDATA + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/muse2/share/instruments/Roland-E28.idf b/muse2/share/instruments/Roland-E28.idf new file mode 100644 index 00000000..dd96fdd7 --- /dev/null +++ b/muse2/share/instruments/Roland-E28.idf @@ -0,0 +1,309 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/muse2/share/instruments/Roland-SCD70.idf b/muse2/share/instruments/Roland-SCD70.idf new file mode 100644 index 00000000..f85668fc --- /dev/null +++ b/muse2/share/instruments/Roland-SCD70.idf @@ -0,0 +1,1371 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/muse2/share/instruments/Roland-XP30.idf b/muse2/share/instruments/Roland-XP30.idf new file mode 100644 index 00000000..4b176a17 --- /dev/null +++ b/muse2/share/instruments/Roland-XP30.idf @@ -0,0 +1,1591 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/muse2/share/instruments/Roland_FantomXR.idf b/muse2/share/instruments/Roland_FantomXR.idf new file mode 100755 index 00000000..684e2cc0 --- /dev/null +++ b/muse2/share/instruments/Roland_FantomXR.idf @@ -0,0 +1,1387 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/muse2/share/instruments/Roland_SRX-02.idf b/muse2/share/instruments/Roland_SRX-02.idf new file mode 100755 index 00000000..bc700f1d --- /dev/null +++ b/muse2/share/instruments/Roland_SRX-02.idf @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/muse2/share/instruments/Roland_SRX-09.idf b/muse2/share/instruments/Roland_SRX-09.idf new file mode 100755 index 00000000..1099a01f --- /dev/null +++ b/muse2/share/instruments/Roland_SRX-09.idf @@ -0,0 +1,442 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/muse2/share/instruments/Waldorf-Q.idf b/muse2/share/instruments/Waldorf-Q.idf new file mode 100644 index 00000000..e43c0eab --- /dev/null +++ b/muse2/share/instruments/Waldorf-Q.idf @@ -0,0 +1,574 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/muse2/share/instruments/Waldorf-microQ-Factory2000.idf b/muse2/share/instruments/Waldorf-microQ-Factory2000.idf new file mode 100644 index 00000000..678854a8 --- /dev/null +++ b/muse2/share/instruments/Waldorf-microQ-Factory2000.idf @@ -0,0 +1,552 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/muse2/share/instruments/Waldorf-microQ-Factory2001.idf b/muse2/share/instruments/Waldorf-microQ-Factory2001.idf new file mode 100644 index 00000000..41469732 --- /dev/null +++ b/muse2/share/instruments/Waldorf-microQ-Factory2001.idf @@ -0,0 +1,552 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/muse2/share/instruments/Waldorf-microQ-Phoenix.idf b/muse2/share/instruments/Waldorf-microQ-Phoenix.idf new file mode 100644 index 00000000..2a0ef824 --- /dev/null +++ b/muse2/share/instruments/Waldorf-microQ-Phoenix.idf @@ -0,0 +1,552 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/muse2/share/instruments/Waldorf-microQ.idf b/muse2/share/instruments/Waldorf-microQ.idf new file mode 100644 index 00000000..7545857b --- /dev/null +++ b/muse2/share/instruments/Waldorf-microQ.idf @@ -0,0 +1,552 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/muse2/share/instruments/Waldorf_Microwave-I.idf b/muse2/share/instruments/Waldorf_Microwave-I.idf new file mode 100644 index 00000000..4b953fc2 --- /dev/null +++ b/muse2/share/instruments/Waldorf_Microwave-I.idf @@ -0,0 +1,142 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/muse2/share/instruments/Yamaha-01v.idf b/muse2/share/instruments/Yamaha-01v.idf new file mode 100644 index 00000000..06826594 --- /dev/null +++ b/muse2/share/instruments/Yamaha-01v.idf @@ -0,0 +1,219 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/muse2/share/instruments/Yamaha-Motif-Rack.idf b/muse2/share/instruments/Yamaha-Motif-Rack.idf new file mode 100644 index 00000000..956a8d92 --- /dev/null +++ b/muse2/share/instruments/Yamaha-Motif-Rack.idf @@ -0,0 +1,1135 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/muse2/share/instruments/Yamaha-Motif.idf b/muse2/share/instruments/Yamaha-Motif.idf new file mode 100644 index 00000000..e7acb5fc --- /dev/null +++ b/muse2/share/instruments/Yamaha-Motif.idf @@ -0,0 +1,744 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/muse2/share/instruments/Yamaha-P100.idf b/muse2/share/instruments/Yamaha-P100.idf new file mode 100644 index 00000000..7a583555 --- /dev/null +++ b/muse2/share/instruments/Yamaha-P100.idf @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/muse2/share/instruments/Yamaha-P50m.idf b/muse2/share/instruments/Yamaha-P50m.idf new file mode 100644 index 00000000..8ad932d5 --- /dev/null +++ b/muse2/share/instruments/Yamaha-P50m.idf @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/muse2/share/instruments/Yamaha-PSR275.idf b/muse2/share/instruments/Yamaha-PSR275.idf new file mode 100755 index 00000000..c448c3bf --- /dev/null +++ b/muse2/share/instruments/Yamaha-PSR275.idf @@ -0,0 +1,567 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/muse2/share/instruments/Yamaha-PSR530.idf b/muse2/share/instruments/Yamaha-PSR530.idf new file mode 100644 index 00000000..7637b5f2 --- /dev/null +++ b/muse2/share/instruments/Yamaha-PSR530.idf @@ -0,0 +1,757 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/muse2/share/instruments/Yamaha-S90.idf b/muse2/share/instruments/Yamaha-S90.idf new file mode 100644 index 00000000..dd0125a1 --- /dev/null +++ b/muse2/share/instruments/Yamaha-S90.idf @@ -0,0 +1,666 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/muse2/share/instruments/ZynAdd-1_4.idf b/muse2/share/instruments/ZynAdd-1_4.idf new file mode 100644 index 00000000..55b2d818 --- /dev/null +++ b/muse2/share/instruments/ZynAdd-1_4.idf @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/muse2/share/instruments/emuproteus2000.idf b/muse2/share/instruments/emuproteus2000.idf new file mode 100644 index 00000000..8a1fccaf --- /dev/null +++ b/muse2/share/instruments/emuproteus2000.idf @@ -0,0 +1,1081 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/muse2/share/instruments/gm.idf b/muse2/share/instruments/gm.idf new file mode 100644 index 00000000..04bf23ff --- /dev/null +++ b/muse2/share/instruments/gm.idf @@ -0,0 +1,193 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/muse2/share/instruments/gs.idf b/muse2/share/instruments/gs.idf new file mode 100644 index 00000000..3368b7c9 --- /dev/null +++ b/muse2/share/instruments/gs.idf @@ -0,0 +1,218 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/muse2/share/instruments/ns5r.idf b/muse2/share/instruments/ns5r.idf new file mode 100644 index 00000000..a7448372 --- /dev/null +++ b/muse2/share/instruments/ns5r.idf @@ -0,0 +1,565 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/muse2/share/instruments/xg.idf b/muse2/share/instruments/xg.idf new file mode 100644 index 00000000..4f5f586e --- /dev/null +++ b/muse2/share/instruments/xg.idf @@ -0,0 +1,606 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/muse2/share/locale/Makefile.am b/muse2/share/locale/Makefile.am new file mode 100644 index 00000000..976b8885 --- /dev/null +++ b/muse2/share/locale/Makefile.am @@ -0,0 +1,11 @@ +EXTRA_DIST = \ + muse_de.qm muse_de.ts \ + muse_fr.qm muse_fr.ts \ + muse_sv_SE.qm muse_sv_SE.ts \ + muse_es.qm muse_es.ts \ + muse_pl.qm muse_pl.ts \ + muse_ru.qm muse_ru.ts + +localepkgdata_DATA = $(EXTRA_DIST) + +localepkgdatadir = $(pkgdatadir)/locale diff --git a/muse2/share/locale/Makefile.in b/muse2/share/locale/Makefile.in new file mode 100644 index 00000000..5e60257c --- /dev/null +++ b/muse2/share/locale/Makefile.in @@ -0,0 +1,472 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = share/locale +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal-include.m4 \ + $(top_srcdir)/m4/alsa.m4 $(top_srcdir)/m4/docbook.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(localepkgdatadir)" +DATA = $(localepkgdata_DATA) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DOCBOOKSTYLE = @DOCBOOKSTYLE@ +DOCBOOKTARGETS = @DOCBOOKTARGETS@ +DOT = @DOT@ +DOTPATH = @DOTPATH@ +DOXYGEN = @DOXYGEN@ +DOXYGEN_TREEVIEW = @DOXYGEN_TREEVIEW@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FLUIDSYNTHDIRS = @FLUIDSYNTHDIRS@ +FST_CFLAGS = @FST_CFLAGS@ +FST_LIBS = @FST_LIBS@ +Fluidsynth_CFLAGS = @Fluidsynth_CFLAGS@ +Fluidsynth_LIBS = @Fluidsynth_LIBS@ +GIVERTCAP = @GIVERTCAP@ +GREP = @GREP@ +HAVEDOT = @HAVEDOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_LIBS = @JACK_LIBS@ +JADE = @JADE@ +LASH_CFLAGS = @LASH_CFLAGS@ +LASH_LIBS = @LASH_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LO_CFLAGS = @LO_CFLAGS@ +LO_LIBS = @LO_LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MUSECXXFLAGS = @MUSECXXFLAGS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NSGMLS = @NSGMLS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PCH = @PCH@ +PERL = @PERL@ +PKG_CONFIG = @PKG_CONFIG@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIB = @PYTHON_LIB@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QTDIR_BIN = @QTDIR_BIN@ +QTDIR_INC = @QTDIR_INC@ +QT_LIBS = @QT_LIBS@ +RANLIB = @RANLIB@ +SAMPLERATE_CFLAGS = @SAMPLERATE_CFLAGS@ +SAMPLERATE_LIBS = @SAMPLERATE_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ +SNDFILE_LIBS = @SNDFILE_LIBS@ +STRIP = @STRIP@ +SUIDBUILD = @SUIDBUILD@ +SUIDINSTALL = @SUIDINSTALL@ +USE_SSE = @USE_SSE@ +UUID_CFLAGS = @UUID_CFLAGS@ +UUID_LIBS = @UUID_LIBS@ +VERSION = @VERSION@ +XMKMF = @XMKMF@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +have_docbook = @have_docbook@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +synth_fluid = @synth_fluid@ +synth_fluidsynth = @synth_fluidsynth@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +EXTRA_DIST = \ + muse_de.qm muse_de.ts \ + muse_fr.qm muse_fr.ts \ + muse_sv_SE.qm muse_sv_SE.ts \ + muse_es.qm muse_es.ts \ + muse_pl.qm muse_pl.ts \ + muse_ru.qm muse_ru.ts + +localepkgdata_DATA = $(EXTRA_DIST) +localepkgdatadir = $(pkgdatadir)/locale +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu share/locale/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu share/locale/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-localepkgdataDATA: $(localepkgdata_DATA) + @$(NORMAL_INSTALL) + test -z "$(localepkgdatadir)" || $(MKDIR_P) "$(DESTDIR)$(localepkgdatadir)" + @list='$(localepkgdata_DATA)'; test -n "$(localepkgdatadir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(localepkgdatadir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(localepkgdatadir)" || exit $$?; \ + done + +uninstall-localepkgdataDATA: + @$(NORMAL_UNINSTALL) + @list='$(localepkgdata_DATA)'; test -n "$(localepkgdatadir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(localepkgdatadir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(localepkgdatadir)" && rm -f $$files +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(DATA) +installdirs: + for dir in "$(DESTDIR)$(localepkgdatadir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-localepkgdataDATA + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-localepkgdataDATA + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + distclean distclean-generic distclean-libtool distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-localepkgdataDATA \ + install-man install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am uninstall uninstall-am uninstall-localepkgdataDATA + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/muse2/share/locale/muse_de.qm b/muse2/share/locale/muse_de.qm new file mode 100644 index 00000000..55504f9e Binary files /dev/null and b/muse2/share/locale/muse_de.qm differ diff --git a/muse2/share/locale/muse_de.ts b/muse2/share/locale/muse_de.ts new file mode 100644 index 00000000..5124ad8b --- /dev/null +++ b/muse2/share/locale/muse_de.ts @@ -0,0 +1,5722 @@ + + + + + Click this button to enable recording + Auf diese Schaltfläche klicken um in den Modus "Aufnahme" zu gelangen + + + sets amount of quantization: +0 - no quantization +100 - full quantization + Quantisierungsstärke einstellen: +0 - keine Quantisierung +100 - volle Quantisierung + + + select Pointer Tool: +with the pointer tool you can: + select parts + move parts + copy parts + Werkzeug "Zeiger": +Dieses Werkzeug ermöglicht: + Parts auswählen + Parts verschieben + Parts kopieren + + + + @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. + Auf diese Schaltfläche klicken um ein <em>Neues Lied</em> zu öffnen.<br> Alternativ den Befehl <b>Neues Lied</b> des Menüs "Datei" auswählen. + + + 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. + Auf diese Schaltfläche klicken um das gerade bearbeitete Lied zu sichern mit der automatischen Aufforderung einen Dateinamen anzugeben. +Alternativ das Lied mit dem Befehl "Sichern" im Menü "Datei" sichern. + + + Create New Song + Neues Lied erzeugen + + + Click this button to stop playback + Klicke auf diese Schaltfläche um die Wiedergabe zu stoppen + + + Click this button to start playback + Klicke auf diese Schaltfläche um die Wiedergabe zu starten + + + Click this button to rewind to start position + Klicke auf diese Schaltfläche um zur Startposition zurückzukehren + + + Click this button to rewind + Klicke auf diese Schaltfläche um einen Taktschlag rückwärts zu springen + + + Click this button to forward current play position + Klicke auf diese Schaltfläche um einen Taktschlag vorwärts zu springen + + + don't quantize notes above this tick limit + Keine Note länger als die Taktschlagdauer quantisieren + + + quantize also note len as default + Auch die Notenlänge als Standard quantisieren + + + loop between left mark and right mark + Schleife zwischen linkem und rechtem Marker erzeugen + + + record starts at left mark + Aufnahme am linken Marker beginnen + + + record stops at right mark + Aufnahme am rechten Marker beenden + + + rewind to start position + Zur Startposition springen + + + rewind current position + Einen Taktschlag rückwärts + + + move current position + Einen Taktschlag vorwärts + + + stop sequencer + Wiedergabe beenden + + + start sequencer play + Wiedergabe beginnen + + + to record press record and then play + Zur Aufnahme erst die Schaltfläche "Aufnahme" und dann "Wiedergabe" klicken + + + send note off to all midi channels + Panik - "Note aus" Befehl an alle Midikanäle senden + + + select Pencil Tool: +with the pencil tool you can: + create new parts + modify length of parts + Werkzeug "Zeichenstift": +Dieses Werkzeug ermöglicht: + Neue Parts erzeugen + Die Länge einzelner Parts ändern + + + select Delete Tool: +with the delete tool you can delete parts + Werkzeug "Radierer": + mit diesem Werkzeug werden Parts gelöscht + + + select Cut Tool: +with the cut tool you can split a part + Werkzeug "Schnitt": + mit diesem Werkzeug werden Parts geteilt + + + select Glue Tool: +with the glue tool you can glue two parts + Werkzeug "Verbinder": + mit diesem Werkzeug werden zwei einzelne Parts zu einem verbunden + + + select Score Tool: + + Werkzeug "Notensatz": + + + select Quantize Tool: +insert display quantize event + Werkzeug "Quantisierung": + mit diesem Werkzeug werden quantisierte Ereignisse eingefügt + + + select Drawing Tool + Werkzeug "Zeichenstift" + + + select Muting Tool: +click on part to mute/unmute + Werkzeug "Stille": + Klicke auf einen Part um diesen still/laut zu schalten + + + pointer + Zeiger + + + pencil + Zeichenstift + + + cutter + Schnitt + + + score + Notensatz + + + glue + Verbinder + + + quantize + Quantisierung + + + draw + Zeichenstift + + + mute parts + Schalte Part still + + + Off + Aus + + + presets (*.pre *.pre.gz *.pre.bz2) + Vorlagen (*.pre *.pre.gz *.pre.bz2) + + + All Files (*) + Alle Dateien (*) + + + Add Midi Track + Midispur erzeugen + + + Add Drum Track + Schlagzeugspur erzeugen + + + Add Wave Track + Wavespur erzeugen + + + Add Audio Output + Audioausgang erzeugen + + + Add Audio Group + Audiogruppe erzeugen + + + Add Audio Input + Audioeingang erzeugen + + + Add Aux Send + Aux Send erzeugen + + + eraser + Radierer + + + + AboutBox + + AboutBox + Projektinformation + + + Keep On Rocking! + Zurück zu MusE! + + + 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 + + + + + Appearance + + MusE: load image + MusE: Bild laden + + + + AppearanceDialogBase + + MusE: Appearance settings + MusE: Erscheinungsbild einstellen + + + Apply + Anwenden + + + Ok + Bestätigen + + + Cancel + Abbrechen + + + Arranger + Arrangierer + + + Parts + Parts + + + show names + Namen anzeigen + + + show events + Ereignisse anzeigen + + + show Cakewalk Style + Cakewalk Stil + + + Events + Ereignisse + + + note on + Note An + + + poly pressure + Poly Tastendruck + + + controller + Kontroller + + + aftertouch + Aftertouch + + + pitch bend + Pitch bend + + + program change + Programmwechsel + + + special + Spezial + + + Background picture + Hintergrundbild + + + bg + bg + + + select... + auswählen ... + + + show snap grid + Magnetisches Gitter anzeigen + + + Colors + Farben + + + Items + Items + + + Style/Fonts + Stil und Schriftart + + + QT Theme + Qt Thema + + + Windows + Fenster + + + MusE + MusE + + + Metal + Metall + + + Norwegian Wood + Norwegisches Holz + + + Platinum + Platinum + + + CDE + CDE + + + Motif + Motif + + + Motif Plus + Motif Plus + + + Fonts + Schriftarten + + + Family + Familie + + + Size + Größe + + + Font 1 + Schriftart 1 + + + Font 2 + Schriftart 2 + + + Font 3 + Schriftart 3 + + + Font 0 + Schriftart 0 + + + Bold + Fett + + + Italic + Kursiv + + + ... + ... + + + Font 4 + Schriftart 4 + + + Font 5 + Schriftart 5 + + + Palette + Palette + + + add to palette + Zur Palette hinzufügen + + + B + B + + + S + S + + + H + H + + + V + V + + + G + G + + + R + R + + + + Arranger + + Cursor + Position + + + Snap + Magnet + + + Len + Länge + + + NO + Kein + + + TrackInfo + Spurinfo + + + Track + Spur + + + Type + Typ + + + midi song type + Midi Lied Typ + + + Pitch + Tonhöhenänderung + + + midi pitch + Midi Tonhöhenänderung + + + global midi pitch shift + Globale Midi Tonhöhenänderung + + + Tempo + Tempo + + + midi tempo + Midi Tempo + + + O-Port + Ausgangsanschluss + + + Arranger + Arrangierer + + + Off + Aus + + + Bar + Takt + + + GM + GM + + + GS + GS + + + XG + XG + + + N + N + + + R + R + + + M + M + + + S + S + + + C + C + + + Ch + K + + + T + T + + + + AudioMixerApp + + MusE: Mixer + MusE: Mischpult + + + &Create + &Erzeugen + + + &View + &Zeigen + + + Routing + Signalfluss + + + + AudioStrip + + panorama + Panorama + + + aux send level + Aux Send Pegel + + + off + Aus + + + Pan + Balance + + + 1/2 channel + 1/2 Kanal + + + Pre + Pre + + + pre fader - post fader + Vor Regler - nach Regler + + + dB + dB + + + record + Aufnahme + + + mute + still + + + record downmix + Aufnahme Abmischung + + + solo mode (monitor) + Solo Modus (Monitor) + + + pre fader listening + Abhöre vor Regler + + + iR + iR + + + intput routing + Eingangs-Signalfluss + + + oR + oR + + + output routing + Ausgangs-Signalfluss + + + Off + Aus + + + Read + Lesen + + + Touch + Antasten + + + Write + Schreiben + + + automation type + Automationstyp + + + Channel + Kanal + + + + BigTime + + MusE: Bigtime + MusE: Zeitanzeige groß + + + + ClipListEditorBase + + MusE: ClipList + MusE: Klipp Liste + + + Name + Name + + + Refs + Refs + + + Start + Start + + + Len + Länge + + + Data + Daten + + + Clip Properties + Klippeigenschaften + + + Pos: + Pos: + + + Len: + Länge: + + + + CommentBase + + Form1 + Form1 + + + Track Comment + Spur Kommentar + + + Track 1 + Spur 1 + + + + ConfigMidiFileBase + + MusE: Config Midi File Export + MusE: Konfiguration Midi Datei exportieren + + + &OK + &Bestätigen + + + &Cancel + &Abbrechen + + + 0 (single track) + 0 (einzelne Spur) + + + 1 (multiple tracks) + 1 (mehrere Spuren) + + + Format: + Format: + + + 96 + 96 + + + 192 + 192 + + + 384 + 384 + + + Division: + Unterteilung: + + + Copyright: + Copyright: + + + Enable extended smf format + Aktiviere erweitertes SMF Format + + + + CtrlPanel + + select controller + Kontroller wählen + + + remove panel + Kontrolleransicht schließen + + + Sel + Wählen + + + x + Schließen + + + Velocity + Velocity + + + add new ... + Neuen Kontroller hinzufügen ... + + + + DrumEdit + + Load Map + Schlagzeugbelegung laden + + + Save Map + Schlagzeugbelegung Sichern + + + &Edit + &Bearbeiten + + + Cut + Ausschneiden + + + Copy + Kopieren + + + Paste + Einfügen + + + Delete Events + Events entfernen + + + Select All + Alles auswählen + + + Select None + Auswahl aufheben + + + Invert + Auswahl umkehren + + + Inside Loop + Innerhalb Schleife + + + Outside Loop + Ausserhalb Schleife + + + &Select + &Auswählen + + + Step Record + Aufnahme taktschlagweise + + + Midi Input + Midi Eingang + + + Add Controller View + Kontrolleransicht hinzufügen + + + M + M + + + Sound + Klang + + + QNT + QNT + + + E-Note + E-Note + + + Len + Länge + + + A-Note + A-Note + + + Ch + K + + + Port + Port + + + LV1 + LV1 + + + LV2 + LV2 + + + LV3 + LV3 + + + LV4 + LV4 + + + &File + &Datei + + + Load Drummap + Schlagzeugbelegung laden + + + Store Drummap + Schlagzeugbelegung sichern + + + ctrl + steuern + + + drummaps + Schlagzeugbelegungen + + + Muse: Load Drum Map + MusE: Schlagzeugbelegung laden + + + MusE: Store Drum Map + MusE: Schlagzeugbelegung speichern + + + Set fixed length + Länge festlegen + + + &Functions + &Funktionen + + + Modify Velocity + Velocity ändern + + + + EditCAfterDialog + + Time Position + Position + + + Pressure + Anschlagsdruck + + + MusE: Enter Channel Aftertouch + MusE: Kanal Aftertouch festlegen + + + + EditCtrl7DialogBase + + MusE: Enter Controller + MusE: Kontroller eingeben + + + Controller: + Kontroller: + + + Time Position: + Position: + + + Value: + Wert: + + + controller value + Kontroller Wert + + + OK + Bestätigen + + + Cancel + Abbrechen + + + + EditCtrlBase + + MusE: Edit Controller Event + MusE: Kontroller Ereignis bearbeiten + + + Time Position + Position + + + Available Controller: + Verfügbare Kontroller: + + + Create New Controller + Neuen Kontroller erstellen + + + textLabel3 + Beschriftung3 + + + Value + Wert + + + Controller + Kontroller + + + H-Bank + H-Bank + + + L-Bank + L-Bank + + + Program + Programm + + + off + aus + + + pushButton4 + Schaltfläche4 + + + &OK + &Bestätigen + + + &Cancel + &Abbrechen + + + + EditEventDialog + + Ok + Bestätigen + + + Cancel + Abbrechen + + + + EditInstrumentBase + + MusE: Instrument Editor + MusE: Instrumenten Editor + + + Patches + Patches + + + Patch Name: + Patch Name: + + + High Bank: + High Bank: + + + Low Bank: + Low Bank: + + + Program: + Programm: + + + d.c. + dont care + d.c. + + + d.c. + d.c. + + + Patch/Group + Patch/Gruppe + + + &Delete + &Löschen + + + Alt+D + Alt+D + + + &New Patch + &Neuer Patch + + + Alt+N + Alt+N + + + New Group + Neue Gruppe + + + Drum + Schlagzeug + + + GM + GM + + + GS + GS + + + XG + XG + + + Controller + Kontroller + + + Predefined Controller: + Vordefinierte Kontroller: + + + This is a list of commonly used midi controllers. +Note that in MusE pitch and program changes are +handled like normal controllers. + Dies ist eine Liste häufig verwendeter Midi Kontroller. +MusE behandelt allerdings Kontroller wie "pitch" und "program changes" wie normale Kontroller. + + + Properties + Eigenschaften + + + Name + Name + + + Type + Typ + + + Control7 + Kontroller7 + + + Control14 + Kontroller14 + + + RPN + RPN + + + NRPN + NRPN + + + Pitch + Tonhöhe + + + Program + Programm + + + H-Ctrl + H-Ctrl + + + Midi Controller Number High Byte + Midi Kontrollernummer High Byte + + + L-Ctrl + L-Ctrl + + + Midi Controller Number Low Byte + Midi Kontrollernummer Low Byte + + + Range + Bereich + + + Min + Min + + + Max + Max + + + Default + Standard + + + Name + Name + + + Type + Typ + + + Min Val + Min Wert + + + Max Val + Max Wert + + + list of defined controllers + Liste von definierten Kontrollern + + + This is the MusE list of defined controllers. + Dies ist die MusE Liste von definierten Kontrollern. + + + SysEx + SysEx + + + Initialization + Initialisierung + + + Panic + Panik + + + Hex Entry: + Hex Eintrag: + + + &File + &Datei + + + Tools + Werkzeuge + + + New + Neu + + + &New + &Neu + + + Ctrl+N + Ctrl+N + + + Open + Öffnen + + + &Open... + &Öffnen ... + + + Ctrl+O + Ctrl+O + + + Save + Sichern + + + &Save + &Sichern + + + Ctrl+S + Ctrl+S + + + Save As + Sichern Unter + + + Save &As... + Sichern &Unter... + + + Exit + Beenden + + + E&xit + &Beenden + + + + EditMetaDialog + + Time Position + Position + + + Meta Type + Meta Typ + + + Enter Hex + Hex Eingabe + + + MusE: Enter Meta Event + MusE: Eingabe von Metaereignissen + + + + EditMetaDialogBase + + MusE: Enter Meta Event + MusE: Meta Ereignis eingeben + + + OK + Bestätigen + + + Cancel + Abbrechen + + + TextLabel1 + Beschriftung1 + + + Time Position: + Position: + + + Meta Type: + Meta Typ: + + + Enter Hex + Hex eingeben + + + + EditNoteDialogBase + + MusE: Enter Note + MusE: Note eingeben + + + OK + Bestätigen + + + Cancel + Abbrechen + + + Length: + Länge: + + + Time Position: + Position: + + + Pitch: + Tonhöhe: + + + Velocity On: + Velocity An: + + + Velocity Off: + Velocity Aus: + + + + EditPAfterDialog + + Time Position + Position + + + Pitch + Tonhöhe + + + Pressure + Anschlagsdruck + + + MusE: Enter Poly Aftertouch + MusE: Poly Aftertouch eingeben + + + + EditSysexDialogBase + + MusE: Enter SysEx + MusE: SysEx eingeben + + + TimePosition: + Position: + + + Comment: + Kommentar: + + + OK + Bestätigen + + + Cancel + Abbrechen + + + + EditToolBar + + Edit Tools + Werkzeuge bearbeiten + + + + EffectRack + + effect rack + Effekteinschub + + + move up + Nach oben bewegen + + + move down + Nach unten bewegen + + + remove + entfernen + + + bypass + umleiten + + + show gui + GUI anzeigen + + + new + neu + + + change + ändern + + + + FileDialogButtons + + Form1 + Form1 + + + Global + Global + + + User + Benutzer + + + Project + Projekt + + + Load: + Laden: + + + Songdata + +Cofiguration + Lieddaten + +Konfiguration + + + only +Songdata + Nur Lieddaten + + + + FontSel + + Size: + Größe: + + + + GateTimeBase + + MusE: Modify Gate Time + MusE: Gate Zeit ändern + + + Range + Bereich + + + All Events + Alle Ereignisse + + + Selected Events + Ausgewählte Ereignisse + + + Looped Events + Ereignisse innerhalb Schleife + + + Selected & Looped + Ausgewählt & innerhalb der Schleife + + + Values + Werte + + + Rate: + Rate: + + + Offset: + Zeitversatz: + + + % + % + + + OK + Bestätigen + + + Cancel + Abbrechen + + + + GlobalSettingsDialogBase + + MusE: Global Settings + MusE: Globale Einstellungen + + + Audio + Audio + + + Mixer + Mischpult + + + dB + dB + + + min. Meter Value + min. Pegelreglerwerte + + + min.Slider Val + min. Schiebereglerwerte + + + Midi + Midi + + + Ticks + Ticks + + + 1024 + 1024 + + + 2048 + 2048 + + + 4096 + 4096 + + + 8172 + 8172 + + + Displayed Resolution +(Ticks/Quarternote) + Angezeigte Auflösung +(Ticks/Viertelnote) + + + 48 + 48 + + + 96 + 96 + + + 192 + 192 + + + 384 + 384 + + + 768 + 768 + + + 1536 + 1536 + + + 3072 + 3072 + + + 6144 + 61144 + + + 12288 + 12288 + + + RTC Resolution +(Ticks/Sec) + RTC (RealTimeClock) Auflösung +(Ticks/Sekunde) + + + GUI + GUI + + + /sec + /sek + + + GUI Refresh Rate + GUI Aktualisierungsrate + + + &Apply + &Anwenden + + + &Ok + &Bestätigen + + + &Cancel + Abb&rechen + + + Help Browser: + Hilfe Browser: + + + Application + Anwendung + + + Start Muse + MusE starten + + + start with last song + Mit letztem Lied starten + + + start with song + Mit bestimmtem Lied starten + + + start song: + Startlied: + + + Views + Ansichten + + + y-pos + y-pos + + + show + zeigen + + + x-pos + x-pos + + + height + Höhe + + + width + Breite + + + Big Time + Zeitanzeige groß + + + Arranger + Arrangierer + + + Transport + Transport + + + Cur + Jetzt + + + set current values + Jetzige Werte übernehmen + + + start with template: default.med + Mit Lied: default.med starten + + + show splash screen + Begrüßungsbild anzeigen + + + + LMaster + + new tempo + Neues Tempo + + + new signature + Neues Taktmaß + + + Meter + Taktposition + + + Time + Zeitposition + + + Type + Typ + + + Value + Wert + + + MusE: Mastertrack + MusE: Masterspur + + + Tempo + Tempo + + + Timesig + Taktmaß + + + + ListEdit + + &Edit + B&earbeiten + + + Cut + Ausschneiden + + + Copy + Kopieren + + + Paste + Einfügen + + + List Tools + Werkzeuge "Liste" + + + Insert Tools + Werkzeuge "Einfügen" + + + Delete Events + Ereignisse löschen + + + Insert Note + Note einfügen + + + insert Note + Note einfügen + + + Insert SysEx + SysEx einfügen + + + insert SysEx + SysEx einfügen + + + Insert Ctrl + Ctrl einfügen + + + insert Ctrl + ctrl einfügen + + + Insert Meta + Meta einfügen + + + insert Meta + Meta einfügen + + + Insert Channel Aftertouch + Channel Aftertouch einfügen + + + insert Channel Aftertouch + Channel Aftertouch einfügen + + + Insert Key Aftertouch + Key Aftertouch einfügen + + + insert Poly Aftertouch + Poly Aftertouch einfügen + + + Tick + Tick + + + Bar + Takt + + + Typ + Typ + + + Ch + K + + + Val A + Wert A + + + Val B + Wert B + + + Val C + Wert C + + + Len + Länge + + + Comment + Kommentar + + + + MITTransposeBase + + MusE: Midi Input Plugin: Transpose + MusE: Midi Eingang PlugIn: Transponieren + + + On + An + + + TriggerKey + Auslösertaste + + + Transpose: + Transponieren: + + + +0 + +0 + + + + MPConfig + + none + kein + + + Port + Anschluss + + + GUI + GUI + + + Instrument + Instrument + + + Device Name + Gerätename + + + State + Status + + + unknown + unbekannt + + + I + E + + + O + A + + + + MRConfigBase + + MusE: Midi Input Plugin: Remote Control + MusE: Midi Eingang PlugIn: Fernbedienung + + + Activate + Einschalten + + + On + An + + + Actions + Funktionen + + + Stop + Stopp + + + Record + Aufnahme + + + Goto Left Mark + Zum linken Marker bewegen + + + Play + Wiedergabe + + + + MTScale + + bar scale + Taktposition + + + + MarkerView + + Bar:Beat:Tick + Takt:Schlag:Tick + + + Hr:Mn:Sc:Fr:Sf + Std:Min:Sek:R:SR + + + Lock + Sperre + + + Text + Text + + + Marker Properties + Marker Eigenschaften + + + MusE: Marker + MusE: Marker + + + add marker + Marker hinzufügen + + + Add Marker + Marker hinzufügen + + + delete marker + Marker löschen + + + Delete Marker + Marker löschen + + + &File + &Datei + + + &Edit + &Bearbeiten + + + + MasterEdit + + Cursor + Positionsmarker + + + Snap + Magnet + + + time at cursor position + Zeit an aktuellem Positionsmarker + + + tempo at cursor position + Tempo an aktuellem Positionsmarker + + + CurPos + AktPos + + + tempo at current position + Tempo an aktuellem Positionsmarker + + + time signature at current position + Taktmaß an aktuellem Positionsmarker + + + MusE: Mastertrack + MusE: Masterspur + + + edit tools + Werkzeuge "Bearbeitung" + + + EnableMaster + Master aktivieren + + + Info + Info + + + Off + Aus + + + + Enable + Einschalten + + + Enable usage of master track + Verwendung der Masterspur einschalten + + + + MetronomeConfigBase + + MusE: Metronome Config + MusE: Metronom Konfiguration + + + Metronome + Metronom + + + Audio Beep + Interner PC Lautsprecher + + + MIDI Click + MIDI Klick + + + Midi Channel + Midi Kanal + + + Measure Note + Midi Note Taktbeginn + + + Measure Velocity + Midi Note Taktschlag + + + Beat Velocity + Taktbeginn Anschlagstärke + + + Beat Note + Taktschlag Anschlagstärke + + + Midi Port + Midi Anschluss + + + Precount + Einzählen + + + enable + einschalten + + + Bars + Takte + + + From Mastertrack + Von der Masterspur + + + / + / + + + Signature + Taktmaß + + + Prerecord + Aufnahme ab Einzählen + + + Preroll + Vorlauf + + + &Apply + &Anwenden + + + &OK + &Bestätigen + + + &Cancel + Abb&rechen + + + + MidiController + + Velocity + Velocity + + + + MidiControllerEditDialogBase + + Type + Typ + + + Properties + Eigenschaften + + + Type + Typ + + + &New + Neu + + + &Delete + &Löschen + + + &OK + &Bestätigen + + + &Cancel + Abb&rechen + + + MusE: Define Midi Controller + MusE: Midi Kontroller definieren + + + &Add + &Hinzufügen + + + Alt+A + Alt+A + + + create new entry + Neuen Eintrag erzeugen + + + pressing the New button you create a new entry +in the MusE list of defined controllers + Durch Klicken der Schaltfläche "Neu" einen neuen Eintrag erzeugen +in der MusE Liste "Definierte Kontroller" + + + delete selected entry + Ausgewählten Eintrag löschen + + + Predefined Controller: + Vordefinierte Kontroller: + + + Name + Name + + + H-Ctrl + H-Ctrl + + + L-Ctrl + L-Ctrl + + + Min Val + Min Wert + + + Max Val + Max Wert + + + list of defined controllers + Liste definierter Kontroller + + + This is the MusE list of defined controllers. + Dies ist die MusE Liste definierter Kontroller. + + + Managed Controller for Port + Verwendeter Kontroller für Anschluss + + + Channel + Kanal + + + This is a list of commonly used midi controllers. +Note that in MusE pitch and program changes are +handled like normal controllers. + Dies ist eine Liste oft standardisierter Midi Kontroller. +Beachte dass in MusE Tonhöhen- und Programmwechselbefehle wie Midikontroller behandelt werden. + + + Name + Name + + + Min Value + Min Wert + + + Max Value + Max Wert + + + Control7 + Kontroller7 + + + Control14 + Kontroller14 + + + RPN + RPN + + + NRPN + NRPN + + + Pitch + Tonhöhe + + + Program + Programm + + + Midi Controller Number High Byte + Midi Kontrollernummer höchstwertiges Byte + + + Midi Controller Number Low Byte + Midi Kontrollernummer niederwertigstes Byte + + + Range + Bereich + + + + MidiFilterConfigBase + + MusE: Midi Input Filter + MusE: Midi Eingangsfilter + + + Record Filter + Aufnahme Filter + + + Note On + Note an + + + Poly Pressure + Poly Anschlagsdruck + + + Controller + Kontroller + + + Program Change + Programmwechsel + + + After Touch + Aftertouch + + + Pitch Bend + Pitch bend + + + Sysex + Sysex + + + Thru Filter + Thru Filter + + + Controller Filter + Kontroller Filter + + + Channel Filter + Kanal 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 + + + + MidiInputTransformDialog + + New + Neu + + + + MidiInputTransformDialogBase + + MusE: Midi Input Transformator + MusE: Midi Eingang Transformator + + + Filter + Filter + + + All + alle + + + Equal + gleich + + + Unequal + ungleich + + + Note + Note + + + Poly Pressure + Poly Anschlagsdruck + + + Control Change + Kontrollerwechsel + + + Aftertouch + Aftertouch + + + Pitch Bend + Pitch bend + + + NRPN + NRPN + + + RPN + RPN + + + Value 2 + Wert 2 + + + Value 1 + Wert 1 + + + Event Type + Ereignistyp + + + Ignore + ignorieren + + + Higher + größer + + + Lower + kleiner + + + Inside + innerhalb + + + Outside + außerhalb + + + Channel + Kanal + + + Port + Anschluss + + + Processing + Bearbeitung + + + Keep + behalten + + + Fix + fest + + + Plus + plus + + + Minus + minus + + + Multiply + multiplizieren + + + Divide + dividieren + + + Invert + invertieren + + + ScaleMap + Notenbelegung + + + Flip + umdrehen + + + Dyn + Dyn + + + Random + zufällig + + + Modules + Module + + + 1 + 1 + + + 2 + 2 + + + 3 + 3 + + + 4 + 4 + + + enable modul 1 + Modul 1 einschalten + + + enable modul 2 + Modul 2 einschalten + + + enable modul 3 + Modul 3 einschalten + + + enable modul 4 + Modul 4 einschalten + + + Preset + Vorlage + + + Name: + Name: + + + Comment: + Kommentar: + + + Function + Funktion + + + &New + &Neu + + + create new preset + Neue Vorlage erzeugen + + + &Delete + &Löschen + + + delete preset + Vorlage löschen + + + &Dismiss + &Verwerfen + + + PresetList + Liste Vorlagen + + + + MidiPortRouteBase + + MusE: Midi Port Routing + MusE: Midi Anschluss Signalfluss + + + Port 2 + Anschluss 2 + + + Output + Ausgang + + + Input + Eingang + + + + MidiStrip + + VariationSend + VariationSend + + + Var + Var + + + ReverbSend + ReverbSend + + + Rev + Rev + + + ChorusSend + ChorusSend + + + Cho + Cho + + + off + aus + + + dB + dB + + + Pan/Balance + Pan/Balance + + + Pan + Pan + + + record + Aufnahme + + + mute + still + + + pre fader listening + Vor Regler abhören + + + Route + Signalfluss + + + set routing + Signalfluss einstellen + + + Off + aus + + + Read + lesen + + + Touch + berühren + + + Write + schreiben + + + automation type + Automatisationstyp + + + + MidiSyncConfigBase + + MusE: Midi Sync + MusE: Midi Sync + + + Apply + Anwenden + + + Ok + Bestätigen + + + Cancel + Abbrechen + + + hour + Stunde + + + h + Std + + + minute + Minute + + + m + min + + + second + Sekunde + + + s + Sek + + + frame + Rahmen + + + f + R + + + subframe + Subrahmen + + + 24 + 24 + + + 25 + 25 + + + 30D + 30D + + + 30N + 30N + + + Id: + Id: + + + device id + Geräte id + + + Port: + Anschluss: + + + midi port + Midi Anschluss + + + Sync Source + Sync Quelle + + + accept MTC + MTC erlauben + + + accept Midi Clock + Midi Clock erlauben + + + accept MMC + MMC erlauben + + + Sync Gen + Sync Gen + + + Midi Time Code (MTC) + Midi Time Code (MTC) + + + Midi Clock + Midi Clock + + + Midi Machine Control (MMC) + Midi Machine Control (MMC) + + + Sync Mode + Sync Modus + + + Master + Master + + + Slave + Sklave + + + all + alle + + + MTC + MTC + + + Type: + Typ: + + + Offset: + Zeitversatz: + + + + MidiTrackInfoBase + + MusE: TrackInfo + MusE: Spurinfo + + + output channel + Ausgangskanal + + + all midi events are send to this output channel + Alle Midi Ereignisse werden an diesen Ausgangskanal gesandt + + + Track Info + Spurinfo + + + % + % + + + Track Name + Spur Name + + + output port + Ausgangsanschluss + + + off + aus + + + change stereo position + Stereoposition tauschen + + + OCh. + AusgKan. + + + ??? + ??? + + + select instrument patch + Instrumentenpatch auswählen + + + Transp. + Transp. + + + Volume + Volume + + + Channel Info + Kanalinfo + + + Pan + Pan + + + Delay + Delay + + + H-Bank + H-Bank + + + Compr. + Kompr. + + + L-Bank + L-Bank + + + Progr. + Progr. + + + Velocity + Velocity + + + Length + Länge + + + input ports + Eingangsanschlüsse + + + IChan. + EingKan. + + + input channels + Eingangsknäle + + + 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 + Ereignisse von allen gewählten Kanälen +werden auf dieser Spur aufgenommen. +Zur Aufnahme können mehrere Kanäle gewählt werden: +1 2 3Aufnahme von den Kanälen 1 2 und 3 +1-3Aufnahme von den Kanälen 1 2 und 3 +1-3 5Aufnahme von den Kanälen 1 2 3 und 5 + + + + record: + aufnehmen: + + + Rec + Aufnahme + + + add settings to song + Einstellungen zum Lied hinzufügen + + + Bank Select LSB + Bank Wahl LSB + + + Bank Select MSB + Bank Wahl MSB + + + + MidiTransformDialogBase + + MusE: Midi Transformator + MusE: Midi Transformator + + + &New + &Neu + + + &Delete + &Löschen + + + &Apply + &Anwenden + + + &OK + &Bestätigen + + + &Cancel + Abb&rechen + + + PresetList + Vorlagenliste + + + Processing + Bearbeitung + + + Event Type + Ereignistyp + + + Keep + behalten + + + Fix + fest + + + Note + Note + + + Poly Pressure + Poly Andruckstärke + + + Control Change + Kontrollerwechsel + + + Aftertouch + Aftertouch + + + Pitch Bend + Pitch bend + + + NRPN + NRPN + + + RPN + RPN + + + Plus + plus + + + Minus + minus + + + Multiply + multiplizieren + + + Divide + dividieren + + + Value 2 + Wert 2 + + + Invert + umkehren + + + ScaleMap + Notenbelegung + + + Flip + umdrehen + + + Dyn + Dyn + + + Random + zufällig + + + Value 1 + Wert 1 + + + Length + Länge + + + Position + Zeitposition + + + Filter + Filter + + + All + alle + + + Equal + gleich + + + Unequal + ungleich + + + Ignore + ignorieren + + + Higher + größer + + + Lower + kleiner + + + Inside + innerhalb + + + Outside + außerhalb + + + Bar Range + Taktbereich + + + Preset + Vorlage + + + Name: + Name: + + + Comment: + Kommentar: + + + Range + Bereich + + + process all events + Alle Ereignisse verarbeiten + + + selected tracks + Ausgewählte Spuren + + + inside loop + Innerhalb der Schleife + + + Function + Funktion + + + Select + Auswählen + + + Quantize + Quantisieren + + + Delete + Löschen + + + Transform + Transformieren + + + Insert + Einfügen + + + Copy + Kopieren + + + Extract + Entnehmen + + + Quantize Value + Wert quantisieren + + + + MidiTransformerDialog + + New + Neu + + + + MixdownFileDialog + + Wave Files (*.wav);;All Files (*) + Wave Dateien (*.wav);;Alle Dateien (*) + + + + MixdownFileDialogBase + + MusE: Set Mixdown Wavefile + MusE: Wave Datei Abmischung einstellen + + + &OK + &Bestätigen + + + &Cancel + Abb&rechen + + + File Path + Dateipfad + + + Channel + Kanal + + + Stereo + Stereo + + + Mono + Mono + + + 5.1 + 5.1 + + + wav,16 Bit + wav, 16 Bit + + + wav, 24 Bit + wav, 24 Bit + + + wav, 32 Bit (float) + wav, 32 Bit (float) + + + Format + Format + + + + Mixer + + Port + Port + + + + MusE + + &File + Lied&datei + + + Open &Recent + &Letztes Lied öffnen + + + Save &As + Lied &sichern als + + + Config &Printer + Druckerkonfiguration + + + Import Midifile + Mididatei importieren + + + Export Midifile + Mididatei exportieren + + + Import Wave File + Wavedatei importieren + + + &Quit + &Beenden + + + &Edit + B&earbeiten + + + C&ut + &Ausschneiden + + + &Copy + &Kopieren + + + &Paste + Ei&nfügen + + + Delete Track + Spur löschen + + + Add Track + Spur hinzufügen + + + Select &All + Alles a&uswählen + + + &Deselect All + Alles ab&wählen + + + Invert &Selection + Auswa&hl umkehren + + + &Inside Loop + Bereich &innerhalb der Schleife + + + &Outside Loop + Bereich außerhalb der Schlei&fe + + + All &Parts on Track + Alle &Parts der Spur + + + Select + Auswählen + + + Drums + Schlagzeug Editor + + + List + Listen Editor + + + Graphic + Graphischer Editor + + + Mastertrack + Masterspur + + + Midi &Transform + Midi &transformieren + + + Modify Gate Time + Gate Zeit ändern + + + Modify Velocity + Velocity ändern + + + Crescendo + Crescendo + + + Transpose + Transponieren + + + Thin Out + Daten ausdünnen + + + Erase Event + Ereignis löschen + + + Note Shift + Notenhöhe ändern + + + Move Clock + + + + Copy Measure + Takt kopieren + + + Erase Measure + Takt löschen + + + Delete Measure + Takt entfernen + + + Create Measure + Takt erzeugen + + + Mix Track + Spur mischen + + + Midi + Midi + + + &Structure + &Struktur + + + Global Cut + Globaler Schnitt + + + Global Insert + Globales Einfügen + + + Global Split + Globales Aufteilen + + + Copy Range + Bereich kopieren + + + Cut Events + Ereignisse ausschneiden + + + Transport Panel + Transportkonsole + + + Bigtime window + Zeitanzeige groß + + + dont follow Song + Fenster folgt nicht dem Lied + + + follow page + Fenster folgt dem Lied seitenweise + + + follow continuous + Fenster folgt dem Lied ständig + + + Global Settings + Globale Einstellungen + + + follow song + Folge dem Lied + + + Metronome + Metronom + + + Midi Sync + Midi Sync + + + Appearance settings + Erscheinungsbild einstellen + + + Midi Input Transform + Midi Eingang transformieren + + + Midi Input Filter + Midi Eingangsfilter + + + Midi Remote Control + Midi Fernbedienung + + + Random Rhythm Generator + Zufälliger Rhythmusgenerator + + + &Midi + &Midi + + + Mixer + Mischpult + + + Input Plugins + Eingangs-PlugIns + + + Reset Instr. + Rücksetzen Instr. + + + Init Instr. + Initialisieren Instr. + + + local off + Lokal off + + + &Audio + &Audio + + + Bounce to Track + Auf Spur abmischen + + + Bounce to File + In Datei abmischen + + + &Help + &Hilfe + + + Browser + Browser + + + About&Qt + Ãœber &Qt + + + MusE: load project + Muse: Projekt laden + + + The current Project contains unsaved data +Save Current Project? + Das aktuelle Projekt enthält ungesicherte Daten +Aktuelles Projekt sichern? + + + &Save + Lied &sichern + + + &Nosave + Lied &nicht Sichern + + + &Abort + &Abbrechen + + + MusE: Save As + MusE: Lied sichern als + + + Nothing to edit + Es gibt Nichts zu editieren + + + The current Project contains unsaved data +Load overwrites current Project: +Save Current Project? + Das aktuelle Projekt enthält ungesicherte Daten +Neues Lied laden überschreibt das aktuelle Projekt: +Aktuelles Projekt sichern? + + + &Overwrite + &Ãœberschreiben + + + no help found at: + Hilfe wurde nicht gefunden: + + + MusE: Open Help + MusE: Hilfe öffnen + + + UndoRedo + Zurück Wiederholen + + + undo + Rücksetzen + + + Und&o + &Rücksetzen + + + redo + Wiederholen + + + Re&do + &Wiederholen + + + undo last change to song + Letzte Änderung am Lied rücksetzen + + + redo last undo + Letztes Rücksetzen wiederholen + + + Transport + Transport + + + loop + Schleife erzeugen + + + Loop + Schleife + + + punchin + Aufnahme am linken Marker beginnen + + + Punchin + Aufnahme am linken Marker beginnen + + + punchout + Aufnahme am rechten Marker beenden + + + Punchout + Aufnahme am rechten Marker beenden + + + start + Start + + + Start + Start + + + rewind + Einen Taktschlag rückwärts + + + Rewind + Einen Taktschlag rückwärts + + + forward + Einen Taktschlag vorwärts + + + Forward + Einen Taktschlag vorwärts + + + stop + Stopp + + + Stop + Stopp + + + play + Wiedergabe + + + Play + Wiedergabe + + + record + Aufnahme + + + Record + Aufnahme + + + panic + Panik + + + Panic + Panik + + + new + Neues Lied + + + &New + &Neues Lied + + + open + Öffnen + + + &Open + Lied &öffnen + + + save + Lied sichern + + + pianoroll + Pianorollen Editor + + + Pianoroll + Pianorollen Editor + + + marker + Marker + + + Marker + Marker + + + File Buttons + Schaltflächen + + + Unknown File Format + Unbekanntes Dateiformat + + + MusE: Write File failed + MusE: Datei schreiben schlug fehl + + + MusE: Song: + MusE: Lied: + + + MusE: Copy Range + MusE: Bereich kopieren + + + not implemented + Nicht umgesetzt + + + MusE: Cut Events + MusE: Ereignisse ausschneiden + + + MusE: Bounce to Track + MusE: Auf Spur abmischen + + + more than one target track selected + Mehr als eine Zielspur ausgewählt + + + wrong target track type, +select wave track as target + Falscher Zielspurtyp, +Wave Spur als Zielspur auswählen + + + no target track selected + Keine Zielspur ausgewählt + + + to import a audio file you have first to selecta wave track + Um eine Audiodatei zu importieren zuerst eine Wave Spur auswählen + + + Delete Selected Tracks + Ausgewählte Spuren löschen + + + View + Ansicht + + + Edit Instrument + Instrument bearbeiten + + + Restart Audio + Audio erneut starten + + + Automation + Automatisierung + + + Mixer Automation + Mischpult Automatisierung + + + Take Snapshot + Schnappschuss aufnehmen + + + Clear Automation Data + Automatisierungsdaten löschen + + + Settings + Einstellungen + + + Configure shortcuts + Tastenkürzel einstellen + + + Midi File Export + Midi Datei exportieren + + + Midi Ports / Soft Synth + Midi Anschlüsse / Software Synthesizer + + + &Manual + &Handbuch + + + &MusE homepage + &MusE Webseite + + + &Report Bug... + &Fehler melden ... + + + &About MusE + &Ãœber MusE + + + What's &This? + Was ist &das? + + + Cannot read template + Vorlage nicht lesbar + + + File open error + Fehler beim Datei öffnen + + + File read error + Fehler beim Datei lesen + + + MusE: load template + Muse: Vorlage laden + + + MusE: Bounce + MusE: Abmischen + + + set left/right marker for bounce range + Linken/rechten Marker für Abmischbereich einstellen + + + MusE: Bounce to File + MusE: In Datei abmischen + + + no output track found + Keine Ausgangsspur gefunden + + + MusE: Export Midi + MusE: Midi exportieren + + + MusE: Import Midi + MusE: Midi importieren + + + Add midi file to current project? + + Mididatei zu aktuellem Lied hinzufügen? + + + &Add to Project + Zu Lied hin&zufügen + + + &Replace + Erset&zen + + + reading midifile + + Lese Mididatei + + + +failed: + schlug fehl: + + + + NoteInfo + + Start + Start + + + Len + Länge + + + Pitch + Tonhöhe + + + Velo On + Velo an + + + Velo Off + Velo aus + + + Note Info + Noteninformation + + + + PageSettings + + Track Name + Spur Name + + + + PartCanvas + + C&ut + &Ausschneiden + + + &Copy + &Kopieren + + + rename + Umbenennen + + + delete + Löschen + + + split + Schnitt + + + glue + Verbinder + + + pianoroll + Pianorollen Editor + + + list + Listen Editor + + + drums + Schlagzeug Editor + + + Cannot copy/move/clone to different Track-Type + Kopieren/verschieben/klonen auf anderen Spurtyp nicht möglich + + + color + Farbe + + + de-clone + Entklonen + + + wave edit + Wave Editor + + + Cannot paste: multiple tracks selected + Einfügen nicht möglich: mehrere Spuren ausgewählt + + + Cannot paste: no track selected + Einfügen nicht möglich: keine Spur ausgewählt + + + Cannot paste: wrong data type + Einfügen nicht möglich: falscher Datentyp + + + Can only paste to midi/drum track + Einfügen möglich nur in Midi/Drum Spur + + + Can only paste to wave track + Einfügen möglich nur in Wave Spur + + + + PatchBay + + MusE: ALSA MIDI Patch Bay + MusE: ALSA Midi Verbindungsübersicht + + + + PatchBayBase + + ALSA Patch Bay + ALSA Verbindungsübersicht + + + + PianoRoll + + &Edit + &Bearbeiten + + + Cut + Ausschneiden + + + Copy + Kopieren + + + Paste + Einfügen + + + Delete Events + Ereignisse löschen + + + Select All + Alle auswählen + + + Select None + Nichts auswählen + + + Invert + Auswahl umkehren + + + Inside Loop + Auswahl innerhalb Schleife + + + Outside Loop + Auswahl außerhalb Schleife + + + &Select + &Auswählen + + + blue + Farbe blau + + + pitch colors + Farbe nach Tonhöhe + + + velocity colors + Farbe nach Anschlagsstärke + + + &Config + &Einstellen + + + event color + Ereignisfarbe + + + &Functions + &Funktionen + + + Over Quantize + Ãœberquantisieren + + + Note On Quantize + Wert "Note an" quantisieren + + + Note On/Off Quantize + Wert "Note an/aus" quantisieren + + + Iterative Quantize + Iteratives quantisieren + + + Pianoroll Tools + Werkzeug "Pianorollen Editor" + + + Step Record + Aufnahme taktschlagweise + + + Midi Input + Midi Eingang + + + Play Events + Ereignisse abspielen + + + Add Controller View + Kontrolleransicht hinzufügen + + + Config Quant... + Quantisierung einstellen ... + + + Modify Gate Time + Gate Zeit ändern + + + Modify Velocity + Velocity ändern + + + Crescendo + Crescendo + + + Transpose + Transponieren + + + Thin Out + Ausdünnen + + + Erase Event + Ereignis löschen + + + Note Shift + Note verschieben + + + Move Clock + Zeitposition verschieben + + + Copy Measure + Taktmaß kopieren + + + Erase Measure + Taktmaß löschen + + + Delete Measure + Taktmaß löschen + + + Create Measure + Taktmaß erzeugen + + + ctrl + Ktrl + + + + PluginDialog + + Ok + Bestätigen + + + Cancel + Abbrechen + + + MusE: select plugin + MusE: PlugIn wählen + + + Lib + Lib + + + Label + Beschriftung + + + Name + Name + + + AI + Al + + + AO + AO + + + CI + Cl + + + CO + CO + + + IP + IP + + + id + id + + + Maker + Erzeuger + + + Copyright + Copyright + + + Select which types of plugins should be visible in the list,<br>beware that 'all' includes plugins that probably are not usable by MusE. + Typen in Liste dargestellter PlugIns auswählen, "all" beinhaltet auch in MusE womöglich nicht nutzbare PlugIns. + + + Stereo and Mono + Stereo und Mono + + + Stereo + Stereo + + + Mono + Mono + + + All + alle + + + + PluginGui + + bypass plugin + Signalfluss PlugIn umleiten + + + MusE: load preset + MusE: Vorlage laden + + + MusE: save preset + MusE: Vorlage sichern + + + File Buttons + Schaltfläche Datei + + + Load Preset + + + + Save Preset + Speicher Preset + + + + QHeader + + Port Number + Anschlussnummer + + + enable gui for device + GUI für Gerät einschalten + + + Instrument connected to port + Instrument mit Anschluss verbunden + + + State: result of opening the device + Status: Ergebnis des Geräteanschlusses + + + mute instrument + Instrument still schalten + + + sound name + Klangname + + + quantisation +currently not used + Quantisierung +gegenwärtig nicht benutzt + + + this input note triggers the sound + Diese Eingangsnote löst den Klang aus + + + note length + Notenlänge + + + this note is send for the sound + Diese Note wird für den Klang verwendet + + + output channel +currently not used + Ausgangskanal +gegenwärtig nicht benutzt + + + output port +currently not used + Ausgangsanschluss +gegenwärtig nicht benutzt + + + velocity level 1 + Velocity Pegel 1 + + + velocity level 2 + Velocity Pegel 2 + + + velocity level 3 + Velocity Pegel 3 + + + velocity level 4 + Velocity Pegel 4 + + + quantisation + Quantisierung + + + output channel + Ausgangskanal + + + output port + Ausgangsanschluss + + + Enable Recording + Aufnahme einschalten + + + Mute Indicator + Anzeige "Stille" + + + Solo Indicator + Anzeige "Solo" + + + Track Type + Spurtyp + + + Track Name + Spurname + + + Output Channel Number + Ausgangskanalnummer + + + Output Port + Ausgangsanschluss + + + Time Lock + Sperre "Zeit" + + + Solo/Pre Fader Listening + Solo/Vor Regler Abhöre + + + Name of the midi device associated with this port number + Name des Midi Gerätes an dieser Anschlussnummer + + + enables reading from device + Auslesen vom Gerät ermöglichen + + + enables writing to device + Schreiben zum Gerät ermöglichen + + + + QWidget + + Cannot convert sysex string + Sysex Kette nicht umwandelbar + + + Hex String too long (2048 bytes limit) + Hex Kette ist zu lang (Grenze 2048 Bytes) + + + new + Neu + + + create peakfile for + Pegelspitzendatei erzeugen für + + + MusE: get file name + MusE: Dateinamen übermitteln + + + the directory + + Das Verzeichnis + + + +does not exist +create? + Es besteht nicht +Erzeugen? + + + &Create + &Erzeugen + + + Cancel + Abbrechen + + + MusE: create directory + MusE: Verzeichnis erzeugen + + + creating dir failed + Verzeichnis erzeugen schlug fehl + + + File + + Datei + + + +exists + besteht + + + MusE: write + MusE: schreiben + + + Overwrite + Ãœberschreiben + + + Quit + Beenden + + + Open File + + Datei öffnen + + + +failed: + schlug fehl: + + + MusE: Open File + MusE: Datei öffnen + + + None + Kein + + + generic midi + General Midi + + + + QuantConfig + + Config Quantize + Quantisierung einstellen + + + Strength + Stärke + + + Don´t Quantize + Nicht quantisieren + + + Quant Len + Länge quantisieren + + + MusE: Config Quantize + MusE: Quantisierung einstellen + + + + RhythmBase + + MusE: Random Rhythm Generator + MusE: Rhythmus Zufallsgenerator + + + Instrument Properties + Instrumenteigenschaften + + + counts/bar + Schläge/Takt + + + steps/count + Schritte/Schlag + + + # bars + # Takte + + + test + testen + + + contrib + beitragen + + + randomize + zufällig anordnen + + + Group 1 + Gruppe 1 + + + Group 2 + Gruppe 2 + + + Group 3 + Gruppe 3 + + + Group 4 + Gruppe 4 + + + Group 5 + Gruppe 5 + + + listen + vorhören + + + Instrument + Instrument + + + Group + Gruppe + + + &New + &Neu + + + create new entry + Neuen Eintrag erzeugen + + + pressing the New button you create a new entry +in the MusE list of defined controllers + Schaltfläche "Neu" klicken um einen neuen Eintrag +in der MusE Liste definierter Kontroller zu erzeugen + + + &Delete + &Löschen + + + delete selected entry + Ausgewählten Eintrag löschen + + + Up + Nach oben + + + Down + Nach unten + + + Instrument + Instrument + + + steps/count + Schritte/Schlag + + + list of defined controllers + Liste definierter Kontroller + + + This is the MusE list of defined controllers. + Dies ist die MusE Liste definierter Kontroller. + + + &File + &Datei + + + &Edit + &Bearbeiten + + + &Help + &Hilfe + + + Tools + Werkzeuge + + + New + Neu + + + Open + Öffnen + + + &Open... + &Öffnen ... + + + Save + Sichern + + + &Save + &Sichern + + + Save As + Sichern als + + + Save &As... + S&ichern als ... + + + Print + Drucken + + + &Print... + &Drucken ... + + + Exit + Beenden + + + E&xit + Bee&nden + + + Undo + Rckgängig + + + &Undo + &Rückgängig + + + Redo + Wiederherstellen + + + &Redo + &Wiederherstellen + + + Cut + Ausschneiden + + + &Cut + A&usschneiden + + + Copy + Kopieren + + + C&opy + Ko&pieren + + + Paste + Einfügen + + + &Paste + Ein&fügen + + + Find + Suchen + + + &Find... + &Suchen ... + + + Contents + Inhalte + + + &Contents... + &Inhalte ... + + + Index + Verzeichnis + + + &Index... + &Verzeichnis ... + + + About + Ãœber + + + &About... + &Ãœber ... + + + <b>Notice!</b><br> +Random Rhythm Generator is not enabled yet! + Merke! +Rhythmus Zufallsgenerator noch nicht eingeführt! + + + Ctrl+N + Strg+N + + + Ctrl+O + Strg+O + + + Ctrl+S + Strg+S + + + Ctrl+P + Strg+P + + + Ctrl+Z + Strg+Z + + + Ctrl+Y + Strg+Y + + + Ctrl+X + Strg+X + + + Ctrl+C + Strg+C + + + Ctrl+V + Strg+V + + + Ctrl+F + Strg+F + + + + RhythmGenerator + + Instrument Settings: + Instrument Einstellungen + + + add + Zufgen + + + delete + Entfernen + + + Group + Gruppe + + + + Rhythmusgenerator + + + + RouteDialogBase + + MusE: Routing + MusE: Signalfluss + + + Add Route + Signalfluss hinzufügen + + + Source: + Quelle: + + + Destination: + Ziel: + + + Connect + Verbinden + + + connect source to destination + Quelle mit Ziel verbinden + + + Current Routes + Aktueller Signalfluss + + + Source + Quelle + + + Destination + Ziel + + + Remove + Entfernen + + + remove selected route + Ausgewählten Signalfluss entfernen + + + + ScrollScale + + next page + Nächste Seite + + + previous page + Vorherige Seite + + + current page number + Aktuelle Seitennummer + + + + ShortcutCaptureDialogBase + + Enter shortcut sequence + Folge von Tastenkürzeln eingeben + + + Press keys to enter shortcut sequence! + Tasten drücken um Folge von Tastenkürzeln einzugeben! + + + Old shortcut: + Altes Tastenkürzel: + + + Undefined + unbestimmt + + + New shortcut: + Neues Tastenkürzel: + + + OK + Bestätigen + + + Cancel + Abbrechen + + + + ShortcutConfigBase + + Configure Keyboard Shortcuts + Tastenkürzel einstellen + + + Shortcut Category + Kategorie Tastenkürzel + + + Description + Beschreibung + + + Shortcut + Tastenkürzel + + + &Clear + &Löschen + + + Alt+C + Alt+C + + + &Define + &Bestimmen + + + Alt+D + Alt+D + + + &Apply + &Anwenden + + + Alt+A + Alt+A + + + + SigScale + + signature scale + Skala Taktmaß + + + + SynthConfigBase + + MusE: Synth Configuration + MusE: Synth Einstellung + + + Soft Synthesizer + Software-Synthesizer + + + File + Datei + + + Instances + Instanzen + + + Name + Name + + + list of available software synthesizers + Liste verfügbarer Software-Synthesizer + + + Add Instance + Instanz hinzufügen + + + Remove Instance + Instanz entfernen + + + Midi Port + Midi Anschluss + + + Midi connections + Midi Verbindungen + + + Inst + Inst + + + Version + Version + + + Description + Beschreibung + + + + TList + + Midi + Midi + + + Drum + Drum + + + Delete Track + Spur löschen + + + Track Comment + Spur Kommentar + + + Show Gui + Zeige GUI + + + Add Midi Track + Midi Spur hinzufügen + + + Add Drum Track + Drum Spur hinzufügen + + + Add Wave Track + Wave Spur hinzufügen + + + MusE: bad trackname + MusE: ungeeigneter Spurname + + + please choose a unique track name + Bitte eindeutigen Spurnamen wählen + + + Add Output + Ausgang hinzufügen + + + Add Group + Gruppe hinzufügen + + + Add Input + Eingang hinzufügen + + + Add Aux Send + Aux Send hinzufügen + + + Update drummap? + Drumbelegung aktualisieren? + + + Do you want to use same port for all instruments in the drummap? + Möchten Sie für alle Instrumente der Drumbelegung den selben Anschluss verwenden? + + + &Yes + &Ja + + + &No + &Nein + + + Do you want to use same port and channel for all instruments in the drummap? + Möchten Sie für alle Instrumente der Drumbelegung den selben Anschluss und Kanal verwenden? + + + + TempoSig + + Tempo/Sig + Tempo/Taktmaß + + + + Toolbar1 + + Solo + Solo + + + Snap + Magnet + + + Quantize + Quantisieren + + + To + Zu + + + All Events + Alle Ereignisse + + + Looped Ev. + Ereignisse innerhalb Schleife. + + + Selected Ev. + Ausgewählte Ereignisse. + + + Looped+Sel. + Innerhalb Schleife + augewählt. + + + Cursor + Positionsmarker + + + + TrackComment + + MusE: Track Comment + MusE: Spur Kommentar + + + Track Comment: + Spur Kommentar: + + + + Transport + + Punch In + Aufnahme am linken Marker beginnen + + + Loop + Schleife + + + Punch Out + Aufnahme am rechten Marker beenden + + + Left Mark + Linker Marker + + + Right Mark + Rechter Marker + + + Overdub + Ãœberschreiben + + + Replace + Ersetzen + + + Rec Mode + Modus "Aufnahme" + + + Normal + Normal + + + Mix + Mischen + + + Cycle Rec + Aufnahme in Schleife + + + punchin + Aufnahme am linken Marker geginnen + + + loop + Schleife + + + punchout + Aufnahme am rechten Marker beenden + + + rewind to start + Zum Start zurück + + + rewind + Einen Taktschlag rückwärts + + + forward + Einen Taktschlag vorwärts + + + stop + Stopp + + + play + Wiedergabe + + + record + Aufnahme + + + AC + AC + + + quantize during record + Während Aufnahme quantisieren + + + Click + Klick + + + metronom click on/off + Metronom Klick an/aus + + + Sync + Sync + + + external sync on/off + Externer Sync an/aus + + + Master + Master + + + use master track + Masterspur einschalten + + + + TransposeDialogBase + + MusE: Midi Transpose + MusE: Midi transponieren + + + Value + Wert + + + halftones + Halbtonschritte + + + Time + Zeit + + + all + alle + + + between markers + Zwischen Markern + + + Parts + Parts + + + all in selected tracks + Alles in ausgewählter Spur + + + OK + Bestätigen + + + Cancel + Abbrechen + + + + VelocityBase + + MusE: Modify Velocity + MusE: Velocity ändern + + + Range + Bereich + + + All Events + Alle Ereignisse + + + Selected Events + Ausgewählte Ereignisse + + + Looped Events + Ereignisse innerhalb Schleife + + + Selected & Looped + Ausgewählt & innerhalb Schleife + + + Values + Werte + + + Rate: + Rate: + + + Offset: + Zeitversatz: + + + % + % + + + OK + Bestätigen + + + Cancel + Abbrechen + + + + WTScale + + bar scale + Taktskala + + + + WaveEdit + + Normalize + Normalisieren + + + weTools + Werkzeug "we" + + + Solo + Solo + + + Cursor + Positionsmarker + + + &File + &Datei + + + Functions + Funktionen + + + + WaveTrackInfoBase + + MusE: TrackInfo + MusE: Spurinfo + + + Track Info + Spurinfo + + + Track Name + Spurname + + + Output Route: + Ausgangssignalfluss: + + + Input Route: + Eingangssignalfluss: + + + Ports: + Anschlüsse: + + + Mono + Mono + + + Stereo + Stereo + + + diff --git a/muse2/share/locale/muse_es.qm b/muse2/share/locale/muse_es.qm new file mode 100644 index 00000000..8a328844 Binary files /dev/null and b/muse2/share/locale/muse_es.qm differ diff --git a/muse2/share/locale/muse_es.ts b/muse2/share/locale/muse_es.ts new file mode 100644 index 00000000..c48735b4 --- /dev/null +++ b/muse2/share/locale/muse_es.ts @@ -0,0 +1,7146 @@ + + + + + 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 + + + + @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 + + + + Add Drum Track + + + + Add Wave Track + + + + Add Audio Output + + + + Add Audio Group + + + + Add Audio Input + + + + Add Aux Send + + + + eraser + + + + + AboutBox + + AboutBox + + + + 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 + + + + + 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 + + + Palette + + + + add to palette + + + + B + + + + S + S + + + H + + + + V + + + + G + + + + 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 + + + + 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 + + + MusE: Mixer + + + + &Create + + + + &View + + + + Routing + + + + + AudioStrip + + panorama + + + + aux send level + + + + 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� + + + solo mode (monitor) + + + + pre fader listening + monitorizar pre fader + + + iR + + + + intput routing + + + + oR + + + + output routing + ruteado de entrada + + + Off + + + + Read + + + + Touch + + + + Write + + + + automation type + + + + Channel + + + + + 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 + + + + ConfigMidiFileBase + + MusE: Config Midi File Export + + + + &OK + + + + &Cancel + &Cancelar + + + 0 (single track) + + + + 1 (multiple tracks) + + + + Format: + + + + 96 + 96 + + + 192 + 192 + + + 384 + 384 + + + Division: + + + + Copyright: + + + + Enable extended smf format + Habilita el formato extendido de smf + + + + CtrlPanel + + select controller + selecciona controlador + + + remove panel + quitar panel + + + other ... + otro ... + + + Sel + Sel + + + x + x + + + Velocity + Velocidad + + + Pitch + Tono + + + add new ... + + + + + 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� + + + Set fixed length + + + + &Functions + + + + Modify Velocity + + + + + 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 + + MusE: Edit Controller Event + + + + Time Position + Posici� de tiempo + + + Available Controller: + + + + Create New Controller + + + + textLabel3 + + + + Value + Valor + + + Controller + Controlador + + + H-Bank + + + + L-Bank + + + + Program + + + + off + apagado + + + pushButton4 + + + + &OK + + + + &Cancel + &Cancelar + + + + EditEventDialog + + Ok + Aceptar + + + Cancel + Cancelar + + + + EditInstrumentBase + + MusE: Instrument Editor + + + + Patches + + + + Patch Name: + + + + High Bank: + + + + Low Bank: + + + + Program: + + + + d.c. + dont care + + + + d.c. + + + + Patch/Group + + + + &Delete + &Borrar + + + Alt+D + + + + &New Patch + + + + Alt+N + + + + New Group + + + + Drum + + + + GM + + + + GS + + + + XG + + + + Controller + Controlador + + + Predefined Controller: + + + + This is a list of commonly used midi controllers. +Note that in MusE pitch and program changes are +handled like normal controllers. + + + + Properties + + + + Name + Nombre + + + Type + Tipo + + + Control7 + + + + Control14 + + + + RPN + + + + NRPN + + + + Pitch + Tono + + + Program + + + + H-Ctrl + + + + Midi Controller Number High Byte + + + + L-Ctrl + + + + Midi Controller Number Low Byte + + + + Range + + + + Min + + + + Max + + + + Default + + + + Name + + + + Type + + + + Min Val + + + + Max Val + + + + list of defined controllers + + + + This is the MusE list of defined controllers. + + + + SysEx + Sistema Exclusivo + + + Initialization + + + + Panic + + + + Hex Entry: + + + + &File + + + + Tools + + + + New + + + + &New + &Nuevo + + + Ctrl+N + + + + Open + + + + &Open... + + + + Ctrl+O + + + + Save + Guardar + + + &Save + + + + Ctrl+S + + + + Save As + + + + Save &As... + + + + Exit + + + + E&xit + + + + + 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 + + + + FileDialogButtons + + Form1 + Formulario1 + + + Global + Global + + + User + Usuario + + + Project + Proyecto + + + Load: + + + + Songdata + +Cofiguration + + + + only +Songdata + + + + + FontSel + + Size: + Tama�: + + + + 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: + + + Application + + + + Start Muse + + + + start with last song + + + + start with song + + + + start song: + + + + Views + + + + y-pos + + + + show + + + + x-pos + + + + height + + + + width + + + + Big Time + + + + Arranger + + + + Transport + + + + Cur + + + + set current values + + + + start with template: default.med + + + + show splash screen + + + + + 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 + + + + 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 + + + I + + + + O + + + + + 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 + + + + 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 + + + Enable + + + + Enable usage of master track + + + + + 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 + + + + 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 + + + &Add + + + + Alt+A + + + + Predefined Controller: + + + + Managed Controller for Port + + + + Channel + + + + This is a list of commonly used midi controllers. +Note that in MusE pitch and program changes are +handled like normal controllers. + + + + Pitch + Tono + + + Program + + + + Midi Controller Number High Byte + + + + Midi Controller Number Low Byte + + + + Range + + + + + 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 + + + + 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 + + + + MidiPortRouteBase + + MusE: Midi Port Routing + + + + Port 2 + + + + Output + + + + Input + Entrada + + + + 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 + + VariationSend + + + + Var + Var + + + ReverbSend + + + + Rev + Rev + + + ChorusSend + + + + Cho + Cho + + + off + apagado + + + dB + dB + + + Pan/Balance + + + + Pan + Bal + + + record + grabar + + + mute + silencio + + + pre fader listening + monitorizar pre fader + + + Route + + + + set routing + + + + Off + + + + Read + + + + Touch + + + + Write + + + + automation type + + + + + 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: + + + + 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 + + + record: + + + + Rec + Grabar + + + add settings to song + + + + Bank Select LSB + + + + Bank Select MSB + + + + + 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 + + + + MidiTransformerDialog + + New + Nueva + + + + MixdownFileDialog + + Wave Files (*.wav);;All Files (*) + Archivos de onda (*.wav);;Todos los archivos(*) + + + + 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 + + &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 + + + to import a audio file you have first to selecta wave track + + + + Delete Selected Tracks + + + + View + + + + Edit Instrument + + + + Restart Audio + + + + Automation + + + + Mixer Automation + + + + Take Snapshot + + + + Clear Automation Data + + + + Settings + + + + Configure shortcuts + + + + Midi File Export + + + + Midi Ports / Soft Synth + + + + &Manual + + + + &MusE homepage + + + + &Report Bug... + + + + &About MusE + + + + What's &This? + + + + Cannot read template + + + + File open error + + + + File read error + + + + MusE: load template + + + + MusE: Bounce + + + + set left/right marker for bounce range + + + + MusE: Bounce to File + + + + no output track found + + + + Add midi file to current project? + + + + + &Add to Project + + + + &Replace + + + + +failed: + + + + + 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 + + + + 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 + + + Can only paste to midi/drum track + + + + Can only paste to wave track + + + + + 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 + + + + 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 + + + Select which types of plugins should be visible in the list,<br>beware that 'all' includes plugins that probably are not usable by MusE. + + + + Stereo and Mono + + + + Stereo + + + + Mono + + + + All + + + + + 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 + + + + 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 + + + + 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 + + + enables reading from device + + + + enables writing to device + + + + + 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 + + + + 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 + + + + 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 ... + + + <b>Notice!</b><br> +Random Rhythm Generator is not enabled yet! + + + + Ctrl+N + + + + Ctrl+O + + + + Ctrl+S + + + + Ctrl+P + + + + Ctrl+Z + + + + Ctrl+Y + + + + Ctrl+X + + + + Ctrl+C + + + + Ctrl+V + + + + Ctrl+F + + + + + 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 + + + + + + + + RouteDialogBase + + MusE: Routing + + + + Add Route + + + + Source: + + + + Destination: + + + + Connect + + + + connect source to destination + + + + Current Routes + + + + Source + + + + Destination + + + + Remove + + + + remove selected route + + + + + 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 + + + + ShortcutCaptureDialogBase + + Enter shortcut sequence + + + + Press keys to enter shortcut sequence! + + + + Old shortcut: + + + + Undefined + + + + New shortcut: + + + + OK + Aceptar + + + Cancel + Cancelar + + + + ShortcutConfigBase + + Configure Keyboard Shortcuts + + + + Shortcut Category + + + + Description + + + + Shortcut + + + + &Clear + + + + Alt+C + + + + &Define + + + + Alt+D + + + + &Apply + &Aplicar + + + Alt+A + + + + + SigScale + + signature scale + Armadura de la escala + + + + StkGuiBase + + MyDialog2 + MiDialogo2 + + + Voices + Voces + + + Edit + Editar + + + + SynthConfigBase + + MusE: 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 + + + Midi Port + + + + Midi connections + + + + Inst + + + + Version + + + + Description + + + + + 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 + + + MusE: bad trackname + + + + please choose a unique track name + + + + Add Output + + + + Add Group + + + + Add Input + + + + Add Aux Send + + + + Update drummap? + + + + Do you want to use same port for all instruments in the drummap? + + + + &Yes + + + + &No + + + + Do you want to use same port and channel for all instruments in the drummap? + + + + + TempoSig + + Tempo/Sig + tempo/firma + + + + 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: + + + + 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 + + + + 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 ) + + + + 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 + + + + 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 + + + diff --git a/muse2/share/locale/muse_fr.qm b/muse2/share/locale/muse_fr.qm new file mode 100644 index 00000000..60d57825 Binary files /dev/null and b/muse2/share/locale/muse_fr.qm differ diff --git a/muse2/share/locale/muse_fr.ts b/muse2/share/locale/muse_fr.ts new file mode 100644 index 00000000..0f654345 --- /dev/null +++ b/muse2/share/locale/muse_fr.ts @@ -0,0 +1,5947 @@ + + + + + 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 + + + + @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 +chanson</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 + gomme + + + cutter + ciseaux + + + score + partition + + + glue + colle + + + quantize + quantisation + + + draw + dessin + + + mute parts + silence + + + Off + Arrêt + + + presets (*.pre *.pre.gz *.pre.bz2) + réglages (presets: *.pre *.pre.gz +*.pre.bz2) + + + All Files (*) + Tous les Fichiers (*) + + + + Appearance + + MusE: load image + MusE: charger une image + + + handle of transport window + poignée 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ènements + + + note on + note on + + + poly pressure + pression poly + + + controller + contrôleurs + + + 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 + Couleurs + + + + Arranger + + Cursor + Curseur + + + Snap + Aligne + + + Len + Long + + + 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 + O-Port + + + Arranger + Arrangeur + + + Off + Arrêt + + + 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 + + + + Group A + + + + Group B + + + + Group C + + + + Group D + + + + + 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 trames: + + + Delay: + Délai: + + + Sample Rate: + Fréquence 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êt + + + 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: Mixeur Audio + + + Inputs + Entrées + + + Synthi + Synth + + + Tracks + Pistes + + + Groups + + + + Master + + + + Group A + + + + Group B + + + + Group C + + + + Group D + + + + None + + + + + 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ée + + + Clip Properties + Propriétés du Clip + + + Pos: + Pos: + + + Len: + Long: + + + + CommentBase + + Form1 + Forme1 + + + Track Comment + Commentaire pour la Piste + + + Track 1 + Piste 1 + + + + CtrlPanel + + select controller + Choisissez le contrôle + + + remove panel + enlever le panneau + + + other ... + autres... + + + Sel + Sél + + + x + x + + + Velocity + Vélocité + + + Pitch + Hauteur + + + + DrumEdit + + Load Map + Charger set de batterie + + + Save Map + Enregistrer set de batterie + + + &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 des contrôles + + + 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 Batterie + + + MusE: Store Drum Map + MusE: Enregistrer Set de Batterie + + + + 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 + Contrôle H + + + Controller-L + Contrôle L + + + Value + Valeur + + + MusE: Enter Controller14 Event + MusE: Entrer l'évènement Contrôle 14 + + + + EditCtrl7Dialog + + Time Position + Position temporelle + + + Controller + Contrôle + + + Value + Valeur + + + MusE: Enter Controller Event + MusE: Entrez l'Evénement Contrôle + + + + EditCtrl7DialogBase + + MusE: Enter Controller + Muse: Entrez le Contrôle + + + Controller: + Contrôle: + + + Time Position: + Position temporelle: + + + Value: + Valeur: + + + controller value + Valeur du Contrôle + + + OK + OK + + + Cancel + Annuler + + + + EditEventDialog + + Ok + Ok + + + Cancel + Annuler + + + + 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 polyphonique + + + + 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: + Commentaire: + + + 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 + + + + 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 contrôles de fluidsynth + + + Load + charger + + + Save + Enregistrer + + + + FileDialogButtons + + Form1 + Form1 + + + Global + Global + + + User + Utilisateur + + + Project + Projet + + + + FontSel + + Size: + Taille: + + + + 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 + Mixeur + + + dB + dB + + + min. Meter Value + Métrage mini + + + min.Slider Val + Val. mini du Curseur + + + Midi + Midi + + + Ticks + Tics + + + 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 rafraîchissement de +l'interface + + + &Apply + &Appliquer + + + &Ok + &Ok + + + &Cancel + &Annuler + + + Help Browser: + Navigateur pour l'aide: + + + + 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 Contrôle + + + 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érer 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 + Commentaire + + + + 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 + + + + MasterEdit + + Master + + + + 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 temporelle à la position en cours + + + MusE: Mastertrack + MusE: PistePrincipale + + + edit tools + outils d'édition + + + EnableMaster + ActiverMaître + + + use master track + Utiliser la piste principale + + + Info + Info + + + Off + Off + + + + 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 + + + + MidiControllerEditDialog + + MusE: save midi controller list + MusE: enregistrer la liste des contrôles +midi + + + MusE: load midi controller list + MusE: charger une liste de contrôles midi + + + + MidiControllerEditDialogBase + + MusE: Define Midi Controller + MusE: Définir un Contrôle Midi + + + replace controller set + remplacer le groupe de contrôles + + + merge controller set + ajouter le groupe de contrôles + + + save controller set as + Enregistrer le groupe de contrôles 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 contrôles définis + + + This is the MusE list of defined controllers. + C'est la liste des contrôles 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 +contrôles + + + &Delete + &Effacer + + + delete selected entry + efface l'entrée sélectionnée + + + &OK + &Ok + + + &Cancel + &Annuler + + + + 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 + Contrôle + + + 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 de contrôle + + + 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 + + + + 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 + Contrôle 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 + + + + 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 + + + + RTS/CTS + RTS/CTS + + + Xon/Xoff + Xon/Xoff + + + &New + &Nouveau + + + &Delete + &Effacer + + + &OK + &OK + + + &Cancel + &Annuler + + + + 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 + trame (frame) + + + f + f + + + subframe + trame 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) + Contrôle Machine MIDI (MMC) + + + Sync Mode + Mode de synchro + + + Master + + + + Slave + Esclave + + + all + tous + + + MTC + MTC + + + Type: + Type: + + + Offset: + Décalage: + + + + 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 + + + + 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 Contrôle + + + 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 + + + + MidiTransformerDialog + + New + + + + + MixdownFileDialog + + Wave Files (*.wav);;All Files (*) + Fichiers Wave (*.wav);;Tous les Fichiers (*) + + + + 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 + wav, 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 + + + + Port + Port + + + + 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 + Mixeur 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 Contrôle + + + Bigtime window + Fenêtre 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 + Apparence + + + 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 + Contrôle MIDI à distance + + + Random Rhythm Generator + Générateur aléatoire de rythmes + + + &Midi + &MIDI + + + Mixer + Mixeur + + + Define Controller + Définir contrôles + + + 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. Voulez-vous l'enregistrer +avant d'en ouvrir un autre? + + + &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 un 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 + Refaire ce qui a été annulé en dernier + + + 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 + + + + NoteInfo + + Start + Début + + + Len + Long + + + Pitch + Hauteur + + + Velo On + Vélo on + + + Velo Off + Vélo 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 + O-1 + + + Oscillator + Oscillateur + + + Brass + Cuivres + + + Reed + Roseau + + + Flute + Flûte + + + 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) + + + + PageSettings + + Paper Size + Dimension de la feuille + + + user + utilisateur + + + Margins + Marges + + + Header + En-Tête + + + 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-clônage + + + pianoroll + rouleau-piano + + + 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 + + + + 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 contrôles + + + ctrl + ctrl + + + + PluginDialog + + Ok + Ok + + + Cancel + Annuler + + + MusE: select plugin + MusE: choisir plugin + + + Lib + Lib + + + Label + Label + + + Name + Nom + + + AI + AI + + + AO + AO + + + CI + CI + + + CO + CO + + + IP + IP + + + id + id + + + Maker + Fabrique + + + Copyright + Copyright + + + + PluginGui + + bypass plugin + Plugin de Direct (bypass) + + + MusE: load preset + MusE: charger réglages + + + MusE: save preset + MusE: enregistrer réglages + + + File Buttons + Boutons Fichier + + + Load Preset + Charger réglages + + + Save Preset + Enregistrer réglages + + + + PrinterConfig + + MusE: Config Printer + MusE: configuration de l'imprimante + + + Print to file + Enregistrer dans un fichier + + + Print Command + Commande d'impression + + + Preview Command + Commande de Visualisation + + + OK + OK + + + Cancel + Annuler + + + + QHeader + + Port Number + Numéro de port + + + enable gui for device + Activer interface utilisateur pour ce +périphérique + + + enables recording from the device + active enregistrement � partir du +périphérique + + + Instrument connected to port + Instrument connecté au port + + + State: result of opening the device + Etat: résultat de l'ouverture du port + + + mute instrument + Rendre muet l'instrument + + + sound name + Nom du son + + + quantisation +currently not used + quantisation +non-utilisé actuellement + + + this input note triggers the sound + cette note en entrée déclenche le son + + + note length + longueur de note + + + this note is send for the sound + Cette note est envoyée pour le son + + + output channel +currently not used + canal de sortie +actuellement non utilisé + + + output port +currently not used + port de sortie +actuellement non utilisé + + + velocity level 1 + vélocité niveau 1 + + + velocity level 2 + vélocité niveau 2 + + + velocity level 3 + vélocité niveau 3 + + + velocity level 4 + vélocité niveau 4 + + + quantisation + quantisation + + + output channel + canal de sortie + + + output port + port de sortie + + + Enable Recording + Activer l'Enregistrement + + + Track Activity + Activité des Pistes + + + Mute Indicator + Indicateur de Silence + + + Solo Indicator + Indicateur de Solo + + + Track Type + Type de Piste + + + Track Name + Nom de la Piste + + + Output Channel Number + Numéro de Canal de Sortie + + + Output Port + Port de Sortie + + + Time Lock + Vérouillage d'Horloge + + + Solo/Pre Fader Listening + Ecoute Solo/Pre Fader + + + Name of the midi device associated with this port +number + Nom du périphérique midi associé avec ce numéro de +port + + + + QWidget + + Cannot transform non empty track + Ne peut transformer une piste non vide + + + Velocity + Vélocité + + + Cannot convert sysex string + Ne peut convertir le code sysex + + + Hex String too long (2048 bytes limit) + Code Hexa tro long (limite: 2048 octets) + + + generic midi + MIDI générique + + + new + nouveau + + + create peakfile for + créer fichier de crêtes pour + + + MusE: get file name + MusE: avoir le nom du fichier + + + the directory + + le répertoire + + + + +does not exist +create? + n'existe pas. +Le créer? + + + &Create + &Créer + + + Cancel + Annuler + + + MusE: create directory + MusE: créer un répertoire + + + creating dir failed + échec de la création du répertoire + + + File + + Fichier + + + + +exists + +existe + + + MusE: write + MusE: écriture + + + Overwrite + Ecrasement + + + Quit + Quitter + + + Open File + + Ouvrir Fichier + + + + +failed: + +échec: + + + MusE: Open File + MusE: Ouvrir un Fichier + + + None + + + + Master + + + + Input + Entrée + + + Group %c + + + + Unknown + Inconnu + + + + QuantConfig + + Config Quantize + Configuration de la Quantisation + + + Strength + Force + + + Don´t Quantize + Ne pas quantiser + + + Quant Len + Lon Quant + + + MusE: Config Quantize + MusE: Configuration de la Quantisation + + + + QuantDialog + + Display Quantize + Afficher Quantisation + + + Position + Position + + + Note Quantize + Quantisation de Note + + + Rest Quantize + Quantisation des Silences + + + Ok + Ok + + + Cancel + Annuler + + + + RhythmBase + + MusE: Random Rhythm Generator + MusE: Générateur Aléatoire de Rythmes + + + Instrument Properties + Propriétés des Instruments + + + counts/bar + battements/mesure + + + steps/count + divisions/battements + + + # bars + # mesure + + + test + test + + + contrib + contrib + + + randomize + aléatoire + + + Group 1 + Groupe 1 + + + Group 2 + Groupe 2 + + + Group 3 + Groupe 3 + + + Group 4 + Groupe 4 + + + Group 5 + Groupe 5 + + + listen + écoute + + + Instrument + Instrument + + + Group + + + + &New + &Nouveau + + + create new entry + créer une nouvelle entrée + + + pressing the New button you create a new entry +in the MusE list of defined controllers + en appuyant sur Nouveau vous créez une nouvelle entrée +dans la liste des contrôles + + + &Delete + &Effacer + + + delete selected entry + efface l'entrée sélectionnée + + + Up + Haut + + + Down + Bas + + + Instrument + Instrument + + + steps/count + divisions/battement + + + list of defined controllers + liste des contrôles définis + + + This is the MusE list of defined controllers. + Ceci est la liste des contrôles qui ont été +définis. + + + &File + &Fichier + + + &Edit + &Edition + + + &Help + &Aide + + + Tools + Outils + + + New + Nouveau + + + Open + Ouvrir + + + &Open... + &Ouvrir... + + + Save + Sauvegarder + + + &Save + &Sauvegarder + + + Save As + Sauvegarder sous + + + Save &As... + Sauvegarder &sous... + + + Print + Imprimer + + + &Print... + Im&primer... + + + Exit + Quitter + + + E&xit + &Quitter + + + Undo + Annuler + + + &Undo + &Annuler + + + Redo + Refaire + + + &Redo + &Refaire + + + Cut + Couper + + + &Cut + Co&uper + + + Copy + Copier + + + C&opy + &Copier + + + Paste + Coller + + + &Paste + C&oller + + + Find + Rechercher + + + &Find... + &Rechercher... + + + Contents + Contenus + + + &Contents... + Co&ntenus... + + + Index + Index + + + &Index... + &Index... + + + About + A propos + + + &About... + &A propos... + + + + RhythmGenerator + + Form3 + Form3 + + + Instrument Settings: + Réglages des Instruments: + + + Instrument + Instrument + + + Hi-Hat + Charley (Hi-Hat) + + + add + ajouter + + + delete + effacer + + + steps/count + battements/division + + + count/bar + divisions/mesure + + + # bars + # mesures + + + Group Settings: + Réglages des Groupes: + + + Group + + + + Group 1 + Groupe 1 + + + Group 2 + Groupe 2 + + + Group 3 + Groupe 3 + + + Group 4 + Groupe 4 + + + Group 5 + Groupe 5 + + + contrib + contrib + + + listen + écoute + + + Randomize + Aléatoire + + + Rhythm Style: + Style de Rythme: + + + Clear + Effacer + + + Open... + Ouvrir... + + + Save + Sauvegarder + + + Save as... + Sauvegarder sous... + + + Generate + Générer + + + Close + Fermer + + + + Score + + Dynamics + Dynamiques + + + &Config + &Configuration + + + Page Settings + Paramètres de la Page + + + Staff Settings + Paramètre de la portée + + + Background Pixmap + image de fond + + + Palettes + Palettes + + + Print + Imprimer + + + Preview Print + Aperçu avant Impression + + + Lyrics + Paroles + + + enter lyrics + entrer des paroles + + + Text + Texte + + + enter text + entrer un texte + + + C7m + Do-7 + + + enter chord symbol + entrer la notation d'un accord + + + to previous voice + � la voie précédante + + + to next voice + � la voie suivante + + + flip stem direction + changer la direction de la queue + + + move marked notes to previous voice or to upper stave in a +split system + déplacer les notes marquées � la voie précédante ou � +la portée du dessus d'un système double + + + move marked notes to next voice or to lower stave in a split +system + déplacer les notes marquées � la voie suivante ou � la +portée basse d'un système double + + + flip stem direction of selected notes + changer la direction de la queue des notes +sélectionnées + + + StaffSettings + Paramètres de la portée + + + MusE: config wallpaper + MusE: Configuration du papier de fond + + + Score + Partition + + + + ScoreConfig + + Staff Settings: + Paramètres de Portée: + + + Track List + Liste Piste + + + Key/Clef + Clef + + + Raster + Trame + + + Note Quantize + Quantisation de Note + + + Rest Quantize + Quantisation de Silence + + + Mode + Mode + + + Split System + Portée Double + + + Splitpoint + Point de Séparation + + + Ok + Ok + + + Apply + Appliquer + + + Cancel + Annuler + + + Upper Staff + Portée Supérieure + + + Lower Staff + Portée Inférieure + + + + ScrollScale + + next page + page suivante + + + previous page + page précédente + + + current page number + numéro de page courante + + + + SigScale + + signature scale + Echelle de la signature + + + + StkGuiBase + + MyDialog2 + MonDialogue2 + + + Voices + Voies + + + Edit + Editer + + + + SynthConfigBase + + MusE: Synth Configuration + MusE: Configuration Synth Virtuel + + + Soft Synthesizer + Synthétiseur Virtuel + + + File + Fichier + + + Instances + Exemplaires + + + Name + Nom + + + list of available software synthesizers + liste des synthétiseurs virtuels +disponibles + + + Add Instance + Ajouter un Exemplaire + + + Alsa Port + Port Alsa + + + Remove Instance + Retirer un Exemplaire + + + + TList + + Delete Track + Effacer la Piste + + + Track Comment + Commentaire de Piste + + + Midi + Midi + + + Drum + Batterie + + + Wave + Forme d'Onde + + + Show Gui + Montrer la Gui + + + Add Midi Track + Ajouter une Piste Midi + + + Add Drum Track + Ajouter une Piste de Batterie + + + Add Wave Track + Ajouter une Piste Audio + + + + TempoSig + + Tempo/Sig + Tempo/Sig + + + + Toolbar1 + + Solo + Solo + + + Snap + Aligne + + + Quantize + Quantisation + + + To + A + + + All Events + Tous les Evènements + + + Looped Ev. + Ev. Bouclés + + + Selected Ev. + Ev. Choisis + + + Looped+Sel. + Bouclés+Sél. + + + Cursor + Curseur + + + + TrackComment + + MusE: Track Comment + Muse: Commentaire de Piste + + + Track Comment: + Commentaire de Piste: + + + + Transport + + Punch In + Punch-In + + + Loop + Boucle + + + Punch Out + Punch-Out + + + Left Mark + Marque Gauche + + + Right Mark + Marque Droite + + + Overdub + Sur-enregistrement (Overdub) + + + Replace + Remplace + + + Rec Mode + Mode Enregistrement + + + Normal + Normal + + + Mix + Mix + + + Cycle Rec + Enr. Cycle + + + punchin + Punch-In + + + loop + boucle + + + punchout + Punch-Out + + + rewind to start + rembobine au départ + + + rewind + rembobiner + + + forward + avance + + + stop + stop + + + play + jouer + + + record + enregistrement + + + AC + AC + + + quantize during record + quantise pendant l'enregistrement + + + Click + Clic + + + metronom click on/off + clic du métronome oui/non + + + Sync + Synchro + + + external sync on/off + synchro externe oui/non + + + Master + + + + use master track + Utiliser la piste principale + + + + TransposeDialogBase + + MusE: Midi Transpose + MusE: Transposition Midi + + + Value + Valeur + + + halftones + demi-tons + + + Time + Temps + + + all + tous + + + between markers + entre les marqueurs + + + Parts + Pièces + + + all in selected tracks + tous dans les pistes sélectionnées + + + OK + OK + + + Cancel + Annuler + + + + VAMGuiBase + + Virtual Analogue for MusE + Synthé Analogique Virtuel pour Muse + + + LFO + LFO + + + Freq + Frèq + + + Waveform + Forme d'Onde + + + Sine + Sinusoïde + + + Pulse + Impulsion + + + Saw + Dents-de-scie + + + Triangle + Triangle + + + Filter + Filtre + + + EnvMod + ModEnv + + + Attack + Attaque + + + Decay + Affaiblissement + + + Sustain + Tenue + + + Release + Relachement + + + Cutoff + Limiteur (CutOff) + + + Resonance + Résonance + + + Invert + Inverser + + + KeyTrack + PisteClef + + + Presets + Presets + + + Set + Set + + + load preset list + charger la liste des presets + + + save preset list + enregistrer la liste des presets + + + save preset list to a new file + enregistrer la liste des presets dans un nouveau +fichier + + + delete preset + efface le preset + + + DCO 1 + DCO 1 + + + Pitch + Hauteur + + + Detune + Désaccordage + + + PWM + PWM + + + FM + FM + + + PW + PW + + + DCO 2 + DCO 2 + + + On + On + + + 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 pour MusE +License GPL. +Copyright(C) 2002 +Jotsif Lindman Hörnlund +( jotsif@linux.nu ) + + + + VelocityBase + + MusE: Modify Velocity + Muse: Modifier la vélocité + + + Range + Taille + + + All Events + Tous les Evènements + + + Selected Events + Evènements choisis + + + Looped Events + Evènements bouclés + + + Selected & Looped + Bouclés & Sélectionnés + + + Values + Valeurs + + + Rate: + Vitesse: + + + Offset: + Décalage: + + + % + % + + + OK + OK + + + Cancel + Annuler + + + + WTScale + + bar scale + échelle de la mesure + + + + WaveEdit + + Normalize + Normaliser + + + weTools + weTools + + + Solo + Solo + + + Cursor + Curseur + + + &File + &Fichier + + + Functions + Fonctions + + + + WaveTrackInfoBase + + MusE: TrackInfo + MusE: InfoPiste + + + Track Info + Info Piste + + + Track Name + Nom de Piste + + + Output Route: + Chemin de Sortie: + + + Input Route: + Chemin d'Entrée: + + + Ports: + Ports: + + + Mono + Mono + + + Stereo + Stéréo + + + diff --git a/muse2/share/locale/muse_pl.qm b/muse2/share/locale/muse_pl.qm new file mode 100644 index 00000000..f0199c58 Binary files /dev/null and b/muse2/share/locale/muse_pl.qm differ diff --git a/muse2/share/locale/muse_pl.ts b/muse2/share/locale/muse_pl.ts new file mode 100644 index 00000000..34934881 --- /dev/null +++ b/muse2/share/locale/muse_pl.ts @@ -0,0 +1,5722 @@ + + + + + Click this button to enable recording + NaciÅ›nij ten przycisk, aby pozwolić na nagrywanie + + + sets amount of quantization: +0 - no quantization +100 - full quantization + stopieÅ„ kwantyzacji: +0 - bez kwantyzacji +100 - peÅ‚na kwantyzacja + + + select Pointer Tool: +with the pointer tool you can: + select parts + move parts + copy parts + Kliknij na strzaÅ‚kÄ™. +StrzaÅ‚kÄ… możesz zaznaczać, przesuwać i kopiować klocki + + + + @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. + Otwórz nowy utwór. Można też wybrać <b>Otwórz</b> z menu Plik. + + + + 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. + Zapisz edytowany utwór. Trzeba podać nazwÄ™ pliku. +Można też wybrać "Zapisz" z menu plik, lub "Ctrl-S". + + + + Create New Song + Twórz nowy utwór. Można też nacisnąć skrót "Ctrl-N". + + + Click this button to stop playback + Zatrzymaj odtwarzanie. + + + Click this button to start playback + Rozpocznij odtwarzanie. + + + Click this button to rewind to start position + PrzewiÅ„ do poczÄ…tku. + + + Click this button to rewind + Przewijaj do tyÅ‚u. + + + Click this button to forward current play position + Przewijaj do przodu. + + + don't quantize notes above this tick limit + Nie kwantyzuj nut poniżej tego poziomu. + + + quantize also note len as default + Kwantyzuj dÅ‚ugoÅ›ci nut tak samo jak domyÅ›lnie. + + + loop between left mark and right mark + ZapÄ™tl pomiÄ™dzy lokatorami + + + record starts at left mark + Nagrywaj od lewego lokatora. + + + record stops at right mark + Nagrywaj od prawego lokatora. + + + rewind to start position + PrzewiÅ„ do poczÄ…tku. + + + rewind current position + Przewijaj kursor do tyÅ‚u. + + + move current position + Przewijaj kursor do przodu. + + + stop sequencer + Zatrzymaj sekwencer. + + + start sequencer play + Uruchom odtwarzanie sekwencera. + + + to record press record and then play + Aby nagrywać najpierw naciÅ›nij nagrywanie, potem odtwarzanie. + + + send note off to all midi channels + Zatrzymaj komunikaty midi na wszystkich kanaÅ‚ach! + + + select Pencil Tool: +with the pencil tool you can: + create new parts + modify length of parts + Kliknij na ołówek. +Ołówkiem możesz tworzyć klocki oraz zmieniać ich dÅ‚ugość. + + + select Delete Tool: +with the delete tool you can delete parts + Kliknij na GumkÄ™. +GumkÄ… można kasować klocki. + + + select Cut Tool: +with the cut tool you can split a part + Kliknij na Nożyczki. +Nożyczkami można ciąć klocki. + + + select Glue Tool: +with the glue tool you can glue two parts + Kliknij na Klej. +Klejem możesz sklejać dwa klocki + + + select Score Tool: + + Wybierz PodglÄ…d Nutowy. + + + select Quantize Tool: +insert display quantize event + Ustaw Kwantyzator +(ustawia kwantyzacjÄ™ wstawiania komunikatów midi). + + + select Drawing Tool + wybierz Wykres + + + select Muting Tool: +click on part to mute/unmute + Kliknij na WyÅ‚Ä…cz. +Kliknij na pojedynczy klocek aby go wyÅ‚Ä…czyć z odtwarzania. + + + pointer + StrzaÅ‚ka + + + pencil + Ołówek + + + cutter + Nożyczki + + + score + PoglÄ…d nutowy + + + glue + Klej + + + quantize + Kwantyzator + + + draw + Wykres + + + mute parts + WyÅ‚Ä…cz klocki z odtwarzania + + + Off + WyÅ‚. + + + presets (*.pre *.pre.gz *.pre.bz2) + ustawienia (*.pre *.pre.gz *.pre.bz2) + + + All Files (*) + Wszystkie Pliki (*) + + + Add Midi Track + Dodaj Åšlad Midi + + + Add Drum Track + Dodaj Åšlad Perkusyjny + + + Add Wave Track + Dodaj Åšlad Audio + + + Add Audio Output + Dodaj WyjÅ›cie Audio + + + Add Audio Group + Dodaj GrupÄ™(SzynÄ™) Audio + + + Add Audio Input + Dodaj WejÅ›cie Audio + + + Add Aux Send + Dodaj WysyÅ‚kÄ™ Audio + + + eraser + Gumka + + + + AboutBox + + AboutBox + O Programie + + + Keep On Rocking! + Trzymajmy tak dalej! + + + 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 + Wersja Programu 0.7.0 +(C) Prawa Autorskie 1999-2004 Werner Schweer i inni. +Wejdź na http://lmuse.sourceforge.net aby Å›ciÄ…gnąć nowÄ… wersjÄ™ i aby uzyskać informacjÄ™. +SpolszczyÅ‚: Piotr Sawicki, pelle@plusnet.pl + +Opublikowane na zasadzie licencji GNU Public License + + + + + + Appearance + + MusE: load image + Muza: ZaÅ‚aduj obrazek. + + + + AppearanceDialogBase + + MusE: Appearance settings + MuzA: WyglÄ…d aplikacji. + + + Apply + Zastosuj + + + Ok + Akceptuj + + + Cancel + Anuluj + + + Arranger + Główne Okno + + + Parts + Klocki + + + show names + pokaż nazwy + + + show events + pokaż elementy midi + + + show Cakewalk Style + pokaż w stylu Cakewalk + + + Events + Elementy midi + + + note on + DźwiÄ™ki + + + poly pressure + Poly pressure + + + controller + Kontrolery midi + + + aftertouch + Nacisk pod uderzeniu (aftertouch) + + + pitch bend + Odchylenie stroju (Pitch Bend) + + + program change + Zmiana programu (program change) + + + special + specjalne + + + Background picture + Obrazek w tle + + + bg + tÅ‚o + + + select... + wybierz... + + + show snap grid + pokaż siatkÄ™ przyciÄ…gania + + + Colors + Kolory + + + Items + SkÅ‚adniki + + + Style/Fonts + Style/Czcionki + + + QT Theme + Styl Qt + + + Windows + Windows + + + MusE + MuzA + + + Metal + Metaliczny + + + Norwegian Wood + Norweskie drzewo + + + Platinum + Platyna + + + CDE + CDE + + + Motif + Motif + + + Motif Plus + Motif Plus + + + Fonts + Czcionki + + + Family + Rodzina Czcionek + + + Size + Rozmiar + + + Font 1 + Czcionka 1 + + + Font 2 + Czcionka 2 + + + Font 3 + Czcionka 3 + + + Font 0 + Czcionka 0 + + + Bold + Pogrubionie + + + Italic + Kursywa + + + ... + ... + + + Font 4 + Czcionka 4 + + + Font 5 + Czcionka 5 + + + Palette + Paleta kolorów + + + add to palette + dodaj do palety + + + B + B + + + S + S + + + H + H + + + V + V + + + G + G + + + R + R + + + + Arranger + + Cursor + Kursor + + + Snap + PrzyciÄ…ganie elementów + + + Len + DÅ‚ugość utworu w taktach + + + NO + Brak + + + TrackInfo + Info o Å›ladzie + + + Track + Åšlad + + + Type + Typ + + + midi song type + Utwór Midi + + + Pitch + Glob. Transpozycja + + + midi pitch + transpozycja midi + + + global midi pitch shift + globalna transpozycja midi + + + Tempo + Tempo + + + midi tempo + Tempo Midi + + + O-Port + WyjÅ›cie + + + Arranger + Główne Okno + + + Off + WyÅ‚. + + + Bar + do kreski taktowej + + + GM + GM + + + GS + GS + + + XG + XG + + + N + 100% + + + R + N + + + M + W + + + S + S + + + C + T + + + Ch + K + + + T + B + + + + AudioMixerApp + + MusE: Mixer + MuzA: Mikser + + + &Create + &Dodaj + + + &View + &PrzeglÄ…daj + + + Routing + Konfiguracja poÅ‚Ä…czeÅ„ + + + + AudioStrip + + panorama + Panorama + + + aux send level + Poziom syngaÅ‚u na wysyÅ‚ce + + + off + WyÅ‚. + + + Pan + Pan + + + 1/2 channel + kanaÅ‚ m/s + + + Pre + Przed + + + pre fader - post fader + przed/ za tÅ‚umikiem + + + dB + dB + + + record + nagranie + + + mute + wycisz + + + record downmix + zgraj miks + + + solo mode (monitor) + Solo (Monitor) + + + pre fader listening + odsÅ‚uch przed tÅ‚umikiem + + + iR + Wej. + + + intput routing + poÅ‚Ä…czenie wejÅ›cia + + + oR + Wyj. + + + output routing + poÅ‚Ä…czenie WyjÅ›cia + + + Off + WyÅ‚. + + + Read + Czytaj + + + Touch + Dotknij + + + Write + Zapisz + + + automation type + typ automatyki + + + Channel + KanaÅ‚ + + + + BigTime + + MusE: Bigtime + MuzA: Duży zegar + + + + ClipListEditorBase + + MusE: ClipList + MuzA: Lista Klipów + + + Name + Nazwa + + + Refs + Refs + + + Start + Start + + + Len + DÅ‚ugość + + + Data + Dane + + + Clip Properties + WÅ‚aÅ›ciwoÅ›ci klipu + + + Pos: + Poz.: + + + Len: + DÅ‚.: + + + + CommentBase + + Form1 + Form. 1 + + + Track Comment + Opis Å›ladu + + + Track 1 + Åšlad 1 + + + + ConfigMidiFileBase + + MusE: Config Midi File Export + MuzA: Konfiguracja exportu plików midi + + + &OK + &Akceptuj + + + &Cancel + &Anuluj + + + 0 (single track) + 0 (pojedynczy Å›lad) + + + 1 (multiple tracks) + 1 (wiele Å›ladów) + + + Format: + Format: + + + 96 + 96 + + + 192 + 192 + + + 384 + 384 + + + Division: + Rozdzielczość: + + + Copyright: + Prawa autorskie: + + + Enable extended smf format + Aktuwuj rozszerzony format smf (standard midi file) + + + + CtrlPanel + + select controller + Wybierz kontroler + + + remove panel + UsuÅ„ panel + + + Sel + Wyb. + + + x + x + + + Velocity + Predkość uderzenia (velocity) + + + add new ... + dodaj nowe ... + + + + DrumEdit + + Load Map + ZaÅ‚aduj zestaw + + + Save Map + Zapisz zestaw + + + &Edit + &Edytuj + + + Cut + Wytnij + + + Copy + Kopiuj + + + Paste + Wklej + + + Delete Events + Kasuj Elementy + + + Select All + Zaznacz wszystko + + + Select None + Bez zaznaczenia + + + Invert + Odwróć zaznaczenie + + + Inside Loop + PomiÄ™dzy lokatorami + + + Outside Loop + Poza obrÄ™bem lokatorów + + + &Select + &Zaznacz + + + Step Record + Nagrywanie po jednej nucie + + + Midi Input + PodglÄ…d Midi + + + Add Controller View + Pokaż widok kontrolerów + + + M + Wycisz + + + Sound + Brzmienie + + + QNT + Kwant. + + + E-Note + U-Wys + + + Len + DÅ‚ug. + + + A-Note + W-Wys + + + Ch + KanaÅ‚ + + + Port + Urz. Midi + + + LV1 + PV1 + + + LV2 + PV2 + + + LV3 + PV3 + + + LV4 + PV4 + + + &File + &Plik + + + Load Drummap + ZaÅ‚aduj zestaw perkusyjny + + + Store Drummap + Zapisz zestaw perkusyjny + + + ctrl + ctrl + + + drummaps + Zestawy perkusyjne + + + Muse: Load Drum Map + MuzA: ZaÅ‚aduj zestaw perkusyjny + + + MusE: Store Drum Map + MuzA: Zapisz zestaw perkusyjny + + + Set fixed length + Ustaw staÅ‚Ä… dÅ‚ugość nut + + + &Functions + &Opcje + + + Modify Velocity + ZmieÅ„ Velocity + + + + EditCAfterDialog + + Time Position + Pozycja: + + + Pressure + Nacisk + + + MusE: Enter Channel Aftertouch + MuzA: Wstaw zmianÄ™ Å›redniego nacisku pod uderzeniu (channel aftertouch) + + + + EditCtrl7DialogBase + + MusE: Enter Controller + MuzA: Podaj kontroler + + + Controller: + Kontroler: + + + Time Position: + Pozycja: + + + Value: + Wartość: + + + controller value + Wartość dla kontrolera + + + OK + Akceptuj + + + Cancel + Anuluj + + + + EditCtrlBase + + MusE: Edit Controller Event + MuzA: Edytuj zdarzenia kontrolera + + + Time Position + Pozycja: + + + Available Controller: + DostÄ™pne kontrolery: + + + Create New Controller + Ustaw nowy kontroler + + + textLabel3 + Etykieta3 + + + Value + Wartość + + + Controller + Kontroler + + + H-Bank + H-Bank + + + L-Bank + L-Bank + + + Program + Program + + + off + wyÅ‚. + + + pushButton4 + naciÅ›nij Przycisk 4 + + + &OK + &Akceptuj + + + &Cancel + &Anuluj + + + + EditEventDialog + + Ok + Akceptuj + + + Cancel + Anuluj + + + + EditInstrumentBase + + MusE: Instrument Editor + MuzA: Edytor Instrumentów + + + Patches + Patche + + + Patch Name: + Patch Nazwa + + + High Bank: + Górny Bank: + + + Low Bank: + Dolny Bank: + + + Program: + Program: + + + d.c. + dont care + brak, +nie ważne + + + d.c. + nie ważne + + + Patch/Group + Patch/Grupa + + + &Delete + &Kasuj + + + Alt+D + Alt+D + + + &New Patch + &Nowy Patch + + + Alt+N + Alt+N + + + New Group + Nowa Grupa + + + Drum + Perkusja + + + GM + GM + + + GS + GS + + + XG + XG + + + Controller + Kontroler + + + Predefined Controller: + Predefiniowany kontroler: + + + This is a list of commonly used midi controllers. +Note that in MusE pitch and program changes are +handled like normal controllers. + To jest lista najczęściej używanych kontorlerów midi. +Zauważ, że "pitch" i "zmiana programu (program change)" sÄ… traktowane w MuzA jako zwykÅ‚e kontrolery. + + + Properties + WÅ‚aÅ›ciwoÅ›ci + + + Name + Nazwa + + + Type + Typ + + + Control7 + Kontroler7 + + + Control14 + Kontroler14 + + + RPN + RPN + + + NRPN + NRPN + + + Pitch + Transpozycja + + + Program + Program + + + H-Ctrl + H-Ctrl + + + Midi Controller Number High Byte + Numer midi kontrolera High Byte + + + L-Ctrl + L-Ctrl + + + Midi Controller Number Low Byte + Numer midi kontrolera Low Byte + + + Range + Zakres + + + Min + Min. + + + Max + Max + + + Default + DomyÅ›lny + + + Name + nazwa + + + Type + Typ + + + Min Val + Min. Wart. + + + Max Val + Max Wart. + + + list of defined controllers + Lista zdefiniowanych kontrolerów + + + This is the MusE list of defined controllers. + To jest lista MuzA zdefiniowanych midi kontrolerów. + + + SysEx + SysEx + + + Initialization + Inicjalizacja + + + Panic + Zatrzymaj wszystkie komunikaty midi! + + + Hex Entry: + Wartość Heks. + + + &File + &Plik + + + Tools + NarzÄ™dzia + + + New + Nowy + + + &New + &Nowy + + + Ctrl+N + Ctrl+N + + + Open + Otwórz + + + &Open... + &Otwórz... + + + Ctrl+O + Ctrl+O + + + Save + Zapisz + + + &Save + &Zapisz + + + Ctrl+S + Ctrl+S + + + Save As + Zapisz jako + + + Save &As... + Zapisz &Jako... + + + Exit + ZakoÅ„cz + + + E&xit + &ZakoÅ„cz + + + + EditMetaDialog + + Time Position + Pozycja: + + + Meta Type + Meta Typ + + + Enter Hex + Wstaw Heks. + + + MusE: Enter Meta Event + MuzA: Wstaw Zdarzenie Meta (nacisk po uderzeniu + + + + EditMetaDialogBase + + MusE: Enter Meta Event + MuzA: Wstaw Meta Zdarzenie + + + OK + Akceptuj + + + Cancel + Anuluj + + + TextLabel1 + Etykieta + + + Time Position: + Pozycja: + + + Meta Type: + Meta Typ: + + + Enter Hex + Wstaw Heks. + + + + EditNoteDialogBase + + MusE: Enter Note + MuzA: Wstaw NutÄ™ + + + OK + Akceptuj + + + Cancel + Anuluj + + + Length: + DÅ‚ugość: + + + Time Position: + Pozycja: + + + Pitch: + Wysokość dźwiÄ™ku + + + Velocity On: + Predkość uderzenia (velocity) WÅ‚.: + + + Velocity Off: + Predkość uderzenia (velocity) WyÅ‚.: + + + + EditPAfterDialog + + Time Position + Pozycja: + + + Pitch + Wysokość dźwiÄ™ku + + + Pressure + Nacisk + + + MusE: Enter Poly Aftertouch + MuzA: Wstaw zmianÄ™ Å›redniego nacisku pod uderzeniu (channel aftertouch) + + + + EditSysexDialogBase + + MusE: Enter SysEx + MuzA: Wstaw komunikat midi SysEx + + + TimePosition: + Pozycja: + + + Comment: + Opis: + + + OK + Akceptuj + + + Cancel + Anuluj + + + + EditToolBar + + Edit Tools + NarzÄ™dzia Edycyjne + + + + EffectRack + + effect rack + skrzynia efektów + + + move up + przesuÅ„ w górÄ™ + + + move down + przesuÅ„ w dół + + + remove + usuÅ„ + + + bypass + omiÅ„ (bypass) + + + show gui + pokaż interfejs użytkownika + + + new + nowy + + + change + zmieÅ„ + + + + FileDialogButtons + + Form1 + Form1 + + + Global + Globalnie + + + User + Użytkownik + + + Project + Katalog projektu + + + Load: + Åaduj: + + + Songdata + +Cofiguration + Plik typu utwór + +konfiguracja + + + only +Songdata + Tylko pliki typu utwór + + + + FontSel + + Size: + Rozmiar: + + + + GateTimeBase + + MusE: Modify Gate Time + MuzA: modyfikuj Gate Time + + + Range + Zakres + + + All Events + Wszytkie Elementy + + + Selected Events + Zaznaczone Elementy + + + Looped Events + PomiÄ™dzy lokatorami + + + Selected & Looped + Zaznaczone & PomiÄ™dzy lokatorami + + + Values + Wartość + + + Rate: + CzÄ™stotliwość: + + + Offset: + Offset: + + + % + % + + + OK + Akceptuj + + + Cancel + Anuluj + + + + GlobalSettingsDialogBase + + MusE: Global Settings + MuzA: Globalne Ustawienia + + + Audio + Audio + + + Mixer + Mikser + + + dB + dB + + + min. Meter Value + min. wartość miernika sygnaÅ‚u + + + min.Slider Val + dolna granica przesuniÄ™cia tÅ‚umika + + + Midi + Midi + + + Ticks + Tykanie + + + 1024 + 1024 + + + 2048 + 2048 + + + 4096 + 4096 + + + 8172 + 8172 + + + Displayed Resolution +(Ticks/Quarternote) + WyÅ›wietlana Rozdzielczość +(Tykanie/Ćwiartka) + + + 48 + 48 + + + 96 + 96 + + + 192 + 192 + + + 384 + 384 + + + 768 + 768 + + + 1536 + 1536 + + + 3072 + 3072 + + + 6144 + 6144 + + + 12288 + 12288 + + + RTC Resolution +(Ticks/Sec) + +RTC (Rzeczywista Rozdzielczość Zegara) +(Tykanie/Sekunda) + + + GUI + Interfejs Użytkownika + + + /sec + /sek. + + + GUI Refresh Rate + CzÄ™stotliwość odÅ›wieżania interfejsu użytkownika + + + &Apply + &Zastosuj + + + &Ok + &Akceptuj + + + &Cancel + A&nuluj + + + Help Browser: + PrzeglÄ…darka pomocy: + + + Application + Zastosowanie + + + Start Muse + Uruchamianie MuzA + + + start with last song + Otwórz ostatnio otwierany utwór + + + start with song + Åaduj przy uruchamianiu utwór + + + start song: + Åaduj utwór: + + + Views + Widoki + + + y-pos + poz.-y + + + show + Pokaż + + + x-pos + poz.-x + + + height + wysokość + + + width + szerokość + + + Big Time + Duży Zegar + + + Arranger + Główne Okno + + + Transport + Panel transportu + + + Cur + Aktualne + + + set current values + Ustaw aktualnÄ… wartość + + + start with template: default.med + ZaÅ‚aduj utwór szablon: default.med + + + show splash screen + Pokaż okno o programie przy starcie + + + + LMaster + + new tempo + nowe tempo + + + new signature + nowe metrum + + + Meter + Miernik + + + Time + Pozycja + + + Type + Typ + + + Value + Wartość + + + MusE: Mastertrack + MuzA: Åšlad Tempo/Metrum + + + Tempo + Tempo + + + Timesig + Metrum + + + + ListEdit + + &Edit + E&dytuj + + + Cut + Wytnij + + + Copy + Kopiuj + + + Paste + Wklej + + + List Tools + Lista NarzÄ™dzi + + + Insert Tools + Wstaw NarzÄ™dzia + + + Delete Events + Kasuj Elementy + + + Insert Note + Wstaw nutÄ™ + + + insert Note + Wstaw nutÄ™ + + + Insert SysEx + wstaw SysEx + + + insert SysEx + wstaw SysEx + + + Insert Ctrl + Wstaw kontroler + + + insert Ctrl + wstaw + + + Insert Meta + Wstaw Meta + + + insert Meta + Wstaw Meta + + + Insert Channel Aftertouch + Wstaw zmianÄ™ Å›redniego nacisku pod uderzeniu (channel aftertouch) + + + insert Channel Aftertouch + Wstaw zmianÄ™ Å›redniego nacisku pod uderzeniu (channel aftertouch) + + + Insert Key Aftertouch + Wstaw pojedynczÄ… zmiane nacisku pod uderzeniu + + + insert Poly Aftertouch + Wstaw zmianÄ™ Å›redniego nacisku pod uderzeniu (Poly Aftertouch) + + + Tick + Takt (impuls sygnaÅ‚u czasu) + + + Bar + Takt + + + Typ + Typ + + + Ch + Kan + + + Val A + Wart. A + + + Val B + Wart. B + + + Val C + Wart. C + + + Len + DÅ‚ug. + + + Comment + Opis + + + + MITTransposeBase + + MusE: Midi Input Plugin: Transpose + MuzA: Wtyczka WejÅ›cia Midi: Transponuj + + + On + WÅ‚Ä…cz. + + + TriggerKey + Klawisz uruchamiajÄ…cy + + + Transpose: + Transponuj: + + + +0 + + + + + MPConfig + + none + brak + + + Port + Numer + + + GUI + Interfejs użytkownika + + + Instrument + Typ portu midi + + + Device Name + Nazwa UrzÄ…dzenia + + + State + Status + + + unknown + nieznane + + + I + Wej. + + + O + Wyj. + + + + MRConfigBase + + MusE: Midi Input Plugin: Remote Control + MuzA: Wtyczka WejÅ›cia Midi: Zdalne Sterowanie + + + Activate + Aktywuj + + + On + WÅ‚. + + + Actions + Funkcje + + + Stop + Stop + + + Record + Nagrywanie + + + Goto Left Mark + Idź do lewego lokatora + + + Play + Odtwarzanie + + + + MTScale + + bar scale + OÅ› taktów + + + + MarkerView + + Bar:Beat:Tick + Takt:Puls:Takt + + + Hr:Mn:Sc:Fr:Sf + Godz.:Min.:Sek.:Kl.:SKl + + + Lock + Zablokuj + + + Text + Tekst + + + Marker Properties + WÅ‚aÅ›ciwoÅ›ci znacznika + + + MusE: Marker + MuzA: Znacznik + + + add marker + Dodaj znacznik + + + Add Marker + Dodaj znacznik + + + delete marker + Kasuj znacznik + + + Delete Marker + Kasuj znacznik + + + &File + &Plik + + + &Edit + &Edycja + + + + MasterEdit + + Cursor + Poz. kursora + + + Snap + PrzyciÄ…ganie + + + time at cursor position + Wstaw metrum w aktualnej pozycji kursora + + + tempo at cursor position + Wstaw tempo w aktualnej pozycji kursora + + + CurPos + Akt. Poz. Kursora: + + + tempo at current position + Wstaw tempo w aktualnej pozycji kursora + + + time signature at current position + Wstaw tempo w aktualnej pozycji kursora + + + MusE: Mastertrack + MuzA: Åšlad Tempo/Metrum + + + edit tools + NarzÄ™dzia Edycyjne + + + EnableMaster + Aktywuj Åšlad Tempo/Metrum + + + Info + Info + + + Off + WyÅ‚. + + + Enable + WÅ‚Ä…cz + + + Enable usage of master track + Aktywuj Åšlad Tempo/Metrum + + + + MetronomeConfigBase + + MusE: Metronome Config + MuzA: Konfiguracja Metronomu + + + Metronome + Metronom + + + Audio Beep + Audio Beep + + + MIDI Click + MIDI Klik + + + Midi Channel + KanaÅ‚ Midi + + + Measure Note + DźwiÄ™k 1 uderzenie w takcie + + + Measure Velocity + GÅ‚oÅ›ność 1 uderzenie w takcie + + + Beat Velocity + GÅ‚oÅ›ność pozostaÅ‚ych uderzeÅ„ metronomu + + + Beat Note + DźwiÄ™k pozostaÅ‚ych uderzeÅ„ metronomu + + + Midi Port + Numer Portu Midi + + + Precount + Nabicie tempa + + + enable + wÅ‚Ä…cz + + + Bars + Takty + + + From Mastertrack + Ze Å›ladu tempo/metrum (Mastertrack) + + + / + / + + + Signature + Metrum + + + Prerecord + Prerecord + + + Preroll + Preroll + + + &Apply + &Zastosuj + + + &OK + &Akceptuj + + + &Cancel + &Anuluj + + + + MidiController + + Velocity + GÅ‚oÅ›ność + + + + MidiControllerEditDialogBase + + Type + Typ + + + Properties + WÅ‚aÅ›ciwoÅ›ci + + + Type + Typ + + + &New + Neu + + + &Delete + &Kasuj + + + &OK + &AkceptujOK + + + &Cancel + &Anuluj + + + MusE: Define Midi Controller + MuzA: Zdefiniuj Midi Kontroler + + + &Add + &Dodaj + + + Alt+A + + + + create new entry + Stwórz nowy wpis + + + pressing the New button you create a new entry +in the MusE list of defined controllers + NaciÅ›nij Nowy żeby utworzyć nowy wpis do listy zdefiniowanych kontrolerów MuzA + + + delete selected entry + kasuj zaznaczone elementy + + + Predefined Controller: + Predefiniowany kontroler: + + + Name + nazwa + + + H-Ctrl + H-Ctrl + + + L-Ctrl + L-Ctrl + + + Min Val + Min. Wart. + + + Max Val + Max Wart. + + + list of defined controllers + Lista zdefiniowanych kontrolerów + + + This is the MusE list of defined controllers. + To jest lista MuzA zdefiniowanych midi kontrolerów. + + + Managed Controller for Port + ObsÅ‚ugiwane kontrolery dla portu + + + Channel + KanaÅ‚ + + + This is a list of commonly used midi controllers. +Note that in MusE pitch and program changes are +handled like normal controllers. + To jest lista najczęściej używanych kontorlerów midi. +Zauważ, że "pitch" i "zmiana programu (program change)" sÄ… traktowane w MuzA jako zwykÅ‚e kontrolery. + + + Name + Nazwa + + + Min Value + Min. Wart. + + + Max Value + Max Wart. + + + Control7 + Kontroler7 + + + Control14 + Kontroler14 + + + RPN + RPN + + + NRPN + NRPN + + + Pitch + Transpozycja + + + Program + Program + + + Midi Controller Number High Byte + Numer midi kontrolera High Byte + + + Midi Controller Number Low Byte + Numer midi kontrolera Low Byte + + + Range + Zakres + + + + MidiFilterConfigBase + + MusE: Midi Input Filter + Filtr WejÅ›cia Midi + + + Record Filter + Filtr Komunikatów Przych. (Midi In) + + + Note On + DźwiÄ™ki + + + Poly Pressure + Åšredni nacisk po uderzeniu + + + Controller + Kontrolery + + + Program Change + Zmiana programu (program change) + + + After Touch + Nacisk pod uderzeniu (aftertouch) + + + Pitch Bend + Odchylenie stroju (Pitch Bend) + + + Sysex + SysEx + + + Thru Filter + Filtr Komunikatów Wych. (Midi Thru) + + + Controller Filter + Filtruj Kontroler + + + Channel Filter + Filtruj KanaÅ‚ + + + 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 + + + + MidiInputTransformDialog + + New + Nowy + + + + MidiInputTransformDialogBase + + MusE: Midi Input Transformator + MuzA: Transformator WejÅ›cia Midi + + + Filter + Filtr + + + All + Wszystko + + + Equal + Równe + + + Unequal + Nierówne + + + Note + DźwiÄ™k + + + Poly Pressure + Åšredni nacisk po uderzeniu (Poly Pressure) + + + Control Change + Control Change + + + Aftertouch + Nacisk pod uderzeniu (aftertouch) + + + Pitch Bend + Odchylenie stroju (Pitch Bend) + + + NRPN + NRPN + + + RPN + RPN + + + Value 2 + Wartość 2 + + + Value 1 + Wartość 1 + + + Event Type + Rodzaje komunikatów midi + + + Ignore + Ignoruj + + + Higher + Powyżej + + + Lower + Poniżej + + + Inside + PomiÄ™dzy + + + Outside + Poza + + + Channel + KanaÅ‚ + + + Port + Port + + + Processing + Przetwarzanie + + + Keep + Pozostaw + + + Fix + Ustal + + + Plus + Plus + + + Minus + Minus + + + Multiply + Przemnóż + + + Divide + Podziel + + + Invert + Odwróć + + + ScaleMap + Zakres Skali + + + Flip + Odwróć + + + Dyn + Dyn + + + Random + Losowo + + + Modules + ModuÅ‚y + + + 1 + 1 + + + 2 + 2 + + + 3 + 3 + + + 4 + 4 + + + enable modul 1 + aktywuj moduÅ‚ 1 + + + enable modul 2 + aktywuj moduÅ‚ 2 + + + enable modul 3 + aktywuj moduÅ‚ 3 + + + enable modul 4 + aktywuj moduÅ‚ 4 + + + Preset + Ustawienie + + + Name: + Nazwa: + + + Comment: + Opis: + + + Function + Funkcja + + + &New + &Nowy + + + create new preset + Twórz nowe ustawienie + + + &Delete + &Kasuj + + + delete preset + kasuj ustawienie + + + &Dismiss + &Wyrzuć + + + PresetList + Lista UstawieÅ„ + + + + MidiPortRouteBase + + MusE: Midi Port Routing + MuzA: PoÅ‚Ä…czenia Portów Midi + + + Port 2 + Port 2 + + + Output + WyjÅ›cie + + + Input + WejÅ›cie + + + + MidiStrip + + VariationSend + VariationSend + + + Var + Var + + + ReverbSend + WysyÅ‚ka PogÅ‚osu + + + Rev + PogÅ‚. + + + ChorusSend + WysyÅ‚ka Chorusa + + + Cho + Chorus + + + off + WyÅ‚. + + + dB + dB + + + Pan/Balance + Pan/Równowaga + + + Pan + Pan + + + record + nagranie + + + mute + wycisz + + + pre fader listening + odsÅ‚uch przed tÅ‚umikiem + + + Route + PoÅ‚Ä…cznie + + + set routing + Ustaw poÅ‚Ä…czenie + + + Off + WyÅ‚. + + + Read + Czytaj + + + Touch + Dotknij + + + Write + Zapisz + + + automation type + typ automatyki + + + + MidiSyncConfigBase + + MusE: Midi Sync + MuzA: Synchronizacja Midi + + + Apply + Zastosuj + + + Ok + Akceptuj + + + Cancel + Anuluj + + + hour + godzina + + + h + godz. + + + minute + minuta + + + m + min. + + + second + sekunda + + + s + sek. + + + frame + ramka + + + f + r. + + + subframe + subramka + + + 24 + 24 + + + 25 + 25 + + + 30D + 30D + + + 30N + 30N + + + Id: + numer: + + + device id + numer urzÄ…dzenia + + + Port: + Port Midi + + + midi port + port midi + + + Sync Source + ŹródÅ‚o synchronizacji + + + accept MTC + akceptuj MTC + + + accept Midi Clock + akceptuj Zegar Midi + + + accept MMC + akceptuj MMC + + + Sync Gen + Generowanie synchronizacji + + + Midi Time Code (MTC) + Midi Time Code (MTC) + + + Midi Clock + Zegar Midi + + + Midi Machine Control (MMC) + Midi Machine Control (MMC) + + + Sync Mode + Rodzaj synchronizacji + + + Master + Urz. NadrzÄ™dne (master) + + + Slave + Urz. PodporzÄ…dkowane (slave) + + + all + wszystkie + + + MTC + MTC + + + Type: + Typ: + + + Offset: + Offset: + + + + MidiTrackInfoBase + + MusE: TrackInfo + Info o Å›ladzie + + + output channel + kanaÅ‚ wyjÅ›ciowy + + + all midi events are send to this output channel + wszystkie komunikaty midi sÄ… przekierowane do tego kanaÅ‚u + + + Track Info + Info o Å›ladzie + + + % + % + + + Track Name + Nazwa Åšladu + + + output port + port wyjÅ›ciowy + + + off + WyÅ‚. + + + change stereo position + zmieÅ„ panoramÄ™ + + + OCh. + KanaÅ‚ Wyjść + + + ??? + ??? + + + select instrument patch + wybierz ustawienie instrumentu + + + Transp. + Transpozycja + + + Volume + GÅ‚oÅ›ność + + + Channel Info + Info o kanale + + + Pan + Panorama + + + Delay + Opóźnienie + + + H-Bank + H-Bank + + + Compr. + Kompr. + + + L-Bank + L-Bank + + + Progr. + Nr programu + + + Velocity + PrÄ™dk. uderz. (vel) + + + Length + DÅ‚ugość + + + input ports + porty wejÅ›ciowe + + + IChan. + KanaÅ‚ WejÅ›c + + + input channels + kanaÅ‚y wejść. + + + 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 + Elementy ze wszystkich kanałów dÄ… nagrywane na ten Å›lad +Możesz okreÅ›lić wiÄ™cej niż jeden Å›lad do nagrywania: +1 2 3 nagrywaj z kanaÅ‚u 1 2 i 3 +1-3 tak samo +1-3-5 nagrywaj z kanaÅ‚u 1 2 3 i 5 + + + record: + Nagraj: + + + Rec + Ustawienie + + + add settings to song + naciÅ›nij w trakcie nagrywania aby zapisać na Å›ladzie + + + Bank Select LSB + Wybierz Bank LSB + + + Bank Select MSB + Wybierz Bank MSB + + + + MidiTransformDialogBase + + MusE: Midi Transformator + MuzA: Midi Transformator + + + &New + &Nowy + + + &Delete + &Kasuj + + + &Apply + &Zastosuj + + + &OK + &Akceptuj + + + &Cancel + &Anuluj + + + PresetList + Lista UstawieÅ„ + + + Processing + Przetwarzanie + + + Event Type + Rodzaje komunikatów midi + + + Keep + Pozostaw + + + Fix + Ustal + + + Note + DźwiÄ™ki + + + Poly Pressure + Åšredni nacisk po uderzeniu + + + Control Change + Control Change + + + Aftertouch + Nacisk pod uderzeniu (aftertouch) + + + Pitch Bend + Odchylenie stroju (Pitch Bend) + + + NRPN + NRPN + + + RPN + RPN + + + Plus + Plus + + + Minus + Minus + + + Multiply + Przemnóż + + + Divide + Podziel + + + Value 2 + Wartość 2 + + + Invert + Odwróć + + + ScaleMap + Zakres Skali + + + Flip + Odwróć + + + Dyn + Dyn. + + + Random + Losowo + + + Value 1 + Wartość 1 + + + Length + DÅ‚ugość: + + + Position + Pozycja + + + Filter + Filtruj + + + All + Wszystko + + + Equal + Równe + + + Unequal + Nnierówne + + + Ignore + Ignoruj + + + Higher + Powyżej + + + Lower + Poniżej + + + Inside + PomiÄ™dzy + + + Outside + Poza + + + Bar Range + Zakres Taktów + + + Preset + Ustawienie + + + Name: + Nazwa: + + + Comment: + Opis: + + + Range + Zakres + + + process all events + przetwórz wszystkie elementy + + + selected tracks + Zaznaczone Å›lady + + + inside loop + PomiÄ™dzy lokatorami. + + + Function + Opcje + + + Select + Wybierz + + + Quantize + Kwantyzuj + + + Delete + Kasuj + + + Transform + przekształć + + + Insert + Wstaw + + + Copy + Kopiuj + + + Extract + WydobÄ…dź + + + Quantize Value + Wartość kwantyzacji + + + + MidiTransformerDialog + + New + Nowy + + + + MixdownFileDialog + + Wave Files (*.wav);;All Files (*) + Pliki Wave (*.wav);;Wszystkie Pliki (*) + + + + MixdownFileDialogBase + + MusE: Set Mixdown Wavefile + MuzA: Ustaw miks do zgrania do pliku Wavefile + + + &OK + &Akceptuj + + + &Cancel + &Anuluj + + + File Path + Åšcieżka do pliku + + + Channel + Ilość Kanałów + + + Stereo + Stereo + + + Mono + Mono + + + 5.1 + 5.1 + + + wav,16 Bit + wav, 16 Bitów + + + wav, 24 Bit + wav, 24 Bity + + + wav, 32 Bit (float) + wav, 32 Bity (float) + + + Format + Format + + + + Mixer + + Port + Port + + + + MusE + + &File + &Plik + + + Open &Recent + Otwórz O&statnie + + + Save &As + Zapisz &Jako + + + Config &Printer + Druckerkonfiguration + + + Import Midifile + &Import Pliku Midi + + + Export Midifile + &Export do pliku midi + + + Import Wave File + Import Pliku &Wave + + + &Quit + &ZakoÅ„cz + + + &Edit + &Edycja + + + C&ut + W&ytnij + + + &Copy + &Kopiuj + + + &Paste + &Wklej + + + Delete Track + Spur Lschen + + + Add Track + Dodaj Åšlad + + + Select &All + Zaznacz &wszystko + + + &Deselect All + &Odznacz wszystko + + + Invert &Selection + Odwróć &zaznaczenie + + + &Inside Loop + &PomiÄ™dzy lokatorami. + + + &Outside Loop + &Poza obrÄ™bem lokatorów + + + All &Parts on Track + Wszystkie &klocki na Å›ladzie + + + Select + Zaznacz + + + Drums + Edytor Perkusji + + + List + Edytor Lista + + + Graphic + Edytor Graficzny Tempo/Metrum + + + Mastertrack + Åšlad Tempo/Metrum + + + Midi &Transform + &PrzeksztaÅ‚canie Midi + + + Modify Gate Time + Modyfikuj Gate Time + + + Modify Velocity + Modifikuj predkość uderzenia (velocity) + + + Crescendo + Crescendo + + + Transpose + Transponuj + + + Thin Out + Decresendo + + + Erase Event + Skasuj Element + + + Note Shift + PrzesuniÄ™cie DźwiÄ™ku + + + Move Clock + PrzesuÅ„ licznik + + + Copy Measure + Kopiuj Takt + + + Erase Measure + Skasuj Takt + + + Delete Measure + Skasuj Takt + + + Create Measure + Twórz Takt + + + Mix Track + Zmiksuj Åšlad + + + Midi + Midi + + + &Structure + &Globalne + + + Global Cut + Globalne WyciÄ™cie + + + Global Insert + Globalne Wstawienie + + + Global Split + Globalne Podzielenie + + + Copy Range + Kopiuj Zakres + + + Cut Events + Wytnij Elementy + + + Transport Panel + Panel transportu + + + Bigtime window + Duży Zegar + + + dont follow Song + nie podążaj za utworem + + + follow page + kursor siÄ™ przesuwa + + + follow continuous + takty siÄ™ przesuwajÄ… (kursor stoi) + + + Global Settings + Globalne Ustawienia + + + follow song + podążanie kursora za utworem + + + Metronome + Metronom + + + Midi Sync + Synchronizacja Midi + + + Appearance settings + Ustawienia wyglÄ…du + + + Midi Input Transform + PrzeksztaÅ‚canie WejÅ›cia Midi + + + Midi Input Filter + Filtr WejÅ›cia Midi + + + Midi Remote Control + Zdalne Sterowanie Midi + + + Random Rhythm Generator + Losowy generator rytmu + + + &Midi + &Midi + + + Mixer + Mikser + + + Input Plugins + Wtyczki wejÅ›cia + + + Reset Instr. + Reset Instr. + + + Init Instr. + Inicjalizacja Instr. + + + local off + local off + + + &Audio + &Audio + + + Bounce to Track + +Zgrywanie Å›ladu (bounce) + + + Bounce to File + Zgrywanie do Pliku (bounce) + + + &Help + P&omoc + + + Browser + Browser + + + About&Qt + Informacje o &Qt + + + MusE: load project + MuzA: Å‚aduj utwór + + + The current Project contains unsaved data +Save Current Project? + Otwarty utwór zawiera niezapisane dane +Zapisać otwarty utwór? + + + &Save + &Zapisz + + + &Nosave + &Nie zapisuj + + + &Abort + &Anuluj + + + MusE: Save As + MuzA: Zapisz Jako + + + Nothing to edit + Nie ma nic do edytowania + + + The current Project contains unsaved data +Load overwrites current Project: +Save Current Project? + Otwarty utwór zawiera niezapisane dane. +ZaÅ‚adowanie nadpisze otwarty utwór: +Zapisać otwarty utwór? + + + &Overwrite + &Nadpisz + + + no help found at: + nie znalezniono pomocy + + + MusE: Open Help + MuzA: Otwórz Pomoc + + + UndoRedo + CofnijPonów + + + undo + cofnij + + + Und&o + Co&fnij + + + redo + cofnij + + + Re&do + Co&fnij + + + undo last change to song + cofnij ostatniÄ… zmianÄ™ w utworze + + + redo last undo + ponów ostanie cofnij + + + Transport + Panel transportu + + + loop + pÄ™tla + + + Loop + PÄ™tla + + + punchin + wÅ‚Ä…cz wcinki (punch In) + + + Punchin + WÅ‚Ä…cz wcinki (punch In) + + + punchout + wyÅ‚. wcinki (punch out)punchout + + + Punchout + WyÅ‚. wcinki (punch out) + + + start + PoczÄ…tek + + + Start + PoczÄ…tek + + + rewind + PrzewiÅ„ do tyÅ‚u + + + Rewind + PrzewiÅ„ do tyÅ‚u + + + forward + PrzewiÅ„ do przodu + + + Forward + PrzewiÅ„ do przodu + + + stop + Stop + + + Stop + Stop + + + play + Odtwarzaj + + + Play + Odtwarzanie + + + record + Nagrywaj + + + Record + Nagrywanie + + + panic + Zatrzymaj wszystkie komunikaty midi! + + + Panic + Zatrzymaj wszystkie komunikaty midi! + + + new + nowy + + + &New + &Nowy + + + open + otwórz + + + &Open + &Otwórz + + + save + Zapisz + + + pianoroll + Pianoroll + + + Pianoroll + Pianoroll + + + marker + znacznik + + + Marker + Edytor Znaczników + + + File Buttons + Przyciski Menu Plik + + + Unknown File Format + Nieznany Format Pliku + + + MusE: Write File failed + MuzA: Zapis pliku nie powiódÅ‚ siÄ™ + + + MusE: Song: + MuzA: Utwór + + + MusE: Copy Range + Kopiuj Zakres + + + not implemented + jeszcze nie wprowadzone + + + MusE: Cut Events + MuzA: Wytnij Elementy + + + MusE: Bounce to Track + MuzA: Zgrywanie (bounce) do Åšladu + + + more than one target track selected + wiÄ™cej niż jeden docelowy Å›lad jest zaznaczony + + + wrong target track type, +select wave track as target + zÅ‚y typ Å›ladu docelowego +zaznacz Å›lad audio jako docelowy + + + no target track selected + nie zaznaczono żadnego Å›ladu + + + to import a audio file you have first to selecta wave track + aby zaimpotować plik audio, najpierw zaznacz Å›lad audio + + + Delete Selected Tracks + Skasuj Zaznaczone Åšlady + + + View + &Widok + + + Edit Instrument + Edytuj Instrument + + + Restart Audio + Zrestartuj Audio + + + Automation + Au&tomatyka + + + Mixer Automation + Automatyka Miksera + + + Take Snapshot + Zrób zrzut ekranu + + + Clear Automation Data + Wyczyść automatykÄ™ + + + Settings + &Ustawienia + + + Configure shortcuts + Konfiguracja skrótów + + + Midi File Export + Export do pliku midi + + + Midi Ports / Soft Synth + Porty Midi i Syntezatory Softowe + + + &Manual + &Instrukcja ObÅ‚sugi + + + &MusE homepage + strona domowa &MuzA + + + &Report Bug... + &ZgÅ‚oÅ› BÅ‚Ä…d... + + + &About MusE + &Informacje o programie + + + What's &This? + Co &To? + + + Cannot read template + Nie można odczytać pliku szablonu + + + File open error + BÅ‚Ä…d odczytu pliku + + + File read error + bÅ‚Ä…d odczytu pliku + + + MusE: load template + MuzA: Å‚aduj szablon + + + MusE: Bounce + MuzA: Zgrywanie (bounce) + + + set left/right marker for bounce range + ustaw lokatory do zgrania (bounce) danego zakresu + + + MusE: Bounce to File + MuzA: Zgrywanie (bounce) do Pliku + + + no output track found + nie znaleziono Å›ladu wyjÅ›ciowego + + + MusE: Export Midi + MuzA: Exportuj Midi + + + MusE: Import Midi + MuzA: Importuj Midi + + + Add midi file to current project? + + Dodać plik midi do otwartego utworu? + + + &Add to Project + &Dodaj do utworu + + + &Replace + &ZastÄ…p + + + reading midifile + + czytanie pliku midi + + + +failed: + nie powiodÅ‚o siÄ™ + + + + NoteInfo + + Start + Pozycja + + + Len + DÅ‚ugość + + + Pitch + Wysokość dźwiÄ™ku + + + Velo On + PrÄ™dk. uderz. + + + Velo Off + PrÄ™dk. puszcz. + + + Note Info + Info o dźwiÄ™ku + + + + PageSettings + + Track Name + Spur Name + + + + PartCanvas + + C&ut + &Wytnij + + + &Copy + &Kopiuj + + + rename + zmieÅ„ nazwÄ™ + + + delete + kasuj + + + split + podziel + + + glue + sklej + + + pianoroll + pianoroll + + + list + edytor lista + + + drums + edytor perkusja + + + Cannot copy/move/clone to different Track-Type + Nie można skopiować/przenieść/sklonować do innego typu Å›ladu + + + color + kolor + + + de-clone + sklonuj + + + wave edit + edycja audio + + + Cannot paste: multiple tracks selected + Nie można wkleić: zaznaczono kilka Å›ladów + + + Cannot paste: no track selected + Nie można wkleić: nie zaznaczono żadnych Å›ladów + + + Cannot paste: wrong data type + Nie można wkleić: nieprawidÅ‚owy typ danych + + + Can only paste to midi/drum track + Można tylko wkleić do Å›ladu midi, lub perkusji + + + Can only paste to wave track + Można wkleić tylko do Å›ladu audio + + + + PatchBay + + MusE: ALSA MIDI Patch Bay + MuzA: krosownica ALSA MIDI + + + + PatchBayBase + + ALSA Patch Bay + krosownica ALSA + + + + PianoRoll + + &Edit + &Edycja + + + Cut + Wytnij + + + Copy + Kopiuj + + + Paste + Wklej + + + Delete Events + Kasuj Elementy + + + Select All + Zaznacz wszystko + + + Select None + Bez zaznaczenia + + + Invert + Odwróć zaznaczenie + + + Inside Loop + PomiÄ™dzy lokatorami. + + + Outside Loop + Poza obrÄ™bem lokatorów + + + &Select + &Zaznacz + + + blue + niebieski + + + pitch colors + kolory wysokoÅ›ci dźwiÄ™ków + + + velocity colors + kolory predkoÅ›ci uderzenia (velocity) + + + &Config + &Konfiguracja + + + event color + kolor elementu + + + &Functions + &Opcje + + + Over Quantize + Inteligentna kwantyzacja do najbliższej dozw. poz. (w tym samym kierunku) + + + Note On Quantize + Kwantyzacja do najbl. dozwolonej pozycji + + + Note On/Off Quantize + Kwantyzacja pocz i koÅ„ca dźwiÄ™ku + + + Iterative Quantize + Przesuwana Kwantyzacja + + + Pianoroll Tools + NarzÄ™dzia Pianoroll + + + Step Record + Nagrywanie krok po kroku + + + Midi Input + WejÅ›cie Midi + + + Play Events + PodglÄ…d midi + + + Add Controller View + Dodaj wykres kontorolera + + + Config Quant... + Konfiguruj kwantyzacjÄ™ + + + Modify Gate Time + Modyfikuj czas bramki + + + Modify Velocity + Modyfikuj predkość uderzenia (velocity) + + + Crescendo + Crescendo + + + Transpose + Transponuj + + + Thin Out + Decresendo + + + Erase Event + Skasuj element + + + Note Shift + PrzesuÅ„ dźwiÄ™k + + + Move Clock + PrzesuÅ„ zegar + + + Copy Measure + Kopiuj takt + + + Erase Measure + Wyczyść takt + + + Delete Measure + Kasuj takt + + + Create Measure + Stwórz takt + + + ctrl + kontr. + + + + PluginDialog + + Ok + Akceptuj + + + Cancel + Anuluj + + + MusE: select plugin + MuzA: wybierz wtyczkÄ™ + + + Lib + Bibl. + + + Label + Etykieta + + + Name + Nazwa + + + AI + AI + + + AO + AO + + + CI + CI + + + CO + CO + + + IP + IP + + + id + numer + + + Maker + Znacznik + + + Copyright + Prawa autorskie + + + Select which types of plugins should be visible in the list,<br>beware that 'all' includes plugins that probably are not usable by MusE. + Wybierz, które wtyczki majÄ… być widoczne na liÅ›cie, zwróć uwagÄ™, że nie wszysktie mogÄ… być używane przez MuzA. + + + Stereo and Mono + Stereo i Mono + + + Stereo + Stereo + + + Mono + Mono + + + All + Wszystko + + + + PluginGui + + bypass plugin + omiÅ„ wtyczkÄ™ (bypass) + + + MusE: load preset + MuzA: zaÅ‚aduj ustawienie + + + MusE: save preset + MuzA: zapisz ustawienie + + + File Buttons + Przyciski Menu Plik + + + Load Preset + ZaÅ‚aduj Ustawienie + + + Save Preset + Zapisz ustawienie + + + + QHeader + + Port Number + Numer portu + + + enable gui for device + UdostÄ™pnij interfejs dla urzÄ…dzenia + + + Instrument connected to port + Instrument poÅ‚Ä…czony do portu + + + State: result of opening the device + Status: rezultat otworzenia urzÄ…dzenia + + + mute instrument + wyÅ‚Ä…cz instrument + + + sound name + nazwa brzmienia + + + quantisation +currently not used + kwantyzacja nie jest aktualnie używana + + + this input note triggers the sound + ta wysokość uruchamia brzmienie + + + note length + dÅ‚ugość dźwiÄ™ku + + + this note is send for the sound + ta wysokość jest wysÅ‚ana do brzmienia + + + output channel +currently not used + kanaÅ‚ wyjÅ›ciowy jest aktualnie nie używany + + + output port +currently not used + port wyjÅ›ciowy jest aktualnie nie używany + + + velocity level 1 + poziom predkoÅ›ci uderzenia (velocity) 1 + + + velocity level 2 + poziom predkoÅ›ci uderzenia (velocity) 2 + + + velocity level 3 + poziom predkoÅ›ci uderzenia (velocity) 3 + + + velocity level 4 + poziom predkoÅ›ci uderzenia (velocity) 4 + + + quantisation + kwantyzacja + + + output channel + kanaÅ‚ wyjÅ›ciowy + + + output port + port wyjÅ›ciowy + + + Enable Recording + UdostÄ™pnij nagrywanie + + + Mute Indicator + WyÅ‚Ä…cz wzkaźnik + + + Solo Indicator + Solo Wzkaźnik + + + Track Type + Typ Å›ladu + + + Track Name + Nazwa Å›ladu + + + Output Channel Number + Numer kanaÅ‚u wyjÅ›ciowego + + + Output Port + Port wyjsciowy + + + Time Lock + Zablokuj Åšlad + + + Solo/Pre Fader Listening + Solo/ OdsÅ‚uch przed tÅ‚umikiem + + + Name of the midi device associated with this port number + Nazwa urzÄ…dzenia midi skojarzona z tym numerem portu + + + enables reading from device + Pozwala na odczyt z urzÄ…dzenia + + + enables writing to device + Pozwala na zapis do urzÄ…dzenia + + + + QWidget + + Cannot convert sysex string + Nie można przekonwertować Å‚aÅ„cucha sysex + + + Hex String too long (2048 bytes limit) + ÅaÅ„cuch Hex za dÅ‚ugi (limit 2048 bajtów) + + + new + nowy + + + create peakfile for + stwórz plik szczytu dla + + + MusE: get file name + MuzA: weź nazwÄ™ pliku + + + the directory + + katalog + + + +does not exist +create? + nie istnieje +utworzyć? + + + &Create + &Twórz + + + Cancel + Anuluj + + + MusE: create directory + MuzA: utwórz katalog + + + creating dir failed + tworzenie katalogu nie powiodÅ‚o siÄ™ + + + File + + Plik + + + +exists + istnieje + + + MusE: write + MuzA: zapis: + + + Overwrite + Nadpisz + + + Quit + Wyjdź + + + Open File + + Otwórz plik + + + +failed: + nie udane + + + MusE: Open File + MuzA: Otwórz plik + + + None + Brak + + + generic midi + generyczne midi + + + + QuantConfig + + Config Quantize + Konfiguruj KwantyzacjÄ™ + + + Strength + SiÅ‚a + + + Don´t Quantize + Nie kwantyzuj + + + Quant Len + Wartość kwantyzacji + + + MusE: Config Quantize + MuzA: Konfiguracja kwantyzacji + + + + RhythmBase + + MusE: Random Rhythm Generator + MuzA: Generator Losowego Rytmu + + + Instrument Properties + WÅ‚aÅ›ciwoÅ›ci Instrumentu + + + counts/bar + ilość taktów + + + steps/count + ilość kroków + + + # bars + # takty + + + test + test + + + contrib + contrib + + + randomize + ustaw w przypadkowej kolejnoÅ›ci + + + Group 1 + Grupa 1 + + + Group 2 + Grupa 2 + + + Group 3 + Grupa 3 + + + Group 4 + Grupa 4 + + + Group 5 + Grupa 5 + + + listen + sÅ‚uchaj + + + Instrument + Instrument + + + Group + Grupa + + + &New + &Nowy + + + create new entry + stwórz nowy wpis + + + pressing the New button you create a new entry +in the MusE list of defined controllers + naciÅ›nij przycisk Nowy aby utworzyć wpis na lisćie zdefiniowanych kontrolerów + + + &Delete + &Kasuj + + + delete selected entry + kasuj zaznaczone elementy + + + Up + W góre + + + Down + W dół + + + Instrument + Instrument + + + steps/count + kroki/liczy + + + list of defined controllers + Lista zdefiniowanych kontrolerów + + + This is the MusE list of defined controllers. + To jest lista MuzA zdefiniowanych midi kontrolerów. + + + &File + &Plik + + + &Edit + &Edytuj + + + &Help + P&omoc + + + Tools + NarzÄ™dzia + + + New + Nowy + + + Open + Otwórz + + + &Open... + &Otwórz... + + + Save + Zapisz + + + &Save + &Zapisz + + + Save As + Zapisz jako + + + Save &As... + Zapisz &Jako... + + + Print + Drukuj + + + &Print... + &Drukuj + + + Exit + ZakoÅ„cz + + + E&xit + &ZakoÅ„cz + + + Undo + Cofnij + + + &Undo + &Cofnij + + + Redo + Ponów + + + &Redo + &Ponów + + + Cut + Wytnij + + + &Cut + &Wytnij + + + Copy + Kopiuj + + + C&opy + &Kopiuj + + + Paste + Wklej + + + &Paste + &Wklej + + + Find + Szukaj + + + &Find... + &Szukaj + + + Contents + Spis treÅ›ci + + + &Contents... + &Spis treÅ›ci + + + Index + Indeks + + + &Index... + &Indeks + + + About + O programie + + + &About... + &O programie + + + <b>Notice!</b><br> +Random Rhythm Generator is not enabled yet! + <b>Zauważ!</b><br> +Losowy Generator Rytmu jeszcze nie jest udostÄ™pniony! + + + 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 + + + + RhythmGenerator + + Instrument Settings: + Instrument Einstellungen + + + add + Zufgen + + + delete + Entfernen + + + Group + Gruppe + + + + + + + + RouteDialogBase + + MusE: Routing + MuzA: Konfiguracja poÅ‚Ä…czeÅ„ + + + Add Route + Dodaj poÅ‚Ä…czenie + + + Source: + ŹródÅ‚o: + + + Destination: + Odbiornik: + + + Connect + PoÅ‚Ä…cz + + + connect source to destination + poÅ‚Ä…cz źródÅ‚o do odbiornika + + + Current Routes + Aktualne poÅ‚Ä…czenia + + + Source + ŹródÅ‚o + + + Destination + Odbiornik + + + Remove + UsuÅ„ + + + remove selected route + UsuÅ„ wybrane poÅ‚Ä…czenie + + + + ScrollScale + + next page + nastÄ™pna strona + + + previous page + poprzednia strona + + + current page number + aktualny numer strony + + + + ShortcutCaptureDialogBase + + Enter shortcut sequence + Wprowadź skrót - kominacjÄ™ klawiszy + + + Press keys to enter shortcut sequence! + NaciÅ›nij kombinacjÄ™ klawiszy by wprowadzić skrót! + + + Old shortcut: + Stary skrót + + + Undefined + Niezdefiniowany + + + New shortcut: + Nowy skrót + + + OK + Akceptuj + + + Cancel + Anuluj + + + + ShortcutConfigBase + + Configure Keyboard Shortcuts + Konfiguruj Skróty Klawiaturowe + + + Shortcut Category + Kategoria Skrótu + + + Description + Opis + + + Shortcut + Skrót + + + &Clear + &Wyczyść + + + Alt+C + Alt+C + + + &Define + &Zdefiniuj + + + Alt+D + Alt+D + + + &Apply + &Zastosuj + + + Alt+A + Alt+A + + + + SigScale + + signature scale + oÅ› metrum + + + + SynthConfigBase + + MusE: Synth Configuration + MuzA: Konfiguracja Syntezatora Softowego + + + Soft Synthesizer + Syntezator Softowy + + + File + Plik + + + Instances + UrzÄ…dzenia + + + Name + Nazwa + + + list of available software synthesizers + lista wszystkich dostÄ™pnych syntezatorów softowych + + + Add Instance + Dodaj urzÄ…dzenie + + + Remove Instance + UsuÅ„ urzÄ…dzenie + + + Midi Port + Port Midi + + + Midi connections + PoÅ‚Ä…czenia midi + + + Inst + Instr. + + + Version + Wersja + + + Description + Opis + + + + TList + + Midi + Midi + + + Drum + Perkusja + + + Delete Track + Kasuj Åšlad + + + Track Comment + Opis Åšladu + + + Show Gui + Pokaż interfejs użytkownika + + + Add Midi Track + Dodaj Å›lad midi + + + Add Drum Track + Dodaj Å›lad perkusyjny + + + Add Wave Track + Dodaj Å›lad audio + + + MusE: bad trackname + MuzA: zÅ‚a nazwa Å›ladu + + + please choose a unique track name + proszÄ™ wybrać niepowtarzalnÄ… nazwÄ™ dla Å›ladu + + + Add Output + Dodaj wyjÅ›cie audio + + + Add Group + Dodaj szynÄ™ audio + + + Add Input + Dodaj wejÅ›cie audio + + + Add Aux Send + Dodaj wysyÅ‚kÄ™ na efekty + + + Update drummap? + Zaktualizować zestaw perkusyjny? + + + Do you want to use same port for all instruments in the drummap? + Czy chcesz używać jednego portu midi dla wszystkich instrumentów w zestawie perkusyjnym? + + + &Yes + &Tak + + + &No + &Nie + + + Do you want to use same port and channel for all instruments in the drummap? + Czy chcesz używać jednego portu i jednego kanaÅ‚u dla wszystkich instrumentów w zestawie perkusyjnym? + + + + TempoSig + + Tempo/Sig + Tempo/Metrum + + + + Toolbar1 + + Solo + Solo + + + Snap + PrzyciÄ…ganie + + + Quantize + Kwantyzacja + + + To + Zakres + + + All Events + Wszytkie Elementy + + + Looped Ev. + PomiÄ™dzy lokatorami + + + Selected Ev. + Zaznaczone Elementy + + + Looped+Sel. + Zaznaczone + PomiÄ™dzy lokatorami + + + Cursor + Kursor + + + + TrackComment + + MusE: Track Comment + MuzA: Opis Åšladu + + + Track Comment: + Opis Åšladu + + + + Transport + + Punch In + WÅ‚Ä…cz wcinki (punch In) + + + Loop + PÄ™tla + + + Punch Out + WyÅ‚. wcinki (punch out) + + + Left Mark + Lewy Lokator + + + Right Mark + Prawy Lokator + + + Overdub + Dogrywanie + + + Replace + ZastÄ™powania + + + Rec Mode + Typ Nagrywania + + + Normal + Normalny + + + Mix + Miks + + + Cycle Rec + ZapÄ™tl nagrywanie + + + punchin + wÅ‚Ä…cz wcinki (punch In) + + + loop + pÄ™tla + + + punchout + wyÅ‚. wcinki (punch out)punchout + + + rewind to start + przewiÅ„ do poczÄ…tku + + + rewind + przewijaj do tyÅ‚u + + + forward + przewijaj do przodu + + + stop + stop + + + play + odtwarzanie + + + record + nagrywanie + + + AC + Aut. Kw. + + + quantize during record + kwantyzuj podczas nagrywania + + + Click + Metronom + + + metronom click on/off + wÅ‚Ä…cz/wyÅ‚Ä…cz metronom + + + Sync + Synch. + + + external sync on/off + synchronizowanie do zewn. urz. + + + Master + Åšlad Tempo/Metrum + + + use master track + Używaj Å›ladu tempo/metrum + + + + TransposeDialogBase + + MusE: Midi Transpose + MuzA: Transponuj Midi + + + Value + Wartość + + + halftones + Półtony + + + Time + Zakres + + + all + Wszystko + + + between markers + PomiÄ™dzy znacznikami + + + Parts + Klocki + + + all in selected tracks + Wszystko na zaznaczonych Å›ladach + + + OK + Akceptuj + + + Cancel + Anuluj + + + + VelocityBase + + MusE: Modify Velocity + MuzA: Modyfikuj predkość uderzenia (velocity) + + + Range + Zakres + + + All Events + Wszytkie Elementy + + + Selected Events + Zaznaczone Elementy + + + Looped Events + PomiÄ™dzy lokatorami + + + Selected & Looped + Zaznaczone & PomiÄ™dzy lokatorami + + + Values + Wartość + + + Rate: + CzÄ™stotliwość: + + + Offset: + Offset: + + + % + % + + + OK + Akceptuj + + + Cancel + Anuluj + + + + WTScale + + bar scale + oÅ› taktów + + + + WaveEdit + + Normalize + Normalizuj + + + weTools + NarzÄ™dzia audio + + + Solo + Solo + + + Cursor + Kursor + + + &File + &Plik + + + Functions + Opcje + + + + WaveTrackInfoBase + + MusE: TrackInfo + MuzA: Info o Å›ladzie + + + Track Info + Info o Å›ladzie + + + Track Name + Nazwa Åšladu + + + Output Route: + poÅ‚Ä…czenie WyjÅ›cia + + + Input Route: + poÅ‚Ä…czenie wejÅ›cia + + + Ports: + Porty + + + Mono + Mono + + + Stereo + Stereo + + + + diff --git a/muse2/share/locale/muse_ru.qm b/muse2/share/locale/muse_ru.qm new file mode 100644 index 00000000..76268c00 Binary files /dev/null and b/muse2/share/locale/muse_ru.qm differ diff --git a/muse2/share/locale/muse_ru.ts b/muse2/share/locale/muse_ru.ts new file mode 100644 index 00000000..141827d4 --- /dev/null +++ b/muse2/share/locale/muse_ru.ts @@ -0,0 +1,7466 @@ + + + + + Click this button to enable recording + Ðажмите Ñту клавишу Ð´Ð»Ñ Ð½Ð°Ñ‡Ð°Ð»Ð° запиÑи + + + sets amount of quantization: +0 - no quantization +100 - full quantization + уÑтанавливает объём квантованиÑ:(new line) +0 - без квантованиÑ(new line) +100 - полное квантование + + + select Pointer Tool: +with the pointer tool you can: + select parts + move parts + copy parts + выбрать инÑтрумент "Указатель":(new line) +при помощи ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»Ñ Ð¼Ð¾Ð¶Ð½Ð¾:(new line) + выделÑÑ‚ÑŒ чаÑти(new line) + перемещать чаÑти(new line) + копировать чаÑти + + + + @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 + Ðажмите Ñту кнопку Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð²Ð¿ÐµÑ€Ñ‘Ð´ + + + don't quantize notes above this tick limit + не квантовать ноты выше Ñтого предела тиков + + + quantize also note len as 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. + Ðажмите Ñту кнопку Ð´Ð»Ñ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ <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-каналы + + + select Pencil Tool: +with the pencil tool you can: + create new parts + modify length of parts + выбрать инÑтрумент "Карандаш": +при помощи карандаша можно: + Ñоздавать новые чаÑти + изменÑÑ‚ÑŒ продолжительноÑÑ‚ÑŒ чаÑтей + + + select Delete Tool: +with the delete tool you can delete parts + выбрать инÑтрумент "Стёрка": +при помощи Ñтёрки можно удалÑÑ‚ÑŒ чаÑти + + + select Cut Tool: +with the cut tool you can split a part + выбрать инÑтрумент "Ðожницы": +при помощи ножниц можно разделÑÑ‚ÑŒ чаÑти + + + select Glue Tool: +with the glue tool you can glue two parts + выбрать инÑтрумент "Клей": +при помощи ÐºÐ»ÐµÑ Ð¼Ð¾Ð¶Ð½Ð¾ объединÑÑ‚ÑŒ чаÑти + + + select Score Tool: + + выбрать редактор партитур: + + + + select Quantize Tool: +insert display quantize event + выбрать инÑтрумент "Квантование": +вÑтавить отображение квантуемых Ñобытий + + + select Drawing Tool + выбрать инÑтрумент "РиÑование" + + + select Muting Tool: +click on part to mute/unmute + выбрать инÑтрумент "Глушитель": +click on part to mute/unmute + + + pointer + Указатель + + + pencil + Карандаш + + + cutter + Ðожницы + + + score + Партитура + + + glue + Клей + + + quantize + Квантователь + + + draw + РиÑование + + + mute parts + приглушить чаÑти + + + Off + Выкл + + + 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 поÑыл + + + eraser + ЛаÑтик + + + + AboutBox + + AboutBox + + + + Keep On Rocking! + + + + Version 0.7.2pre3 + +(C) Copyright 1999-2005 Werner Schweer and others. +See http://www.muse-sequencer.org for new versions and +more information. + +Published under the GNU Public License + Version 0.7.2pre3 + +(C) Copyright 1999-2005 Werner Schweer и другие. +Сходите на http://www.muse-sequencer.org за +новой верÑией или подробноÑÑ‚Ñми + +Опубликовано на уÑловиÑÑ… GNU Public License + + + + Appearance + + MusE: load image + MusE: загрузить изображение + + + + AppearanceDialogBase + + MusE: Appearance settings + MusE: ÐаÑтройки облика + + + Apply + Применить + + + Ok + 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 + Цвета + + + Items + + + + 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 + + Arranger + Компоновщик + + + Cursor + КурÑор + + + Off + Выкл + + + Bar + Деление + + + Snap + ПривÑзка + + + Len + Длн + + + Type + Тип + + + NO + ÐЕТ + + + GM + GM + + + GS + GS + + + XG + XG + + + midi song type + тип midi-композиции + + + Pitch + Ð’Ñ‹Ñота тона + + + midi pitch + midi выÑота тона + + + global midi pitch shift + + + + Tempo + Темп + + + midi tempo + MIDI-темп + + + N + + + + TrackInfo + + + + R + + + + M + M + + + S + + + + C + + + + Track + Дорожка + + + O-Port + Ð’Ñ‹Ñ…. порт + + + Ch + К + + + T + + + + + AudioMixerApp + + MusE: Mixer + MusE: микшер + + + &Create + &Создать + + + &View + &Вид + + + Routing + Маршруты + + + + AudioStrip + + panorama + Панорама + + + aux send level + Уровень Aux поÑыла + + + off + выкл + + + Pan + Пан + + + 1/2 channel + 1/2 канала + + + Pre + + + + pre fader - post fader + + + + dB + Дб + + + record + ЗапиÑать + + + mute + Приглушить + + + record downmix + + + + solo mode (monitor) + + + + pre fader listening + + + + iR + + + + intput routing + + + + oR + + + + output routing + роутинг выхода + + + Off + + + + Read + + + + Touch + + + + Write + + + + automation type + + + + Channel + Канал + + + + BigTime + + MusE: Bigtime + MusE: Bigtime + + + + ClipListEdit + + MusE: Clip List Editor + MusE: Редактор ÑпиÑка фрагментов + + + + ClipListEditorBase + + MusE: ClipList + MusE: СпиÑок фрагментов + + + Name + Ð˜Ð¼Ñ + + + Refs + + + + Start + Ðачало + + + Len + Длн + + + Data + Данные + + + Clip Properties + СвойÑтва фрагмента + + + Pos: + Поз.: + + + Len: + Длн.: + + + + CommentBase + + Form1 + Form1 + + + Track Comment + Комментарий к дорожке + + + Track 1 + Дорожка 1 + + + + ConfigMidiFileBase + + MusE: Config Midi File Export + + + + &OK + + + + &Cancel + + + + 0 (single track) + + + + 1 (multiple tracks) + + + + Format: + + + + 96 + 96 + + + 192 + 192 + + + 384 + 384 + + + Division: + + + + Copyright: + + + + Enable extended smf format + Разрешить раÑширенный формат SMF + + + + CtrlPanel + + Sel + Выбр + + + select controller + выбрать контроллер + + + x + x + + + remove panel + удалить панель + + + Velocity + СкороÑÑ‚ÑŒ + + + add new ... + Добавить новый... + + + + DeicsOnzeGui + + Delete preset + Удалить преÑет + + + Do you really want to delete %1 ? + Ð’Ñ‹ дейÑтвительно хотите удалить %1 ? + + + &Yes + &Да + + + &No + &Ðет + + + + DeicsOnzeGuiBase + + DeicsOnze + DeicsOnze + + + &Presets + &ПреÑеты + + + Load + Загрузить + + + Save + Сохранить + + + Preset Name + Ð˜Ð¼Ñ Ð¿Ñ€ÐµÑета + + + INIT VOICE + + + + Subcategory + ÐŸÐ¾Ð´ÐºÐ°Ñ‚ÐµÐ³Ð¾Ñ€Ð¸Ñ + + + NONE + + + + Category + ÐšÐ°Ñ‚ÐµÐ³Ð¾Ñ€Ð¸Ñ + + + Delete + Удалить + + + Preset + ПреÑет + + + New + Ðовый + + + Bank + Банк + + + Bank numerous + + + + Prog + Программа + + + Program numerous + + + + DeicsOnze v0.2.2 Copyright (c) 2004 Nil Geisweiller under GPL licence + DeicsOnze v0.2.2 Copyright (c) 2004 Nil Geisweiller на уÑловиÑÑ… GPL licence + + + &Global + + + + Master Volume + + + + Master volume + + + + feedback + + + + Coarse Ratio + + + + Feedback of Op 4 + + + + Function + Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ + + + POLY + + + + MONO + + + + PBR + + + + Pitch Bend Range + + + + LFO + + + + PMS + + + + PMD + + + + AMD + + + + Speed + СкороÑÑ‚ÑŒ + + + Delay + Задержка + + + AMS + + + + Saw Up + + + + Square + + + + Triangl + + + + S/Hold + + + + LFO Waveform + + + + LFO Sync + + + + Amplitude Modulation Sensitivity + + + + Pitch Modulation Sensitivity + + + + Pitch Modulation Depth + + + + LFO Speed + + + + LFO Delay + + + + Transpose and Global Detune + + + + Transpose + ТранÑпонировать + + + Global Detune + + + + Algorithm 1 + + + + Algorithm 2 + + + + Algorithm 3 + + + + Algorithm 4 + + + + Algorithm 5 + + + + Algorithm 6 + + + + Algorithm 7 + + + + Algorithm 8 + + + + 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> + + + + Op &1 + + + + Frequency 1 + + + + FIX + + + + Coarse 1 + + + + Fine 1 + + + + Freq 1 + + + + Fine Ratio + + + + Fixed Frequency + + + + Envelope 1 + + + + RR1 + + + + D1R1 + + + + D1L1 + + + + D2R1 + + + + 1° Decay Level + + + + 2° Decay Rate + + + + 1° Decay Rate + + + + Release Rate + + + + AR1 + + + + Attack Rate + + + + Scaling 1 + + + + LS1 + + + + RS1 + + + + Level Scaling + + + + Attack Rate of the operator 1 + + + + Rate Scaling + + + + Vol 1 + + + + Volume + ГромкоÑÑ‚ÑŒ + + + Sensitivity 1 + + + + EBS1 + + + + KVS1 + + + + AME1 + + + + Amplitude Modulation Enable + + + + Key Velocity Sensitivity + + + + EG Bias Sensitivity + + + + Detune Wave EGShift 1 + + + + Wave1 + + + + Wave2 + + + + Wave3 + + + + Wave4 + + + + Wave5 + + + + Wave6 + + + + Wave7 + + + + Wave8 + + + + 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> + + + + DET1 + + + + 96dB + + + + 48dB + + + + 24dB + + + + 12dB + + + + EG Shift + + + + Detune + + + + Op &2 + + + + Frequency 2 + + + + Freq 2 + + + + Fine 2 + + + + Coarse 2 + + + + Envelope 2 + + + + AR2 + + + + RR2 + + + + D2R2 + + + + D1L2 + + + + D1R2 + + + + Scaling 2 + + + + LS2 + + + + RS2 + + + + Vol 2 + + + + Sensitivity 2 + + + + EBS2 + + + + KVS2 + + + + AME2 + + + + Detune Wave EGShift 2 + + + + DET2 + + + + Op &3 + + + + Frequency 3 + + + + Coarse 3 + + + + Fine 3 + + + + Freq 3 + + + + Envelope 3 + + + + RR3 + + + + D2R3 + + + + D1L3 + + + + D1R3 + + + + AR3 + + + + Scaling 3 + + + + LS3 + + + + RS3 + + + + Vol 3 + + + + Sensitivity 3 + + + + EBS3 + + + + KVS3 + + + + AME3 + + + + Detune Wave EGShift 3 + + + + DET3 + + + + Op &4 + + + + Frequency 4 + + + + Coarse 4 + + + + Fine 4 + + + + Freq 4 + + + + Scaling 4 + + + + LS4 + + + + RS4 + + + + Envelope 4 + + + + AR4 + + + + RR4 + + + + D2R4 + + + + D1L4 + + + + D1R4 + + + + Vol 4 + + + + Sensitivity 4 + + + + EBS4 + + + + KVS4 + + + + AME4 + + + + Detune Wave EGShift 4 + + + + DET4 + + + + + DrumEdit + + &File + &Файл + + + Load Map + Загрузить карту + + + Save Map + Сохранить карту + + + &Edit + &Правка + + + Cut + Вырезать + + + Copy + Скопировать + + + Paste + Ð’Ñтавить + + + Delete Events + Удалить ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ + + + Select All + Выделить вÑÑ‘ + + + Select None + Убрать выделение + + + Invert + Инвертировать + + + Inside Loop + Внутри цикла + + + Outside Loop + Снаружи цикла + + + &Select + &Выделение + + + Load Drummap + Загрузить драм-карту + + + Store Drummap + Сохранить драм-карту + + + Step Record + ÐŸÐ¾ÑˆÐ°Ð³Ð¾Ð²Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ + + + Midi Input + MIDI-вход + + + ctrl + кнтр + + + Add Controller View + Добавить вид контроллера + + + M + M + + + Sound + Звук + + + QNT + КВÐТ + + + E-Note + E-Ðота + + + Len + Длн + + + A-Note + A-Ðота + + + Ch + К + + + Port + Порт + + + LV1 + LV1 + + + LV2 + LV2 + + + LV3 + LV3 + + + LV4 + LV4 + + + drummaps + драм-карты + + + Muse: Load Drum Map + Muse: Загрузить драм-карту + + + MusE: Store Drum Map + Muse: Сохранить драм-карту + + + Set fixed length + УÑтановить фикÑ. продолжительноÑÑ‚ÑŒ + + + &Functions + &Функции + + + Modify Velocity + Изменить ÑкороÑÑ‚ÑŒ + + + + EditCAfterDialog + + MusE: Enter Channel Aftertouch + MusE: ВвеÑти Channel Aftertouch + + + Time Position + ÐŸÐ¾Ð·Ð¸Ñ†Ð¸Ñ Ð²Ð¾ времени + + + Pressure + Сила Ð½Ð°Ð¶Ð°Ñ‚Ð¸Ñ + + + + EditCtrl7DialogBase + + MusE: Enter Controller + MusE: ВвеÑти контроллер + + + Controller: + Контроллер: + + + Time Position: + ÐŸÐ¾Ð·Ð¸Ñ†Ð¸Ñ Ð²Ð¾ времени: + + + Value: + Значение: + + + controller value + значение контроллера + + + OK + ОК + + + Cancel + Отменить + + + + EditCtrlBase + + MusE: Edit Controller Event + MusE: изменить Ñобытие контроллера + + + Time Position + ÐŸÐ¾Ð·Ð¸Ñ†Ð¸Ñ Ð²Ð¾ времени + + + Available Controller: + ДоÑтупный контроллер: + + + Create New Controller + Создать новый контроллер + + + textLabel3 + + + + Value + Значение + + + Controller + Контроллер + + + H-Bank + H-банк + + + L-Bank + L-банк + + + Program + Программа + + + off + выкл + + + pushButton4 + + + + &OK + &ОК + + + &Cancel + О&тменить + + + + EditEventDialog + + Ok + ОК + + + Cancel + Отменить + + + + EditGainBase + + MusE: Modify gain + MusE: изменить уÑиление + + + Gain + УÑиление + + + 200% + 200% + + + 100% + 100% + + + 0% + 0% + + + &Reset + &СброÑить + + + Alt+R + Alt+С + + + &Apply + &Применить + + + Alt+A + Alt+П + + + &Cancel + О&тменить + + + Alt+C + Alt+Т + + + + EditInstrumentBase + + MusE: Instrument Editor + + + + Patches + + + + Patch Name: + + + + High Bank: + + + + Low Bank: + + + + Program: + + + + d.c. + dont care + + + + d.c. + + + + Patch/Group + + + + &Delete + + + + Alt+D + + + + &New Patch + + + + Alt+N + + + + New Group + + + + Drum + Ударные + + + GM + GM + + + GS + GS + + + XG + XG + + + Controller + Контроллер + + + Predefined Controller: + + + + This is a list of commonly used midi controllers. +Note that in MusE pitch and program changes are +handled like normal controllers. + + + + Properties + + + + Name + Ð˜Ð¼Ñ + + + Type + Тип + + + Control7 + + + + Control14 + + + + RPN + RPN + + + NRPN + NRPN + + + Pitch + Ð’Ñ‹Ñота тона + + + Program + + + + H-Ctrl + + + + Midi Controller Number High Byte + + + + L-Ctrl + + + + Midi Controller Number Low Byte + + + + Range + ОблаÑÑ‚ÑŒ + + + Min + + + + Max + + + + Default + + + + Name + + + + Type + + + + Min Val + + + + Max Val + + + + list of defined controllers + ÑпиÑок назначенных контроллеров + + + This is the MusE list of defined controllers. + Это ÑпиÑок назначенных контроллеров Ð´Ð»Ñ MusE + + + SysEx + SysEx + + + Initialization + + + + Panic + + + + Hex Entry: + + + + &File + &Файл + + + Tools + Ð¡ÐµÑ€Ð²Ð¸Ñ + + + New + Ðовый + + + &New + + + + Ctrl+N + + + + Open + Открыть + + + &Open... + &Открыть... + + + Ctrl+O + + + + Save + Сохранить + + + &Save + &Сохранить + + + Ctrl+S + + + + Save As + Сохранить как + + + Save &As... + Сохранить &как... + + + Exit + Выйти + + + E&xit + Ð’&ыйти + + + + EditMetaDialog + + MusE: Enter Meta Event + MusE: ВвеÑти метаÑобытие + + + Time Position + ÐŸÐ¾Ð·Ð¸Ñ†Ð¸Ñ Ð²Ð¾ времени + + + Meta Type + Метатип + + + Enter Hex + Введите Hex + + + + 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: + СкороÑÑ‚ÑŒ выкл.: + + + + EditPAfterDialog + + MusE: Enter Poly Aftertouch + MusE: ВвеÑти многоголоÑое поÑлекаÑание + + + Time Position + ÐŸÐ¾Ð·Ð¸Ñ†Ð¸Ñ Ð²Ð¾ времени + + + Pitch + Ð’Ñ‹Ñота тона + + + Pressure + Сила Ð½Ð°Ð¶Ð°Ñ‚Ð¸Ñ + + + + EditSysexDialogBase + + MusE: Enter SysEx + MusE: ВвеÑти SysEx + + + TimePosition: + ВремÑ: + + + Comment: + Комментарий: + + + OK + ОК + + + Cancel + Отменить + + + + EditToolBar + + Edit Tools + ИнÑтрументы Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ + + + + EffectRack + + effect rack + Ñ€Ñк Ñффектов + + + move up + ÑмеÑтить выше + + + move down + ÑмеÑтить ниже + + + remove + удалить + + + bypass + обойти + + + show gui + показать ГИП + + + new + новый + + + change + изменить + + + Replace effect + Заменить Ñффект + + + Do you really want to replace the effect %1? + Ð’Ñ‹ дейÑтвительно хотите заменить Ñффект %1? + + + &Yes + &Да + + + &No + &Ðет + + + + FLUIDGui + + FLUID: open Soundfile + FLUID: открыть аудиофайл + + + + FLUIDGuiBase + + Form1 + Form1 + + + Soundfont + Soundfont + + + Load + Загрузить + + + + FLUIDSynthGuiBase + + FLUID Synth + FLUID Synth + + + Gain + УÑиление + + + Level + Уровень + + + Width + Ширина + + + Damping + Глушение + + + Room Size + Размер комнаты + + + Reverb + Ð ÐµÐ²ÐµÑ€Ð±ÐµÑ€Ð°Ñ†Ð¸Ñ + + + Delete + Удалить + + + Load + Загрузить + + + Sine + СинуÑоида + + + Triangle + Ð¢Ñ€ÐµÑƒÐ³Ð¾Ð»ÑŒÐ½Ð°Ñ + + + Type + Тип + + + Number + Ðомер + + + Speed + СкороÑÑ‚ÑŒ + + + Depth + Глубина + + + Chorus + Ð¥Ð¾Ñ€ÑƒÑ + + + CHANNEL SETUP + ÐÐСТРОЙКРКÐÐÐЛР+ + + ID + ID + + + Fontname + Ð˜Ð¼Ñ ÑÑмпла + + + Chnl + Канал + + + Soundfont + СÑмпл + + + LOADED SOUNDFONTS + ЗÐГРУЖЕÐÐЫЕ СЭМПЛЫ + + + Dump Info + + + + Drum Chnl + + + + + FileDialogButtons + + Form1 + Form1 + + + Global + Глобально + + + User + Домашний +каталог + + + Project + Проект + + + Load: + Загрузить: + + + Songdata + +Cofiguration + + + + only +Songdata + + + + + FontSel + + Size: + Размер: + + + + 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 + Приложение + + + Start Muse + + + + start with last song + + + + start with song + + + + start song: + + + + Views + + + + y-pos + + + + show + + + + x-pos + + + + height + + + + width + + + + Big Time + Хронометр + + + Arranger + Компоновщик + + + Transport + Пульт ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ + + + Cur + + + + set current values + + + + start with template: default.med + + + + show splash screen + + + + External Waveditor + Внешний аудиоредактор + + + External Waveditor command + Команда вызова внешнего аудиоредактора + + + + LMaster + + MusE: Mastertrack + MusE: МаÑтер-дорожка + + + Tempo + Темп + + + Timesig + Знак размера + + + new tempo + новый темп + + + new signature + новый размер + + + Meter + Размер + + + Time + Ð’Ñ€ÐµÐ¼Ñ + + + Type + Тип + + + Value + Значение + + + &Edit + &Правка + + + Insert Tempo + Ð’Ñтавить темп + + + Insert Signature + Ð’Ñтавить размер + + + Edit Positon + + + + Edit Value + Изменить значение + + + Delete Event + Удалить Ñобытие + + + Reposition of the initial tempo and signature events is not allowed + + + + MusE: List Editor + + + + Input error, conversion not OK or value out of range + + + + Reposition of tempo and signature events to start position is not allowed! + + + + + ListEdit + + Insert Note + Ð’Ñтавить ноту + + + insert Note + вÑтавить ноту + + + Insert SysEx + Ð’Ñтавить SysEx + + + insert SysEx + вÑтавить SysEx + + + Insert Ctrl + Ð’Ñтавить контроллер + + + insert Ctrl + вÑтавить контроллер + + + Insert Meta + Ð’Ñтавить Meta + + + insert Meta + вÑтавить Meta + + + Insert Channel Aftertouch + Ð’Ñтавить Channel Aftertouch + + + insert Channel Aftertouch + вÑтавить Channel Aftertouch + + + Insert Key Aftertouch + Ð’Ñтавить Key Aftertouch + + + insert Poly Aftertouch + вÑтавить Key Aftertouch + + + &Edit + &Правка + + + Cut + Вырезать + + + Copy + Скопировать + + + Paste + Ð’Ñтавить + + + Delete Events + Удалить ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ + + + List Tools + Показать ÑпиÑок инÑтрументов + + + Insert Tools + Ð’Ñтавить инÑтрументы + + + Tick + Щелчок метронома + + + Bar + Деление + + + Typ + Тип + + + Ch + К + + + Val A + Знач. Ð + + + Val B + Знач. B + + + Val C + Знач. С + + + Len + Длг + + + Comment + Комментарий + + + + MITTransposeBase + + MusE: Midi Input Plugin: Transpose + MusE: MIDI-модуль на входе: ТранÑпонирование + + + On + Вкл + + + TriggerKey + TriggerKey + + + Transpose: + ТранÑпонирование: + + + +0 + +0 + + + + MPConfig + + none + ничего + + + Port + Порт + + + GUI + GUI + + + Instrument + ИнÑтрумент + + + Device Name + Ð˜Ð¼Ñ ÑƒÑтройÑтва + + + State + СоÑтоÑние + + + unknown + неизвеÑтно + + + I + Ð’Ñ… + + + O + Ð’Ñ‹Ñ… + + + + MRConfigBase + + MusE: Midi Input Plugin: Remote Control + MusE: Входной MIDI-модуль: ДиÑтан. управление + + + Activate + Ðктивировать + + + On + Вкл + + + Actions + ДейÑÑ‚Ð²Ð¸Ñ + + + Stop + ОÑтановить + + + Record + ЗапиÑать + + + Goto Left Mark + Перейти к левой метке + + + Play + ВоÑпроизвеÑти + + + + MTScale + + bar scale + шкала Ñ Ð´ÐµÐ»ÐµÐ½Ð¸Ñми + + + + MarkerView + + MusE: Marker + MusE: Маркер + + + add marker + добавить маркер + + + Add Marker + Добавить маркер + + + delete marker + удалить маркер + + + Delete Marker + Удалить маркер + + + &File + &Файл + + + &Edit + &Правка + + + Bar:Beat:Tick + Деление:ДолÑ:Тик + + + Hr:Mn:Sc:Fr:Sf + Hr:Mn:Sc:Fr:Sf + + + Lock + Блок + + + Text + ТекÑÑ‚ + + + Marker Properties + СвойÑтва маркера + + + + MasterEdit + + MusE: Mastertrack + MusE: МаÑтер-дорожка + + + edit tools + инÑтрументы Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ + + + EnableMaster + Разрешить МаÑтер + + + Info + Инфо + + + Cursor + КурÑор + + + Off + выкл + + + Snap + ПривÑзка + + + time at cursor position + Ð²Ñ€ÐµÐ¼Ñ Ð² позиции курÑора + + + tempo at cursor position + темп в позиции курÑора + + + CurPos + КурÑПоз + + + tempo at current position + темп в текущей позиции + + + time signature at current position + ключевые знаки альтерации в текущей позиции + + + Enable + Разрешить + + + Enable usage of master track + Разрешить иÑпользование маÑтер-дорожки + + + + MetronomeConfigBase + + MusE: Metronome Config + MusE: ÐаÑтройка метронома + + + Metronome + Метроном + + + Audio Beep + Звуковой Ñигнал + + + MIDI Click + MIDI-клик + + + Midi Channel + MIDI-канал + + + Measure Note + Ðот в такте + + + Measure Velocity + Сила Ð½Ð°Ð¶Ð°Ñ‚Ð¸Ñ Ð½Ð° такт + + + Beat Velocity + Сила Ð½Ð°Ð¶Ð°Ñ‚Ð¸Ñ Ð½Ð° долю + + + Beat Note + Ðот на долю + + + Midi Port + MIDI-порт + + + Precount + ПредраÑчёт + + + enable + Разрешить + + + Bars + Делений + + + From Mastertrack + Из маÑтер-дорожки + + + / + / + + + Signature + Размер + + + Prerecord + ПредзапиÑÑŒ + + + Preroll + ПредвоÑпроизведение + + + &Apply + &Применить + + + &OK + &ОК + + + &Cancel + О&тменить + + + + 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 + О&тменить + + + &Add + &Добавить + + + Alt+A + Alt+Д + + + Predefined Controller: + Уже назначенный контроллер: + + + Managed Controller for Port + ÐаÑтроенный контроллер Ð´Ð»Ñ Ð¿Ð¾Ñ€Ñ‚Ð° + + + Channel + Канал + + + This is a list of commonly used midi controllers. +Note that in MusE pitch and program changes are +handled like normal controllers. + + + + Pitch + Ð’Ñ‹Ñота тона + + + Program + Программа + + + Midi Controller Number High Byte + + + + Midi Controller Number Low Byte + + + + Range + Диапазон + + + + 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 + + + + MidiInputTransformDialog + + New + Ðовый + + + + 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 + Инвертировать + + + ScaleMap + + + + Flip + + + + Dyn + + + + 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 + СпиÑок предуÑтановок + + + + MidiPortRouteBase + + MusE: Midi Port Routing + MusE: маршруты между MIDI-портами + + + Port 2 + Порт 2 + + + Output + Выход + + + Input + Вход + + + + MidiStrip + + VariationSend + + + + Var + Вар + + + ReverbSend + + + + Rev + Ревер + + + ChorusSend + + + + Cho + Хор + + + off + выкл + + + dB + Дб + + + Pan/Balance + + + + Pan + Пан + + + record + + + + mute + приглушить + + + pre fader listening + + + + Route + + + + set routing + + + + Off + + + + Read + + + + Touch + + + + Write + + + + automation type + + + + + MidiSyncConfigBase + + MusE: Midi Sync + MusE: MIDI-Ñинхр. + + + Sync Mode + Режим Ñинхр. + + + Master + Ведущий + + + Slave + Ведомый + + + Sync Source + ИÑточник Ñинхр. + + + accept MTC + принÑÑ‚ÑŒ MTC + + + accept Midi Clock + принÑÑ‚ÑŒ MIDI Clock + + + accept MMC + принÑÑ‚ÑŒ MMC + + + Id: + Id: + + + device id + id уÑтройÑтва + + + Port: + Порт: + + + all + вÑе + + + midi port + MIDI-порт + + + Sync Gen + Генератор ÑинхроимпульÑов + + + Midi Time Code (MTC) + Midi Time Code (MTC) + + + Midi Clock + MIDI Clock + + + Midi Machine Control (MMC) + Midi Machine Control (MMC) + + + Apply + Применить + + + Ok + ОК + + + Cancel + Отменить + + + MTC + MТC + + + Type: + Тип: + + + 24 + 24 + + + 25 + 25 + + + 30D + 30D + + + 30N + 30D + + + Offset: + Смещение: + + + hour + чаÑов + + + h + ч + + + minute + минут + + + m + м + + + second + Ñекунд + + + s + Ñ + + + frame + кадров + + + f + к + + + subframe + Ñубкадров + + + + MidiTrackInfoBase + + MusE: TrackInfo + MusE: Инфо о дорожке + + + output channel + канал выхода + + + all midi events are send to this output channel + вÑе midi-ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð¿Ð¾ÑылаютÑÑ Ð² Ñтот канал выхода + + + Track Info + Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ дорожке + + + % + % + + + Track Name + Ð˜Ð¼Ñ Ð´Ð¾Ñ€Ð¾Ð¶ÐºÐ¸ + + + output port + порт выхода + + + off + выкл + + + change stereo position + изменить Ñтереопозицию + + + OCh. + Ð’Ñ‹Ñ….канал + + + ??? + ??? + + + select instrument patch + выбрать патч инÑтрумента + + + Transp. + ТранÑп. + + + Volume + ГромкоÑÑ‚ÑŒ + + + Channel Info + Инфо о канале + + + Pan + Пан + + + Delay + Задержка + + + H-Bank + H-банк + + + Compr. + + + + L-Bank + L-банк + + + Progr. + Прогр. + + + Velocity + Сила Ð½Ð°Ð¶Ð°Ñ‚Ð¸Ñ + + + Length + ПродолжительноÑÑ‚ÑŒ + + + input ports + порты входа + + + IChan. + Ð’Ñ….канал + + + input channels + порты входа + + + 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 + Ð¡Ð¾Ð±Ñ‹Ñ‚Ð¸Ñ Ñо вÑех наÑтроенных каналов +запиÑываютÑÑ Ð² Ñту дорожку. +Ð’Ñ‹ можете указать больше одного канала +запиÑи: + 1 2 3 запиÑывать Ñ ÐºÐ°Ð½Ð°Ð»Ð¾Ð² 1, 2 и 3 + 1-3 то же Ñамое + 1-3 5 запиÑывать из каналов 1, 2, 3 и 5 + + + record: + ЗапиÑать: + + + Rec + Зап + + + add settings to song + + + + Bank Select LSB + + + + Bank Select MSB + + + + + MidiTransformDialogBase + + MusE: Midi Transformator + MusE: Преобразование MIDI-Ñообщений + + + &New + &ÐÐ¾Ð²Ð°Ñ + + + &Delete + У&далить + + + &Apply + &Применить + + + &OK + &ОК + + + &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 + Инвертировать + + + ScaleMap + + + + Flip + + + + Dyn + + + + Random + Случайно + + + Value 1 + Значение 1 + + + Length + ПродолжительноÑÑ‚ÑŒ + + + Position + ÐŸÐ¾Ð·Ð¸Ñ†Ð¸Ñ + + + Filter + Фильтр + + + All + Ð’Ñе + + + Equal + Равные + + + Unequal + Ðе равные + + + Ignore + Игнорировать + + + Higher + Выше + + + Lower + Ðиже + + + Inside + Внутри + + + Outside + Снаружи + + + Bar Range + Ð¢Ð°ÐºÑ‚Ð¾Ð²Ð°Ñ Ð¾Ð±Ð»Ð°ÑÑ‚ÑŒ + + + Preset + ПредуÑтановка + + + Name: + ИмÑ: + + + Comment: + Комментарий: + + + Range + ОблаÑÑ‚ÑŒ + + + process all events + обработать вÑе ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ + + + selected tracks + выделенные дорожки + + + inside loop + Внутри цикла + + + Function + Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ + + + Select + Выделить + + + Quantize + Квантовать + + + Delete + Удалить + + + Transform + Преобразовать + + + Insert + Ð’Ñтавить + + + Copy + Скопировать + + + Extract + Извлечь + + + Quantize Value + Значение ÐºÐ²Ð°Ð½Ñ‚Ð¾Ð²Ð°Ð½Ð¸Ñ + + + + MidiTransformerDialog + + New + Ðовый + + + + MixdownFileDialog + + Wave Files (*.wav);;All Files (*) + Файлы Wave (*.wav);;Ð’Ñе файлы (*) + + + + MixdownFileDialogBase + + MusE: Set Mixdown Wavefile + MusE: ÐаÑтроить параметры Wave-файла + + + &OK + &OK + + + &Cancel + О&тменить + + + File Path + Путь к файлу + + + Channel + Канал + + + Stereo + Стерео + + + Mono + Моно + + + 5.1 + 5.1 + + + wav,16 Bit + wav, 16 бит + + + wav, 24 Bit + wav, 24 бита + + + wav, 32 Bit (float) + wav, 32 бита (float) + + + Format + Формат + + + + MusE + + Import Wave File + Импортировать WAV-файл + + + UndoRedo + + + + 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 + ЗапиÑать + + + panic + + + + Panic + + + + new + новый + + + &New + &Ðовый + + + open + открыть + + + &Open + &Открыть + + + save + Ñохранить + + + &Save + &Сохранить + + + pianoroll + pianoroll + + + Pianoroll + Pianoroll + + + 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 + Сдвиг ноты + + + Move Clock + + + + 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 + + + &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? + Текущий проект Ñодержит не Ñохранённые данные. +Сохранить текущий проект? + + + &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? + Текущий проект Ñодержит не Ñохранённые данные. +Загрузка нового проекта приведёт к перезапиÑи данных Ñтого. +Сохранить текущий проект? + + + no help found at: + Ñправка не найдена в: + + + MusE: Open Help + MusE: Открыть Ñправку + + + Midi Ports / Soft Synth + MIDI-порты / Прогр. Ñинтезаторы + + + to import a audio file you have first to selecta wave track + + + + Delete Selected Tracks + + + + View + Вид + + + Restart Audio + ПерезапуÑтить аудио + + + Automation + + + + Mixer Automation + + + + Take Snapshot + Сделать Ñнимок + + + Clear Automation Data + + + + Settings + ÐаÑтройки + + + Configure shortcuts + ÐаÑтроить горÑчие клавиши + + + Midi File Export + + + + &Manual + + + + &MusE homepage + + + + &Report Bug... + + + + &About MusE + + + + What's &This? + + + + Cannot read template + + + + File open error + + + + File read error + + + + MusE: load template + + + + MusE: Bounce + + + + set left/right marker for bounce range + + + + MusE: Bounce to File + + + + no output track found + + + + Add midi file to current project? + + + + + &Add to Project + + + + &Replace + + + + +failed: + (new line) +не удалоÑÑŒ: + + + Import Part + + + + Marker View + + + + &Skip + + + + Import part is only valid for midi tracks! + + + + MusE: load part + + + + No track selected for import + + + + + NewPreset + + New preset + + + + Preset Name + + + + INIT VOICE + + + + Subcategory + + + + NONE + + + + Category + + + + Bank + + + + Bank numerous + + + + Prog + + + + Program numerous + + + + &Cancel + + + + Alt+C + + + + &Ok + &ОК + + + Alt+O + + + + + NoteInfo + + Note Info + Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ ноте + + + Start + Ðачало + + + Len + Длн + + + Pitch + Ð’Ñ‹Ñота тона + + + Velo On + Скор. вкл + + + Velo Off + Скор. выкл + + + + OrganGuiBase + + MusE: Organ + MusE: Орган + + + O-1 + O-1 + + + Oscillator + ОÑциллÑтор + + + Brass + Медные духовые + + + Reed + Язычковые деревÑнные духовые + + + Flute + Флейта + + + 16' + 16' + + + 4' + 4' + + + 2 2/3' + 2 2/3' + + + 2' + 2' + + + 8' + 8' + + + 5 1/3' + 5 1/3' + + + Drawbars + + + + Envelope Hi + + + + Release + Затухание + + + Sustain + Продление + + + Decay + Первичное затухание + + + Attack + Ðтака + + + ms + Ð¼Ñ + + + cB + + + + Envelope Lo + + + + Velocity + СкороÑÑ‚ÑŒ + + + + PartCanvas + + Cannot copy/move/clone to different Track-Type + Ðевозможно копировать/перемещать/клонировать данные в иные типы дорожек + + + C&ut + &Вырезать + + + &Copy + С&копировать + + + rename + Переименовать + + + color + Цвет + + + delete + Удалить + + + split + Разделить + + + glue + Склеить + + + de-clone + Деклонировать + + + pianoroll + Pianoroll + + + list + Редактор ÑпиÑка Ñобытий + + + drums + Редактор ударных + + + wave edit + Редактор Ñемплов + + + Cannot paste: multiple tracks selected + Ð’Ñтавка невозможна: выделено неÑколько дорожек + + + Cannot paste: no track selected + Ð’Ñтавка невозможна: не выделено ни одной дорожек + + + Cannot paste: wrong data type + Ð’Ñтавка невозможна: неправильный тип данных + + + Can only paste to midi/drum track + + + + Can only paste to wave track + + + + export + + + + MusE: save part + + + + + PatchBay + + MusE: ALSA MIDI Patch Bay + MusE: ALSA MIDI Patch Bay + + + + PatchBayBase + + ALSA Patch Bay + ALSA Patch Bay + + + + PianoRoll + + &Edit + &Правка + + + Cut + Вырезать + + + Copy + Скопировать + + + Paste + Ð’Ñтавить + + + Delete Events + Удалить ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ + + + Select All + Выделить вÑÑ‘ + + + Select None + Убрать выделение + + + Invert + Инвертировать + + + Inside Loop + Внутри цикла + + + Outside Loop + Вне цикла + + + &Select + &Выбрать + + + blue + голубой + + + pitch colors + цвета выÑоты тона + + + velocity colors + цвета ÑкороÑти + + + &Config + &ÐаÑтроить + + + event color + цвет ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ + + + &Functions + &Функции + + + Over Quantize + + + + Note On Quantize + + + + Note On/Off Quantize + + + + Iterative Quantize + + + + Config Quant... + + + + Modify Gate Time + Изменить Ð²Ñ€ÐµÐ¼Ñ Ð·Ð²ÑƒÑ‡Ð°Ð½Ð¸Ñ + + + Modify Velocity + Изменить ÑкороÑÑ‚ÑŒ + + + Crescendo + Крещендо + + + Transpose + ТранÑпонировать + + + Thin Out + Удалить дубли + + + Erase Event + Удалить Ñобытие + + + Note Shift + Смещение ноты + + + Move Clock + + + + Copy Measure + Скопировать деление + + + Erase Measure + Стереть деление + + + Delete Measure + Удалить деление + + + Create Measure + Создать деление + + + Pianoroll Tools + ИнÑтрументы pianoroll + + + Step Record + ÐŸÐ¾ÑˆÐ°Ð³Ð¾Ð²Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ + + + Midi Input + MIDI-вход + + + Play Events + ВоÑпроизвеÑти ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ + + + ctrl + кнтр + + + Add Controller View + Добавить вид контроллера + + + Set fixed length + УÑтановить фикÑ. продолжительноÑÑ‚ÑŒ + + + + 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 + Отменить + + + Stereo and Mono + Стерео и моно + + + Stereo + Стерео + + + Mono + Моно + + + 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. + + + + + PluginGui + + File Buttons + Файловые кнопки + + + Load Preset + Загрузить предуÑтановку + + + Save Preset + Сохранить предуÑтановку + + + bypass plugin + обойти модуль + + + MusE: load preset + MusE: загрузить предуÑтановку + + + MusE: save preset + MusE: Ñохранить предуÑтановку + + + + 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 + СоÑтоÑние: результат Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ ÑƒÑтройÑтва + + + mute instrument + приглушить инÑтрумент + + + sound name + Ð¸Ð¼Ñ Ð·Ð²ÑƒÐºÐ° + + + quantisation +currently not used + квантование(new line) +ÑÐµÐ¹Ñ‡Ð°Ñ Ð½Ðµ иÑпользуетÑÑ + + + this input note triggers the sound + Ñто входÑÑ‰Ð°Ñ Ð½Ð¾Ñ‚Ð° переключает звук + + + note length + продолжительноÑÑ‚ÑŒ ноты + + + this note is send for the sound + Ñто нота поÑлана Ð´Ð»Ñ Ð·Ð²ÑƒÐºÐ° + + + output channel +currently not used + канал выхода(new line) +ÑÐµÐ¹Ñ‡Ð°Ñ Ð½Ðµ иÑпользуетÑÑ + + + output port +currently not used + порт выхода(new line) +ÑÐµÐ¹Ñ‡Ð°Ñ Ð½Ðµ иÑпользуетÑÑ + + + velocity level 1 + Уровень 1 Ñилы Ð½Ð°Ð¶Ð°Ñ‚Ð¸Ñ + + + velocity level 2 + Уровень 2 Ñилы Ð½Ð°Ð¶Ð°Ñ‚Ð¸Ñ + + + velocity level 3 + Уровень 3 Ñилы Ð½Ð°Ð¶Ð°Ñ‚Ð¸Ñ + + + velocity level 4 + Уровень 4 Ñилы Ð½Ð°Ð¶Ð°Ñ‚Ð¸Ñ + + + quantisation + квантование + + + output channel + канал выхода + + + output port + порт выхода + + + Enable Recording + Разрешить запиÑÑŒ + + + Mute Indicator + Индикатор Ð¿Ñ€Ð¸Ð³Ð»ÑƒÑˆÐµÐ½Ð¸Ñ + + + Solo Indicator + Индикатор Ñоло + + + Track Type + Тип дорожки + + + Track Name + Ð˜Ð¼Ñ Ð´Ð¾Ñ€Ð¾Ð¶ÐºÐ¸ + + + Output Channel Number + Ðомер канала выхода + + + Output Port + Порт выхода + + + Time Lock + + + + Solo/Pre Fader Listening + + + + enables reading from device + + + + enables writing to device + + + + + QWidget + + Cannot convert sysex string + Ðевозможно преобразовать Ñтроку SysEx + + + Hex String too long (2048 bytes limit) + Hex-Ñтрока Ñлишком Ð´Ð»Ð¸Ð½Ð½Ð°Ñ (предел ÑоÑтавлÑет 2048 байтов) + + + generic midi + Обычный MIDI + + + new + новый + + + create peakfile for + Ñоздать пиковый файл Ð´Ð»Ñ + + + MusE: get file name + MusE: получить Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° + + + the directory + + каталог(new line) + + + +does not exist +create? + (new line) +не ÑущеÑтвует(new line) +Создать? + + + &Create + &Создать + + + Cancel + Отменить + + + MusE: create directory + MusE: Ñоздать каталог + + + creating dir failed + Ñоздание каталога не удалоÑÑŒ + + + File + + Файл + + + +exists + (new line) +ÑущеÑтвует + + + MusE: write + MusE: запиÑать + + + Overwrite + ПерезапиÑать + + + Quit + Выйти + + + Open File + + Открыть файл(new line) + + + +failed: + (new line) +не удалоÑÑŒ: + + + MusE: Open File + MusE: Открыть файл + + + None + Ðичего + + + + QuantConfig + + MusE: Config Quantize + MusE: наÑтройка ÐºÐ²Ð°Ð½Ñ‚Ð¾Ð²Ð°Ð½Ð¸Ñ + + + Config Quantize + + + + Strength + + + + Don´t Quantize + + + + Quant Len + + + + + RhythmBase + + MusE: Random Rhythm Generator + MusE: Генератор Ñлучайного ритма + + + Instrument Properties + СвойÑтва инÑтрумента + + + counts/bar + + + + steps/count + + + + # bars + + + + 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 + ИнÑтрумент + + + steps/count + + + + 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! + + + + Ctrl+N + + + + Ctrl+O + + + + Ctrl+S + + + + Ctrl+P + + + + Ctrl+Z + + + + Ctrl+Y + + + + Ctrl+X + + + + Ctrl+C + + + + Ctrl+V + + + + Ctrl+F + + + + + RhythmGenerator + + Form3 + Form3 + + + Instrument Settings: + ÐаÑтройки инÑтрумента: + + + Instrument + ИнÑтрумент + + + Hi-Hat + Хай-Ñ…ÑÑ‚ + + + add + добавить + + + delete + удалить + + + Group Settings: + ÐаÑтройки группы: + + + Group + Группа + + + Group 1 + Группа 1 + + + Group 2 + Группа 2 + + + Group 3 + Группа 3 + + + Group 4 + Группа 4 + + + Group 5 + Группа 5 + + + contrib + внеÑти + + + listen + проÑлушать + + + Randomize + Случайным образом + + + Rhythm Style: + Стиль ритма: + + + Clear + ОчиÑтить + + + Open... + Открыть... + + + Save + Сохранить + + + Save as... + Сохранить как... + + + Generate + Создать + + + Close + Закрыть + + + + + + + steps/count + + + + count/bar + + + + # bars + + + + + RouteDialogBase + + MusE: Routing + MusE: маршруты + + + Add Route + Добавить маршрут + + + Source: + ИÑточник: + + + Destination: + Ðазначение: + + + Connect + Соединить + + + connect source to destination + Соединить иÑточник Ñ Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸ÐµÐ¼ + + + Current Routes + Текущие маршруты + + + Source + ИÑточник + + + Destination + Ðазначение + + + Remove + Удалить + + + remove selected route + Удалить выбранные маршруты + + + + SS_PluginChooserBase + + SimpleDrums - Ladspa Plugin Chooser + SimpleDrums - Выбор LADSPA-Ð¼Ð¾Ð´ÑƒÐ»Ñ + + + Name + Ð˜Ð¼Ñ + + + Label + Метка + + + Inports + Порты входа + + + Outports + Порты выхода + + + Creator + Создатель + + + &Cancel + О&тменить + + + Alt+C + Alt+Т + + + &OK + &ОК + + + Alt+O + Alt+О + + + + ScrollScale + + next page + Ñлед Ñтраница + + + previous page + пред Ñтраница + + + current page number + номер текущей Ñтраницы + + + + ShortcutCaptureDialog + + Ok + OK + + + Cancel + Отменить + + + Shortcut conflicts with + ГорÑÑ‡Ð°Ñ ÐºÐ»Ð°Ð²Ð¸ÑˆÐ° конфликтует Ñ + + + Undefined + Ðе назначено + + + + ShortcutCaptureDialogBase + + Enter shortcut sequence + Введите поÑледовательноÑÑ‚ÑŒ горÑчих клавиш + + + Press keys to enter shortcut sequence! + Ðажмите клавиши Ð´Ð»Ñ Ð·Ð°Ð´Ð°Ð½Ð¸Ñ Ð³Ð¾Ñ€Ñчих клавиш! + + + Old shortcut: + Старое Ñочетание: + + + Undefined + Ðе назначено + + + New shortcut: + Ðовое Ñочетание: + + + OK + ОК + + + Cancel + Отменить + + + + ShortcutConfigBase + + Configure Keyboard Shortcuts + ÐаÑтроить горÑчие клавиши + + + Shortcut Category + ÐšÐ°Ñ‚ÐµÐ³Ð¾Ñ€Ð¸Ñ Ð³Ð¾Ñ€Ñчих клавиш + + + Description + ОпиÑание + + + Shortcut + ГорÑÑ‡Ð°Ñ ÐºÐ»Ð°Ð²Ð¸ÑˆÐ° + + + &Clear + О&чиÑтить + + + Alt+C + Alt+Ч + + + &Define + Ð&азначить + + + Alt+D + Alt+Ð + + + &Apply + &Применить + + + Alt+A + Alt+П + + + + SigScale + + signature scale + шкала знаков альтерации + + + + SimpleDrumsGuiBase + + DrumSynth 0.1 + DrumSynth 0.1 + + + + SimpleSynthGui + + &Load setup + З&агрузить наÑтройки + + + &Save setup + &Сохранить наÑтройки + + + + SynthConfigBase + + MusE: Synth Configuration + MusE: ÐаÑтройка программного Ñинтезатора + + + Soft Synthesizer + Программный Ñинтезатор + + + File + Файл + + + Instances + ИпоÑтаÑи + + + Name + Ð˜Ð¼Ñ + + + list of available software synthesizers + ÑпиÑок доÑтупных программных Ñинтезаторов + + + Add Instance + Добавить ипоÑтаÑÑŒ + + + Remove Instance + Удалить ипоÑтаÑÑŒ + + + Midi connections + MIDI-ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ + + + Midi Port + MIDI-порт + + + Inst + ИнÑÑ‚Ñ€ + + + Version + ВерÑÐ¸Ñ + + + Description + ОпиÑание + + + + TList + + Show Gui + Показать ГИП + + + Add Midi Track + Добавить MIDI-дорожку + + + Add Drum Track + Добавить дорожку Ñ ÑƒÐ´Ð°Ñ€Ð½Ñ‹Ð¼Ð¸ + + + Add Wave Track + Добавить звуковую дорожку + + + Delete Track + Удалить дорожку + + + Track Comment + Комментарий к дорожке + + + Midi + MIDI + + + Drum + Ударные + + + MusE: bad trackname + MusE: неверное Ð¸Ð¼Ñ Ð´Ð¾Ñ€Ð¾Ð¶ÐºÐ¸ + + + please choose a unique track name + Выберите неповторÑющееÑÑ Ð¸Ð¼Ñ Ð´Ð»Ñ Ð´Ð¾Ñ€Ð¾Ð¶ÐºÐ¸ + + + Add Output + Добавить выход + + + Add Group + Добавить группу + + + Add Input + Добавить вход + + + Add Aux Send + Добавить Aux поÑыл + + + Update drummap? + Обновить Ñхему ударных? + + + Do you want to use same port for all instruments in the drummap? + Ð’Ñ‹ хотите иÑопльзовать один и тот же порт Ð´Ð»Ñ Ð²Ñех инÑтрументов в Ñхеме ударных? + + + &Yes + &Да + + + &No + &Ðет + + + Do you want to use same port and channel for all instruments in the drummap? + Ð’Ñ‹ хотите иÑопльзовать один и тот же порт и канал Ð´Ð»Ñ Ð²Ñех инÑтрументов в Ñхеме ударных? + + + + TempoSig + + Tempo/Sig + Темп/Знаки альтерации + + + + Toolbar1 + + Solo + Соло + + + Cursor + КурÑор + + + Snap + ПривÑзка + + + Quantize + Квантовать + + + To + К + + + All Events + Ð’Ñе ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ + + + Looped Ev. + Соб. в цикле + + + Selected Ev. + Выделенное Ñоб. + + + Looped+Sel. + Ð’ цикле+Выделенн. + + + + TrackComment + + MusE: Track Comment + MusE: Комментарии к дорожке + + + Track Comment: + Комментарий к дорожке: + + + + 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 + + MusE: Midi Transpose + MusE: MIDI-транÑпонирование + + + Value + Значение + + + halftones + полутонов + + + Time + Ð’Ñ€ÐµÐ¼Ñ + + + all + вÑÑ‘ + + + between markers + между маркерами + + + Parts + ЧаÑти + + + all in selected tracks + вÑе в выбранных дорожках + + + OK + ОК + + + Cancel + Отменить + + + + VAMGui + + MusE: Load VAM Presets + MusE: загрузка преÑетов VAM + + + MusE: Save VAM Presets + MusE: Ñохранение преÑетов VAM + + + + VAMGuiBase + + Virtual Analogue for MusE + Virtual Analogue for MusE + + + LFO + LFO + + + Freq + ЧаÑтота + + + Waveform + Форма волны + + + Sine + СинуÑоида + + + Pulse + ÐŸÑƒÐ»ÑŒÑ + + + Saw + ÐŸÐ¸Ð»Ð¾Ð¾Ð±Ñ€Ð°Ð·Ð½Ð°Ñ + + + Triangle + Ð¢Ñ€ÐµÑƒÐ³Ð¾Ð»ÑŒÐ½Ð°Ñ + + + Filter + Фильтр + + + EnvMod + EnvMod + + + Attack + Ðтака + + + Decay + Первичное затухание + + + Sustain + Продление + + + Release + Затухание + + + Cutoff + Отключение + + + Resonance + Ð ÐµÐ·Ð¾Ð½Ð°Ð½Ñ + + + Invert + Инвертировать + + + KeyTrack + Трекинг клавиатуры + + + Presets + ПреÑеты + + + Set + УÑтановить + + + load preset list + Загрузить ÑпиÑок преÑетов + + + save preset list + Сохранить ÑпиÑок преÑетов + + + save preset list to a new file + Сохранить ÑпиÑок преÑетов в новый файл + + + delete preset + Удалить преÑет + + + DCO 1 + DCO 1 + + + Pitch + Ð’Ñ‹Ñота тона + + + Detune + РаÑÑтройка + + + PWM + PWM + + + FM + FM + + + PW + PW + + + DCO 2 + DCO 2 + + + On + Вкл + + + 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 +Выпущено на уÑловиÑÑ… GPL. +Copyright(C) 2002 +Jotsif Lindman Hörnlund +( jotsif@linux.nu ) + + + + VelocityBase + + MusE: Modify Velocity + MusE: Изменить Ñилу Ð½Ð°Ð¶Ð°Ñ‚Ð¸Ñ + + + Range + ОблаÑÑ‚ÑŒ + + + All Events + Ð’Ñе ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ + + + Selected Events + Выбранные ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ + + + Looped Events + Ð¡Ð¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð² цикле + + + Selected & Looped + Выбранные & в цикле + + + Values + Ð—Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ + + + Rate: + ЧаÑтота: + + + Offset: + Смещение: + + + % + % + + + OK + OК + + + Cancel + Отменить + + + + WTScale + + bar scale + шкала тактов + + + + WaveEdit + + &File + &Файл + + + weTools + weTools + + + Solo + Соло + + + Cursor + КурÑор + + + &Edit + &Правка + + + Func&tions + Фу&нкции + + + 200% + 200% + + + 150% + 150% + + + 75% + 75% + + + 50% + 50% + + + 25% + 25% + + + Other + Другой + + + &Gain + &УÑиление + + + Edit in E&xternal Editor + Изменить во &внешнем редакторе + + + Mute Selection + Приглушить выделенное + + + Normalize Selection + Ðормализовать выделенное + + + Fade In Selection + ÐараÑтание в выделенном + + + Fade Out Selection + УгаÑание в выделенном + + + Reverse Selection + Развернуть выделенное + + + Select &All + Выделить &вÑÑ‘ + + + &Deselect All + &Убрать выделение + + + Select + Выделить + + + + WaveTrackInfoBase + + MusE: TrackInfo + MusE: Инфо о дорожке + + + Track Info + Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ дорожке + + + Track Name + Ð˜Ð¼Ñ Ð´Ð¾Ñ€Ð¾Ð¶ÐºÐ¸ + + + Output Route: + Маршрут выхода: + + + Input Route: + Маршрут входа: + + + Ports: + Порты: + + + Mono + Моно + + + Stereo + Стерео + + + + WaveView + + MusE - file size changed + MusE - размео файла изменилÑÑ + + + When editing in external editor - you should not change the filesize +since it must fit the selected region. + +Missing data is muted + + + + + freeverb + + FreeVerb + + + + Rooom Size + + + + Damping + + + + Wet Level + + + + Tap-Reverberator + + + + Decay [ms] + + + + dB + Дб + + + Dry Level [dB] + + + + Wet Level [dB] + + + + Preset: + + + + 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 + + + + Comb Filters + + + + Allpass Filters + + + + Bandpass Filters + + + + Enhanced Stereo + + + + diff --git a/muse2/share/locale/muse_sv_SE.qm b/muse2/share/locale/muse_sv_SE.qm new file mode 100644 index 00000000..2a8c4dbb Binary files /dev/null and b/muse2/share/locale/muse_sv_SE.qm differ diff --git a/muse2/share/locale/muse_sv_SE.ts b/muse2/share/locale/muse_sv_SE.ts new file mode 100644 index 00000000..25b78cc5 --- /dev/null +++ b/muse2/share/locale/muse_sv_SE.ts @@ -0,0 +1,8357 @@ + + + + + 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 + + + + @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ör bakÃ¥t + + + move current position + flytta markör + + + 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 sedan 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 + + + pointer + pekare + + + pencil + penna + + + rubber + sudd + + + cutter + delare + + + score + partitur + + + glue + lim + + + quantize + kvantisering + + + draw + rita + + + mute parts + tysta parter + + + Off + Av + + + presets (*.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-Send + + + eraser + sudd + + + + AboutBox + + AboutBox + Om + + + Keep On Rocking! + Rocka pÃ¥! + + + Version 0.7.2pre5 + +(C) Copyright 1999-2005 Werner Schweer and others. +See http://www.muse-sequencer.org for new versions and +more information. + +Published under the GNU Public License + Version 0.7.2pre5 + +(C) Copyright 1999-2005 Werner Schweer och andra. +Se http://www.muse-sequencer.org för nya versioner och +och mer information. + +Publiserad under 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 + + + + 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 + + + + poly pressure + + + + controller + + + + aftertouch + + + + pitch bend + + + + program change + + + + special + + + + Background picture + Bakgrundsbild + + + bg + + + + select... + välj... + + + show snap grid + visa rutnät + + + Colors + Färger + + + Items + + + + selected + vald + + + current: + nuvarande: + + + change... + byt... + + + dynamic colors for track activity in arranger + dynamisk färgallokering för spÃ¥raktivitet i arranger + + + Style/Fonts + Stil/Typsnitt + + + QT Theme + QT-tema + + + Windows + + + + MusE + + + + Metal + + + + Norwegian Wood + + + + Platinum + + + + CDE + + + + Motif + + + + Motif Plus + + + + 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 palett + + + B + + + + S + + + + H + + + + V + + + + G + + + + R + + + + + Arranger + + Arranger + Arrangerare + + + Cursor + Markör + + + Off + Av + + + Bar + Takt + + + Snap + Fäst vid + + + Len + Längd + + + Type + Typ + + + NO + + + + GM + + + + GS + + + + XG + + + + midi song type + typ av midsÃ¥ng + + + Pitch + Tonhöjd + + + midi pitch + + + + global midi pitch shift + + + + Tempo + + + + midi tempo + + + + N + + + + TrackInfo + SpÃ¥rinfo + + + R + + + + M + + + + S + + + + C + + + + Track + SpÃ¥r + + + O-Port + + + + Ch + + + + T + + + + Master + Master + + + Group A + Grupp A + + + Group B + Grupp B + + + Group C + Grupp C + + + Group D + Grupp D + + + + 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 + + + MusE: Mixer + + + + &Create + &Skapa + + + &View + + + + Routing + + + + + AudioStrip + + panorama + + + + aux send level + aux send nivÃ¥ + + + off + av + + + Pan + + + + 1/2 channel + 1/2 kanal + + + Pre + + + + pre fader - post fader + + + + dB + + + + record + + + + mute + tysta + + + record downmix + spela in nermixning + + + solo mode (monitor) + + + + pre fader listening + pre fader lyssning + + + iR + + + + intput routing + ingÃ¥ngsrouting + + + oR + + + + output routing + utgÃ¥ngsrouting + + + Off + Av + + + Read + Läs + + + Touch + + + + Write + Skriv + + + automation type + automationstyp + + + Channel + Kanal + + + + BigTime + + MusE: Bigtime + + + + + ClipListEdit + + MusE: Clip List Editor + MusE: Clip-listredigerare + + + + ClipListEditorBase + + MusE: ClipList + MusE: Clip-lista + + + Name + Namn + + + Refs + + + + Start + + + + Len + Längd + + + Data + + + + Clip Properties + Clip-egenskaper + + + Pos: + + + + Len: + + + + + CommentBase + + Form1 + + + + Track Comment + SpÃ¥r-kommentar + + + Track 1 + SpÃ¥r 1 + + + + ConfigMidiFileBase + + MusE: Config Midi File Export + + + + &OK + &Ok + + + &Cancel + &Avbryt + + + 0 (single track) + 0 (ett spÃ¥r) + + + 1 (multiple tracks) + 1 (flera spÃ¥r) + + + Format: + + + + 96 + + + + 192 + + + + 384 + + + + Division: + + + + Copyright: + + + + Enable extended smf format + SlÃ¥ pÃ¥ utbyggt smf-format + + + + CtrlPanel + + Sel + + + + select controller + välj controller + + + x + + + + remove panel + ta bort panel + + + Velocity + Hastighet + + + Pitch + Tonhöjd + + + other ... + annat ... + + + add new ... + lägg till ny... + + + + DeicsOnzeGui + + Delete preset + Ta bort preset + + + Do you really want to delete %1 ? + Vill du verkligen ta bort %1 ? + + + &Yes + &Ja + + + &No + &Nej + + + + DeicsOnzeGuiBase + + DeicsOnze + + + + &Presets + + + + Load + Ladda + + + Save + Spara + + + Preset Name + Presetnamn + + + INIT VOICE + + + + Subcategory + Underkategori + + + NONE + + + + Category + Kategori + + + Delete + Ta bort + + + Preset + + + + New + Ny + + + Bank + + + + Bank numerous + + + + Prog + + + + Program numerous + + + + DeicsOnze v0.2.2 Copyright (c) 2004 Nil Geisweiller under GPL licence + + + + &Global + + + + Master Volume + Mastervolym + + + Master volume + Mastervolym + + + feedback + + + + Coarse Ratio + + + + Feedback of Op 4 + Ã…terkoppling för Op 4 + + + Function + Funktion + + + POLY + + + + MONO + + + + PBR + + + + Pitch Bend Range + Pitchbend omrÃ¥de + + + LFO + + + + PMS + + + + PMD + + + + AMD + + + + Speed + Hastighet + + + Delay + + + + AMS + + + + Saw Up + + + + Square + Fyrkant + + + Triangl + + + + S/Hold + + + + LFO Waveform + LFO VÃ¥gform + + + LFO Sync + + + + Amplitude Modulation Sensitivity + Amplitudmodulationskänslighet + + + Pitch Modulation Sensitivity + Pitchmodulationskänslighet + + + Pitch Modulation Depth + Pitchmodulationsdjup + + + LFO Speed + LFO Hastighet + + + LFO Delay + + + + Transpose and Global Detune + + + + Transpose + Transponera + + + Global Detune + + + + Algorithm 1 + + + + Algorithm 2 + + + + Algorithm 3 + + + + Algorithm 4 + + + + Algorithm 5 + + + + Algorithm 6 + + + + Algorithm 7 + + + + Algorithm 8 + + + + Modulation Matrix + Modulationsmatris + + + <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> + + + + Op &1 + + + + Frequency 1 + Frekvens 1 + + + FIX + + + + Coarse 1 + + + + Fine 1 + + + + Freq 1 + + + + Fine Ratio + + + + Fixed Frequency + + + + Envelope 1 + + + + RR1 + + + + D1R1 + + + + D1L1 + + + + D2R1 + + + + 1° Decay Level + + + + 2° Decay Rate + + + + 1° Decay Rate + + + + Release Rate + + + + AR1 + + + + Attack Rate + + + + Scaling 1 + + + + LS1 + + + + RS1 + + + + Level Scaling + + + + Attack Rate of the operator 1 + + + + Rate Scaling + + + + Vol 1 + + + + Volume + Volym + + + Sensitivity 1 + + + + EBS1 + + + + KVS1 + + + + AME1 + + + + Amplitude Modulation Enable + + + + Key Velocity Sensitivity + + + + EG Bias Sensitivity + + + + Detune Wave EGShift 1 + + + + Wave1 + + + + Wave2 + + + + Wave3 + + + + Wave4 + + + + Wave5 + + + + Wave6 + + + + Wave7 + + + + Wave8 + + + + 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> + + + + DET1 + + + + 96dB + + + + 48dB + + + + 24dB + + + + 12dB + + + + EG Shift + + + + Detune + + + + Op &2 + + + + Frequency 2 + + + + Freq 2 + + + + Fine 2 + + + + Coarse 2 + + + + Envelope 2 + + + + AR2 + + + + RR2 + + + + D2R2 + + + + D1L2 + + + + D1R2 + + + + Scaling 2 + + + + LS2 + + + + RS2 + + + + Vol 2 + + + + Sensitivity 2 + + + + EBS2 + + + + KVS2 + + + + AME2 + + + + Detune Wave EGShift 2 + + + + DET2 + + + + Op &3 + + + + Frequency 3 + + + + Coarse 3 + + + + Fine 3 + + + + Freq 3 + + + + Envelope 3 + + + + RR3 + + + + D2R3 + + + + D1L3 + + + + D1R3 + + + + AR3 + + + + Scaling 3 + + + + LS3 + + + + RS3 + + + + Vol 3 + + + + Sensitivity 3 + + + + EBS3 + + + + KVS3 + + + + AME3 + + + + Detune Wave EGShift 3 + + + + DET3 + + + + Op &4 + + + + Frequency 4 + + + + Coarse 4 + + + + Fine 4 + + + + Freq 4 + + + + Scaling 4 + + + + LS4 + + + + RS4 + + + + Envelope 4 + + + + AR4 + + + + RR4 + + + + D2R4 + + + + D1L4 + + + + D1R4 + + + + Vol 4 + + + + Sensitivity 4 + + + + EBS4 + + + + KVS4 + + + + AME4 + + + + Detune Wave EGShift 4 + + + + DET4 + + + + + 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 + + + Midi Input + + + + ctrl + + + + Add Controller View + Lägg till Controller vy + + + M + + + + Sound + Ljud + + + QNT + + + + E-Note + + + + Len + + + + A-Note + + + + Ch + + + + Port + + + + LV1 + + + + LV2 + + + + LV3 + + + + LV4 + + + + drummaps + trummappningar + + + Muse: Load Drum Map + Muse: Ladda trummappning + + + MusE: Store Drum Map + MusE: Spara trummappning + + + Set fixed length + Sätt fast längd + + + &Functions + &Funktioner + + + Modify Velocity + Modifiera Velocity + + + + EditCAfterDialog + + MusE: Enter Channel Aftertouch + + + + Time Position + Tidsposition + + + Pressure + Tryck + + + + 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: + + + + Time Position: + Tidspositions: + + + Value: + Värde: + + + controller value + controllervärde + + + OK + + + + Cancel + Avbryt + + + + EditCtrlBase + + MusE: Edit Controller Event + + + + Time Position + Tidsposition + + + Available Controller: + Tillgänglig controller: + + + Create New Controller + Skapa ny Controller: + + + textLabel3 + + + + Value + Värde + + + Controller + + + + H-Bank + + + + L-Bank + + + + Program + + + + off + av + + + pushButton4 + + + + &OK + &Ok + + + &Cancel + &Avbryt + + + + EditEventDialog + + Ok + + + + Cancel + Avbryt + + + + EditGainBase + + MusE: Modify gain + + + + Gain + + + + 200% + + + + 100% + + + + 0% + + + + &Reset + + + + Alt+R + + + + &Apply + &Verkställ + + + Alt+A + + + + &Cancel + &Avbryt + + + Alt+C + + + + + EditInstrumentBase + + MusE: Instrument Editor + + + + Patches + Patcher + + + Patch Name: + Patchnamn: + + + High Bank: + Hög bank: + + + Low Bank: + LÃ¥g bank: + + + Program: + + + + d.c. + dont care + + + + d.c. + + + + Patch/Group + Patch/Grupp; + + + &Delete + &Ta bort + + + Alt+D + + + + &New Patch + &Ny Patch + + + Alt+N + + + + New Group + Ny Grupp; + + + Drum + Trumma + + + GM + + + + GS + + + + XG + + + + 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 med vanligt använda midi-controllers +Notera att i MusE hanteras tonhöjd och program change som +vanliga controllers. + + + Properties + Egenskaper + + + Name + Namn + + + Type + Typ + + + Control7 + + + + Control14 + + + + RPN + + + + NRPN + + + + Pitch + Tonhöjd + + + Program + + + + H-Ctrl + + + + Midi Controller Number High Byte + Midicontrollernummer, hög byte + + + L-Ctrl + + + + Midi Controller Number Low Byte + Midicontrollernummer, lÃ¥g byte + + + Range + OmrÃ¥de + + + Min + + + + Max + + + + Default + + + + Name + + + + Type + Typ + + + Min Val + Minvärde + + + Max Val + Maxvärde + + + list of defined controllers + lista med definierade controllers + + + This is the MusE list of defined controllers. + Detta är MusEs lista med definierade controllers. + + + SysEx + + + + Initialization + Initiering + + + Panic + Panik + + + Hex Entry: + + + + &File + &Arkiv + + + Tools + Verktyg + + + New + Ny + + + &New + &Ny + + + Ctrl+N + + + + Open + Öppna + + + &Open... + &Öppna... + + + Ctrl+O + Ctrl+Ö + + + Save + Spara + + + &Save + &Spara + + + Ctrl+S + + + + 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 + + + + Cancel + Avbryt + + + TextLabel1 + + + + Time Position: + Tidsposition: + + + Meta Type: + Metatyp: + + + Enter Hex + Mata in hex + + + + EditNoteDialogBase + + MusE: Enter Note + MusE: Mata in Not + + + OK + + + + Cancel + Avbryt + + + Length: + Längd: + + + Time Position: + Tidsposition: + + + Pitch: + Tonhöjd: + + + Velocity On: + + + + Velocity Off: + + + + + EditPAfterDialog + + MusE: Enter Poly Aftertouch + MusE: Mata in Poly Aftertouch + + + Time Position + Tidsposition + + + Pitch + Tonhöjd + + + Pressure + Tryck + + + + 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 + + + + Cancel + Avbryt + + + + EditToolBar + + Edit Tools + Redigeringsverktyg + + + + EffectRack + + effect rack + effektrack + + + move up + flytta upp + + + move down + flytta ner + + + remove + ta bort + + + bypass + + + + show gui + visa gui + + + new + ny + + + change + ändra + + + Replace effect + Byt effekt + + + Do you really want to replace the effect %1? + Vill du verkligen ersätta effekten %1? + + + &Yes + &Ja + + + &No + &Nej + + + + ErrorHandlerBase + + Form1 + + + + We are sorry, MusE has encountered a +fatal error and is unable to continue. + Tyvärr har ett fatalt fel inträffat, MusE +kan inte fortsätta. + + + The Error +Message: + Felmeddelandet: + + + textLabel2 + + + + Terminate + Terminera + + + + FLUIDGui + + FLUID: open Soundfile + FLUID: öppna ljudbank + + + + FLUIDGuiBase + + Load + Ladda + + + Form1 + + + + Soundfont + + + + + 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 + + + FLUID Synth + + + + Dump Info + + + + ID + + + + Chnl + + + + Soundfont + + + + Drum Chnl + + + + Reverb + + + + CHANNEL SETUP + + + + Chorus + + + + LOADED SOUNDFONTS + + + + + FileDialogButtons + + Form1 + + + + Global + + + + User + Användare + + + Project + Projekt + + + Load: + Ladda: + + + Songdata + +Cofiguration + SÃ¥ngdata + +konfiguration + + + only +Songdata + bara sÃ¥ngdata + + + + FontSel + + Size: + Storlek: + + + + 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 + + + + Cancel + Avbryt + + + + GlobalSettingsDialogBase + + MusE: Global Settings + MusE: Globala Inställningar + + + &Apply + &Verkställ + + + &Ok + + + + &Cancel + &Avbryt + + + Audio + Ljud + + + Mixer + + + + dB + + + + min. Meter Value + min. Metervärde + + + min.Slider Val + min. Slider värde + + + Midi + Midi + + + Ticks + Tick + + + 1024 + + + + 2048 + + + + 4096 + + + + 8172 + + + + Displayed Resolution +(Ticks/Quarternote) + Visad upplösning +(Tick/Kvartsnot) + + + 48 + + + + 96 + + + + 192 + + + + 384 + + + + 768 + + + + 1536 + + + + 3072 + + + + 6144 + + + + 12288 + + + + RTC Resolution +(Ticks/Sec) + RTC-Upplösning +(Tick/Sek) + + + GUI + + + + Help Browser: + Hjälpläsare: + + + GUI Refresh Rate + GUI-uppdateringsfrekvens + + + /sec + /sek + + + Application + Applikation + + + Start Muse + Starta MusE + + + start with last song + starta med föregÃ¥ende sÃ¥ng + + + start with song + starta med sÃ¥ng + + + start song: + startsÃ¥ng: + + + Views + Vyer + + + y-pos + + + + show + visa + + + x-pos + + + + height + höjd + + + width + bredd + + + Big Time + + + + Arranger + Arrangerare + + + Transport + + + + Cur + + + + set current values + sätt nuvarande värden + + + start with template: default.med + börja med mall: default.med + + + show splash screen + visa splash + + + External Waveditor + Extern Ljudredigerare + + + External Waveditor command + Extern Ljudredigerarkommando + + + + LMaster + + MusE: Mastertrack + MusE: MasterspÃ¥r + + + Tempo + + + + Timesig + + + + new tempo + nytt tempo + + + new signature + ny signatur + + + Meter + + + + Time + Tid + + + Type + Typ + + + Value + Värde + + + &Edit + &Redigera + + + Insert Tempo + Sätt in tempo + + + Insert Signature + Sätt in signatur + + + Edit Positon + Editera position + + + Edit Value + Editera värde + + + Delete Event + Ta bort event + + + Reposition of the initial tempo and signature events is not allowed + Ompositionering av initalt tempo och/eller signaturevent är inte tillÃ¥tet + + + MusE: List Editor + + + + Input error, conversion not OK or value out of range + Inmatningsfel, konvertering felaktig eller värde utanför omrÃ¥de + + + Reposition of tempo and signature events to start position is not allowed! + Ompositionering av tempo och/eller signaturevent till startposition är inte tillÃ¥tet + + + + 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 + + + Tick + + + + Bar + Takt + + + Typ + + + + Ch + + + + Val A + + + + Val B + + + + Val C + + + + Len + + + + Comment + Kommentar + + + + MITTransposeBase + + MusE: Midi Input Plugin: Transpose + MusE: Midi Inputplugin: Transponering + + + On + PÃ¥ + + + TriggerKey + TriggNot + + + Transpose: + Transponering: + + + +0 + + + + + MPConfig + + none + inga + + + other raw ... + annan raw ... + + + MusE: Midi Port Table + MusE: Midiporttabell + + + Port + + + + GUI + + + + Instrument + + + + Device Name + Enhetsnamn + + + State + Status + + + unknown + okänd + + + I + + + + O + + + + + MRConfigBase + + MusE: Midi Input Plugin: Remote Control + MusE: Midiinputplugin: Fjärrkontroll + + + Activate + Aktivera + + + On + PÃ¥ + + + Actions + + + + Stop + Stopp + + + Record + Spela in + + + Goto Left Mark + GÃ¥ till vänster markering + + + Play + + + + + 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 + + + Hr:Mn:Sc:Fr:Sf + + + + Lock + LÃ¥s + + + Text + Text + + + Marker Properties + Markörinställningar + + + + MasterEdit + + MusE: Mastertrack + MusE: MasterspÃ¥r + + + edit tools + redigeringsverktyg + + + EnableMaster + Aktivera Master + + + use master track + använd master track + + + Info + + + + 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 + + + CurPos + + + + tempo at current position + tempo vid nuvarande position + + + time signature at current position + time signature vid nuvarande position + + + Enable + Aktivera + + + Enable usage of master track + Aktivera användning av masterspÃ¥r + + + + MetronomeConfigBase + + MusE: Metronome Config + MusE: Metronomeconfiguration + + + Metronome + Metronom + + + Audio Beep + Audio - Ton + + + MIDI Click + Midiklick + + + Midi Channel + Midikanal + + + Measure Note + Taktnot + + + Measure Velocity + Taktanslag + + + Beat Velocity + Slaganslag + + + Beat Note + Slagnot + + + Midi Port + Midiport + + + Precount + Inräkning + + + enable + pÃ¥ + + + Bars + Takter + + + From Mastertrack + FrÃ¥n MasterspÃ¥r + + + / + + + + Signature + + + + Prerecord + + + + Preroll + + + + &Apply + &Verställ + + + &OK + &Ok + + + &Cancel + &Avbryt + + + + 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ördefinieradecontrollers: + + + H-Ctrl + + + + L-Ctrl + + + + 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 med vanligt använda midi-controllers. +Notera att tonhöjd- och program-change hanteras +som vanliga controllers i MusE. + + + Control7 + + + + Control14 + + + + RPN + + + + NRPN + + + + Pitch + Tonhöjd + + + Program + + + + Midi Controller Number High Byte + Midicontrollernummer, hög byte + + + Midi Controller Number Low Byte + Midicontrollernummer, lÃ¥g byte + + + Range + OmrÃ¥de + + + + 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 + + + + Record Filter + Inspelningsfilter + + + Note On + Noteon + + + Poly Pressure + + + + Controller + + + + Program Change + + + + After Touch + + + + Pitch Bend + + + + Sysex + + + + Thru Filter + + + + Controller Filter + + + + Channel Filter + + + + 14 + + + + 10 + + + + 6 + + + + 12 + + + + 4 + + + + 2 + + + + 9 + + + + 8 + + + + 3 + + + + 13 + + + + 15 + + + + 16 + + + + 7 + + + + 11 + + + + 5 + + + + 1 + + + + + MidiInputTransformDialog + + New + Ny + + + + MidiInputTransformDialogBase + + MusE: Midi Input Transformator + MusE: Midi inputtransformator + + + Filter + Filter + + + All + Alla + + + Equal + Lika + + + Unequal + Ej lika + + + Note + Not + + + Poly Pressure + + + + Control Change + + + + Aftertouch + + + + Pitch Bend + + + + NRPN + + + + RPN + + + + 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 + + + Port + + + + Processing + Bearbetar + + + Keep + BehÃ¥ll + + + Fix + + + + Plus + + + + Minus + + + + Multiply + Multiplicera + + + Divide + Dela + + + Invert + Invertera + + + ScaleMap + Skalmap + + + Flip + Vänd + + + Dyn + + + + Random + Slumpmässig + + + Modules + Moduler + + + 1 + + + + 2 + + + + 3 + + + + 4 + + + + enable modul 1 + aktivera modul 1 + + + enable modul 2 + aktivera modul 2 + + + enable modul 3 + aktivera modul 3 + + + enable modul 4 + aktivera modul 4 + + + Preset + + + + Name: + Namn: + + + Comment: + Kommentar: + + + Function + Funktion + + + &New + &Ny + + + create new preset + skapa ny preset + + + &Delete + &Ta bort + + + delete preset + ta bort preset + + + &Dismiss + &Stäng + + + PresetList + Presetlista + + + + MidiPortRouteBase + + MusE: Midi Port Routing + + + + Port 2 + + + + Output + UtgÃ¥ng + + + Input + IngÃ¥ng + + + + 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 + + VariationSend + + + + Var + + + + ReverbSend + + + + Rev + + + + ChorusSend + + + + Cho + + + + off + av + + + dB + + + + Pan/Balance + Pan/Balans + + + Pan + + + + record + spela in + + + mute + tysta + + + pre fader listening + pre fader lyssning + + + Route + + + + set routing + + + + Off + Av + + + Read + Läs + + + Touch + + + + Write + Skriv + + + automation type + automationstyp + + + + MidiSyncConfigBase + + MusE: Midi Sync + MusE: Midisync + + + Sync Mode + Synkläge + + + Master + Master + + + Slave + Slav + + + Sync Source + Sync-källa + + + accept MTC + acceptera MTC + + + accept Midi Clock + acceptera Midiclocka + + + accept MMC + acceptera MMC + + + Id: + + + + device id + + + + Port: + + + + all + alla + + + midi port + midiport + + + Sync Gen + + + + Midi Time Code (MTC) + + + + Midi Clock + Midiklocka + + + Midi Machine Control (MMC) + + + + Apply + Verkställ + + + Ok + + + + Cancel + Avbryt + + + MTC + + + + Type: + Typ: + + + 24 + + + + 25 + + + + 30D + + + + 30N + + + + Offset: + Offset: + + + hour + timma + + + h + + + + minute + minut + + + m + + + + second + sekund + + + s + + + + frame + + + + f + + + + subframe + + + + + 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 + + + OCh. + + + + ??? + + + + select instrument patch + välj instrumentpatch + + + Transp. + + + + Volume + Volym + + + Channel Info + Kanalinfo + + + Pan + + + + Delay + + + + H-Bank + + + + Compr. + + + + L-Bank + + + + Progr. + + + + Velocity + Hastighet + + + Length + Längd + + + input ports + inputportar + + + IChan. + + + + 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 + + + record: + spela in: + + + Rec + + + + add settings to song + lägg inställningar till sÃ¥ng + + + Bank Select LSB + Välj bank LSB + + + Bank Select MSB + Välj bank MSB + + + + MidiTransformDialogBase + + MusE: Midi Transformator + + + + &New + &Ny + + + &Delete + &Ta bort + + + &Apply + &Verkställ + + + &OK + &Ok + + + &Cancel + &Avbryt + + + PresetList + Presetlista + + + Processing + Bearbetar + + + Event Type + Händelsetyp + + + Keep + BehÃ¥ll + + + Fix + + + + Note + Not + + + Poly Pressure + + + + Control Change + + + + Aftertouch + + + + Pitch Bend + + + + NRPN + + + + RPN + + + + Plus + + + + Minus + + + + Multiply + Multiplicera + + + Divide + Dela + + + Value 2 + Värde 2 + + + Invert + Invertera + + + ScaleMap + Skalmap + + + Flip + Vänd + + + Dyn + + + + Random + Slumpmässig + + + Value 1 + Värde 1 + + + Length + Längd + + + Position + + + + 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 + + + Preset + + + + Name: + Namn: + + + Comment: + Kommentar: + + + Range + OmrÃ¥de + + + process all events + bearbeta alla händelser + + + selected tracks + valda spÃ¥r + + + inside loop + I loop + + + Function + Funktion + + + Select + Välj + + + Quantize + Kvantisera + + + Delete + Ta bort + + + Transform + Transformera + + + Insert + Sätt in + + + Copy + Kopiera + + + Extract + Extrahera + + + Quantize Value + Kvantisera värde + + + + MidiTransformerDialog + + New + Ny + + + + MixdownFileDialog + + Wave Files (*.wav);;All Files (*) + Ljudfiler (*.wav);;Alla filer (*) + + + + MixdownFileDialogBase + + MusE: Set Mixdown Wavefile + MusE: Välj mixdown-ljudfil + + + &OK + &Ok + + + &Cancel + &Avbryt + + + File Path + Sökväg till fil + + + Channel + Kanal + + + Stereo + + + + Mono + + + + 5.1 + + + + wav,16 Bit + + + + wav, 24 Bit + + + + wav, 32 Bit (float) + + + + Format + + + + + Mixer + + MusE: Midi Mixer + MusE: Midimixer + + + Master + Master + + + + 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 + + + Transport + + + + loop + + + + Loop + + + + punchin + + + + Punchin + + + + punchout + + + + Punchout + + + + start + + + + Start + + + + rewind + flytta tillbaka + + + Rewind + Flytta tillbaka + + + forward + frammÃ¥t + + + Forward + FrammÃ¥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 + + + Crescendo + + + + 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 + + + Transport Panel + Transportpanel + + + 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 + Utseendeinställningar + + + Soft Synthesizer + Mjukvarusynthar + + + Midi Ports + Midiportar + + + Audio System + Audiosubsystem + + + Save Configuration + Spara Inställningar + + + Midi Input Transform + + + + Midi Input Filter + + + + Midi Remote Control + Midi-fjärrkontroll + + + Random Rhythm Generator + Slumprytmgenerator + + + &Midi + + + + Mixer + + + + Define Controller + Definiera Controller + + + Input Plugins + + + + Reset Instr. + Resetta Instr. + + + Init Instr. + + + + local off + lokal av + + + &Audio + L&jud + + + 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 + &Inte spara + + + &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 skriver över nuvarande Projekt +Spara nuvarande Projekt? + + + &Overwrite + Skriv &över + + + no help found at: + ingen h jälp hittad vid: + + + MusE: Open Help + Muse: Arkiv hjälp + + + to import a audio file you have first to selecta wave track + för att importa en ljudfil sÃ¥ mÃ¥ste du första välja ett wavespÃ¥r + + + Delete Selected Tracks + Ta bort valda spÃ¥r + + + View + Vy + + + Restart Audio + Starta om Audio + + + Automation + + + + Mixer Automation + Mixerautomation + + + Take Snapshot + Ta ett snapshot + + + Clear Automation Data + Rensa automationsdata + + + Settings + Inställningar + + + Configure shortcuts + Konfigurera kortkommandon + + + Midi File Export + Midifilexport + + + Midi Ports / Soft Synth + Midiportar / Mjukvarusyntar + + + &Manual + + + + &MusE homepage + M&usEs hemsida + + + &Report Bug... + &Rapportera fel... + + + &About MusE + &Om MusE + + + What's &This? + Vad är &detta? + + + 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 + + + + set left/right marker for bounce range + sätt vänster och höger markör till bounce-omrÃ¥de + + + MusE: Bounce to File + MusE: Bounce till fil + + + no output track found + hittar inget utgÃ¥ngsspÃ¥r + + + Add midi file to current project? + + Lägg midifil till nuvarande projekt? + + + &Add to Project + &Lägg till projekt + + + &Replace + &Ersätt + + + +failed: + +misslyckades: + + + Import Part + Importera Part + + + Marker View + Markörvy + + + &Skip + &Hoppa över + + + Import part is only valid for midi tracks! + Bara midispÃ¥r kan importera parter! + + + MusE: load part + MusE: ladda part + + + No track selected for import + Inget spÃ¥r valt för import + + + + NewPreset + + New preset + Ny preset + + + Preset Name + Presetnamn + + + INIT VOICE + + + + Subcategory + Underkategori + + + NONE + + + + Category + Kategori + + + Bank + + + + Bank numerous + + + + Prog + + + + Program numerous + + + + &Cancel + &Avbryt + + + Alt+C + + + + &Ok + + + + Alt+O + + + + + NoteInfo + + Note Info + Notinfo + + + Start + + + + Len + + + + Pitch + Tonhöjd + + + Velo On + + + + Velo Off + + + + + OrganGuiBase + + Presets + Preset + + + load preset list + öppna presetlista + + + save preset list + spara presetlista + + + MusE: Organ + + + + Drawbars + + + + 16' + + + + 4' + + + + 2 2/3' + + + + 2' + + + + 5 1/3' + + + + 8' + + + + Envelope Hi + + + + Release + + + + Sustain + + + + Decay + + + + Attack + + + + ms + + + + cB + + + + Envelope Lo + + + + O-1 + + + + Oscillator + + + + Brass + + + + Reed + + + + Flute + + + + Velocity + Hastighet + + + + 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 + + + Can only paste to midi/drum track + Kan endast klistra in pÃ¥ midi/trummspÃ¥r + + + Can only paste to wave track + Kan endast klistra till wavespÃ¥r + + + export + exportera + + + MusE: save part + MusE: spara part + + + + PatchBay + + MusE: ALSA MIDI Patch Bay + + + + + PatchBayBase + + ALSA Patch Bay + + + + + 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 + + + Crescendo + + + + 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 + + + Midi Input + + + + Play Events + Spela Händelser + + + ctrl + + + + Add Controller View + Lägg till Controller Vy + + + Set fixed length + Sätt fast längd + + + + PluginDialog + + MusE: select plugin + MusE: välj plugin + + + Lib + + + + Label + Etikett + + + Name + Namn + + + AI + + + + AO + + + + CI + + + + CO + + + + IP + + + + id + + + + Maker + Upphovsman + + + Copyright + + + + Ok + + + + Cancel + Avbryt + + + Stereo and Mono + Stereo och mono + + + Stereo + + + + Mono + + + + All + Alla + + + 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. + Välj vilka typer av plugins som skall vara synliga i listan.<br>Notera att användning av mono plugins pÃ¥ ett stereospÃ¥r inte är nÃ¥got problem, tvÃ¥ instanser kommer<br> att att användas parallellt. Var ocksÃ¥ medveten om att 'alla' alternativet inkluderar plugins som MusE antagligen inte kan använda. + + + + 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 + + + + PrinterConfig + + MusE: Config Printer + MusE: Konfigurera Skrivare + + + Print to file + Skriv till fil + + + Print Command + Utskriftskommando + + + Preview Command + Förhandsgranskningskommando + + + Cancel + Avbryt + + + + 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 + slÃ¥r pÃ¥ läsning frÃ¥n device + + + enables writing to device + slÃ¥r pÃ¥ skrivning till device + + + + 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 + + Arkiv + + + +exists + existerar + + + MusE: write + MusE: skriv + + + Overwrite + Spara inte + + + 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 + + + + 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 + + + + RhythmBase + + MusE: Random Rhythm Generator + MusE: Slumprytmgenerator + + + Instrument Properties + Instrumentinställningar + + + counts/bar + slag/takt + + + steps/count + + + + # bars + # takter + + + test + + + + contrib + + + + 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 + + + Instrument + + + + steps/count + + + + list of defined controllers + lista med definierade controllers + + + This is the MusE list of defined controllers. + Detta är MusEs lista med definierade controllers. + + + &File + &Arkiv + + + &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! + + + + Ctrl+N + + + + Ctrl+O + + + + Ctrl+S + + + + Ctrl+P + + + + Ctrl+Z + + + + Ctrl+Y + + + + Ctrl+X + + + + Ctrl+C + + + + Ctrl+V + + + + Ctrl+F + + + + + 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 + + + + + + + Form3 + + + + Hi-Hat + + + + steps/count + + + + contrib + + + + + RouteDialogBase + + MusE: Routing + + + + Add Route + Lägg till rutt + + + Source: + Källa: + + + Destination: + + + + Connect + Koppla + + + connect source to destination + koppla källa till destination + + + Current Routes + Nuvarande rutter + + + Source + Källa + + + Destination + + + + Remove + Ta bort + + + remove selected route + Ta bort vald rutt + + + + SS_PluginChooserBase + + SimpleDrums - Ladspa Plugin Chooser + SimpleDrums - Ladspa pluginväljare + + + Name + Namn + + + Label + Etikett + + + Inports + Inporta + + + Outports + Utportar + + + Creator + Upphovsman + + + &Cancel + &Avbryt + + + Alt+C + Alt+A + + + &OK + &Ok + + + Alt+O + + + + + 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 + + + + Cancel + Avbryt + + + Shortcut conflicts with + Kortkommando konfliktar med + + + Undefined + Odefinierad + + + + ShortcutCaptureDialogBase + + Enter shortcut sequence + Ange kortkommandosekvens + + + Press keys to enter shortcut sequence! + Tryck pÃ¥ tangenter för att ange kortkommandosekvens: + + + Old shortcut: + Gammalt kortkommando + + + Undefined + Odefinierad + + + New shortcut: + Nytt kortkommando + + + OK + + + + Cancel + Avbryt + + + + ShortcutConfigBase + + Configure Keyboard Shortcuts + Konfigurera tangentbordskortkommando + + + Shortcut Category + Kortkommandokategori + + + Description + Beskrivning + + + Shortcut + Kortkommando + + + &Clear + &Rensa + + + Alt+C + Alt+R + + + &Define + &Definiera + + + Alt+D + + + + &Apply + &Verkställ + + + Alt+A + + + + + SigScale + + signature scale + signaturskala + + + + SimpleDrumsGuiBase + + DrumSynth 0.1 + + + + + SimpleSynthGui + + &Load setup + &Ladda setup + + + &Save setup + &Spara setup + + + + StkGuiBase + + Voices + Röster + + + Edit + Redigera + + + + SynthConfigBase + + MusE: Synth Configuration + MusE: Syntinställningar + + + Soft Synthesizer + Mjukvarusynt + + + File + Arkiv + + + Instances + Instanser + + + Name + Namn + + + list of available software synthesizers + lista med tillgängliga mjukvarusyntar + + + Add Instance + Lägg till instans + + + Remove Instance + Ta bort instans + + + Midi Port + Midiport + + + Midi connections + Midikopplingar + + + Inst + + + + Version + + + + Description + Beskrivning + + + + 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 + + + MusE: bad trackname + MusE: dÃ¥ligt spÃ¥rnamn + + + please choose a unique track name + vänligen välj ett unikt spÃ¥rnamn + + + Add Output + Lägg till utgÃ¥ng + + + Add Group + Lägg till grupp + + + Add Input + Lägg till ingÃ¥ng + + + Add Aux Send + Lägg till aux-send + + + Update drummap? + Updatera trum-map? + + + Do you want to use same port for all instruments in the drummap? + Vill du använda samma port för alla instrument i trum-map:en? + + + &Yes + &Ja + + + &No + &Nej + + + Do you want to use same port and channel for all instruments in the drummap? + Vill du använda samma port och kanal för alla instrument i trummap:en? + + + + TempoSig + + Tempo/Sig + + + + + Toolbar1 + + Solo + + + + 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. + + + + TrackComment + + MusE: Track Comment + MusE: SpÃ¥rkommentar + + + Track Comment: + SpÃ¥rkommentar: + + + + Transport + + Overdub + + + + Replace + Ersätt + + + Rec Mode + Recläge + + + Normal + + + + Mix + + + + Cycle Rec + + + + punchin + + + + loop + + + + punchout + + + + Punch In + + + + Loop + + + + Punch Out + + + + 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 + + + AC + + + + quantize during record + kvantisera under inspelning + + + Click + + + + 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 + + + OK + + + + Cancel + Avbryt + + + + VAMGui + + MusE: Save VAM Presets + MusE: Spara 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Ã¥ + + + LFO + + + + Freq + + + + EnvMod + + + + Attack + + + + Decay + + + + Sustain + + + + Release + + + + Cutoff + + + + Resonance + + + + KeyTrack + + + + Set + + + + DCO 1 + + + + Detune + + + + PWM + + + + FM + + + + PW + + + + DCO 2 + + + + VAM 1.0beta3 +Virtual Analog for MusE +Released under GPL. +Copyright(C) 2002 +Jotsif Lindman Hörnlund +( jotsif@linux.nu ) +Copyright(C) 2005 +Robert Jonsson +(rj@spamatica.se) + + + + + 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: + + + % + + + + OK + + + + Cancel + Avbryt + + + + WTScale + + bar scale + takt-skala + + + + WaveEdit + + &File + &Arkiv + + + Functions + Funktioner + + + Normalize + Normalisera + + + weTools + + + + Solo + + + + Cursor + Markör + + + &Edit + &Redigera + + + Func&tions + Funk&tioner + + + 200% + + + + 150% + + + + 75% + + + + 50% + + + + 25% + + + + Other + Andra + + + &Gain + + + + Edit in E&xternal Editor + Editera i e&xtern redigerare + + + Mute Selection + Tysta markering + + + Normalize Selection + Normalisera markering + + + Fade In Selection + Tona in markering + + + Fade Out Selection + Tona ut Markering + + + Reverse Selection + Reversera markering + + + Select &All + Markera &Allt + + + &Deselect All + + + + Select + Välj + + + + WaveTrackInfoBase + + MusE: TrackInfo + MusE: SpÃ¥rinfo + + + Track Info + SpÃ¥rinfo + + + Track Name + SpÃ¥rnamn + + + Output Route: + UtgÃ¥ngsrutt: + + + Input Route: + IngÃ¥ngsrutt: + + + Ports: + Portar: + + + Mono + + + + Stereo + + + + + WaveView + + MusE - external editor failed + MusE - fel med extern redigerare + + + MusE was unable to launch the external editor +check if the editor setting in: +Global Settings->Audio:External Waveditor +is set to a valid editor. + MusE kunde inte starta extern redigerare +kontrollera om inställningarna i: +Globala inställningar->Ljud:Extern ljudredigerare +är satt till en giltig redigerarbinär + + + MusE - file size changed + MusE - filstorleken har förändrats + + + When editing in external editor - you should not change the filesize +since it must fit the selected region. + +Missing data is muted + Vid editering i extern editor - bör du inte ändra filstorleken +eftersom den mÃ¥ste passa i regionen. + +Saknat data tystas + + + + freeverb + + FreeVerb + + + + Rooom Size + Rumstorlek + + + Damping + Dämpning + + + Wet Level + + + + Tap-Reverberator + + + + Decay [ms] + + + + dB + + + + Dry Level [dB] + + + + Wet Level [dB] + + + + Preset: + + + + 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 + + + + Comb Filters + + + + Allpass Filters + + + + Bandpass Filters + + + + Enhanced Stereo + + + + diff --git a/muse2/share/plugins/1050.ui b/muse2/share/plugins/1050.ui new file mode 100644 index 00000000..ce4448ae --- /dev/null +++ b/muse2/share/plugins/1050.ui @@ -0,0 +1,246 @@ + +freeverb + + + freeverb + + + + 0 + 0 + 516 + 87 + + + + + 5 + 4 + 0 + 0 + + + + FreeVerb + + + + unnamed + + + 4 + + + 2 + + + + textLabel1 + + + + 5 + 0 + 0 + 0 + + + + Room Size + + + + + P1slider + + + + 7 + 0 + 10 + 0 + + + + 1 + + + 1 + + + Horizontal + + + + + P0label + + + + 4 + 0 + 0 + 0 + + + + true + + + 0 + + + 0 + + + 0 + + + 1 + + + 4 + + + + + P1label + + + + 4 + 0 + 0 + 0 + + + + true + + + 1 + + + 0 + + + 0 + + + 1 + + + 4 + + + + + textLabel2 + + + + 5 + 0 + 0 + 0 + + + + Damping + + + + + P2slider + + + + 7 + 0 + 10 + 0 + + + + 2 + + + 1 + + + Horizontal + + + + + P2label + + + + 4 + 0 + 0 + 0 + + + + true + + + 2 + + + 0 + + + 0 + + + 1 + + + 4 + + + + + textLabel3 + + + + 5 + 0 + 0 + 0 + + + + Wet Level + + + + + P0slider + + + + 5 + 0 + 10 + 0 + + + + 0 + + + 1 + + + Horizontal + + + + + + diff --git a/muse2/share/plugins/2142.ui b/muse2/share/plugins/2142.ui new file mode 100644 index 00000000..2a0ae35f --- /dev/null +++ b/muse2/share/plugins/2142.ui @@ -0,0 +1,520 @@ + +freeverb + + + freeverb + + + + 0 + 1 + 512 + 205 + + + + + 5 + 4 + 0 + 0 + + + + + 400 + 200 + + + + Tap-Reverberator + + + + unnamed + + + + textLabel1 + + + Decay [ms] + + + + + P0label + + + + 5 + 0 + 0 + 0 + + + + true + + + 0 + + + 0 + + + 0 + + + 10000 + + + 0 + + + + + P1label + + + + 5 + 0 + 0 + 0 + + + + true + + + 1 + + + 0 + + + -70 + + + 10 + + + dB + + + 2 + + + + + textLabel2 + + + Dry Level [dB] + + + + + P2label + + + + 5 + 0 + 0 + 0 + + + + true + + + 2 + + + 0 + + + -70 + + + 10 + + + dB + + + 2 + + + + + textLabel3 + + + Wet Level [dB] + + + + + P1Slider + + + + 7 + 5 + 10 + 0 + + + + 1 + + + -70 + + + 10 + + + Horizontal + + + + + P2Slider + + + + 7 + 5 + 10 + 0 + + + + 2 + + + -70 + + + 10 + + + Horizontal + + + + + P0Slider + + + + 7 + 5 + 10 + 0 + + + + 0 + + + 10000 + + + Horizontal + + + + + layout1 + + + + unnamed + + + + textLabel1_2 + + + + 4 + 5 + 0 + 0 + + + + Preset: + + + + + + + + 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 + + + + P7presetCombo + + + + 5 + 0 + 0 + 0 + + + + + + P3checkbox + + + Comb Filters + + + + + P4checkbox + + + Allpass Filters + + + + + P5checkbox + + + Bandpass Filters + + + + + P6checkBox + + + Enhanced Stereo + + + + + + diff --git a/muse2/share/plugins/Makefile.am b/muse2/share/plugins/Makefile.am new file mode 100644 index 00000000..585ac69f --- /dev/null +++ b/muse2/share/plugins/Makefile.am @@ -0,0 +1,5 @@ +EXTRA_DIST = $(wildcard *.ui) + +pluginspkgdata_DATA = $(EXTRA_DIST) + +pluginspkgdatadir = $(pkgdatadir)/plugins diff --git a/muse2/share/plugins/Makefile.in b/muse2/share/plugins/Makefile.in new file mode 100644 index 00000000..e96d7a0f --- /dev/null +++ b/muse2/share/plugins/Makefile.in @@ -0,0 +1,465 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = share/plugins +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal-include.m4 \ + $(top_srcdir)/m4/alsa.m4 $(top_srcdir)/m4/docbook.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(pluginspkgdatadir)" +DATA = $(pluginspkgdata_DATA) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DOCBOOKSTYLE = @DOCBOOKSTYLE@ +DOCBOOKTARGETS = @DOCBOOKTARGETS@ +DOT = @DOT@ +DOTPATH = @DOTPATH@ +DOXYGEN = @DOXYGEN@ +DOXYGEN_TREEVIEW = @DOXYGEN_TREEVIEW@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FLUIDSYNTHDIRS = @FLUIDSYNTHDIRS@ +FST_CFLAGS = @FST_CFLAGS@ +FST_LIBS = @FST_LIBS@ +Fluidsynth_CFLAGS = @Fluidsynth_CFLAGS@ +Fluidsynth_LIBS = @Fluidsynth_LIBS@ +GIVERTCAP = @GIVERTCAP@ +GREP = @GREP@ +HAVEDOT = @HAVEDOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_LIBS = @JACK_LIBS@ +JADE = @JADE@ +LASH_CFLAGS = @LASH_CFLAGS@ +LASH_LIBS = @LASH_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LO_CFLAGS = @LO_CFLAGS@ +LO_LIBS = @LO_LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MUSECXXFLAGS = @MUSECXXFLAGS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NSGMLS = @NSGMLS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PCH = @PCH@ +PERL = @PERL@ +PKG_CONFIG = @PKG_CONFIG@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIB = @PYTHON_LIB@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QTDIR_BIN = @QTDIR_BIN@ +QTDIR_INC = @QTDIR_INC@ +QT_LIBS = @QT_LIBS@ +RANLIB = @RANLIB@ +SAMPLERATE_CFLAGS = @SAMPLERATE_CFLAGS@ +SAMPLERATE_LIBS = @SAMPLERATE_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ +SNDFILE_LIBS = @SNDFILE_LIBS@ +STRIP = @STRIP@ +SUIDBUILD = @SUIDBUILD@ +SUIDINSTALL = @SUIDINSTALL@ +USE_SSE = @USE_SSE@ +UUID_CFLAGS = @UUID_CFLAGS@ +UUID_LIBS = @UUID_LIBS@ +VERSION = @VERSION@ +XMKMF = @XMKMF@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +have_docbook = @have_docbook@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +synth_fluid = @synth_fluid@ +synth_fluidsynth = @synth_fluidsynth@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +EXTRA_DIST = $(wildcard *.ui) +pluginspkgdata_DATA = $(EXTRA_DIST) +pluginspkgdatadir = $(pkgdatadir)/plugins +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu share/plugins/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu share/plugins/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-pluginspkgdataDATA: $(pluginspkgdata_DATA) + @$(NORMAL_INSTALL) + test -z "$(pluginspkgdatadir)" || $(MKDIR_P) "$(DESTDIR)$(pluginspkgdatadir)" + @list='$(pluginspkgdata_DATA)'; test -n "$(pluginspkgdatadir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pluginspkgdatadir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(pluginspkgdatadir)" || exit $$?; \ + done + +uninstall-pluginspkgdataDATA: + @$(NORMAL_UNINSTALL) + @list='$(pluginspkgdata_DATA)'; test -n "$(pluginspkgdatadir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(pluginspkgdatadir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(pluginspkgdatadir)" && rm -f $$files +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(DATA) +installdirs: + for dir in "$(DESTDIR)$(pluginspkgdatadir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-pluginspkgdataDATA + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-pluginspkgdataDATA + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + distclean distclean-generic distclean-libtool distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-pluginspkgdataDATA install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am uninstall uninstall-am uninstall-pluginspkgdataDATA + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/muse2/share/pybridge/Makefile.am b/muse2/share/pybridge/Makefile.am new file mode 100644 index 00000000..dc323905 --- /dev/null +++ b/muse2/share/pybridge/Makefile.am @@ -0,0 +1,6 @@ +EXTRA_DIST = $(wildcard *.py) + +pybridgepkgdata_DATA = $(EXTRA_DIST) + +pybridgepkgdatadir = $(pkgdatadir)/pybridge + diff --git a/muse2/share/pybridge/Makefile.in b/muse2/share/pybridge/Makefile.in new file mode 100644 index 00000000..8fe22658 --- /dev/null +++ b/muse2/share/pybridge/Makefile.in @@ -0,0 +1,466 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = share/pybridge +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal-include.m4 \ + $(top_srcdir)/m4/alsa.m4 $(top_srcdir)/m4/docbook.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(pybridgepkgdatadir)" +DATA = $(pybridgepkgdata_DATA) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DOCBOOKSTYLE = @DOCBOOKSTYLE@ +DOCBOOKTARGETS = @DOCBOOKTARGETS@ +DOT = @DOT@ +DOTPATH = @DOTPATH@ +DOXYGEN = @DOXYGEN@ +DOXYGEN_TREEVIEW = @DOXYGEN_TREEVIEW@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FLUIDSYNTHDIRS = @FLUIDSYNTHDIRS@ +FST_CFLAGS = @FST_CFLAGS@ +FST_LIBS = @FST_LIBS@ +Fluidsynth_CFLAGS = @Fluidsynth_CFLAGS@ +Fluidsynth_LIBS = @Fluidsynth_LIBS@ +GIVERTCAP = @GIVERTCAP@ +GREP = @GREP@ +HAVEDOT = @HAVEDOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_LIBS = @JACK_LIBS@ +JADE = @JADE@ +LASH_CFLAGS = @LASH_CFLAGS@ +LASH_LIBS = @LASH_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LO_CFLAGS = @LO_CFLAGS@ +LO_LIBS = @LO_LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MUSECXXFLAGS = @MUSECXXFLAGS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NSGMLS = @NSGMLS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PCH = @PCH@ +PERL = @PERL@ +PKG_CONFIG = @PKG_CONFIG@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIB = @PYTHON_LIB@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QTDIR_BIN = @QTDIR_BIN@ +QTDIR_INC = @QTDIR_INC@ +QT_LIBS = @QT_LIBS@ +RANLIB = @RANLIB@ +SAMPLERATE_CFLAGS = @SAMPLERATE_CFLAGS@ +SAMPLERATE_LIBS = @SAMPLERATE_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ +SNDFILE_LIBS = @SNDFILE_LIBS@ +STRIP = @STRIP@ +SUIDBUILD = @SUIDBUILD@ +SUIDINSTALL = @SUIDINSTALL@ +USE_SSE = @USE_SSE@ +UUID_CFLAGS = @UUID_CFLAGS@ +UUID_LIBS = @UUID_LIBS@ +VERSION = @VERSION@ +XMKMF = @XMKMF@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +have_docbook = @have_docbook@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +synth_fluid = @synth_fluid@ +synth_fluidsynth = @synth_fluidsynth@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +EXTRA_DIST = $(wildcard *.py) +pybridgepkgdata_DATA = $(EXTRA_DIST) +pybridgepkgdatadir = $(pkgdatadir)/pybridge +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu share/pybridge/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu share/pybridge/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-pybridgepkgdataDATA: $(pybridgepkgdata_DATA) + @$(NORMAL_INSTALL) + test -z "$(pybridgepkgdatadir)" || $(MKDIR_P) "$(DESTDIR)$(pybridgepkgdatadir)" + @list='$(pybridgepkgdata_DATA)'; test -n "$(pybridgepkgdatadir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pybridgepkgdatadir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(pybridgepkgdatadir)" || exit $$?; \ + done + +uninstall-pybridgepkgdataDATA: + @$(NORMAL_UNINSTALL) + @list='$(pybridgepkgdata_DATA)'; test -n "$(pybridgepkgdatadir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(pybridgepkgdatadir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(pybridgepkgdatadir)" && rm -f $$files +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(DATA) +installdirs: + for dir in "$(DESTDIR)$(pybridgepkgdatadir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-pybridgepkgdataDATA + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-pybridgepkgdataDATA + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + distclean distclean-generic distclean-libtool distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am \ + install-pybridgepkgdataDATA install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-pybridgepkgdataDATA + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/muse2/share/pybridge/Pyro_NS_URI b/muse2/share/pybridge/Pyro_NS_URI new file mode 100644 index 00000000..8e304cc1 --- /dev/null +++ b/muse2/share/pybridge/Pyro_NS_URI @@ -0,0 +1 @@ +PYRO://127.0.1.1:9090/7f0001010beb68ea2286bbe6686be546 diff --git a/muse2/share/pybridge/examples/addpartexample.py b/muse2/share/pybridge/examples/addpartexample.py new file mode 100644 index 00000000..65c41bdf --- /dev/null +++ b/muse2/share/pybridge/examples/addpartexample.py @@ -0,0 +1,29 @@ +""" +//========================================================= +// MusE +// Linux Music Editor +// (C) Copyright 2009 Mathias Gyllengahm (lunar_shuttle@users.sf.net) +//========================================================= +""" + +import Pyro.core +muse=Pyro.core.getProxyForURI('PYRONAME://:Default.muse') + +# +# Example on how to insert a new note, outcommented since I run the script several times and it inserts so many notes :-) +# But it works! +# + + +rpos = muse.getRPos() +lpos = muse.getLPos() + +event = {'data':[61,100,0], + 'tick':0, # Relative offset of part - 0 = beginning of part + 'type':"note", + 'len':rpos - lpos} + +part = {'events': [event], + 'tick': lpos} +muse.createPart("Track 1", lpos, rpos - lpos, part) + diff --git a/muse2/share/pybridge/examples/addtrack.py b/muse2/share/pybridge/examples/addtrack.py new file mode 100644 index 00000000..116b35c0 --- /dev/null +++ b/muse2/share/pybridge/examples/addtrack.py @@ -0,0 +1,33 @@ +""" +//========================================================= +// MusE +// Linux Music Editor +// (C) Copyright 2009 Mathias Gyllengahm (lunar_shuttle@users.sf.net) +//========================================================= +""" + +import Pyro.core +import time + +muse=Pyro.core.getProxyForURI('PYRONAME://:Default.muse') + +for j in range(0,5): + for i in range(0,30): + muse.addMidiTrack("amiditrack" + str(i)) + for i in range(0,30): + muse.deleteTrack("amiditrack" + str(i)) + +for i in range(0, 10): + print i + muse.addMidiTrack("amiditrack") + muse.addWaveTrack("awavetrack") + muse.addOutput("anoutput") + muse.addInput("aninput") + muse.setMute("aninput", False) + muse.setAudioTrackVolume("aninput",1.0) + muse.deleteTrack("amiditrack") + muse.deleteTrack("awavetrack") + muse.deleteTrack("anoutput") + muse.deleteTrack("aninput") + time.sleep(1) + diff --git a/muse2/share/pybridge/examples/ctrlexample.py b/muse2/share/pybridge/examples/ctrlexample.py new file mode 100644 index 00000000..9e28afad --- /dev/null +++ b/muse2/share/pybridge/examples/ctrlexample.py @@ -0,0 +1,26 @@ +""" +//========================================================= +// MusE +// Linux Music Editor +// (C) Copyright 2009 Mathias Gyllengahm (lunar_shuttle@users.sf.net) +//========================================================= +""" + +import Pyro.core +import time + +muse=Pyro.core.getProxyForURI('PYRONAME://:Default.muse') +#for i in range(0,10): +# print "Ctrl no " + str(i) + " = " + str(muse.getMidiControllerValue("Track 1", i)) + +""" +for i in range(0,127): + muse.setMidiControllerValue("Track 1", 7, i) + time.sleep(0.1) +""" + +muse.setMidiControllerValue("Track 1", 7, 56) +print muse.getMidiControllerValue("Track 1", 7) +print muse.getAudioTrackVolume("Out 1") +muse.setAudioTrackVolume("Out 1", -1.0) + diff --git a/muse2/share/pybridge/examples/effecttoggle.py b/muse2/share/pybridge/examples/effecttoggle.py new file mode 100644 index 00000000..6feb4bca --- /dev/null +++ b/muse2/share/pybridge/examples/effecttoggle.py @@ -0,0 +1,23 @@ +""" +//========================================================= +// MusE +// Linux Music Editor +// (C) Copyright 2009 Mathias Gyllengahm (lunar_shuttle@users.sf.net) +//========================================================= +""" + +import Pyro.core +import time + +muse=Pyro.core.getProxyForURI('PYRONAME://:Default.muse') +trackname = "wavtrack" + +fxs = muse.getTrackEffects(trackname) +print fxs + +for i in range (0,10): + muse.toggleTrackEffect(trackname,0, False) + time.sleep(1) + muse.toggleTrackEffect(trackname,0, True) + time.sleep(1) + diff --git a/muse2/share/pybridge/examples/mute.py b/muse2/share/pybridge/examples/mute.py new file mode 100644 index 00000000..5732a7f8 --- /dev/null +++ b/muse2/share/pybridge/examples/mute.py @@ -0,0 +1,20 @@ +""" +//========================================================= +// MusE +// Linux Music Editor +// (C) Copyright 2009 Mathias Gyllengahm (lunar_shuttle@users.sf.net) +//========================================================= +""" + +import Pyro.core +import time + +muse=Pyro.core.getProxyForURI('PYRONAME://:Default.muse') +for i in range(0,10): + muse.setMute("Strings", False) + muse.setMute("Lead1", True) + time.sleep(1) + muse.setMute("Strings", True) + muse.setMute("Lead1", False) + time.sleep(1) + diff --git a/muse2/share/pybridge/examples/repeatpart.py b/muse2/share/pybridge/examples/repeatpart.py new file mode 100644 index 00000000..e2b8ff31 --- /dev/null +++ b/muse2/share/pybridge/examples/repeatpart.py @@ -0,0 +1,61 @@ +""" +//========================================================= +// MusE +// Linux Music Editor +// (C) Copyright 2009 Mathias Gyllengahm (lunar_shuttle@users.sf.net) +//========================================================= +""" + +import Pyro.core +import sys +import time + +SLEEPIVAL=0.3 + +def advanceToNextSection(muse, newlpos, newrpos): + print "Advancing..." + currpos = muse.getRPos() + curlpos = muse.getLPos() + curpos = muse.getCPos() + muse.setLoop(False) + + while curpos < currpos: + time.sleep(SLEEPIVAL) + curpos = muse.getCPos() + print "Leaving current section..." + muse.setRPos(newrpos) + curpos = muse.getCPos() + + while curpos < newlpos: + time.sleep(SLEEPIVAL) + curpos = muse.getCPos() + print "Entered new section" + muse.setLPos(newlpos) + muse.setLoop(True) + return + +muse=Pyro.core.getProxyForURI('PYRONAME://:Default.muse') +muse.stopPlay() +parts = muse.getParts("Track 1") +muse.setLPos(parts[0]['tick']) +muse.setRPos(parts[0]['tick'] + parts[0]['len']) +muse.setCPos(0) +time.sleep(0.2) # Hmmm, don't like it but it seems necessary to pause a short while before starting play +muse.setLoop(True) +muse.startPlay() + +for i in range(1, len(parts)): + part = parts[i] + tick = part['tick'] + len = part['len'] + print "Press enter to advance to next section/part!" + sys.stdin.read(1) + advanceToNextSection(muse, tick, tick + len) + +print "This is the final section. Disabling loop and leaving..." +muse.setLoop(False) + +#print "Press enter to leave final section" +#sys.stdin.read(1) +#muse.setLoop(False) + diff --git a/muse2/share/pybridge/examples/setpositionexample.py b/muse2/share/pybridge/examples/setpositionexample.py new file mode 100644 index 00000000..476410d9 --- /dev/null +++ b/muse2/share/pybridge/examples/setpositionexample.py @@ -0,0 +1,35 @@ +""" +//========================================================= +// MusE +// Linux Music Editor +// (C) Copyright 2009 Mathias Gyllengahm (lunar_shuttle@users.sf.net) +//========================================================= +""" + +import Pyro.core +import time +muse=Pyro.core.getProxyForURI('PYRONAME://:Default.muse') +parts = muse.getParts("Track 1") + +ptick = parts[0]['tick'] +len = parts[0]['len'] +muse.setLPos(ptick) +muse.setRPos(ptick + len) +muse.setCPos(ptick + len / 2) + +songlen = muse.getSongLen() +#print "Song length: " + str(songlen) + +# +# Copy first part to after current song length, thus increase song length with length of first part +# +newsonglen = songlen + parts[0]['len'] +muse.setSongLen(newsonglen) +muse.createPart("Track 1", songlen + 1, parts[0]['len'], parts[0]) +time.sleep(1) + +lastpart = muse.getParts("Track 1").pop() +print lastpart['id'] +muse.deletePart(lastpart['id']) +print muse.getDivision() + diff --git a/muse2/share/pybridge/examples/tempoexample.py b/muse2/share/pybridge/examples/tempoexample.py new file mode 100644 index 00000000..ed12638d --- /dev/null +++ b/muse2/share/pybridge/examples/tempoexample.py @@ -0,0 +1,6 @@ +import Pyro.core + +muse=Pyro.core.getProxyForURI('PYRONAME://:Default.muse') + +print "Tempo: " + str(muse.getTempo(0)) + diff --git a/muse2/share/pybridge/examples/trackparamchangeexample.py b/muse2/share/pybridge/examples/trackparamchangeexample.py new file mode 100644 index 00000000..0681ccb4 --- /dev/null +++ b/muse2/share/pybridge/examples/trackparamchangeexample.py @@ -0,0 +1,21 @@ +""" +//========================================================= +// MusE +// Linux Music Editor +// (C) Copyright 2009 Mathias Gyllengahm (lunar_shuttle@users.sf.net) +//========================================================= +""" +import Pyro.core +import time + +muse=Pyro.core.getProxyForURI('PYRONAME://:Default.muse') + +muse.setMidiTrackParameter("Track 1", "velocity",10) +muse.setMidiTrackParameter("Track 1", "compression",101) +muse.setMidiTrackParameter("Track 1", "delay",2) +muse.setMidiTrackParameter("Track 1", "transposition",1) + +for i in range(-127, 127): + muse.setMidiTrackParameter("Track 1", "velocity",i) + time.sleep(0.1) + diff --git a/muse2/share/pybridge/musepclient.py b/muse2/share/pybridge/musepclient.py new file mode 100644 index 00000000..dc87e4e8 --- /dev/null +++ b/muse2/share/pybridge/musepclient.py @@ -0,0 +1,17 @@ +# +# Example client for MusE Pyro bridge (Python Remote Object) +# +import Pyro.core +import time + +muse=Pyro.core.getProxyForURI('PYRONAME://:Default.muse') +print "Current position is: " + str(muse.getCPos()) +muse.startPlay() +time.sleep(1) # Sleep one second +muse.stopPlay() +print "New position is: " + str(muse.getCPos()) +muse.rewindStart() +print "Pos after rewind is: " + str(muse.getCPos()) +print "Lpos, Rpos: " + str(muse.getLPos()) + ":" + str(muse.getRPos()) + + diff --git a/muse2/share/pybridge/museplauncher.py b/muse2/share/pybridge/museplauncher.py new file mode 100644 index 00000000..24206213 --- /dev/null +++ b/muse2/share/pybridge/museplauncher.py @@ -0,0 +1,257 @@ +""" +//========================================================= +// MusE +// Linux Music Editor +// (C) Copyright 2009 Mathias Gyllengahm (lunar_shuttle@users.sf.net) +//========================================================= + +This file is used by MusE for launching a Pyro name service and connecting a remote object to the global Python functions +""" + +import Pyro.naming +import Pyro.core +from Pyro.errors import PyroError,NamingError +import sys, time +import threading + +# +# Note: this module, 'muse' is activated from within MusE - thus it is not possible to execute the scripts without a running +# MusE instance +# +import muse + +# +# Class which implements the functionality that is used remotely. +# In short just repeating the global functions in the muse-module +# +# TODO: It should be better to skip this class completely by implementing +# functionality as a class in pyapi.cpp instead of global functions +# that need to be wrapped like this +# +class MusE: + def getCPos(self): # Get current position + return muse.getCPos() + + def startPlay(self): # Start playback + return muse.startPlay() + + def stopPlay(self): # Stop playback + return muse.stopPlay() + + def rewindStart(self): # Rewind current position to start + return muse.rewindStart() + + def getLPos(self): # Get position of left locator + return muse.getLPos() + + def getRPos(self): # Get position of right locator + return muse.getRPos() + + def getTempo(self, tick): #Get tempo at particular tick + return muse.getTempo(tick) + + def getTrackNames(self): # get track names + return muse.getTrackNames() + + def getParts(self, trackname): # get parts in a particular track + return muse.getParts(trackname) + + def createPart(self, trackname, starttick, lenticks, part): # create part in track + return muse.createPart(trackname, starttick, lenticks, part) + + def modifyPart(self, part): # modify a part (the part to be modified is specified by its id + return muse.modifyPart((part)) + + def deletePart(self, part): # delete a part + return muse.deletePart((part)) + + def getSelectedTrack(self): # get first selected track in arranger window + return muse.getSelectedTrack() + + def importPart(self, trackname, filename, tick): # import part file to a track at a given position + return muse.importPart(trackname, filename, tick) + + def setCPos(self, tick): # set current position + return muse.setPos(0, tick) + + def setLPos(self, tick): # set left locator + return muse.setPos(1, tick) + + def setRPos(self, tick): # set right locator + return muse.setPos(2, tick) + + def setSongLen(self, ticks): # set song length + return muse.setSongLen(ticks) + + def getSongLen(self): # get song length + return muse.getSongLen() + + def getDivision(self): # get division (ticks per 1/4, or per beat?) + return muse.getDivision() + + def setMidiTrackParameter(self, trackname, paramname, value): # set midi track parameter (velocity, compression, len, transpose) + return muse.setMidiTrackParameter(trackname, paramname, value); + + def getLoop(self): # get loop flag + return muse.getLoop() + + def setLoop(self, loopFlag): # set loop flag + return muse.setLoop(loopFlag) + + def getMute(self, trackname): # get track mute parameter + return muse.getMute(trackname) + + def setMute(self, trackname, enabled): # set track mute parameter + return muse.setMute(trackname, enabled) + + def setVolume(self, trackname, volume): # set mixer volume + return muse.setVolume(trackname, volume) + + def getMidiControllerValue(self, trackname, ctrlno): # get a particular midi controller value for a track + return muse.getMidiControllerValue(trackname, ctrlno) + + def setMidiControllerValue(self, trackname, ctrlno, value): # set a particular midi controller value for a track + return muse.setMidiControllerValue(trackname, ctrlno, value) + + def setAudioTrackVolume(self, trackname, dvol): # set volume for audio track + return muse.setAudioTrackVolume(trackname, dvol) + + def getAudioTrackVolume(self, trackname): # get volume for audio track + return muse.getAudioTrackVolume(trackname) + + def getTrackEffects(self, trackname): # get effect names for an audio track + return muse.getTrackEffects(trackname) + + def toggleTrackEffect(self, trackname, effectno, onoff): # toggle specific effect on/off + return muse.toggleTrackEffect(trackname, effectno, onoff) + + def findNewTrack(self, oldtracknames): #internal function + tracknames = muse.getTrackNames() + for trackname in tracknames: + if trackname in oldtracknames: + continue + + return trackname + + def changeTrackName(self, trackname, newname): #change track name + return muse.changeTrackName(trackname, newname) + + def nameNewTrack(self, newname, oldtracknames):# Internal function, wait until new track shows up in tracknames, then rename it + tmpname = None + for i in range(0,100): + tmpname = self.findNewTrack(oldtracknames) + if tmpname == None: + time.sleep(0.1) + continue + else: + self.changeTrackName(tmpname, newname) + time.sleep(0.1) # Ouch!! + break + + + def addMidiTrack(self, trackname): # add midi track + oldtracknames = muse.getTrackNames() + if trackname in oldtracknames: + return None + + muse.addMidiTrack() + self.nameNewTrack(trackname, oldtracknames) + + + def addWaveTrack(self, trackname): # add wave track + oldtracknames = muse.getTrackNames() + if trackname in oldtracknames: + return None + + muse.addWaveTrack() + self.nameNewTrack(trackname, oldtracknames) + + def addInput(self, trackname): # add audio input + oldtracknames = muse.getTrackNames() + if trackname in oldtracknames: + return None + + muse.addInput() + self.nameNewTrack(trackname, oldtracknames) + + def addOutput(self, trackname): # add audio output + oldtracknames = muse.getTrackNames() + if trackname in oldtracknames: + return None + + muse.addOutput() + self.nameNewTrack(trackname, oldtracknames) + + def addGroup(self, trackname): # add audio group + oldtracknames = muse.getTrackNames() + if trackname in oldtracknames: + return None + + muse.addGroup() + self.nameNewTrack(trackname, oldtracknames) + + def deleteTrack(self, trackname): # delete a track + tracknames = muse.getTrackNames() + if trackname not in tracknames: + return False + + muse.deleteTrack(trackname) + +# def getOutputRoute(self, trackname): +# return muse.getOutputRoute(trackname) + +class NameServiceThread(threading.Thread): + def __init__(self): + threading.Thread.__init__(self) + self.starter = Pyro.naming.NameServerStarter() + + def run(self): + self.starter.start() + + def verifyRunning(self): + return self.starter.waitUntilStarted(10) + +# +# museclass Pyro object +# +class museclass(Pyro.core.ObjBase, MusE): + pass + +# +# main server program +# +def main(): + Pyro.core.initServer() + nsthread = NameServiceThread() + nsthread.start() + if (nsthread.verifyRunning() == False): + print "Failed to launch name service..." + sys.exit(1) + + daemon = Pyro.core.Daemon() + # locate the NS + locator = Pyro.naming.NameServerLocator() + #print 'searching for Name Server...' + ns = locator.getNS() + daemon.useNameServer(ns) + + # connect a new object implementation (first unregister previous one) + try: + # 'test' is the name by which our object will be known to the outside world + ns.unregister('muse') + except NamingError: + pass + + # connect new object implementation + daemon.connect(museclass(),'muse') + + # enter the server loop. + print 'Muse remote object published' + daemon.requestLoop() + +if __name__=="__main__": + main() + +main() + + diff --git a/muse2/share/pybridge/parter/main.py b/muse2/share/pybridge/parter/main.py new file mode 100644 index 00000000..40b85734 --- /dev/null +++ b/muse2/share/pybridge/parter/main.py @@ -0,0 +1,26 @@ +import sys,time +from PyQt4 import QtGui + +from parter import ParterMainwidget +import sys, os +import Pyro.core + +#import musemock +#muse = musemock.MusEMock() +muse=Pyro.core.getProxyForURI('PYRONAME://:Default.muse') +""" +strack = muse.getSelectedTrack() +cpos = muse.getCPos() +muse.importPart(strack, "/home/ddskmlg/.muse/parts/testpart2.mpt", cpos) +sys.exit(0) +""" + + +if __name__ == '__main__': + app = QtGui.QApplication(sys.argv) + partsdir = os.getenv("HOME") + "/.muse/parts" + mainw = ParterMainwidget(None, muse, partsdir) + mainw.show() + #muse.importPart("Track 1","/home/ddskmlg/.muse/parts/testpart2.mpt",18432) + sys.exit(app.exec_()) + diff --git a/muse2/share/pybridge/parter/parter.py b/muse2/share/pybridge/parter/parter.py new file mode 100644 index 00000000..889b00a1 --- /dev/null +++ b/muse2/share/pybridge/parter/parter.py @@ -0,0 +1,107 @@ +import sys,time,os +from PyQt4 import QtGui, QtCore +from PyQt4.QtGui import QFileDialog, QListView, QStringListModel, QButtonGroup, QPushButton + +class ParterMainwidget(QtGui.QWidget): + def __init__(self, parent=None, muse=None, partsdir=None): + QtGui.QWidget.__init__(self, parent) + self.muse = muse + self.partsdir = partsdir + self.lcurdir = QtGui.QLabel(partsdir) + moveupbutton = QPushButton("Parent dir") + appendbutton = QPushButton("Append") + putbutton = QPushButton("Put") + blayout = QtGui.QGridLayout() + blayout.addWidget(self.lcurdir) + blayout.addWidget(moveupbutton) + blayout.addWidget(appendbutton) + blayout.addWidget(putbutton) + self.tree = QtGui.QTreeView() + self.dirmodel = QtGui.QDirModel() + self.tree.setModel(self.dirmodel) + self.tree.setRootIndex(self.dirmodel.index(self.partsdir)) + + layout = QtGui.QGridLayout() + self.setLayout(layout) + layout.addWidget(self.tree, 0, 0) + layout.addLayout(blayout, 0, 1) + + self.connect(moveupbutton, QtCore.SIGNAL('clicked()'), self.parentDir) + self.connect(appendbutton, QtCore.SIGNAL('clicked()'), self.appendPressed) + self.connect(putbutton, QtCore.SIGNAL('clicked()'), self.putPressed) + + self.connect(self.tree, QtCore.SIGNAL('activated(QModelIndex)'), self.activated) + + def parentDir(self): + f = QtCore.QFileInfo(self.partsdir) + self.changeDir(f.canonicalPath()) + + def changeDir(self, newdir): + self.partsdir = newdir + self.tree.setRootIndex(self.dirmodel.index(self.partsdir)) + self.lcurdir.setText(self.partsdir) + + def activated(self, s): + fileInfo = self.dirmodel.fileInfo(s) + if fileInfo.isDir(): + self.changeDir(fileInfo.absoluteFilePath()) + return + + fname = str(fileInfo.absoluteFilePath()) # if not str() around it crashes! + self.putPart(fname) + + def putPart(self, fname): + trackid = self.muse.getSelectedTrack() + if trackid == None: + return + cpos = self.muse.getCPos() + self.muse.importPart(trackid, fname, cpos) + + def getSelectedItem(self): + selectionmodel = self.tree.selectionModel() + for i in selectionmodel.selectedIndexes(): + fileInfo = self.dirmodel.fileInfo(i) + return str(fileInfo.absoluteFilePath()) + return None + + def appendPressed(self): + selected = self.getSelectedItem() + if selected == None: + return + trackid = self.muse.getSelectedTrack() + if trackid == None: + return + parts = self.muse.getParts(trackid) + if parts == None: + return + + pos = 0 + if len(parts) > 0: + part = parts[len(parts) - 1] + pos = part['tick'] + part['len'] + print "Appending " + selected + self.muse.importPart(trackid, selected, pos) + + + + def putPressed(self): + selected = self.getSelectedItem() + if selected == None: + return + trackid = self.muse.getSelectedTrack() + if trackid == None: + return + cpos = self.muse.getCPos() + self.muse.importPart(trackid, selected, cpos) + + def testfunc2(self, index): + print str(index.row()) + " " + str(index.column()) + print index.data().toString() + +if __name__ == '__main__': + app = QtGui.QApplication(sys.argv) + mainw = ParterMainwidget() + mainw.show() + sys.exit(app.exec_()) + + diff --git a/muse2/share/pybridge/robert.py b/muse2/share/pybridge/robert.py new file mode 100644 index 00000000..2de8e1ab --- /dev/null +++ b/muse2/share/pybridge/robert.py @@ -0,0 +1,46 @@ +# -*- coding: utf-8 -*- +# +# Example client for MusE Pyro bridge (Python Remote Object) +# +import Pyro.core +import time + +muse=Pyro.core.getProxyForURI('PYRONAME://:Default.muse') +print "Current position is: " + str(muse.getCPos()) + +midiDevice=file("/dev/snd/midiC1D0") +nextIsCommand=False +while True: + v=midiDevice.read(1) + if nextIsCommand: + print " %d"%ord(v) + if ord(v) == 0: + print "set hh" + muse.setMute("hh", False) + muse.setMute("RIDE", True) + if ord(v) == 1: + muse.setMute("hh", True) + muse.setMute("RIDE", False) + print "set ride" + if ord(v) == 2: + muse.setMute("ACCENT1", False) + if ord(v) == 3: + muse.setMute("ACCENT2", False) + if ord(v) == 127: + print "mute all accents" + muse.setMute("ACCENT1", True) + muse.setMute("ACCENT2", True) + nextIsCommand=False + if ord(v) == 192: + nextIsCommand=True + +''' +muse.startPlay() +time.sleep(1) # Sleep one second +muse.stopPlay() +print "New position is: " + str(muse.getCPos()) +muse.rewindStart() +print "Pos after rewind is: " + str(muse.getCPos()) +print "Lpos, Rpos: " + str(muse.getLPos()) + ":" + str(muse.getRPos()) + +''' diff --git a/muse2/share/scripts/ConstantLength b/muse2/share/scripts/ConstantLength new file mode 100755 index 00000000..f03addcd --- /dev/null +++ b/muse2/share/scripts/ConstantLength @@ -0,0 +1,77 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +import sys,time +from PyQt4 import QtGui, QtCore + +class ScriptClass(QtGui.QWidget): + def __init__(self, parent=None): + QtGui.QWidget.__init__(self, parent) + + self.setWindowTitle('Constant length') + title = QtGui.QLabel('Make all events of length:') + self.titleEdit = QtGui.QComboBox() + self.titleEdit.addItem('1/1',1) + self.titleEdit.addItem('1/2',2) + self.titleEdit.addItem('1/4',4) + self.titleEdit.addItem('1/8',8) + self.titleEdit.addItem('1/16',16) + self.titleEdit.addItem('1/32',32) + self.titleEdit.addItem('1/64',64) + self.titleEdit.setCurrentIndex(4) + + button = QtGui.QPushButton("Execute") + self.connect(button, QtCore.SIGNAL('clicked()'), self.execute) + grid = QtGui.QGridLayout() + grid.setSpacing(3) + + grid.addWidget(title, 1, 0) + grid.addWidget(self.titleEdit, 1, 1) + + grid.addWidget(button, 2, 1) + + self.setLayout(grid) + self.resize(200, 100) + button.setFocus() + + def execute(self): + testFile = file(sys.argv[1],"r") + inputEvents = testFile.readlines() + testFile.close() + + beatDiv = self.titleEdit.itemData(self.titleEdit.currentIndex()).toInt()[0] + print "beatDiv=",beatDiv + eventLen=0 + #get beat length to calculate minimum length of event + for line in inputEvents: + if line.startswith('BEATLEN'): + tag,tick = line.split(' ') + eventLen=int(tick)/beatDiv*4 + break + + outputEvents=[] + #loop through events + for line in inputEvents: + + if line.startswith('NOTE'): + tag,tick,note,length,velocity = line.split(' ') + + length=eventLen + newLine=tag+" "+tick+" "+note+" "+str(length)+" "+velocity + outputEvents.append(newLine) + + else: + outputEvents.append(line) + + testFile = file(sys.argv[1],"w") + testFile.writelines(outputEvents) + testFile.close() + + quit() + + + +app = QtGui.QApplication(sys.argv) +qb = ScriptClass() +qb.show() +sys.exit(app.exec_()) diff --git a/muse2/share/scripts/DoNothing b/muse2/share/scripts/DoNothing new file mode 100755 index 00000000..a3d92c7d --- /dev/null +++ b/muse2/share/scripts/DoNothing @@ -0,0 +1,15 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +import sys +testFile = file(sys.argv[1],"r") +inputEvents = testFile.readlines() +testFile.close() + +outputEvents=[] +#loop through events +for line in inputEvents: + outputEvents.append(line) + +testFile = file(sys.argv[1],"w") +testFile.writelines(outputEvents) +testFile.close() diff --git a/muse2/share/scripts/DoubleSpeed b/muse2/share/scripts/DoubleSpeed new file mode 100755 index 00000000..da6d0c2e --- /dev/null +++ b/muse2/share/scripts/DoubleSpeed @@ -0,0 +1,24 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# MusE external midi processing script +# By: Mathias Gyllengahm 2009 +# DoubleSpeed + +import sys,time +testFile = file(sys.argv[1],"r") +inputEvents = testFile.readlines() +testFile.close() + +outputEvents=[] +#loop through events +for line in inputEvents: + + if line.startswith('NOTE'): + tag,tick,pitch,length,velocity = line.split(' ') + newline = tag + " " + str(int(tick)/2) + " " + pitch + " " + length + " " + velocity + outputEvents.append(newline) + +testFile = file(sys.argv[1],"w") +testFile.writelines(outputEvents) +testFile.close() + diff --git a/muse2/share/scripts/Makefile.am b/muse2/share/scripts/Makefile.am new file mode 100644 index 00000000..0f2a9634 --- /dev/null +++ b/muse2/share/scripts/Makefile.am @@ -0,0 +1,11 @@ +EXTRA_DIST = DoNothing RemoveShortEvents DoubleSpeed ConstantLength SwingQuantize1 + +#musemidiscriptspkgdata_DATA = $(EXTRA_DIST) + +#musemidiscriptspkgdatadir = $(pkgdatadir)/scripts + +install-data-local: + mkdir -p $(DESTDIR)/$(pkgdatadir)/scripts/ + cp $(EXTRA_DIST) $(DESTDIR)/$(pkgdatadir)/scripts/ + chmod a+x $(DESTDIR)/$(pkgdatadir)/scripts/* + diff --git a/muse2/share/scripts/Makefile.in b/muse2/share/scripts/Makefile.in new file mode 100644 index 00000000..7fef85f6 --- /dev/null +++ b/muse2/share/scripts/Makefile.in @@ -0,0 +1,425 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = share/scripts +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal-include.m4 \ + $(top_srcdir)/m4/alsa.m4 $(top_srcdir)/m4/docbook.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DOCBOOKSTYLE = @DOCBOOKSTYLE@ +DOCBOOKTARGETS = @DOCBOOKTARGETS@ +DOT = @DOT@ +DOTPATH = @DOTPATH@ +DOXYGEN = @DOXYGEN@ +DOXYGEN_TREEVIEW = @DOXYGEN_TREEVIEW@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FLUIDSYNTHDIRS = @FLUIDSYNTHDIRS@ +FST_CFLAGS = @FST_CFLAGS@ +FST_LIBS = @FST_LIBS@ +Fluidsynth_CFLAGS = @Fluidsynth_CFLAGS@ +Fluidsynth_LIBS = @Fluidsynth_LIBS@ +GIVERTCAP = @GIVERTCAP@ +GREP = @GREP@ +HAVEDOT = @HAVEDOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_LIBS = @JACK_LIBS@ +JADE = @JADE@ +LASH_CFLAGS = @LASH_CFLAGS@ +LASH_LIBS = @LASH_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LO_CFLAGS = @LO_CFLAGS@ +LO_LIBS = @LO_LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MUSECXXFLAGS = @MUSECXXFLAGS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NSGMLS = @NSGMLS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PCH = @PCH@ +PERL = @PERL@ +PKG_CONFIG = @PKG_CONFIG@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIB = @PYTHON_LIB@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QTDIR_BIN = @QTDIR_BIN@ +QTDIR_INC = @QTDIR_INC@ +QT_LIBS = @QT_LIBS@ +RANLIB = @RANLIB@ +SAMPLERATE_CFLAGS = @SAMPLERATE_CFLAGS@ +SAMPLERATE_LIBS = @SAMPLERATE_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ +SNDFILE_LIBS = @SNDFILE_LIBS@ +STRIP = @STRIP@ +SUIDBUILD = @SUIDBUILD@ +SUIDINSTALL = @SUIDINSTALL@ +USE_SSE = @USE_SSE@ +UUID_CFLAGS = @UUID_CFLAGS@ +UUID_LIBS = @UUID_LIBS@ +VERSION = @VERSION@ +XMKMF = @XMKMF@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +have_docbook = @have_docbook@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +synth_fluid = @synth_fluid@ +synth_fluidsynth = @synth_fluidsynth@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +EXTRA_DIST = DoNothing RemoveShortEvents DoubleSpeed ConstantLength SwingQuantize1 +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu share/scripts/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu share/scripts/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-data-local + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + distclean distclean-generic distclean-libtool distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-data-local install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + uninstall uninstall-am + + +#musemidiscriptspkgdata_DATA = $(EXTRA_DIST) + +#musemidiscriptspkgdatadir = $(pkgdatadir)/scripts + +install-data-local: + mkdir -p $(DESTDIR)/$(pkgdatadir)/scripts/ + cp $(EXTRA_DIST) $(DESTDIR)/$(pkgdatadir)/scripts/ + chmod a+x $(DESTDIR)/$(pkgdatadir)/scripts/* + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/muse2/share/scripts/README.txt b/muse2/share/scripts/README.txt new file mode 100644 index 00000000..8490dd69 --- /dev/null +++ b/muse2/share/scripts/README.txt @@ -0,0 +1,36 @@ +MusE midi event scripting format 0.5 + +Some information for the budding script writer, here is some info +about the format currently used. + +Scripts can be put in two different dirs. +/share/muse/scripts +for scripts bundled +or $HOME/.muse/scripts +for user created scripts + +There are two main requirements on scripts. + +1. a script must have the executable flag set, that is, it must be considered +an executable from the perspective of the operating system. +2. a script shall take an input file as argument and will update this +file with the sought output. + +The tags that may occur in the file sent to the script are: +PARTLEN +BEATLEN +QUANTLEN +NOTE +CONTROLLER + +PARTLEN, BEATLEN and QUANTLEN are there for informational purposes, to +make some transformations possible. e.g. quantization, beat delay. + +NOTE and CONTROLLER are the ones that are read back into MusE when the filter +stops executing. These may be manipulated, removed or multiplied as seen +fit by the filter. +-- Note that it is a good idea to just pass on the lines your script is not +interested in, otherwise data may unintentionally be removed -- + +A short example in pyton that does nothing but pass on output from input +to output is available in script DoNothing diff --git a/muse2/share/scripts/RemoveShortEvents b/muse2/share/scripts/RemoveShortEvents new file mode 100755 index 00000000..cc6735b2 --- /dev/null +++ b/muse2/share/scripts/RemoveShortEvents @@ -0,0 +1,79 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# MusE external midi processing script +# By: Robert Jonsson 2009 +# RemoveShortEvents + +import sys,time +from PyQt4 import QtGui, QtCore + +class RemoveShortEvents(QtGui.QWidget): + def __init__(self, parent=None): + QtGui.QWidget.__init__(self, parent) + + self.setWindowTitle('RemoveShortEvents') + + title = QtGui.QLabel('Remove events shorter than:') + self.timeEdit = QtGui.QComboBox() + self.timeEdit.addItem('1/1',1) + self.timeEdit.addItem('1/2',2) + self.timeEdit.addItem('1/4',4) + self.timeEdit.addItem('1/8',8) + self.timeEdit.addItem('1/16',16) + self.timeEdit.addItem('1/32',32) + self.timeEdit.setCurrentIndex(3) + + button = QtGui.QPushButton("Execute") + self.connect(button, QtCore.SIGNAL('clicked()'), self.execute) + + grid = QtGui.QGridLayout() + grid.setSpacing(3) + + grid.addWidget(title, 1, 0) + grid.addWidget(self.timeEdit, 1, 1) + + grid.addWidget(button, 2, 1) + + self.setLayout(grid) + self.resize(200, 100) + button.setFocus() + + def execute(self): + testFile = file(sys.argv[1],"r") + inputEvents = testFile.readlines() + testFile.close() + + beatDiv = int(self.timeEdit.itemData(self.timeEdit.currentIndex()).toInt()[0]) + minSize=0 # fill in when we get the beat size value + outputEvents=[] + + #get beat length to calculate minimum length of event + for line in inputEvents: + if line.startswith('BEATLEN'): + tag,tick = line.split(' ') + minSize=int(tick)/beatDiv + break + #loop through events + for line in inputEvents: + if line.startswith('NOTE'): + tag,tick,note,length,velocity = line.split(' ') + if int(length) > minSize: # only append long enough events + outputEvents.append(line) + + else: + outputEvents.append(line) + + + testFile = file(sys.argv[1],"w") + testFile.writelines(outputEvents) + testFile.close() + + + quit() + + + +app = QtGui.QApplication(sys.argv) +qb = RemoveShortEvents() +qb.show() +sys.exit(app.exec_()) diff --git a/muse2/share/scripts/SwingQuantize1 b/muse2/share/scripts/SwingQuantize1 new file mode 100755 index 00000000..11fded84 --- /dev/null +++ b/muse2/share/scripts/SwingQuantize1 @@ -0,0 +1,105 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# MusE external midi processing script +# By: Robert Jonsson 2009 +# Quantize + +import sys,time +from PyQt4 import QtGui, QtCore +import random + +class Quantize(QtGui.QWidget): + def __init__(self, parent=None): + QtGui.QWidget.__init__(self, parent) + + self.setWindowTitle('Swing quantize V1') + + + self.beatEdit = QtGui.QComboBox() + self.beatEdit.addItem('1/1',1) + self.beatEdit.addItem('1/2',2) + self.beatEdit.addItem('1/4',4) + self.beatEdit.addItem('1/8',8) + self.beatEdit.addItem('1/16',16) + self.beatEdit.addItem('1/32',32) + self.beatEdit.setCurrentIndex(2) + self.spreadEdit = QtGui.QLineEdit() + self.spreadEdit.setText('10') + + button = QtGui.QPushButton("Execute") + self.connect(button, QtCore.SIGNAL('clicked()'), self.execute) + + grid = QtGui.QGridLayout() + grid.setSpacing(3) + + grid.addWidget(QtGui.QLabel('Beat granularity:'), 1, 0) + grid.addWidget(self.beatEdit, 1, 1) + grid.addWidget(QtGui.QLabel('Spread/Swing(ticks)'), 2, 0) + grid.addWidget(self.spreadEdit, 2, 1) + grid.addWidget(button, 3, 1) + + self.setLayout(grid) + self.resize(200, 100) + button.setFocus() + + def execute(self): + testFile = file(sys.argv[1],"r") + inputEvents = testFile.readlines() + testFile.close() + + beatDiv = self.beatEdit.itemData(self.beatEdit.currentIndex()).toInt()[0] + minSize=0 # fill in when we get the beat size value + outputEvents=[] + quantLen=0 + + #get beat length to calculate minimum length of event + for line in inputEvents: + if line.startswith('BEATLEN'): + tag,tick = line.split(' ') + beatLen=int(tick) + quantLen=int(tick)/beatDiv*4 + print "quantLen=%d beatDiv=%d"%(quantLen, beatDiv) + print line.strip() + #loop through events and quantize to the given beat + eventList=[] + for line in inputEvents: + if line.startswith('NOTE'): + tag,tick,pitch,length,velocity = line.split(' ') + + # over quantize + lowerBound=(int(tick)/quantLen)*quantLen + upperBound=lowerBound+quantLen + lowDiff=int(tick)-lowerBound + highDiff=upperBound - int(tick) + if( lowDiff < highDiff): + newTick=lowerBound + else: + newTick=upperBound + + # apply swing factor to every other 8 beat + print "float =%f int = %d"%((float(newTick+beatLen)) / beatLen/2,((newTick+beatLen))/beatLen/2) + if ((float(newTick+beatLen)) / beatLen/2 - ((newTick+beatLen))/beatLen/2) < 0.1: + print "adding swing to:",newTick + newTick=int(random.gauss(newTick,self.spreadEdit.text().toInt()[0])) + if (newTick < 0): + newTick=0 + + newLine="NOTE "+ str(newTick)+" " + pitch + " "+ length + " " + velocity + print "newLine:",newLine.strip() + outputEvents.append(newLine) + else: + outputEvents.append(line) + + + + testFile = file(sys.argv[1],"w") + testFile.writelines(outputEvents) + testFile.close() + + quit() + + +app = QtGui.QApplication(sys.argv) +qb = Quantize() +qb.show() +sys.exit(app.exec_()) diff --git a/muse2/share/splash.png b/muse2/share/splash.png new file mode 100644 index 00000000..38d7c465 Binary files /dev/null and b/muse2/share/splash.png differ diff --git a/muse2/share/templates/Makefile.am b/muse2/share/templates/Makefile.am new file mode 100644 index 00000000..1fa6def9 --- /dev/null +++ b/muse2/share/templates/Makefile.am @@ -0,0 +1,5 @@ +EXTRA_DIST = $(wildcard *.med) + +templatespkgdata_DATA = $(EXTRA_DIST) + +templatespkgdatadir = $(pkgdatadir)/templates diff --git a/muse2/share/templates/Makefile.in b/muse2/share/templates/Makefile.in new file mode 100644 index 00000000..90566232 --- /dev/null +++ b/muse2/share/templates/Makefile.in @@ -0,0 +1,465 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = share/templates +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal-include.m4 \ + $(top_srcdir)/m4/alsa.m4 $(top_srcdir)/m4/docbook.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(templatespkgdatadir)" +DATA = $(templatespkgdata_DATA) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DOCBOOKSTYLE = @DOCBOOKSTYLE@ +DOCBOOKTARGETS = @DOCBOOKTARGETS@ +DOT = @DOT@ +DOTPATH = @DOTPATH@ +DOXYGEN = @DOXYGEN@ +DOXYGEN_TREEVIEW = @DOXYGEN_TREEVIEW@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FLUIDSYNTHDIRS = @FLUIDSYNTHDIRS@ +FST_CFLAGS = @FST_CFLAGS@ +FST_LIBS = @FST_LIBS@ +Fluidsynth_CFLAGS = @Fluidsynth_CFLAGS@ +Fluidsynth_LIBS = @Fluidsynth_LIBS@ +GIVERTCAP = @GIVERTCAP@ +GREP = @GREP@ +HAVEDOT = @HAVEDOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_LIBS = @JACK_LIBS@ +JADE = @JADE@ +LASH_CFLAGS = @LASH_CFLAGS@ +LASH_LIBS = @LASH_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LO_CFLAGS = @LO_CFLAGS@ +LO_LIBS = @LO_LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MUSECXXFLAGS = @MUSECXXFLAGS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NSGMLS = @NSGMLS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PCH = @PCH@ +PERL = @PERL@ +PKG_CONFIG = @PKG_CONFIG@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIB = @PYTHON_LIB@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QTDIR_BIN = @QTDIR_BIN@ +QTDIR_INC = @QTDIR_INC@ +QT_LIBS = @QT_LIBS@ +RANLIB = @RANLIB@ +SAMPLERATE_CFLAGS = @SAMPLERATE_CFLAGS@ +SAMPLERATE_LIBS = @SAMPLERATE_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ +SNDFILE_LIBS = @SNDFILE_LIBS@ +STRIP = @STRIP@ +SUIDBUILD = @SUIDBUILD@ +SUIDINSTALL = @SUIDINSTALL@ +USE_SSE = @USE_SSE@ +UUID_CFLAGS = @UUID_CFLAGS@ +UUID_LIBS = @UUID_LIBS@ +VERSION = @VERSION@ +XMKMF = @XMKMF@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +have_docbook = @have_docbook@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +synth_fluid = @synth_fluid@ +synth_fluidsynth = @synth_fluidsynth@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +EXTRA_DIST = $(wildcard *.med) +templatespkgdata_DATA = $(EXTRA_DIST) +templatespkgdatadir = $(pkgdatadir)/templates +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu share/templates/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu share/templates/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-templatespkgdataDATA: $(templatespkgdata_DATA) + @$(NORMAL_INSTALL) + test -z "$(templatespkgdatadir)" || $(MKDIR_P) "$(DESTDIR)$(templatespkgdatadir)" + @list='$(templatespkgdata_DATA)'; test -n "$(templatespkgdatadir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(templatespkgdatadir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(templatespkgdatadir)" || exit $$?; \ + done + +uninstall-templatespkgdataDATA: + @$(NORMAL_UNINSTALL) + @list='$(templatespkgdata_DATA)'; test -n "$(templatespkgdatadir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(templatespkgdatadir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(templatespkgdatadir)" && rm -f $$files +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(DATA) +installdirs: + for dir in "$(DESTDIR)$(templatespkgdatadir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-templatespkgdataDATA + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-templatespkgdataDATA + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + distclean distclean-generic distclean-libtool distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + install-templatespkgdataDATA installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am uninstall uninstall-am uninstall-templatespkgdataDATA + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/muse2/share/templates/audio.med b/muse2/share/templates/audio.med new file mode 100644 index 00000000..208313ff --- /dev/null +++ b/muse2/share/templates/audio.med @@ -0,0 +1,329 @@ + + + + 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 + + + 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 + 0 + 0 + 0 + 0 + 1 + 20 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + + + + + + + Track 2 + 0 + 0 + 0 + 0 + 1 + 20 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + + + + + + + Track 3 + 0 + 0 + 0 + 0 + 1 + 20 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + + + + + + + Track 4 + 0 + 0 + 0 + 0 + 1 + 20 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + + + + + + + Group 1 + 0 + 0 + 0 + 0 + 1 + 20 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + + + + + + + Group 2 + 0 + 0 + 0 + 0 + 1 + 20 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + + + + + + + Aux 1 + 0 + 0 + 0 + 0 + 2 + 20 + 1 + 0 + 0 + 0 + 0 + 1 + + + + + + + Aux 2 + 0 + 0 + 0 + 0 + 2 + 20 + 1 + 0 + 0 + 0 + 0 + 1 + + + + + + + Input 1 + 0 + 1 + 0 + 0 + 2 + 20 + 1 + 1 + 0 + 0 + 0 + 1 + 0 + 0 + + + + + + + Out 1 + 0 + 0 + 0 + 0 + 2 + 20 + 1 + 0 + 0 + 0 + 0 + 1 + + + + + + + + 0 + 500000 + + + + + 0 + 4 + 4 + + + + + + diff --git a/muse2/share/templates/default.med b/muse2/share/templates/default.med new file mode 100644 index 00000000..9bfb56c9 --- /dev/null +++ b/muse2/share/templates/default.med @@ -0,0 +1,150 @@ + + + + 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 + 440 799 + +
7 6 5 4 3 2 1 0
+
+ 0 + 266 + 1 +
+ + + 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 + + + + + + + 1:Out 1 + alsa_pcm:playback_1 + + + 2:Out 1 + alsa_pcm:playback_2 + + + + 0 + 500000 + + + + + 0 + 4 + 4 + + + + + +
diff --git a/muse2/share/templates/midiGM.med b/muse2/share/templates/midiGM.med new file mode 100644 index 00000000..ebd6333b --- /dev/null +++ b/muse2/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/muse2/share/templates/monorecord.med b/muse2/share/templates/monorecord.med new file mode 100644 index 00000000..07ab6997 --- /dev/null +++ b/muse2/share/templates/monorecord.med @@ -0,0 +1,432 @@ + + + + 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/muse2/share/templates/synti.med b/muse2/share/templates/synti.med new file mode 100644 index 00000000..a4eec239 --- /dev/null +++ b/muse2/share/templates/synti.med @@ -0,0 +1,809 @@ + + + + 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 + + organ-1 + organ-1 + 0 + + 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 + + + + fluid-1 + fluid-1 + 0 + + 7 + 10 + 262145 + + + 7 + 10 + 262145 + + + 7 + 10 + 262145 + + + 7 + 10 + 262145 + + + 7 + 10 + 262145 + + + 7 + 10 + 262145 + + + 7 + 10 + 262145 + + + 7 + 10 + 262145 + + + 7 + 10 + 262145 + + + 7 + 10 + 262145 + + + 7 + 10 + 262145 + + + 7 + 10 + 262145 + + + 7 + 10 + 262145 + + + 7 + 10 + 262145 + + + 7 + 10 + 262145 + + + 7 + 10 + 262145 + + + + s1-1 + s1-1 + 0 + + 7 + 10 + 262145 + + + 7 + 10 + 262145 + + + 7 + 10 + 262145 + + + 7 + 10 + 262145 + + + 7 + 10 + 262145 + + + 7 + 10 + 262145 + + + 7 + 10 + 262145 + + + 7 + 10 + 262145 + + + 7 + 10 + 262145 + + + 7 + 10 + 262145 + + + 7 + 10 + 262145 + + + 7 + 10 + 262145 + + + 7 + 10 + 262145 + + + 7 + 10 + 262145 + + + 7 + 10 + 262145 + + + 7 + 10 + 262145 + + + + vam-1 + vam-1 + 0 + + 7 + 10 + 262145 + + + 7 + 10 + 262145 + + + 7 + 10 + 262145 + + + 7 + 10 + 262145 + + + 7 + 10 + 262145 + + + 7 + 10 + 262145 + + + 7 + 10 + 262145 + + + 7 + 10 + 262145 + + + 7 + 10 + 262145 + + + 7 + 10 + 262145 + + + 7 + 10 + 262145 + + + 7 + 10 + 262145 + + + 7 + 10 + 262145 + + + 7 + 10 + 262145 + + + 7 + 10 + 262145 + + + 7 + 10 + 262145 + + + + + 96 + 96 + 600 + 400 + 50 + 300 + + + 96 + 96 + 80 + 50 + 0 + 0 + 600 + 400 + 0 + + + 0 + + + + 600 + 400 + +
+ + 0 + 12288 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 18432 + 1 + + Track 1 + 0 + 0 + 0 + 0 + 0 + 20 + 0 + 0 + 0 + 65535 + 65535 + 0 + 0 + 0 + 0 + 100 + 100 + 1 + + Track 1 + + 1 + 0 + + + + Out 1 + 0 + 0 + 0 + 0 + 2 + 20 + 0 + 1 + 0 + 0 + 0 + 0 + + + + + + + fluid-1 + 0 + 0 + 0 + 1 + 2 + 20 + 124 + 0 + 0 + 0 + 1 + + + + + fluid + 1 + 0 + + + 7c 00 01 2f 68 6f 6d 65 2f 77 73 2f 73 66 6f 6e + 74 2f 46 6c 75 69 64 52 33 2e 53 46 32 00 + + + + + organ-1 + 0 + 0 + 0 + 0 + 1 + 20 + 0 + 0 + 0 + 0 + 0 + + + + + organ + 0 + 0 + + + 00 00 03 00 ff 3f 00 00 01 00 03 00 ff 3f 00 00 + 02 00 03 00 ff 3f 00 00 03 00 03 00 ff 3f 00 00 + 04 00 03 00 ff 3f 00 00 05 00 03 00 ff 3f 00 00 + 06 00 03 00 a2 00 00 00 07 00 03 00 00 00 00 00 + 08 00 03 00 ff 3f 00 00 09 00 03 00 fe 1f 00 00 + 0a 00 03 00 a2 00 00 00 0b 00 03 00 00 00 00 00 + 0c 00 03 00 ff 3f 00 00 0d 00 03 00 fe 1f 00 00 + 0e 00 03 00 01 00 00 00 0f 00 03 00 01 00 00 00 + 10 00 03 00 01 00 00 00 + + + + + s1-1 + 0 + 0 + 0 + 1 + 1 + 20 + 11 + 0 + 0 + 0 + 1 + + + + + s1 + 2 + 0 + + + vam-1 + 0 + 0 + 0 + 1 + 1 + 20 + 0 + 0 + 0 + 0 + 1 + + + + + vam + 3 + 0 + + + 1:Out 1 + alsa_pcm:playback_1 + + + 2:Out 1 + alsa_pcm:playback_2 + + + fluid-1 + Out 1 + + + organ-1 + Out 1 + + + s1-1 + Out 1 + + + vam-1 + Out 1 + + + + 0 + 500000 + + + + + 0 + 4 + 4 + + + + + + + + + + + + 0:0 + + + + + 96 + 96 + + 255 + 0 + 0 + 1 + 80 + 50 + 0 + 0 + 0 + 346 + 390 + 286 + + +
diff --git a/muse2/share/wallpapers/Makefile.am b/muse2/share/wallpapers/Makefile.am new file mode 100644 index 00000000..57946365 --- /dev/null +++ b/muse2/share/wallpapers/Makefile.am @@ -0,0 +1,5 @@ +EXTRA_DIST = $(wildcard *.gif) $(wildcard *.jpg) $(wildcard *.png) + +wallpkgdata_DATA = $(EXTRA_DIST) + +wallpkgdatadir = $(pkgdatadir)/wallpapers diff --git a/muse2/share/wallpapers/Makefile.in b/muse2/share/wallpapers/Makefile.in new file mode 100644 index 00000000..ac556a0c --- /dev/null +++ b/muse2/share/wallpapers/Makefile.in @@ -0,0 +1,465 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = share/wallpapers +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal-include.m4 \ + $(top_srcdir)/m4/alsa.m4 $(top_srcdir)/m4/docbook.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(wallpkgdatadir)" +DATA = $(wallpkgdata_DATA) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DOCBOOKSTYLE = @DOCBOOKSTYLE@ +DOCBOOKTARGETS = @DOCBOOKTARGETS@ +DOT = @DOT@ +DOTPATH = @DOTPATH@ +DOXYGEN = @DOXYGEN@ +DOXYGEN_TREEVIEW = @DOXYGEN_TREEVIEW@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FLUIDSYNTHDIRS = @FLUIDSYNTHDIRS@ +FST_CFLAGS = @FST_CFLAGS@ +FST_LIBS = @FST_LIBS@ +Fluidsynth_CFLAGS = @Fluidsynth_CFLAGS@ +Fluidsynth_LIBS = @Fluidsynth_LIBS@ +GIVERTCAP = @GIVERTCAP@ +GREP = @GREP@ +HAVEDOT = @HAVEDOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_LIBS = @JACK_LIBS@ +JADE = @JADE@ +LASH_CFLAGS = @LASH_CFLAGS@ +LASH_LIBS = @LASH_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LO_CFLAGS = @LO_CFLAGS@ +LO_LIBS = @LO_LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MUSECXXFLAGS = @MUSECXXFLAGS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NSGMLS = @NSGMLS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PCH = @PCH@ +PERL = @PERL@ +PKG_CONFIG = @PKG_CONFIG@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIB = @PYTHON_LIB@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QTDIR_BIN = @QTDIR_BIN@ +QTDIR_INC = @QTDIR_INC@ +QT_LIBS = @QT_LIBS@ +RANLIB = @RANLIB@ +SAMPLERATE_CFLAGS = @SAMPLERATE_CFLAGS@ +SAMPLERATE_LIBS = @SAMPLERATE_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ +SNDFILE_LIBS = @SNDFILE_LIBS@ +STRIP = @STRIP@ +SUIDBUILD = @SUIDBUILD@ +SUIDINSTALL = @SUIDINSTALL@ +USE_SSE = @USE_SSE@ +UUID_CFLAGS = @UUID_CFLAGS@ +UUID_LIBS = @UUID_LIBS@ +VERSION = @VERSION@ +XMKMF = @XMKMF@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +have_docbook = @have_docbook@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +synth_fluid = @synth_fluid@ +synth_fluidsynth = @synth_fluidsynth@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +EXTRA_DIST = $(wildcard *.gif) $(wildcard *.jpg) $(wildcard *.png) +wallpkgdata_DATA = $(EXTRA_DIST) +wallpkgdatadir = $(pkgdatadir)/wallpapers +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu share/wallpapers/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu share/wallpapers/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-wallpkgdataDATA: $(wallpkgdata_DATA) + @$(NORMAL_INSTALL) + test -z "$(wallpkgdatadir)" || $(MKDIR_P) "$(DESTDIR)$(wallpkgdatadir)" + @list='$(wallpkgdata_DATA)'; test -n "$(wallpkgdatadir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(wallpkgdatadir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(wallpkgdatadir)" || exit $$?; \ + done + +uninstall-wallpkgdataDATA: + @$(NORMAL_UNINSTALL) + @list='$(wallpkgdata_DATA)'; test -n "$(wallpkgdatadir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(wallpkgdatadir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(wallpkgdatadir)" && rm -f $$files +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(DATA) +installdirs: + for dir in "$(DESTDIR)$(wallpkgdatadir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-wallpkgdataDATA + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-wallpkgdataDATA + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + distclean distclean-generic distclean-libtool distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + install-wallpkgdataDATA installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am uninstall uninstall-am uninstall-wallpkgdataDATA + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/muse2/share/wallpapers/gray.gif b/muse2/share/wallpapers/gray.gif new file mode 100644 index 00000000..cb30e856 Binary files /dev/null and b/muse2/share/wallpapers/gray.gif differ diff --git a/muse2/share/wallpapers/gray_rock.gif b/muse2/share/wallpapers/gray_rock.gif new file mode 100644 index 00000000..dcf1a19b Binary files /dev/null and b/muse2/share/wallpapers/gray_rock.gif differ diff --git a/muse2/share/wallpapers/gray_stucco.gif b/muse2/share/wallpapers/gray_stucco.gif new file mode 100644 index 00000000..bcebdb02 Binary files /dev/null and b/muse2/share/wallpapers/gray_stucco.gif differ diff --git a/muse2/share/wallpapers/paper1.jpg b/muse2/share/wallpapers/paper1.jpg new file mode 100644 index 00000000..1d4923e8 Binary files /dev/null and b/muse2/share/wallpapers/paper1.jpg differ diff --git a/muse2/share/wallpapers/stone1.gif b/muse2/share/wallpapers/stone1.gif new file mode 100644 index 00000000..f45407cc Binary files /dev/null and b/muse2/share/wallpapers/stone1.gif differ diff --git a/muse2/synti/Makefile.am b/muse2/synti/Makefile.am new file mode 100644 index 00000000..b1d11400 --- /dev/null +++ b/muse2/synti/Makefile.am @@ -0,0 +1,19 @@ +#if ENABLEFLUIDSYNTH +#SUBDIRS = libsynti s1 organ fluidsynth fluid vam deicsonze simpledrums +#else +#SUBDIRS = libsynti s1 organ vam deicsonze simpledrums +#endif +SUBDIRS = libsynti\ + s1 \ + organ \ + $(synth_fluidsynth) \ + $(synth_fluid) \ + vam \ + simpledrums +# deicsonze +# deicsonze2 + +include $(top_srcdir)/common.am + +EXTRA_DIST = synti-install.am + diff --git a/muse2/synti/Makefile.in b/muse2/synti/Makefile.in new file mode 100644 index 00000000..a39b9d9b --- /dev/null +++ b/muse2/synti/Makefile.in @@ -0,0 +1,683 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/common.am +subdir = synti +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal-include.m4 \ + $(top_srcdir)/m4/alsa.m4 $(top_srcdir)/m4/docbook.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +ACLOCAL = @ACLOCAL@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DOCBOOKSTYLE = @DOCBOOKSTYLE@ +DOCBOOKTARGETS = @DOCBOOKTARGETS@ +DOT = @DOT@ +DOTPATH = @DOTPATH@ +DOXYGEN = @DOXYGEN@ +DOXYGEN_TREEVIEW = @DOXYGEN_TREEVIEW@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FLUIDSYNTHDIRS = @FLUIDSYNTHDIRS@ +FST_CFLAGS = @FST_CFLAGS@ +FST_LIBS = @FST_LIBS@ +Fluidsynth_CFLAGS = @Fluidsynth_CFLAGS@ +Fluidsynth_LIBS = @Fluidsynth_LIBS@ +GIVERTCAP = @GIVERTCAP@ +GREP = @GREP@ +HAVEDOT = @HAVEDOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_LIBS = @JACK_LIBS@ +JADE = @JADE@ +LASH_CFLAGS = @LASH_CFLAGS@ +LASH_LIBS = @LASH_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LO_CFLAGS = @LO_CFLAGS@ +LO_LIBS = @LO_LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MUSECXXFLAGS = @MUSECXXFLAGS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NSGMLS = @NSGMLS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PCH = @PCH@ +PERL = @PERL@ +PKG_CONFIG = @PKG_CONFIG@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIB = @PYTHON_LIB@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QTDIR_BIN = @QTDIR_BIN@ +QTDIR_INC = @QTDIR_INC@ +QT_LIBS = @QT_LIBS@ +RANLIB = @RANLIB@ +SAMPLERATE_CFLAGS = @SAMPLERATE_CFLAGS@ +SAMPLERATE_LIBS = @SAMPLERATE_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ +SNDFILE_LIBS = @SNDFILE_LIBS@ +STRIP = @STRIP@ +SUIDBUILD = @SUIDBUILD@ +SUIDINSTALL = @SUIDINSTALL@ +USE_SSE = @USE_SSE@ +UUID_CFLAGS = @UUID_CFLAGS@ +UUID_LIBS = @UUID_LIBS@ +VERSION = @VERSION@ +XMKMF = @XMKMF@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +have_docbook = @have_docbook@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +synth_fluid = @synth_fluid@ +synth_fluidsynth = @synth_fluidsynth@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ + +#if ENABLEFLUIDSYNTH +#SUBDIRS = libsynti s1 organ fluidsynth fluid vam deicsonze simpledrums +#else +#SUBDIRS = libsynti s1 organ vam deicsonze simpledrums +#endif +SUBDIRS = libsynti\ + s1 \ + organ \ + $(synth_fluidsynth) \ + $(synth_fluid) \ + vam \ + simpledrums + +AM_CXXFLAGS = $(MUSECXXFLAGS) -I.. -I$(top_srcdir)/synti \ + -I$(top_srcdir)/muse/widgets -DQT_SHARED -DQT_THREAD_SUPPORT \ + -DQT_PLUGIN $(QTDIR_INC) -DQT3_SUPPORT +AM_CPPFLAGS = +MOC = $(QTDIR_BIN)/moc +#UIC = $(QTDIR_BIN)/uic3 +UIC = /usr/bin/uic3 +UIFILES = $(wildcard *.ui) +MOCFILES = $(shell for h in $(filter %.h,$(SOURCES)); do \ + if grep -q Q_OBJECT $$h; then \ + echo $$h | sed "s/\(.*\)\.h/moc_\1.cpp/"; \ + fi; \ + done) + +BUILT_SOURCES = $(MOCFILES) $(UIFILES:%.ui=%.h) +MOSTLYCLEANFILES = $(MOCFILES) $(UIFILES:%.ui=%.h) +SUFFIXES = .ui .h.gch +# deicsonze +# deicsonze2 +EXTRA_DIST = synti-install.am +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-recursive + +.SUFFIXES: +.SUFFIXES: .ui .h.gch .lo .o +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/common.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu synti/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu synti/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all check \ + ctags-recursive install install-am install-strip \ + tags-recursive + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am + + +de: + @for base in $(MOCFILES); do echo -e "\t$${base}.cpp $${base}.h \\"; done + +nde: + @for base in $(MOCFILES); do echo -e "\tmoc_$${base}.cpp \\"; done + +.ui.o: %.h + $(UIC) -L $(top_srcdir)/muse/widgets -o $*.cpp -impl $*.h $*.ui + $(MOC) $*.h >> $*.cpp + $(CXXCOMPILE) -c $*.cpp -o $*.o + $(RM) $*.cpp moc_$*.cpp moc_$*.o + +.ui.lo: %.h + $(UIC) -L $(top_srcdir)/muse/widgets -o $*.cpp -impl $*.h $*.ui + $(MOC) $*.h >> $*.cpp + $(LTCXXCOMPILE) -c $*.cpp -o $*.lo + $(RM) $*.cpp moc_$*.cpp moc_$*.lo moc_$*.o + +moc_%.cpp: %.h + $(MOC) $< -o $@ + +%.h: %.ui + $(UIC) -o $@ $< +# $(UIC) -L $(top_srcdir)/muse/widgets -o $@ $< + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/muse2/synti/deicsonze/.deps/deicsonze.Plo b/muse2/synti/deicsonze/.deps/deicsonze.Plo new file mode 100644 index 00000000..64f193a6 --- /dev/null +++ b/muse2/synti/deicsonze/.deps/deicsonze.Plo @@ -0,0 +1,768 @@ +deicsonze.lo: deicsonze.cpp /usr/include/c++/4.4/cmath \ + /usr/include/c++/4.4/i486-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.4/i486-linux-gnu/bits/os_defines.h \ + /usr/include/features.h /usr/include/bits/predefs.h \ + /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h \ + /usr/include/gnu/stubs.h /usr/include/gnu/stubs-32.h \ + /usr/include/c++/4.4/i486-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.4/bits/cpp_type_traits.h \ + /usr/include/c++/4.4/ext/type_traits.h /usr/include/math.h \ + /usr/include/bits/huge_val.h /usr/include/bits/huge_valf.h \ + /usr/include/bits/huge_vall.h /usr/include/bits/inf.h \ + /usr/include/bits/nan.h /usr/include/bits/mathdef.h \ + /usr/include/bits/mathcalls.h /usr/include/bits/mathinline.h \ + /usr/include/c++/4.4/bits/cmath.tcc /usr/include/c++/4.4/list \ + /usr/include/c++/4.4/bits/stl_algobase.h /usr/include/c++/4.4/cstddef \ + /usr/lib/gcc/i486-linux-gnu/4.4.3/include/stddef.h \ + /usr/include/c++/4.4/bits/functexcept.h \ + /usr/include/c++/4.4/exception_defines.h \ + /usr/include/c++/4.4/ext/numeric_traits.h \ + /usr/include/c++/4.4/bits/stl_pair.h /usr/include/c++/4.4/bits/move.h \ + /usr/include/c++/4.4/bits/concept_check.h \ + /usr/include/c++/4.4/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.4/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.4/bits/stl_iterator.h \ + /usr/include/c++/4.4/debug/debug.h /usr/include/c++/4.4/bits/allocator.h \ + /usr/include/c++/4.4/i486-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.4/ext/new_allocator.h /usr/include/c++/4.4/new \ + /usr/include/c++/4.4/exception /usr/include/c++/4.4/bits/stl_list.h \ + /usr/include/c++/4.4/initializer_list /usr/include/c++/4.4/bits/list.tcc \ + /usr/include/stdio.h /usr/include/bits/types.h \ + /usr/include/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/i486-linux-gnu/4.4.3/include/stdarg.h \ + /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \ + /usr/include/bits/stdio.h /usr/include/bits/stdio2.h ../libsynti/mess.h \ + ../libsynti/mpevent.h ../libsynti/evdata.h /usr/include/memory.h \ + /usr/include/string.h /usr/include/xlocale.h /usr/include/bits/string3.h \ + ../../muse/midictrl.h /usr/share/qt4/include/QtCore/qstring.h \ + /usr/share/qt4/include/QtCore/qchar.h \ + /usr/share/qt4/include/QtCore/qglobal.h \ + /usr/share/qt4/include/QtCore/qconfig.h \ + /usr/share/qt4/include/QtCore/qfeatures.h \ + /usr/share/qt4/include/QtCore/qbytearray.h \ + /usr/share/qt4/include/QtCore/qatomic.h \ + /usr/share/qt4/include/QtCore/qbasicatomic.h \ + /usr/share/qt4/include/QtCore/qatomic_arch.h \ + /usr/share/qt4/include/QtCore/qatomic_i386.h \ + /usr/share/qt4/include/QtCore/qnamespace.h /usr/include/c++/4.4/string \ + /usr/include/c++/4.4/bits/stringfwd.h \ + /usr/include/c++/4.4/bits/char_traits.h \ + /usr/include/c++/4.4/bits/postypes.h /usr/include/c++/4.4/cwchar \ + /usr/include/bits/wchar.h /usr/include/bits/wchar2.h \ + /usr/include/c++/4.4/bits/localefwd.h \ + /usr/include/c++/4.4/i486-linux-gnu/bits/c++locale.h \ + /usr/include/c++/4.4/clocale /usr/include/locale.h \ + /usr/include/bits/locale.h /usr/include/c++/4.4/iosfwd \ + /usr/include/c++/4.4/cctype /usr/include/ctype.h /usr/include/endian.h \ + /usr/include/bits/endian.h /usr/include/bits/byteswap.h \ + /usr/include/c++/4.4/bits/ostream_insert.h \ + /usr/include/c++/4.4/cxxabi-forced.h \ + /usr/include/c++/4.4/bits/stl_function.h \ + /usr/include/c++/4.4/backward/binders.h \ + /usr/include/c++/4.4/bits/basic_string.h \ + /usr/include/c++/4.4/ext/atomicity.h \ + /usr/include/c++/4.4/i486-linux-gnu/bits/gthr.h \ + /usr/include/c++/4.4/i486-linux-gnu/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h /usr/include/time.h \ + /usr/include/bits/sched.h /usr/include/bits/time.h /usr/include/signal.h \ + /usr/include/bits/sigset.h /usr/include/bits/pthreadtypes.h \ + /usr/include/bits/setjmp.h /usr/include/unistd.h \ + /usr/include/bits/posix_opt.h /usr/include/bits/environments.h \ + /usr/include/bits/confname.h /usr/include/getopt.h \ + /usr/include/bits/unistd.h \ + /usr/include/c++/4.4/i486-linux-gnu/bits/atomic_word.h \ + /usr/include/c++/4.4/bits/basic_string.tcc /usr/include/c++/4.4/map \ + /usr/include/c++/4.4/bits/stl_tree.h /usr/include/c++/4.4/bits/stl_map.h \ + /usr/include/c++/4.4/bits/stl_multimap.h deicsonze.h \ + /usr/include/c++/4.4/iostream /usr/include/c++/4.4/ostream \ + /usr/include/c++/4.4/ios /usr/include/c++/4.4/bits/ios_base.h \ + /usr/include/c++/4.4/bits/locale_classes.h \ + /usr/include/c++/4.4/bits/locale_classes.tcc \ + /usr/include/c++/4.4/streambuf /usr/include/c++/4.4/bits/streambuf.tcc \ + /usr/include/c++/4.4/bits/basic_ios.h \ + /usr/include/c++/4.4/bits/locale_facets.h /usr/include/c++/4.4/cwctype \ + /usr/include/wctype.h \ + /usr/include/c++/4.4/i486-linux-gnu/bits/ctype_base.h \ + /usr/include/c++/4.4/bits/streambuf_iterator.h \ + /usr/include/c++/4.4/i486-linux-gnu/bits/ctype_inline.h \ + /usr/include/c++/4.4/bits/locale_facets.tcc \ + /usr/include/c++/4.4/bits/basic_ios.tcc \ + /usr/include/c++/4.4/bits/ostream.tcc /usr/include/c++/4.4/istream \ + /usr/include/c++/4.4/bits/istream.tcc /usr/include/c++/4.4/vector \ + /usr/include/c++/4.4/bits/stl_construct.h \ + /usr/include/c++/4.4/bits/stl_uninitialized.h \ + /usr/include/c++/4.4/bits/stl_vector.h \ + /usr/include/c++/4.4/bits/stl_bvector.h \ + /usr/include/c++/4.4/bits/vector.tcc deicsonzegui.h \ + /usr/share/qt4/include/Qt3Support/q3listview.h \ + /usr/share/qt4/include/Qt3Support/q3scrollview.h \ + /usr/share/qt4/include/Qt3Support/q3frame.h \ + /usr/share/qt4/include/QtGui/qframe.h \ + /usr/share/qt4/include/QtGui/qwidget.h \ + /usr/share/qt4/include/QtGui/qwindowdefs.h \ + /usr/share/qt4/include/QtCore/qobjectdefs.h \ + /usr/share/qt4/include/QtCore/qobject.h \ + /usr/share/qt4/include/QtCore/qstring.h \ + /usr/share/qt4/include/QtCore/qlist.h \ + /usr/share/qt4/include/QtCore/qiterator.h \ + /usr/share/qt4/include/QtCore/qalgorithms.h \ + /usr/include/c++/4.4/iterator \ + /usr/include/c++/4.4/bits/stream_iterator.h \ + /usr/share/qt4/include/QtCore/qscopedpointer.h \ + /usr/share/qt4/include/QtCore/qmargins.h \ + /usr/share/qt4/include/QtGui/qpaintdevice.h \ + /usr/share/qt4/include/QtCore/qrect.h \ + /usr/share/qt4/include/QtCore/qsize.h \ + /usr/share/qt4/include/QtCore/qpoint.h \ + /usr/share/qt4/include/QtGui/qpalette.h \ + /usr/share/qt4/include/QtGui/qcolor.h \ + /usr/share/qt4/include/QtGui/qrgb.h \ + /usr/share/qt4/include/QtCore/qstringlist.h \ + /usr/share/qt4/include/QtCore/qdatastream.h \ + /usr/share/qt4/include/QtCore/qiodevice.h \ + /usr/share/qt4/include/QtCore/qregexp.h \ + /usr/share/qt4/include/QtCore/qstringmatcher.h \ + /usr/share/qt4/include/QtGui/qbrush.h \ + /usr/share/qt4/include/QtCore/qpair.h \ + /usr/share/qt4/include/QtCore/qvector.h /usr/include/stdlib.h \ + /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ + /usr/include/sys/types.h /usr/include/sys/select.h \ + /usr/include/bits/select.h /usr/include/sys/sysmacros.h \ + /usr/include/alloca.h /usr/include/bits/stdlib.h \ + /usr/share/qt4/include/QtGui/qmatrix.h \ + /usr/share/qt4/include/QtGui/qpolygon.h \ + /usr/share/qt4/include/QtGui/qregion.h \ + /usr/share/qt4/include/QtCore/qline.h \ + /usr/share/qt4/include/QtGui/qwmatrix.h \ + /usr/share/qt4/include/QtGui/qtransform.h \ + /usr/share/qt4/include/QtGui/qpainterpath.h \ + /usr/share/qt4/include/QtGui/qimage.h \ + /usr/share/qt4/include/QtGui/qpixmap.h \ + /usr/share/qt4/include/QtCore/qsharedpointer.h \ + /usr/share/qt4/include/QtCore/qshareddata.h \ + /usr/share/qt4/include/QtCore/qsharedpointer_impl.h \ + /usr/share/qt4/include/QtGui/qfont.h \ + /usr/share/qt4/include/QtGui/qfontmetrics.h \ + /usr/share/qt4/include/QtGui/qfontinfo.h \ + /usr/share/qt4/include/QtGui/qsizepolicy.h \ + /usr/share/qt4/include/QtGui/qcursor.h \ + /usr/share/qt4/include/QtGui/qkeysequence.h \ + /usr/share/qt4/include/QtGui/qscrollbar.h \ + /usr/share/qt4/include/QtGui/qabstractslider.h deicsonzeguibase.h \ + /usr/share/qt4/include/QtCore/qvariant.h \ + /usr/share/qt4/include/QtCore/qmetatype.h \ + /usr/share/qt4/include/QtCore/qmap.h \ + /usr/share/qt4/include/QtCore/qhash.h \ + /usr/share/qt4/include/Qt3Support/Q3GroupBox \ + /usr/share/qt4/include/Qt3Support/q3groupbox.h \ + /usr/share/qt4/include/QtGui/qgroupbox.h \ + /usr/share/qt4/include/Qt3Support/Q3Header \ + /usr/share/qt4/include/Qt3Support/q3header.h \ + /usr/share/qt4/include/QtGui/qicon.h \ + /usr/share/qt4/include/Qt3Support/Q3ListView \ + /usr/share/qt4/include/Qt3Support/q3listview.h \ + /usr/share/qt4/include/QtCore/QVariant \ + /usr/share/qt4/include/QtCore/qvariant.h \ + /usr/share/qt4/include/QtGui/QAction \ + /usr/share/qt4/include/QtGui/qaction.h \ + /usr/share/qt4/include/QtCore/qvariant.h \ + /usr/share/qt4/include/QtGui/qactiongroup.h \ + /usr/share/qt4/include/QtGui/qaction.h \ + /usr/share/qt4/include/QtGui/QApplication \ + /usr/share/qt4/include/QtGui/qapplication.h \ + /usr/share/qt4/include/QtCore/qcoreapplication.h \ + /usr/share/qt4/include/QtCore/qcoreevent.h \ + /usr/share/qt4/include/QtCore/qeventloop.h \ + /usr/share/qt4/include/QtGui/QButtonGroup \ + /usr/share/qt4/include/QtGui/qbuttongroup.h \ + /usr/share/qt4/include/QtGui/QCheckBox \ + /usr/share/qt4/include/QtGui/qcheckbox.h \ + /usr/share/qt4/include/QtGui/qabstractbutton.h \ + /usr/share/qt4/include/QtGui/QComboBox \ + /usr/share/qt4/include/QtGui/qcombobox.h \ + /usr/share/qt4/include/QtGui/qabstractitemdelegate.h \ + /usr/share/qt4/include/QtGui/qstyleoption.h \ + /usr/share/qt4/include/QtGui/qabstractspinbox.h \ + /usr/share/qt4/include/QtGui/qvalidator.h \ + /usr/share/qt4/include/QtCore/qlocale.h \ + /usr/share/qt4/include/QtGui/qslider.h \ + /usr/share/qt4/include/QtGui/qstyle.h \ + /usr/share/qt4/include/QtGui/qtabbar.h \ + /usr/share/qt4/include/QtGui/qtabwidget.h \ + /usr/share/qt4/include/QtGui/qrubberband.h \ + /usr/share/qt4/include/QtCore/qabstractitemmodel.h \ + /usr/share/qt4/include/QtGui/QDialog \ + /usr/share/qt4/include/QtGui/qdialog.h \ + /usr/share/qt4/include/QtGui/QHeaderView \ + /usr/share/qt4/include/QtGui/qheaderview.h \ + /usr/share/qt4/include/QtGui/qabstractitemview.h \ + /usr/share/qt4/include/QtGui/qabstractscrollarea.h \ + /usr/share/qt4/include/QtGui/qitemselectionmodel.h \ + /usr/share/qt4/include/QtCore/qset.h /usr/share/qt4/include/QtGui/QLabel \ + /usr/share/qt4/include/QtGui/qlabel.h \ + /usr/share/qt4/include/QtGui/QLineEdit \ + /usr/share/qt4/include/QtGui/qlineedit.h \ + /usr/share/qt4/include/QtGui/QPushButton \ + /usr/share/qt4/include/QtGui/qpushbutton.h \ + /usr/share/qt4/include/QtGui/QSlider \ + /usr/share/qt4/include/QtGui/qslider.h \ + /usr/share/qt4/include/QtGui/QSpinBox \ + /usr/share/qt4/include/QtGui/qspinbox.h \ + /usr/share/qt4/include/QtGui/QTabWidget \ + /usr/share/qt4/include/QtGui/qtabwidget.h \ + /usr/share/qt4/include/QtGui/QWidget \ + /usr/share/qt4/include/QtGui/qwidget.h ../libsynti/gui.h \ + ../../muse/midi.h + +/usr/include/c++/4.4/cmath: + +/usr/include/c++/4.4/i486-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.4/i486-linux-gnu/bits/os_defines.h: + +/usr/include/features.h: + +/usr/include/bits/predefs.h: + +/usr/include/sys/cdefs.h: + +/usr/include/bits/wordsize.h: + +/usr/include/gnu/stubs.h: + +/usr/include/gnu/stubs-32.h: + +/usr/include/c++/4.4/i486-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.4/bits/cpp_type_traits.h: + +/usr/include/c++/4.4/ext/type_traits.h: + +/usr/include/math.h: + +/usr/include/bits/huge_val.h: + +/usr/include/bits/huge_valf.h: + +/usr/include/bits/huge_vall.h: + +/usr/include/bits/inf.h: + +/usr/include/bits/nan.h: + +/usr/include/bits/mathdef.h: + +/usr/include/bits/mathcalls.h: + +/usr/include/bits/mathinline.h: + +/usr/include/c++/4.4/bits/cmath.tcc: + +/usr/include/c++/4.4/list: + +/usr/include/c++/4.4/bits/stl_algobase.h: + +/usr/include/c++/4.4/cstddef: + +/usr/lib/gcc/i486-linux-gnu/4.4.3/include/stddef.h: + +/usr/include/c++/4.4/bits/functexcept.h: + +/usr/include/c++/4.4/exception_defines.h: + +/usr/include/c++/4.4/ext/numeric_traits.h: + +/usr/include/c++/4.4/bits/stl_pair.h: + +/usr/include/c++/4.4/bits/move.h: + +/usr/include/c++/4.4/bits/concept_check.h: + +/usr/include/c++/4.4/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.4/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.4/bits/stl_iterator.h: + +/usr/include/c++/4.4/debug/debug.h: + +/usr/include/c++/4.4/bits/allocator.h: + +/usr/include/c++/4.4/i486-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.4/ext/new_allocator.h: + +/usr/include/c++/4.4/new: + +/usr/include/c++/4.4/exception: + +/usr/include/c++/4.4/bits/stl_list.h: + +/usr/include/c++/4.4/initializer_list: + +/usr/include/c++/4.4/bits/list.tcc: + +/usr/include/stdio.h: + +/usr/include/bits/types.h: + +/usr/include/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/i486-linux-gnu/4.4.3/include/stdarg.h: + +/usr/include/bits/stdio_lim.h: + +/usr/include/bits/sys_errlist.h: + +/usr/include/bits/stdio.h: + +/usr/include/bits/stdio2.h: + +../libsynti/mess.h: + +../libsynti/mpevent.h: + +../libsynti/evdata.h: + +/usr/include/memory.h: + +/usr/include/string.h: + +/usr/include/xlocale.h: + +/usr/include/bits/string3.h: + +../../muse/midictrl.h: + +/usr/share/qt4/include/QtCore/qstring.h: + +/usr/share/qt4/include/QtCore/qchar.h: + +/usr/share/qt4/include/QtCore/qglobal.h: + +/usr/share/qt4/include/QtCore/qconfig.h: + +/usr/share/qt4/include/QtCore/qfeatures.h: + +/usr/share/qt4/include/QtCore/qbytearray.h: + +/usr/share/qt4/include/QtCore/qatomic.h: + +/usr/share/qt4/include/QtCore/qbasicatomic.h: + +/usr/share/qt4/include/QtCore/qatomic_arch.h: + +/usr/share/qt4/include/QtCore/qatomic_i386.h: + +/usr/share/qt4/include/QtCore/qnamespace.h: + +/usr/include/c++/4.4/string: + +/usr/include/c++/4.4/bits/stringfwd.h: + +/usr/include/c++/4.4/bits/char_traits.h: + +/usr/include/c++/4.4/bits/postypes.h: + +/usr/include/c++/4.4/cwchar: + +/usr/include/bits/wchar.h: + +/usr/include/bits/wchar2.h: + +/usr/include/c++/4.4/bits/localefwd.h: + +/usr/include/c++/4.4/i486-linux-gnu/bits/c++locale.h: + +/usr/include/c++/4.4/clocale: + +/usr/include/locale.h: + +/usr/include/bits/locale.h: + +/usr/include/c++/4.4/iosfwd: + +/usr/include/c++/4.4/cctype: + +/usr/include/ctype.h: + +/usr/include/endian.h: + +/usr/include/bits/endian.h: + +/usr/include/bits/byteswap.h: + +/usr/include/c++/4.4/bits/ostream_insert.h: + +/usr/include/c++/4.4/cxxabi-forced.h: + +/usr/include/c++/4.4/bits/stl_function.h: + +/usr/include/c++/4.4/backward/binders.h: + +/usr/include/c++/4.4/bits/basic_string.h: + +/usr/include/c++/4.4/ext/atomicity.h: + +/usr/include/c++/4.4/i486-linux-gnu/bits/gthr.h: + +/usr/include/c++/4.4/i486-linux-gnu/bits/gthr-default.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/time.h: + +/usr/include/bits/sched.h: + +/usr/include/bits/time.h: + +/usr/include/signal.h: + +/usr/include/bits/sigset.h: + +/usr/include/bits/pthreadtypes.h: + +/usr/include/bits/setjmp.h: + +/usr/include/unistd.h: + +/usr/include/bits/posix_opt.h: + +/usr/include/bits/environments.h: + +/usr/include/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/bits/unistd.h: + +/usr/include/c++/4.4/i486-linux-gnu/bits/atomic_word.h: + +/usr/include/c++/4.4/bits/basic_string.tcc: + +/usr/include/c++/4.4/map: + +/usr/include/c++/4.4/bits/stl_tree.h: + +/usr/include/c++/4.4/bits/stl_map.h: + +/usr/include/c++/4.4/bits/stl_multimap.h: + +deicsonze.h: + +/usr/include/c++/4.4/iostream: + +/usr/include/c++/4.4/ostream: + +/usr/include/c++/4.4/ios: + +/usr/include/c++/4.4/bits/ios_base.h: + +/usr/include/c++/4.4/bits/locale_classes.h: + +/usr/include/c++/4.4/bits/locale_classes.tcc: + +/usr/include/c++/4.4/streambuf: + +/usr/include/c++/4.4/bits/streambuf.tcc: + +/usr/include/c++/4.4/bits/basic_ios.h: + +/usr/include/c++/4.4/bits/locale_facets.h: + +/usr/include/c++/4.4/cwctype: + +/usr/include/wctype.h: + +/usr/include/c++/4.4/i486-linux-gnu/bits/ctype_base.h: + +/usr/include/c++/4.4/bits/streambuf_iterator.h: + +/usr/include/c++/4.4/i486-linux-gnu/bits/ctype_inline.h: + +/usr/include/c++/4.4/bits/locale_facets.tcc: + +/usr/include/c++/4.4/bits/basic_ios.tcc: + +/usr/include/c++/4.4/bits/ostream.tcc: + +/usr/include/c++/4.4/istream: + +/usr/include/c++/4.4/bits/istream.tcc: + +/usr/include/c++/4.4/vector: + +/usr/include/c++/4.4/bits/stl_construct.h: + +/usr/include/c++/4.4/bits/stl_uninitialized.h: + +/usr/include/c++/4.4/bits/stl_vector.h: + +/usr/include/c++/4.4/bits/stl_bvector.h: + +/usr/include/c++/4.4/bits/vector.tcc: + +deicsonzegui.h: + +/usr/share/qt4/include/Qt3Support/q3listview.h: + +/usr/share/qt4/include/Qt3Support/q3scrollview.h: + +/usr/share/qt4/include/Qt3Support/q3frame.h: + +/usr/share/qt4/include/QtGui/qframe.h: + +/usr/share/qt4/include/QtGui/qwidget.h: + +/usr/share/qt4/include/QtGui/qwindowdefs.h: + +/usr/share/qt4/include/QtCore/qobjectdefs.h: + +/usr/share/qt4/include/QtCore/qobject.h: + +/usr/share/qt4/include/QtCore/qstring.h: + +/usr/share/qt4/include/QtCore/qlist.h: + +/usr/share/qt4/include/QtCore/qiterator.h: + +/usr/share/qt4/include/QtCore/qalgorithms.h: + +/usr/include/c++/4.4/iterator: + +/usr/include/c++/4.4/bits/stream_iterator.h: + +/usr/share/qt4/include/QtCore/qscopedpointer.h: + +/usr/share/qt4/include/QtCore/qmargins.h: + +/usr/share/qt4/include/QtGui/qpaintdevice.h: + +/usr/share/qt4/include/QtCore/qrect.h: + +/usr/share/qt4/include/QtCore/qsize.h: + +/usr/share/qt4/include/QtCore/qpoint.h: + +/usr/share/qt4/include/QtGui/qpalette.h: + +/usr/share/qt4/include/QtGui/qcolor.h: + +/usr/share/qt4/include/QtGui/qrgb.h: + +/usr/share/qt4/include/QtCore/qstringlist.h: + +/usr/share/qt4/include/QtCore/qdatastream.h: + +/usr/share/qt4/include/QtCore/qiodevice.h: + +/usr/share/qt4/include/QtCore/qregexp.h: + +/usr/share/qt4/include/QtCore/qstringmatcher.h: + +/usr/share/qt4/include/QtGui/qbrush.h: + +/usr/share/qt4/include/QtCore/qpair.h: + +/usr/share/qt4/include/QtCore/qvector.h: + +/usr/include/stdlib.h: + +/usr/include/bits/waitflags.h: + +/usr/include/bits/waitstatus.h: + +/usr/include/sys/types.h: + +/usr/include/sys/select.h: + +/usr/include/bits/select.h: + +/usr/include/sys/sysmacros.h: + +/usr/include/alloca.h: + +/usr/include/bits/stdlib.h: + +/usr/share/qt4/include/QtGui/qmatrix.h: + +/usr/share/qt4/include/QtGui/qpolygon.h: + +/usr/share/qt4/include/QtGui/qregion.h: + +/usr/share/qt4/include/QtCore/qline.h: + +/usr/share/qt4/include/QtGui/qwmatrix.h: + +/usr/share/qt4/include/QtGui/qtransform.h: + +/usr/share/qt4/include/QtGui/qpainterpath.h: + +/usr/share/qt4/include/QtGui/qimage.h: + +/usr/share/qt4/include/QtGui/qpixmap.h: + +/usr/share/qt4/include/QtCore/qsharedpointer.h: + +/usr/share/qt4/include/QtCore/qshareddata.h: + +/usr/share/qt4/include/QtCore/qsharedpointer_impl.h: + +/usr/share/qt4/include/QtGui/qfont.h: + +/usr/share/qt4/include/QtGui/qfontmetrics.h: + +/usr/share/qt4/include/QtGui/qfontinfo.h: + +/usr/share/qt4/include/QtGui/qsizepolicy.h: + +/usr/share/qt4/include/QtGui/qcursor.h: + +/usr/share/qt4/include/QtGui/qkeysequence.h: + +/usr/share/qt4/include/QtGui/qscrollbar.h: + +/usr/share/qt4/include/QtGui/qabstractslider.h: + +deicsonzeguibase.h: + +/usr/share/qt4/include/QtCore/qvariant.h: + +/usr/share/qt4/include/QtCore/qmetatype.h: + +/usr/share/qt4/include/QtCore/qmap.h: + +/usr/share/qt4/include/QtCore/qhash.h: + +/usr/share/qt4/include/Qt3Support/Q3GroupBox: + +/usr/share/qt4/include/Qt3Support/q3groupbox.h: + +/usr/share/qt4/include/QtGui/qgroupbox.h: + +/usr/share/qt4/include/Qt3Support/Q3Header: + +/usr/share/qt4/include/Qt3Support/q3header.h: + +/usr/share/qt4/include/QtGui/qicon.h: + +/usr/share/qt4/include/Qt3Support/Q3ListView: + +/usr/share/qt4/include/Qt3Support/q3listview.h: + +/usr/share/qt4/include/QtCore/QVariant: + +/usr/share/qt4/include/QtCore/qvariant.h: + +/usr/share/qt4/include/QtGui/QAction: + +/usr/share/qt4/include/QtGui/qaction.h: + +/usr/share/qt4/include/QtCore/qvariant.h: + +/usr/share/qt4/include/QtGui/qactiongroup.h: + +/usr/share/qt4/include/QtGui/qaction.h: + +/usr/share/qt4/include/QtGui/QApplication: + +/usr/share/qt4/include/QtGui/qapplication.h: + +/usr/share/qt4/include/QtCore/qcoreapplication.h: + +/usr/share/qt4/include/QtCore/qcoreevent.h: + +/usr/share/qt4/include/QtCore/qeventloop.h: + +/usr/share/qt4/include/QtGui/QButtonGroup: + +/usr/share/qt4/include/QtGui/qbuttongroup.h: + +/usr/share/qt4/include/QtGui/QCheckBox: + +/usr/share/qt4/include/QtGui/qcheckbox.h: + +/usr/share/qt4/include/QtGui/qabstractbutton.h: + +/usr/share/qt4/include/QtGui/QComboBox: + +/usr/share/qt4/include/QtGui/qcombobox.h: + +/usr/share/qt4/include/QtGui/qabstractitemdelegate.h: + +/usr/share/qt4/include/QtGui/qstyleoption.h: + +/usr/share/qt4/include/QtGui/qabstractspinbox.h: + +/usr/share/qt4/include/QtGui/qvalidator.h: + +/usr/share/qt4/include/QtCore/qlocale.h: + +/usr/share/qt4/include/QtGui/qslider.h: + +/usr/share/qt4/include/QtGui/qstyle.h: + +/usr/share/qt4/include/QtGui/qtabbar.h: + +/usr/share/qt4/include/QtGui/qtabwidget.h: + +/usr/share/qt4/include/QtGui/qrubberband.h: + +/usr/share/qt4/include/QtCore/qabstractitemmodel.h: + +/usr/share/qt4/include/QtGui/QDialog: + +/usr/share/qt4/include/QtGui/qdialog.h: + +/usr/share/qt4/include/QtGui/QHeaderView: + +/usr/share/qt4/include/QtGui/qheaderview.h: + +/usr/share/qt4/include/QtGui/qabstractitemview.h: + +/usr/share/qt4/include/QtGui/qabstractscrollarea.h: + +/usr/share/qt4/include/QtGui/qitemselectionmodel.h: + +/usr/share/qt4/include/QtCore/qset.h: + +/usr/share/qt4/include/QtGui/QLabel: + +/usr/share/qt4/include/QtGui/qlabel.h: + +/usr/share/qt4/include/QtGui/QLineEdit: + +/usr/share/qt4/include/QtGui/qlineedit.h: + +/usr/share/qt4/include/QtGui/QPushButton: + +/usr/share/qt4/include/QtGui/qpushbutton.h: + +/usr/share/qt4/include/QtGui/QSlider: + +/usr/share/qt4/include/QtGui/qslider.h: + +/usr/share/qt4/include/QtGui/QSpinBox: + +/usr/share/qt4/include/QtGui/qspinbox.h: + +/usr/share/qt4/include/QtGui/QTabWidget: + +/usr/share/qt4/include/QtGui/qtabwidget.h: + +/usr/share/qt4/include/QtGui/QWidget: + +/usr/share/qt4/include/QtGui/qwidget.h: + +../libsynti/gui.h: + +../../muse/midi.h: diff --git a/muse2/synti/deicsonze/.deps/deicsonzegui.Plo b/muse2/synti/deicsonze/.deps/deicsonzegui.Plo new file mode 100644 index 00000000..6f6f554c --- /dev/null +++ b/muse2/synti/deicsonze/.deps/deicsonzegui.Plo @@ -0,0 +1,593 @@ +deicsonzegui.lo: deicsonzegui.cpp /usr/share/qt3/include/qvariant.h \ + /usr/share/qt3/include/qstring.h /usr/share/qt3/include/qcstring.h \ + /usr/share/qt3/include/qmemarray.h /usr/share/qt3/include/qgarray.h \ + /usr/share/qt3/include/qshared.h /usr/share/qt3/include/qglobal.h \ + /usr/share/qt3/include/qconfig.h /usr/share/qt3/include/qmodules.h \ + /usr/share/qt3/include/qfeatures.h /usr/share/qt3/include/qwinexport.h \ + /usr/include/string.h /usr/include/features.h \ + /usr/include/bits/predefs.h /usr/include/sys/cdefs.h \ + /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h \ + /usr/include/gnu/stubs-32.h \ + /usr/lib/gcc/i486-linux-gnu/4.4.3/include/stddef.h \ + /usr/include/xlocale.h /usr/include/bits/string3.h \ + /usr/lib/gcc/i486-linux-gnu/4.4.3/include-fixed/limits.h \ + /usr/lib/gcc/i486-linux-gnu/4.4.3/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + /usr/include/bits/stdio_lim.h /usr/include/c++/4.4/string \ + /usr/include/c++/4.4/i486-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.4/i486-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.4/i486-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.4/bits/stringfwd.h \ + /usr/include/c++/4.4/bits/char_traits.h \ + /usr/include/c++/4.4/bits/stl_algobase.h /usr/include/c++/4.4/cstddef \ + /usr/include/c++/4.4/bits/functexcept.h \ + /usr/include/c++/4.4/exception_defines.h \ + /usr/include/c++/4.4/bits/cpp_type_traits.h \ + /usr/include/c++/4.4/ext/type_traits.h \ + /usr/include/c++/4.4/ext/numeric_traits.h \ + /usr/include/c++/4.4/bits/stl_pair.h /usr/include/c++/4.4/bits/move.h \ + /usr/include/c++/4.4/bits/concept_check.h \ + /usr/include/c++/4.4/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.4/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.4/bits/stl_iterator.h \ + /usr/include/c++/4.4/debug/debug.h /usr/include/c++/4.4/bits/postypes.h \ + /usr/include/c++/4.4/cwchar /usr/include/wchar.h /usr/include/stdio.h \ + /usr/lib/gcc/i486-linux-gnu/4.4.3/include/stdarg.h \ + /usr/include/bits/wchar.h /usr/include/bits/wchar2.h \ + /usr/include/c++/4.4/bits/allocator.h \ + /usr/include/c++/4.4/i486-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.4/ext/new_allocator.h /usr/include/c++/4.4/new \ + /usr/include/c++/4.4/exception /usr/include/c++/4.4/bits/localefwd.h \ + /usr/include/c++/4.4/i486-linux-gnu/bits/c++locale.h \ + /usr/include/c++/4.4/clocale /usr/include/locale.h \ + /usr/include/bits/locale.h /usr/include/c++/4.4/iosfwd \ + /usr/include/c++/4.4/cctype /usr/include/ctype.h \ + /usr/include/bits/types.h /usr/include/bits/typesizes.h \ + /usr/include/endian.h /usr/include/bits/endian.h \ + /usr/include/bits/byteswap.h /usr/include/c++/4.4/bits/ostream_insert.h \ + /usr/include/c++/4.4/cxxabi-forced.h \ + /usr/include/c++/4.4/bits/stl_function.h \ + /usr/include/c++/4.4/backward/binders.h \ + /usr/include/c++/4.4/bits/basic_string.h \ + /usr/include/c++/4.4/ext/atomicity.h \ + /usr/include/c++/4.4/i486-linux-gnu/bits/gthr.h \ + /usr/include/c++/4.4/i486-linux-gnu/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h /usr/include/time.h \ + /usr/include/bits/sched.h /usr/include/bits/time.h /usr/include/signal.h \ + /usr/include/bits/sigset.h /usr/include/bits/pthreadtypes.h \ + /usr/include/bits/setjmp.h /usr/include/unistd.h \ + /usr/include/bits/posix_opt.h /usr/include/bits/environments.h \ + /usr/include/bits/confname.h /usr/include/getopt.h \ + /usr/include/bits/unistd.h \ + /usr/include/c++/4.4/i486-linux-gnu/bits/atomic_word.h \ + /usr/include/c++/4.4/initializer_list \ + /usr/include/c++/4.4/bits/basic_string.tcc \ + /usr/share/qt3/include/qvaluelist.h /usr/share/qt3/include/qtl.h \ + /usr/share/qt3/include/qtextstream.h /usr/share/qt3/include/qiodevice.h \ + /usr/include/libio.h /usr/include/_G_config.h \ + /usr/include/bits/sys_errlist.h /usr/include/bits/stdio.h \ + /usr/include/bits/stdio2.h /usr/share/qt3/include/qdatastream.h \ + /usr/include/c++/4.4/iterator /usr/include/c++/4.4/ostream \ + /usr/include/c++/4.4/ios /usr/include/c++/4.4/bits/ios_base.h \ + /usr/include/c++/4.4/bits/locale_classes.h \ + /usr/include/c++/4.4/bits/locale_classes.tcc \ + /usr/include/c++/4.4/streambuf /usr/include/c++/4.4/bits/streambuf.tcc \ + /usr/include/c++/4.4/bits/basic_ios.h \ + /usr/include/c++/4.4/bits/locale_facets.h /usr/include/c++/4.4/cwctype \ + /usr/include/wctype.h \ + /usr/include/c++/4.4/i486-linux-gnu/bits/ctype_base.h \ + /usr/include/c++/4.4/bits/streambuf_iterator.h \ + /usr/include/c++/4.4/i486-linux-gnu/bits/ctype_inline.h \ + /usr/include/c++/4.4/bits/locale_facets.tcc \ + /usr/include/c++/4.4/bits/basic_ios.tcc \ + /usr/include/c++/4.4/bits/ostream.tcc /usr/include/c++/4.4/istream \ + /usr/include/c++/4.4/bits/istream.tcc \ + /usr/include/c++/4.4/bits/stream_iterator.h /usr/include/c++/4.4/list \ + /usr/include/c++/4.4/bits/stl_list.h /usr/include/c++/4.4/bits/list.tcc \ + /usr/share/qt3/include/qstringlist.h /usr/share/qt3/include/qstrlist.h \ + /usr/share/qt3/include/qptrlist.h /usr/share/qt3/include/qglist.h \ + /usr/share/qt3/include/qptrcollection.h /usr/share/qt3/include/qmap.h \ + /usr/share/qt3/include/qpair.h /usr/include/c++/4.4/map \ + /usr/include/c++/4.4/bits/stl_tree.h /usr/include/c++/4.4/bits/stl_map.h \ + /usr/include/c++/4.4/bits/stl_multimap.h \ + /usr/share/qt3/include/qgroupbox.h /usr/share/qt3/include/qframe.h \ + /usr/share/qt3/include/qwidget.h /usr/share/qt3/include/qwindowdefs.h \ + /usr/share/qt3/include/qobjectdefs.h /usr/share/qt3/include/qnamespace.h \ + /usr/share/qt3/include/qobject.h /usr/share/qt3/include/qevent.h \ + /usr/share/qt3/include/qregion.h /usr/share/qt3/include/qrect.h \ + /usr/share/qt3/include/qsize.h /usr/share/qt3/include/qpoint.h \ + /usr/share/qt3/include/qmime.h /usr/share/qt3/include/qpaintdevice.h \ + /usr/share/qt3/include/qpalette.h /usr/share/qt3/include/qcolor.h \ + /usr/share/qt3/include/qbrush.h /usr/share/qt3/include/qfont.h \ + /usr/share/qt3/include/qfontmetrics.h /usr/share/qt3/include/qfontinfo.h \ + /usr/share/qt3/include/qsizepolicy.h /usr/share/qt3/include/qslider.h \ + /usr/share/qt3/include/qrangecontrol.h \ + /usr/share/qt3/include/qcombobox.h /usr/share/qt3/include/qcheckbox.h \ + /usr/share/qt3/include/qbutton.h /usr/share/qt3/include/qkeysequence.h \ + /usr/share/qt3/include/qlineedit.h /usr/share/qt3/include/qlcdnumber.h \ + /usr/share/qt3/include/qbitarray.h /usr/share/qt3/include/qlistview.h \ + /usr/share/qt3/include/qscrollview.h /usr/share/qt3/include/qscrollbar.h \ + /usr/share/qt3/include/qspinbox.h /usr/share/qt3/include/qlayout.h \ + /usr/share/qt3/include/qtooltip.h /usr/share/qt3/include/qwhatsthis.h \ + /usr/share/qt3/include/qcursor.h /usr/share/qt3/include/qstring.h \ + /usr/share/qt3/include/qfiledialog.h /usr/share/qt3/include/qdir.h \ + /usr/share/qt3/include/qfileinfo.h /usr/share/qt3/include/qfile.h \ + /usr/share/qt3/include/qdatetime.h /usr/share/qt3/include/qdialog.h \ + /usr/share/qt3/include/qurloperator.h /usr/share/qt3/include/qurl.h \ + /usr/share/qt3/include/qnetworkprotocol.h \ + /usr/share/qt3/include/qurlinfo.h /usr/share/qt3/include/qdict.h \ + /usr/share/qt3/include/qgdict.h /usr/share/qt3/include/qmessagebox.h \ + /usr/share/qt3/include/qpushbutton.h /usr/share/qt3/include/qiconset.h \ + /usr/share/qt3/include/qpixmap.h /usr/include/math.h \ + /usr/include/bits/huge_val.h /usr/include/bits/huge_valf.h \ + /usr/include/bits/huge_vall.h /usr/include/bits/inf.h \ + /usr/include/bits/nan.h /usr/include/bits/mathdef.h \ + /usr/include/bits/mathcalls.h /usr/include/bits/mathinline.h newpreset.h \ + /usr/share/qt3/include/qpixmap.h /usr/share/qt3/include/qdialog.h \ + deicsonzegui.h /usr/include/c++/4.4/vector \ + /usr/include/c++/4.4/bits/stl_construct.h \ + /usr/include/c++/4.4/bits/stl_uninitialized.h \ + /usr/include/c++/4.4/bits/stl_vector.h \ + /usr/include/c++/4.4/bits/stl_bvector.h \ + /usr/include/c++/4.4/bits/vector.tcc deicsonzeguibase.h \ + ../libsynti/gui.h ../libsynti/mpevent.h ../libsynti/evdata.h \ + /usr/include/memory.h deicsonze.h /usr/include/c++/4.4/iostream \ + ../libsynti/mess.h + +/usr/share/qt3/include/qvariant.h: + +/usr/share/qt3/include/qstring.h: + +/usr/share/qt3/include/qcstring.h: + +/usr/share/qt3/include/qmemarray.h: + +/usr/share/qt3/include/qgarray.h: + +/usr/share/qt3/include/qshared.h: + +/usr/share/qt3/include/qglobal.h: + +/usr/share/qt3/include/qconfig.h: + +/usr/share/qt3/include/qmodules.h: + +/usr/share/qt3/include/qfeatures.h: + +/usr/share/qt3/include/qwinexport.h: + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/bits/predefs.h: + +/usr/include/sys/cdefs.h: + +/usr/include/bits/wordsize.h: + +/usr/include/gnu/stubs.h: + +/usr/include/gnu/stubs-32.h: + +/usr/lib/gcc/i486-linux-gnu/4.4.3/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/bits/string3.h: + +/usr/lib/gcc/i486-linux-gnu/4.4.3/include-fixed/limits.h: + +/usr/lib/gcc/i486-linux-gnu/4.4.3/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/bits/posix1_lim.h: + +/usr/include/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/bits/posix2_lim.h: + +/usr/include/bits/xopen_lim.h: + +/usr/include/bits/stdio_lim.h: + +/usr/include/c++/4.4/string: + +/usr/include/c++/4.4/i486-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.4/i486-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.4/i486-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.4/bits/stringfwd.h: + +/usr/include/c++/4.4/bits/char_traits.h: + +/usr/include/c++/4.4/bits/stl_algobase.h: + +/usr/include/c++/4.4/cstddef: + +/usr/include/c++/4.4/bits/functexcept.h: + +/usr/include/c++/4.4/exception_defines.h: + +/usr/include/c++/4.4/bits/cpp_type_traits.h: + +/usr/include/c++/4.4/ext/type_traits.h: + +/usr/include/c++/4.4/ext/numeric_traits.h: + +/usr/include/c++/4.4/bits/stl_pair.h: + +/usr/include/c++/4.4/bits/move.h: + +/usr/include/c++/4.4/bits/concept_check.h: + +/usr/include/c++/4.4/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.4/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.4/bits/stl_iterator.h: + +/usr/include/c++/4.4/debug/debug.h: + +/usr/include/c++/4.4/bits/postypes.h: + +/usr/include/c++/4.4/cwchar: + +/usr/include/wchar.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/i486-linux-gnu/4.4.3/include/stdarg.h: + +/usr/include/bits/wchar.h: + +/usr/include/bits/wchar2.h: + +/usr/include/c++/4.4/bits/allocator.h: + +/usr/include/c++/4.4/i486-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.4/ext/new_allocator.h: + +/usr/include/c++/4.4/new: + +/usr/include/c++/4.4/exception: + +/usr/include/c++/4.4/bits/localefwd.h: + +/usr/include/c++/4.4/i486-linux-gnu/bits/c++locale.h: + +/usr/include/c++/4.4/clocale: + +/usr/include/locale.h: + +/usr/include/bits/locale.h: + +/usr/include/c++/4.4/iosfwd: + +/usr/include/c++/4.4/cctype: + +/usr/include/ctype.h: + +/usr/include/bits/types.h: + +/usr/include/bits/typesizes.h: + +/usr/include/endian.h: + +/usr/include/bits/endian.h: + +/usr/include/bits/byteswap.h: + +/usr/include/c++/4.4/bits/ostream_insert.h: + +/usr/include/c++/4.4/cxxabi-forced.h: + +/usr/include/c++/4.4/bits/stl_function.h: + +/usr/include/c++/4.4/backward/binders.h: + +/usr/include/c++/4.4/bits/basic_string.h: + +/usr/include/c++/4.4/ext/atomicity.h: + +/usr/include/c++/4.4/i486-linux-gnu/bits/gthr.h: + +/usr/include/c++/4.4/i486-linux-gnu/bits/gthr-default.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/time.h: + +/usr/include/bits/sched.h: + +/usr/include/bits/time.h: + +/usr/include/signal.h: + +/usr/include/bits/sigset.h: + +/usr/include/bits/pthreadtypes.h: + +/usr/include/bits/setjmp.h: + +/usr/include/unistd.h: + +/usr/include/bits/posix_opt.h: + +/usr/include/bits/environments.h: + +/usr/include/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/bits/unistd.h: + +/usr/include/c++/4.4/i486-linux-gnu/bits/atomic_word.h: + +/usr/include/c++/4.4/initializer_list: + +/usr/include/c++/4.4/bits/basic_string.tcc: + +/usr/share/qt3/include/qvaluelist.h: + +/usr/share/qt3/include/qtl.h: + +/usr/share/qt3/include/qtextstream.h: + +/usr/share/qt3/include/qiodevice.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/bits/sys_errlist.h: + +/usr/include/bits/stdio.h: + +/usr/include/bits/stdio2.h: + +/usr/share/qt3/include/qdatastream.h: + +/usr/include/c++/4.4/iterator: + +/usr/include/c++/4.4/ostream: + +/usr/include/c++/4.4/ios: + +/usr/include/c++/4.4/bits/ios_base.h: + +/usr/include/c++/4.4/bits/locale_classes.h: + +/usr/include/c++/4.4/bits/locale_classes.tcc: + +/usr/include/c++/4.4/streambuf: + +/usr/include/c++/4.4/bits/streambuf.tcc: + +/usr/include/c++/4.4/bits/basic_ios.h: + +/usr/include/c++/4.4/bits/locale_facets.h: + +/usr/include/c++/4.4/cwctype: + +/usr/include/wctype.h: + +/usr/include/c++/4.4/i486-linux-gnu/bits/ctype_base.h: + +/usr/include/c++/4.4/bits/streambuf_iterator.h: + +/usr/include/c++/4.4/i486-linux-gnu/bits/ctype_inline.h: + +/usr/include/c++/4.4/bits/locale_facets.tcc: + +/usr/include/c++/4.4/bits/basic_ios.tcc: + +/usr/include/c++/4.4/bits/ostream.tcc: + +/usr/include/c++/4.4/istream: + +/usr/include/c++/4.4/bits/istream.tcc: + +/usr/include/c++/4.4/bits/stream_iterator.h: + +/usr/include/c++/4.4/list: + +/usr/include/c++/4.4/bits/stl_list.h: + +/usr/include/c++/4.4/bits/list.tcc: + +/usr/share/qt3/include/qstringlist.h: + +/usr/share/qt3/include/qstrlist.h: + +/usr/share/qt3/include/qptrlist.h: + +/usr/share/qt3/include/qglist.h: + +/usr/share/qt3/include/qptrcollection.h: + +/usr/share/qt3/include/qmap.h: + +/usr/share/qt3/include/qpair.h: + +/usr/include/c++/4.4/map: + +/usr/include/c++/4.4/bits/stl_tree.h: + +/usr/include/c++/4.4/bits/stl_map.h: + +/usr/include/c++/4.4/bits/stl_multimap.h: + +/usr/share/qt3/include/qgroupbox.h: + +/usr/share/qt3/include/qframe.h: + +/usr/share/qt3/include/qwidget.h: + +/usr/share/qt3/include/qwindowdefs.h: + +/usr/share/qt3/include/qobjectdefs.h: + +/usr/share/qt3/include/qnamespace.h: + +/usr/share/qt3/include/qobject.h: + +/usr/share/qt3/include/qevent.h: + +/usr/share/qt3/include/qregion.h: + +/usr/share/qt3/include/qrect.h: + +/usr/share/qt3/include/qsize.h: + +/usr/share/qt3/include/qpoint.h: + +/usr/share/qt3/include/qmime.h: + +/usr/share/qt3/include/qpaintdevice.h: + +/usr/share/qt3/include/qpalette.h: + +/usr/share/qt3/include/qcolor.h: + +/usr/share/qt3/include/qbrush.h: + +/usr/share/qt3/include/qfont.h: + +/usr/share/qt3/include/qfontmetrics.h: + +/usr/share/qt3/include/qfontinfo.h: + +/usr/share/qt3/include/qsizepolicy.h: + +/usr/share/qt3/include/qslider.h: + +/usr/share/qt3/include/qrangecontrol.h: + +/usr/share/qt3/include/qcombobox.h: + +/usr/share/qt3/include/qcheckbox.h: + +/usr/share/qt3/include/qbutton.h: + +/usr/share/qt3/include/qkeysequence.h: + +/usr/share/qt3/include/qlineedit.h: + +/usr/share/qt3/include/qlcdnumber.h: + +/usr/share/qt3/include/qbitarray.h: + +/usr/share/qt3/include/qlistview.h: + +/usr/share/qt3/include/qscrollview.h: + +/usr/share/qt3/include/qscrollbar.h: + +/usr/share/qt3/include/qspinbox.h: + +/usr/share/qt3/include/qlayout.h: + +/usr/share/qt3/include/qtooltip.h: + +/usr/share/qt3/include/qwhatsthis.h: + +/usr/share/qt3/include/qcursor.h: + +/usr/share/qt3/include/qstring.h: + +/usr/share/qt3/include/qfiledialog.h: + +/usr/share/qt3/include/qdir.h: + +/usr/share/qt3/include/qfileinfo.h: + +/usr/share/qt3/include/qfile.h: + +/usr/share/qt3/include/qdatetime.h: + +/usr/share/qt3/include/qdialog.h: + +/usr/share/qt3/include/qurloperator.h: + +/usr/share/qt3/include/qurl.h: + +/usr/share/qt3/include/qnetworkprotocol.h: + +/usr/share/qt3/include/qurlinfo.h: + +/usr/share/qt3/include/qdict.h: + +/usr/share/qt3/include/qgdict.h: + +/usr/share/qt3/include/qmessagebox.h: + +/usr/share/qt3/include/qpushbutton.h: + +/usr/share/qt3/include/qiconset.h: + +/usr/share/qt3/include/qpixmap.h: + +/usr/include/math.h: + +/usr/include/bits/huge_val.h: + +/usr/include/bits/huge_valf.h: + +/usr/include/bits/huge_vall.h: + +/usr/include/bits/inf.h: + +/usr/include/bits/nan.h: + +/usr/include/bits/mathdef.h: + +/usr/include/bits/mathcalls.h: + +/usr/include/bits/mathinline.h: + +newpreset.h: + +/usr/share/qt3/include/qpixmap.h: + +/usr/share/qt3/include/qdialog.h: + +deicsonzegui.h: + +/usr/include/c++/4.4/vector: + +/usr/include/c++/4.4/bits/stl_construct.h: + +/usr/include/c++/4.4/bits/stl_uninitialized.h: + +/usr/include/c++/4.4/bits/stl_vector.h: + +/usr/include/c++/4.4/bits/stl_bvector.h: + +/usr/include/c++/4.4/bits/vector.tcc: + +deicsonzeguibase.h: + +../libsynti/gui.h: + +../libsynti/mpevent.h: + +../libsynti/evdata.h: + +/usr/include/memory.h: + +deicsonze.h: + +/usr/include/c++/4.4/iostream: + +../libsynti/mess.h: diff --git a/muse2/synti/deicsonze/.deps/deicsonzegui.Tpo b/muse2/synti/deicsonze/.deps/deicsonzegui.Tpo new file mode 100644 index 00000000..c30839bd --- /dev/null +++ b/muse2/synti/deicsonze/.deps/deicsonzegui.Tpo @@ -0,0 +1,894 @@ +deicsonzegui.lo: deicsonzegui.cpp \ + /usr/share/qt4/include/QtCore/qvariant.h \ + /usr/share/qt4/include/QtCore/qatomic.h \ + /usr/share/qt4/include/QtCore/qglobal.h \ + /usr/lib/gcc/i486-linux-gnu/4.4.3/include/stddef.h \ + /usr/share/qt4/include/QtCore/qconfig.h \ + /usr/share/qt4/include/QtCore/qfeatures.h \ + /usr/share/qt4/include/QtCore/qbasicatomic.h \ + /usr/share/qt4/include/QtCore/qatomic_arch.h \ + /usr/share/qt4/include/QtCore/qatomic_i386.h \ + /usr/share/qt4/include/QtCore/qbytearray.h \ + /usr/share/qt4/include/QtCore/qnamespace.h /usr/include/string.h \ + /usr/include/features.h /usr/include/bits/predefs.h \ + /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h \ + /usr/include/gnu/stubs.h /usr/include/gnu/stubs-32.h \ + /usr/include/xlocale.h /usr/include/bits/string3.h \ + /usr/lib/gcc/i486-linux-gnu/4.4.3/include/stdarg.h \ + /usr/share/qt4/include/QtCore/qlist.h \ + /usr/share/qt4/include/QtCore/qiterator.h \ + /usr/share/qt4/include/QtCore/qalgorithms.h \ + /usr/include/c++/4.4/iterator \ + /usr/include/c++/4.4/i486-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.4/i486-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.4/i486-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.4/cstddef \ + /usr/include/c++/4.4/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.4/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.4/bits/concept_check.h \ + /usr/include/c++/4.4/bits/stl_iterator.h \ + /usr/include/c++/4.4/bits/cpp_type_traits.h \ + /usr/include/c++/4.4/ext/type_traits.h /usr/include/c++/4.4/bits/move.h \ + /usr/include/c++/4.4/ostream /usr/include/c++/4.4/ios \ + /usr/include/c++/4.4/iosfwd /usr/include/c++/4.4/bits/stringfwd.h \ + /usr/include/c++/4.4/bits/postypes.h /usr/include/c++/4.4/cwchar \ + /usr/include/wchar.h /usr/include/stdio.h /usr/include/bits/wchar.h \ + /usr/include/bits/wchar2.h /usr/include/c++/4.4/exception \ + /usr/include/c++/4.4/bits/char_traits.h \ + /usr/include/c++/4.4/bits/stl_algobase.h \ + /usr/include/c++/4.4/bits/functexcept.h \ + /usr/include/c++/4.4/exception_defines.h \ + /usr/include/c++/4.4/ext/numeric_traits.h \ + /usr/include/c++/4.4/bits/stl_pair.h /usr/include/c++/4.4/debug/debug.h \ + /usr/include/c++/4.4/bits/localefwd.h \ + /usr/include/c++/4.4/i486-linux-gnu/bits/c++locale.h \ + /usr/include/c++/4.4/clocale /usr/include/locale.h \ + /usr/include/bits/locale.h /usr/include/c++/4.4/cctype \ + /usr/include/ctype.h /usr/include/bits/types.h \ + /usr/include/bits/typesizes.h /usr/include/endian.h \ + /usr/include/bits/endian.h /usr/include/bits/byteswap.h \ + /usr/include/c++/4.4/bits/ios_base.h \ + /usr/include/c++/4.4/ext/atomicity.h \ + /usr/include/c++/4.4/i486-linux-gnu/bits/gthr.h \ + /usr/include/c++/4.4/i486-linux-gnu/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h /usr/include/time.h \ + /usr/include/bits/sched.h /usr/include/bits/time.h /usr/include/signal.h \ + /usr/include/bits/sigset.h /usr/include/bits/pthreadtypes.h \ + /usr/include/bits/setjmp.h /usr/include/unistd.h \ + /usr/include/bits/posix_opt.h /usr/include/bits/environments.h \ + /usr/include/bits/confname.h /usr/include/getopt.h \ + /usr/include/bits/unistd.h \ + /usr/include/c++/4.4/i486-linux-gnu/bits/atomic_word.h \ + /usr/include/c++/4.4/bits/locale_classes.h /usr/include/c++/4.4/string \ + /usr/include/c++/4.4/bits/allocator.h \ + /usr/include/c++/4.4/i486-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.4/ext/new_allocator.h /usr/include/c++/4.4/new \ + /usr/include/c++/4.4/bits/ostream_insert.h \ + /usr/include/c++/4.4/cxxabi-forced.h \ + /usr/include/c++/4.4/bits/stl_function.h \ + /usr/include/c++/4.4/backward/binders.h \ + /usr/include/c++/4.4/bits/basic_string.h \ + /usr/include/c++/4.4/initializer_list \ + /usr/include/c++/4.4/bits/basic_string.tcc \ + /usr/include/c++/4.4/bits/locale_classes.tcc \ + /usr/include/c++/4.4/streambuf /usr/include/c++/4.4/bits/streambuf.tcc \ + /usr/include/c++/4.4/bits/basic_ios.h \ + /usr/include/c++/4.4/bits/locale_facets.h /usr/include/c++/4.4/cwctype \ + /usr/include/wctype.h \ + /usr/include/c++/4.4/i486-linux-gnu/bits/ctype_base.h \ + /usr/include/c++/4.4/bits/streambuf_iterator.h \ + /usr/include/c++/4.4/i486-linux-gnu/bits/ctype_inline.h \ + /usr/include/c++/4.4/bits/locale_facets.tcc \ + /usr/include/c++/4.4/bits/basic_ios.tcc \ + /usr/include/c++/4.4/bits/ostream.tcc /usr/include/c++/4.4/istream \ + /usr/include/c++/4.4/bits/istream.tcc \ + /usr/include/c++/4.4/bits/stream_iterator.h /usr/include/c++/4.4/list \ + /usr/include/c++/4.4/bits/stl_list.h /usr/include/c++/4.4/bits/list.tcc \ + /usr/share/qt4/include/QtCore/qmetatype.h \ + /usr/share/qt4/include/QtCore/qdatastream.h \ + /usr/share/qt4/include/QtCore/qscopedpointer.h \ + /usr/share/qt4/include/QtCore/qiodevice.h \ + /usr/share/qt4/include/QtCore/qobject.h \ + /usr/share/qt4/include/QtCore/qobjectdefs.h \ + /usr/share/qt4/include/QtCore/qstring.h \ + /usr/share/qt4/include/QtCore/qchar.h \ + /usr/share/qt4/include/QtCore/qmap.h /usr/include/c++/4.4/map \ + /usr/include/c++/4.4/bits/stl_tree.h /usr/include/c++/4.4/bits/stl_map.h \ + /usr/include/c++/4.4/bits/stl_multimap.h \ + /usr/share/qt4/include/QtCore/qhash.h \ + /usr/share/qt4/include/QtCore/qpair.h \ + /usr/share/qt4/include/Qt3Support/q3groupbox.h \ + /usr/share/qt4/include/QtGui/qgroupbox.h \ + /usr/share/qt4/include/QtGui/qframe.h \ + /usr/share/qt4/include/QtGui/qwidget.h \ + /usr/share/qt4/include/QtGui/qwindowdefs.h \ + /usr/share/qt4/include/QtCore/qmargins.h \ + /usr/share/qt4/include/QtGui/qpaintdevice.h \ + /usr/share/qt4/include/QtCore/qrect.h \ + /usr/share/qt4/include/QtCore/qsize.h \ + /usr/share/qt4/include/QtCore/qpoint.h \ + /usr/share/qt4/include/QtGui/qpalette.h \ + /usr/share/qt4/include/QtGui/qcolor.h \ + /usr/share/qt4/include/QtGui/qrgb.h \ + /usr/share/qt4/include/QtCore/qstringlist.h \ + /usr/share/qt4/include/QtCore/qregexp.h \ + /usr/share/qt4/include/QtCore/qstringmatcher.h \ + /usr/share/qt4/include/QtGui/qbrush.h \ + /usr/share/qt4/include/QtCore/qvector.h /usr/include/c++/4.4/vector \ + /usr/include/c++/4.4/bits/stl_construct.h \ + /usr/include/c++/4.4/bits/stl_uninitialized.h \ + /usr/include/c++/4.4/bits/stl_vector.h \ + /usr/include/c++/4.4/bits/stl_bvector.h \ + /usr/include/c++/4.4/bits/vector.tcc /usr/include/stdlib.h \ + /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ + /usr/include/sys/types.h /usr/include/sys/select.h \ + /usr/include/bits/select.h /usr/include/sys/sysmacros.h \ + /usr/include/alloca.h /usr/include/bits/stdlib.h \ + /usr/share/qt4/include/QtGui/qmatrix.h \ + /usr/share/qt4/include/QtGui/qpolygon.h \ + /usr/share/qt4/include/QtGui/qregion.h \ + /usr/share/qt4/include/QtCore/qline.h \ + /usr/share/qt4/include/QtGui/qwmatrix.h \ + /usr/share/qt4/include/QtGui/qtransform.h \ + /usr/share/qt4/include/QtGui/qpainterpath.h \ + /usr/share/qt4/include/QtGui/qimage.h \ + /usr/share/qt4/include/QtGui/qpixmap.h \ + /usr/share/qt4/include/QtCore/qsharedpointer.h \ + /usr/share/qt4/include/QtCore/qshareddata.h \ + /usr/share/qt4/include/QtCore/qsharedpointer_impl.h \ + /usr/share/qt4/include/QtGui/qfont.h \ + /usr/share/qt4/include/QtGui/qfontmetrics.h \ + /usr/share/qt4/include/QtGui/qfontinfo.h \ + /usr/share/qt4/include/QtGui/qsizepolicy.h \ + /usr/share/qt4/include/QtGui/qcursor.h \ + /usr/share/qt4/include/QtGui/qkeysequence.h \ + /usr/share/qt4/include/QtGui/qslider.h \ + /usr/share/qt4/include/QtGui/qabstractslider.h \ + /usr/share/qt4/include/QtGui/qcombobox.h \ + /usr/share/qt4/include/QtGui/qabstractitemdelegate.h \ + /usr/share/qt4/include/QtGui/qstyleoption.h \ + /usr/share/qt4/include/QtCore/qvariant.h \ + /usr/share/qt4/include/QtGui/qabstractspinbox.h \ + /usr/share/qt4/include/QtGui/qvalidator.h \ + /usr/share/qt4/include/QtCore/qlocale.h \ + /usr/share/qt4/include/QtGui/qicon.h \ + /usr/share/qt4/include/QtGui/qslider.h \ + /usr/share/qt4/include/QtGui/qstyle.h \ + /usr/share/qt4/include/QtGui/qtabbar.h \ + /usr/share/qt4/include/QtGui/qtabwidget.h \ + /usr/share/qt4/include/QtGui/qrubberband.h \ + /usr/share/qt4/include/QtCore/qabstractitemmodel.h \ + /usr/share/qt4/include/QtGui/qcheckbox.h \ + /usr/share/qt4/include/QtGui/qabstractbutton.h \ + /usr/share/qt4/include/QtGui/qlineedit.h \ + /usr/share/qt4/include/QtGui/qlcdnumber.h \ + /usr/share/qt4/include/QtCore/qbitarray.h \ + /usr/share/qt4/include/Qt3Support/q3listview.h \ + /usr/share/qt4/include/Qt3Support/q3scrollview.h \ + /usr/share/qt4/include/Qt3Support/q3frame.h \ + /usr/share/qt4/include/QtGui/qscrollbar.h \ + /usr/share/qt4/include/QtGui/qspinbox.h \ + /usr/share/qt4/include/QtGui/qlayout.h \ + /usr/share/qt4/include/QtGui/qlayoutitem.h \ + /usr/lib/gcc/i486-linux-gnu/4.4.3/include-fixed/limits.h \ + /usr/lib/gcc/i486-linux-gnu/4.4.3/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + /usr/include/bits/stdio_lim.h /usr/share/qt4/include/QtGui/qboxlayout.h \ + /usr/share/qt4/include/QtGui/qlayout.h \ + /usr/share/qt4/include/QtGui/qgridlayout.h \ + /usr/share/qt4/include/QtGui/qtooltip.h \ + /usr/share/qt4/include/Qt3Support/q3whatsthis.h \ + /usr/share/qt4/include/QtGui/qwhatsthis.h \ + /usr/share/qt4/include/QtCore/qstring.h \ + /usr/share/qt4/include/Qt3Support/q3filedialog.h \ + /usr/share/qt4/include/QtCore/qdir.h \ + /usr/share/qt4/include/QtCore/qfileinfo.h \ + /usr/share/qt4/include/QtCore/qfile.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/bits/sys_errlist.h \ + /usr/include/bits/stdio.h /usr/include/bits/stdio2.h \ + /usr/share/qt4/include/QtGui/qdialog.h \ + /usr/share/qt4/include/Qt3Support/q3urloperator.h \ + /usr/share/qt4/include/Qt3Support/q3url.h \ + /usr/share/qt4/include/Qt3Support/q3ptrlist.h \ + /usr/share/qt4/include/Qt3Support/q3glist.h \ + /usr/share/qt4/include/Qt3Support/q3ptrcollection.h \ + /usr/share/qt4/include/Qt3Support/q3networkprotocol.h \ + /usr/share/qt4/include/Qt3Support/q3dict.h \ + /usr/share/qt4/include/Qt3Support/q3gdict.h \ + /usr/share/qt4/include/Qt3Support/q3valuelist.h \ + /usr/share/qt4/include/QtCore/qlinkedlist.h \ + /usr/share/qt4/include/QtGui/qmessagebox.h \ + /usr/share/qt4/include/QtGui/qpushbutton.h /usr/include/math.h \ + /usr/include/bits/huge_val.h /usr/include/bits/huge_valf.h \ + /usr/include/bits/huge_vall.h /usr/include/bits/inf.h \ + /usr/include/bits/nan.h /usr/include/bits/mathdef.h \ + /usr/include/bits/mathcalls.h /usr/include/bits/mathinline.h newpreset.h \ + /usr/share/qt4/include/Qt3Support/Q3ButtonGroup \ + /usr/share/qt4/include/Qt3Support/q3buttongroup.h \ + /usr/share/qt4/include/QtGui/qbuttongroup.h \ + /usr/share/qt4/include/Qt3Support/q3groupbox.h \ + /usr/share/qt4/include/Qt3Support/Q3GroupBox \ + /usr/share/qt4/include/Qt3Support/q3groupbox.h \ + /usr/share/qt4/include/QtCore/QVariant \ + /usr/share/qt4/include/QtCore/qvariant.h \ + /usr/share/qt4/include/QtGui/QAction \ + /usr/share/qt4/include/QtGui/qaction.h \ + /usr/share/qt4/include/QtGui/qactiongroup.h \ + /usr/share/qt4/include/QtGui/qaction.h \ + /usr/share/qt4/include/QtGui/QApplication \ + /usr/share/qt4/include/QtGui/qapplication.h \ + /usr/share/qt4/include/QtCore/qcoreapplication.h \ + /usr/share/qt4/include/QtCore/qcoreevent.h \ + /usr/share/qt4/include/QtCore/qeventloop.h \ + /usr/share/qt4/include/QtGui/QButtonGroup \ + /usr/share/qt4/include/QtGui/qbuttongroup.h \ + /usr/share/qt4/include/QtGui/QDialog \ + /usr/share/qt4/include/QtGui/qdialog.h \ + /usr/share/qt4/include/QtGui/QHeaderView \ + /usr/share/qt4/include/QtGui/qheaderview.h \ + /usr/share/qt4/include/QtGui/qabstractitemview.h \ + /usr/share/qt4/include/QtGui/qabstractscrollarea.h \ + /usr/share/qt4/include/QtGui/qitemselectionmodel.h \ + /usr/share/qt4/include/QtCore/qset.h \ + /usr/share/qt4/include/QtGui/QLineEdit \ + /usr/share/qt4/include/QtGui/qlineedit.h \ + /usr/share/qt4/include/QtGui/QPushButton \ + /usr/share/qt4/include/QtGui/qpushbutton.h \ + /usr/share/qt4/include/QtGui/QSpinBox \ + /usr/share/qt4/include/QtGui/qspinbox.h deicsonzegui.h \ + deicsonzeguibase.h /usr/share/qt4/include/Qt3Support/Q3Header \ + /usr/share/qt4/include/Qt3Support/q3header.h \ + /usr/share/qt4/include/Qt3Support/Q3ListView \ + /usr/share/qt4/include/Qt3Support/q3listview.h \ + /usr/share/qt4/include/QtGui/QCheckBox \ + /usr/share/qt4/include/QtGui/qcheckbox.h \ + /usr/share/qt4/include/QtGui/QComboBox \ + /usr/share/qt4/include/QtGui/qcombobox.h \ + /usr/share/qt4/include/QtGui/QLabel \ + /usr/share/qt4/include/QtGui/qlabel.h \ + /usr/share/qt4/include/QtGui/QSlider \ + /usr/share/qt4/include/QtGui/qslider.h \ + /usr/share/qt4/include/QtGui/QTabWidget \ + /usr/share/qt4/include/QtGui/qtabwidget.h \ + /usr/share/qt4/include/QtGui/QWidget \ + /usr/share/qt4/include/QtGui/qwidget.h ../libsynti/gui.h \ + ../libsynti/mpevent.h ../libsynti/evdata.h /usr/include/memory.h \ + deicsonze.h /usr/include/c++/4.4/iostream ../libsynti/mess.h + +/usr/share/qt4/include/QtCore/qvariant.h: + +/usr/share/qt4/include/QtCore/qatomic.h: + +/usr/share/qt4/include/QtCore/qglobal.h: + +/usr/lib/gcc/i486-linux-gnu/4.4.3/include/stddef.h: + +/usr/share/qt4/include/QtCore/qconfig.h: + +/usr/share/qt4/include/QtCore/qfeatures.h: + +/usr/share/qt4/include/QtCore/qbasicatomic.h: + +/usr/share/qt4/include/QtCore/qatomic_arch.h: + +/usr/share/qt4/include/QtCore/qatomic_i386.h: + +/usr/share/qt4/include/QtCore/qbytearray.h: + +/usr/share/qt4/include/QtCore/qnamespace.h: + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/bits/predefs.h: + +/usr/include/sys/cdefs.h: + +/usr/include/bits/wordsize.h: + +/usr/include/gnu/stubs.h: + +/usr/include/gnu/stubs-32.h: + +/usr/include/xlocale.h: + +/usr/include/bits/string3.h: + +/usr/lib/gcc/i486-linux-gnu/4.4.3/include/stdarg.h: + +/usr/share/qt4/include/QtCore/qlist.h: + +/usr/share/qt4/include/QtCore/qiterator.h: + +/usr/share/qt4/include/QtCore/qalgorithms.h: + +/usr/include/c++/4.4/iterator: + +/usr/include/c++/4.4/i486-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.4/i486-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.4/i486-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.4/cstddef: + +/usr/include/c++/4.4/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.4/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.4/bits/concept_check.h: + +/usr/include/c++/4.4/bits/stl_iterator.h: + +/usr/include/c++/4.4/bits/cpp_type_traits.h: + +/usr/include/c++/4.4/ext/type_traits.h: + +/usr/include/c++/4.4/bits/move.h: + +/usr/include/c++/4.4/ostream: + +/usr/include/c++/4.4/ios: + +/usr/include/c++/4.4/iosfwd: + +/usr/include/c++/4.4/bits/stringfwd.h: + +/usr/include/c++/4.4/bits/postypes.h: + +/usr/include/c++/4.4/cwchar: + +/usr/include/wchar.h: + +/usr/include/stdio.h: + +/usr/include/bits/wchar.h: + +/usr/include/bits/wchar2.h: + +/usr/include/c++/4.4/exception: + +/usr/include/c++/4.4/bits/char_traits.h: + +/usr/include/c++/4.4/bits/stl_algobase.h: + +/usr/include/c++/4.4/bits/functexcept.h: + +/usr/include/c++/4.4/exception_defines.h: + +/usr/include/c++/4.4/ext/numeric_traits.h: + +/usr/include/c++/4.4/bits/stl_pair.h: + +/usr/include/c++/4.4/debug/debug.h: + +/usr/include/c++/4.4/bits/localefwd.h: + +/usr/include/c++/4.4/i486-linux-gnu/bits/c++locale.h: + +/usr/include/c++/4.4/clocale: + +/usr/include/locale.h: + +/usr/include/bits/locale.h: + +/usr/include/c++/4.4/cctype: + +/usr/include/ctype.h: + +/usr/include/bits/types.h: + +/usr/include/bits/typesizes.h: + +/usr/include/endian.h: + +/usr/include/bits/endian.h: + +/usr/include/bits/byteswap.h: + +/usr/include/c++/4.4/bits/ios_base.h: + +/usr/include/c++/4.4/ext/atomicity.h: + +/usr/include/c++/4.4/i486-linux-gnu/bits/gthr.h: + +/usr/include/c++/4.4/i486-linux-gnu/bits/gthr-default.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/time.h: + +/usr/include/bits/sched.h: + +/usr/include/bits/time.h: + +/usr/include/signal.h: + +/usr/include/bits/sigset.h: + +/usr/include/bits/pthreadtypes.h: + +/usr/include/bits/setjmp.h: + +/usr/include/unistd.h: + +/usr/include/bits/posix_opt.h: + +/usr/include/bits/environments.h: + +/usr/include/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/bits/unistd.h: + +/usr/include/c++/4.4/i486-linux-gnu/bits/atomic_word.h: + +/usr/include/c++/4.4/bits/locale_classes.h: + +/usr/include/c++/4.4/string: + +/usr/include/c++/4.4/bits/allocator.h: + +/usr/include/c++/4.4/i486-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.4/ext/new_allocator.h: + +/usr/include/c++/4.4/new: + +/usr/include/c++/4.4/bits/ostream_insert.h: + +/usr/include/c++/4.4/cxxabi-forced.h: + +/usr/include/c++/4.4/bits/stl_function.h: + +/usr/include/c++/4.4/backward/binders.h: + +/usr/include/c++/4.4/bits/basic_string.h: + +/usr/include/c++/4.4/initializer_list: + +/usr/include/c++/4.4/bits/basic_string.tcc: + +/usr/include/c++/4.4/bits/locale_classes.tcc: + +/usr/include/c++/4.4/streambuf: + +/usr/include/c++/4.4/bits/streambuf.tcc: + +/usr/include/c++/4.4/bits/basic_ios.h: + +/usr/include/c++/4.4/bits/locale_facets.h: + +/usr/include/c++/4.4/cwctype: + +/usr/include/wctype.h: + +/usr/include/c++/4.4/i486-linux-gnu/bits/ctype_base.h: + +/usr/include/c++/4.4/bits/streambuf_iterator.h: + +/usr/include/c++/4.4/i486-linux-gnu/bits/ctype_inline.h: + +/usr/include/c++/4.4/bits/locale_facets.tcc: + +/usr/include/c++/4.4/bits/basic_ios.tcc: + +/usr/include/c++/4.4/bits/ostream.tcc: + +/usr/include/c++/4.4/istream: + +/usr/include/c++/4.4/bits/istream.tcc: + +/usr/include/c++/4.4/bits/stream_iterator.h: + +/usr/include/c++/4.4/list: + +/usr/include/c++/4.4/bits/stl_list.h: + +/usr/include/c++/4.4/bits/list.tcc: + +/usr/share/qt4/include/QtCore/qmetatype.h: + +/usr/share/qt4/include/QtCore/qdatastream.h: + +/usr/share/qt4/include/QtCore/qscopedpointer.h: + +/usr/share/qt4/include/QtCore/qiodevice.h: + +/usr/share/qt4/include/QtCore/qobject.h: + +/usr/share/qt4/include/QtCore/qobjectdefs.h: + +/usr/share/qt4/include/QtCore/qstring.h: + +/usr/share/qt4/include/QtCore/qchar.h: + +/usr/share/qt4/include/QtCore/qmap.h: + +/usr/include/c++/4.4/map: + +/usr/include/c++/4.4/bits/stl_tree.h: + +/usr/include/c++/4.4/bits/stl_map.h: + +/usr/include/c++/4.4/bits/stl_multimap.h: + +/usr/share/qt4/include/QtCore/qhash.h: + +/usr/share/qt4/include/QtCore/qpair.h: + +/usr/share/qt4/include/Qt3Support/q3groupbox.h: + +/usr/share/qt4/include/QtGui/qgroupbox.h: + +/usr/share/qt4/include/QtGui/qframe.h: + +/usr/share/qt4/include/QtGui/qwidget.h: + +/usr/share/qt4/include/QtGui/qwindowdefs.h: + +/usr/share/qt4/include/QtCore/qmargins.h: + +/usr/share/qt4/include/QtGui/qpaintdevice.h: + +/usr/share/qt4/include/QtCore/qrect.h: + +/usr/share/qt4/include/QtCore/qsize.h: + +/usr/share/qt4/include/QtCore/qpoint.h: + +/usr/share/qt4/include/QtGui/qpalette.h: + +/usr/share/qt4/include/QtGui/qcolor.h: + +/usr/share/qt4/include/QtGui/qrgb.h: + +/usr/share/qt4/include/QtCore/qstringlist.h: + +/usr/share/qt4/include/QtCore/qregexp.h: + +/usr/share/qt4/include/QtCore/qstringmatcher.h: + +/usr/share/qt4/include/QtGui/qbrush.h: + +/usr/share/qt4/include/QtCore/qvector.h: + +/usr/include/c++/4.4/vector: + +/usr/include/c++/4.4/bits/stl_construct.h: + +/usr/include/c++/4.4/bits/stl_uninitialized.h: + +/usr/include/c++/4.4/bits/stl_vector.h: + +/usr/include/c++/4.4/bits/stl_bvector.h: + +/usr/include/c++/4.4/bits/vector.tcc: + +/usr/include/stdlib.h: + +/usr/include/bits/waitflags.h: + +/usr/include/bits/waitstatus.h: + +/usr/include/sys/types.h: + +/usr/include/sys/select.h: + +/usr/include/bits/select.h: + +/usr/include/sys/sysmacros.h: + +/usr/include/alloca.h: + +/usr/include/bits/stdlib.h: + +/usr/share/qt4/include/QtGui/qmatrix.h: + +/usr/share/qt4/include/QtGui/qpolygon.h: + +/usr/share/qt4/include/QtGui/qregion.h: + +/usr/share/qt4/include/QtCore/qline.h: + +/usr/share/qt4/include/QtGui/qwmatrix.h: + +/usr/share/qt4/include/QtGui/qtransform.h: + +/usr/share/qt4/include/QtGui/qpainterpath.h: + +/usr/share/qt4/include/QtGui/qimage.h: + +/usr/share/qt4/include/QtGui/qpixmap.h: + +/usr/share/qt4/include/QtCore/qsharedpointer.h: + +/usr/share/qt4/include/QtCore/qshareddata.h: + +/usr/share/qt4/include/QtCore/qsharedpointer_impl.h: + +/usr/share/qt4/include/QtGui/qfont.h: + +/usr/share/qt4/include/QtGui/qfontmetrics.h: + +/usr/share/qt4/include/QtGui/qfontinfo.h: + +/usr/share/qt4/include/QtGui/qsizepolicy.h: + +/usr/share/qt4/include/QtGui/qcursor.h: + +/usr/share/qt4/include/QtGui/qkeysequence.h: + +/usr/share/qt4/include/QtGui/qslider.h: + +/usr/share/qt4/include/QtGui/qabstractslider.h: + +/usr/share/qt4/include/QtGui/qcombobox.h: + +/usr/share/qt4/include/QtGui/qabstractitemdelegate.h: + +/usr/share/qt4/include/QtGui/qstyleoption.h: + +/usr/share/qt4/include/QtCore/qvariant.h: + +/usr/share/qt4/include/QtGui/qabstractspinbox.h: + +/usr/share/qt4/include/QtGui/qvalidator.h: + +/usr/share/qt4/include/QtCore/qlocale.h: + +/usr/share/qt4/include/QtGui/qicon.h: + +/usr/share/qt4/include/QtGui/qslider.h: + +/usr/share/qt4/include/QtGui/qstyle.h: + +/usr/share/qt4/include/QtGui/qtabbar.h: + +/usr/share/qt4/include/QtGui/qtabwidget.h: + +/usr/share/qt4/include/QtGui/qrubberband.h: + +/usr/share/qt4/include/QtCore/qabstractitemmodel.h: + +/usr/share/qt4/include/QtGui/qcheckbox.h: + +/usr/share/qt4/include/QtGui/qabstractbutton.h: + +/usr/share/qt4/include/QtGui/qlineedit.h: + +/usr/share/qt4/include/QtGui/qlcdnumber.h: + +/usr/share/qt4/include/QtCore/qbitarray.h: + +/usr/share/qt4/include/Qt3Support/q3listview.h: + +/usr/share/qt4/include/Qt3Support/q3scrollview.h: + +/usr/share/qt4/include/Qt3Support/q3frame.h: + +/usr/share/qt4/include/QtGui/qscrollbar.h: + +/usr/share/qt4/include/QtGui/qspinbox.h: + +/usr/share/qt4/include/QtGui/qlayout.h: + +/usr/share/qt4/include/QtGui/qlayoutitem.h: + +/usr/lib/gcc/i486-linux-gnu/4.4.3/include-fixed/limits.h: + +/usr/lib/gcc/i486-linux-gnu/4.4.3/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/bits/posix1_lim.h: + +/usr/include/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/bits/posix2_lim.h: + +/usr/include/bits/xopen_lim.h: + +/usr/include/bits/stdio_lim.h: + +/usr/share/qt4/include/QtGui/qboxlayout.h: + +/usr/share/qt4/include/QtGui/qlayout.h: + +/usr/share/qt4/include/QtGui/qgridlayout.h: + +/usr/share/qt4/include/QtGui/qtooltip.h: + +/usr/share/qt4/include/Qt3Support/q3whatsthis.h: + +/usr/share/qt4/include/QtGui/qwhatsthis.h: + +/usr/share/qt4/include/QtCore/qstring.h: + +/usr/share/qt4/include/Qt3Support/q3filedialog.h: + +/usr/share/qt4/include/QtCore/qdir.h: + +/usr/share/qt4/include/QtCore/qfileinfo.h: + +/usr/share/qt4/include/QtCore/qfile.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/bits/sys_errlist.h: + +/usr/include/bits/stdio.h: + +/usr/include/bits/stdio2.h: + +/usr/share/qt4/include/QtGui/qdialog.h: + +/usr/share/qt4/include/Qt3Support/q3urloperator.h: + +/usr/share/qt4/include/Qt3Support/q3url.h: + +/usr/share/qt4/include/Qt3Support/q3ptrlist.h: + +/usr/share/qt4/include/Qt3Support/q3glist.h: + +/usr/share/qt4/include/Qt3Support/q3ptrcollection.h: + +/usr/share/qt4/include/Qt3Support/q3networkprotocol.h: + +/usr/share/qt4/include/Qt3Support/q3dict.h: + +/usr/share/qt4/include/Qt3Support/q3gdict.h: + +/usr/share/qt4/include/Qt3Support/q3valuelist.h: + +/usr/share/qt4/include/QtCore/qlinkedlist.h: + +/usr/share/qt4/include/QtGui/qmessagebox.h: + +/usr/share/qt4/include/QtGui/qpushbutton.h: + +/usr/include/math.h: + +/usr/include/bits/huge_val.h: + +/usr/include/bits/huge_valf.h: + +/usr/include/bits/huge_vall.h: + +/usr/include/bits/inf.h: + +/usr/include/bits/nan.h: + +/usr/include/bits/mathdef.h: + +/usr/include/bits/mathcalls.h: + +/usr/include/bits/mathinline.h: + +newpreset.h: + +/usr/share/qt4/include/Qt3Support/Q3ButtonGroup: + +/usr/share/qt4/include/Qt3Support/q3buttongroup.h: + +/usr/share/qt4/include/QtGui/qbuttongroup.h: + +/usr/share/qt4/include/Qt3Support/q3groupbox.h: + +/usr/share/qt4/include/Qt3Support/Q3GroupBox: + +/usr/share/qt4/include/Qt3Support/q3groupbox.h: + +/usr/share/qt4/include/QtCore/QVariant: + +/usr/share/qt4/include/QtCore/qvariant.h: + +/usr/share/qt4/include/QtGui/QAction: + +/usr/share/qt4/include/QtGui/qaction.h: + +/usr/share/qt4/include/QtGui/qactiongroup.h: + +/usr/share/qt4/include/QtGui/qaction.h: + +/usr/share/qt4/include/QtGui/QApplication: + +/usr/share/qt4/include/QtGui/qapplication.h: + +/usr/share/qt4/include/QtCore/qcoreapplication.h: + +/usr/share/qt4/include/QtCore/qcoreevent.h: + +/usr/share/qt4/include/QtCore/qeventloop.h: + +/usr/share/qt4/include/QtGui/QButtonGroup: + +/usr/share/qt4/include/QtGui/qbuttongroup.h: + +/usr/share/qt4/include/QtGui/QDialog: + +/usr/share/qt4/include/QtGui/qdialog.h: + +/usr/share/qt4/include/QtGui/QHeaderView: + +/usr/share/qt4/include/QtGui/qheaderview.h: + +/usr/share/qt4/include/QtGui/qabstractitemview.h: + +/usr/share/qt4/include/QtGui/qabstractscrollarea.h: + +/usr/share/qt4/include/QtGui/qitemselectionmodel.h: + +/usr/share/qt4/include/QtCore/qset.h: + +/usr/share/qt4/include/QtGui/QLineEdit: + +/usr/share/qt4/include/QtGui/qlineedit.h: + +/usr/share/qt4/include/QtGui/QPushButton: + +/usr/share/qt4/include/QtGui/qpushbutton.h: + +/usr/share/qt4/include/QtGui/QSpinBox: + +/usr/share/qt4/include/QtGui/qspinbox.h: + +deicsonzegui.h: + +deicsonzeguibase.h: + +/usr/share/qt4/include/Qt3Support/Q3Header: + +/usr/share/qt4/include/Qt3Support/q3header.h: + +/usr/share/qt4/include/Qt3Support/Q3ListView: + +/usr/share/qt4/include/Qt3Support/q3listview.h: + +/usr/share/qt4/include/QtGui/QCheckBox: + +/usr/share/qt4/include/QtGui/qcheckbox.h: + +/usr/share/qt4/include/QtGui/QComboBox: + +/usr/share/qt4/include/QtGui/qcombobox.h: + +/usr/share/qt4/include/QtGui/QLabel: + +/usr/share/qt4/include/QtGui/qlabel.h: + +/usr/share/qt4/include/QtGui/QSlider: + +/usr/share/qt4/include/QtGui/qslider.h: + +/usr/share/qt4/include/QtGui/QTabWidget: + +/usr/share/qt4/include/QtGui/qtabwidget.h: + +/usr/share/qt4/include/QtGui/QWidget: + +/usr/share/qt4/include/QtGui/qwidget.h: + +../libsynti/gui.h: + +../libsynti/mpevent.h: + +../libsynti/evdata.h: + +/usr/include/memory.h: + +deicsonze.h: + +/usr/include/c++/4.4/iostream: + +../libsynti/mess.h: diff --git a/muse2/synti/deicsonze/.deps/moc_deicsonzegui.Plo b/muse2/synti/deicsonze/.deps/moc_deicsonzegui.Plo new file mode 100644 index 00000000..4d7c28b5 --- /dev/null +++ b/muse2/synti/deicsonze/.deps/moc_deicsonzegui.Plo @@ -0,0 +1,514 @@ +moc_deicsonzegui.lo: moc_deicsonzegui.cpp deicsonzegui.h \ + /usr/share/qt3/include/qlistview.h /usr/share/qt3/include/qscrollview.h \ + /usr/share/qt3/include/qframe.h /usr/share/qt3/include/qwidget.h \ + /usr/share/qt3/include/qwindowdefs.h \ + /usr/share/qt3/include/qobjectdefs.h /usr/share/qt3/include/qglobal.h \ + /usr/share/qt3/include/qconfig.h /usr/share/qt3/include/qmodules.h \ + /usr/share/qt3/include/qfeatures.h /usr/share/qt3/include/qstring.h \ + /usr/share/qt3/include/qcstring.h /usr/share/qt3/include/qmemarray.h \ + /usr/share/qt3/include/qgarray.h /usr/share/qt3/include/qshared.h \ + /usr/share/qt3/include/qwinexport.h /usr/include/string.h \ + /usr/include/features.h /usr/include/bits/predefs.h \ + /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h \ + /usr/include/gnu/stubs.h /usr/include/gnu/stubs-32.h \ + /usr/lib/gcc/i486-linux-gnu/4.4.3/include/stddef.h \ + /usr/include/xlocale.h /usr/include/bits/string3.h \ + /usr/lib/gcc/i486-linux-gnu/4.4.3/include-fixed/limits.h \ + /usr/lib/gcc/i486-linux-gnu/4.4.3/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + /usr/include/bits/stdio_lim.h /usr/include/c++/4.4/string \ + /usr/include/c++/4.4/i486-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.4/i486-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.4/i486-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.4/bits/stringfwd.h \ + /usr/include/c++/4.4/bits/char_traits.h \ + /usr/include/c++/4.4/bits/stl_algobase.h /usr/include/c++/4.4/cstddef \ + /usr/include/c++/4.4/bits/functexcept.h \ + /usr/include/c++/4.4/exception_defines.h \ + /usr/include/c++/4.4/bits/cpp_type_traits.h \ + /usr/include/c++/4.4/ext/type_traits.h \ + /usr/include/c++/4.4/ext/numeric_traits.h \ + /usr/include/c++/4.4/bits/stl_pair.h /usr/include/c++/4.4/bits/move.h \ + /usr/include/c++/4.4/bits/concept_check.h \ + /usr/include/c++/4.4/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.4/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.4/bits/stl_iterator.h \ + /usr/include/c++/4.4/debug/debug.h /usr/include/c++/4.4/bits/postypes.h \ + /usr/include/c++/4.4/cwchar /usr/include/wchar.h /usr/include/stdio.h \ + /usr/lib/gcc/i486-linux-gnu/4.4.3/include/stdarg.h \ + /usr/include/bits/wchar.h /usr/include/bits/wchar2.h \ + /usr/include/c++/4.4/bits/allocator.h \ + /usr/include/c++/4.4/i486-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.4/ext/new_allocator.h /usr/include/c++/4.4/new \ + /usr/include/c++/4.4/exception /usr/include/c++/4.4/bits/localefwd.h \ + /usr/include/c++/4.4/i486-linux-gnu/bits/c++locale.h \ + /usr/include/c++/4.4/clocale /usr/include/locale.h \ + /usr/include/bits/locale.h /usr/include/c++/4.4/iosfwd \ + /usr/include/c++/4.4/cctype /usr/include/ctype.h \ + /usr/include/bits/types.h /usr/include/bits/typesizes.h \ + /usr/include/endian.h /usr/include/bits/endian.h \ + /usr/include/bits/byteswap.h /usr/include/c++/4.4/bits/ostream_insert.h \ + /usr/include/c++/4.4/cxxabi-forced.h \ + /usr/include/c++/4.4/bits/stl_function.h \ + /usr/include/c++/4.4/backward/binders.h \ + /usr/include/c++/4.4/bits/basic_string.h \ + /usr/include/c++/4.4/ext/atomicity.h \ + /usr/include/c++/4.4/i486-linux-gnu/bits/gthr.h \ + /usr/include/c++/4.4/i486-linux-gnu/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h /usr/include/time.h \ + /usr/include/bits/sched.h /usr/include/bits/time.h /usr/include/signal.h \ + /usr/include/bits/sigset.h /usr/include/bits/pthreadtypes.h \ + /usr/include/bits/setjmp.h /usr/include/unistd.h \ + /usr/include/bits/posix_opt.h /usr/include/bits/environments.h \ + /usr/include/bits/confname.h /usr/include/getopt.h \ + /usr/include/bits/unistd.h \ + /usr/include/c++/4.4/i486-linux-gnu/bits/atomic_word.h \ + /usr/include/c++/4.4/initializer_list \ + /usr/include/c++/4.4/bits/basic_string.tcc \ + /usr/share/qt3/include/qnamespace.h /usr/share/qt3/include/qobject.h \ + /usr/share/qt3/include/qevent.h /usr/share/qt3/include/qregion.h \ + /usr/share/qt3/include/qrect.h /usr/share/qt3/include/qsize.h \ + /usr/share/qt3/include/qpoint.h /usr/share/qt3/include/qmime.h \ + /usr/share/qt3/include/qmap.h /usr/share/qt3/include/qdatastream.h \ + /usr/share/qt3/include/qiodevice.h /usr/share/qt3/include/qpair.h \ + /usr/share/qt3/include/qvaluelist.h /usr/share/qt3/include/qtl.h \ + /usr/share/qt3/include/qtextstream.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/bits/sys_errlist.h \ + /usr/include/bits/stdio.h /usr/include/bits/stdio2.h \ + /usr/include/c++/4.4/iterator /usr/include/c++/4.4/ostream \ + /usr/include/c++/4.4/ios /usr/include/c++/4.4/bits/ios_base.h \ + /usr/include/c++/4.4/bits/locale_classes.h \ + /usr/include/c++/4.4/bits/locale_classes.tcc \ + /usr/include/c++/4.4/streambuf /usr/include/c++/4.4/bits/streambuf.tcc \ + /usr/include/c++/4.4/bits/basic_ios.h \ + /usr/include/c++/4.4/bits/locale_facets.h /usr/include/c++/4.4/cwctype \ + /usr/include/wctype.h \ + /usr/include/c++/4.4/i486-linux-gnu/bits/ctype_base.h \ + /usr/include/c++/4.4/bits/streambuf_iterator.h \ + /usr/include/c++/4.4/i486-linux-gnu/bits/ctype_inline.h \ + /usr/include/c++/4.4/bits/locale_facets.tcc \ + /usr/include/c++/4.4/bits/basic_ios.tcc \ + /usr/include/c++/4.4/bits/ostream.tcc /usr/include/c++/4.4/istream \ + /usr/include/c++/4.4/bits/istream.tcc \ + /usr/include/c++/4.4/bits/stream_iterator.h /usr/include/c++/4.4/list \ + /usr/include/c++/4.4/bits/stl_list.h /usr/include/c++/4.4/bits/list.tcc \ + /usr/include/c++/4.4/map /usr/include/c++/4.4/bits/stl_tree.h \ + /usr/include/c++/4.4/bits/stl_map.h \ + /usr/include/c++/4.4/bits/stl_multimap.h \ + /usr/share/qt3/include/qpaintdevice.h /usr/share/qt3/include/qpalette.h \ + /usr/share/qt3/include/qcolor.h /usr/share/qt3/include/qstringlist.h \ + /usr/share/qt3/include/qstrlist.h /usr/share/qt3/include/qptrlist.h \ + /usr/share/qt3/include/qglist.h /usr/share/qt3/include/qptrcollection.h \ + /usr/share/qt3/include/qbrush.h /usr/share/qt3/include/qfont.h \ + /usr/share/qt3/include/qfontmetrics.h /usr/share/qt3/include/qfontinfo.h \ + /usr/share/qt3/include/qsizepolicy.h /usr/share/qt3/include/qscrollbar.h \ + /usr/share/qt3/include/qrangecontrol.h /usr/include/c++/4.4/vector \ + /usr/include/c++/4.4/bits/stl_construct.h \ + /usr/include/c++/4.4/bits/stl_uninitialized.h \ + /usr/include/c++/4.4/bits/stl_vector.h \ + /usr/include/c++/4.4/bits/stl_bvector.h \ + /usr/include/c++/4.4/bits/vector.tcc deicsonzeguibase.h \ + /usr/share/qt3/include/qvariant.h /usr/share/qt3/include/qpixmap.h \ + /usr/share/qt3/include/qdialog.h ../libsynti/gui.h ../libsynti/mpevent.h \ + ../libsynti/evdata.h /usr/include/memory.h \ + /usr/share/qt3/include/qmetaobject.h \ + /usr/share/qt3/include/qconnection.h \ + /usr/share/qt3/include/qapplication.h \ + /usr/share/qt3/include/qdesktopwidget.h \ + /usr/share/qt3/include/qasciidict.h /usr/share/qt3/include/qgdict.h \ + /usr/share/qt3/include/qtranslator.h \ + /usr/share/qt3/include/private/qucomextra_p.h \ + /usr/share/qt3/include/private/qucom_p.h \ + /usr/share/qt3/include/qstring.h /usr/share/qt3/include/quuid.h + +deicsonzegui.h: + +/usr/share/qt3/include/qlistview.h: + +/usr/share/qt3/include/qscrollview.h: + +/usr/share/qt3/include/qframe.h: + +/usr/share/qt3/include/qwidget.h: + +/usr/share/qt3/include/qwindowdefs.h: + +/usr/share/qt3/include/qobjectdefs.h: + +/usr/share/qt3/include/qglobal.h: + +/usr/share/qt3/include/qconfig.h: + +/usr/share/qt3/include/qmodules.h: + +/usr/share/qt3/include/qfeatures.h: + +/usr/share/qt3/include/qstring.h: + +/usr/share/qt3/include/qcstring.h: + +/usr/share/qt3/include/qmemarray.h: + +/usr/share/qt3/include/qgarray.h: + +/usr/share/qt3/include/qshared.h: + +/usr/share/qt3/include/qwinexport.h: + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/bits/predefs.h: + +/usr/include/sys/cdefs.h: + +/usr/include/bits/wordsize.h: + +/usr/include/gnu/stubs.h: + +/usr/include/gnu/stubs-32.h: + +/usr/lib/gcc/i486-linux-gnu/4.4.3/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/bits/string3.h: + +/usr/lib/gcc/i486-linux-gnu/4.4.3/include-fixed/limits.h: + +/usr/lib/gcc/i486-linux-gnu/4.4.3/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/bits/posix1_lim.h: + +/usr/include/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/bits/posix2_lim.h: + +/usr/include/bits/xopen_lim.h: + +/usr/include/bits/stdio_lim.h: + +/usr/include/c++/4.4/string: + +/usr/include/c++/4.4/i486-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.4/i486-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.4/i486-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.4/bits/stringfwd.h: + +/usr/include/c++/4.4/bits/char_traits.h: + +/usr/include/c++/4.4/bits/stl_algobase.h: + +/usr/include/c++/4.4/cstddef: + +/usr/include/c++/4.4/bits/functexcept.h: + +/usr/include/c++/4.4/exception_defines.h: + +/usr/include/c++/4.4/bits/cpp_type_traits.h: + +/usr/include/c++/4.4/ext/type_traits.h: + +/usr/include/c++/4.4/ext/numeric_traits.h: + +/usr/include/c++/4.4/bits/stl_pair.h: + +/usr/include/c++/4.4/bits/move.h: + +/usr/include/c++/4.4/bits/concept_check.h: + +/usr/include/c++/4.4/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.4/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.4/bits/stl_iterator.h: + +/usr/include/c++/4.4/debug/debug.h: + +/usr/include/c++/4.4/bits/postypes.h: + +/usr/include/c++/4.4/cwchar: + +/usr/include/wchar.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/i486-linux-gnu/4.4.3/include/stdarg.h: + +/usr/include/bits/wchar.h: + +/usr/include/bits/wchar2.h: + +/usr/include/c++/4.4/bits/allocator.h: + +/usr/include/c++/4.4/i486-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.4/ext/new_allocator.h: + +/usr/include/c++/4.4/new: + +/usr/include/c++/4.4/exception: + +/usr/include/c++/4.4/bits/localefwd.h: + +/usr/include/c++/4.4/i486-linux-gnu/bits/c++locale.h: + +/usr/include/c++/4.4/clocale: + +/usr/include/locale.h: + +/usr/include/bits/locale.h: + +/usr/include/c++/4.4/iosfwd: + +/usr/include/c++/4.4/cctype: + +/usr/include/ctype.h: + +/usr/include/bits/types.h: + +/usr/include/bits/typesizes.h: + +/usr/include/endian.h: + +/usr/include/bits/endian.h: + +/usr/include/bits/byteswap.h: + +/usr/include/c++/4.4/bits/ostream_insert.h: + +/usr/include/c++/4.4/cxxabi-forced.h: + +/usr/include/c++/4.4/bits/stl_function.h: + +/usr/include/c++/4.4/backward/binders.h: + +/usr/include/c++/4.4/bits/basic_string.h: + +/usr/include/c++/4.4/ext/atomicity.h: + +/usr/include/c++/4.4/i486-linux-gnu/bits/gthr.h: + +/usr/include/c++/4.4/i486-linux-gnu/bits/gthr-default.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/time.h: + +/usr/include/bits/sched.h: + +/usr/include/bits/time.h: + +/usr/include/signal.h: + +/usr/include/bits/sigset.h: + +/usr/include/bits/pthreadtypes.h: + +/usr/include/bits/setjmp.h: + +/usr/include/unistd.h: + +/usr/include/bits/posix_opt.h: + +/usr/include/bits/environments.h: + +/usr/include/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/bits/unistd.h: + +/usr/include/c++/4.4/i486-linux-gnu/bits/atomic_word.h: + +/usr/include/c++/4.4/initializer_list: + +/usr/include/c++/4.4/bits/basic_string.tcc: + +/usr/share/qt3/include/qnamespace.h: + +/usr/share/qt3/include/qobject.h: + +/usr/share/qt3/include/qevent.h: + +/usr/share/qt3/include/qregion.h: + +/usr/share/qt3/include/qrect.h: + +/usr/share/qt3/include/qsize.h: + +/usr/share/qt3/include/qpoint.h: + +/usr/share/qt3/include/qmime.h: + +/usr/share/qt3/include/qmap.h: + +/usr/share/qt3/include/qdatastream.h: + +/usr/share/qt3/include/qiodevice.h: + +/usr/share/qt3/include/qpair.h: + +/usr/share/qt3/include/qvaluelist.h: + +/usr/share/qt3/include/qtl.h: + +/usr/share/qt3/include/qtextstream.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/bits/sys_errlist.h: + +/usr/include/bits/stdio.h: + +/usr/include/bits/stdio2.h: + +/usr/include/c++/4.4/iterator: + +/usr/include/c++/4.4/ostream: + +/usr/include/c++/4.4/ios: + +/usr/include/c++/4.4/bits/ios_base.h: + +/usr/include/c++/4.4/bits/locale_classes.h: + +/usr/include/c++/4.4/bits/locale_classes.tcc: + +/usr/include/c++/4.4/streambuf: + +/usr/include/c++/4.4/bits/streambuf.tcc: + +/usr/include/c++/4.4/bits/basic_ios.h: + +/usr/include/c++/4.4/bits/locale_facets.h: + +/usr/include/c++/4.4/cwctype: + +/usr/include/wctype.h: + +/usr/include/c++/4.4/i486-linux-gnu/bits/ctype_base.h: + +/usr/include/c++/4.4/bits/streambuf_iterator.h: + +/usr/include/c++/4.4/i486-linux-gnu/bits/ctype_inline.h: + +/usr/include/c++/4.4/bits/locale_facets.tcc: + +/usr/include/c++/4.4/bits/basic_ios.tcc: + +/usr/include/c++/4.4/bits/ostream.tcc: + +/usr/include/c++/4.4/istream: + +/usr/include/c++/4.4/bits/istream.tcc: + +/usr/include/c++/4.4/bits/stream_iterator.h: + +/usr/include/c++/4.4/list: + +/usr/include/c++/4.4/bits/stl_list.h: + +/usr/include/c++/4.4/bits/list.tcc: + +/usr/include/c++/4.4/map: + +/usr/include/c++/4.4/bits/stl_tree.h: + +/usr/include/c++/4.4/bits/stl_map.h: + +/usr/include/c++/4.4/bits/stl_multimap.h: + +/usr/share/qt3/include/qpaintdevice.h: + +/usr/share/qt3/include/qpalette.h: + +/usr/share/qt3/include/qcolor.h: + +/usr/share/qt3/include/qstringlist.h: + +/usr/share/qt3/include/qstrlist.h: + +/usr/share/qt3/include/qptrlist.h: + +/usr/share/qt3/include/qglist.h: + +/usr/share/qt3/include/qptrcollection.h: + +/usr/share/qt3/include/qbrush.h: + +/usr/share/qt3/include/qfont.h: + +/usr/share/qt3/include/qfontmetrics.h: + +/usr/share/qt3/include/qfontinfo.h: + +/usr/share/qt3/include/qsizepolicy.h: + +/usr/share/qt3/include/qscrollbar.h: + +/usr/share/qt3/include/qrangecontrol.h: + +/usr/include/c++/4.4/vector: + +/usr/include/c++/4.4/bits/stl_construct.h: + +/usr/include/c++/4.4/bits/stl_uninitialized.h: + +/usr/include/c++/4.4/bits/stl_vector.h: + +/usr/include/c++/4.4/bits/stl_bvector.h: + +/usr/include/c++/4.4/bits/vector.tcc: + +deicsonzeguibase.h: + +/usr/share/qt3/include/qvariant.h: + +/usr/share/qt3/include/qpixmap.h: + +/usr/share/qt3/include/qdialog.h: + +../libsynti/gui.h: + +../libsynti/mpevent.h: + +../libsynti/evdata.h: + +/usr/include/memory.h: + +/usr/share/qt3/include/qmetaobject.h: + +/usr/share/qt3/include/qconnection.h: + +/usr/share/qt3/include/qapplication.h: + +/usr/share/qt3/include/qdesktopwidget.h: + +/usr/share/qt3/include/qasciidict.h: + +/usr/share/qt3/include/qgdict.h: + +/usr/share/qt3/include/qtranslator.h: + +/usr/share/qt3/include/private/qucomextra_p.h: + +/usr/share/qt3/include/private/qucom_p.h: + +/usr/share/qt3/include/qstring.h: + +/usr/share/qt3/include/quuid.h: diff --git a/muse2/synti/deicsonze/ARCH_ALIN b/muse2/synti/deicsonze/ARCH_ALIN new file mode 100644 index 00000000..e16f3428 --- /dev/null +++ b/muse2/synti/deicsonze/ARCH_ALIN @@ -0,0 +1,24941 @@ +* TX81Z/DX11 Voice Archive +* $Header: /cvsroot/lmuse/muse/synti/deicsonze/ARCH_ALIN,v 1.1.2.1 2004/11/28 21:10:16 spamatica 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 English Horn + + +** 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 Flugel Horn + + +** 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 French Horn + + +** 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 Bass Guitar + + +** 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 Double Bass + + +** 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 Organ + + +** 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 + + +** 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 Piano + + +** 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 + + +--Bank 15 + +** 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 + + +--Bank 16 + +** 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 Synthesizer + + +** 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 + + +** 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 + +--Bank 19 + + +** 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 Drum + + +** 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 + +--Bank 26 + + +** 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 Noises + +** 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 + + +--Bank 28 + +** 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/muse2/synti/deicsonze/Makefile b/muse2/synti/deicsonze/Makefile new file mode 100644 index 00000000..bd473630 --- /dev/null +++ b/muse2/synti/deicsonze/Makefile @@ -0,0 +1,683 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# synti/deicsonze/Makefile. Generated from Makefile.in by configure. + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + + + + +pkgdatadir = $(datadir)/muse +pkgincludedir = $(includedir)/muse +pkglibdir = $(libdir)/muse +pkglibexecdir = $(libexecdir)/muse +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = i686-pc-linux-gnu +host_triplet = i686-pc-linux-gnu +DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/common.am $(top_srcdir)/synti/synti-install.am \ + TODO +#am__append_1 = -include $(top_srcdir)/all-pic.h -DINSTPREFIX=\"$(prefix)\" +am__append_2 = -DINSTPREFIX=\"$(prefix)\" +subdir = synti/deicsonze +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal-include.m4 \ + $(top_srcdir)/m4/alsa.m4 $(top_srcdir)/m4/docbook.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(synthidir)" \ + "$(DESTDIR)$(deicsonzepkgdatadir)" +LTLIBRARIES = $(synthi_LTLIBRARIES) +deicsonze_la_DEPENDENCIES = ../libsynti/libsynti.la +am_deicsonze_la_OBJECTS = deicsonze.lo deicsonzegui.lo \ + deicsonzeguibase.lo newpreset.lo +nodist_deicsonze_la_OBJECTS = moc_deicsonzegui.lo +deicsonze_la_OBJECTS = $(am_deicsonze_la_OBJECTS) \ + $(nodist_deicsonze_la_OBJECTS) +deicsonze_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ + $(CXXFLAGS) $(deicsonze_la_LDFLAGS) $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I. -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +CXXLD = $(CXX) +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(deicsonze_la_SOURCES) $(nodist_deicsonze_la_SOURCES) +DIST_SOURCES = $(deicsonze_la_SOURCES) +DATA = $(deicsonzepkgdata_DATA) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = ${SHELL} /home/ddskrjo/dev/museqt4/muse/missing --run aclocal-1.11 -I m4 +ALSA_CFLAGS = +ALSA_LIBS = -lasound -lm -ldl +AMTAR = ${SHELL} /home/ddskrjo/dev/museqt4/muse/missing --run tar +AR = ar +AUTOCONF = ${SHELL} /home/ddskrjo/dev/museqt4/muse/missing --run autoconf +AUTOHEADER = ${SHELL} /home/ddskrjo/dev/museqt4/muse/missing --run autoheader +AUTOMAKE = ${SHELL} /home/ddskrjo/dev/museqt4/muse/missing --run automake-1.11 +AWK = gawk +CC = gcc +CCDEPMODE = depmode=gcc3 +CFLAGS = -g -O2 +CPP = gcc -E +CPPFLAGS = +CXX = g++ +CXXCPP = g++ -E +CXXDEPMODE = depmode=gcc3 +CXXFLAGS = +CYGPATH_W = echo +DEFS = -DHAVE_CONFIG_H +DEPDIR = .deps +DOCBOOKSTYLE = +DOCBOOKTARGETS = +DOT = no +DOTPATH = +DOXYGEN = no +DOXYGEN_TREEVIEW = YES +DSYMUTIL = +DUMPBIN = +ECHO_C = +ECHO_N = -n +ECHO_T = +EGREP = /bin/grep -E +EXEEXT = +FGREP = /bin/grep -F +FLUIDSYNTHDIRS = fluid fluidsynth +FST_CFLAGS = +FST_LIBS = +Fluidsynth_CFLAGS = +Fluidsynth_LIBS = -lfluidsynth +GIVERTCAP = +GREP = /bin/grep +HAVEDOT = NO +INSTALL = /usr/bin/install -c +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_PROGRAM = ${INSTALL} +INSTALL_SCRIPT = ${INSTALL} +INSTALL_STRIP_PROGRAM = $(install_sh) -c -s +JACK_CFLAGS = +JACK_LIBS = -ljack +JADE = +LASH_CFLAGS = +LASH_LIBS = +LD = /usr/bin/ld +LDFLAGS = +LIBOBJS = +LIBS = -lasound -lm -ldl +LIBTOOL = $(SHELL) $(top_builddir)/libtool +LIPO = +LN_S = ln -s +LO_CFLAGS = -I/usr/local/include +LO_LIBS = -llo +LTLIBOBJS = +MAKEINFO = ${SHELL} /home/ddskrjo/dev/museqt4/muse/missing --run makeinfo +MKDIR_P = /bin/mkdir -p +MUSECXXFLAGS = -g -fno-exceptions -Wall -W -D_GNU_SOURCE -D_REENTRANT -DQT_CLEAN_NAMESPACE -DQT_NO_COMPAT -I$(top_srcdir) -I$(top_srcdir)/muse/widgets $(QT_CFLAGS) +NM = /usr/bin/nm -B +NMEDIT = +NSGMLS = +OBJDUMP = objdump +OBJEXT = o +OTOOL = +OTOOL64 = +PACKAGE = muse +PACKAGE_BUGREPORT = +PACKAGE_NAME = MusE +PACKAGE_STRING = MusE 1.1 +PACKAGE_TARNAME = muse +PACKAGE_URL = +PACKAGE_VERSION = 1.1 +PATH_SEPARATOR = : +PCH = +PERL = /usr/bin/perl +PKG_CONFIG = /usr/bin/pkg-config +PYTHON = /usr/bin/python +PYTHON_EXEC_PREFIX = ${exec_prefix} +PYTHON_INCLUDES = -I/usr/include/python2.6 -I/usr/include/python2.6 +PYTHON_LIB = -lpthread -ldl -lutil -lm -lpython2.6 +PYTHON_PLATFORM = linux2 +PYTHON_PREFIX = ${prefix} +PYTHON_VERSION = 2.6 +QTDIR_BIN = /usr/share/qt4/bin +QTDIR_INC = -I/usr/share/qt4/include -I/usr/share/qt4/include/QtGui -I/usr/share/qt4/include/QtCore -I/usr/share/qt4/include/Qt3Support -DQT_OPENGL_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED +QT_LIBS = -Wl,-rpath,/usr/share/qt4/lib -L/usr/share/qt4/lib -lQtGui -lQtOpenGL -lQtCore -lQt3Support -lX11 -lXext -lXmu -lXt -lXi -lGLU -lGL -lpthread +RANLIB = ranlib +SAMPLERATE_CFLAGS = +SAMPLERATE_LIBS = -lsamplerate +SED = /bin/sed +SET_MAKE = +SHELL = /bin/bash +SNDFILE_CFLAGS = +SNDFILE_LIBS = -lsndfile +STRIP = strip +SUIDBUILD = no +SUIDINSTALL = no +USE_SSE = +UUID_CFLAGS = +UUID_LIBS = -luuid +VERSION = 1.1 +XMKMF = +X_CFLAGS = +X_EXTRA_LIBS = +X_LIBS = +X_PRE_LIBS = -lSM -lICE -lSM -lICE +abs_builddir = /home/ddskrjo/dev/museqt4/muse/synti/deicsonze +abs_srcdir = /home/ddskrjo/dev/museqt4/muse/synti/deicsonze +abs_top_builddir = /home/ddskrjo/dev/museqt4/muse +abs_top_srcdir = /home/ddskrjo/dev/museqt4/muse +ac_ct_CC = gcc +ac_ct_CXX = g++ +ac_ct_DUMPBIN = +am__include = include +am__leading_dot = . +am__quote = +am__tar = ${AMTAR} chof - "$$tardir" +am__untar = ${AMTAR} xf - +bindir = ${exec_prefix}/bin +build = i686-pc-linux-gnu +build_alias = +build_cpu = i686 +build_os = linux-gnu +build_vendor = pc +builddir = . +datadir = ${datarootdir} +datarootdir = ${prefix}/share +docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} +dvidir = ${docdir} +exec_prefix = ${prefix} +have_docbook = +host = i686-pc-linux-gnu +host_alias = +host_cpu = i686 +host_os = linux-gnu +host_vendor = pc +htmldir = ${docdir} +includedir = ${prefix}/include +infodir = ${datarootdir}/info +install_sh = ${SHELL} /home/ddskrjo/dev/museqt4/muse/install-sh +libdir = ${exec_prefix}/lib +libexecdir = ${exec_prefix}/libexec +localedir = ${datarootdir}/locale +localstatedir = ${prefix}/var +lt_ECHO = echo +mandir = ${datarootdir}/man +mkdir_p = /bin/mkdir -p +oldincludedir = /usr/include +pdfdir = ${docdir} +pkgpyexecdir = ${pyexecdir}/muse +pkgpythondir = ${pythondir}/muse +prefix = /usr/local +program_transform_name = s,x,x, +psdir = ${docdir} +pyexecdir = ${exec_prefix}/lib/python2.6/dist-packages +pythondir = ${prefix}/lib/python2.6/dist-packages +sbindir = ${exec_prefix}/sbin +sharedstatedir = ${prefix}/com +srcdir = . +synth_fluid = fluid +synth_fluidsynth = fluidsynth +sysconfdir = ${prefix}/etc +target_alias = +top_build_prefix = ../../ +top_builddir = ../.. +top_srcdir = ../.. +AM_CXXFLAGS = $(MUSECXXFLAGS) -I.. -I$(top_srcdir)/synti \ + -I$(top_srcdir)/muse/widgets -DQT_SHARED -DQT_THREAD_SUPPORT \ + -DQT_PLUGIN $(QTDIR_INC) -DQT3_SUPPORT $(am__append_1) \ + $(am__append_2) +AM_CPPFLAGS = +MOC = $(QTDIR_BIN)/moc +#UIC = $(QTDIR_BIN)/uic3 +UIC = /usr/bin/uic3 +UIFILES = $(wildcard *.ui) +MOCFILES = $(shell for h in $(filter %.h,$(SOURCES)); do \ + if grep -q Q_OBJECT $$h; then \ + echo $$h | sed "s/\(.*\)\.h/moc_\1.cpp/"; \ + fi; \ + done) + +BUILT_SOURCES = $(MOCFILES) $(UIFILES:%.ui=%.h) +MOSTLYCLEANFILES = $(MOCFILES) $(UIFILES:%.ui=%.h) +SUFFIXES = .ui .h.gch +synthidir = $(pkglibdir)/synthi +synthi_LTLIBRARIES = deicsonze.la +deicsonze_la_SOURCES = deicsonze.cpp deicsonze.h deicsonzegui.cpp deicsonzegui.h \ + deicsonzeguibase.ui newpreset.ui + +nodist_deicsonze_la_SOURCES = moc_deicsonzegui.cpp +deicsonze_la_LIBADD = ../libsynti/libsynti.la +deicsonze_la_LDFLAGS = -module -avoid-version +EXTRA_DIST = ARCH_ALIN README +deicsonzepkgdata_DATA = ARCH_ALIN +deicsonzepkgdatadir = $(pkgdatadir)/presets/deicsonze +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: .ui .h.gch .cpp .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/common.am $(top_srcdir)/synti/synti-install.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu synti/deicsonze/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu synti/deicsonze/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-synthiLTLIBRARIES: $(synthi_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(synthidir)" || $(MKDIR_P) "$(DESTDIR)$(synthidir)" + @list='$(synthi_LTLIBRARIES)'; test -n "$(synthidir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(synthidir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(synthidir)"; \ + } + +uninstall-synthiLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(synthi_LTLIBRARIES)'; test -n "$(synthidir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(synthidir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(synthidir)/$$f"; \ + done + +clean-synthiLTLIBRARIES: + -test -z "$(synthi_LTLIBRARIES)" || rm -f $(synthi_LTLIBRARIES) + @list='$(synthi_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +deicsonze.la: $(deicsonze_la_OBJECTS) $(deicsonze_la_DEPENDENCIES) + $(deicsonze_la_LINK) -rpath $(synthidir) $(deicsonze_la_OBJECTS) $(deicsonze_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +include ./$(DEPDIR)/deicsonze.Plo +include ./$(DEPDIR)/deicsonzegui.Plo +include ./$(DEPDIR)/moc_deicsonzegui.Plo + +.cpp.o: + $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< + $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +# source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \ +# $(CXXCOMPILE) -c -o $@ $< + +.cpp.obj: + $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` + $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +# source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \ +# $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.cpp.lo: + $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< + $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +# source='$<' object='$@' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \ +# $(LTCXXCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-deicsonzepkgdataDATA: $(deicsonzepkgdata_DATA) + @$(NORMAL_INSTALL) + test -z "$(deicsonzepkgdatadir)" || $(MKDIR_P) "$(DESTDIR)$(deicsonzepkgdatadir)" + @list='$(deicsonzepkgdata_DATA)'; test -n "$(deicsonzepkgdatadir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(deicsonzepkgdatadir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(deicsonzepkgdatadir)" || exit $$?; \ + done + +uninstall-deicsonzepkgdataDATA: + @$(NORMAL_UNINSTALL) + @list='$(deicsonzepkgdata_DATA)'; test -n "$(deicsonzepkgdatadir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(deicsonzepkgdatadir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(deicsonzepkgdatadir)" && rm -f $$files + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-am +all-am: Makefile $(LTLIBRARIES) $(DATA) +installdirs: + for dir in "$(DESTDIR)$(synthidir)" "$(DESTDIR)$(deicsonzepkgdatadir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +clean: clean-am + +clean-am: clean-generic clean-libtool clean-synthiLTLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-deicsonzepkgdataDATA \ + install-synthiLTLIBRARIES + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-deicsonzepkgdataDATA \ + uninstall-synthiLTLIBRARIES + +.MAKE: all check install install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-synthiLTLIBRARIES ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am \ + install-deicsonzepkgdataDATA install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + install-synthiLTLIBRARIES installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \ + uninstall-am uninstall-deicsonzepkgdataDATA \ + uninstall-synthiLTLIBRARIES + + +de: + @for base in $(MOCFILES); do echo -e "\t$${base}.cpp $${base}.h \\"; done + +nde: + @for base in $(MOCFILES); do echo -e "\tmoc_$${base}.cpp \\"; done + +.ui.o: %.h + $(UIC) -L $(top_srcdir)/muse/widgets -o $*.cpp -impl $*.h $*.ui + $(MOC) $*.h >> $*.cpp + $(CXXCOMPILE) -c $*.cpp -o $*.o + $(RM) $*.cpp moc_$*.cpp moc_$*.o + +.ui.lo: %.h + $(UIC) -L $(top_srcdir)/muse/widgets -o $*.cpp -impl $*.h $*.ui + $(MOC) $*.h >> $*.cpp + $(LTCXXCOMPILE) -c $*.cpp -o $*.lo + $(RM) $*.cpp moc_$*.cpp moc_$*.lo moc_$*.o + +moc_%.cpp: %.h + $(MOC) $< -o $@ + +%.h: %.ui + $(UIC) -o $@ $< +# $(UIC) -L $(top_srcdir)/muse/widgets -o $@ $< + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/muse2/synti/deicsonze/Makefile.am b/muse2/synti/deicsonze/Makefile.am new file mode 100644 index 00000000..7ae43a5d --- /dev/null +++ b/muse2/synti/deicsonze/Makefile.am @@ -0,0 +1,23 @@ +include $(top_srcdir)/common.am +include $(top_srcdir)/synti/synti-install.am + +if PCH +AM_CXXFLAGS += -include $(top_srcdir)/all-pic.h -DINSTPREFIX=\"$(prefix)\" +else +AM_CXXFLAGS += -DINSTPREFIX=\"$(prefix)\" +endif + +synthi_LTLIBRARIES = deicsonze.la + +deicsonze_la_SOURCES = deicsonze.cpp deicsonze.h deicsonzegui.cpp deicsonzegui.h \ + deicsonzeguibase.ui newpreset.ui + +nodist_deicsonze_la_SOURCES = moc_deicsonzegui.cpp + +deicsonze_la_LIBADD = ../libsynti/libsynti.la +deicsonze_la_LDFLAGS = -module -avoid-version + +EXTRA_DIST = ARCH_ALIN README + +deicsonzepkgdata_DATA = ARCH_ALIN +deicsonzepkgdatadir = $(pkgdatadir)/presets/deicsonze diff --git a/muse2/synti/deicsonze/Makefile.in b/muse2/synti/deicsonze/Makefile.in new file mode 100644 index 00000000..26791d17 --- /dev/null +++ b/muse2/synti/deicsonze/Makefile.in @@ -0,0 +1,683 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/common.am $(top_srcdir)/synti/synti-install.am \ + TODO +@PCH_TRUE@am__append_1 = -include $(top_srcdir)/all-pic.h -DINSTPREFIX=\"$(prefix)\" +@PCH_FALSE@am__append_2 = -DINSTPREFIX=\"$(prefix)\" +subdir = synti/deicsonze +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal-include.m4 \ + $(top_srcdir)/m4/alsa.m4 $(top_srcdir)/m4/docbook.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(synthidir)" \ + "$(DESTDIR)$(deicsonzepkgdatadir)" +LTLIBRARIES = $(synthi_LTLIBRARIES) +deicsonze_la_DEPENDENCIES = ../libsynti/libsynti.la +am_deicsonze_la_OBJECTS = deicsonze.lo deicsonzegui.lo \ + deicsonzeguibase.lo newpreset.lo +nodist_deicsonze_la_OBJECTS = moc_deicsonzegui.lo +deicsonze_la_OBJECTS = $(am_deicsonze_la_OBJECTS) \ + $(nodist_deicsonze_la_OBJECTS) +deicsonze_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ + $(CXXFLAGS) $(deicsonze_la_LDFLAGS) $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +CXXLD = $(CXX) +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(deicsonze_la_SOURCES) $(nodist_deicsonze_la_SOURCES) +DIST_SOURCES = $(deicsonze_la_SOURCES) +DATA = $(deicsonzepkgdata_DATA) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DOCBOOKSTYLE = @DOCBOOKSTYLE@ +DOCBOOKTARGETS = @DOCBOOKTARGETS@ +DOT = @DOT@ +DOTPATH = @DOTPATH@ +DOXYGEN = @DOXYGEN@ +DOXYGEN_TREEVIEW = @DOXYGEN_TREEVIEW@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FLUIDSYNTHDIRS = @FLUIDSYNTHDIRS@ +FST_CFLAGS = @FST_CFLAGS@ +FST_LIBS = @FST_LIBS@ +Fluidsynth_CFLAGS = @Fluidsynth_CFLAGS@ +Fluidsynth_LIBS = @Fluidsynth_LIBS@ +GIVERTCAP = @GIVERTCAP@ +GREP = @GREP@ +HAVEDOT = @HAVEDOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_LIBS = @JACK_LIBS@ +JADE = @JADE@ +LASH_CFLAGS = @LASH_CFLAGS@ +LASH_LIBS = @LASH_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LO_CFLAGS = @LO_CFLAGS@ +LO_LIBS = @LO_LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MUSECXXFLAGS = @MUSECXXFLAGS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NSGMLS = @NSGMLS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PCH = @PCH@ +PERL = @PERL@ +PKG_CONFIG = @PKG_CONFIG@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIB = @PYTHON_LIB@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QTDIR_BIN = @QTDIR_BIN@ +QTDIR_INC = @QTDIR_INC@ +QT_LIBS = @QT_LIBS@ +RANLIB = @RANLIB@ +SAMPLERATE_CFLAGS = @SAMPLERATE_CFLAGS@ +SAMPLERATE_LIBS = @SAMPLERATE_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ +SNDFILE_LIBS = @SNDFILE_LIBS@ +STRIP = @STRIP@ +SUIDBUILD = @SUIDBUILD@ +SUIDINSTALL = @SUIDINSTALL@ +USE_SSE = @USE_SSE@ +UUID_CFLAGS = @UUID_CFLAGS@ +UUID_LIBS = @UUID_LIBS@ +VERSION = @VERSION@ +XMKMF = @XMKMF@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +have_docbook = @have_docbook@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +synth_fluid = @synth_fluid@ +synth_fluidsynth = @synth_fluidsynth@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AM_CXXFLAGS = $(MUSECXXFLAGS) -I.. -I$(top_srcdir)/synti \ + -I$(top_srcdir)/muse/widgets -DQT_SHARED -DQT_THREAD_SUPPORT \ + -DQT_PLUGIN $(QTDIR_INC) -DQT3_SUPPORT $(am__append_1) \ + $(am__append_2) +AM_CPPFLAGS = +MOC = $(QTDIR_BIN)/moc +#UIC = $(QTDIR_BIN)/uic3 +UIC = /usr/bin/uic3 +UIFILES = $(wildcard *.ui) +MOCFILES = $(shell for h in $(filter %.h,$(SOURCES)); do \ + if grep -q Q_OBJECT $$h; then \ + echo $$h | sed "s/\(.*\)\.h/moc_\1.cpp/"; \ + fi; \ + done) + +BUILT_SOURCES = $(MOCFILES) $(UIFILES:%.ui=%.h) +MOSTLYCLEANFILES = $(MOCFILES) $(UIFILES:%.ui=%.h) +SUFFIXES = .ui .h.gch +synthidir = $(pkglibdir)/synthi +synthi_LTLIBRARIES = deicsonze.la +deicsonze_la_SOURCES = deicsonze.cpp deicsonze.h deicsonzegui.cpp deicsonzegui.h \ + deicsonzeguibase.ui newpreset.ui + +nodist_deicsonze_la_SOURCES = moc_deicsonzegui.cpp +deicsonze_la_LIBADD = ../libsynti/libsynti.la +deicsonze_la_LDFLAGS = -module -avoid-version +EXTRA_DIST = ARCH_ALIN README +deicsonzepkgdata_DATA = ARCH_ALIN +deicsonzepkgdatadir = $(pkgdatadir)/presets/deicsonze +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: .ui .h.gch .cpp .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/common.am $(top_srcdir)/synti/synti-install.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu synti/deicsonze/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu synti/deicsonze/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-synthiLTLIBRARIES: $(synthi_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(synthidir)" || $(MKDIR_P) "$(DESTDIR)$(synthidir)" + @list='$(synthi_LTLIBRARIES)'; test -n "$(synthidir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(synthidir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(synthidir)"; \ + } + +uninstall-synthiLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(synthi_LTLIBRARIES)'; test -n "$(synthidir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(synthidir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(synthidir)/$$f"; \ + done + +clean-synthiLTLIBRARIES: + -test -z "$(synthi_LTLIBRARIES)" || rm -f $(synthi_LTLIBRARIES) + @list='$(synthi_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +deicsonze.la: $(deicsonze_la_OBJECTS) $(deicsonze_la_DEPENDENCIES) + $(deicsonze_la_LINK) -rpath $(synthidir) $(deicsonze_la_OBJECTS) $(deicsonze_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/deicsonze.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/deicsonzegui.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/moc_deicsonzegui.Plo@am__quote@ + +.cpp.o: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< + +.cpp.obj: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.cpp.lo: +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-deicsonzepkgdataDATA: $(deicsonzepkgdata_DATA) + @$(NORMAL_INSTALL) + test -z "$(deicsonzepkgdatadir)" || $(MKDIR_P) "$(DESTDIR)$(deicsonzepkgdatadir)" + @list='$(deicsonzepkgdata_DATA)'; test -n "$(deicsonzepkgdatadir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(deicsonzepkgdatadir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(deicsonzepkgdatadir)" || exit $$?; \ + done + +uninstall-deicsonzepkgdataDATA: + @$(NORMAL_UNINSTALL) + @list='$(deicsonzepkgdata_DATA)'; test -n "$(deicsonzepkgdatadir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(deicsonzepkgdatadir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(deicsonzepkgdatadir)" && rm -f $$files + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-am +all-am: Makefile $(LTLIBRARIES) $(DATA) +installdirs: + for dir in "$(DESTDIR)$(synthidir)" "$(DESTDIR)$(deicsonzepkgdatadir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +clean: clean-am + +clean-am: clean-generic clean-libtool clean-synthiLTLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-deicsonzepkgdataDATA \ + install-synthiLTLIBRARIES + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-deicsonzepkgdataDATA \ + uninstall-synthiLTLIBRARIES + +.MAKE: all check install install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-synthiLTLIBRARIES ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am \ + install-deicsonzepkgdataDATA install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + install-synthiLTLIBRARIES installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \ + uninstall-am uninstall-deicsonzepkgdataDATA \ + uninstall-synthiLTLIBRARIES + + +de: + @for base in $(MOCFILES); do echo -e "\t$${base}.cpp $${base}.h \\"; done + +nde: + @for base in $(MOCFILES); do echo -e "\tmoc_$${base}.cpp \\"; done + +.ui.o: %.h + $(UIC) -L $(top_srcdir)/muse/widgets -o $*.cpp -impl $*.h $*.ui + $(MOC) $*.h >> $*.cpp + $(CXXCOMPILE) -c $*.cpp -o $*.o + $(RM) $*.cpp moc_$*.cpp moc_$*.o + +.ui.lo: %.h + $(UIC) -L $(top_srcdir)/muse/widgets -o $*.cpp -impl $*.h $*.ui + $(MOC) $*.h >> $*.cpp + $(LTCXXCOMPILE) -c $*.cpp -o $*.lo + $(RM) $*.cpp moc_$*.cpp moc_$*.lo moc_$*.o + +moc_%.cpp: %.h + $(MOC) $< -o $@ + +%.h: %.ui + $(UIC) -o $@ $< +# $(UIC) -L $(top_srcdir)/muse/widgets -o $@ $< + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/muse2/synti/deicsonze/README b/muse2/synti/deicsonze/README new file mode 100644 index 00000000..5cb76402 --- /dev/null +++ b/muse2/synti/deicsonze/README @@ -0,0 +1,18 @@ +DeicsOnze is a virtual synthesizer plugin for MusE which reproduces the +FM synthesis of the YAMAHA DX11 synthesizer/TX81Z sound module. + +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 it off as soon as possible. + +Not every function is implemented but it starts to sound like the original +(and even better). Pitch envelope, portamento, pitch bend, modulation and some +others are not implemented yet. + +The vertical sliders are inverted because QTDesigner doesn't have the feature +of slider invertion, since I think that it will get it before I will finish +DeicsOnze I'm waiting for a QT improvement. + + +Nil Geisweiller +alinweiller@caramail.com \ No newline at end of file diff --git a/muse2/synti/deicsonze/TODO b/muse2/synti/deicsonze/TODO new file mode 100644 index 00000000..cbcd9b6a --- /dev/null +++ b/muse2/synti/deicsonze/TODO @@ -0,0 +1,13 @@ +- Pitch Bend CTRL +- Modulation CTRL +- LFO Delay (bug) +- Fixed Frequency load Sutula +- Load save delete GUI +- Manage unique bank and prog numerous +- Communication with MusE for automation +- portamento +- EG Shift +- EG Pitch +- Rate Scaling +- Monophony +- newPreset \ No newline at end of file diff --git a/muse2/synti/deicsonze/deicsonze.cpp b/muse2/synti/deicsonze/deicsonze.cpp new file mode 100644 index 00000000..2b7162f7 --- /dev/null +++ b/muse2/synti/deicsonze/deicsonze.cpp @@ -0,0 +1,1658 @@ +//=========================================================================== +// +// DeicsOnze an emulator of the YAMAHA DX11 synthesizer +// +// Version 0.2.2 +// +// +// +// +// Copyright (c) 2004 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 "libsynti/mess.h" +#include "muse/midictrl.h" +#include "deicsonze.h" + +#include "deicsonzegui.h" + +#include "muse/midi.h" +#define ABS(x) (x>=0?x:-x) + + +float DeicsOnze::waveTable[NBRWAVES][RESOLUTION]; +int DeicsOnze::useCount = 0; + +//--------------------------------------------------------- +// DeicsOnze +//--------------------------------------------------------- + +DeicsOnze::DeicsOnze() : Mess(1) +{ + 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) + (iinitPreset(); + + setPreset(); + + _gui = new DeicsOnzeGui(this); + _gui->setCaption(QString("DeicsOnze")); + _gui->show(); +} + +//--------------------------------------------------------- +// ~DeicsOnze +//--------------------------------------------------------- + +DeicsOnze::~DeicsOnze() +{ + //if (--useCount == 0) + //delete[] sine_table; +} + +//--------------------------------------------------------- +// 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(); +} + +//--------------------------------------------------------- +// setGeometry +//--------------------------------------------------------- + +void DeicsOnze::setGeometry(int x, int y, int w, int h) { + _gui->resize(QSize(w, h)); + _gui->move(QPoint(x, y)); +} + +//--------------------------------------------------------- +// initGlobal +//--------------------------------------------------------- +void DeicsOnze::initGlobal() { + _global.amp=1.0/(double)NBRVOICES; + _global.sustain=false; + _global.pitchBendCoef=1.0; + _global.lfoIndex=0; + _numPatch=0; +} + +//--------------------------------------------------------- +// initVoices +//--------------------------------------------------------- +void DeicsOnze::initVoices() { + for(int i=0; i::iterator pvi; + for(pvi=_presetVector.begin(); pvi!=_presetVector.end(); pvi++) + if((*pvi)->bank==lbank && (*pvi)->prog==prog) { + return(*pvi); + } + return NULL; +} +Preset* subcategorySet::findPreset(int lbank, int prog) { + Preset* p_preset; + std::vector::iterator psvi; + for(psvi=_subcategoryVector.begin();psvi!=_subcategoryVector.end(); psvi++) + { + p_preset=(*psvi)->findPreset(lbank, prog); + if(p_preset) return p_preset; + } + return NULL; +} +Preset* categorySet::findPreset(int lbank, int prog) { + Preset* p_preset; + std::vector::iterator ssvi; + for(ssvi=_categoryVector.begin(); ssvi!=_categoryVector.end(); ssvi++) + { + p_preset=(*ssvi)->findPreset(lbank, prog); + if(p_preset) return p_preset; + } + return NULL; +} +Preset* DeicsOnze::findPreset(int lbank, int prog) { + return _categorySet->findPreset(lbank, prog); +} + +//--------------------------------------------------------- +// findSubcategorySet +// take string of a category and return the subcategorySet +//--------------------------------------------------------- +subcategorySet* categorySet::findSubcategorySet(std::string s) { + std::vector::iterator ssvi=_categoryVector.begin(); + while(ssvi!=_categoryVector.end() && s!=(*ssvi)->_categoryName) ssvi++; + return(*ssvi); +} +//--------------------------------------------------------- +// findPresetSet +// take string of a subcategory and return the presetSet +//--------------------------------------------------------- +presetSet* subcategorySet::findPresetSet(std::string s) { + std::vector::iterator pvi=_subcategoryVector.begin(); + while(pvi!=_subcategoryVector.end() && s!=(*pvi)->_subcategoryName) pvi++; + //if (pvi==NULL) printf("presetSet %s doesn't exist!", s); + return(*pvi); +} + +//--------------------------------------------------------- +// 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((notelfo.speed; + // lfoSpeed to Hz, obtained by fitting the actual curve by a polynomial + _global.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.lfoMaxIndex=(_global.lfoFreq==0?0:(int)((1.0/_global.lfoFreq) + *(double)sampleRate())); + _global.lfoPitch=(((double)_preset->lfo.pModDepth/(double)MAXPMODDEPTH) + *(COEFPLFO(_preset->sensitivity.pitch))); + //Amplitude LFO + _global.lfoMaxAmp=(((double)_preset->lfo.aModDepth/(double)MAXAMODDEPTH) + *(COEFALFO(_preset->sensitivity.amplitude))); + //index is concidered on the frequency of the delay + _global.lfoDelayMaxIndex=delay2Time(_preset->lfo.delay)*_global.lfoFreq; + _global.lfoDelayInct=(double)(RESOLUTION/4)/_global.lfoDelayMaxIndex; +} + +//----------------------------------------------------------------- +// setFeedback +//----------------------------------------------------------------- +void DeicsOnze::setFeedback() { + _global.feedbackAmp=COEFFEEDBACK*exp(log(2)*(double)(_preset->feedback + -MAXFEEDBACK)); +} + +//----------------------------------------------------------------- +// setPreset +//----------------------------------------------------------------- + +void DeicsOnze::setPreset() { + setFeedback(); + setLfo(); +} + +//--------------------------------------------------------- +// printPreset +//--------------------------------------------------------- + +inline void printPreset(Preset* p) +{ + printf("\n"); + printf("Algorithm : %d, Feedback : %d\n", p->algorithm, p->feedback); + printf("LFO : "); + switch(p->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, ", + p->lfo.speed, p->lfo.delay, p->lfo.pModDepth, p->lfo.aModDepth); + if(p->lfo.sync) printf("Sync\n"); else printf("Not Sync\n"); + printf("LFO Pitch Sensitivity : %d, LFO Amplitude Sensitivity : %d\n", + p->sensitivity.pitch, p->sensitivity.amplitude); + for(int i=0; isensitivity.ampOn) printf("ON "); else printf("OFF "); + } + printf("\n"); + for(int i=0; isensitivity.egBias[i]); + printf("\n"); + for(int i=0; isensitivity.keyVelocity[i]); + printf("\n"); + for(int i=0; ifrequency[i].isFix) + printf("Freq%d : %f ",i+1, p->frequency[i].ratio); + else printf("Ratio%d : %f ",i+1, p->frequency[i].ratio); + } + printf("\n"); + for(int i=0; ioscWave[i]) + { + case(W1) : printf("W1 "); break; + case(W2) : printf("W2 "); break; + case(W3) : printf("W3 "); break; + case(W4) : printf("W4 "); break; + case(W5) : printf("W5 "); break; + case(W6) : printf("W6 "); break; + case(W7) : printf("W7 "); break; + case(W8) : printf("W8 "); break; + default : printf("No defined "); break; + } + } + printf("\n"); + for(int i=0; idetune[i]); + printf("\n"); + for(int i=0; ieg[i].ar, i+1, p->eg[i].d1r, + i+1, p->eg[i].d1l, i+1, p->eg[i].d2r, i+1, p->eg[i].rr, i+1); + switch(p->eg[i].egShift) + { + case(VOF) : printf("VOF"); + case(V48) : printf("48"); + case(V24) : printf("24"); + case(V12) : printf("12"); + } + printf("\n"); + } + printf("PitchEg pr1 : %d, pr2 : %d, pr3 : %d, pl1 : %d, pl2 : %d, pl3 : %d" + , p->pitchEg.pr1, p->pitchEg.pr2, p->pitchEg.pr3, + p->pitchEg.pl1, p->pitchEg.pl2, p->pitchEg.pl3); + printf("\n"); + for(int i=0; ioutLevel[i]); + printf("\n"); + printf("Name : %s\n", p->name.c_str()); +} + +void presetSet::printSubcategory() { + std::cout << " " << _subcategoryName << "\n"; + for(unsigned int i=0; i<_presetVector.size(); i++) + printPreset(_presetVector[i]); +} + +void subcategorySet::printCategory() { + std::cout << " " << _categoryName << "\n"; + for(unsigned int i=0; i<_subcategoryVector.size(); i++) + _subcategoryVector[i]->printSubcategory(); +} + +void categorySet::printBank() { + std::cout << _bankName << "\n"; + for(unsigned int i=0; i<_categoryVector.size(); i++) + _categoryVector[i]->printCategory(); +} + +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]); +} + +//--------------------------------------------------------------- +// 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 nBank, nPreset; + + _categorySet=new categorySet("Sutula Bank"); + Preset* presetTemp; + + nBank=0; + nPreset=0; + + QString presetPath(INSTPREFIX); + presetPath += "/share/muse/presets/deicsonze/ARCH_ALIN"; + + file = fopen (presetPath.latin1(), "rt"); + if (file == NULL) { + printf("can't open "); + printf("%s",presetPath.latin1()); + printf("\n"); + } + else + { + while(fgets(s, 500, file) && !strstr(s, "** Source:")) + { + if (strstr(s,"* CATEGORY")) + { + sscanf(s, "* CATEGORY %s", scategory); + _categorySet->_categoryVector + .push_back(new subcategorySet(scategory)); + } + if (strstr(s,"* SUBCATEGORY")) + { + sscanf(s, "* SUBCATEGORY %s", ssubcategory); + _categorySet->_categoryVector.back()->_subcategoryVector + .push_back(new presetSet(ssubcategory)); + } + } + while(!feof(file)) + { + _categorySet->_categoryVector.back()->_subcategoryVector.back() + ->_presetVector.push_back(new Preset); + presetTemp=_categorySet->_categoryVector.back() + ->_subcategoryVector.back()->_presetVector.back(); + /************* 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); + 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].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->subcategory=ssubcategory; + presetTemp->category=scategory; + presetTemp->bank=nBank; + 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); + _categorySet->_categoryVector + .push_back(new subcategorySet(scategory)); + } + if (strstr(s,"* SUBCATEGORY")) + { + sscanf(s, "* SUBCATEGORY %s", ssubcategory); + _categorySet->_categoryVector.back() + ->_subcategoryVector + .push_back(new presetSet(ssubcategory)); + } + if(strstr(s, "--Bank")) + { + nBank++; + nPreset=0; + } + } + } + } + //_categorySet->printBank(); + 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 minVoice=0; + double min=MAXVOLUME; + for(int i=0; i_voices[i].volume + && _voices[i].op[0].envState!=ATTACK + && _voices[i].op[1].envState!=ATTACK + && _voices[i].op[2].envState!=ATTACK + && _voices[i].op[3].envState!=ATTACK)?_voices[i].volume:min); + minVoice=(min==_voices[i].volume?i:minVoice); + } + return minVoice; +} + +//--------------------------------------------------------- +// noteOff2Voice +// return the number of the voice off, NBRVOICES otherwise +//--------------------------------------------------------- +int DeicsOnze::noteOff2Voice() +{ + int offVoice=NBRVOICES; + for(int i=0; ilfoIndex==0) + { + if(p_g->lfoDelayIndex<(double)(RESOLUTION/4)) + { + delayCoef=(double)wt[(int)p_g->lfoDelayIndex]; + p_g->lfoMaxCoefInct=exp((log(2.0)/12.0)*p_g->lfoPitch*delayCoef); + p_g->lfoCoefInctInct= + exp((log(2.0)/12.0)*((2*p_g->lfoPitch*delayCoef) + /p_g->lfoMaxIndex)); + p_g->lfoDelayIndex+=p_g->lfoDelayInct; + p_g->lfoMaxDAmp=delayCoef*p_g->lfoMaxAmp; + } + else + if(!p_g->delayPassed) + { + p_g->lfoMaxCoefInct=exp((log(2.0)/12.0)*p_g->lfoPitch); + p_g->lfoCoefInctInct= + exp((log(2.0)/12.0)*((2*p_g->lfoPitch)/p_g->lfoMaxIndex)); + p_g->delayPassed=true; + p_g->lfoMaxDAmp=p_g->lfoMaxDAmp; + } + } + + switch(p->lfo.wave) + { + case SAWUP : + if(p_g->lfoIndex==0) + { + p_g->lfoCoefInct=1.0/(p_g->lfoMaxCoefInct); + p_g->lfoCoefAmp=p_g->lfoMaxDAmp/(double)p_g->lfoMaxIndex; + p_g->lfoAmp=1.0; + } + else + { + p_g->lfoCoefInct*=p_g->lfoCoefInctInct; + p_g->lfoAmp-=p_g->lfoCoefAmp; + } + break; + case SQUARE : + if(p_g->lfoIndex==0) + { + p_g->lfoCoefInct=p_g->lfoMaxCoefInct; + p_g->lfoAmp=1.0; + } + if(p_g->lfoIndex==(p_g->lfoMaxIndex/2)) + { + p_g->lfoCoefInct=1.0/p_g->lfoMaxCoefInct; + p_g->lfoAmp=1.0-p_g->lfoMaxDAmp; + } + break; + case TRIANGL : + if(p_g->lfoIndex==0) + { + p_g->lfoCoefInct=1.0; + p_g->lfoCoefAmp=p_g->lfoMaxDAmp + /(double)(p_g->lfoMaxIndex/2); + p_g->lfoAmp=1.0-p_g->lfoMaxDAmp/2.0; + } + else if(p_g->lfoIndex<(p_g->lfoMaxIndex/4)) + { + p_g->lfoCoefInct*=p_g->lfoCoefInctInct; + p_g->lfoAmp-=p_g->lfoCoefAmp; + } + else if(p_g->lfoIndex<((3*p_g->lfoMaxIndex)/4)) + { + p_g->lfoCoefInct/=p_g->lfoCoefInctInct; + p_g->lfoAmp+=p_g->lfoCoefAmp; + } + else if(p_g->lfoIndexlfoMaxIndex) + { + p_g->lfoCoefInct*=p_g->lfoCoefInctInct; + p_g->lfoAmp-=p_g->lfoCoefAmp; + } + break; + case SHOLD : + if(p_g->lfoIndex==0||p_g->lfoIndex==(p_g->lfoMaxIndex/2)) + { + double r;//uniform random between -1.0 and 1.0 + r = (double)(2*rand()-RAND_MAX)/(double)RAND_MAX; + p_g->lfoCoefInct=(r>=0.0?1.0+r*(p_g->lfoMaxCoefInct-1.0) + :1.0/(1.0-r*(p_g->lfoMaxCoefInct-1.0))); + p_g->lfoAmp=1.0-(r/2.0+0.5)*p_g->lfoMaxDAmp; + } + break; + default : printf("Error : flo wave does not exist"); + break; + } + p_g->lfoIndex=(p_g->lfoIndexlfoMaxIndex?p_g->lfoIndex+1:0); + //printf("indexLfo : %d\n",p_g->indexLfo); +} + +//--------------------------------------------------------- +// 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); +} + +//--------------------------------------------------------- +// 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, int 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/(double)sr); + } +} + +//--------------------------------------------------------- +// envRR2coef +// return the coefficient for the exponential decrease +// with respect to rr and sampleRate, sr +//--------------------------------------------------------- +inline double envRR2coef(int rr, int sr) +{ + 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); + + //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/(double)sr); +} + + +//--------------------------------------------------------- +// 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(int 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 + { + //printf("DECAY\n"); + p_opVoice->envState=DECAY; + p_opVoice->envLevel=1.0; + p_opVoice->coefVLevel=envD1R2coef(eg.d1r, sr); + } + break; + case DECAY: + if (p_opVoice->envLevel>((double)eg.d1l/(double)MAXD1L)+COEFERRDECSUS) + { + p_opVoice->envLevel*=p_opVoice->coefVLevel; + } + else + { + //printf("SUSTAIN\n"); + p_opVoice->envState=SUSTAIN; + p_opVoice->envLevel=((double)eg.d1l/(double)MAXD1L); + p_opVoice->coefVLevel=envD1R2coef(eg.d2r, sr);//probably the same + } + break; + case SUSTAIN: + if (p_opVoice->envLevel>COEFERRSUSREL) + { + p_opVoice->envLevel*=p_opVoice->coefVLevel; + } + else + { + //printf("OFF\n"); + p_opVoice->envState=OFF; + p_opVoice->envLevel=0.0; + } + break; + case RELEASE: + if (p_opVoice->envLevel > COEFERRSUSREL) + { + p_opVoice->envLevel*=p_opVoice->coefVLevel; + } + else + { + p_opVoice->envState=OFF; + p_opVoice->envLevel=0.0; + } + break; + default: + printf("Error case envelopeState"); + /* fall thru */ + case OFF: + p_opVoice->envLevel = 0.0; + break; + } + return p_opVoice->envLevel; + + +} + +//--------------------------------------------------------- +// programSelect +//--------------------------------------------------------- + +void DeicsOnze::programSelect(int /*ch*/, int lbank, int prog) { + Preset* p_preset; + p_preset=findPreset(lbank, prog); + if (p_preset) _preset=p_preset; + else _preset->initPreset(); + setPreset(); +} + +//--------------------------------------------------------- +// setPitchBendCoef +//--------------------------------------------------------- + +void DeicsOnze::setPitchBendCoef(int /*ch*/, int val) { + _global.pitchBendCoef=exp(log(2) + *((double)_preset->function.pBendRange + /(double)MAXPBENDRANGE) + *((double)val/(double)MAXPITCHBENDVALUE)); +} + +//--------------------------------------------------------- +// setSustain +//--------------------------------------------------------- +void DeicsOnze::setSustain(int /*ch*/, int val) { + _global.sustain=(val>64); + if(!_global.sustain) + for(int i=0; ieg[j].rr + ,sampleRate()); + } + _voices[i].isSustained=false; + } +} + +//--------------------------------------------------------- +// setController +//--------------------------------------------------------- + +bool DeicsOnze::setController(int ch, int ctrl, int val) +{ + 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; + programSelect(ch, lbank, prog); + _gui->updatePreset(); + } + break; + case CTRL_PITCH: + setPitchBendCoef(ch, val); + break; + case CTRL_SUSTAIN: + setSustain(ch, val); + break; + default: + break; + } + return false; +} + +//--------------------------------------------------------- +// getPatchName +//--------------------------------------------------------- + +const char* DeicsOnze::getPatchName(int /*ch*/, int val, int, bool /*drum*/) const +{ + int prog = val & 0xff; + if(val == CTRL_VAL_UNKNOWN || prog == 0xff) + return ""; + prog &= 0x7f; + + 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; + const char* name=""; + p_preset=_categorySet->findPreset(lbank, prog); + if (p_preset) name=const_cast(p_preset->name.c_str()); + return name; +} + + +//--------------------------------------------------------- +// getPatchInfo +//--------------------------------------------------------- + +const MidiPatch* DeicsOnze::getPatchInfo(int /*ch*/, const MidiPatch* /*p*/) const +{ + /*if(_numPatcheg[i].rr + ,sampleRate()); + } + return false;} + //else printf("error over NBRVOICES\n"); + } + else //Note on + { + nO2V=noteOff2Voice(); + newVoice=((nO2V==NBRVOICES)?minVolu2Voice():nO2V); + + _voices[newVoice].isOn=true; + _voices[newVoice].sampleFeedback=0.0; + _voices[newVoice].pitch=pitch; + + /*if(_preset->lfo.sync)*/ _global.lfoIndex=0;//a revoir + _global.lfoDelayIndex=0.0; + _global.delayPassed=false; + + for(int i=0; ioutLevel[i]) + *velo2AmpR(velo, _preset->sensitivity.keyVelocity[i]) + *note2Amp((double)(pitch+_preset->function.transpose), + _preset->scaling.level[i]); + _voices[newVoice].op[i].index=0.0; + _voices[newVoice].op[i].freq= + (pitch2freq((double)_preset->globalDetune + /(double)MAXGLOBALDETUNE) + /LOWERNOTEFREQ)* + (_preset->frequency[i].isFix? + _preset->frequency[i].freq: + (_preset->frequency[i].ratio + *pitch2freq((double)(pitch+_preset->function.transpose) + +(double)_preset->detune[i]*COEFDETUNE))); + _voices[newVoice].op[i].inct=(double)RESOLUTION + /((double)sampleRate()/_voices[newVoice].op[i].freq); + _voices[newVoice].op[i].envState=ATTACK; + _voices[newVoice].op[i].envIndex=0.0; + _voices[newVoice].op[i].envInct=(_preset->eg[i].ar==0?0: + (double)(RESOLUTION/4) + /(envAR2s(_preset->eg[i].ar) + *(double)sampleRate())); + } + return false; + } + return false; +} + +//--------------------------------------------------------- +// plusMod +// add two doubles modulo SINRESOLUTION +//--------------------------------------------------------- +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) +{ + float* p = buffer[0] + offset; + float sample[NBRVOICES]; + float resSample; + float sampleOp[NBROP]; + float ampOp[NBROP]; + for(int i = 0; i < n; i++) + { + resSample = 0; + //stepProcess return the result to resSample + + //Global + lfoUpdate(_preset, &_global, waveTable[W2]); + + //per voice + for(int j=0; jsensitivity.ampOn[k]?_global.lfoAmp:1.0) + *env2AmpR(sampleRate(), waveTable[W2], + _preset->eg[k], &_voices[j].op[k]); + } + + switch(_preset->algorithm) + { + case FIRST : + sampleOp[3]=ampOp[3] + *waveTable[_preset->oscWave[3]] + [(int)plusMod(_voices[j].op[3].index, + (float)RESOLUTION + *_voices[j].sampleFeedback)]; + sampleOp[2]=ampOp[2] + *waveTable[_preset->oscWave[2]] + [(int)plusMod(_voices[j].op[2].index, + (float)RESOLUTION*sampleOp[3])]; + sampleOp[1]=ampOp[1] + *waveTable[_preset->oscWave[1]] + [(int)plusMod(_voices[j].op[1].index, + (float)RESOLUTION*sampleOp[2])]; + sampleOp[0]=ampOp[0] + *waveTable[_preset->oscWave[0]] + [(int)plusMod(_voices[j].op[0].index, + (float)RESOLUTION*sampleOp[1])]; + + sample[j]=sampleOp[0];///COEFLEVEL; + + _voices[j].isOn=(_voices[j].op[0].envState!=OFF); + break; + case SECOND : + sampleOp[3]=ampOp[3] + *waveTable[_preset->oscWave[3]] + [(int)plusMod(_voices[j].op[3].index, + (float)RESOLUTION + *_voices[j].sampleFeedback)]; + sampleOp[2]=ampOp[2] + *waveTable[_preset->oscWave[2]] + [(int)_voices[j].op[2].index]; + sampleOp[1]=ampOp[1] + *waveTable[_preset->oscWave[1]] + [(int)plusMod(_voices[j].op[1].index, + (float)RESOLUTION + *(sampleOp[2]+sampleOp[3])/2.0)]; + sampleOp[0]=ampOp[0] + *waveTable[_preset->oscWave[0]] + [(int)plusMod(_voices[j].op[0].index, + (float)RESOLUTION + *sampleOp[1])]; + + sample[j]=sampleOp[0];///COEFLEVEL; + + _voices[j].isOn=(_voices[j].op[0].envState!=OFF); + break; + case THIRD : + sampleOp[3]=ampOp[3] + *waveTable[_preset->oscWave[3]] + [(int)plusMod(_voices[j].op[3].index, + (float)RESOLUTION + *_voices[j].sampleFeedback)]; + sampleOp[2]=ampOp[2] + *waveTable[_preset->oscWave[2]] + [(int)_voices[j].op[2].index]; + sampleOp[1]=ampOp[1] + *waveTable[_preset->oscWave[1]] + [(int)plusMod(_voices[j].op[1].index, + (float)RESOLUTION*sampleOp[2])]; + sampleOp[0]=ampOp[0] + *waveTable[_preset->oscWave[0]] + [(int)plusMod(_voices[j].op[0].index, + (float)RESOLUTION + *(sampleOp[3]+sampleOp[1])/2.0)]; + + sample[j]=sampleOp[0];///COEFLEVEL; + + _voices[j].isOn=(_voices[j].op[0].envState!=OFF); + break; + case FOURTH : + sampleOp[3]=ampOp[3] + *waveTable[_preset->oscWave[3]] + [(int)plusMod(_voices[j].op[3].index, + (float)RESOLUTION + *_voices[j].sampleFeedback)]; + sampleOp[2]=ampOp[2] + *waveTable[_preset->oscWave[2]] + [(int)plusMod(_voices[j].op[2].index, + (float)RESOLUTION + *sampleOp[3])]; + sampleOp[1]=ampOp[1] + *waveTable[_preset->oscWave[1]] + [(int)_voices[j].op[1].index]; + sampleOp[0]=ampOp[0] + *waveTable[_preset->oscWave[0]] + [(int)plusMod(_voices[j].op[0].index, + (float)RESOLUTION + *(sampleOp[1]+sampleOp[2])/2.0)]; + + sample[j]=sampleOp[0];///COEFLEVEL; + + _voices[j].isOn=(_voices[j].op[0].envState!=OFF); + break; + case FIFTH : + sampleOp[3]=ampOp[3] + *waveTable[_preset->oscWave[3]] + [(int)plusMod(_voices[j].op[3].index, + (float)RESOLUTION + *_voices[j].sampleFeedback)]; + sampleOp[2]=ampOp[2] + *waveTable[_preset->oscWave[2]] + [(int)plusMod(_voices[j].op[2].index, + (float)RESOLUTION*sampleOp[3])]; + sampleOp[1]=ampOp[1] + *waveTable[_preset->oscWave[1]] + [(int)_voices[j].op[1].index]; + sampleOp[0]=ampOp[0] + *waveTable[_preset->oscWave[0]] + [(int)plusMod(_voices[j].op[0].index, + (float)RESOLUTION*sampleOp[1])]; + + sample[j]=(sampleOp[0]+sampleOp[2])/2.0;///COEFLEVEL; + + _voices[j].isOn=(_voices[j].op[0].envState!=OFF + ||_voices[j].op[2].envState!=OFF); + break; + case SIXTH : + sampleOp[3]=ampOp[3] + *waveTable[_preset->oscWave[3]] + [(int)plusMod(_voices[j].op[3].index, + (float)RESOLUTION + *_voices[j].sampleFeedback)]; + sampleOp[2]=ampOp[2] + *waveTable[_preset->oscWave[2]] + [(int)plusMod(_voices[j].op[2].index, + (float)RESOLUTION*sampleOp[3])]; + sampleOp[1]=ampOp[1] + *waveTable[_preset->oscWave[1]] + [(int)plusMod(_voices[j].op[1].index, + (float)RESOLUTION*sampleOp[3])]; + sampleOp[0]=ampOp[0] + *waveTable[_preset->oscWave[0]] + [(int)plusMod(_voices[j].op[0].index, + (float)RESOLUTION*sampleOp[3])]; + + sample[j]=(sampleOp[0]+sampleOp[1]+sampleOp[2])/3.0; + + _voices[j].isOn=(_voices[j].op[0].envState!=OFF); + break; + case SEVENTH : + sampleOp[3]=ampOp[3] + *waveTable[_preset->oscWave[3]] + [(int)plusMod(_voices[j].op[3].index, + (float)RESOLUTION + *_voices[j].sampleFeedback)]; + sampleOp[2]=ampOp[2] + *waveTable[_preset->oscWave[2]] + [(int)plusMod(_voices[j].op[2].index, + (float)RESOLUTION*sampleOp[3])]; + sampleOp[1]=ampOp[1] + *waveTable[_preset->oscWave[1]] + [(int)_voices[j].op[1].index]; + sampleOp[0]=ampOp[0]*waveTable[_preset->oscWave[3]] + [(int)_voices[j].op[0].index]; + + sample[j]=(sampleOp[0]+sampleOp[1]+sampleOp[2])/3.0; + + _voices[j].isOn=(_voices[j].op[0].envState!=OFF); + break; + case EIGHTH : + sampleOp[3]=ampOp[3] + *waveTable[_preset->oscWave[3]] + [(int)plusMod(_voices[j].op[3].index, + (float)RESOLUTION + *_voices[j].sampleFeedback)]; + sampleOp[2]=ampOp[2] + *waveTable[_preset->oscWave[3]] + [(int)_voices[j].op[2].index]; + sampleOp[1]=ampOp[1] + *waveTable[_preset->oscWave[3]] + [(int)_voices[j].op[1].index]; + sampleOp[0]=ampOp[0] + *waveTable[_preset->oscWave[3]] + [(int)_voices[j].op[0].index]; + + sample[j]= + (sampleOp[0]+sampleOp[1]+sampleOp[2]+sampleOp[3]) + /4.0; + + _voices[j].isOn=(_voices[j].op[0].envState!=OFF + || _voices[j].op[1].envState!=OFF + || _voices[j].op[2].envState!=OFF + || _voices[j].op[3].envState!=OFF); + break; + default : printf("Error : No algorithm"); + + sampleOp[3]= sampleOp[2]= sampleOp[1]= sampleOp[0]=0; //prevent unitialiazed use of variable + break; + } + + _voices[j].volume= + ampOp[0]+ampOp[1]+ampOp[2]+ampOp[3]; + + _voices[j].sampleFeedback=sampleOp[3]*_global.feedbackAmp; + + resSample += sample[j]; + } + } + p[i] += resSample*_global.amp; + } +} + +//--------------------------------------------------------- +// processEvent +// All events from the sequencer go here +//--------------------------------------------------------- +bool DeicsOnze::processEvent(const MidiPlayEvent& ev) +{ + switch(ev.type()) { + case ME_CONTROLLER: + setController(ev.channel(), ev.dataA(), ev.dataB()); + return true; + 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_PITCHBEND: + setController(ev.channel(), CTRL_PITCH, ev.dataA()); + break; + case ME_PROGRAM: + setController(ev.channel(), CTRL_PROGRAM, ev.dataA()); + break; + default: + break; + } + return false; +} + +//--------------------------------------------------------- +// inst +//--------------------------------------------------------- + +class QWidget; + +static Mess* instantiate(int sr, QWidget*, QString* projectPathPtr, const char*) +{ + DeicsOnze* deicsonze = new DeicsOnze(); + deicsonze->setSampleRate(sr); + return deicsonze; +} + +extern "C" { + static MESS descriptor = { + "DeicsOnze", + "DeicsOnze FM DX11 emulator", + "0.2.2", // version string + MESS_MAJOR_VERSION, MESS_MINOR_VERSION, + instantiate + }; + + const MESS* mess_descriptor() { return &descriptor; } +} + diff --git a/muse2/synti/deicsonze/deicsonze.h b/muse2/synti/deicsonze/deicsonze.h new file mode 100644 index 00000000..3dd57a70 --- /dev/null +++ b/muse2/synti/deicsonze/deicsonze.h @@ -0,0 +1,462 @@ +//=========================================================================== +// +// DeicsOnze an emulator of the YAMAHA DX11 synthesizer +// +// Version 0.2.2 +// +// +// +// +// Copyright (c) 2004 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 +#include + +#include "deicsonzegui.h" +#include "libsynti/mess.h" + +// #define PRESETPATH "/home/a-lin/sources/muse-0.7.0/synti/deicsonze/ARCH_ALIN" + +#define MAXPITCHBENDVALUE 8191 + +#define RESOLUTION 96000 + +#define NBRBANKS 19 +#define NBRPRESETS 128 + +#define LOWERNOTEFREQ 8.176 + +#define DB0LEVEL 90 + +#define MAXFEEDBACK 7 +#define MAXSPEED 99 +#define MAXDELAY 99 +#define MAXPMODDEPTH 99 +#define MAXAMODDEPTH 99 +#define MAXSENSPITCH 7 +#define MAXKVS 7 +#define MAXAR 31 +#define MAXD1R 31 +#define MAXD1L 15 +#define MAXD2R 31 +#define MAXOUTLEVEL 99 +#define MAXRR 15 +#define MAXRATE 3 +#define MAXPBENDRANGE 12 +#define MAXPROTATIME 99 +#define MAXFCVOLUME 99 +#define MAXFCPITCH 99 +#define MAXFCAMPLITUDE 99 +#define MAXMWPITCH 99 +#define MAXMWAMPLITUDE 99 +#define MAXBCPITCH 99 +#define MAXBCAMPLITUDE 99 +#define MAXBCEGBIAS 50 +#define LENGTHNAME 20 +#define LENGTHCATEGORY 20 +#define LENGTHSUBCATEGORY 20 + +#define MAXGLOBALDETUNE 15 +#define MAXVELO 127 +#define MAXVOLUME 100.0 + +#define MAXMASTERVOL 255 + +//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 COEFLEVEL 1.0//19.0 +#define COEFMAXATTACK 7.5 +#define COEFERRDECSUS 0.01 //for the transition between DECAY and SUSTAIN +#define COEFERRSUSREL 0.001 //from SUSTAIN or RELEASE until no sound +#define COEFDECAY 1.0 +#define COEFSUSTAIN 0.2 +#define COEFRELEASE 1.0 +#define COEFDETUNE 0.008 +#define COEFLEVELSCALE 0.0005 +#define LEVELSCALENOTE 24.0 + +#define NBROP 4 //do not change +#define NBRWAVES 8 //number wave forms, do not change +#define NBRBANKPRESETS 32 +#define NBRVOICES 8 + + +//--------------------------------------------------------- +// 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; +}; + +//--------------------------------------------------------- +// Frequency +//--------------------------------------------------------- +struct Frequency { + double ratio; + bool isFix; //if isFix no ratio but frequency + double freq; +}; + +//--------------------------------------------------------- +// 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 +}; + +//--------------------------------------------------------- +// 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: + //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; //-15 to 15 + std::string name;//char name[LENGTHNAME+1]; + std::string subcategory;//char subcategory[LENGTHSUBCATEGORY+1]; + std::string category;//char category[LENGTHCATEGORY+1]; + int bank; //0 to 127 + int prog; //0 to 127 + //Methods + void initPreset(); + //constructor + //Preset(Preset* p_preset) {_preset=*p_preset;} + //~Preset(); +}; + + +//--------------------------------------------------------- +// EnvState +//--------------------------------------------------------- + +enum EnvState{ + ATTACK, + DECAY, + SUSTAIN, + RELEASE, + OFF +}; + +//--------------------------------------------------------- +// OpVoice +//--------------------------------------------------------- + +struct OpVoice { + double freq; + double index; + double inct; + double amp; //between 0 and 1 + EnvState envState; + double envIndex; + double envInct; + double envLevel; + double coefVLevel; +}; + +//--------------------------------------------------------- +// Voice +//--------------------------------------------------------- + +struct Voice { + bool isOn; + bool isSustained; + int pitch; + double volume; + OpVoice op[NBROP]; + float sampleFeedback; +}; + +//--------------------------------------------------------- +// Global +//--------------------------------------------------------- + +struct Global { + float amp; + 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 +}; + +//--------------------------------------------------------------- +// Bank, organized by a tree of category, subcategory, preset +//--------------------------------------------------------------- +class presetSet { + public: + std::string _subcategoryName; + std::vector _presetVector; + Preset* findPreset(int lbank, int prog); + void printSubcategory(); + presetSet(std::string name){_subcategoryName=name;} + ~presetSet(){}; +}; + +class subcategorySet { + public: + std::string _categoryName; + std::vector _subcategoryVector; + presetSet* findPresetSet(std::string s); + Preset* findPreset(int lbank, int prog); + void printCategory(); + subcategorySet(const std::string name){_categoryName=name;} + ~subcategorySet(){}; +}; + +class categorySet { + public: + std::string _bankName; + std::vector _categoryVector; + Preset* findPreset(int lbank, int prog); + subcategorySet* findSubcategorySet(std::string s); + void printBank(); + categorySet(const std::string name){_bankName=name;} + ~categorySet(){}; +}; + +//--------------------------------------------------------- +// DeicsOnze : DX11 emulator +//--------------------------------------------------------- + +class DeicsOnze : public Mess { + DeicsOnzeGui* _gui; + + static int useCount; + static float waveTable[NBRWAVES][RESOLUTION]; + + public: + + Global _global; + Voice _voices[NBRVOICES]; + Preset* _preset; + + mutable MidiPatch _patch; + int _numPatch; + + //preset tree + categorySet* _categorySet; + + /*subcategorySet* findSubcategorySet(std::string s);*/ + Preset* findPreset(int lbank, int prog); + void initGlobal(); + void initVoices(); + void initPreset(); + void setPreset(); + void setFeedback(); + void setLfo(); + void loadSutulaPresets(); + int noteOff2Voice(); + int minVolu2Voice(); + int pitchOn2Voice(int pitch); + void programSelect(int ch, int lbank, int prog); + + void setPitchBendCoef(int ch, int val); + void setSustain(int ch, int val); + virtual bool setController(int ch, int ctrl, int val); + virtual const char* getPatchName(int ch, int number, int, bool) const; + virtual const MidiPatch* getPatchInfo(int, const MidiPatch *) const; + virtual bool playNote(int channel, int pitch, int velo); + //virtual void processMessages(); + virtual void process(float** buffer, int offset, int n); + + virtual bool processEvent(const MidiPlayEvent&); + // 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); + + void setMasterVol(int mv); + int getMasterVol(); + + DeicsOnze(); + ~DeicsOnze(); +}; + + +#endif /* __DEICSONZE_H */ diff --git a/muse2/synti/deicsonze/deicsonzegui.cpp b/muse2/synti/deicsonze/deicsonzegui.cpp new file mode 100644 index 00000000..da293df9 --- /dev/null +++ b/muse2/synti/deicsonze/deicsonzegui.cpp @@ -0,0 +1,720 @@ +//=========================================================================== +// +// DeicsOnze an emulator of the YAMAHA DX11 synthesizer +// +// Version 0.2.2 +// +// deicsonzegui.cpp +// +// +// Copyright (c) 2004 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 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "newpreset.h" +#include "deicsonzegui.h" +#include "deicsonze.h" + +DeicsOnzeGui::DeicsOnzeGui(DeicsOnze* deicsOnze) + : DeicsOnzeGuiBase(0, "deicsOnzeGui"), + MessGui() +{ + this->setFixedWidth(470); + this->setFixedHeight(358); + _deicsOnze = deicsOnze; + lastDir= ""; + connect(newPushButton, SIGNAL(clicked()), + this, SLOT(newPresetDialogue())); + connect(deletePushButton, SIGNAL(clicked()), + this, SLOT(deletePresetDialogue())); + connect(loadPushButton, SIGNAL(clicked()), + this, SLOT(loadPresetsDialogue())); + connect(savePushButton, SIGNAL(clicked()), + this, SLOT(savePresetsDialogue())); + //Preset and bank + connect(nameLineEdit, SIGNAL(textChanged(const QString&)), + this, SLOT(setName(const QString&))); + connect(subcategoryLineEdit, SIGNAL(textChanged(const QString&)), + this, SLOT(setSubcategory(const QString&))); + connect(categoryLineEdit, SIGNAL(textChanged(const QString&)), + this, SLOT(setCategory(const QString&))); + connect(bankSpinBox, SIGNAL(valueChanged(int)), this, SLOT(setBank(int))); + connect(progSpinBox, SIGNAL(valueChanged(int)), this, SLOT(setProg(int))); + //Global + connect(masterVolSlider, SIGNAL(valueChanged(int)), + this, SLOT(setMasterVol(int))); + connect(feedbackSlider, SIGNAL(valueChanged(int)), + this, SLOT(setFeedback(int))); + connect(LFOWaveComboBox, SIGNAL(activated(const QString&)), + this, SLOT(setLfoWave(const QString&))); + 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(globalDetuneSlider, SIGNAL(valueChanged(int)), + this, SLOT(setGlobalDetune(int))); + connect(algorithmComboBox, SIGNAL(activated(const QString&)), + this, SLOT(setAlgorithm(const QString&))); + connect(PitchBendRangeSlider, SIGNAL(valueChanged(int)), + this, SLOT(setPitchBendRange(int))); + //envelope + connect(AR1Slider, SIGNAL(valueChanged(int)), this, SLOT(setAR1(int))); + connect(D1R1Slider, SIGNAL(valueChanged(int)), this, SLOT(setD1R1(int))); + connect(D1L1Slider, SIGNAL(valueChanged(int)), this, SLOT(setD1L1(int))); + connect(D2R1Slider, SIGNAL(valueChanged(int)), this, SLOT(setD2R1(int))); + connect(RR1Slider, SIGNAL(valueChanged(int)), this, SLOT(setRR1(int))); + connect(AR2Slider, SIGNAL(valueChanged(int)), this, SLOT(setAR2(int))); + connect(D1R2Slider, SIGNAL(valueChanged(int)), this, SLOT(setD1R2(int))); + connect(D1L2Slider, SIGNAL(valueChanged(int)), this, SLOT(setD1L2(int))); + connect(D2R2Slider, SIGNAL(valueChanged(int)), this, SLOT(setD2R2(int))); + connect(RR2Slider, SIGNAL(valueChanged(int)), this, SLOT(setRR2(int))); + connect(AR3Slider, SIGNAL(valueChanged(int)), this, SLOT(setAR3(int))); + connect(D1R3Slider, SIGNAL(valueChanged(int)), this, SLOT(setD1R3(int))); + connect(D1L3Slider, SIGNAL(valueChanged(int)), this, SLOT(setD1L3(int))); + connect(D2R3Slider, SIGNAL(valueChanged(int)), this, SLOT(setD2R3(int))); + connect(RR3Slider, SIGNAL(valueChanged(int)), this, SLOT(setRR3(int))); + connect(AR4Slider, SIGNAL(valueChanged(int)), this, SLOT(setAR4(int))); + connect(D1R4Slider, SIGNAL(valueChanged(int)), this, SLOT(setD1R4(int))); + connect(D1L4Slider, SIGNAL(valueChanged(int)), this, SLOT(setD1L4(int))); + connect(D2R4Slider, SIGNAL(valueChanged(int)), this, SLOT(setD2R4(int))); + connect(RR4Slider, 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(Vol1Slider, SIGNAL(valueChanged(int)), this, SLOT(setVol1(int))); + connect(Vol2Slider, SIGNAL(valueChanged(int)), this, SLOT(setVol2(int))); + connect(Vol3Slider, SIGNAL(valueChanged(int)), this, SLOT(setVol3(int))); + connect(Vol4Slider, 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(const QString&)), + this, SLOT(setWaveForm1(const QString&))); + connect(WaveForm2ComboBox, SIGNAL(activated(const QString&)), + this, SLOT(setWaveForm2(const QString&))); + connect(WaveForm3ComboBox, SIGNAL(activated(const QString&)), + this, SLOT(setWaveForm3(const QString&))); + connect(WaveForm4ComboBox, SIGNAL(activated(const QString&)), + this, SLOT(setWaveForm4(const QString&))); + //category subcategory preset + connect(categoryListView, SIGNAL(currentChanged(Q3ListViewItem*)), + this, SLOT(setSubcategorySet(Q3ListViewItem*))); + connect(categoryListView, SIGNAL(clicked(Q3ListViewItem*)), + this, SLOT(setSubcategorySet(Q3ListViewItem*))); + connect(subcategoryListView, SIGNAL(currentChanged(Q3ListViewItem*)), + this, SLOT(setPresetSet(Q3ListViewItem*))); + connect(subcategoryListView, SIGNAL(clicked(Q3ListViewItem*)), + this, SLOT(setPresetSet(Q3ListViewItem*))); + connect(presetsListView, SIGNAL(currentChanged(Q3ListViewItem*)), + this, SLOT(setPreset(Q3ListViewItem*))); + connect(presetsListView, SIGNAL(clicked(Q3ListViewItem*)), + this, SLOT(setPreset(Q3ListViewItem*))); + + + for(unsigned int i=0; i<_deicsOnze->_categorySet->_categoryVector.size(); + i++) + (void) new QListViewItemCategory + (categoryListView, _deicsOnze->_categorySet->_categoryVector[i] + ->_categoryName.c_str(), _deicsOnze->_categorySet->_categoryVector[i]); + + // work around for probable QT/WM interaction bug. + // for certain window managers, e.g xfce, this window is + // is displayed although not specifically set to show(); + // bug: 2811156 Softsynth GUI unclosable with XFCE4 (and a few others) + show(); + hide(); +}; + + +//----------------------------------------------------------- +// newPresetsDialogue +//----------------------------------------------------------- +void DeicsOnzeGui::newPresetDialogue() { + NewPreset* newpreset = new NewPreset(0, "newPreset"); + if(_currentQLVICategory) + newpreset->categoryNPLineEdit->setText(_currentQLVICategory + ->_c->_categoryName.c_str()); + if(_currentQLVISubcategory) + newpreset->subcategoryNPLineEdit->setText(_currentQLVISubcategory + ->_s->_subcategoryName.c_str()); + + if(QDialog::Accepted==newpreset->exec()) { + std::string std_s = newpreset->categoryNPLineEdit->text().ascii(); + subcategorySet* subcatS = _deicsOnze->_categorySet + ->findSubcategorySet(std_s); + if(subcatS) { + std::string std_s_2 = newpreset->subcategoryNPLineEdit + ->text().ascii(); + presetSet* preS = subcatS->findPresetSet(std_s_2); + if(preS) { + preS->_presetVector.push_back(new Preset()); + Preset* presetTemp=preS->_presetVector.back(); + + presetTemp->initPreset(); + presetTemp->name=newpreset->nameNPLineEdit->text().ascii(); + presetTemp->subcategory= + newpreset->subcategoryNPLineEdit->text().ascii(); + presetTemp->category= + newpreset->categoryNPLineEdit->text().ascii(); + presetTemp->bank=newpreset->bankNPSpinBox->value()-1; + presetTemp->prog=newpreset->progNPSpinBox->value()-1; + } + } + } +} +//----------------------------------------------------------- +// deletePresetsDialogue +//----------------------------------------------------------- +void DeicsOnzeGui::deletePresetDialogue() { + std::vector::iterator i=_currentQLVIPreset->i_p; + if(!QMessageBox::question( + this, + tr("Delete preset"), + tr("Do you really want to delete %1 ?").arg((*i)->name.c_str()), + tr("&Yes"), tr("&No"), + QString::null, 0, 1 )) + { + //delete(_currentQLVIPreset->_p); + delete(_currentQLVIPreset); + _currentQLVISubcategory->_s->_presetVector.erase(i); + } +} +//----------------------------------------------------------- +// loadPresetsDialogue +//----------------------------------------------------------- +void DeicsOnzeGui::loadPresetsDialogue() { + QString filename = + Q3FileDialog::getOpenFileName(lastDir, + QString("*.dei"), + this, + "Load presets dialog","Choose presets"); +} +//----------------------------------------------------------- +// savePresetsDialogue +//----------------------------------------------------------- +void DeicsOnzeGui::savePresetsDialogue() { + QString filename = + Q3FileDialog::getSaveFileName(lastDir, + QString("*.dei"), + this, + "Save presets dialog","Choose file"); +} +//----------------------------------------------------------- +// Preset and bank +//----------------------------------------------------------- +void DeicsOnzeGui::setName(const QString& n) { + _deicsOnze->_preset->name=n.ascii(); +} +void DeicsOnzeGui::setSubcategory(const QString& s) { + _deicsOnze->_preset->subcategory=s.ascii(); +} +void DeicsOnzeGui::setCategory(const QString& c) { + _deicsOnze->_preset->category=c.ascii(); +} +void DeicsOnzeGui::setBank(int b) {_deicsOnze->_preset->bank=b-1;} +void DeicsOnzeGui::setProg(int p) {_deicsOnze->_preset->prog=p-1;} + +//----------------------------------------------------------- +// Global controle +//----------------------------------------------------------- +void DeicsOnzeGui::setMasterVol(int mv) { + _deicsOnze->setMasterVol(mv); +} + +void DeicsOnzeGui::setFeedback(int f) { + _deicsOnze->_preset->feedback=f; + _deicsOnze->setFeedback(); +} + +void DeicsOnzeGui::setLfoWave(const QString& qs) { + _deicsOnze->_preset->lfo.wave= + ((operator==(qs,"Saw Up")?SAWUP: + (operator==(qs,"Square")?SQUARE: + (operator==(qs,"Triangl")?TRIANGL:SHOLD)))); + _deicsOnze->setLfo(); +} + +void DeicsOnzeGui::setLfoSpeed(int ls) { + _deicsOnze->_preset->lfo.speed=ls; + _deicsOnze->setLfo(); +} + +void DeicsOnzeGui::setLfoDelay(int ld) { + _deicsOnze->_preset->lfo.delay=ld; + _deicsOnze->setLfo(); +} + +void DeicsOnzeGui::setLfoPModDepth(int lpmd) { + _deicsOnze->_preset->lfo.pModDepth=lpmd; + _deicsOnze->setLfo(); +} + +void DeicsOnzeGui::setLfoPitchSens(int lps) { + _deicsOnze->_preset->sensitivity.pitch=lps; + _deicsOnze->setLfo(); +} + +void DeicsOnzeGui::setLfoAModDepth(int lamd) { + _deicsOnze->_preset->lfo.aModDepth=lamd; + _deicsOnze->setLfo(); +} + +void DeicsOnzeGui::setLfoAmpSens(int las) { + _deicsOnze->_preset->sensitivity.amplitude=las; + _deicsOnze->setLfo(); +} + +void DeicsOnzeGui::setTranspose(int t) { + _deicsOnze->_preset->function.transpose=t; +} + +void DeicsOnzeGui::setGlobalDetune(int gd) { + _deicsOnze->_preset->globalDetune=gd; +} + +void DeicsOnzeGui::setAlgorithm(const QString& a) { + _deicsOnze->_preset->algorithm= + ((operator==(a,"Algorithm 1")?FIRST: + (operator==(a,"Algorithm 2")?SECOND: + (operator==(a,"Algorithm 3")?THIRD: + (operator==(a, "Algorithm 4")?FOURTH: + (operator==(a, "Algorithm 5")?FIFTH: + (operator==(a, "Algorithm 6")?SIXTH: + (operator==(a, "Algorithm 7")?SEVENTH:EIGHTH)))))))); +} + +void DeicsOnzeGui::setPitchBendRange(int pbr) { + _deicsOnze->_preset->function.pBendRange=pbr; +} + +//--------------------------------------------------------------- +// envelope controle +//--------------------------------------------------------------- +void DeicsOnzeGui::setAR1(int val){_deicsOnze->_preset->eg[0].ar=val;} +void DeicsOnzeGui::setD1R1(int val){_deicsOnze->_preset->eg[0].d1r=val;} +void DeicsOnzeGui::setD1L1(int val){_deicsOnze->_preset->eg[0].d1l=val;} +void DeicsOnzeGui::setD2R1(int val){_deicsOnze->_preset->eg[0].d2r=val;} +void DeicsOnzeGui::setRR1(int val){_deicsOnze->_preset->eg[0].rr=val;} +void DeicsOnzeGui::setAR2(int val){_deicsOnze->_preset->eg[1].ar=val;} +void DeicsOnzeGui::setD1R2(int val){_deicsOnze->_preset->eg[1].d1r=val;} +void DeicsOnzeGui::setD1L2(int val){_deicsOnze->_preset->eg[1].d1l=val;} +void DeicsOnzeGui::setD2R2(int val){_deicsOnze->_preset->eg[1].d2r=val;} +void DeicsOnzeGui::setRR2(int val){_deicsOnze->_preset->eg[1].rr=val;} +void DeicsOnzeGui::setAR3(int val){_deicsOnze->_preset->eg[2].ar=val;} +void DeicsOnzeGui::setD1R3(int val){_deicsOnze->_preset->eg[2].d1r=val;} +void DeicsOnzeGui::setD1L3(int val){_deicsOnze->_preset->eg[2].d1l=val;} +void DeicsOnzeGui::setD2R3(int val){_deicsOnze->_preset->eg[2].d2r=val;} +void DeicsOnzeGui::setRR3(int val){_deicsOnze->_preset->eg[2].rr=val;} +void DeicsOnzeGui::setAR4(int val){_deicsOnze->_preset->eg[3].ar=val;} +void DeicsOnzeGui::setD1R4(int val){_deicsOnze->_preset->eg[3].d1r=val;} +void DeicsOnzeGui::setD1L4(int val){_deicsOnze->_preset->eg[3].d1l=val;} +void DeicsOnzeGui::setD2R4(int val){_deicsOnze->_preset->eg[3].d2r=val;} +void DeicsOnzeGui::setRR4(int val){_deicsOnze->_preset->eg[3].rr=val;} + +//-------------------------------------------------------------- +// set Scaling +//-------------------------------------------------------------- +void DeicsOnzeGui::setLS1(int val){_deicsOnze->_preset->scaling.level[0]=val;} +void DeicsOnzeGui::setRS1(int val){_deicsOnze->_preset->scaling.rate[0]=val;} +void DeicsOnzeGui::setLS2(int val){_deicsOnze->_preset->scaling.level[1]=val;} +void DeicsOnzeGui::setRS2(int val){_deicsOnze->_preset->scaling.rate[1]=val;} +void DeicsOnzeGui::setLS3(int val){_deicsOnze->_preset->scaling.level[2]=val;} +void DeicsOnzeGui::setRS3(int val){_deicsOnze->_preset->scaling.rate[2]=val;} +void DeicsOnzeGui::setLS4(int val){_deicsOnze->_preset->scaling.level[3]=val;} +void DeicsOnzeGui::setRS4(int val){_deicsOnze->_preset->scaling.rate[3]=val;} + +//-------------------------------------------------------------- +// set Volume +//-------------------------------------------------------------- +void DeicsOnzeGui::setVol1(int val){_deicsOnze->_preset->outLevel[0]=val;} +void DeicsOnzeGui::setVol2(int val){_deicsOnze->_preset->outLevel[1]=val;} +void DeicsOnzeGui::setVol3(int val){_deicsOnze->_preset->outLevel[2]=val;} +void DeicsOnzeGui::setVol4(int val){_deicsOnze->_preset->outLevel[3]=val;} + +//-------------------------------------------------------------- +// set Ratio and Frequency +//-------------------------------------------------------------- +void DeicsOnzeGui::setCoarseRatio1(int val) { + double intf, decf; + decf=modf(_deicsOnze->_preset->frequency[0].ratio, &intf); + _deicsOnze->_preset->frequency[0].ratio=(double)val+decf; +} +void DeicsOnzeGui::setFineRatio1(int val) { + double intf, decf; + decf=modf(_deicsOnze->_preset->frequency[0].ratio, &intf); + _deicsOnze->_preset->frequency[0].ratio=intf+0.01*(double)val; +} +void DeicsOnzeGui::setFreq1(int val) { + _deicsOnze->_preset->frequency[0].freq=(double)val;} +void DeicsOnzeGui::setFix1(bool f) { + _deicsOnze->_preset->frequency[0].isFix=f;} +void DeicsOnzeGui::setCoarseRatio2(int val) { + double intf, decf; + decf=modf(_deicsOnze->_preset->frequency[1].ratio, &intf); + _deicsOnze->_preset->frequency[1].ratio=(double)val+decf; +} +void DeicsOnzeGui::setFineRatio2(int val) { + double intf, decf; + decf=modf(_deicsOnze->_preset->frequency[1].ratio, &intf); + _deicsOnze->_preset->frequency[1].ratio=intf+0.01*(double)val; +} +void DeicsOnzeGui::setFreq2(int val) { + _deicsOnze->_preset->frequency[1].freq=(double)val;} +void DeicsOnzeGui::setFix2(bool f) { + _deicsOnze->_preset->frequency[1].isFix=f;} +void DeicsOnzeGui::setCoarseRatio3(int val) { + double intf, decf; + decf=modf(_deicsOnze->_preset->frequency[2].ratio, &intf); + _deicsOnze->_preset->frequency[2].ratio=(double)val+decf; +} +void DeicsOnzeGui::setFineRatio3(int val) { + double intf, decf; + decf=modf(_deicsOnze->_preset->frequency[2].ratio, &intf); + _deicsOnze->_preset->frequency[2].ratio=intf+0.01*(double)val; +} +void DeicsOnzeGui::setFreq3(int val) { + _deicsOnze->_preset->frequency[2].freq=(double)val;} +void DeicsOnzeGui::setFix3(bool f) { + _deicsOnze->_preset->frequency[2].isFix=f;} +void DeicsOnzeGui::setCoarseRatio4(int val) { + double intf, decf; + decf=modf(_deicsOnze->_preset->frequency[3].ratio, &intf); + _deicsOnze->_preset->frequency[3].ratio=(double)val+decf; +} +void DeicsOnzeGui::setFineRatio4(int val) { + double intf, decf; + decf=modf(_deicsOnze->_preset->frequency[3].ratio, &intf); + _deicsOnze->_preset->frequency[3].ratio=intf+0.01*(double)val; +} +void DeicsOnzeGui::setFreq4(int val) { + _deicsOnze->_preset->frequency[3].freq=(double)val;} +void DeicsOnzeGui::setFix4(bool f) { + _deicsOnze->_preset->frequency[3].isFix=f;} + +//-------------------------------------------------------------- +// set Sensitivity +//-------------------------------------------------------------- +void DeicsOnzeGui::setAME1(bool val) { + _deicsOnze->_preset->sensitivity.ampOn[0]=val;} +void DeicsOnzeGui::setEBS1(int val) { + _deicsOnze->_preset->sensitivity.egBias[0]=val;} +void DeicsOnzeGui::setKVS1(int val) { + _deicsOnze->_preset->sensitivity.keyVelocity[0]=val;} +void DeicsOnzeGui::setAME2(bool val) { + _deicsOnze->_preset->sensitivity.ampOn[1]=val;} +void DeicsOnzeGui::setEBS2(int val) { + _deicsOnze->_preset->sensitivity.egBias[1]=val;} +void DeicsOnzeGui::setKVS2(int val) { + _deicsOnze->_preset->sensitivity.keyVelocity[1]=val;} +void DeicsOnzeGui::setAME3(bool val) { + _deicsOnze->_preset->sensitivity.ampOn[2]=val;} +void DeicsOnzeGui::setEBS3(int val) { + _deicsOnze->_preset->sensitivity.egBias[2]=val;} +void DeicsOnzeGui::setKVS3(int val) { + _deicsOnze->_preset->sensitivity.keyVelocity[2]=val;} +void DeicsOnzeGui::setAME4(bool val) { + _deicsOnze->_preset->sensitivity.ampOn[3]=val;} +void DeicsOnzeGui::setEBS4(int val) { + _deicsOnze->_preset->sensitivity.egBias[3]=val;} +void DeicsOnzeGui::setKVS4(int val) { + _deicsOnze->_preset->sensitivity.keyVelocity[3]=val;} + +//-------------------------------------------------------------- +// set detune +//-------------------------------------------------------------- +void DeicsOnzeGui::setDET1(int val){_deicsOnze->_preset->detune[0]=val;} +void DeicsOnzeGui::setDET2(int val){_deicsOnze->_preset->detune[1]=val;} +void DeicsOnzeGui::setDET3(int val){_deicsOnze->_preset->detune[2]=val;} +void DeicsOnzeGui::setDET4(int val){_deicsOnze->_preset->detune[3]=val;} + +//-------------------------------------------------------------- +// set WaveForm +//-------------------------------------------------------------- +void DeicsOnzeGui::setWaveForm1(const QString& a) { + _deicsOnze->_preset->oscWave[0]= + ((operator==(a,"Wave1")?W1: + (operator==(a,"Wave2")?W2: + (operator==(a,"Wave3")?W3: + (operator==(a, "Wave4")?W4: + (operator==(a, "Wave5")?W5: + (operator==(a, "Wave6")?W6: + (operator==(a, "Wave7")?W7:W8)))))))); +} +void DeicsOnzeGui::setWaveForm2(const QString& a) { + _deicsOnze->_preset->oscWave[1]= + ((operator==(a,"Wave1")?W1: + (operator==(a,"Wave2")?W2: + (operator==(a,"Wave3")?W3: + (operator==(a, "Wave4")?W4: + (operator==(a, "Wave5")?W5: + (operator==(a, "Wave6")?W6: + (operator==(a, "Wave7")?W7:W8)))))))); +} +void DeicsOnzeGui::setWaveForm3(const QString& a) { + _deicsOnze->_preset->oscWave[2]= + ((operator==(a,"Wave1")?W1: + (operator==(a,"Wave2")?W2: + (operator==(a,"Wave3")?W3: + (operator==(a, "Wave4")?W4: + (operator==(a, "Wave5")?W5: + (operator==(a, "Wave6")?W6: + (operator==(a, "Wave7")?W7:W8)))))))); +} +void DeicsOnzeGui::setWaveForm4(const QString& a) { + _deicsOnze->_preset->oscWave[3]= + ((operator==(a,"Wave1")?W1: + (operator==(a,"Wave2")?W2: + (operator==(a,"Wave3")?W3: + (operator==(a, "Wave4")?W4: + (operator==(a, "Wave5")?W5: + (operator==(a, "Wave6")?W6: + (operator==(a, "Wave7")?W7:W8)))))))); +} + +//-------------------------------------------------------------- +// setSubcategorySet +//-------------------------------------------------------------- +void DeicsOnzeGui::setSubcategorySet(Q3ListViewItem* cat) { + if(cat) { + _currentQLVICategory=(QListViewItemCategory*)cat; + subcategoryListView->clear(); + for(unsigned int i=0; + i<((QListViewItemCategory*)cat)->_c->_subcategoryVector.size();i++) + (void) new QListViewItemSubcategory(subcategoryListView, + _currentQLVICategory->_c + ->_subcategoryVector[i] + ->_subcategoryName.c_str(), + _currentQLVICategory->_c + ->_subcategoryVector[i]); + } +} + +///-------------------------------------------------------------- +// setPresetSet +//-------------------------------------------------------------- +void DeicsOnzeGui::setPresetSet(Q3ListViewItem* subcat) { + if(subcat) { + _currentQLVISubcategory=(QListViewItemSubcategory*)subcat; + presetsListView->clear(); + for(std::vector::iterator + i=_currentQLVISubcategory->_s->_presetVector.begin(); + i!=_currentQLVISubcategory->_s->_presetVector.end(); i++) + (void) new QListViewItemPreset(presetsListView, + (*i)->name.c_str(), i); + } +} + +///-------------------------------------------------------------- +// setPreset +//-------------------------------------------------------------- +void DeicsOnzeGui::setPreset(Q3ListViewItem* pre) { + if(pre) { + _currentQLVIPreset=(QListViewItemPreset*)pre; + std::vector::iterator i=_currentQLVIPreset->i_p; + _deicsOnze->programSelect(1, (*i)->bank, (*i)->prog); + updatePreset(); + } +} +//-------------------------------------------------------------- +// updatePreset +// update gui following the current preset +//-------------------------------------------------------------- +void DeicsOnzeGui::updatePreset(void) { + //global + masterVolSlider->setValue(_deicsOnze->getMasterVol()); + feedbackSlider->setValue(_deicsOnze->_preset->feedback); + LFOWaveComboBox->setCurrentItem((int)_deicsOnze->_preset->lfo.wave); + LFOSpeedSlider->setValue(_deicsOnze->_preset->lfo.speed); + LFODelaySlider->setValue(_deicsOnze->_preset->lfo.delay); + PModDepthSlider->setValue(_deicsOnze->_preset->lfo.pModDepth); + PModSensSlider->setValue(_deicsOnze->_preset->sensitivity.pitch); + AModDepthSlider->setValue(_deicsOnze->_preset->lfo.aModDepth); + AModSensSlider->setValue(_deicsOnze->_preset->sensitivity.amplitude); + transposeSlider->setValue(_deicsOnze->_preset->function.transpose); + algorithmComboBox->setCurrentItem((int)_deicsOnze->_preset->algorithm); + PitchBendRangeSlider->setValue(_deicsOnze->_preset->function.pBendRange); + //envelope + AR1Slider->setValue(_deicsOnze->_preset->eg[0].ar); + D1R1Slider->setValue(_deicsOnze->_preset->eg[0].d1r); + D1L1Slider->setValue(_deicsOnze->_preset->eg[0].d1l); + D2R1Slider->setValue(_deicsOnze->_preset->eg[0].d2r); + RR1Slider->setValue(_deicsOnze->_preset->eg[0].rr); + AR2Slider->setValue(_deicsOnze->_preset->eg[1].ar); + D1R2Slider->setValue(_deicsOnze->_preset->eg[1].d1r); + D1L2Slider->setValue(_deicsOnze->_preset->eg[1].d1l); + D2R2Slider->setValue(_deicsOnze->_preset->eg[1].d2r); + RR2Slider->setValue(_deicsOnze->_preset->eg[1].rr); + AR3Slider->setValue(_deicsOnze->_preset->eg[2].ar); + D1R3Slider->setValue(_deicsOnze->_preset->eg[2].d1r); + D1L3Slider->setValue(_deicsOnze->_preset->eg[2].d1l); + D2R3Slider->setValue(_deicsOnze->_preset->eg[2].d2r); + RR3Slider->setValue(_deicsOnze->_preset->eg[2].rr); + AR4Slider->setValue(_deicsOnze->_preset->eg[3].ar); + D1R4Slider->setValue(_deicsOnze->_preset->eg[3].d1r); + D1L4Slider->setValue(_deicsOnze->_preset->eg[3].d1l); + D2R4Slider->setValue(_deicsOnze->_preset->eg[3].d2r); + RR4Slider->setValue(_deicsOnze->_preset->eg[3].rr); + //scaling + LS1Slider->setValue(_deicsOnze->_preset->scaling.level[0]); + RS1Slider->setValue(_deicsOnze->_preset->scaling.rate[0]); + LS2Slider->setValue(_deicsOnze->_preset->scaling.level[1]); + RS2Slider->setValue(_deicsOnze->_preset->scaling.rate[1]); + LS3Slider->setValue(_deicsOnze->_preset->scaling.level[2]); + RS3Slider->setValue(_deicsOnze->_preset->scaling.rate[2]); + LS4Slider->setValue(_deicsOnze->_preset->scaling.level[3]); + RS4Slider->setValue(_deicsOnze->_preset->scaling.rate[3]); + //Volume + Vol1Slider->setValue(_deicsOnze->_preset->outLevel[0]); + Vol2Slider->setValue(_deicsOnze->_preset->outLevel[1]); + Vol3Slider->setValue(_deicsOnze->_preset->outLevel[2]); + Vol4Slider->setValue(_deicsOnze->_preset->outLevel[3]); + //Ratio and Frequency + double intf, decf; + decf=modf(_deicsOnze->_preset->frequency[0].ratio, &intf); + CoarseRatio1SpinBox->setValue((int)intf); + FineRatio1SpinBox->setValue((int)(decf*100.0)); + Freq1SpinBox->setValue((int)_deicsOnze->_preset->frequency[0].freq); + Fix1CheckBox->setChecked(_deicsOnze->_preset->frequency[0].isFix); + decf=modf(_deicsOnze->_preset->frequency[1].ratio, &intf); + CoarseRatio2SpinBox->setValue((int)intf); + FineRatio2SpinBox->setValue((int)(decf*100.0)); + Freq2SpinBox->setValue((int)_deicsOnze->_preset->frequency[1].freq); + Fix2CheckBox->setChecked(_deicsOnze->_preset->frequency[1].isFix); + decf=modf(_deicsOnze->_preset->frequency[2].ratio, &intf); + CoarseRatio3SpinBox->setValue((int)intf); + FineRatio3SpinBox->setValue((int)(decf*100.0)); + Freq3SpinBox->setValue((int)_deicsOnze->_preset->frequency[2].freq); + Fix3CheckBox->setChecked(_deicsOnze->_preset->frequency[2].isFix); + decf=modf(_deicsOnze->_preset->frequency[3].ratio, &intf); + CoarseRatio4SpinBox->setValue((int)intf); + FineRatio4SpinBox->setValue((int)(decf*100.0)); + Freq4SpinBox->setValue((int)_deicsOnze->_preset->frequency[3].freq); + Fix4CheckBox->setChecked(_deicsOnze->_preset->frequency[3].isFix); + //Sensitivity + AME1CheckBox->setChecked(_deicsOnze->_preset->sensitivity.ampOn[0]); + EBS1Slider->setValue(_deicsOnze->_preset->sensitivity.egBias[0]); + KVS1Slider->setValue(_deicsOnze->_preset->sensitivity.keyVelocity[0]); + AME2CheckBox->setChecked(_deicsOnze->_preset->sensitivity.ampOn[1]); + EBS2Slider->setValue(_deicsOnze->_preset->sensitivity.egBias[1]); + KVS2Slider->setValue(_deicsOnze->_preset->sensitivity.keyVelocity[1]); + AME3CheckBox->setChecked(_deicsOnze->_preset->sensitivity.ampOn[2]); + EBS3Slider->setValue(_deicsOnze->_preset->sensitivity.egBias[2]); + KVS3Slider->setValue(_deicsOnze->_preset->sensitivity.keyVelocity[2]); + AME4CheckBox->setChecked(_deicsOnze->_preset->sensitivity.ampOn[3]); + EBS4Slider->setValue(_deicsOnze->_preset->sensitivity.egBias[3]); + KVS4Slider->setValue(_deicsOnze->_preset->sensitivity.keyVelocity[3]); + //detune + DET1Slider->setValue(_deicsOnze->_preset->detune[0]); + DET2Slider->setValue(_deicsOnze->_preset->detune[1]); + DET3Slider->setValue(_deicsOnze->_preset->detune[2]); + DET4Slider->setValue(_deicsOnze->_preset->detune[3]); + //Waveform + WaveForm1ComboBox->setCurrentItem((int)_deicsOnze->_preset->oscWave[0]); + WaveForm2ComboBox->setCurrentItem((int)_deicsOnze->_preset->oscWave[1]); + WaveForm3ComboBox->setCurrentItem((int)_deicsOnze->_preset->oscWave[2]); + WaveForm4ComboBox->setCurrentItem((int)_deicsOnze->_preset->oscWave[3]); + //name, subcategory, category + nameLineEdit->setText(QString(_deicsOnze->_preset->name.c_str())); + subcategoryLineEdit->setText(QString(_deicsOnze->_preset->subcategory.c_str())); + categoryLineEdit->setText(QString(_deicsOnze->_preset->category.c_str())); + //bank n prog + bankSpinBox->setValue(_deicsOnze->_preset->bank+1); + progSpinBox->setValue(_deicsOnze->_preset->prog+1); +} + diff --git a/muse2/synti/deicsonze/deicsonzegui.h b/muse2/synti/deicsonze/deicsonzegui.h new file mode 100644 index 00000000..190d3277 --- /dev/null +++ b/muse2/synti/deicsonze/deicsonzegui.h @@ -0,0 +1,191 @@ +//=========================================================================== +// +// DeicsOnze an emulator of the YAMAHA DX11 synthesizer +// +// Version 0.2.2 +// +// deicsonzegui.h +// +// +// Copyright (c) 2004 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 +#include + +#include "deicsonzeguibase.h" +#include "libsynti/gui.h" + +class DeicsOnze; +class categorySet; +class subcategorySet; +class presetSet; +class Preset; +class QListViewItemCategory; +class QListViewItemSubcategory; +class QListViewItemPreset; +//--------------------------------------------------------- +// DeicsOnzeGui +//--------------------------------------------------------- + +class DeicsOnzeGui : public DeicsOnzeGuiBase, public MessGui { + DeicsOnze* _deicsOnze; + QListViewItemCategory* _currentQLVICategory; + QListViewItemSubcategory* _currentQLVISubcategory; + QListViewItemPreset* _currentQLVIPreset; + + Q_OBJECT + QString lastDir; + private slots: + void newPresetDialogue(); + void deletePresetDialogue(); + void loadPresetsDialogue(); + void savePresetsDialogue(); + //Preset and bank + void setName(const QString&); + void setSubcategory(const QString&); + void setCategory(const QString&); + void setBank(int); + void setProg(int); + //Global + void setMasterVol(int); + void setFeedback(int); + void setLfoWave(const QString&); + void setLfoSpeed(int); + void setLfoDelay(int); + void setLfoPModDepth(int); + void setLfoPitchSens(int); + void setLfoAModDepth(int); + void setLfoAmpSens(int); + void setTranspose(int); + void setGlobalDetune(int); + void setAlgorithm(const QString&); + void setPitchBendRange(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(const QString&); + void setWaveForm2(const QString&); + void setWaveForm3(const QString&); + void setWaveForm4(const QString&); + //category subcategory preset + void setSubcategorySet(Q3ListViewItem*); + void setPresetSet(Q3ListViewItem*); + void setPreset(Q3ListViewItem*); + + public: + void updatePreset(void); //update gui following the current preset + DeicsOnzeGui(DeicsOnze*); +}; + +class QListViewItemCategory:public Q3ListViewItem { + public: + subcategorySet* _c; + QListViewItemCategory(Q3ListView* p, QString l, subcategorySet* c) + :Q3ListViewItem(p, l) {_c=c;}; +}; + +class QListViewItemSubcategory:public Q3ListViewItem { + public: + presetSet* _s; + QListViewItemSubcategory(Q3ListView* p, QString l, presetSet* s) + :Q3ListViewItem(p, l) {_s=s;}; +}; + +class QListViewItemPreset:public Q3ListViewItem { + public: + std::vector::iterator i_p;//presetClass* _p; + QListViewItemPreset(Q3ListView* pa, QString l, + std::vector::iterator ip) + :Q3ListViewItem(pa, l) {i_p=ip;}; +}; + +#endif /* __DEICSONZEGUI_H */ diff --git a/muse2/synti/deicsonze/deicsonzeguibase.h b/muse2/synti/deicsonze/deicsonzeguibase.h new file mode 100644 index 00000000..a580b190 --- /dev/null +++ b/muse2/synti/deicsonze/deicsonzeguibase.h @@ -0,0 +1,3854 @@ +#ifndef DEICSONZEGUIBASE_H +#define DEICSONZEGUIBASE_H + +#include + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE + +class Ui_DeicsOnzeGuiBase +{ +public: + QTabWidget *deicsOnzeTabWidget; + QWidget *TabPage; + QPushButton *loadPushButton; + QPushButton *savePushButton; + Q3GroupBox *nameGroupBox; + QLineEdit *nameLineEdit; + Q3GroupBox *subcategoryGroupBox; + QLineEdit *subcategoryLineEdit; + Q3GroupBox *categoryGroupBox; + QLineEdit *categoryLineEdit; + QPushButton *deletePushButton; + Q3ListView *categoryListView; + Q3ListView *subcategoryListView; + Q3ListView *presetsListView; + QPushButton *newPushButton; + Q3GroupBox *bankGroupBox; + QSpinBox *bankSpinBox; + Q3GroupBox *progGroupBox; + QSpinBox *progSpinBox; + QLabel *presentTextLAbel; + QWidget *TabPage1; + Q3GroupBox *masterVolGroupBox; + QSlider *masterVolSlider; + QSpinBox *MasterVolumeSpinBox; + Q3GroupBox *FeedbackGroupBox; + QSpinBox *feedbackSpinBox; + QSlider *feedbackSlider; + Q3GroupBox *functionGroupBox; + QComboBox *polyMonoComboBox; + QLabel *PitchBendRangeLabel; + QSlider *PitchBendRangeSlider; + QSpinBox *pitchBendRangeSpinBox; + Q3GroupBox *LFOGroupBox; + QLabel *PModSensLabel; + QLabel *PModDepthLabel; + QLabel *AModDepthLabel; + QLabel *LFOSpeedLabel; + QLabel *LFODelayLabel; + QLabel *AModSensLabel; + QComboBox *LFOWaveComboBox; + QCheckBox *LFOSyncCheckBox; + QSlider *AModSensSlider; + QSlider *PModSensSlider; + QSpinBox *PMSSpinBox; + QSpinBox *AMSSpinBox; + QSlider *PModDepthSlider; + QSlider *AModDepthSlider; + QSlider *LFOSpeedSlider; + QSpinBox *LFOSpeedSpinBox; + QSlider *LFODelaySlider; + QSpinBox *LFODelaySpinBox; + QSpinBox *PModDepthSpinBox; + QSpinBox *AModDepthSpinBox; + Q3GroupBox *transposeGroupBox; + QSlider *transposeSlider; + QSpinBox *transposeSpinBox; + QSlider *globalDetuneSlider; + QSpinBox *globalDetuneSpinBox; + QComboBox *algorithmComboBox; + QWidget *tab; + Q3GroupBox *Frequency1groupBox; + QCheckBox *Fix1CheckBox; + QLabel *CoarseRatio1Label; + QLabel *FineRatio1Label; + QLabel *Freq1Label; + QSpinBox *CoarseRatio1SpinBox; + QSpinBox *FineRatio1SpinBox; + QSpinBox *Freq1SpinBox; + Q3GroupBox *Env1GroupBox; + QLabel *RR1Label; + QLabel *D1R1Label; + QLabel *D1L1Label; + QLabel *D2R1Label; + QSlider *D1L1Slider; + QSlider *D2R1Slider; + QSlider *D1R1Slider; + QSlider *RR1Slider; + QLabel *AR1Label; + QSpinBox *D1R1SpinBox; + QSpinBox *D1L1SpinBox; + QSpinBox *D2R1SpinBox; + QSpinBox *RR1SpinBox; + QSlider *AR1Slider; + QSpinBox *AR1SpinBox; + Q3GroupBox *Scaling1GroupBox; + QLabel *LS1Label; + QLabel *RS1Label; + QSlider *LS1Slider; + QSlider *RS1Slider; + QSpinBox *LS1SpinBox; + QSpinBox *RS1SpinBox; + Q3GroupBox *Vol1groupBox; + QSlider *Vol1Slider; + QSpinBox *Vol1SpinBox; + Q3GroupBox *sensitivity1groupBox; + QLabel *EGS1Label; + QLabel *KVS1Label; + QCheckBox *AME1CheckBox; + QSlider *KVS1Slider; + QSlider *EBS1Slider; + QSpinBox *KVS1SpinBox; + QSpinBox *EBS1SpinBox; + Q3GroupBox *DetWaveEGS1GroupBox; + QComboBox *WaveForm1ComboBox; + QLabel *DET1Label; + QComboBox *EGQ1ComboBox; + QSlider *DET1Slider; + QSpinBox *DET1SpinBox; + QWidget *tab1; + Q3GroupBox *Frequency2groupBox; + QCheckBox *Fix2CheckBox; + QLabel *Freq2Label; + QLabel *FineRatio2Label; + QLabel *CoarseRatio2Label; + QSpinBox *CoarseRatio2SpinBox; + QSpinBox *FineRatio2SpinBox; + QSpinBox *Freq2SpinBox; + Q3GroupBox *Env2GroupBox; + QLabel *AR2Label; + QLabel *RR2Label; + QLabel *D2R2Label; + QLabel *D1L2Label; + QLabel *D1R2Label; + QSlider *AR2Slider; + QSlider *D1R2Slider; + QSlider *D1L2Slider; + QSlider *D2R2Slider; + QSlider *RR2Slider; + QSpinBox *D1R2SpinBox; + QSpinBox *D1L2SpinBox; + QSpinBox *D2R2SpinBox; + QSpinBox *RR2SpinBox; + QSpinBox *AR2SpinBox; + Q3GroupBox *Scaling2GroupBox; + QLabel *LS2Label; + QLabel *RS2Label; + QSlider *LS2Slider; + QSlider *RS2Slider; + QSpinBox *LS2SpinBox; + QSpinBox *RS2SpinBox; + Q3GroupBox *Vol2groupBox; + QSlider *Vol2Slider; + QSpinBox *Vol2SpinBox; + Q3GroupBox *sensitivity2groupBox; + QLabel *EGS2Label; + QLabel *KVS2Label; + QCheckBox *AME2CheckBox; + QSlider *KVS2Slider; + QSlider *EBS2Slider; + QSpinBox *EBS2SpinBox; + QSpinBox *KVS2SpinBox; + Q3GroupBox *DetWaveEGS2GroupBox; + QSlider *DET2Slider; + QLabel *DET2Label; + QComboBox *WaveForm2ComboBox; + QComboBox *EGS2comboBox; + QSpinBox *DET2SpinBox; + QWidget *TabPage2; + Q3GroupBox *Frequency3groupBox; + QCheckBox *Fix3CheckBox; + QLabel *CoarseRatio3Label; + QLabel *FineRatio3Label; + QLabel *Freq3Label; + QSpinBox *CoarseRatio3SpinBox; + QSpinBox *FineRatio3SpinBox; + QSpinBox *Freq3SpinBox; + Q3GroupBox *Env3GroupBox; + QLabel *RR3Label; + QLabel *D2R3Label; + QLabel *D1L3Label; + QLabel *D1R3Label; + QLabel *AR3Label; + QSlider *AR3Slider; + QSlider *D1R3Slider; + QSlider *D1L3Slider; + QSlider *D2R3Slider; + QSlider *RR3Slider; + QSpinBox *D1R3SpinBox; + QSpinBox *D1L3SpinBox; + QSpinBox *D2R3SpinBox; + QSpinBox *RR3SpinBox; + QSpinBox *AR3SpinBox; + Q3GroupBox *Scaling3GroupBox; + QLabel *LS3Label; + QLabel *RS3Label; + QSlider *LS3Slider; + QSlider *RS3Slider; + QSpinBox *LS3SpinBox; + QSpinBox *RS3SpinBox; + Q3GroupBox *Vol3groupBox; + QSlider *Vol3Slider; + QSpinBox *Vol3SpinBox; + Q3GroupBox *sensitivity3groupBox; + QLabel *EGS3Label; + QLabel *KVS3Label; + QCheckBox *AME3CheckBox; + QSlider *KVS3Slider; + QSlider *EBS3Slider; + QSpinBox *EBS3SpinBox; + QSpinBox *KVS3SpinBox; + Q3GroupBox *DetWaveEGS3GroupBox; + QComboBox *WaveForm3ComboBox; + QComboBox *EGS3comboBox; + QLabel *DET3Label; + QSlider *DET3Slider; + QSpinBox *DET3SpinBox; + QWidget *TabPage3; + Q3GroupBox *Frequency4groupBox; + QLabel *CoarseRatio4Label; + QLabel *FineRatio4Label; + QLabel *Freq4Label; + QCheckBox *Fix4CheckBox; + QSpinBox *FineRatio4SpinBox; + QSpinBox *Freq4SpinBox; + QSpinBox *CoarseRatio4SpinBox; + Q3GroupBox *Scaling4GroupBox; + QLabel *LS4Label; + QLabel *RS4Label; + QSlider *LS4Slider; + QSlider *RS4Slider; + QSpinBox *RS4SpinBox; + QSpinBox *LS4SpinBox; + Q3GroupBox *Env4GroupBox; + QSlider *AR4Slider; + QLabel *AR4Label; + QLabel *RR4Label; + QLabel *D2R4Label; + QSlider *D2R4Slider; + QSlider *D1L4Slider; + QLabel *D1L4Label; + QLabel *D1R4Label; + QSlider *D1R4Slider; + QSlider *RR4Slider; + QSpinBox *D1R4SpinBox; + QSpinBox *D1L4SpinBox; + QSpinBox *D2R4SpinBox; + QSpinBox *RR4SpinBox; + QSpinBox *AR4SpinBox; + Q3GroupBox *Vol4groupBox; + QSlider *Vol4Slider; + QSpinBox *Vol4SpinBox; + Q3GroupBox *sensitivity4groupBox; + QLabel *EGS4Label; + QLabel *KVS4Label; + QCheckBox *AME4CheckBox; + QSlider *KVS4Slider; + QSlider *EBS4Slider; + QSpinBox *KVS4SpinBox; + QSpinBox *EBS4SpinBox; + Q3GroupBox *DetWaveEGS4GroupBox; + QSlider *DET4Slider; + QLabel *DET4Label; + QComboBox *WaveForm4ComboBox; + QComboBox *EGS4comboBox; + QSpinBox *DET4SpinBox; + + void setupUi(QDialog *DeicsOnzeGuiBase) + { + if (DeicsOnzeGuiBase->objectName().isEmpty()) + DeicsOnzeGuiBase->setObjectName(QString::fromUtf8("DeicsOnzeGuiBase")); + DeicsOnzeGuiBase->resize(468, 357); + DeicsOnzeGuiBase->setSizeGripEnabled(false); + DeicsOnzeGuiBase->setModal(false); + deicsOnzeTabWidget = new QTabWidget(DeicsOnzeGuiBase); + deicsOnzeTabWidget->setObjectName(QString::fromUtf8("deicsOnzeTabWidget")); + deicsOnzeTabWidget->setGeometry(QRect(0, 0, 470, 360)); + QSizePolicy sizePolicy(static_cast(7), static_cast(7)); + sizePolicy.setHorizontalStretch(0); + sizePolicy.setVerticalStretch(0); + sizePolicy.setHeightForWidth(deicsOnzeTabWidget->sizePolicy().hasHeightForWidth()); + deicsOnzeTabWidget->setSizePolicy(sizePolicy); + QFont font; + font.setFamily(QString::fromUtf8("Teen")); + deicsOnzeTabWidget->setFont(font); + deicsOnzeTabWidget->setCursor(QCursor(static_cast(0))); + deicsOnzeTabWidget->setTabShape(QTabWidget::Rounded); + TabPage = new QWidget(); + TabPage->setObjectName(QString::fromUtf8("TabPage")); + loadPushButton = new QPushButton(TabPage); + loadPushButton->setObjectName(QString::fromUtf8("loadPushButton")); + loadPushButton->setEnabled(true); + loadPushButton->setGeometry(QRect(340, 260, 60, 30)); + loadPushButton->setCursor(QCursor(static_cast(13))); + savePushButton = new QPushButton(TabPage); + savePushButton->setObjectName(QString::fromUtf8("savePushButton")); + savePushButton->setEnabled(true); + savePushButton->setGeometry(QRect(400, 260, 60, 30)); + savePushButton->setCursor(QCursor(static_cast(13))); + nameGroupBox = new Q3GroupBox(TabPage); + nameGroupBox->setObjectName(QString::fromUtf8("nameGroupBox")); + nameGroupBox->setGeometry(QRect(340, 10, 120, 50)); + nameLineEdit = new QLineEdit(nameGroupBox); + nameLineEdit->setObjectName(QString::fromUtf8("nameLineEdit")); + nameLineEdit->setGeometry(QRect(10, 20, 100, 21)); + QFont font1; + font1.setFamily(QString::fromUtf8("Zero Threes")); + font1.setPointSize(8); + nameLineEdit->setFont(font1); + nameLineEdit->setMaxLength(12); + subcategoryGroupBox = new Q3GroupBox(TabPage); + subcategoryGroupBox->setObjectName(QString::fromUtf8("subcategoryGroupBox")); + subcategoryGroupBox->setGeometry(QRect(340, 60, 120, 50)); + subcategoryLineEdit = new QLineEdit(subcategoryGroupBox); + subcategoryLineEdit->setObjectName(QString::fromUtf8("subcategoryLineEdit")); + subcategoryLineEdit->setGeometry(QRect(10, 20, 100, 21)); + subcategoryLineEdit->setFont(font1); + subcategoryLineEdit->setMaxLength(12); + categoryGroupBox = new Q3GroupBox(TabPage); + categoryGroupBox->setObjectName(QString::fromUtf8("categoryGroupBox")); + categoryGroupBox->setGeometry(QRect(340, 110, 120, 50)); + categoryLineEdit = new QLineEdit(categoryGroupBox); + categoryLineEdit->setObjectName(QString::fromUtf8("categoryLineEdit")); + categoryLineEdit->setGeometry(QRect(10, 20, 100, 21)); + categoryLineEdit->setFont(font1); + categoryLineEdit->setMaxLength(12); + deletePushButton = new QPushButton(TabPage); + deletePushButton->setObjectName(QString::fromUtf8("deletePushButton")); + deletePushButton->setEnabled(false); + deletePushButton->setGeometry(QRect(400, 220, 60, 29)); + deletePushButton->setCursor(QCursor(static_cast(13))); + categoryListView = new Q3ListView(TabPage); + categoryListView->addColumn(QApplication::translate("DeicsOnzeGuiBase", "Category", 0, QApplication::UnicodeUTF8)); + categoryListView->header()->setClickEnabled(false, categoryListView->header()->count() - 1); + categoryListView->header()->setResizeEnabled(false, categoryListView->header()->count() - 1); + categoryListView->setObjectName(QString::fromUtf8("categoryListView")); + categoryListView->setGeometry(QRect(10, 10, 100, 280)); + categoryListView->setFont(font1); + categoryListView->setFrameShadow(QFrame::Sunken); + categoryListView->setAllColumnsShowFocus(false); + categoryListView->setShowSortIndicator(false); + categoryListView->setResizeMode(Q3ListView::AllColumns); + subcategoryListView = new Q3ListView(TabPage); + subcategoryListView->addColumn(QApplication::translate("DeicsOnzeGuiBase", "Subcategory", 0, QApplication::UnicodeUTF8)); + subcategoryListView->header()->setClickEnabled(false, subcategoryListView->header()->count() - 1); + subcategoryListView->header()->setResizeEnabled(false, subcategoryListView->header()->count() - 1); + subcategoryListView->setObjectName(QString::fromUtf8("subcategoryListView")); + subcategoryListView->setGeometry(QRect(120, 10, 100, 280)); + subcategoryListView->setFont(font1); + subcategoryListView->setFrameShadow(QFrame::Sunken); + subcategoryListView->setAllColumnsShowFocus(false); + subcategoryListView->setShowSortIndicator(false); + subcategoryListView->setResizeMode(Q3ListView::AllColumns); + presetsListView = new Q3ListView(TabPage); + presetsListView->addColumn(QApplication::translate("DeicsOnzeGuiBase", "Preset", 0, QApplication::UnicodeUTF8)); + presetsListView->header()->setClickEnabled(false, presetsListView->header()->count() - 1); + presetsListView->header()->setResizeEnabled(false, presetsListView->header()->count() - 1); + presetsListView->setObjectName(QString::fromUtf8("presetsListView")); + presetsListView->setGeometry(QRect(230, 10, 100, 280)); + presetsListView->setFont(font1); + presetsListView->setFrameShadow(QFrame::Sunken); + presetsListView->setAllColumnsShowFocus(false); + presetsListView->setShowSortIndicator(false); + presetsListView->setResizeMode(Q3ListView::AllColumns); + newPushButton = new QPushButton(TabPage); + newPushButton->setObjectName(QString::fromUtf8("newPushButton")); + newPushButton->setEnabled(true); + newPushButton->setGeometry(QRect(340, 220, 60, 29)); + newPushButton->setCursor(QCursor(static_cast(13))); + bankGroupBox = new Q3GroupBox(TabPage); + bankGroupBox->setObjectName(QString::fromUtf8("bankGroupBox")); + bankGroupBox->setGeometry(QRect(340, 160, 60, 50)); + bankSpinBox = new QSpinBox(bankGroupBox); + bankSpinBox->setObjectName(QString::fromUtf8("bankSpinBox")); + bankSpinBox->setGeometry(QRect(10, 20, 40, 21)); + QFont font2; + font2.setFamily(QString::fromUtf8("Zero Threes")); + font2.setItalic(true); + bankSpinBox->setFont(font2); + bankSpinBox->setMaximum(128); + bankSpinBox->setMinimum(1); + progGroupBox = new Q3GroupBox(TabPage); + progGroupBox->setObjectName(QString::fromUtf8("progGroupBox")); + progGroupBox->setGeometry(QRect(400, 160, 60, 50)); + progSpinBox = new QSpinBox(progGroupBox); + progSpinBox->setObjectName(QString::fromUtf8("progSpinBox")); + progSpinBox->setGeometry(QRect(10, 20, 40, 21)); + progSpinBox->setFont(font2); + progSpinBox->setMaximum(128); + progSpinBox->setMinimum(1); + presentTextLAbel = new QLabel(TabPage); + presentTextLAbel->setObjectName(QString::fromUtf8("presentTextLAbel")); + presentTextLAbel->setGeometry(QRect(20, 300, 420, 20)); + presentTextLAbel->setFrameShape(QFrame::NoFrame); + presentTextLAbel->setFrameShadow(QFrame::Plain); + presentTextLAbel->setWordWrap(false); + deicsOnzeTabWidget->addTab(TabPage, QString()); + TabPage1 = new QWidget(); + TabPage1->setObjectName(QString::fromUtf8("TabPage1")); + masterVolGroupBox = new Q3GroupBox(TabPage1); + masterVolGroupBox->setObjectName(QString::fromUtf8("masterVolGroupBox")); + masterVolGroupBox->setGeometry(QRect(10, 0, 330, 50)); + masterVolSlider = new QSlider(masterVolGroupBox); + masterVolSlider->setObjectName(QString::fromUtf8("masterVolSlider")); + masterVolSlider->setGeometry(QRect(10, 20, 250, 20)); + masterVolSlider->setCursor(QCursor(static_cast(13))); + masterVolSlider->setMaximum(255); + masterVolSlider->setOrientation(Qt::Horizontal); + MasterVolumeSpinBox = new QSpinBox(masterVolGroupBox); + MasterVolumeSpinBox->setObjectName(QString::fromUtf8("MasterVolumeSpinBox")); + MasterVolumeSpinBox->setGeometry(QRect(270, 20, 50, 21)); + MasterVolumeSpinBox->setFont(font2); + MasterVolumeSpinBox->setMaximum(255); + FeedbackGroupBox = new Q3GroupBox(TabPage1); + FeedbackGroupBox->setObjectName(QString::fromUtf8("FeedbackGroupBox")); + FeedbackGroupBox->setGeometry(QRect(350, 0, 110, 50)); + feedbackSpinBox = new QSpinBox(FeedbackGroupBox); + feedbackSpinBox->setObjectName(QString::fromUtf8("feedbackSpinBox")); + feedbackSpinBox->setGeometry(QRect(70, 20, 30, 21)); + feedbackSpinBox->setFont(font2); + feedbackSpinBox->setMaximum(7); + feedbackSlider = new QSlider(FeedbackGroupBox); + feedbackSlider->setObjectName(QString::fromUtf8("feedbackSlider")); + feedbackSlider->setGeometry(QRect(10, 20, 50, 20)); + feedbackSlider->setCursor(QCursor(static_cast(13))); + feedbackSlider->setMaximum(7); + feedbackSlider->setSingleStep(1); + feedbackSlider->setPageStep(1); + feedbackSlider->setOrientation(Qt::Horizontal); + feedbackSlider->setTickPosition(QSlider::NoTicks); + functionGroupBox = new Q3GroupBox(TabPage1); + functionGroupBox->setObjectName(QString::fromUtf8("functionGroupBox")); + functionGroupBox->setGeometry(QRect(10, 50, 200, 200)); + polyMonoComboBox = new QComboBox(functionGroupBox); + polyMonoComboBox->setObjectName(QString::fromUtf8("polyMonoComboBox")); + polyMonoComboBox->setEnabled(false); + polyMonoComboBox->setGeometry(QRect(10, 20, 180, 20)); + QPalette palette; + palette.setColor(QPalette::Active, static_cast(0), QColor(0, 0, 0)); + palette.setColor(QPalette::Active, static_cast(1), QColor(195, 195, 195)); + palette.setColor(QPalette::Active, static_cast(2), QColor(255, 255, 255)); + palette.setColor(QPalette::Active, static_cast(3), QColor(225, 225, 225)); + palette.setColor(QPalette::Active, static_cast(4), QColor(97, 97, 97)); + palette.setColor(QPalette::Active, static_cast(5), QColor(130, 130, 130)); + palette.setColor(QPalette::Active, static_cast(6), QColor(0, 0, 0)); + palette.setColor(QPalette::Active, static_cast(7), QColor(249, 249, 249)); + palette.setColor(QPalette::Active, static_cast(8), QColor(0, 0, 0)); + palette.setColor(QPalette::Active, static_cast(9), QColor(255, 255, 255)); + palette.setColor(QPalette::Active, static_cast(10), QColor(177, 177, 177)); + palette.setColor(QPalette::Active, static_cast(11), QColor(0, 0, 0)); + palette.setColor(QPalette::Active, static_cast(12), QColor(57, 15, 195)); + palette.setColor(QPalette::Active, static_cast(13), QColor(255, 255, 255)); + palette.setColor(QPalette::Active, static_cast(14), QColor(195, 18, 71)); + palette.setColor(QPalette::Active, static_cast(15), QColor(128, 0, 128)); + palette.setColor(QPalette::Inactive, static_cast(0), QColor(0, 0, 0)); + palette.setColor(QPalette::Inactive, static_cast(1), QColor(195, 195, 195)); + palette.setColor(QPalette::Inactive, static_cast(2), QColor(255, 255, 255)); + palette.setColor(QPalette::Inactive, static_cast(3), QColor(224, 224, 224)); + palette.setColor(QPalette::Inactive, static_cast(4), QColor(97, 97, 97)); + palette.setColor(QPalette::Inactive, static_cast(5), QColor(130, 130, 130)); + palette.setColor(QPalette::Inactive, static_cast(6), QColor(0, 0, 0)); + palette.setColor(QPalette::Inactive, static_cast(7), QColor(249, 249, 249)); + palette.setColor(QPalette::Inactive, static_cast(8), QColor(0, 0, 0)); + palette.setColor(QPalette::Inactive, static_cast(9), QColor(255, 255, 255)); + palette.setColor(QPalette::Inactive, static_cast(10), QColor(177, 177, 177)); + palette.setColor(QPalette::Inactive, static_cast(11), QColor(0, 0, 0)); + palette.setColor(QPalette::Inactive, static_cast(12), QColor(57, 15, 195)); + palette.setColor(QPalette::Inactive, static_cast(13), QColor(255, 255, 255)); + palette.setColor(QPalette::Inactive, static_cast(14), QColor(195, 18, 71)); + palette.setColor(QPalette::Inactive, static_cast(15), QColor(128, 0, 128)); + palette.setColor(QPalette::Disabled, static_cast(0), QColor(128, 128, 128)); + palette.setColor(QPalette::Disabled, static_cast(1), QColor(195, 195, 195)); + palette.setColor(QPalette::Disabled, static_cast(2), QColor(255, 255, 255)); + palette.setColor(QPalette::Disabled, static_cast(3), QColor(224, 224, 224)); + palette.setColor(QPalette::Disabled, static_cast(4), QColor(97, 97, 97)); + palette.setColor(QPalette::Disabled, static_cast(5), QColor(130, 130, 130)); + palette.setColor(QPalette::Disabled, static_cast(6), QColor(0, 0, 0)); + palette.setColor(QPalette::Disabled, static_cast(7), QColor(249, 249, 249)); + palette.setColor(QPalette::Disabled, static_cast(8), QColor(128, 128, 128)); + palette.setColor(QPalette::Disabled, static_cast(9), QColor(255, 255, 255)); + palette.setColor(QPalette::Disabled, static_cast(10), QColor(177, 177, 177)); + palette.setColor(QPalette::Disabled, static_cast(11), QColor(0, 0, 0)); + palette.setColor(QPalette::Disabled, static_cast(12), QColor(57, 15, 195)); + palette.setColor(QPalette::Disabled, static_cast(13), QColor(255, 255, 255)); + palette.setColor(QPalette::Disabled, static_cast(14), QColor(195, 18, 71)); + palette.setColor(QPalette::Disabled, static_cast(15), QColor(128, 0, 128)); + polyMonoComboBox->setPalette(palette); + polyMonoComboBox->setCursor(QCursor(static_cast(13))); + PitchBendRangeLabel = new QLabel(functionGroupBox); + PitchBendRangeLabel->setObjectName(QString::fromUtf8("PitchBendRangeLabel")); + PitchBendRangeLabel->setGeometry(QRect(10, 50, 40, 22)); + PitchBendRangeLabel->setFrameShape(QFrame::Box); + PitchBendRangeLabel->setFrameShadow(QFrame::Sunken); + PitchBendRangeLabel->setWordWrap(false); + PitchBendRangeSlider = new QSlider(functionGroupBox); + PitchBendRangeSlider->setObjectName(QString::fromUtf8("PitchBendRangeSlider")); + PitchBendRangeSlider->setGeometry(QRect(60, 50, 90, 20)); + PitchBendRangeSlider->setCursor(QCursor(static_cast(13))); + PitchBendRangeSlider->setMinimum(0); + PitchBendRangeSlider->setMaximum(12); + PitchBendRangeSlider->setPageStep(1); + PitchBendRangeSlider->setValue(0); + PitchBendRangeSlider->setOrientation(Qt::Horizontal); + PitchBendRangeSlider->setTickPosition(QSlider::NoTicks); + pitchBendRangeSpinBox = new QSpinBox(functionGroupBox); + pitchBendRangeSpinBox->setObjectName(QString::fromUtf8("pitchBendRangeSpinBox")); + pitchBendRangeSpinBox->setGeometry(QRect(160, 50, 30, 21)); + pitchBendRangeSpinBox->setFont(font2); + pitchBendRangeSpinBox->setMaximum(12); + LFOGroupBox = new Q3GroupBox(TabPage1); + LFOGroupBox->setObjectName(QString::fromUtf8("LFOGroupBox")); + LFOGroupBox->setGeometry(QRect(220, 50, 240, 200)); + PModSensLabel = new QLabel(LFOGroupBox); + PModSensLabel->setObjectName(QString::fromUtf8("PModSensLabel")); + PModSensLabel->setGeometry(QRect(100, 20, 40, 22)); + PModSensLabel->setFrameShape(QFrame::Box); + PModSensLabel->setFrameShadow(QFrame::Sunken); + PModSensLabel->setWordWrap(false); + PModDepthLabel = new QLabel(LFOGroupBox); + PModDepthLabel->setObjectName(QString::fromUtf8("PModDepthLabel")); + PModDepthLabel->setGeometry(QRect(10, 80, 40, 24)); + PModDepthLabel->setFrameShape(QFrame::Box); + PModDepthLabel->setFrameShadow(QFrame::Sunken); + PModDepthLabel->setWordWrap(false); + AModDepthLabel = new QLabel(LFOGroupBox); + AModDepthLabel->setObjectName(QString::fromUtf8("AModDepthLabel")); + AModDepthLabel->setGeometry(QRect(10, 110, 40, 22)); + AModDepthLabel->setFrameShape(QFrame::Box); + AModDepthLabel->setFrameShadow(QFrame::Sunken); + AModDepthLabel->setWordWrap(false); + LFOSpeedLabel = new QLabel(LFOGroupBox); + LFOSpeedLabel->setObjectName(QString::fromUtf8("LFOSpeedLabel")); + LFOSpeedLabel->setGeometry(QRect(10, 140, 50, 24)); + LFOSpeedLabel->setFrameShape(QFrame::Box); + LFOSpeedLabel->setFrameShadow(QFrame::Sunken); + LFOSpeedLabel->setWordWrap(false); + LFODelayLabel = new QLabel(LFOGroupBox); + LFODelayLabel->setObjectName(QString::fromUtf8("LFODelayLabel")); + LFODelayLabel->setGeometry(QRect(10, 170, 50, 24)); + LFODelayLabel->setFrameShape(QFrame::Box); + LFODelayLabel->setFrameShadow(QFrame::Sunken); + LFODelayLabel->setWordWrap(false); + AModSensLabel = new QLabel(LFOGroupBox); + AModSensLabel->setObjectName(QString::fromUtf8("AModSensLabel")); + AModSensLabel->setGeometry(QRect(100, 50, 40, 22)); + AModSensLabel->setFrameShape(QFrame::Box); + AModSensLabel->setFrameShadow(QFrame::Sunken); + AModSensLabel->setWordWrap(false); + LFOWaveComboBox = new QComboBox(LFOGroupBox); + LFOWaveComboBox->setObjectName(QString::fromUtf8("LFOWaveComboBox")); + LFOWaveComboBox->setGeometry(QRect(10, 50, 80, 20)); + LFOWaveComboBox->setCursor(QCursor(static_cast(13))); + LFOSyncCheckBox = new QCheckBox(LFOGroupBox); + LFOSyncCheckBox->setObjectName(QString::fromUtf8("LFOSyncCheckBox")); + LFOSyncCheckBox->setGeometry(QRect(10, 20, 80, 25)); + LFOSyncCheckBox->setCursor(QCursor(static_cast(13))); + AModSensSlider = new QSlider(LFOGroupBox); + AModSensSlider->setObjectName(QString::fromUtf8("AModSensSlider")); + AModSensSlider->setGeometry(QRect(150, 50, 40, 20)); + AModSensSlider->setCursor(QCursor(static_cast(13))); + AModSensSlider->setMaximum(3); + AModSensSlider->setSingleStep(1); + AModSensSlider->setPageStep(1); + AModSensSlider->setOrientation(Qt::Horizontal); + AModSensSlider->setTickPosition(QSlider::NoTicks); + PModSensSlider = new QSlider(LFOGroupBox); + PModSensSlider->setObjectName(QString::fromUtf8("PModSensSlider")); + PModSensSlider->setGeometry(QRect(150, 20, 40, 20)); + PModSensSlider->setCursor(QCursor(static_cast(13))); + PModSensSlider->setMaximum(7); + PModSensSlider->setSingleStep(1); + PModSensSlider->setPageStep(1); + PModSensSlider->setOrientation(Qt::Horizontal); + PModSensSlider->setTickPosition(QSlider::NoTicks); + PMSSpinBox = new QSpinBox(LFOGroupBox); + PMSSpinBox->setObjectName(QString::fromUtf8("PMSSpinBox")); + PMSSpinBox->setGeometry(QRect(200, 20, 30, 21)); + PMSSpinBox->setFont(font2); + PMSSpinBox->setMaximum(7); + AMSSpinBox = new QSpinBox(LFOGroupBox); + AMSSpinBox->setObjectName(QString::fromUtf8("AMSSpinBox")); + AMSSpinBox->setGeometry(QRect(200, 50, 30, 21)); + AMSSpinBox->setFont(font2); + AMSSpinBox->setMaximum(7); + PModDepthSlider = new QSlider(LFOGroupBox); + PModDepthSlider->setObjectName(QString::fromUtf8("PModDepthSlider")); + PModDepthSlider->setGeometry(QRect(70, 80, 110, 20)); + PModDepthSlider->setCursor(QCursor(static_cast(13))); + PModDepthSlider->setMaximum(99); + PModDepthSlider->setSingleStep(1); + PModDepthSlider->setPageStep(1); + PModDepthSlider->setOrientation(Qt::Horizontal); + PModDepthSlider->setTickPosition(QSlider::NoTicks); + AModDepthSlider = new QSlider(LFOGroupBox); + AModDepthSlider->setObjectName(QString::fromUtf8("AModDepthSlider")); + AModDepthSlider->setGeometry(QRect(70, 110, 110, 20)); + AModDepthSlider->setCursor(QCursor(static_cast(13))); + AModDepthSlider->setMaximum(99); + AModDepthSlider->setSingleStep(1); + AModDepthSlider->setPageStep(1); + AModDepthSlider->setOrientation(Qt::Horizontal); + AModDepthSlider->setTickPosition(QSlider::NoTicks); + LFOSpeedSlider = new QSlider(LFOGroupBox); + LFOSpeedSlider->setObjectName(QString::fromUtf8("LFOSpeedSlider")); + LFOSpeedSlider->setGeometry(QRect(70, 140, 110, 20)); + LFOSpeedSlider->setCursor(QCursor(static_cast(13))); + LFOSpeedSlider->setMaximum(99); + LFOSpeedSlider->setSingleStep(1); + LFOSpeedSlider->setPageStep(1); + LFOSpeedSlider->setOrientation(Qt::Horizontal); + LFOSpeedSlider->setTickPosition(QSlider::NoTicks); + LFOSpeedSpinBox = new QSpinBox(LFOGroupBox); + LFOSpeedSpinBox->setObjectName(QString::fromUtf8("LFOSpeedSpinBox")); + LFOSpeedSpinBox->setGeometry(QRect(190, 140, 40, 21)); + LFOSpeedSpinBox->setFont(font2); + LFOSpeedSpinBox->setMaximum(99); + LFODelaySlider = new QSlider(LFOGroupBox); + LFODelaySlider->setObjectName(QString::fromUtf8("LFODelaySlider")); + LFODelaySlider->setGeometry(QRect(70, 170, 110, 20)); + LFODelaySlider->setCursor(QCursor(static_cast(13))); + LFODelaySlider->setMaximum(99); + LFODelaySlider->setSingleStep(1); + LFODelaySlider->setPageStep(1); + LFODelaySlider->setOrientation(Qt::Horizontal); + LFODelaySlider->setTickPosition(QSlider::NoTicks); + LFODelaySpinBox = new QSpinBox(LFOGroupBox); + LFODelaySpinBox->setObjectName(QString::fromUtf8("LFODelaySpinBox")); + LFODelaySpinBox->setGeometry(QRect(190, 170, 40, 21)); + LFODelaySpinBox->setFont(font2); + LFODelaySpinBox->setMaximum(99); + PModDepthSpinBox = new QSpinBox(LFOGroupBox); + PModDepthSpinBox->setObjectName(QString::fromUtf8("PModDepthSpinBox")); + PModDepthSpinBox->setGeometry(QRect(190, 80, 40, 21)); + PModDepthSpinBox->setFont(font2); + PModDepthSpinBox->setMaximum(99); + AModDepthSpinBox = new QSpinBox(LFOGroupBox); + AModDepthSpinBox->setObjectName(QString::fromUtf8("AModDepthSpinBox")); + AModDepthSpinBox->setGeometry(QRect(190, 110, 40, 21)); + AModDepthSpinBox->setFont(font2); + AModDepthSpinBox->setMaximum(99); + transposeGroupBox = new Q3GroupBox(TabPage1); + transposeGroupBox->setObjectName(QString::fromUtf8("transposeGroupBox")); + transposeGroupBox->setGeometry(QRect(10, 250, 310, 70)); + transposeSlider = new QSlider(transposeGroupBox); + transposeSlider->setObjectName(QString::fromUtf8("transposeSlider")); + transposeSlider->setGeometry(QRect(10, 20, 110, 19)); + transposeSlider->setCursor(QCursor(static_cast(13))); + transposeSlider->setMinimum(-24); + transposeSlider->setMaximum(24); + transposeSlider->setPageStep(1); + transposeSlider->setOrientation(Qt::Horizontal); + transposeSlider->setTickPosition(QSlider::NoTicks); + transposeSpinBox = new QSpinBox(transposeGroupBox); + transposeSpinBox->setObjectName(QString::fromUtf8("transposeSpinBox")); + transposeSpinBox->setGeometry(QRect(130, 20, 40, 21)); + transposeSpinBox->setFont(font2); + transposeSpinBox->setMaximum(99); + transposeSpinBox->setMinimum(-24); + globalDetuneSlider = new QSlider(transposeGroupBox); + globalDetuneSlider->setObjectName(QString::fromUtf8("globalDetuneSlider")); + globalDetuneSlider->setGeometry(QRect(180, 20, 70, 20)); + globalDetuneSlider->setCursor(QCursor(static_cast(13))); + globalDetuneSlider->setMinimum(-15); + globalDetuneSlider->setMaximum(15); + globalDetuneSlider->setPageStep(1); + globalDetuneSlider->setOrientation(Qt::Horizontal); + globalDetuneSlider->setTickPosition(QSlider::NoTicks); + globalDetuneSpinBox = new QSpinBox(transposeGroupBox); + globalDetuneSpinBox->setObjectName(QString::fromUtf8("globalDetuneSpinBox")); + globalDetuneSpinBox->setGeometry(QRect(260, 20, 40, 21)); + globalDetuneSpinBox->setFont(font2); + globalDetuneSpinBox->setMaximum(15); + globalDetuneSpinBox->setMinimum(-15); + algorithmComboBox = new QComboBox(TabPage1); + algorithmComboBox->setObjectName(QString::fromUtf8("algorithmComboBox")); + algorithmComboBox->setGeometry(QRect(340, 280, 110, 30)); + algorithmComboBox->setCursor(QCursor(static_cast(13))); + deicsOnzeTabWidget->addTab(TabPage1, QString()); + tab = new QWidget(); + tab->setObjectName(QString::fromUtf8("tab")); + Frequency1groupBox = new Q3GroupBox(tab); + Frequency1groupBox->setObjectName(QString::fromUtf8("Frequency1groupBox")); + Frequency1groupBox->setGeometry(QRect(10, 190, 450, 50)); + Fix1CheckBox = new QCheckBox(Frequency1groupBox); + Fix1CheckBox->setObjectName(QString::fromUtf8("Fix1CheckBox")); + Fix1CheckBox->setEnabled(true); + Fix1CheckBox->setGeometry(QRect(400, 20, 40, 25)); + Fix1CheckBox->setFont(font); + Fix1CheckBox->setCursor(QCursor(static_cast(13))); + CoarseRatio1Label = new QLabel(Frequency1groupBox); + CoarseRatio1Label->setObjectName(QString::fromUtf8("CoarseRatio1Label")); + CoarseRatio1Label->setGeometry(QRect(10, 20, 70, 22)); + CoarseRatio1Label->setFrameShape(QFrame::Box); + CoarseRatio1Label->setFrameShadow(QFrame::Sunken); + CoarseRatio1Label->setWordWrap(false); + FineRatio1Label = new QLabel(Frequency1groupBox); + FineRatio1Label->setObjectName(QString::fromUtf8("FineRatio1Label")); + FineRatio1Label->setGeometry(QRect(140, 20, 50, 22)); + FineRatio1Label->setFrameShape(QFrame::Box); + FineRatio1Label->setFrameShadow(QFrame::Sunken); + FineRatio1Label->setWordWrap(false); + Freq1Label = new QLabel(Frequency1groupBox); + Freq1Label->setObjectName(QString::fromUtf8("Freq1Label")); + Freq1Label->setGeometry(QRect(250, 20, 50, 22)); + Freq1Label->setFrameShape(QFrame::Box); + Freq1Label->setFrameShadow(QFrame::Sunken); + Freq1Label->setWordWrap(false); + CoarseRatio1SpinBox = new QSpinBox(Frequency1groupBox); + CoarseRatio1SpinBox->setObjectName(QString::fromUtf8("CoarseRatio1SpinBox")); + CoarseRatio1SpinBox->setGeometry(QRect(90, 20, 40, 21)); + CoarseRatio1SpinBox->setFont(font2); + FineRatio1SpinBox = new QSpinBox(Frequency1groupBox); + FineRatio1SpinBox->setObjectName(QString::fromUtf8("FineRatio1SpinBox")); + FineRatio1SpinBox->setGeometry(QRect(200, 20, 40, 21)); + FineRatio1SpinBox->setFont(font2); + Freq1SpinBox = new QSpinBox(Frequency1groupBox); + Freq1SpinBox->setObjectName(QString::fromUtf8("Freq1SpinBox")); + Freq1SpinBox->setEnabled(false); + Freq1SpinBox->setGeometry(QRect(310, 20, 80, 21)); + Freq1SpinBox->setFont(font2); + Freq1SpinBox->setMaximum(32000); + Env1GroupBox = new Q3GroupBox(tab); + Env1GroupBox->setObjectName(QString::fromUtf8("Env1GroupBox")); + Env1GroupBox->setGeometry(QRect(10, 0, 260, 190)); + RR1Label = new QLabel(Env1GroupBox); + RR1Label->setObjectName(QString::fromUtf8("RR1Label")); + RR1Label->setGeometry(QRect(210, 160, 43, 22)); + RR1Label->setFrameShape(QFrame::Box); + RR1Label->setFrameShadow(QFrame::Sunken); + RR1Label->setWordWrap(false); + D1R1Label = new QLabel(Env1GroupBox); + D1R1Label->setObjectName(QString::fromUtf8("D1R1Label")); + D1R1Label->setGeometry(QRect(60, 160, 43, 22)); + D1R1Label->setFrameShape(QFrame::Box); + D1R1Label->setFrameShadow(QFrame::Sunken); + D1R1Label->setWordWrap(false); + D1L1Label = new QLabel(Env1GroupBox); + D1L1Label->setObjectName(QString::fromUtf8("D1L1Label")); + D1L1Label->setGeometry(QRect(110, 160, 43, 22)); + D1L1Label->setFrameShape(QFrame::Box); + D1L1Label->setFrameShadow(QFrame::Sunken); + D1L1Label->setWordWrap(false); + D2R1Label = new QLabel(Env1GroupBox); + D2R1Label->setObjectName(QString::fromUtf8("D2R1Label")); + D2R1Label->setGeometry(QRect(160, 160, 43, 22)); + D2R1Label->setFrameShape(QFrame::Box); + D2R1Label->setFrameShadow(QFrame::Sunken); + D2R1Label->setWordWrap(false); + D1L1Slider = new QSlider(Env1GroupBox); + D1L1Slider->setObjectName(QString::fromUtf8("D1L1Slider")); + D1L1Slider->setGeometry(QRect(120, 50, 20, 100)); + D1L1Slider->setCursor(QCursor(static_cast(13))); + D1L1Slider->setMaximum(15); + D1L1Slider->setSingleStep(1); + D1L1Slider->setPageStep(1); + D1L1Slider->setValue(0); + D1L1Slider->setOrientation(Qt::Vertical); + D1L1Slider->setTickPosition(QSlider::NoTicks); + D2R1Slider = new QSlider(Env1GroupBox); + D2R1Slider->setObjectName(QString::fromUtf8("D2R1Slider")); + D2R1Slider->setGeometry(QRect(170, 50, 20, 100)); + D2R1Slider->setCursor(QCursor(static_cast(13))); + D2R1Slider->setMaximum(31); + D2R1Slider->setSingleStep(1); + D2R1Slider->setPageStep(1); + D2R1Slider->setValue(0); + D2R1Slider->setOrientation(Qt::Vertical); + D2R1Slider->setTickPosition(QSlider::NoTicks); + D1R1Slider = new QSlider(Env1GroupBox); + D1R1Slider->setObjectName(QString::fromUtf8("D1R1Slider")); + D1R1Slider->setGeometry(QRect(70, 50, 20, 100)); + D1R1Slider->setCursor(QCursor(static_cast(13))); + D1R1Slider->setMouseTracking(false); + D1R1Slider->setFocusPolicy(Qt::TabFocus); + D1R1Slider->setAcceptDrops(false); + D1R1Slider->setMaximum(31); + D1R1Slider->setSingleStep(1); + D1R1Slider->setPageStep(1); + D1R1Slider->setValue(0); + D1R1Slider->setOrientation(Qt::Vertical); + D1R1Slider->setTickPosition(QSlider::NoTicks); + RR1Slider = new QSlider(Env1GroupBox); + RR1Slider->setObjectName(QString::fromUtf8("RR1Slider")); + RR1Slider->setGeometry(QRect(220, 50, 20, 100)); + RR1Slider->setCursor(QCursor(static_cast(13))); + RR1Slider->setMinimum(0); + RR1Slider->setMaximum(15); + RR1Slider->setSingleStep(1); + RR1Slider->setPageStep(1); + RR1Slider->setValue(0); + RR1Slider->setOrientation(Qt::Vertical); + RR1Slider->setTickPosition(QSlider::NoTicks); + RR1Slider->setTickInterval(0); + AR1Label = new QLabel(Env1GroupBox); + AR1Label->setObjectName(QString::fromUtf8("AR1Label")); + AR1Label->setGeometry(QRect(10, 160, 40, 22)); + AR1Label->setFrameShape(QFrame::Box); + AR1Label->setFrameShadow(QFrame::Sunken); + AR1Label->setWordWrap(false); + D1R1SpinBox = new QSpinBox(Env1GroupBox); + D1R1SpinBox->setObjectName(QString::fromUtf8("D1R1SpinBox")); + D1R1SpinBox->setGeometry(QRect(60, 20, 40, 21)); + D1R1SpinBox->setFont(font2); + D1R1SpinBox->setMaximum(31); + D1L1SpinBox = new QSpinBox(Env1GroupBox); + D1L1SpinBox->setObjectName(QString::fromUtf8("D1L1SpinBox")); + D1L1SpinBox->setGeometry(QRect(110, 20, 40, 21)); + D1L1SpinBox->setFont(font2); + D1L1SpinBox->setMaximum(15); + D2R1SpinBox = new QSpinBox(Env1GroupBox); + D2R1SpinBox->setObjectName(QString::fromUtf8("D2R1SpinBox")); + D2R1SpinBox->setGeometry(QRect(160, 20, 40, 21)); + D2R1SpinBox->setFont(font2); + D2R1SpinBox->setMaximum(31); + RR1SpinBox = new QSpinBox(Env1GroupBox); + RR1SpinBox->setObjectName(QString::fromUtf8("RR1SpinBox")); + RR1SpinBox->setGeometry(QRect(210, 20, 40, 21)); + RR1SpinBox->setFont(font2); + RR1SpinBox->setMaximum(15); + AR1Slider = new QSlider(Env1GroupBox); + AR1Slider->setObjectName(QString::fromUtf8("AR1Slider")); + AR1Slider->setGeometry(QRect(20, 50, 20, 100)); + AR1Slider->setCursor(QCursor(static_cast(13))); + AR1Slider->setMaximum(31); + AR1Slider->setSingleStep(1); + AR1Slider->setPageStep(1); + AR1Slider->setValue(0); + AR1Slider->setOrientation(Qt::Vertical); + AR1Slider->setTickPosition(QSlider::NoTicks); + AR1SpinBox = new QSpinBox(Env1GroupBox); + AR1SpinBox->setObjectName(QString::fromUtf8("AR1SpinBox")); + AR1SpinBox->setGeometry(QRect(10, 20, 40, 21)); + AR1SpinBox->setFont(font2); + AR1SpinBox->setMaximum(31); + Scaling1GroupBox = new Q3GroupBox(tab); + Scaling1GroupBox->setObjectName(QString::fromUtf8("Scaling1GroupBox")); + Scaling1GroupBox->setGeometry(QRect(280, 0, 110, 190)); + LS1Label = new QLabel(Scaling1GroupBox); + LS1Label->setObjectName(QString::fromUtf8("LS1Label")); + LS1Label->setGeometry(QRect(10, 160, 40, 22)); + LS1Label->setFrameShape(QFrame::Box); + LS1Label->setFrameShadow(QFrame::Sunken); + LS1Label->setWordWrap(false); + RS1Label = new QLabel(Scaling1GroupBox); + RS1Label->setObjectName(QString::fromUtf8("RS1Label")); + RS1Label->setGeometry(QRect(60, 160, 40, 22)); + RS1Label->setFrameShape(QFrame::Box); + RS1Label->setFrameShadow(QFrame::Sunken); + RS1Label->setWordWrap(false); + LS1Slider = new QSlider(Scaling1GroupBox); + LS1Slider->setObjectName(QString::fromUtf8("LS1Slider")); + LS1Slider->setGeometry(QRect(20, 50, 19, 100)); + LS1Slider->setCursor(QCursor(static_cast(13))); + LS1Slider->setMaximum(99); + LS1Slider->setSingleStep(1); + LS1Slider->setPageStep(1); + LS1Slider->setValue(0); + LS1Slider->setOrientation(Qt::Vertical); + LS1Slider->setTickPosition(QSlider::NoTicks); + RS1Slider = new QSlider(Scaling1GroupBox); + RS1Slider->setObjectName(QString::fromUtf8("RS1Slider")); + RS1Slider->setGeometry(QRect(70, 50, 19, 100)); + RS1Slider->setCursor(QCursor(static_cast(13))); + RS1Slider->setMaximum(3); + RS1Slider->setSingleStep(1); + RS1Slider->setPageStep(1); + RS1Slider->setValue(0); + RS1Slider->setOrientation(Qt::Vertical); + RS1Slider->setTickPosition(QSlider::NoTicks); + LS1SpinBox = new QSpinBox(Scaling1GroupBox); + LS1SpinBox->setObjectName(QString::fromUtf8("LS1SpinBox")); + LS1SpinBox->setGeometry(QRect(10, 20, 40, 21)); + LS1SpinBox->setFont(font2); + LS1SpinBox->setMaximum(99); + RS1SpinBox = new QSpinBox(Scaling1GroupBox); + RS1SpinBox->setObjectName(QString::fromUtf8("RS1SpinBox")); + RS1SpinBox->setGeometry(QRect(60, 20, 40, 21)); + RS1SpinBox->setFont(font2); + RS1SpinBox->setMaximum(3); + Vol1groupBox = new Q3GroupBox(tab); + Vol1groupBox->setObjectName(QString::fromUtf8("Vol1groupBox")); + Vol1groupBox->setGeometry(QRect(400, 0, 60, 190)); + Vol1Slider = new QSlider(Vol1groupBox); + Vol1Slider->setObjectName(QString::fromUtf8("Vol1Slider")); + Vol1Slider->setGeometry(QRect(20, 50, 19, 130)); + Vol1Slider->setCursor(QCursor(static_cast(13))); + Vol1Slider->setMaximum(99); + Vol1Slider->setSingleStep(1); + Vol1Slider->setPageStep(1); + Vol1Slider->setValue(0); + Vol1Slider->setOrientation(Qt::Vertical); + Vol1Slider->setTickPosition(QSlider::NoTicks); + Vol1SpinBox = new QSpinBox(Vol1groupBox); + Vol1SpinBox->setObjectName(QString::fromUtf8("Vol1SpinBox")); + Vol1SpinBox->setGeometry(QRect(10, 20, 40, 21)); + Vol1SpinBox->setFont(font2); + Vol1SpinBox->setMaximum(99); + sensitivity1groupBox = new Q3GroupBox(tab); + sensitivity1groupBox->setObjectName(QString::fromUtf8("sensitivity1groupBox")); + sensitivity1groupBox->setGeometry(QRect(10, 240, 260, 80)); + EGS1Label = new QLabel(sensitivity1groupBox); + EGS1Label->setObjectName(QString::fromUtf8("EGS1Label")); + EGS1Label->setGeometry(QRect(80, 20, 40, 22)); + EGS1Label->setFrameShape(QFrame::Box); + EGS1Label->setFrameShadow(QFrame::Sunken); + EGS1Label->setWordWrap(false); + KVS1Label = new QLabel(sensitivity1groupBox); + KVS1Label->setObjectName(QString::fromUtf8("KVS1Label")); + KVS1Label->setGeometry(QRect(10, 50, 40, 22)); + KVS1Label->setFrameShape(QFrame::Box); + KVS1Label->setFrameShadow(QFrame::Sunken); + KVS1Label->setWordWrap(false); + AME1CheckBox = new QCheckBox(sensitivity1groupBox); + AME1CheckBox->setObjectName(QString::fromUtf8("AME1CheckBox")); + AME1CheckBox->setGeometry(QRect(10, 20, 60, 25)); + AME1CheckBox->setFont(font); + AME1CheckBox->setCursor(QCursor(static_cast(13))); + KVS1Slider = new QSlider(sensitivity1groupBox); + KVS1Slider->setObjectName(QString::fromUtf8("KVS1Slider")); + KVS1Slider->setGeometry(QRect(60, 50, 84, 19)); + KVS1Slider->setCursor(QCursor(static_cast(13))); + KVS1Slider->setAcceptDrops(false); + KVS1Slider->setMaximum(7); + KVS1Slider->setSingleStep(1); + KVS1Slider->setPageStep(1); + KVS1Slider->setOrientation(Qt::Horizontal); + KVS1Slider->setTickPosition(QSlider::NoTicks); + EBS1Slider = new QSlider(sensitivity1groupBox); + EBS1Slider->setObjectName(QString::fromUtf8("EBS1Slider")); + EBS1Slider->setGeometry(QRect(130, 20, 70, 20)); + EBS1Slider->setCursor(QCursor(static_cast(13))); + EBS1Slider->setMaximum(7); + EBS1Slider->setSingleStep(1); + EBS1Slider->setPageStep(1); + EBS1Slider->setOrientation(Qt::Horizontal); + EBS1Slider->setTickPosition(QSlider::NoTicks); + KVS1SpinBox = new QSpinBox(sensitivity1groupBox); + KVS1SpinBox->setObjectName(QString::fromUtf8("KVS1SpinBox")); + KVS1SpinBox->setGeometry(QRect(160, 50, 40, 21)); + KVS1SpinBox->setFont(font2); + KVS1SpinBox->setMaximum(7); + EBS1SpinBox = new QSpinBox(sensitivity1groupBox); + EBS1SpinBox->setObjectName(QString::fromUtf8("EBS1SpinBox")); + EBS1SpinBox->setGeometry(QRect(210, 20, 40, 21)); + EBS1SpinBox->setFont(font2); + EBS1SpinBox->setMaximum(7); + DetWaveEGS1GroupBox = new Q3GroupBox(tab); + DetWaveEGS1GroupBox->setObjectName(QString::fromUtf8("DetWaveEGS1GroupBox")); + DetWaveEGS1GroupBox->setGeometry(QRect(280, 240, 180, 80)); + WaveForm1ComboBox = new QComboBox(DetWaveEGS1GroupBox); + WaveForm1ComboBox->setObjectName(QString::fromUtf8("WaveForm1ComboBox")); + WaveForm1ComboBox->setGeometry(QRect(10, 50, 80, 20)); + WaveForm1ComboBox->setCursor(QCursor(static_cast(13))); + DET1Label = new QLabel(DetWaveEGS1GroupBox); + DET1Label->setObjectName(QString::fromUtf8("DET1Label")); + DET1Label->setGeometry(QRect(10, 20, 44, 24)); + DET1Label->setFrameShape(QFrame::Box); + DET1Label->setFrameShadow(QFrame::Sunken); + DET1Label->setWordWrap(false); + EGQ1ComboBox = new QComboBox(DetWaveEGS1GroupBox); + EGQ1ComboBox->setObjectName(QString::fromUtf8("EGQ1ComboBox")); + EGQ1ComboBox->setEnabled(false); + EGQ1ComboBox->setGeometry(QRect(100, 50, 70, 20)); + EGQ1ComboBox->setCursor(QCursor(static_cast(13))); + DET1Slider = new QSlider(DetWaveEGS1GroupBox); + DET1Slider->setObjectName(QString::fromUtf8("DET1Slider")); + DET1Slider->setGeometry(QRect(60, 20, 70, 19)); + DET1Slider->setCursor(QCursor(static_cast(13))); + DET1Slider->setMinimum(-3); + DET1Slider->setMaximum(3); + DET1Slider->setSingleStep(1); + DET1Slider->setPageStep(1); + DET1Slider->setValue(0); + DET1Slider->setOrientation(Qt::Horizontal); + DET1Slider->setTickPosition(QSlider::NoTicks); + DET1SpinBox = new QSpinBox(DetWaveEGS1GroupBox); + DET1SpinBox->setObjectName(QString::fromUtf8("DET1SpinBox")); + DET1SpinBox->setGeometry(QRect(140, 20, 30, 21)); + DET1SpinBox->setFont(font2); + DET1SpinBox->setMaximum(3); + DET1SpinBox->setMinimum(-3); + deicsOnzeTabWidget->addTab(tab, QString()); + tab1 = new QWidget(); + tab1->setObjectName(QString::fromUtf8("tab1")); + Frequency2groupBox = new Q3GroupBox(tab1); + Frequency2groupBox->setObjectName(QString::fromUtf8("Frequency2groupBox")); + Frequency2groupBox->setGeometry(QRect(10, 190, 450, 50)); + Fix2CheckBox = new QCheckBox(Frequency2groupBox); + Fix2CheckBox->setObjectName(QString::fromUtf8("Fix2CheckBox")); + Fix2CheckBox->setEnabled(true); + Fix2CheckBox->setGeometry(QRect(400, 20, 40, 25)); + Fix2CheckBox->setFont(font); + Fix2CheckBox->setCursor(QCursor(static_cast(13))); + Freq2Label = new QLabel(Frequency2groupBox); + Freq2Label->setObjectName(QString::fromUtf8("Freq2Label")); + Freq2Label->setGeometry(QRect(250, 20, 50, 22)); + Freq2Label->setFrameShape(QFrame::Box); + Freq2Label->setFrameShadow(QFrame::Sunken); + Freq2Label->setWordWrap(false); + FineRatio2Label = new QLabel(Frequency2groupBox); + FineRatio2Label->setObjectName(QString::fromUtf8("FineRatio2Label")); + FineRatio2Label->setGeometry(QRect(140, 20, 50, 22)); + FineRatio2Label->setFrameShape(QFrame::Box); + FineRatio2Label->setFrameShadow(QFrame::Sunken); + FineRatio2Label->setWordWrap(false); + CoarseRatio2Label = new QLabel(Frequency2groupBox); + CoarseRatio2Label->setObjectName(QString::fromUtf8("CoarseRatio2Label")); + CoarseRatio2Label->setGeometry(QRect(10, 20, 70, 22)); + CoarseRatio2Label->setFrameShape(QFrame::Box); + CoarseRatio2Label->setFrameShadow(QFrame::Sunken); + CoarseRatio2Label->setWordWrap(false); + CoarseRatio2SpinBox = new QSpinBox(Frequency2groupBox); + CoarseRatio2SpinBox->setObjectName(QString::fromUtf8("CoarseRatio2SpinBox")); + CoarseRatio2SpinBox->setGeometry(QRect(90, 20, 40, 21)); + CoarseRatio2SpinBox->setFont(font2); + FineRatio2SpinBox = new QSpinBox(Frequency2groupBox); + FineRatio2SpinBox->setObjectName(QString::fromUtf8("FineRatio2SpinBox")); + FineRatio2SpinBox->setGeometry(QRect(200, 20, 40, 21)); + FineRatio2SpinBox->setFont(font2); + Freq2SpinBox = new QSpinBox(Frequency2groupBox); + Freq2SpinBox->setObjectName(QString::fromUtf8("Freq2SpinBox")); + Freq2SpinBox->setEnabled(false); + Freq2SpinBox->setGeometry(QRect(310, 20, 80, 21)); + Freq2SpinBox->setFont(font2); + Freq2SpinBox->setMaximum(32000); + Env2GroupBox = new Q3GroupBox(tab1); + Env2GroupBox->setObjectName(QString::fromUtf8("Env2GroupBox")); + Env2GroupBox->setGeometry(QRect(10, 0, 260, 190)); + AR2Label = new QLabel(Env2GroupBox); + AR2Label->setObjectName(QString::fromUtf8("AR2Label")); + AR2Label->setGeometry(QRect(10, 160, 40, 22)); + AR2Label->setFrameShape(QFrame::Box); + AR2Label->setFrameShadow(QFrame::Sunken); + AR2Label->setWordWrap(false); + RR2Label = new QLabel(Env2GroupBox); + RR2Label->setObjectName(QString::fromUtf8("RR2Label")); + RR2Label->setGeometry(QRect(210, 160, 43, 22)); + RR2Label->setFrameShape(QFrame::Box); + RR2Label->setFrameShadow(QFrame::Sunken); + RR2Label->setWordWrap(false); + D2R2Label = new QLabel(Env2GroupBox); + D2R2Label->setObjectName(QString::fromUtf8("D2R2Label")); + D2R2Label->setGeometry(QRect(160, 160, 43, 22)); + D2R2Label->setFrameShape(QFrame::Box); + D2R2Label->setFrameShadow(QFrame::Sunken); + D2R2Label->setWordWrap(false); + D1L2Label = new QLabel(Env2GroupBox); + D1L2Label->setObjectName(QString::fromUtf8("D1L2Label")); + D1L2Label->setGeometry(QRect(110, 160, 43, 22)); + D1L2Label->setFrameShape(QFrame::Box); + D1L2Label->setFrameShadow(QFrame::Sunken); + D1L2Label->setWordWrap(false); + D1R2Label = new QLabel(Env2GroupBox); + D1R2Label->setObjectName(QString::fromUtf8("D1R2Label")); + D1R2Label->setGeometry(QRect(60, 160, 43, 22)); + D1R2Label->setFrameShape(QFrame::Box); + D1R2Label->setFrameShadow(QFrame::Sunken); + D1R2Label->setWordWrap(false); + AR2Slider = new QSlider(Env2GroupBox); + AR2Slider->setObjectName(QString::fromUtf8("AR2Slider")); + AR2Slider->setEnabled(true); + AR2Slider->setGeometry(QRect(20, 50, 20, 100)); + AR2Slider->setCursor(QCursor(static_cast(13))); + AR2Slider->setMaximum(31); + AR2Slider->setPageStep(1); + AR2Slider->setValue(0); + AR2Slider->setTracking(true); + AR2Slider->setOrientation(Qt::Vertical); + AR2Slider->setTickPosition(QSlider::NoTicks); + D1R2Slider = new QSlider(Env2GroupBox); + D1R2Slider->setObjectName(QString::fromUtf8("D1R2Slider")); + D1R2Slider->setGeometry(QRect(70, 50, 20, 100)); + D1R2Slider->setCursor(QCursor(static_cast(13))); + D1R2Slider->setMaximum(31); + D1R2Slider->setPageStep(1); + D1R2Slider->setValue(0); + D1R2Slider->setOrientation(Qt::Vertical); + D1R2Slider->setTickPosition(QSlider::NoTicks); + D1L2Slider = new QSlider(Env2GroupBox); + D1L2Slider->setObjectName(QString::fromUtf8("D1L2Slider")); + D1L2Slider->setGeometry(QRect(120, 50, 20, 100)); + D1L2Slider->setCursor(QCursor(static_cast(13))); + D1L2Slider->setMaximum(15); + D1L2Slider->setPageStep(1); + D1L2Slider->setValue(0); + D1L2Slider->setOrientation(Qt::Vertical); + D1L2Slider->setTickPosition(QSlider::NoTicks); + D2R2Slider = new QSlider(Env2GroupBox); + D2R2Slider->setObjectName(QString::fromUtf8("D2R2Slider")); + D2R2Slider->setGeometry(QRect(170, 50, 20, 100)); + D2R2Slider->setCursor(QCursor(static_cast(13))); + D2R2Slider->setMaximum(31); + D2R2Slider->setPageStep(1); + D2R2Slider->setValue(0); + D2R2Slider->setOrientation(Qt::Vertical); + D2R2Slider->setTickPosition(QSlider::NoTicks); + RR2Slider = new QSlider(Env2GroupBox); + RR2Slider->setObjectName(QString::fromUtf8("RR2Slider")); + RR2Slider->setGeometry(QRect(220, 50, 20, 100)); + RR2Slider->setCursor(QCursor(static_cast(13))); + RR2Slider->setMinimum(0); + RR2Slider->setMaximum(15); + RR2Slider->setPageStep(1); + RR2Slider->setValue(0); + RR2Slider->setOrientation(Qt::Vertical); + RR2Slider->setTickPosition(QSlider::NoTicks); + RR2Slider->setTickInterval(0); + D1R2SpinBox = new QSpinBox(Env2GroupBox); + D1R2SpinBox->setObjectName(QString::fromUtf8("D1R2SpinBox")); + D1R2SpinBox->setGeometry(QRect(60, 20, 40, 21)); + D1R2SpinBox->setFont(font2); + D1R2SpinBox->setMaximum(31); + D1L2SpinBox = new QSpinBox(Env2GroupBox); + D1L2SpinBox->setObjectName(QString::fromUtf8("D1L2SpinBox")); + D1L2SpinBox->setGeometry(QRect(110, 20, 40, 21)); + D1L2SpinBox->setFont(font2); + D1L2SpinBox->setMaximum(15); + D2R2SpinBox = new QSpinBox(Env2GroupBox); + D2R2SpinBox->setObjectName(QString::fromUtf8("D2R2SpinBox")); + D2R2SpinBox->setGeometry(QRect(160, 20, 40, 21)); + D2R2SpinBox->setFont(font2); + D2R2SpinBox->setMaximum(31); + RR2SpinBox = new QSpinBox(Env2GroupBox); + RR2SpinBox->setObjectName(QString::fromUtf8("RR2SpinBox")); + RR2SpinBox->setGeometry(QRect(210, 20, 40, 21)); + RR2SpinBox->setFont(font2); + RR2SpinBox->setMaximum(15); + AR2SpinBox = new QSpinBox(Env2GroupBox); + AR2SpinBox->setObjectName(QString::fromUtf8("AR2SpinBox")); + AR2SpinBox->setGeometry(QRect(10, 20, 40, 21)); + AR2SpinBox->setFont(font2); + AR2SpinBox->setMaximum(31); + Scaling2GroupBox = new Q3GroupBox(tab1); + Scaling2GroupBox->setObjectName(QString::fromUtf8("Scaling2GroupBox")); + Scaling2GroupBox->setGeometry(QRect(280, 0, 110, 190)); + LS2Label = new QLabel(Scaling2GroupBox); + LS2Label->setObjectName(QString::fromUtf8("LS2Label")); + LS2Label->setGeometry(QRect(10, 160, 40, 22)); + LS2Label->setFrameShape(QFrame::Box); + LS2Label->setFrameShadow(QFrame::Sunken); + LS2Label->setWordWrap(false); + RS2Label = new QLabel(Scaling2GroupBox); + RS2Label->setObjectName(QString::fromUtf8("RS2Label")); + RS2Label->setGeometry(QRect(60, 160, 40, 22)); + RS2Label->setFrameShape(QFrame::Box); + RS2Label->setFrameShadow(QFrame::Sunken); + RS2Label->setWordWrap(false); + LS2Slider = new QSlider(Scaling2GroupBox); + LS2Slider->setObjectName(QString::fromUtf8("LS2Slider")); + LS2Slider->setGeometry(QRect(20, 50, 20, 100)); + LS2Slider->setCursor(QCursor(static_cast(13))); + LS2Slider->setMaximum(99); + LS2Slider->setPageStep(1); + LS2Slider->setValue(0); + LS2Slider->setOrientation(Qt::Vertical); + LS2Slider->setTickPosition(QSlider::NoTicks); + LS2Slider->setTickInterval(1); + RS2Slider = new QSlider(Scaling2GroupBox); + RS2Slider->setObjectName(QString::fromUtf8("RS2Slider")); + RS2Slider->setGeometry(QRect(70, 50, 20, 100)); + RS2Slider->setCursor(QCursor(static_cast(13))); + RS2Slider->setMaximum(3); + RS2Slider->setPageStep(1); + RS2Slider->setValue(0); + RS2Slider->setOrientation(Qt::Vertical); + RS2Slider->setTickPosition(QSlider::NoTicks); + LS2SpinBox = new QSpinBox(Scaling2GroupBox); + LS2SpinBox->setObjectName(QString::fromUtf8("LS2SpinBox")); + LS2SpinBox->setGeometry(QRect(10, 20, 40, 21)); + LS2SpinBox->setFont(font2); + LS2SpinBox->setMaximum(99); + RS2SpinBox = new QSpinBox(Scaling2GroupBox); + RS2SpinBox->setObjectName(QString::fromUtf8("RS2SpinBox")); + RS2SpinBox->setGeometry(QRect(60, 20, 40, 21)); + RS2SpinBox->setFont(font2); + RS2SpinBox->setMaximum(3); + Vol2groupBox = new Q3GroupBox(tab1); + Vol2groupBox->setObjectName(QString::fromUtf8("Vol2groupBox")); + Vol2groupBox->setGeometry(QRect(400, 0, 60, 190)); + Vol2Slider = new QSlider(Vol2groupBox); + Vol2Slider->setObjectName(QString::fromUtf8("Vol2Slider")); + Vol2Slider->setGeometry(QRect(20, 50, 19, 130)); + Vol2Slider->setCursor(QCursor(static_cast(13))); + Vol2Slider->setMaximum(99); + Vol2Slider->setPageStep(1); + Vol2Slider->setValue(0); + Vol2Slider->setOrientation(Qt::Vertical); + Vol2Slider->setTickPosition(QSlider::NoTicks); + Vol2SpinBox = new QSpinBox(Vol2groupBox); + Vol2SpinBox->setObjectName(QString::fromUtf8("Vol2SpinBox")); + Vol2SpinBox->setGeometry(QRect(10, 20, 40, 21)); + Vol2SpinBox->setFont(font2); + Vol2SpinBox->setMaximum(99); + sensitivity2groupBox = new Q3GroupBox(tab1); + sensitivity2groupBox->setObjectName(QString::fromUtf8("sensitivity2groupBox")); + sensitivity2groupBox->setGeometry(QRect(10, 240, 260, 80)); + EGS2Label = new QLabel(sensitivity2groupBox); + EGS2Label->setObjectName(QString::fromUtf8("EGS2Label")); + EGS2Label->setGeometry(QRect(80, 20, 40, 22)); + EGS2Label->setFrameShape(QFrame::Box); + EGS2Label->setFrameShadow(QFrame::Sunken); + EGS2Label->setWordWrap(false); + KVS2Label = new QLabel(sensitivity2groupBox); + KVS2Label->setObjectName(QString::fromUtf8("KVS2Label")); + KVS2Label->setGeometry(QRect(10, 50, 40, 22)); + KVS2Label->setFrameShape(QFrame::Box); + KVS2Label->setFrameShadow(QFrame::Sunken); + KVS2Label->setWordWrap(false); + AME2CheckBox = new QCheckBox(sensitivity2groupBox); + AME2CheckBox->setObjectName(QString::fromUtf8("AME2CheckBox")); + AME2CheckBox->setGeometry(QRect(10, 20, 60, 25)); + AME2CheckBox->setFont(font); + AME2CheckBox->setCursor(QCursor(static_cast(13))); + KVS2Slider = new QSlider(sensitivity2groupBox); + KVS2Slider->setObjectName(QString::fromUtf8("KVS2Slider")); + KVS2Slider->setGeometry(QRect(60, 50, 84, 19)); + KVS2Slider->setCursor(QCursor(static_cast(13))); + KVS2Slider->setAcceptDrops(false); + KVS2Slider->setMaximum(7); + KVS2Slider->setPageStep(1); + KVS2Slider->setOrientation(Qt::Horizontal); + KVS2Slider->setTickPosition(QSlider::NoTicks); + EBS2Slider = new QSlider(sensitivity2groupBox); + EBS2Slider->setObjectName(QString::fromUtf8("EBS2Slider")); + EBS2Slider->setGeometry(QRect(130, 20, 70, 20)); + EBS2Slider->setCursor(QCursor(static_cast(13))); + EBS2Slider->setMaximum(7); + EBS2Slider->setPageStep(1); + EBS2Slider->setOrientation(Qt::Horizontal); + EBS2Slider->setTickPosition(QSlider::NoTicks); + EBS2SpinBox = new QSpinBox(sensitivity2groupBox); + EBS2SpinBox->setObjectName(QString::fromUtf8("EBS2SpinBox")); + EBS2SpinBox->setGeometry(QRect(210, 20, 40, 21)); + EBS2SpinBox->setFont(font2); + EBS2SpinBox->setMaximum(7); + KVS2SpinBox = new QSpinBox(sensitivity2groupBox); + KVS2SpinBox->setObjectName(QString::fromUtf8("KVS2SpinBox")); + KVS2SpinBox->setGeometry(QRect(160, 50, 40, 21)); + KVS2SpinBox->setFont(font2); + KVS2SpinBox->setMaximum(7); + DetWaveEGS2GroupBox = new Q3GroupBox(tab1); + DetWaveEGS2GroupBox->setObjectName(QString::fromUtf8("DetWaveEGS2GroupBox")); + DetWaveEGS2GroupBox->setGeometry(QRect(280, 240, 180, 80)); + DET2Slider = new QSlider(DetWaveEGS2GroupBox); + DET2Slider->setObjectName(QString::fromUtf8("DET2Slider")); + DET2Slider->setGeometry(QRect(60, 20, 70, 19)); + DET2Slider->setCursor(QCursor(static_cast(13))); + DET2Slider->setMinimum(-3); + DET2Slider->setMaximum(3); + DET2Slider->setPageStep(1); + DET2Slider->setValue(0); + DET2Slider->setOrientation(Qt::Horizontal); + DET2Slider->setTickPosition(QSlider::NoTicks); + DET2Label = new QLabel(DetWaveEGS2GroupBox); + DET2Label->setObjectName(QString::fromUtf8("DET2Label")); + DET2Label->setGeometry(QRect(10, 20, 44, 24)); + DET2Label->setFrameShape(QFrame::Box); + DET2Label->setFrameShadow(QFrame::Sunken); + DET2Label->setWordWrap(false); + WaveForm2ComboBox = new QComboBox(DetWaveEGS2GroupBox); + WaveForm2ComboBox->setObjectName(QString::fromUtf8("WaveForm2ComboBox")); + WaveForm2ComboBox->setGeometry(QRect(10, 50, 80, 20)); + WaveForm2ComboBox->setCursor(QCursor(static_cast(13))); + EGS2comboBox = new QComboBox(DetWaveEGS2GroupBox); + EGS2comboBox->setObjectName(QString::fromUtf8("EGS2comboBox")); + EGS2comboBox->setEnabled(false); + EGS2comboBox->setGeometry(QRect(100, 50, 70, 20)); + EGS2comboBox->setCursor(QCursor(static_cast(13))); + DET2SpinBox = new QSpinBox(DetWaveEGS2GroupBox); + DET2SpinBox->setObjectName(QString::fromUtf8("DET2SpinBox")); + DET2SpinBox->setGeometry(QRect(140, 20, 30, 21)); + DET2SpinBox->setFont(font2); + DET2SpinBox->setMaximum(3); + DET2SpinBox->setMinimum(-3); + deicsOnzeTabWidget->addTab(tab1, QString()); + TabPage2 = new QWidget(); + TabPage2->setObjectName(QString::fromUtf8("TabPage2")); + Frequency3groupBox = new Q3GroupBox(TabPage2); + Frequency3groupBox->setObjectName(QString::fromUtf8("Frequency3groupBox")); + Frequency3groupBox->setGeometry(QRect(10, 190, 450, 50)); + Fix3CheckBox = new QCheckBox(Frequency3groupBox); + Fix3CheckBox->setObjectName(QString::fromUtf8("Fix3CheckBox")); + Fix3CheckBox->setEnabled(true); + Fix3CheckBox->setGeometry(QRect(400, 20, 40, 25)); + Fix3CheckBox->setFont(font); + Fix3CheckBox->setCursor(QCursor(static_cast(13))); + CoarseRatio3Label = new QLabel(Frequency3groupBox); + CoarseRatio3Label->setObjectName(QString::fromUtf8("CoarseRatio3Label")); + CoarseRatio3Label->setGeometry(QRect(10, 20, 70, 22)); + CoarseRatio3Label->setFrameShape(QFrame::Box); + CoarseRatio3Label->setFrameShadow(QFrame::Sunken); + CoarseRatio3Label->setWordWrap(false); + FineRatio3Label = new QLabel(Frequency3groupBox); + FineRatio3Label->setObjectName(QString::fromUtf8("FineRatio3Label")); + FineRatio3Label->setGeometry(QRect(140, 20, 50, 22)); + FineRatio3Label->setFrameShape(QFrame::Box); + FineRatio3Label->setFrameShadow(QFrame::Sunken); + FineRatio3Label->setWordWrap(false); + Freq3Label = new QLabel(Frequency3groupBox); + Freq3Label->setObjectName(QString::fromUtf8("Freq3Label")); + Freq3Label->setGeometry(QRect(250, 20, 50, 22)); + Freq3Label->setFrameShape(QFrame::Box); + Freq3Label->setFrameShadow(QFrame::Sunken); + Freq3Label->setWordWrap(false); + CoarseRatio3SpinBox = new QSpinBox(Frequency3groupBox); + CoarseRatio3SpinBox->setObjectName(QString::fromUtf8("CoarseRatio3SpinBox")); + CoarseRatio3SpinBox->setGeometry(QRect(90, 20, 40, 21)); + CoarseRatio3SpinBox->setFont(font2); + CoarseRatio3SpinBox->setCursor(QCursor(static_cast(0))); + FineRatio3SpinBox = new QSpinBox(Frequency3groupBox); + FineRatio3SpinBox->setObjectName(QString::fromUtf8("FineRatio3SpinBox")); + FineRatio3SpinBox->setGeometry(QRect(200, 20, 40, 21)); + FineRatio3SpinBox->setFont(font2); + FineRatio3SpinBox->setCursor(QCursor(static_cast(0))); + Freq3SpinBox = new QSpinBox(Frequency3groupBox); + Freq3SpinBox->setObjectName(QString::fromUtf8("Freq3SpinBox")); + Freq3SpinBox->setEnabled(false); + Freq3SpinBox->setGeometry(QRect(310, 20, 80, 21)); + Freq3SpinBox->setFont(font2); + Freq3SpinBox->setMaximum(32000); + Env3GroupBox = new Q3GroupBox(TabPage2); + Env3GroupBox->setObjectName(QString::fromUtf8("Env3GroupBox")); + Env3GroupBox->setGeometry(QRect(10, 0, 260, 190)); + RR3Label = new QLabel(Env3GroupBox); + RR3Label->setObjectName(QString::fromUtf8("RR3Label")); + RR3Label->setGeometry(QRect(210, 160, 43, 22)); + RR3Label->setFrameShape(QFrame::Box); + RR3Label->setFrameShadow(QFrame::Sunken); + RR3Label->setWordWrap(false); + D2R3Label = new QLabel(Env3GroupBox); + D2R3Label->setObjectName(QString::fromUtf8("D2R3Label")); + D2R3Label->setGeometry(QRect(160, 160, 43, 22)); + D2R3Label->setFrameShape(QFrame::Box); + D2R3Label->setFrameShadow(QFrame::Sunken); + D2R3Label->setWordWrap(false); + D1L3Label = new QLabel(Env3GroupBox); + D1L3Label->setObjectName(QString::fromUtf8("D1L3Label")); + D1L3Label->setGeometry(QRect(110, 160, 43, 22)); + D1L3Label->setFrameShape(QFrame::Box); + D1L3Label->setFrameShadow(QFrame::Sunken); + D1L3Label->setWordWrap(false); + D1R3Label = new QLabel(Env3GroupBox); + D1R3Label->setObjectName(QString::fromUtf8("D1R3Label")); + D1R3Label->setGeometry(QRect(60, 160, 43, 22)); + D1R3Label->setFrameShape(QFrame::Box); + D1R3Label->setFrameShadow(QFrame::Sunken); + D1R3Label->setWordWrap(false); + AR3Label = new QLabel(Env3GroupBox); + AR3Label->setObjectName(QString::fromUtf8("AR3Label")); + AR3Label->setGeometry(QRect(10, 160, 40, 22)); + AR3Label->setFrameShape(QFrame::Box); + AR3Label->setFrameShadow(QFrame::Sunken); + AR3Label->setWordWrap(false); + AR3Slider = new QSlider(Env3GroupBox); + AR3Slider->setObjectName(QString::fromUtf8("AR3Slider")); + AR3Slider->setGeometry(QRect(20, 50, 20, 100)); + AR3Slider->setCursor(QCursor(static_cast(13))); + AR3Slider->setMaximum(31); + AR3Slider->setPageStep(1); + AR3Slider->setValue(0); + AR3Slider->setOrientation(Qt::Vertical); + AR3Slider->setTickPosition(QSlider::NoTicks); + D1R3Slider = new QSlider(Env3GroupBox); + D1R3Slider->setObjectName(QString::fromUtf8("D1R3Slider")); + D1R3Slider->setGeometry(QRect(70, 50, 20, 100)); + D1R3Slider->setCursor(QCursor(static_cast(13))); + D1R3Slider->setMaximum(31); + D1R3Slider->setPageStep(1); + D1R3Slider->setValue(0); + D1R3Slider->setOrientation(Qt::Vertical); + D1R3Slider->setTickPosition(QSlider::NoTicks); + D1L3Slider = new QSlider(Env3GroupBox); + D1L3Slider->setObjectName(QString::fromUtf8("D1L3Slider")); + D1L3Slider->setGeometry(QRect(120, 50, 20, 100)); + D1L3Slider->setCursor(QCursor(static_cast(13))); + D1L3Slider->setMaximum(15); + D1L3Slider->setPageStep(1); + D1L3Slider->setValue(0); + D1L3Slider->setOrientation(Qt::Vertical); + D1L3Slider->setTickPosition(QSlider::NoTicks); + D2R3Slider = new QSlider(Env3GroupBox); + D2R3Slider->setObjectName(QString::fromUtf8("D2R3Slider")); + D2R3Slider->setGeometry(QRect(170, 50, 20, 100)); + D2R3Slider->setCursor(QCursor(static_cast(13))); + D2R3Slider->setMaximum(31); + D2R3Slider->setPageStep(1); + D2R3Slider->setValue(0); + D2R3Slider->setOrientation(Qt::Vertical); + D2R3Slider->setTickPosition(QSlider::NoTicks); + RR3Slider = new QSlider(Env3GroupBox); + RR3Slider->setObjectName(QString::fromUtf8("RR3Slider")); + RR3Slider->setGeometry(QRect(220, 50, 20, 100)); + RR3Slider->setCursor(QCursor(static_cast(13))); + RR3Slider->setMinimum(0); + RR3Slider->setMaximum(15); + RR3Slider->setPageStep(1); + RR3Slider->setValue(0); + RR3Slider->setOrientation(Qt::Vertical); + RR3Slider->setTickPosition(QSlider::NoTicks); + RR3Slider->setTickInterval(0); + D1R3SpinBox = new QSpinBox(Env3GroupBox); + D1R3SpinBox->setObjectName(QString::fromUtf8("D1R3SpinBox")); + D1R3SpinBox->setGeometry(QRect(60, 20, 40, 21)); + D1R3SpinBox->setFont(font2); + D1R3SpinBox->setMaximum(31); + D1L3SpinBox = new QSpinBox(Env3GroupBox); + D1L3SpinBox->setObjectName(QString::fromUtf8("D1L3SpinBox")); + D1L3SpinBox->setGeometry(QRect(110, 20, 40, 21)); + D1L3SpinBox->setFont(font2); + D1L3SpinBox->setMaximum(15); + D2R3SpinBox = new QSpinBox(Env3GroupBox); + D2R3SpinBox->setObjectName(QString::fromUtf8("D2R3SpinBox")); + D2R3SpinBox->setGeometry(QRect(160, 20, 40, 21)); + D2R3SpinBox->setFont(font2); + D2R3SpinBox->setMaximum(31); + RR3SpinBox = new QSpinBox(Env3GroupBox); + RR3SpinBox->setObjectName(QString::fromUtf8("RR3SpinBox")); + RR3SpinBox->setGeometry(QRect(210, 20, 40, 21)); + RR3SpinBox->setFont(font2); + RR3SpinBox->setMaximum(15); + AR3SpinBox = new QSpinBox(Env3GroupBox); + AR3SpinBox->setObjectName(QString::fromUtf8("AR3SpinBox")); + AR3SpinBox->setGeometry(QRect(10, 20, 40, 21)); + AR3SpinBox->setFont(font2); + AR3SpinBox->setMaximum(31); + Scaling3GroupBox = new Q3GroupBox(TabPage2); + Scaling3GroupBox->setObjectName(QString::fromUtf8("Scaling3GroupBox")); + Scaling3GroupBox->setGeometry(QRect(280, 0, 110, 190)); + LS3Label = new QLabel(Scaling3GroupBox); + LS3Label->setObjectName(QString::fromUtf8("LS3Label")); + LS3Label->setGeometry(QRect(10, 160, 40, 22)); + LS3Label->setFrameShape(QFrame::Box); + LS3Label->setFrameShadow(QFrame::Sunken); + LS3Label->setWordWrap(false); + RS3Label = new QLabel(Scaling3GroupBox); + RS3Label->setObjectName(QString::fromUtf8("RS3Label")); + RS3Label->setGeometry(QRect(60, 160, 40, 22)); + RS3Label->setFrameShape(QFrame::Box); + RS3Label->setFrameShadow(QFrame::Sunken); + RS3Label->setWordWrap(false); + LS3Slider = new QSlider(Scaling3GroupBox); + LS3Slider->setObjectName(QString::fromUtf8("LS3Slider")); + LS3Slider->setGeometry(QRect(20, 50, 19, 100)); + LS3Slider->setCursor(QCursor(static_cast(13))); + LS3Slider->setMaximum(99); + LS3Slider->setPageStep(1); + LS3Slider->setValue(0); + LS3Slider->setOrientation(Qt::Vertical); + LS3Slider->setTickPosition(QSlider::NoTicks); + RS3Slider = new QSlider(Scaling3GroupBox); + RS3Slider->setObjectName(QString::fromUtf8("RS3Slider")); + RS3Slider->setGeometry(QRect(70, 50, 19, 100)); + RS3Slider->setCursor(QCursor(static_cast(13))); + RS3Slider->setMaximum(3); + RS3Slider->setPageStep(1); + RS3Slider->setValue(0); + RS3Slider->setOrientation(Qt::Vertical); + RS3Slider->setTickPosition(QSlider::NoTicks); + LS3SpinBox = new QSpinBox(Scaling3GroupBox); + LS3SpinBox->setObjectName(QString::fromUtf8("LS3SpinBox")); + LS3SpinBox->setGeometry(QRect(10, 20, 40, 21)); + LS3SpinBox->setFont(font2); + LS3SpinBox->setMaximum(99); + RS3SpinBox = new QSpinBox(Scaling3GroupBox); + RS3SpinBox->setObjectName(QString::fromUtf8("RS3SpinBox")); + RS3SpinBox->setGeometry(QRect(60, 20, 40, 21)); + RS3SpinBox->setFont(font2); + RS3SpinBox->setMaximum(3); + Vol3groupBox = new Q3GroupBox(TabPage2); + Vol3groupBox->setObjectName(QString::fromUtf8("Vol3groupBox")); + Vol3groupBox->setGeometry(QRect(400, 0, 60, 190)); + Vol3Slider = new QSlider(Vol3groupBox); + Vol3Slider->setObjectName(QString::fromUtf8("Vol3Slider")); + Vol3Slider->setGeometry(QRect(20, 50, 19, 130)); + Vol3Slider->setCursor(QCursor(static_cast(13))); + Vol3Slider->setMaximum(99); + Vol3Slider->setPageStep(1); + Vol3Slider->setValue(0); + Vol3Slider->setOrientation(Qt::Vertical); + Vol3Slider->setTickPosition(QSlider::NoTicks); + Vol3SpinBox = new QSpinBox(Vol3groupBox); + Vol3SpinBox->setObjectName(QString::fromUtf8("Vol3SpinBox")); + Vol3SpinBox->setGeometry(QRect(10, 20, 40, 21)); + Vol3SpinBox->setFont(font2); + Vol3SpinBox->setMaximum(99); + sensitivity3groupBox = new Q3GroupBox(TabPage2); + sensitivity3groupBox->setObjectName(QString::fromUtf8("sensitivity3groupBox")); + sensitivity3groupBox->setGeometry(QRect(10, 240, 260, 80)); + EGS3Label = new QLabel(sensitivity3groupBox); + EGS3Label->setObjectName(QString::fromUtf8("EGS3Label")); + EGS3Label->setGeometry(QRect(80, 20, 40, 22)); + EGS3Label->setFrameShape(QFrame::Box); + EGS3Label->setFrameShadow(QFrame::Sunken); + EGS3Label->setWordWrap(false); + KVS3Label = new QLabel(sensitivity3groupBox); + KVS3Label->setObjectName(QString::fromUtf8("KVS3Label")); + KVS3Label->setGeometry(QRect(10, 50, 40, 22)); + KVS3Label->setFrameShape(QFrame::Box); + KVS3Label->setFrameShadow(QFrame::Sunken); + KVS3Label->setWordWrap(false); + AME3CheckBox = new QCheckBox(sensitivity3groupBox); + AME3CheckBox->setObjectName(QString::fromUtf8("AME3CheckBox")); + AME3CheckBox->setGeometry(QRect(10, 20, 60, 25)); + AME3CheckBox->setFont(font); + AME3CheckBox->setCursor(QCursor(static_cast(13))); + KVS3Slider = new QSlider(sensitivity3groupBox); + KVS3Slider->setObjectName(QString::fromUtf8("KVS3Slider")); + KVS3Slider->setGeometry(QRect(60, 50, 84, 19)); + KVS3Slider->setCursor(QCursor(static_cast(13))); + KVS3Slider->setAcceptDrops(false); + KVS3Slider->setMaximum(7); + KVS3Slider->setPageStep(1); + KVS3Slider->setOrientation(Qt::Horizontal); + KVS3Slider->setTickPosition(QSlider::NoTicks); + EBS3Slider = new QSlider(sensitivity3groupBox); + EBS3Slider->setObjectName(QString::fromUtf8("EBS3Slider")); + EBS3Slider->setGeometry(QRect(130, 20, 70, 20)); + EBS3Slider->setCursor(QCursor(static_cast(13))); + EBS3Slider->setMaximum(7); + EBS3Slider->setPageStep(1); + EBS3Slider->setOrientation(Qt::Horizontal); + EBS3Slider->setTickPosition(QSlider::NoTicks); + EBS3SpinBox = new QSpinBox(sensitivity3groupBox); + EBS3SpinBox->setObjectName(QString::fromUtf8("EBS3SpinBox")); + EBS3SpinBox->setGeometry(QRect(210, 20, 40, 21)); + EBS3SpinBox->setFont(font2); + EBS3SpinBox->setMaximum(7); + KVS3SpinBox = new QSpinBox(sensitivity3groupBox); + KVS3SpinBox->setObjectName(QString::fromUtf8("KVS3SpinBox")); + KVS3SpinBox->setGeometry(QRect(160, 50, 40, 21)); + KVS3SpinBox->setFont(font2); + KVS3SpinBox->setMaximum(7); + DetWaveEGS3GroupBox = new Q3GroupBox(TabPage2); + DetWaveEGS3GroupBox->setObjectName(QString::fromUtf8("DetWaveEGS3GroupBox")); + DetWaveEGS3GroupBox->setGeometry(QRect(280, 240, 180, 80)); + WaveForm3ComboBox = new QComboBox(DetWaveEGS3GroupBox); + WaveForm3ComboBox->setObjectName(QString::fromUtf8("WaveForm3ComboBox")); + WaveForm3ComboBox->setGeometry(QRect(10, 50, 80, 20)); + WaveForm3ComboBox->setCursor(QCursor(static_cast(13))); + EGS3comboBox = new QComboBox(DetWaveEGS3GroupBox); + EGS3comboBox->setObjectName(QString::fromUtf8("EGS3comboBox")); + EGS3comboBox->setEnabled(false); + EGS3comboBox->setGeometry(QRect(100, 50, 70, 20)); + EGS3comboBox->setCursor(QCursor(static_cast(13))); + DET3Label = new QLabel(DetWaveEGS3GroupBox); + DET3Label->setObjectName(QString::fromUtf8("DET3Label")); + DET3Label->setGeometry(QRect(10, 20, 44, 24)); + DET3Label->setFrameShape(QFrame::Box); + DET3Label->setFrameShadow(QFrame::Sunken); + DET3Label->setWordWrap(false); + DET3Slider = new QSlider(DetWaveEGS3GroupBox); + DET3Slider->setObjectName(QString::fromUtf8("DET3Slider")); + DET3Slider->setGeometry(QRect(60, 20, 70, 19)); + DET3Slider->setCursor(QCursor(static_cast(13))); + DET3Slider->setMinimum(-3); + DET3Slider->setMaximum(3); + DET3Slider->setPageStep(1); + DET3Slider->setValue(0); + DET3Slider->setOrientation(Qt::Horizontal); + DET3Slider->setTickPosition(QSlider::NoTicks); + DET3SpinBox = new QSpinBox(DetWaveEGS3GroupBox); + DET3SpinBox->setObjectName(QString::fromUtf8("DET3SpinBox")); + DET3SpinBox->setGeometry(QRect(140, 20, 30, 21)); + DET3SpinBox->setFont(font2); + DET3SpinBox->setMaximum(3); + DET3SpinBox->setMinimum(-3); + deicsOnzeTabWidget->addTab(TabPage2, QString()); + TabPage3 = new QWidget(); + TabPage3->setObjectName(QString::fromUtf8("TabPage3")); + Frequency4groupBox = new Q3GroupBox(TabPage3); + Frequency4groupBox->setObjectName(QString::fromUtf8("Frequency4groupBox")); + Frequency4groupBox->setGeometry(QRect(10, 190, 450, 50)); + CoarseRatio4Label = new QLabel(Frequency4groupBox); + CoarseRatio4Label->setObjectName(QString::fromUtf8("CoarseRatio4Label")); + CoarseRatio4Label->setGeometry(QRect(10, 20, 70, 22)); + CoarseRatio4Label->setFrameShape(QFrame::Box); + CoarseRatio4Label->setFrameShadow(QFrame::Sunken); + CoarseRatio4Label->setWordWrap(false); + FineRatio4Label = new QLabel(Frequency4groupBox); + FineRatio4Label->setObjectName(QString::fromUtf8("FineRatio4Label")); + FineRatio4Label->setGeometry(QRect(140, 20, 50, 22)); + FineRatio4Label->setFrameShape(QFrame::Box); + FineRatio4Label->setFrameShadow(QFrame::Sunken); + FineRatio4Label->setWordWrap(false); + Freq4Label = new QLabel(Frequency4groupBox); + Freq4Label->setObjectName(QString::fromUtf8("Freq4Label")); + Freq4Label->setGeometry(QRect(250, 20, 50, 22)); + Freq4Label->setFrameShape(QFrame::Box); + Freq4Label->setFrameShadow(QFrame::Sunken); + Freq4Label->setWordWrap(false); + Fix4CheckBox = new QCheckBox(Frequency4groupBox); + Fix4CheckBox->setObjectName(QString::fromUtf8("Fix4CheckBox")); + Fix4CheckBox->setEnabled(true); + Fix4CheckBox->setGeometry(QRect(400, 20, 40, 25)); + Fix4CheckBox->setFont(font); + Fix4CheckBox->setCursor(QCursor(static_cast(13))); + FineRatio4SpinBox = new QSpinBox(Frequency4groupBox); + FineRatio4SpinBox->setObjectName(QString::fromUtf8("FineRatio4SpinBox")); + FineRatio4SpinBox->setGeometry(QRect(200, 20, 40, 21)); + FineRatio4SpinBox->setFont(font2); + Freq4SpinBox = new QSpinBox(Frequency4groupBox); + Freq4SpinBox->setObjectName(QString::fromUtf8("Freq4SpinBox")); + Freq4SpinBox->setEnabled(false); + Freq4SpinBox->setGeometry(QRect(310, 20, 80, 21)); + Freq4SpinBox->setFont(font2); + Freq4SpinBox->setMaximum(32000); + CoarseRatio4SpinBox = new QSpinBox(Frequency4groupBox); + CoarseRatio4SpinBox->setObjectName(QString::fromUtf8("CoarseRatio4SpinBox")); + CoarseRatio4SpinBox->setGeometry(QRect(90, 20, 40, 21)); + CoarseRatio4SpinBox->setFont(font2); + Scaling4GroupBox = new Q3GroupBox(TabPage3); + Scaling4GroupBox->setObjectName(QString::fromUtf8("Scaling4GroupBox")); + Scaling4GroupBox->setGeometry(QRect(280, 0, 110, 190)); + LS4Label = new QLabel(Scaling4GroupBox); + LS4Label->setObjectName(QString::fromUtf8("LS4Label")); + LS4Label->setGeometry(QRect(10, 160, 40, 22)); + LS4Label->setFrameShape(QFrame::Box); + LS4Label->setFrameShadow(QFrame::Sunken); + LS4Label->setWordWrap(false); + RS4Label = new QLabel(Scaling4GroupBox); + RS4Label->setObjectName(QString::fromUtf8("RS4Label")); + RS4Label->setGeometry(QRect(60, 160, 40, 22)); + RS4Label->setFrameShape(QFrame::Box); + RS4Label->setFrameShadow(QFrame::Sunken); + RS4Label->setWordWrap(false); + LS4Slider = new QSlider(Scaling4GroupBox); + LS4Slider->setObjectName(QString::fromUtf8("LS4Slider")); + LS4Slider->setGeometry(QRect(20, 50, 19, 100)); + LS4Slider->setCursor(QCursor(static_cast(13))); + LS4Slider->setMaximum(99); + LS4Slider->setPageStep(1); + LS4Slider->setValue(0); + LS4Slider->setOrientation(Qt::Vertical); + LS4Slider->setTickPosition(QSlider::NoTicks); + RS4Slider = new QSlider(Scaling4GroupBox); + RS4Slider->setObjectName(QString::fromUtf8("RS4Slider")); + RS4Slider->setGeometry(QRect(70, 50, 19, 100)); + RS4Slider->setCursor(QCursor(static_cast(13))); + RS4Slider->setMaximum(3); + RS4Slider->setPageStep(1); + RS4Slider->setValue(0); + RS4Slider->setOrientation(Qt::Vertical); + RS4Slider->setTickPosition(QSlider::NoTicks); + RS4SpinBox = new QSpinBox(Scaling4GroupBox); + RS4SpinBox->setObjectName(QString::fromUtf8("RS4SpinBox")); + RS4SpinBox->setGeometry(QRect(60, 20, 40, 21)); + RS4SpinBox->setFont(font2); + RS4SpinBox->setMaximum(3); + LS4SpinBox = new QSpinBox(Scaling4GroupBox); + LS4SpinBox->setObjectName(QString::fromUtf8("LS4SpinBox")); + LS4SpinBox->setGeometry(QRect(10, 20, 40, 21)); + LS4SpinBox->setFont(font2); + LS4SpinBox->setMaximum(99); + Env4GroupBox = new Q3GroupBox(TabPage3); + Env4GroupBox->setObjectName(QString::fromUtf8("Env4GroupBox")); + Env4GroupBox->setGeometry(QRect(10, 0, 260, 190)); + AR4Slider = new QSlider(Env4GroupBox); + AR4Slider->setObjectName(QString::fromUtf8("AR4Slider")); + AR4Slider->setGeometry(QRect(20, 50, 20, 100)); + AR4Slider->setCursor(QCursor(static_cast(13))); + AR4Slider->setMaximum(31); + AR4Slider->setPageStep(1); + AR4Slider->setValue(0); + AR4Slider->setOrientation(Qt::Vertical); + AR4Slider->setTickPosition(QSlider::NoTicks); + AR4Label = new QLabel(Env4GroupBox); + AR4Label->setObjectName(QString::fromUtf8("AR4Label")); + AR4Label->setGeometry(QRect(10, 160, 40, 22)); + AR4Label->setFrameShape(QFrame::Box); + AR4Label->setFrameShadow(QFrame::Sunken); + AR4Label->setWordWrap(false); + RR4Label = new QLabel(Env4GroupBox); + RR4Label->setObjectName(QString::fromUtf8("RR4Label")); + RR4Label->setGeometry(QRect(210, 160, 43, 22)); + RR4Label->setFrameShape(QFrame::Box); + RR4Label->setFrameShadow(QFrame::Sunken); + RR4Label->setWordWrap(false); + D2R4Label = new QLabel(Env4GroupBox); + D2R4Label->setObjectName(QString::fromUtf8("D2R4Label")); + D2R4Label->setGeometry(QRect(160, 160, 43, 22)); + D2R4Label->setFrameShape(QFrame::Box); + D2R4Label->setFrameShadow(QFrame::Sunken); + D2R4Label->setWordWrap(false); + D2R4Slider = new QSlider(Env4GroupBox); + D2R4Slider->setObjectName(QString::fromUtf8("D2R4Slider")); + D2R4Slider->setGeometry(QRect(170, 50, 20, 100)); + D2R4Slider->setCursor(QCursor(static_cast(13))); + D2R4Slider->setMaximum(31); + D2R4Slider->setPageStep(1); + D2R4Slider->setValue(0); + D2R4Slider->setOrientation(Qt::Vertical); + D2R4Slider->setTickPosition(QSlider::NoTicks); + D1L4Slider = new QSlider(Env4GroupBox); + D1L4Slider->setObjectName(QString::fromUtf8("D1L4Slider")); + D1L4Slider->setGeometry(QRect(120, 50, 20, 100)); + D1L4Slider->setCursor(QCursor(static_cast(13))); + D1L4Slider->setMaximum(15); + D1L4Slider->setPageStep(1); + D1L4Slider->setValue(0); + D1L4Slider->setOrientation(Qt::Vertical); + D1L4Slider->setTickPosition(QSlider::NoTicks); + D1L4Label = new QLabel(Env4GroupBox); + D1L4Label->setObjectName(QString::fromUtf8("D1L4Label")); + D1L4Label->setGeometry(QRect(110, 160, 43, 22)); + D1L4Label->setFrameShape(QFrame::Box); + D1L4Label->setFrameShadow(QFrame::Sunken); + D1L4Label->setWordWrap(false); + D1R4Label = new QLabel(Env4GroupBox); + D1R4Label->setObjectName(QString::fromUtf8("D1R4Label")); + D1R4Label->setGeometry(QRect(60, 160, 43, 22)); + D1R4Label->setFrameShape(QFrame::Box); + D1R4Label->setFrameShadow(QFrame::Sunken); + D1R4Label->setWordWrap(false); + D1R4Slider = new QSlider(Env4GroupBox); + D1R4Slider->setObjectName(QString::fromUtf8("D1R4Slider")); + D1R4Slider->setGeometry(QRect(70, 50, 20, 100)); + D1R4Slider->setCursor(QCursor(static_cast(13))); + D1R4Slider->setMaximum(31); + D1R4Slider->setPageStep(1); + D1R4Slider->setValue(0); + D1R4Slider->setOrientation(Qt::Vertical); + D1R4Slider->setTickPosition(QSlider::NoTicks); + RR4Slider = new QSlider(Env4GroupBox); + RR4Slider->setObjectName(QString::fromUtf8("RR4Slider")); + RR4Slider->setGeometry(QRect(220, 50, 20, 100)); + RR4Slider->setCursor(QCursor(static_cast(13))); + RR4Slider->setMinimum(0); + RR4Slider->setMaximum(15); + RR4Slider->setPageStep(1); + RR4Slider->setValue(0); + RR4Slider->setOrientation(Qt::Vertical); + RR4Slider->setTickPosition(QSlider::NoTicks); + RR4Slider->setTickInterval(0); + D1R4SpinBox = new QSpinBox(Env4GroupBox); + D1R4SpinBox->setObjectName(QString::fromUtf8("D1R4SpinBox")); + D1R4SpinBox->setGeometry(QRect(60, 20, 40, 21)); + D1R4SpinBox->setFont(font2); + D1R4SpinBox->setMaximum(31); + D1L4SpinBox = new QSpinBox(Env4GroupBox); + D1L4SpinBox->setObjectName(QString::fromUtf8("D1L4SpinBox")); + D1L4SpinBox->setGeometry(QRect(110, 20, 40, 21)); + D1L4SpinBox->setFont(font2); + D1L4SpinBox->setMaximum(15); + D2R4SpinBox = new QSpinBox(Env4GroupBox); + D2R4SpinBox->setObjectName(QString::fromUtf8("D2R4SpinBox")); + D2R4SpinBox->setGeometry(QRect(160, 20, 40, 21)); + D2R4SpinBox->setFont(font2); + D2R4SpinBox->setMaximum(31); + RR4SpinBox = new QSpinBox(Env4GroupBox); + RR4SpinBox->setObjectName(QString::fromUtf8("RR4SpinBox")); + RR4SpinBox->setGeometry(QRect(210, 20, 40, 21)); + RR4SpinBox->setFont(font2); + RR4SpinBox->setMaximum(15); + AR4SpinBox = new QSpinBox(Env4GroupBox); + AR4SpinBox->setObjectName(QString::fromUtf8("AR4SpinBox")); + AR4SpinBox->setGeometry(QRect(10, 20, 40, 21)); + AR4SpinBox->setFont(font2); + AR4SpinBox->setMaximum(31); + Vol4groupBox = new Q3GroupBox(TabPage3); + Vol4groupBox->setObjectName(QString::fromUtf8("Vol4groupBox")); + Vol4groupBox->setGeometry(QRect(400, 0, 60, 190)); + Vol4Slider = new QSlider(Vol4groupBox); + Vol4Slider->setObjectName(QString::fromUtf8("Vol4Slider")); + Vol4Slider->setGeometry(QRect(20, 50, 19, 130)); + Vol4Slider->setCursor(QCursor(static_cast(13))); + Vol4Slider->setMaximum(99); + Vol4Slider->setPageStep(1); + Vol4Slider->setValue(0); + Vol4Slider->setOrientation(Qt::Vertical); + Vol4Slider->setTickPosition(QSlider::NoTicks); + Vol4SpinBox = new QSpinBox(Vol4groupBox); + Vol4SpinBox->setObjectName(QString::fromUtf8("Vol4SpinBox")); + Vol4SpinBox->setGeometry(QRect(10, 20, 40, 21)); + Vol4SpinBox->setFont(font2); + Vol4SpinBox->setMaximum(99); + sensitivity4groupBox = new Q3GroupBox(TabPage3); + sensitivity4groupBox->setObjectName(QString::fromUtf8("sensitivity4groupBox")); + sensitivity4groupBox->setGeometry(QRect(10, 240, 260, 80)); + EGS4Label = new QLabel(sensitivity4groupBox); + EGS4Label->setObjectName(QString::fromUtf8("EGS4Label")); + EGS4Label->setGeometry(QRect(80, 20, 40, 22)); + EGS4Label->setFrameShape(QFrame::Box); + EGS4Label->setFrameShadow(QFrame::Sunken); + EGS4Label->setWordWrap(false); + KVS4Label = new QLabel(sensitivity4groupBox); + KVS4Label->setObjectName(QString::fromUtf8("KVS4Label")); + KVS4Label->setGeometry(QRect(10, 50, 40, 22)); + KVS4Label->setFrameShape(QFrame::Box); + KVS4Label->setFrameShadow(QFrame::Sunken); + KVS4Label->setWordWrap(false); + AME4CheckBox = new QCheckBox(sensitivity4groupBox); + AME4CheckBox->setObjectName(QString::fromUtf8("AME4CheckBox")); + AME4CheckBox->setGeometry(QRect(10, 20, 60, 25)); + AME4CheckBox->setFont(font); + AME4CheckBox->setCursor(QCursor(static_cast(13))); + KVS4Slider = new QSlider(sensitivity4groupBox); + KVS4Slider->setObjectName(QString::fromUtf8("KVS4Slider")); + KVS4Slider->setGeometry(QRect(60, 50, 84, 19)); + KVS4Slider->setCursor(QCursor(static_cast(13))); + KVS4Slider->setAcceptDrops(false); + KVS4Slider->setMaximum(7); + KVS4Slider->setPageStep(1); + KVS4Slider->setOrientation(Qt::Horizontal); + KVS4Slider->setTickPosition(QSlider::NoTicks); + EBS4Slider = new QSlider(sensitivity4groupBox); + EBS4Slider->setObjectName(QString::fromUtf8("EBS4Slider")); + EBS4Slider->setGeometry(QRect(130, 20, 70, 20)); + EBS4Slider->setCursor(QCursor(static_cast(13))); + EBS4Slider->setMaximum(7); + EBS4Slider->setPageStep(1); + EBS4Slider->setOrientation(Qt::Horizontal); + EBS4Slider->setTickPosition(QSlider::NoTicks); + KVS4SpinBox = new QSpinBox(sensitivity4groupBox); + KVS4SpinBox->setObjectName(QString::fromUtf8("KVS4SpinBox")); + KVS4SpinBox->setGeometry(QRect(160, 50, 40, 21)); + KVS4SpinBox->setFont(font2); + KVS4SpinBox->setMaximum(7); + EBS4SpinBox = new QSpinBox(sensitivity4groupBox); + EBS4SpinBox->setObjectName(QString::fromUtf8("EBS4SpinBox")); + EBS4SpinBox->setGeometry(QRect(210, 20, 40, 21)); + EBS4SpinBox->setFont(font2); + EBS4SpinBox->setMaximum(7); + DetWaveEGS4GroupBox = new Q3GroupBox(TabPage3); + DetWaveEGS4GroupBox->setObjectName(QString::fromUtf8("DetWaveEGS4GroupBox")); + DetWaveEGS4GroupBox->setGeometry(QRect(280, 240, 180, 80)); + DET4Slider = new QSlider(DetWaveEGS4GroupBox); + DET4Slider->setObjectName(QString::fromUtf8("DET4Slider")); + DET4Slider->setGeometry(QRect(60, 20, 70, 19)); + DET4Slider->setCursor(QCursor(static_cast(13))); + DET4Slider->setMinimum(-3); + DET4Slider->setMaximum(3); + DET4Slider->setPageStep(1); + DET4Slider->setValue(0); + DET4Slider->setOrientation(Qt::Horizontal); + DET4Slider->setTickPosition(QSlider::NoTicks); + DET4Label = new QLabel(DetWaveEGS4GroupBox); + DET4Label->setObjectName(QString::fromUtf8("DET4Label")); + DET4Label->setGeometry(QRect(10, 20, 44, 24)); + DET4Label->setFrameShape(QFrame::Box); + DET4Label->setFrameShadow(QFrame::Sunken); + DET4Label->setWordWrap(false); + WaveForm4ComboBox = new QComboBox(DetWaveEGS4GroupBox); + WaveForm4ComboBox->setObjectName(QString::fromUtf8("WaveForm4ComboBox")); + WaveForm4ComboBox->setGeometry(QRect(10, 50, 80, 20)); + WaveForm4ComboBox->setCursor(QCursor(static_cast(13))); + EGS4comboBox = new QComboBox(DetWaveEGS4GroupBox); + EGS4comboBox->setObjectName(QString::fromUtf8("EGS4comboBox")); + EGS4comboBox->setEnabled(false); + EGS4comboBox->setGeometry(QRect(100, 50, 70, 20)); + EGS4comboBox->setCursor(QCursor(static_cast(13))); + DET4SpinBox = new QSpinBox(DetWaveEGS4GroupBox); + DET4SpinBox->setObjectName(QString::fromUtf8("DET4SpinBox")); + DET4SpinBox->setGeometry(QRect(140, 20, 30, 21)); + DET4SpinBox->setFont(font2); + DET4SpinBox->setMaximum(3); + DET4SpinBox->setMinimum(-3); + deicsOnzeTabWidget->addTab(TabPage3, QString()); + QWidget::setTabOrder(deicsOnzeTabWidget, categoryListView); + QWidget::setTabOrder(categoryListView, nameLineEdit); + QWidget::setTabOrder(nameLineEdit, masterVolSlider); + QWidget::setTabOrder(masterVolSlider, feedbackSlider); + QWidget::setTabOrder(feedbackSlider, polyMonoComboBox); + QWidget::setTabOrder(polyMonoComboBox, LFOSyncCheckBox); + QWidget::setTabOrder(LFOSyncCheckBox, PModSensSlider); + QWidget::setTabOrder(PModSensSlider, LFOWaveComboBox); + QWidget::setTabOrder(LFOWaveComboBox, AModSensSlider); + QWidget::setTabOrder(AModSensSlider, PModDepthSlider); + QWidget::setTabOrder(PModDepthSlider, AModDepthSlider); + QWidget::setTabOrder(AModDepthSlider, LFOSpeedSlider); + QWidget::setTabOrder(LFOSpeedSlider, LFODelaySlider); + QWidget::setTabOrder(LFODelaySlider, transposeSlider); + QWidget::setTabOrder(transposeSlider, globalDetuneSlider); + QWidget::setTabOrder(globalDetuneSlider, algorithmComboBox); + QWidget::setTabOrder(algorithmComboBox, AR1Slider); + QWidget::setTabOrder(AR1Slider, D1R1Slider); + QWidget::setTabOrder(D1R1Slider, D1L1Slider); + QWidget::setTabOrder(D1L1Slider, D2R1Slider); + QWidget::setTabOrder(D2R1Slider, RR1Slider); + QWidget::setTabOrder(RR1Slider, LS1Slider); + QWidget::setTabOrder(LS1Slider, RS1Slider); + QWidget::setTabOrder(RS1Slider, Vol1Slider); + QWidget::setTabOrder(Vol1Slider, Fix1CheckBox); + QWidget::setTabOrder(Fix1CheckBox, AME1CheckBox); + QWidget::setTabOrder(AME1CheckBox, EBS1Slider); + QWidget::setTabOrder(EBS1Slider, DET1Slider); + QWidget::setTabOrder(DET1Slider, KVS1Slider); + QWidget::setTabOrder(KVS1Slider, WaveForm1ComboBox); + QWidget::setTabOrder(WaveForm1ComboBox, EGQ1ComboBox); + QWidget::setTabOrder(EGQ1ComboBox, AR2Slider); + QWidget::setTabOrder(AR2Slider, D1R2Slider); + QWidget::setTabOrder(D1R2Slider, D1L2Slider); + QWidget::setTabOrder(D1L2Slider, D2R2Slider); + QWidget::setTabOrder(D2R2Slider, RR2Slider); + QWidget::setTabOrder(RR2Slider, LS2Slider); + QWidget::setTabOrder(LS2Slider, RS2Slider); + QWidget::setTabOrder(RS2Slider, Vol2Slider); + QWidget::setTabOrder(Vol2Slider, AME2CheckBox); + QWidget::setTabOrder(AME2CheckBox, EBS2Slider); + QWidget::setTabOrder(EBS2Slider, DET2Slider); + QWidget::setTabOrder(DET2Slider, KVS2Slider); + QWidget::setTabOrder(KVS2Slider, WaveForm2ComboBox); + QWidget::setTabOrder(WaveForm2ComboBox, EGS2comboBox); + QWidget::setTabOrder(EGS2comboBox, AR3Slider); + QWidget::setTabOrder(AR3Slider, D1R3Slider); + QWidget::setTabOrder(D1R3Slider, D1L3Slider); + QWidget::setTabOrder(D1L3Slider, D2R3Slider); + QWidget::setTabOrder(D2R3Slider, RR3Slider); + QWidget::setTabOrder(RR3Slider, LS3Slider); + QWidget::setTabOrder(LS3Slider, RS3Slider); + QWidget::setTabOrder(RS3Slider, Vol3Slider); + QWidget::setTabOrder(Vol3Slider, AME3CheckBox); + QWidget::setTabOrder(AME3CheckBox, EBS3Slider); + QWidget::setTabOrder(EBS3Slider, DET3Slider); + QWidget::setTabOrder(DET3Slider, KVS3Slider); + QWidget::setTabOrder(KVS3Slider, WaveForm3ComboBox); + QWidget::setTabOrder(WaveForm3ComboBox, EGS3comboBox); + QWidget::setTabOrder(EGS3comboBox, AR4Slider); + QWidget::setTabOrder(AR4Slider, D1R4Slider); + QWidget::setTabOrder(D1R4Slider, D1L4Slider); + QWidget::setTabOrder(D1L4Slider, D2R4Slider); + QWidget::setTabOrder(D2R4Slider, RR4Slider); + QWidget::setTabOrder(RR4Slider, LS4Slider); + QWidget::setTabOrder(LS4Slider, RS4Slider); + QWidget::setTabOrder(RS4Slider, Vol4Slider); + QWidget::setTabOrder(Vol4Slider, AME4CheckBox); + QWidget::setTabOrder(AME4CheckBox, EBS4Slider); + QWidget::setTabOrder(EBS4Slider, DET4Slider); + QWidget::setTabOrder(DET4Slider, KVS4Slider); + QWidget::setTabOrder(KVS4Slider, WaveForm4ComboBox); + QWidget::setTabOrder(WaveForm4ComboBox, EGS4comboBox); + + retranslateUi(DeicsOnzeGuiBase); + QObject::connect(Fix1CheckBox, SIGNAL(toggled(bool)), Freq1SpinBox, SLOT(setEnabled(bool))); + QObject::connect(Fix1CheckBox, SIGNAL(toggled(bool)), FineRatio1SpinBox, SLOT(setDisabled(bool))); + QObject::connect(Fix1CheckBox, SIGNAL(toggled(bool)), CoarseRatio1SpinBox, SLOT(setDisabled(bool))); + QObject::connect(Fix2CheckBox, SIGNAL(toggled(bool)), FineRatio2SpinBox, SLOT(setDisabled(bool))); + QObject::connect(Fix2CheckBox, SIGNAL(toggled(bool)), CoarseRatio2SpinBox, SLOT(setDisabled(bool))); + QObject::connect(Fix3CheckBox, SIGNAL(toggled(bool)), FineRatio3SpinBox, SLOT(setDisabled(bool))); + QObject::connect(Fix3CheckBox, SIGNAL(toggled(bool)), CoarseRatio3SpinBox, SLOT(setDisabled(bool))); + QObject::connect(Fix4CheckBox, SIGNAL(toggled(bool)), FineRatio4SpinBox, SLOT(setDisabled(bool))); + QObject::connect(Fix4CheckBox, SIGNAL(toggled(bool)), CoarseRatio4SpinBox, SLOT(setDisabled(bool))); + QObject::connect(Fix2CheckBox, SIGNAL(toggled(bool)), Freq2SpinBox, SLOT(setEnabled(bool))); + QObject::connect(Fix3CheckBox, SIGNAL(toggled(bool)), Freq3SpinBox, SLOT(setEnabled(bool))); + QObject::connect(Fix4CheckBox, SIGNAL(toggled(bool)), Freq4SpinBox, SLOT(setEnabled(bool))); + QObject::connect(AR4Slider, SIGNAL(valueChanged(int)), AR4SpinBox, SLOT(setValue(int))); + QObject::connect(AR4SpinBox, SIGNAL(valueChanged(int)), AR4Slider, SLOT(setValue(int))); + QObject::connect(D1R4Slider, SIGNAL(valueChanged(int)), D1R4SpinBox, SLOT(setValue(int))); + QObject::connect(D1R4SpinBox, SIGNAL(valueChanged(int)), D1R4Slider, SLOT(setValue(int))); + QObject::connect(D1L4Slider, SIGNAL(valueChanged(int)), D1L4SpinBox, SLOT(setValue(int))); + QObject::connect(D1L4SpinBox, SIGNAL(valueChanged(int)), D1L4Slider, SLOT(setValue(int))); + QObject::connect(D2R4Slider, SIGNAL(valueChanged(int)), D2R4SpinBox, SLOT(setValue(int))); + QObject::connect(RR4Slider, SIGNAL(valueChanged(int)), RR4SpinBox, SLOT(setValue(int))); + QObject::connect(RR4SpinBox, SIGNAL(valueChanged(int)), RR4Slider, SLOT(setValue(int))); + QObject::connect(D2R4SpinBox, SIGNAL(valueChanged(int)), D2R4Slider, SLOT(setValue(int))); + QObject::connect(AR3SpinBox, SIGNAL(valueChanged(int)), AR3Slider, SLOT(setValue(int))); + QObject::connect(AR3Slider, SIGNAL(valueChanged(int)), AR3SpinBox, SLOT(setValue(int))); + QObject::connect(D1R3Slider, SIGNAL(valueChanged(int)), D1R3SpinBox, SLOT(setValue(int))); + QObject::connect(D1R3SpinBox, SIGNAL(valueChanged(int)), D1R3Slider, SLOT(setValue(int))); + QObject::connect(D1L3Slider, SIGNAL(valueChanged(int)), D1L3SpinBox, SLOT(setValue(int))); + QObject::connect(D1L3SpinBox, SIGNAL(valueChanged(int)), D1L3Slider, SLOT(setValue(int))); + QObject::connect(D2R3Slider, SIGNAL(valueChanged(int)), D2R3SpinBox, SLOT(setValue(int))); + QObject::connect(D2R3SpinBox, SIGNAL(valueChanged(int)), D2R3Slider, SLOT(setValue(int))); + QObject::connect(RR3Slider, SIGNAL(valueChanged(int)), RR3SpinBox, SLOT(setValue(int))); + QObject::connect(RR3SpinBox, SIGNAL(valueChanged(int)), RR3Slider, SLOT(setValue(int))); + QObject::connect(AR2Slider, SIGNAL(valueChanged(int)), AR2SpinBox, SLOT(setValue(int))); + QObject::connect(AR2SpinBox, SIGNAL(valueChanged(int)), AR2Slider, SLOT(setValue(int))); + QObject::connect(D1R2Slider, SIGNAL(valueChanged(int)), D1R2SpinBox, SLOT(setValue(int))); + QObject::connect(D1R2SpinBox, SIGNAL(valueChanged(int)), D1R2Slider, SLOT(setValue(int))); + QObject::connect(D1L2Slider, SIGNAL(valueChanged(int)), D1L2SpinBox, SLOT(setValue(int))); + QObject::connect(D1L2SpinBox, SIGNAL(valueChanged(int)), D1L2Slider, SLOT(setValue(int))); + QObject::connect(D2R2Slider, SIGNAL(valueChanged(int)), D2R2SpinBox, SLOT(setValue(int))); + QObject::connect(D2R2SpinBox, SIGNAL(valueChanged(int)), D2R2Slider, SLOT(setValue(int))); + QObject::connect(RR2Slider, SIGNAL(valueChanged(int)), RR2SpinBox, SLOT(setValue(int))); + QObject::connect(RR2SpinBox, SIGNAL(valueChanged(int)), RR2Slider, SLOT(setValue(int))); + QObject::connect(AR1Slider, SIGNAL(valueChanged(int)), AR1SpinBox, SLOT(setValue(int))); + QObject::connect(AR1SpinBox, SIGNAL(valueChanged(int)), AR1Slider, SLOT(setValue(int))); + QObject::connect(D1R1Slider, SIGNAL(valueChanged(int)), D1R1SpinBox, SLOT(setValue(int))); + QObject::connect(D1R1SpinBox, SIGNAL(valueChanged(int)), D1R1Slider, SLOT(setValue(int))); + QObject::connect(D1L1Slider, SIGNAL(valueChanged(int)), D1L1SpinBox, SLOT(setValue(int))); + QObject::connect(D1L1SpinBox, SIGNAL(valueChanged(int)), D1L1Slider, SLOT(setValue(int))); + QObject::connect(D2R1Slider, SIGNAL(valueChanged(int)), D2R1SpinBox, SLOT(setValue(int))); + QObject::connect(D2R1SpinBox, SIGNAL(valueChanged(int)), D2R1Slider, SLOT(setValue(int))); + QObject::connect(RR1Slider, SIGNAL(valueChanged(int)), RR1SpinBox, SLOT(setValue(int))); + QObject::connect(RR1SpinBox, SIGNAL(valueChanged(int)), RR1Slider, SLOT(setValue(int))); + QObject::connect(LS1Slider, SIGNAL(valueChanged(int)), LS1SpinBox, SLOT(setValue(int))); + QObject::connect(LS1SpinBox, SIGNAL(valueChanged(int)), LS1Slider, SLOT(setValue(int))); + QObject::connect(RS1Slider, SIGNAL(valueChanged(int)), RS1SpinBox, SLOT(setValue(int))); + QObject::connect(RS1SpinBox, SIGNAL(valueChanged(int)), RS1Slider, SLOT(setValue(int))); + QObject::connect(LS2Slider, SIGNAL(valueChanged(int)), LS2SpinBox, SLOT(setValue(int))); + QObject::connect(LS2SpinBox, SIGNAL(valueChanged(int)), LS2Slider, SLOT(setValue(int))); + QObject::connect(RS2Slider, SIGNAL(valueChanged(int)), RS2SpinBox, SLOT(setValue(int))); + QObject::connect(RS2SpinBox, SIGNAL(valueChanged(int)), RS2Slider, SLOT(setValue(int))); + QObject::connect(LS3Slider, SIGNAL(valueChanged(int)), LS3SpinBox, SLOT(setValue(int))); + QObject::connect(LS3SpinBox, SIGNAL(valueChanged(int)), LS3Slider, SLOT(setValue(int))); + QObject::connect(RS3Slider, SIGNAL(valueChanged(int)), RS3SpinBox, SLOT(setValue(int))); + QObject::connect(RS3SpinBox, SIGNAL(valueChanged(int)), RS3Slider, SLOT(setValue(int))); + QObject::connect(LS4Slider, SIGNAL(valueChanged(int)), LS4SpinBox, SLOT(setValue(int))); + QObject::connect(LS4SpinBox, SIGNAL(valueChanged(int)), LS4Slider, SLOT(setValue(int))); + QObject::connect(RS4Slider, SIGNAL(valueChanged(int)), RS4SpinBox, SLOT(setValue(int))); + QObject::connect(RS4SpinBox, SIGNAL(valueChanged(int)), RS4Slider, SLOT(setValue(int))); + QObject::connect(Vol4Slider, SIGNAL(valueChanged(int)), Vol4SpinBox, SLOT(setValue(int))); + QObject::connect(Vol4SpinBox, SIGNAL(valueChanged(int)), Vol4Slider, SLOT(setValue(int))); + QObject::connect(Vol3Slider, SIGNAL(valueChanged(int)), Vol3SpinBox, SLOT(setValue(int))); + QObject::connect(Vol3SpinBox, SIGNAL(valueChanged(int)), Vol3Slider, SLOT(setValue(int))); + QObject::connect(Vol2Slider, SIGNAL(valueChanged(int)), Vol2SpinBox, SLOT(setValue(int))); + QObject::connect(Vol2SpinBox, SIGNAL(valueChanged(int)), Vol2Slider, SLOT(setValue(int))); + QObject::connect(Vol1Slider, SIGNAL(valueChanged(int)), Vol1SpinBox, SLOT(setValue(int))); + QObject::connect(Vol1SpinBox, SIGNAL(valueChanged(int)), Vol1Slider, SLOT(setValue(int))); + QObject::connect(EBS1Slider, SIGNAL(valueChanged(int)), EBS1SpinBox, SLOT(setValue(int))); + QObject::connect(EBS1SpinBox, SIGNAL(valueChanged(int)), EBS1Slider, SLOT(setValue(int))); + QObject::connect(KVS1Slider, SIGNAL(valueChanged(int)), KVS1SpinBox, SLOT(setValue(int))); + QObject::connect(KVS1SpinBox, SIGNAL(valueChanged(int)), KVS1Slider, SLOT(setValue(int))); + QObject::connect(EBS2Slider, SIGNAL(valueChanged(int)), EBS2SpinBox, SLOT(setValue(int))); + QObject::connect(EBS2SpinBox, SIGNAL(valueChanged(int)), EBS2Slider, SLOT(setValue(int))); + QObject::connect(KVS2Slider, SIGNAL(valueChanged(int)), KVS2SpinBox, SLOT(setValue(int))); + QObject::connect(KVS2SpinBox, SIGNAL(valueChanged(int)), KVS2Slider, SLOT(setValue(int))); + QObject::connect(EBS3Slider, SIGNAL(valueChanged(int)), EBS3SpinBox, SLOT(setValue(int))); + QObject::connect(EBS3SpinBox, SIGNAL(valueChanged(int)), EBS3Slider, SLOT(setValue(int))); + QObject::connect(KVS3Slider, SIGNAL(valueChanged(int)), KVS3SpinBox, SLOT(setValue(int))); + QObject::connect(KVS3SpinBox, SIGNAL(valueChanged(int)), KVS3Slider, SLOT(setValue(int))); + QObject::connect(EBS4Slider, SIGNAL(valueChanged(int)), EBS4SpinBox, SLOT(setValue(int))); + QObject::connect(EBS4SpinBox, SIGNAL(valueChanged(int)), EBS4Slider, SLOT(setValue(int))); + QObject::connect(KVS4Slider, SIGNAL(valueChanged(int)), KVS4SpinBox, SLOT(setValue(int))); + QObject::connect(KVS4SpinBox, SIGNAL(valueChanged(int)), KVS4Slider, SLOT(setValue(int))); + QObject::connect(DET4Slider, SIGNAL(valueChanged(int)), DET4SpinBox, SLOT(setValue(int))); + QObject::connect(DET4SpinBox, SIGNAL(valueChanged(int)), DET4Slider, SLOT(setValue(int))); + QObject::connect(DET3Slider, SIGNAL(valueChanged(int)), DET3SpinBox, SLOT(setValue(int))); + QObject::connect(DET3SpinBox, SIGNAL(valueChanged(int)), DET3Slider, SLOT(setValue(int))); + QObject::connect(DET2Slider, SIGNAL(valueChanged(int)), DET2SpinBox, SLOT(setValue(int))); + QObject::connect(DET2SpinBox, SIGNAL(valueChanged(int)), DET2Slider, SLOT(setValue(int))); + QObject::connect(DET1Slider, SIGNAL(valueChanged(int)), DET1SpinBox, SLOT(setValue(int))); + QObject::connect(DET1SpinBox, SIGNAL(valueChanged(int)), DET1Slider, SLOT(setValue(int))); + QObject::connect(masterVolSlider, SIGNAL(valueChanged(int)), MasterVolumeSpinBox, SLOT(setValue(int))); + QObject::connect(MasterVolumeSpinBox, SIGNAL(valueChanged(int)), masterVolSlider, SLOT(setValue(int))); + QObject::connect(feedbackSlider, SIGNAL(valueChanged(int)), feedbackSpinBox, SLOT(setValue(int))); + QObject::connect(feedbackSpinBox, SIGNAL(valueChanged(int)), feedbackSlider, SLOT(setValue(int))); + QObject::connect(PitchBendRangeSlider, SIGNAL(valueChanged(int)), pitchBendRangeSpinBox, SLOT(setValue(int))); + QObject::connect(pitchBendRangeSpinBox, SIGNAL(valueChanged(int)), PitchBendRangeSlider, SLOT(setValue(int))); + QObject::connect(PModSensSlider, SIGNAL(valueChanged(int)), PMSSpinBox, SLOT(setValue(int))); + QObject::connect(PMSSpinBox, SIGNAL(valueChanged(int)), PModSensSlider, SLOT(setValue(int))); + QObject::connect(AModSensSlider, SIGNAL(valueChanged(int)), AMSSpinBox, SLOT(setValue(int))); + QObject::connect(AMSSpinBox, SIGNAL(valueChanged(int)), AModSensSlider, SLOT(setValue(int))); + QObject::connect(PModDepthSlider, SIGNAL(valueChanged(int)), PModDepthSpinBox, SLOT(setValue(int))); + QObject::connect(PModDepthSpinBox, SIGNAL(valueChanged(int)), PModDepthSlider, SLOT(setValue(int))); + QObject::connect(AModDepthSlider, SIGNAL(valueChanged(int)), AModDepthSpinBox, SLOT(setValue(int))); + QObject::connect(AModDepthSpinBox, SIGNAL(valueChanged(int)), AModDepthSlider, SLOT(setValue(int))); + QObject::connect(LFOSpeedSlider, SIGNAL(valueChanged(int)), LFOSpeedSpinBox, SLOT(setValue(int))); + QObject::connect(LFOSpeedSpinBox, SIGNAL(valueChanged(int)), LFOSpeedSlider, SLOT(setValue(int))); + QObject::connect(LFODelaySlider, SIGNAL(valueChanged(int)), LFODelaySpinBox, SLOT(setValue(int))); + QObject::connect(LFODelaySpinBox, SIGNAL(valueChanged(int)), LFODelaySlider, SLOT(setValue(int))); + QObject::connect(transposeSlider, SIGNAL(valueChanged(int)), transposeSpinBox, SLOT(setValue(int))); + QObject::connect(transposeSpinBox, SIGNAL(valueChanged(int)), transposeSlider, SLOT(setValue(int))); + QObject::connect(globalDetuneSlider, SIGNAL(valueChanged(int)), globalDetuneSpinBox, SLOT(setValue(int))); + QObject::connect(globalDetuneSpinBox, SIGNAL(valueChanged(int)), globalDetuneSlider, SLOT(setValue(int))); + + QMetaObject::connectSlotsByName(DeicsOnzeGuiBase); + } // setupUi + + void retranslateUi(QDialog *DeicsOnzeGuiBase) + { + DeicsOnzeGuiBase->setWindowTitle(QApplication::translate("DeicsOnzeGuiBase", "DeicsOnze", 0, QApplication::UnicodeUTF8)); +#ifndef QT_NO_TOOLTIP + deicsOnzeTabWidget->setProperty("toolTip", QVariant(QString())); +#endif // QT_NO_TOOLTIP + loadPushButton->setText(QApplication::translate("DeicsOnzeGuiBase", "Load", 0, QApplication::UnicodeUTF8)); + savePushButton->setText(QApplication::translate("DeicsOnzeGuiBase", "Save", 0, QApplication::UnicodeUTF8)); + nameGroupBox->setTitle(QApplication::translate("DeicsOnzeGuiBase", "Preset Name", 0, QApplication::UnicodeUTF8)); + nameLineEdit->setText(QApplication::translate("DeicsOnzeGuiBase", "INIT VOICE", 0, QApplication::UnicodeUTF8)); + subcategoryGroupBox->setTitle(QApplication::translate("DeicsOnzeGuiBase", "Subcategory", 0, QApplication::UnicodeUTF8)); + subcategoryLineEdit->setText(QApplication::translate("DeicsOnzeGuiBase", "NONE", 0, QApplication::UnicodeUTF8)); + categoryGroupBox->setTitle(QApplication::translate("DeicsOnzeGuiBase", "Category", 0, QApplication::UnicodeUTF8)); + categoryLineEdit->setText(QApplication::translate("DeicsOnzeGuiBase", "NONE", 0, QApplication::UnicodeUTF8)); + deletePushButton->setText(QApplication::translate("DeicsOnzeGuiBase", "Delete", 0, QApplication::UnicodeUTF8)); + categoryListView->header()->setLabel(0, QApplication::translate("DeicsOnzeGuiBase", "Category", 0, QApplication::UnicodeUTF8)); + subcategoryListView->header()->setLabel(0, QApplication::translate("DeicsOnzeGuiBase", "Subcategory", 0, QApplication::UnicodeUTF8)); + presetsListView->header()->setLabel(0, QApplication::translate("DeicsOnzeGuiBase", "Preset", 0, QApplication::UnicodeUTF8)); + newPushButton->setText(QApplication::translate("DeicsOnzeGuiBase", "New", 0, QApplication::UnicodeUTF8)); + bankGroupBox->setTitle(QApplication::translate("DeicsOnzeGuiBase", "Bank", 0, QApplication::UnicodeUTF8)); +#ifndef QT_NO_TOOLTIP + bankSpinBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Bank numerous", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP + progGroupBox->setTitle(QApplication::translate("DeicsOnzeGuiBase", "Prog", 0, QApplication::UnicodeUTF8)); +#ifndef QT_NO_TOOLTIP + progSpinBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Program numerous", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP + presentTextLAbel->setText(QApplication::translate("DeicsOnzeGuiBase", "DeicsOnze v0.2.2 Copyright (c) 2004 Nil Geisweiller under GPL licence", 0, QApplication::UnicodeUTF8)); + deicsOnzeTabWidget->setTabText(deicsOnzeTabWidget->indexOf(TabPage), QApplication::translate("DeicsOnzeGuiBase", "&Presets", 0, QApplication::UnicodeUTF8)); + masterVolGroupBox->setTitle(QApplication::translate("DeicsOnzeGuiBase", "Master Volume", 0, QApplication::UnicodeUTF8)); +#ifndef QT_NO_TOOLTIP + masterVolSlider->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Master Volume", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + MasterVolumeSpinBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Master volume", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP + FeedbackGroupBox->setTitle(QApplication::translate("DeicsOnzeGuiBase", "feedback", 0, QApplication::UnicodeUTF8)); +#ifndef QT_NO_TOOLTIP + feedbackSpinBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Coarse Ratio", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + feedbackSlider->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Feedback of Op 4", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP + functionGroupBox->setTitle(QApplication::translate("DeicsOnzeGuiBase", "Function", 0, QApplication::UnicodeUTF8)); + polyMonoComboBox->clear(); + polyMonoComboBox->insertItems(0, QStringList() + << QApplication::translate("DeicsOnzeGuiBase", "POLY", 0, QApplication::UnicodeUTF8) + << QApplication::translate("DeicsOnzeGuiBase", "MONO", 0, QApplication::UnicodeUTF8) + ); + PitchBendRangeLabel->setText(QApplication::translate("DeicsOnzeGuiBase", "PBR", 0, QApplication::UnicodeUTF8)); +#ifndef QT_NO_TOOLTIP + PitchBendRangeSlider->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Pitch Bend Range", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + pitchBendRangeSpinBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Coarse Ratio", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP + LFOGroupBox->setTitle(QApplication::translate("DeicsOnzeGuiBase", "LFO", 0, QApplication::UnicodeUTF8)); + PModSensLabel->setText(QApplication::translate("DeicsOnzeGuiBase", "PMS", 0, QApplication::UnicodeUTF8)); + PModDepthLabel->setText(QApplication::translate("DeicsOnzeGuiBase", "PMD", 0, QApplication::UnicodeUTF8)); + AModDepthLabel->setText(QApplication::translate("DeicsOnzeGuiBase", "AMD", 0, QApplication::UnicodeUTF8)); + LFOSpeedLabel->setText(QApplication::translate("DeicsOnzeGuiBase", "Speed", 0, QApplication::UnicodeUTF8)); + LFODelayLabel->setText(QApplication::translate("DeicsOnzeGuiBase", "Delay", 0, QApplication::UnicodeUTF8)); + AModSensLabel->setText(QApplication::translate("DeicsOnzeGuiBase", "AMS", 0, QApplication::UnicodeUTF8)); + LFOWaveComboBox->clear(); + LFOWaveComboBox->insertItems(0, QStringList() + << QApplication::translate("DeicsOnzeGuiBase", "Saw Up", 0, QApplication::UnicodeUTF8) + << QApplication::translate("DeicsOnzeGuiBase", "Square", 0, QApplication::UnicodeUTF8) + << QApplication::translate("DeicsOnzeGuiBase", "Triangl", 0, QApplication::UnicodeUTF8) + << QApplication::translate("DeicsOnzeGuiBase", "S/Hold", 0, QApplication::UnicodeUTF8) + ); +#ifndef QT_NO_TOOLTIP + LFOWaveComboBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "LFO Waveform", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP + LFOSyncCheckBox->setText(QApplication::translate("DeicsOnzeGuiBase", "LFO Sync", 0, QApplication::UnicodeUTF8)); +#ifndef QT_NO_TOOLTIP + AModSensSlider->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Amplitude Modulation Sensitivity", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + PModSensSlider->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Pitch Modulation Sensitivity", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + PMSSpinBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Coarse Ratio", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + AMSSpinBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Coarse Ratio", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + PModDepthSlider->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Pitch Modulation Depth", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + AModDepthSlider->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Pitch Modulation Depth", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + LFOSpeedSlider->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "LFO Speed", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + LFOSpeedSpinBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Coarse Ratio", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + LFODelaySlider->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "LFO Delay", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + LFODelaySpinBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Coarse Ratio", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + PModDepthSpinBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Coarse Ratio", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + AModDepthSpinBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Coarse Ratio", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP + transposeGroupBox->setTitle(QApplication::translate("DeicsOnzeGuiBase", "Transpose and Global Detune", 0, QApplication::UnicodeUTF8)); +#ifndef QT_NO_TOOLTIP + transposeSlider->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Transpose", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + transposeSpinBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Coarse Ratio", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + globalDetuneSlider->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Global Detune", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + globalDetuneSpinBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Coarse Ratio", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP + algorithmComboBox->clear(); + algorithmComboBox->insertItems(0, QStringList() + << QApplication::translate("DeicsOnzeGuiBase", "Algorithm 1", 0, QApplication::UnicodeUTF8) + << QApplication::translate("DeicsOnzeGuiBase", "Algorithm 2", 0, QApplication::UnicodeUTF8) + << QApplication::translate("DeicsOnzeGuiBase", "Algorithm 3", 0, QApplication::UnicodeUTF8) + << QApplication::translate("DeicsOnzeGuiBase", "Algorithm 4", 0, QApplication::UnicodeUTF8) + << QApplication::translate("DeicsOnzeGuiBase", "Algorithm 5", 0, QApplication::UnicodeUTF8) + << QApplication::translate("DeicsOnzeGuiBase", "Algorithm 6", 0, QApplication::UnicodeUTF8) + << QApplication::translate("DeicsOnzeGuiBase", "Algorithm 7", 0, QApplication::UnicodeUTF8) + << QApplication::translate("DeicsOnzeGuiBase", "Algorithm 8", 0, QApplication::UnicodeUTF8) + ); +#ifndef QT_NO_TOOLTIP + algorithmComboBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Modulation Matrix", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_WHATSTHIS + algorithmComboBox->setProperty("whatsThis", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Algorithm 1 : Op 1 modulated by Op 2 modulated by Op 3 modulated by Op 4
\n" +"Algorithm 2 : Op 1 modulated by Op 2 modulated by both Op 3 and Op 4
\n" +"Algorithm 3 : Op 1 modulated by both Op 4 and Op 2 modulated by Op 3
\n" +"Algorithm 4 : Op 1 modulated by both Op 2 and Op 3 modulated by Op 4
\n" +"Algorithm 5 : (Op 1 modulated by Op 2) add to (Op 3 modulated by Op 4)
\n" +"Algorithm 6 : addition of the three Op 1, 2, 3 all modulated by Op 4
\n" +"Algorithm 7 : addition of the three Op 1, 2, 3 with Op 3 modulated by Op 4
\n" +"Algorithm 8 : addition of the four Op 1, 2, 3, 4", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_WHATSTHIS + deicsOnzeTabWidget->setTabText(deicsOnzeTabWidget->indexOf(TabPage1), QApplication::translate("DeicsOnzeGuiBase", "&Global", 0, QApplication::UnicodeUTF8)); + Frequency1groupBox->setTitle(QApplication::translate("DeicsOnzeGuiBase", "Frequency 1", 0, QApplication::UnicodeUTF8)); + Fix1CheckBox->setText(QApplication::translate("DeicsOnzeGuiBase", "FIX", 0, QApplication::UnicodeUTF8)); + CoarseRatio1Label->setText(QApplication::translate("DeicsOnzeGuiBase", "Coarse 1", 0, QApplication::UnicodeUTF8)); + FineRatio1Label->setText(QApplication::translate("DeicsOnzeGuiBase", "Fine 1", 0, QApplication::UnicodeUTF8)); + Freq1Label->setText(QApplication::translate("DeicsOnzeGuiBase", "Freq 1", 0, QApplication::UnicodeUTF8)); +#ifndef QT_NO_TOOLTIP + CoarseRatio1SpinBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Coarse Ratio", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + FineRatio1SpinBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Fine Ratio", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + Freq1SpinBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Fixed Frequency", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP + Env1GroupBox->setTitle(QApplication::translate("DeicsOnzeGuiBase", "Envelope 1", 0, QApplication::UnicodeUTF8)); + RR1Label->setText(QApplication::translate("DeicsOnzeGuiBase", "RR1", 0, QApplication::UnicodeUTF8)); + D1R1Label->setText(QApplication::translate("DeicsOnzeGuiBase", "D1R1", 0, QApplication::UnicodeUTF8)); + D1L1Label->setText(QApplication::translate("DeicsOnzeGuiBase", "D1L1", 0, QApplication::UnicodeUTF8)); + D2R1Label->setText(QApplication::translate("DeicsOnzeGuiBase", "D2R1", 0, QApplication::UnicodeUTF8)); +#ifndef QT_NO_TOOLTIP + D1L1Slider->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "1\302\260 Decay Level", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + D2R1Slider->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "2\302\260 Decay Rate", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + D1R1Slider->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "1\302\260 Decay Rate", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + RR1Slider->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Release Rate", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP + AR1Label->setText(QApplication::translate("DeicsOnzeGuiBase", "AR1", 0, QApplication::UnicodeUTF8)); +#ifndef QT_NO_TOOLTIP + D1R1SpinBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Coarse Ratio", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + D1L1SpinBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Coarse Ratio", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + D2R1SpinBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Coarse Ratio", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + RR1SpinBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Coarse Ratio", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + AR1Slider->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Attack Rate", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_WHATSTHIS + AR1Slider->setProperty("whatsThis", QVariant(QString())); +#endif // QT_NO_WHATSTHIS +#ifndef QT_NO_TOOLTIP + AR1SpinBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Attack Rate", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP + Scaling1GroupBox->setTitle(QApplication::translate("DeicsOnzeGuiBase", "Scaling 1", 0, QApplication::UnicodeUTF8)); + LS1Label->setText(QApplication::translate("DeicsOnzeGuiBase", "LS1", 0, QApplication::UnicodeUTF8)); + RS1Label->setText(QApplication::translate("DeicsOnzeGuiBase", "RS1", 0, QApplication::UnicodeUTF8)); +#ifndef QT_NO_TOOLTIP + LS1Slider->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Level Scaling", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_WHATSTHIS + LS1Slider->setProperty("whatsThis", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Attack Rate of the operator 1", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_WHATSTHIS +#ifndef QT_NO_TOOLTIP + RS1Slider->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Rate Scaling", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_WHATSTHIS + RS1Slider->setProperty("whatsThis", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Attack Rate of the operator 1", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_WHATSTHIS +#ifndef QT_NO_TOOLTIP + LS1SpinBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Coarse Ratio", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + RS1SpinBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Coarse Ratio", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP + Vol1groupBox->setTitle(QApplication::translate("DeicsOnzeGuiBase", "Vol 1", 0, QApplication::UnicodeUTF8)); +#ifndef QT_NO_TOOLTIP + Vol1Slider->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Volume", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_WHATSTHIS + Vol1Slider->setProperty("whatsThis", QVariant(QString())); +#endif // QT_NO_WHATSTHIS +#ifndef QT_NO_TOOLTIP + Vol1SpinBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Coarse Ratio", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP + sensitivity1groupBox->setTitle(QApplication::translate("DeicsOnzeGuiBase", "Sensitivity 1", 0, QApplication::UnicodeUTF8)); + EGS1Label->setText(QApplication::translate("DeicsOnzeGuiBase", "EBS1", 0, QApplication::UnicodeUTF8)); + KVS1Label->setText(QApplication::translate("DeicsOnzeGuiBase", "KVS1", 0, QApplication::UnicodeUTF8)); + AME1CheckBox->setText(QApplication::translate("DeicsOnzeGuiBase", "AME1", 0, QApplication::UnicodeUTF8)); +#ifndef QT_NO_TOOLTIP + AME1CheckBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Amplitude Modulation Enable", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + KVS1Slider->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Key Velocity Sensitivity", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + EBS1Slider->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "EG Bias Sensitivity", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + KVS1SpinBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Coarse Ratio", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + EBS1SpinBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Coarse Ratio", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP + DetWaveEGS1GroupBox->setTitle(QApplication::translate("DeicsOnzeGuiBase", "Detune Wave EGShift 1", 0, QApplication::UnicodeUTF8)); + WaveForm1ComboBox->clear(); + WaveForm1ComboBox->insertItems(0, QStringList() + << QApplication::translate("DeicsOnzeGuiBase", "Wave1", 0, QApplication::UnicodeUTF8) + << QApplication::translate("DeicsOnzeGuiBase", "Wave2", 0, QApplication::UnicodeUTF8) + << QApplication::translate("DeicsOnzeGuiBase", "Wave3", 0, QApplication::UnicodeUTF8) + << QApplication::translate("DeicsOnzeGuiBase", "Wave4", 0, QApplication::UnicodeUTF8) + << QApplication::translate("DeicsOnzeGuiBase", "Wave5", 0, QApplication::UnicodeUTF8) + << QApplication::translate("DeicsOnzeGuiBase", "Wave6", 0, QApplication::UnicodeUTF8) + << QApplication::translate("DeicsOnzeGuiBase", "Wave7", 0, QApplication::UnicodeUTF8) + << QApplication::translate("DeicsOnzeGuiBase", "Wave8", 0, QApplication::UnicodeUTF8) + ); +#ifndef QT_NO_TOOLTIP + WaveForm1ComboBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Wave Form", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_WHATSTHIS + WaveForm1ComboBox->setProperty("whatsThis", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Wave form 1 = sin(t)
\n" +"Wave form 2 = sin(t)*abs(sin(t))
\n" +"Wave form 3 = if t< pi then sin(t) else 0
\n" +"Wave form 4 = if t< pi then sin(t)*abs(sin(t)) else 0
\n" +"Wave form 5 = if t< pi then sin(2*t) else 0
\n" +"Wave form 6 = if t< pi then sin(2*t)*abs(sin(2*t)) else 0
\n" +"Wave form 7 = if t< pi then abs(sin(2*t)) else 0
\n" +"Wave form 8 = if t< pi then sin(2*t)*sin(2*t) else 0", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_WHATSTHIS + DET1Label->setText(QApplication::translate("DeicsOnzeGuiBase", "DET1", 0, QApplication::UnicodeUTF8)); + EGQ1ComboBox->clear(); + EGQ1ComboBox->insertItems(0, QStringList() + << QApplication::translate("DeicsOnzeGuiBase", "96dB", 0, QApplication::UnicodeUTF8) + << QApplication::translate("DeicsOnzeGuiBase", "48dB", 0, QApplication::UnicodeUTF8) + << QApplication::translate("DeicsOnzeGuiBase", "24dB", 0, QApplication::UnicodeUTF8) + << QApplication::translate("DeicsOnzeGuiBase", "12dB", 0, QApplication::UnicodeUTF8) + ); +#ifndef QT_NO_TOOLTIP + EGQ1ComboBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "EG Shift", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + DET1Slider->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Detune", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_WHATSTHIS + DET1Slider->setProperty("whatsThis", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Attack Rate of the operator 1", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_WHATSTHIS +#ifndef QT_NO_TOOLTIP + DET1SpinBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Coarse Ratio", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP + deicsOnzeTabWidget->setTabText(deicsOnzeTabWidget->indexOf(tab), QApplication::translate("DeicsOnzeGuiBase", "Op &1", 0, QApplication::UnicodeUTF8)); + Frequency2groupBox->setTitle(QApplication::translate("DeicsOnzeGuiBase", "Frequency 2", 0, QApplication::UnicodeUTF8)); + Fix2CheckBox->setText(QApplication::translate("DeicsOnzeGuiBase", "FIX", 0, QApplication::UnicodeUTF8)); + Freq2Label->setText(QApplication::translate("DeicsOnzeGuiBase", "Freq 2", 0, QApplication::UnicodeUTF8)); + FineRatio2Label->setText(QApplication::translate("DeicsOnzeGuiBase", "Fine 2", 0, QApplication::UnicodeUTF8)); + CoarseRatio2Label->setText(QApplication::translate("DeicsOnzeGuiBase", "Coarse 2", 0, QApplication::UnicodeUTF8)); +#ifndef QT_NO_TOOLTIP + CoarseRatio2SpinBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Coarse Ratio", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + FineRatio2SpinBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Fine Ratio", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + Freq2SpinBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Fixed Frequency", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP + Env2GroupBox->setTitle(QApplication::translate("DeicsOnzeGuiBase", "Envelope 2", 0, QApplication::UnicodeUTF8)); + AR2Label->setText(QApplication::translate("DeicsOnzeGuiBase", "AR2", 0, QApplication::UnicodeUTF8)); + RR2Label->setText(QApplication::translate("DeicsOnzeGuiBase", "RR2", 0, QApplication::UnicodeUTF8)); + D2R2Label->setText(QApplication::translate("DeicsOnzeGuiBase", "D2R2", 0, QApplication::UnicodeUTF8)); + D1L2Label->setText(QApplication::translate("DeicsOnzeGuiBase", "D1L2", 0, QApplication::UnicodeUTF8)); + D1R2Label->setText(QApplication::translate("DeicsOnzeGuiBase", "D1R2", 0, QApplication::UnicodeUTF8)); +#ifndef QT_NO_TOOLTIP + AR2Slider->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Attack Rate", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_WHATSTHIS + AR2Slider->setProperty("whatsThis", QVariant(QString())); +#endif // QT_NO_WHATSTHIS +#ifndef QT_NO_TOOLTIP + D1R2Slider->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "1\302\260 Decay Rate", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + D1L2Slider->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "1\302\260 Decay Level", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + D2R2Slider->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "2\302\260 Decay Rate", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + RR2Slider->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Release Rate", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + D1R2SpinBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Coarse Ratio", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + D1L2SpinBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Coarse Ratio", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + D2R2SpinBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Coarse Ratio", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + RR2SpinBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Coarse Ratio", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + AR2SpinBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Attack Rate", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP + Scaling2GroupBox->setTitle(QApplication::translate("DeicsOnzeGuiBase", "Scaling 2", 0, QApplication::UnicodeUTF8)); + LS2Label->setText(QApplication::translate("DeicsOnzeGuiBase", "LS2", 0, QApplication::UnicodeUTF8)); + RS2Label->setText(QApplication::translate("DeicsOnzeGuiBase", "RS2", 0, QApplication::UnicodeUTF8)); +#ifndef QT_NO_TOOLTIP + LS2Slider->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Level Scaling", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_WHATSTHIS + LS2Slider->setProperty("whatsThis", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Attack Rate of the operator 1", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_WHATSTHIS +#ifndef QT_NO_TOOLTIP + RS2Slider->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Rate Scaling", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_WHATSTHIS + RS2Slider->setProperty("whatsThis", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Attack Rate of the operator 1", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_WHATSTHIS +#ifndef QT_NO_TOOLTIP + LS2SpinBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Coarse Ratio", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + RS2SpinBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Coarse Ratio", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP + Vol2groupBox->setTitle(QApplication::translate("DeicsOnzeGuiBase", "Vol 2", 0, QApplication::UnicodeUTF8)); +#ifndef QT_NO_TOOLTIP + Vol2Slider->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Volume", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_WHATSTHIS + Vol2Slider->setProperty("whatsThis", QVariant(QString())); +#endif // QT_NO_WHATSTHIS +#ifndef QT_NO_TOOLTIP + Vol2SpinBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Coarse Ratio", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP + sensitivity2groupBox->setTitle(QApplication::translate("DeicsOnzeGuiBase", "Sensitivity 2", 0, QApplication::UnicodeUTF8)); + EGS2Label->setText(QApplication::translate("DeicsOnzeGuiBase", "EBS2", 0, QApplication::UnicodeUTF8)); + KVS2Label->setText(QApplication::translate("DeicsOnzeGuiBase", "KVS2", 0, QApplication::UnicodeUTF8)); + AME2CheckBox->setText(QApplication::translate("DeicsOnzeGuiBase", "AME2", 0, QApplication::UnicodeUTF8)); +#ifndef QT_NO_TOOLTIP + AME2CheckBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Amplitude Modulation Enable", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + KVS2Slider->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Key Velocity Sensitivity", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + EBS2Slider->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "EG Bias Sensitivity", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + EBS2SpinBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Coarse Ratio", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + KVS2SpinBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Coarse Ratio", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP + DetWaveEGS2GroupBox->setTitle(QApplication::translate("DeicsOnzeGuiBase", "Detune Wave EGShift 2", 0, QApplication::UnicodeUTF8)); +#ifndef QT_NO_TOOLTIP + DET2Slider->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Detune", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_WHATSTHIS + DET2Slider->setProperty("whatsThis", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Attack Rate of the operator 1", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_WHATSTHIS + DET2Label->setText(QApplication::translate("DeicsOnzeGuiBase", "DET2", 0, QApplication::UnicodeUTF8)); + WaveForm2ComboBox->clear(); + WaveForm2ComboBox->insertItems(0, QStringList() + << QApplication::translate("DeicsOnzeGuiBase", "Wave1", 0, QApplication::UnicodeUTF8) + << QApplication::translate("DeicsOnzeGuiBase", "Wave2", 0, QApplication::UnicodeUTF8) + << QApplication::translate("DeicsOnzeGuiBase", "Wave3", 0, QApplication::UnicodeUTF8) + << QApplication::translate("DeicsOnzeGuiBase", "Wave4", 0, QApplication::UnicodeUTF8) + << QApplication::translate("DeicsOnzeGuiBase", "Wave5", 0, QApplication::UnicodeUTF8) + << QApplication::translate("DeicsOnzeGuiBase", "Wave6", 0, QApplication::UnicodeUTF8) + << QApplication::translate("DeicsOnzeGuiBase", "Wave7", 0, QApplication::UnicodeUTF8) + << QApplication::translate("DeicsOnzeGuiBase", "Wave8", 0, QApplication::UnicodeUTF8) + ); +#ifndef QT_NO_TOOLTIP + WaveForm2ComboBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Wave Form", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_WHATSTHIS + WaveForm2ComboBox->setProperty("whatsThis", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Wave form 1 = sin(t)
\n" +"Wave form 2 = sin(t)*abs(sin(t))
\n" +"Wave form 3 = if t< pi then sin(t) else 0
\n" +"Wave form 4 = if t< pi then sin(t)*abs(sin(t)) else 0
\n" +"Wave form 5 = if t< pi then sin(2*t) else 0
\n" +"Wave form 6 = if t< pi then sin(2*t)*abs(sin(2*t)) else 0
\n" +"Wave form 7 = if t< pi then abs(sin(2*t)) else 0
\n" +"Wave form 8 = if t< pi then sin(2*t)*sin(2*t) else 0", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_WHATSTHIS + EGS2comboBox->clear(); + EGS2comboBox->insertItems(0, QStringList() + << QApplication::translate("DeicsOnzeGuiBase", "96dB", 0, QApplication::UnicodeUTF8) + << QApplication::translate("DeicsOnzeGuiBase", "48dB", 0, QApplication::UnicodeUTF8) + << QApplication::translate("DeicsOnzeGuiBase", "24dB", 0, QApplication::UnicodeUTF8) + << QApplication::translate("DeicsOnzeGuiBase", "12dB", 0, QApplication::UnicodeUTF8) + ); +#ifndef QT_NO_TOOLTIP + EGS2comboBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "EG Shift", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + DET2SpinBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Coarse Ratio", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP + deicsOnzeTabWidget->setTabText(deicsOnzeTabWidget->indexOf(tab1), QApplication::translate("DeicsOnzeGuiBase", "Op &2", 0, QApplication::UnicodeUTF8)); + Frequency3groupBox->setTitle(QApplication::translate("DeicsOnzeGuiBase", "Frequency 3", 0, QApplication::UnicodeUTF8)); + Fix3CheckBox->setText(QApplication::translate("DeicsOnzeGuiBase", "FIX", 0, QApplication::UnicodeUTF8)); + CoarseRatio3Label->setText(QApplication::translate("DeicsOnzeGuiBase", "Coarse 3", 0, QApplication::UnicodeUTF8)); + FineRatio3Label->setText(QApplication::translate("DeicsOnzeGuiBase", "Fine 3", 0, QApplication::UnicodeUTF8)); + Freq3Label->setText(QApplication::translate("DeicsOnzeGuiBase", "Freq 3", 0, QApplication::UnicodeUTF8)); +#ifndef QT_NO_TOOLTIP + CoarseRatio3SpinBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Coarse Ratio", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + FineRatio3SpinBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Fine Ratio", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + Freq3SpinBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Fixed Frequency", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP + Env3GroupBox->setTitle(QApplication::translate("DeicsOnzeGuiBase", "Envelope 3", 0, QApplication::UnicodeUTF8)); + RR3Label->setText(QApplication::translate("DeicsOnzeGuiBase", "RR3", 0, QApplication::UnicodeUTF8)); + D2R3Label->setText(QApplication::translate("DeicsOnzeGuiBase", "D2R3", 0, QApplication::UnicodeUTF8)); + D1L3Label->setText(QApplication::translate("DeicsOnzeGuiBase", "D1L3", 0, QApplication::UnicodeUTF8)); + D1R3Label->setText(QApplication::translate("DeicsOnzeGuiBase", "D1R3", 0, QApplication::UnicodeUTF8)); + AR3Label->setText(QApplication::translate("DeicsOnzeGuiBase", "AR3", 0, QApplication::UnicodeUTF8)); +#ifndef QT_NO_TOOLTIP + AR3Slider->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Attack Rate", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_WHATSTHIS + AR3Slider->setProperty("whatsThis", QVariant(QString())); +#endif // QT_NO_WHATSTHIS +#ifndef QT_NO_TOOLTIP + D1R3Slider->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "1\302\260 Decay Rate", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + D1L3Slider->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "1\302\260 Decay Level", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + D2R3Slider->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "2\302\260 Decay Rate", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + RR3Slider->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Release Rate", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + D1R3SpinBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Coarse Ratio", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + D1L3SpinBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Coarse Ratio", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + D2R3SpinBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Coarse Ratio", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + RR3SpinBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Coarse Ratio", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + AR3SpinBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Attack Rate", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP + Scaling3GroupBox->setTitle(QApplication::translate("DeicsOnzeGuiBase", "Scaling 3", 0, QApplication::UnicodeUTF8)); + LS3Label->setText(QApplication::translate("DeicsOnzeGuiBase", "LS3", 0, QApplication::UnicodeUTF8)); + RS3Label->setText(QApplication::translate("DeicsOnzeGuiBase", "RS3", 0, QApplication::UnicodeUTF8)); +#ifndef QT_NO_TOOLTIP + LS3Slider->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Level Scaling", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_WHATSTHIS + LS3Slider->setProperty("whatsThis", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Attack Rate of the operator 1", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_WHATSTHIS +#ifndef QT_NO_TOOLTIP + RS3Slider->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Rate Scaling", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_WHATSTHIS + RS3Slider->setProperty("whatsThis", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Attack Rate of the operator 1", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_WHATSTHIS +#ifndef QT_NO_TOOLTIP + LS3SpinBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Coarse Ratio", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + RS3SpinBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Coarse Ratio", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP + Vol3groupBox->setTitle(QApplication::translate("DeicsOnzeGuiBase", "Vol 3", 0, QApplication::UnicodeUTF8)); +#ifndef QT_NO_TOOLTIP + Vol3Slider->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Volume", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_WHATSTHIS + Vol3Slider->setProperty("whatsThis", QVariant(QString())); +#endif // QT_NO_WHATSTHIS +#ifndef QT_NO_TOOLTIP + Vol3SpinBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Coarse Ratio", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP + sensitivity3groupBox->setTitle(QApplication::translate("DeicsOnzeGuiBase", "Sensitivity 3", 0, QApplication::UnicodeUTF8)); + EGS3Label->setText(QApplication::translate("DeicsOnzeGuiBase", "EBS3", 0, QApplication::UnicodeUTF8)); + KVS3Label->setText(QApplication::translate("DeicsOnzeGuiBase", "KVS3", 0, QApplication::UnicodeUTF8)); + AME3CheckBox->setText(QApplication::translate("DeicsOnzeGuiBase", "AME3", 0, QApplication::UnicodeUTF8)); +#ifndef QT_NO_TOOLTIP + AME3CheckBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Amplitude Modulation Enable", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + KVS3Slider->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Key Velocity Sensitivity", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + EBS3Slider->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "EG Bias Sensitivity", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + EBS3SpinBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Coarse Ratio", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + KVS3SpinBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Coarse Ratio", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP + DetWaveEGS3GroupBox->setTitle(QApplication::translate("DeicsOnzeGuiBase", "Detune Wave EGShift 3", 0, QApplication::UnicodeUTF8)); + WaveForm3ComboBox->clear(); + WaveForm3ComboBox->insertItems(0, QStringList() + << QApplication::translate("DeicsOnzeGuiBase", "Wave1", 0, QApplication::UnicodeUTF8) + << QApplication::translate("DeicsOnzeGuiBase", "Wave2", 0, QApplication::UnicodeUTF8) + << QApplication::translate("DeicsOnzeGuiBase", "Wave3", 0, QApplication::UnicodeUTF8) + << QApplication::translate("DeicsOnzeGuiBase", "Wave4", 0, QApplication::UnicodeUTF8) + << QApplication::translate("DeicsOnzeGuiBase", "Wave5", 0, QApplication::UnicodeUTF8) + << QApplication::translate("DeicsOnzeGuiBase", "Wave6", 0, QApplication::UnicodeUTF8) + << QApplication::translate("DeicsOnzeGuiBase", "Wave7", 0, QApplication::UnicodeUTF8) + << QApplication::translate("DeicsOnzeGuiBase", "Wave8", 0, QApplication::UnicodeUTF8) + ); +#ifndef QT_NO_TOOLTIP + WaveForm3ComboBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Wave Form", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_WHATSTHIS + WaveForm3ComboBox->setProperty("whatsThis", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Wave form 1 = sin(t)
\n" +"Wave form 2 = sin(t)*abs(sin(t))
\n" +"Wave form 3 = if t< pi then sin(t) else 0
\n" +"Wave form 4 = if t< pi then sin(t)*abs(sin(t)) else 0
\n" +"Wave form 5 = if t< pi then sin(2*t) else 0
\n" +"Wave form 6 = if t< pi then sin(2*t)*abs(sin(2*t)) else 0
\n" +"Wave form 7 = if t< pi then abs(sin(2*t)) else 0
\n" +"Wave form 8 = if t< pi then sin(2*t)*sin(2*t) else 0", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_WHATSTHIS + EGS3comboBox->clear(); + EGS3comboBox->insertItems(0, QStringList() + << QApplication::translate("DeicsOnzeGuiBase", "96dB", 0, QApplication::UnicodeUTF8) + << QApplication::translate("DeicsOnzeGuiBase", "48dB", 0, QApplication::UnicodeUTF8) + << QApplication::translate("DeicsOnzeGuiBase", "24dB", 0, QApplication::UnicodeUTF8) + << QApplication::translate("DeicsOnzeGuiBase", "12dB", 0, QApplication::UnicodeUTF8) + ); +#ifndef QT_NO_TOOLTIP + EGS3comboBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "EG Shift", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP + DET3Label->setText(QApplication::translate("DeicsOnzeGuiBase", "DET3", 0, QApplication::UnicodeUTF8)); +#ifndef QT_NO_TOOLTIP + DET3Slider->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Detune", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_WHATSTHIS + DET3Slider->setProperty("whatsThis", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Attack Rate of the operator 1", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_WHATSTHIS +#ifndef QT_NO_TOOLTIP + DET3SpinBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Coarse Ratio", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP + deicsOnzeTabWidget->setTabText(deicsOnzeTabWidget->indexOf(TabPage2), QApplication::translate("DeicsOnzeGuiBase", "Op &3", 0, QApplication::UnicodeUTF8)); + Frequency4groupBox->setTitle(QApplication::translate("DeicsOnzeGuiBase", "Frequency 4", 0, QApplication::UnicodeUTF8)); + CoarseRatio4Label->setText(QApplication::translate("DeicsOnzeGuiBase", "Coarse 4", 0, QApplication::UnicodeUTF8)); + FineRatio4Label->setText(QApplication::translate("DeicsOnzeGuiBase", "Fine 4", 0, QApplication::UnicodeUTF8)); + Freq4Label->setText(QApplication::translate("DeicsOnzeGuiBase", "Freq 4", 0, QApplication::UnicodeUTF8)); + Fix4CheckBox->setText(QApplication::translate("DeicsOnzeGuiBase", "FIX", 0, QApplication::UnicodeUTF8)); +#ifndef QT_NO_TOOLTIP + FineRatio4SpinBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Fine Ratio", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + Freq4SpinBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Fixed Frequency", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + CoarseRatio4SpinBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Coarse Ratio", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP + Scaling4GroupBox->setTitle(QApplication::translate("DeicsOnzeGuiBase", "Scaling 4", 0, QApplication::UnicodeUTF8)); + LS4Label->setText(QApplication::translate("DeicsOnzeGuiBase", "LS4", 0, QApplication::UnicodeUTF8)); + RS4Label->setText(QApplication::translate("DeicsOnzeGuiBase", "RS4", 0, QApplication::UnicodeUTF8)); +#ifndef QT_NO_TOOLTIP + LS4Slider->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Level Scaling", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_WHATSTHIS + LS4Slider->setProperty("whatsThis", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Attack Rate of the operator 1", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_WHATSTHIS +#ifndef QT_NO_TOOLTIP + RS4Slider->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Rate Scaling", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_WHATSTHIS + RS4Slider->setProperty("whatsThis", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Attack Rate of the operator 1", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_WHATSTHIS +#ifndef QT_NO_TOOLTIP + RS4SpinBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Coarse Ratio", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + LS4SpinBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Coarse Ratio", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP + Env4GroupBox->setTitle(QApplication::translate("DeicsOnzeGuiBase", "Envelope 4", 0, QApplication::UnicodeUTF8)); +#ifndef QT_NO_TOOLTIP + AR4Slider->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Attack Rate", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_WHATSTHIS + AR4Slider->setProperty("whatsThis", QVariant(QString())); +#endif // QT_NO_WHATSTHIS + AR4Label->setText(QApplication::translate("DeicsOnzeGuiBase", "AR4", 0, QApplication::UnicodeUTF8)); + RR4Label->setText(QApplication::translate("DeicsOnzeGuiBase", "RR4", 0, QApplication::UnicodeUTF8)); + D2R4Label->setText(QApplication::translate("DeicsOnzeGuiBase", "D2R4", 0, QApplication::UnicodeUTF8)); +#ifndef QT_NO_TOOLTIP + D2R4Slider->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "2\302\260 Decay Rate", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + D1L4Slider->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "1\302\260 Decay Level", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP + D1L4Label->setText(QApplication::translate("DeicsOnzeGuiBase", "D1L4", 0, QApplication::UnicodeUTF8)); + D1R4Label->setText(QApplication::translate("DeicsOnzeGuiBase", "D1R4", 0, QApplication::UnicodeUTF8)); +#ifndef QT_NO_TOOLTIP + D1R4Slider->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "1\302\260 Decay Rate", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + RR4Slider->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Release Rate", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + D1R4SpinBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Coarse Ratio", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + D1L4SpinBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Coarse Ratio", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + D2R4SpinBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Coarse Ratio", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + RR4SpinBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Coarse Ratio", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + AR4SpinBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Attack Rate", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP + Vol4groupBox->setTitle(QApplication::translate("DeicsOnzeGuiBase", "Vol 4", 0, QApplication::UnicodeUTF8)); +#ifndef QT_NO_TOOLTIP + Vol4Slider->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Volume", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_WHATSTHIS + Vol4Slider->setProperty("whatsThis", QVariant(QString())); +#endif // QT_NO_WHATSTHIS +#ifndef QT_NO_TOOLTIP + Vol4SpinBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Coarse Ratio", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP + sensitivity4groupBox->setTitle(QApplication::translate("DeicsOnzeGuiBase", "Sensitivity 4", 0, QApplication::UnicodeUTF8)); + EGS4Label->setText(QApplication::translate("DeicsOnzeGuiBase", "EBS4", 0, QApplication::UnicodeUTF8)); + KVS4Label->setText(QApplication::translate("DeicsOnzeGuiBase", "KVS4", 0, QApplication::UnicodeUTF8)); + AME4CheckBox->setText(QApplication::translate("DeicsOnzeGuiBase", "AME4", 0, QApplication::UnicodeUTF8)); +#ifndef QT_NO_TOOLTIP + AME4CheckBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Amplitude Modulation Enable", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + KVS4Slider->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Key Velocity Sensitivity", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + EBS4Slider->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "EG Bias Sensitivity", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + KVS4SpinBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Coarse Ratio", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + EBS4SpinBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Coarse Ratio", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP + DetWaveEGS4GroupBox->setTitle(QApplication::translate("DeicsOnzeGuiBase", "Detune Wave EGShift 4", 0, QApplication::UnicodeUTF8)); +#ifndef QT_NO_TOOLTIP + DET4Slider->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Detune", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_WHATSTHIS + DET4Slider->setProperty("whatsThis", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Attack Rate of the operator 1", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_WHATSTHIS + DET4Label->setText(QApplication::translate("DeicsOnzeGuiBase", "DET4", 0, QApplication::UnicodeUTF8)); + WaveForm4ComboBox->clear(); + WaveForm4ComboBox->insertItems(0, QStringList() + << QApplication::translate("DeicsOnzeGuiBase", "Wave1", 0, QApplication::UnicodeUTF8) + << QApplication::translate("DeicsOnzeGuiBase", "Wave2", 0, QApplication::UnicodeUTF8) + << QApplication::translate("DeicsOnzeGuiBase", "Wave3", 0, QApplication::UnicodeUTF8) + << QApplication::translate("DeicsOnzeGuiBase", "Wave4", 0, QApplication::UnicodeUTF8) + << QApplication::translate("DeicsOnzeGuiBase", "Wave5", 0, QApplication::UnicodeUTF8) + << QApplication::translate("DeicsOnzeGuiBase", "Wave6", 0, QApplication::UnicodeUTF8) + << QApplication::translate("DeicsOnzeGuiBase", "Wave7", 0, QApplication::UnicodeUTF8) + << QApplication::translate("DeicsOnzeGuiBase", "Wave8", 0, QApplication::UnicodeUTF8) + ); +#ifndef QT_NO_TOOLTIP + WaveForm4ComboBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Wave Form", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_WHATSTHIS + WaveForm4ComboBox->setProperty("whatsThis", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Wave form 1 = sin(t)
\n" +"Wave form 2 = sin(t)*abs(sin(t))
\n" +"Wave form 3 = if t< pi then sin(t) else 0
\n" +"Wave form 4 = if t< pi then sin(t)*abs(sin(t)) else 0
\n" +"Wave form 5 = if t< pi then sin(2*t) else 0
\n" +"Wave form 6 = if t< pi then sin(2*t)*abs(sin(2*t)) else 0
\n" +"Wave form 7 = if t< pi then abs(sin(2*t)) else 0
\n" +"Wave form 8 = if t< pi then sin(2*t)*sin(2*t) else 0", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_WHATSTHIS + EGS4comboBox->clear(); + EGS4comboBox->insertItems(0, QStringList() + << QApplication::translate("DeicsOnzeGuiBase", "96dB", 0, QApplication::UnicodeUTF8) + << QApplication::translate("DeicsOnzeGuiBase", "48dB", 0, QApplication::UnicodeUTF8) + << QApplication::translate("DeicsOnzeGuiBase", "24dB", 0, QApplication::UnicodeUTF8) + << QApplication::translate("DeicsOnzeGuiBase", "12dB", 0, QApplication::UnicodeUTF8) + ); +#ifndef QT_NO_TOOLTIP + EGS4comboBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "EG Shift", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP +#ifndef QT_NO_TOOLTIP + DET4SpinBox->setProperty("toolTip", QVariant(QApplication::translate("DeicsOnzeGuiBase", "Coarse Ratio", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP + deicsOnzeTabWidget->setTabText(deicsOnzeTabWidget->indexOf(TabPage3), QApplication::translate("DeicsOnzeGuiBase", "Op &4", 0, QApplication::UnicodeUTF8)); + } // retranslateUi + + +protected: + enum IconID + { + image0_ID, + unknown_ID + }; + static QPixmap qt_get_icon(IconID id) + { + static const char* const image0_data[] = { +"479 360 270 2", +"cl c #6a3039", +"ch c #733039", +"cb c #733439", +"bY c #7b3439", +"ca c #7b3441", +"bV c #7b3839", +"b0 c #7b3841", +"bS c #833839", +"bO c #833841", +"bX c #833c41", +"bK c #8b3841", +"bF c #8b3c41", +"bL c #8b3c4a", +"bZ c #8b4041", +"b5 c #8b404a", +"bx c #943c41", +"bG c #943c4a", +"bv c #944041", +"bA c #94404a", +"b4 c #94444a", +"bh c #9c4041", +"be c #9c404a", +"bj c #9c444a", +"b8 c #9c484a", +"cd c #9c4852", +"ci c #9c5d5a", +"ce c #9c5d62", +"cj c #9c615a", +"cf c #9c6162", +"#a c #a43841", +"b. c #a4404a", +"a5 c #a4444a", +"bd c #a44452", +"bq c #a4484a", +"bo c #a44852", +"c# c #a44c4a", +"cc c #a44c52", +"bP c #a46162", +"b1 c #a46562", +".2 c #ac3841", +".1 c #ac3c41", +"aV c #ac444a", +"a9 c #ac4452", +"aR c #ac484a", +"a1 c #ac4852", +"b7 c #ac4c4a", +"bs c #ac4c52", +"c. c #ac5052", +"bN c #ac6162", +"bC c #ac6562", +"bE c #ac656a", +".Y c #b43c41", +".0 c #b43c4a", +"#c c #b44041", +".Z c #b4404a", +"aD c #b4484a", +"aF c #b44852", +"aO c #b44c52", +"bz c #b44c5a", +"br c #b45052", +"bB c #b4505a", +"b2 c #b45552", +"b3 c #b4555a", +"bQ c #b46562", +"bt c #b4656a", +"cg c #b46962", +"bb c #b4696a", +"## c #bd4041", +".X c #bd404a", +".W c #bd444a", +"ay c #bd484a", +"ax c #bd4852", +"as c #bd4c52", +"aP c #bd4c5a", +"aQ c #bd5052", +"aX c #bd505a", +"bu c #bd5552", +"bw c #bd555a", +"bW c #bd595a", +"a8 c #bd696a", +"bk c #bd6973", +"a0 c #bd6d6a", +"a2 c #bd6d73", +".U c #c5444a", +".V c #c54452", +"#s c #c5484a", +"#v c #c54852", +"ad c #c54c52", +"av c #c54c5a", +"ak c #c55052", +"aq c #c5505a", +"aN c #c5555a", +"bn c #c5595a", +"by c #c55962", +"bR c #c55d5a", +"bU c #c55d62", +".3 c #c5656a", +".# c #c5696a", +"a3 c #c56d6a", +"aJ c #c56d73", +"aE c #c57173", +"#. c #cd444a", +"#n c #cd4452", +".T c #cd484a", +".S c #cd4852", +"#A c #cd4c52", +"#3 c #cd5052", +"a. c #cd505a", +"ah c #cd555a", +"aL c #cd595a", +"aZ c #cd5962", +"bm c #cd5d5a", +"bg c #cd5d62", +"bJ c #cd6162", +"b9 c #cd6562", +".a c #cd696a", +"Qt c #cd6973", +"#g c #cd6d6a", +".b c #cd6d73", +"b6 c #cd716a", +"at c #cd7173", +"az c #cd717b", +"an c #cd7573", +"au c #cd757b", +".9 c #d5484a", +".R c #d54852", +".Q c #d54c52", +"#G c #d54c5a", +"#E c #d55052", +"#U c #d5505a", +"#1 c #d5555a", +"ag c #d5595a", +"ap c #d55962", +"aK c #d55d5a", +"aI c #d55d62", +"ba c #d56162", +"bl c #d5616a", +"bD c #d56562", +"bH c #d5656a", +"bT c #d5696a", +".4 c #d56d6a", +".c c #d56d73", +"ck c #d5716a", +"#i c #d57173", +"#r c #d5717b", +"al c #d57573", +"aa c #d5757b", +"#9 c #d5797b", +".P c #de4c52", +"#f c #de4c5a", +".N c #de5052", +".O c #de505a", +"#J c #de555a", +"#Y c #de595a", +"#5 c #de5962", +"ai c #de5d5a", +"aj c #de5d62", +"aH c #de6162", +"aW c #de616a", +"a7 c #de6562", +"a6 c #de656a", +"bp c #de696a", +"bM c #de6973", +"bI c #de6d6a", +".d c #de6d73", +".e c #de7173", +".f c #de717b", +"#o c #de7573", +"#l c #de757b", +"#C c #de797b", +"#6 c #de7983", +"#7 c #de7d7b", +"#8 c #de7d83", +".8 c #e65052", +".M c #e6505a", +".L c #e6555a", +"#M c #e6595a", +"#R c #e65962", +"#0 c #e65d5a", +"#Z c #e65d62", +"ae c #e66162", +"ao c #e6616a", +"aC c #e66562", +"aA c #e6656a", +"aY c #e6696a", +"b# c #e66973", +"bc c #e66d6a", +"bf c #e66d73", +".i c #e67173", +".g c #e6717b", +".j c #e67573", +".h c #e6757b", +"#p c #e6797b", +"#B c #e67983", +"#H c #e67d7b", +"#F c #e67d83", +".J c #ee555a", +".I c #ee595a", +".K c #ee5962", +"#N c #ee5d5a", +"#P c #ee5d62", +"#X c #ee6162", +"#4 c #ee616a", +"ab c #ee6562", +"ac c #ee656a", +"aw c #ee696a", +"aG c #ee6973", +"aM c #ee6d6a", +"aS c #ee6d73", +"a4 c #ee7173", +"bi c #ee717b", +".5 c #ee7573", +".k c #ee757b", +".l c #ee797b", +"#m c #ee7983", +"#u c #ee7d7b", +"#t c #ee7d83", +"#K c #ee8183", +"#2 c #ee818b", +".H c #f6595a", +".G c #f65962", +"#d c #f65d5a", +".F c #f65d62", +"#L c #f66162", +"#T c #f6616a", +"#V c #f66562", +"#W c #f6656a", +"a# c #f6696a", +"af c #f66973", +"am c #f66d6a", +"ar c #f66d73", +"aB c #f67173", +"aU c #f6717b", +"aT c #f67573", +".6 c #f6757b", +".m c #f6797b", +".n c #f67983", +"#h c #f67d7b", +"#e c #f67d83", +"#x c #f68183", +"#I c #f6818b", +"#Q c #f68583", +"#O c #f6858b", +".E c #ff5d62", +".C c #ff6162", +".D c #ff616a", +".7 c #ff6562", +".B c #ff656a", +".A c #ff696a", +".z c #ff6973", +".y c #ff6d6a", +".x c #ff6d73", +".v c #ff7173", +".w c #ff717b", +".u c #ff7573", +".t c #ff757b", +".q c #ff797b", +".o c #ff7983", +".r c #ff7d7b", +".p c #ff7d83", +".s c #ff8183", +"#b c #ff818b", +"#k c #ff8583", +"#j c #ff858b", +"#q c #ff898b", +"#w c #ff8994", +"#z c #ff8d8b", +"#y c #ff8d94", +"#D c #ff9194", +"#S c #ff919c", +"Qt.#Qt.aQt.a.b.a.c.a.c.a.c.c.c.c.c.c.c.c.d.c.e.c.e.d.e.d.f.e.e.e.g.e.g.e.g.e.h.e.h.i.h.i.h.i.h.j.k.h.k.h.k.k.k.k.k.k.l.k.l.k.m.k.m.k.m.k.m.m.m.m.n.m.m.m.n.m.n.m.o.m.p.m.p.m.p.m.p.q.p.q.p.q.p.q.p.r.p.r.p.p.p.r.p.p.p.r.p.p.p.p.p.p.p.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.p.p.r.p.p.p.r.p.p.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.p" +".q.o.q.o.q.o.q.q.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.B.B.C.B.D.B.C.B.C.D.C.D.C.D.C.D.E.D.E.D.E.C.F.C.F.E.F.E.F.F.F.F.G.F.H.F.H.G.I.G.I.G.I.G.J.K.J.K.J.I.L.J.L.J.L.J.M.L.M.L.M.L.N.M.N.M.N.O.P.O.P.O.Q.P.Q.P.Q.Q.R.Q.S.Q.T.R.T.S.T.S.U.S.U.V.U.U.W.U.X.W.X.X.X.X.Y.Z.Y.0.1.0.2.1", +".3.a.#.a.aQt.aQt.a.b.a.c.a.c.a.c.4.c.4.c.c.d.c.d.c.e.c.e.d.e.d.e.e.e.e.e.e.g.e.i.e.h.e.h.i.h.i.h.i.k.i.k.j.k.j.k.k.k.5.k.k.l.k.l.k.m.k.m.k.m.k.m.6.m.m.m.m.m.m.m.m.o.m.q.m.o.m.r.m.p.m.p.q.p.q.p.q.p.q.p.q.p.r.p.r.p.r.p.r.p.r.p.r.p.r.p.r.p.r.p.p.p.r.p.p.s.r.s.p.s.r.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.r.s.p.s.r.s.p.p.r.p.p.p.r.p.r.p.r.p.r.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.p.q.p.q.p.q.q.q.o.q" +".q.q.q.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.x.A.z.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.A.B.B.B.B.B.B.B.B.7.B.C.B.C.B.C.B.C.D.C.D.C.C.C.D.C.C.E.C.E.C.E.C.F.E.F.E.F.F.F.F.H.F.H.F.H.F.H.G.I.G.I.G.J.I.J.I.J.I.J.J.L.J.L.J.L.L.M.L.8.L.8.M.N.M.N.M.P.N.P.O.Q.N.Q.P.Q.Q.Q.Q.9.Q.S.R.T.S.T.S#..S.U.S.U.U.U.U.X.U.X.U##.X##.X.Y.Z.Y.0.1.Y.2.1#a", +"Qt.#Qt.a.b.a.c.a.c.a.cQt.c.c.c.c.c.c.d.c.e.c.e.c.e.d.f.e.e.e.g.e.g.e.g.e.h.e.h.i.h.i.h.i.h.j.k.h.k.h.k.k.k.k.l.k.l.k.l.k.l.k.m.k.m.l.n.m.m.m.n.m.n.m.n.m.n.m.p.m.p.m.p.m.p.m.p.q.p.q.p.q.p.r.p.p.p.r.p.p.p.r.p.p.p.p.p.p.p.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.p.p.p.p.r.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p" +".q.p.q.p.q.o.q.o.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.B.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.B.B.C.B.D.B.C.B.C.D.C.D.C.D.C.D.E.C.E.D.E.C.F.E.F.E.F.E.F.F.G.F.G.F.H.F.H.G.I.G.I.G.I.G.J.K.J.K.J.J.L.J.L.J.L.J.M.L.M.L.M.M.N.M.N.O.N.O.P.O.Q.O.Q.P.Q.Q.Q.Q.R.Q.S.R.T.S.T.S.U.S.U.S.U.V.U.U.X.U.X.W##.X#c.X.Y.Z.Y.0.1.1", +".#.a.#Qt.aQt.a.b.a.b.a.c.a.c.4.c.4.c.c.c.c.c.c.e.c.e.d.e.d.e.e.e.e.e.e.g.e.i.e.h.e.h.i.h.i.h.i.k.j.k.j.k.j.k.k.k.5.k.k.l.k.l.k.m.k.m.k.m.k.m.m.m.l.m.m.m.m.m.m.o.m.q.m.p.m.p.m.p.m.p.q.p.q.p.q.p.q.p.r.p.r.p.r.p.r.p.r.p.r.p.r.p.r.p.p.p.r.p.p.s.r.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.r.s.p.s.r.s.p.p.r.p.p.p.r.p.r.p.r.p.r.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.p.q.q.q" +".o.q.q.q.q.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.x.A.z.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.A.B.B.B.B.7.B.B.B.7.B.C.B.C.B.C.B.C.D.C.D.C.C.C.D.E.C.E.C.E.C.E.E.F.E.F.E#d.F.G.F.H.F.H.F.I.G.I.G.I.G.I.G.J.I.J.I.J.I.J.J.L.J.L.J.8.L.M.L.8.L.N.M.N.M.N.O.P.N.P.N.Q.P.Q.P.Q.Q.R.Q.T.Q.T.R.T.S.T.S.U.T.U.S.U.U.U.U.X.U.X.X##.X#c.X.Y.Z.Y.Y.1.1.2", +"Qt.aQt.a.b.a.c.a.cQt.c.b.c.c.c.c.d.c.e.c.e.c.e.c.f.e.e.e.f.e.f.e.g.e.h.e.h.i.h.i.h.i.h.j.k.h.k.h.k.h.k.h.l.k.l.k.l.k.l.k.m.k.m.l.n.l.m.l.n.m.n.m.n.m#e.m.p.m.p.m.p.m.p.m.p.q.p.q.p.r.p.r.p.p.p.r.p.p.p.p.p.p.p.p.p.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.s.s.s.s.s.s.s.s.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p" +".q.p.q.p.q.p.q.o.q.o.q.o.q.o.q.q.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.t.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.z.A.z.A.z.A.z.A.z.B.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.D.B.C.B.D.B.C.B.C.D.C.D.C.D.C.D.E.C.E.D.E.C.F.E.F.E.F.E.F.F.G.F.G.F.H.F.H.G.I.G.I.G.I.G.J.I.J.K.J.J.L.J.L.J.L.L.M.L.8.L.M.M.N.M.N.O.P.O.P.O.Q#f.Q.P.Q.Q.R.Q.S.Q.S.R.T.S.T.S.U.S.U.U.U.V.U.U.X.U.X.X#c.X.Y.Z.Y.Z.1.Y", +".#Qt.#Qt.a.b.a.b.a.c.a.c#g.c.4.c.c.c.c.c.c.e.c.e.c.e.c.e.e.e.e.e.e.g.e.i.e.h.e.h.i.h.i.h.i.h.j.k.j.k.j.k.h.k.j.k.k.l.k.l.k.m.k.m.k.m.k.m.l.m.l.m.m.m.m.m.m.o.m#h.m.p.m.p.m.p.m.p.q.p.q.p.q.p.r.p.r.p.r.p.r.p.r.p.r.p.r.p.p.p.r.p.p.s.r.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.r.s.p.s.r.s.p.p.r.p.p.p.r.p.r.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.p.q" +".r.q.o.q.q.q.o.q.q.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.x.A.z.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.A.B.B.B.B.7.B.B.B.C.B.C.B.C.B.C.B.C.D.C.D.C.C.C.D.E.C.E.C.E.C.E.E.F.E.F.E#d.F.G.F.H.F.H.F.I.G.I.G.I.G.I.G.J.I.J.I.J.J.L.J.L.J.L.J.8.L.M.L.N.M.N.M.N.M.N.O.P.N.P.N.Q.P.Q.P.Q.Q.R.Q.T.Q.T.R.T.S#..S.U.T.U#..U.U.U.U.X.W.X.X#c.X.Y.X.Y#c.Y.Y.1", +"Qt.a.b.a.b.a.cQt.c#g.c.c.c.c.c.c#i.c.e.c.e.c.f.e.e.e.f.e.f.e.g.e.h.e.h.i.h.i.h.g.h.j.k.h.k.h.k.h.k.h.l.k.l.k.l.k.l.k.m.k.m.l.n.l.m.l.n.m.n.m.n.m#e.m.p.m.p.m.p.m.p.m.p.q.p.r.p.p.p.r.p.p.p.r.p.p.p.p.p.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.s.s.s.s.s.s.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s#b.s#b.s#b.s#b.s#b.s#b.s#b.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.p.p.r.p.p.p.r.p.p.p.r.p.q.p.q.p" +".q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.x.x.A.x.z.x.A.x.A.x.A.z.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.A.B.B.B.B.B.B.B.B.D.B.C.B.C.B.C.D.C.D.C.D.C.D.C.D.E.C.E.D.E.C.F.E.F.E.F.E.F.F.G.F.G.F.H.G.H.G.I.G.I.K.J.K.J.I.J.K.J.J.L.J.L.L.M.L.M.L.8.L.N.M.N.M.N.O.P.O.P.N.Q#f.Q.Q.Q.Q.R.Q.S.Q.S.S.T.S#..S.U.S.U.U.U.U.X.U.X.W.X.X#c.X.Y.Z.Y.0", +".#Qt.aQt.a.b.a.c.a.c.a.c#g.c.c.c.c.c.c.e.c.e.c.e.c.e.e.e.e.e.e.g.e.i.e.h.e.h.i.h.i.h.i.h.j.h.j.k.j.k.h.k.j.l.k.l.k.l.k.m.k.m.k.m.l.m.l.m.l.m.m.n.m.m.m.n.m#h.m.p.m.p.m.p.m.p.q.p.q.p.r.p.r.p.r.p.r.p.r.p.r.p.p.p.r.p.p.s.r.s.p.s.r.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.r.s.p.s.r.p.p.p.r.p.p.p.r.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q" +".p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.x.A.z.A.A.A.z.A.A.A.A.B.A.B.A.B.A.B.A.B.B.B.B.7.B.B.B.C.B.C.B.C.B.C.D.C.D.C.D.C.C.C.D.E.C.E.C.F.C.F.E.F.E.F.E#d.F.G.F.H.F.H.F.I.G.I.G.I.H.J.G.J.I.J.I.L.J.L.J.L.J.L.L.8.L.8.L.N.M.N.M.N.O.P.O.P.N.P.P.Q.P.Q.Q.R.Q.R.Q.T.R.T.R.T.S#..S.U.T.U.U.U.U.X.U##.W##.X#c.X.Y.Z.Y.Y.1", +".b.a.b.a.cQt.c#g.c.c.c.c.c.c#i.c.e.c.e.c.f.e.e.e.f.e.f.e.g.e.h.e.h.i.h.i.h.g.h.j.k.h.k.h.k.h.k.h.l.k.l.k.l.k.l.k.m.l.m.l.n.l.m.l.n.m.n.m.n.m#e.m.p.m.p.m.p.m.p.m.p.r.p.r.p.p.p.r.p.p.p.p.p.p.p.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.s.s.s.s.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s#b.s#b.s#b.s#b.s#b.s#b.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s#b.s#b.s#b.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.p.p.r.p.r.p" +".q.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.x.x.A.x.z.x.A.x.A.x.A.z.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B.B.B.D.B.C.B.C.B.C.D.C.D.C.D.C.D.E.D.E.C.E.C.E.E.F.E.F.E.F.E.G.F.H.F.G.F.I.G.I.G.I.G.I.K.J.K.J.I.J.J.L.J.L.J.L.L.M.L.M.L.N.M.N.M.N.M.P.O.P.O.P.P.Q.P.Q.Q.R.Q.R.Q.T.R.S.S.T.S#..S.U.S.U.U.U.U.X.U.X.X.X.X#c.X.Y.Z", +".aQt.a.b.a.c.a.c.a.c#g.c.c.c.4.c.c.e.c.e.c.e.c.e.e.e.e.e.e.g.e.i.e.h.e.h.i.h.i.h.i.h.j.h.j.k.j.k.h.k.j.l.k.l.k.l.k.l.k.l.k.m.l.m.l.m.l.m.m.n.m.m.m#e.m#e.m.p.m.p.m.p.m.p.q.p.q.p.r.p.r.p.r.p.r.p.r.p.r.p.p.p.r.s.p.s.r.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.r.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q" +".p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.x.A.z.A.A.A.z.A.A.A.A.B.A.B.A.B.A.B.B.B.B.B.B.7.B.B.B.C.B.C.B.C.B.C.D.C.D.C.D.C.C.E.C.E.C.E.C.F.E.F.E.F.E.F.E.H.F.H.F.H.F.H.G.I.G.I.G.I.I.J.K.J.I.J.I.L.J.L.J.L.L.M.L.8.L.8.L.N.M.N.M.N.O.P.O.P.N.Q.P.Q.Q.Q.Q.R.Q.R.Q.T.R.T.S.T.S#..S.U.U.U.U.U.U.X.U##.X##.X#c.X.Y.Z.1", +".b.a.cQt.c#g.c.c.c.c.c.c#i.c.e.c.e.c.f.e.e.e.f.e.f.e.g.e.h.e.h.e.h.e.h.g.h.j.h.h.k.h.k.h.k.h.l.k.l.k.l.k.l.k.m.l.m.l.n.l.m.l.n.m.n.m#e.m#e.m.p.m.p.m.p.m.p.m.p.r.p.r.p.p.p.r.p.p.p.p.p.p.p.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.s.s.s.s.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s#b.s#b.s#b.s#b.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s#b.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.p.p.r.p.p.p.r.p" +".r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.q.o.t.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B.B.B.D.B.C.B.C.B.C.D.C.D.C.D.C.D.E.D.E.C.E.C.E.E.F.E.F.E.F.E.G.F.H.F.G.F.I.G.I.G.I.G.J.K.J.K.J.I.L.J.L.J.L.J.M.L.M.L.M.L.N.M.N.M.N.O.P.O.P.O.Q.P.Q.P.Q.Q.R.Q.S.Q.T.R.T.S.T.S.U.S.U.V.U.U.W.U.X.W.X.X.Z.X.Y.Z", +".a.b.a.c.a.c.a.c#g.c.c.c.4.c.c.e.c.e.c.e.c.e.e.e.e.e.e.f.e.e.e.h.e.h.e.h.i.h.i.h.j.h.j.k.j.k.h.k.j.l.k.l.k.l.k.l.k.l.k.m.l.m.l.m.l.m.m.n.m.m.m#e.m#e.m.p.m.p.m.p.m.p.q.p.r.p.r.p.r.p.r.p.r.p.p.p.r.p.p.s.r.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.p.p.r.p.r.p.r.p.r.p.r.p.r.p.q.p.q" +".p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.x.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.A.B.B.B.B.B.B.7.B.C.B.C.B.C.B.C.B.C.D.C.D.C.D.C.C.E.C.E.C.E.C.F.E.F.E.F.E.F.E.H.F.H.F.H.F.H.G.I.G.I.G.I.I.J.I.J.I.J.J.L.J.L.J.L.L.M.L.8.L.8.M.N.M.N.M.P.N.P.O.Q.N.Q.P.Q.Q.Q.Q.9.Q.S.R.T.S.T.S#..S.U.S.U.U.U.U.X.U.X.U##.X##.X.Y.Z.Y", +".cQt.c#g.c.b.c.c.c.c#i.c.e.c.e.c.f#i.e.e.f.e.f.e.g.e.h.e.h.e.h.e.h.g.h.j.h.h.h.h.k.h.k.h.l.k.l.k.l.k.l.k.m.l.m.l.n.l.m.l.n.m.n.m#e.m#e.m.p.m.p.m.p.m.p#h.p.p.p.r.p.p.p.r.p.p.p.p.p.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.s.s.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s#b.s#b.s#b.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.p.p.r.p.p.p" +".r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.x.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B.C.B.D.B.C.B.C.B.C.D.C.D.C.D.C.D.E.D.E.C.E.C.F.E.F.E.F.E.F.E.G.F.H.F.H.G.I.G.I.G.I.G.J.K.J.K.J.I.L.J.L.J.L.J.M.L.M.L.M.M.N.M.N.O.N.O.P.O.Q.O.Q.P.Q.Q.Q.Q.S.Q.S.R.T.S.T.S.U.S.U.S.U.V.U.U.X.U.X.X##.X#c.X", +".a.b.a.b.a.c#g.c.c.c.4.c.c#i.c#i.c.e.c.e.e.e.e.e.e.f.e.e.e.h.e.h.e.h.e.h.i.h.j.h.j.k.j.k.h.k.j.l.k.l.k.l.k.l.k.l.l.m.l.m.l.m.l.m.m.n.m.m.m#e.m#e.m.p.m.p.m.p.m.p.r.p#h.p.r.p.r.p.r.p.r.p.p.p.r.s.p.s.r.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s#b.s.s.s#b.s.s.s#j.s#k.s#j.s#k.s#j.s#k.s#j.s#k.s#j.s#k.s#j.s#k.s#j.s#k.s#j.s#k.s#b.s.s.s#b.s.s.s#b.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.p.p.r.p.r.p.r.p.r.p.r.p.r.p.q" +".p.q.p.q.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.y.x.y.x.A.x.A.x.A.x.A.z.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.A.B.B.B.B.B.B.7.B.C.B.C.B.C.B.C.B.C.D.C.D.C.D.C.C.E.C.E.C.E.C.F.E.F.E.F.E.F.E.H.F.H.F.H.F.H.G.I.G.I.G.J.I.J.I.J.I.J.J.L.J.L.J.8.L.M.L.8.L.8.M.N.M.N.M.P.N.P.N.Q.P.Q.P.Q.Q.R.Q.T.Q.T.R.T.S.T.S.U.T.U#..U.U.U.U.X.U.X.X##.X#c.X.Y", +".c#g.c.b.c.b.c.c#i.c.e.c.e.c.f.c.e#i.f.e.f.e.f.e.h.e.h.e.h.e.h.g.h.j.h.h.h.h.k.h.k.h.l.k.l.k.l.k.l.k.l.l.l.l.n.l.n.l.n.m.n.m#e.m#e.m#e.m#e.m.p.m.p#h.p.p.p.r.p.p.p.p.p.p.p.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.s.s.s.s.s.s.s#b.s.s.s#b.s.s.s#b.s#b.s#b.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p" +".p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B.C.B.D.B.C.B.C.D.C.D.C.D.C.D.E.C.E.D.E.C.F.E.F.E.F.E.F.F.G.F.G.F.H.F.H.G.I.G.I.G.I.G.J.I.J.K.J.J.L.J.L.J.L.L.M.L.8.L.M.M.N.M.N.O.P.O.P.N.Q#f.Q.Q.Q.Q.R.Q.S.Q.S.S.T.S.T.S.U.S.U.U.U.U.U.U.X.U.X.X#c.X", +".a.b.a.c#g.c.b.c.4.c.c#i.c#i.c.e.c.e.c.e#i.e.e.f.e.e.e.h.e.h.e.h.e.h.i.h.j.h.j.k.j.k.h.k.h.l.k.l.k.l.k.l.k.l.l.m.l.m.l.m.l.m.m.n.m#h.m#e.m#e.m.p.m.p.m.p.m.p#h.p#h.p.r.p.r.p.r.p.r.p.p.s.r.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s#b.s.s.s#b.s#k.s#j.s#k.s#j.s#k.s#j.s#k.s#j.s#k.s#j.s#k.s#j.s#k.s#j.s#k.s#j.s#k.s#j.s#k.s#j.s#k.s#j.s#k.s#j.s#k.s#j.s#k.s#j.s.s.s#b.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.r.p.r" +".p.r.p.q.p.q.p.q.p.q.p.q.p.q.r.q.o.q.q.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.x.A.z.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.B.B.B.B.B.B.B.7.B.C.B.C.B.C.B.C.D.C.D.C.C.C.D.E.C.E.C.E.C.E.E.F.E.F.E#d.F.G.F.H.F.H.F.I.G.I.G.I.G.I.G.J.I.J.I.J.I.J.J.L.J.L.J.8.L.M.L.N.M.N.M.N.O.N.O.P.N.P.N.Q.P.Q.P.Q.Q.R.Q.T.Q.T.R.T.S#..S.U.T.U.U.U.U.U.U.X.W.X.X#c.X.Y", +".c.b.c.b.c.c.c.c#i.c#i.c.f.c.e#i.f.e.f.e.f.e#l.e.h.e.h.e.h.g.h.j.h.h.h.h.k.h.k.h.l.h.l.h.l.k.l.k#m.l.l.l.n.l.n.l.n.m#e.m#e.m#e.m#e.m#e.m.p.m.p#h.p#e.p#h.p.p.p.p.p.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.s.s.s.s.s#b.s.s.s#b.s.s.s#b.s#b.s#b.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p" +".r.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.B.B.C.B.D.B.C.B.C.D.C.D.C.D.C.D.E.C.E.D.E.C.F.E.F.E.F.E.F.F.G.F.G.F.H.F.H.G.I.G.I.G.J.K.J.I.J.K.J.J.L.J.L.L.M.L.M.L.N.L.N.M.N.M.N.O.P.O.P.N.Q.P.Q.Q.Q.Q.R.Q.S.Q.S.S.T.S#..S.U.S.U.U.U.U.X.U.X.W.X.X", +".a.c#g.c.b.c#g.c.c#i.c#i.c.e.c.e.c.e#i.e.e.f.e.e.e.h.e.h.e.h.e.h.i.h.j.h.j.h.j.h.h.k.h.l.h.l.h.l.k.l.k.l.l.m.l.m.l.m.l.m.m.n.m#h.m#e.m#e.m.p.m.p.m.p#h.p#h.p#h.p.r.p.r.p.p.p.r.p.p.s.r.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s#b.s.s.s#j.s#k.s#j.s#k.s#j.s#k.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#k.s#j.s#k.s#j.s#k.s#j.s#k.s#b.s.s.s#b.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.p.p.r.p.r.p.r" +".p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.r.q.o.q.q.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.x.A.z.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.B.B.B.7.B.B.B.7.B.C.B.C.B.C.B.C.D.C.D.C.C.C.D.E.C.E.C.E.C.E.E.F.E.F.E#d.F.G.F.H.F.H.F.I.G.I.G.I.G.I.G.J.I.J.I.L.J.L.J.L.J.L.L.8.L.8.L.N.M.N.M.N.O.P.O.P.N.P.P.Q.P.Q.Q.R.Q.R.Q.T.R.T.S.T.S#..S.U.T.U.U.U.U.X.U##.X##.X#c", +".c.b.c.c.c.c#i.c#i.c.e.c.e#i.f.e.f.e.f.e#l.e.h.e.h.e.h.g.h.j.h.h.h.h.k.h.k.h.l.h.l.h.l.k.l.k#m.l.l.l.n.l.n.l.n.l#e.l#e.m#e.m#e.m#e.m.p#h.p#h.p#e.p#h.p.p.p.p.p.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.s.s.s.s.s.s.s#b.s.s.s#b.s.s.s#b.s#b.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s#b.s.s.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p" +".p.p.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.B.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.D.B.C.B.C.B.C.B.C.D.C.D.C.D.C.D.E.C.E.D.E.C.F.E.F.E.F.E.G.F.H.F.G.F.H.G.I.G.I.G.I.K.J.K.J.I.J.J.L.J.L.J.L.L.M.L.M.L.N.M.N.M.N.M.P.O.P.O.Q.P.Q.P.Q.Q.R.Q.R.Q.T.R.T.S.T.S.U.S.U#n.U.U.W.U.X.W.X.X", +".a.c.b.c#g.c.c.c.c#i.c.e.c.e.c.e#i.e.e.f.e.e.e.h.e.h.e.h.e.h.i.h.j.h.j.h.j.h.h.k.h.l.h.l.h.l.k.l.k.l.l.m.l.m.l.m.l.m.l.n.l#h.m#e.m#e.m.p.m.p.m.p#h.p#h.p#h.p.r.p.r.p.p.p.r.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s#b.s.s.s#j.s#k.s#j.s#k.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#k.s#j.s#k.s#j.s#k.s#b.s.s.s#b.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.p.p.r.p.r" +".p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.o.q.q.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.y.x.x.x.y.x.y.x.A.x.A.x.A.x.A.x.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.A.B.B.B.B.7.B.B.B.C.B.C.B.C.B.C.D.C.D.C.D.C.C.C.D.E.C.E.C.F.C.F.E.F.E.F.E#d.F.H.F.H.F.H.G.I.G.I.G.I.I.J.K.J.I.J.I.L.J.L.J.L.L.M.L.8.L.8.M.N.M.N.M.N.O.P.O.Q.N.Q.P.Q.Q.Q.Q.R.Q.S.Q.T.S.T.S#..S.U.S.U.U.U.U.W.U.X.U##.X##", +".c.c.c.c#i.c#i.c.e.c.e#i.f.e.f.e.f.e#l.e.h.e.h.e.h.e.h#o.h.h.h.h.h.h.k.h.l.h.l.h.l.k.l.k#m.l.l.l.n.l.n.l.n.l#e.l#e.m#e.m#e.m#e.m.p#h.p#h.p#e.p#h.p.p.p.p.p.p.s.p.s.p.s.p.s.p.s.p.s.p.s.s.s.s.s.s#b.s.s.s#b.s.s.s#b.s#b.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s#b.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s" +".p.p.p.p.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.A.B.B.B.B.B.B.B.B.D.B.C.B.C.B.C.D.C.D.C.D.C.D.E.D.E.C.E.C.E.E.F.E.F.E.F.E.G.F.H.F.G.F.I.G.I.G.I.G.J.K.J.K.J.I.L.J.L.J.L.J.M.L.M.L.M.L.N.M.N.M.N.O.P.O.Q.O.Q.P.Q.P.Q.Q.R.Q.S.Q.T.R.T.S.U.S.U.S.U.V.U.U.X.U.X.W", +"#g.c#g.c.c.c.c#i.c#i.c.e.c.e#i.e.e.f.e.e.e#l.e#l.e.h.e.h.e.h.j.h.j.h.j.h.h.k.h.l.h.l.h.l.k.l.k.l.l.l.l.l.l.m.l.m.l.n.l#e.m#e.m#e.m#e.m#e.m.p#h.p#h.p#h.p.r.p.r.p.p.p.r.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s#b.s.s.s#j.s#k.s#j.s#k.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#k.s#j.s#k.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.r.p.p.p.r" +".p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.y.x.x.x.y.x.y.x.A.x.A.x.A.x.A.z.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.B.B.B.B.B.7.B.B.B.C.B.C.B.C.B.C.D.C.D.C.D.C.C.E.C.E.C.E.C.F.E.F.E.F.E.F.E.H.F.H.F.H.F.H.G.I.G.I.G.I.I.J.I.J.I.J.J.L.J.L.J.L.L.M.L.8.L.8.M.N.M.N.M.P.N.P.O.Q.P.Q.P.Q.Q.R.Q.T.Q.T.R.T.S.T.S.U.T.U.S.U.U.U.U.X.U.X.X##", +".c.b#i.c#i.c.e.c.e#i.f#i.f#i.f.e#l.e.h.e.h.e.h.e.h#o.h.h.h.h.h.h.h.h.l.h.l.h.l.k.l.k#m.l.l.l.n.l.n.l.n.l#e.l#e.m#e.m#e.m#e.m.p#h.p#h.p#e.p#h.p.p.p.p.s.p.s.p.s.p.s.p.s.p.s.p.s.s.s.s.s.s.s.s#b.s.s.s#b.s#b.s#b.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s#b.s.s.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s" +".p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.z.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B.B.B.D.B.C.B.C.B.C.D.C.D.C.D.C.D.E.D.E.C.E.C.E.E.F.E.F.E.F.E.G.F.H.F.H.G.I.G.I.G.I.G.J.K.J.K.J.I.L.J.L.J.L.J.M.L.8.L.M.M.N.M.N.O.P.O.P.O.Q#f.Q.P.Q.Q.R.Q.S.Q.S.R.T.S.T.S.U.S.U.U.U.V.U.U.X.U", +"#g.c.b.c.c#i.c#i.c#i.c.e#i.e#i.f.e.e.e#l.e#l.e.h.e.h.e.h#o.h.j.h.j.h.h.k.h.l.h.l.h.l.k.l.k.l.l.l.l.l.l.n.l.m.l.n.l#e.m#e.m#e.m#e.m#e.m.p#h.p#h.p#h.p.r.p.r.p.p.s.r.s.p.s.p.s.p.s.p.s.p.s.p.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s#b.s#k.s#j.s#k.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#k.s#j.s#k.s#j.s.s.s#b.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.r.p.p" +".p.r.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.x.A.z.A.A.A.z.A.A.A.A.B.A.B.A.B.A.B.B.B.B.B.B.7.B.C.B.C.B.C.B.C.B.C.D.C.D.C.D.C.C.E.C.E.C.E.C.F.E.F.E.F.E.F.E.H.F.H.F.H.F.H.G.I.G.I.G.J.I.J.I.J.I.J.J.L.J.L.J.8.L.M.L.8.L.N.M.N.M.N.O.P.N.P.N.Q.P.Q.P.Q.Q.R.Q.T.Q.T.R.T.S#..S.U.T.U.U.U.U.U.U.X.W.X", +"#i.c#i.c#i.c#i#i.f#i.f#i.f.e.f.e#l.e#l.e.h.e.h#o.h.h.h.h.h.h.h.h.l.h.l.h.l.k.l.k#m.l.l.l#m.l.n.l.n.l#e.l#e.m#e.m#e.m#e.m.p#h.p#h.p#e.p#h.p.p.p.p.s.p.s.p.s.p.s.p.s.p.s.p.s.s.s.s#b.s.s.s#b.s.s.s#b.s#b.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s" +".p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.v.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.x.x.A.x.z.x.A.x.A.x.A.z.A.z.A.z.A.z.B.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B.C.B.D.B.C.B.C.D.C.D.C.D.C.D.E.C.E.D.E.C.F.E.F.E.F.E.F.F.G.F.G.F.H.F.H.G.I.G.I.G.I.G.J.I.J.K.J.J.L.J.L.J.M.L.M.L.8.L.N.M.N.M.N.O.P.O.P.N.Q#f.Q.Q.Q.Q.R.Q.S.Q.S.S.T.S#..S.U.S.U.U.U.U.X.U", +".b.c.b#i.c#i.c#i.c.e#i.e#i.f#i.e.e.f.e#l.e.h.e.h.e.h#o.h.j.h.j.h.h.k.j.l.h.l.h.l.k.l.k.l.l.l.l.l.l.n.l.m.l#e.l#e.m#e.m#e.m#e.m#e#h.p#h.p#h.p#h.p.r.p.r.p.p.s.r.s.p.s.p.s.p.s.p.s.p.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s#b.s.s.s#j.s#k.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#k.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.r" +".s.p.p.r.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.x.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.A.B.B.B.B.B.B.7.B.C.B.C.B.C.B.C.D.C.D.C.C.C.D.E.C.E.C.E.C.E.E.F.E.F.E#d.F.G.F.H.F.H.F.I.G.I.G.I.G.I.G.J.I.J.I.J.J.L.J.L.J.L.J.8.L.8.L.N.M.N.M.N.O.P.O.P.N.P.P.Q.P.Q.Q.R.Q.R.Q.T.R.T.S.T.S#..S.U.T.U.U.U.U.X.U##", +"#i.c#i.c#i.c.f#i.f#i.f.e.f.e#l.e#l.e.h.e.h#o.h.h.h.h.h.h.h.h.l.h.l.h.l.h.l.h#m.l.l.l#m.l#m.l.n.l#e.l#e.m#e.m#e.m#e#h#e#e#e#h.p#e.p#e.p.p.p.p.s.p.s.p.s.p.s.p.s.p.s.p.s.s.s.s#b.s.s.s#b.s.s.s#b.s#b.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#j#j#j#j#j#j#j#j#j#j#j#j#j#j#j#j#j#j#j#j#j#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s#b.s.s.s#b.s.s.s.s.s.s.s.s.p.s.p.s" +".p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.x.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B.C.B.D.B.C.B.C.D.C.D.C.D.C.D.E.C.E.D.E.C.F.E.F.E.F.E.F.F.G.F.G.F.H.G.H.G.I.G.I.K.J.K.J.I.J.I.L.J.L.J.L.L.M.L.M.L.N.M.N.M.N.M.P.O.P.O.Q.P.Q.P.Q.Q.R.Q.R.Q.T.R.S.S.T.S.U.S.U#n.U.U.W.U", +".b.c.c#i.c#i.c.e.c.e#i.f#i.e.e.f.e#l.e.h.e.h.e.h#o.h.j.h.j.h.h.h.j#p.h.l.h.l.h.l.h.l.l.l.l.l.l.n.l.m.l#e.l#e.m#e.m#e.m#e.m#e#h.p#h.p#h.p#h.p#e.p#h.p.p.s.r.s.p.s.p.s.p.s.p.s.p.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s#b.s#k.s#j.s#k.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#k.s#j.s.s.s#b.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p" +".s.r.s.p.p.r.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.z.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.B.B.B.B.B.B.B.7.B.C.B.C.B.C.B.C.D.C.D.C.C.C.D.E.C.E.C.E.C.E.E.F.E.F.E#d.F.G.F.H.F.H.F.I.G.I.G.I.H.J.K.J.I.J.I.L.J.L.J.L.L.M.L.8.L.8.L.N.M.N.M.N.O.P.O.Q.N.Q.P.Q.Q.Q.Q.R.Q.S.Q.T.S.T.S#..S.U.S.U.U.U.U.W.U.X", +"#i.c#i.c.f#i.e#i.f.e.f.e#l.e#l.e.h.e.h#o.h#l.h.h.h.h.h.h.l.h.l.h.l.h.l.h#m.l.l.l#m.l#m.l.n.l#e.l#e.l#e.l#e.m#e#h#e#e#e#h.p#e.p#e.p#e.s#e.s.p.s.p.s.p.s.p.s.p.s.s.s.s.s.s#b.s.s.s#b.s#b.s#b.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#j#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#j#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s#b.s.s.s#b.s.s.s.s.s.s.s.s.p.s" +".p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.D.B.C.B.C.B.C.B.C.D.C.D.C.D.C.D.E.C.E.C.E.E.F.E.F.E.F.E.G.F.H.F.G.F.I.G.I.G.I.G.I.K.J.K.J.I.L.J.L.J.L.J.M.L.M.L.M.L.N.M.N.M.N.O.P.O.Q.O.Q.P.Q.P.Q.Q.R.Q.S.Q.T.S.T.S.U.S.U.S.U.V.U.U", +".c#i.c#i.c#i.c.e#i.e#i.e.e.f.e#l.e#l.e#l.e.h#o.h.j.h.j.h.h.h.j#p.h.l.h.l.h.l.h.l.l.l.l.l.l#m.l.m.l#e.l#e.l#e.l#e.m#e.m#e#h.p#h.p#h.p#h.p#e.p#h.s.p.s.p.s.p.s.p.s.p.s.p.s.s.s.s.s.s.s.s.s.s.s.s.s.s#b.s.s.s#j.s#k.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#k.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p" +".s.p.s.r.s.p.p.r.p.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.v.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.x.A.z.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.B.B.B.7.B.B.B.C.B.C.B.C.B.C.B.C.D.C.D.C.C.C.D.E.C.E.C.F.C.F.E.F.E.F.E.H.F.H.F.H.F.H.G.I.G.I.G.I.I.J.K.J.I.J.J.L.J.L.J.L.L.M.L.8.L.8.M.N.M.N.M.P.N.P.O.Q.P.Q.P.Q.Q.R.Q.T.Q.T.R.T.S.T.S.U.T.U.S.U.U.U.U.X", +"#i.c.f#i.e#i.f#i.f#i#l.e#l.e.h.e.h.e.h#l.h#l.h.h.h.h#p.h#p.h.l.h.l.h.l.l.l.l#m.l#m.l.n.l#e.l#e.l#e.l#e.m#e#h#e#e#e#h.p#e.p#e.p#e.s#e.s.p.s.p.s.p.s.p.s.p.s.s.s.s.s.s#b.s.s.s#b.s#b.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s#b.s.s.s.s" +".p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.w.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.B.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.D.B.C.B.C.B.C.D.C.D.C.D.C.D.E.D.E.C.E.C.E.E.F.E.F.E.F.E.G.F.H.F.H.F.I.G.I.G.I.G.J.K.J.K.J.I.L.J.L.J.L.J.M.L.M.L.M.M.N.M.N.O.P.O.P.O.Q#f.Q.Q.Q.Q.R.Q.S.Q.S.S.T.S.T.S.U.S.U.U.U.U", +".c#i.c#i.c#i#i.e#i.e#i.f.e#l.e#l.e#l.e.h.e.h#o.h#o.h.h.h.j#p.h.l.h.l.h.l.h.l.l.l.l.l.l#m.l.l.l#e.l#e.l#e.l#e.m#e.m#e#h#e#h#e#h.p#h.p#e.p#h.s.p.s.p.s.p.s.p.s.p.s.p.s.s.s.s.s.s.s.s.s.s.s.s.s.s#b.s#k.s#j.s#k.s#j.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p" +".s.p.s.p.s.r.s.p.p.r.p.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.u.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.x.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.A.B.B.B.B.7.B.B.B.C.B.C.B.C.B.C.D.C.D.C.D.C.C.E.C.E.C.E.C.F.E.F.E.F.E.F.E.H.F.H.F.H.F.H.G.I.G.I.G.J.I.J.I.J.I.J.J.L.J.L.J.8.L.M.L.8.L.N.M.N.M.N.O.P.N.P.N.Q.P.Q.P.Q.Q.R.Q.T.Q.T.R.T.S#..S.U.T.U.U.U.U.W", +"#r#i#i#i.f#i.f#i.f.e#l.e#l.e#l.e.h#l.h#o.h.h.h.h#p.h#p.h.l.h.l.h.l.l.l.l#m.l#m.l.n.l#e.l#e.l#e.l#e.m#e#h#e#e#e#h.p#e.p#e.p#e.s#e.s.p.s.p.s.p.s.p.s.p.s.s.s.s.s.s#b.s.s.s#b.s#b.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s#b.s.s" +".s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.o.q.q.q.o.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.w.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.z.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B.B.B.D.B.C.B.C.B.C.D.C.D.C.D.C.D.E.D.E.C.F.C.F.E.F.E.F.F.G.F.G.F.H.F.H.G.I.G.I.G.I.G.J.I.J.K.J.J.L.J.L.L.M.L.M.L.8.L.O.M.N.M.N.O.P.O.P.N.Q#f.Q.Q.Q.Q.R.Q.S.Q.S.S.T.S#..S.U.S.U.U", +".c#i.c#i#i.e#i.e#i.f#i.f.e#l.e#l.e.h.e.h#o.h#o.h.h.h.j#p.h.l.h.l.h.l.h.l.l.l.l.l.l.l.l.l.l#e.l#e.l#e.l#e.m#e.m#e#h#e#h#e#h.p#h.p#e.p#h.s.p.s.p.s.p.s.p.s.p.s.p.s.s.s.s.s.s.s.s.s.s.s.s.s.s#j.s#k.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#j#j#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#j#j#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#k.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p" +".s.p.s.p.s.p.s.r.s.p.p.r.p.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.u.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.y.x.x.x.y.x.y.x.A.x.A.x.A.x.A.z.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.B.B.B.B.B.7.B.C.B.C.B.C.B.C.B.C.D.C.D.C.D.C.C.E.C.E.C.E.C.F.E.F.E.F.F.G.F.H.F.H.F.I.G.I.G.I.G.I.G.J.I.J.I.J.J.L.J.L.J.L.J.8.L.8.L.N.M.N.M.N.O.P.O.P.N.Q.P.Q.P.Q.Q.R.Q.R.Q.T.R.T.S.T.S#..S.U#s.U.U.U", +"#i#i.f#i.f#i.f.e#l.e#l.e#l.e.h#l.h#o.h.h.h.h#p.h#p.h.l.h.l.h.l#p.l#p#m.l#m.l#m.l#t.l#e.l#e.l#e.m#e#h#e#e#e#h.p#e.p#e.p#e.s#e.s.p.s.p.s.p.s.p.s.s.s.s.s.s.s.s#b.s.s.s#b.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s#b" +".s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.z.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B.C.B.D.B.C.B.C.D.C.D.C.D.C.D.E.C.E.D.E.C.F.E.F.E.F.E.F.F.G.F.G.F.H.F.I.G.I.G.I.K.J.K.J.I.J.I.L.J.L.J.L.L.M.L.M.L.N.M.N.M.N.O.P.O.P.O.Q.P.Q.P.Q.Q.R.Q.S.Q.T.R.T.S.T.S.U.S.U.V", +".c#i.c.e#i.e#i.f#i.f.e#l.e#l.e.h.e.h#o.h#o.h.h.h.j.h.h#p.h#p.h.l.h.l#p.l#p.l.l.l.l.l.l.n.l#e.l#e.l#e.m#e.m#e#h#e#h#e#h.p#h.p#e.p#h.s.p.s.p.s.p.s.p.s.p.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s#j.s#k.s#j.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#k.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p" +".s.p.s.p.s.p.s.p.s.r.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.o.q.q.q.o.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.x.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.A.B.B.B.B.B.B.7.B.C.B.C.B.C.B.C.D.C.D.C.C.C.D.E.C.E.C.E.C.E.E.F.E.F.E#d.F.G.F.H.F.H.F.I.G.I.G.I.I.J.K.J.I.J.I.L.J.L.J.L.L.M.L.8.L.8.L.N.M.N.M.N.O.P.O.Q.N.Q.P.Q.Q.Q.Q.9.Q.S.Q.T.S.T.S.U.S.U.S.U.U.U", +".f#i.f#i.f.e#l.e#l.e#l.e.h#l.h#o.h#l.h.h.h.h#p.h.l.h.l.h.l#p.l#p#m.l#m.l#m.l#t.l#e.l#e.l#e.l#e#u#e#e#e#h#e#e#e#e.p#e.s#e.s.p.s#e.s.p.s.p.s.s.s.s#b.s.s.s#b.s.s.s#b.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#j#j#k#j#j#j#k#j#j#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#j#j#k#j#j#j#k#j#j#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s#b.s.s" +".s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.x.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.B.B.C.B.D.B.C.B.C.D.C.D.C.D.C.D.E.C.E.D.E.C.F.E.F.E.F.E.G.F.H.F.G.F.I.G.I.G.I.G.I.K.J.K.J.I.L.J.L.J.L.J.M.L.M.L.M.L.N.M.N.O.N.O.P.O.Q.O.Q.P.Q.Q.Q.Q.S.Q.S.R.T.S.T.S.U.S.U#v", +".c#i#i.e#i.f#i.e.e#l.e#l.e#l.e#l#o.h#o.h#l.h.j.h.h#p.h#p.h.l.h.l.h.l#p.l.l.l.l.l.l.n.l#e.l#e.l#e.l#e.l#e#h#e#h#e#h.p#h.p#e.p#h.s#e.s#e.s.p.s.p.s.p.s.s.s.s.s.s.s.s.s.s.s.s#b.s#k.s#j.s#k.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#k.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.s.s.s" +".s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.o.q.q.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.z.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.B.B.B.B.B.B.B.7.B.C.B.C.B.C.B.C.D.C.D.C.C.C.D.E.C.E.C.F.C.F.E.F.E.F.E.H.F.H.F.H.F.H.G.I.G.I.G.I.I.J.K.J.I.J.J.L.J.L.J.L.L.M.L.8.L.N.M.N.M.N.O.P.N.P.N.Q.P.Q.P.Q.Q.R.Q.T.Q.T.R.T.S.T.S.U.T.U#..U", +".f#i.f#i#l#i#l.e#l.e#l.f.h#o.h#l.h#l.h.h#p.h#p.h#p.h.l.h.l#p#m.l.l.l#m.l#t.l#e.l#e.l#e.l#e.l#e#e#e#h#e#e#e#e.p#e.s#e.s#e.s#e.s.p.s.p.s.s.s.s#b.s.s.s#b.s.s.s#b.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#j#j#k#j#j#j#k#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#j#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s#b" +".s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.D.B.C.B.C.B.C.D.C.D.C.D.C.D.E.D.E.C.E.C.E.E.F.E.F.E.F.E.G.F.H.F.H.F.I.G.I.G.I.G.J.K.J.K.J.I.L.J.L.J.L.L.M.L.8.L.O.M.N.M.N.O.P.O.P.O.Q#f.Q.Q.Q.Q.R.Q.S.Q.S.S.T.S.T.S.U.S", +"#i#i#i.f#i.e#i#l#i#l.e#l.e#l.e.h#o.h#o.h#o.h.h#p.h#p.h.l.h.l.h.l#p.l.l.l.l.l.l#m.l#t.l#e.l#e.l#e.l#e#h#e#h#e#h#e#h#e#e.p#h.s#e.s#e.s.p.s.p.s.p.s.s.s.s.s.s.s.s.s.s.s.s#b.s#k.s#j.s#k.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.s" +".s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.x.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.A.B.B.B.B.7.B.B.B.C.B.C.B.C.B.C.D.C.D.C.D.C.C.E.C.E.C.E.C.F.E.F.E.F.E.F.E.H.F.H.F.H.F.H.G.I.G.I.G.J.I.J.I.J.I.J.J.L.J.L.J.8.L.M.L.N.L.N.M.N.O.N.O.P.N.P.N.Q.P.Q.Q.Q.Q.R.Q.T.Q.T.S.T.S#..S.U.T.U", +".f#i.f#i#l.e#l.e#l.e#l#o.h#l.h#l.h.h#p.h#p.h#p.h.l.h.l#p#m.l.l.l#m.l#m.l#e.l#e.l#e.l#e.l#e#e#e#h#e#e#e#e.p#e.s#e.s#e.s#e.s.p.s.p.s.s.s.s#b.s.s.s#b.s#b.s#b.s#j.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#j#j#k#j#j#j#k#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#j#j#k#j#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b" +".s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B.B.B.D.B.C.B.C.B.C.D.C.D.C.D.C.D.E.D.E.C.F.C.F.E.F.E.F.F.G.F.G.F.H.F.H.G.I.G.I.G.I.K.J.I.J.K.J.J.L.J.L.L.M.L.M.L.N.L.N.M.N.M.N.O.P.O.P.N.Q.P.Q.Q.Q.Q.R.Q.S.R.S.S.T.S.U.S", +"#i.e#i.e#i.f#i#l.e#l.e#l.e.h#o.h#o.h#o.h.h#p.h#p.h.l.h.l.h.l#p.l.l.l.l.l.l#m.l#u.l#e.l#e.l#e.l#e#h#e#h#e#h#e#h#e#e.p#h.s#e.s#e.s.p.s.p.s.p.s.s.s.s.s.s.s.s.s.s.s.s#b.s#k.s#j.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s" +".s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.t.v.w.v.v.v.v.v.v.v.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.x.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.B.B.B.B.B.7.B.B.B.C.B.C.B.C.B.C.D.C.D.C.D.C.C.E.C.E.C.E.C.F.E.F.E.F.F.G.F.H.F.H.F.I.G.I.G.I.G.I.G.J.I.J.I.L.J.L.J.L.J.L.L.8.L.8.L.N.M.N.M.N.O.P.O.P.N.Q.P.Q.Q.Q.Q.R.Q.S.Q.T.S.T.S.T.S.U.S.U", +".f#i#l.e#l.e#l.e#l#o.h#l.h#l.h.h.h.h#p.h#p.h.l.h.l#p#m#p.l#p#m.l#m.l#t.l#t.l#e.l#e.l#e#h#e#h#e#e#e#e.p#e.s#e.s#e.s#e.s.p.s.p.s.s.s.s#b.s.s.s#b.s#b.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#j#j#k#j#j#j#k#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#j#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j" +".s#b.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.z.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B.C.B.D.B.C.B.C.D.C.D.C.D.C.D.E.C.E.D.E.C.F.E.F.E.F.E.F.F.G.F.G.F.I.G.I.G.I.G.I.K.J.K.J.I.L.J.L.J.L.J.L.L.M.L.M.L.N.M.N.M.N.O.P.O.Q.O.Q.P.Q.P.Q.Q.R.Q.S.Q.T.S.T.S.U.S", +"#i.e#i.f#i#l.e#l.e#l.e#l#o.h#o.h#o.h.h.h.h#p.h#p.h#p.h.l#p.l#p.l#p.l.l#m.l#u.l#e.l#e.l#e.l#e#h#e#h#e#h#e#h#e#e.p#h.s#e.s#e.s.p.s.p.s.p.s.s.s.s.s.s.s.s.s.s.s.s#b.s#k.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s" +".s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.y.x.x.x.y.x.y.x.A.x.A.x.A.x.A.z.A.A.A.z.A.A.A.A.B.A.B.A.B.A.B.B.B.B.B.B.7.B.C.B.C.B.C.B.C.D.C.D.C.C.C.D.E.C.E.C.E.C.F.E.F.E.F.E#d.F.G.F.H.F.H.F.I.G.I.G.I.I.J.K.J.I.J.I.L.J.L.J.L.L.M.L.8.L.8.M.N.M.N.M.N.N.P.O.Q.N.Q.P.Q.Q.Q.Q.T.Q.S.R.T.S.T.S.U.S.U", +"#l#i#l.e#l.e#l.e.h#l.h#l.h#l.h#l#p.h#p.h#p.h#p#p#m#p.l#p#m.l#m.l#t.l#t.l#e.l#e.l#e#u#e#u#e#e#e#e#e#e#x#e.s#e.s#e.s.p.s.p.s.s.s.s#b.s.s.s#b.s#b.s#j.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#j#j#k#j#j#j#k#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#k#j#j#j#k#j#j#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j" +".s#j.s#b.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.w.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.A.x.z.x.A.x.A.x.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B.C.B.D.B.C.B.C.D.C.D.C.D.C.D.E.C.E.C.E.C.F.E.F.E.F.E.G.F.H.F.G.F.I.G.I.G.I.G.J.K.J.K.J.I.L.J.L.J.L.J.M.L.M.L.M.M.N.M.N.O.N.O.P.O.Q.O.Q.Q.Q.Q.R.Q.S.Q.S.S.T.S.T.S", +"#i.f#i#l#i#l.e#l.e#l.e#l#o.h#o.h#l.h#o#p.h#p.h#p.h.l.h.l#p.l#p.l.l#m.l#u.l#t.l#t.l#e.l#e#u#e#u#e#h#e#h#e#e.p#h.s#e.s#e.s#e.s#e.s.p.s.s.s.s.s.s.s.s.s.s.s.s#j.s#k.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#j#q#k#q#j#q#k#q#j#q#k#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#q#k#q#j#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#k.s#j.s.s.s#b.s" +".s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.t.u.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.x.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.x.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.B.B.B.B.B.B.B.7.B.C.B.C.B.C.B.C.D.C.D.C.C.C.D.E.C.E.C.F.C.F.E.F.E.F.E.H.F.H.F.H.F.H.G.I.G.I.G.I.I.J.I.J.I.J.J.L.J.L.J.L.L.M.L.N.L.N.M.N.O.N.O.P.N.P.N.Q.P.Q.P.Q.Q.R.Q.T.Q.T.R.T.S.T.S.U", +"#l#i#l.e#l.e#l#l#l#o.h#l.h#l#p.h#p.h#p.h#p.h#m#p.l#p#m.l#m.l#t.l#t.l#e.l#e.l#e#u#e#u#e#e#e#e#e#e#x#e.s#e.s#e.s#e.s#e.s.s.s.s#b.s.s.s#b.s#b.s#j.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#j#j#k#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#j#j#k#j#j#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j" +".s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.D.B.C.B.C.B.C.D.C.D.C.D.C.D.E.D.E.C.E.C.F.E.F.E.F.F.F.F.G.F.H.F.H.G.I.G.I.G.I.G.J.K.J.K.J.J.L.J.L.L.L.L.M.L.N.L.O.M.N.M.N.O.P.O.P.N.Q#f.Q.Q.Q.Q.R.Q.S.Q.S.S.T.S", +"#i.f#i#l#i#l.e#l.e#l#o.h#o.h#l.h#o#p.h#p.h#p.h.l.h.l#p.l#p.l.l#m.l.l.l#t.l#t.l#e.l#e.l#e#u#e#h#e#h#e#e#e#h#x#e.s#e.s#e.s#e.s.p.s.s.s.s.s.s.s.s.s.s.s.s#j.s#k.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#j#q#k#q#j#q#k#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#k.s#j.s.s.s" +"#b.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.z.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.B.B.B.7.B.B.B.C.B.C.B.C.B.C.D.C.D.C.D.C.C.E.C.E.C.E.C.F.E.F.E.F.F.F.F.H.F.H.F.I.F.I.G.I.G.I.G.J.I.J.I.L.I.L.J.L.J.L.L.8.L.8.L.N.M.N.M.N.O.P.O.P.N.Q.P.Q.Q.Q.Q.R.Q.R.Q.T.S.T.S.T.S.U", +"#l.e#l.e#l#l#l#o.h#l.h#l#p.h#p.h#p.h#p.h.l#p.l#p#m#p#m#p#m.l#t.l#t.l#t.l#e#u#e#u#e#e#e#h#e#e#e#e.s#e.s#e.s#e.s#e.s.s.s.s#b.s.s.s#b.s#b.s#j.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#j#j#k#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#y#q#z#q#y#q#z#q#y#q#z#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j" +".s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.z.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B.B.B.D.B.C.B.C.B.C.D.C.D.C.D.C.D.E.D.E.C.F.E.F.E.F.E.F.F.G.F.G.F.H.F.I.G.I.G.I.K.J.K.J.I.J.K.L.J.L.J.L.L.M.L.M.L.N.M.N.M.N.O.P.O.Q.O.Q.P.Q.P.Q.Q.R.Q.S.Q.T.R.T.S", +"#i#l#i#l.e#l.e#l#o.h#o.h#l.h#o.h.h#p.h#p.h#p.h#p#p.l#p.l#p#m#p.l.l#t.l#t.l#e.l#e.l#e#u#e#h#e#h#e#e#e#h#x#e.s#e.s#e.s#e.s.p.s.s.s.s.s.s.s.s.s.s.s.s#j.s#k.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#q#j#q#k#q#j#q#k#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#k.s#j.s" +".s.s#b.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.x.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.B.B.B.B.B.7.B.7.B.C.B.C.B.C.B.C.D.C.D.C.D.C.C.E.C.E.C.E.E.F.E.F.E#d.F.G.F.H.F.H.F.I.G.I.G.I.K.I.K.J.I.J.I.L.J.L.J.L.L.M.L.8.L.8.L.N.M.N.M.N.O.P.O.Q.N.Q.P.Q.Q.Q.Q.S.Q.S.Q.T.S.T.S.U", +"#l.e#l.f#l#o.h#l.h#l.h#l#p#l#p.h#p.h.l#p.l#p#m#p#m#p#m.l#t.l#t.l#t.l#e.l#e#u#e#e#e#h#e#e#e#e#x#e#x#e.s#e.s#e.s.s.s.s#b.s.s.s#b.s#b.s#j.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#j#j#k#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#j#j#k#j#k#j.s#j.s#j.s#j" +".s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.z.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B.C.B.D.B.C.B.C.D.C.D.C.D.C.D.E.C.E.D.E.C.F.E.F.E.F.E.F.F.H.F.G.F.I.G.I.G.I.G.I.K.J.K.J.I.L.J.L.J.L.J.L.L.M.L.M.L.N.M.N.O.N.O.P.O.Q.O.Q.Q.Q.Q.Q.Q.S.Q.S.S.T.S", +"#i#l.e#l.e#l.e#l#o#l#o.h#o.h#l#p.h#p.h#p.h#p#p.l#p.l#p#m#p.l.l#t.l#t.l#e.l#e.l#e#u#e#u#e#u#e#e#e#h#x#e.s#e.s#e.s#e.s.p.s.s.s.s.s.s.s.s.s.s.s.s#j.s#k.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#q#j#q#k#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#q#k#q#j#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#k.s" +"#j.s.s.s#b.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.y.x.x.x.y.x.y.x.A.x.A.x.A.x.A.z.A.A.A.z.A.A.A.A.B.A.B.A.B.A.B.B.B.B.B.B.7.B.C.B.C.B.C.B.C.D.C.D.C.C.C.D.E.C.E.C.F.C.F.E.F.E.F.E#d.F.G.F.H.F.H.G.I.G.I.G.I.I.J.K.J.I.J.J.L.J.L.J.L.L.M.L.8.L.N.M.N.M.N.O.P.N.P.N.Q.P.Q.P.Q.Q.R.Q.T.Q.T.R.T.S.T", +"#l.e#l#o#l#l#l#l.h#l#p#l#p.h#p.h#p.h#p#p#m#p#m#p#m.l#t.l#t.l#t.l#e.l#e#u#e#t#e#u#e#e#e#e#x#e#x#e.s#e.s#e.s#x.s#x#b.s.s.s#b.s#b.s#j.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#j#j#k#j#j#j#k#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#z#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#j#j#k#j#k#j.s#j.s#j" +".s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.x.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.A.x.z.x.A.x.A.x.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.B.B.C.B.C.B.C.B.C.D.C.D.C.D.E.D.E.C.E.C.E.E.F.E.F.E.F.F.G.F.H.F.G.F.I.G.I.G.I.G.J.K.J.K.J.I.L.J.L.L.L.L.M.L.N.L.O.M.N.M.N.O.P.O.P.O.Q#f.Q.Q.Q.Q.R.Q.S.Q.S.S", +"#i#l#i#l.e#l#o#l#o.h#o.h#l#p#l#p.h#p.h#p.h.l#p.l#p.l#p.l.l#t.l#t.l#t.l#t.l#e#u#e#u#e#u#e#h#e#h#e#e#x#e.s#e.s#e.s#e.s#x.s.s.s.s.s.s.s.s.s.s#j.s#k.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#j#q#k#q#j#q#k#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s" +"#k.s#j.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.q.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.x.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.B.B.B.7.B.B.B.C.B.C.B.C.B.C.B.C.D.C.D.C.C.E.C.E.C.E.C.F.E.F.E.F.E.F.F.H.F.H.F.I.F.I.G.I.G.I.G.J.I.J.I.L.I.L.J.L.J.L.L.8.L.M.L.N.M.N.M.N.O.N.O.P.N.Q.N.Q.Q.Q.Q.Q.Q.R.Q.T.R.T.S.T", +"#l.e#l#l#l#l.h#l.h#l#p.h#p.h#p.h#p#p#m#p.l#p#m#p#t.l#t.l#t.l#t.l#e#u#e#t#e#u#e#e#e#e#x#e#x#e.s#e.s#e.s#e.s#x.s.s.s.s#b.s#b.s#j.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#j#j#k#j#j#j#k#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#z#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#j#j#k#j#k#j.s#j" +".s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.D.B.C.B.C.B.C.D.C.D.C.D.C.D.E.D.E.C.F.C.F.E.F.E.F.F.G.F.G.F.H.F.I.G.I.G.I.K.I.K.J.I.J.K.L.J.L.J.L.L.M.L.M.L.N.L.N.M.N.O.N.O.P.O.Q.N.Q.P.Q.Q.R.Q.S.Q.T.R", +"#i#l.e#l.e#l#o.h#o.h#l.h#l#p.h#p.h#p.h#p#p#p#p.l#p.l#p#m.l#t.l#t.l#t.l#e.l#e#u#e#u#e#h#e#h#e#e#x#e#x#e.s#e.s#e.s#x.s.s.s.s.s.s.s.s.s.s#j.s#k.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#j#q#k#q#j#q#k#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#z#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#z#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s" +"#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.t.u.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.A.B.B.B.B.7.B.B.B.C.B.C.B.C.B.C.D.C.D.C.D.C.C.E.C.E.C.E.C.F.E.F.E.F.F.F.F.H.F.H.F.I.G.I.G.I.K.I.K.J.I.J.I.L.J.L.J.L.L.L.L.8.L.8.L.N.M.N.M.N.O.P.O.Q.N.Q.P.Q.Q.Q.Q.S.Q.S.Q.T.S.T", +"#l#l#l#o.h#l.h#l#p#l#p.h#p.h#p#p#m#p.l#p#m#p#m#p#t.l#t.l#t.l#t.l#e#t#e#u#e#e#e#e#x#e#x#e.s#e.s#e.s#e.s#x.s.s.s.s#b.s#b.s#b.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#j#j#k#j#j#j#k#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#k#j#j#j#k#j#j#j#k#j#k#j" +".s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B.C.B.D.B.C.B.C.D.C.D.C.D.C.D.E.C.E.D.E.C.F.E.F.E.F.E.F.F.G.F.G.F.I.G.I.G.I.G.I.K.J.K.J.I.L.J.L.J.L.J.L.L.M.L.M.L.N.M.N.O.N.O.P.O.Q.O.Q.Q.Q.Q.Q.Q.S.Q.S#A", +".e#l.e#l#o#l#o#l#l.h#o#p#l#p.h#p.h#p#p#p#p.l#p.l#p#m#p#u.l#t.l#t.l#e.l#e#u#e#u#e#h#e#h#e#e#x#h#x#e.s#e.s#e.s#x.s.s.s.s.s.s.s.s.s.s#j.s#k.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#j#q#k#q#j#q#k#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s" +"#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.x.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.B.B.B.B.B.7.B.C.B.C.B.C.B.C.D.C.D.C.C.C.D.E.C.E.C.F.C.F.E.F.E.F.E#d.F.G.F.H.F.H.F.I.G.I.G.I.I.J.K.J.I.J.I.L.J.L.J.L.L.M.L.8.L.N.M.N.M.N.O.P.N.P.O.Q.P.Q.P.Q.Q.R.Q.T.Q.T.R.T", +"#l#o#l#l.h#l#p#l#p#l#p.h#p.h#B#p#p#p#m#p#m#p#t.l#t.l#t.l#t.l#e#u#e#u#e#t#e#t#e#e#x#e#x#e#x#e.s#e.s#x.s#x.s.s#b.s.s.s#b.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#j#j#k#j#j#j#k#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#k#j#j#j#k#j#j#j#k#j" +"#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.z.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B.C.B.D.B.C.B.C.D.C.D.C.D.C.D.E.C.E.C.F.C.F.E.F.E.F.F.G.F.H.F.G.F.I.G.I.G.I.G.J.K.J.K.J.I.L.J.L.L.L.L.M.L.O.L.O.M.N.M.N.O.P.O.P.O.Q#f.Q.Q.Q.Q.R.Q.S.Q", +"#i#l#o#l#o#l#l.h#o.h#l#p#l#p.h#p.h#p#p.l#p.l#p#m#p#u.l#t.l#t.l#t.l#t#u#e#u#e#u#e#u#e#e#x#h#x#e.s#e.s#e.s#e.s#x.s#x.s.s.s.s.s.s#b.s#k.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#j#k#q#j#q#k#q#j#q#k#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s" +"#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.y.x.x.x.y.x.y.x.A.x.A.x.A.x.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.A.B.B.B.B.B.B.7.B.C.B.C.B.C.B.C.D.C.D.C.C.C.D.E.C.E.C.F.C.F.E.F.E.F.F.H.F.H.F.I.F.I.G.I.G.I.G.I.I.J.I.L.I.L.J.L.J.L.L.8.L.M.L.N.L.N.M.N.O.N.O.P.N.Q.N.Q.Q.Q.Q.Q.Q.R.Q.T#A.T", +"#l#l#l#l.h#l#p#l#p.h#p.h#p#p#p#p#m#p#m#p#m#p#t.l#t.l#t.l#e#u#e#u#e#t#e#t#e#e#x#e#x#e#x#e.s#e.s#x.s#x.s#x#b.s.s.s#b.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#j#j#k#j#j#j#k#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#k#j#j#j#k#j#j#j" +"#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.x.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.D.B.C.B.C.B.C.D.C.D.C.D.C.D.E.D.E.C.F.C.F.E.F.E.F.F.F.F.G.F.H.F.I.G.I.G.I.K.I.K.J.I.L.K.L.J.L.J.L.L.M.L.M.L.N.L.N.M.N.O.N.O.Q.O.Q.N.Q.P.Q.Q.Q.Q.S.Q", +".e#l#o#l#o.h#o.h#l#p#l#p.h#p.h#p#p#p#p#p#p#m#p.l#p#t.l#t.l#t.l#t.l#e#u#e#u#e#u#e#e#e#h#x#e#x#e#x#e.s#e.s#x.s#x.s.s.s.s.s.s#b.s#k.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#j#k#q#j#q#k#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s" +"#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.z.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.B.B.B.7.B.B.B.C.B.C.B.C.B.C.D.C.D.C.D.C.C.E.C.E.C.E.C.F.E.F.E.F.F.F.F.H.F.H.F.I.G.I.G.I.K.I.K.J.I.J.I.L.J.L.J.L.L.L.L.8.L.8.L.N.M.N.M.N.O.P.O.Q.N.Q.P.Q.Q.Q.Q.S.Q.S.Q.T", +"#l#l.h#l#p#l#p#l#p.h#p.h#p#p#m#p#m#p#m#p#t#p#t.l#t.l#t.l#t#u#e#t#e#u#e#e#x#e#x#e#x#e.s#e.s#e.s#x.s#x#b.s.s.s#b.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#j#j#k#j#j#j#k#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#w#q#z#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#k#j#j#j#k#j" +"#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.A.B.B.B.B.B.B.B.B.D.B.C.B.C.B.C.D.C.D.C.D.E.C.E.D.E.C.F.E.F.E.F.E.F.F.G.F.G.F.I.F.I.G.I.G.I.K.J.K.J.I.L.J.L.J.L.J.L.L.M.L.M.L.N.M.N.O.N.O.P.O.Q.O.Q.Q.Q.Q.Q.Q.S.Q", +"#o#l#o#l#o#l#l#p#l#p#l#p.h#p.h#p#p#p#p.l#p.l#p#t#p#t.l#t.l#t.l#e#u#e#u#e#u#e#e#e#h#x#e#x#e#x#e.s#e.s#x.s#x.s.s.s.s.s.s#b.s#k.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#j#k#q#j#q#k#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k" +"#j.s#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.q.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.x.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.B.B.B.B.B.7.B.7.B.C.B.C.B.C.B.C.D.C.D.C.D.E.C.E.C.F.C.F.E.F.E.F.E#d.F.G.F.H.F.H.F.I.G.I.G.I.I.J.K.J.I.J.I.L.J.L.J.L.L.M.L.N.L.N.M.N.O.N.O.P.N.P.O.Q.P.Q.P.Q.Q.R.Q.T.Q.T", +"#l#l#l#l#p#l#p#l#p.h#p#p#B#p#p#p#m#p#t#p#t.l#t.l#t.l#t#u#e#t#e#u#e#t#e#t#x#e#x#e#x#e#x#e.s#x.s#x#b.s.s.s#b.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#j#j#k#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j" +"#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B.C.B.D.B.C.B.C.D.C.D.C.D.C.D.E.C.F.D.F.C.F.E.F.F.F.F.G.F.H.F.G.F.I.G.I.G.I.K.J.K.J.K.J.I.L.J.L.L.L.L.M.L.O.L.O.M.N.M.N.O.P.O.P.O.Q#f.Q.Q.Q.Q.R.Q", +"#o#l#o#l#l.h#l#p#l#p#l#p.h#p#p#p#p.l#p.l#p#m#p#t.l#t.l#t.l#t#u#t#u#e#u#e#t#e#u#x#e#x#e#x#e.s#e.s#x.s#x.s#x.s#x.s.s#b.s#k.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#j#k#q#j#q#k#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j#k" +"#j.s#j.s#j.s#j.s#j.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.z.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.B.B.B.B.B.7.B.C.B.C.B.C.B.C.D.C.D.C.C.C.D.E.C.E.C.F.C.F.E.F.F.F.F.H.F.H.F.I.F.I.G.I.G.I.G.I.I.J.I.L.I.L.J.L.J.L.L.8.L.M.L.N.L.N.M.N.O.N.O.P.N.Q.N.Q.Q.Q.Q.Q.Q.S.Q.T", +"#l#l#p#l#p#l#p.h#p.h#B#p#p#p#m#p#m#p#t#p#t.l#t.l#t#u#e#t#e#u#e#t#e#t#x#e#x#e#x#e#x#e.s#x.s#x#b#x.s#x#b.s#b.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#j#j#k#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#z#q#w#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j" +"#j#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.D.B.C.B.C.B.C.D.C.D.C.D.C.D.E.D.E.C.F.C.F.E.F.E.F.F.F.F.G.F.I.F.I.G.I.G.I.K.I.K.J.K.L.K.L.J.L.J.L.L.M.L.M.L.N.L.N.O.N.O.N.O.Q.O.Q.N.Q.Q.Q.Q.Q.Q", +"#o#l#l.h#o#p#l#p#l#p.h#p.h#p#p#p#p#p#p#m#p#u#p#t.l#t.l#t.l#t#u#e#u#e#u#e#u#e#e#x#e#x#e#x#e#x#e.s#x.s#x.s#x.s.s#b.s#k.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#j#k#q#j#q#k#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k" +"#j#k#j.s#j.s#j.s#j.s#j.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.x.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.B.B.B.7.B.B.B.C.B.C.B.C.B.C.D.C.D.C.D.C.C.E.C.E.C.F.C.F.E.F.E.F.F.F.F.H.F.H.F.I.G.I.G.I.K.I.K.J.I.J.I.L.J.L.J.L.L.L.L.8.L.8.L.N.M.N.M.N.O.P.O.Q.N.Q.P.Q.Q.Q.Q.S.Q.S", +".h#l#p#l#p#l#p#l#p#p#p#p#m#p#m#p#t#p#t#p#t.l#t.l#t#u#t#u#e#t#e#t#e#e#x#e#x#e#x#e.s#e.s#x#b#x.s#x#b.s#b.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#j#j#k#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j" +"#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.D.B.C.B.C.B.C.D.C.D.C.D.C.D.E.D.E.C.F.E.F.E.F.E.F.F.G.F.G.F.I.F.I.G.I.G.I.K.J.K.J.I.L.I.L.J.L.L.L.L.M.L.O.L.N.M.N.O.N.O.P.O.Q.O.Q.Q.Q.Q.Q.Q", +"#o#l#o#l#l#p#l#p#l#p#l#p#p#p#p#p#p#m#p.l#p#t#p#t.l#t.l#t#u#e#u#e#u#e#u#e#e#x#h#x#e#x#e#x#e.s#x.s#x.s#x.s.s.s.s.s.s#j.s#k.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#q#j#q#k#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k" +"#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.x.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.A.B.B.B.B.7.B.B.B.C.B.C.B.C.B.C.D.C.D.C.D.C.C.E.C.F.C.F.E.F.E.F.E#d.F.G.F.H.F.I.F.I.G.I.G.I.I.J.K.J.I.L.I.L.J.L.J.L.L.M.L.N.L.N.M.N.O.N.O.P.N.P.O.Q.N.Q.Q.Q.Q.R.Q.T", +"#C#l#p#l#p#l#p#p#p#p#B#p#B#p#m#p#t#p#t.l#t.l#t#u#t#u#e#t#e#t#e#t#x#t#x#e#x#e#x#e#x#x.s#x.s#x#b.s#b.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#j#j#k#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j" +"#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B.C.B.D.B.C.B.C.D.C.D.C.D.C.D.E.C.F.D.F.C.F.E.F.F.F.F.G.F.H.F.G.F.I.G.I.K.I.K.J.K.J.K.L.I.L.J.L.L.L.L.M.L.O.L.O.M.N.M.N.O.P.O.Q.O.Q#f.Q.Q.Q.Q", +"#o#l#l#p#l#p#l#p#l#p.h#p#p#p#p#m#p.l#p#t#p#t.l#t.l#t.l#t#u#t#u#e#u#e#t#x#u#x#e#x#e#x#e.s#e.s#x.s#x.s#x.s#x.s.s#j.s#k.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#j#j#q#k#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#j#k#j#k#j#k#j#k" +"#j#k#j#k#j#k#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.q.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.u.t.u.t.u.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.z.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.B.B.B.B.B.7.B.C.B.C.B.C.B.C.D.C.D.C.C.C.D.E.C.E.C.F.C.F.E.F.F.F.F.H.F.H.F.I.F.I.G.I.G.I.K.I.I.J.I.L.I.L.J.L.L.L.L.8.L.M.L.N.L.N.M.N.O.N.O.Q.N.Q.N.Q.Q.Q.Q.Q.Q.S", +"#p#l#p#l#p.h#p#p#B#p#p#p#m#p#t#p#t#p#t#p#t.l#t#u#t#t#t#u#e#t#x#t#x#e#x#e#x#e#x#x.s#x.s#x#b#x.s#x#b.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#j#j#k#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q" +"#j#j#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.D.B.C.B.C.B.C.D.C.D.C.D.C.D.E.D.E.C.F.C.F.E.F.E.F.F.F.F.G.F.I.F.I.G.I.G.I.K.I.K.J.K.L.K.L.J.L.J.L.L.M.L.M.L.N.L.N.O.N.O.N.O.Q.O.Q.N.Q.Q.Q.Q", +"#l#l#o#p#l#p#l#p.h#p#p#p#p#p#p#p#p#t#p#t#p#t#p#t.l#t#u#t#u#e#u#e#t#e#u#x#e#x#e#x#e#x#e#x#x.s#x.s#x.s#x.s.s#j.s#k.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#j#j#q#k#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#j#k#j#k#j#k" +"#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.x.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.B.B.B.7.B.B.B.C.B.C.B.C.B.C.D.C.D.C.D.C.C.E.C.F.C.F.C.F.E.F.E.F.F.F.F.H.F.H.F.I.G.I.G.I.K.I.K.J.I.J.I.L.J.L.J.L.L.L.L.8.L.N.L.N.M.N.O.N.O.P.O.Q.N.Q.P.Q.Q.Q.Q.S", +"#p#l#p#l#p#l#B#p#p#p#B#p#m#p#t#p#t#p#t.l#t#u#t#t#t#u#e#t#e#t#x#e#x#e#x#e#x#e#x#x#x#x#b#x.s#x#b.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#j#j#k#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q" +"#j#j#j#j#j#j#k#j#j#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.D.B.C.B.C.B.C.D.C.D.C.D.C.D.E.D.E.C.F.E.F.E.F.F.F.F.G.F.G.F.I.F.I.G.I.G.I.K.J.K.J.I.L.J.L.L.L.L.L.L.M.L.O.L.N.M.N.O.N.O.P.O.Q.O.Q.Q.Q.Q", +"#o#C#l#p#l#p#l#p#l#p#p#p#p#p#p#m#p#u#p#t#p#t.l#t.l#t#u#e#u#e#u#e#u#x#t#x#t#x#e#x#e#x#x.s#x.s#x.s#x.s.s#b.s#k.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#j#j#q#k#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#j#k#j#k" +"#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.x.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.A.B.B.B.B.7.B.B.B.C.B.C.B.C.B.C.D.C.D.C.D.C.C.E.C.F.C.F.E.F.F.F.F#d.F.G.F.I.F.I.F.I.G.I.G.I.I.J.K.L.I.L.I.L.J.L.L.L.L.M.L.N.L.N.M.N.O.N.O.P.N.Q.O.Q.Q.Q.Q.Q.Q.R", +"#p#l#p#l#p#p#p#p#B#p#B#p#t#p#t#p#t.l#t.l#t#t#t#u#e#t#e#t#x#t#x#t#x#e#x#e#x#x#x#x#b#x.s#x#b#x#j#x#j.s#j.s#j.s#j.s#j#k#j#k#j#j#j#k#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#D#z#D#y#D#z#D#y#D#z#D#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q" +"#j#q#j#j#k#j#j#j#k#j#j#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.q.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.w.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.z.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B.C.B.D.B.C.B.C.D.C.D.C.D.C.D.E.C.F.D.F.C.F.E.F.F.F.F.G.F.H.F.K.F.I.G.I.K.I.K.J.K.L.K.L.I.L.J.L.L.L.L.M.L.O.L.O.M.N.O.N.O.P.O.Q.O.Q#f.Q.Q", +"#l#p#l#p#l#p#l#p#p#p#p#p#p#m#p.l#p#t#p#t.l#t.l#t#u#t#u#t#u#e#u#e#t#x#t#x#e#x#e#x#e#x#x#x#x.s#x.s#x#b#x#k.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#j#q#k#q#j#q#k#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#j#k" +"#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.x.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.B.B.B.B.B.7.B.C.B.C.B.C.B.C.D.C.D.C.C.C.D.E.C.E.C.F.C.F.E.F.F.F.F.H.F.H.F.I.F.I.G.I.K.I.K.I.I.J.I.L.I.L.J.L.L.L.L.8.L.M.L.N.L.N.M.N.O.N.O.Q.N.Q.N.Q.Q.Q.Q#A", +"#p#l#p.h#p#p#B#p#B#p#m#p#t#p#t#p#t#p#t#u#t#u#t#t#t#t#e#t#x#t#x#e#x#e#x#e#x#x#b#x.s#x#b#x#b#x#j.s#j.s#j.s#j.s#j#k#j#k#j#j#j#k#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q" +"#j#q#j#q#j#j#k#j#j#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.D.B.C.B.C.B.C.D.C.D.C.D.C.D.E.D.E.C.F.C.F.E.F.E.F.F.F.F.G.F.I.F.I.G.I.G.I.K.I.K.J.I.L.K.L.J.L.J.L.L.M.L.M.L.N.L.N.O.N.O.N.O.Q.O.Q#E.Q.Q", +"#l#C#l#p#l#p.h#p#p#p#p#p#p#p#p#t#p#t#p#t#p#t.l#t#u#t#u#e#u#e#t#x#u#x#e#x#e#x#e#x#x#x#x.s#x.s#x.s#x#k.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#q#k#q#j#q#k#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#k#q#j#q#k#j#k" +"#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.x.y.x.x.x.y.x.y.x.A.x.A.x.A.x.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.B.B.B.7.B.B.B.C.B.C.B.C.B.C.D.C.D.C.D.C.C.E.C.F.C.F.C.F.E.F.E.F.F.F.F.H.F.H.F.I.G.I.G.I.K.I.K.J.I.J.I.L.J.L.J.L.L.L.L.N.L.N.L.N.O.N.O.N.O.P.O.Q.N.Q.Q.Q.Q.Q", +"#p#l#p#C#B#p#p#p#B#p#F#p#t#p#t#p#t.l#t#u#t#t#t#u#e#t#x#t#x#t#x#t#x#e#x#x#x#x#x#x#b#x#b#x#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#j#j#k#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q" +"#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.D.B.C.B.C.B.C.D.C.D.C.D.C.D.F.D.F.C.F.E.F.F.F.F.F.F.G.F.G.F.I.F.I.K.I.K.I.K.J.K.J.I.L.J.L.L.L.L.L.L.O.L.O.L.N.M.N.O.N.O.Q.O.Q.O.Q.Q", +"#l#p#l#p#l#p#C#p#p#p#p#p#p#m#p#t#p#t#p#t.l#t#u#t#u#t#u#t#t#e#u#x#t#x#t#x#e#x#e#x#x.s#x.s#x.s#x.s.s#j.s#k.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#q#j#q#k#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k" +"#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.w.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.x.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.A.B.B.B.B.7.B.B.B.C.B.C.B.C.B.C.D.C.D.C.D.C.C.E.C.F.C.F.E.F.F.F.F#d.F.G.F.I.F.I.F.I.G.I.K.I.I.J.K.L.I.L.I.L.L.L.L.L.L.M.L.N.L.N.M.N.O.N.O.Q.N.Q.O.Q.Q.Q.Q.Q", +"#p#l#B#p#p#p#B#p#B#p#t#p#t#p#t.l#t#u#t#t#t#u#e#t#e#t#x#t#x#t#x#e#x#e#x#x#x#x#b#x.s#x#b#x#j#x#j.s#j.s#j.s#j#k#j#k#j#k#j#j#j#k#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q" +"#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.w.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.z.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B.C.B.D.B.C.B.C.D.C.D.C.D.C.D.E.C.F.D.F.C.F.E.F.F.F.F.G.F.I.F.K.F.I.G.I.K.I.K.J.K.L.K.L.I.L.J.L.L.L.L.M.L.N.L.O.O.N.O.N.O.Q.O.Q.N.Q#G", +"#l#p#l#p#l#p#p#p#p#p#p#B#p#H#p#t#p#t#p#t.l#t#u#t#u#t#u#e#u#x#t#x#t#x#e#x#e#x#x#x#x#x#x.s#x.s#x#j#x#k.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#q#j#q#k#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#k#q#j" +"#q#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.z.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.B.B.B.B.B.7.B.C.B.C.B.C.B.C.D.C.D.C.C.C.D.F.C.F.C.F.C.F.E.F.F.F.F.H.F.H.F.I.F.I.G.I.K.I.K.J.I.J.I.L.I.L.J.L.L.L.L.8.L.O.L.N.M.N.O.N.O.N.O.Q.N.Q.N.Q.Q.Q", +"#p#C#p#C#B#p#B#p#m#p#t#p#t#p#t#p#t#u#t#u#t#t#t#t#x#t#x#t#x#e#x#e#x#x#x#x#b#x.s#x#b#x#j#x#j.s#j.s#j.s#j.s#j#k#j#k#j#j#j#k#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#w#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#y#y#y#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#y#y#y#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#j#q#j#q" +"#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.D.B.C.B.C.B.C.D.C.D.C.D.C.D.E.D.F.C.F.C.F.F.F.F.F.F.F.F.G.F.I.F.I.G.I.G.I.K.I.K.J.I.L.K.L.L.L.L.L.L.M.L.O.L.N.M.N.O.N.O.P.O.Q.O.Q.Q", +"#l#p#l#p#l#p#C#p#p#B#p#p#p#t#p#t#p#t#p#t#u#t#u#t#u#e#u#e#t#x#t#x#e#x#e#x#e#x#x#x#x.s#x.s#x#b#x#k.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#q#j#q#k#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#z#D#z#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#k" +"#q#j#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.q.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.x.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.B.B.B.7.B.B.B.C.B.C.B.C.B.C.D.C.D.C.D.C.C.E.C.F.C.F.C.F.F.F.F.F.F.F.F.I.F.I.F.I.G.I.G.I.K.I.K.L.I.L.I.L.J.L.L.L.L.M.L.N.L.N.L.N.O.N.O.N.O.Q.O.Q.N.Q.Q.Q", +"#p#C#B#p#p#p#B#p#F#p#t#p#t#p#t#u#t#u#t#t#t#t#e#t#x#t#x#t#x#t#x#e#x#x#I#x#x#x#b#x#b#x#j.s#j.s#j.s#j.s#j#k#j#k#j#j#j#k#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#y#y#y#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#y#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#j#q#j#q" +"#j#q#j#q#j#q#j#q#j#j#k#j#j#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.B.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.D.B.C.B.C.B.C.D.C.D.C.D.E.C.F.D.F.C.F.E.F.F.F.F.F.F.K.F.K.F.I.G.I.K.I.K.I.K.L.K.L.I.L.J.L.L.L.L.M.L.O.L.O.L.N.O.N.O#E.O.Q.O.Q.O", +"#l#p#l#p#C#p#p#p#p#p#p#t#p#t#p#t#p#t.l#t#u#t#u#t#u#t#t#x#u#x#t#x#t#x#e#x#x#x#x.s#x.s#x.s#x#k#x#j#x#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#j#q#k#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#z#D#z#D#z#D#z#D#z#D#z#D#z#D#z#D#z#D#z#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#k#q#j" +"#q#k#q#j#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.w.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.x.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.B.B.B.B.B.7.B.7.B.C.B.C.B.C.D.C.D.C.C.C.D.F.C.F.C.F.C.F.E.F.F.F.F#d.F.G.F.I.F.I.G.I.K.I.K.I.I.J.K.L.I.L.J.L.L.L.L.L.L.M.L.N.L.N.M.N.O.N.O.Q.N.Q.N.Q.Q.Q", +"#B#p#p#p#B#p#B#p#t#p#t#p#t#p#t#H#t#t#t#u#t#t#t#t#x#t#x#t#x#e#x#x#x#x#x#x#b#x#b#x#j#x#j#x#j.s#j.s#j.s#j#k#j#j#j#k#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#y#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#y#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#j#q" +"#j#q#j#q#j#q#j#q#j#q#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.w.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B.C.B.D.B.C.B.C.D.C.D.C.D.C.D.E.C.F.C.F.E.F.E.F.F.F.F.G.F.I.F.K.F.I.G.I.K.I.K.J.K.L.K.L.J.L.L.L.L.L.L.O.L.N.L.O.O.N.O.N.O.Q.O.Q#E", +"#l#p#l#p#p#p#p#p#p#B#p#F#p#t#p#t#p#t#H#t#u#t#u#t#t#e#u#x#t#x#t#x#e#x#e#x#x#x#x#x#x.s#x.s#x#j#x#k.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#j#q#k#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#D#z#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#k" +"#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.z.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.B.B.B.B.B.7.B.C.B.C.B.C.B.C.D.C.D.C.C.C.D.F.C.F.C.F.E.F.F.F.F.F.F.I.F.I.F.I.F.I.G.I.K.I.K.J.I.L.I.L.I.L.J.L.L.L.L.N.L.N.L.N.O.N.O.N.O.P.O.Q.N.Q.Q.Q", +"#p#C#B#p#B#p#F#p#F#p#t#p#t#p#t#t#t#u#t#t#t#t#x#t#x#t#x#t#x#t#x#x#x#x#I#x#x#x#b#x#j#x#j.s#j.s#j.s#j#k#j#k#j#k#j#j#j#k#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#y#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#y#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w#q#q#q#q#q#q#q#q#q#q#j#q" +"#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.D.B.C.B.C.B.C.D.C.D.C.D.C.D.F.D.F.C.F.C.F.F.F.F.F.F.G.F.K.F.I.F.I.K.I.K.I.K.J.K.L.I.L.K.L.L.L.L.L.L.O.L.O.L.N.M.N.O.N.O.Q.O.Q.O", +"#l#p#C#p#C#p#p#B#p#p#p#t#p#t#p#t#p#t#u#t#u#t#u#t#u#t#t#x#t#x#t#x#t#x#x#x#x#x#x.s#x.s#x#j#x#k.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#q#j#q#k#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j" +"#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.q.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.x.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.B.B.B.7.B.B.B.C.B.C.B.C.B.C.D.C.D.C.D.C.C.E.C.F.C.F.C.F.F.F.F#d.F.G.F.I.F.I.F.I.K.I.K.I.K.J.K.L.I.L.I.L.L.L.L.L.L.M.L.N.L.N.M.N.O.N.O#E.N.Q.O.Q#E.Q", +"#B#p#p#p#B#p#F#p#t#p#t#p#t#H#t#u#t#t#t#t#e#t#x#t#x#t#x#t#x#x#x#x#I#x#x#x#b#x#j#x#j#x#j#x#j.s#j.s#j#k#j#k#j#j#j#k#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#y#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q" +"#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B.C.B.D.B.C.B.C.D.C.D.C.D.C.D.E.C.F.D.F.C.F.E.F.F.F.F.F.F.I.F.K.F.I.G.I.K.I.K.I.K.L.K.L.I.L.J.L.L.L.L.M.L.O.L.O.O.N.O.N.O.Q.O.Q.O", +"#l#p#C#p#p#p#p#p#p#F#p#F#p#t#p#t#p#t#H#t#u#t#u#t#t#x#u#x#t#x#t#x#e#x#x#x#x#x#x#x#x#b#x#k#x#j#x#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#q#j#q#k#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j" +"#q#j#q#k#q#j#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.w.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.x.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.B.B.B.B.B.7.B.C.B.C.B.C.B.C.D.C.D.C.C.C.D.F.C.F.C.F.C.F.E.F.F.F.F#d.F.I.F.I.F.I.G.I.K.I.K.I.I.J.I.L.I.L.J.L.L.L.L.N.L.O.L.N#J.N.O.N.O.N.O.Q.N.Q.N.Q", +"#p#C#B#p#B#p#F#p#t#p#t#p#t#H#t#t#t#u#t#t#K#t#x#t#x#t#x#e#x#x#x#x#x#x#b#x#b#x#j#x#j#x#j.s#j.s#j#k#j#k#j#j#j#k#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#w#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#y#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w#q#q#q#w#q#q#q#q#q#q#q#q" +"#j#q#j#q#j#q#j#q#j#q#j#q#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.w.t.v.t.v.t.v.t.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.z.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B.C.B.D.B.C.B.C.D.C.D.C.D.F.D.F.C.F.C.F.F.F.F.F.F.F.F.G.F.I.F.I.K.I.K.I.K.I.K.J.K.L.K.L.L.L.L.L.L.O.L.O.L.N.L.N.O.N.O.N.O.Q.O", +"#l#p#C#p#C#p#p#B#p#F#p#t#p#t#p#t#H#t#u#t#u#t#t#e#u#x#t#x#t#x#t#x#e#x#x#x#x#x#x.s#x.s#x#j#x#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#j#q#k#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j" +"#q#k#q#j#q#k#q#j#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.B.B.B.B.B.B.B.7.B.C.B.C.B.C.D.C.D.C.D.C.C.E.C.F.C.F.C.F.F.F.F.F.F.F.F.I.F.I.F.I.K.I.K.I.K.I.K.L.I.L.I.L.L.L.L.L.L.L.L.N.L.N.L.N.O.N.O#E.O.Q.O.Q#E.Q", +"#B#p#B#p#F#p#F#p#t#p#t#p#t#t#t#u#t#t#t#t#x#t#x#t#x#t#x#t#x#x#x#x#I#x#x#x#b#x#j#x#j#x#j#x#j.s#j#k#j#k#j#k#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#y#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w#q#q#q#w#q#q#q#q#q#q" +"#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.A.x.z.x.A.x.A.x.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.D.B.C.B.C.B.C.D.C.D.C.D.C.D.F.D.F.C.F.E.F.F.F.F.F.F.K.F.K.F.I.F.I.K.I.K.I.K.L.K.L.I.L.J.L.L.L.L.L.L.O.L.O#J.N.O.N.O#E.O.Q.O", +"#C#p#C#p#p#B#p#p#p#F#p#t#p#t#p#t#u#t#u#t#u#t#u#K#t#x#t#x#t#x#t#x#x#x#x#x#x#x#x#x#x#j#x#k#x#j#x#j.s#j#k#j#k#j#k#j#k#j#k#j#j#q#k#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j" +"#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.z.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.B.B.B.7.B.B.B.C.B.C.B.C.B.C.D.C.D.C.D#L.C.F.C.F.C.F.E.F.F.F.F#d.F.G.F.I.F.I.F.I.K.I.K.I.I.J.K.L.I.L.I.L.L.L.L.L.L.O.L.N.L.N.O.N.O.N.O.Q.N.Q.N.Q", +"#p#p#B#p#F#p#t#p#t#p#t#H#t#H#t#t#t#t#t#t#K#t#x#t#x#t#x#x#x#x#I#x#x#x#b#x#j#x#j#x#j#x#j.s#j#k#j#k#j#k#j#j#j#k#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#y#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#y#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w#q#q#q#w#q#q#q#q" +"#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B.C.B.D.B.C.B.C.D.C.D.C.D#L.D.F.C.F.D.F#L.F.F.F.F.F.F.G.F.I.F.K.F.I.K.I.K.I.K.J.K.L.K.L#M.L.L.L.L#J.L.O.L.N.L.O.O.N.O.N.O.Q.O", +"#C#p#C#p#p#p#p#F#p#F#p#t#p#t#p#t#H#t#u#t#u#t#t#x#u#x#t#x#t#x#e#x#x#x#x#x#x#x#x#b#x#k#x#j#x#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#q#j#q#k#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j" +"#q#j#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.x.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.B.B.B.B.B.7.B.C.B.C.B.C.B.C.D.C.D.C.C.C.D.F.C.F.C.F#L.F.F.F.F.F.F.I.F.I.F.I.F.I.K.I.K.I.K.L.I.L.I.L.I.L.L.L.L.L.L.N.L.O.L.N.O.N.O.N.O.Q.O.Q.N.Q", +"#B#p#B#p#F#p#F#p#t#p#t#H#t#t#t#u#t#t#K#t#x#t#x#t#x#t#x#K#x#x#x#x#I#x#I#x#j#x#j#x#j.s#j.s#j#k#j#k#j#j#j#k#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#y#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#y#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w#q#q#q#q#q#q" +"#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#j#k#j#j#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.q.q.o.q.q.q.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.D.B.C.B.C.B.C.D.C.D.C.D.C.D.F.D.F.C.F.C.F.F.F.F.F.F.K.F.K.F.I.F.I.K.I.K.I.K.L.K.L.I.L.K.L.L.L.L.L.L.O.L.O.L.N.O.N.O#E.O.Q.O", +"#C#p#C#p#p#B#p#F#p#t#p#t#p#t#H#t#u#t#u#t#t#t#u#K#t#x#t#x#t#x#K#x#x#x#x#x#x.s#x#k#x#j#x#j#x#j#x#j.s#j#k#j#k#j#k#j#k#j#k#q#j#q#k#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j" +"#q#j#q#j#q#j#q#k#q#j#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.u.t.u.t.u.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.B.B.B.7.B.B.B.C.B.C.B.C.B.C.D.C.D.C.D#L.C.F.C.F.C.F.C.F.F.F.F.F.F.G.F.I.F.I.F.I.K.I.K.I.K.I.K.L.I.L.I.L.L.L.L.L.L.O.L.N.L.N.L.N.O.N.O#E.O.Q.O.Q", +"#B#p#F#p#F#p#t#p#t#p#t#F#t#H#t#t#t#t#K#t#K#t#x#t#x#t#x#x#x#x#I#x#x#x#j#x#j#x#j#x#j#x#j.s#j#k#j#j#j#k#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#y#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w#q#q#q#w#q#q#q#q" +"#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.x.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.B.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.D.B.C.B.C.D.C.D.C.D#L.D.F.C.F.D.F#L.F.F.F.F.F.F.F.F.K.F.K.F.I.G.I.K.I.K.I.K.L.K.L.I.L.L.L.L.L.L.O.L.O.L.O.O.N.O.N.O#E.O", +"#C#p#p#B#p#p#p#F#p#F#p#t#p#t#H#t#H#t#u#t#u#K#t#x#t#x#t#x#t#x#x#x#x#x#x#x#x#x#x#j#x#k#x#j#x#j.s#j#k#j#k#j#k#j#k#j#k#j#j#q#k#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j" +"#q#j#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.w.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.x.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.B.B.B.B.B.7.B.C.B.C.B.C.B.C.D.C.D.C.C.C.D.F.C.F.C.F#L.F.F.F.F.F.F#N.F.I.F.I.F.I.G.I.K.I.K#M.I.L.I.L.I.L.L.L.L.L.L#J.L.O.L.N#J.N.O.N.O.N.O.Q.N.Q", +"#B#p#F#p#F#p#F#p#t#H#t#H#t#t#t#t#t#t#K#t#x#t#x#t#x#K#x#K#I#x#x#x#I#x#O#x#j#x#j#x#j.s#j#k#j#k#j#k#j#j#j#k#j#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w#q#q#q#w#q#q" +"#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.w.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B.C.B.D.B.C.B.C.D.C.D.C.D.F.D.F.C.F.C.F.F.F.F.F.F#P.F.K.F.I.F.I.K.I.K.I.K#M.K.L.K.L.K.L.L.L.L.L.L#J.L.O.L.N#J.N.O.N.O#E.O", +"#C#p#C#p#p#F#p#F#p#t#p#t#p#t#H#t#u#t#u#t#t#K#u#K#t#x#t#x#t#x#K#x#x#x#x#x#x#b#x#k#x#j#x#j#x#j#x#j#k#j#k#j#k#j#k#j#k#j#k#q#j#q#k#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#z#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j" +"#q#j#q#j#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.z.A.z.A.z.A.A.B.A.B.A.B.A.B.A.B.B.B.B.B.B.7.B.C.B.C.B.C.B.C.D.C.D#L.C.F.C.F.C.F.C.F.F.F.F.F.F.F.F.I.F.I.F.I.K.I.K.I.K.I.K.L.I.L.I.L.L.L.L.L.L.L.L.N.L.N.L.N.O.N.O#E.O.Q.O.Q", +"#B#p#F#p#F#p#t#p#t#H#t#F#t#u#t#t#K#t#K#t#x#t#x#t#x#K#x#x#x#x#I#x#I#x#j#x#j#x#j#x#j#x#j#k#j#k#j#j#j#k#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w#q#q#q#q" +"#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#j#k#j#j#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.A.x.z.x.A.x.A.x.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.D.B.C.B.C.B.C.D.C.D#L.D#L.D.F.D.F#L.F.F.F.F.F.F.F.F.K.F.K.F.I.F.I.K.I.K.I.K.L.K.L.I.L.L.L.L.L.L#J.L.O.L.O#J.N.O.N.O#E.O", +"#C#p#p#B#p#H#p#F#p#F#p#t#H#t#H#t#H#t#t#t#u#K#t#x#t#x#t#x#K#x#x#x#x#x#x#x#x#Q#x#j#x#j#x#j#x#j.s#j#k#j#k#j#k#j#k#j#k#q#j#q#k#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j" +"#q#j#q#j#q#j#q#j#q#k#q#j#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.z.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.B.B.B.7.B.B.B.C.B.C.B.C.B.C.D.C.D.C.D#L.C.F.C.F#L.F.F.F.F.F.F#N.F.K.F.I.F.I.F.I.K.I.K#M.I.L.K.L.I.L#M.L.L.L.L#J.L.O.L.N#J.N.O.N.O.N.O.Q.N.Q", +"#B#p#F#p#F#p#F#p#t#F#t#H#t#t#t#t#K#t#K#t#x#t#x#t#x#K#x#x#I#x#x#x#I#x#O#x#j#x#j#x#j.s#j#k#j#j#j#k#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w#q#q#q#w#q#q" +"#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B.C.B.D.B.C.B.C.D.C.D.C.D#L.D.F.C.F.D.F#L.F.F.F.F#P.F.K.F.I.F.K#P.I.K.I.K#M.K.L.K.L.K.L#M.L.L.L.L#J.L.O.L.N.L.O.O.N.O#E.O", +"#C#B#C#p#p#F#p#F#p#t#p#t#H#t#H#t#u#t#u#t#t#K#t#K#t#x#t#x#K#x#K#x#x#x#x#x#x#j#x#k#x#j#x#j.s#j#k#j#k#j#k#j#k#j#k#j#j#q#k#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#y#q#z#q#y#q#z#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q" +"#q#j#q#j#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.x.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.B.B.B.B.B.7.B.C.B.C.B.C.B.C.D.C.D#L.C#L.D.F.C.F.C.F#L.F.F.F.F.F.F.I.F.I.F.I#P.I.K.I.K.I.K.L.I.L.I.L#M.L.L.L.L.L.L.N.L.O.L.N.O.N.O#E.O.Q.O.Q", +"#F#p#F#p#F#p#t#p#t#H#t#t#t#t#t#t#K#t#x#t#x#t#x#K#x#K#I#x#x#x#I#x#O#x#j#x#j#x#j#x#j#Q#j#k#j#k#j#j#j#k#j#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#y#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#y#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#z#q#w#q#q#q#w" +"#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.D.B.C.B.C.B.C.D.C.D#L.D#L.D.F.D.F#L.F#L.F.F.F.F.F.F.K.F.K.F.I.F.I.K.I.K.I.K.L.K.L.I.L#R.L.L.L.L.L.L.O.L.O#J.N.O.N.O#E.O", +"#C#p#p#B#p#F#p#F#p#F#p#t#H#t#H#t#u#t#t#K#u#K#t#x#t#x#t#x#K#x#x#x#x#x#x#I#x#Q#x#j#x#j#x#j#x#j#k#j#k#j#k#j#k#j#k#q#k#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q" +"#q#j#q#j#q#j#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#k.s#b.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.B.B.B.7.B.B.B.C.B.C.B.C.B.C.D.C.D.C.D#L.C.F.C.F#L.F#L.F.F.F.F#P.F.K.F.I.F.I.F.I.K.I.K#M.K#M.K.L.I.L.I.L.L.L.L#J.L.O.L.N#J.N.O.N.O.N.O#E.N.Q", +"#F#p#F#p#F#p#t#H#t#F#t#H#t#t#t#t#K#t#K#t#x#t#x#K#x#x#x#x#I#x#I#x#O#x#j#x#j#x#j#x#j#k#j#k#j#j#j#k#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w#q#q" +"#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.x.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B.D.B.D.B.C.B.C.D.C.D.C.D#L.D.F.C.F.D.F#L.F.F.F.F#P.F#P.F.I.F.K#P.I.K.I.K#M.K#M.K.L.K.L#M.L.L.L.L#J.L.O.L.O.L.O.O.N.O#E.O", +"#C#B#C#H#p#F#p#F#p#t#p#t#H#t#H#t#t#t#u#K#t#K#t#x#t#x#t#x#K#x#K#x#x#x#x#x#x#j#x#j#x#j#x#j.s#j#k#j#k#j#k#j#k#j#k#q#j#q#k#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#q#q#q#q#q#q#q#q#q#q#q#q" +"#q#j#q#j#q#j#q#j#q#j#q#k#q#j#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.w.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.x.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.B.B.B.B.B.7.B.C.B.C.B.C.B.C.D.C.D#L.C#L.D.F.C.F.C.F#L.F.F.F.F.F.F#N.F.I.F.I#P.I.K.I.K.I.K#M.I.L.I.L#M.L.L.L.L.L.L.N.L.O.L.N#J.N.O#E.O#E.O.Q", +"#F#p#F#p#F#p#t#H#t#H#t#t#t#t#K#t#K#t#x#t#x#t#x#K#x#K#I#x#x#x#I#x#O#x#j#x#j#x#j#x#j#Q#j#k#j#k#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w#q#q#q#w" +"#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.w.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.z.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B.C.B.D.B.C.B.C.D#L.D#L.D.F.D.F#L.F#L.F.F.F.F.F.F#P.F.K.F.I.F.I.K.I.K.I.K#M.K.L.I.L#R.L.L.L.L.L.L.O.L.O#J.N#J.N.O#E.O", +"#C#p#p#F#p#F#p#F#p#t#H#t#H#t#H#t#u#t#t#K#t#K#t#x#t#x#K#x#K#x#x#x#x#x#x#O#x#Q#x#j#x#j#x#j#Q#j#k#j#k#j#k#j#k#j#j#q#k#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q" +"#q#q#q#j#q#j#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.B.B.B.B.B.B.B.C.B.C.B.C.B.C.D.C.D.C.D#L.C.F.C.F#L.F#L.F.F.F.F#P.F#P.F.I.F.I.F.I.K.I.K#M.K#M.K.L.I.L.I.L.L.L.L#J.L#J.L.N#J.N#J.N.O.N.O#E.O.Q", +"#F#p#F#p#t#p#t#H#t#F#t#H#t#t#K#t#K#t#K#t#x#t#x#K#I#x#x#x#I#x#O#x#j#x#j#x#j#x#j#Q#j#k#j#k#j#j#j#k#j#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w#q#q" +"#q#w#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.x.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.D.B.C.B.C.B.C.D.C.D#L.D.F.C.F.D.F#L.F.F.F.F#P.F#P.F.K.F.K#P.I.K.I.K#M.K#M.K.L.K.L#M.L.L.L.L#J.L#J.L.O.L.O#J.N.O.N.O", +"#C#B#C#F#p#F#p#F#p#t#H#t#H#t#H#t#t#t#u#K#t#x#t#x#t#x#K#x#K#x#K#x#x#I#x#Q#x#j#x#j#x#j#x#j#k#j#k#j#k#j#k#j#k#j#k#q#j#q#k#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q#q#q" +"#q#q#q#j#q#j#q#j#q#j#q#k#q#j#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.q.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.A.B.B.B.B.7.B.B.B.C.B.C.B.C.B.C.D#L.D#L.D.F.C.F.C.F#L.F.F.F.F.F.F#N.F.K.F.I#P.I.K.I.K.I.K#M.I.L.K.L#M.L.L.L.L.L.L#J.L.O.L.N#J.N.O#E.O#E.O.Q", +"#F#p#F#p#F#p#t#F#t#H#t#t#t#t#K#t#K#t#x#t#x#t#x#K#x#K#I#x#I#x#O#x#O#x#j#x#j#x#j#Q#j#Q#j#j#j#k#j#j#j#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#S#D#D#D#S#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w" +"#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.z.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B.C.B.D.B.C.B.C.D#L.D#L.D#L.D.F#L.F#L.F.F.F.F.F.F#P.F.K.F.I.F.K#P.I.K.I.K#M.K.L.K.L#R.L.L.L.L.L.L#J.L.O#J.N#J.O.O#E.O", +"#C#p#p#F#p#F#p#F#p#t#H#t#H#t#u#t#u#K#t#K#t#K#t#x#t#x#K#x#K#x#x#x#x#x#x#O#x#O#x#j#x#j#x#j#Q#j#k#j#k#j#k#j#k#q#j#q#k#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#q#q#q#q#q#q#q#q#q#q" +"#q#q#q#j#q#j#q#j#q#k#q#j#q#k#q#j#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.z.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.B.B.B.B.B.7.B.C.B.C.B.C.B.C.D.C.D#L.C#L.C.F#L.F#L.F.F.F.F#P.F#P.F.I.F.I.F.I#P.I.K#M.K#M.K.L.I.L.I.L#M.L.L#J.L#J.L.N#J.N#J.N.O.N.O#E.O.Q", +"#F#p#F#p#t#p#t#H#t#F#t#F#t#t#K#t#K#t#K#t#x#K#x#K#I#x#x#x#I#x#O#x#j#x#j#x#j#x#j#Q#j#k#j#k#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w#q#q" +"#q#w#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.D.B.C.B.C.B.C.D.C.D#L.D#L.D.F.D.F#L.F#L.F.F#P.F#P.F.K.F.K#P.I#P.I.K#M.K#M.K.L.K.L#M.L#M.L.L#J.L#J.L.O.L.O#J.N.O.N.O", +"#C#B#C#F#p#F#p#F#p#t#H#t#H#t#H#t#t#K#u#K#t#x#t#x#t#x#K#x#K#x#x#x#x#I#x#Q#x#j#x#j#x#j#x#j#k#j#k#j#k#j#k#j#j#q#k#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#y#q#z#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q#q#q" +"#q#q#q#j#q#j#q#j#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#k.s#b.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.x.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.B.B.B.7.B.B.B.C.B.C.B.C.B.C.D#L.D#L.D#L.C.F.C.F#L.F.F.F.F.F.F#N.F.K.F.I#P.I#P.I.K.I.K#M.I.L.K.L#M.L#M.L.L.L.L#J.L.O.L.N#J.N.O#E.O#E.O.Q", +"#F#p#F#p#F#H#t#F#t#H#t#t#t#t#K#t#K#t#x#t#x#K#x#K#x#K#I#x#I#x#O#x#O#x#j#x#j#x#j#Q#j#Q#j#j#j#k#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w" +"#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B.C.B.D.B.C.B.C.D#L.D#L.D#L.D.F#L.F#T.F#L.F.F.F.F#P.F.K.F.I.F.K#P.I.K.I.K#M.K.L.K.L#R.L#M.L.L.L.L#J.L.O#J.N#J.O.O#E.O", +"#C#H#p#F#p#F#p#F#p#t#H#t#H#t#t#t#u#K#t#K#t#K#t#x#t#x#K#x#K#x#x#x#x#Q#x#O#x#O#x#j#x#j#x#j#Q#j#k#j#k#j#k#j#k#q#j#q#k#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#z#q#z#q#y#q#z#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#q#q#q#q#q#q#q#q#q#q" +"#q#q#q#j#q#j#q#j#q#j#q#j#q#k#q#j#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.w.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.x.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.B.B.B.B.B.7.B.C.B.C.B.C.B.C.D.C.D#L.C#L.D.F#L.F#L.F#L.F.F#P.F#P.F.I.F.I.F.I#P.I.K#M.K#M.K.L.I.L.I.L#M.L.L#J.L#J.L.N#J.O#J.N.O.N.O#E.O.Q", +"#F#p#F#p#t#H#t#H#t#F#t#F#t#t#K#t#K#t#K#t#x#K#x#K#I#x#x#x#I#x#O#x#j#x#j#x#j#x#j#Q#j#j#j#k#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w#q#q" +"#q#w#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.D.B.C.B.C.B.C.D.C.D#L.D#L.D.F.D.F#L.F#L.F.F#P.F#P.F.K.F.K#P.I#P.I.K#M.K#M.K.L.K.L#M.L#R.L.L#J.L#J.L.O.L.O#J.N.O.N.O", +"#C#F#C#F#p#F#p#F#p#t#H#t#H#t#H#t#t#K#t#K#t#x#t#x#t#x#K#x#K#x#x#x#x#O#x#Q#x#j#x#j#x#j#Q#j#k#j#k#j#k#j#k#j#j#q#k#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q#q#q" +"#q#q#q#q#q#j#q#j#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.B.B.B.7.B.B.B.C.B.C.B.C.B.C.D#L.D#L.D#L.C.F.C.F#L.F#L.F.F.F.F#N.F.K.F.I#P.I#P.I.K.I.K#M.K#M.K.L#M.L#M.L.L.L.L#J.L.O.L.N#J.N.O#E.O#E.O#E", +"#F#p#F#p#F#H#t#F#t#H#t#t#K#t#K#t#K#t#x#t#x#K#I#K#x#K#I#x#I#x#O#x#O#x#j#x#j#Q#j#Q#j#Q#j#j#j#k#j#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#w#q#z#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w" +"#q#q#q#w#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.x.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B.C.B.D.B.C.B.C.D#L.D#L.D#L.D.F#L.F#T.F#L.F.F.F.F#P.F#P.F.I#P.K#P.I.K.I.K#M.K#M.K.L#R.L#M.L.L.L.L#J.L.O#J.O#J.O.O#E.O", +"#C#H#p#F#p#F#p#F#H#t#H#t#H#t#t#t#u#K#t#K#t#K#t#x#K#x#K#x#K#x#x#I#x#Q#x#O#x#O#x#j#x#j#Q#j#Q#j#k#j#k#j#k#j#k#q#j#q#k#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#y#q#z#q#y#q#z#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q" +"#q#q#q#q#q#j#q#j#q#j#q#j#q#k#q#j#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.w.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.x.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.B.B.B.B.B.7.B.C.B.C.B.C.B#L.D#L.D#L.C#L.D.F#L.F#L.F#L.F.F#P.F#P.F.I.F.I#P.I#P.I.K#M.K#M.K#M.I.L#M.L#M.L.L#J.L#J.L.N#J.O#J.N#J.N.O#E.O#E", +"#F#p#F#p#t#H#t#H#t#F#t#F#K#t#K#t#K#t#K#t#x#K#x#K#I#x#x#x#O#x#O#x#j#x#j#x#j#Q#j#Q#j#j#j#k#j#j#j#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q" +"#q#w#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.w.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.x.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.z.A.z.A.z.A.z.B.z.B.A.B.A.B.A.B.B.B.B.B.B.D.B.C.B.C.B.C.D.C.D#L.D#L.D.F.D.F#L.F#L.F.F#P.F#P.F#P.F.K#P.I#P.I.K#M.K#M.K#M.K.L#M.L#R.L.L#J.L#J.L.O.L.O#J.N.O.N.O", +"#C#F#C#F#p#F#p#F#H#t#H#t#H#t#H#t#t#K#t#K#t#x#t#x#K#x#K#x#K#x#K#x#x#O#x#Q#x#j#x#j#x#j#Q#j#k#j#k#j#k#j#k#q#j#q#k#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#q#q#q#q#q#q#q#q" +"#q#q#q#q#q#j#q#j#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.B.B.B.7.B.B.B.C.B.C.B.C.B.C.D#L.D#L.D#L.C.F#L.F#L.F#L.F.F#P.F#P.F#P.F.I#P.I#P.I.K.I.K#M.K#M.K.L#M.L#M.L.L.L.L#J.L.O.L.N#J.N#J#E.O#E.O#E", +"#F#p#F#p#F#H#t#F#t#F#t#t#K#t#K#t#K#t#x#t#x#K#I#K#x#K#I#x#O#x#O#x#O#x#j#x#j#Q#j#Q#j#Q#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w" +"#q#q#q#w#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.x.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.D.B.C.B.C.D#L.D#L.D#L.D.F#L.F#T.F#L.F.F.F.F#P.F#P.F.K#P.K#P.I.K.I.K#M.K#M.K.L#R.L#M.L.L.L.L#J.L.O#J.O#J.O#J#E.O", +"#C#F#p#F#p#F#p#F#H#t#H#t#H#t#t#t#u#K#t#K#t#K#t#x#K#x#K#x#K#x#x#I#x#Q#x#O#x#O#x#j#x#j#Q#j#Q#j#k#j#k#j#k#q#k#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#y#q#z#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q" +"#q#q#q#q#q#j#q#j#q#j#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.x.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.B.B.B.B.B.7.B.C.B.C.B.C.B#L.D#L.D#L.C#L.D.F#L.F#L.F#L.F.F#P.F#P.F#N#P.I#P.I#P.I.K#M.K#M.K#M.I.L#M.L#M.L.L#J.L#J.L#J#J.O#J.N#J.N.O#E.O#E", +"#F#p#F#p#t#F#t#H#t#F#t#F#K#t#K#t#K#t#K#K#x#K#x#K#I#x#I#x#O#x#O#x#O#x#O#x#j#Q#j#Q#j#j#j#k#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q" +"#q#w#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.z.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B.C.B.D.B#L.B#L.D#L.D#L.D.F.D.F#L.F#L.F.F#P.F#P.F#P.F.K#P.I#P.I.K#M.K#M.K#M.K.L#R.L#R.L.L#J.L#J.L.O.L.O#J.N#J.N.O", +"#C#F#C#F#p#F#p#F#H#t#H#t#H#t#H#K#t#K#t#K#t#K#t#x#K#x#K#x#K#x#K#x#x#O#x#O#x#j#x#j#x#j#Q#j#k#j#k#j#k#j#k#q#j#q#k#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#q#q#q#q#q#q#q#q" +"#q#q#q#q#q#j#q#j#q#j#q#k#q#j#q#k#q#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.B.B.B.B.B.B.B.C.B.C.B.C.B.C.D#L.D#L.D#L#L.F#L.F#L.F#L#P.F#P.F#P.F#P.F.I#P.I#P.I.K.I.K#M.K#M.K.L#M.L#M.L.L.L.L#J.L#J.L.N#J.N#J#E.O#E.O#E", +"#F#p#F#p#F#H#t#F#t#F#t#t#K#t#K#t#K#t#x#K#x#K#I#K#x#K#I#x#O#x#O#x#O#x#j#x#j#Q#j#Q#j#Q#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w" +"#q#q#q#w#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.x.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.D.B.C.B.C.B#L.D#L.D#L.D.F#L.F#T.F#L.F.F#P.F#P.F#P#P.K#P.K#P.I.K.I.K#M.K#M#R.L#R.L#M.L.L#J.L#J.L#J#J.O#J.O#J#E.O", +"#C#F#p#F#p#F#p#F#H#t#H#t#H#t#F#K#u#K#t#K#t#K#t#x#K#x#K#x#K#x#x#I#x#Q#x#O#x#O#x#j#x#j#Q#j#Q#j#k#j#k#j#j#q#k#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q" +"#q#q#q#q#q#j#q#j#q#j#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#k.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.q.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.A.B.B.B.B.7.B.B.B.C.B.C.B#L.B#L.D#L.C#L.D.F#L.F#L.F#L.F.F#P.F#P.F#N#P.K#P.I#P.I.K#M.K#M.K#M#M.L#R.L#M.L.L#J.L#J.L#J#J.O#J.N#J.N.O#E.O#E", +"#F#p#F#p#t#F#t#H#t#F#t#F#K#t#K#t#K#t#K#K#x#K#x#K#I#x#I#x#O#x#O#x#O#x#O#x#j#Q#j#Q#j#j#j#k#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q" +"#q#w#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.z.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B.C.B.D.B#L.B#L.D#L.D#L#T#L#T.F#L.F#L.F.F#P.F#P.F#P.F.K#P.I#P.I#P#M.K#M.K#M.K.L#R.L#R.L.L#J.L#J.L#J#J.O#J.N#J#U.O", +"#C#F#C#F#p#F#p#F#H#t#H#t#H#t#H#K#t#K#t#K#t#K#t#K#K#x#K#x#K#x#K#x#x#O#x#O#x#j#x#j#x#j#Q#j#Q#j#Q#j#k#j#k#q#j#q#k#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#z#q#z#q#y#q#z#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#q#q#q#q#q#q#q#q" +"#q#q#q#q#q#j#q#j#q#j#q#k#q#j#q#k#q#j#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.z.A.z.A.z.A.A.B.A.B.A.B.A.B.A.B.B.B.B.B.B.7.B.C.B.C.B.C.B#L.D#L.D#L#L.F#L.F#L.F#L#P.F#P.F#P.F#P.F.I#P.I#P.I#P.I.K#M.K#M.K.L#M.L#M.L.L#J.L#J.L#J.L.N#J.N#J#E.O#E.O#E", +"#F#p#F#H#F#H#t#F#t#F#t#t#K#t#K#t#K#t#x#K#x#K#I#K#x#K#I#x#O#x#O#x#O#x#j#x#j#Q#j#Q#j#Q#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w" +"#q#q#q#w#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.A.x.z.x.A.x.A.x.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.D.B.C.B.C.B#L.D#L.D#L.D#L#T.F#T.F#L#P.F#P.F#P.F#P#P.K#P.K#P.I#P.I.K#M.K#M#R.L#R.L#M.L.L#J.L#J.L#J#J.O#J.O#J#E.O", +"#C#F#p#F#p#F#p#F#H#F#H#t#H#t#F#K#H#K#t#K#t#K#t#x#K#x#K#x#K#x#x#I#x#Q#x#O#x#O#x#j#x#j#Q#j#Q#j#k#j#k#j#j#q#k#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q" +"#q#q#q#q#q#j#q#j#q#j#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#k.s#b.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.q.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.z.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.B.B.B.7.B.B.B.C.B.C.B#L.B#L.D#L.D#L.D.F#L.F#L.F#L.F.F#P.F#P.F#N#P.K#P.I#P.I#P#M.K#M.K#M#M.L#R.L#M.L#M#J.L#J.L#J#J.O#J.N#J.N.O#E.O#E", +"#F#p#F#H#F#F#t#H#t#F#t#F#K#t#K#t#K#t#K#K#x#K#x#K#I#K#I#K#O#x#O#x#O#x#O#x#j#Q#j#Q#j#j#j#k#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#y#y#z#y#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q" +"#q#w#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.z.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B.C.B.D.B#L.B#L.D#L.D#L#T#L#T.F#L.F#L.F.F#P.F#P.F#P.F.K#P.I#P.K#P#M.K#M.K#M.K.L#R.L#R.L#M#J.L#J.L#J#J.O#J.N#J#U.O", +"#C#F#C#F#p#F#p#F#H#t#H#t#H#t#H#K#t#K#t#K#t#K#t#K#K#x#K#x#K#x#K#x#x#O#x#O#x#j#x#j#x#j#Q#j#Q#j#Q#j#k#j#k#q#j#q#k#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#q#q#q#q#q#q#q#q" +"#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#k#q#j#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.z.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.B.B.B.B.B.7.B.C.B#L.B#L.B#L.D#L.D#L#L#L#L.F#L.F#L#P.F#P.F#P.F#P.F.I#P.I#P.I#P#M.K#M.K#M.K.L#M.L#M.L#M#J.L#J.L#J#J.N#J.N#J#E.O#E.O#E", +"#F#p#F#H#F#H#t#F#t#F#t#F#K#t#K#t#K#t#K#K#x#K#I#K#x#K#I#x#O#x#O#x#O#x#j#x#j#Q#j#Q#j#Q#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w" +"#q#q#q#w#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.D.B.C.B.C.B#L.D#L.D#L.D#L#T.F#T.F#L#P.F#P.F#P.F#P#P.K#P.K#P.I#P#M.K#M.K#M#R.L#R.L#M#J#M#J.L#J.L#J#J.O#J.O#J#E.O", +"#C#F#p#F#p#F#p#F#H#F#H#t#H#t#F#K#H#K#t#K#t#K#t#x#K#x#K#x#K#x#x#I#x#Q#x#O#x#O#x#j#x#j#Q#j#Q#j#k#j#k#j#j#q#k#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q" +"#q#q#q#q#q#j#q#j#q#j#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#k.s#b.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.z.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.B.B.B.7.B.B.B.C.B.C.B#L.B#L.D#L#T#L#T#L#L.F#L.F#L#P.F#P.F#P.F#N#P.K#P.I#P.I#P#M.K#M.K#M#M.L#R.L#M.L#M#J.L#J.L#J#J.O#J.N#J#E.O#E.O#E", +"#F#p#F#H#F#F#F#H#t#F#t#F#K#t#K#t#K#t#K#K#x#K#x#K#I#K#I#K#O#x#O#x#O#x#O#x#j#Q#j#Q#j#O#j#Q#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#y#y#z#y#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q" +"#q#w#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B.C.B.D.B#L.B#L.D#L.D#L#T#L#T.F#L.F#L.F#L#P.F#P.F#P#P.K#P.I#P.K#P#M.K#M.K#M.K.L#R.L#R.L#M#J.L#J#J#J#J.O#J.N#J#U.O", +"#C#F#C#F#p#F#p#F#H#t#H#t#F#t#H#K#t#K#t#K#t#K#t#K#K#x#K#x#K#x#K#Q#x#O#x#O#x#O#x#O#x#j#Q#j#Q#j#Q#j#k#j#k#q#j#q#k#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#z#q#z#q#y#q#z#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#q#q#q#q#q#q#q#q" +"#q#q#q#q#q#j#q#j#q#j#q#k#q#j#q#k#q#j#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.z.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.B.B.B.B.B.7.B.C.B#L.B#L.B#L.D#L.D#L#L#L#T.F#L.F#L#P.F#P.F#P#P#P#P.I#P.I#P#M#P#M.K#M.K#M.K.L#M.L#M#J#M#J.L#J.L#J#J.N#J.O#J#E.O#E.O#E", +"#F#p#F#H#F#H#t#F#t#F#t#F#K#F#K#t#K#t#K#K#K#K#I#K#x#K#I#x#O#x#O#x#O#x#j#x#j#Q#j#Q#j#Q#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w" +"#q#q#q#w#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.D.B#L.B#L.B#L.D#L#T#L#T#L#T.F#T.F#L#P#L#P.F#P.F#P#P.K#P.K#P#M#P#M.K#M.K#M#R.L#R.L#M#J#R#J.L#J.L#J#J.O#J.O#J#E.O", +"#C#F#p#F#p#F#p#F#H#F#H#t#H#t#F#K#H#K#t#K#t#K#t#x#K#x#K#x#K#x#x#O#x#Q#x#O#x#O#x#j#x#j#Q#j#Q#j#k#j#k#j#j#q#k#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q" +"#q#q#q#q#q#j#q#j#q#j#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#k.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.z.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.B.B.B.7.B.B.B#L.B#L.B#L.B#L.D#L#T#L#T#L#L.F#L#P#L#P.F#P.F#P.F#N#P.K#P.I#P.I#P#M.K#M.K#M#M.L#R.L#M.L#M#J.L#J.L#J#J.O#J.N#J#E.O#E.O#E", +"#F#p#F#H#F#F#F#H#t#F#t#F#K#t#K#t#K#t#K#K#x#K#x#K#I#K#I#K#O#x#O#x#O#x#O#x#j#Q#j#Q#j#O#j#Q#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q" +"#q#w#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B.C.B.D.B#L.B#L.D#L.D#L#T#L#T.F#L#P#T#P#L#P.F#P#P#P#P.K#P.I#P.K#P#M.K#M.K#M#R.L#R.L#R.L#M#J.L#J#J#J#J.O#J#U#J#U.O", +"#C#F#C#F#p#F#p#F#H#t#H#t#F#t#H#K#t#K#t#K#t#K#t#K#K#x#K#x#K#x#K#x#x#O#x#O#x#O#x#O#x#j#Q#j#Q#j#Q#j#k#j#k#q#j#q#k#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#z#q#z#q#y#q#z#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#q#q#q#q#q#q#q#q" +"#q#q#q#q#q#j#q#j#q#j#q#k#q#j#q#k#q#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.z.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.B.B.B.B.B.7.B.C.B#L.B#L.B#L.D#L.D#L#L#L#T.F#L.F#L#P.F#P.F#P#P#P#P.I#P.I#P#M#P#M.K#M.K#M#R.L#M.L#M#J#M#J.L#J#J#J#J.N#J.O#J#E.O#E.O#E", +"#F#p#F#H#F#H#t#F#t#F#t#F#K#F#K#t#K#t#K#K#K#K#I#K#x#K#I#x#O#x#O#x#O#x#O#x#O#Q#j#Q#j#Q#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w" +"#q#q#q#w#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.D.B#L.B#L.B#L.D#L#T#L#T#L#T.F#T.F#L#P#L#P.F#P.F#P#P.K#P.K#P#M#P#M.K#M.K#M#R.L#R.L#M#J#R#J.L#J.L#J#J.O#J.O#J#E.O", +"#C#F#p#F#p#F#p#F#H#F#H#t#H#t#F#K#H#K#t#K#t#K#t#x#K#x#K#x#K#x#K#I#K#Q#x#O#x#O#x#j#x#j#Q#j#Q#j#Q#j#Q#j#j#q#k#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q" +"#q#q#q#q#q#j#q#j#q#j#q#j#q#k#q#j#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.q.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.z.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.B.B.B.7.B.B.B#L.B#L.B#L.B#L.D#L#T#L#T#L#L.F#L#P#L#P.F#P.F#P.F#N#P.K#P.I#P#M#P#M.K#M.K#M#M.L#R.L#M.L#M#J.L#J.L#J#J.O#J#E#J#E.O#E#U#E", +"#F#p#F#H#F#F#F#H#t#F#t#F#K#t#K#t#K#t#K#K#x#K#x#K#I#K#I#K#O#x#O#x#O#x#O#x#j#Q#j#Q#j#O#j#Q#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q" +"#q#w#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B#L.B#T.B#L.B#L.D#L.D#L#T#L#T.F#L#P#T#P#L#P.F#P#P#P#P.K#P.I#P#R#P#M.K#M#R#M#R.L#R.L#R#J#M#J.L#J#J#J#J.O#J#U#J#U.O", +"#C#F#C#F#p#F#p#F#H#t#H#t#H#t#H#K#t#K#t#K#t#K#t#K#K#x#K#x#K#x#K#x#x#O#x#O#x#O#x#O#x#j#Q#j#Q#j#Q#j#k#j#k#q#j#q#k#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#z#q#y#q#z#q#z#q#q#q#q#q#q#q#q#q" +"#q#q#q#q#q#j#q#j#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.z.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.B.B.B.B.B.7.B.C.B#L.B#L.B#L#T#L#T#L#L#L#T.F#L#P#L#P.F#P.F#P#P#P#P.I#P.I#P#M#P#M.K#M#R#M#R.L#M.L#M#J#M#J.L#J#J#J#J.N#J.O#J#E.O#E.O#E", +"#F#p#F#H#F#H#t#F#t#F#t#F#K#F#K#t#K#t#K#K#K#K#I#K#x#K#I#K#O#x#O#x#O#x#O#x#O#Q#j#Q#j#Q#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w" +"#q#q#q#w#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.D.B#L.B#L.B#L.D#L#T#L#T#L#T.F#T.F#L#P#L#P.F#P.F#P#P.K#P.K#P#M#P#M.K#M.K#M#R.L#R.L#M#J#R#J.L#J#J#J#J.O#J.O#J#E.O", +"#C#F#C#F#C#F#p#F#H#F#H#t#H#t#F#K#H#K#t#K#t#K#t#K#K#K#K#x#K#x#K#I#K#Q#x#O#x#O#x#j#x#j#Q#j#Q#j#Q#j#Q#j#j#q#k#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#y#q#z#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#q#q#q#q#q#q#q#q#q#q" +"#q#q#q#q#q#j#q#j#q#j#q#j#q#k#q#j#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.q.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.z.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.B.B.B.7.B.B.B#L.B#L.B#L.B#L.D#L#T#L#T#L#L.F#L#P#L#P.F#P#P#P#P#N#P.K#P#M#P#M#P#M.K#M.K#M#M.L#R#J#M#J#M#J.L#J.L#J#J.O#J#E#J#E.O#E#U#E", +"#F#p#F#H#F#F#F#H#t#F#t#F#K#t#K#t#K#t#K#K#x#K#x#K#I#K#I#K#O#x#O#x#O#x#O#x#j#Q#j#Q#j#O#j#Q#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w#q#q" +"#q#w#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B#L.B#T.B#L.B#L#T#L#T#L#T#L#T.F#L#P#T#P#L#P.F#P#P#P#P.K#P#M#P#R#P#M.K#M#R#M#R.L#R#J#R#J#M#J.L#J#J#J#J.O#J#U#J#U.O", +"#C#F#C#F#p#F#p#F#H#F#H#F#H#t#H#K#F#K#F#K#t#K#t#K#K#x#K#x#K#x#K#x#x#O#x#O#x#O#x#O#x#j#Q#j#Q#j#Q#j#k#j#k#q#j#q#k#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q#q#q" +"#q#q#q#q#q#j#q#j#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.z.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.B.B.B.B.B#V.B#L.B#L.B#L.B#L#T#L#T#L#L#L#T#P#L#P#L#P.F#P.F#P#P#P#P.I#P.I#P#M#P#M.K#M#R#M#R.L#M.L#M#J#M#J.L#J#J#J#J.N#J.O#J#E.O#E.O#E", +"#F#C#F#H#F#H#F#F#t#F#t#F#K#F#K#t#K#t#K#K#K#K#I#K#x#K#I#K#O#K#O#x#O#x#O#x#O#Q#j#Q#j#Q#j#O#j#O#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w" +"#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.A.x.z.x.A.x.A.x.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B.B.B.B.B#W.B#T.B#L.B#L.B#L.D#L#T#L#T#L#T#P#T#P#L#P#L#P#P#P#P#P#P.K#P.K#P#M#P#M.K#M#R#M#R.L#R.L#M#J#R#J#J#J#J#J#J.O#J#U#J#E.O", +"#C#F#C#F#C#F#p#F#H#F#H#t#H#t#F#K#H#K#t#K#t#K#t#K#K#K#K#x#K#x#K#I#K#Q#x#O#x#O#x#O#x#O#Q#j#Q#j#Q#j#Q#j#k#q#k#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#q#q#q#q#q#q#q#q#q#q" +"#q#q#q#j#q#j#q#j#q#j#q#j#q#k#q#j#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.z.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.B.B.B.7.B.B.B#L.B#L.B#L#W#L#T#L#T#L#T#L#L.F#L#P#L#P.F#P#P#P#P#N#P.K#P#M#P#M#P#M.K#M#R#M#M.L#R#J#M#J#M#J.L#J#J#J#J.O#J#E#J#E.O#E#U#E", +"#F#p#F#p#F#F#F#H#t#F#t#F#K#F#K#F#K#t#K#K#K#K#K#K#I#K#I#K#O#x#O#x#O#x#O#x#j#Q#j#Q#j#O#j#Q#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w#q#q" +"#q#w#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.z.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B#L.B#T.B#L.B#L#T#L#T#L#T#L#T.F#L#P#T#P#L#P.F#P#P#P#P.K#P#M#P#R#P#M.K#M#R#M#R.L#R#J#R#J#M#J.L#J#J#J#J.O#J#U#J#U.O", +"#C#F#C#F#p#F#p#F#H#F#H#F#H#t#H#K#F#K#F#K#t#K#t#K#K#x#K#x#K#x#K#x#K#O#K#Q#x#O#x#O#x#j#Q#j#Q#j#Q#j#Q#j#Q#j#j#q#k#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q#q#q" +"#q#q#q#j#q#j#q#j#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.z.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.B.B.B.B.B#V.B#L.B#L.B#L.B#L#T#L#T#L#L#L#T#P#L#P#L#P.F#P#P#P#P#P#P.I#P#M#P#M#P#M.K#M#R#M#R.L#M.L#M#J#M#J.L#J#J#J#J.N#J#U#J#E.O#E#U#E", +"#F#C#F#p#F#H#F#F#F#F#t#F#K#F#K#t#K#t#K#K#K#K#I#K#x#K#I#K#O#K#O#x#O#x#O#x#O#Q#j#Q#j#Q#j#O#j#Q#j#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w" +"#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.A.x.z.x.A.x.A.x.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B.B.B.B.B#W.B#T.B#L.B#L#W#L#T#L#T#L#T#L#T#P#T#P#L#P#L#P#P#P#P#P#P.K#P#R#P#M#P#M#R#M#R#M#R.L#R.L#M#J#R#J#J#J#J#J#J#U#J#U#J#E.O", +"#C#F#C#F#C#F#p#F#H#F#H#t#H#t#F#K#H#K#t#K#t#K#t#K#K#K#K#x#K#x#K#I#K#Q#x#O#x#O#x#O#x#O#Q#j#Q#j#Q#j#Q#j#k#j#k#q#j#q#k#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#z#q#z#q#y#q#z#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#z#q#q#q#q#q#q#q#q#q#q#q" +"#q#q#q#j#q#j#q#j#q#k#q#j#q#k#q#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.w.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.A.B.B.B.B#V.B#W.B#L.B#L.B#L#W#L#T#L#T#L#T#X#L#P#L#P#L#P.F#P#P#P#P#N#P.K#P#M#P#M#P#M#R#M#R#M#M.L#R#J#M#J#M#J#J#J#J#J#J.O#J#E#J#E.O#E#U#E", +"#F#p#F#p#F#F#F#H#t#F#t#F#K#F#K#F#K#t#K#t#K#K#K#K#I#K#x#K#O#K#O#x#O#x#O#x#O#Q#O#Q#j#O#j#Q#j#O#j#O#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w#q#q" +"#q#w#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.w.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B#W.B.B.B#L.B#T.B#L.B#L#T#L#T#L#T#X#T#P#L#P#T#P#X#P#P#P#P#P#P.K#P#M#P#R#P#M.K#M#R#M#R.L#R#J#R#J#M#J.L#J#J#J#J.O#J#U#J#U#U", +"#C#F#C#F#p#F#p#F#H#F#H#F#H#t#H#t#F#K#F#K#t#K#t#K#K#K#K#K#K#x#K#x#K#O#K#Q#x#O#x#O#x#O#Q#O#Q#j#Q#j#Q#j#Q#j#j#q#k#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#y#q#z#q#y#q#z#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#q#q#q#q#q#q#q#q#q#q#q#q" +"#q#q#q#j#q#j#q#j#q#j#q#k#q#j#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#k.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.A.B.B.B.B.B.B#V.B#L.B#L#W#L#W#L#T#L#T#L#L#L#L#P#L#P#L#P#P#P#P#P#P#P#P#M#P#M#P#M#P#M.K#M#R#M#R#J#M#J#M#J#M#J.L#J#J#J#J#E#J#U#J#E#U#E#U#E", +"#F#C#F#p#F#H#F#F#F#F#t#F#K#F#K#t#K#t#K#t#K#K#I#K#x#K#I#K#I#K#O#x#O#x#O#x#O#x#j#Q#j#Q#j#O#j#Q#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w#q#q#q#w" +"#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.x.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.x.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B.B.B.B.B#W.B#T.B#L.B#L#W#L#T#L#T#L#T#L#T#P#T#P#L#P.F#P#P#P#P#P#P#R#P#R#P#M#P#M#R#M#R#M#R#J#R#J#M#J#R#J#J#J#J#J#J#U#J#U#J#E.O", +"#C#F#C#F#C#F#p#F#H#F#H#F#H#F#F#t#H#K#F#K#F#K#t#K#K#K#K#x#K#x#K#x#K#Q#x#O#x#O#x#O#x#O#x#j#Q#j#Q#j#Q#j#Q#j#Q#q#j#q#k#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q" +"#q#j#q#j#q#j#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.w.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.x.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.A.B.B.B.B#V.B#W.B#L.B#L.B#L#W#L#T#L#T#L#T#X#L#P#L#P#L#P.F#P#P#P#P#N#P.K#P#M#P#M#P#M#R#M#R#M#M.L#R#J#M#J#M#J#J#J#J#J#J.O#J#E#J#E.O#E#U#E", +"#F#C#F#p#F#H#F#H#F#F#t#F#K#F#K#F#K#t#K#t#K#K#K#K#I#K#x#K#I#K#O#K#O#x#O#x#O#x#O#Q#j#Q#j#Q#j#O#j#O#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w#q#q" +"#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#j#j#k#j#j#j#k#j#k#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.z.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B#W.B#W.B#L.B#T#W#L#W#L#T#L#T#L#T#X#T#P#L#P#L#P#P#P#P#P#P#P#P.K#P#M#P#R#P#M#R#M#R#M#R.L#R#J#R#J#Y#J#J#J#J#J#J#U#J#U#J#U#U", +"#C#F#C#F#C#F#C#F#H#F#H#F#H#t#H#t#F#K#F#K#t#K#t#K#t#K#K#K#K#x#K#x#K#I#K#Q#x#O#x#O#x#O#x#O#Q#j#Q#j#Q#j#Q#j#k#q#k#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#z#q#y#q#z#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q" +"#q#j#q#j#q#j#q#j#q#j#q#k#q#j#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.B.B.B#W.B#W.B#V.B#L.B#L#W#L#W#L#T#L#T#X#L#P#L#P#L#P#L#P#P#P#P#P#P#P#P#M#P#M#P#M#Z#M#R#M#R#M#R#J#M#J#M#J#Y#J#J#J#J#J#J#E#J#U#J#E#U#E#U#E", +"#F#C#F#p#F#H#F#F#F#H#t#F#K#F#K#F#K#F#K#t#K#K#K#K#K#K#I#K#I#K#O#x#O#x#O#x#O#x#O#Q#O#Q#j#O#j#Q#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#y#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#z#q#w#q#q#q#w" +"#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B#W.B#W.B#W.B#T.B#L.B#L#W#L#T#L#T#X#T#X#T#P#T#P#L#P#P#P#P#P#P#P#P#R#P#R#P#M#P#M#R#M#R#M#R#J#R#J#M#J#R#J#J#J#J#J#J#U#J#U#J#E#U", +"#C#H#C#F#C#F#p#F#p#F#H#F#H#F#F#t#H#K#F#K#F#K#t#K#t#K#K#x#K#x#K#x#K#x#K#O#K#O#x#O#x#O#x#j#Q#O#Q#j#Q#j#Q#j#Q#j#j#q#k#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q" +"#q#j#q#j#q#j#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.x.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.B#W.B.B.B#V.B#L.B#L#W#L#W#L#T#L#T#L#L#L#T#P#L#P#L#P#X#P#P#P#P#P#P#0#P#R#P#M#P#M#P#M#R#M#R#M#M#J#R#J#M#J#M#J#J#J#J#J#J#U#J#E#J#E#U#E#U#E", +"#F#C#F#C#F#H#F#H#F#F#F#F#t#F#K#F#K#t#K#t#K#K#K#K#I#K#x#K#I#K#O#K#O#x#O#x#O#x#O#Q#j#Q#j#Q#j#O#j#Q#j#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w#q#q#q#w#q#q" +"#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.z.A.z.A.z.A.z.B.z.B.A.B.A.B.A.B.B.B.B#W.B#W.B#L.B#T#W#L#W#L#T#L#T#L#T#X#T#P#L#P#L#P#P#P#P#P#P#Z#P#R#P#M#P#R#Z#M#R#M#R#M#R#J#R#J#R#J#Y#J#J#J#J#1#J#U#J#U#J#U#U", +"#C#F#C#F#C#F#C#F#p#F#H#F#H#t#H#t#F#K#H#K#t#K#t#K#t#K#K#K#K#x#K#x#K#I#K#Q#x#O#x#O#x#O#x#O#Q#j#Q#j#Q#j#Q#j#Q#j#Q#q#j#q#k#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j" +"#q#j#q#j#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.q.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.v.v.v.v.v.x.v.x.v.x.v.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.x.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.B.B.B#V.B#W.B#L.B#L.B#L#W#L#T#L#T#L#T#X#L#P#L#P#L#P#L#P#P#P#P#P#P#P#P#M#P#M#P#M#Z#M#R#M#R#M#R#J#M#J#M#J#Y#J#J#J#J#J#J#E#J#U#J#E#U#E#U#E", +"#F#C#F#p#F#H#F#F#F#H#t#F#t#F#K#F#K#F#K#t#K#K#K#K#K#K#I#K#I#K#O#K#O#K#O#x#O#x#O#Q#O#Q#j#O#j#Q#j#O#j#O#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w#q#q#q#q" +"#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.A.B.B#W.B#W.B#W.B#T#W#L#W#L#W#L#T#L#T#X#T#P#L#P#T#P#X#P#P#P#P#P#P#P#P#R#P#R#P#M#P#M#R#M#R#M#R#J#R#J#M#J#Y#J#J#J#J#J#J#U#J#U#1#E#U", +"#C#H#C#F#C#F#C#F#p#F#H#F#H#F#H#t#H#K#F#K#F#K#t#K#t#K#K#K#K#K#K#x#K#x#K#O#K#Q#x#O#x#O#x#O#Q#O#Q#j#Q#j#Q#j#Q#j#j#q#k#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#z#q#y#q#z#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j" +"#q#j#q#j#q#j#q#j#q#k#q#j#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.x.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.B#W.B#W.B#V.B#L.B#L#W#L#W#L#T#L#T#X#L#X#T#P#L#P#L#P#X#P#P#P#P#P#P#0#P#R#P#M#Z#M#Z#M#R#M#R#Y#M#J#R#J#M#J#Y#J#J#J#J#1#J#U#J#E#1#E#U#E#U#E", +"#F#C#F#C#F#H#F#H#F#F#F#F#t#F#K#F#K#F#K#t#K#t#K#K#2#K#K#K#I#K#O#K#O#x#O#x#O#x#O#x#O#Q#O#Q#j#O#j#Q#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w#q#q#q#w#q#q" +"#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B#W.B#W.B#W.B#T.B#L.B#L#W#L#T#L#T#X#T#X#T#P#T#P#L#P#X#P#P#P#P#P#P#Z#P#R#P#M#P#M#Z#M#R#M#R#Y#R#J#R#J#R#J#Y#J#J#J#J#1#J#U#J#E#J#U#U", +"#C#B#C#F#C#F#C#F#p#F#H#F#H#F#H#F#F#t#H#K#F#K#F#K#t#K#K#K#K#x#K#x#K#x#K#Q#K#O#K#O#x#O#x#O#x#j#Q#j#Q#j#Q#j#Q#j#Q#q#j#q#k#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j" +"#q#j#q#j#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.x.A.z.A.A.A.z.A.A.B.A.B.A.B.A#W.B#W.B#V.B#W.B#L#W#L#W#L#W#L#T#L#T#L#T#X#L#P#L#P#X#P#X#P#P#P#P#Z#P#Z#P#M#P#M#P#M#R#M#R#M#R#M#R#J#M#J#M#J#Y#J#J#J#J#J#J#E#J#E#J#E#U#E#U#3", +"#F#C#F#C#F#C#F#F#F#H#F#F#F#F#K#F#K#F#K#t#K#t#K#K#K#K#I#K#x#K#I#K#O#K#O#x#O#x#O#x#O#Q#j#Q#j#Q#j#O#j#O#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w#q#q#q#w#q#q#q#q" +"#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.w.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B#W.B#W.B#L.B#T#W#L#W#L#T#L#T#L#T#X#T#P#L#P#T#P#X#P#P#P#P#Z#P#Z#P#R#P#R#Z#M#R#M#R#M#R#M#R#J#R#J#Y#J#J#J#J#J#J#1#J#U#J#U#1#E#U", +"#C#C#C#F#C#F#C#F#C#F#H#F#H#F#H#t#H#t#F#K#F#K#t#K#t#K#t#K#K#K#K#x#K#x#K#I#K#Q#x#O#x#O#x#O#x#O#Q#j#Q#j#Q#j#Q#j#Q#j#Q#q#j#q#k#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j" +"#q#j#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.z.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.B#W.B#W.B#V.B#L.B#L#W#L#W#L#T#L#T#X#L#X#T#P#L#P#L#P#X#P#P#P#P#P#P#0#P#M#P#M#Z#M#R#M#R#M#R#Y#M#J#R#J#Y#J#J#J#J#J#J#1#J#U#J#E#1#E#U#E#U#E", +"#F#C#F#C#F#p#F#H#F#F#F#H#t#F#K#F#K#F#K#F#K#t#K#K#K#K#K#K#I#K#I#K#O#K#O#K#O#x#O#x#O#Q#O#Q#j#O#j#Q#j#O#j#O#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#w#q#q#q#w#q#z#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#y#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w#q#q#q#q#q#q" +"#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.A.x.z.x.A.x.A.x.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B#W.B#W.B#W.B#T#W#L#W#L#W#L#T#L#T#X#T#X#T#P#T#P#X#P#X#P#P#P#P#P#P#Z#P#R#P#M#P#M#R#M#R#M#R#Y#R#J#R#J#R#J#J#J#J#J#J#1#J#U#J#E#1#U#U", +"#C#B#C#H#C#F#C#F#p#F#H#F#H#F#H#F#F#t#H#K#F#K#F#K#t#K#t#K#K#K#K#K#K#x#K#x#K#O#K#Q#x#O#x#O#x#O#Q#O#Q#j#Q#j#Q#j#Q#j#j#q#k#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j" +"#q#j#q#j#q#j#q#k#q#j#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#k.s#b.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.w.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.x.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.z.A.z.A.A.A.z.A.A.B.A.B.A.B.A#W.B#W.B#V.B#W.B#L#W#L#W#L#W#L#T#X#T#X#T#X#L#P#L#P#X#P#X#P#P#P#P#Z#P#Z#P#M#Z#M#Z#M#R#M#R#Y#R#Y#R#J#M#J#M#J#J#J#J#1#J#1#J#E#J#E#1#E#U#E#U#3", +"#F#C#F#C#F#C#F#H#F#H#F#F#F#F#t#F#K#F#K#t#K#t#K#K#K#K#2#K#K#K#I#K#O#K#O#x#O#x#O#x#O#Q#O#Q#O#Q#j#O#j#Q#j#j#q#O#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#y#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w#q#q#q#w#q#q#q#q" +"#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.B.A.B.A.B.A#W.B#W.B#W.B#W.B#L.B#T#W#L#W#L#T#X#T#X#T#X#T#P#X#P#4#P#X#P#P#P#P#Z#P#Z#P#R#P#R#Z#M#R#M#R#Y#R#Y#R#J#R#J#Y#J#J#J#J#1#J#1#J#U#J#U#1#E#U", +"#C#C#C#F#C#F#C#F#C#F#p#F#H#F#H#F#H#F#F#K#H#K#F#K#F#K#t#K#K#K#K#x#K#x#K#I#K#Q#K#O#K#O#x#O#x#O#x#j#Q#O#Q#j#Q#j#Q#j#Q#q#j#q#k#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j" +"#q#j#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.q.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.z.A.A.A.z.A.A.B.A.B.A.B.A#W.A#W.B#W.B#W.B#V#W#L#W#L#W#L#W#X#T#X#T#X#L#X#T#P#X#P#X#P#X#P#P#Z#P#Z#P#M#P#M#P#M#Z#M#R#M#R#M#R#Y#M#J#M#J#Y#J#J#J#J#J#J#1#J#U#J#E#1#E#U#3#U#3", +"#F#C#F#C#F#p#F#H#F#F#F#H#F#F#t#F#K#F#K#F#K#t#K#K#K#K#K#K#I#K#x#K#O#K#O#K#O#x#O#x#O#x#O#Q#j#Q#j#Q#j#O#j#O#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#y#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#z#q#w#q#q#q#w#q#q#q#q#q#q" +"#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.x.A.z.A.z.A.z.A.A.B.z.B.A#W.A#W.B#W.B#W.B#W.B#T#W#L#W#L#W#L#T#L#T#X#T#X#T#P#T#P#X#P#X#P#P#Z#P#Z#P#Z#P#R#Z#M#Z#M#R#M#R#M#R#Y#R#J#Y#J#5#J#J#J#J#1#J#1#J#U#1#E#1#U#U", +"#C#6#C#7#C#F#C#F#C#F#C#F#H#F#H#F#H#t#H#K#F#K#F#K#t#K#t#K#K#K#K#K#K#x#K#x#K#O#K#Q#x#O#x#O#x#O#x#O#Q#j#Q#j#Q#j#Q#j#Q#j#Q#q#j#q#k#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j" +"#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.x.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.z.A.z.A.A.A.A.B.A.B.A#W.A#W.A#W.B#W.B#V#W#W#W#L#W#L#W#L#W#L#T#X#T#X#T#X#X#P#X#P#X#P#X#P#P#P#P#0#P#R#P#M#Z#M#Z#M#R#M#R#Y#R#Y#R#J#Y#J#Y#J#J#J#J#1#J#1#J#E#1#E#1#E#U#E#U#3", +"#8#C#F#C#F#C#F#H#F#H#F#F#F#F#t#F#K#F#K#F#K#F#K#t#K#K#2#K#K#K#I#K#I#K#O#K#O#K#O#x#O#x#O#Q#O#Q#j#O#j#Q#j#O#j#O#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#w#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#y#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#y#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w#q#q#q#w#q#q#q#q#q#q#q#q" +"#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.z.A.z.A.z.A.z.A.z.B.A.B.A.B.A#W.B#W.B#W.B#W#W#L#W#T#W#L#W#L#T#X#T#X#T#X#T#P#X#P#4#P#X#P#P#P#P#Z#P#R#P#M#P#R#Z#M#R#M#R#Y#R#Y#R#J#R#J#Y#J#J#J#J#1#J#U#J#U#1#U#1#E#U", +"#C#C#C#B#C#F#C#F#C#F#p#F#H#F#H#F#H#F#F#t#H#K#F#K#F#K#t#K#t#K#K#K#K#K#K#x#K#x#K#O#K#Q#x#O#x#O#x#O#Q#O#Q#j#Q#j#Q#j#Q#j#j#q#k#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j" +"#q#k#q#j#q#k#q#j#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.x.A.z.A.A.A.z.A.A.B.A.B.A.B.A#W.B#W.B#W.B#W.B#V#W#L#W#L#W#L#W#X#T#X#T#X#L#X#L#P#X#P#X#P#P#P#P#Z#P#Z#P#M#Z#M#Z#M#Z#M#R#Y#R#Y#R#Y#M#J#M#J#Y#J#J#1#J#1#J#E#J#U#1#E#1#E#U#3#U#3", +"#F#C#F#C#F#C#F#C#F#F#F#H#F#F#F#F#K#F#K#F#K#t#K#t#K#K#K#K#2#K#K#K#I#K#O#K#O#x#O#x#O#x#O#Q#O#Q#O#Q#j#O#j#Q#j#O#q#O#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#w#q#q#q#w#q#z#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#y#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#y#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q" +"#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.w.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.B.A.B.z.B.A#W.A#W.B#W.B#W#W#W#W#T#W#L#W#L#W#X#T#X#T#X#T#X#4#P#4#P#X#P#X#P#P#Z#P#Z#P#R#P#R#Z#M#Z#M#R#Y#R#Y#R#Y#R#J#Y#J#5#J#J#1#J#1#J#U#J#U#1#E#1#E#U", +"#C#6#C#C#C#F#C#F#C#F#C#F#H#F#H#F#H#F#H#F#F#K#H#K#F#K#F#K#t#K#K#K#K#x#K#x#K#I#K#Q#K#O#K#O#x#O#x#O#x#O#Q#O#Q#j#Q#j#Q#j#Q#j#j#q#k#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j" +"#q#j#q#k#q#j#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.x.A.z.A.z.A.A.A.A.B.A.B.A#W.A#W.B#W.B#W.B#V#W#L#W#L#W#L#W#X#T#X#T#X#T#X#T#P#X#P#X#P#X#P#P#Z#P#Z#P#0#P#R#P#M#Z#M#Z#M#R#M#R#Y#M#J#R#J#Y#J#Y#J#J#J#J#1#J#U#J#E#1#E#1#E#U#3#U#3", +"#6#C#F#C#F#C#F#p#F#H#F#F#F#H#t#F#t#F#K#F#K#F#K#t#K#K#K#K#K#K#I#K#I#K#O#K#O#K#O#x#O#x#O#x#O#Q#j#Q#j#Q#j#O#j#Q#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#y#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#y#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q" +"#j#q#j#q#j#q#j#q#j#q#j#q#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.z.A.z.A.z.A.A.B.z.B.A#W.A#W.B#W.B#W.B#W.B#W#W#L#W#T#W#X#W#X#T#X#T#X#T#X#T#P#X#P#X#P#P#Z#P#Z#P#Z#P#R#Z#M#Z#R#Z#M#R#M#R#Y#R#J#5#J#5#J#Y#J#J#J#J#1#J#U#1#U#1#U#1#3#U", +"#C#C#C#6#C#7#C#F#C#F#C#F#C#F#H#F#H#F#H#t#H#K#F#K#F#K#t#K#t#K#K#K#K#K#K#x#K#x#K#O#K#Q#x#O#x#O#x#O#x#O#Q#j#Q#j#Q#j#Q#j#Q#j#Q#q#j#q#k#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#z#D#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j" +"#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.x.A.z.A.A.A.z.A.A.B.A#W.A#W.A#W.B#W.B#V#W#W#W#L#W#L#W#L#W#L#T#X#T#X#T#X#X#P#X#P#X#P#X#Z#P#Z#P#Z#P#Z#P#M#Z#M#Z#M#Z#M#R#Y#R#Y#R#J#Y#J#Y#J#Y#J#J#1#J#1#J#E#1#U#1#E#1#E#U#3#U#3", +"#6#C#8#C#F#C#F#C#F#H#F#H#F#F#F#F#t#F#K#F#K#F#K#F#K#t#K#K#2#K#K#K#I#K#I#K#O#K#O#K#O#x#O#x#O#Q#O#Q#j#O#j#Q#j#O#j#O#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#y#y#y#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#y#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#j#q" +"#j#q#j#q#j#q#j#q#j#q#j#j#k#j#j#j#k#j#j#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.z.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.B.A#W.A#W.A#W.B#W.B#W.B#W#W#T#W#T#W#L#W#L#T#X#T#X#T#X#T#P#X#P#4#P#X#P#P#P#P#Z#P#Z#P#R#Z#R#Z#M#Z#M#R#Y#R#Y#R#J#R#J#Y#J#5#J#J#1#J#1#J#U#J#U#1#E#U#E#U", +"#C#C#C#C#C#F#C#F#C#F#C#F#p#F#H#F#H#F#H#F#F#t#H#K#F#K#F#K#t#K#t#K#K#K#K#K#K#x#K#x#K#O#K#Q#x#O#x#O#x#O#Q#O#Q#j#Q#j#Q#j#Q#j#Q#j#Q#q#j#q#k#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#z#D#z#D#z#D#z#D#z#D#z#D#z#D#z#D#z#D#z#D#z#D#z#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#k" +"#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.z.A.z.A.z.A.A.A.A#W.A#W.A#W.A#W.B#W#W#W#W#V#W#L#W#L#W#L#W#X#T#X#T#X#L#X#T#P#X#P#X#P#X#P#P#Z#P#Z#P#0#Z#R#Z#M#Z#M#Z#Y#R#Y#R#Y#M#J#R#J#Y#J#Y#1#J#1#J#1#J#U#1#E#1#E#U#3#U#3#U#3", +"#6#C#F#C#F#C#F#C#F#C#F#F#F#H#F#F#F#F#K#F#K#F#K#t#K#t#K#K#K#K#2#K#K#K#I#K#O#K#O#x#O#x#O#x#O#x#O#Q#O#Q#j#O#j#Q#j#O#q#O#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#y#y#y#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#y#y#y#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#z#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#j#q" +"#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.x.A.z.A.z.A.z.A.A.B.z.B.A#W.A#W.B#W.B#W#W#W#W#T#W#L#W#L#W#X#T#X#T#X#T#X#4#P#4#P#X#P#X#P#P#Z#P#Z#P#Z#P#R#Z#M#Z#R#Z#Y#R#Y#R#Y#R#J#5#J#5#J#Y#1#J#1#J#1#J#U#1#U#1#U#U#3#U", +"#C#C#C#6#C#C#C#F#C#F#C#F#C#F#H#F#H#F#H#F#H#F#F#K#H#K#F#K#F#K#t#K#K#K#K#K#K#K#K#I#K#Q#K#O#K#O#x#O#x#O#x#O#Q#O#Q#j#Q#j#Q#j#Q#j#j#q#k#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#z#D#z#D#z#D#z#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#k#q#j" +"#q#k#q#j#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.x.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.z.A.z.A.A.A.A#W.A.B.A#W.A#W.A#W.B#W.B#V#W#W#W#L#W#L#W#X#W#X#T#X#T#X#T#X#X#P#X#P#X#P#X#Z#P#Z#P#Z#P#Z#P#M#Z#M#Z#M#R#M#R#Y#R#Y#R#J#Y#J#Y#J#Y#J#J#1#J#1#J#E#1#U#1#E#U#3#U#3#U#3", +"#6#C#8#C#F#C#F#C#F#p#F#H#F#F#F#H#t#F#K#F#K#F#K#F#K#t#K#K#K#K#K#K#I#K#x#K#I#K#O#K#O#x#O#x#O#x#O#Q#O#Q#O#Q#j#O#j#Q#j#O#q#O#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#y#y#y#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#j#q#j#q" +"#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.z.A.z.A.z.A.z.A.z.B.A#W.A#W.A#W.B#W#W#W#W#W#W#L#W#T#W#X#W#X#T#X#T#X#4#X#4#P#X#P#4#P#X#Z#P#Z#P#Z#P#Z#Z#R#Z#R#Z#M#R#Y#R#Y#R#Y#5#J#5#J#Y#J#Y#J#J#1#J#1#1#U#1#U#1#3#U#3#U", +"#C#C#C#C#C#6#C#7#C#F#C#F#C#F#C#F#H#F#H#F#H#t#H#K#F#K#F#K#t#K#t#K#K#K#K#K#K#x#K#x#K#I#K#Q#K#O#K#O#x#O#x#O#Q#O#Q#O#Q#j#Q#j#Q#j#Q#j#j#q#k#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#z#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#k#q#j#q#k" +"#q#j#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.x.A.z.A.A.A.z.A.A.B.A#W.A#W.A#W.A#W.B#W#W#W#W#V#W#L#W#X#W#X#W#X#T#X#T#X#X#X#4#P#X#P#X#Z#X#Z#P#Z#P#Z#P#0#Z#M#Z#M#Z#M#R#Y#R#Y#R#Y#Y#J#5#J#Y#J#J#1#J#1#J#1#1#U#1#E#1#E#U#3#U#3#U#A", +"#6#C#6#C#8#C#F#C#F#C#F#H#F#H#F#F#F#F#t#F#K#F#K#F#K#F#K#t#K#K#2#K#K#K#I#K#I#K#O#K#O#K#O#x#O#x#O#Q#O#Q#j#O#j#Q#j#O#j#O#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#y#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q" +"#j#q#j#q#j#q#j#q#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.w.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.A.A#W.z#W.A#W.A#W.B#W.B#W#W#W#W#T#W#X#W#X#W#X#T#X#T#X#T#X#4#P#4#P#X#Z#X#Z#P#Z#P#Z#Z#Z#Z#R#Z#M#Z#M#R#Y#R#Y#R#Y#R#J#5#J#5#J#J#1#J#1#J#1#J#U#1#E#1#U#U#3#U", +"#9#C#C#C#C#C#C#F#C#F#C#F#C#F#p#F#H#F#H#F#H#F#F#t#H#K#F#K#F#K#t#K#t#K#K#K#K#K#K#x#K#x#K#O#K#Q#x#O#x#O#x#O#x#O#Q#j#Q#j#Q#j#Q#j#Q#j#Q#q#j#q#k#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#z#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#k#q#j" +"#q#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.x.A.z.A.z.A.A.A.A#W.A#W.A#W.A#W.B#W#W#W#W#V#W#V#W#X#W#L#W#X#W#X#T#X#4#X#4#X#X#P#X#P#X#P#X#Z#P#Z#P#0#Z#R#Z#M#Z#M#Z#Y#R#Y#R#Y#R#Y#5#J#Y#J#Y#1#J#1#J#1#J#1#1#E#1#E#1#3#U#3#U#3a.#A", +"#6#C#6#C#F#C#F#C#F#C#F#7#F#F#F#H#F#F#F#F#K#F#K#F#K#F#K#F#K#K#K#K#2#K#K#K#I#K#O#K#O#K#O#K#O#x#O#x#O#Q#O#Q#j#O#j#Q#j#O#j#O#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#y#y#y#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#j#q#j#q#j#q" +"#j#q#j#q#j#q#j#j#k#j#j#j#k#j#j#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.x.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.z.A.z.A.z.A.A#W.z#W.A#W.A#W.A#W.B#W#W#W#W#W#W#L#W#T#W#X#W#X#T#X#T#X#4#X#4#P#X#P#4#P#X#Z#P#Z#P#Z#P#R#Z#M#Z#R#Z#Y#R#Y#R#Y#R#Y#5#J#5#J#Y#1#J#1#J#1#J#1#1#U#1#U#1#3#U#3#U", +"#C#C#C#C#C#6#C#C#C#F#C#F#C#F#C#F#H#F#H#F#H#F#H#F#F#K#H#K#F#K#F#K#t#K#K#K#K#K#K#K#K#x#K#x#K#O#K#O#x#O#x#O#x#O#Q#O#Q#j#Q#j#Q#j#Q#j#Q#j#Q#q#j#q#k#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#z#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k" +"#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.x.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.z.A.z.A.A.A.za#.A#W.A#W.A#W.A#W#W#W#W#V#W#W#W#L#W#L#W#X#W#X#T#X#T#X#T#X#X#P#X#P#X#P#X#Z#P#Z#P#Z#Z#Z#Z#M#Z#M#Z#Y#Z#Y#R#Y#R#Y#R#Y#Y#J#Y#J#Y#J#J#1#J#1#J#1#1#U#1#E#1#3#U#3#U#3#U#A", +"#C#C#6#C#8#C#F#C#F#C#F#p#F#H#F#F#F#H#F#F#F#F#K#F#K#F#K#t#K#t#K#K#K#K#I#K#x#K#I#K#O#K#O#x#O#x#O#x#O#Q#O#Q#O#Q#j#O#j#Q#j#O#j#O#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q" +"#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.x.A.z.A.z.A.za#.z#W.A#W.A#W.A#W.B#W#W#W#W#W#W#W#W#T#W#X#W#X#W#X#T#X#4#X#4#X#4#P#4#P#X#Z#P#Z#P#Z#P#Z#Z#R#Z#R#Z#Y#Z#Y#R#Y#R#Y#5#Y#5#J#Y#J#5#1#J#1#J#1#1#U#1#U#1#3#1a.#U#3#U", +"#9#C#C#C#C#C#C#6#C#8#C#F#C#F#C#F#C#F#H#F#H#F#H#t#H#K#F#K#F#K#F#K#F#K#t#K#K#K#K#x#K#x#K#I#K#Q#K#O#K#O#x#O#x#O#x#O#Q#O#Q#j#Q#j#Q#j#Q#j#j#q#Q#q#j#q#k#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#z#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k#j#k" +"#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.z.A.z.A.za#.Aa#.A#W.A#W.A#Wa##W#W#W#W#W#W#V#W#L#W#X#W#X#W#X#T#X#T#X#X#X#4#P#X#P#X#Z#X#Z#P#Z#P#Z#P#0#Z#R#Z#M#Z#M#Z#Y#R#Y#R#Y#Y#J#5#J#Y#J#Y#1#J#1#J#1#1#U#1#E#1#E#1#3#U#3#U#3a.#A", +"#6#C#6#C#6#C#8#C#F#C#F#C#F#H#F#H#F#F#F#F#t#F#K#F#K#F#K#F#K#t#K#K#K#K#K#K#I#K#I#K#O#K#O#K#O#x#O#x#O#x#O#Q#O#Q#O#Q#j#O#j#Q#j#O#q#O#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q" +"#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.w.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.x.A.z.A.za#.z.A.A#W.z#W.A#W.A#W#W#W#W#W#W#W#W#T#W#X#W#X#W#X#T#X#4#X#4#X#4#P#4#P#X#Z#X#Z#P#Z#P#Z#Z#Z#Z#R#Z#M#Z#R#Z#Y#R#Y#R#Y#R#J#5#J#5#J#Y#1#J#1#J#1#1#U#1#U#1#U#1#3#U#3a.", +"aa#C#9#C#C#C#C#C#C#F#C#F#C#F#C#F#p#F#H#F#H#F#H#F#F#t#H#K#F#K#F#K#t#K#t#K#K#K#K#K#K#x#K#x#K#I#K#Q#K#O#K#O#x#O#x#O#Q#O#Q#O#Q#j#Q#j#Q#j#Q#j#j#q#k#q#j#q#k#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#z#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#j#k" +"#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.u.t.u.t.u.t.u.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.x.A.z.A.za#.Aa#.A#W.A#W.A#W.A#W.A#W#W#W#W#V#W#W#W#X#W#X#W#X#W#X#T#X#4#X#4#X#X#P#X#Z#X#Z#X#Z#P#Z#P#Z#Z#Z#Z#M#Z#M#Z#Y#Z#Y#R#Y#5#Y#5#J#Y#J#Y#1#Y#1#J#1#J#1#1#E#1#U#1#3#1#3#U#3a.#3a.#A", +"#C#C#6#C#6#C#F#C#F#C#F#C#F#C#F#F#F#H#F#F#F#F#K#F#K#F#K#F#K#F#K#K#K#K#2#K#K#K#I#K#I#K#O#K#O#K#O#x#O#x#O#Q#O#Q#j#Q#j#Q#j#O#j#Q#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q" +"#j#q#j#j#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.z.A.z.A.z.A.za#.z#W.A#W.A#Wa##W#W#W#W#W#W#W#W#X#W#4#W#X#W#X#T#X#T#X#4#X#4#P#X#Z#4#Z#X#Z#P#Z#P#Z#Z#Z#Z#R#Z#R#Z#Y#Z#Y#R#Y#R#Y#5#J#5#J#Y#1#5#1#J#1#J#1#1#U#1#U#1#3#U#3#U#3a.", +"aa#C#9#C#C#C#C#6#C#C#C#F#C#F#C#F#C#F#H#F#H#F#H#F#H#F#F#K#H#K#F#K#F#K#t#K#K#K#K#K#K#K#K#x#K#x#K#O#K#Q#x#O#x#O#x#O#x#O#Q#j#Q#j#Q#j#Q#j#Q#j#Q#j#j#q#k#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#z#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#j#k#j#k" +"#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.x.A.za#.A.A.za#.A#W.A#W.A#W.A#W#W#W#W#W#W#W#Wab#W#X#W#X#W#X#W#X#4#X#4#X#X#X#4#P#X#P#X#Z#X#Z#P#Z#Z#Z#Z#0#Z#M#Z#Y#Z#Y#R#Y#R#Y#R#Y#Y#J#5#J#Y#1#Y#1#J#1#J#1#1#U#1#E#1#3#1#3#U#3#U#3a.#A", +"#6#C#C#C#6#C#8#C#F#C#F#C#F#C#F#7#F#F#F#H#F#F#F#F#K#F#K#F#K#t#K#t#K#K#K#K#2#K#K#K#I#K#O#K#O#K#O#K#O#x#O#x#O#Q#O#Q#j#O#j#Q#j#O#j#O#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q" +"#j#q#j#j#k#j#j#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.z.A.z.A.za#.z#W.A#W.z#Wa##W.A#W#W#W#W#W#W#W#W#T#W#X#W#X#W#X#T#X#4#X#4#X#4#P#4#P#X#Z#X#Z#P#Z#P#Z#Z#Z#Z#R#Z#Y#Z#Y#R#Y#R#Y#5#Y#5#J#5#J#5#1#Y#1#J#1#1#1#1#U#1a.#1a.#U#3#U#3a.", +"aa#Caa#C#C#C#C#C#C#6#C#7#C#F#C#F#C#F#C#F#H#F#H#F#H#F#H#F#F#K#F#K#F#K#F#K#t#K#K#K#K#K#K#K#K#x#K#x#K#O#K#Q#x#O#x#O#x#O#x#O#Q#j#Q#j#Q#j#Q#j#Q#j#Q#q#j#q#k#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#j#k#j#k#j#k" +"#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#k.s#j.s.s.s#b.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.v.v.v.v.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.z.A.z.A.za#.Aa#.A#W.A#W.A#Wa##W#W#W#W#W#Wab#W#L#W#X#W#X#W#Xac#X#4#X#4#X#4#X#X#P#X#Z#X#Z#X#Z#Z#Z#Z#Z#Z#R#Z#M#Z#Y#Z#Y#R#Y#R#Y#5#Y#5#J#Y#J#Y#1#J#1#J#1#1#1#1#E#1#E#1#3#U#3#U#3a.#3a.#A", +"#C#9#6#C#6#C#6#C#8#C#F#C#F#C#F#H#F#H#F#F#F#F#t#F#K#F#K#F#K#F#K#t#K#K#K#K#K#K#I#K#x#K#I#K#O#K#O#x#O#x#O#x#O#x#O#Q#O#Q#j#O#j#Q#j#O#j#O#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q" +"#j#j#k#j#j#j#k#j#j#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.w.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.A.x.z.x.A.x.A.x.A.z.A.za#.za#.A#W.z#W.A#W.A#W#W#W#W#W#W#W#W#W#W#X#W#4#W#X#W#X#4#X#4#X#4#X#4#P#X#Z#4#Z#X#Z#P#Z#Z#Z#Z#Z#Z#M#Z#5#Z#Y#R#Y#5#Y#5#Y#5#J#5#J#Y#1#J#1#J#1#1#1#1#U#1#U#1#3#U#3a.#3a.", +"aa#Caa#C#9#C#C#C#C#C#C#F#C#F#C#F#C#F#C#F#7#F#H#F#H#F#F#t#H#K#F#K#F#K#F#K#F#K#K#K#K#K#K#x#K#x#K#I#K#Q#K#O#K#O#x#O#x#O#x#O#Q#O#Q#j#Q#j#Q#j#Q#j#Q#j#Q#q#j#q#k#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#j#k#j#k#j#k#j#k" +"#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.z.A.za#.Aa#.za#.A#W.A#Wa##Wa##W#W#W#W#V#W#W#W#X#W#X#W#X#W#X#T#X#4#X#4#X#X#P#X#Z#X#Z#X#Z#P#Z#P#Z#Z#Z#Z#M#Z#M#Z#Y#Z#Y#R#Y#5#Y#5#Y#Y#J#Y#1#Y#1#J#1#1#1#1#1#1#U#1#3#1#3#U#3a.#3a.#A#3#A", +"#6#C#C#C#6#C#6#C#F#C#F#C#F#C#F#C#F#F#F#H#F#F#F#F#t#F#K#F#K#F#K#F#K#t#K#K#K#K#K#K#I#K#I#K#O#K#O#K#O#x#O#x#O#x#O#Q#O#Q#O#Q#j#O#j#Q#j#O#j#O#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j" +"#k#j#j#j#k#j#j#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.z.A.za#.za#.za#.z#W.A#W.A#Wa##W#W#W#W#W#W#W#W#X#W#4#W#X#W#Xac#X#4#X#4#X#4#X#4#Z#4#Z#X#Z#P#Z#Z#Z#Z#Z#Z#R#Z#R#Z#Y#Z#Y#R#Y#R#Y#5#Y#5#J#Y#1#5#1#J#1#J#1#1#1#1#U#1#3#1a.#U#3a.#3a.", +"aa#Caa#C#9#C#9#C#C#6#C#C#C#F#C#F#C#F#C#F#p#F#H#F#H#F#H#F#F#t#H#K#F#K#F#K#t#K#t#K#K#K#K#K#K#x#K#x#K#I#K#Q#K#O#K#O#x#O#x#O#x#O#Q#O#Q#j#Q#j#Q#j#Q#j#k#j#Q#q#j#q#k#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k" +"#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.q.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.x.A.za#.Aa#.za#.A#W.A#Wa##Wa##Wa##W#W#W#W#W#Wab#W#X#W#X#W#X#W#X#4#X#4#X#X#X#4#Z#X#Z#X#Z#X#Z#P#Z#Z#Z#Z#0#Z#R#Z#Y#Z#Y#Z#Y#R#Y#5#Y#5#Y#5#1#Y#1#Y#1#J#1#J#1#1#1#1#3#1#3#1#3#U#3a.#3a.#Aa.ad", +"#C#9#6#C#C#C#6#C#8#C#F#C#F#C#F#C#F#7#F#F#F#H#F#F#F#F#K#F#K#F#K#F#K#F#K#K#K#K#2#K#K#K#I#K#I#K#O#K#O#K#O#x#O#x#O#x#O#Q#j#Q#O#Q#j#O#j#Q#j#O#q#O#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j" +"#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.za#.za#.za#.za#.A#W.z#Wa##Wa##W#W#W#W#W#Wac#W#4#W#X#W#X#W#X#T#X#4#X#4#X#4#Z#4#Z#X#Z#X#Z#P#Z#Z#Z#Z#Z#Z#R#Z#Y#Z#5#Z#Y#R#Y#5#Y#5#J#5#1#5#1#Y#1#J#1#1#1#1#U#1a.#1a.#1#3#U#3a.#3a.", +"aa#Caa#Caa#C#C#C#C#C#C#6#C#7#C#F#C#F#C#F#C#F#H#F#H#F#H#F#H#F#F#K#H#K#F#K#F#K#t#K#t#K#K#K#K#K#K#x#K#x#K#O#K#Q#x#O#K#O#x#O#x#O#x#O#Q#O#Q#j#Q#j#Q#j#Q#j#k#j#k#q#j#q#k#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k" +"#j#k#j#k#j.s#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.v.v.v.v.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.xa#.za#.za#.Aa#.A#Wa##Wa##Wa##W#W#W#W#W#Wab#Wac#W#X#W#X#W#Xac#X#4#X#4#X#4ae#X#Z#X#Z#X#Z#X#Z#Z#Z#Z#Z#Z#Z#Z#Y#Z#Y#Z#Y#Z#Y#R#Y#5#Y#5#J#Y#J#Y#1#Y#1#J#1#1#1#1#E#1#U#1#3#1#3#U#3a.#3a.ad#3ad", +"#C#9#C#9#6#C#6#C#6#C#8#C#F#C#F#C#F#p#F#H#F#F#F#H#F#F#F#F#K#F#K#F#K#t#K#t#K#K#K#K#2#K#K#K#I#K#O#K#O#K#O#K#O#x#O#x#O#x#O#Q#j#Q#j#Q#j#O#j#Q#j#j#q#O#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j" +"#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.w.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.A.x.z.x.A.x.A.xa#.za#.za#.za#.A#W.z#Wa##Wa##Wa##W#W#W#Wac#Wac#W#X#W#4#W#X#W#X#4#X#4#X#4#X#4#P#X#Z#4#Z#X#Z#P#Z#Z#Z#Z#Z#Z#5#Z#5#Z#Y#Z#Y#5#Y#5#Y#5#J#5#J#Y#1#5#1#1#1#1#1#1#U#1a.#1#3#1#3a.#3a.#3a.", +"aa#Caa#Caa#C#9#C#C#C#C#C#C#6#C#8#C#F#C#F#C#F#C#F#H#F#H#F#H#t#H#t#F#K#F#K#F#K#F#K#t#K#K#K#K#K#K#K#K#x#K#x#K#O#K#Q#x#O#x#O#x#O#x#O#Q#j#Q#O#Q#j#Q#j#Q#j#Q#j#k#j#k#q#j#q#k#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j#k" +"#j#k#j.s#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.x.x.y.x.A.x.A.x.A.xa#.za#.za#.Aa#.za#a##W.A#Wa##Wa##W#W#W#Wab#Wac#W#X#W#X#W#Xac#Xac#X#4#X#4#X#X#X#4#Z#X#Z#X#Zae#Z#Z#Z#Z#Z#Z#0#Z#Y#Z#Y#Z#Y#R#Y#5#Y#5#Y#Y#J#5#1#Y#1#Y#1#1#1#1#1#1#U#1#3#1#3#1#3a.#3a.#3a.#Aa.ad", +"#Caa#6#9#C#C#6#C#6#C#8#C#8#C#F#C#F#C#F#H#F#H#F#F#F#F#t#F#K#F#K#F#K#F#K#t#K#K#K#K#K#K#2#K#K#K#I#K#O#K#O#x#O#K#O#x#O#x#O#Q#O#Q#j#Q#j#Q#j#O#j#Q#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j" +"#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.y.x.z.x.A.x.A.xa#.x.A.za#.za#.za#.z#Wa##Wa##Wa##W#W#W#Wac#Wac#Wac#W#4#W#X#W#Xac#X#4#X#4#X#4#X#4#Z#4#Z#X#Z#X#Z#Z#Z#Z#Z#Z#Z#Z#5#Z#Y#Z#Y#R#Y#5#Y#5#Y#5#J#5#1#5#1#Y#1#J#1#1#1#1#U#1a.#1a.#U#3a.#3a.#3a.", +"aa#9aa#Caa#Caa#C#9#C#C#C#C#C#C#F#C#F#C#F#C#F#C#F#7#F#H#F#H#F#F#t#H#K#F#K#F#K#F#K#F#K#t#K#K#K#K#K#K#K#K#x#K#x#K#O#K#Q#x#O#x#O#x#O#x#O#Q#j#Q#j#Q#j#Q#j#Q#j#Q#j#k#j#k#q#j#q#k#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k" +"#j.s#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.y.x.x.x.y.x.A.x.A.x.A.xa#.xa#.za#.Aa#.za#.A#W.A#Wa##Wa##Wa##W#Wac#Wac#Wab#W#X#W#Xac#Xac#X#4#X#4#X#X#X#4#Z#X#Z#X#Z#X#Z#P#Z#Z#Z#Z#0#Z#R#Z#Y#Z#Y#Z#Y#5#Y#5#Y#5#Y#5#1#Y#1#Y#1#J#1#1#1#1#1#1#3#1a.#1#3#U#3a.#3a.#3a.ad#3ad", +"#Caa#C#9#6#C#C#C#6#C#6#C#F#C#F#C#F#C#F#C#F#F#F#H#F#F#F#F#t#F#K#F#K#F#K#F#K#t#K#K#K#K#K#K#I#K#x#K#I#K#O#K#O#x#O#x#O#x#O#x#O#Q#O#Q#j#O#j#Q#j#O#j#Q#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j" +"#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.x.x.A.x.A.xa#.x.A.za#.za#.za#.za#a##Waf#Wa##Wa##W#W#W#W#W#Wac#W#4#W#X#W#Xac#X#4#X#4#X#4#X#4ae#4#Z#X#Z#X#Zae#Z#Z#Z#Z#Z#Z#R#Z#Y#Z#5#Z#Y#R#Y#5#Y#5#Y#5#1#5#1#Y#1#J#1#1#1#1#1#1a.#1a.#1#3#U#3a.#3a.#Aa.", +"aa#Caa#Caa#Caa#C#9#C#C#C#C#6#C#C#C#F#C#F#C#F#C#F#p#F#H#F#H#F#H#F#F#t#H#K#F#K#F#K#t#K#t#K#K#K#K#K#K#x#K#x#K#I#K#Q#K#O#K#O#x#O#x#O#x#O#x#O#Q#j#Q#j#Q#j#Q#j#Q#j#Q#j#j#q#k#q#j#q#k#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s" +"#j.s#j.s#j.s#j.s#k.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.q.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.v.v.v.v.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.y.x.A.x.A.xa#.xa#.xa#.za#.za#.Aa#.A#Wa##Wa##Wa##Wa#ac#W#W#Wab#Wac#W#X#W#X#W#Xac#X#4#X#4#X#4ae#X#Z#X#Z#X#Z#X#Z#Z#Z#Z#Z#Z#Z#Z#Y#Z#Y#Z#Y#Z#Y#5#Y#5#Y#5ag#Y#1#Y#1#Y#1#J#1#1#1#1#1#1a.#1#3#1#3#U#3a.#3a.ad#3ada.ad", +"#Caa#Caa#C#9#6#C#6#C#6#C#8#C#F#C#F#C#F#C#F#7#F#F#F#H#F#F#F#F#K#F#K#F#K#F#K#F#K#t#K#K#2#K#K#K#I#K#I#K#O#K#O#K#O#x#O#x#O#x#O#x#O#Q#O#Q#j#O#j#Q#j#O#j#Q#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j" +"#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.A.x.z.x.A.x.A.xa#.za#.za#.za#af#W.z#Wa##Wa##Wa##W#W#W#Wac#Wac#W#X#W#4ac#Xac#X#4#X#4#X#4ae#4#Z#X#Z#4#Zae#Z#Z#Z#Z#Z#Z#Z#Z#5#Z#5#Z#Y#Z#Y#5#Y#5#Y#5ag#5#1#Y#1#5#1#1#1#1#1#1ah#1a.#1#3#1a.a.#3a.#3a.ada.", +"aa#9aa#Caa#Caa#C#9#C#C#C#C#C#C#6#C#7#C#F#C#F#C#F#C#F#H#F#H#F#H#F#H#F#F#K#H#K#F#K#F#K#t#K#t#K#K#K#K#K#K#x#K#x#K#I#K#Q#K#O#K#O#x#O#x#O#x#O#x#O#Q#j#Q#j#Q#j#Q#j#Q#j#Q#j#j#q#k#q#j#q#k#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s" +"#j.s#j.s#j.s#k.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.x.x.y.x.A.xa#.xa#.xa#.za#.za#.Aa#.za#a##Wa##Wa##Wa##W#W#W#Wab#Wac#Wab#W#X#W#Xac#Xac#X#4#X#4ae#Xae#4#Z#X#Z#X#Zae#Z#Z#Z#Z#Z#Zai#Z#5#Z#Y#Z#Y#Z#Y#5#Y#5#Y#Y#J#5#1#Y#1#Y#1#1#1#1#1#1#1#1#3#1#3#1#3a.#3a.#3a.#Aa.ad#3ad", +"#Caa#Caa#C#9#C#9#6#C#6#C#6#C#8#C#F#C#F#C#F#p#F#H#F#F#F#H#F#F#F#F#K#F#K#F#K#t#K#F#K#K#K#K#2#K#K#K#I#K#I#K#O#K#O#K#O#x#O#x#O#x#O#Q#O#Q#O#Q#j#O#j#Q#j#O#j#Q#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#w#q#z#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j" +"#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.y.x.z.x.A.x.A.xa#.xa#.za#.za#.za#.z#Wa##Wa##Wa##W#W#W#Wac#Wac#Wac#W#4ac#Xac#Xac#X#4#X#4ae#4ae#4#Z#4#Z#X#Z#X#Z#Z#Z#Z#Z#Zaj#Z#5#Z#Y#Z#5aj#Y#5#Y#5#Y#5#J#5#1#5#1#Y#1#1#1#1#1#1#U#1a.#1a.ah#3a.#3a.aka.ada.", +"aa#9aa#9aa#Caa#Caa#C#9#C#C#C#C#C#C#6#C#8#C#F#C#F#C#F#C#F#H#F#H#F#H#F#H#F#F#K#H#K#F#K#F#K#t#K#t#K#K#K#K#K#K#x#K#x#K#I#K#Q#K#O#K#O#x#O#x#O#x#O#x#O#Q#j#Q#j#Q#j#Q#j#Q#j#Q#j#k#j#k#q#j#q#k#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s" +"#j.s#j.s#j.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.u.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.y.x.x.x.y.x.A.xa#.xa#.xa#.xa#.za#.Aa#.za#a##Wa##Wa##Wa##Wa##W#Wac#Wac#Wab#W#X#W#Xac#Xac#X#4#X#4ae#4ae#4ae#X#Z#X#Zae#Zae#Z#Z#Z#Zaj#Zaj#Z#Y#Z#Y#Z#Y#5#Y#5#Y#5#Y#5#1#Y#1#Y#1ag#1#1#1#1#1#1#3#1a.#1#3ah#3a.#3a.#3a.ad#3ad#3ad", +"#9aa#Caa#Caa#6#C#C#C#6#C#6#C#8#C#F#C#F#C#F#C#F#H#F#H#F#F#F#F#t#F#K#F#K#F#K#F#K#t#K#t#K#K#K#K#2#K#K#K#I#K#I#K#O#K#O#K#O#x#O#x#O#x#O#Q#j#Q#O#Q#j#O#j#Q#j#O#j#O#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j#k#j" +"#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.p.p.r.p.p.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.x.x.A.x.A.xa#.xa#.za#.za#.za#.za#a##Waf#Wa##Wa##W#Wac#Wac#Wac#W#4#W#X#W#Xac#Xac#X#4ae#4ae#4ae#4#Z#X#Z#4#Zae#Z#Z#Z#Zaj#Zaj#Z#5#Z#5aj#Y#5#Y#5#Y#5#Y#5#1#5#1#Y#1#5#1#1#1#1#1#1a.#1a.#1#3#1#3a.#3a.#3a.ada.", +"alaaaa#9aa#9aa#Caa#C#9#C#9#C#C#6#C#C#C#F#C#F#C#F#C#F#C#F#7#F#H#F#H#F#H#t#H#t#F#K#F#K#F#K#F#K#t#K#K#K#K#K#K#K#K#x#K#x#K#I#K#Q#x#O#K#O#x#O#x#O#x#O#x#O#Q#j#Q#j#Q#j#Q#j#Q#j#Q#j#k#j#k#q#j#q#k#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s" +"#j.s#j.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.y.xa#.xa#.xa#.xa#.xa#.za#.za#a#a#a##Wa##Wa##Wa##Wa#ac#Wac#Wab#Wac#W#Xac#Xac#Xac#X#4ae#4#X#4ae#X#Z#X#Zae#Zae#Z#Z#Z#Z#Z#Z#Z#Z#Y#Z#Y#Z#Yaj#Y#5#Y#5#Y#5ag#Y#1#5#1#Y#1ag#1#1#1#1ah#1a.#1#3#1#3a.#3a.#3a.aka.ada.adakad", +"#9aa#9aa#Caa#C#9#6#C#C#C#6#C#6#C#F#C#F#C#F#C#F#C#F#F#F#H#F#F#F#F#t#F#K#F#K#F#K#F#K#t#K#K#K#K#K#K#2#K#K#K#I#K#I#K#O#K#O#K#O#x#O#x#O#x#O#Q#j#Q#j#Q#j#O#j#Q#j#O#j#O#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#z#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j#k#j#k#j" +".s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.A.x.z.xa#.xa#.xa#.za#.za#.za#af#Waf#Wa##Wa##Wa#ac#Wac#Wac#Wac#W#X#W#4ac#Xac#X#4#X#4#X#4ae#4#Z#X#Z#4#Zae#Z#Z#Z#Z#Z#Z#Z#Z#5#Z#5#Z#Y#Z#Y#5#Y#5#Y#5ag#5#1#5#1#5#1#1#1#1#1#1ah#1a.#1a.#1a.a.#3a.#3a.aka.ada.", +"aaaaal#9aa#Caa#Caa#Caa#C#C#C#C#C#C#6#C#C#C#F#C#F#C#F#C#F#p#F#H#F#H#F#H#F#F#t#H#K#F#K#F#K#F#K#F#K#t#K#K#K#K#K#K#K#K#x#K#x#K#O#K#Q#x#O#x#O#x#O#x#O#x#O#x#O#Q#j#Q#j#Q#j#Q#j#Q#j#Q#j#k#j#k#q#j#q#k#q#j#q#k#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s" +"#j.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.o.q.q.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.y.xam.xa#.xa#.xa#.xa#.za#.za#a#a#afa#a##Wa##Wa##Wa#ac#Wac#Wab#Wac#Wabac#Xac#Xac#Xac#X#4#X#4ae#Xae#4#Z#X#Z#X#Zae#Z#Z#Z#Z#Z#Zai#Z#5#Z#Yaj#Yaj#Y#5#Y#5ag#5ag#5#1#Y#1#Y#1#1#1#1#1#1#1#1#3#1#3#1#3a.#3a.#3a.aka.ad#3adakad", +"#9aa#Caa#Caa#Caa#C#9#6#C#6#C#6#C#8#C#F#C#F#C#F#C#F#7#F#F#F#H#F#F#F#F#t#F#K#F#K#F#K#F#K#t#K#K#K#K#K#K#I#K#x#K#I#K#O#K#O#x#O#K#O#x#O#x#O#x#O#Q#j#Q#j#Q#j#O#j#Q#j#O#j#Q#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j#k#j#k#j.s#j" +".s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.w.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.y.x.z.xa#.xa#.xa#.xa#.za#.za#afa#af#Wa##Wa##Wa#ac#Wac#Wac#Wac#Wac#W#4ac#Xac#Xac#X#4#X#4ae#4ae#4#Z#4#Zae#Zae#Z#Z#Z#Z#Z#Zaj#Z#5#Z#Y#Z#5aj#Y#5#Y#5ag#5ag#5#1#5#1ag#1#1#1#1#1#1ah#1a.#1a.ah#3a.#3a.aka.ada.ada.", +"anaaaaaaaa#9aa#Caa#Caa#C#9#C#C#C#C#C#C#6#C#7#C#F#C#F#C#F#C#F#H#F#H#F#H#F#H#F#F#t#H#K#F#K#F#K#t#K#t#K#t#K#K#K#K#x#K#K#K#x#K#x#K#O#K#Q#x#O#x#O#x#O#x#O#x#j#x#O#Q#j#Q#j#Q#j#Q#j#Q#j#Q#j#k#j#k#q#j#q#k#q#j#q#k#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s" +"#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.x.xam.xa#.xa#.xa#.xa#.xa#.za#a#a#afa#a##Wa##Wa##Wa#aca#ac#Wac#Wac#Wabac#Xac#Xac#Xac#Xac#X#4ae#4ae#4ae#X#Z#X#Zae#Zae#Z#Z#Z#Zaj#Zaj#Z#Y#Z#Y#Z#Yaj#Y#5#Y#5#Y#5#1#Y#1#Y#1ag#1#1#1#1#1#1ah#1a.#1#3ah#3a.#3a.#3a.ad#3ada.adakad", +"#9aa#9aa#Caa#Caa#C#9#C#9#6#C#6#C#6#C#8#C#F#C#F#C#F#C#F#7#F#F#F#H#F#F#F#F#K#F#K#F#K#F#K#F#K#t#K#K#K#K#K#K#I#K#x#K#I#K#O#K#O#x#O#x#O#x#O#x#O#x#O#Q#j#Q#j#Q#j#O#j#Q#j#O#j#Q#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#z#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j#k#j#k#j.s#j.s#j" +".s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.x.xa#.xa#.xa#.xa#.za#.za#afa#afa#a##Waf#Wa#aca#ac#Wac#Wac#Wac#W#4ac#Xac#4ac#Xac#X#4ae#4ae#4ae#4#Zae#Zao#Zae#Z#Z#Z#Zaj#Zaj#Z#5#Z#5aj#Yaj#Y#5#Y#5#Y#5#1#5#1ag#1ap#1#1#1#1#1#1a.#1a.ah#3aha.a.#3a.aka.ada.adaq", +"alaaalaaaa#9aa#9aa#Caa#Caa#C#9#C#C#C#C#C#C#6#C#8#C#F#C#F#C#F#C#F#H#F#H#F#H#F#H#F#F#t#H#K#F#K#F#K#t#K#t#K#t#K#K#K#K#x#K#x#K#x#K#x#K#O#K#Q#x#O#x#O#x#O#x#O#x#j#x#O#Q#j#Q#j#Q#j#Q#j#k#j#Q#j#k#j#k#q#j#q#k#q#j#q#k#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#q#k#q#j#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s" +"#k.s#j.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.u.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.y.x.x.xam.xam.xa#.xa#.xa#.xa#.za#afa#afa#a#a#a##Wa##Wa#aca#aca#ac#Wac#Wabacacac#Xac#Xac#Xac#X#4ae#4ae#4ae#X#Z#X#Zae#Zae#Z#Z#Z#Zaj#Zaj#Z#Y#Z#Y#Z#Yaj#Y#5#Y#5#Y#5ag#Y#1#5#1ag#1ag#1#1#1#1ah#1a.#1#3ah#3ah#3a.#3a.aka.ada.adakadadad", +"aaaa#9aa#9aa#Caa#Caa#6#C#C#C#6#C#6#C#8#C#8#C#F#C#F#C#F#H#F#H#F#F#F#H#F#F#F#F#K#F#K#F#K#F#K#F#K#t#K#K#K#K#K#K#I#K#x#K#I#K#O#K#O#x#O#x#O#x#O#x#O#x#O#Q#j#Q#j#Q#j#O#j#Q#j#O#j#Q#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#j#j#k#j#j#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j" +".s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.t.v.w.v.w.v.v.v.w.v.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.x.xa#.xa#.xa#.xa#.xa#.za#afa#afa#a##Waf#Wa#aca#aca#ac#Wac#Wac#Wacac#Xac#4ac#Xac#X#4ae#4ae#4ae#4#Zao#Zao#Zae#Zae#Z#Zaj#Zaj#Z#5#Z#5aj#Yaj#Y#5#Y#5#Y#5ag#5#1#5#1#5#1ag#1#1#1#1ah#1a.#1a.#1a.ah#3a.#3a.aka.adaqadaq", +"anaaaaaaalaaaa#9aa#9aa#Caa#C#9#C#9#C#C#C#C#C#C#F#C#F#C#F#C#F#C#F#C#F#H#F#H#F#H#F#H#F#F#K#H#K#F#K#F#K#t#K#t#K#K#K#K#K#K#x#K#x#K#x#K#x#K#O#K#Q#x#O#x#O#x#O#x#O#x#j#x#O#Q#j#Q#j#Q#j#Q#j#k#j#Q#j#k#j#k#j#j#q#k#q#j#q#k#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#q#k#j#j#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#k.s" +"#j.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.v.v.v.v.v.v.v.x.v.x.v.x.v.x.x.x.x.x.xam.xam.xa#.xa#.xa#.xa#.xa#afa#afa#a#a#afa#a##Wa#aca#aca#ac#Wac#Wabacacacabac#Xac#Xac#Xacae#4ae#4ae#Xae#4#Zae#Zae#Zae#Z#Zaj#Zaj#Zai#Z#5#Z#Yaj#Yaj#Y#5#Y#5ag#5ag#5#1#Y#1ag#1#1#1#1ah#1ah#1#3#1a.#1#3a.#3a.aka.aka.adakadakadadad", +"aaaa#9aa#9aa#9aa#Caa#C#9#6#C#C#C#6#C#6#C#F#C#F#C#F#C#F#C#F#H#F#H#F#F#F#F#t#F#t#F#K#F#K#F#K#t#K#t#K#K#K#K#2#K#K#K#I#K#x#K#I#K#O#K#O#x#O#x#O#x#O#x#O#x#O#Q#j#Q#j#Q#j#O#j#Q#j#j#j#Q#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#k#j#j#j#k#j#j#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j" +".s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.xam.xaf.xa#.xa#.xa#.za#afa#afa#afa#af#Wa#aca##Wa#ac#Wac#Wac#Wacacacac#4ac#Xac#Xacae#4ae#4ae#4ae#4#Z#4#Zae#Zae#Z#Zaj#Zaj#Zaj#Z#5#Z#Yaj#5aj#Y#5#Y#5ag#5ag#5#1#5#1ag#1#1#1#1ah#1ah#1a.#1a.ah#3a.#3a.aka.aka.ada.adak", +"anaaanaaaaaaal#9aa#Caa#Caa#Caa#C#9#C#9#C#C#6#C#C#C#F#C#F#C#F#C#F#C#F#7#F#H#F#H#F#H#t#H#t#F#K#H#K#F#K#F#K#t#K#t#K#K#K#K#K#K#x#K#x#K#x#K#x#K#O#K#Q#x#O#x#O#x#O#x#O#x#j#x#j#Q#j#Q#j#Q#j#Q#j#k#j#Q#j#k#j#k#j#j#q#k#q#j#q#k#q#j#q#k#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#k.s#j.s" +".s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.xam.xar.xam.xa#.xa#.xa#.xa#ara#afa#a#a#afa#a##Wa#aca#aca#aca#ac#Wacacac#Wabac#Xac#Xac#Xacae#4ae#4ae#4ae#4aeae#Zae#Zae#Zaeaj#Zaj#Zaj#Zaj#Z#Yaj#Yaj#Yaj#Y#5ag#5ag#5#1#Y#1#Y#1ag#1#1#1#1ah#1ah#1a.#1#3ah#3a.#3a.aka.ak#3ada.adakadadas", +"aaaaaaaa#9aa#Caa#Caa#Caa#C#9#6#C#C#C#6#C#6#C#F#C#F#C#F#C#F#C#F#H#F#H#F#F#F#F#t#F#K#F#K#F#K#F#K#t#K#t#K#K#K#K#2#K#K#K#I#K#I#K#I#K#O#K#O#x#O#x#O#x#O#x#O#x#O#Q#j#Q#j#Q#j#O#j#Q#j#j#j#Q#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#k#j#j#j#k#j#j#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j" +".s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.w.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.v.x.x.x.x.x.xam.xaf.xa#.xa#.xa#.xa#afa#afa#afa#afa#a#acaf#Wa#aca#ac#Wac#Wacacacac#4ac#Xac#4acaeacae#4ae#4ae#4ae#4#Zae#Zao#Zae#Z#Z#Z#Zaj#Zaj#Z#5#Z#5aj#Yaj#Y#5ag#5ag#5#1#5#1ag#1ap#1#1ah#1ah#1ah#1a.ah#3aha.a.aka.aka.ada.adaqadaq", +"anaaanaaanaaaaaaaa#9aa#Caa#Caa#Caa#C#C#C#C#C#C#6#C#C#C#F#C#F#C#F#C#F#p#F#H#F#H#F#H#F#H#t#H#t#F#K#H#K#F#K#F#K#t#K#t#K#K#K#K#K#K#x#K#x#K#x#K#x#K#O#K#Q#x#O#x#O#x#O#x#O#x#j#x#j#Q#j#Q#j#Q#j#Q#j#k#j#Q#j#k#j#k#j#k#j#k#q#j#q#k#q#j#q#k#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#q#k#q#j#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#k.s#j.s.s.s" +".s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.xam.xar.xam.xa#.xa#.xa#.xa#ara#afa#afa#afa#a#a#a#aca#aca#aca#ac#Wac#Wac#Wabacacac#Xac#Xacaeacae#4ae#4ae#4aeae#Zae#Zae#Zae#Z#Z#Z#Zaj#Zaj#Z#Yaj#Yaj#Yaj#Y#5ag#5ag#5ag#Y#1#5#1ag#1ag#1#1#1#1ah#1a.#1#3ah#3ah#3a.#3a.aka.ada.adakadakadadas", +"aaaaaaaaaaaa#9aa#Caa#Caa#C#9#C#9#6#C#6#C#6#C#8#C#F#C#F#C#F#C#F#7#F#F#F#H#F#F#F#F#t#F#K#F#K#F#K#F#K#t#K#t#K#K#K#K#2#K#K#K#I#K#I#K#I#K#O#K#O#x#O#x#O#x#O#x#O#x#O#Q#j#Q#j#Q#j#O#j#Q#j#j#j#Q#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#j#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j" +".s#j.s#b.s#b.s.s.s#b.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.v.x.x.x.x.x.xar.xar.xa#.xa#.xa#.xa#ara#afa#afa#afa#a#acaf#Wa#aca#aca#ac#Wacacacacacac#Xac#4acaeacae#4ae#4ae#4ae#4#Zao#Zao#Zae#Zae#Z#Zaj#Zaj#Zaj#Z#5aj#Yaj#Y#5ag#5ag#5ag#5#1ap#1ap#1ag#1#1#1#1ah#1a.aha.aha.ah#3a.aka.aka.adaqadaqadad", +"ataaanaaalaaalaaaa#9aa#9aa#Caa#Caa#C#9#C#C#C#C#C#C#6#C#7#C#F#C#F#C#F#C#F#p#F#H#F#H#F#H#F#H#t#H#t#F#K#F#K#F#K#F#K#t#K#t#K#K#K#K#K#K#x#K#x#K#x#K#x#K#O#K#Q#x#O#x#O#x#O#x#O#x#j#x#j#Q#j#Q#j#Q#j#Q#j#k#j#Q#j#k#j#k#j#k#j#k#j#j#q#k#q#j#q#k#q#j#q#k#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#j#j#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#k.s#b.s.s.s.s.s" +".s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.o.q.q.q.o.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.xar.xar.xam.xam.xa#.xa#.xa#ara#ara#afa#afa#a#a#a#aca#aca#aca#aca#ac#Wac#Wabacacac#Xac#Xacaeacaeacae#4ae#4aeaeaeao#Zae#Zae#Zae#Z#Zaj#Zaj#Zaiaj#5aj#Yaj#Yaj#Y#5#Y#5ag#5ag#5#1ag#1ag#1ag#1#1ah#1ah#1#3aha.ah#3ah#3a.aka.aka.adakadakadadadadas", +"aaauaaaaaaaa#9aa#9aa#Caa#Caa#C#9#C#9#6#C#6#C#6#C#8#C#F#C#F#C#F#C#F#7#F#F#F#H#F#F#F#F#t#F#K#F#K#F#K#F#K#t#K#t#K#K#K#K#2#K#K#K#I#K#I#K#I#K#O#K#O#x#O#x#O#x#O#x#O#x#O#Q#j#Q#j#Q#j#O#j#Q#j#j#j#Q#j#j#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#j#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j" +".s#b.s#b.s.s.s#b.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.v.x.x.x.xar.xar.xa#.xaf.xa#.xa#ara#afa#afa#afa#afa#af#Wa#aca#aca#ac#Wacacacacacacacac#4ac#Xac#Xacae#4ae#4ae#4aeao#Zao#Zae#Zae#Z#Zaj#Zaj#Zaj#Z#5aj#Yaj#5aj#Y#5#Y#5ag#5ag#5#1ap#1ag#1#1#1#1ah#1ah#1a.#1a.ah#3a.#3a.aka.aka.adaqadakadav", +"ataaanaaanaaaaaaalaaaa#9aa#9aa#Caa#Caa#C#9#C#C#C#C#C#C#6#C#7#C#F#C#F#C#F#C#F#p#F#H#F#H#F#H#F#F#t#H#K#F#K#F#K#F#K#F#K#t#K#t#K#K#K#K#K#K#x#K#x#K#x#K#x#K#O#K#Q#x#O#x#O#x#O#x#O#x#j#x#j#x#j#Q#j#Q#j#Q#j#Q#j#Q#j#k#j#k#j#k#j#k#j#j#j#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#k.s#j.s#k.s#b.s.s.s.s.s.s.s" +".s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.v.v.v.v.v.v.v.x.v.x.v.x.v.x.var.xar.xam.xam.xam.xa#.xa#ara#ara#afa#afa#a#a#afawa#aca#aca#aca#aca#ac#Wacacacacabac#Xacaeacaeacae#4ae#4aeaoae#4aeae#Zae#Zae#Zaeaj#Zaj#Zaj#Zaj#Z#Yaj#Yaj#Yaj#Y#5ag#5ag#5agag#1ag#1ag#1#1ah#1ah#1ah#1a.ah#3ah#3a.aka.aka.akaqadaqadakadadasadas", +"aaauaaauaaaaaaaa#9aa#9aa#Caa#C#9#6#C#C#C#6#C#6#C#8#C#8#C#F#C#F#C#F#p#F#H#F#F#F#H#F#F#F#F#t#F#K#F#K#F#K#F#K#t#K#t#K#K#K#K#I#K#K#K#I#K#I#K#I#K#O#K#O#x#O#x#O#x#O#x#O#x#O#x#j#Q#j#Q#j#Q#j#Q#j#j#j#Q#j#j#j#k#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#j#j#k#j#j#j#k#j#j#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b" +".s#b.s.s.s#b.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.var.x.x.xar.xar.xam.xaf.xa#.xa#ara#ara#afa#afa#afa#af#Wa#acafaca#aca#acacac#Wacacacac#4ac#Xac#Xacaeacae#4ae#4aeaoaeao#Zae#Zao#Zaeaj#Zaj#Zaj#Zajaj#5aj#5aj#Yaj#Y#5ag#5ag#5#1#5#1ag#1ap#1#1ah#1ah#1ah#1a.ah#3aha.a.aka.aka.ada.adaqadaqadad", +"ataaataaanaaanaaaaaaalaaaa#9aa#9aa#Caa#Caa#C#9#C#C#C#C#C#C#B#C#8#C#F#C#F#C#F#C#F#H#F#H#F#H#F#H#F#F#t#H#K#F#K#F#K#t#K#F#K#t#K#t#K#K#K#K#K#K#x#K#x#K#x#K#x#K#O#K#Q#x#O#x#O#x#O#x#O#x#j#x#j#x#j#Q#j#Q#j#Q#j#Q#j#Q#j#k#j#k#j#k#j#k#j#k#j#k#j#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#k.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s" +".s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.var.xar.xam.xar.xam.xa#.xa#ara#ara#ara#afa#a#a#afawa#awa#aca#aca#aca#ac#Wacacacacabacacacaeac#Xacaeacae#4ae#4ae#4aeae#Zae#Zae#Zaeaj#Zaj#Zaj#Zaj#Z#Yaj#Yaj#Yaj#Y#5ag#5ag#5ag#Y#1ap#1ag#1agah#1ah#1ah#1ah#1#3ah#3ah#3a.aka.aka.ada.adakadakasadasadas", +"aaanaaaaaaaaaaaa#9aa#9aa#Caa#Caa#C#9#6#C#C#C#6#C#6#C#F#C#F#C#F#C#F#C#F#p#F#H#F#F#F#H#F#F#F#F#K#F#K#F#K#F#K#F#K#t#K#t#K#K#K#K#I#K#x#K#I#K#I#K#I#K#O#K#O#x#O#x#O#x#O#x#O#x#O#x#j#Q#j#Q#j#Q#j#Q#j#j#j#Q#j#j#j#k#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b" +".s.s.s#b.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.var.v.x.xar.xar.xam.xaf.xa#.xa#ara#ara#afa#afa#afa#afa#a#acafaca#aca#acacac#Wacacacacacac#Xac#4acaeacae#4ae#4aeaoaeao#Zae#Zao#Zaeaj#Zaj#Zaj#Zajaj#5aj#5aj#Yaj#Y#5ag#5ag#5ag#5#1ap#1ap#1agah#1ah#1ah#1a.aha.aha.ahaka.aka.aka.adaqadaqadadasad", +"atauataaanaaanaaanaaaaaaal#9aa#Caa#Caa#Caa#C#9#C#9#C#C#C#C#C#C#F#C#F#C#F#C#F#C#F#C#F#H#F#H#F#H#F#H#F#F#t#H#K#F#K#F#K#t#K#t#K#t#K#t#K#K#K#K#K#K#x#K#x#K#x#K#x#K#I#K#Q#x#O#x#O#x#O#x#O#x#j#x#j#x#j#x#j#Q#j#Q#j#Q#j#Q#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#j#j#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#k.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.s" +".s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.var.var.xam.xar.xam.xam.xa#ara#ara#ara#afa#afa#afawa#awa#aca#aca#aca#aca#acacacacabacacac#Xac#Xacaeacaeacae#4ae#4aeaeaeao#Zae#Zaeajaeaj#Zaj#Zaj#Zaiaj#5aj#Yaj#Yajag#5ag#5ag#5ag#5#1ag#1ag#1ag#1#1ah#1ah#1#3aha.ah#3ah#3a.aka.aka.adakadaqadadasadasadas", +"aaauaaanaaaaaaaaaaaa#9aa#Caa#Caa#Caa#C#9#6#C#C#C#6#C#6#C#F#C#F#C#F#C#F#C#F#H#F#H#F#F#F#H#t#F#F#F#K#F#K#F#K#F#K#F#K#t#K#t#K#K#K#K#I#K#x#K#I#K#I#K#I#K#O#K#O#x#O#x#O#x#O#x#O#x#O#x#j#Q#j#Q#j#Q#j#Q#j#O#j#Q#j#j#j#k#j#j#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#j#j#k#j#j#j#k#j#j#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s" +".s#b.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.w.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.var.v.x.xar.xar.xar.xar.xa#.xa#ara#ara#ara#afa#afa#afa#afacafaca#aca#aca#ac#Wacacacacacac#4ac#4acaeacaeacae#4aeaoaeaoaeao#Zao#Zaeajaeaj#Zaj#Zajajajaj#5aj#Yaj#5ajag#5ag#5ag#5agap#1ap#1ag#1agah#1ah#1ahaha.aha.ah#3ahaka.aka.akaqadaqadakasavasad", +"ataaataaataaanaaanaaalaaaaaaaa#9aa#Caa#Caa#Caa#C#C#C#C#C#C#6#C#C#C#F#C#F#C#F#C#F#C#F#C#F#H#F#H#F#H#F#H#F#F#t#H#K#F#K#F#K#t#K#t#K#t#K#t#K#K#K#K#K#K#x#K#x#K#x#K#x#K#I#K#Q#x#O#x#Q#x#O#x#O#x#j#x#O#x#j#x#j#Q#j#Q#j#Q#j#Q#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#j#j#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#k.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.s.s.s" +".s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.v.v.x.var.v.x.var.var.xar.xar.xam.xam.xa#ara#ara#ara#ara#afa#afawa#awafawa#aca#aca#aca#acacacacacacacacabac#Xacaeacaeacae#4ae#4aeaeaeao#Zae#Zaeajaeajaeaj#Zaj#Zajajajaj#Yaj#Yajagajag#5ag#5ag#5agag#1ag#1ag#1#1ah#1ah#1ahaha.ah#3ah#3a.aka.aka.akaqadaqadakadadasadasadax", +"aaataaauaaanaaaaaaaa#9aa#9aa#Caa#Caa#C#9#C#9#6#C#C#C#6#C#6#C#F#C#F#C#F#C#F#C#F#H#F#H#F#F#F#H#t#F#t#F#K#F#K#F#K#t#K#F#K#t#K#t#K#K#K#K#I#K#x#K#I#K#x#K#I#K#O#K#O#x#O#x#O#x#O#x#O#x#O#x#j#x#j#Q#j#Q#j#Q#j#Q#j#Q#j#j#j#k#j#j#j#k#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b" +".s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.o.q.q.q.o.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.var.var.var.xar.xar.xar.xam.xafara#ara#ara#afa#afa#afa#afawafaca#aca#aca#aca#acacacacacacacac#4acaeacaeacae#4aeaoaeaoaeaoaeao#Zaeajaoajaeaj#Zaj#Zaj#Zajaj#5aj#5ajagajag#5ag#5agap#1ap#1ag#1ap#1#1ah#1ah#1ahaha.ah#3aha.a.aka.akaqakaqadaqadaqasadasad", +"atauataaataaataaanaaalaaalaaaa#9aa#9aa#Caa#Caa#Caa#C#C#C#C#C#C#6#C#C#C#F#C#F#C#F#C#F#p#F#p#F#H#F#H#F#H#t#H#F#F#t#H#K#F#K#F#K#t#K#t#K#t#K#t#K#K#x#K#K#K#x#K#x#K#x#K#x#K#I#K#Q#x#O#x#Q#x#O#x#O#x#j#x#O#x#j#x#j#x#j#Q#j#Q#j#Q#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#j#j#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#k.s#j.s.s.s#b.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p" +".s.p.s.p.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.v.v.x.var.v.x.var.var.var.xar.xam.xam.xamara#ara#ara#ara#afa#afawa#awafawa#aca#aca#aca#acawacacacacacacabac#Xacaeacaeacaeacae#4aeaoaeaoaeae#Zaeajaeajaeaj#Zaj#Zajajajaj#Yaj#Yajagajag#5ag#5ag#5agag#1ap#1ag#1agah#1ah#1ahahahah#3ah#3ahaka.aka.akaqakaqadakadakasadasadasasax", +"aaataaanaaauaaauaaaaaaaa#9aa#9aa#Caa#Caa#C#9#C#9#6#C#6#C#6#C#8#C#F#C#F#C#F#C#F#C#F#H#F#H#F#F#F#H#t#F#t#F#K#F#K#F#K#t#K#t#K#t#K#t#K#K#K#K#I#K#x#K#I#K#x#K#I#K#O#K#O#x#O#x#O#x#O#x#O#x#O#x#j#x#j#Q#j#Q#j#Q#j#Q#j#Q#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s#b.s.s.s#b.s.s" +".s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.var.var.var.xar.xar.xar.xam.xafara#ara#ara#ara#afawafa#afawafawa#acafaca#aca#acacacacacacacacacacaeacaoacaeacaeaoae#4aeaoaeao#Zaeajaoajaeaj#Zaj#Zaj#Zajaj#5aj#5ajagajag#5ag#5agapagap#1ap#1ap#1agah#1ah#1ah#1a.aha.aha.ahaka.aka.aka.adaqadaqadakasadasas", +"atauatauataaataaanaaanaaaaaaalaaaa#9aa#9aa#Caa#Caa#C#9#C#C#C#C#C#C#6#C#C#C#F#C#F#C#F#C#F#p#F#p#F#H#F#H#F#H#t#H#t#F#t#H#K#F#K#F#K#t#K#t#K#t#K#t#K#K#x#K#K#K#x#K#x#K#x#K#x#K#I#K#x#x#O#x#Q#x#O#x#O#x#j#x#O#x#j#x#j#x#j#x#j#Q#j#Q#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#j#j#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#j#k#j#j#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#k.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p" +".s.p.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.u.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.v.v.v.v.v.v.var.var.var.var.var.xar.xamarar.xamara#ara#ara#ara#ara#afawa#awafawa#awa#aca#aca#acawacacacacacacabacacacaeacaeacaeacae#4aeaoaeaoaeaeaeaoajaeajaeajaeaj#Zajajajajaiaj#5aj#Yaj#Yajag#5ag#5agapagap#1ag#1agahagah#1ah#1ahah#3aha.ahakahaka.aka.akaqadakadaqasadasadasasasasay", +"auataaataaanaaauaaauaaaaaaaa#9aa#9aa#Caa#Caa#C#C#C#C#6#C#6#C#6#C#8#C#F#C#F#C#F#C#F#C#F#H#F#H#F#F#F#H#t#F#t#F#K#F#K#F#K#t#K#t#K#t#K#t#K#K#K#K#I#K#x#K#I#K#x#K#I#K#I#K#O#x#O#x#O#x#O#x#O#x#O#x#j#x#j#x#j#Q#j#Q#j#Q#j#Q#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s#b.s.s.s#b.s.s.s.s" +".s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.w.x.var.var.var.xar.xar.xar.xam.xafara#ara#ara#ara#afawafa#afawafawa#acafaca#aca#acawacacacacacacacacaeacaoacaeacaeacae#4aeaoaeaoaeao#Zao#Zaeajaeaj#Zaj#Zajajajaj#5aj#Yaj#5ajag#5ag#5ag#5agap#1ap#1agah#1ah#1ah#1ahaha.aha.ahakahaka.aka.akaqadaqadakasavasadasas", +"atauatauatauataaataaanaaanaaaaaaalaaaa#9aa#9aa#Caa#Caa#C#9#C#C#C#C#C#C#6#C#C#C#F#C#F#C#F#C#F#p#F#p#F#H#F#H#F#H#t#H#t#F#t#H#K#F#K#F#K#t#K#t#K#t#K#t#K#K#x#K#K#K#x#K#x#K#x#K#x#K#x#K#x#x#O#x#Q#x#O#x#O#x#j#x#O#x#j#x#j#x#j#x#j#x#j#Q#j#k#j#Q#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#k.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p" +".s.p.s.p.s.r.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.var.var.var.var.var.xar.xamarar.xamara#ara#ara#ara#ara#afawafawafawa#awa#aca#aca#acawacawacacacacabacacacaeacaeacaeacaeacaeaoaeaoaeaeaeaoajae#Zaeajaeaj#Zajajajajajajajaj#Yaj#Yajagajag#5agapagap#1ag#1agahagah#1ah#1ah#1ahaha.ah#3ahaka.aka.aka.akaqadaqasakasadasadasasaxasax", +"auatauataaazaaanaaaaaaaaaaaa#9aa#9aa#9aa#Caa#Caa#6#C#C#C#6#C#6#C#6#C#8#C#F#C#F#C#F#C#F#C#F#H#F#H#F#F#F#H#t#F#t#F#K#F#K#F#K#t#K#t#K#t#K#t#K#K#K#K#I#K#x#K#I#K#x#K#I#K#I#K#O#x#O#x#O#x#O#x#O#x#O#x#j#x#j#x#j#x#j#Q#j#Q#j#Q#j#k#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#j#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s#b.s.s.s.s.s.s" +".s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.v.w.x.var.var.var.var.xar.xararar.xarara#ara#ara#ara#arawafa#afawafawafawafaca#aca#acawacacacacacacacacaAacaoacaeacaeacae#4aeaoaeaoaeao#Zao#Zaeajaeajaeaj#Zajajajajajaj#5aj#5ajagajag#5ag#5agap#1ap#1agahapah#1ah#1ahahahaha.ahakahaqa.aka.akaqakaqadaqasaqasadasadasas", +"atazatauatauatauataaataaanaaanaaaaaaalaaaa#Caa#Caa#Caa#Caa#C#9#C#C#C#C#C#C#6#C#7#C#F#C#F#C#F#C#F#p#F#H#F#H#F#H#F#H#t#H#t#F#t#H#K#F#K#F#K#t#K#t#K#t#K#t#K#t#x#K#K#K#x#K#x#K#x#K#x#K#x#K#x#x#I#x#Q#x#O#x#Q#x#O#x#O#x#j#x#j#x#j#x#j#x#j#x#j.s#j#Q#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#k.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p" +".s.p.s.r.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.waB.v.v.vaB.var.var.var.var.var.xamarararamaramara#ara#ara#ara#arawafawafawa#awafawa#aca#acawacawacacacacacacacacaCacaeacaeacaeacaeaoaeaoaeaoaeaoaeae#Zaeajaeajaeaj#Zaj#Zajajajaj#Yaj#Yajagajag#5agapagapagag#1ap#1agahagah#1ah#1ahahahah#3ah#3ahaka.aka.akaqakaqadakadakasadasadasasaxasaD", +"auatauatauataaauaaanaaaaaaaaaaaa#9aa#Caa#Caa#Caa#C#9#6#C#C#C#6#C#6#C#B#C#8#C#F#C#F#C#F#p#F#p#F#H#F#H#F#F#F#H#t#F#t#F#K#F#K#F#K#t#K#t#K#t#K#t#K#K#K#K#x#K#x#K#I#K#x#K#I#K#I#K#O#x#O#x#O#x#O#x#O#x#O#x#j#x#j#x#j#x#j#x#j#Q#j#Q#j#k#j#Q#j#k#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#j#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#j#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s#b.s.s.s.s.s.s.p.s" +".p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.t.t.u.t.w.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.vaB.w.x.var.var.var.var.xar.xararar.xarara#arafara#ara#arawafa#afawafawafawafacawaca#acawacawacacacacacacaAacaoacaeacaeacaeacaeaoaeaoaeaoaeao#Zaeajaoajaeaj#Zajajajajajaj#5aj#5ajagajag#5ag#5agapagap#1apahapahagah#1ahahahaha.aha.aha.ahaka.akaqakaqadaqasaqasakasadasasasas", +"aEatatazatauataaataaataaanaaanaaanaaaaaaal#9aa#Caa#Caa#Caa#Caa#C#9#C#C#C#C#C#C#B#C#7#C#F#C#F#C#F#C#F#p#F#H#F#H#F#H#F#H#t#H#t#F#t#H#K#F#K#F#K#t#K#t#K#t#K#t#K#t#x#K#K#K#x#K#x#K#x#K#x#K#x#K#x#x#I#x#Q#x#O#x#Q#x#O#x#O#x#j#x#j#x#j#x#j#x#j#x#j#x#j#x#j.s#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#k.s#j.s#k.s#j.s.s.s#b.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p" +".s.r.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.r.q.o.q.q.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.waB.v.v.vaB.var.var.var.var.var.xararararamaramara#ara#ara#ara#arawafawafawa#awafawa#aca#acawacawacawacacacacacacaCacaCacaeacaeacaeaAaeaoaeaoaeaoaeae#Zaeajaeajaeajaeaj#Zajajajajaiaj#5ajagajagajag#5ag#5agapagap#1ag#1agah#1ah#1ahahahah#3aha.ahakahaka.akaqakaqadakadaqasadasadasasasasayasaF", +"auatauataaataaataaauaaanaaaaaaaaaaaa#9aa#Caa#Caa#Caa#C#9#6#C#C#C#6#C#6#C#B#C#F#C#F#C#F#C#F#p#F#p#F#F#F#H#F#F#F#H#t#F#t#F#K#F#K#F#K#t#K#t#K#t#K#t#K#K#K#K#x#K#x#K#I#K#x#K#I#K#I#K#I#x#O#x#O#x#O#x#O#x#O#x#j#x#j#x#j#x#j#x#j#x#j#Q#j#k#j#Q#j#k#j#k#j#k#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#j#j#j#j#j#j#j#j#j#j#j#j#j#j#j#j#j#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s" +".p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.vaB.w.v.var.var.var.var.var.xararararararamarafara#ara#arawarawafawafawafawafawawacafacawacawacacacacacacaAacaAacaeacaoacaeacaeaoaeaoaeaoaeaoaeaoajaoajaeajaeajajajajajajajaj#5ajagajapajag#5agapagapagap#1ap#1agah#1ah#1ahahahaha.aha.ahakahaka.akaqakaqadaqadakasavasasasasaxas", +"aEazaEatatauatauataaataaataaanaaalaaalaaaaaaal#9aa#Caa#Caa#Caa#C#C#C#C#C#C#C#C#C#C#B#C#H#C#F#C#F#C#F#C#F#p#F#H#F#H#F#H#F#H#t#H#t#F#t#H#K#F#K#H#K#t#K#t#K#t#K#t#K#t#x#K#K#K#x#K#x#K#x#K#x#K#x#K#x#x#I#x#x#x#O#x#Q#x#O#x#Q#x#j#x#j#x#j#x#j#x#j#x#j#x#j#x#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#k.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.r" +".s.p.p.r.p.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.r.q.o.q.q.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.t.v.v.v.waB.vaB.vaB.var.var.var.var.var.vararararamarararamara#arawara#arawarawafawa#awafawawawa#acawacawacawacacacacacacaCacaAacaeacaeacaeaAaeaAaeaoaeaoaeaeaeaoajaeajaeajaeaj#Zajajajajaiaj#5ajagajagajag#5ag#5agapagap#1ag#1agahagah#1ahahahahahaha.ahakahaka.akaqakaqakaqadaqasakasadasasasasaxasaxasaD", +"azatauatauataaataaataaauaaanaaaaaaaaaaaa#9aa#Caa#Caa#Caa#C#9#6#C#C#C#6#C#6#C#F#C#F#C#F#C#F#C#F#p#F#p#F#F#F#H#F#F#F#H#t#F#t#F#K#F#K#F#K#t#K#t#K#t#K#t#K#t#K#K#x#K#x#K#I#K#x#K#I#K#x#K#I#x#I#x#O#x#O#x#O#x#O#x#j#x#O#x#j#x#j#x#j#x#j#x#j#x#j#Q#j#k#j#k#j#k#j#k#j#k#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s#b.s.s.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s" +".p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.waB.waB.var.var.var.var.var.xararararararamarafara#ara#arawarawafawafawafawafawawacafacawacawacawacacacacaAacaAacaeacaoacaeacaeaAaeaoaeaoaeaoaeaoajaoajaeajaeajajajajajajajaj#5ajagajapajag#5agapagapagap#1ap#1agahapah#1ah#1ahahahaha.ahakahaqa.aka.akaqakaqadaqasaqasasasasasasaFas", +"aEataEazatazatauatauataaataaataaanaaalaaalaaaaaaaa#9aa#Caa#Caa#Caa#C#C#C#C#C#C#C#C#C#C#B#C#H#C#F#C#F#C#F#C#F#p#F#p#F#H#F#H#F#H#t#H#t#F#t#H#t#F#K#H#K#t#K#t#K#t#K#t#K#t#K#t#K#K#x#K#x#K#x#K#x#K#x#K#x#x#x#x#x#x#I#x#Q#x#O#x#Q#x#j#x#k#x#j#x#j#x#j#x#j#x#j#x#j.s#j#x#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#k.s#j.s#k.s#j.s.s.s#b.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.r.s.p" +".p.r.p.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.r.q.o.q.q.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.taB.w.v.waB.vaB.vaB.vaB.var.var.varaBar.vararararamarararamara#arawara#arawarawafawafawafawawawa#acawacawacawacawacacacacaCacaAacaCacaeacaeaAaeaAaeaoaeaoaeaeaeaoajaeajaeajaeajaeajajajajajajajajagajagajagajag#5agapagapagag#1apahagahagahahahahahaha.ahakahakahaka.akaqakaqadaqasakasakasasasasasasaxasaDasaD", +"azatazatauatauataaataaanaaauaaauaaaaaaaa#9aa#9aa#Caa#Caa#Caa#C#9#6#C#C#C#6#C#6#C#F#C#F#C#F#C#F#C#F#p#F#p#F#H#F#H#F#F#F#H#t#F#t#F#K#F#K#F#K#t#K#t#K#t#K#t#K#t#K#K#x#K#x#K#I#K#x#K#I#K#x#K#I#x#I#x#O#x#O#x#O#x#O#x#j#x#O#x#j#x#j#x#j#x#j#x#j#x#j#x#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s#b.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s" +".p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.t.v.waB.w.v.waB.waB.var.war.var.var.var.varararararararararara#ara#arawarawarawafawafawafawaGacafacawacawacawacacacacaAacaAacaAacaoacaeacaeaAaeaoaeaoaeaoaeaoaHaoajaeajaoajaHajajajajajajajajapajapajagajagapagapagapagap#1apahapahagah#1ahahahaha.ahaqahaqahaka.akaqakaqadaqasaqasadasadasasasasaFas", +"aEataEatatazatazatauatauataaataaanaaanaaalaaalaaaaaaaa#9aa#Caa#Caa#Caa#C#C#C#C#C#C#C#C#C#C#B#C#H#C#F#C#F#C#F#C#F#p#F#p#F#H#F#H#F#H#t#H#t#F#t#H#t#F#K#H#K#t#K#t#K#t#K#t#K#t#K#t#K#K#x#K#x#K#x#K#x#K#x#K#x#x#x#x#x#x#I#x#x#x#O#x#Q#x#j#x#Q#x#j#x#j#x#j#x#j#x#j#x#j#x#j#x#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#k.s#j.s#k.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.r.s.p.p.r" +".p.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.r.q.o.q.q.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.u.t.u.t.v.t.v.t.v.t.v.taB.w.v.waB.vaB.waB.vaB.var.var.varaBar.vararararamarararamaramarawarawarawarawarawafawafawawawawawawacawacawacawaAacacacaAacaAacaCacaeacaeaAaeaAaeaAaeaoaeaoaeaoaHaeajaeajaeajaeajajajajajajajajagajagajagajag#5agapagapagag#1apahagahagah#1ah#1ahahahahakahaqahakahaka.akaqakaqadakasaqasadasasasasasasaDasaFasaD", +"azaEazatauatauatauataaataaanaaauaaauaaaaaaaa#9aa#9aa#Caa#Caa#C#9#C#9#6#C#C#C#6#C#6#C#F#C#F#C#F#C#F#C#F#p#F#p#F#H#F#H#F#F#F#H#t#F#t#F#K#F#K#F#K#t#K#t#K#t#K#t#K#t#K#K#x#K#x#K#I#K#x#K#I#K#x#K#I#x#I#x#I#x#O#x#O#x#O#x#O#x#O#x#j#x#j#x#j#x#j#x#j#x#j#x#j.s#j#x#j.s#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s#b.s.s.s#b.s.s.s#b.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s" +".p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.t.v.waB.w.v.waB.waB.vaB.war.var.varaBar.varararararararararara#ara#arawarawarawafawafawafawaGawaGacawacawacawacawacacaAacaAacaAacaoacaeacaoaAaeaAaeaoaeaoaeaoaHaoajaeajaoajaHajajajajajajajajaIajapajagajagaIagapagapagap#1apahapahagah#1ahahahahahahaqahaqahaka.akaqakaqakaqasaqasakasavasasasasaxasaFas", +"aJataEataEatatazatauatauatauataaataaanaaanaaalaaalaaaa#9aa#9aa#Caa#Caa#Caa#C#C#C#C#C#C#C#C#C#C#B#C#H#C#F#C#F#C#F#C#F#p#F#p#F#H#F#H#F#H#t#H#t#H#t#H#t#F#K#H#K#t#K#t#K#t#K#t#K#t#K#t#K#t#x#K#x#K#x#K#x#K#x#K#x#x#x#x#x#x#x#x#x#x#I#x#x#x#j#x#Q#x#j#x#k#x#j#x#k#x#j#x#j#x#j#x#j.s#j#x#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#k.s#j.s#k.s#j.s#k.s#b.s.s.s#b.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r" +".p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.r.q.o.q.q.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.t.u.t.u.t.v.t.v.taB.t.v.taB.taB.waB.vaB.waB.vaB.var.var.varaBaraBaraBararamarararamaramarawarawarawarawarawafawafawawawaGawawacawacawacawaAawacacaAacaAacaCacaeacaeaAaeaAaeaAaeaoaeaoaeaoaHaeajaeajaeajaeajaHajajajajajajaKajapajagajagajagapagapagapagapahagahagahagah#1ahahahahahaha.ahakahaka.akaqakaqakaqadaqasakasadasasasasaFasaFasaDaFaD", +"azaEazaEazatauatauatauataaataaanaaaaaaaaaaaaaaaa#9aa#9aa#Caa#Caa#C#C#C#C#6#C#C#C#6#C#6#C#F#C#F#C#F#C#F#C#F#p#F#H#F#H#F#H#F#F#F#H#t#F#t#F#t#F#K#F#K#t#K#t#K#t#K#t#K#t#K#t#x#K#x#K#x#K#x#K#I#K#x#K#I#x#x#x#I#x#I#x#O#x#O#x#O#x#O#x#j#x#j#x#j#x#j#x#j#x#j#x#j.s#j#x#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s#b.s#b.s.s.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s" +".p.p.p.p.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.u.t.v.t.v.t.v.t.v.t.v.waB.waB.waB.waB.vaB.war.var.varaBar.varararararararararara#arafarawarawarawafawafawafawaGawaGacawacaGacawacawacacaAacaAacaAacaAacaeacaoaAaeaAaeaoaeaoaeaoaHaoaHaoajaoajaHajaeajajajajajajaIajapajagajapajag#5agapagapagapahapahagahapahahahahahaha.ahaqahakahaqaqakaqakaqadaqasaqasaqasasasasasasaFasaFas", +"aJataEataEazaEatatazatauatauatauataaataaanaaanaaaaaaalaaaa#9aa#9aa#Caa#Caa#Caa#C#C#C#C#C#C#C#C#C#C#B#C#H#C#F#C#F#C#F#C#F#p#F#p#F#H#F#H#F#H#t#H#t#H#t#H#t#F#K#H#K#t#K#t#K#t#K#t#K#t#K#t#K#t#x#t#x#K#x#K#x#K#x#K#x#x#x#K#x#x#x#x#x#x#x#x#x#x#I#x#x#x#j#x#k#x#j#x#k#x#j#x#k#x#j#x#j.s#j#x#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#k.s#j.s#k.s#j.s#k.s#j.s#k.s#b.s.s.s#b.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.r.s.p.s.r.p.p.p.r.p.r.p.r" +".p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.r.q.o.q.q.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.t.u.t.u.t.v.t.v.taB.t.v.taB.taB.waB.vaB.waB.vaB.vaBaBar.varaBaraBaraBararararararamaramarawarawarawarawarawafawafawawawaGawawacawacawacawaAawacacaAacaAacaCacaAacaeaAaeaAaeaAaeaAaeaoaeaoaHaeaHaoajaeajaeajaHajajajajajajaKajaIajagajagajagaIagapagapagapaLagahagahagah#1ahahahahahaha.ahakahakahakaqakaqakaqadaqasakasakasasasasasasaFasaDasaDaFaD", +"ataEazatazatazatauatauatauataaauaaanaaaaaaaaaaaaaaaa#Caa#Caa#Caa#Caa#C#C#C#C#6#C#C#C#6#C#6#C#F#C#F#C#F#C#F#C#F#p#F#p#F#H#F#H#F#F#F#H#t#F#t#F#t#F#K#F#K#t#K#t#K#t#K#t#K#t#K#t#x#K#x#K#x#K#x#K#I#K#x#K#I#x#x#x#I#x#I#x#I#x#O#x#O#x#O#x#j#x#j#x#j#x#j#x#j#x#j#x#j#x#j#x#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s#b.s.s.s#b.s.s.s#b.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p" +".p.p.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.u.t.v.t.v.t.v.taB.t.v.taB.waB.waB.waB.vaB.war.var.varaBaraBaraBararararararararaMarafarawarawarawarawafawafawaGawaGawawacaGacawacawacawaAacaAacaAacaAacaeacaoaAaeaAaeaAaeaoaeaoaHaoaHaoajaoajaeajaeajajajajajajaIajaIajapajapajagajagapagapagapaLapahagahapahahahahahahahaha.ahaqahaqaNakaqakaqakaqadaqasaqasasasasasasaOasaFasaFas", +"aJaEaJataEataEazaEatatazatauataaataaataaataaanaaanaaaaaaalaaaa#Caa#Caa#Caa#Caa#Caa#C#C#C#C#C#C#C#C#C#C#B#C#H#C#F#C#F#C#F#C#F#p#F#p#F#H#F#H#F#H#t#H#t#H#t#H#t#F#t#H#K#t#K#u#K#t#K#t#K#t#K#t#K#t#x#t#x#K#x#K#x#K#x#K#x#x#x#K#x#x#x#x#x#x#x#x#x#x#x#x#x#x#b#x#x#x#j#x#k#x#j#x#k#x#j#x#k#x#j#x#k.s#j#x#k.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#k.s#j.s#k.s#j.s#k.s#j.s#k.s#j.s#k.s#b.s.s.s#b.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.p.p.r.p.r.p.r.p.r" +".p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.r.q.o.q.q.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.t.u.t.u.taB.t.v.taB.taB.taB.taB.waB.vaB.waB.vaB.vaBaBar.varaBaraBaraBararararararaMaramaraMarawarawarawarawarawafawawawaGawawawawacawacawaAawaAawaAacaAacaCacaAacaeaAaeaAaeaAaeaAaeaoaeaoaHaeaHaoajaeajaeajaHajaHajajajajaIajaIajagajagajagaIagapagapagapaLagahapahagahagahahahahahahahahakahakahakaqakaqakaqakaqasakasakasasasasasasasasaDasaFasaDaFaD", +"azaEataEazatazatauatauataaataaataaauaaanaaaaaaaaaaaa#9aa#Caa#Caa#Caa#Caa#C#C#C#C#6#C#C#C#6#C#6#C#F#C#F#C#F#C#F#C#F#p#F#p#F#H#F#H#F#F#F#H#t#F#t#F#t#F#K#F#K#t#K#t#K#t#K#t#K#t#K#t#x#t#K#K#x#K#x#K#x#K#x#K#I#x#x#K#I#x#x#x#I#x#I#x#I#x#O#x#j#x#O#x#j#x#j#x#j#x#j#x#j#x#j#x#j.s#j#x#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p" +".p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.u.t.v.t.v.t.v.taB.taB.taB.waB.waB.waB.vaB.waraBar.varaBaraBaraBararararararararaMarafarawarawarawarawafawafawaGawaGawawacaGacawacawacawaAacaAacaAacaAacaAacaoaAaeaAaeaAaeaoaeaoaHaoaHaoaHaoajaeajaoajaHajajajajaIajaIajapajapajagajagapagapagapaLapahapahapahaLahahahahahahahahaqahaqahaka.akaqakaqakaqasaqasakasaPasasasasaFasaFasaFaF", +"aJaEaJataEataEataEazaEatatauatauataaataaataaanaaalaaalaaaaaaalaaaa#Caa#Caa#Caa#Caa#Caa#C#C#C#C#C#C#C#C#C#C#B#C#H#C#F#C#F#C#F#C#F#p#F#p#F#H#F#H#F#H#t#H#t#H#t#H#t#F#t#H#K#t#K#u#K#t#K#t#K#t#K#t#K#t#x#t#x#t#x#K#x#K#x#K#x#K#x#K#x#x#x#x#x#x#x#x#x#x#x#x#x#x.s#x#x#x#b#x.s#x#b#x#k#x#j#x#k#x#j#x#k.s#j#x#k.s#j.s#k.s#j.s#k.s#j.s#k.s#j.s#k.s#j.s#k.s#j.s#k.s#j.s#k.s#j.s#k.s#j.s#k.s#j.s.s.s#b.s.s.s#b.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.p.p.r.p.r.p.r.p.r.p.r" +".p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.r.q.o.q.q.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.t.u.t.u.taB.taB.taB.taB.taB.taB.waB.vaB.waB.vaB.vaBaBaraBaraBaraBaraBaraBararararaMarararaMarawarawarawarawarawafawaGawaGawawawawacawacawaAawaAawaAacaAacaAacaAacaCaAaeaAaeaAaeaAaeaoaeaoaHaoaHaoaHaeajaeajaHajaHajajajajaIajaIajaKajagajagaIagaIagapagapagapaLapahagahagahaLahahahahahahakahaqahakaNakaqakaqakaqasakasaqasaQasasasasasasaFasaFasaDaFaDaFaR", +"aEaEazaEazaEazatazatauatauataaataaataaauaaanaaaaaaaaaaaa#9aa#Caa#Caa#Caa#Caa#C#C#C#C#6#C#C#C#6#C#6#C#F#C#F#C#F#C#F#C#F#p#F#p#F#H#F#H#F#F#F#H#t#F#t#F#t#F#K#F#K#t#K#t#K#t#K#t#K#t#K#t#x#t#K#t#x#K#x#K#x#K#x#K#I#x#x#K#I#x#x#x#I#x#x#x#I#x#I#x#j#x#O#x#j#x#j#x#j#x#j#x#j#x#j#x#j.s#j#x#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s#b.s#b.s#b.s.s.s#b.s.s.s#b.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p" +".p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.u.t.v.taB.t.v.taB.taB.taB.waB.waB.waB.vaB.waBaBar.varaBaraBaraBararararararararaMaraSarawarawarawarawarawafawaGawaGawaGawaGacawacawacawaAacaAacaAacaAacaAacaoaAaeaAaeaAaeaAaeaoaHaoaHaoaHaoajaeajaoajaHajajajajajajajajaIajapajagajapaIagapagapagapaLapahapahagahaLahahahahahahaqahaqahakahaqaqakaqakaqasaqasaqasaqasasasasasasaFasaFaOaDaF", +"aJaEaJataJataEataEatatazatatatauatauataaataaataaanaaalaaalaaaaaaalaaaa#Caa#Caa#Caa#Caa#C#9#C#C#C#C#C#C#C#C#C#C#B#C#H#C#F#C#F#C#F#C#F#p#F#p#F#H#F#H#F#H#t#H#t#H#t#H#t#F#t#H#t#t#K#u#K#t#K#t#K#t#K#t#K#t#x#t#x#t#x#t#x#K#x#K#x#K#x#K#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x.s#x.s#x.s#x.s#x#b#x.s#x#b#x#k#x#j#x#k.s#j#x#k.s#j.s#k.s#j.s#k.s#j.s#k.s#j.s#k.s#j.s#k.s#b.s.s.s#b.s.s.s#b.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.r.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.r.p.r.p.r.p.r" +".p.q.p.q.p.q.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.taT.t.u.taB.taB.taB.taB.taB.taB.waB.vaB.waBaBaB.vaBaBaraBaraBaraBaraBaraBararararaMaraSaraMarawarawarawarawaSawarawaGawaGawawawawawawacawaAawaAawaAawaAacaAacaAacaCaAaeaAaeaAaeaAaeaAaeaoaHaoaHaoaHaeajaeajaHajaHajaHajajaIajajajaKajapajagaIagaIagapagapagapagapahagahagahaLahahahahahahaNahaqahakahakaNakaqakaqaQaqasaqasakasasasasasasaOasaFasaDaOaDaFaDaFaR", +"ataJataEazaEazaEazatazatauatauataaataaataaauaaanaaaaaaaaaaaa#9aa#Caa#Caa#Caa#Caa#C#C#C#C#6#C#C#C#6#C#6#C#F#C#F#C#F#C#F#C#F#p#F#p#F#H#F#H#F#F#F#H#t#F#t#F#t#F#t#F#K#t#K#t#K#t#K#t#K#t#K#t#x#t#K#t#x#K#x#K#x#K#x#K#x#K#x#K#I#x#x#x#I#x#x#x#I#x#x#x#I#x#I#x#j#x#j#x#j#x#j#x#j#x#j#x#j#x#j#x#j.s#j#x#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s#b.s#b.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p" +".r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.t.taT.t.w.taB.taB.taB.taB.taB.waB.waB.waB.waB.waBaBaraBaraBaraBaraBaraBararararararaSaraSarawarawarawarawaSawafawaGawaGawaGawaGacawaAawacawaAawaAacaAacaAacaAacaAaAaeaAaoaAaeaAaeaoaHaoaHaoaHaoaHaoajaoajaHajaHajajajajajajaIajapajagajapaIagapagapagapagapahapahagahapahahahahahahaNahaqahaqahaqaqakaqakaqaQaqasaqasaqasasasasasasaFasaFaOaFaOaFaF", +"aJaEaJaEaJataJataEataEatatazatatatauatauataaataaataaanaaalaaalaaaaaaal#9aa#Caa#Caa#Caa#Caa#C#9#C#C#C#C#C#C#C#C#C#C#B#C#H#C#F#C#F#p#F#C#F#p#F#p#F#p#F#H#F#H#t#H#t#H#t#H#t#H#t#H#t#t#K#u#K#t#K#u#K#t#K#t#K#t#x#t#x#t#x#t#x#t#x#t#x#K#x#K#x#x#x#K#x#x#x#x#x#x#x#x#x#x#x#x#x#x.s#x#x#x.s#x.s#x.s#x.s#x.s#x.s#x.s#x.s.s#b#x.s.s#b#x.s.s#b.s.s.s#b.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.p.p.r.p.r.p.r.p.r.p.r.p.r.p.r.p.q.p.q" +".p.q.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.q.u.t.t.taT.t.t.taT.taT.taB.taB.taB.taB.taB.taB.taB.vaB.waBaBaBaBaBaBaraBaraBaraBaraBaraBaSarararaMaraSaraMaraMarawarawarawaSawaSawaGawaGawawawaGawawacawaAawaAawaAawaAacaAacaAacaCaAaAaAaeaAaeaAaeaAaeaoaHaoaHaoaHaeaHaoajaHajaHajaHajajaIajajajaIajaIajagaIagaIagaIagapagapagapaLagahapahaLahaLahahahahaNahaqahakahakahakaqakaqakaqaQaqasakasakasasasasaOasaFasaDaOaFaOaDaFaDaFaR", +"aEaJataEataEazaEazaEazatauatauatauataaataaanaaauaaanaaaaaaaaaaaa#9aa#Caa#Caa#Caa#Caa#C#C#C#C#6#C#C#C#B#C#6#C#F#C#F#C#F#C#F#C#F#p#F#p#F#H#F#H#F#F#F#H#t#F#t#H#t#F#t#F#K#t#K#t#K#t#K#t#K#t#K#t#K#t#K#t#x#t#x#K#x#K#x#K#x#K#x#K#I#x#x#x#I#x#x#x#I#x#x#x#I#x#x#x#b#x#I#x#b#x#j#x#j#x#j#x#j#x#j#x#j.s#j#x#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.p.p.r.p.p.p.r.p" +".p.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.t.taT.t.w.taB.taB.taB.taB.taB.waB.waB.waBaUaB.waBaBaraUaraBaraBaraBaraBararaSarararaSaraSarawaraGarawarawaSawafawaGawaGawaGawaGacawaAaGacawaAawaAacaAacaAaAaAacaAaAaeaAaoaAaeaAaeaAaHaoaHaoaHaoaHaoajaoajaHajaHajajajajajajaIajaIajapajapaIagaIagapagapagapaLapahapahapahaLahahahahaNahaqahaqahaqaNakaqakaqaQaqasaqasaqasaQasasasasaOasaFasaFaOaFaFaDaF", +"aJaEaJaEaJaEaJataEataEataEatatazatanatauatauataaataaataaanaaalaaalaaaaaaal#9aa#Caa#Caa#Caa#Caa#C#9#C#C#C#C#C#C#C#C#C#C#B#C#H#C#F#C#F#p#F#C#F#p#F#p#F#p#F#H#F#H#t#H#t#H#t#H#t#H#t#H#t#t#t#H#K#t#K#u#K#t#K#t#K#t#x#t#K#t#x#t#x#t#x#t#x#t#x#K#x#x#x#K#x#x#x#x#x#x#x#x#x#x#x#x#x#x.s#x#x#x.s#x.s#x.s#x.s#x.s#x.s#x.s#x.s#x.s#x.s.s.s#x.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.r.s.p.s.r.s.p.p.r.p.p.p.r.p.r.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q" +".p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.qaT.t.t.taT.t.6.taT.taT.taB.taB.taB.taB.taB.taB.taBaBaB.waBaBaBaBaBaBaBaBaraBaraBaraBaraBaSarararaMaraSaraMaraMarawarawarawaSawaSawaGawaGawawawaGawawacawaAawaAawaAawaAacaAaAaAacaCaAaAaAaeaAaeaAaeaAaeaAaHaoaHaoaHaeaHaoajaHajaHajaHajaHaIajajajaIajaIajagaIagaIagaIagapagapagapaLagahapahaLahaLahahahahaNahaNahakahaqahakaNakaqakaqakaqasakasaqasaQasasasasaOasaFasaFaOaDaFaDaFaRaFaV", +"aEaJaEaJazaEataEazaEazaEazatauatauatauataaataaanaaauaaanaaaaaaaaaaaa#9aa#Caa#Caa#Caa#Caa#C#C#C#C#6#C#C#C#B#C#6#C#F#C#F#C#F#C#F#C#F#p#F#p#F#H#F#H#F#F#F#H#t#F#t#H#t#F#t#F#t#t#K#F#K#t#K#t#K#t#K#t#K#t#K#t#x#t#x#t#x#K#x#K#x#K#x#K#x#x#x#x#I#x#x#x#I#x#x#x#I#x#x#x#b#x#x#x#b#x.s#x#b#x#b#x#b#x#j#x#j#x#j#x#j.s#j#x#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s#b.s#b.s#b.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.p.p.p.p.r.p.p.p.r.p.r.p" +".r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.6.t.t.taT.taU.taB.taB.taB.taB.taB.taB.waB.waBaUaBaUaBaBaraUaraBaraBaraBaraBararaSaraSaraSaraSarawaraGarawarawaSawaSawaGawaGawaGawaGawawaAaGaAawaAawaAawaAacaAaAaAacaAaAaoaAaoaAaeaAaeaAaHaoaHaoaHaoaHaoaHaoajaHajaWajaHajajajajaIajaIajapajapaIagaIagapagapagapaLapahapahapahaLahahahahaNahaNahaqahaqaNakaqakaqakaqaQaqasaqasaXasaPasasaOasaOasaFasaFaOaDaFaDaF", +"aJaEaJaEaJaEaJaEaJataEataEataEatatazatauatauatauataaataaanaaanaaalaaalaaaaaaal#9aa#Caa#Caa#Caa#C#l#C#9#C#C#C#C#C#C#C#C#C#C#B#C#H#C#F#C#F#p#F#C#F#p#F#p#F#p#F#H#F#H#t#H#t#H#t#H#t#H#t#H#t#u#t#H#t#t#K#u#K#t#K#u#K#t#x#t#K#t#x#t#x#t#x#t#x#t#x#t#x#t#x#K#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x.s#x#x#x.s#x.s#x.s#x.s#x.s#x.s#x.s#x.s#x.s#x.s.s.s#x.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.r.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q" +".p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.6.q.t.qaT.t.6.taT.t.6.taT.taT.taT.taB.taB.taB.taB.6aB.taBaBaBaUaBaBaBaBaBaBaBaBaraBaraBaraBaraBaSaBaSaraMaraSaraMaraMarawaSawarawaSawaSawaGawaGawawawaGaYawawawaAawaAawaAawaAawaAaAaAacaCaAaAaAaeaAaeaAaHaAaeaAaHaoaHaoaHaoaHaoaHaHajaHajaHajaHaIajajajaIajaIajaKaIagajagaIagaIagapagapaLapaLapahaLahaLahaLahahahahaNahaNahaqahakaNakaqakaqakaqaQaqasaqasaQasasasasasasaOasaFasaDaOaDaFaRaFaRaFaV", +"aEaJaEaJaEaJazaEataEazatazatazatauatauatauataaataaanaaaaaaalaaaaaaaa#9aa#9aa#Caa#Caa#Caa#Caa#C#C#C#C#6#C#C#C#B#C#6#C#F#C#F#C#F#C#F#C#F#p#F#p#F#p#F#H#F#H#F#H#t#F#t#H#t#F#t#F#t#t#K#F#K#t#K#t#K#t#K#t#K#t#K#t#x#t#x#t#x#t#x#t#x#K#x#K#x#x#x#K#x#x#x#x#I#x#x#x#I#x#x#x#I#x#x#x#b#x.s#x#b#x.s#x#b#x.s#x#b#x.s#x#b#x#b#x#b.s#b#x#b.s#b.s#b.s#b.s#b.s#b.s#b.s#b.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.p.p.r.p.r.p.q.p" +".q.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.o.q.q.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.q.t.t.6.t.t.t.6.t.6.taT.t.6.taB.taB.taB.taB.taB.taBaUaB.waBaUaBaUaBaBaBaUaraBaraBaraBaraBararaSaraSaraSaraSaraMaraGarawarawaSawaSawaGawaGawaGawaGawawaAaGaAawaAawaAawaAacaAaAaAaAaAaAaAaAaoaAaeaAaeaAaHaoaHaoaHaoaHaoaHaoajaHajaWajaHajajajajaIajaIajaIajapaIagaIapaIagapagapaLapaLapahapahaLahaZahahaNahaNahaqahaqaNakaNaqaqakaqakaqaQaqasaXasaXasasaOasaOasaFasaFaOaDaFaFaFaRaF", +"a0aJaJaEaJaEaJaEaJaEaJataEataEataEatatazatauatauatauataaataaanaaanaaalaaalaaaaaaal#9aa#Caa#Caa#Caa#C#l#Caa#C#C#C#C#C#C#C#C#C#C#B#C#p#C#F#C#H#C#F#C#F#p#F#p#F#p#F#p#F#H#t#H#t#H#t#H#t#H#t#H#t#u#t#H#t#t#t#u#K#t#K#u#K#t#K#u#K#t#x#t#x#t#x#t#x#t#x#t#x#t#x#t#x#e#x#t#x#x#x#x#x#x#x#x#x#x#x#x#x#x.s#x#x#x.s#x.s#x.s#x.s#x.s#x.s#x.s#x.s#x.s#x.s#x.s#x.s.s.s#x.s.s.s#x.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.r.s.p.s.r.s.p.p.r.p.p.p.r.p.r.p.r.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q" +".p.q.r.q.o.q.q.q.o.q.q.q.q.q.q.q.q.q.q.t.q.6.q.t.q.6.q.t.q.6.q.6.qaT.t.6.taT.taT.taT.taT.taT.taB.taB.taB.taB.6aB.6aBaBaBaUaBaBaBaBaBaBaBaBaraBaraBaSaBaraBaSaBaSaraMaraSaraMaraMarawaSawarawaSawaSawaSawaGawawawaGaYawaYawaAawaAawaAawaAawaAaAaAaAaAaAaAaAaCaAaeaAaHaAaeaAaHaAaHaoaHaoaHaoaHaHajaHajaHajaHaIaHajajaIajaIajaKajapajagaIagaIagapagapaLapaLapahagahagahaLahahahahahahaNahaqahakaNakaNakaqakaqaQaqasaqasaQasaQasasasasaOasaFasaDaOaDaFaRaFaRaFaVa1aV", +"aEaJaEaJaEaJaEaJazaEataEazatazatauatauataaataaataaataaanaaaaaaalaaaaaaaa#9aa#9aa#Caa#Caa#Caa#Caa#C#C#C#C#6#C#C#C#B#C#B#C#F#C#F#C#F#C#F#C#F#p#F#p#F#p#F#H#F#H#F#H#t#F#t#H#t#F#t#H#t#t#t#F#K#t#K#t#K#t#K#t#K#t#K#t#x#t#x#t#x#t#x#t#x#t#x#K#x#K#x#K#x#x#x#x#x#x#x#x#x#x#x#x#I#x#x#x#b#x#x#x#b#x.s#x#b#x.s#x#b#x.s#x#b#x.s#x#b.s.s#x#b.s.s#x#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.p.p.r.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p" +".q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.o.q.q.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.q.6.q.t.t.6.t.6.t.6.t.6.taT.t.6.taB.taB.taB.taB.taB.taBaUaBaUaBaUaBaUaBaBaBaUaraBaraBaraBaSaBararaSaraSaraSaraSaraMaraGaSawarawaSawaSawaGawaGawaGawaGawawaAaGaAawaAawaAawaAacaAaAaAaAaAaAaAaAaoaAaeaAaoaAaHaAaHaoaHaoaHaoaHaoajaWajaWajaHajaHajajaIajaIajaIajapaIagaIapaIagapagapaLapaLapahapahaLahaZahahahahaNahaNahaqaNaqaNaqaNakaqakaqaQaqasaqasaXasasasasaOasaOasaFaOaFaOaFaFaRaFaRaF", +"a2aJa0aEaJaEaJaEaJataJataJataEataEataEatatazatauataaataaataaataaanaaanaaalaaalaaaaaaal#9aa#Caa#Caa#Caa#C#l#C#l#C#C#C#C#C#C#C#C#C#C#B#C#p#C#F#C#H#C#F#C#F#p#F#p#F#p#F#p#F#H#t#H#t#H#t#H#t#H#t#H#t#H#t#H#t#u#t#u#t#t#K#u#K#t#K#u#K#t#x#t#x#t#x#t#x#t#x#t#x#t#x#t#x#e#x#t#x#e#x#e#x#e#x#e#x#x#x#x#x#x#x#x#x#x.s#x#x#x.s#x.s#x.s#x.s#x.s#x.s#x.s#x.s#x.s#x.s#x.s#x.s.s.s#x.s.s.s#e.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.r.s.p.s.r.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.p.q" +".r.q.o.q.q.q.o.q.q.q.q.q.q.q.q.m.q.t.q.6.q.t.q.6.q.6.q.6.q.6.qaT.t.6.taT.taT.taT.taT.taT.taB.taB.6aB.taB.6aB.6aBaUaBaUaBaBaBaUaBaBaBaBaraBaraBaSaBaSaBaSaBaSaraSaraSaraMaraMaraMaSawaSawaSawaSawaSawaGawaGawaGaYawaYawaAawaAawaAawaAawaAaAaAaAaAaAaAaAaCaAaeaAaHaAaHaAaHaAaHaoaHaoaHaoaHaHaHaWajaHajaHaIaHajajaIajaIajaKajapajagaIagaIagaIagapaLapaLapaLagahapahaLahaLahahahahaNahaNahakaNakaNakaqakaqaQaqaQaqasaQasaQasasasasaOasaOasaDaOaFaOaDaFaRaFaRaFaVa1aV", +"aEaJaEaJaEaJataJataEazaEataEazatazatauatauataaataaataaanaaanaaaaaaalaaaaaaaa#9aa#9aa#Caa#Caa#Caa#Caa#C#C#C#C#6#C#C#C#B#C#B#C#F#C#F#C#F#C#F#C#F#p#F#p#F#p#F#H#F#H#F#H#t#F#t#H#t#F#t#H#t#F#t#F#t#t#K#t#K#t#K#t#K#t#K#t#x#t#K#t#x#t#x#t#x#t#x#t#x#t#x#K#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#b#x.s#x#b#x.s#x#b#x.s#x#b#x.s#x#b#x.s#x#b.s.s#x#b.s.s#x#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.p.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p" +".q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.o.q.q.q.o.q.q.q.q.t.q.t.q.t.q.6.q.t.q.6.q.6.t.6.t.6.t.6.t.6.taT.t.6.taB.taB.taB.taB.6aB.taBaUaBaUaBaUaBaUaBaBaBaUaraBaraBaraBaSaBaSaBaSaraSaraSaraSaraMaraGaSawarawaSawaSawaSawaGawaGaYaGawaGaYaGaAawaAawaAawaAawaAaAaAaAaAaAaAaAaAaAaeaAaoaAaHaAaHaoaHaoaHaWaHaoaHaWajaWajaHajaHajajaIajaIajaIajaIaIapaIapaIagaIagapaLapaLapaLapahaZahaZahaLahahahahaNahaqahaqahaqaNakaqakaqaQaqaQaqasaqasaQasaPasasaOasaFaOaFaOaFaFaRaFaRaFaVaF", +"a0aJa2aJa0aEaJaEaJaEaJataJataEataEatatatatatatauatauataaataaataaataaanaaanaaalaaalaaaaaaal#9aa#Caa#Caa#Caa#C#l#C#l#C#C#C#C#C#C#C#C#C#C#p#C#p#C#F#C#H#C#F#C#F#p#F#p#F#p#F#p#F#p#t#H#F#H#t#H#t#H#t#H#t#H#t#H#t#u#t#u#t#t#t#u#K#t#K#u#K#t#x#u#K#t#x#u#x#t#x#t#x#t#x#t#x#t#x#t#x#e#x#e#x#e#x#e#x#e#x#e#x#e#x#e#x#e#x#e#x#e.s#e#x#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s.p.s#e.s.p.s#e.s.p.s#e.s.p.s.p.s.p.s.r.s.p.s.r.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.r.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.p.q.p.q.r.q" +".o.m.q.q.o.m.q.q.q.m.q.q.q.m.q.6.q.6.q.6.q.6.q.6.q.6.q.6.qaT.t.6.taT.taT.taT.taT.taB.6aB.taB.6aB.6aB.6aB.6aBaUaBaUaBaBaBaUaBaBaBaBaSaBaraBaSaBaSaBaSaBaSaraSaraSaraMaSaSaraMaSawaSawaSawaSawaSawaGawaGawaGaYawaYawaYawaAawaAawaAawaAaYaAaAaAaAaAaAaCaAaAaAaHaAaHaAaHaAaHaoaHaoaHaoaHaHaHaWajaHajaHaIaHajaHaIajaIajaIajaIajagaIagaIagaIagapaLapaLapaLagahapahaLahaLahahahahaNahaNahakaNaqaNakaNakaqaQaqaQaqasakasaXasaQasasaOasaOasaFaOaFaOaDaFaDaFaRaFaRaFaVaRaV", +"aJaJaEaJaEaJaEaJataJataEazaEataEazatazatauatauataaataaataaanaaanaaaaaaalaaaaaaaa#Caa#Caa#Caa#Caa#Caa#C#9#C#C#C#C#6#C#C#C#B#C#B#C#F#C#F#C#F#C#F#C#F#p#F#p#F#p#F#p#F#H#F#H#t#H#t#H#t#F#t#H#t#F#t#H#t#t#t#t#K#t#K#t#K#t#K#t#x#t#K#t#x#t#x#t#x#t#x#t#x#t#x#t#x#e#x#t#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x.s#x#x#x.s#x.s#x.s#x.s#x.s#x.s#x.s#x.s#x.s#x.s#x.s.s.s#x.s.s.s#x.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.p.p.r.p.p.p.r.p.p.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p" +".q.p.q.p.q.p.q.o.q.o.q.o.q.o.q.q.q.o.q.q.m.q.t.q.6.q.t.q.6.q.6.q.6.q.6.t.6.t.6.t.6.t.6.taT.t.6.taB.taB.6aB.taB.6aB.6aBaUaBaUaBaUaBaUaBaBaBaUaraBaSaBaraBaSaBaSaBaSaraSaraSaraSaraMaraGaSawaSawaSawaSawaSawaGawaGaYaGawaGaYaGaAawaAawaAawaAawaAaAaAaAaAaAaAaAaAaAaHaAaoaAaHaAaHaAaHaoaHaWaHaoaHaWajaWajaHajaHajaHaIajaIajaIajaIaIapaIapaIagaIagapaLapaLapaLapahaZahaZahaLahahahahaNahaNahaqahaqaNakaNakaqaQaqaQaqasaqasaXasaXasasaOasaOasaFaOaFaOaDaFa1aFaRaFaVa1", +"a0aJa0aJa2aJa3aEaJaEaJaEaJataJataEataEatatazatatatauatauataaataaataaataaanaaanaaalaaalaaaaaaal#9aa#Caa#Caa#Caa#C#l#C#l#C#C#C#C#C#C#C#C#C#C#p#C#p#C#F#C#H#C#F#C#F#p#F#p#F#p#F#p#F#p#t#H#F#H#t#H#t#H#t#H#t#H#t#H#t#u#t#u#t#u#t#u#t#t#t#u#K#t#K#u#K#t#x#u#x#t#x#u#x#t#x#t#x#t#x#t#x#e#x#t#x#e#x#e#x#e#x#e#x#e#x#e#x#e#x#e#x#e#x#e#x#e.s#e#x#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s.p.s#h.s.p.s#h.s.p.s#h.s.p.p#h.p.p.p#h.p.r.p.r.p.r.p.r.p.r.p.r.p.r.p.r.p.q.p.m.p.q.p.m.p.q.p.m.p.q.p.m.p.q.p.m.q.q.o.m" +".q.q.q.m.q.m.q.m.q.m.q.m.q.6.q.6.q.6.q.6.q.6.q.6.q.6.taT.t.6.taT.taT.taT.6aT.taB.6aB.6aB.6aB.6aB.6aB.6aBaUaBaUaBaBaBaUa4aBaBaBaSaBaSaBaSaBaSaBaSaBaSaraSaraSaraMaSaSaraMaSawaSawaSawaSawaSawaSaYaGawaGaYawaYaGaYawaAawaAawaAawaAaYaAaAaAaAaAaAaCaAaAaAaHaAaHaAaHaAaHaAaHaoaHaoaHaHaHaWajaHajaHaIaHaIaHaIajaIajaIaIaIajagaIagaIagaIagaIaLapaLapaLapaLapahaLahaLahaLahahaNahaNahaNaNaqaNakaNakaqaQaqaQaqaQaqasaqasaQasasaOasaOasaOaOaFaOaDaOaDaFaRaFaRaFaVa1aVa1a5", +"aJa2aJaJaEaJaEaJaEaJataEataEazaEataEazatauatauatauataaataaataaanaaanaaaaaaalaaaaaaaa#Caa#Caa#Caa#Caa#C#l#C#9#C#C#C#C#6#C#C#C#B#C#p#C#B#C#F#C#F#C#F#C#F#p#F#p#F#p#F#p#F#H#F#H#t#H#t#H#t#F#t#H#t#F#t#H#t#t#t#t#t#t#K#t#K#t#K#t#K#t#K#t#x#t#x#t#x#t#x#t#x#t#x#t#x#t#x#t#x#e#x#e#x#e#x#x#x#x#x#x#x#x#x#x#x#x#x#x.s#x#x#x.s#x.s#x.s#x.s#x.s#x.s#x.s#x.s#x.s#x.s#x.s#x.s#x.s.s.s#x.s.s.s#e.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.p" +".q.p.q.o.q.o.q.o.q.q.q.o.q.q.m.o.q.q.6.q.t.q.6.q.6.q.6.q.6.q.6.q.6.t.6.t.6.t.6.t.6.taT.t.6.6aB.taB.6aB.6aB.6aB.6aBaUaBaUaBaUaBaUaBaBaBaUaraBaSaBaSaBaSaBaSaBaSaraSaraSaraSaSaMaraSaSawaSawaSawaSawaSawaGawaGaYaGaYaGaYaGaAawaAaGaAawaAawaAaAaAaAaAaAaAaAaAaAaHaAaoaAaHaAaHaAaHaoaHaWaHaWaHaWaHaWajaHajaWajaHaIajaIajaIajaIaIapaIapaIagaIagaIaLapaLapaLapaLaZahaZahaLahaZahahaNahaNahaqahaqaNakaNaqaqaQaqaQaqaQaqasaXasaXasasaOasaOasaFasaFaOaFaOaFaFaRaFaRa1aVa1", +"a0aJa0aJa0aJaJaJa3aEaJaEaJaEaJataJataEataEatatazatatatauatauataaataaataaataaalaaalaaalaaalaaaa#lal#9aa#Caa#Caa#Caa#C#l#C#l#C#C#C#C#C#C#C#C#C#C#p#C#p#C#B#C#H#C#F#C#H#p#F#p#F#p#F#p#F#p#t#p#F#H#t#H#t#H#t#H#t#H#t#H#t#u#t#H#t#u#t#u#t#u#t#u#t#t#K#u#K#t#x#u#x#t#x#u#x#t#x#u#x#t#x#u#x#t#x#t#x#e#x#t#x#e#x#e#x#e#x#e#x#e#x#e#x#e#x#e#x#e#x#e#x#e.s#e#x#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#h.s#e.s#h.s#e.s#h.s#e.s#h.s#e.p#h.p#e.p#h.p.r.p#h.p.r.p#h.p.r.p#h.p.r.p#h.p.r.p#h.p.q.p.m.p.q.p.m.p.q.p.m.p.m.p.m.r.m.p.m.q.m.o.m.q.m" +".q.m.q.m.q.m.q.m.q.m.q.6.q.6.q.6.q.6.q.6.q.6.q.6.taT.6.6.taT.6aT.taT.6aT.6aB.6aB.6aB.6aB.6aB.6aB.6aBaUaBaUaBaBaBaUa4aBa4aBaSaBaSaBaSaBaSaBaSaBaSaraSaSaSaraMaSaSaSaMaSawaSawaSawaSawaSawaSaYaGaYaGaYawaYaGaYawaAawaAaYaAawaAaYaAaAaAaAaAaAaCaAaAaAaHaAaHaAaHaAaHaAaHaWaHaoaHaWaHaWaHaHajaHaIaHaIaHaIajaIajaIaIaIajaKaIapaIagaIagaIaLapaLapaLapaLapahaLahaLahaLahahaNahaNahaNahaqaNakaNakaNaQaqaQaqaQaqasaqasaQasaQaOasaOasaOasaFaOaDaOaFaOaRaFaRaFaRa1aVa1aVaRa5", +"aJa2aJa2aEaJaEaJaEaJaEaJataEataEazaEataEazatauatauatauataaataaataaanaaanaaaaaaalaaaaaaaa#Caa#Caa#Caa#Caa#C#l#C#9#C#C#C#C#6#C#C#C#B#C#p#C#B#C#F#C#F#C#F#C#F#p#F#p#F#p#F#p#F#p#F#H#t#H#t#H#t#H#t#H#t#F#t#H#t#t#t#u#t#t#t#t#K#t#K#t#K#t#K#t#x#t#x#t#x#t#x#t#x#t#x#t#x#t#x#t#x#e#x#t#x#e#x#e#x#e#x#e#x#e#x#e#x#e#x#e#x#e#x#e.s#x#x#x.s#x.s#x.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s.p.s#e.s.p.s#e.s.p.s#e.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.p.p.r.p.p.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.p.q.p.q.p" +".m.o.q.o.m.o.q.q.m.o.q.q.m.o.m.q.6.q.6.q.6.q.6.q.6.q.6.q.6.q.6.t.6.t.6.taT.t.6.6aT.t.6.6aB.6aB.6aB.6aB.6aB.6aBaUaBaUaBaUaBaUaBaBa4aUaraBaSaBaSaBaSaBaSaBaSaraSaraSaraSaSaSaSaSaSawaSawaSawaSawaSawaGawaGaYaGaYaGaYaGaYawaAaGaAaYaAawaAaYaAaAaAaAaAaAaAaAa6aAaWaAaHaAaHaAaHaoaHaWaHaWaHaWaHaWajaHajaWajaHaIaHaIajaIajaIaIaIaIapaIagaIapaIaLapaLapaLapaLaZahaZahaLahaZahahaNahaNahaNahaqaNaqaNaqaNaQaqaQaqaQaqasaXasaXasaQaOasaOasaOasaFaOaFaOaFaFaRaFaRa1aVa1aVa1", +"a0aJa0aJa0aJa0aJaJaEaJaEaJaEaJaEaJataEataEataEatatazatatatauatauataaataaataaanaaalaaalaaalaaalaaaa#lal#9aa#Cal#Caa#Caa#C#l#C#l#C#C#C#C#C#C#C#C#C#C#p#C#p#C#B#C#H#C#F#C#H#p#F#p#F#p#F#p#F#p#F#p#F#p#t#H#t#H#t#H#t#H#t#H#t#u#t#H#t#u#t#u#t#u#t#u#t#u#t#u#t#t#x#u#K#t#x#u#x#t#x#u#x#t#x#u#x#t#x#u#x#e#x#u#x#e#x#h#x#e#x#h#x#e#x#h#x#e#x#h#x#e#x#h#x#e#x#h#x#e.s#h#x#e.s#h.s#e.s#h.s#e.s#h.s#e.s#h.s#e.s#h.p#e.p#h.p#h.p#h.p#h.p#h.p#h.p#h.p#h.p#h.p#h.p#h.p#h.p#h.p#h.p.m.p.m.p.m.p.m.p.m.p.m.p.m.p.m.p.m.r.m.o.m.q.m.o.m.q.m.q.m" +".q.m.q.m.q.m.q.6.q.6.q.6.q.6.q.6.q.6.q.6.m.6.taT.6.6.taT.6aT.6aT.6aT.6aB.6aB.6aB.6aB.6aB.6aB.6aBaUaBaUa4aBaBaUa4aBa4aBa4aBaSaBaSaBaSaBaSaBaSaBaSaSaSaraMaSaSaSaMaSawaSawaSawaSawaSawaSaYaGaYaGaYawaYaGaYawaAawaAaYaAaYaAaYaAaYaAaAaAaAaCaAaAaAa7aAaHaAaHaAaHaAaHaWaHaWaHaWaHaWaHaHajaHaIaHaIaHaIaHaIajaIaIaIajaKaIapaIagaIagaIaLapaLapaLapaLapaLaLahaZahaLahaLaNahaNahaNahaNahakaNakaNakaqaQaqaQaqaQaqasaQasaXasasaOasaOasaOasaFaOaFaOaRaFaRaFaRa1aVa1aVaRaVaVa5", +"aJa0aJa2aJa2aEaJaEaJaEaJaEaJataEataEazaEataEazatauatauatauataaataaataaanaaanaaaaaaalaaaaaaaa#Caa#Caa#Caa#Caa#C#l#Caa#C#C#C#C#C#C#C#C#B#C#p#C#B#C#F#C#F#C#F#C#F#p#F#p#F#p#F#p#F#p#F#H#t#H#t#H#t#H#t#H#t#F#t#H#t#t#t#H#t#t#t#u#t#t#K#t#K#t#K#t#x#t#K#t#x#t#x#t#x#t#x#t#x#t#x#t#x#e#x#t#x#e#x#e#x#e#x#e#x#e#x#e#x#e#x#e#x#e#x#e.s#e#x#e.s#e#x#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s.p.s#e.s.p.s#e.s.p.s#e.p.p.p#e.p.p.p#h.p.p.p#h.p.p.p#h.p.r.p#h.p.r.p#h.p.q.p.m.p.q.p.m.p.q.p.m.p.q.p.m.p.q.p.m.o" +".q.o.m.o.m.q.m.o.m.q.m.q.m.q.6.q.6.q.6.q.6.q.6.q.6.q.6.q.6.t.6.t.6.6aT.t.6.6aT.t.6.6aB.6aB.6aB.6aB.6aB.6aBaUaBaUaBaUa4aUaBaBa4aUaSaBaSaBaSaBaSaBaSaBaSaraSaSaSaraSaSaSaSaSaSawaSaGaSawaSawaSaYaSawaGaYaGaYaGaYaGaYawaAaGaAaYaAaYaAaYaAaAaAaAaAaAaAaAa6aAaWaAaHaAaHaAaHaAaHaWaHaWaHaWaHaWajaWaIaWajaHaIaHaIajaIajaIaIaIaIapaIagaIapaIaLaIaLapaLapaLaZaLaZahaZahaZahaLaNahaNahaNahaqaNaqaNaqaNaQaqaQaqaQaqaQaXasaXasaQaOaPaOasaOasaOaOaFaOaFaOaRaFaRaFaRa1aVa1a5a1", +"a8a2a0aJa0aJa0aJa0aJaJaEaJaEaJaEaJaEaJataEataEataEatatazatatatauatauataaataaataaanaaalaaalaaalaaalaaal#lal#9aa#Cal#Caa#Caa#C#l#C#l#C#C#C#C#C#C#C#C#C#C#p#C#p#C#p#C#H#C#F#C#H#p#F#p#H#p#F#p#F#p#F#p#F#p#t#p#t#H#t#H#t#H#t#H#t#H#t#H#t#u#t#u#t#u#t#u#t#u#t#u#t#u#t#u#t#u#e#u#e#t#x#u#x#t#x#u#x#t#x#u#x#t#x#u#x#e#x#u#x#e#x#h#x#e#x#h#x#e#x#h#x#e#x#h#x#e#x#h#x#e#x#h#x#e.s#h#x#e.s#h#e#e.p#h.p#e.p#h.p#h.p#h.p#h.p#h.p#h.p#h.p#h.p#h.p#h.p#h.p#h.p#h.p#h.p.m.p.m.p.m.p.m.p.m.p.m.p.m.p.m.p.m.r.m.p.m.r.m.o.m.q.m.q.m.q.m.q.m.q.m" +".q.m.q.m.q.6.q.6.q.6.m.6.q.6.m.6.q.6.m.6.6aT.6.6.6aT.6aT.6aT.6aT.6aB.6aB.6aB.6aB.6aB.6aB.6a4aBaBaUa4aBa4aUa4aBa4aBa4aBaSaBaSaBaSaBaSa4aSaBaSaSaSaSaMaSaSaSaMaSaMaSawaSawaSaYaSawaSaYaGaYaGaYawaYaGaYawaYawaAaYaAaYaAaYaAaYaAaAaAaAa7aAaAaAa7aAaHaAaHaAaHaAaHa6aHaWaHaWaHaWaHaHaHaWaIaHaIaHaIaHaIajaIaIaIaIaKaIaIaIagaIagaIaLaIaLapaLapaLapaLaLahaZahaLahaLaNahaNahaNahaNahakaNaqaNakaNakaqaQaqaQaqasaQasaXasaQasasaOasaOasaFaOaFaOaDaOaRaFaRaFaRa1aVaRaVa1a5aVa5", +"aJa2aJa0aJa2aJa2aEaJaEaJaEaJaEaJataEataEazatatatazatauatauatauataaataaataaanaaanaaaaaaalaaaaaaaa#Caa#Caa#Caa#Caa#C#l#Caa#C#C#C#C#C#C#C#C#B#C#p#C#B#C#F#C#F#C#F#C#F#p#F#p#F#p#F#p#F#p#F#p#t#H#t#H#t#H#t#H#t#H#t#H#t#t#t#H#t#t#t#u#t#t#t#u#K#t#K#t#K#t#K#t#x#t#x#t#x#t#x#t#x#t#x#t#x#t#x#t#x#e#x#t#x#e#x#e#x#e#x#e#x#e#x#e#x#e#x#e#x#e#x#e.s#e#x#e.s#e#x#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.p#e.p#e.p#e.p#h.p#e.p#h.p.p.p#h.p.p.p#h.p.r.p#h.p.r.p.m.p.q.p.m.p.m.p.m.p.m.p.m.p.m.p.m.p.m.o.m.o.m.o" +".m.o.m.q.m.o.m.q.m.q.m.q.6.q.6.q.6.q.6.q.6.q.6.q.6.t.6.6.6.t.6.6aT.6.6.6aT.6.6.6aB.6aB.6aB.6aB.6aB.6aBaUaBaUaBaUa4aUaBaBa4aUa4aBaSaBaSaBaSaBaSaBaSaraSaSaSaraSaSaSaSaSaSawaSaGaSawaSawaSaYaSaYaGaYaGaYaGaYaGaYawaAaGaAaYaAaYaAaYaAaAaAaAaAaAaAaAa6aAaWaAaHaAaWaAaHaAaHaWaHaWaHaWaHaWaHaWaIaWaIaHaIaHaIajaIajaIaIaIaIaIaIapaIapaIaLaIaLapaLapaLaZaLaZahaZahaZahaLaNahaNahaNahaNaNaqaNaqaNaQaNaQaqaQaqaQaXasaXasaXasaXaOasaOasaOaOaFaOaFaOaRaFa1aFaRa1aVa1aVa1a5aV", +"a8a2a8a2a0aJa0aJa0aJa0aJaJaEaJaEaJaEaJaEaJataEataEataEatatazatanatauatauataaataaataaanaaalaaalaaalaaalaaal#lal#9aa#Cal#Caa#Caa#C#l#C#l#C#C#C#C#C#C#C#C#C#C#p#C#p#C#p#C#p#C#F#C#H#p#F#p#H#p#F#p#F#p#F#p#F#p#t#p#t#p#t#H#t#H#t#H#t#H#t#H#t#u#t#u#t#u#t#u#t#u#t#u#t#u#t#u#t#u#e#u#t#u#e#u#e#u#e#u#e#u#e#u#x#t#x#u#x#t#x#u#x#e#x#u#x#e#x#h#x#e#x#h#x#e#x#h#x#e#x#h#e#e#e#h#e#h#e#h#e#h.p#h#e#h.p#h#e#h.p#h#e#h.p#h#e#h.p#h.p#h.p#h.p#h.p#h.p#h.p#h.p.m.p.m.p.m.p.m.p.m.p.m.p.m.p.m.p.m.p.m.r.m.p.m.q.m.o.m.q.m.q.m.q.m.q.m.q.m.q.m" +".m.m.q.6.m.6.q.6.m.6.q.6.m.6.maT.m.6.6aT.6.6.6aT.6aT.6aT.6aT.6aB.6aB.6aB.6aB.6a4.6aB.6a4aBa4aUa4aBa4aUa4aBa4aBa4aBaSaBaSaBaSaBaSa4aSaBaSaSaSaSaMaSaSaSaMaSaMaSawaSawaSaYaSaYaSaYaGaYaGaYawaYaGaYaYaYawaAaYaAaYaAaYaAaYaAaAaAaAa6aAa6aAa7aAaHaAaHaAaHaAaHa6aHaWaHaWaHaWaHaHaHaWaIaHaIaHaIaHaIajaIaIaIaIaIaIaIaIagaIagaIaLaIaLapaLapaLapaLaLahaZahaLahaLaNaLaNahaNahaNahakaNaqaNakaNakaqaQaqaQaqaQaXasaXasaQasasaOasaOasaOaOaFaOaDaOaRaFaRaFaRa1aVa1aVa1a5aVa5aVa5", +"a2a0aJa2aJa0aJaJaEaJaEaJaEaJaEaJaEaEataEataEazatatatazatauatauatauataaataaataaanaaanaaaaaaalaaaaaaaa#Caa#Caa#Caa#Caa#C#l#Caa#C#C#C#C#C#C#C#C#B#C#C#C#B#C#p#C#F#C#F#C#F#p#F#p#F#p#F#p#F#p#F#p#t#p#F#H#t#H#t#H#t#H#t#H#t#H#t#H#t#t#t#u#t#t#t#u#t#t#t#u#t#t#K#t#x#t#x#t#x#t#x#t#x#t#x#t#x#t#x#t#x#t#x#t#x#e#x#t#x#e#x#e#x#e#x#e#x#e#x#e#x#e#x#e#x#e#x#e.s#e#x#e.s#e#x#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.p#e.p#h.p#e.p#h.p#e.p#h.p#e.p#h.p#e.p#h.p#h.p#h.p#h.p#h.p.m.p.m.p.m.p.m.p.m.p.m.p.m.p.m.p.m.p.m.o.m.o.m.o.m.q.m.o" +".m.q.m.o.m.q.m.q.6.q.6.q.6.q.6.q.6.m.6.q.6.m.6.t.6.6.6.6.6.6aT.6.6.6aT.6aT.6aB.6aB.6aB.6aB.6aB.6aBaUa4aUaBaUa4aUa4aBa4aUa4aBaSaBaSaBaSaBaSa4aSaBaSaSaSaSaSaSaSaSaSaSawaSaGaSawaSawaSaYaSaYaGaYaGaYaGaYaGaYawaAaGaAaYaAaYaAaYaAaAaAaAaAaAaAaAa6aAa6aAaHaAaWaAaHaAaHaWaHaWaHaWaHaWaHaWaIaWaIaHaIaHaIaHaIajaIaIaIaIaIaIapaIapaIaLaIaLapaLapaLaZaLaZaLaZahaZahaLaNaLaNahaNahaNaNaqaNaqaNakaNaXaqaQaqaQaXaQaXasaXasaXasasaOasaOaOaOaOaFaOa1aOa1aFaRaFaRa1aVa1aVa1a5a9", +"a8a2a8a2a8a2a0aJa0aJa0aJa0aJaJaEaJaEaJaEaJaEaJataEataEataEatatazatanatauatauataaataaataaanaaalaaalaaalaaalaaal#lal#9aa#Cal#Caa#Caa#C#l#C#l#C#l#C#C#C#C#C#C#C#C#p#C#p#C#p#C#p#C#p#C#H#p#F#p#H#p#F#p#H#p#F#p#F#p#t#p#F#p#t#p#t#H#t#H#t#H#t#H#t#u#t#H#t#u#t#u#t#u#t#u#t#u#t#u#t#u#e#u#t#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#h#e#u#e#h#e#h#e#h#e#h#e#h#e#h#e#h#e#h#e#h#e#h#e#h#e#h#e#h#e#h#e#h#e#h#e#h.p#h#e#h.p#h#e#h.p#h#e#h.p.m#e.m.p.m#e.m.p.m#e.m.p.m#e.m.p.m#h.m.p.m#h.m.o.m.m.m.q.m.m.m.q.m.m.m.q.m.m.m.q.m.m.6" +".m.6.m.6.m.6.m.6.m.6.m.6.maT.m.6.6aT.6.6.6aT.6aT.6aT.6aT.6aB.6aB.6a4.6aB.6a4.6a4.6a4aBa4aUa4aBa4aUa4aBa4aBa4aBaSaBaSa4aSaBaSa4aSa4aSaSaSaSaMaSaSaSaMaSaMaSaYaSawaSaYaSaYaSaYaSaYaGaYawaYaGaYaYaYawaAaYaAaYaAaYaAaYaAaAaAaAa6aAa6aAa7aAaHaAaHaAaHaAaHa6aHaWaHaWaHaWaHaHaHaWaIaHaIaHaIaHaIaHaIaIaIaIaIaIaIaIagaIagaIaLaIaLaIaLapaLapaLaZaLaZahaLahaLaNaLaNahaNahaNahaNaNaqaNakaNakaNaQaqaQaqaQaXasaXasaQasaQaOasaOasaOaOaFaOaDaOaFaOaRaFaRaFaRa1aVa1a5aRa5aVa5a5a5", +"a2a0a2a0aJa2aJa2aJaJaEaJaEaJaEaJataJataEataEataEazatatatazatauatauatauataaataaataaanaaanaaaaaaalaaaaaaaa#Caa#Caa#Caa#Caa#C#l#Caa#C#C#C#C#C#C#C#C#B#C#C#C#B#C#p#C#B#C#F#C#F#p#F#p#F#p#F#p#F#p#F#p#F#p#F#p#t#H#t#H#t#H#t#H#t#H#t#H#t#u#t#u#t#t#t#u#t#t#t#u#t#t#t#u#e#t#t#u#x#t#x#t#x#t#x#t#x#t#x#t#x#t#x#t#x#e#x#t#x#e#x#e#x#e#x#e#x#e#x#e#x#e#x#e#x#e#x#e#x#e#x#e#x#e#x#e.s#e#x#e.s#e#x#e.s#e.p#h.p#e.p#h.p#e.p#h.p#e.p#h.p#e.p#h.p#e.p#h.p#h.p#h.p#h.p#h.p#h.p.m.p.m.p.m.p.m.p.m.p.m.p.m.p.m.p.m.p.m.p.m.o.m.o.m.o.m.q.m.o.m.q" +".m.o.m.q.m.q.6.m.6.q.6.m.6.q.6.m.6.q.6.m.6.6.6.6.6.6.6.6aT.6.6.6aT.6aB.6aB.6aB.6aB.6aB.6a4.6aBaUa4aUa4aUa4aUa4aBa4aUa4aBaSaBaSaBaSaBaSa4aSaBaSaSaSaSaSaSaSaSaSaSaMaSaGaSaYaSawaSaYaSaYaGaYaGaYaGaYaGaYaYaYaGaAaYaAaYaAaYaAaYaAaAa6aAaAaAa6aAa6aAaHaAaWaAaHaAaHa6aHaWaHaWaHaWaHaWaIaWaIaHaIaWaIaHaIajaIaIaIaIaIaIapaIapaIaLaIaZaIaLapaLaZaLaZaLaZahaZahaLaNaZaNahaNahaNaNaNaNaqaNaqaNaqaNaQaqaQaqaQaXasaXasaXasaQaOasaOaOaOaOaFaOaFaOa1aFaRaFaRa1aVa1aVa1a5a9a5a5", +"a8a2a8a2a8a2a0a2a0aJa0aJa0aJa0aEaJaEaJaEaJataJataJataEataEataEatatatatanatauatauataaataaataaataaalaaalaaalaaalaaal#lal#9aa#Cal#Caa#Caa#C#l#C#l#C#l#C#C#C#C#C#C#C#C#p#C#p#C#p#C#p#C#p#C#H#p#F#C#H#p#F#p#H#p#F#p#F#p#t#p#F#p#t#p#t#p#t#p#t#H#t#H#t#H#t#H#t#u#t#u#t#u#t#u#t#u#t#u#t#u#t#u#t#u#e#u#t#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#h#e#u#e#h#e#h#e#h#e#h#e#h#e#h#e#h#e#h#e#h#e#h#e#h#e#h#e#h#e#h#e#h#e#h#e#h#e.m#e.m#e.m#e.m#e.m#e.m#e.m#e.m.p.m#h.m.p.m#h.m.p.m#h.m.n.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.6.m.6" +".m.6.m.6.m.6.m.6.m.6.maT.6.6.6aT.6aT.6aT.6aT.6aT.6aT.6a4.6aB.6a4.6a4.6a4.6a4.6a4aBa4aUa4aBa4aBa4aBa4aBa4a4aSaBaSa4aSa4aSa4aSa4aSaSaSaSaMaSaSaSaMaSaMaSaYaSaYaSaYaSaYaSaYaSaYaGaYawaYaGaYaYaYaYaAaYaAaYaAaYaAaYaAaYaAaAa6aAa6aAa7aAa6aAaHaAaHaAaHa6aHa6aHaWaHaWaHaHaHaWaIaHaIaHaIaHaIaHaIaIaIaIaIaIaIaIaKaIapaIaLaIaLaIaLapaLapaLaZaLaZahaLahaLaNaLaNahaNahaNahaNaNaqaNakaNakaNaQaqaQaqaQaXaQaXasaQasaQaOasaOasaOaOaOaOaFaOaFaOaRaFaRaFaRa1aVa1a5aRa5aVa5a5a5a5b.", +"a2a8a2a0a2a0aJa2aJa2aJaJaEaJaEaJaEaJataJataEataEataEazatatatazatauatauatauataaataaataaanaaanaaaaaaalaaaaaaaa#Caa#Caa#Caa#Caa#C#l#Caa#C#l#C#C#C#C#C#C#p#C#C#C#B#C#p#C#B#C#F#C#F#p#F#p#F#p#F#p#F#p#F#p#F#p#F#p#t#p#t#H#t#H#t#H#t#H#t#H#t#u#t#H#t#u#t#u#t#t#t#u#t#t#t#u#t#t#t#u#e#t#e#u#e#t#e#u#x#t#x#u#x#t#x#t#x#t#x#t#x#e#x#t#x#e#x#e#x#e#x#e#x#e#x#e#x#e#x#e#x#e#e#h#e#e#e#h#e#e#e#h#e#e#e#h.p#e#e#h.p#e#e#h.p#e#e#h.p#e.p#h.p#h.p#h.p#h.p#h.p#h.p.m.p.m.p.m.p.m.p.m.p.m.p.m.p.m.p.m.p.m.p.m.p.m.o.m.o.m.q.m.o.m.m.m.o.m.m.m.q" +".m.m.m.q.6.m.6.q.6.m.6.m.6.m.6.m.6.m.6.6.6.6.6.6.6.6aT.6.6.6aT.6aB.6aB.6aB.6a4.6aB.6a4.6a4aUa4aUa4aUa4aUa4aBa4aUa4aBaSaBaSa4aSaBaSa4aSa4aSaSaSaSaSaSaSaSaSaSaMaSaGaSaYaSaYaSaYaSaYaGaYaGaYaGaYaGaYb#aYb#aAaYaAaYaAaYaAaYaAaAa6aAa6aAa6aAa6aAaHaAaWa6aHaAaHa6aHaWaHaWaHaWaHaWbaaWaIaHaIaWaIaHaIajaIaIaIaIaIaIaIaIapaIaLaIaZaIaLapaLaZaLaZaLaZahaZahaLaNaZaNahaNahaNaNaNaNaqaNaqaNaqaNaQaqaQaqaQaXaQaXasaXasaQaOaPaOasaOaOaOaOaFaOa1aOaRaFaRa1aRa1aVa1a5a1a5a5a5a5", +"bba2a8a2a8a2a8aJa0aJa0aJa0aJa0aJa0aEaJaEaJaEaJataJataJataEataEataEatatatatanatauatanataaataaataaataaalaaalaaalaaalaaal#lalaaaa#Cal#Caa#Cal#C#l#Caa#C#l#C#l#C#C#C#C#C#C#p#C#p#C#p#C#p#C#p#C#p#p#H#C#H#p#F#p#H#p#F#p#H#p#F#p#F#p#t#p#t#p#t#p#t#p#t#p#t#H#t#H#t#u#t#H#t#u#t#u#t#u#t#u#t#u#t#u#t#u#t#u#t#u#e#u#t#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#h#e#u#e#h#e#u#e#h#e#h#e#h#e#h#e#h#e#h#e#h#e#h#e.m#e.m#e.m#e.m#e.m#e.m#e.m#e.m#e.m#e.m#e.m#e.m#h.m#e.m#h.m#e.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.6.m.6.m.6.m.6" +".m.6.m.6.m.6.m.6.maT.6.6.6aT.6aT.6.5.6aT.6.5.6aT.6a4.6a4.6a4.6a4.6a4.6a4.6a4aBa4aUa4aBa4aBa4aBa4aBa4a4aSaBaSa4aSa4aSa4aSa4aSaSaSaSaMaSaSaSbcaSaMaSaYaSaYaSaYaSaYaSaYaSaYaGaYaYaYaGaYaYaYaYaYaYaAaYaAaYaAaYa6aYaAaAa6aAa6aAa7aAa6aAaHa6aHaAaHa6aHa6aHaWaHaWaHaWaHaWbaaHaIaHaIaHaIaHaIaIaIaIaIaIaIaIaKaIapaIaLaIaLaIaLapaLapaLaZaLaZaLaLahaZaNaLaNaLaNahaNahaNaNaNaNakaNaqaNaQaNaQaqaQaXaQaXasaQasaXaOaQaOasaOaOaOaOaFaOaFaOaRaOaRaFaRa1aRa1aVaRa5a1a5a5a5a5a5a5b.", +"a2a8a2a8a2a0aJa0aJa2aJa2aJaJaEaJaEaJaEaJataJataEataEataEazatatatazatauataaatauataaataaataaalaaanaaaaaaalaaaaaaal#Caa#Caa#Caa#Caa#Caa#Caa#C#l#C#C#C#C#C#C#C#C#C#C#B#C#p#C#B#C#p#C#F#p#F#C#F#p#F#p#F#p#F#p#F#p#F#p#t#p#t#p#t#p#t#H#t#H#t#H#t#H#t#H#t#u#t#u#t#u#t#u#t#t#t#u#t#t#t#u#e#t#t#u#e#t#e#u#e#t#e#u#e#t#e#u#e#t#e#u#e#t#e#u#e#e#e#u#e#e#e#h#e#e#e#h#e#e#e#h#e#e#e#h#e#e#e#h#e#e#e#h#e#e#e#h#e#e#e#h#e#h#e#h.p#h#e#h.p#h#e#h.p#h#e#h.p.m#e.m.p.m#e.m.p.m#e.m.p.m#e.m.p.m#e.m.p.m#e.m.o.m.n.m.o.m.m.m.o.m.m.m.o.m.m.m.m.m.m" +".6.m.6.m.6.m.6.m.6.m.6.m.6.m.6.m.6.6.6.6.6.6.6.6aT.6.6.6aT.6aB.6a4.6aB.6a4.6a4.6a4.6a4aUa4aUa4aUa4aUa4aBa4aUa4aBaSaBaSa4aSa4aSa4aSa4aSaSaSaSaSaSaSaSaSaSbcaSaGaSaYaSaYaSaYaSaYaSaYaGaYaGaYaGaYb#aYb#aAaYaAaYaAaYaAaYaAaAa6aAa6aAa6aAa6aAaHaAaWa6aHaAaHa6aHaWaHaWaHaWaHaWbaaWaIaHaIaWaIaHaIaHaIaIaIaIaIaIaIaIapaIaLaIaZaIaLaIaLaZaLaZaLaZaLaZahaZaNaZaNaLaNahaNaNaNaNaNaNaqaNaqaNaQaqaQaqaQaqaQaXasaXasaXaOaXaOasaOasaOaOaFaOaFaOaRaFa1a1aRa1aVa1a5a1a5aVa5bda5a5", +"bba2bba2a8a2a8a2a8aJa0aJa0aJa0aJa3aJa3aEaJaEaJaEaJataJataEataEataEataEatatatatanatauatanataaataaataaataaalaaalaaalaaalaaal#lalaaaa#Cal#Caa#Cal#C#l#Caa#C#l#C#l#C#C#C#C#C#C#p#C#p#C#p#C#p#C#p#C#p#C#p#C#p#p#F#p#H#p#F#p#H#p#F#p#H#p#t#p#t#p#t#p#t#p#t#p#t#p#t#p#t.l#t#H#t#u#t#u#t#u#t#u#t#u#t#u#t#u#t#u#t#u#e#u#t#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#h#e#u#e#h#e#u#e#h#e.l#e.m#e.m#e.m#e.m#e.m#e.m#e.m#e.m#e.m#e.m#h.m#e.m#h.m#e.m#h.m#e.m.m.m.n.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.6.m.6.m.6.m.6.m.6" +".m.6.maT.m.6.m.5.6.6.6.5.6aT.6.5.6.5.6.5.6.5.6a4.6a4.6a4.6a4.6a4.6a4.6a4aBa4aUa4aBa4aBa4a4a4aBa4a4aSa4aSa4aSa4aSa4aSa4aSaSaSaSaMaSaSaSbcaSbcaSaYaSaYaSaYaSaYaSaYaSaYaGaYaYaYb#aYaYaYaYaYaYaAaYaAaYaAaYa6aYa6aAa6aAa6aAa7aAa6aAaHa6aHa6aHa6aHa6aHaWaHaWbaaWaHaWbaaHaIaHaIaHaIaHaIbaaIaIaIaIaIaIaKaIapaIaLaIaLaIaLaIaLapaLaZaLaZaLaLahaZaNaLaNaLaNahaNahaNaNaNaNakaNaqaNaQaNaQaqaQaXaQaXaQaXasaXaOaQaOasaOasaOaOaOaOaFaOaRaOaRaFaRa1aRa1aVa1aVa1a5aVa5a5a5a5b.a5be", +"a2a8a2a8a2a0aJa0aJa0aJa2aJa2aEaJaEaJaEaJaEaJataJataEataEataEazatatatazatauataaataaataaataaataaalaaanaaalaaalaaaaaaal#laa#Caa#Caa#Caa#Caa#Caa#C#l#C#C#C#C#C#C#C#C#C#C#p#C#p#C#B#C#p#C#B#C#F#C#F#p#F#p#F#p#F#p#F#p#F#p#t#p#F#p#t#p#t#p#t#H#t#H#t#H#t#H#t#u#t#H#t#u#t#u#t#u#t#u#t#u#t#u#t#u#t#u#e#t#t#u#e#t#e#u#e#t#e#u#e#t#e#u#e#t#e#u#e#t#e#u#e#e#e#u#e#e#e#h#e#e#e#h#e#e#e#h#e#e#e#h#e#h#e#h#e#h#e#h#e#h#e#h#e#h#e#h#e#h#e#h#e.m#e.m#e.m#e.m#e.m#e.m#e.m#e.m#e.m#e.m#e.m#e.m#e.m#e.m.n.m.m.m.n.m.m.m.n.m.m.m.m.m.m.m.m.m.m.6.m" +".6.m.6.m.6.m.6.m.6.m.6.m.6.m.6.6.6.6aT.6.6.6aT.6.6.6.5.6aB.6a4.6a4.6a4.6a4.6a4.6a4aUa4aUa4aUa4aUa4aBa4aUa4a4aSaBaSa4aSa4aSa4aSa4aSaSaSaSaSaSaSaSaSaSbcaSb#aSaYaSaYaSaYaSaYaSaYaGaYb#aYaGaYb#aYb#aAaYaAb#aAaYaAaYaAaYa6aAa6aAa6aAa6aAa6aAaWa6aHa6aHa6aHa6aHaWaHaWaHaWbaaWaIaHaIaWaIaHaIaHaIaIaIaIaIaIaIaIaIaIaZaIaZaIaLaIaLaZaLaZaLaZaLaZahaZaNaZaNaLaNahaNaNaNaNaNaNaqaNaqaNaQaNaXaqaQaqaQaXaQaXasaXaOaXaOasaOasaOaOaOaOaFaOa1aOa1a1aRa1aRa1a5a1a5a1a5a9a5a5a5a5", +"bba8bba2bba2a8a2a8a2a8aJa0aJa0aJa0aJa3aJa3aEaJaEaJaEaJataJataEataEataEataEatatatatanatauatanataaataaataaataaalaaalaaalaaalaaal#lalaaal#Cal#Caa#Cal#Caa#Caa#C#l#C#l#C#l#C#C#C#C#p#C#C#C#p#C#p#C#p#C#p#C#p#C#p#p#p#p#H#p#F#p#H#p#F#p#H#p#t#p#H#p#t#p#u#p#t#p#t#p#t#p#t#p#t#p#t.l#t#p#t.l#t#u#t#u#t#u#t#u#t#u#t#u#t#u#t#u#e#u#t#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e.l#e.l#e.l#e.l#e.m#e.l#e.m#e.l#e.m#e.l#e.m#e.l#h.m#e.m#h.m#e.m#h.m#e.m#h.m.n.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.6.m.6.m.6.m.k.m.6.m.k.m.6" +".m.5.m.6.6.5.6.k.6.5.6.5.6.5.6.5.6.5.6.5.6a4.6a4.6a4.6a4.6a4.6a4.6a4aBa4aUa4a4a4aBa4a4a4a4a4a4aSa4aSa4aSa4aSa4aSa4aSaSaSaSbcaSaSaSbcaSbcaSaYaSaYaSaYaSaYaSaYaSaYaGaYb#aYb#aYaYaYaYaYaYaAaYaAaYaAaYa6aYa6aAa6aAa6aAa7aAa6aAa7a6aHa6aHa6aHa6aHa6aHaWbaaWbaaWbaaHaIaHaIaHaIaHaIbaaIaIaIaIaIaIaIaIaIaIaLaIaLaIaLaIaLapaLaZaLaZaLaLahaZaNaLaNaLaNaLaNahaNaNaNaNaNaNaqaNaQaNaQaNaQaXaQaXaQaXasaXaOaQaOaQaOasaOaOaOaOaFaOaRaOa1aOaRa1aRa1aRa1aVa1a5aRa5aVa5a5a5a5bea5be", +"a2a8a2a8a2a8a2a0aJa0aJa0aJa2aJa2aEaJaEaJaEaJaEaJataJataEataEataEazatatatauatauataaataaataaataaataaalaaanaaalaaalaaaaaaal#laa#Caa#Caa#Caa#Caa#Caa#C#l#C#l#C#C#C#C#C#C#C#C#p#C#p#C#B#C#p#C#B#C#p#C#F#p#F#p#F#p#F#p#F#p#F#p#F#p#F#p#t#p#t#p#t#p#t#p#t#H#t#H#t#u#t#H#t#u#t#u#t#u#t#u#t#u#t#u#t#u#t#u#t#u#t#u#e#u#t#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#h#e#u#e#h#e#u#e#h#e#h#e#h#e#h#e#h#e#h#e#h#e#h#e#h#e#h#e.m#e.m#e.m#e.m#e.m#e.m#e.m#e.m#e.m#e.m#e.m#e.m#e.m#e.m.n.m.n.m.n.m.m.m.n.m.m.m.n.m.m.m.m.m.m.m.m.6.m.6.m.6.m" +".6.m.6.m.6.m.6.m.6.m.6.6.6.6.6.6.5.6.6.6.5.6.6.6.5.6a4.6a4.6a4.6a4.6a4.6a4.6a4aUa4aUa4aUa4aUa4a4a4aUa4a4aSa4aSa4aSa4aSa4aSa4aSaSaSaSaSaSbfaSaSaSbcaSb#aSaYaSaYaSaYaSaYaSaYaGaYb#aYb#aYb#aYb#aYaYaAb#aAaYa6aYaAaYa6aAa6aAa6aAa6aAa6aAaWa6aHa6aHa6aHa6aHaWaHaWaHaWbaaWbaaWaIaWaIaHaIaHaIaIaIaIaIaIaIaIaIaIaZaIaZaIaLaIaLaZaLaZaLaZaLaZaLaZaNaZaNaLaNaLaNaNaNaNaNaNaNaNaqaNaQaNaXaqaQaqaQaXaQaXasaXaOaXaOaQaOasaOaOaOaOaFaOa1aOa1aFaRa1aRa1aVa1a5a1a5a9a5a5a5a5b.a5", +"bba8bba0a8a2a8a2a8a2a8a2a0aJa0aJa0aJa0aJa3aJa3aEaJaEaJaEaJataJataEataEatatatatatatatatanataaatanataaataaataaataaalaaalaaalaaalaaalaaalaaal#lal#Caa#Cal#Caa#Cal#C#l#C#l#C#l#C#l#C#C#p#C#C#C#p#C#p#C#p#C#p#C#p#C#p#p#p#p#p#p#H#p#H#p#F#p#H#p#F#p#H#p#t#p#u#p#t#p#u#p#t#p#t#p#t#p#t#p#t#p#t.l#t.l#t.l#t.l#t.l#t.l#t.l#t.l#t.l#t.l#t.l#e.l#t.l#e.l#e.l#e.l#e.l#e.l#e.l#e.l#e.l#e.l#e.l#e.l#e.l#e.l#e.l#e.l#e.l#e.l#h.l#e.l#h.m#e.l#h.m#e.l#h.m.n.l.m.m.m.l.m.m.m.l.m.m.m.l.m.m.m.l.m.m.m.l.m.m.m.k.m.6.m.k.m.6.m.k.m.k.m.k.m.k.m.5" +".m.k.6.5.6.5.6.5.6.5.6.5.6.5.6.5.6a4.6a4.6a4.6a4.6a4.6a4.6a4.6a4a4a4aUa4a4a4a4a4a4a4a4a4a4aSa4aSa4aSa4aSa4aSa4bfaSaSaSbcaSbfaSbcaSbcaSbcaSaYaSaYaSaYaSaYbfaYaSaYb#aYb#aYaYaYaYaYaYaAaYa6aYaAaYa6aYa6aYa6aAa6aAa7aAa6aAa7a6aHa6aHa6aHa6aHa6aHaWbaaWbaaWbaaHbaaWaIaHaIaHaIbaaIbaaIaIaIaIbgaIaIaIaLaIaLaIaLaIaLaIaLaZaLaZaLaZaLaZaNaLaNaLaNaLaNahaNaNaNaNaNaNaqaNaQaNaQaNaQaqaQaXaQaXaQaXaOaQaOaQaOasaOasaOaOaOaOa1aOa1aOaRa1aRa1aRa1aVa1a5aRa5aVa5a5a5a5bea5bea5bh", +"a2bba2a8a2a8a2a8a2a0aJa0aJa0aJa2aJa2aEaJaEaJaEaJaEaJataJataEataEataEazatatatauatauataaataaataaataaataaalaaanaaalaaalaaaaaaal#laa#Caa#Caa#Caa#Caa#Caa#C#l#C#l#C#l#C#C#C#C#C#C#p#C#p#C#p#C#p#C#B#C#p#C#B#p#H#p#F#p#F#p#F#p#F#p#F#p#F#p#t#p#t#p#t#p#t#p#t#p#t#p#t#p#t#H#t#u#t#H#t#u#t#u#t#u#t#u#t#u#t#u#t#u#t#u#e#u#t#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#h#e#u#e#h#e#u#e#h#e.m#e.m#e.m#e.m#e.m#e.m#e.m#e.m#e.m#e.m#e.m#e.m#e.m#e.m#e.m#e.m.n.m.n.m.m.m.n.m.m.m.n.m.m.m.m.m.m.m.m.m.m.6.m.6.m.6.m.6.m.6.m" +".6.m.6.m.6.m.k.m.6.6.k.6.6.6.5.6.k.6.5.6.5.6.5.6a4.6a4.6a4.6a4.6a4.6a4.6a4aUa4aUa4bia4aUa4a4a4bia4a4aSa4aSa4aSa4aSa4aSa4aSaSaSaSaSaSbfaSbfaSbcaSb#aSaYaSaYaSaYaSaYbfaYaGaYb#aYb#aYb#aYb#aYaYaAb#aAaYa6aYa6aYa6aAa6aAa6aAa6aAa6aAaWa6aHa6aHa6aHa6aHaWbaaWaHaWbaaWbaaWaIaWaIbaaIaHaIbaaIaIaIaIaIaIaIaIaZaIaZaIaLaIaLbgaLaZaLaZaLaZaLaZaNaZaNaLaNaZaNaNaNaNaNaNaNaNaqaNaXaNaXaNaQaqaQaXaQaXasaXaOaXaOaQaOaPaOaOaOaOaFaOa1aOa1aOaRaFaRa1aRa1a5a1a5a1a5a5a5a5a5a5bea5", +"bba8bba8bba0a8a2a8a2a8a2a8a2a0aJa0aJa0aJa0aJa3aJa3aEaJaEaJaEaJataJataEataEatatatatatatatatanataaatanataaataaataaataaalaaalaaalaaalaaalaaalaaal#lal#Caa#Cal#Caa#Cal#C#l#C#l#C#l#C#l#C#l#C#C#C#C#p#C#p#C#p#C#p#C#p#C#p#p#p#C#p#p#p#p#p#p#H#p#H#p#F#p#H#p#t#p#H#p#t#p#u#p#t#p#u#p#t#p#u#p#t#p#u.l#t#p#t.l#t.l#t.l#t.l#t.l#t.l#t.l#t.l#t.l#t.l#t.l#e.l#t.l#e.l#t.l#e.l#e.l#e.l#e.l#e.l#h.l#e.l#h.l#e.l#h.l#e.l#h.l#e.l#h.l#e.l#h.l#e.l.m.l.m.l.m.l.m.l.m.l.m.l.m.l.m.l.m.l.m.l.m.l.m.l.m.k.m.k.m.k.m.k.m.k.m.k.m.k.m.5.m.k.m.5.6.k" +".6.5.6.5.6.5.6.5.6.5.6.5.6.5.6a4.6a4.6a4.6a4.ka4.6a4.ka4.6a4a4a4bia4a4a4a4a4a4a4a4a4a4aSa4aSa4aSa4aSa4aSa4bfa4aSaSbcaSbfaSbcaSbcaSbcaSaYaSaYaSaYaSaYbfaYbfaYb#aYb#aYaYaYaYaYaYaAaYa6aYa6aYa6aYa6aYa6aAa6aAa7a6a6aAa7a6aHa6aHa6aHa6aHa6aHaWbaaWbaaWbaaHbaaWaIaHaIaHaIbaaIbaaIaIaIaIbgaIaIaIaLaIaLaIaLaIaLaIaLaZaLaZaLaZaLaZaNaLaNaLaNaLaNahaNaNaNaNaNaNaqaNaQaNaQaNaQaqaQaXaQaXaQaXaOaQaOaXaOaQaOasaOaOaOaOa1aOa1aOaRaOaRa1aRa1aRa1a5aRa5a1a5a5a5a5bja5bea5bhbjbh", +"bkbba2bba2a8a2a8a2a8a2a0aJa0aJa0aJa2aJa2aEaJaEaJaEaJaEaJataJataEataEataEazatatatauatauataaataaataaataaataaalaaanaaalaaalaaaaaaal#laa#Cal#Caa#Caa#Caa#Caa#C#l#C#l#C#l#C#C#C#C#C#C#p#C#p#C#p#C#p#C#B#C#p#C#B#p#p#C#F#p#H#p#F#p#F#p#F#p#F#p#t#p#F#p#t#p#t#p#t#p#t#p#t#p#t#p#t.l#t#p#t.l#t.l#t#u#t#u#t#u#t#u#t#u#t#u#t#u#t#u#e#u#t#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e.l#e.l#e.l#e.l#e.l#e.m#e.l#e.m#e.l#e.m#e.l#e.m#e.l#e.m#e.m#e.m#e.m#e.m#e.m.n.m.m.m.n.m.m.m.n.m.m.m.n.m.m.m.m.m.m.l.m.m.m.k.m.6.m.k.m.6.m.k.m.6.m" +".k.m.6.m.k.6.k.6.k.6.k.6.5.6.k.6.5.6.5.6.5.6a4.6a4.6a4.6a4.6a4.6a4.6a4bia4aUa4bia4bia4a4a4bia4a4aSa4aSa4aSa4aSa4aSa4aSa4bfaSaSaSbfaSbfaSbcaSbfaSaYaSaYaSaYaSaYbfaYaGaYb#aYb#aYb#aYb#aYaYaAb#aAaYa6aYa6aYa6aAa6aAa6aAa6a6a6aAa6a6aHa6aWa6aHa6aHa6baaWbaaWbaaWbaaWaIaWaIbaaIblaIbaaIaIaIaIaIaIaIaIbgaIaZaIaLaIaZbgaLaZaLaZaLaZaLaZaNaZaNaLaNaZaNaNaNaNaNaNaNaNaqaNaXaNaXaNaQaqaQaXaQaXaQaXaOaXaOaXaOaPaOaOaOaOaOaOa1aOa1aOaRaFa1a1aRa1aVa1a5a1a5a5a5bda5a5bea5bebj", +"bba8bba8bbbkbba0a8a2a8a2a8a2a8a2a0aJa0aJa0aJa0aJa3aEa3aEaJaEaJaEaJataJataEataEatatatatatatatatatataaatanataaataaataaataaalaaalaaalaaalaaalaaalaaal#lal#lal#Cal#Caa#Cal#C#l#C#o#C#l#C#l#C#l#C#l#C#C#p#C#p#C#p#C#p#C#p#C#p#C#p#C#p#p#p#p#p#p#p#p#p#p#H#p#H#p#H#p#H#p#t#p#u#p#t#p#u#p#t#p#u#p#t#p#u#p#t#p#u.l#t#p#u.l#t.l#u.l#t.l#u.l#t.l#u.l#t.l#u.l#t.l#u.l#t.l#u.l#e.l#u.l#e.l#u.l#e.l#h.l#e.l#h.l#e.l#h.l#e.l#h.l#h.l.m.l.m.l.m.l.m.l.m.l.m.l.m.l.m.l.m.l.m.l.m.l.m.l.m.l.m.k.m.k.m.k.m.k.m.k.m.k.m.k.m.k.m.5.m.k.m.5.6.k.6.5" +".6.5.6.5.6.5.6.5.6.5.6.5.ka4.6a4.ka4.6a4.ka4.ka4.5a4.ka4a4a4bia4a4a4a4a4a4a4a4a4a4aSa4aSa4aSa4bfa4aSa4bfa4bfaSbcaSbfaSbcaSbcaSbcaSaYaSaYbfaYaSaYbfaYbfaYb#aYb#aYaYaYb#aYaYaYaYa6aYa6aYa6aYa6aYa6aAa6aAa7a6a6a6a7a6aHa6aHa6aHa6aHa6aHa6baaWbaaWbaaHbaaWaIbaaIaHaIbaaIbaaIaIaIaIbgaIbgaIbmaIaZaIaLbgaLaIaLaZaLaZaLaZaLaZbnaLaNaLaNaLaNaLaNaNaNaNaNaNaNaNaQaNaXaNaQaNaQaqaQaXaQaXaQaQaOaXaOaQaOasaOaOaOaOaOaOa1aOaRaOaRaFaRa1aRa1a5a1a5a1a5a5a5a5a5a5bea5bebjbebebh", +"a8bbbkbba2bba2a8a2a8a2a8a2a0aJa0aJa0aJa2aJa2aEaJaEaJaEaJaEaJataJataEataEataEazatatatazatauataaataaataaataaataaalaaanaaalaaalaaaaaaal#laaaaal#Caa#Caa#Caa#Caa#C#l#C#l#C#l#C#l#C#C#C#C#p#C#C#C#p#C#p#C#p#C#p#C#B#p#p#C#B#p#p#p#F#p#H#p#F#p#F#p#F#p#F#p#t#p#t#p#t#p#t#p#t#p#t#p#t#p#t#p#t.l#t#p#t.l#t.l#t.l#t.l#t.l#t.l#t.l#t.l#t.l#t.l#e.l#t.l#e.l#t.l#e.l#e.l#e.l#e.l#e.l#e.l#e.l#e.l#e.l#e.l#e.l#e.l#e.l#e.l#e.l#e.l#e.l#e.l#e.m#e.l#e.m#e.l#e.m.m.l.n.m.m.l.n.m.m.l.n.m.m.l.m.m.m.l.m.m.m.l.m.6.m.k.m.k.m.k.m.k.m.k.m.k.m.k.m" +".k.m.k.6.k.6.5.6.k.6.5.6.k.6.5.6.5.6a4.6a4.6a4.6a4.6a4.6a4.ka4.6a4bia4bia4a4a4bia4a4a4bia4a4aSa4aSa4aSa4aSa4bfa4aSa4bfaSbfaSbfaSbfaSbcaSbfaSaYaSaYaSaYaSaYbfaYbfaYb#aYb#aYb#aYb#aYaYa6b#aAaYa6aYa6aYa6aYa6aAa6aAa6a6a6a6a6a6aHa6aWa6aHa6aHa6baaWbaaWbaaWbaaWbaaWaIbaaIblaIbaaIaIaIaIbgaIaIaIbgaIaZaIaLaIaZbgaLaZaLaZaLaZaLaZbnaZaNaZaNaZaNbnaNaNaNaNaNaNaNaNaXaNaXaNaQaNaQaXaQaXaQaXaOaXaOaXaOaXaOaOaOaOaOaOa1aOa1aOa1aOa1a1aRa1aRa1a5a1a5boa5bda5a5bja5bea5bebe", +"bbbbbba8bba8bbbkbba0a8a2a8a2a8a2a8a2a0aJa0aJa0aJa0aJa3aEa3aEaJaEa3aEaJataJataEataEatatatatatatatatatataaatanataaatalataaataa#iaaalaaalaaalaaalaaalaaal#lal#lal#Cal#Caa#Cal#C#l#C#o#C#l#C#l#C#l#C#l#C#C#p#C#p#C#p#C#p#C#p#C#p#C#p#C#p#p#p#C#p#p#p#p#p#p#p#p#p#p#p#p#H#p#u#p#H#p#u#p#u#p#t#p#u#p#t#p#u#p#t#p#u#p#t#p#u.l#t#p#u.l#t.l#u.l#t.l#u.l#t.l#u.l#t.l#u.l#t.l#u.l#t.l#u.l#e.l#u.l#e.l#u.l#h.l#u.l.m.l.m.l.m.l.m.l.m.l.m.l.m.l.m.l.m.l.m.l.m.l.m.l.m.l.m.l.m.l.m.k.m.k.m.k.m.k.m.k.m.k.m.k.m.5.m.k.m.5.m.k.6.5.6.5.6.5.6.5" +".6.5.k.5.6.5.k.5.6a4.ka4.ka4.ka4.ka4.ka4.ka4.5a4bia4a4a4bia4a4a4a4a4a4a4a4a4a4aSa4bfa4aSa4bfa4bfa4bfa4bfaSbcaSbfaSbcaSbcaSbcbfaYaSaYbfaYbfaYbfaYbfaYb#aYb#aYaYaYb#bpaYaYaYa6aYa6aYa6aYa6aYa6aAa6aAa7a6a6a6a7a6a7a6aHa6aHa6baa6aHa6baaWbaaWbaaHbaaWbabaaIbaaIbaaIbaaIbaaIaIbgaIbgaIbmaIaZaIaLbgaLbgaLbgaLaZaLaZaLaZbnaLaNaZaNaLaNaLaNaNaNaNaNaNaNaNaQaNaXaNaQaNaQaqaQaXaQaXaQaXaOaXaOaQaOaQaOaOaOaOaOaOaFaOaRaOaRaFaRa1aRa1bqa1a5a1a5bqa5a5a5a5a5a5bea5bebjbhbebh", +"bkbba8bbbkbba2bba2a8a2a8a2a8a2a0aJa0aJa0aJaJaJaJaEaJaEaJaEaJaEaJataJataEataEataEazatatatazatauataaataaataaataaataaataaanaaalaaalaaalaaal#laaaaal#Caa#Caa#Caa#Caa#C#l#C#l#C#l#C#l#C#l#C#C#p#C#C#C#p#C#p#C#p#C#p#C#p#C#p#C#B#p#p#p#B#p#p#p#F#p#H#p#F#p#F#p#t#p#F#p#t#p#t#p#t#p#t#p#t#p#t#p#t#p#t#p#t.l#t#p#t.l#t.l#t.l#t.l#t.l#t.l#t.l#t.l#t.l#t.l#e.l#t.l#e.l#t.l#e.l#e.l#e.l#e.l#e.l#e.l#e.l#e.l#e.l#e.l#e.l#e.l#e.l#e.l#e.l#e.l#e.l.m.l.n.l.m.l.n.l.m.l.n.l.m.l.m.l.m.l.m.l.m.l.m.l.m.k.m.k.m.k.m.k.m.k.m.k.m.k.m.k.m.k.m.k.6" +".k.6.k.6.5.6.k.6.5.6.k.6.5.6.5.6a4.6a4.ka4.6a4.ka4.6a4.ka4.ka4bia4bia4a4a4bia4a4a4bia4a4aSa4aSa4bfa4aSa4bfa4bfa4bfaSbfaSbfaSbfaSbcaSbfaSaYaSaYbfaYaSaYbfaYbfaYb#aYb#aYb#aYb#aYaYbpb#aAaYa6aYa6aYa6aYa6aAa6aAa6a6a6a6a6a6aHa6aWa6aHa6aHa6baaWbaaWbaaWbaaWbaaWaIbaaIblaIbaaIbaaIaIbgaIaIaIbgaIaZaIaLaIaZbgaLbgaLaZaLaZaLaZbnaZaNaZaNaZaNbnaNaNaNaNaNaNaNaNaXaNaXaNaQaNaXaXaQaXaQaXbraXaOaXaOaXaOaOaOaOaOaObsaOa1aOa1aOa1a1aRa1aRa1a5a1a5a1a5bda5a5bja5bea5bebjbebe", +"btbbbbbbbba8bba8bbbkbba0a8a2a8a2a8a2a8a2a0aJa0aJa0aJa0aJa3aEa3aEaJaEa3aEaJataJataEataEatatatatatatatatatatanatanataaatalataaataa#iaaanaaalaaalaaalaaalaaal#lal#lal#lal#Cal#Cal#C#l#C#o#C#l#C#o#C#l#C#l#C#l#p#l#C#C#p#C#p#C#p#C#p#C#p#C#p#p#p#C#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p.l#p.l#p#u#p#u#p#u#p#u#p#u#p#u#p#u#p#u#p#u#p#u.l#u#p#u.l#u.l#u.l#u.l#u.l#u.l#u.l#u.l#u.l#u.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.m.l.l.l.m.l.l.l.m.l.l.l.m.l.l.l.m.l.l.l.m.l.m.l.m.k.m.k.m.k.m.k.m.k.m.k.m.5.l.k.m.5.l.k.m.5.l.k.6.5.k.5.6.5.k.5.6.5" +".k.5.k.5.k.5.ka4.ka4.ka4.ka4.ka4.ka4.ka4.5a4bia4a4a4a4a4a4a4a4a4a4a4a4.ia4aSa4bfa4bfa4bfa4bfa4bca4bfaSbcaSbfaSbcaSbcaSbcbfaYaSaYbfaYbfaYbfaYbfaYb#aYb#aYaYaYb#bpaYbpaYa6aYa6aYa6aYa6aYa6aYa6aAa7a6a6a6a7a6a7a6aHa6aHa6baa6baa6baaWbaaWbaaHbaaWbabaaIbaaIbaaIbaaIbaaIaIbgaIbgaIbmaIbgaIaLbgaLbgaLbgaLaZaLaZaLaZbnaLaNaZaNaLaNaLaNbnaNaNaNaNaNaNbuaNaXaNaQaNaQaNaQaXaQaXaQaXasaXaOaQaOaQaOaOaOaOaOaOaFaOaRaOa1aOaRa1aRa1bqa1a5a1a5bqa5a5a5a5a5a5bea5bebjbhbebhbebv", +"bbbbbkbba8bba2bba2bba2a8a2a8a2a0a2a0aJa0aJa0aJaJaJaJaEaJaEaJaEaJaEaJataJataEataEataEazatatatazatanataaataaataaataaataaataaanaaalaaalaaalaaalaaaaaaal#laa#Cal#Caa#Caa#C#l#C#l#C#l#C#l#C#l#C#l#C#C#C#C#p#C#p#C#p#C#p#C#p#C#p#C#p#p#p#p#B#p#p#p#B#p#H#p#F#p#H#p#F#p#H#p#t#p#t#p#t#p#t#p#t#p#t#p#t#p#t#p#t.l#t#p#t.l#t.l#t.l#t.l#t.l#t.l#t.l#t.l#t.l#t.l#t.l#t.l#t.l#t.l#e.l#t.l#e.l#t.l#e.l#e.l#e.l#e.l#e.l#e.l#e.l#h.l#e.l.m.l.n.l.m.l.n.l.m.l.n.l.m.l.m.l.m.l.m.l.m.l.m.l.m.l.m.k.m.k.m.k.m.k.m.k.m.k.m.k.m.k.m.k.m.k.m.k.6.5.6" +".k.6.5.6.k.6.5.6.5.k.5.6.5.ka4.6a4.ka4.ka4.ka4.ka4.ka4.ka4bia4bia4a4a4bia4a4a4a4a4a4aSa4aSa4bfa4aSa4bfa4bfa4bfaSbfaSbfaSbfaSbcaSbfbfaYaSaYbfaYbfaYbfaYbfaYb#aYb#aYb#aYb#aYaYbpb#a6aYa6aYa6aYa6aYa6aAa6aAa6a6a6a6a6a6a7a6aWa6aHa6aHa6baaWbaaWbaaWbaaWbaaWaIbaaIblaIbaaIbaaIaIbgaIbgaIbgaIbgaIaLaIaZbgaLbgaLaZaLaZaLaZbnaZaNaZaNaZaNbnaNbnaNaNaNaNaNaNbwaNaXaNaQaNaXaXaQaXaQaXbraXaOaXaOaXaObraOaOaOaObsaOa1aOa1aOa1a1aRa1aRa1bqa1a5a1a5boa5a5a5a5bja5bea5bebebhbe", +"btbbbtbbbbbbbba8bba8bbbkbba0a8a2a8a2a8a2a8a2a0aJa0aJa0aJa0aJa3aEa3aEaJaEa3aEaJataJataEataEatatatatatatatatatatanatanataaatalataaataa#iaaataaalaaalaaalaaalaaal#lal#lal#lal#lal#Cal#C#l#Cal#C#l#C#o#C#l#C#o#C#l#C#l#C#l#p#C#p#C#p#C#p#C#p#C#p#C#p#C#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p.l#p#p#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l.l.l#p.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.m.k.l.k.m.k.l.k.m.k.l.k.m.5.l.k.m.5.l.k.m.5.l.k.l.5.k.5.k.5.k.5.k.5.k.5.k.5.k.5" +".k.5.k.5.ka4.ka4.ka4.ka4.ka4.5a4.ka4.5a4bia4a4a4a4.ia4a4a4.ia4a4a4bfa4bfa4bfa4bfa4bfa4bfa4bca4bfaSbcaSbfaSbcbfbcaSbcbfaYbfaYbfaYbfaYbfaYbfaYb#aYb#bpaYaYb#bpaYbpaYa6aYa6aYa6aYa6aYa6bpa6aAa7a6a6a6a7a6a7a6aHa6aHa6baa6baa6baaWbaaWbaaHbaaWbabaaIbaaIbaaIbaaIbaaIaIbgaIbgaIbmaIbgaIaLbgaLbgaLbgaLaZaLaZaLaZbnaLbnaZaNaLaNaLaNbnaNaNaNaNaNaNbwaNaXaNaQaNaQaNaQaXaQaXaQaXaQaXaOaQaOaQaOaOaOaOaOaOaOaOa1aOa1aOaRa1aRa1aRa1bqa1a5aRa5boa5a5a5a5bja5bea5bhbebhbebvbebx", +"bbbbbbbbbkbba8bba2a8a2a8a2a8a2a8a2a0a2a0aJa0aJa0aJaJaJa3aEaJaEaJaEaJaEaJataJataEataEataEatatatatazatanataaataaataaataaataaataaanaaalaaalaaalaaalaaalaaal#laa#lal#Caa#Caa#C#l#Caa#C#l#C#l#C#l#C#l#C#l#C#C#p#C#p#C#p#C#p#C#p#C#p#C#p#p#p#C#p#p#p#p#B#p#p#p#B#p#p#p#F#p#H#p#t#p#H#p#t#p#u#p#t#p#t#p#t#p#t#p#t#p#t#p#t.l#t#p#t.l#t.l#t.l#t.l#t.l#t.l#t.l#t.l#t.l#t.l#t.l#t.l#t.l#t.l#t.l#t.l#e.l#u.l#e.l#u.l.n.l.l.l.n.l.m.l.n.l.m.l.n.l.m.l.m.l.m.l.m.l.m.l.m.l.m.l.m.l.m.k.m.k.m.k.m.k.m.k.m.k.m.k.m.k.m.k.m.k.m.k.6.k.6.5.6.k.k" +".5.6.k.k.5.6.5.k.5.6.5.ka4.ka4.ka4.ka4.ka4.ka4.ka4bia4bia4bia4a4a4bia4a4.ia4a4a4bfa4aSa4bfa4bfa4bfa4bfa4bfaSbfaSbfaSbfaSbcaSbfbfaYaSaYbfaYbfaYbfaYbfaYb#aYb#aYb#bpb#aYaYbpb#a6aYa6aYa6aYa6aYa6bpa6aAa6a6a6a6a6a6a7a6aWa6baa6aHa6baa6baaWbaaWbaaWbaaWbabaaIblaIbaaIbaaIaIbgaIbgaIbgaIbgaIaZaIaZbgaLbgaLbgaLaZaLaZbnaZbnaZaNaZaNbnaNbyaNaNaNaNaNaNbwaNaXaNaXaNaXbwaQaXaQaXbraXbraXaOaXaObraObzaOaOaOaObsaOa1aOa1bsaRa1a1a1bqa1a5a1a5a1a5a5a5bdbja5bea5bebjbebebAbe", +"btbbbtbbbbbbbbbbbba8bba8bba2bba0a8a2a8a2a8a2a8a2a0aJa0aJa0aJa0aJa3aEa3aEaJaEa3aEaJataJataJataEatatatatatatatatatatanatanataaatalataaataaataaataaalaaalaaalaaalaaal#lal#lal#lal#lal#lal#Cal#Cal#C#l#C#o#C#l#C#o#C#l#C#o#C#l#p#l#p#l#p#C#p#C#p#C#p#C#p#C#p#p#p#C#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p.l#p#p#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l.l.l#p.l.l.l#p.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.k.l.k.l.k.l.k.l.k.l.k.l.k.l.k.l.5.l.k.l.5.l.k.l.5.l.5.k.5.k.5.k.5.k.5.k.5.k.5.k.5.k.5.k.5" +".ka4.ka4.ka4.ka4.ka4.ka4.5a4.ka4.5a4bi.ia4a4a4.ia4.ia4.ia4.ia4bfa4bfa4bfa4bfa4bfa4bfa4bcaSbfaSbcbfbcaSbcbfbcbfbcbfaYbfaYbfaYbfaYbfaYbfaYaYaYb#bpaYbpaYbpaYbpaYa6aYa6aYa6aYa6aYa6bpa6a6a7a6a6a6a7a6a7a6a7a6aHa6baa6baa6baa6baaWbaaHbaaWbabababaaIbaaIbaaIbaaIbabgaIbgaIbmaIbgaIaLbgaLbgaLbgaLbgaLaZaLaZbnaZbnaZaNaLaNaLaNbnaNaNaNaNaNaNbwaNaXaNaQaNaQaNaQaXaQaXaQaXaQaXaOaQaOaXaObraOaOaOaOaOaOa1aOa1aOaRbsaRa1aRa1aRa1a5a1a5a1a5a5a5a5bja5bea5bebjbebebvbebvbebx", +"bbbbbbbbbbbbbkbba8bba2a8a2a8a2a8a2a8a2a0a2a0aJa0aJa0aJaJaJa3aEaJaEaJaEaJaEaJataJataEataEataEatatatatazatanataaatauataaataaataaataaataaalaaalaaalaaalaaalaaal#laa#lal#Caa#Cal#Caa#Caa#C#l#C#l#C#l#C#l#C#l#C#l#p#C#C#C#p#C#p#C#p#C#p#C#p#C#p#C#p#p#p#p#p#p#p#p#B#p#p#p#B#p#p#p#B#p#p#p#t#p#u#p#t#p#u#p#t#p#u#p#t#p#u#p#t#p#u#p#t.l#u#p#t.l#u#p#t.l#u.l#t.l#u.l#t.l#u.l#t.l#u.l#t.l.l.l#m.l.l.l#m.l.l.l#m.l.l.l.n.l.l.l.m.l.l.l.m.l.l.l.m.l.l.l.m.l.l.l.m.l.l.l.m.k.l.k.m.k.l.k.m.k.l.k.m.k.l.k.m.k.l.k.m.k.l.5.6.k.k.5.6.k.k.5.k" +".5.k.5.k.5.k.5.ka4.ka4.ka4.ka4.ka4.ka4.ka4.ka4bia4bia4bia4a4.ibia4a4.ia4a4a4bfa4bfa4bfa4bfa4bfa4bfa4bfaSbfaSbfaSbfbfbcaSbfbfaYbfaYbfaYbfaYbfaYbfaYb#aYb#aYb#bpb#bpaYbpb#a6aYa6aYa6aYa6aYa6bpa6a6a6a6a6a6a6a6a7a6aWa6baa6baa6baa6baaWbaaWbablbaaWbabaaIblaIbaaIbaaIbabgaIbgaIbgaIbgaIaZaIaZbgaLbgaLbgaLaZaLaZbnaZbnaZaNaZaNbnaNbyaNaNaNaNaNaNbwaNaXaNaXaNaXbwaQaXaQaXaQaXbraXaOaXaObBaObBaOaOaOaObsaOa1aOa1bsaRa1a1a1bqa1bqa1a5a1a5boa5bda5a5bea5bebjbebebebebvbe", +"bCbbbtbbbtbbbbbbbbbbbba8bba8bba2bba0a8a2a8a2a8a2a8a2a0aJa0aJa0aJa0aJa3aEa3aEaJaEa3aEaJataJataJataEatatataEatatatatatatatatanataaatalataaatalataaataa#iaaalaaalaaalaaal#lalaaal#lal#lal#lal#lal#Cal#C#o#C#o#C#l#C#o#C#l#C#o#C#l#p#o#C#l#p#l#p#l#p#C#p#C#p#C#p#C#p#C#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p.l#p#p#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l.l.l#p.l.l.l#p.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.k.l.k.l.k.l.k.l.k.l.k.l.5.l.k.l.5.l.k.l.5.l.k.l.5.l.k.l.5.k.5.k.5.k.5.k.5.k.5.k.5.k.5.k.5.k.5.ka4.ka4" +".ka4.ka4.ka4.ka4.k.i.5a4.k.ia4a4a4.ia4.ia4.ia4.ia4.ia4.ia4bfa4bfa4bfa4bfa4bfa4bfa4bcbfbfaSbcbfbcbfbcbfbcbfbcbfaYbfaYbfaYbfaYbfaYbfbpaYaYb#bpaYbpaYbpaYbpaYbpaYa6aYa6bpa6aYa6bpa6a6a6a6a6a6a7a6a7a6bDa6aHa6baa6baa6baa6baaWbablbaaWbabababaaIbaaIbaaIbaaIbabgaIbgaIbgaIbgaIbmbgaLbgaLbgaLbgaLaZaLaZbnaZbnaZbnaLaNaLaNbnaNbnaNaNaNaNbwaNbwaNaQaNaQaNaQbwaQaXaQaXaQaXbraQaOaXaObraOaOaOaOaOaObsaOa1aOaRbsaRa1aRa1aRa1a5a1a5a1a5bqa5a5bja5bja5bebjbebebvbebvbebxbAbx", +"bbbtbbbbbbbbbbbbbkbba8bba2a8a2a8a2a8a2a8aJa0aJa0aJa0aJa0aJaJaJa3aEaJaEaJaEaJaEaJataJataEataEataEatatatatazatatataaatauataaataaataaataaataaalaaalaaalaaalaaalaaal#laa#lal#laa#Cal#Caa#Caa#C#l#C#l#C#l#C#l#C#l#C#l#C#l#C#l#p#C#p#C#p#C#p#C#p#C#p#C#p#p#p#C#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#m#p#p#p#m#p.l#p#m#p.l#p#m#p.l#p#m#p.l#p#m#p.l#p#m.l.l#p#m.l.l#p#m.l.l.l#m.l.l.l#m.l.l.l#m.l.l.l#m.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.k.l.k.l.k.l.k.l.k.l.k.l.k.l.k.l.k.l.k.l.k.l.k.l.k.k.5.k.k.k.5.k.k.k.5.k.5.k" +".5.k.5.k.5.ka4.ka4.ka4.ka4.ka4.ka4.ka4.ka4bia4a4.ibia4a4.ibia4a4.ia4.ia4bfa4bfa4bfa4bfa4bfa4bfaSbfaSbfbfbcaSbfbfbcbfbfbfaYbfaYbfaYbfaYbfaYbfaYb#bpb#aYb#bpb#bpaYbpb#a6aYa6aYa6aYa6aYa6bpa6a6a6a6a6a6a6a6a7a6aWa6baa6baa6baa6baa6baaWbablbaaWbablbablaIbaaIbaaIbabgaIbgaIbgaIbgaIbgaIaZbgaLbgaLbgaLaZaLaZbnaZbnaZbnaZaNbnaNbyaNbnaNaNaNaNbwaNbwaNaXaNaXbwaQbwaQaXaQaXbraXaOaXaObBaObBaOaOaOaOaOaOa1aOa1bsa1bsa1a1bqa1bqa1a5a1a5boa5bda5a5bja5bebjbebjbebebvbebxbA", +"bEbbbCbbbtbbbtbbbbbbbbbbbba8bba8bba0bba0a8a2a8a2a8aJa8aJa0aJa0aJa0aJa0aJa3aJa3aEaJaEa3aEaJataJataJataEatatataEatatatatatatatatanatalatalataaatalataaataa#iaa#iaaalaaalaaalaaalaaal#lal#lal#lal#lal#lal#C#o#Cal#C#o#C#o#C#l#C#o#C#l#C#o#C#l#p#o#p#l#p#l#p#l#p#l#p#C#p#C#p#p#p#C#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p.l#p#p#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l.l.l#p.l.k.l.h.l.k.l.h.l.k.l.k.l.k.l.5.l.k.l.5.l.k.l.5.l.k.l.5.l.k.l.5.k.5.k.5.k.5.k.5.k.5.k.5.k.5.k.5.k.5.k.j.k.5.k.i.ka4.k.i" +".ka4.k.i.5a4.k.i.5.i.k.ia4.ia4.ia4.ia4.ia4.ia4.ia4.ia4bfa4bfa4bfa4bfa4bf.ibfa4bc.ibfbfbcbfbcbfbcbfbcbfbcbfaYbfaYbfaYbfbpbfaYbfbpaYbpb#bpaYbpaYbpaYbpaYbpaYa6aYa6bpa6bpa6bpa6a6a6a6a6a6a7a6a7a6bDa6baa6baa6baa6baa6baaWbablbablbabababaaIbaaIbabgbaaIbabgaIbgaIbgaIbgaIbmbgaLbgaLbgaLbgaLbgaLaZbnaZbnaZbnaLaNaLaNbnaNbnaNaNaNaNbwaNbwaNaQaNaXaNaQbwaQaXaQaXaQaXbraXaOaXaObraObraOaOaOaObsaOa1aOaRbsa1bsaRa1aRa1bqa1a5a1a5bqa5a5bja5bja5bebjbebjbhbebvbebvbAbxbAbF", +"bbbEbbbtbbbbbbbbbbbbbkbba8bba2a8a2a8a2a8a2a8aJa0aJa0aJa0aJa0aJaJaJa3aEaJaEaJaEaJaEaJataJataEataEataEatatatatazatatatauatanataaataaataaataaataa#iaaalaaalaaalaaalaaal#lal#lal#laa#lal#Caa#Cal#C#l#C#l#C#l#C#l#C#l#C#l#C#l#C#l#p#l#p#l#p#C#p#C#p#C#p#C#p#C#p#C#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p.l#p#p#p.l#p.l#p.l#p.l#p.l#p.l#p#m#p.l#p#m#p.l#p.l#p.l#p.l.l.l#p.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.k.l.k.l.k.l.k.l.k.l.k.l.k.l.k.l.k.l.k.l.k.l.k.l.k.l.5.k.k.k.5.k.k.k.5.k.5.k.5.k.5.k.5.k" +".5.ka4.ka4.ka4.ka4.ka4.ka4.k.i.ka4.k.ibia4a4.ibi.ia4.ibi.ia4.ia4.ia4bfa4bfa4bfa4bfa4bfa4bf.ibfaSbfbfbcbfbfbfbcbfbcbfaYbfaYbfaYbfaYbfbpbfaYb#bpb#bpb#bpb#bpaYbpb#a6aYa6aYa6bpa6aYa6bpa6a6a6a6a6a6a6a6a7a6a6a6baa6baa6baa6baa6baaWbablbablbablbablaIbaaIbaaIbabgbabgaIbgaIbgaIbgaIaZbgaLbgaZbgaLbgaLaZbnaZbnaZbnaZaNbnaNbyaNbnaNaNaNaNbwaNbwaNaXaNaXbwaQbwaXaXaQaXaQaXbraXaObBaObBaOaOaOaOaOaObsaOa1bsa1bsa1a1aRa1bqa1a5a1a5boa5bda5a5bja5bebjbebjbebebvbebvbAbxbA", +"bCbbbEbbbCbbbtbbbtbbbbbbbba8bba8bba8bba0bba0a8a2a8a2a8aJa8aJa0aJa0aJa0aJa0aJa3aJa3aEaJaEa3aEaJataJataJataEataEataEatatatatatatatatatatalatalataaatalataaatal#iaa#iaaalaaalaaalaaalaaal#lal#lal#lal#lal#lal#l#o#Cal#C#o#C#o#C#o#C#o#C#l#C#o#C#l#p#o#C#l#p#o#p#l#p#o#p#l#p#l#p#l#p#l#p#p#p#C#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p.l#p#p#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l.h.l.h.l.h.l.h.l.h.l.h.l.j.l.h.l.j.l.k.l.j.l.k.l.j.l.k.l.j.l.k.l.j.l.5.k.j.k.5.k.j.k.5.k.j.k.5.k.j.k.5.k.j.k.5.k.j.ka4.k.i.k.i.k.i.k.i" +".k.i.5.i.k.i.5.ibi.ia4.ia4.ia4.ia4.ia4.ia4.ia4.ia4bfa4bfa4bf.ibfa4bf.ibf.ibcbfbfbfbcbfbcbfbcbfbcbfbcbfaYbfaYbfaYbfbpbfbpbfbpaYbpb#bpaYbpaYbpaYbpaYbpbpa6aYa6bpa6bpa6bpa6bpa7a6a6a6a7a6a7a6bDa6baa6baa6baa6baa6baa6bablbablbabababababaaIbabgbabgbabgbabgaIbgaIbgaIbmbgaLbgaLbgaLbgbnbgaLaZbnaZbnaZbnaLaNaZaNbnaNbnaNbnaNaNbwaNbwaNbuaNaXaNaQbwaQbwaQaXaQaXbraXaOaXaObraObraOaOaOaObsaObsaOaRbsa1bsaRa1aRa1bqa1a5a1a5bqa5a5bja5bja5bebjbebjbhbebvbebvbAbxbAbxbvbF", +"bbbEbbbtbbbtbbbbbbbbbbbbbkbba8bba2a8a2a8a2a8a2a8aJa0aJa0aJa0aJa0aJaJaJa3aEaJaEaJaEaJaEaJataJataEataEataEatatatatatatatatauatanataaataaataaataaataa#iaaalaaalaaalaaalaaal#lalaaal#lal#lal#laa#Cal#C#l#Cal#C#l#C#l#C#l#C#l#C#l#C#l#p#l#C#l#p#l#p#l#p#C#p#C#p#C#p#C#p#p#p#C#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p.l#p#p#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l.l.l#p.l.l.l#p.l.l.l#p.l.l.l.l.l.l.l.l.l.l.l.k.l.k.l.k.l.k.l.k.l.k.l.k.l.k.l.k.l.k.l.k.l.k.l.k.l.k.l.5.k.k.k.5.k.k.k.5.k.k.k.5.k.5.k.5.k.5.k.5.ka4.k" +"a4.ka4.k.i.ka4.k.i.ka4.k.i.k.ibi.ibi.ia4.ibi.ia4.ia4.ia4.ia4bfa4bfa4bfa4bfa4bf.ibfa4bf.ibfaSbfbfbcbfbfbfbcbfbcbfaYbfaYbfaYbfaYbfbpbfaYb#bpb#bpb#bpb#bpaYbpb#a6aYa6aYa6bpa6bpa6bpa6a6a6a6a6a6a6a6bDa6a6a6baa6baa6baa6baa6baaWbablbablbablbablaIbaaIbaaIbabgbabgaIbgaIbgbgbgaIbgbgaLbgaZbgaLbgaLaZbnaZbnaZbnaZaNbyaNbyaNbnaNbnaNaNbwaNbwaNbwaNaXbwaQbwaXaXaQaXaQaXbraXaOaXaObBaObraOaOaOaObsaOa1aOa1bsa1bsaRa1bqa1bqa1a5boa5boa5a5bja5bjbjbebjbebjbAbebAbebxbAbxbA", +"bCbtbCbbbEbbbCbbbtbbbtbbbba8bba8bba8bba8bba0bba0a8a2a8a2a8aJa8aJa0aJa0aJa0aJa0aJa3aJa3aEa3aEa3aEaJata3ataJataJataEataEatatatatatatatatatatalatalatalatalataaatal#iaa#iaa#iaaalaaalaaalaaal#lal#lal#lal#lal#lal#lal#lal#l#o#C#o#C#o#C#o#C#o#C#o#C#l#C#o#C#l#p#o#p#l#p#o#p#l#p#o#p#l#p#o#p#l#p#l#p.h#p#l#p.h#p.h#p.h#p.h#p.h#p.h#p.h#p.h#p.h#p.h#p.h.l.h#p.h.l.h.l.h.l.h.l.h.l.h.l.h.l.h.l.h.l.j.l.h.l.j.l.h.l.j.l.h.l.j.l.h.l.j.l.h.l.j.l.j.l.j.l.j.k.j.k.j.k.j.k.j.k.j.k.j.k.j.k.j.k.j.k.j.k.j.k.j.k.i.k.i.k.i.k.i.k.i.5.i.k.i" +".5.i.k.i.5.ia4.ia4.ia4.ia4.ia4.ia4.ia4.i.ibfa4bf.ibfa4bf.ibf.ibc.ibf.ibcbfbfbfbcbfbcbfbcbfbcbfbcbfaYbfbpbfaYbfbpbfbpbfbpbcbpb#bpaYbpaYbpaYbpaYbpbpa6bpa6bpa6bpa6bpa6bpa7a6a6a6bDa6a7a6bDa6baa6baa6baa6baa6baa6bablbablbabababababaaIbabgbabgbabgbabgaIbgaIbgaIbmbgbmbgaLbgaLbgbnbgaLaZbnaZbnaZbnbnbnaZaNbnaNbnaNbnaNaNbwaNbwaNbuaNaXaNaQbwaQbwaQaXaQaXbraXbraXaObraObraObraOaObsaObsaOa1bsa1bsaRa1aRa1bqa1bqa1a5bqa5boa5a5bja5bjbjbebjbhbjbebebvbebxbAbxbAbxbGbF", +"bbbEbbbtbbbtbbbtbbbba8bba8bbbkbba8bba2a8a2a8a2a8a2a8aJa0aJa0aJa0aJa0aJaJaJa3aEaJaEaJaEaJaEaJataJataEataEataEatatatatatatatatazatanataaataaataaataaataa#iaa#iaaalaaalaaalaaal#lalaaal#lal#lal#laa#lal#Caa#Cal#C#l#C#o#C#l#C#l#C#l#C#l#C#l#C#l#p#l#p#l#p#l#p#l#p#l#p#C#p#C#p#C#p#p#p#C#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p.l#p#p#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l.l.l.h.l.k.l.h.l.k.l.h.l.k.l.h.l.k.l.h.l.k.l.k.l.k.l.k.l.k.l.5.l.k.k.5.k.k.k.5.k.k.k.j.k.5.k.j.k.5.k.j.k.5.k.i.ka4.k.i.k" +"a4.k.i.k.i.k.i.k.i.k.i.k.ia4.ibi.ia4.ibi.ia4.ia4.ia4.ia4bfa4bfa4bf.ibfa4bf.ibfa4bfbfbfbfbfbfbcbfbfbfbcbfbcbfaYbfaYbfbpbfaYbfbpbfbpbfbpb#bpb#bpb#bpaYbpb#a6bpa6aYa6bpa6bpa6bpa6a6a6a6a6a6a6a6bDa6bHa6baa6baa6baa6baa6baaWbablbablbablbablaIbabgbaaIbabgbabgaIbgaIbgbgbgbgbgbgaLbgaZbgaLbgaLaZbnaZbnaZbnaZbnbyaNbyaNbnaNbnaNaNbwaNbwaNbwaNaXbwaQbwaXbwaQaXaQaXbraXbraXaObBaObraObzaOaObsaObsaOa1bsa1bsaRa1a1a1bqa1a5boa5boa5a5bjbdbja5bebjbebjbAbebAbebvbAbxbAbFbG", +"bCbEbCbtbCbbbEbbbCbbbtbbbtbbbba8bba8bba8bba8bba0bba0a8a2a8a0a8aJa8aJa0aJa0aJa0aJa0aJa3aJa3aEa3aEa3aEaJata3ataJataJataEataEatatatatatatatatatat#iatalatalatalataaatal#iaaatal#iaa#iaaalaaalaaal#lalaaal#lal#lal#lal#lal#lal#l#o#lal#l#o#C#o#C#o#C#o#C#o#C#o#C#o#p#o#C#l#p#o#p#l#p#o#p#l#p#o#p#l#p#o#p.h#p#o#p.h#p.j#p.h#p.j#p.h#p.j#p.h#p.j#p.h#p.j#p.h#p.j#p.h.l.j#p.h.l.j#p.h.l.j.l.h.l.j.l.h.l.j.l.h.l.j.l.h.l.j.l.h.l.j.l.j.l.j.l.j.l.j.k.j.k.j.k.j.k.j.k.j.k.j.k.j.k.j.k.j.k.j.k.j.k.j.k.i.k.i.k.i.k.i.k.i.k.i.5.i.k.i.5.i" +".k.ia4.ia4.ia4.ia4.i.i.ia4.i.i.ia4.i.ibf.ibf.ibf.ibf.ibf.ibc.ibf.ibcbfbfbfbcbfbcbfbcbfbcbfbIbfaYbfbpbfbpbfbpbfbpbfbpbcbpb#bpaYbpaYbpbpbpaYbpbpa6bpa6bpa6bpa6bpa6bpa7a6a6a6bDa6bDa6bDa6baa6baa6baa6babHbaa6bablbablbabababababaaIbabgbabgbabgbabgaIbgbgbgaIbmbgbgbgaLbgaLbgbnbgbnbgbnaZbnaZbnbnbnbyaNbnaNbnaNbnaNaNbwaNbwaNbwaNaXaNaQbwaQbwaQaXaQaXbraXbraXaObraObraObraOaObsaObsaObsbsa1bsaRbsaRa1bqa1bqa1a5boa5boa5a5bja5bja5bebjbebjbebebvbebvbAbxbAbxbGbFbxbF", +"btbEbbbEbbbtbbbtbbbtbbbba8bba8bbbkbba8bba2a8a2a8a2a8a2a8aJa0aJa0aJa0aJa0aJaJaJa3aEaJaEaJaEaJaEaJataJataJataEataEatatatatatatatatazatanataaatalataaataaataa#iaaataa#iaaalaaalaaalaaalaaal#lal#lal#lal#lal#laa#lal#C#l#C#o#C#l#C#o#C#l#C#l#C#l#C#l#p#l#C#l#p#l#p#l#p#l#p#l#p#l#p#l#p#l#p#C#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p.l#p#p#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l.h.l.h.l.h.l.h.l.h.l.h.l.h.l.h.l.h.l.h.l.h.l.k.l.h.l.k.l.h.l.k.l.j.l.k.l.j.k.k.k.j.k.k.k.j.k.5.k.j.k.j.k.j.k.j.k.j.k.j.k.i.k.i.k.i.k.i.k" +".i.k.i.k.i.k.i.k.ibi.ia4.ibi.ia4.ibi.ia4.ia4.ia4.ia4bf.ibfa4bf.ibf.ibf.ibf.ibfbfbfbfbfbfbcbfbfbfbcbfbcbfbpbfaYbfbpbfbpbfbpbfbpbfbpb#bpb#bpb#bpaYbpb#bpbpa6bpa6bpa6bpa6bpa6a6a6a6bHa6a6a6bDa6bHa6baa6baa6baa6babHbaaWbablbablbablbablbababgbabgbabgbabgaIbgaIbgbgbgbgbgbgaLbgaZbgbnbgaLbgbnaZbnaZbnaZbnbyaNbyaNbnaNbnaNaNbwaNbwaNbwaNaXbwaXbwaXbwaQaXaQaXbraXbraXaOaXaObraObBaOaObsaObsaOa1aOa1bsaRbsa1a1bqa1bqboa5boa5bobjbdbja5bjbjbebjbebebAbebvbebxbAbFbAbFbx", +"bCbEbCbEbCbtbCbbbEbbbCbbbtbbbtbbbba8bba8bba8bba8bba0bba0a8a2a8a0a8aJa8aJa0aJa0aJa0aJa0aJa3aJa3aEa3aEa3aEaJata3ataJataJataEataEatatatatatatatatatat#iatalatalatalataaatal#iaaatal#iaa#iaa#iaaalaaalaaalaaal#lal#lal#lal#lal#lal#lal#lal#l#o#l#o#l#o#C#o#C#o#C#o#C#o#C#o#C#o#p#o#p#o#p#o#p#l#p#o#p#l#p#o#p#l#p#o#p.h#p#o#p.h#p.j#p.h#p.j#p.h#p.j#p.h#p.j#p.h#p.j#p.h#p.j#p.h#p.j#p.h.l.j#p.h.l.j#p.j.l.j#p.j.l.j.l.j.l.j.l.j.k.j.k.j.k.j.k.j.k.j.k.j.k.j.k.j.k.j.k.j.k.j.k.j.k.j.k.j.k.i.k.i.k.i.k.i.k.i.5.i.k.i.5.i.k.i.j.ia4.i" +".i.ia4.i.i.ia4.i.i.i.i.i.i.i.i.i.ibf.ibf.ibf.ibf.ibf.ibc.ibf.ibcbfbcbfbcbfbcbfbIbfbcbfbIbfbpbfbpbfbpbfbpbfbpbfbpbcbpb#bpaYbpaYbpbpbpbpbpbpa6bpa6bpa6bpa6bpa6bpbDa6a6a6bDa6bDa6bDa6bDa6baa6baa6babHbabHbablbablbababababJbaaIbabgbabgbabgbabgaIbgbgbgbgbmbgbgbgaLbgaLbgbnbgbnbgbnaZbnaZbnbnbnbyaNbnaNbnaNbnaNbnbwaNbwaNbwaNbwaNaQbwaQbwaQbwaQaXbraXbraXbrbraObBaObraOaObsaObsaObsbsa1bsaRbsaRa1bqa1bqa1bqboa5boa5bqa5a5bja5bjbjbebjbebjbvbebvbebxbAbxbAbFbxbFbFbK", +"bEbCbtbEbbbEbbbtbbbtbbbbbbbba8bba8bbbkbba8bba2a8a2a8a2a8a2a8aJa0aJa0aJa0aJa0aJaJaJa3aEaJaEa3aEaJaEaJataJataJataEataEatatatatatatatatatatatataaatalataaataaataaataaataa#iaa#iaaalaaalaaalaaal#lal#lal#lal#lal#lal#lal#l#l#Cal#C#l#C#o#C#l#C#o#C#l#C#l#C#l#C#l#p#l#p#l#p#l#p#l#p#l#p#l#p#l#p#l#p.h#p#l#p.h#p.h#p.h#p.h#p.h#p.h#p.h#p.h#p.h#p.h#p.h#p.h.l.h#p.h.l.h#p.h.l.h.l.h.l.h.l.h.l.h.l.h.l.h.l.h.l.h.l.h.l.h.l.h.l.h.l.h.l.h.l.h.l.h.l.j.l.h.l.j.k.h.k.j.k.h.k.j.k.j.k.j.k.j.k.j.k.j.k.j.k.j.k.j.k.i.k.i.k.i.k.i.k.i.k.i.k" +".i.k.i.k.i.5.ibi.ia4.ibi.ia4.ia4.i.i.ia4.i.ibfa4bf.ibf.ibf.ibf.ibf.ibf.ibfbfbfbfbfbfbcbfbfbfbcbfbcbfbpbfaYbfbpbfbpbfbpbfbpbfbpb#bpb#bpb#bpbpbpb#bpbpa6bpa6bpa6bpa6bpa6bpa6a6bHa6bHa6bDa6bHa6baa6baa6baa6babHbabHbablbablbablbablbababgblbgbabgbabgbabgaIbgbgbgbgbgbgbmbgaZbgbnbgbnbgbnaZbnaZbnaZbnbybnbyaNbnaNbnaNbnbwaNbwaNbwaNbwbwaXbwaXbwaQbwaQaXbraXbraXbraXaObBaObBaOaObsaObsaObsaOa1bsa1bsa1a1bqa1bqboa5boa5bobjbdbja5bja5bebjbebjbAbebvbebvbAbxbAbFbGbFbL", +"bCbEbCbEbCbEbCbtbCbbbEbbbCbbbtbbbtbbbba8bba8bba8bba8bba0bba0a8a2a8a0a8aJa8aJa0aJa0aJa0aJa0aJa3aJa3aEa3aEa3aEaJata3ataJata3ataJataEatatatatatatatatatat#iatatatalatalatalatalataaatal#iaa#ial#iaa#iaa#iaaalaaal#lal#lal#lal#lal#lal#lal#lal#l#o#lal#l#o#l#o#l#o#l#o#C#o#C#o#C#o#p#o#C#o#p#o#p#o#p#o#p#o#p#o#p#o#p#o#p#o#p#o#p.j#p#o#p.j#p#o#p.j#p.j#p.j#p.j#p.j#p.j#p.j#p.j#p.j#p.j#p.j#p.j#p.j#p.j#p.j#p.j.h.j.k.j.h.j.k.j.h.j.k.j.h.j.k.j.h.j.k.j.h.j.k.j.h.j.k.j.h.j.k.j.h.i.k.i.h.i.k.i.j.i.k.i.j.i.k.i.j.i.k.i.j.i.i.i.i.i" +".i.i.i.i.i.i.i.i.i.i.i.i.ibf.ibf.ibf.ibf.ibc.ibf.ibc.ibfbfbcbfbcbfbIbfbcbfbIbfbIbfbIbfbpbfbpbfbpbfbpbfbpbfbpbcbpb#bpbpbpaYbpbpbpbpbpbpa6bpa6bpa6bpa6bpa6bpbDa6bHa6bDa6bDa6bDa6bDa6baa6baa6babHbabHbablbablbababablbJbabJbabgbabgbabgbabgbabgbgbgbgbmbgbgbgbmbgaLbgbnbgbnbgbnaZbnaZbnbnbnbybnbnaNbnaNbnaNbnbwaNbwaNbwaNbwaNaQbwaQbwaQbwaQaXbraXbraXbrbraObBaObraObrbsaObsaObsaOa1bsaRbsaRbsbqa1bqa1bqboa5boa5bqa5a5bja5bja5bebjbebjbvbebvbebvbAbxbAbFbxbFbxbFbFbK", +"bEbEbEbCbbbEbbbEbbbtbbbtbbbbbbbba8bba8bbbkbba8bba2a8a2a8a2a8a2a8aJa0aJa0aJa0aJa0aJa3aJa3aJaJaEa3aEaJaEaJataJataJataEataEatatatatatatatatatatatataaatalataaatalataaataaataa#iaa#iaa#iaaalaaalaaal#lalaaal#lal#lal#lal#lal#lal#lal#l#l#C#o#C#l#C#o#C#l#C#o#C#l#C#o#p#l#C#l#p#l#p#l#p#l#p#l#p#l#p#l#p#l#p#l#p.h#p#l#p.h#p.h#p.h#p.h#p.h#p.h#p.h#p.h#p.h#p.h#p.h#p.h#p.h#p.h.l.h#p.h.l.h#p.h.l.h.l.h.l.h.l.h.l.h.l.h.l.h.l.j.l.h.l.j.l.h.l.j.k.h.k.j.k.h.k.j.k.j.k.j.k.j.k.j.k.j.k.j.k.j.k.j.k.j.k.i.k.i.k.i.k.i.k.i.k.i.k.i.k.i.k" +".i.k.ia4.ibi.i.i.ibi.i.i.ia4.i.i.i.i.i.ibf.ibf.ibf.ibf.ibf.ibf.ibf.ibfbfbcbfbfbfbcbfbfbfbIbfbcbfbpbfbpbfbpbfbpbfbpbfbpbfbpb#bpbpbpb#bpbpbpbMbpbpa6bpa6bpa6bpa6bpa6bpa6a6bHa6bHa6bDa6bHa6bDa6baa6baa6babHbabHbablbablbablbablbababgblbgbabgbabgbabgaIbgbgbgbgbgbgbmbgaZbgbnbgbnbgbnaZbnaZbnaZbnbybnbyaNbnaNbyaNbnbwaNbwaNbwaNbwbwaXbwaXbwaQbwaQaXbraXbraXbraXaObBaObBaObrbsaObsaObsaOa1bsa1bsa1a1bqa1bqa1bqboa5boa5bobja5bja5bjbjbebjbebebvbebvbAbxbAbFbAbFbGbFbF", +"bNbEbCbEbCbEbCbtbCbtbCbbbEbbbCbbbtbbbtbbbba8bba8bba8bba8bba0bba0a8a2a8a0a8aJa8aJa0aJa0aJa0aJa0aJa3aJa3aJa3aEa3aEa3ata3ataJata3ataJataEatatatatatatatatatatatatatat#iatalatalatalatalatal#iaa#ial#iaa#ial#iaa#iaaal#lalaaal#lal#lal#lal#lal#lal#l#o#lal#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o#p#o#C#o#p#o#p#o#p#o#p#o#p#o#p#o#p#o#p#o#p#o#p#o#p#o#p.j#p#o#p.j#p.j#p.j#p.j#p.j#p.j#p.j#p.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.i.h.i.h.i.h.i.j.i.h.i.j.i.h.i.j.i.h.i.j.i.j.i.i.i.i.i.i.i.i.i" +".i.i.i.i.i.i.i.i.ibf.ibf.ibf.ibf.ibf.ibc.ibf.ibI.ibfbfbIbfbcbfbIbfbIbfbIbfbIbfbIbfbpbfbpbfbpbfbpbfbpbfbpbIbpb#bpbpbpbpbpbpbpbpbpbpa6bpa6bpa6bpbHbpa6bpbDa6bHa6bDa6bDa6bDa6bDa6babHbaa6babHbabHbabHbablbababablbJbabJbabgbabgbabgbabgbabgbgbgbgbmbgbgbgbmbgaLbgbnbgbnbgbnbgbnaZbnbnbnbybnbnaNbnaNbnaNbnbwaNbwaNbwaNbwaNbubwaQbwaQbwaQbwbraXbraXbrbBbrbBaObraObrbsaObsaObsaObsbsaRbsa1bsbqa1bqa1bqbobqboa5bqa5bqbja5bja5bjbjbebjbvbebvbebvbAbxbAbFbvbFbxbFbFbKbFbO", +"bEbCbEbEbEbCbbbEbbbEbbbtbbbtbbbbbbbba8bba8bbbkbba8bba2a8a2a8a2a8a2a8aJa0aJa0aJa0aJa0aJa3aJa3aJaJaEa3aEaJaEaJataJataJataJataEatatatatatatatatatatatat#ratalataaatalataaataaataa#iaa#iaa#iaa#iaaalaaalaaalaaal#lal#lal#lal#lal#lal#lal#l#o#lal#l#o#l#o#C#l#C#o#C#l#C#o#C#l#C#o#p#l#C#o#p#l#p#o#p#l#p#l#p#l#p#l#p#l#p#l#p.h#p#l#p.h#p.h#p.h#p.h#p.h#p.h#p.h#p.h#p.h#p.h#p.h#p.h#p.h#p.h#p.h#p.j.l.h#p.j.l.h#p.j.l.h#p.j.l.h#p.j.k.h.k.j.k.h.k.j.k.j.k.j.k.j.k.j.k.j.k.j.k.j.k.j.k.j.k.j.k.i.k.i.k.i.k.i.k.i.k.i.k.i.h.i.k.i.j.i.k" +".i.i.ibi.i.i.i.i.i.i.i.i.i.i.i.ibf.ibf.ibf.ibf.ibf.ibf.ibf.ibfbfbfbfbIbfbfbfbIbfbcbfbIbfbIbfbpbfbpbfbpbfbpbfbpbfbpbfbpb#bpbpbpbMbpbpbpbpbpbpa6bpa6bpa6bpa6bpbHbpa6a6bHa6bHa6bDa6bHa6bDa6babHbaa6babHbabHbablbablbablbJblbababgblbgbabgbabgbabgaIbgbgbgbgbgbgbmbgaZbgbnbgbnbgbnbgbnaZbnaZbnbybnbyaNbnaNbyaNbnbwaNbwaNbwaNbwbwbwbwaXbwaQbwaQbwbraXbraXbraXaObBaObBaObrbsaObsaObsaObsbsa1bsa1bsbqa1bqa1bqboa5boa5bobja5bja5bjbjbebjbebjbAbebAbAbxbAbxbAbFbGbFbFbKbF", +"bPbEbNbEbCbEbCbtbCbtbCbbbCbbbEbbbCbbbtbbbtbbbba8bba8bba8bba8bba0bba0a8a2a8a0a8aJa8a2a0aJa0aJa0aJa0aJa3aJa3aJa3aEa3aEa3ata3ataJata3ataJataJatatatatatatatatatatatatatat#iat#iatalatalatalatal#iaaatal#iaa#ial#iaa#ial#iaa#iaaal#lal#lal#lal#lal#lal#lal#lal#l#o#lal#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o.h#o#l#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h.j.h#o.h.j.h#o.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.i.h.i.h.i.h.i.j.i.h.i.j.i.h.i.j.i.h.i.j.i.j.i.j.i.i.i.i.i.i.i.i.i.i.i.i.i" +".i.i.i.i.i.i.ibf.ibf.ibf.i.d.ibf.ibI.ibf.ibI.ibIbfbIbfbIbfbIbfbIbfbIbfbIbfbpbfbpbfbpbfbpbfbpbIbpbfbpbpbpbMbpbpbpbpbpbpbpbpbpbpa6bpa6bpa6bpbHbpbHbpbDa6bHa6bDa6bDa6bDa6bDa6babHbabHbabHbabHbabHbablbababablbJbabJbabgbabgbabgbabgbabgbgbgbgbmbgbgbgbmbgaLbgbnbgbnbgbnbgbnaZbnbybnbybnbnaNbnaNbnaNbnbwbnbwaNbwbwbwbwbubwaXbwaQbwaQbwbraXbraXbrbBbrbBaObraObrbsbrbsaObsaObsbsaRbsa1bsbqbsbqa1bqa1bqboa5bqa5bobja5bja5bjbjbebjbvbjbAbebvbAbvbAbFbAbFbGbFbFbFbFbObFbO", +"bEbCbEbCbEbEbtbCbbbEbbbEbbbtbbbtbbbbbbbba8bba8bba8bba8bba2a8a2a8a2a8a2a8aJa8aJa0aJa0aJa0aJa3aJa3aJaJaEa3aEaJaEaJataJataJataJataEatatataEatatatatatatatat#iatatataaatalataaatalataa#iaaataa#iaa#iaa#iaaalaaalaaal#lal#lal#lal#lal#lal#lal#lal#lal#l#o#l#o#l#o#l#o#l#l#C#o#C#l#C#o#p#l#C#o#p#l#p#o#p#l#p#o#p#l#p#o#p#l#p#o#p#l#p#o#p.h#p#o#p.h#p#o#p.h#p.j#p.h#p.j#p.h#p.j#p.h#p.j#p.h#p.j#p.h#p.j#p.h#p.j#p.h.h.j.h.h.h.j.k.j.h.j.k.j.h.j.k.j.h.j.k.j.h.j.k.j.h.j.k.j.h.j.k.i.h.i.k.i.h.i.k.i.h.i.k.i.h.i.k.i.h.i.h.i.j.i.g.i.i" +".i.g.i.i.i.i.i.i.i.i.i.i.i.ibf.ibf.ibf.ibf.ibf.ibf.ibf.i.dbfbfbfbIbf.dbfbIbfbIbfbIbfbIbfbpbfbpbfbpbfbpbfbpbfbp.dbpb#bpbpbpbMbpbpbpbpbpbpa6bpa6bpa6bpa6bpbHbpbHa6bHa6bHa6bDa6bHa6bDa6babHbabHbabHbabHbablbablbablbJblbJbabJblbgbabgbabgbJbgbgbgbgbgbgbgbgbgbgaZbgbnbgbnbgbnbgbnaZbnaZbnbybnbyaNbnaNbyaNbnbwbnbwaNbwaNbwbwbwbwaXbwaQbwaXbwbraXbraXbraXbrbBaObBaObrbsaObsaObsaObsbsa1bsa1bsbqa1bqa1bqa1bqboa5boa5bqbjbdbjbjbjbjbebjbAbebAbAbvbAbxbAbFbGbFbFbFbFbObF", +"bPbEbPbEbNbEbCbEbCbtbCbtbCbbbCbbbEbbbQbbbtbbbtbbbba8bba8bba8bba8bba0bba0a8a2a8a0a8aJa8a2a8aJa0aJa0aJa0aJa3aJa3aJa3aJa3aEa3ata3aEaJata3ataJata3atatataEatatatatatatatatatat#iat#iat#iatalatalatalatalatal#iaa#ial#iaa#ial#iaa#ial#i#l#iaaal#lal#lal#lal#lal#lal#lal#lal#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o.h#o#l#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h.j.h#o.h.j.h#o.h.j.h#o.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.i.h.i.h.i.h.i.j.i.h.i.j.i.h.i.j.i.h.i.j.i.j.i.j.i.j.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i" +".i.i.i.e.ibf.i.d.ibf.ibI.i.d.ibI.i.d.ibIbfbIbfbIbfbIbfbIbfbIbfbIbfbIbfbpbfbpbfbp.dbpbfbpbIbp.dbpbpbpbpbpbpbpbpbpbpbpbpbpbpa6bpbHbpa6bpbHbpbHbpbDa6bHa6bDa6bDa6bDbHbDa6babHbabHbabHbabHbabHbablbJbabababJbabJbabgbabgbabgbJbgbabgbJbgbgbmbgbgbgbRbgbnbgbnbgbnbgbnbgbnaZbnbybnbybnbnbnbnbwbnbwbnbwbnbwaNbwbwbwbwbubwaXbwaQbwaQbwbraXbraXbrbBbrbBaObraObrbsbrbsaObsaObsaObsbsa1bsbqbsbqa1bqa1bqboa5bqa5bobjbqbja5bjbjbjbjbebjbAbebvbAbvbAbxbAbFbAbFbFbFbFbObFbObKbS", +"bEbCbEbCbEbCbtbCbtbCbbbEbbbEbbbtbbbtbbbbbbbba8bba8bba8bba8bba2a8a0a8a2a8a2a8aJa8aJa0aJa0aJa0aJa3aJa0aJaJaEa3aEaJaEa3ataJataJataJataJataEataEatatatatatatatatatatatat#ratalataaatalataaataaataa#iaa#iaa#iaa#iaa#iaaal#lalaaal#lal#lal#lal#lal#lal#lal#l#o#lal#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o#p#l#C#o#p#l#p#o#p#l#p#o#p#l#p#o#p#l#p#o#p#l#p#o#p#l#p#o#p.h#p#o#p.h#p.j#p.h#p.j#p.h#p.j.h.h.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.i.h.i.h.i.h.i.h.i.h.i.h.i.h.i.h.i.h.i.j.i.h.i.i.i.g.i.i.i.i" +".i.i.i.i.i.i.i.i.i.i.i.ibf.ibf.ibf.i.d.ibf.i.d.ibf.ibIbf.dbfbIbf.dbfbIbfbIbfbIbfbpbfbpbfbpbfbpbfbp.dbpbfbpbMbpbMbpbpbpbMbpbpbpbpbpbpa6bpa6bpbHbpa6bpbHbpbHa6bHa6bHa6bDa6bHbHbDa6babHbabHbabHbabHbabHbablbablbJblbJbabJblbgbabgbabgbJbgbJbgbgbgbgbgbgbgbgbgbgbnbgbnbgbnbgbnbybnbybnbybnbybnbnbwbyaNbnbwbnbwaNbwaNbwbwbwbwaXbwaQbwaXbwbraXbraXbraXbrbBaObBaObrbsbBbsaObsaObsbsa1bsa1bsbqbsboa1bqa1bqboa5boa5bqbjbdbjbjbjbjbebjbAbjbAbAbvbAbxbAbFbAbFbFbFbFbKbFbObF", +"bPbCbPbEbPbEbCbEbCbEbCbtbCbtbCbbbCbbbtbbbQbbbtbbbtbbbba8bba8bba8bba8bba8bba0a8a0a8a0a8a2a8a0a8aJa0aJa0aJa0aJa3aJa3aJa3aJa3aEa3ata3aEa3ata3ataJata3ataJataEatatatatatatatatatat#iatatat#iat#iatalatalatalatal#ial#ial#iaa#ial#iaa#ial#i#l#ial#i#l#i#oal#lal#lal#lal#lal#lal#l#o#lal#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o.h#o#l#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h.j.h#o.h.j.h#o.h.j.h#o.h.i.h.e.h.i.h.e.j.i.h.e.j.i.h.e.j.i.h.i.j.i.j.e.j.i.j.e.j.i.i.e.i.i.i.e.i.i.i.e.i.i.i.e.i.i.i.e.i.i" +".i.d.i.d.i.d.i.d.ibI.i.d.ibI.i.d.ibIbfbIbfbIbfbIbfbIbfbIbfbIbfbIbfbp.dbpbfbp.dbp.dbpbIbp.dbpbpbpbpbpbpbpbpbpbpbpbpbTbpa6bpbHbpbHbpbHbpbHbpbDa6bHa6bDa6bDa6bDbHbDbHbabHbabHbabHbabHbabHbablbJbabJbabJbabJbabJbabgbabgbJbgbJbgbJbgbgbmbgbgbgbRbgbRbgbnbgbnbgbnbgbnaZbnbybnbybnbnbnbnbwbnbwbnbwbnbwaNbwbwbwbwbubwbwbwaQbwaQbwbrbwbraXbrbBbrbBbrbraObrbsbrbsaObsaObsaObsbsa1bsbqbsbqa1bqa1bqbobqboa5bobjbqbja5bjbjbjbjbebjbAbjbvbAbvbAbvbAbFbAbFbFbFbFbFbFbObFbSbObS", +"bEbNbEbCbEbCbEbCbtbCbtbCbbbEbbbEbbbtbbbtbbbbbbbba8bba8bba8bba8bba2a8a0a8a2a8a2a8aJa8aJa0aJa0aJa0aJa3aJa0aJa3aJa3aEaJaEa3ataJataJataJataJataJataEatatatatatatatatatatatat#iat#iataaatalataaatalataa#iaa#iaa#iaa#iaa#iaa#iaa#iaaal#lal#lal#lal#lal#lal#lal#lal#lal#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o.h#o#l#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h.j.h#o.h.j.h#o.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.i.h.i.h.i.h.i.h.i.h.i.h.i.h.i.h.i.h.i.j.i.h.i.j.i.g.i.i.i.g.i.i.i.i.i.i" +".i.i.i.i.i.i.i.i.d.ibf.i.d.ibf.i.d.ibf.i.d.i.d.ibIbf.dbfbIbf.dbfbIbfbIbfbIbfbpbfbpbfbp.dbpbfbp.dbp.dbpbMbpbMbpbpbpbMbpbpbpbpbpbpbHbpa6bpbHbpbHbpbHbpbHa6bHa6bHa6bDa6bHbHbDbHbabHbabHbabHbabHbabHbJblbablbJblbJbabJblbgbabgbabgbJbgbJbgbgbgbgbgbgbUbgbgbgbnbgbnbgbnbgbnbUbnbybnbybnbybnbnbwbybwbnbwbnbwaNbwaNbwbwbwbwbwbwaQbwaXbwbrbwbraXbraXbrbBbrbBaObrbsbBbsaObsaObsbsbsbsa1bsbqbsboa1bqa1bqboa5boa5bobjbdbjbjbjbjbebjbAbjbAbebvbAbvbAbFbAbFbLbFbLbFbFbObFbObO", +"bPbCbPbCbPbEbPbEbCbEbCbEbCbtbCbtbCbbbCbbbQbbbQbbbtbbbtbbbba8bba8bba8bba8bba8bba0a8a0a8a0a8a2a8a0a8aJa0aJa0aJa0aJa3aJa3aJa3aJa3aJa3aEa3aEa3ata3ataJata3ataJata3atatatatatatatatatatatatatat#iat#iat#iat#iatalatal#ialatal#ial#ial#ial#ial#iaa#ial#i#l#ial#i#l#i#o#i#l#i#oal#lal#lal#lal#l#o#lal#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o.h#o#l#o.h#o#l#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h.e.h.e.h.e.h.e.j.e.h.e.j.e.h.e.j.e.h.e.j.e.h.e.j.i.j.e.j.i.j.e.j.i.i.e.i.e.i.e.i.e.i.e.i.e.i.e.i.e.i.e.i.e.i.e.i.d.i.d" +".i.d.ibI.i.d.ibI.i.d.ibI.ibIbfbIbfbIbfbIbfbIbfbI.dbIbfbI.dbIbfbp.dbp.dbp.dbp.dbpbIbp.dbpbpbpbpbpbpbpbpbTbpbpbpbTbpbHbpbHbpbHbpbHbpbHbpbDa6bHa6bDbHbDa6bDbHbDbHbabHbabHbabHbabHbJbHbablbJbabJbabJbabJbabJbabgbabgbJbgbJbgbJbgbgbmbgbgbgbRbgbRbgbnbgbnbgbnbUbnbgbnbybnbybnbnbnbnbwbnbwbnbwbnbwbnbwbwbwbwbubwbwbwbrbwaQbwbrbwbraXbrbBbrbBbrbraObrbsbrbsbrbsaObsaObsbsa1bsbqbsbqbsbqa1bqa1bqboa5bobjbqbja5bjbjbjbjbebjbAbjbvbebvbAbvbAbxbAbFbvbFbFbFbFbObFbObObObObV", +"bEbPbEbNbEbCbEbCbEbCbtbCbtbCbbbEbbbEbbbtbbbtbbbbbbbba8bba8bba8bba8bba2a8a0a8a2a8a2a8aJa8a2a0aJa0aJa0aJa0aJa0aJa3aJa3aEaJaEa3ataJaEaJataJataJataJataEatatatatatatatatatatatat#iat#iat#iatalataaatalataa#ialataa#iaa#iaa#iaa#iaa#iaa#i#l#iaaal#lal#lal#lal#lal#lal#lal#l#o#lal#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o.h#o#l#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h.j.h#o.h.j.h#o.h.j.h#o.h.j.h#o.h.j.h.j.h.j.h.j.h.j.h.i.h.i.h.i.h.i.h.i.h.i.h.i.h.i.h.i.h.i.j.i.h.i.j.i.h.i.i.i.g.i.i.i.i.i.i.e.i.i.i.e.i" +".i.i.e.ibf.i.d.i.d.i.d.i.d.i.d.i.d.i.d.i.dbfbIbf.dbfbIbfbIbfbIbfbIbfbIbfbp.dbpbfbp.dbp.dbp.dbp.dbpbMbpbMbpbpbpbMbpbpbpbpbpbpbHbpbHbpbHbpbHbpbHbpbHa6bHa6bHbHbDa6bHbHbDbHbabHbabHbabHbabHbabHbJblbJblbJblbJbabJblbgbabgbabgbJbgbJbgbgbgbgbgbgbUbgbUbgbnbgbnbgbnbgbnbUbnbybnbybnbybnbnbWbybwbnbwbnbwbnbwaNbwbwbwbwbwbwbrbwbBbwbrbwbraXbraXbrbBbrbBaObrbsbBbsbrbsaObsbsbsbsa1bsbobsboa1bqa1bqbobqboa5bobjbobjbjbjbjbjbjbAbjbAbjbvbAbvbAbFbAbFbAbFbLbFbFbObFbObObObO", +"bPbPbPbCbPbCbPbEbPbEbCbEbCbEbCbtbCbtbCbbbCbbbQbbbQbbbtbbbtbbbba8bba8bba8bba8bba8bba0a8a0a8a0a8a2a8a0a8aJa8aJa0aJa0aJa3aJa0aJa3aJa3aJa3aEa3aEa3ata3ata3ata3ataJata3at.batatatatatatatatatatatat#iat#iat#iat#iat#iatalatalatal#ial#ial#ial#ial#ial#ial#iaa#ial#i#l#i#o#i#l#i#o#i#l#i#o#i#l#i#o#i#lal#o#o#lal#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o.h#o#l#o.h#o#l#o.h#o.h#o.h.e.j.e.h.e.j.e.h.e.j.e.h.e.j.e.h.e.j.e.h.e.j.e.h.e.j.e.h.e.j.e.j.e.j.e.j.e.j.e.j.e.i.e.i.e.i.e.i.e.i.e.i.e.i.e.i.e.i.e.i.e.i.e.i.d.i.d.i.d.i.d" +".ibI.i.d.ibI.i.d.ibI.ibIbfbI.dbIbfbI.dbIbfbI.dbI.dbI.dbp.dbp.dbp.dbpbIbp.dbpbIbp.dbpbpbpbpbTbpbpbpbTbpbTbpbTbpbHbpbHbpbHbpbHbpbHbpbDbTbHa6bDbHbDbHbDbHbDbHbabHbabHbabHbabHbJbDbJblbJbabJbabJbabJbabJbJbgbabgbJbgbJbgbJbgbgbmbgbgbgbRbgbRbgbnbgbnbgbnbUbnbUbnbybnbybnbnbnbnbWbnbwbnbwbnbwbnbwbwbwbwbubwbwbwbrbwbrbwbrbwbraXbrbBbrbBbrbraObBbsbrbsbrbsaObsaObsbsbsbsbqbsbqbsbqa1bqa1bqbobqbobjbqbjbqbjbjbjbjbjbjbebjbvbjbvbAbvbAbxbAbFbvbFbFbFbFbXbFbObXbObObVbObY", +"bEbPbEbPbEbNbEbCbEbCbEbCbtbCbtbCbbbEbbbEbbbtbbbtbbbbbbbba8bba8bba8bba8bba2a8a0a8a2a8a2a8a2a8a2a8aJa0aJa0aJa0aJa0aJa3aJa3aJaJaEa3aEaJaEa3ataJataJataJataJatatatatatatatatatatatat#iatatat#iat#iatalatalataaatalataa#ial#iaa#iaa#iaa#iaa#iaa#iaa#i#l#i#l#i#lal#lal#lal#lal#lal#lal#l#o#lal#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o.h#o#l#o.h#o#l#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h.i.h.e.h.i.h.e.h.i.h.e.h.i.h.e.h.i.h.e.h.i.j.e.h.i.j.e.h.i.i.e.g.i.i.e.i.i.i.e.i.i.i.e.i.e.i.e.i.e.i" +".d.i.d.i.d.i.d.i.d.i.d.i.d.i.d.ibI.i.dbfbIbf.dbfbIbfbIbfbIbfbI.dbIbfbp.dbp.dbp.dbp.dbp.dbp.dbpbpbpbMbpbpbpbMbpbpbTbpbpbpbHbpbHbpbHbpbHbpbHbpbHa6bHa6bHbHbDbHbHbHbDbHbabHbabHbabHbabHbabHbJblbJblbJblbJbabJblbgbJbgbJbgbJbgbJbgbJbgbgbgbgbUbgbUbgbRbgbnbgbnbgbnbUbnbybnbybnbybnbybWbybwbnbwbnbwbnbwaNbwbwbwbwbwbwbrbwbBbwbrbwbraXbraXbrbBbrbBaObBbsbBbsbrbsaObsbsbsbsbsbsbobsbobsbqa1bqbobqboa5bobjbobjbjbjbjbjbjbAbjbAbjbvbAbAbAbZbAbFbAbFbLbFbFbXbFbObXbObOb0bO", +"bPbPbPb1bPbCbPbCbPbEbPbEbCbEbCbEbCbtbCbtbCbbbCbbbQbbbQbbbtbbbQbbbba8bba8bba8bba8bba8bba0a8a0a8a0a8a2a8a0a8aJa8a3a0aJa0aJa0aJa0aJa3aJa3aJa3aJa3aEa3ata3ata3ata3ataJata3at.bat#gatatatatatatatatatat#iatatat#iat#iat#iat#iat#iatal#ialatal#ial#ial#ial#ial#ial#ial#i#o#ial#i#l#i#o#i#l#i#o#i#l#i#o#i#l#i#o#i#l#i#o.e#l#i#o.e#l.e#o.e#l.e#o.e#l.e#o.e#l.e#o.e#l.e#o.e#l.e#o.e.h.e#o.e.h.e#o.e.h.e#o.e.h.e.j.e.h.e.j.e.h.e.j.e.j.e.j.e.j.e.j.e.j.e.j.e.j.e.i.e.i.e.i.e.i.e.i.e.i.e.i.e.i.e.i.e.i.e.i.e.i.e.i.d.i.d.i.d.ibI.i.d.ibI" +".i.d.ibI.ebI.ibI.dbIbfbI.dbI.dbI.dbI.dbI.dbI.dbI.dbp.dbp.dbp.dbpbIbp.dbpbIbpbIbTbpbpbpbTbpbTbpbTbpbTbpbTbpbHbpbHbpbHbpbDbpbHbpbDbHbHbHbDbHbDbHbDbHbDbHbDbHbabHbJbHbabHbJbDbJblbJbabJbabJbabJbabJbJbgbJbgbJbgbJbgbJbgbgbRbgbgbgbRbgbRbgbnbgbnbgbnbUbnbUbnbybnbybnbnbnbnbWbnbwbnbwbnbwbnbwbWbwbwbubwbwbwb2bwbrbwbrbwbrbwbrbBbrbBbrbrbrbBbsbrbsbrbsbrbsaObsbsbsbsaRbsbqbsbqbsbqa1bqbobqbobjbqbjbqbjbjbjbjbjbjbebjbvbjbvbAbvbAbvbAbFbvbFbLbFbFbFbFbObXbObObSbObYbObY", +"b1bPbEbPbEbPbEbNbEbCbEbCbEbCbtbCbtbCbbbEbbbCbbbtbbbtbbbbbbbba8bba8bba8bba8bba2a8a0a8a2a8a2a8a2a8a2a8aJa0aJa0aJa0aJa0aJa3aJa3aJa3aEa3aEaJaEa3ataJataJataJataJat.bataEatatatatatatatatatatatat#iat#iat#iat#iatalatalataa#ial#iaa#ial#iaa#ial#iaa#iaa#i#l#iaa#i#l#i#l#i#l#i#lal#lal#lal#lal#lal#l#o#lal#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o.h#o#l#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h.e.h.e.h.e.h.e.h.e.h.e.h.e.h.e.h.e.h.e.h.e.h.e.h.e.j.e.h.e.j.e.h.e.j.e.g.e.i.e.i.e.i.e.i.e.i.e.i.e.i.e.i.e.i.e.i.e.i.d.i" +".d.i.d.i.d.i.d.i.d.i.d.i.d.ibIbf.dbfbIbfbI.dbIbfbI.dbIbfbI.dbp.dbp.dbp.dbp.dbp.dbp.dbp.dbpbpbpbMbpbpbTbpbpbpbTbpbTbpbHbpbHbpbHbpbHbpbHbpbHbHbHa6bHbHbDbHbHbHbDbHbabHbabHbabHbJbHbJbHbJblbJblbJblbJbabJblbgbJbgbJbgbJbgbJbgbJbgbgbgbgbUbgbUbgbRbgbnbgbnbgbnbUbnbUbnbybnbybnbybWbybwbnbwbnbwbnbwbnbwbwbwbwbwbwb3bwbBbwbrbwbrb3brbBbrbBbrbBbrbBbsbBbsbrbsaObsbsbsbsbsbsbobsbobsbqa1bqbobqbobqbobjbobjbqbjbjbjbjb4bjbAbjbAbebAbAbvbAbFbAbFb5bFbFbXbFbObXbObObObObYbO", +"bPbPbPbPbPb1bPbCbPbCbPbEbPbEbCbEbCbEbCbtbCbtbCbbbCbbbQbbbQbbbtbbbQbbbba8bba8bba8bba8bba8bba0a8a0a8a0a8a0a8a0a8aJa8a3a0aJa0aJa0aJa0aJa3aJa3aJa3aJa3aEa3ata3ata3ata3ata3ata3at.bata3at.batb6atatatatatatatatatat#iat#iat#iat#iat#iat#iat#iatal#ial#ial#ial#ial#ial#ial#ial#ial#i#o#ial#i#o#i#o#i#o#i#o#i#l#i#o#i#l#i#o#i#l#i#o.e#l#i#o.e#l.e#o.e#l.e#o.e#l.e#o.e#l.e#o.e#l.e#o.e#l.e#o.e#l.e#o.e#o.e#o.e.j.e#o.e.j.e#o.e.j.e#o.e.j.e#o.e.j.e.e.e.i.e.i.e.i.e.i.e.i.e.i.e.i.e.i.e.i.e.e.e.i.e.e.e.i.d.e.d.ibI.e.d.ibI.e.d.ibI.ebI" +".ibI.ebI.dbI.dbI.dbI.dbI.dbI.dbI.dbI.dbI.dbp.dbp.dbp.dbp.dbpbIbp.dbTbIbpbpbTbpbTbpbTbpbTbpbTbpbTbpbTbpbHbpbHbpbHbpbDbTbHbpbDbHbDbHbDbHbDbHbDbHbDbHbDbHbabHbJbHbJbHbJbDbJbHbJbabJbabJbJbJbabJbJbgbJbgbJbgbJbgbJbgbgbRbgbUbgbRbgbRbgbRbgbnbgbnbUbnbUbnbUbnbybnbnbnbnbWbnbwbnbwbnbwbnbwbWbwbwbwbwbwbwb2bwbrbwbrbwbrbwbrbBbrbBbrbrbrbBbsbrbsbrbsbrbsaObsbsbsbsb7bsbobsbqbsbqa1bqbobqbobjbqbjbqbjb8bjbjbjbjbjbjbvbjbAbjbvbAbvbAbFbAbFbAbFbFbFbFbObFbObXbSbObVbObYb0bY", +"bPbPb1bPbEbPbEbPbEbNbEbCbEbCbEbCbtbCbtbCbbbEbbbCbbbtbbbtbbbtbbbba8bba8bba8bba8bba8a8a0a8a2a8a0a8a2a8a2a8aJa0aJa0aJa0aJa0aJa3aJa3aJa3aJa3aEaJaEa3ataJata3ataJataJataJataJatatatatatatatatatatatat#iat#iat#iat#iat#iatalatal#ialataa#ial#iaa#ial#iaa#ial#iaa#iaa#i#l#iaa#i#l#i#l#i#l#i#l#i#l#i#l#i#l#i#lal#l#o#lal#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o.h#o#l#o.h.e#l.e.h.e.h.e.h.e.h.e.h.e.h.e.h.e.h.e.h.e.h.e.h.e.h.e.h.e.j.e.h.e.j.e.h.e.j.e.h.e.j.e.g.e.i.e.i.e.i.e.i.e.i.e.i.e.i.e.i.e.i.e.i.e.i.e.i.d.i.d.i.d.i" +".d.i.d.i.d.i.d.ibI.i.d.dbIbf.d.dbIbfbI.dbI.dbI.dbI.dbI.dbp.dbp.dbp.dbp.dbp.dbp.dbp.dbpbpbTbMbpbpbTbpbTbpbTbpbTbpbHbpbHbpbHbpbHbpbHbpbHbHbDbHbHbHbDbHbDbHbDbHbabHbabHbabHbJbHbJbHbJblbJblbJblbJbabJbabJbJbgbJbgbJbgbJbgbJbUbgbgbgbUbgbUbgbRbgbnbgbnbgbnbUbnbUbnbybnbybnbybWbybwbnbwbnbwbWbwbWbwbwbwbwbwbwb3bwbBbwbrbwbrbwbrbBbrbBbrbBbrbBbsbBbsbrbsbrbsbsbsbsbsbsbobsbobsbqbsbqbobqbobqbobjbobjbqbjbjbjbjbjbjbAbjbAbjbAbAbvbAbZbAbFbAbFbFbFbFbXbFbObXbObObVbObYb0", +"bPbPbPbPbPbPbPb1bPbCbPbCbPbEbPbCbCbEbCbEbCbtbCbtbCbtbCbbbQbbbQbbbtbbbQbbbba8bba8bba8bba8bba8bba8a8a0a8a0a8a0a8a0a8aJa8a3a8aJa0aJa0aJa0aJa3aJa3aJa3aJa3aJa3ata3aEa3ata3ata3ata3ata3ata3at.bat#gatatatb6atatatatatat#iat#iat#iat#iat#iat#iat#iat#i#i#iat#i#ial#ial#ial#ial#ial#ial#ial#ial#i#o#ial#i#o#i#o#i#o#i#o#i#o#i#o#i#o#i#o#i#o#i#o.e#o#i#o.e#o#i#o.e#o.e#o.e#o.e#o.e#o.e#o.e#o.e#o.e#o.e#o.e#o.e#o.e#o.e#o.e#o.e#o.e.e.e.e.e.e.e.e.e.e.e.e.e.i.e.e.e.i.e.e.e.i.e.e.e.i.e.e.e.e.d.e.d.ebI.e.d.ebI.e.d.ebI.e.d.ebI.ebI.ebI" +".ebI.dbI.dbI.dbI.dbI.dbI.dbI.dbI.dbI.dbp.dbp.dbTbIbp.dbTbIbp.dbTbIbTbpbTbpbTbpbTbpbTbpbTbpbTbpbHbpbHbpbHbTbHbpbDbTbHbTbDbHbDbHbDbHbDbHbDbHbDbHb9bHbabHbJbHbJbHbJbDbJbHbJbabJbabJbJbJbJbJbJbgbJbgbJbgbJbgbJbgbJbRbgbUbgbRbgbRbgbRbUbnbgbnbUbnbUbnbUbnbybWbnbnbnbWbnbWbnbwbnbwbnbwbWbwbwbwbwbwbwb2bwbrbwbrbwbrbwbrb3brbBbrbrbrbBc.brbsbrbsbrbsaObsbsbsbsc#bsbobsbqbsbqa1bqbobqbob8bqbjbobjbqbjbjbjbjbjbjbvbjbAbjbvbAbvbAbZbAbFbAbFbFbFbFbXbFbObXbSbObVbObYb0bYcacb", +"bPbPbPbPb1bPbEbPbEbPbEbNbEbCbEbCbEbCbtbCbtbCbbbEbbbCbbbtbbbtbbbtbbbba8bba8bba8bba8bba8a8a0a8a2a8a0a8a2a8a2a8aJa8aJa0aJa0aJa0aJa3aJa3aJa3aJa3aJa3aEa3ataJata3ataJataJataJataJat.batatatatatatatatatat#iatatat#iat#iat#iat#iat#iatalatal#ial#iaa#ial#iaa#ial#iaa#ial#i#l#ial#i#l#i#o#i#l#i#l#i#l#i#l#i#l#i#l#i#l#i#l#i#l.e#l#i#l.e#l.e#l.e#l.e#l.e#l.e#l.e#l.e#l.e#l.e#l.e#l.e#l.e#l.e.h.e#l.e.h.e#l.e.h.e#l.e.h.e#o.e.h.e.j.e.h.e.j.e.h.e.j.e.h.e.j.e.g.e.i.e.i.e.i.e.i.e.i.e.i.e.i.e.i.e.i.e.i.e.i.e.i.d.i.d.i.d.e.d.i.d.e.d.i" +".d.ebI.i.d.ebI.i.d.dbI.dbI.dbI.dbI.dbI.dbI.dbI.dbI.dbp.dbp.dbp.dbp.dbp.dbp.dbTbMbpbpbTbMbTbpbTbpbTbpbTbpbTbpbHbpbHbpbHbpbHbTbHbpbHbHbDbHbHbHbDbHbDbHbDbHbabHbJbHbabHbJbHbJbHbJblbJblbJblbJbJbJbabJbJbgbJbgbJbgbJbgbJbUbgbUbgbUbgbUbgbRbgbnbUbnbUbnbUbnbUbnbybnbybnbybWbybWbnbwbnbwbWbwbWbwbwbwbwbwbwb3bwbBbwbrbwbrb3brb3brbBbrbBbrbBc.bBbsbrbsbrbsbsbsbsbsbsccbsbobsbqbsbqbobqbobqbobjbobjbqbjcdbjbjbjbjb4bjbAbjbAbAbvbAbZbAbFbAbFb5bFbLbXbFbObXbObObVbObYb0bYca", +"cebPbPbPbPbPbPbPbPb1bPbCbPbCbPbEbPbCbCbEbCbEbCbtbCbtbCbtbCbbbQbbbCbbbtbbbQbbbta8bba8bba8bba8bba8bba8a8a0a8a0a8a0a8a0a8aJa8a3a8aJa8a3a0aJa0aJa3aJa3aJa3aJa3aJa3aJa3aEa3ata3ata3ata3ata3ata3at.bat#gat.bat#gatatatb6atat#iatatat#iat#iat#iat#iat#iat#iat#iat#i#i#i#i#i#i#i#i#i#ial#ial#ial#ial#ial#ial#i#o#i#o#i#o#i#o#i#o#i#o#i#o#i#o#i#o#i#o#i#o#i#o#i#o#i#o.e#o#i#o.e#o#i#o.e#o.e#o.e#o.e#o.e#o.e#o.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.d.ebI.e.d.ebI.e.d.ebI.e.d.ebI.ebI.ebI.ebI.ebI.dbI" +".dbI.dbI.dbI.dbI.dbI.dbI.dbI.dbp.dbT.dbp.dbTbIbT.dbTbIbTbIbTbIbTbpbTbpbTbpbTbpbTbpbTbpbTbpbHbTbHbpbHbTbHbTbDbTbHbTbDbHbDbHbDbHbDbHbDbHbDbHb9bHbJbHbJbHbJbHbJbDbJbHbJbabJbabJbJbJbJbJbJbgbJbgbJbgbJbUbJbgbJbRbgbUbgbRbgbRbgbRbUbnbgbnbUbnbUbnbUbnbybWbnbWbnbWbnbWbnbwbnbwbnbwbWbwbwbwbwbwbwb2bwb2bwbrbwbrbwbrb3brbBbrbrbrbBc.brbsbrbsbrbsbrbsbsbsbsb7bsbobsbqbsbqbsbqbobqbob8bqbjbobjbqbjbjbjbjbjbjbAbjbAbjbvbAbvbAbZbAbFbAbFbZbFbFbXbFbObFbSbXbSbObVb0bYb0cbbYcb", +"bPbPbPbPbPbPb1bPbEbPbEbPbEbNbEbCbEbCbEbCbtbCbtbCbbbEbbbCbbbtbbbtbbbtbbbba8bba8bba8bba8bba8a8a0a8a2a8a0a8a2a8a2a8aJa8aJa0aJa0aJa0aJa3aJa3aJa3aJa3aJa3aEa3ataJata3ataJata3ataJataJat.bat.batatatatatatatatatatatat#iat#iat#iat#iat#iat#iat#i#i#iatal#ial#ial#ial#iaa#ial#iaa#ial#i#l#ial#i#l#i#o#i#l#i#o#i#l#i#o#i#l#i#o#i#l#i#l#i#l.e#l#i#l.e#l.e#l.e#l.e#l.e#l.e#l.e#o.e#l.e#o.e#l.e#o.e#l.e#o.e#l.e#o.e#l.e#o.e#l.e#o.e.h.e#o.e.h.e#o.e.i.e.e.e.i.e.e.e.i.e.e.e.i.e.e.e.i.e.e.e.i.e.e.e.i.e.e.d.i.d.e.d.i.d.e.d.e.d.e.d.e.d.e" +"bI.e.d.ebI.d.d.dbI.dbI.dbI.dbI.dbI.dbI.dbI.dbp.dbp.dbp.dbT.dbp.dbT.dbpbIbTbMbTbpbTbMbTbpbTbpbTbpbTbpbHbpbHbpbHbTbHbpbHbTbHbTbHbHbDbHbHbHbDbHbDbHbDbHbabHbJbHbJbHbJbHbJbHbJblbJbabJblbJbJbJbJbJbJbgbJbgbJbgbJbgbJbUbgbUbgbUbgbUbgbRbgbRbUbnbUbnbUbnbUbnbybWbybnbybWbybWbnbwbnbwbWbwbWbwbwbwbwbwbwb3bwb3bwbrbwbrb3brb3brbBbrbBbrbBc.bBbsbrbsbrbsc.bsbsbsbsccbsbobsbqbsbqbobqbobqbob8bobjbobjbobjbjbjbjb4bjbAbjbAb4bvbAbvbAbFbAbFb5bFbLbXbFbObFbObXbVbObVb0bYb0cbbY", +"cebPcfbPbPbPbPbPbPbPbPbCbPbCbPbCbPbEbPbCbCbEbCbEbCbtbCbtbCbtbCbbbCbbbCbbbQbbbQbbbta8cgbbbba8bba8bba8bba8a8a8a8a0a8a0a8a0a8a3a8a3a8aJa8a3a0aJa0aJa3aJa3aJa3aJa3aJa3aJa3aJa3ata3ata3ata3ata3ata3at#gata3at.bat#gat.bat#gatatatb6atat#iat#iat#iat#iat#iat#iat#iat#i#i#iat#i#i#i#i#i#i#i#i#i#i#i#i#i#i#i#i#i#i.e#ial#i#o#ial#i#o#i#o#i#o#i#o#i#o#i#o#i#o#i#o#i#o#i#o#i#o#i.e#i.e#i.e.e.e#i.e.e.e#i.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.d.ebI.e.d.ebI.e.d.ebI.e.d.ebI.ebI.ebI.ebI.ebI.ebI.dbI.dbI.dbI" +".dbI.d.4.dbI.d.4.dbI.d.4.dbT.dbTbIbT.dbTbIbT.dbTbIbTbIbTbpbTbpbTbpbTbpbTbpbTbpbTbTbTbpbHbTbHbTbHbTbHbTbDbTbHbTbDbHbDbHbDbHbDbHb9bHbDbHb9bHbJbHbJbHbJbHbJbDbJbHbJbJbJbabJbJbJbJbJbJbJbJbgbJbgbJbUbJbUbJbRbgbUbgbRbgbRbgbRbUbnbUbnbUbnbUbnbUbnbybWbnbWbnbWbnbWbnbwbWbwbWbwbWbwbWbwbwbwbwb2bwb2bwbrbwbrbwbrb3brbBbrbBbrbBc.brbsbrbsbrbsbrbsbsbsbsb7bsccbsbqbsbqbsbqbobqbob8bob8bobjbqbjb8bjbjbjbjb4bjbAbjbvb4bvbAbZbAbZbAbFbZbFbFbXbFbXbFbObXbObObVbObYb0cbbYcbbYch", +"bPcfbPbPbPbPbPbPb1bPbEbPbEbPbEbNbEbCbEbCbEbCbtbCbtbCbbbEbbbCbbbtbbbtbbbtbbbba8bba8bba8bba8bba8a8a8a8a2a8a0a8a2a8a0a8aJa8aJa8aJa0aJa0aJa3aJa0aJa3aJa3aJa3aJa3aEa3aEa3ataJata3ataJata3at.bataJat.batatatatatatatatatat#iatatat#iat#iat#iat#iat#iat#iat#i#i#iat#i#ial#ial#ial#ial#ial#iaa#ial#i#l#ial#i#l#i#o#i#l#i#o#i#l#i#o#i#l#i#o#i#l#i#o#i#l.e#o#i#l.e#o#i#l.e#o.e#l.e#o.e#l.e#o.e#l.e#o.e#l.e#o.e#l.e#o.e#l.e#o.e#o.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.d.e.d.e.d.e.d.e.d.e.d.e.d.ebI.e.d.ebI.e" +".d.dbI.dbI.dbI.dbI.dbI.dbI.dbI.dbI.dbT.dbp.dbT.dbp.dbT.dbT.dbT.dbTbIbTbMbTbpbTbpbTbpbTbpbTbpbTbpbHbTbHbpbHbTbHbTbHbTbHbTbHbHbDbHbHbHbDbHbDbHb9bHbJbHbJbHbJbHbJbHbJbHbJblbJbJbJblbJbJbJbJbJbJbgbJbgbJbUbJbgbJbUbJbUbgbUbgbUbgbRbgbRbUbnbUbnbUbnbUbnbUbWbybWbybWbybWbnbwbnbwbWbwbWbwbWbwbwbwbwb3bwb3bwbrbwbrb3brb3brbBbrbBbrbBc.bBbsbrbsbrbsc.bsbsbsbsccbsccbsbqbsboccbqbobqbob8bobjbobjbobjbjbjbjbjbjbAbjbAb4bvbAbvbAbZbAbFb5bFbLbFbFbXbFbObXb0bOb0b0bYb0bYcacbcb", +"cibPcebPcjbPbPbPbPbPbPbPbPbCbPbCbPbCbPbEbPbCbCbEbCbEbCbtbCbtbCbtbCbbbCbbbCbbbQbbbQbbbtbbcgbbbba8bba8bba8bba8a8a8a8a0a8a0a8a0a8a3a8a0a8aJa8a3a8aJa0a3a3aJa0aJa3aJa3aJa3aJa3aJa3.ba3ata3ata3ata3ata3ata3ata3at#gat#gat.bat#gat.bat#gatat#ib6atat#iat#iat#iat#iat#iat#iat#iat#i#i#iat#i#i#i#i#i#i#i#i#i#i#i#i#i#i#i#i#i#i#i#i#i#i.e#i#i#i.e#i.e#i.e#i.e#i.e#i.e#i.e#i.e#i.e#i.e#i.e#i.e#i.e#i.e#i.e#i.e.e.e#i.e.e.e#i.e.e.e#i.e.e.e#i.e.e.e#i.e.e.eck.e.d.ebI.e.d.ebI.e.d.ebI.e.d.e.4.ebI.e.4.ebI.e.4.ebI.d.4.dbI.d.4.dbI.d.4.dbI" +".d.4.d.4.d.4.d.4.dbT.dbT.dbTbIbT.dbTbIbTbIbTbIbTbIbTbpbTbpbTbpbTbpbTbTbTbpbTbTbTbTbHbTbHbTbDbTbHbTbDbTbHbTbDbHbDbHb9bHbDbHb9bHb9bHbJbHbJbHbJbHbJbHbJb9bJbHbJbJbJbJbJbJbJbJbJbJbJbJbgbJbgbJbUbJbUbJbRbgbUbgbRbgbRbgbRbUbnbUbnbUbnbUbnbUbnbUbWbnbWbnbWbnbWbnbwbWbwbWbwbWbwbWbwbwbwbwb2bwb2bwbrbwbrbwbrb3brb3brbBbrbBc.brc.brbsbrbsc.bsbsbsbsbsbsccbsbqbsbqbsbqccbqbobqbob8bobjbqbjb8bjbjbjbjb4bjbAbjbvb4bvbAbZbAbZbAbFbZbFbZbXbFbXbFbObXbObObVbObVb0bYbVcbbYcbcbcl"}; + + + switch (id) { + case image0_ID: return QPixmap((const char**)image0_data); + default: return QPixmap(); + } // switch + } // icon + +}; + +namespace Ui { + class DeicsOnzeGuiBase: public Ui_DeicsOnzeGuiBase {}; +} // namespace Ui + +QT_END_NAMESPACE + +class DeicsOnzeGuiBase : public QDialog, public Ui::DeicsOnzeGuiBase +{ + Q_OBJECT + +public: + DeicsOnzeGuiBase(QWidget* parent = 0, const char* name = 0, bool modal = false, Qt::WindowFlags fl = 0); + ~DeicsOnzeGuiBase(); + +protected slots: + virtual void languageChange(); + +}; + +#endif // DEICSONZEGUIBASE_H diff --git a/muse2/synti/deicsonze/deicsonzeguibase.ui b/muse2/synti/deicsonze/deicsonzeguibase.ui new file mode 100644 index 00000000..fd8d37fe --- /dev/null +++ b/muse2/synti/deicsonze/deicsonzeguibase.ui @@ -0,0 +1,9667 @@ + +DeicsOnzeGuiBase +Nil Geisweiller + + + DeicsOnzeGuiBase + + + + 0 + 0 + 468 + 357 + + + + + 0 + 0 + 0 + + + + + 195 + 195 + 195 + + + + DeicsOnze + + + false + + + false + + + + deicsOnzeTabWidget + + + + 0 + 0 + 470 + 360 + + + + + 7 + 7 + 0 + 0 + + + + + 0 + 0 + 0 + + + + + 195 + 195 + 195 + + + + image0 + + + AncestorOrigin + + + + Teen + + + + 0 + + + Rounded + + + + + + + TabPage + + + &Presets + + + + loadPushButton + + + true + + + + 340 + 260 + 60 + 30 + + + + AncestorOrigin + + + 13 + + + Load + + + + + savePushButton + + + true + + + + 400 + 260 + 60 + 30 + + + + AncestorOrigin + + + 13 + + + Save + + + + + nameGroupBox + + + + 340 + 10 + 120 + 50 + + + + AncestorOrigin + + + Preset Name + + + + nameLineEdit + + + + 10 + 20 + 100 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 8 + + + + INIT VOICE + + + 12 + + + + + + subcategoryGroupBox + + + + 340 + 60 + 120 + 50 + + + + AncestorOrigin + + + Subcategory + + + + subcategoryLineEdit + + + + 10 + 20 + 100 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 8 + + + + NONE + + + 12 + + + + + + categoryGroupBox + + + + 340 + 110 + 120 + 50 + + + + AncestorOrigin + + + Category + + + + categoryLineEdit + + + + 10 + 20 + 100 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 8 + + + + NONE + + + 12 + + + + + + deletePushButton + + + false + + + + 400 + 220 + 60 + 29 + + + + AncestorOrigin + + + 13 + + + Delete + + + + + + Category + + + false + + + false + + + + categoryListView + + + + 10 + 10 + 100 + 280 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + WidgetOrigin + + + + Zero Threes + 8 + + + + TabWidgetPanel + + + Sunken + + + false + + + false + + + AllColumns + + + + + + Subcategory + + + false + + + false + + + + subcategoryListView + + + + 120 + 10 + 100 + 280 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + WidgetOrigin + + + + Zero Threes + 8 + + + + TabWidgetPanel + + + Sunken + + + false + + + false + + + AllColumns + + + + + + Preset + + + false + + + false + + + + presetsListView + + + + 230 + 10 + 100 + 280 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + WidgetOrigin + + + + Zero Threes + 8 + + + + TabWidgetPanel + + + Sunken + + + false + + + false + + + AllColumns + + + + + newPushButton + + + true + + + + 340 + 220 + 60 + 29 + + + + AncestorOrigin + + + 13 + + + New + + + + + bankGroupBox + + + + 340 + 160 + 60 + 50 + + + + AncestorOrigin + + + Bank + + + + bankSpinBox + + + + 10 + 20 + 40 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 1 + + + + 128 + + + 1 + + + Bank numerous + + + + + + progGroupBox + + + + 400 + 160 + 60 + 50 + + + + AncestorOrigin + + + Prog + + + + progSpinBox + + + + 10 + 20 + 40 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 1 + + + + 128 + + + 1 + + + Program numerous + + + + + + presentTextLAbel + + + + 20 + 300 + 420 + 20 + + + + AncestorOrigin + + + NoFrame + + + Plain + + + DeicsOnze v0.2.2 Copyright (c) 2004 Nil Geisweiller under GPL licence + + + + + + TabPage + + + &Global + + + + masterVolGroupBox + + + + 10 + 0 + 330 + 50 + + + + AncestorOrigin + + + Master Volume + + + + masterVolSlider + + + + 10 + 20 + 250 + 20 + + + + AncestorOrigin + + + 13 + + + 255 + + + Horizontal + + + Master Volume + + + + + MasterVolumeSpinBox + + + + 270 + 20 + 50 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 1 + + + + 255 + + + Master volume + + + + + + FeedbackGroupBox + + + + 350 + 0 + 110 + 50 + + + + AncestorOrigin + + + feedback + + + + feedbackSpinBox + + + + 70 + 20 + 30 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 1 + + + + 7 + + + Coarse Ratio + + + + + feedbackSlider + + + + 10 + 20 + 50 + 20 + + + + AncestorOrigin + + + 13 + + + 7 + + + 1 + + + 1 + + + Horizontal + + + NoMarks + + + Feedback of Op 4 + + + + + + functionGroupBox + + + + 10 + 50 + 200 + 200 + + + + AncestorOrigin + + + Function + + + + + POLY + + + + + MONO + + + + polyMonoComboBox + + + false + + + + 10 + 20 + 180 + 20 + + + + + + + 0 + 0 + 0 + + + 195 + 195 + 195 + + + 255 + 255 + 255 + + + 225 + 225 + 225 + + + 97 + 97 + 97 + + + 130 + 130 + 130 + + + 0 + 0 + 0 + + + 249 + 249 + 249 + + + 0 + 0 + 0 + + + 255 + 255 + 255 + + + 177 + 177 + 177 + + + 0 + 0 + 0 + + + 57 + 15 + 195 + + + 255 + 255 + 255 + + + 195 + 18 + 71 + + + 128 + 0 + 128 + + + + + 128 + 128 + 128 + + + 195 + 195 + 195 + + + 255 + 255 + 255 + + + 224 + 224 + 224 + + + 97 + 97 + 97 + + + 130 + 130 + 130 + + + 0 + 0 + 0 + + + 249 + 249 + 249 + + + 128 + 128 + 128 + + + 255 + 255 + 255 + + + 177 + 177 + 177 + + + 0 + 0 + 0 + + + 57 + 15 + 195 + + + 255 + 255 + 255 + + + 195 + 18 + 71 + + + 128 + 0 + 128 + + + + + 0 + 0 + 0 + + + 195 + 195 + 195 + + + 255 + 255 + 255 + + + 224 + 224 + 224 + + + 97 + 97 + 97 + + + 130 + 130 + 130 + + + 0 + 0 + 0 + + + 249 + 249 + 249 + + + 0 + 0 + 0 + + + 255 + 255 + 255 + + + 177 + 177 + 177 + + + 0 + 0 + 0 + + + 57 + 15 + 195 + + + 255 + 255 + 255 + + + 195 + 18 + 71 + + + 128 + 0 + 128 + + + + + + 13 + + + + + PitchBendRangeLabel + + + + 10 + 50 + 40 + 22 + + + + PaletteBackground + + + AncestorOrigin + + + Box + + + Sunken + + + PBR + + + + + PitchBendRangeSlider + + + + 60 + 50 + 90 + 20 + + + + AncestorOrigin + + + 13 + + + 0 + + + 12 + + + 1 + + + 0 + + + Horizontal + + + NoMarks + + + Pitch Bend Range + + + + + pitchBendRangeSpinBox + + + + 160 + 50 + 30 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 1 + + + + 12 + + + Coarse Ratio + + + + + + LFOGroupBox + + + + 220 + 50 + 240 + 200 + + + + AncestorOrigin + + + LFO + + + + PModSensLabel + + + + 100 + 20 + 40 + 22 + + + + PaletteBackground + + + AncestorOrigin + + + Box + + + Sunken + + + PMS + + + + + PModDepthLabel + + + + 10 + 80 + 40 + 24 + + + + PaletteBackground + + + AncestorOrigin + + + Box + + + Sunken + + + PMD + + + + + AModDepthLabel + + + + 10 + 110 + 40 + 22 + + + + PaletteBackground + + + AncestorOrigin + + + Box + + + Sunken + + + AMD + + + + + LFOSpeedLabel + + + + 10 + 140 + 50 + 24 + + + + PaletteBackground + + + AncestorOrigin + + + Box + + + Sunken + + + Speed + + + + + LFODelayLabel + + + + 10 + 170 + 50 + 24 + + + + PaletteBackground + + + AncestorOrigin + + + Box + + + Sunken + + + Delay + + + + + AModSensLabel + + + + 100 + 50 + 40 + 22 + + + + PaletteBackground + + + AncestorOrigin + + + Box + + + Sunken + + + AMS + + + + + + Saw Up + + + + + Square + + + + + Triangl + + + + + S/Hold + + + + LFOWaveComboBox + + + + 10 + 50 + 80 + 20 + + + + 13 + + + LFO Waveform + + + + + LFOSyncCheckBox + + + + 10 + 20 + 80 + 25 + + + + AncestorOrigin + + + 13 + + + LFO Sync + + + + + AModSensSlider + + + + 150 + 50 + 40 + 20 + + + + AncestorOrigin + + + 13 + + + 3 + + + 1 + + + 1 + + + Horizontal + + + NoMarks + + + Amplitude Modulation Sensitivity + + + + + PModSensSlider + + + + 150 + 20 + 40 + 20 + + + + AncestorOrigin + + + 13 + + + 7 + + + 1 + + + 1 + + + Horizontal + + + NoMarks + + + Pitch Modulation Sensitivity + + + + + PMSSpinBox + + + + 200 + 20 + 30 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 1 + + + + 7 + + + Coarse Ratio + + + + + AMSSpinBox + + + + 200 + 50 + 30 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 1 + + + + 7 + + + Coarse Ratio + + + + + PModDepthSlider + + + + 70 + 80 + 110 + 20 + + + + AncestorOrigin + + + 13 + + + 99 + + + 1 + + + 1 + + + Horizontal + + + NoMarks + + + Pitch Modulation Depth + + + + + AModDepthSlider + + + + 70 + 110 + 110 + 20 + + + + AncestorOrigin + + + 13 + + + 99 + + + 1 + + + 1 + + + Horizontal + + + NoMarks + + + Pitch Modulation Depth + + + + + LFOSpeedSlider + + + + 70 + 140 + 110 + 20 + + + + AncestorOrigin + + + 13 + + + 99 + + + 1 + + + 1 + + + Horizontal + + + NoMarks + + + LFO Speed + + + + + LFOSpeedSpinBox + + + + 190 + 140 + 40 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 1 + + + + 99 + + + Coarse Ratio + + + + + LFODelaySlider + + + + 70 + 170 + 110 + 20 + + + + AncestorOrigin + + + 13 + + + 99 + + + 1 + + + 1 + + + Horizontal + + + NoMarks + + + LFO Delay + + + + + LFODelaySpinBox + + + + 190 + 170 + 40 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 1 + + + + 99 + + + Coarse Ratio + + + + + PModDepthSpinBox + + + + 190 + 80 + 40 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 1 + + + + 99 + + + Coarse Ratio + + + + + AModDepthSpinBox + + + + 190 + 110 + 40 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 1 + + + + 99 + + + Coarse Ratio + + + + + + transposeGroupBox + + + + 10 + 250 + 310 + 70 + + + + AncestorOrigin + + + Transpose and Global Detune + + + + transposeSlider + + + + 10 + 20 + 110 + 19 + + + + AncestorOrigin + + + 13 + + + -24 + + + 24 + + + 1 + + + Horizontal + + + NoMarks + + + Transpose + + + + + transposeSpinBox + + + + 130 + 20 + 40 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 1 + + + + 99 + + + -24 + + + Coarse Ratio + + + + + globalDetuneSlider + + + + 180 + 20 + 70 + 20 + + + + AncestorOrigin + + + 13 + + + -15 + + + 15 + + + 1 + + + Horizontal + + + NoMarks + + + Global Detune + + + + + globalDetuneSpinBox + + + + 260 + 20 + 40 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 1 + + + + 15 + + + -15 + + + Coarse Ratio + + + + + + + Algorithm 1 + + + + + Algorithm 2 + + + + + Algorithm 3 + + + + + Algorithm 4 + + + + + Algorithm 5 + + + + + Algorithm 6 + + + + + Algorithm 7 + + + + + Algorithm 8 + + + + algorithmComboBox + + + + 340 + 280 + 110 + 30 + + + + 13 + + + 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> + + + + + + tab + + + Op &1 + + + + Frequency1groupBox + + + + 10 + 190 + 450 + 50 + + + + AncestorOrigin + + + Frequency 1 + + + + Fix1CheckBox + + + true + + + + 400 + 20 + 40 + 25 + + + + AncestorOrigin + + + + + + + 13 + + + false + + + FIX + + + + + CoarseRatio1Label + + + + 10 + 20 + 70 + 22 + + + + PaletteBackground + + + AncestorOrigin + + + Box + + + Sunken + + + Coarse 1 + + + + + FineRatio1Label + + + + 140 + 20 + 50 + 22 + + + + PaletteBackground + + + AncestorOrigin + + + Box + + + Sunken + + + Fine 1 + + + + + Freq1Label + + + + 250 + 20 + 50 + 22 + + + + PaletteBackground + + + AncestorOrigin + + + Box + + + Sunken + + + Freq 1 + + + + + CoarseRatio1SpinBox + + + + 90 + 20 + 40 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 1 + + + + Coarse Ratio + + + + + FineRatio1SpinBox + + + + 200 + 20 + 40 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 1 + + + + Fine Ratio + + + + + Freq1SpinBox + + + false + + + + 310 + 20 + 80 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 1 + + + + 32000 + + + Fixed Frequency + + + + + + Env1GroupBox + + + + 10 + 0 + 260 + 190 + + + + ParentOrigin + + + Envelope 1 + + + + RR1Label + + + + 210 + 160 + 43 + 22 + + + + PaletteBackground + + + AncestorOrigin + + + Box + + + Sunken + + + RR1 + + + + + D1R1Label + + + + 60 + 160 + 43 + 22 + + + + PaletteBackground + + + AncestorOrigin + + + Box + + + Sunken + + + D1R1 + + + + + D1L1Label + + + + 110 + 160 + 43 + 22 + + + + PaletteBackground + + + AncestorOrigin + + + Box + + + Sunken + + + D1L1 + + + + + D2R1Label + + + + 160 + 160 + 43 + 22 + + + + PaletteBackground + + + AncestorOrigin + + + Box + + + Sunken + + + D2R1 + + + + + D1L1Slider + + + + 120 + 50 + 20 + 100 + + + + AncestorOrigin + + + 13 + + + 15 + + + 1 + + + 1 + + + 0 + + + Vertical + + + NoMarks + + + 1° Decay Level + + + + + D2R1Slider + + + + 170 + 50 + 20 + 100 + + + + AncestorOrigin + + + 13 + + + 31 + + + 1 + + + 1 + + + 0 + + + Vertical + + + NoMarks + + + 2° Decay Rate + + + + + D1R1Slider + + + + 70 + 50 + 20 + 100 + + + + AncestorOrigin + + + 13 + + + false + + + TabFocus + + + false + + + 31 + + + 1 + + + 1 + + + 0 + + + Vertical + + + NoMarks + + + 1° Decay Rate + + + + + RR1Slider + + + + 220 + 50 + 20 + 100 + + + + AncestorOrigin + + + 13 + + + 0 + + + 15 + + + 1 + + + 1 + + + 0 + + + Vertical + + + NoMarks + + + 0 + + + Release Rate + + + + + AR1Label + + + + 10 + 160 + 40 + 22 + + + + PaletteBackground + + + AncestorOrigin + + + Box + + + Sunken + + + AR1 + + + + + D1R1SpinBox + + + + 60 + 20 + 40 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 1 + + + + 31 + + + Coarse Ratio + + + + + D1L1SpinBox + + + + 110 + 20 + 40 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 1 + + + + 15 + + + Coarse Ratio + + + + + D2R1SpinBox + + + + 160 + 20 + 40 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 1 + + + + 31 + + + Coarse Ratio + + + + + RR1SpinBox + + + + 210 + 20 + 40 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 1 + + + + 15 + + + Coarse Ratio + + + + + AR1Slider + + + + 20 + 50 + 20 + 100 + + + + AncestorOrigin + + + 13 + + + 31 + + + 1 + + + 1 + + + 0 + + + Vertical + + + NoMarks + + + Attack Rate + + + + + + + + AR1SpinBox + + + + 10 + 20 + 40 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 1 + + + + 31 + + + Attack Rate + + + + + + Scaling1GroupBox + + + + 280 + 0 + 110 + 190 + + + + ParentOrigin + + + Scaling 1 + + + + LS1Label + + + + 10 + 160 + 40 + 22 + + + + PaletteBackground + + + AncestorOrigin + + + Box + + + Sunken + + + LS1 + + + + + RS1Label + + + + 60 + 160 + 40 + 22 + + + + PaletteBackground + + + AncestorOrigin + + + Box + + + Sunken + + + RS1 + + + + + LS1Slider + + + + 20 + 50 + 19 + 100 + + + + AncestorOrigin + + + 13 + + + 99 + + + 1 + + + 1 + + + 0 + + + Vertical + + + NoMarks + + + Level Scaling + + + Attack Rate of the operator 1 + + + + + RS1Slider + + + + 70 + 50 + 19 + 100 + + + + AncestorOrigin + + + 13 + + + 3 + + + 1 + + + 1 + + + 0 + + + Vertical + + + NoMarks + + + Rate Scaling + + + Attack Rate of the operator 1 + + + + + LS1SpinBox + + + + 10 + 20 + 40 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 1 + + + + 99 + + + Coarse Ratio + + + + + RS1SpinBox + + + + 60 + 20 + 40 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 1 + + + + 3 + + + Coarse Ratio + + + + + + Vol1groupBox + + + + 400 + 0 + 60 + 190 + + + + AncestorOrigin + + + Vol 1 + + + + Vol1Slider + + + + 20 + 50 + 19 + 130 + + + + AncestorOrigin + + + 13 + + + 99 + + + 1 + + + 1 + + + 0 + + + Vertical + + + NoMarks + + + Volume + + + + + + + + Vol1SpinBox + + + + 10 + 20 + 40 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 1 + + + + 99 + + + Coarse Ratio + + + + + + sensitivity1groupBox + + + + 10 + 240 + 260 + 80 + + + + ParentOrigin + + + Sensitivity 1 + + + + EGS1Label + + + + 80 + 20 + 40 + 22 + + + + PaletteBackground + + + AncestorOrigin + + + Box + + + Sunken + + + EBS1 + + + + + KVS1Label + + + + 10 + 50 + 40 + 22 + + + + PaletteBackground + + + AncestorOrigin + + + Box + + + Sunken + + + KVS1 + + + + + AME1CheckBox + + + + 10 + 20 + 60 + 25 + + + + AncestorOrigin + + + + + + + 13 + + + false + + + AME1 + + + Amplitude Modulation Enable + + + + + KVS1Slider + + + + 60 + 50 + 84 + 19 + + + + AncestorOrigin + + + 13 + + + false + + + 7 + + + 1 + + + 1 + + + Horizontal + + + NoMarks + + + Key Velocity Sensitivity + + + + + EBS1Slider + + + + 130 + 20 + 70 + 20 + + + + AncestorOrigin + + + 13 + + + 7 + + + 1 + + + 1 + + + Horizontal + + + NoMarks + + + EG Bias Sensitivity + + + + + KVS1SpinBox + + + + 160 + 50 + 40 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 1 + + + + 7 + + + Coarse Ratio + + + + + EBS1SpinBox + + + + 210 + 20 + 40 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 1 + + + + 7 + + + Coarse Ratio + + + + + + DetWaveEGS1GroupBox + + + + 280 + 240 + 180 + 80 + + + + AncestorOrigin + + + Detune Wave EGShift 1 + + + + + Wave1 + + + + + Wave2 + + + + + Wave3 + + + + + Wave4 + + + + + Wave5 + + + + + Wave6 + + + + + Wave7 + + + + + Wave8 + + + + WaveForm1ComboBox + + + + 10 + 50 + 80 + 20 + + + + 13 + + + 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> + + + + + DET1Label + + + + 10 + 20 + 44 + 24 + + + + PaletteBackground + + + AncestorOrigin + + + Box + + + Sunken + + + DET1 + + + + + + 96dB + + + + + 48dB + + + + + 24dB + + + + + 12dB + + + + EGQ1ComboBox + + + false + + + + 100 + 50 + 70 + 20 + + + + 13 + + + EG Shift + + + + + DET1Slider + + + + 60 + 20 + 70 + 19 + + + + AncestorOrigin + + + 13 + + + -3 + + + 3 + + + 1 + + + 1 + + + 0 + + + Horizontal + + + NoMarks + + + Detune + + + Attack Rate of the operator 1 + + + + + DET1SpinBox + + + + 140 + 20 + 30 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 1 + + + + 3 + + + -3 + + + Coarse Ratio + + + + + + + tab + + + Op &2 + + + + Frequency2groupBox + + + + 10 + 190 + 450 + 50 + + + + AncestorOrigin + + + Frequency 2 + + + + Fix2CheckBox + + + true + + + + 400 + 20 + 40 + 25 + + + + AncestorOrigin + + + + + + + 13 + + + false + + + FIX + + + + + Freq2Label + + + + 250 + 20 + 50 + 22 + + + + PaletteBackground + + + AncestorOrigin + + + Box + + + Sunken + + + Freq 2 + + + + + FineRatio2Label + + + + 140 + 20 + 50 + 22 + + + + PaletteBackground + + + AncestorOrigin + + + Box + + + Sunken + + + Fine 2 + + + + + CoarseRatio2Label + + + + 10 + 20 + 70 + 22 + + + + PaletteBackground + + + AncestorOrigin + + + Box + + + Sunken + + + Coarse 2 + + + + + CoarseRatio2SpinBox + + + + 90 + 20 + 40 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 1 + + + + Coarse Ratio + + + + + FineRatio2SpinBox + + + + 200 + 20 + 40 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 1 + + + + Fine Ratio + + + + + Freq2SpinBox + + + false + + + + 310 + 20 + 80 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 1 + + + + 32000 + + + Fixed Frequency + + + + + + Env2GroupBox + + + + 10 + 0 + 260 + 190 + + + + ParentOrigin + + + Envelope 2 + + + + AR2Label + + + + 10 + 160 + 40 + 22 + + + + PaletteBackground + + + AncestorOrigin + + + Box + + + Sunken + + + AR2 + + + + + RR2Label + + + + 210 + 160 + 43 + 22 + + + + PaletteBackground + + + AncestorOrigin + + + Box + + + Sunken + + + RR2 + + + + + D2R2Label + + + + 160 + 160 + 43 + 22 + + + + PaletteBackground + + + AncestorOrigin + + + Box + + + Sunken + + + D2R2 + + + + + D1L2Label + + + + 110 + 160 + 43 + 22 + + + + PaletteBackground + + + AncestorOrigin + + + Box + + + Sunken + + + D1L2 + + + + + D1R2Label + + + + 60 + 160 + 43 + 22 + + + + PaletteBackground + + + AncestorOrigin + + + Box + + + Sunken + + + D1R2 + + + + + AR2Slider + + + true + + + + 20 + 50 + 20 + 100 + + + + AncestorOrigin + + + 13 + + + 31 + + + 1 + + + 0 + + + true + + + Vertical + + + NoMarks + + + Attack Rate + + + + + + + + D1R2Slider + + + + 70 + 50 + 20 + 100 + + + + AncestorOrigin + + + 13 + + + 31 + + + 1 + + + 0 + + + Vertical + + + NoMarks + + + 1° Decay Rate + + + + + D1L2Slider + + + + 120 + 50 + 20 + 100 + + + + AncestorOrigin + + + 13 + + + 15 + + + 1 + + + 0 + + + Vertical + + + NoMarks + + + 1° Decay Level + + + + + D2R2Slider + + + + 170 + 50 + 20 + 100 + + + + AncestorOrigin + + + 13 + + + 31 + + + 1 + + + 0 + + + Vertical + + + NoMarks + + + 2° Decay Rate + + + + + RR2Slider + + + + 220 + 50 + 20 + 100 + + + + AncestorOrigin + + + 13 + + + 0 + + + 15 + + + 1 + + + 0 + + + Vertical + + + NoMarks + + + 0 + + + Release Rate + + + + + D1R2SpinBox + + + + 60 + 20 + 40 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 1 + + + + 31 + + + Coarse Ratio + + + + + D1L2SpinBox + + + + 110 + 20 + 40 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 1 + + + + 15 + + + Coarse Ratio + + + + + D2R2SpinBox + + + + 160 + 20 + 40 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 1 + + + + 31 + + + Coarse Ratio + + + + + RR2SpinBox + + + + 210 + 20 + 40 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 1 + + + + 15 + + + Coarse Ratio + + + + + AR2SpinBox + + + + 10 + 20 + 40 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 1 + + + + 31 + + + Attack Rate + + + + + + Scaling2GroupBox + + + + 280 + 0 + 110 + 190 + + + + ParentOrigin + + + Scaling 2 + + + + LS2Label + + + + 10 + 160 + 40 + 22 + + + + PaletteBackground + + + AncestorOrigin + + + Box + + + Sunken + + + LS2 + + + + + RS2Label + + + + 60 + 160 + 40 + 22 + + + + PaletteBackground + + + AncestorOrigin + + + Box + + + Sunken + + + RS2 + + + + + LS2Slider + + + + 20 + 50 + 20 + 100 + + + + AncestorOrigin + + + 13 + + + 99 + + + 1 + + + 0 + + + Vertical + + + NoMarks + + + 1 + + + Level Scaling + + + Attack Rate of the operator 1 + + + + + RS2Slider + + + + 70 + 50 + 20 + 100 + + + + AncestorOrigin + + + 13 + + + 3 + + + 1 + + + 0 + + + Vertical + + + NoMarks + + + Rate Scaling + + + Attack Rate of the operator 1 + + + + + LS2SpinBox + + + + 10 + 20 + 40 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 1 + + + + 99 + + + Coarse Ratio + + + + + RS2SpinBox + + + + 60 + 20 + 40 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 1 + + + + 3 + + + Coarse Ratio + + + + + + Vol2groupBox + + + + 400 + 0 + 60 + 190 + + + + AncestorOrigin + + + Vol 2 + + + + Vol2Slider + + + + 20 + 50 + 19 + 130 + + + + AncestorOrigin + + + 13 + + + 99 + + + 1 + + + 0 + + + Vertical + + + NoMarks + + + Volume + + + + + + + + Vol2SpinBox + + + + 10 + 20 + 40 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 1 + + + + 99 + + + Coarse Ratio + + + + + + sensitivity2groupBox + + + + 10 + 240 + 260 + 80 + + + + ParentOrigin + + + Sensitivity 2 + + + + EGS2Label + + + + 80 + 20 + 40 + 22 + + + + PaletteBackground + + + AncestorOrigin + + + Box + + + Sunken + + + EBS2 + + + + + KVS2Label + + + + 10 + 50 + 40 + 22 + + + + PaletteBackground + + + AncestorOrigin + + + Box + + + Sunken + + + KVS2 + + + + + AME2CheckBox + + + + 10 + 20 + 60 + 25 + + + + AncestorOrigin + + + + + + + 13 + + + false + + + AME2 + + + Amplitude Modulation Enable + + + + + KVS2Slider + + + + 60 + 50 + 84 + 19 + + + + AncestorOrigin + + + 13 + + + false + + + 7 + + + 1 + + + Horizontal + + + NoMarks + + + Key Velocity Sensitivity + + + + + EBS2Slider + + + + 130 + 20 + 70 + 20 + + + + AncestorOrigin + + + 13 + + + 7 + + + 1 + + + Horizontal + + + NoMarks + + + EG Bias Sensitivity + + + + + EBS2SpinBox + + + + 210 + 20 + 40 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 1 + + + + 7 + + + Coarse Ratio + + + + + KVS2SpinBox + + + + 160 + 50 + 40 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 1 + + + + 7 + + + Coarse Ratio + + + + + + DetWaveEGS2GroupBox + + + + 280 + 240 + 180 + 80 + + + + AncestorOrigin + + + Detune Wave EGShift 2 + + + + DET2Slider + + + + 60 + 20 + 70 + 19 + + + + AncestorOrigin + + + 13 + + + -3 + + + 3 + + + 1 + + + 0 + + + Horizontal + + + NoMarks + + + Detune + + + Attack Rate of the operator 1 + + + + + DET2Label + + + + 10 + 20 + 44 + 24 + + + + PaletteBackground + + + AncestorOrigin + + + Box + + + Sunken + + + DET2 + + + + + + Wave1 + + + + + Wave2 + + + + + Wave3 + + + + + Wave4 + + + + + Wave5 + + + + + Wave6 + + + + + Wave7 + + + + + Wave8 + + + + WaveForm2ComboBox + + + + 10 + 50 + 80 + 20 + + + + 13 + + + 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> + + + + + + 96dB + + + + + 48dB + + + + + 24dB + + + + + 12dB + + + + EGS2comboBox + + + false + + + + 100 + 50 + 70 + 20 + + + + 13 + + + EG Shift + + + + + DET2SpinBox + + + + 140 + 20 + 30 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 1 + + + + 3 + + + -3 + + + Coarse Ratio + + + + + + + TabPage + + + Op &3 + + + + Frequency3groupBox + + + + 10 + 190 + 450 + 50 + + + + AncestorOrigin + + + Frequency 3 + + + + Fix3CheckBox + + + true + + + + 400 + 20 + 40 + 25 + + + + AncestorOrigin + + + + + + + 13 + + + false + + + FIX + + + + + CoarseRatio3Label + + + + 10 + 20 + 70 + 22 + + + + PaletteBackground + + + AncestorOrigin + + + Box + + + Sunken + + + Coarse 3 + + + + + FineRatio3Label + + + + 140 + 20 + 50 + 22 + + + + PaletteBackground + + + AncestorOrigin + + + Box + + + Sunken + + + Fine 3 + + + + + Freq3Label + + + + 250 + 20 + 50 + 22 + + + + PaletteBackground + + + AncestorOrigin + + + Box + + + Sunken + + + Freq 3 + + + + + CoarseRatio3SpinBox + + + + 90 + 20 + 40 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 1 + + + + 0 + + + Coarse Ratio + + + + + FineRatio3SpinBox + + + + 200 + 20 + 40 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 1 + + + + 0 + + + Fine Ratio + + + + + Freq3SpinBox + + + false + + + + 310 + 20 + 80 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 1 + + + + 32000 + + + Fixed Frequency + + + + + + Env3GroupBox + + + + 10 + 0 + 260 + 190 + + + + ParentOrigin + + + Envelope 3 + + + + RR3Label + + + + 210 + 160 + 43 + 22 + + + + PaletteBackground + + + AncestorOrigin + + + Box + + + Sunken + + + RR3 + + + + + D2R3Label + + + + 160 + 160 + 43 + 22 + + + + PaletteBackground + + + AncestorOrigin + + + Box + + + Sunken + + + D2R3 + + + + + D1L3Label + + + + 110 + 160 + 43 + 22 + + + + PaletteBackground + + + AncestorOrigin + + + Box + + + Sunken + + + D1L3 + + + + + D1R3Label + + + + 60 + 160 + 43 + 22 + + + + PaletteBackground + + + AncestorOrigin + + + Box + + + Sunken + + + D1R3 + + + + + AR3Label + + + + 10 + 160 + 40 + 22 + + + + PaletteBackground + + + AncestorOrigin + + + Box + + + Sunken + + + AR3 + + + + + AR3Slider + + + + 20 + 50 + 20 + 100 + + + + AncestorOrigin + + + 13 + + + 31 + + + 1 + + + 0 + + + Vertical + + + NoMarks + + + Attack Rate + + + + + + + + D1R3Slider + + + + 70 + 50 + 20 + 100 + + + + AncestorOrigin + + + 13 + + + 31 + + + 1 + + + 0 + + + Vertical + + + NoMarks + + + 1° Decay Rate + + + + + D1L3Slider + + + + 120 + 50 + 20 + 100 + + + + AncestorOrigin + + + 13 + + + 15 + + + 1 + + + 0 + + + Vertical + + + NoMarks + + + 1° Decay Level + + + + + D2R3Slider + + + + 170 + 50 + 20 + 100 + + + + AncestorOrigin + + + 13 + + + 31 + + + 1 + + + 0 + + + Vertical + + + NoMarks + + + 2° Decay Rate + + + + + RR3Slider + + + + 220 + 50 + 20 + 100 + + + + AncestorOrigin + + + 13 + + + 0 + + + 15 + + + 1 + + + 0 + + + Vertical + + + NoMarks + + + 0 + + + Release Rate + + + + + D1R3SpinBox + + + + 60 + 20 + 40 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 1 + + + + 31 + + + Coarse Ratio + + + + + D1L3SpinBox + + + + 110 + 20 + 40 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 1 + + + + 15 + + + Coarse Ratio + + + + + D2R3SpinBox + + + + 160 + 20 + 40 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 1 + + + + 31 + + + Coarse Ratio + + + + + RR3SpinBox + + + + 210 + 20 + 40 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 1 + + + + 15 + + + Coarse Ratio + + + + + AR3SpinBox + + + + 10 + 20 + 40 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 1 + + + + 31 + + + Attack Rate + + + + + + Scaling3GroupBox + + + + 280 + 0 + 110 + 190 + + + + ParentOrigin + + + Scaling 3 + + + + LS3Label + + + + 10 + 160 + 40 + 22 + + + + PaletteBackground + + + AncestorOrigin + + + Box + + + Sunken + + + LS3 + + + + + RS3Label + + + + 60 + 160 + 40 + 22 + + + + PaletteBackground + + + AncestorOrigin + + + Box + + + Sunken + + + RS3 + + + + + LS3Slider + + + + 20 + 50 + 19 + 100 + + + + AncestorOrigin + + + 13 + + + 99 + + + 1 + + + 0 + + + Vertical + + + NoMarks + + + Level Scaling + + + Attack Rate of the operator 1 + + + + + RS3Slider + + + + 70 + 50 + 19 + 100 + + + + AncestorOrigin + + + 13 + + + 3 + + + 1 + + + 0 + + + Vertical + + + NoMarks + + + Rate Scaling + + + Attack Rate of the operator 1 + + + + + LS3SpinBox + + + + 10 + 20 + 40 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 1 + + + + 99 + + + Coarse Ratio + + + + + RS3SpinBox + + + + 60 + 20 + 40 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 1 + + + + 3 + + + Coarse Ratio + + + + + + Vol3groupBox + + + + 400 + 0 + 60 + 190 + + + + AncestorOrigin + + + Vol 3 + + + + Vol3Slider + + + + 20 + 50 + 19 + 130 + + + + AncestorOrigin + + + 13 + + + 99 + + + 1 + + + 0 + + + Vertical + + + NoMarks + + + Volume + + + + + + + + Vol3SpinBox + + + + 10 + 20 + 40 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 1 + + + + 99 + + + Coarse Ratio + + + + + + sensitivity3groupBox + + + + 10 + 240 + 260 + 80 + + + + ParentOrigin + + + Sensitivity 3 + + + + EGS3Label + + + + 80 + 20 + 40 + 22 + + + + PaletteBackground + + + AncestorOrigin + + + Box + + + Sunken + + + EBS3 + + + + + KVS3Label + + + + 10 + 50 + 40 + 22 + + + + PaletteBackground + + + AncestorOrigin + + + Box + + + Sunken + + + KVS3 + + + + + AME3CheckBox + + + + 10 + 20 + 60 + 25 + + + + AncestorOrigin + + + + + + + 13 + + + false + + + AME3 + + + Amplitude Modulation Enable + + + + + KVS3Slider + + + + 60 + 50 + 84 + 19 + + + + AncestorOrigin + + + 13 + + + false + + + 7 + + + 1 + + + Horizontal + + + NoMarks + + + Key Velocity Sensitivity + + + + + EBS3Slider + + + + 130 + 20 + 70 + 20 + + + + AncestorOrigin + + + 13 + + + 7 + + + 1 + + + Horizontal + + + NoMarks + + + EG Bias Sensitivity + + + + + EBS3SpinBox + + + + 210 + 20 + 40 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 1 + + + + 7 + + + Coarse Ratio + + + + + KVS3SpinBox + + + + 160 + 50 + 40 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 1 + + + + 7 + + + Coarse Ratio + + + + + + DetWaveEGS3GroupBox + + + + 280 + 240 + 180 + 80 + + + + AncestorOrigin + + + Detune Wave EGShift 3 + + + + + Wave1 + + + + + Wave2 + + + + + Wave3 + + + + + Wave4 + + + + + Wave5 + + + + + Wave6 + + + + + Wave7 + + + + + Wave8 + + + + WaveForm3ComboBox + + + + 10 + 50 + 80 + 20 + + + + 13 + + + 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> + + + + + + 96dB + + + + + 48dB + + + + + 24dB + + + + + 12dB + + + + EGS3comboBox + + + false + + + + 100 + 50 + 70 + 20 + + + + 13 + + + EG Shift + + + + + DET3Label + + + + 10 + 20 + 44 + 24 + + + + PaletteBackground + + + AncestorOrigin + + + Box + + + Sunken + + + DET3 + + + + + DET3Slider + + + + 60 + 20 + 70 + 19 + + + + AncestorOrigin + + + 13 + + + -3 + + + 3 + + + 1 + + + 0 + + + Horizontal + + + NoMarks + + + Detune + + + Attack Rate of the operator 1 + + + + + DET3SpinBox + + + + 140 + 20 + 30 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 1 + + + + 3 + + + -3 + + + Coarse Ratio + + + + + + + TabPage + + + Op &4 + + + + Frequency4groupBox + + + + 10 + 190 + 450 + 50 + + + + AncestorOrigin + + + Frequency 4 + + + + CoarseRatio4Label + + + + 10 + 20 + 70 + 22 + + + + PaletteBackground + + + AncestorOrigin + + + Box + + + Sunken + + + Coarse 4 + + + + + FineRatio4Label + + + + 140 + 20 + 50 + 22 + + + + PaletteBackground + + + AncestorOrigin + + + Box + + + Sunken + + + Fine 4 + + + + + Freq4Label + + + + 250 + 20 + 50 + 22 + + + + PaletteBackground + + + AncestorOrigin + + + Box + + + Sunken + + + Freq 4 + + + + + Fix4CheckBox + + + true + + + + 400 + 20 + 40 + 25 + + + + AncestorOrigin + + + + + + + 13 + + + false + + + FIX + + + + + FineRatio4SpinBox + + + + 200 + 20 + 40 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 1 + + + + Fine Ratio + + + + + Freq4SpinBox + + + false + + + + 310 + 20 + 80 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 1 + + + + 32000 + + + Fixed Frequency + + + + + CoarseRatio4SpinBox + + + + 90 + 20 + 40 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 1 + + + + Coarse Ratio + + + + + + Scaling4GroupBox + + + + 280 + 0 + 110 + 190 + + + + ParentOrigin + + + Scaling 4 + + + + LS4Label + + + + 10 + 160 + 40 + 22 + + + + PaletteBackground + + + AncestorOrigin + + + Box + + + Sunken + + + LS4 + + + + + RS4Label + + + + 60 + 160 + 40 + 22 + + + + PaletteBackground + + + AncestorOrigin + + + Box + + + Sunken + + + RS4 + + + + + LS4Slider + + + + 20 + 50 + 19 + 100 + + + + AncestorOrigin + + + 13 + + + 99 + + + 1 + + + 0 + + + Vertical + + + NoMarks + + + Level Scaling + + + Attack Rate of the operator 1 + + + + + RS4Slider + + + + 70 + 50 + 19 + 100 + + + + AncestorOrigin + + + 13 + + + 3 + + + 1 + + + 0 + + + Vertical + + + NoMarks + + + Rate Scaling + + + Attack Rate of the operator 1 + + + + + RS4SpinBox + + + + 60 + 20 + 40 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 1 + + + + 3 + + + Coarse Ratio + + + + + LS4SpinBox + + + + 10 + 20 + 40 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 1 + + + + 99 + + + Coarse Ratio + + + + + + Env4GroupBox + + + + 10 + 0 + 260 + 190 + + + + ParentOrigin + + + Envelope 4 + + + + AR4Slider + + + + 20 + 50 + 20 + 100 + + + + AncestorOrigin + + + 13 + + + 31 + + + 1 + + + 0 + + + Vertical + + + NoMarks + + + Attack Rate + + + + + + + + AR4Label + + + + 10 + 160 + 40 + 22 + + + + PaletteBackground + + + AncestorOrigin + + + Box + + + Sunken + + + AR4 + + + + + RR4Label + + + + 210 + 160 + 43 + 22 + + + + PaletteBackground + + + AncestorOrigin + + + Box + + + Sunken + + + RR4 + + + + + D2R4Label + + + + 160 + 160 + 43 + 22 + + + + PaletteBackground + + + AncestorOrigin + + + Box + + + Sunken + + + D2R4 + + + + + D2R4Slider + + + + 170 + 50 + 20 + 100 + + + + AncestorOrigin + + + 13 + + + 31 + + + 1 + + + 0 + + + Vertical + + + NoMarks + + + 2° Decay Rate + + + + + D1L4Slider + + + + 120 + 50 + 20 + 100 + + + + AncestorOrigin + + + 13 + + + 15 + + + 1 + + + 0 + + + Vertical + + + NoMarks + + + 1° Decay Level + + + + + D1L4Label + + + + 110 + 160 + 43 + 22 + + + + PaletteBackground + + + AncestorOrigin + + + Box + + + Sunken + + + D1L4 + + + + + D1R4Label + + + + 60 + 160 + 43 + 22 + + + + PaletteBackground + + + AncestorOrigin + + + Box + + + Sunken + + + D1R4 + + + + + D1R4Slider + + + + 70 + 50 + 20 + 100 + + + + AncestorOrigin + + + 13 + + + 31 + + + 1 + + + 0 + + + Vertical + + + NoMarks + + + 1° Decay Rate + + + + + RR4Slider + + + + 220 + 50 + 20 + 100 + + + + AncestorOrigin + + + 13 + + + 0 + + + 15 + + + 1 + + + 0 + + + Vertical + + + NoMarks + + + 0 + + + Release Rate + + + + + D1R4SpinBox + + + + 60 + 20 + 40 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 1 + + + + 31 + + + Coarse Ratio + + + + + D1L4SpinBox + + + + 110 + 20 + 40 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 1 + + + + 15 + + + Coarse Ratio + + + + + D2R4SpinBox + + + + 160 + 20 + 40 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 1 + + + + 31 + + + Coarse Ratio + + + + + RR4SpinBox + + + + 210 + 20 + 40 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 1 + + + + 15 + + + Coarse Ratio + + + + + AR4SpinBox + + + + 10 + 20 + 40 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 1 + + + + 31 + + + Attack Rate + + + + + + Vol4groupBox + + + + 400 + 0 + 60 + 190 + + + + AncestorOrigin + + + Vol 4 + + + + Vol4Slider + + + + 20 + 50 + 19 + 130 + + + + AncestorOrigin + + + 13 + + + 99 + + + 1 + + + 0 + + + Vertical + + + NoMarks + + + Volume + + + + + + + + Vol4SpinBox + + + + 10 + 20 + 40 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 1 + + + + 99 + + + Coarse Ratio + + + + + + sensitivity4groupBox + + + + 10 + 240 + 260 + 80 + + + + ParentOrigin + + + Sensitivity 4 + + + + EGS4Label + + + + 80 + 20 + 40 + 22 + + + + PaletteBackground + + + AncestorOrigin + + + Box + + + Sunken + + + EBS4 + + + + + KVS4Label + + + + 10 + 50 + 40 + 22 + + + + PaletteBackground + + + AncestorOrigin + + + Box + + + Sunken + + + KVS4 + + + + + AME4CheckBox + + + + 10 + 20 + 60 + 25 + + + + AncestorOrigin + + + + + + + 13 + + + false + + + AME4 + + + Amplitude Modulation Enable + + + + + KVS4Slider + + + + 60 + 50 + 84 + 19 + + + + AncestorOrigin + + + 13 + + + false + + + 7 + + + 1 + + + Horizontal + + + NoMarks + + + Key Velocity Sensitivity + + + + + EBS4Slider + + + + 130 + 20 + 70 + 20 + + + + AncestorOrigin + + + 13 + + + 7 + + + 1 + + + Horizontal + + + NoMarks + + + EG Bias Sensitivity + + + + + KVS4SpinBox + + + + 160 + 50 + 40 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 1 + + + + 7 + + + Coarse Ratio + + + + + EBS4SpinBox + + + + 210 + 20 + 40 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 1 + + + + 7 + + + Coarse Ratio + + + + + + DetWaveEGS4GroupBox + + + + 280 + 240 + 180 + 80 + + + + AncestorOrigin + + + Detune Wave EGShift 4 + + + + DET4Slider + + + + 60 + 20 + 70 + 19 + + + + AncestorOrigin + + + 13 + + + -3 + + + 3 + + + 1 + + + 0 + + + Horizontal + + + NoMarks + + + Detune + + + Attack Rate of the operator 1 + + + + + DET4Label + + + + 10 + 20 + 44 + 24 + + + + PaletteBackground + + + AncestorOrigin + + + Box + + + Sunken + + + DET4 + + + + + + Wave1 + + + + + Wave2 + + + + + Wave3 + + + + + Wave4 + + + + + Wave5 + + + + + Wave6 + + + + + Wave7 + + + + + Wave8 + + + + WaveForm4ComboBox + + + + 10 + 50 + 80 + 20 + + + + 13 + + + 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> + + + + + + 96dB + + + + + 48dB + + + + + 24dB + + + + + 12dB + + + + EGS4comboBox + + + false + + + + 100 + 50 + 70 + 20 + + + + 13 + + + EG Shift + + + + + DET4SpinBox + + + + 140 + 20 + 30 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 1 + + + + 3 + + + -3 + + + Coarse Ratio + + + + + + + + + 789cedbd5b53144bd7b67bfefe8a27de3e7b63457f32d9a8f1c53a000441146437d9ac5807dd08229b092a0aba62fdf7afaa725363648edc675655337d2ad23467fb6853787be57d8f91d5ffeb7ffe73fcf1c37ffee77ffdd7f787c9c397b3ff9c5d4ebefde77f3efdb8bdfdf5fffcbffff7fff75fffbdf0f2f57fe6975efce7af97d5f8efffebbffefbece63f67ff192d4de65fccbf6ed697f5fae5bc5c4ff97a81ada727cd7a2ad66713b15e986b5eff9baf5ff15fff42acf9ebfbf5fad5bc7c7d47acf9ebc77c7dc6d75bcdbafdffaff3b578fdbd5c4f9af5295b2fbce0af2fca357bfda95ebf5e90ffffb772cd5effc9d6f2ffbf2cd7ecf505be5ee0ebe67ebd3e93bffe5caed9eb577c2d7efd2bbe7ec5d6679fc47a917d3fbeb0f5e2a745f6fab9582fb1d7f9efb734c75fbf106bf6faa8f97e4c16e4fd1ab3b5783f9345be16efe79358b33f7ffa95aff9fb9bde89357f7f23bee6f7ebec4cacf9ffff235b8bf7339de3eb45b61effd5accfc4fb1bcff135ff7e4cfe666bf1fe26afc59afdfe933dbee6ef6f3227d6fccf7fc9d7e2fbf95dacf9fb67f7e36cf105fff5db6c2ddfef2a5ff3f73b5d93ebe6f71b377fffa7f2efcff8855c37af8fced85afc7d189fca357bbf6ff85abcff75b1e65fdf0e5f8bfbf95baed9d7f38dade5fb5f916bf6fa5f7cbdc85f9f976bf6fa2e5bcbafef41aed9f7f3335fbfe6af4fe59a7d7dcdf77ffa497e7dc772cdeecf115f8befdf2fbe165fef9358f3aff73b5ff3af77f251aed9af67eff793f87a27c772cdbe9e1f7c2dbede47b966aff3f7b3f89aff7eafd85a7c3dd36bb17e39dfbcfe82af3fb1d7277f89357b7d7c58afcf16c5d737fe5bacd99f3ffaced7fceb1dfd146bfefe3ff1b5f87a7fca35fbf3aed95a7ebd5fe59abdbecdd7e2ebfb87aff9d737fd25d6fcfbb7c7d7fcdf93e9a158733dceb3b5fcfb3de26b7e7f26e275713fde8935bf5f6b6cfd728ead478dbecee4f77ff48f58b3af677cc0d7fcfe8cf7c59adfbf65bee6f767c4fefcf6fb3f966bf67e2ef99adf8fc97bbe16dfef53b1e6f7e396afc5fdf82cd6fc75f6f57d92ff1ebce66bf1efd784aff9fdd97d106bfef5f3df4fdcaff154acd9ebd325b67e39c7efe78358f3fbf95baea7cd9adfbf978bfcf51f72ddbc3e6ededf27f9f76dbc27d6fc7eeff2b5b89f6fe59a7d7fd6d85adcdfd1a15cb3d7e7f85adcdfcf7c2deeefbd58b3fb33d9e26b7e7f279b62cdefe784ade5fdbd916bf6fd78c3d7e2dfa70db966af1ff035bfffe305be16f7fb4cacd9fd3abb666b71bf475fc49a7fbfbec935bbdffcfdc8fb3d91ebe6f511bfdf2f5ff3fbdffc7bf5e95cdedf0bb966ef679badc5fd1defc8357b3feff89adfdfd1095ff3fb3b5a146b7e7fbff0b5b8bf5762cd5f67f7eb5cdcdfc9915cb35fff92aff9fd9d2cc935bbbff77c2dfe7dfc20d6fcefef265f8bfbfd49acf9bf8fe76c2deeeff842aed9fdbbe36b7e7f473772cd5e5fe56b7e7f474b62fd8afd7afefe5f7ee2afbf126bf6fab859575f8eb8df1fe49abddff77c2deeb7785ddcef3db1e6fba9177ccdeff7e854acf9fd3b676b79bfefe49addef55be16f77b59aed9eb277c2deef748acf9fd3ee36b7ebfa71762cdefef17b696f7fbb35cb3bf9f577ccdeff7f852aed9fdbbe76b71bf57c49adfef0dbe16f77b5dacf9fd6efefe9ecbbfbfe34dbee6f773bc25d6fc7e6ef3b5b89f1fc59abf7eccd6723fbb20d7ec7e4df95adccf33b966af3ff2b5e0d75bb1e67afec0d78267fb62cd5fe77f9eb89fd32f72cdeee7225f8bfb792dd7ecf51bbe16f7f356acf9fdfcc1d7e27e3e88357f9ddfaf57737cfd975cb3dfbff97e5cc8bfafe3b762cdefd727bee6f777bc2ed6fcf5f76c2defef815cb3efc7df7ccdefefe848aed9fd1af1b5b8bf1762cdefdf2d5f8bfbfb4dacf9eb2b6c2d797728d7ecdf5ffe7ee4fd5d926bf6f5f3df5ffefbfb8f58f3fb75c9d7e2fe9e8b357ffd89ade5fddd946bf6eb77f97a91bfbe23d7eccf6b78797121f74fab6c2deee7f88d5cb3fbff92afc5fe6145aed9ebcb7c2d78f65bacf9d7ff8bafc5bfb74f62cd5fffc9d652ff8f72cddeef0fbe16f7f341aed9eb5ff95adccf3bb1e6fafec6d7fc7e8eefc59abffe9dade5fd9cca35bb9fd77c2deee7955cb3d7f99fffea355f3f8af5eb8566cdefc7ab4ffcf55f62cd5fe7f7fbf51c5fefcbf559bdde7d188faa31a9c7785a8d3339f0f5a91ae7cdf8d48c8beac7fafa0cc66533be807135beae7e64a3bd6ef8b845835dff80b91e77d5b847e3ab32bef1714fccedf53d79e4b872bc0f36f0457dfd62a8f70b8f3b30be6af38371e0eb079f7f92e351193f9bf9a9fa511ff8fa558ddfd55846e3b73296c72bd5bcd2ccf5d0afd56abce1f36af53338d6e4581daf37638d0f76bdadc64633de8e37c17837dee26373fcbefa518c0fd58f626c573fb2b133fec8c76ef5231bbbe3bd6aec57e3a0fad941f5b37a1c36e3ef6a1c8e8faa715cfd78ccaf93f169355e8ce7aaf1d798250cf3955a47d5981874bcc007d3b0aae37370d51afe42e8f8ba19577cd4d7a245c74b52cbe2aa35fc95cfdf8c3afeaafcbd358df6eff9f76afe8ee6a10cfcbe685d9a865daf6240adea9749b73f14bdfe0083d6ee4fa0d9f632e9f6179897adba5de6ba5507be5e4acdaada5d95f31a18aa7637d080dadd04e31dd02fd3edab667c90fafd58fdc8b4bb2db55b5faf1bfd4aed8ec652bfec3a6663341a1fd703e8f7a4d6ef6802198c755bfd179abf6749fcbd5106d3ec8dc65d31eeadfc2dc55de7359ac6cd45d8ac5f261efbb3b84f0eeb970f87579239bc0a38bc86b4fcd68bc3ef0c1c6e19bc2d19bc8374bc8775cc35dc7298e9f8a8d1f119d2316370cd5fbc8f9e12fc1557387faf02f87bdbe899e2afdf3e3a84bbb332caf1388ec3aa5e87cae1979e1c5e431c96da1d7d42ba5d47bab571f815e030de436f3743dd431f687be80382c3c78a7e4f6afd8effe20c56f6ce0d7fa706fe9e49fe5ef0e1e62f1b66fede480ef3313ab7f297f2bd29eccdcad98c7c4ee1716e0e9b354d7398d6734e0eab5ed8cde137c538bc4970b8d5f107ca0b8f2e342fac73f850e130d4f069bd97660c46fb68a9e3d167037fc570f3f712f1f7527298e6ef0dc5dfd1a5731f5d9abba5aeae786cd7ec3752ab6e16cf1687578b7318efa10587b78117f6e430f7c21587ab9fb51c3e02faad46f5b386c382c1ad766bfe36da95d7e84b107f3f17e4afddf7266832859fae11f3fb26ebdded8be3f2693f4f5c8ac3cbde1c36675b6f481d8772f82de0709b47630eb779b4be9f665a661cde55386ccbb48e140ebf900c263268ace328fe5e2afcd5350cd97ba3d6922cfc2d9533f77dc5f1d85c470acba84339fc3599c3b67a929bc3cb091c7e63e430ae27d938bc5129b5e5f07b650ffdcaa2dd8f0a83f72483150eb7faad7cb09a657106f7c0df9b40feda7d6fa43e93f87a153832f0394ae729bef8b97058bf6c1c5e437bea35c461a1e3b7da7e1a7258f7c2ea7efaa3d432ad633b878f21871b05dbf8bb5084bfaa9615fed63a26b4ecc7df30ee0efd4ae171ee7c7af638bc12c461ba2ecc86a92ebc29f7ce2a87615dd8b08756ea492d87a17e0f150ee34cba65703c7fc5f8cc751bc55f836673f0d79bbbc99c8d1d115c0ed4b7cd17fb7b62dcafd53787ed3d5add73b8ebfeac53c8e028fe0a4d5f6a0c2ec5df5c7973962b632f47191ea7f8e2d9e5b02dc7d2ebc23939dc537f56a3e096bf539abfa32fdefcbdccc5dfd125c18b28f67a73b72be6063039e0df84540efb7b629f7eadbe39acd685750eaf067058d5727c9fb4bb3f8bae0babfd59722f0d183cd5f95beb1868d9c6dff300fede04f2f71bd7738aefcdc3d95a5fd709733e3e97e730ac13fbd788f37218f7738841ebb65f0efbf467e91cf6eccf427561a53f8b3158f2774af8df6aaefecb0560700c7f6ff8f58f1c88bf58bb1a7fb3fadec131d793c99e3c4ecda76797c3aef34a2e0ef7d59f65ad0b2bfd5958c798c1ad8e29fe321d87f197d631c1dfbaee6bde4b1bf8ebe77ba3789bc4d9883981c77ebe38369fb6f76bf5c561f3fed9c4e1b0f34aa5faa4b7b53d74407f16d22fe8eb600c6ef98bb44bf07774e3c55f311add8e6e75feaaecc5fcad562d87b3f8de99e36eba3ff665f15039fca471b88f73c3e11c76f5676d7bd6963cfbb33883257f990f8ee62fac27293a0ee3af602fe26f48ee1cc65d1b274b8d00bf9c81c53ebef8dfc0e1aece2be5e9cfdab7f467712f0c187ca66bb7087f6f2aaddee8fc959a0de5af712f8cf89ba4b7d175de519ec7811c0eab13cf16877dcf2b9933699ac3b02e8cbd705c7f96ba97ded332ad6a8cfe51ebc282c12d7fb52cab0c7f999643f99bc1f75ab9dbf748e771190edf6b5acdc7e1476f0eff0ae270d93ee9f8fe2cf5ac925e176efb3ae83df411e4306770287fab31ba93fc35e8b6307f0b7137376f0b73d9cd61378b63fbb5d238ecfb1c8f1ccfd14a39afd4557fd6aea33fcbf0dc8ee6c9779f55fe221d03fed63a56b4ecc75f7141fe925956347f6797bb113c4e64b14f3e1ddaaf350c0ebbce0d77d5271dd39f15f9dc0ee18375fe8ae1c1dfcb02fc8df0bdf1ecb5f2f1aad09c97c7397cf173e270f77dd221fd59199fdb2118dcf672b45aaef9cbf7d2247f1b1dfbf3f79f48feda73672fdf9bc6dd01ec97e3ebc7b3cce12ece2bf5d59f15fddc0eb52edc28f80bd42ee6af6070ab5d7ffe8e6ecbf0378fefed94b7095c8e63f14c7358efcfd2f51c7e6e7828fd59999fdbc14f17827d34e66feb831dfcbdf2e12fa5e3d13964af377fc37d6f2fbc2dc0e5705fec9b4f3f570e87f549977f7e56d6bab0cae004fe3603f277746be2efe8b21ae75cbbe76c74c1df6cdc0dbdbae7b1c1177be9ba24877d9f2f3d84f34a399f9fa5d79642ebc2fb745d583298a82579f2b79a47f79a9623f90bf6d309fc0df3bd7d71370393c37cf1d0386cceb15239dc779ff446d4733ba2eac290c14cb336fe8e6e22f90bf44bf1b71adfeb61d76b7cee1cc5ddf6fa9a7984f3394edf7f381cda27edd79f15f7fcacf4ba30795e989f2ea43cf039d631d372187f47b788bf0a870dfc8dc89dc37d6fdf8ccdc8e2305fecc3618ac7dd71f871acd6855d1cced127edfb3c69a53fcbf3f95905ebc282c12d7fd9206a473790c1b56e15ed76cbdf788ddab99b9bb7615c0ee471188bd5fbe8e470cbe2140ebb3269a1e7c70c1ccedf271d53170eedcf32d585bdce0bab0c16fc6d7b3988bdf49d377f6fccfc1523077ffd7c6f563e26e451e579ec71f5c3613d8ff6e570fa79a5b43ee9a1d6855957e5b75ab97a1f16d83bdfc01c7a06f93b4ceec6f3385cdb2975e2f4734bf11cce715ea94c7f96fa39c3617561fc790e3bf17561c860c85face350fe4a4d97e6af97ef4de42cd355be3999cfd97cf1b039dc7d9f745c7f56febab0e39c21d3efe87bbb8b4ee36fb5aa86e06f331e92f84b6754e1ec9d2dee66e1b11f8b7be1b0bb472becdc70d93ee91cfd59f47961575d38f839d22d8343f8ab6b99e958ad0327f2d77a15f2bd7979ebcfe5bc2ccec16173df74c8f9614ab7b99fdf31dcfeacb8cf73a09f234dd593c42edac95f9c4107f0b71aa31f82bf7c56f88b384cf2c1cd5f2fdf3b5beca5599c8dc3963a715e0e634de77d7e47cefe2cfd8ae1707a5d38f039d2a39f82c1b80f1aea787423f8dbe898e0afd0b291bf42cb06fe92fb699abb5eb97351eec68e823c2ec2e196c7311c76d786bbeb932ed39f95b32e1c9847e3e7484306575afd02b47bd1ea963158e816ee9d511f96c6df46b706fe6aba2dc7df7406e6ba4afae230160f9bc3c3ebcf2a5517b6e5d15e7561916409fe6a3a061e98f960177f0d7be94b65f4cddf92bccdc7e5ccbed871a573d8fc390f5d9d579ac5baf0b6b687861cde5538ac9c53c20cd6f6cefefcd57b2793f8ebaefd7af8defe995b8ec95ebed8df1377c8e19ce786f3f467755517cef51c69744e897755821c3a99bf3f0af3379ebd43e06e1c8fff3d1cb69f573265d2a9fd592b19389cff39d296734a6d9625186ce32f553b1add2a39f483ba776ef51ac5dfb4ba6f77cc7d34cc5d3139473e1dcae1d8e74b77715e695875619f3cda5617f638a704184ceb18d68195bdb4a801330ef7c35f4f36e5e16e57bacce08bb37238bc4f8be670cef34a71fd59b1cfcf32d785d5e748c7d7853f00fdd29f2f7c40d5931a05ebd9d50d1c50b715757df8fb03d481d9f59483bfd973e734cec6ce65583c040ee73e37ecd7276dcfa4edcfcfcaf1dc0e3dd78a7f8ef487315d1736e6d19cc17a2d49a9038feea82c4be32fd2b2d4b181bf48cf347fd372e714ee96bed2789c89c3963a711f1c4eeb934e7d7e56177561f373a4ed79b4a52eac33b8b9ee68fed6cfe148e5afd46d4efee6e36e6ede76c9633a9f1e2a87cbf549f75317863e18e75aa6e748b71a863a0e3ca7646270187f9b99d632ccb32e752d77cadfbeb99baad3085f5c8cc37e3d5af1e795faeccf4ac9a3d7910f56f7d0c207632f1c9247efa9793463b01f7fdb3e6831806e1f34feb639f430f89b9fbbbfaaf19b98cbf03894c5c3e77077fd59ddd48543cf296d25e6d17b2d836dfc5533e83acb825aee96bfd1b9f310b91ba3d5e7cae161f467611f6cf6c22a877df2e82dd0d3117f4e695fad2701065fe03a70cde096c36efed2e7906add2a3974d7fcb55f3e9ccd39d2791ccb61c0e39e38dc659ff430eac221e794740ed379f42ee583d50c1a723892bf783fdd0f7f678dbdbe5a8dcca7a3386c3e3f9cc6e1f43ee9e1d485a9cf17a673ac02e7945a0637ba6d2e95bfb00eece0ef03caa135fe8e9eea11c1df98ba6f1c77859fed6ac4f1b82f0ebb7aa52187bbee93763d3f2bac2e4c9f17a6f6d3e6734aeb017561571e6d3ca7a4fa6095bf58c75a1fd683aa65c4dfd607ebf5a4a78cfc9d75df1bcbe2ec1cf6f4c2e11cced9271dde9f155317f6798eb4f99c525c1eade658db328fde467be83d0383257fed7d58d5a075ebe22fd26de7fc1d127763781ccbe2ae385cbe4f7a16eac2b6734a74a665caa3292fbc3d26f268d507a31c5ad731f2c1c6bdb4c65f7d2fdd397ff35cbfc130d5927e29bfae3c8bfbe3f030fab3d2eac225ce0bab7561771e6dab0b5bf368de93a5d481a17615fed20c8ee3af91c1d1fca5afae72e6aef2ea500e7f25eea30f87cdcff148e3707c9fb47d4f5df6bc703fe7941c79f468b9395d883268be97bed374ace4d03e7dd0958ed51cba6bfea6f1d6c5d9d8b934879d75e20173787875e1f43c3aec9c929e475b3e4f8933f80e67d040bb2b5cbd66fefe003ef801321868f74968d7fdfcab0ef8db3763cbf8e2621c56bf6f811ceeb73fabebba30ed8543f3e81dff3c5a66d188bfd45edac8df66a00cfa8781bf48cb684f1dca5f9a3be9ec2dc9ddbc3c9e4d0e97e8cfca5317cef11c6955bba63c7a73eccaa3f5734a641e3d5a463e98f6c0a80eac303888bf4a1db80ffef6cdd4dcbeb8270e7b30b8cffe2c9ff3c2b1cf918ec9a32187a94cebbd671ebd4b675ac207dbeac0e0129996bd0e2cfbb04c7be98cfc4df7be7d70979a6783c326dd96eecfca5f17eefa9c52a13c5a3098f4c01a7f55ed2a75605db3741f5649fe96abf7fe4e18e57c713a87ed7aee96c343a80bdbf6d3360efbe5d1f439a5843cba51f01df4c1a48ea10f56753cabfcf5adebc2397684fc39e1ded89d4f97e5707ffd59c338a7943b8fa69fd761c8a3a10fc6daad2e9843dbf9cb7cf093c6e150feea1c0ed16adedc3985b9e5989c83c331e787d3ce2b95edcfeaf639d2ae3c7abd9a5b2d631ffc966470521e8d184ceca5893ab0aae3079467fdb06559b0a69499bf61ec2dc9db5c5cee8cc306cdda3f6fc997c3fdd6859f1c1c4ef97c61571e6d7f5e478e3c1af960771d186a3784bf2d87690617e2eff0b89b8fc7b6e78074cfe1dcfd59fdd785cbe5d1aa0f161cb6e7d13b441e2d2fc960d08765cea12bc5527b69b50e4c6ab977fefaf8debe469e7a71971c9ed5ba70be734a741e4d69b7681edd5493d0deb919047f15063fb8ebc06efe6abaed83bf7d70370f8b8b71d89e490fb23f2bee39d265cf2985e6d1b41776e4d1d807933a4675606d2f4df66199f82b736890773a199c83bf79b85b569779f2e959e6708e3c3afc39d279cf29d9f268acdd4d42bb3e7974bb87de933e7895d0ed0a1f9407c6fcad3db0ea83511fd640f91bcbca5f9e73372cee9ac3ca79a541d68567258fde1ac33cdac460358fdec57974eb83317f714f2559075673e827cf1c3a84bff8fc51d7fced6faf9c964f9bf9fb55d5a983c3317dd265eac2662f9c7a4ea9af3c7a8bc8a35b1f4cf755127974a360671d18eab7d1ed83e4b095bf80c3b3c95f5fde96e0f2a039dc635df84f1e8df6d2b29a7447f2575cb48e8d756055cbbdf0372e771e4e76d50b870d3eb8447f5689ba70ff79f47ac63cdaf5ac1d82c1d510fc5d51194cf097a803d7ba6d2e2b7f916e7d9fff9c83bf7d703785c7dd70b8bd140edb33692f0ec7d685fb38a754328f6e19ecee8f6e2f8f3c9afbe0557b0ecdeac0961cfa49db4f7bf66175ccdf61b0d75fa7b3cae1b275e1f0734a7de5d1cd25f3e84d431efdde504ba2fbb2f0d9863d85c13887d6ebc02a7f35dd62fe56e3aa1ecf90bf6faaf90d3197e1711c87dd9a861c56bf1f25fbb3e2ce0beb7974f8e70be3abaf3c7a8bc8a3df3bf3e81d2a8fe63e38b40eace7d05a9ea5665a017d583a2fcaf1b74ff6fae934ad5f2b2f87d3eac265cf0b0ff5b959a63c7a2b471ecd9e74a7e5d09a076ec60fe0838d7560c4dfe920f89bce5d136fcd43fff5b3c7e17c7dd25dd68567398f763daf43c9a3476b80c1ab0939f493964323fe367a0ee983ee86bf7df3369f2f4ee170c9feacf8ba70a9734af1cfcdea278fde26b4abf665ed021fbc8a72e875af3a30e4707b19f91b5c07ee8fbf6ece868e1c3ccec1e1e1d685cb9c53ea2b8fa67cb09e476f8d716f969e47ef1079f46e9b476b3e7855cba129fe0a3dfbe6d079faa0ff0dfc2dc1614aafe11cce53178e3d2fec3ea7348b79b4f0c1308fc6b524da07ef100c86fcd57268b20e1c91430f82bf5d72d7cee37f1387cbd58567318fde0ccca3d9e719127d59a3b71a83dbabd6f18685c106fe6a39f415e5837be16fdf5ccdc7e2f0fa7004877bad0b779f47e7eb8f6e7db05f1ead7f9e619b47abfb672d8fe60c5e953ed82787ce5907f6c9a04bf3d72f5f2ec361bb2f1e10877bab0bcf721eddea185fee3cdabb2fcbe083c59e9ad671621df819f0f78d65cc2287fbae0bfb9c53ca9f4777d31f8d2fbd2f8b69d7de976539db20196ccca18d75609c436fba72e8a03ab07e95e56fdfc3e68be3394ced5ffc189c5a17f63d2f3c0b79f44a24874d3e789d7b60d5076f3afbb2a48e476b6d1e8d188c7368531d58e8f949f3c1441dd89967b9faa087c15f1b735d63381c8ee8cf4aaa0be73ea7d46f1e8d7df04b52b7561face4d16a5f96ae5d7b1e0d196ccca19bb1217368da07137560a36ed3f8eb7efeb33f7fbbf7bdcf80c3cf328f2effbc0e735f96398fd66bc2641e3d5a430cc639f4baa663671dd89d4307f1d7cee0d2fcd579fa2b70cecde3b21ceebb2efc5cf368bc7fde1c533561f8bc2ccc61675f16f2c142b758bb26fe8af1a4f9e05275e0e7cbdfee38eccfe0540effc9a3615f16ceb4de4afeea7d59ef893cdad2972519bcea9d43b73e58d771de3ab0fd2ac5df34eefaf1b82487c37bb472d685d3cf29e5caa387f4bc0e535f16a55d675fd6684df465d5671b341f4cef9d4d39b481bf2a87fff03798c3749d388ec343aa0bcf721e9daf2f4beca7c3f368b5a68419dc5efa5e7a63e49143a34c4bcba133d6814bf0373f77dd3ccec1e19c7dd2a5eac2cf338f8ee8cb6a384cf960d339e16db17f1ebda3fbb2481f6ccaa1b76272e8c83ab07f1fd673e2afce633f0ebbbdf0bf398f8e797eb47a46298ec3261f8cfbb2b688fdb4c9076bbd1d061fec9f436b5a463eb8441d98fafca314fe96f1bdb3c4e1f0baf090f3e81c9f6768f7c1348763fab2b694fdb3ee83893cbaede7403e386b0e0df5abe5d0b9fbb0fae0afed1a2687a97d4d790ecf521ebd5c3c8f36f565ad3b7db0e470bb97163ae69fbaa2e6d0745f251b5b061dc3eb4af5c105fbb0668fbf348f5333e9e1d48573f64777fffce8df5e1c76e4d1a3f75e7d59eb63ba2f6b53d3aebe7fc63ed8b477de90fcd57d700c7fc373e861f037e54ae730fd75e5e4f0f3cca3c3ce0917c8a32b1d0bfe5673b5a27cf0165957aac6e883d0f0e89db92f4b61f03072e87f137f6788c383cda3533ecfb0e4732b258315ed6e920c86fcc50c967934753ec9e2836d39743db61087373baf0397e66fee2bde07fb73d89d49d33ed8cce190734a25f2e8b0e747e7fd3cc3b27d596e1f6ccaa35d3ed8c65fdd076f41fe8ed17924870f0ead03bbfba043f91bc3cb30ddf5cd617b261d5817a6f7ce3de6d1f19f67989e4787f960bda732248f6e7d3091474b06eb7be775e483b71c3ef8caa8dbf83a70b8071e2a7f53599c8fc3cf338ff6efcb72e7d1e9e784fd7cb0df39619dc1c007d73a960cc63934de4bb71cee3387ee8fbfa9a32487699da6d685879d47cf5c5f16d6ee689beecb1a7da07d709b63517d591a83d7bd72e8ad666c020eef44e7d0fa95a30f2b4e7f5d5db9389c338fb679e1d279f4733e276cf0c1a38fb40fae742c18bce5d23162f0aa570ebd65f7c1388796233d87ced587d53d7f63789cc6e161e6d129cf8feefb9cb0e9d9d1160e5b7d70d6be2c830fdee03eb8cda14dbad572684db7fdd48187cbdf1416fbf8e0300efb31b88b3cfa19f665d53e987b61970f36e5d13a83770c0c6e9f0fadefa5dbba928dbff5b59b94439baf6ef95b7af87138571e6de7705a1eddfff3a367a22f8bf0c15b3a87b90fe6daa5fa39027cb02b87de4239b4d90797c8a19f0b7f4b7278f87974dce7193ea3be2ce483b7aa15e983ed7d5980c12ba40fc639b4aee52d8dc3dde7d021fcf5e17057a35b0efb7be12ef2e87f415f56cd5fa05d4b5f56ab5dec835bed527d598a0f5e27b51b99433763d7d307eb57780e4df561cd0a7fe3384c7fddfe1cfe1dc1e1c83cdaa3269c96470fba2f4bf7c18a8e9d3e78b4a7d784ad3e98ae29f9e5d09b940f263d70d8732973d481f3f137a71e7372d8ee83c37ab372e5d1cffd9c70900f36ec9fb10f167b6894479b7c307b5e16c16091439b7cb09e43eb0c2e95439bfefec6d681877285efbf0791477bfbe02ef2e8eefab2cc0c0ef4c18d96091fdc7a61c20783be2cc5076f187d709b4353fb69d5070f2d87cec3df52ba1c425db8ef3cbacc39e15efbb25c3eb8edcbc23eb8edcb32f960c6e15abbcc0b1b18eccaa1437d703739f46cf2378ec343cea39f535f56d2f3b25c3ed8d19765f1c1ad8e810fa6750c7db03d87ded17cf0ee48ff373c2c87eea60e5c5ae75d71b8a33c3afb39e1e1f665f93d2f2bc207cbfdb3a70f6ef6d0dbad76db3c1a31f881f0c15b8476879a43cf2e7fbbe7b0baeff163b05f1e3dfb7d59f61ecbe03cdaea83b7fc7d30d597057cb099c1a67eac96c3be3974a80f4ecda1fbe76f1e0ef79547fbd6844bf565f5f9f90d361feccca3c1fed9d19745fae02dd507ab79b4d507fbf4636da11c7a4763f0aef2ef75573974770cde57e66e193c8b79f4acf465653c9f2474ccb4ecf0c1645f16f6c14cc77c2fbde3e983db73c13e3e58d772a91c3a471db8eb7d76ff1c0ef5c1e979f490fab23afe1c439e477bf860a65ddd07330e47fbe075c2073f871c3a1f774d73571cee3a8f9ed5beac5e3fc7d09447eb3e58d331df4b2b3a8ef3c1743f16eeed70fbe0b47ee8eeeac025afa1e6d1b3dc97e5f6c1e6beac429f6308f6cf1e3e18ed9f3755ed06f9609f7eac701f5ca61fabdb1cda97bfe93cee278feec307e7caa35d3e98eacbeae47c12e1830fc2ce27d53e58d531e983378c3e18f763997cf06e011f6c7f2e47a91cba8b6be83e7856fab2723e2fabe8f924b17756f6cf313e58fbdc15c5070bdda6fae0eecf050f91bf65399c9e473fdfe765cdc0f9a4001fbce7e183d79d3ed8de133dc47eacf01cbaabab641e3df4beac7fc9f924da0783fdb3d90773fdfaf9e0d19ad507d3fd58361fbc3bf2f3c1faf568d46abf39742a7fe338dcbd0f7e1e7d597d9f4f8af0c16c3f5dfd48f665197cf08ec307d3fd58ea5e5aedc7a2b5ecf2c1e6cbdc8f552a87eef29a9d3cfadfe183339e4f82fc75fb607dffccf268a28e247d30e4b0d5076f691cc63eb8bf7eac6e72e85cfc0de7b07f1e9de283cd79b48dc1cfe17c52bc0ffeadf860ace5081fccbc30a9e3781f0c194cf9e02d8dc33e3eb8cb7eac61f3d7a6d1a1e4d171cfcbca793ee919f9609ac172ff1cec8347ef9c3e98caa1751fbc63dc3b0b0ecf6e0edd1f7f4338ec9347f7d397d5eff9a4923ed83f8ff6f7c15b313e98e95832b8bc0f1e4e3fd610181ccae199e8cb4af0c13ee793c29fd3e13a9fd4ab0f1e6d0bfefaf9e04ab16e1fbc6ef1c1e67eac56bb43eec70abffae570ae3c3ac607db185cfa7c520e1f9c723e29d3733a2ab5ae600647f9e03db30f663af6f0c1a63c4bf5c1433a97347c1f6cd2688e3c3aaf0ff665709a0f8e3b9f34d8e774b4da85fcad561fe37d303c9f14e583057ffff8e06e383cdb3ed8f77cd2b37e4e87cd07b73ae61e58f3c182bf86bdb4af0f5e97e792d27c70d7fd5821fc1d128373e4d1bdf9e09ac3057df08c3ca703ec9fdd3e98dc3f8b1ad21f1f1ca9d1fef9ebcbe07fa70f9e89e774601f3c3aa887db07574476f860a8e3d161940fdef2f6c198c3213e38e55cd26ce4d0268d0ed107e77f4ec72cf9e0a8cf110ef7c1eab9062a8b76f8e08d3f3e185cfd7338970fb673f88f0f2ef839c2d00773061fe83a863e18ea38c907af231fbc31533e783672689b4667da07677f4ec7507cb0775f965e47f2f1c170ff0c7d70b5f2f5c1b56e7d7d301b43f0c125ce25f5cf5f5f06fbf8603b8387e783752dff7b7cf096c907d33a1eb00fa6fcdb1f1fdca50fc61cceed83733dafb25b1fecd197c5758b7c30f4c2361f4c9c69d0191ce283690677ef834d7f4f67eb5cd21f1feceb83cd0ceece07677a4e478c0f067b69c05f82c17f7cf03019fcc707977a5e650f3e98ed9d8d0c4ef0c14606af230ec7fbe01dc9e13f3eb86f1f3c6bf5e0217c6e4386e774d87d30d432d0b1d307b3cbdb07af7bf9e0dd91adb7e34f3d384ca343f1c17f3eb721a70f3ea074db6857f297f6c1dafe79bbdd3f7bf9e075a4dbad3ff5e019f4c17606fff1c1057c30d6b1dc4b031f4c30784bd531f2c17b057df0cec07c709b6f0d9dc3213e7826ce077bf7453f4b1f0c744bfa60acdb3f3e18cc2518dc2f7f7d19fc1c7df010faa20bfae04aa907ad96f95e9af4c192c1a40f1e1d66f3c14f03f3c1b3914797caa14bf860fff3c1cfbb2fba331f0cf9ab68b79c0f66e38f0fee9abfcfcf070fa12ffadfe48399a6cd3eb8d5f39fcf6b706974869e174debd6703d8ff3c1457db0a25dab0f1ead0906573be93f3eb80b0e9763f0737b5ef433f0c18d7e0fe27c7045da8f82bfd0076b7b695f1f1cde179dcb07db395cc20777cde17e7cb03f83bb7e5ef4b3f3c12d7f81763d7cb0d46e791fac33b83f1f3c5c0e9765b02b87b63358bdff7e0c9e85e7453f5b1f0c7ab2541f0c396cf7c142cb257db0d85397f1c17de7d171fc2ddb8f15e883bd73e83f3e98f0c1fcda86bad57d30e3ef1f1f9c41a343e56faa0f0ecda187e283cb3e2f3aab0f6ef9ebf2c18d86091fccf81bec832187b788fdf4d07d705c1edd05874bf23725870ef4c1dee7927c7db0ae5bdd07877f6e52673e78f4b7ca60ec8399660bfae055a0db101fac7218ea76a7195df8e09279742c87cb33d8c7070fa91f6b967c70e473b246472887d67c70cbdf667c840cc63e1865d1dc07b7976470191fac6b79973338de0777974797e6b07b5fdc7f3f561f3e38e6f38307eb834747cafe39c00737da257c30d0aec907df133e1872780b71b85f1f4ce5d165bd70088fbb61705a0edd613f560f9f1fdce373b266d207b3fdf4aed107c7e5d165fbb2fae07069fea6f8609abff97d7089734933e783c1fe799364b0d5078bfd336230dc3faf4b2f9cee834d1cd6afa1e7d1dd5cdde5d0ddfb60ea9c7f5f9f1fdc890fd6f6d2561fccf8db8c3d970f66fceddc07777d3e69381cf6d363e91c3aa61fabc4b9a47c3e58e5af39bf2afab9490d7f8f2c3ef8586ad6e183a576151fac6458b13e58e730c5e01dc4dfeef268ffbeaca17238c4cba7fb60f5bebbf89be0833d189cdb073f26f860bd1fcbcb07d71ab6fae063c9df7a3ed6181ce58347871e3ed8b49f861c567d70abe5781f2cf6d434874318ece25c49ada7f3b77c0e6df6c101e7927a7c3e87d907b77b669ac158b7619f1f6cf0c10d7f8f141ffc9eda3b37d78711e983017f91761bfe36fbe79abf813ef841f3c1b39b470f91c3ddf1b7743f567f3e98cea1751ffc54e6f383fd7d30ceb31af6123eb8e56f940f869fc342d595c29e57c946880f165e38258f4eab0ba7e8dd3f8ffaf7e4d0a59f5319ee835bfeceba0f56b5ebe783bbedcbca99470f8dc161fc7de3e46f891cba8b7349713ed8d58fa56a59e5afcb07ffd686c1074b1d1f687b69e883b5bd34f6c1388be6fc3d2119acfa60315c3eb8bbbeacfef3e810ed87ebb02bfe8631b8eb7eacf2cfa92ce183b16e4d3e18f1d7ea834f95fdb3e02fd6aeaf0fde5018ecdf97a5e7d1613eb89bfee821713895bfe13ef8f76888fd58f4b9a41c9fd740f9607b4f962d87267cb0d4b1c9071f4b061f903a8ef6c192c11bc63c9af2c1e6be2cd50797cda3fbe470caf0e36f0a8373e4d0ddf56375f5790d797d705b3fb2e7d070ef8c6a48a31748b7c80703ed7ed0b4bb6660303e9f341b7d59541e3d4b1c8ed3ffece5d0fd9e4bcaeb835732fbe053a0e33d6d2fadfbe0390f1f5caa2fabef3c3a477d78f6f89b3587eead1f2bc7f33928069bf9ebe7838372e8ce7db0dff92495c325fbb29e13874bf1377f0e9dee83bbecc7eaf6f91c840f96fc3d22f8abf56379fa602a8b9e237db05e1336f9e0aefab272e4d1c3e07009feba73e8300f1c9643873e277a96ce2579f960670e7dece5834f11834f900fd6f7cf6b4cbb413e186bf72fc061dd07cf5a1edd078b87c1dfa41c7a70fd583d3da7322287c63a3e45fc853ab6fbe035e48357b2f465d179b49f0f2e9f47f7c361df3fa70c7f879343e7eec72aff7c0eab0f46fc3d42fc35f9e063a4dd533ef41cdaed8361163daf307855fa60c1e1aefab2540e877be159e070dabf036efece720e3d84734991cfa90cc8a10f481def1139f40782bf388b863e78b5b3beac127974690e87fe7b10fafb96e36f7f397457fd58f1e792929fcf91c507533974eb8369edda7c706c5f56fe3cdaac55bf3c3a8dc3b9599cbe0fa7bebe50fef69343e7ecc7ca712e29f3f339bc72e8d6071f6b3ac63e78cfe083691d631fbc11e483bbcda3dd1c0ee3573c874bcc31fcd5f51ac65f9366a3ce05133e383e871ee2b9a4701f7c2c87cb07ab39b4d02eeec79ae3634d6130e583fdfab2ec79f4ae218fa6384cfbe01c75e1740ea7b238f5cf0ee1ef9f1cba443f96d50723fe523ef81831b8d6ef82970f3e410c3ed174ece383750e6f39f2e84d4b1ead72387f1e3dab1ccec3df9c75e0b239749e7eac5ecf25555ac5dafd1bf1f708f1f718ed9d8f0d3934e583f51c5af5c1f30483b10fa66bc2d807b7671a62f3683387e3188c7995bf3fa32473cbf137e63c52a91cbacb7eacd47349461face938d4079f22069f123a16fc5d24183ca7f8e0a56abc74e4d1713e385f1efdfc385c8ebfd9ebc01972e87efbb1329d4be2ba5d46fc3d52188cf7cfc71a83edfd5850bbfafe798d6b17fbe0575e3e187318fae05279741c87756e953faf907be4e5afbd0eec62701739747ffd5849cfe7c00ce6fa0df5c1d4b9249b0f161e58f7c1e17d5925f2e8b0ba704a7f16cde26eb81bcf5f5aafb9f86bcca10d9a1dc6b9e0befab1fc7cb04f0e7d8a74abfa6098431f0206533e38ac2f2b3c8fae191c9647dbebc2cf91c3a1fc7533382b7f3b3a173ce47e2cc207f3eb80d4713d16007fb10f6e736855c7d807eb393464f092a32f2b358f2e5917cecfe1523c4e65af1f7ffbad03a7e5d0833f97149043c3bdb3ae5bf7b924dd071f2a3eb865f012b97f4e3d271cf2bc8ef275e1d9e0707efec6d681879643e7793e56a67349640e0d7df0b155cb740eadfa60c6de4542c77372cc231f3c9c3c3ab53f2b9ec3348bfbf6bdddf077983974dcf3b1523f2f89f4c1c939f4a9a25d930f6ef9abfae039830faeb53ba43cba24877f0d96c343e6ef6ce6d0ba0f76d5823dfab1341d0bfe1e44e4d082c1940f7ee7f4c1874a16edd39795378f8eaf0bdb9fdb91ce613b8fc3468ef79187bf9466fbe26f37e78253fab1900f06ba5d46d9556c3fd60ba4db5325876e393c37d2fb38247f0d3e38671e4d7398cea3ed1c76f32686c343e1b1f97da6f0d7de87e562b03f7fd3faa167be1f2b2187567d30cea15b1facea988d43c207a7e4d130db4acfa373f467e5e170289373ff995df0f779e7d089fd58b55ebd7cb09e5ff9fa60533f96c907530c7e45ee9ffdcf09db9ed791a32e5c82c3fde6d3ed3ea0047f8758078ecfa107d48f45eea5cd39f4026770eb83b18e4f810f86b5609843431da31c5a6170ce3c9ae6f0eeb3e070b7c38fbfe119741a7fbb792ec780fab19c3ef858d3ee31d06ead5bacdd17c67eac9311ac21cd29da557df0b264f030f2e8921c36f3b87b0edb72e77ef91b5a071e4e0e5dba1f8beda77feb5934f0c1ba8eb10fc63a3e950ca6fbb10487df917916f4c1af01854be6d1f9ebc2cf97c3e66c2a9cbf26cdfe3b73e8e07e2c2b7fffe69ac53e78810fda079b7368b17fd673e839c9dfb9d6034fc60a83b1765f5af268314c7974390efb31289cc3bf46a5f3691fdf5b86bf43a8030f21874eeac752f89bc7079b72e813430eede78373e4d1a6cf330caf0b87f767c53d236f486398fcfd37e6d0bf272395c180bf713934bb5afeaadaa57368e883e7351fbc4afa60fd791d29cf8feeae3f2b8dc3348f63b99c83bb61fcfd95c0df3c75e061e4d0599f8f55e9d8ce5fda072f0006db7368ace345b0975e34f077aeda419b7cb0ae655b1e9df39cd2bf9dc3e6f7fc7cf83b841cdab31fabe62f66f06484349b9243d33e18e6d027247fed3e38368ff63da794ab3fab2b0ed379b5ffecfffb0f98bf45eac0fde7d0defd58357f751f1cc55f730eedd78fd53258fae0c9b856f06452a9b54c1e1d5f170eeb93b6717836f2e9eef95bba0e5c3e87ceff390d4f66fe1a7cf0b151bb90bf3e3e18ee9d6bdd62edaeb5fb67c9df96c1ab80c1fefdd1e63cda5e1716c3755eb82b0e87f338cf9caeed30feda191ccadff41c3ad77339ca9f0b567cb0b297163a5eb0e4d0a7d56c6230e5835bfe9a7cf0a185c125f268dfba704a7f96b8c238dc378bed9a8ce72fa5d7aef87befcddfdc39749673c1357bad3934bf26538dc12d7f691fccae171a7f751fac32b8cda14d3ed89c61d9eac2ae734a79ebc2f11c0ed5e910f81bf2b5a5f157af037b79e0e275e06e7268473f16e0ef6fc6dfcc3e98cea117790e7d2235cc755ca956e6d090c10d87fdfba35b0e9b73adfcfd592539dc258bc3b9db197fed7d58339643279c0b76e5d00d7f510e3d3943bad57df0e948cdafcc3524cc5f533f16f4c1afb3e6d1e6baf02c7138378fcb78dffcfc2d5d07cef13985257268c207d7fce53a36e7d0ba0f5e5018acfae0f6aa75bca86459743fd69cee83998611836d79b4d84f9bf2689c6bc5d785fbe670291efbfdb936fefa5ff9f85bba0edc5f3fb4a51f8bf317f8e09abf80c1a572e893919a43cf21ed6a3974b5d27db04f1e5da22e9c725e298cc339f49983b3e9ec9d4dfece480ecd351c98436b7be905237f5dfd586a0e0d74cc7cb081c1af2d7974eebab089c3d7d9384c3d4f2b9cc7a1ba0fd76157fccddb87955607be1f53fc1d400e4df397f0c1b61cfa5463709b43b7bad5f7cf73440e3d27f9ab3078329e7c423e382e8f0ead0bb719967f7f56090e77995de5d7bcfbfc910f7ffba803c73f1fbab31c1af2b7f5c1848ecf90ffd573e853a4659dc127840f6619b42d8736fae0e83c3af4bcb02f874dfd59611c162ccec3e1bcc3f5bec22e93563df8db711f56481db8ab1cfa096a96e9d6ccdf46bb861c7a728ef88b73e853c45f573f569b43133e78f2a9fab165b03d8f0e3ba7e4ae0bdb3ecfa16b0ef7c5e278dde7e06fcbe0fef93ba81cdacedf56cbb586a58e6372e845c9df53430ebda866599cbf73721f4d3138fc9c922bd7f2ad0bf7cde1ae78ecf33ec2bc6f1ffcedaa0edc510eadf0b79a45ef86a25b92bf88c18a0fae880c75fbc2e8814f400fc789218746da853eb8d2ee12c8b0846e53eac2f473a453fba4fdeac35f9334364cee0e97bf25ce23f5944357dad57cb08dbfd8075b73687d2fbd48ead8c7071f120c7e6de1705c5d38579f745e0e0b16fbf23895cba17f4e1ef606e4cf3df1d7b70e9cebb91cd61cbad62de62f9d434bdd4e7df9ebcca11747e61cbabde6f5fc4af5c15cb725eac2e1fd5943e0702e26e7db7b535f5f76fece541d38730e4df197eda52717ee1c5ae76fb57b36efa54d39f48981bf73740e5defa3551fec754ea9445dd8f7bc9289c3712c8ee564ee399cbdc5f91bdc87d54d1d38730ecdf9ebc8a12b259f15c9a1a56e279f257f49edd23934f2c190c3741eed5b17f67d8e74371c8ecfa78733668dbf7d9f47ca9443d7ecf5c9a1b5bd34e4ef82c65f4b0e5de958f017e5d093cb56c7956ac13edacb07e7ae0b0f89c37df2388ebb7df377b875e0e01cdac05fb177d6753bb5fbe09abfb6bdf3e40bd22dd4ae398746fd586a0e8d7d30e8ab4cab0b87f76775c1e1be7b3762861f773be76fe775e0ce7268a516ec91430b0d231d0b069339f4e40ae878b15a997368ad165ca9f652f2f75a63b08bc3b6ba70371cf6c9a5e339dc058fd3b86bd3693a7fd3fba04bd78133e6d080bf4f76fefae5d042b7ad0faef9db32b8d66da35d670e5deda4c91cbad56eeb832583a176d53cdaac5b5b1e4df76785f649b3918fc35f47fd7335afefed84bf117d58b1e781cbd5819d39b4ca5f2a8736d7819996818e491f2c75bc48f017e7d0d8078fe97e2cc9e09bc944e5b0f39c925a170eefcfda1c99faa47370389dc590c929dccd770d8dbffdd781fdce232939b4c2df27a8598ac190bf2cbfc27be746afc766feea3934d62ecfa1175506c3fc0ae996ef9fab710d18fc5ac9a373d68543387c15c5615aaf268e0d91c7bf3dde6f0c7b53f81bda075da20e5c3c8726f22c9e4343fe021d97cda11735fe5eb60c463934f2c1d5ff6eb00f26ce2985d78563fbb362389ca75f6b98974d9f01cfdfe899bf25ebc0decf879edc5af97ba13258e5ef640af91b9343d7fc6d195ceb16d490bc7268a6dda61e7c4df8e0d8ba705c7f962f877d7269bb5e6d7c1b62de6cf7bd2e5d97e46f993eacdce791bc726883962f38838dfcf5cba1f5bdb42987063a5e54b3ac96c17a0e2d19fccf84ff2f4b5d98eecfc29fabe4c3e1ab6c1c9e5516bbf4d9157f43fba0075a0726f8fb64e7afa25d8dbf5a7ee599432b199621876e7d3095439b7db0575d38ac3fcbbf4f3a0787c3f3e9aeebc63eef235ed743e26f5a1f56d11cdac65f98436b3a86fc5d20752cf87b67cfa1351d73fe4eeef51cbad1f0a5f0c180c15f65164de4d10975611f0e3f4573f83a92c3b3c2627feee6e26fcc39a4f43eac0eebc00d7f490fdc6a163298e916fae06a75969fbf6d0edd6897c8a19976e91cbabe4492a56997aa0b9bcf0bcf0e8743782ce62e789bcbf7b6eced8ebfe97d58f17560fd3c92ed5c03cd5f4dcb98bf2a839dfcbd6bf9cbb4ece22fcea1751d1b7cf057c960e183ed7561f379e1b4feac1c1cf6ef9b1e328fc37cef57933e6798bff175608b6e0dfc7d52f82b7db089bfaa0f86fc057b674db77e39b4a2db4bd48fd5eaf65af2d7c4e0b0bab0de9ff5a0f197eecf8ae3f0552087fd741acac95273bcb6217fa1ae87cbdfdeeac08d962f8cfc953974ad613d87e67be90552c7640e2d757c0574ec91430b1d93fc057b69c960c961b2b614df9f958fc3741eede2f0d079ecabcdc0beab5ef81bd287d5511db8d1eb378ac1936f76fe0aed368ad5726855b79373c8df6a75a56857f2976957af03d3dad53cf035cca1abebbbece8d06a49091c0ee9934ee1706e160f83b771ec2dcbdfd03ee8903ab02f7ff53a70700e4df0f749e56fa3e8332a8756f8bb50eb9862b07f0eadf397e5d052c397388756f88b7d30e430a5e5d0feacbe381c934f77c9e390f711993b77c2df943ee8dc756003833df88b72689dbf740eadeb16f357cfa169fe26e6d004830d3d1db9fab386c0e1307dce0277bfcabbd03d7fbbebc3ca50076eb4fccd43cb67540edd5e0efe1a7368c66052c78b8cbdcd5074dcb0f752f860c0e0af7cb024eb81f337ac2eacf767d9386cd673290ea7f9e21c6c8ef9334cefd73377f6d06a6cff55287fef35ad86f237a10e2cf5aae5d08d66bfd9f96bae0333dd42ed36d79dcae0368716b995298716fc65da6d7368a95b55bb2087060cfe81183c8b1c0e6771e9fd72177a7f7efc8da9033b7368c4df0b237f510e4df1d79e437bf297cca109feda73e8af5cc73f11832d75e1680edbce2ba570986231cd61b32f4ee171ce617f7fdebed7a255bfe75fd9f51a7a0e29ae0f2bbd0efc53e3efad95bf1793471383711d98e0ef5d4a0e3df94cf317e65748b7d772efcc3db0c2600387893c5aefcfa29f9fe5e2f066108729cd420e8b7d73577be47e988bd93b1bfc4debc38aac03d71ad6f6d317462d43fe5e002d9f99ebc0aa96257fef741d73f666cea1910f8ee3f00ab9a7f6e993ee92c33ebeb86b1ebbde4700777be56f777d585e7560a4d76f247fbf69fcd5188cf9db5ce77e39b43f7f9b1af0bd6030d2ed25cea1d51e8e667c57182ceb4846ddbaebc2aee7589a39fc34cacbe134169762721eed9bb9abf0d7c1defcfc4def838eefc35272e84abb7a9ee5e0afc8a14dfc35e7d0f1fc55736895bf725cd33974ad61cee01f88c17efd59a17dd2e6f34a760eb7cfd33271d8944f9b872f07bbe26dcbdd40dfeb57f79d31fe46f661d5bad5f87b4bf2f7c2cc5fa1dd96bfbe3974a555ac5d258786ba4dc8a1bfb61e58f1c13a87d3fab3581da91b0ec37cbae5701e160f6378fbde81f237ae0f3aa20f4be32faa031bb43c6ad87b3131eda585075e5075ccf80b7368ac6376c11c1aeb18d6812183511df892ccb2be4f7e02064f342f7c93d09f5596c3bb0a87ed7562f708e564ee398abb1e3a1d167fd3fab08c7560aed796bf5a1d1869f69bc25f2a87c697398726f84b6857f257d3ae218736f097cca1abf1c419fca072d85a170ee5b07e5ec9ce61f7b9255b8e4571aa7f86a6b1d7c3f77ab2b76ffefaf74147f461711dffd4f8dbf8600b7f1f55feea5ab6f15768b952e99db697063e18eb18f1f7dea46390437f053afe2a348c7c30e4b0a53fcbbb4f1ad7861f3c39ac3e472b8cc3aaae43d93670ee7aea14f43d77cadff43ee8803e2c85bf441d3898bf8f76fe6ada4de12fbd77be94fcc57be76bc95f9043571764f03ff6bab0777f962f87f5fd73590ecf0e8f83b81bee7d3be16fe77d5801fcfd26b92be6472a8756ae5abf7752cb776a0e1dca5fc0e0981c5ae8f83b60f08f84ba7008871f1239fce4c561a8ed48d6012ec7fa65a7ee0af95efbb9a321f0d7ff7958641f16d0abc2df4a9fdf48fe7ed3f8fb68e7afd4ad81bfcd7ca532985fc61c5a6a97f3173358e4d09542d5fcea1aee9d1bfed6d7af46c158bb2e0e631fdc0587379d1c36d5896d1c1b1e8fed79737cee3c7bfcf5efc37a2cc0df47077fb3e7d0b89f03f1d79a43130c9e050e3f05715868fb7a9487c73d0c7fdfeb913bdbf4faad07fe46f46125f0f7c2c2df473b7fc5de19f317eb165fba0fb6f157c9afae891cfabbea81a50f6eb5fbdbd89f657b8ee570386ccab186c9637ce5f7bd80bf90bb03e56f641f16a9e56f5ccbdf082d63feaa39b4cedfe510feea5a76e5d0955aefd52c4bf2f72b91437fc77b69cee0df9e1c5ed532e9b473c3760e3f3839bc0938acf2581bf5dfe759e2b0a73ec3f86bf6bdf9f99bb10f6bb2c2f9bb6260f02d536d33530cc6fc8539f423a9db55237f237368c65f9843ab1e383c87aec61bc4e01f7a5dd8bb3f4b3fe3a0ee9fc338fc94c46135c70ae7716e2efbf3368fef35d47dbd9f3fd91f7f3dfab02a1dfbf3f7c2c9df47a39635feea5ad67368377f0583197f858e017f710eadf2f71a66598d82d72ae5b61cd6fbb32c7dd286f34a83e530e2f100389b81bb7e75dff2fc2dd607ede4efb764fe3e6afcc50c5eb6f397cea1996e6d39b4ce5f25bffa6acfa1abb1aef86031e2394ce758eb5939bce9cd61578e15cac3902bf6f74ff7bdc3e26f481fb4471f56c35f639e05ae5b8dbfdf107bd978e43934cddf65aa0eac8c2b5453ba5219dc68f85edb4b1339b4c2605dc73087fe2ef6d19cc1bf3987752da3fe2c9ac3c4556b79238ac31bd11c56f3e95d1f0e8b3170e6a6e5ce6efe9a9f7fd50f7f1f207fe5d035fb13e9f51b60f0a3a6db91d4eca383bfcb1a7f2183bdeac06efe2a7be74b836ef51c5a6a17f8e0dfa476739d578ae5f08391c34f9cc3148bcd3525c8636aa472b37fee5aeabecf82bfb59e1f9d7be978fe3e3af8abeea533f0372a876eaf75e083d71a1dd35a56396cef937673d85c1f7eb07058d5b4ca6171a9beb8d6eeb5d50f3fe95a181073e37daf4bab03e52fdf2763fe22dd4e5602f97b61e1efa3c6dfd510feeada6df94be7d08cbfcda0f84be557d77c7c470c7e8318ac6bd7a33f2b98c3a1b974090e3f7968ad07de266adccd5d377b87c6df07c15d85bf8fc6bd34bc307f552dbf75f277d9c1df0da9e57aded0747c2ff8db8c7b95c1c61cfa2b1f8e3a30c1609147d35a9e3d0e435f7c15ea8b0730ae8939ddf70e89bf048315fe3e06f1f716e955d56d7b41dd2e2bbad5f9bbace836137f95bdf3b5d4ad9e43b7da6daf374cbf92c16b969e0efff34a7d72382c9f56f6cf517be208be66e6aebfef7d2efc5d81fc55b41cc25fc6607d2f4df1f78ed4b19dbf9b88bf9b5efcbd34f0f71ad581510e2d19fc8e3318d7851d1c769e1b8ee3b0fa794b260e3f3839acf21872f85a999dbeb87fee66e5af99bbf9f9eb3c075ce952ce48ab247fe508e5ef5b82bf8f89fcc5dadd42bad5f6cec0ffa6e5d0eb82bfd58f90c1360ea3ff59cf2bf93dcf92e6f08395c3ba66218785564dbe7810395606e612ec4dca9d317bcbf237e81c12d7701c7f2fbcf8fbd6c8df65077f37640ebda1eda5217f891cbae56f33630d8b7df4574dc3640e4d30f8b717872703e230c5e2272f1eab1cbe76e9ba03dec673d72f7776f3d7acd77ef8bb22b58af9abf661e5e0efb2c6df65c4df0d9443ebfcdd44fc457be7c97b2ffe5e1af87bad69f70d6230ac25e9dad5eac28d76f5deca100e9bfd702e0eab2cb66658a17aed80b1e9be7706f90bf4ece02fa1e5fafaa0f1f79bc6df478dbf8f0efe2e1bf8ab67599b80c1540efddec05f9c436f133ac6fcddd118bc66e1f06442f54ab71cd6b49c99c30f92c33fb270585c530f1e5f731e5f27eacec6db34eee6ca9d3be4afc2dd78fe7ee0fcfd606470cbdf4785bfcb40b771fcddd0746be72f5d07be34f0f7dac05f9443231f6cefe9f0e8cfea94c3744d6993ebd6c463679db8a3fd7366ee46e5ce83e42fd0b2c25f879673f277d9c15f530eedc75f31de6b3a76e7d01fb52c6b9d9f6cc00c7e08eb931e1087fdf3697e557ffb258f9b9f4f3d389c69f6d803a7b277a0fc258681bfe468f52a669abf6fbdf8db72d8c45f31ecfcdd42fc55190cf9fb5ee32fd3ed36c1df7adea5f22bc6df6aecf18e8e359447cf0e87295fac7318f27856383cd54716df6baefbf6c05f623fadf3d7b597163ade776a59af03bbf9bbecc55f3a87a6747c4feab8e52fcea1bf4f6c39f44ead61c460bd2e9cc461e5dc700e0e3f7871d8e48bad57cd6038682e47f0d84f7bf9b9eb57f7f5e7afeff33734fe4e0e7cf95b5f9efcdd27f9bbcf67ccdf478dbf8f0efeaaba55f9bb21f58aebc03a7f3f5bf8bb8dfab05a06efa2bdb39e5fbd61da050c16da1d22871f22388c79fc64e5b1fb3900ddf1d893bbd1bed7cd5fb396d3f9cbaf46cf8f462d2bc3a1e56f5ccb3a7ff78dfc5d467a5619ccf47b67e02fae036f78f3d75607de060c86fcdd75f0970dc8e0440e7b3dbf83e6f0bda2e77b038737080effb07058e5b1339f16be58e5311eb586d4390b5f53d91be27bdd7aa57daf277f1b9df2b919347f1f307ff94569769fe0ef074db3fb0a7fdf7af177d9c1df0da459ccdf3687de347860a1d9f788c198bf3887de257268c8df758dc16a2dc9dd271dcee195280e6f38396caf29d9392c6a4a9b7cee83c39ebc4df2bdf6dc7970fc9d1c02fe1e92fcdd27f8fbd68bbf6f09fe2e1bf8bb1cc4df36873665597a0e8df94beda37196b58318bcaef8e0352293161cfe67801c36e5d34f461e67e470cbe376ee99bbbdf3177277bce4c3dfc6f762fe520ccecfdf650b7f971dfcddc8c2dfedc01c1a6a57f2b71a7f4b06d7e3f7c039ccf6cf765f6ccbb16c1c566b4a62e4e231e17123b99bc25e93be4bf27709eca70fad7916e76f33ecfcddb7f2775fe3ef23e7af49cbcb9cbd36feb65a3eb2d481c3f8bb4df01733f858d68177681d130c3671d8e3bc12cde1d14d210eff30fa623387551e3bf3e98e79ecafcddcb9731c7f97007f9708feea0c5e6af9cbb56ae7ef8ae42ee6efbe95bf27fc67cbdaa0f9bb61d4ad9dbf5b8d5ef51cfabdd4ee7b238329feee127b672a87de23198c396cea9386e795f079ff3c1c566b4ab11cb6e758161e0b0e9b6636588e65626b2867b3723747dd57656f187f97007fa1aee9bdf4a1c6df154ffe7e48e66f7ba5f07713f0f79ed4b1d0f2a981bfdb440e7dcc07cddf75a6e146c12f2ae576c0614b9fd63dd7f106a9e77b2f0e3f68f9f40f0787eb71cee74c1ca678ece4723c77fd7d6f4adf95d0eb12312f61fe6a43e7ef9293bffbc1fcddd7f87b62e46f7bad6afc55b5abf27743e12f5d076e75ebaa036f1beac0bba407d6f83b9923184c7158cfb0d239ac3f5bda97c342af211c56bd317d597c313d337de2392b7753d9db257f97007f9742f88b86cedf7d2b7f4d7be938fede913abee3ec3d9aa8f5a418fe62066fcb417be0ef0a83651d58e8b851f05f956a5f28fc556bc33ee7957cfcf04d010e431eff30fa623787cf955182c7e7519a54b9ebef7bdd5ab5f3f796e66e007f9714fe62ad52fcdd07fcdd57f8fb017157d76d0c7f3748ddd6d751007f37916edd39b4cedf5d037f77943ab09dc1b03fcbfd0cda3e390c7db1ad5f2b3ac7f2f5c5313ccebcaff6f5bd7e59963f7fb1ae7df9bb14c45f55cb66feee031db7b34bcbb00e8c757c24671b7f37397bef491ddf73f69e7ad781f15efa23d8476bfcad34dcfa6013875bfe8acbbca74ee3f0bd1787ef1bfdda7df10fd2173f81d9ce63af51f354cce1a3d69c69cec25d3fad32fede728dde02ee8a79c93c8cfcd5b8ebe0efbe93bffb72f6e1afcee0138dbfcbc1fcdd50749bc6dfaf80c1ad6eaff9de7997dc3bc33a30d3ef1e67b09a63a572983e6bf83a92c3544d89f2c5a11cf6cab1e2f6ce68dfec535f8a636e98ef4de5af7d3fede2af692fadf357d7b389bfb49643f9bb81f8bbece0afaae338feaa39b4ce5f2a876e753cd7eea325830587e7ad1c36f7490f91c3761e3f19796cf2c585788cb87c49cef7d57c2f671ff6de3a679dbbea30f397aafb2e01fe1243d1ea02e0af3e7cf9bb0ff4fad8fc3c8ebfcb56fe6e22dd6e12fcdd44baa5eac0db72d0fc55ebc03b7208dd121eb81a8b9cc17f111c5ed338acd7920238acf475400edf932c8ee3b0cd17bbf32c638695966565cbb3427caf7fee6ceebbbae5b321c772f0d7b597a6f96bd272ade40f7cb6f1f704f117723884bfed8075603b7f551d43fedaebc058c7e63a30f6c1731a83595d388dc337ca988c6e22390cfbb536480efbd489751e9b394c71b9248f2fad73c35b31d73af49a4ddc65e31b9f993629eefaf17749cc80bf06f61af8bb60e5ef3ee0efbe95bf27247f4f02f97ba468d7cedf2dab6e6dfc85fbe66d037f77017fbf4bfed6f31ed66ee3832183ff32f6740c87c326cd420e8b7d732c87bdf54af038678e95ca5d3ff6de73cede49dec2d9916591dc6df96bd372abe9054ffe8acb87bf2792bfb496eb6ba91a4741fc55b5dceaf83e80bf6a1d98e6afae6382bf2483fdfbb3dce786290edf64e530f4c5fe1c6e79ace7d3d47c0ee6cb90b9e6a9989ddc95bc8d1980b3a6f10d70d7cc5fb3566f09fe2e79f37741e1af99c139f80b07e6ef4b92bf4716fe6e04f1f7bdd42c63f0b6a2dd6ba307ded5f6ce50bb147fffae2ec1e017dd7298e8afcccb61cce3b87c3a78cf9c9e6559f8cc722c315f12b3ef7e1acf2d7f296dfbf1772998bf0b80bfaebdb4cadfb748c7fb0efe9e78f257d772cdde4d6ffe6e22feb60c3ed5746ce2ef2ee2ef472dcba274bcc819fcaa526e690edf4473f89ee0b0c917bbfbb5cce3bc199df0b8faaf8acf2dc85d95bf3edef7969897387f97bcf98bb96be3ef02e0ef3ee2ef074daf347f4f2cfc7d69e4ef92c6df8d46b7147f371bfe6e22feaa0c76f397ae1fed4eec756055bb7b5cbf7f231fecc3e18789f98c43d71cb6e955e7705b4f2ae98bf3f2f81e0d986b59f84be457d4b85346087f1f9892257797d01cc25f7a2fedcfdf9344fe1e19f8bbc1f94b67592d8343f9bb8df8bb4df0970d137fe7b007ae352c191ccf61f7f33bf270f8de9bc3365fece670cb633c62797cde5c9770d47a73cd49ec0dc99d6fb95e29eede56ba0ce3ef02e0ef4266fe62cd0afe9e58f9bbc4472a7f3783f9fbde8bbf70ef6caa03eb1e98f35732f82fd05749e9760de8b60b0eab671dec1c769d79c01c56fdb19bc3ddf258e3ad718ed3b589bbadc6e90c4b66599cbf4ba4ae4dfc5d00fc5d30f2176bb9147f9782f9ab6bd9c6dff788bfef49fed63a3e061ac60c6e352c743cd70c4ac7af118387c0619dc52a87ef090e6f689a36b1d8954fdb396c1e97604e1a662e8f6f2bf5de5ae74b30df49bedae625f3f0e6ef029817bcf8bb00e605237f4f262a7ff73be4ef8683bfd4de99e62feec3a2f6ce6a1d78c75a075eacebc00d83170183ff023ed8d427dd1787571c1c76fb62dc5fa9cee77ccecc612f2efbf1d6927779b2d797bfd45e5a665946fe923916e0ef42027f3f70fe623dabfc3de17d58ba9697acfc55b50cf97be4e4efa9d431c5df53a461c8e0afa48e611d78077960037fa5823183550efb9c1b7e307298ead3cac961da17630edb781cef8b3be071cd56dbd0b82be67f3867ed979dbf3477c5d0b84bf2170e95bb6efeea43e5afaa57ac5bc1df258dbf4bc1fcdd9ac07d731efeee1af86baf1f01fe4e16a763cee05703e0f08da6d9380efbf67798797c0ee61ce71fce519e85e69aafa6390b77217b056f6fc93db6926129c38fbf48d74efed27b69137ff52c8b8fe9a819361d63fe2e99f83b9d38f8bb5980bf741d187b60a1615007161aae153c9d0206bf527c701c87fff1e330d7b4e0f08da2675dd3fab86f6ac52e5fac0f7f5f9c8fc71e5cb633571b9778f6bc2ceca5f83b5ec4b3cedd3cfc9d9e39f97b82f8ab3278c9c8df25037f856ed3f82b72e86d22bbda96e71760fd08f2b7ae1dd17be73d4dbb7b50bb1a83618e15c7e189c6e11b82c3373a87d13e5abf2087ef2587edf974585d89f6c52a8fcdf339988dbcf598d3b32c38dff1fdb4caddbb103d3bf94beea7bdf8ab6b195c8d9e75feee77c85f5dcb98bf9b88bf82c1db52cbad86b749fe620fbc63ad03abfcadf6d1d34f90c1560ecf3bce2bf5cde196c71487378c1ce6637c5398c3161e577f76246f1177fd7caf45af3c77bead39db5c80bb7004f07701f0971a1a7f1bcd5af95bebd5c2df25237f9754fe367a25f95bfd173b7fd5bd731c7f77a56e690facf317d681397fab716e60b0ad3fcbcd615db7fab9ff9b400edf2b1c76f9623dcb0aaf2b95e571962ccb9871fda3689bd6b8277fd5beab46cb648e65e5af7d2fadf0b752ab41cb8d8e15fe2a1c56f9bb24f9ab69d99bbf9b9cbd69fca5ebc02a7f711d784eea78518ed78a0f7ed53b876f30872df9f4fdc8ee8bef2d1c16f30f2b8fc55c80c70d73e1b8b5ce06ee06e4cd9456af9579916bb5e6ecb5cedd00fe2e00fe2eb8f8db30d78bbf5caba1fc7da9697649e8950f3b7fc5e5cf5f5abbbb7250fcd53df09eccafe694fc0ae7d0e70483d3384cd79262396cae29d1bed8954fa7e558719a0dccb13270570c3b7f43bcefa23e5bb4acf27701f0d7bc97ae757ce1cb5f38007f97e2f9cb191ccfdff788bfef9186b7bdf8abebb8edc3523df06bb88f060c7e81744cf567b9388c2fc15f0f0ea33af12ae58b1516fb7058b0d8c4e31f230f1e7b8e7330a78e4b39dfaa73a5c51bae41df59e5edb532169bd9c85dbb5e1bcd2e00ad2eb8f88b747ad1f2576770f52a9b69fe2e21fe9ec4f017ec9d397f5b064f3f93fcd5b5ebcf5fec81317f5bedce85f0b71a978cc1cafe79581cb667592d8fe9b30ef69a1264b2af2f4ec9b24c7956147335f6a6fbde6bcedf6bc0dd6b5f3d0bee4ebfb49a6e7eeec55fa9678dbf8d96ddfc55f7d216fe821c0bf0b7d12fbd9746fcadd46de6ef29c9df633eccfcfd48f0176759ad075e843a060c9e2d0edf1835dd72d8ce63ca176b33f4c5113c3671f9326ce64c0d192a6b75eedeba7c2fa1d76b3c038dfaf177c19fbfcd30f37789e4efd20cf157df3bb7bac50c5ec475e0e995e0eff48a31787a4de458dd7398a813477058f862f3b3f15c7525a0d74eb22c779e159a3763fedaf6d3785e422388bf82bbf52c346de56fbb9f86fcbdc8c6df2539d7fa051c063a56f83bbda1f8dbe859f0f734137f77257f8f117f7714feea75e045510766fbe8e9156670a3651f0eaf0570f82192c3376a3edde8f8cee88b6d7562f5da508695c30a8f7f707d87cce7c46ce3ee6514775dec0de3ef35c1dd7a2cb2d98fbf9cbbcd0c75aaf357fa5e82bf80c376fe2e19f8bba4f317ee99317f9b712b74db6856e3eff41fc45f3dbbda95ba55b54bf37707f1d7b977aeb55b8d73ee838576737238a23e4cf76b59f6ce348fefc1ecf32c004f1e67d83bc70d8dc78d56ff31cc7a9e45e557fad0b97bed64ef75cb5f85bb06fe023defa361e42fd432d0f492c6df1385bf4b3efc6db58cf92bf6d12efe563a160cae46b552757c8c744cf1f798e42f59079ede49fe5e491d9f3306d7ff4be0f07c30876f849e475f3ae430cd63c1e41f60ee92c7976c8e646e98ef35e5ced77006bc55c7a2ae559dbf0a772dfcd5b84bf2777a1fc0df9748af247fa713c15d384cfc1543e3afb97664e62fccae769176893eace957a9ddaf24832f05831bcdfa71f89dd62b1dc761f2fc7f00877d6a4a2d874d3c76fae2e1f09873969ee3f6d390bd6efe1af6d46efe127ab6f0d7b4976e353dbd2fc5df56c7347f351dfbf3f7b8d5f0f41bcddfe9771b7f1b1dabfcbd920c7e984e3be2f03f460e9b9fe78159ac7218f3f8deca633b87c155a9a61992c7d6513354ccee61bd6e0366bb4e17ab57f559e32d9fe5f0e3af7e8dbf90dc5da8f499ccdf86c13a7f4f5cfce52398bf8d76bdf98bb53bfd81f86bebc3d2f90beac07efcadc64fb98bbe86bd9588c3ea99ff700eeb1996f5f9f0743e4d72d855536af50a791c7cf62182c3295c8635a430eefab3f7d6c25da96d25c35206c55f9c65f9f1d7a56585bfa6bd34e4efcb78fec2e1cf5f45c78f3efcad560efe021ddf69b5a473a661c9e02170d8fc3c0f8dc5231f1e87e5d30487218ffd467d89b9d0556bef866b10cf34776f54ce9a06cd5d9dbfe32f78d6b86be46fa556c95f728c5adf6be36ff55f7be22fd72ecddf470b7f770dfc35f46171edee91da95fcadc6539b64410e13bad5393cefe4b0d06c3887a52f06fd1deaf33c42b22cbc7f36f963afb30f19780cb90c32ad86af3751dc0d656fcbdd6b3463fe3ad88bf90bf54ceea723f9db70d7c85fae6582bf20c72218ecc1df53c8df56cbb5865b0637fcfd45eab819d50af0b76570cddfe96f9dc1d5cff61a0a03feb67560d5034f972906430e37fbe9780ebf9b047118d59bec1c76fbe23be98bef8d3c0ef2c5693c4ee6f2b5632c12733c7b35fe42eec261e1afc65d3168fe62ee3af8bba4f1f7a5c6df2595bf1483edfc25759bc25fb477c6fce5da35d48135edfe2419dc1587cd75621787ddbed8954fabea54792c66af1e0fce616d06b523626e147d4bcf92c3fe9996694f4dcd3a777df54cf277fc45e7af6100fe724d5fd8f7d282bf4ccb46fe2e99f8abefa5a737347f818e0bf1177be0e90a1b76fe620f8cfbb01a0d731d370a5ee50c2ecd6173dff4cd84f2c5f43962da17df5938eccb63af2b8ec7515c0ee12d9e53d87b3dfec2f86be2ae9bbf8d3a11776dfc557dafcee046abba66397ba76f4cfc6d356be5afe4b09dbf6d1f16ceae6add36da95fcd5b44bf2576ad7c85f964337fcbda2f85beda205831fbc38ac3f032f9cc3a2b72386c3fef9b42bcbf2db3fdfb673a35be7cc748967336f2577f3efa9f5c174abcec1fc85dc6df96bd1b3c65da66f337f99efcdc65f55cb37f5b0eaf8b39dbf8cc182bf848e257fb107a6f8dbeea32b0d37c3c2df56c3ad8e2b0d370a5eab546be7f00b85c3ef483dc3734b611cbe317198eed9a27d71cd5a0f1edf231e439d7bfbe23c3cd6b85c6bed52993373777cc5e72f92b70a77ab57bf30feda86aed54ad10d7feb5967afcadf4a9792bfad564dfc1583e6af59b3cd40fc9d7ef6e52fd36e107f8f49fec2ec4aaf1fed71ed1aeac00a7faf6406fdb3e66f35d63983d73ae730fd0c1e639f25d0aae28b9d1cb6ed9dbdf5ead2aacae302f5a570eedef870d7b19fe673cb5da66131dbf8db681a71d7b497e67ae6dc35f1d7b09706b99643cb047f290fccf57b4aead89fbf5a1d58e72fd371cb5fbd066ce12fd7b0f4c124872583f371d85c27a6387c13c8e11b8dc33a8fef351e535cee80c70d67a97105e66bc70cb9ea310b5d2a63b19db136edfce5dc6de66a283ab5f1970d137fa156c178e9c5df2595bf82c14caf846e15fe4eff21f90b7a379876856edb3e2ce3de59e36fa3dd54fe3e553f5319dc0d87c515c1618dc77a7f07cd613b8f83f41abf77863c76f23986b926ee7af85e625f7dcdf44c73d7ba972ec25f622fbdc473ac64fed6179b1dfcfdd5f257d1f1a38dbf92c1441f56abe3d60337fcbd6b752cf97b55d7809bf18418fc40731831389cc3f380c3f3048bcd1c463c161ca6f369f3d0384cf3f8de3ad70abb6c67bf513354cc8e711530b7e33a7858b92b661b7b91360177fdf8dbfa5e39ceccfc25c64ba0d7ccfc850cd6f95b5f71fce57be76f90c192bf733a7fb976bf92dabdc4f9151f6f490623ed16e7b0b15fcbac590f5f4c9d3f54396c6272473ca6f8ace558a699ae2fe9dc35eda749deaac3ec7bcd7be97a069781bf849e09fe527b699dbf53bd8e64e46f9b63a9fce514b6f0b752b2277f491dafc03e2c52c773147f451f96c25f99634ddf7206af4572f8457e0e57aa357098f6c5c63ab1e0b09dc777165f0ce686c37c1e5f85cc3533d5398abbb9d84bf057e7ad3a4be6c2e1e2efa6a653037f1bf27af1570eccdd8d30fef23df32dd02de72f1b90bf50b3946ec3f93bfd2e74ebda3b9bf32bc6dfeac775de55b9d60187cdba851c463d96e2bc837796c5796c39ef40fb62139783ae301e7bedb1c5a038dce6592d6f55eefa6b1a0c95bb147f95bdb41c66fe12dc35f297d632d7f1868dbfd30d8abf8d9ac97db4ce5fb68f863af6e4efb189bf52cb2b98bfa20f0bd6818586a77792bf5740c3cb601fbdde8c27c0e099e370842f16c3c6e37664e7b181cb57704e64aebfefbd32f156bd9cfc55b82b675dab06fe720a13fc9539d51b13836bcd3603f3f79d8dbfccfb86f3b7fa2f8f8a76257f9976856ea7df8466fdf80bb4fb95ccaf7e2a1eb8e16f756df18e8e5582c3d30c1c9ef7e6b0b8e8b30e565f6cd0abfbfca19bc35139969a6579665a61b9d775355fa3396e3fad689ce22edc4b53dccdc5dfe632f09731b861ee868dbf48cb90bf37462d733d0bfe621d33feaa5ac63a86fc55758cebc0ad8ea93e2c8abf8a07fe893d7035de2b0cee96c3f313cbf9a586c3ae7c9ae0b19bc30a8f5526df933c368c9a9dea1c3f2a3532bdc5cf4c8b972d678db3f3327357e9bb82dcddf4e16feb7b5dfc957af5e7ef4dcddf667cd606e2afc8a04dfc6d52e864fe562b55b77b6cd8f90bb4fb53d3ee93c6e0b546bbd36c1c9ee7239dc39a2f0ecdb2048f0d7d96ab7c7f5c90c7915cd673ad70eefab117e4cee32fed8cf7d466f6023dc379b3e5af6120ee56d78720fedab55c82bfbfe2f94be858e983c60cd6f6d1aa8605835992b5ad31b80487218b3d396cf4c5370487414eed9d4fbb46108f292e3b789b677c41e3ca32c7b117f27793eb95e2ae9dbf9b40abf726fe562a74f057e6ce1b8a6e13f92bb4ebc7dfe90fc8df4ac92d7f57ea41f1b7f1c0bc0f0bea966bb7ae037fd5b4abf3f767cbdf6aec481fdc3d87adba1d7df3e170902fc6bab5f3d8d66f9985c722d7e23c36cf71dcb5b357dd6303ee7aea59f5be9b0a77ed5abe50b96bda4b333d9bf8ab69b965efbb58fea2bdb493bf92c19a8ecdfc9559d61cb98fa6f82beac0cb20c77a2b34dc28f863a5d86d82c1f11cfe2b8ac3ef5c1cd659ace4d3061e07fb6262548a92b3ffa819a9ce3d70d78bbdaa5ec79f2077f94c31d7acd74d3e6b5a35f1b71956fe6a23277f7fd1fc15dae5d70f936e55fe42ed42fe6adafd4a6af7a7ccaf969b01f6cecdb5a3309871f8c1cde1f6ecbfc661fa73c3fd38acf15866599a2f867562da177bd795d8f0e1b0677d29b1cec4f479199965b57cb5cd42db9fb96e3ffbe8591de34f2d779b9f7beda5ab5f19c05fc95e92bf9a8e5bfe322d43febe43ec1535e020fe42062bfc3dc6fce53af6e42fceb2580ecd2fc8df9f0a7fb98625835d1cde8de0b049cf2d8b1fc87c9ad433e470902faee6d18d2f8ffd461c8f6d5cf6e2733877bdd93b3ed7b9dbfc5cce16f66e6a1ae5fc6d7e6ebc90ef35f2b7faaf36febe6bebbf0a7fdf21ed0afeeea99ad5f9db5c8f70a4f2b7d5ae99bfc2032bdafd89b4bb8cf95beda2f71506ab39961f87ed671de6659d183e87e7816471065fec936505ec9f8379ecd7f721395b624f6d1a42e356eedaf6d3adbe5bee6afca5b97bc1992bb84bf217eb59e5af43cb76fe920c56b4fc4b19b57e13f95be99ae46f35eebcf87ba5f0b7d5f01662f0aae430a565e183ed1c169f3ffc0268fa853787bdf369b1b736fae21b0b87f93cbacb905367e1b193cbb5e6cee57c45ce82b7e7686eb8ea357fc2239cbf42a3f5dcfcdccedf0385bb56fe927a6df9ab0eac599dbf1a83c3f8db6857f2576897f197d781bdf92bb46be0ef95e4ef4f45bb82c1fbd58f82c1b67a524e0ee3f3ff3a87edf9b4d02ce98b4d23ca1767d66a913c2b8cbb5ebe57e899e26eab6f1ffe6a9a36f257db471bf96bd0f2bb40fe1e92fc3da4f88b750cb4fc08f94befa555fe221debfcbd33f057cdb1def321f6d13b80c16e0eef16e1b03d9f9e37e959f5c52d8f6bd62a3cbeb1f1d8c4e5341e47e4d6e7685c396713777d8795bb26f6567a84b3d4a883bf076056d98bf8cbf7ca26febecbc6df4365ef4cf0b71988bfb55eddfc553268c95fbd7e64e1afea817f2a1e985d7f73067f2cc261bda6447338a44eacea1572d8c263779615a6d7f4bdb32dcf32723a9cbbb4ef25f6d390b3f4b0e4cee45eda8fbffa10fce55a76f1f75d207f0f3df87b04f9abeca5b98e2bd53af82b740cf87b87f90b747c27357c25f97ba5f07759e52f60f0c74e38fc6a62da57eb1c56783c9efa72187b6382c3048f5b0e53f3a4566d461e7bf1d53c53239abd76fe2abc6d663e68ee62fe42ee8a41f2b77a650370d7ccdf3740ab70bc8be0efa1c6df23377fdba1f17785e26f7311fc6d46c3df665c2106ff04da55f97bdc68f798f1b71a2780c1f9391cd6af45f962738f259565211e9bbdf148e8b6008fd3332da4759c63d9e62b65aeb5fad9c45b9b9e697d9bf86bda4b4b6d43ee7e40ba76f2b7f93194bfef8881f9ab6b1967d069fc5da1f8db5c777c84f0b7be4e15fe420dbf400c9e8be2f06e3087e72dfd5aef5c1c1e7df6d134e6b1c5170b3f7ce7cbe37a1e9fb7733502e65a6fa6d99bb771dc75fbde73c65e82b7ea30f2b71a147729febe9173ab538ac1efbcf8ab6b762f99bf4788bf7fa90c6ef9dbccdf550fccf7ce7b2a8303f8fb53f2f73df0c04cbb750e7d22193c2735ebe2b0fd79b4711c9eb773b8d93f7bf962cc63baa6847d31e4b189c9e1fbe7381e2b3996cfa034ff39653fadf3177297d8531bd9abf057d535c9dffa72f0f79d1cb9f87b68e72fd84bd7d73ce46fb56a75bcc275eccd5faee33ba4e30590412f230fbca8f17787691830b834875f2471781ef8613e4f977c7d31e6b17d481edf2923338fe5cc47ad3fd7dc5c3eda3c47f3a7ea47ce5975e6dc3db73297642fe0ef41c35f9abb347f0f247f4d03ebf50d9f5beebaf87b08f8bba769f6d08bbf8f69fc9dbe14ba35f2f71562f04f637e0533e8e386bf8d07ae76d12752c1711c366459caded987c37a9d38c8175beb4a513ca6f89cca63a6db6cbc8de3ae83bd7c5ffd89f1d7b2a776f1f700f0d79565a9dca5b22c337f692d1f26f1f748d331e6efa399bfcd20f8db0c337fa10716fc3d5534ace558d3170a83290eaf125a7e08e0f02b2387dd75e207178f852fc63cb671b852e3173147f3981c352bd5396d182f9db3783ee7dc3de7bc256730fcf97b00b9cb673ff60aee1e343f37b1f7b5177fdf19f8fb8ee0ef21c9df23c0dfa320fece43fe9e8d69fe9e8d0cfc7dd56856d7aeca5f9376117fcf266753a4e06e38ecd7df61e4305d57b2675960ff6c3bfba06659d6c1f7cf377c3f1c38208fb5d9966de5e0eeb93a73ee9eb7fc0ddd4f4b7d7f90fc75eda585a66dfc7da7e919f2d7bc973e04ec6df97ba8e918f2f7c89bbff3aa07ae744cf2f7ecccc5dfb3b60f6bc1c8dfc526cb22f85b6bb856f0d9b942e1500ea3bee9080e435facebd9e98b6b0eeb3cb6691af3185f361e870f7f2e67bafcb9ebcfde03c0df03c9dd4d0ffe1e00ad1e78f1f7dd349cbf8711fc3df2e4ef5fbefc05da45fe1768d7c45fb57fa3d5ee29e06fdd072d18fca2d6efd9b452f054db450f97c3f398c3613d1e70ff6ceaedb0f75c1a665f1ee7a83db9f6cef4ac73170da0ef4f4efe22dec2b9d1b2e0aece5f9dbb077cd8f98b479b3bdbf6d2147ff708fe1e05f077de97bfd5cac5df5792c177047f17941c0bf29731f86fac61c1e0b30b8dc3abde1cd6f2e9c9abb3cfbaa6f905393c1fc0e177260e37ec75f2d8c717bbae4a4911fe988dfaffcb467da97387dc25d93b5e20e60395bb88bf26f61e00feb6c3c4dfd74efeb67b654ab7877cd0fca574abf2f748192efeaeb8f8db6857e7afd02ecea017247f17247f4f15fe12fb67c6df6a5c32062bfacdcde1570a87db1e4b7b9f25eeb55478dc3038ca177be559313cbee31cd6e6b81a53baae4d43d1b97b2f7d4070f7006adce07ba9bdb48dbfba8e217fdf19f97b88f4ece2ef21e7ae89bf4739f82b757c57fdccc6df2b82bfa780bf30c77ad1f461bd68732cb68b3efb5269b8e6f0554e0e4fa7011c56f3e979839eab5129d6c062c163c8e196c7a32f79790cb92ce6f84171d9349f5ddbb95bf193fd1ccf3467f90c07d6a6e67b29fe1e8099e22ee62fe42eadd9d780bffa15c7dfc344fece43feb60c6e752bf7ce92bf9a7643f87b4af297ed9fff660caeae9bfffefffff77ffd1f9ff650a1 + + + + + Fix1CheckBox + toggled(bool) + Freq1SpinBox + setEnabled(bool) + + + Fix1CheckBox + toggled(bool) + FineRatio1SpinBox + setDisabled(bool) + + + Fix1CheckBox + toggled(bool) + CoarseRatio1SpinBox + setDisabled(bool) + + + Fix2CheckBox + toggled(bool) + FineRatio2SpinBox + setDisabled(bool) + + + Fix2CheckBox + toggled(bool) + CoarseRatio2SpinBox + setDisabled(bool) + + + Fix3CheckBox + toggled(bool) + FineRatio3SpinBox + setDisabled(bool) + + + Fix3CheckBox + toggled(bool) + CoarseRatio3SpinBox + setDisabled(bool) + + + Fix4CheckBox + toggled(bool) + FineRatio4SpinBox + setDisabled(bool) + + + Fix4CheckBox + toggled(bool) + CoarseRatio4SpinBox + setDisabled(bool) + + + Fix2CheckBox + toggled(bool) + Freq2SpinBox + setEnabled(bool) + + + Fix3CheckBox + toggled(bool) + Freq3SpinBox + setEnabled(bool) + + + Fix4CheckBox + toggled(bool) + Freq4SpinBox + setEnabled(bool) + + + AR4Slider + valueChanged(int) + AR4SpinBox + setValue(int) + + + AR4SpinBox + valueChanged(int) + AR4Slider + setValue(int) + + + D1R4Slider + valueChanged(int) + D1R4SpinBox + setValue(int) + + + D1R4SpinBox + valueChanged(int) + D1R4Slider + setValue(int) + + + D1L4Slider + valueChanged(int) + D1L4SpinBox + setValue(int) + + + D1L4SpinBox + valueChanged(int) + D1L4Slider + setValue(int) + + + D2R4Slider + valueChanged(int) + D2R4SpinBox + setValue(int) + + + RR4Slider + valueChanged(int) + RR4SpinBox + setValue(int) + + + RR4SpinBox + valueChanged(int) + RR4Slider + setValue(int) + + + D2R4SpinBox + valueChanged(int) + D2R4Slider + setValue(int) + + + AR3SpinBox + valueChanged(int) + AR3Slider + setValue(int) + + + AR3Slider + valueChanged(int) + AR3SpinBox + setValue(int) + + + D1R3Slider + valueChanged(int) + D1R3SpinBox + setValue(int) + + + D1R3SpinBox + valueChanged(int) + D1R3Slider + setValue(int) + + + D1L3Slider + valueChanged(int) + D1L3SpinBox + setValue(int) + + + D1L3SpinBox + valueChanged(int) + D1L3Slider + setValue(int) + + + D2R3Slider + valueChanged(int) + D2R3SpinBox + setValue(int) + + + D2R3SpinBox + valueChanged(int) + D2R3Slider + setValue(int) + + + RR3Slider + valueChanged(int) + RR3SpinBox + setValue(int) + + + RR3SpinBox + valueChanged(int) + RR3Slider + setValue(int) + + + AR2Slider + valueChanged(int) + AR2SpinBox + setValue(int) + + + AR2SpinBox + valueChanged(int) + AR2Slider + setValue(int) + + + D1R2Slider + valueChanged(int) + D1R2SpinBox + setValue(int) + + + D1R2SpinBox + valueChanged(int) + D1R2Slider + setValue(int) + + + D1L2Slider + valueChanged(int) + D1L2SpinBox + setValue(int) + + + D1L2SpinBox + valueChanged(int) + D1L2Slider + setValue(int) + + + D2R2Slider + valueChanged(int) + D2R2SpinBox + setValue(int) + + + D2R2SpinBox + valueChanged(int) + D2R2Slider + setValue(int) + + + RR2Slider + valueChanged(int) + RR2SpinBox + setValue(int) + + + RR2SpinBox + valueChanged(int) + RR2Slider + setValue(int) + + + AR1Slider + valueChanged(int) + AR1SpinBox + setValue(int) + + + AR1SpinBox + valueChanged(int) + AR1Slider + setValue(int) + + + D1R1Slider + valueChanged(int) + D1R1SpinBox + setValue(int) + + + D1R1SpinBox + valueChanged(int) + D1R1Slider + setValue(int) + + + D1L1Slider + valueChanged(int) + D1L1SpinBox + setValue(int) + + + D1L1SpinBox + valueChanged(int) + D1L1Slider + setValue(int) + + + D2R1Slider + valueChanged(int) + D2R1SpinBox + setValue(int) + + + D2R1SpinBox + valueChanged(int) + D2R1Slider + setValue(int) + + + RR1Slider + valueChanged(int) + RR1SpinBox + setValue(int) + + + RR1SpinBox + valueChanged(int) + RR1Slider + setValue(int) + + + LS1Slider + valueChanged(int) + LS1SpinBox + setValue(int) + + + LS1SpinBox + valueChanged(int) + LS1Slider + setValue(int) + + + RS1Slider + valueChanged(int) + RS1SpinBox + setValue(int) + + + RS1SpinBox + valueChanged(int) + RS1Slider + setValue(int) + + + LS2Slider + valueChanged(int) + LS2SpinBox + setValue(int) + + + LS2SpinBox + valueChanged(int) + LS2Slider + setValue(int) + + + RS2Slider + valueChanged(int) + RS2SpinBox + setValue(int) + + + RS2SpinBox + valueChanged(int) + RS2Slider + setValue(int) + + + LS3Slider + valueChanged(int) + LS3SpinBox + setValue(int) + + + LS3SpinBox + valueChanged(int) + LS3Slider + setValue(int) + + + RS3Slider + valueChanged(int) + RS3SpinBox + setValue(int) + + + RS3SpinBox + valueChanged(int) + RS3Slider + setValue(int) + + + LS4Slider + valueChanged(int) + LS4SpinBox + setValue(int) + + + LS4SpinBox + valueChanged(int) + LS4Slider + setValue(int) + + + RS4Slider + valueChanged(int) + RS4SpinBox + setValue(int) + + + RS4SpinBox + valueChanged(int) + RS4Slider + setValue(int) + + + Vol4Slider + valueChanged(int) + Vol4SpinBox + setValue(int) + + + Vol4SpinBox + valueChanged(int) + Vol4Slider + setValue(int) + + + Vol3Slider + valueChanged(int) + Vol3SpinBox + setValue(int) + + + Vol3SpinBox + valueChanged(int) + Vol3Slider + setValue(int) + + + Vol2Slider + valueChanged(int) + Vol2SpinBox + setValue(int) + + + Vol2SpinBox + valueChanged(int) + Vol2Slider + setValue(int) + + + Vol1Slider + valueChanged(int) + Vol1SpinBox + setValue(int) + + + Vol1SpinBox + valueChanged(int) + Vol1Slider + setValue(int) + + + EBS1Slider + valueChanged(int) + EBS1SpinBox + setValue(int) + + + EBS1SpinBox + valueChanged(int) + EBS1Slider + setValue(int) + + + KVS1Slider + valueChanged(int) + KVS1SpinBox + setValue(int) + + + KVS1SpinBox + valueChanged(int) + KVS1Slider + setValue(int) + + + EBS2Slider + valueChanged(int) + EBS2SpinBox + setValue(int) + + + EBS2SpinBox + valueChanged(int) + EBS2Slider + setValue(int) + + + KVS2Slider + valueChanged(int) + KVS2SpinBox + setValue(int) + + + KVS2SpinBox + valueChanged(int) + KVS2Slider + setValue(int) + + + EBS3Slider + valueChanged(int) + EBS3SpinBox + setValue(int) + + + EBS3SpinBox + valueChanged(int) + EBS3Slider + setValue(int) + + + KVS3Slider + valueChanged(int) + KVS3SpinBox + setValue(int) + + + KVS3SpinBox + valueChanged(int) + KVS3Slider + setValue(int) + + + EBS4Slider + valueChanged(int) + EBS4SpinBox + setValue(int) + + + EBS4SpinBox + valueChanged(int) + EBS4Slider + setValue(int) + + + KVS4Slider + valueChanged(int) + KVS4SpinBox + setValue(int) + + + KVS4SpinBox + valueChanged(int) + KVS4Slider + setValue(int) + + + DET4Slider + valueChanged(int) + DET4SpinBox + setValue(int) + + + DET4SpinBox + valueChanged(int) + DET4Slider + setValue(int) + + + DET3Slider + valueChanged(int) + DET3SpinBox + setValue(int) + + + DET3SpinBox + valueChanged(int) + DET3Slider + setValue(int) + + + DET2Slider + valueChanged(int) + DET2SpinBox + setValue(int) + + + DET2SpinBox + valueChanged(int) + DET2Slider + setValue(int) + + + DET1Slider + valueChanged(int) + DET1SpinBox + setValue(int) + + + DET1SpinBox + valueChanged(int) + DET1Slider + setValue(int) + + + masterVolSlider + valueChanged(int) + MasterVolumeSpinBox + setValue(int) + + + MasterVolumeSpinBox + valueChanged(int) + masterVolSlider + setValue(int) + + + feedbackSlider + valueChanged(int) + feedbackSpinBox + setValue(int) + + + feedbackSpinBox + valueChanged(int) + feedbackSlider + setValue(int) + + + PitchBendRangeSlider + valueChanged(int) + pitchBendRangeSpinBox + setValue(int) + + + pitchBendRangeSpinBox + valueChanged(int) + PitchBendRangeSlider + setValue(int) + + + PModSensSlider + valueChanged(int) + PMSSpinBox + setValue(int) + + + PMSSpinBox + valueChanged(int) + PModSensSlider + setValue(int) + + + AModSensSlider + valueChanged(int) + AMSSpinBox + setValue(int) + + + AMSSpinBox + valueChanged(int) + AModSensSlider + setValue(int) + + + PModDepthSlider + valueChanged(int) + PModDepthSpinBox + setValue(int) + + + PModDepthSpinBox + valueChanged(int) + PModDepthSlider + setValue(int) + + + AModDepthSlider + valueChanged(int) + AModDepthSpinBox + setValue(int) + + + AModDepthSpinBox + valueChanged(int) + AModDepthSlider + setValue(int) + + + LFOSpeedSlider + valueChanged(int) + LFOSpeedSpinBox + setValue(int) + + + LFOSpeedSpinBox + valueChanged(int) + LFOSpeedSlider + setValue(int) + + + LFODelaySlider + valueChanged(int) + LFODelaySpinBox + setValue(int) + + + LFODelaySpinBox + valueChanged(int) + LFODelaySlider + setValue(int) + + + transposeSlider + valueChanged(int) + transposeSpinBox + setValue(int) + + + transposeSpinBox + valueChanged(int) + transposeSlider + setValue(int) + + + globalDetuneSlider + valueChanged(int) + globalDetuneSpinBox + setValue(int) + + + globalDetuneSpinBox + valueChanged(int) + globalDetuneSlider + setValue(int) + + + + deicsOnzeTabWidget + categoryListView + nameLineEdit + masterVolSlider + feedbackSlider + polyMonoComboBox + LFOSyncCheckBox + PModSensSlider + LFOWaveComboBox + AModSensSlider + PModDepthSlider + AModDepthSlider + LFOSpeedSlider + LFODelaySlider + transposeSlider + globalDetuneSlider + algorithmComboBox + AR1Slider + D1R1Slider + D1L1Slider + D2R1Slider + RR1Slider + LS1Slider + RS1Slider + Vol1Slider + Fix1CheckBox + AME1CheckBox + EBS1Slider + DET1Slider + KVS1Slider + WaveForm1ComboBox + EGQ1ComboBox + AR2Slider + D1R2Slider + D1L2Slider + D2R2Slider + RR2Slider + LS2Slider + RS2Slider + Vol2Slider + AME2CheckBox + EBS2Slider + DET2Slider + KVS2Slider + WaveForm2ComboBox + EGS2comboBox + AR3Slider + D1R3Slider + D1L3Slider + D2R3Slider + RR3Slider + LS3Slider + RS3Slider + Vol3Slider + AME3CheckBox + EBS3Slider + DET3Slider + KVS3Slider + WaveForm3ComboBox + EGS3comboBox + AR4Slider + D1R4Slider + D1L4Slider + D2R4Slider + RR4Slider + LS4Slider + RS4Slider + Vol4Slider + AME4CheckBox + EBS4Slider + DET4Slider + KVS4Slider + WaveForm4ComboBox + EGS4comboBox + + + diff --git a/muse2/synti/deicsonze/moc_deicsonzegui.cpp b/muse2/synti/deicsonze/moc_deicsonzegui.cpp new file mode 100644 index 00000000..0fd39bff --- /dev/null +++ b/muse2/synti/deicsonze/moc_deicsonzegui.cpp @@ -0,0 +1,304 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'deicsonzegui.h' +** +** Created: Sun Oct 10 20:45:43 2010 +** by: The Qt Meta Object Compiler version 62 (Qt 4.6.2) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "deicsonzegui.h" +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'deicsonzegui.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 62 +#error "This file was generated using the moc from 4.6.2. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +QT_BEGIN_MOC_NAMESPACE +static const uint qt_meta_data_DeicsOnzeGui[] = { + + // content: + 4, // revision + 0, // classname + 0, 0, // classinfo + 93, 14, // methods + 0, 0, // properties + 0, 0, // enums/sets + 0, 0, // constructors + 0, // flags + 0, // signalCount + + // slots: signature, parameters, type, tag, flags + 14, 13, 13, 13, 0x08, + 34, 13, 13, 13, 0x08, + 57, 13, 13, 13, 0x08, + 79, 13, 13, 13, 0x08, + 101, 13, 13, 13, 0x08, + 118, 13, 13, 13, 0x08, + 142, 13, 13, 13, 0x08, + 163, 13, 13, 13, 0x08, + 176, 13, 13, 13, 0x08, + 189, 13, 13, 13, 0x08, + 207, 13, 13, 13, 0x08, + 224, 13, 13, 13, 0x08, + 244, 13, 13, 13, 0x08, + 261, 13, 13, 13, 0x08, + 278, 13, 13, 13, 0x08, + 299, 13, 13, 13, 0x08, + 320, 13, 13, 13, 0x08, + 341, 13, 13, 13, 0x08, + 360, 13, 13, 13, 0x08, + 378, 13, 13, 13, 0x08, + 399, 13, 13, 13, 0x08, + 421, 13, 13, 13, 0x08, + 448, 444, 13, 13, 0x08, + 460, 444, 13, 13, 0x08, + 473, 444, 13, 13, 0x08, + 486, 444, 13, 13, 0x08, + 499, 444, 13, 13, 0x08, + 511, 444, 13, 13, 0x08, + 523, 444, 13, 13, 0x08, + 536, 444, 13, 13, 0x08, + 549, 444, 13, 13, 0x08, + 562, 444, 13, 13, 0x08, + 574, 444, 13, 13, 0x08, + 586, 444, 13, 13, 0x08, + 599, 444, 13, 13, 0x08, + 612, 444, 13, 13, 0x08, + 625, 444, 13, 13, 0x08, + 637, 444, 13, 13, 0x08, + 649, 444, 13, 13, 0x08, + 662, 444, 13, 13, 0x08, + 675, 444, 13, 13, 0x08, + 688, 444, 13, 13, 0x08, + 700, 444, 13, 13, 0x08, + 712, 444, 13, 13, 0x08, + 724, 444, 13, 13, 0x08, + 736, 444, 13, 13, 0x08, + 748, 444, 13, 13, 0x08, + 760, 444, 13, 13, 0x08, + 772, 444, 13, 13, 0x08, + 784, 444, 13, 13, 0x08, + 796, 444, 13, 13, 0x08, + 809, 444, 13, 13, 0x08, + 822, 444, 13, 13, 0x08, + 835, 444, 13, 13, 0x08, + 848, 444, 13, 13, 0x08, + 869, 444, 13, 13, 0x08, + 888, 444, 13, 13, 0x08, + 904, 902, 13, 13, 0x08, + 918, 444, 13, 13, 0x08, + 939, 444, 13, 13, 0x08, + 958, 444, 13, 13, 0x08, + 972, 902, 13, 13, 0x08, + 986, 444, 13, 13, 0x08, + 1007, 444, 13, 13, 0x08, + 1026, 444, 13, 13, 0x08, + 1040, 902, 13, 13, 0x08, + 1054, 444, 13, 13, 0x08, + 1075, 444, 13, 13, 0x08, + 1094, 444, 13, 13, 0x08, + 1108, 902, 13, 13, 0x08, + 1122, 444, 13, 13, 0x08, + 1136, 444, 13, 13, 0x08, + 1149, 444, 13, 13, 0x08, + 1162, 444, 13, 13, 0x08, + 1176, 444, 13, 13, 0x08, + 1189, 444, 13, 13, 0x08, + 1202, 444, 13, 13, 0x08, + 1216, 444, 13, 13, 0x08, + 1229, 444, 13, 13, 0x08, + 1242, 444, 13, 13, 0x08, + 1256, 444, 13, 13, 0x08, + 1269, 444, 13, 13, 0x08, + 1282, 444, 13, 13, 0x08, + 1295, 444, 13, 13, 0x08, + 1308, 444, 13, 13, 0x08, + 1321, 444, 13, 13, 0x08, + 1334, 13, 13, 13, 0x08, + 1356, 13, 13, 13, 0x08, + 1378, 13, 13, 13, 0x08, + 1400, 13, 13, 13, 0x08, + 1422, 13, 13, 13, 0x08, + 1457, 13, 13, 13, 0x08, + 1487, 13, 13, 13, 0x08, + + 0 // eod +}; + +static const char qt_meta_stringdata_DeicsOnzeGui[] = { + "DeicsOnzeGui\0\0newPresetDialogue()\0" + "deletePresetDialogue()\0loadPresetsDialogue()\0" + "savePresetsDialogue()\0setName(QString)\0" + "setSubcategory(QString)\0setCategory(QString)\0" + "setBank(int)\0setProg(int)\0setMasterVol(int)\0" + "setFeedback(int)\0setLfoWave(QString)\0" + "setLfoSpeed(int)\0setLfoDelay(int)\0" + "setLfoPModDepth(int)\0setLfoPitchSens(int)\0" + "setLfoAModDepth(int)\0setLfoAmpSens(int)\0" + "setTranspose(int)\0setGlobalDetune(int)\0" + "setAlgorithm(QString)\0setPitchBendRange(int)\0" + "val\0setAR1(int)\0setD1R1(int)\0setD1L1(int)\0" + "setD2R1(int)\0setRR1(int)\0setAR2(int)\0" + "setD1R2(int)\0setD1L2(int)\0setD2R2(int)\0" + "setRR2(int)\0setAR3(int)\0setD1R3(int)\0" + "setD1L3(int)\0setD2R3(int)\0setRR3(int)\0" + "setAR4(int)\0setD1R4(int)\0setD1L4(int)\0" + "setD2R4(int)\0setRR4(int)\0setLS1(int)\0" + "setRS1(int)\0setLS2(int)\0setRS2(int)\0" + "setLS3(int)\0setRS3(int)\0setLS4(int)\0" + "setRS4(int)\0setVol1(int)\0setVol2(int)\0" + "setVol3(int)\0setVol4(int)\0" + "setCoarseRatio1(int)\0setFineRatio1(int)\0" + "setFreq1(int)\0f\0setFix1(bool)\0" + "setCoarseRatio2(int)\0setFineRatio2(int)\0" + "setFreq2(int)\0setFix2(bool)\0" + "setCoarseRatio3(int)\0setFineRatio3(int)\0" + "setFreq3(int)\0setFix3(bool)\0" + "setCoarseRatio4(int)\0setFineRatio4(int)\0" + "setFreq4(int)\0setFix4(bool)\0setAME1(bool)\0" + "setEBS1(int)\0setKVS1(int)\0setAME2(bool)\0" + "setEBS2(int)\0setKVS2(int)\0setAME3(bool)\0" + "setEBS3(int)\0setKVS3(int)\0setAME4(bool)\0" + "setEBS4(int)\0setKVS4(int)\0setDET1(int)\0" + "setDET2(int)\0setDET3(int)\0setDET4(int)\0" + "setWaveForm1(QString)\0setWaveForm2(QString)\0" + "setWaveForm3(QString)\0setWaveForm4(QString)\0" + "setSubcategorySet(Q3ListViewItem*)\0" + "setPresetSet(Q3ListViewItem*)\0" + "setPreset(Q3ListViewItem*)\0" +}; + +const QMetaObject DeicsOnzeGui::staticMetaObject = { + { &DeicsOnzeGuiBase::staticMetaObject, qt_meta_stringdata_DeicsOnzeGui, + qt_meta_data_DeicsOnzeGui, 0 } +}; + +#ifdef Q_NO_DATA_RELOCATION +const QMetaObject &DeicsOnzeGui::getStaticMetaObject() { return staticMetaObject; } +#endif //Q_NO_DATA_RELOCATION + +const QMetaObject *DeicsOnzeGui::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject; +} + +void *DeicsOnzeGui::qt_metacast(const char *_clname) +{ + if (!_clname) return 0; + if (!strcmp(_clname, qt_meta_stringdata_DeicsOnzeGui)) + return static_cast(const_cast< DeicsOnzeGui*>(this)); + if (!strcmp(_clname, "MessGui")) + return static_cast< MessGui*>(const_cast< DeicsOnzeGui*>(this)); + return DeicsOnzeGuiBase::qt_metacast(_clname); +} + +int DeicsOnzeGui::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = DeicsOnzeGuiBase::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: newPresetDialogue(); break; + case 1: deletePresetDialogue(); break; + case 2: loadPresetsDialogue(); break; + case 3: savePresetsDialogue(); break; + case 4: setName((*reinterpret_cast< const QString(*)>(_a[1]))); break; + case 5: setSubcategory((*reinterpret_cast< const QString(*)>(_a[1]))); break; + case 6: setCategory((*reinterpret_cast< const QString(*)>(_a[1]))); break; + case 7: setBank((*reinterpret_cast< int(*)>(_a[1]))); break; + case 8: setProg((*reinterpret_cast< int(*)>(_a[1]))); break; + case 9: setMasterVol((*reinterpret_cast< int(*)>(_a[1]))); break; + case 10: setFeedback((*reinterpret_cast< int(*)>(_a[1]))); break; + case 11: setLfoWave((*reinterpret_cast< const QString(*)>(_a[1]))); break; + case 12: setLfoSpeed((*reinterpret_cast< int(*)>(_a[1]))); break; + case 13: setLfoDelay((*reinterpret_cast< int(*)>(_a[1]))); break; + case 14: setLfoPModDepth((*reinterpret_cast< int(*)>(_a[1]))); break; + case 15: setLfoPitchSens((*reinterpret_cast< int(*)>(_a[1]))); break; + case 16: setLfoAModDepth((*reinterpret_cast< int(*)>(_a[1]))); break; + case 17: setLfoAmpSens((*reinterpret_cast< int(*)>(_a[1]))); break; + case 18: setTranspose((*reinterpret_cast< int(*)>(_a[1]))); break; + case 19: setGlobalDetune((*reinterpret_cast< int(*)>(_a[1]))); break; + case 20: setAlgorithm((*reinterpret_cast< const QString(*)>(_a[1]))); break; + case 21: setPitchBendRange((*reinterpret_cast< int(*)>(_a[1]))); break; + case 22: setAR1((*reinterpret_cast< int(*)>(_a[1]))); break; + case 23: setD1R1((*reinterpret_cast< int(*)>(_a[1]))); break; + case 24: setD1L1((*reinterpret_cast< int(*)>(_a[1]))); break; + case 25: setD2R1((*reinterpret_cast< int(*)>(_a[1]))); break; + case 26: setRR1((*reinterpret_cast< int(*)>(_a[1]))); break; + case 27: setAR2((*reinterpret_cast< int(*)>(_a[1]))); break; + case 28: setD1R2((*reinterpret_cast< int(*)>(_a[1]))); break; + case 29: setD1L2((*reinterpret_cast< int(*)>(_a[1]))); break; + case 30: setD2R2((*reinterpret_cast< int(*)>(_a[1]))); break; + case 31: setRR2((*reinterpret_cast< int(*)>(_a[1]))); break; + case 32: setAR3((*reinterpret_cast< int(*)>(_a[1]))); break; + case 33: setD1R3((*reinterpret_cast< int(*)>(_a[1]))); break; + case 34: setD1L3((*reinterpret_cast< int(*)>(_a[1]))); break; + case 35: setD2R3((*reinterpret_cast< int(*)>(_a[1]))); break; + case 36: setRR3((*reinterpret_cast< int(*)>(_a[1]))); break; + case 37: setAR4((*reinterpret_cast< int(*)>(_a[1]))); break; + case 38: setD1R4((*reinterpret_cast< int(*)>(_a[1]))); break; + case 39: setD1L4((*reinterpret_cast< int(*)>(_a[1]))); break; + case 40: setD2R4((*reinterpret_cast< int(*)>(_a[1]))); break; + case 41: setRR4((*reinterpret_cast< int(*)>(_a[1]))); break; + case 42: setLS1((*reinterpret_cast< int(*)>(_a[1]))); break; + case 43: setRS1((*reinterpret_cast< int(*)>(_a[1]))); break; + case 44: setLS2((*reinterpret_cast< int(*)>(_a[1]))); break; + case 45: setRS2((*reinterpret_cast< int(*)>(_a[1]))); break; + case 46: setLS3((*reinterpret_cast< int(*)>(_a[1]))); break; + case 47: setRS3((*reinterpret_cast< int(*)>(_a[1]))); break; + case 48: setLS4((*reinterpret_cast< int(*)>(_a[1]))); break; + case 49: setRS4((*reinterpret_cast< int(*)>(_a[1]))); break; + case 50: setVol1((*reinterpret_cast< int(*)>(_a[1]))); break; + case 51: setVol2((*reinterpret_cast< int(*)>(_a[1]))); break; + case 52: setVol3((*reinterpret_cast< int(*)>(_a[1]))); break; + case 53: setVol4((*reinterpret_cast< int(*)>(_a[1]))); break; + case 54: setCoarseRatio1((*reinterpret_cast< int(*)>(_a[1]))); break; + case 55: setFineRatio1((*reinterpret_cast< int(*)>(_a[1]))); break; + case 56: setFreq1((*reinterpret_cast< int(*)>(_a[1]))); break; + case 57: setFix1((*reinterpret_cast< bool(*)>(_a[1]))); break; + case 58: setCoarseRatio2((*reinterpret_cast< int(*)>(_a[1]))); break; + case 59: setFineRatio2((*reinterpret_cast< int(*)>(_a[1]))); break; + case 60: setFreq2((*reinterpret_cast< int(*)>(_a[1]))); break; + case 61: setFix2((*reinterpret_cast< bool(*)>(_a[1]))); break; + case 62: setCoarseRatio3((*reinterpret_cast< int(*)>(_a[1]))); break; + case 63: setFineRatio3((*reinterpret_cast< int(*)>(_a[1]))); break; + case 64: setFreq3((*reinterpret_cast< int(*)>(_a[1]))); break; + case 65: setFix3((*reinterpret_cast< bool(*)>(_a[1]))); break; + case 66: setCoarseRatio4((*reinterpret_cast< int(*)>(_a[1]))); break; + case 67: setFineRatio4((*reinterpret_cast< int(*)>(_a[1]))); break; + case 68: setFreq4((*reinterpret_cast< int(*)>(_a[1]))); break; + case 69: setFix4((*reinterpret_cast< bool(*)>(_a[1]))); break; + case 70: setAME1((*reinterpret_cast< bool(*)>(_a[1]))); break; + case 71: setEBS1((*reinterpret_cast< int(*)>(_a[1]))); break; + case 72: setKVS1((*reinterpret_cast< int(*)>(_a[1]))); break; + case 73: setAME2((*reinterpret_cast< bool(*)>(_a[1]))); break; + case 74: setEBS2((*reinterpret_cast< int(*)>(_a[1]))); break; + case 75: setKVS2((*reinterpret_cast< int(*)>(_a[1]))); break; + case 76: setAME3((*reinterpret_cast< bool(*)>(_a[1]))); break; + case 77: setEBS3((*reinterpret_cast< int(*)>(_a[1]))); break; + case 78: setKVS3((*reinterpret_cast< int(*)>(_a[1]))); break; + case 79: setAME4((*reinterpret_cast< bool(*)>(_a[1]))); break; + case 80: setEBS4((*reinterpret_cast< int(*)>(_a[1]))); break; + case 81: setKVS4((*reinterpret_cast< int(*)>(_a[1]))); break; + case 82: setDET1((*reinterpret_cast< int(*)>(_a[1]))); break; + case 83: setDET2((*reinterpret_cast< int(*)>(_a[1]))); break; + case 84: setDET3((*reinterpret_cast< int(*)>(_a[1]))); break; + case 85: setDET4((*reinterpret_cast< int(*)>(_a[1]))); break; + case 86: setWaveForm1((*reinterpret_cast< const QString(*)>(_a[1]))); break; + case 87: setWaveForm2((*reinterpret_cast< const QString(*)>(_a[1]))); break; + case 88: setWaveForm3((*reinterpret_cast< const QString(*)>(_a[1]))); break; + case 89: setWaveForm4((*reinterpret_cast< const QString(*)>(_a[1]))); break; + case 90: setSubcategorySet((*reinterpret_cast< Q3ListViewItem*(*)>(_a[1]))); break; + case 91: setPresetSet((*reinterpret_cast< Q3ListViewItem*(*)>(_a[1]))); break; + case 92: setPreset((*reinterpret_cast< Q3ListViewItem*(*)>(_a[1]))); break; + default: ; + } + _id -= 93; + } + return _id; +} +QT_END_MOC_NAMESPACE diff --git a/muse2/synti/deicsonze/newpreset.h b/muse2/synti/deicsonze/newpreset.h new file mode 100644 index 00000000..cf589dbc --- /dev/null +++ b/muse2/synti/deicsonze/newpreset.h @@ -0,0 +1,1162 @@ +#ifndef NEWPRESET_H +#define NEWPRESET_H + +#include + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE + +class Ui_NewPreset +{ +public: + Q3GroupBox *nameNPGroupBox; + QLineEdit *nameNPLineEdit; + Q3GroupBox *subcategoryNPGroupBox; + QLineEdit *subcategoryNPLineEdit; + Q3GroupBox *categoryNPGroupBox; + QLineEdit *categoryNPLineEdit; + Q3GroupBox *bankNPGroupBox; + QSpinBox *bankNPSpinBox; + Q3GroupBox *progNPGroupBox; + QSpinBox *progNPSpinBox; + Q3ButtonGroup *WantButtonGroup; + QPushButton *CancelPushButton; + QPushButton *OkPushButton; + + void setupUi(QDialog *NewPreset) + { + if (NewPreset->objectName().isEmpty()) + NewPreset->setObjectName(QString::fromUtf8("NewPreset")); + NewPreset->resize(271, 157); + nameNPGroupBox = new Q3GroupBox(NewPreset); + nameNPGroupBox->setObjectName(QString::fromUtf8("nameNPGroupBox")); + nameNPGroupBox->setGeometry(QRect(10, 0, 120, 50)); + nameNPLineEdit = new QLineEdit(nameNPGroupBox); + nameNPLineEdit->setObjectName(QString::fromUtf8("nameNPLineEdit")); + nameNPLineEdit->setGeometry(QRect(10, 20, 100, 21)); + QFont font; + font.setFamily(QString::fromUtf8("Zero Threes")); + font.setPointSize(8); + nameNPLineEdit->setFont(font); + nameNPLineEdit->setMaxLength(12); + subcategoryNPGroupBox = new Q3GroupBox(NewPreset); + subcategoryNPGroupBox->setObjectName(QString::fromUtf8("subcategoryNPGroupBox")); + subcategoryNPGroupBox->setGeometry(QRect(10, 50, 120, 50)); + subcategoryNPLineEdit = new QLineEdit(subcategoryNPGroupBox); + subcategoryNPLineEdit->setObjectName(QString::fromUtf8("subcategoryNPLineEdit")); + subcategoryNPLineEdit->setGeometry(QRect(10, 20, 100, 21)); + subcategoryNPLineEdit->setFont(font); + subcategoryNPLineEdit->setMaxLength(12); + categoryNPGroupBox = new Q3GroupBox(NewPreset); + categoryNPGroupBox->setObjectName(QString::fromUtf8("categoryNPGroupBox")); + categoryNPGroupBox->setGeometry(QRect(10, 100, 120, 50)); + categoryNPLineEdit = new QLineEdit(categoryNPGroupBox); + categoryNPLineEdit->setObjectName(QString::fromUtf8("categoryNPLineEdit")); + categoryNPLineEdit->setGeometry(QRect(10, 20, 100, 21)); + categoryNPLineEdit->setFont(font); + categoryNPLineEdit->setMaxLength(12); + bankNPGroupBox = new Q3GroupBox(NewPreset); + bankNPGroupBox->setObjectName(QString::fromUtf8("bankNPGroupBox")); + bankNPGroupBox->setGeometry(QRect(140, 0, 60, 50)); + bankNPSpinBox = new QSpinBox(bankNPGroupBox); + bankNPSpinBox->setObjectName(QString::fromUtf8("bankNPSpinBox")); + bankNPSpinBox->setGeometry(QRect(10, 20, 40, 21)); + QFont font1; + font1.setFamily(QString::fromUtf8("Zero Threes")); + font1.setItalic(true); + bankNPSpinBox->setFont(font1); + bankNPSpinBox->setMaximum(128); + bankNPSpinBox->setMinimum(1); + progNPGroupBox = new Q3GroupBox(NewPreset); + progNPGroupBox->setObjectName(QString::fromUtf8("progNPGroupBox")); + progNPGroupBox->setGeometry(QRect(200, 0, 60, 50)); + progNPSpinBox = new QSpinBox(progNPGroupBox); + progNPSpinBox->setObjectName(QString::fromUtf8("progNPSpinBox")); + progNPSpinBox->setGeometry(QRect(10, 20, 40, 21)); + progNPSpinBox->setFont(font1); + progNPSpinBox->setMaximum(128); + progNPSpinBox->setMinimum(1); + WantButtonGroup = new Q3ButtonGroup(NewPreset); + WantButtonGroup->setObjectName(QString::fromUtf8("WantButtonGroup")); + WantButtonGroup->setGeometry(QRect(140, 50, 119, 100)); + CancelPushButton = new QPushButton(WantButtonGroup); + CancelPushButton->setObjectName(QString::fromUtf8("CancelPushButton")); + CancelPushButton->setGeometry(QRect(10, 60, 100, 30)); + OkPushButton = new QPushButton(WantButtonGroup); + OkPushButton->setObjectName(QString::fromUtf8("OkPushButton")); + OkPushButton->setGeometry(QRect(10, 20, 100, 30)); + + retranslateUi(NewPreset); + QObject::connect(OkPushButton, SIGNAL(clicked()), NewPreset, SLOT(accept())); + QObject::connect(CancelPushButton, SIGNAL(clicked()), NewPreset, SLOT(reject())); + + QMetaObject::connectSlotsByName(NewPreset); + } // setupUi + + void retranslateUi(QDialog *NewPreset) + { + NewPreset->setWindowTitle(QApplication::translate("NewPreset", "New preset", 0, QApplication::UnicodeUTF8)); + nameNPGroupBox->setTitle(QApplication::translate("NewPreset", "Preset Name", 0, QApplication::UnicodeUTF8)); + nameNPLineEdit->setText(QApplication::translate("NewPreset", "INIT VOICE", 0, QApplication::UnicodeUTF8)); + subcategoryNPGroupBox->setTitle(QApplication::translate("NewPreset", "Subcategory", 0, QApplication::UnicodeUTF8)); + subcategoryNPLineEdit->setText(QApplication::translate("NewPreset", "NONE", 0, QApplication::UnicodeUTF8)); + categoryNPGroupBox->setTitle(QApplication::translate("NewPreset", "Category", 0, QApplication::UnicodeUTF8)); + categoryNPLineEdit->setText(QApplication::translate("NewPreset", "NONE", 0, QApplication::UnicodeUTF8)); + bankNPGroupBox->setTitle(QApplication::translate("NewPreset", "Bank", 0, QApplication::UnicodeUTF8)); +#ifndef QT_NO_TOOLTIP + bankNPSpinBox->setProperty("toolTip", QVariant(QApplication::translate("NewPreset", "Bank numerous", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP + progNPGroupBox->setTitle(QApplication::translate("NewPreset", "Prog", 0, QApplication::UnicodeUTF8)); +#ifndef QT_NO_TOOLTIP + progNPSpinBox->setProperty("toolTip", QVariant(QApplication::translate("NewPreset", "Program numerous", 0, QApplication::UnicodeUTF8))); +#endif // QT_NO_TOOLTIP + WantButtonGroup->setTitle(QApplication::translate("NewPreset", "New preset", 0, QApplication::UnicodeUTF8)); + CancelPushButton->setText(QApplication::translate("NewPreset", "&Cancel", 0, QApplication::UnicodeUTF8)); + CancelPushButton->setShortcut(QApplication::translate("NewPreset", "Alt+C", 0, QApplication::UnicodeUTF8)); + OkPushButton->setText(QApplication::translate("NewPreset", "&Ok", 0, QApplication::UnicodeUTF8)); + OkPushButton->setShortcut(QApplication::translate("NewPreset", "Alt+O", 0, QApplication::UnicodeUTF8)); + } // retranslateUi + + +protected: + enum IconID + { + image0_ID, + unknown_ID + }; + static QPixmap qt_get_icon(IconID id) + { + static const char* const image0_data[] = { +"479 360 270 2", +"cl c #6a3039", +"ch c #733039", +"cb c #733439", +"bY c #7b3439", +"ca c #7b3441", +"bV c #7b3839", +"b0 c #7b3841", +"bS c #833839", +"bO c #833841", +"bX c #833c41", +"bK c #8b3841", +"bF c #8b3c41", +"bL c #8b3c4a", +"bZ c #8b4041", +"b5 c #8b404a", +"bx c #943c41", +"bG c #943c4a", +"bv c #944041", +"bA c #94404a", +"b4 c #94444a", +"bh c #9c4041", +"be c #9c404a", +"bj c #9c444a", +"b8 c #9c484a", +"cd c #9c4852", +"ci c #9c5d5a", +"ce c #9c5d62", +"cj c #9c615a", +"cf c #9c6162", +"#a c #a43841", +"b. c #a4404a", +"a5 c #a4444a", +"bd c #a44452", +"bq c #a4484a", +"bo c #a44852", +"c# c #a44c4a", +"cc c #a44c52", +"bP c #a46162", +"b1 c #a46562", +".2 c #ac3841", +".1 c #ac3c41", +"aV c #ac444a", +"a9 c #ac4452", +"aR c #ac484a", +"a1 c #ac4852", +"b7 c #ac4c4a", +"bs c #ac4c52", +"c. c #ac5052", +"bN c #ac6162", +"bC c #ac6562", +"bE c #ac656a", +".Y c #b43c41", +".0 c #b43c4a", +"#c c #b44041", +".Z c #b4404a", +"aD c #b4484a", +"aF c #b44852", +"aO c #b44c52", +"bz c #b44c5a", +"br c #b45052", +"bB c #b4505a", +"b2 c #b45552", +"b3 c #b4555a", +"bQ c #b46562", +"bt c #b4656a", +"cg c #b46962", +"bb c #b4696a", +"## c #bd4041", +".X c #bd404a", +".W c #bd444a", +"ay c #bd484a", +"ax c #bd4852", +"as c #bd4c52", +"aP c #bd4c5a", +"aQ c #bd5052", +"aX c #bd505a", +"bu c #bd5552", +"bw c #bd555a", +"bW c #bd595a", +"a8 c #bd696a", +"bk c #bd6973", +"a0 c #bd6d6a", +"a2 c #bd6d73", +".U c #c5444a", +".V c #c54452", +"#s c #c5484a", +"#v c #c54852", +"ad c #c54c52", +"av c #c54c5a", +"ak c #c55052", +"aq c #c5505a", +"aN c #c5555a", +"bn c #c5595a", +"by c #c55962", +"bR c #c55d5a", +"bU c #c55d62", +".3 c #c5656a", +".# c #c5696a", +"a3 c #c56d6a", +"aJ c #c56d73", +"aE c #c57173", +"#. c #cd444a", +"#n c #cd4452", +".T c #cd484a", +".S c #cd4852", +"#A c #cd4c52", +"#3 c #cd5052", +"a. c #cd505a", +"ah c #cd555a", +"aL c #cd595a", +"aZ c #cd5962", +"bm c #cd5d5a", +"bg c #cd5d62", +"bJ c #cd6162", +"b9 c #cd6562", +".a c #cd696a", +"Qt c #cd6973", +"#g c #cd6d6a", +".b c #cd6d73", +"b6 c #cd716a", +"at c #cd7173", +"az c #cd717b", +"an c #cd7573", +"au c #cd757b", +".9 c #d5484a", +".R c #d54852", +".Q c #d54c52", +"#G c #d54c5a", +"#E c #d55052", +"#U c #d5505a", +"#1 c #d5555a", +"ag c #d5595a", +"ap c #d55962", +"aK c #d55d5a", +"aI c #d55d62", +"ba c #d56162", +"bl c #d5616a", +"bD c #d56562", +"bH c #d5656a", +"bT c #d5696a", +".4 c #d56d6a", +".c c #d56d73", +"ck c #d5716a", +"#i c #d57173", +"#r c #d5717b", +"al c #d57573", +"aa c #d5757b", +"#9 c #d5797b", +".P c #de4c52", +"#f c #de4c5a", +".N c #de5052", +".O c #de505a", +"#J c #de555a", +"#Y c #de595a", +"#5 c #de5962", +"ai c #de5d5a", +"aj c #de5d62", +"aH c #de6162", +"aW c #de616a", +"a7 c #de6562", +"a6 c #de656a", +"bp c #de696a", +"bM c #de6973", +"bI c #de6d6a", +".d c #de6d73", +".e c #de7173", +".f c #de717b", +"#o c #de7573", +"#l c #de757b", +"#C c #de797b", +"#6 c #de7983", +"#7 c #de7d7b", +"#8 c #de7d83", +".8 c #e65052", +".M c #e6505a", +".L c #e6555a", +"#M c #e6595a", +"#R c #e65962", +"#0 c #e65d5a", +"#Z c #e65d62", +"ae c #e66162", +"ao c #e6616a", +"aC c #e66562", +"aA c #e6656a", +"aY c #e6696a", +"b# c #e66973", +"bc c #e66d6a", +"bf c #e66d73", +".i c #e67173", +".g c #e6717b", +".j c #e67573", +".h c #e6757b", +"#p c #e6797b", +"#B c #e67983", +"#H c #e67d7b", +"#F c #e67d83", +".J c #ee555a", +".I c #ee595a", +".K c #ee5962", +"#N c #ee5d5a", +"#P c #ee5d62", +"#X c #ee6162", +"#4 c #ee616a", +"ab c #ee6562", +"ac c #ee656a", +"aw c #ee696a", +"aG c #ee6973", +"aM c #ee6d6a", +"aS c #ee6d73", +"a4 c #ee7173", +"bi c #ee717b", +".5 c #ee7573", +".k c #ee757b", +".l c #ee797b", +"#m c #ee7983", +"#u c #ee7d7b", +"#t c #ee7d83", +"#K c #ee8183", +"#2 c #ee818b", +".H c #f6595a", +".G c #f65962", +"#d c #f65d5a", +".F c #f65d62", +"#L c #f66162", +"#T c #f6616a", +"#V c #f66562", +"#W c #f6656a", +"a# c #f6696a", +"af c #f66973", +"am c #f66d6a", +"ar c #f66d73", +"aB c #f67173", +"aU c #f6717b", +"aT c #f67573", +".6 c #f6757b", +".m c #f6797b", +".n c #f67983", +"#h c #f67d7b", +"#e c #f67d83", +"#x c #f68183", +"#I c #f6818b", +"#Q c #f68583", +"#O c #f6858b", +".E c #ff5d62", +".C c #ff6162", +".D c #ff616a", +".7 c #ff6562", +".B c #ff656a", +".A c #ff696a", +".z c #ff6973", +".y c #ff6d6a", +".x c #ff6d73", +".v c #ff7173", +".w c #ff717b", +".u c #ff7573", +".t c #ff757b", +".q c #ff797b", +".o c #ff7983", +".r c #ff7d7b", +".p c #ff7d83", +".s c #ff8183", +"#b c #ff818b", +"#k c #ff8583", +"#j c #ff858b", +"#q c #ff898b", +"#w c #ff8994", +"#z c #ff8d8b", +"#y c #ff8d94", +"#D c #ff9194", +"#S c #ff919c", +"Qt.#Qt.aQt.a.b.a.c.a.c.a.c.c.c.c.c.c.c.c.d.c.e.c.e.d.e.d.f.e.e.e.g.e.g.e.g.e.h.e.h.i.h.i.h.i.h.j.k.h.k.h.k.k.k.k.k.k.l.k.l.k.m.k.m.k.m.k.m.m.m.m.n.m.m.m.n.m.n.m.o.m.p.m.p.m.p.m.p.q.p.q.p.q.p.q.p.r.p.r.p.p.p.r.p.p.p.r.p.p.p.p.p.p.p.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.p.p.r.p.p.p.r.p.p.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.p" +".q.o.q.o.q.o.q.q.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.B.B.C.B.D.B.C.B.C.D.C.D.C.D.C.D.E.D.E.D.E.C.F.C.F.E.F.E.F.F.F.F.G.F.H.F.H.G.I.G.I.G.I.G.J.K.J.K.J.I.L.J.L.J.L.J.M.L.M.L.M.L.N.M.N.M.N.O.P.O.P.O.Q.P.Q.P.Q.Q.R.Q.S.Q.T.R.T.S.T.S.U.S.U.V.U.U.W.U.X.W.X.X.X.X.Y.Z.Y.0.1.0.2.1", +".3.a.#.a.aQt.aQt.a.b.a.c.a.c.a.c.4.c.4.c.c.d.c.d.c.e.c.e.d.e.d.e.e.e.e.e.e.g.e.i.e.h.e.h.i.h.i.h.i.k.i.k.j.k.j.k.k.k.5.k.k.l.k.l.k.m.k.m.k.m.k.m.6.m.m.m.m.m.m.m.m.o.m.q.m.o.m.r.m.p.m.p.q.p.q.p.q.p.q.p.q.p.r.p.r.p.r.p.r.p.r.p.r.p.r.p.r.p.r.p.p.p.r.p.p.s.r.s.p.s.r.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.r.s.p.s.r.s.p.p.r.p.p.p.r.p.r.p.r.p.r.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.p.q.p.q.p.q.q.q.o.q" +".q.q.q.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.x.A.z.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.A.B.B.B.B.B.B.B.B.7.B.C.B.C.B.C.B.C.D.C.D.C.C.C.D.C.C.E.C.E.C.E.C.F.E.F.E.F.F.F.F.H.F.H.F.H.F.H.G.I.G.I.G.J.I.J.I.J.I.J.J.L.J.L.J.L.L.M.L.8.L.8.M.N.M.N.M.P.N.P.O.Q.N.Q.P.Q.Q.Q.Q.9.Q.S.R.T.S.T.S#..S.U.S.U.U.U.U.X.U.X.U##.X##.X.Y.Z.Y.0.1.Y.2.1#a", +"Qt.#Qt.a.b.a.c.a.c.a.cQt.c.c.c.c.c.c.d.c.e.c.e.c.e.d.f.e.e.e.g.e.g.e.g.e.h.e.h.i.h.i.h.i.h.j.k.h.k.h.k.k.k.k.l.k.l.k.l.k.l.k.m.k.m.l.n.m.m.m.n.m.n.m.n.m.n.m.p.m.p.m.p.m.p.m.p.q.p.q.p.q.p.r.p.p.p.r.p.p.p.r.p.p.p.p.p.p.p.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.p.p.p.p.r.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p" +".q.p.q.p.q.o.q.o.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.B.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.B.B.C.B.D.B.C.B.C.D.C.D.C.D.C.D.E.C.E.D.E.C.F.E.F.E.F.E.F.F.G.F.G.F.H.F.H.G.I.G.I.G.I.G.J.K.J.K.J.J.L.J.L.J.L.J.M.L.M.L.M.M.N.M.N.O.N.O.P.O.Q.O.Q.P.Q.Q.Q.Q.R.Q.S.R.T.S.T.S.U.S.U.S.U.V.U.U.X.U.X.W##.X#c.X.Y.Z.Y.0.1.1", +".#.a.#Qt.aQt.a.b.a.b.a.c.a.c.4.c.4.c.c.c.c.c.c.e.c.e.d.e.d.e.e.e.e.e.e.g.e.i.e.h.e.h.i.h.i.h.i.k.j.k.j.k.j.k.k.k.5.k.k.l.k.l.k.m.k.m.k.m.k.m.m.m.l.m.m.m.m.m.m.o.m.q.m.p.m.p.m.p.m.p.q.p.q.p.q.p.q.p.r.p.r.p.r.p.r.p.r.p.r.p.r.p.r.p.p.p.r.p.p.s.r.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.r.s.p.s.r.s.p.p.r.p.p.p.r.p.r.p.r.p.r.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.p.q.q.q" +".o.q.q.q.q.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.x.A.z.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.A.B.B.B.B.7.B.B.B.7.B.C.B.C.B.C.B.C.D.C.D.C.C.C.D.E.C.E.C.E.C.E.E.F.E.F.E#d.F.G.F.H.F.H.F.I.G.I.G.I.G.I.G.J.I.J.I.J.I.J.J.L.J.L.J.8.L.M.L.8.L.N.M.N.M.N.O.P.N.P.N.Q.P.Q.P.Q.Q.R.Q.T.Q.T.R.T.S.T.S.U.T.U.S.U.U.U.U.X.U.X.X##.X#c.X.Y.Z.Y.Y.1.1.2", +"Qt.aQt.a.b.a.c.a.cQt.c.b.c.c.c.c.d.c.e.c.e.c.e.c.f.e.e.e.f.e.f.e.g.e.h.e.h.i.h.i.h.i.h.j.k.h.k.h.k.h.k.h.l.k.l.k.l.k.l.k.m.k.m.l.n.l.m.l.n.m.n.m.n.m#e.m.p.m.p.m.p.m.p.m.p.q.p.q.p.r.p.r.p.p.p.r.p.p.p.p.p.p.p.p.p.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.s.s.s.s.s.s.s.s.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p" +".q.p.q.p.q.p.q.o.q.o.q.o.q.o.q.q.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.t.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.z.A.z.A.z.A.z.A.z.B.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.D.B.C.B.D.B.C.B.C.D.C.D.C.D.C.D.E.C.E.D.E.C.F.E.F.E.F.E.F.F.G.F.G.F.H.F.H.G.I.G.I.G.I.G.J.I.J.K.J.J.L.J.L.J.L.L.M.L.8.L.M.M.N.M.N.O.P.O.P.O.Q#f.Q.P.Q.Q.R.Q.S.Q.S.R.T.S.T.S.U.S.U.U.U.V.U.U.X.U.X.X#c.X.Y.Z.Y.Z.1.Y", +".#Qt.#Qt.a.b.a.b.a.c.a.c#g.c.4.c.c.c.c.c.c.e.c.e.c.e.c.e.e.e.e.e.e.g.e.i.e.h.e.h.i.h.i.h.i.h.j.k.j.k.j.k.h.k.j.k.k.l.k.l.k.m.k.m.k.m.k.m.l.m.l.m.m.m.m.m.m.o.m#h.m.p.m.p.m.p.m.p.q.p.q.p.q.p.r.p.r.p.r.p.r.p.r.p.r.p.r.p.p.p.r.p.p.s.r.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.r.s.p.s.r.s.p.p.r.p.p.p.r.p.r.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.p.q" +".r.q.o.q.q.q.o.q.q.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.x.A.z.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.A.B.B.B.B.7.B.B.B.C.B.C.B.C.B.C.B.C.D.C.D.C.C.C.D.E.C.E.C.E.C.E.E.F.E.F.E#d.F.G.F.H.F.H.F.I.G.I.G.I.G.I.G.J.I.J.I.J.J.L.J.L.J.L.J.8.L.M.L.N.M.N.M.N.M.N.O.P.N.P.N.Q.P.Q.P.Q.Q.R.Q.T.Q.T.R.T.S#..S.U.T.U#..U.U.U.U.X.W.X.X#c.X.Y.X.Y#c.Y.Y.1", +"Qt.a.b.a.b.a.cQt.c#g.c.c.c.c.c.c#i.c.e.c.e.c.f.e.e.e.f.e.f.e.g.e.h.e.h.i.h.i.h.g.h.j.k.h.k.h.k.h.k.h.l.k.l.k.l.k.l.k.m.k.m.l.n.l.m.l.n.m.n.m.n.m#e.m.p.m.p.m.p.m.p.m.p.q.p.r.p.p.p.r.p.p.p.r.p.p.p.p.p.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.s.s.s.s.s.s.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s#b.s#b.s#b.s#b.s#b.s#b.s#b.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.p.p.r.p.p.p.r.p.p.p.r.p.q.p.q.p" +".q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.x.x.A.x.z.x.A.x.A.x.A.z.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.A.B.B.B.B.B.B.B.B.D.B.C.B.C.B.C.D.C.D.C.D.C.D.C.D.E.C.E.D.E.C.F.E.F.E.F.E.F.F.G.F.G.F.H.G.H.G.I.G.I.K.J.K.J.I.J.K.J.J.L.J.L.L.M.L.M.L.8.L.N.M.N.M.N.O.P.O.P.N.Q#f.Q.Q.Q.Q.R.Q.S.Q.S.S.T.S#..S.U.S.U.U.U.U.X.U.X.W.X.X#c.X.Y.Z.Y.0", +".#Qt.aQt.a.b.a.c.a.c.a.c#g.c.c.c.c.c.c.e.c.e.c.e.c.e.e.e.e.e.e.g.e.i.e.h.e.h.i.h.i.h.i.h.j.h.j.k.j.k.h.k.j.l.k.l.k.l.k.m.k.m.k.m.l.m.l.m.l.m.m.n.m.m.m.n.m#h.m.p.m.p.m.p.m.p.q.p.q.p.r.p.r.p.r.p.r.p.r.p.r.p.p.p.r.p.p.s.r.s.p.s.r.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.r.s.p.s.r.p.p.p.r.p.p.p.r.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q" +".p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.x.A.z.A.A.A.z.A.A.A.A.B.A.B.A.B.A.B.A.B.B.B.B.7.B.B.B.C.B.C.B.C.B.C.D.C.D.C.D.C.C.C.D.E.C.E.C.F.C.F.E.F.E.F.E#d.F.G.F.H.F.H.F.I.G.I.G.I.H.J.G.J.I.J.I.L.J.L.J.L.J.L.L.8.L.8.L.N.M.N.M.N.O.P.O.P.N.P.P.Q.P.Q.Q.R.Q.R.Q.T.R.T.R.T.S#..S.U.T.U.U.U.U.X.U##.W##.X#c.X.Y.Z.Y.Y.1", +".b.a.b.a.cQt.c#g.c.c.c.c.c.c#i.c.e.c.e.c.f.e.e.e.f.e.f.e.g.e.h.e.h.i.h.i.h.g.h.j.k.h.k.h.k.h.k.h.l.k.l.k.l.k.l.k.m.l.m.l.n.l.m.l.n.m.n.m.n.m#e.m.p.m.p.m.p.m.p.m.p.r.p.r.p.p.p.r.p.p.p.p.p.p.p.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.s.s.s.s.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s#b.s#b.s#b.s#b.s#b.s#b.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s#b.s#b.s#b.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.p.p.r.p.r.p" +".q.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.x.x.A.x.z.x.A.x.A.x.A.z.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B.B.B.D.B.C.B.C.B.C.D.C.D.C.D.C.D.E.D.E.C.E.C.E.E.F.E.F.E.F.E.G.F.H.F.G.F.I.G.I.G.I.G.I.K.J.K.J.I.J.J.L.J.L.J.L.L.M.L.M.L.N.M.N.M.N.M.P.O.P.O.P.P.Q.P.Q.Q.R.Q.R.Q.T.R.S.S.T.S#..S.U.S.U.U.U.U.X.U.X.X.X.X#c.X.Y.Z", +".aQt.a.b.a.c.a.c.a.c#g.c.c.c.4.c.c.e.c.e.c.e.c.e.e.e.e.e.e.g.e.i.e.h.e.h.i.h.i.h.i.h.j.h.j.k.j.k.h.k.j.l.k.l.k.l.k.l.k.l.k.m.l.m.l.m.l.m.m.n.m.m.m#e.m#e.m.p.m.p.m.p.m.p.q.p.q.p.r.p.r.p.r.p.r.p.r.p.r.p.p.p.r.s.p.s.r.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.r.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q" +".p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.x.A.z.A.A.A.z.A.A.A.A.B.A.B.A.B.A.B.B.B.B.B.B.7.B.B.B.C.B.C.B.C.B.C.D.C.D.C.D.C.C.E.C.E.C.E.C.F.E.F.E.F.E.F.E.H.F.H.F.H.F.H.G.I.G.I.G.I.I.J.K.J.I.J.I.L.J.L.J.L.L.M.L.8.L.8.L.N.M.N.M.N.O.P.O.P.N.Q.P.Q.Q.Q.Q.R.Q.R.Q.T.R.T.S.T.S#..S.U.U.U.U.U.U.X.U##.X##.X#c.X.Y.Z.1", +".b.a.cQt.c#g.c.c.c.c.c.c#i.c.e.c.e.c.f.e.e.e.f.e.f.e.g.e.h.e.h.e.h.e.h.g.h.j.h.h.k.h.k.h.k.h.l.k.l.k.l.k.l.k.m.l.m.l.n.l.m.l.n.m.n.m#e.m#e.m.p.m.p.m.p.m.p.m.p.r.p.r.p.p.p.r.p.p.p.p.p.p.p.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.s.s.s.s.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s#b.s#b.s#b.s#b.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s#b.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.p.p.r.p.p.p.r.p" +".r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.q.o.t.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B.B.B.D.B.C.B.C.B.C.D.C.D.C.D.C.D.E.D.E.C.E.C.E.E.F.E.F.E.F.E.G.F.H.F.G.F.I.G.I.G.I.G.J.K.J.K.J.I.L.J.L.J.L.J.M.L.M.L.M.L.N.M.N.M.N.O.P.O.P.O.Q.P.Q.P.Q.Q.R.Q.S.Q.T.R.T.S.T.S.U.S.U.V.U.U.W.U.X.W.X.X.Z.X.Y.Z", +".a.b.a.c.a.c.a.c#g.c.c.c.4.c.c.e.c.e.c.e.c.e.e.e.e.e.e.f.e.e.e.h.e.h.e.h.i.h.i.h.j.h.j.k.j.k.h.k.j.l.k.l.k.l.k.l.k.l.k.m.l.m.l.m.l.m.m.n.m.m.m#e.m#e.m.p.m.p.m.p.m.p.q.p.r.p.r.p.r.p.r.p.r.p.p.p.r.p.p.s.r.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.p.p.r.p.r.p.r.p.r.p.r.p.r.p.q.p.q" +".p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.x.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.A.B.B.B.B.B.B.7.B.C.B.C.B.C.B.C.B.C.D.C.D.C.D.C.C.E.C.E.C.E.C.F.E.F.E.F.E.F.E.H.F.H.F.H.F.H.G.I.G.I.G.I.I.J.I.J.I.J.J.L.J.L.J.L.L.M.L.8.L.8.M.N.M.N.M.P.N.P.O.Q.N.Q.P.Q.Q.Q.Q.9.Q.S.R.T.S.T.S#..S.U.S.U.U.U.U.X.U.X.U##.X##.X.Y.Z.Y", +".cQt.c#g.c.b.c.c.c.c#i.c.e.c.e.c.f#i.e.e.f.e.f.e.g.e.h.e.h.e.h.e.h.g.h.j.h.h.h.h.k.h.k.h.l.k.l.k.l.k.l.k.m.l.m.l.n.l.m.l.n.m.n.m#e.m#e.m.p.m.p.m.p.m.p#h.p.p.p.r.p.p.p.r.p.p.p.p.p.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.s.s.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s#b.s#b.s#b.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.p.p.r.p.p.p" +".r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.x.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B.C.B.D.B.C.B.C.B.C.D.C.D.C.D.C.D.E.D.E.C.E.C.F.E.F.E.F.E.F.E.G.F.H.F.H.G.I.G.I.G.I.G.J.K.J.K.J.I.L.J.L.J.L.J.M.L.M.L.M.M.N.M.N.O.N.O.P.O.Q.O.Q.P.Q.Q.Q.Q.S.Q.S.R.T.S.T.S.U.S.U.S.U.V.U.U.X.U.X.X##.X#c.X", +".a.b.a.b.a.c#g.c.c.c.4.c.c#i.c#i.c.e.c.e.e.e.e.e.e.f.e.e.e.h.e.h.e.h.e.h.i.h.j.h.j.k.j.k.h.k.j.l.k.l.k.l.k.l.k.l.l.m.l.m.l.m.l.m.m.n.m.m.m#e.m#e.m.p.m.p.m.p.m.p.r.p#h.p.r.p.r.p.r.p.r.p.p.p.r.s.p.s.r.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s#b.s.s.s#b.s.s.s#j.s#k.s#j.s#k.s#j.s#k.s#j.s#k.s#j.s#k.s#j.s#k.s#j.s#k.s#j.s#k.s#b.s.s.s#b.s.s.s#b.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.p.p.r.p.r.p.r.p.r.p.r.p.r.p.q" +".p.q.p.q.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.y.x.y.x.A.x.A.x.A.x.A.z.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.A.B.B.B.B.B.B.7.B.C.B.C.B.C.B.C.B.C.D.C.D.C.D.C.C.E.C.E.C.E.C.F.E.F.E.F.E.F.E.H.F.H.F.H.F.H.G.I.G.I.G.J.I.J.I.J.I.J.J.L.J.L.J.8.L.M.L.8.L.8.M.N.M.N.M.P.N.P.N.Q.P.Q.P.Q.Q.R.Q.T.Q.T.R.T.S.T.S.U.T.U#..U.U.U.U.X.U.X.X##.X#c.X.Y", +".c#g.c.b.c.b.c.c#i.c.e.c.e.c.f.c.e#i.f.e.f.e.f.e.h.e.h.e.h.e.h.g.h.j.h.h.h.h.k.h.k.h.l.k.l.k.l.k.l.k.l.l.l.l.n.l.n.l.n.m.n.m#e.m#e.m#e.m#e.m.p.m.p#h.p.p.p.r.p.p.p.p.p.p.p.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.s.s.s.s.s.s.s#b.s.s.s#b.s.s.s#b.s#b.s#b.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p" +".p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B.C.B.D.B.C.B.C.D.C.D.C.D.C.D.E.C.E.D.E.C.F.E.F.E.F.E.F.F.G.F.G.F.H.F.H.G.I.G.I.G.I.G.J.I.J.K.J.J.L.J.L.J.L.L.M.L.8.L.M.M.N.M.N.O.P.O.P.N.Q#f.Q.Q.Q.Q.R.Q.S.Q.S.S.T.S.T.S.U.S.U.U.U.U.U.U.X.U.X.X#c.X", +".a.b.a.c#g.c.b.c.4.c.c#i.c#i.c.e.c.e.c.e#i.e.e.f.e.e.e.h.e.h.e.h.e.h.i.h.j.h.j.k.j.k.h.k.h.l.k.l.k.l.k.l.k.l.l.m.l.m.l.m.l.m.m.n.m#h.m#e.m#e.m.p.m.p.m.p.m.p#h.p#h.p.r.p.r.p.r.p.r.p.p.s.r.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s#b.s.s.s#b.s#k.s#j.s#k.s#j.s#k.s#j.s#k.s#j.s#k.s#j.s#k.s#j.s#k.s#j.s#k.s#j.s#k.s#j.s#k.s#j.s#k.s#j.s#k.s#j.s#k.s#j.s#k.s#j.s.s.s#b.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.r.p.r" +".p.r.p.q.p.q.p.q.p.q.p.q.p.q.r.q.o.q.q.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.x.A.z.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.B.B.B.B.B.B.B.7.B.C.B.C.B.C.B.C.D.C.D.C.C.C.D.E.C.E.C.E.C.E.E.F.E.F.E#d.F.G.F.H.F.H.F.I.G.I.G.I.G.I.G.J.I.J.I.J.I.J.J.L.J.L.J.8.L.M.L.N.M.N.M.N.O.N.O.P.N.P.N.Q.P.Q.P.Q.Q.R.Q.T.Q.T.R.T.S#..S.U.T.U.U.U.U.U.U.X.W.X.X#c.X.Y", +".c.b.c.b.c.c.c.c#i.c#i.c.f.c.e#i.f.e.f.e.f.e#l.e.h.e.h.e.h.g.h.j.h.h.h.h.k.h.k.h.l.h.l.h.l.k.l.k#m.l.l.l.n.l.n.l.n.m#e.m#e.m#e.m#e.m#e.m.p.m.p#h.p#e.p#h.p.p.p.p.p.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.s.s.s.s.s#b.s.s.s#b.s.s.s#b.s#b.s#b.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p" +".r.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.B.B.C.B.D.B.C.B.C.D.C.D.C.D.C.D.E.C.E.D.E.C.F.E.F.E.F.E.F.F.G.F.G.F.H.F.H.G.I.G.I.G.J.K.J.I.J.K.J.J.L.J.L.L.M.L.M.L.N.L.N.M.N.M.N.O.P.O.P.N.Q.P.Q.Q.Q.Q.R.Q.S.Q.S.S.T.S#..S.U.S.U.U.U.U.X.U.X.W.X.X", +".a.c#g.c.b.c#g.c.c#i.c#i.c.e.c.e.c.e#i.e.e.f.e.e.e.h.e.h.e.h.e.h.i.h.j.h.j.h.j.h.h.k.h.l.h.l.h.l.k.l.k.l.l.m.l.m.l.m.l.m.m.n.m#h.m#e.m#e.m.p.m.p.m.p#h.p#h.p#h.p.r.p.r.p.p.p.r.p.p.s.r.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s#b.s.s.s#j.s#k.s#j.s#k.s#j.s#k.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#k.s#j.s#k.s#j.s#k.s#j.s#k.s#b.s.s.s#b.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.p.p.r.p.r.p.r" +".p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.r.q.o.q.q.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.x.A.z.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.B.B.B.7.B.B.B.7.B.C.B.C.B.C.B.C.D.C.D.C.C.C.D.E.C.E.C.E.C.E.E.F.E.F.E#d.F.G.F.H.F.H.F.I.G.I.G.I.G.I.G.J.I.J.I.L.J.L.J.L.J.L.L.8.L.8.L.N.M.N.M.N.O.P.O.P.N.P.P.Q.P.Q.Q.R.Q.R.Q.T.R.T.S.T.S#..S.U.T.U.U.U.U.X.U##.X##.X#c", +".c.b.c.c.c.c#i.c#i.c.e.c.e#i.f.e.f.e.f.e#l.e.h.e.h.e.h.g.h.j.h.h.h.h.k.h.k.h.l.h.l.h.l.k.l.k#m.l.l.l.n.l.n.l.n.l#e.l#e.m#e.m#e.m#e.m.p#h.p#h.p#e.p#h.p.p.p.p.p.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.s.s.s.s.s.s.s#b.s.s.s#b.s.s.s#b.s#b.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s#b.s.s.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p" +".p.p.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.B.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.D.B.C.B.C.B.C.B.C.D.C.D.C.D.C.D.E.C.E.D.E.C.F.E.F.E.F.E.G.F.H.F.G.F.H.G.I.G.I.G.I.K.J.K.J.I.J.J.L.J.L.J.L.L.M.L.M.L.N.M.N.M.N.M.P.O.P.O.Q.P.Q.P.Q.Q.R.Q.R.Q.T.R.T.S.T.S.U.S.U#n.U.U.W.U.X.W.X.X", +".a.c.b.c#g.c.c.c.c#i.c.e.c.e.c.e#i.e.e.f.e.e.e.h.e.h.e.h.e.h.i.h.j.h.j.h.j.h.h.k.h.l.h.l.h.l.k.l.k.l.l.m.l.m.l.m.l.m.l.n.l#h.m#e.m#e.m.p.m.p.m.p#h.p#h.p#h.p.r.p.r.p.p.p.r.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s#b.s.s.s#j.s#k.s#j.s#k.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#k.s#j.s#k.s#j.s#k.s#b.s.s.s#b.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.p.p.r.p.r" +".p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.o.q.q.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.y.x.x.x.y.x.y.x.A.x.A.x.A.x.A.x.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.A.B.B.B.B.7.B.B.B.C.B.C.B.C.B.C.D.C.D.C.D.C.C.C.D.E.C.E.C.F.C.F.E.F.E.F.E#d.F.H.F.H.F.H.G.I.G.I.G.I.I.J.K.J.I.J.I.L.J.L.J.L.L.M.L.8.L.8.M.N.M.N.M.N.O.P.O.Q.N.Q.P.Q.Q.Q.Q.R.Q.S.Q.T.S.T.S#..S.U.S.U.U.U.U.W.U.X.U##.X##", +".c.c.c.c#i.c#i.c.e.c.e#i.f.e.f.e.f.e#l.e.h.e.h.e.h.e.h#o.h.h.h.h.h.h.k.h.l.h.l.h.l.k.l.k#m.l.l.l.n.l.n.l.n.l#e.l#e.m#e.m#e.m#e.m.p#h.p#h.p#e.p#h.p.p.p.p.p.p.s.p.s.p.s.p.s.p.s.p.s.p.s.s.s.s.s.s#b.s.s.s#b.s.s.s#b.s#b.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s#b.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s" +".p.p.p.p.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.A.B.B.B.B.B.B.B.B.D.B.C.B.C.B.C.D.C.D.C.D.C.D.E.D.E.C.E.C.E.E.F.E.F.E.F.E.G.F.H.F.G.F.I.G.I.G.I.G.J.K.J.K.J.I.L.J.L.J.L.J.M.L.M.L.M.L.N.M.N.M.N.O.P.O.Q.O.Q.P.Q.P.Q.Q.R.Q.S.Q.T.R.T.S.U.S.U.S.U.V.U.U.X.U.X.W", +"#g.c#g.c.c.c.c#i.c#i.c.e.c.e#i.e.e.f.e.e.e#l.e#l.e.h.e.h.e.h.j.h.j.h.j.h.h.k.h.l.h.l.h.l.k.l.k.l.l.l.l.l.l.m.l.m.l.n.l#e.m#e.m#e.m#e.m#e.m.p#h.p#h.p#h.p.r.p.r.p.p.p.r.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s#b.s.s.s#j.s#k.s#j.s#k.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#k.s#j.s#k.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.r.p.p.p.r" +".p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.y.x.x.x.y.x.y.x.A.x.A.x.A.x.A.z.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.B.B.B.B.B.7.B.B.B.C.B.C.B.C.B.C.D.C.D.C.D.C.C.E.C.E.C.E.C.F.E.F.E.F.E.F.E.H.F.H.F.H.F.H.G.I.G.I.G.I.I.J.I.J.I.J.J.L.J.L.J.L.L.M.L.8.L.8.M.N.M.N.M.P.N.P.O.Q.P.Q.P.Q.Q.R.Q.T.Q.T.R.T.S.T.S.U.T.U.S.U.U.U.U.X.U.X.X##", +".c.b#i.c#i.c.e.c.e#i.f#i.f#i.f.e#l.e.h.e.h.e.h.e.h#o.h.h.h.h.h.h.h.h.l.h.l.h.l.k.l.k#m.l.l.l.n.l.n.l.n.l#e.l#e.m#e.m#e.m#e.m.p#h.p#h.p#e.p#h.p.p.p.p.s.p.s.p.s.p.s.p.s.p.s.p.s.s.s.s.s.s.s.s#b.s.s.s#b.s#b.s#b.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s#b.s.s.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s" +".p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.z.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B.B.B.D.B.C.B.C.B.C.D.C.D.C.D.C.D.E.D.E.C.E.C.E.E.F.E.F.E.F.E.G.F.H.F.H.G.I.G.I.G.I.G.J.K.J.K.J.I.L.J.L.J.L.J.M.L.8.L.M.M.N.M.N.O.P.O.P.O.Q#f.Q.P.Q.Q.R.Q.S.Q.S.R.T.S.T.S.U.S.U.U.U.V.U.U.X.U", +"#g.c.b.c.c#i.c#i.c#i.c.e#i.e#i.f.e.e.e#l.e#l.e.h.e.h.e.h#o.h.j.h.j.h.h.k.h.l.h.l.h.l.k.l.k.l.l.l.l.l.l.n.l.m.l.n.l#e.m#e.m#e.m#e.m#e.m.p#h.p#h.p#h.p.r.p.r.p.p.s.r.s.p.s.p.s.p.s.p.s.p.s.p.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s#b.s#k.s#j.s#k.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#k.s#j.s#k.s#j.s.s.s#b.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.r.p.p" +".p.r.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.x.A.z.A.A.A.z.A.A.A.A.B.A.B.A.B.A.B.B.B.B.B.B.7.B.C.B.C.B.C.B.C.B.C.D.C.D.C.D.C.C.E.C.E.C.E.C.F.E.F.E.F.E.F.E.H.F.H.F.H.F.H.G.I.G.I.G.J.I.J.I.J.I.J.J.L.J.L.J.8.L.M.L.8.L.N.M.N.M.N.O.P.N.P.N.Q.P.Q.P.Q.Q.R.Q.T.Q.T.R.T.S#..S.U.T.U.U.U.U.U.U.X.W.X", +"#i.c#i.c#i.c#i#i.f#i.f#i.f.e.f.e#l.e#l.e.h.e.h#o.h.h.h.h.h.h.h.h.l.h.l.h.l.k.l.k#m.l.l.l#m.l.n.l.n.l#e.l#e.m#e.m#e.m#e.m.p#h.p#h.p#e.p#h.p.p.p.p.s.p.s.p.s.p.s.p.s.p.s.p.s.s.s.s#b.s.s.s#b.s.s.s#b.s#b.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s" +".p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.v.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.x.x.A.x.z.x.A.x.A.x.A.z.A.z.A.z.A.z.B.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B.C.B.D.B.C.B.C.D.C.D.C.D.C.D.E.C.E.D.E.C.F.E.F.E.F.E.F.F.G.F.G.F.H.F.H.G.I.G.I.G.I.G.J.I.J.K.J.J.L.J.L.J.M.L.M.L.8.L.N.M.N.M.N.O.P.O.P.N.Q#f.Q.Q.Q.Q.R.Q.S.Q.S.S.T.S#..S.U.S.U.U.U.U.X.U", +".b.c.b#i.c#i.c#i.c.e#i.e#i.f#i.e.e.f.e#l.e.h.e.h.e.h#o.h.j.h.j.h.h.k.j.l.h.l.h.l.k.l.k.l.l.l.l.l.l.n.l.m.l#e.l#e.m#e.m#e.m#e.m#e#h.p#h.p#h.p#h.p.r.p.r.p.p.s.r.s.p.s.p.s.p.s.p.s.p.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s#b.s.s.s#j.s#k.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#k.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.r" +".s.p.p.r.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.x.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.A.B.B.B.B.B.B.7.B.C.B.C.B.C.B.C.D.C.D.C.C.C.D.E.C.E.C.E.C.E.E.F.E.F.E#d.F.G.F.H.F.H.F.I.G.I.G.I.G.I.G.J.I.J.I.J.J.L.J.L.J.L.J.8.L.8.L.N.M.N.M.N.O.P.O.P.N.P.P.Q.P.Q.Q.R.Q.R.Q.T.R.T.S.T.S#..S.U.T.U.U.U.U.X.U##", +"#i.c#i.c#i.c.f#i.f#i.f.e.f.e#l.e#l.e.h.e.h#o.h.h.h.h.h.h.h.h.l.h.l.h.l.h.l.h#m.l.l.l#m.l#m.l.n.l#e.l#e.m#e.m#e.m#e#h#e#e#e#h.p#e.p#e.p.p.p.p.s.p.s.p.s.p.s.p.s.p.s.p.s.s.s.s#b.s.s.s#b.s.s.s#b.s#b.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#j#j#j#j#j#j#j#j#j#j#j#j#j#j#j#j#j#j#j#j#j#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s#b.s.s.s#b.s.s.s.s.s.s.s.s.p.s.p.s" +".p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.x.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B.C.B.D.B.C.B.C.D.C.D.C.D.C.D.E.C.E.D.E.C.F.E.F.E.F.E.F.F.G.F.G.F.H.G.H.G.I.G.I.K.J.K.J.I.J.I.L.J.L.J.L.L.M.L.M.L.N.M.N.M.N.M.P.O.P.O.Q.P.Q.P.Q.Q.R.Q.R.Q.T.R.S.S.T.S.U.S.U#n.U.U.W.U", +".b.c.c#i.c#i.c.e.c.e#i.f#i.e.e.f.e#l.e.h.e.h.e.h#o.h.j.h.j.h.h.h.j#p.h.l.h.l.h.l.h.l.l.l.l.l.l.n.l.m.l#e.l#e.m#e.m#e.m#e.m#e#h.p#h.p#h.p#h.p#e.p#h.p.p.s.r.s.p.s.p.s.p.s.p.s.p.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s#b.s#k.s#j.s#k.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#k.s#j.s.s.s#b.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p" +".s.r.s.p.p.r.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.z.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.B.B.B.B.B.B.B.7.B.C.B.C.B.C.B.C.D.C.D.C.C.C.D.E.C.E.C.E.C.E.E.F.E.F.E#d.F.G.F.H.F.H.F.I.G.I.G.I.H.J.K.J.I.J.I.L.J.L.J.L.L.M.L.8.L.8.L.N.M.N.M.N.O.P.O.Q.N.Q.P.Q.Q.Q.Q.R.Q.S.Q.T.S.T.S#..S.U.S.U.U.U.U.W.U.X", +"#i.c#i.c.f#i.e#i.f.e.f.e#l.e#l.e.h.e.h#o.h#l.h.h.h.h.h.h.l.h.l.h.l.h.l.h#m.l.l.l#m.l#m.l.n.l#e.l#e.l#e.l#e.m#e#h#e#e#e#h.p#e.p#e.p#e.s#e.s.p.s.p.s.p.s.p.s.p.s.s.s.s.s.s#b.s.s.s#b.s#b.s#b.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#j#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#j#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s#b.s.s.s#b.s.s.s.s.s.s.s.s.p.s" +".p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.D.B.C.B.C.B.C.B.C.D.C.D.C.D.C.D.E.C.E.C.E.E.F.E.F.E.F.E.G.F.H.F.G.F.I.G.I.G.I.G.I.K.J.K.J.I.L.J.L.J.L.J.M.L.M.L.M.L.N.M.N.M.N.O.P.O.Q.O.Q.P.Q.P.Q.Q.R.Q.S.Q.T.S.T.S.U.S.U.S.U.V.U.U", +".c#i.c#i.c#i.c.e#i.e#i.e.e.f.e#l.e#l.e#l.e.h#o.h.j.h.j.h.h.h.j#p.h.l.h.l.h.l.h.l.l.l.l.l.l#m.l.m.l#e.l#e.l#e.l#e.m#e.m#e#h.p#h.p#h.p#h.p#e.p#h.s.p.s.p.s.p.s.p.s.p.s.p.s.s.s.s.s.s.s.s.s.s.s.s.s.s#b.s.s.s#j.s#k.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#k.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p" +".s.p.s.r.s.p.p.r.p.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.v.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.x.A.z.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.B.B.B.7.B.B.B.C.B.C.B.C.B.C.B.C.D.C.D.C.C.C.D.E.C.E.C.F.C.F.E.F.E.F.E.H.F.H.F.H.F.H.G.I.G.I.G.I.I.J.K.J.I.J.J.L.J.L.J.L.L.M.L.8.L.8.M.N.M.N.M.P.N.P.O.Q.P.Q.P.Q.Q.R.Q.T.Q.T.R.T.S.T.S.U.T.U.S.U.U.U.U.X", +"#i.c.f#i.e#i.f#i.f#i#l.e#l.e.h.e.h.e.h#l.h#l.h.h.h.h#p.h#p.h.l.h.l.h.l.l.l.l#m.l#m.l.n.l#e.l#e.l#e.l#e.m#e#h#e#e#e#h.p#e.p#e.p#e.s#e.s.p.s.p.s.p.s.p.s.p.s.s.s.s.s.s#b.s.s.s#b.s#b.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s#b.s.s.s.s" +".p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.w.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.B.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.D.B.C.B.C.B.C.D.C.D.C.D.C.D.E.D.E.C.E.C.E.E.F.E.F.E.F.E.G.F.H.F.H.F.I.G.I.G.I.G.J.K.J.K.J.I.L.J.L.J.L.J.M.L.M.L.M.M.N.M.N.O.P.O.P.O.Q#f.Q.Q.Q.Q.R.Q.S.Q.S.S.T.S.T.S.U.S.U.U.U.U", +".c#i.c#i.c#i#i.e#i.e#i.f.e#l.e#l.e#l.e.h.e.h#o.h#o.h.h.h.j#p.h.l.h.l.h.l.h.l.l.l.l.l.l#m.l.l.l#e.l#e.l#e.l#e.m#e.m#e#h#e#h#e#h.p#h.p#e.p#h.s.p.s.p.s.p.s.p.s.p.s.p.s.s.s.s.s.s.s.s.s.s.s.s.s.s#b.s#k.s#j.s#k.s#j.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p" +".s.p.s.p.s.r.s.p.p.r.p.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.u.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.x.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.A.B.B.B.B.7.B.B.B.C.B.C.B.C.B.C.D.C.D.C.D.C.C.E.C.E.C.E.C.F.E.F.E.F.E.F.E.H.F.H.F.H.F.H.G.I.G.I.G.J.I.J.I.J.I.J.J.L.J.L.J.8.L.M.L.8.L.N.M.N.M.N.O.P.N.P.N.Q.P.Q.P.Q.Q.R.Q.T.Q.T.R.T.S#..S.U.T.U.U.U.U.W", +"#r#i#i#i.f#i.f#i.f.e#l.e#l.e#l.e.h#l.h#o.h.h.h.h#p.h#p.h.l.h.l.h.l.l.l.l#m.l#m.l.n.l#e.l#e.l#e.l#e.m#e#h#e#e#e#h.p#e.p#e.p#e.s#e.s.p.s.p.s.p.s.p.s.p.s.s.s.s.s.s#b.s.s.s#b.s#b.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s#b.s.s" +".s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.o.q.q.q.o.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.w.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.z.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B.B.B.D.B.C.B.C.B.C.D.C.D.C.D.C.D.E.D.E.C.F.C.F.E.F.E.F.F.G.F.G.F.H.F.H.G.I.G.I.G.I.G.J.I.J.K.J.J.L.J.L.L.M.L.M.L.8.L.O.M.N.M.N.O.P.O.P.N.Q#f.Q.Q.Q.Q.R.Q.S.Q.S.S.T.S#..S.U.S.U.U", +".c#i.c#i#i.e#i.e#i.f#i.f.e#l.e#l.e.h.e.h#o.h#o.h.h.h.j#p.h.l.h.l.h.l.h.l.l.l.l.l.l.l.l.l.l#e.l#e.l#e.l#e.m#e.m#e#h#e#h#e#h.p#h.p#e.p#h.s.p.s.p.s.p.s.p.s.p.s.p.s.s.s.s.s.s.s.s.s.s.s.s.s.s#j.s#k.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#j#j#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#j#j#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#k.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p" +".s.p.s.p.s.p.s.r.s.p.p.r.p.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.u.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.y.x.x.x.y.x.y.x.A.x.A.x.A.x.A.z.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.B.B.B.B.B.7.B.C.B.C.B.C.B.C.B.C.D.C.D.C.D.C.C.E.C.E.C.E.C.F.E.F.E.F.F.G.F.H.F.H.F.I.G.I.G.I.G.I.G.J.I.J.I.J.J.L.J.L.J.L.J.8.L.8.L.N.M.N.M.N.O.P.O.P.N.Q.P.Q.P.Q.Q.R.Q.R.Q.T.R.T.S.T.S#..S.U#s.U.U.U", +"#i#i.f#i.f#i.f.e#l.e#l.e#l.e.h#l.h#o.h.h.h.h#p.h#p.h.l.h.l.h.l#p.l#p#m.l#m.l#m.l#t.l#e.l#e.l#e.m#e#h#e#e#e#h.p#e.p#e.p#e.s#e.s.p.s.p.s.p.s.p.s.s.s.s.s.s.s.s#b.s.s.s#b.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s#b" +".s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.z.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B.C.B.D.B.C.B.C.D.C.D.C.D.C.D.E.C.E.D.E.C.F.E.F.E.F.E.F.F.G.F.G.F.H.F.I.G.I.G.I.K.J.K.J.I.J.I.L.J.L.J.L.L.M.L.M.L.N.M.N.M.N.O.P.O.P.O.Q.P.Q.P.Q.Q.R.Q.S.Q.T.R.T.S.T.S.U.S.U.V", +".c#i.c.e#i.e#i.f#i.f.e#l.e#l.e.h.e.h#o.h#o.h.h.h.j.h.h#p.h#p.h.l.h.l#p.l#p.l.l.l.l.l.l.n.l#e.l#e.l#e.m#e.m#e#h#e#h#e#h.p#h.p#e.p#h.s.p.s.p.s.p.s.p.s.p.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s#j.s#k.s#j.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#k.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p" +".s.p.s.p.s.p.s.p.s.r.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.o.q.q.q.o.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.x.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.A.B.B.B.B.B.B.7.B.C.B.C.B.C.B.C.D.C.D.C.C.C.D.E.C.E.C.E.C.E.E.F.E.F.E#d.F.G.F.H.F.H.F.I.G.I.G.I.I.J.K.J.I.J.I.L.J.L.J.L.L.M.L.8.L.8.L.N.M.N.M.N.O.P.O.Q.N.Q.P.Q.Q.Q.Q.9.Q.S.Q.T.S.T.S.U.S.U.S.U.U.U", +".f#i.f#i.f.e#l.e#l.e#l.e.h#l.h#o.h#l.h.h.h.h#p.h.l.h.l.h.l#p.l#p#m.l#m.l#m.l#t.l#e.l#e.l#e.l#e#u#e#e#e#h#e#e#e#e.p#e.s#e.s.p.s#e.s.p.s.p.s.s.s.s#b.s.s.s#b.s.s.s#b.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#j#j#k#j#j#j#k#j#j#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#j#j#k#j#j#j#k#j#j#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s#b.s.s" +".s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.x.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.B.B.C.B.D.B.C.B.C.D.C.D.C.D.C.D.E.C.E.D.E.C.F.E.F.E.F.E.G.F.H.F.G.F.I.G.I.G.I.G.I.K.J.K.J.I.L.J.L.J.L.J.M.L.M.L.M.L.N.M.N.O.N.O.P.O.Q.O.Q.P.Q.Q.Q.Q.S.Q.S.R.T.S.T.S.U.S.U#v", +".c#i#i.e#i.f#i.e.e#l.e#l.e#l.e#l#o.h#o.h#l.h.j.h.h#p.h#p.h.l.h.l.h.l#p.l.l.l.l.l.l.n.l#e.l#e.l#e.l#e.l#e#h#e#h#e#h.p#h.p#e.p#h.s#e.s#e.s.p.s.p.s.p.s.s.s.s.s.s.s.s.s.s.s.s#b.s#k.s#j.s#k.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#k.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.s.s.s" +".s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.o.q.q.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.z.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.B.B.B.B.B.B.B.7.B.C.B.C.B.C.B.C.D.C.D.C.C.C.D.E.C.E.C.F.C.F.E.F.E.F.E.H.F.H.F.H.F.H.G.I.G.I.G.I.I.J.K.J.I.J.J.L.J.L.J.L.L.M.L.8.L.N.M.N.M.N.O.P.N.P.N.Q.P.Q.P.Q.Q.R.Q.T.Q.T.R.T.S.T.S.U.T.U#..U", +".f#i.f#i#l#i#l.e#l.e#l.f.h#o.h#l.h#l.h.h#p.h#p.h#p.h.l.h.l#p#m.l.l.l#m.l#t.l#e.l#e.l#e.l#e.l#e#e#e#h#e#e#e#e.p#e.s#e.s#e.s#e.s.p.s.p.s.s.s.s#b.s.s.s#b.s.s.s#b.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#j#j#k#j#j#j#k#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#j#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s#b" +".s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.D.B.C.B.C.B.C.D.C.D.C.D.C.D.E.D.E.C.E.C.E.E.F.E.F.E.F.E.G.F.H.F.H.F.I.G.I.G.I.G.J.K.J.K.J.I.L.J.L.J.L.L.M.L.8.L.O.M.N.M.N.O.P.O.P.O.Q#f.Q.Q.Q.Q.R.Q.S.Q.S.S.T.S.T.S.U.S", +"#i#i#i.f#i.e#i#l#i#l.e#l.e#l.e.h#o.h#o.h#o.h.h#p.h#p.h.l.h.l.h.l#p.l.l.l.l.l.l#m.l#t.l#e.l#e.l#e.l#e#h#e#h#e#h#e#h#e#e.p#h.s#e.s#e.s.p.s.p.s.p.s.s.s.s.s.s.s.s.s.s.s.s#b.s#k.s#j.s#k.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.s" +".s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.x.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.A.B.B.B.B.7.B.B.B.C.B.C.B.C.B.C.D.C.D.C.D.C.C.E.C.E.C.E.C.F.E.F.E.F.E.F.E.H.F.H.F.H.F.H.G.I.G.I.G.J.I.J.I.J.I.J.J.L.J.L.J.8.L.M.L.N.L.N.M.N.O.N.O.P.N.P.N.Q.P.Q.Q.Q.Q.R.Q.T.Q.T.S.T.S#..S.U.T.U", +".f#i.f#i#l.e#l.e#l.e#l#o.h#l.h#l.h.h#p.h#p.h#p.h.l.h.l#p#m.l.l.l#m.l#m.l#e.l#e.l#e.l#e.l#e#e#e#h#e#e#e#e.p#e.s#e.s#e.s#e.s.p.s.p.s.s.s.s#b.s.s.s#b.s#b.s#b.s#j.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#j#j#k#j#j#j#k#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#j#j#k#j#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b" +".s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B.B.B.D.B.C.B.C.B.C.D.C.D.C.D.C.D.E.D.E.C.F.C.F.E.F.E.F.F.G.F.G.F.H.F.H.G.I.G.I.G.I.K.J.I.J.K.J.J.L.J.L.L.M.L.M.L.N.L.N.M.N.M.N.O.P.O.P.N.Q.P.Q.Q.Q.Q.R.Q.S.R.S.S.T.S.U.S", +"#i.e#i.e#i.f#i#l.e#l.e#l.e.h#o.h#o.h#o.h.h#p.h#p.h.l.h.l.h.l#p.l.l.l.l.l.l#m.l#u.l#e.l#e.l#e.l#e#h#e#h#e#h#e#h#e#e.p#h.s#e.s#e.s.p.s.p.s.p.s.s.s.s.s.s.s.s.s.s.s.s#b.s#k.s#j.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s" +".s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.t.v.w.v.v.v.v.v.v.v.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.x.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.B.B.B.B.B.7.B.B.B.C.B.C.B.C.B.C.D.C.D.C.D.C.C.E.C.E.C.E.C.F.E.F.E.F.F.G.F.H.F.H.F.I.G.I.G.I.G.I.G.J.I.J.I.L.J.L.J.L.J.L.L.8.L.8.L.N.M.N.M.N.O.P.O.P.N.Q.P.Q.Q.Q.Q.R.Q.S.Q.T.S.T.S.T.S.U.S.U", +".f#i#l.e#l.e#l.e#l#o.h#l.h#l.h.h.h.h#p.h#p.h.l.h.l#p#m#p.l#p#m.l#m.l#t.l#t.l#e.l#e.l#e#h#e#h#e#e#e#e.p#e.s#e.s#e.s#e.s.p.s.p.s.s.s.s#b.s.s.s#b.s#b.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#j#j#k#j#j#j#k#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#j#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j" +".s#b.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.z.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B.C.B.D.B.C.B.C.D.C.D.C.D.C.D.E.C.E.D.E.C.F.E.F.E.F.E.F.F.G.F.G.F.I.G.I.G.I.G.I.K.J.K.J.I.L.J.L.J.L.J.L.L.M.L.M.L.N.M.N.M.N.O.P.O.Q.O.Q.P.Q.P.Q.Q.R.Q.S.Q.T.S.T.S.U.S", +"#i.e#i.f#i#l.e#l.e#l.e#l#o.h#o.h#o.h.h.h.h#p.h#p.h#p.h.l#p.l#p.l#p.l.l#m.l#u.l#e.l#e.l#e.l#e#h#e#h#e#h#e#h#e#e.p#h.s#e.s#e.s.p.s.p.s.p.s.s.s.s.s.s.s.s.s.s.s.s#b.s#k.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s" +".s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.y.x.x.x.y.x.y.x.A.x.A.x.A.x.A.z.A.A.A.z.A.A.A.A.B.A.B.A.B.A.B.B.B.B.B.B.7.B.C.B.C.B.C.B.C.D.C.D.C.C.C.D.E.C.E.C.E.C.F.E.F.E.F.E#d.F.G.F.H.F.H.F.I.G.I.G.I.I.J.K.J.I.J.I.L.J.L.J.L.L.M.L.8.L.8.M.N.M.N.M.N.N.P.O.Q.N.Q.P.Q.Q.Q.Q.T.Q.S.R.T.S.T.S.U.S.U", +"#l#i#l.e#l.e#l.e.h#l.h#l.h#l.h#l#p.h#p.h#p.h#p#p#m#p.l#p#m.l#m.l#t.l#t.l#e.l#e.l#e#u#e#u#e#e#e#e#e#e#x#e.s#e.s#e.s.p.s.p.s.s.s.s#b.s.s.s#b.s#b.s#j.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#j#j#k#j#j#j#k#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#k#j#j#j#k#j#j#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j" +".s#j.s#b.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.w.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.A.x.z.x.A.x.A.x.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B.C.B.D.B.C.B.C.D.C.D.C.D.C.D.E.C.E.C.E.C.F.E.F.E.F.E.G.F.H.F.G.F.I.G.I.G.I.G.J.K.J.K.J.I.L.J.L.J.L.J.M.L.M.L.M.M.N.M.N.O.N.O.P.O.Q.O.Q.Q.Q.Q.R.Q.S.Q.S.S.T.S.T.S", +"#i.f#i#l#i#l.e#l.e#l.e#l#o.h#o.h#l.h#o#p.h#p.h#p.h.l.h.l#p.l#p.l.l#m.l#u.l#t.l#t.l#e.l#e#u#e#u#e#h#e#h#e#e.p#h.s#e.s#e.s#e.s#e.s.p.s.s.s.s.s.s.s.s.s.s.s.s#j.s#k.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#j#q#k#q#j#q#k#q#j#q#k#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#q#k#q#j#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#k.s#j.s.s.s#b.s" +".s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.t.u.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.x.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.x.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.B.B.B.B.B.B.B.7.B.C.B.C.B.C.B.C.D.C.D.C.C.C.D.E.C.E.C.F.C.F.E.F.E.F.E.H.F.H.F.H.F.H.G.I.G.I.G.I.I.J.I.J.I.J.J.L.J.L.J.L.L.M.L.N.L.N.M.N.O.N.O.P.N.P.N.Q.P.Q.P.Q.Q.R.Q.T.Q.T.R.T.S.T.S.U", +"#l#i#l.e#l.e#l#l#l#o.h#l.h#l#p.h#p.h#p.h#p.h#m#p.l#p#m.l#m.l#t.l#t.l#e.l#e.l#e#u#e#u#e#e#e#e#e#e#x#e.s#e.s#e.s#e.s#e.s.s.s.s#b.s.s.s#b.s#b.s#j.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#j#j#k#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#j#j#k#j#j#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j" +".s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.D.B.C.B.C.B.C.D.C.D.C.D.C.D.E.D.E.C.E.C.F.E.F.E.F.F.F.F.G.F.H.F.H.G.I.G.I.G.I.G.J.K.J.K.J.J.L.J.L.L.L.L.M.L.N.L.O.M.N.M.N.O.P.O.P.N.Q#f.Q.Q.Q.Q.R.Q.S.Q.S.S.T.S", +"#i.f#i#l#i#l.e#l.e#l#o.h#o.h#l.h#o#p.h#p.h#p.h.l.h.l#p.l#p.l.l#m.l.l.l#t.l#t.l#e.l#e.l#e#u#e#h#e#h#e#e#e#h#x#e.s#e.s#e.s#e.s.p.s.s.s.s.s.s.s.s.s.s.s.s#j.s#k.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#j#q#k#q#j#q#k#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#k.s#j.s.s.s" +"#b.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.z.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.B.B.B.7.B.B.B.C.B.C.B.C.B.C.D.C.D.C.D.C.C.E.C.E.C.E.C.F.E.F.E.F.F.F.F.H.F.H.F.I.F.I.G.I.G.I.G.J.I.J.I.L.I.L.J.L.J.L.L.8.L.8.L.N.M.N.M.N.O.P.O.P.N.Q.P.Q.Q.Q.Q.R.Q.R.Q.T.S.T.S.T.S.U", +"#l.e#l.e#l#l#l#o.h#l.h#l#p.h#p.h#p.h#p.h.l#p.l#p#m#p#m#p#m.l#t.l#t.l#t.l#e#u#e#u#e#e#e#h#e#e#e#e.s#e.s#e.s#e.s#e.s.s.s.s#b.s.s.s#b.s#b.s#j.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#j#j#k#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#y#q#z#q#y#q#z#q#y#q#z#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j" +".s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.z.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B.B.B.D.B.C.B.C.B.C.D.C.D.C.D.C.D.E.D.E.C.F.E.F.E.F.E.F.F.G.F.G.F.H.F.I.G.I.G.I.K.J.K.J.I.J.K.L.J.L.J.L.L.M.L.M.L.N.M.N.M.N.O.P.O.Q.O.Q.P.Q.P.Q.Q.R.Q.S.Q.T.R.T.S", +"#i#l#i#l.e#l.e#l#o.h#o.h#l.h#o.h.h#p.h#p.h#p.h#p#p.l#p.l#p#m#p.l.l#t.l#t.l#e.l#e.l#e#u#e#h#e#h#e#e#e#h#x#e.s#e.s#e.s#e.s.p.s.s.s.s.s.s.s.s.s.s.s.s#j.s#k.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#q#j#q#k#q#j#q#k#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#k.s#j.s" +".s.s#b.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.x.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.B.B.B.B.B.7.B.7.B.C.B.C.B.C.B.C.D.C.D.C.D.C.C.E.C.E.C.E.E.F.E.F.E#d.F.G.F.H.F.H.F.I.G.I.G.I.K.I.K.J.I.J.I.L.J.L.J.L.L.M.L.8.L.8.L.N.M.N.M.N.O.P.O.Q.N.Q.P.Q.Q.Q.Q.S.Q.S.Q.T.S.T.S.U", +"#l.e#l.f#l#o.h#l.h#l.h#l#p#l#p.h#p.h.l#p.l#p#m#p#m#p#m.l#t.l#t.l#t.l#e.l#e#u#e#e#e#h#e#e#e#e#x#e#x#e.s#e.s#e.s.s.s.s#b.s.s.s#b.s#b.s#j.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#j#j#k#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#j#j#k#j#k#j.s#j.s#j.s#j" +".s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.z.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B.C.B.D.B.C.B.C.D.C.D.C.D.C.D.E.C.E.D.E.C.F.E.F.E.F.E.F.F.H.F.G.F.I.G.I.G.I.G.I.K.J.K.J.I.L.J.L.J.L.J.L.L.M.L.M.L.N.M.N.O.N.O.P.O.Q.O.Q.Q.Q.Q.Q.Q.S.Q.S.S.T.S", +"#i#l.e#l.e#l.e#l#o#l#o.h#o.h#l#p.h#p.h#p.h#p#p.l#p.l#p#m#p.l.l#t.l#t.l#e.l#e.l#e#u#e#u#e#u#e#e#e#h#x#e.s#e.s#e.s#e.s.p.s.s.s.s.s.s.s.s.s.s.s.s#j.s#k.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#q#j#q#k#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#q#k#q#j#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#k.s" +"#j.s.s.s#b.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.y.x.x.x.y.x.y.x.A.x.A.x.A.x.A.z.A.A.A.z.A.A.A.A.B.A.B.A.B.A.B.B.B.B.B.B.7.B.C.B.C.B.C.B.C.D.C.D.C.C.C.D.E.C.E.C.F.C.F.E.F.E.F.E#d.F.G.F.H.F.H.G.I.G.I.G.I.I.J.K.J.I.J.J.L.J.L.J.L.L.M.L.8.L.N.M.N.M.N.O.P.N.P.N.Q.P.Q.P.Q.Q.R.Q.T.Q.T.R.T.S.T", +"#l.e#l#o#l#l#l#l.h#l#p#l#p.h#p.h#p.h#p#p#m#p#m#p#m.l#t.l#t.l#t.l#e.l#e#u#e#t#e#u#e#e#e#e#x#e#x#e.s#e.s#e.s#x.s#x#b.s.s.s#b.s#b.s#j.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#j#j#k#j#j#j#k#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#z#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#j#j#k#j#k#j.s#j.s#j" +".s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.x.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.A.x.z.x.A.x.A.x.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.B.B.C.B.C.B.C.B.C.D.C.D.C.D.E.D.E.C.E.C.E.E.F.E.F.E.F.F.G.F.H.F.G.F.I.G.I.G.I.G.J.K.J.K.J.I.L.J.L.L.L.L.M.L.N.L.O.M.N.M.N.O.P.O.P.O.Q#f.Q.Q.Q.Q.R.Q.S.Q.S.S", +"#i#l#i#l.e#l#o#l#o.h#o.h#l#p#l#p.h#p.h#p.h.l#p.l#p.l#p.l.l#t.l#t.l#t.l#t.l#e#u#e#u#e#u#e#h#e#h#e#e#x#e.s#e.s#e.s#e.s#x.s.s.s.s.s.s.s.s.s.s#j.s#k.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#j#q#k#q#j#q#k#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s" +"#k.s#j.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.q.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.x.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.B.B.B.7.B.B.B.C.B.C.B.C.B.C.B.C.D.C.D.C.C.E.C.E.C.E.C.F.E.F.E.F.E.F.F.H.F.H.F.I.F.I.G.I.G.I.G.J.I.J.I.L.I.L.J.L.J.L.L.8.L.M.L.N.M.N.M.N.O.N.O.P.N.Q.N.Q.Q.Q.Q.Q.Q.R.Q.T.R.T.S.T", +"#l.e#l#l#l#l.h#l.h#l#p.h#p.h#p.h#p#p#m#p.l#p#m#p#t.l#t.l#t.l#t.l#e#u#e#t#e#u#e#e#e#e#x#e#x#e.s#e.s#e.s#e.s#x.s.s.s.s#b.s#b.s#j.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#j#j#k#j#j#j#k#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#z#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#j#j#k#j#k#j.s#j" +".s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.D.B.C.B.C.B.C.D.C.D.C.D.C.D.E.D.E.C.F.C.F.E.F.E.F.F.G.F.G.F.H.F.I.G.I.G.I.K.I.K.J.I.J.K.L.J.L.J.L.L.M.L.M.L.N.L.N.M.N.O.N.O.P.O.Q.N.Q.P.Q.Q.R.Q.S.Q.T.R", +"#i#l.e#l.e#l#o.h#o.h#l.h#l#p.h#p.h#p.h#p#p#p#p.l#p.l#p#m.l#t.l#t.l#t.l#e.l#e#u#e#u#e#h#e#h#e#e#x#e#x#e.s#e.s#e.s#x.s.s.s.s.s.s.s.s.s.s#j.s#k.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#j#q#k#q#j#q#k#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#z#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#z#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s" +"#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.t.u.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.A.B.B.B.B.7.B.B.B.C.B.C.B.C.B.C.D.C.D.C.D.C.C.E.C.E.C.E.C.F.E.F.E.F.F.F.F.H.F.H.F.I.G.I.G.I.K.I.K.J.I.J.I.L.J.L.J.L.L.L.L.8.L.8.L.N.M.N.M.N.O.P.O.Q.N.Q.P.Q.Q.Q.Q.S.Q.S.Q.T.S.T", +"#l#l#l#o.h#l.h#l#p#l#p.h#p.h#p#p#m#p.l#p#m#p#m#p#t.l#t.l#t.l#t.l#e#t#e#u#e#e#e#e#x#e#x#e.s#e.s#e.s#e.s#x.s.s.s.s#b.s#b.s#b.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#j#j#k#j#j#j#k#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#k#j#j#j#k#j#j#j#k#j#k#j" +".s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B.C.B.D.B.C.B.C.D.C.D.C.D.C.D.E.C.E.D.E.C.F.E.F.E.F.E.F.F.G.F.G.F.I.G.I.G.I.G.I.K.J.K.J.I.L.J.L.J.L.J.L.L.M.L.M.L.N.M.N.O.N.O.P.O.Q.O.Q.Q.Q.Q.Q.Q.S.Q.S#A", +".e#l.e#l#o#l#o#l#l.h#o#p#l#p.h#p.h#p#p#p#p.l#p.l#p#m#p#u.l#t.l#t.l#e.l#e#u#e#u#e#h#e#h#e#e#x#h#x#e.s#e.s#e.s#x.s.s.s.s.s.s.s.s.s.s#j.s#k.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#j#q#k#q#j#q#k#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s" +"#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.x.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.B.B.B.B.B.7.B.C.B.C.B.C.B.C.D.C.D.C.C.C.D.E.C.E.C.F.C.F.E.F.E.F.E#d.F.G.F.H.F.H.F.I.G.I.G.I.I.J.K.J.I.J.I.L.J.L.J.L.L.M.L.8.L.N.M.N.M.N.O.P.N.P.O.Q.P.Q.P.Q.Q.R.Q.T.Q.T.R.T", +"#l#o#l#l.h#l#p#l#p#l#p.h#p.h#B#p#p#p#m#p#m#p#t.l#t.l#t.l#t.l#e#u#e#u#e#t#e#t#e#e#x#e#x#e#x#e.s#e.s#x.s#x.s.s#b.s.s.s#b.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#j#j#k#j#j#j#k#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#k#j#j#j#k#j#j#j#k#j" +"#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.z.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B.C.B.D.B.C.B.C.D.C.D.C.D.C.D.E.C.E.C.F.C.F.E.F.E.F.F.G.F.H.F.G.F.I.G.I.G.I.G.J.K.J.K.J.I.L.J.L.L.L.L.M.L.O.L.O.M.N.M.N.O.P.O.P.O.Q#f.Q.Q.Q.Q.R.Q.S.Q", +"#i#l#o#l#o#l#l.h#o.h#l#p#l#p.h#p.h#p#p.l#p.l#p#m#p#u.l#t.l#t.l#t.l#t#u#e#u#e#u#e#u#e#e#x#h#x#e.s#e.s#e.s#e.s#x.s#x.s.s.s.s.s.s#b.s#k.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#j#k#q#j#q#k#q#j#q#k#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s" +"#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.y.x.x.x.y.x.y.x.A.x.A.x.A.x.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.A.B.B.B.B.B.B.7.B.C.B.C.B.C.B.C.D.C.D.C.C.C.D.E.C.E.C.F.C.F.E.F.E.F.F.H.F.H.F.I.F.I.G.I.G.I.G.I.I.J.I.L.I.L.J.L.J.L.L.8.L.M.L.N.L.N.M.N.O.N.O.P.N.Q.N.Q.Q.Q.Q.Q.Q.R.Q.T#A.T", +"#l#l#l#l.h#l#p#l#p.h#p.h#p#p#p#p#m#p#m#p#m#p#t.l#t.l#t.l#e#u#e#u#e#t#e#t#e#e#x#e#x#e#x#e.s#e.s#x.s#x.s#x#b.s.s.s#b.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#j#j#k#j#j#j#k#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#k#j#j#j#k#j#j#j" +"#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.x.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.D.B.C.B.C.B.C.D.C.D.C.D.C.D.E.D.E.C.F.C.F.E.F.E.F.F.F.F.G.F.H.F.I.G.I.G.I.K.I.K.J.I.L.K.L.J.L.J.L.L.M.L.M.L.N.L.N.M.N.O.N.O.Q.O.Q.N.Q.P.Q.Q.Q.Q.S.Q", +".e#l#o#l#o.h#o.h#l#p#l#p.h#p.h#p#p#p#p#p#p#m#p.l#p#t.l#t.l#t.l#t.l#e#u#e#u#e#u#e#e#e#h#x#e#x#e#x#e.s#e.s#x.s#x.s.s.s.s.s.s#b.s#k.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#j#k#q#j#q#k#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s" +"#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.z.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.B.B.B.7.B.B.B.C.B.C.B.C.B.C.D.C.D.C.D.C.C.E.C.E.C.E.C.F.E.F.E.F.F.F.F.H.F.H.F.I.G.I.G.I.K.I.K.J.I.J.I.L.J.L.J.L.L.L.L.8.L.8.L.N.M.N.M.N.O.P.O.Q.N.Q.P.Q.Q.Q.Q.S.Q.S.Q.T", +"#l#l.h#l#p#l#p#l#p.h#p.h#p#p#m#p#m#p#m#p#t#p#t.l#t.l#t.l#t#u#e#t#e#u#e#e#x#e#x#e#x#e.s#e.s#e.s#x.s#x#b.s.s.s#b.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#j#j#k#j#j#j#k#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#w#q#z#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#k#j#j#j#k#j" +"#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.A.B.B.B.B.B.B.B.B.D.B.C.B.C.B.C.D.C.D.C.D.E.C.E.D.E.C.F.E.F.E.F.E.F.F.G.F.G.F.I.F.I.G.I.G.I.K.J.K.J.I.L.J.L.J.L.J.L.L.M.L.M.L.N.M.N.O.N.O.P.O.Q.O.Q.Q.Q.Q.Q.Q.S.Q", +"#o#l#o#l#o#l#l#p#l#p#l#p.h#p.h#p#p#p#p.l#p.l#p#t#p#t.l#t.l#t.l#e#u#e#u#e#u#e#e#e#h#x#e#x#e#x#e.s#e.s#x.s#x.s.s.s.s.s.s#b.s#k.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#j#k#q#j#q#k#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k" +"#j.s#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.q.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.x.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.B.B.B.B.B.7.B.7.B.C.B.C.B.C.B.C.D.C.D.C.D.E.C.E.C.F.C.F.E.F.E.F.E#d.F.G.F.H.F.H.F.I.G.I.G.I.I.J.K.J.I.J.I.L.J.L.J.L.L.M.L.N.L.N.M.N.O.N.O.P.N.P.O.Q.P.Q.P.Q.Q.R.Q.T.Q.T", +"#l#l#l#l#p#l#p#l#p.h#p#p#B#p#p#p#m#p#t#p#t.l#t.l#t.l#t#u#e#t#e#u#e#t#e#t#x#e#x#e#x#e#x#e.s#x.s#x#b.s.s.s#b.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#j#j#k#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j" +"#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B.C.B.D.B.C.B.C.D.C.D.C.D.C.D.E.C.F.D.F.C.F.E.F.F.F.F.G.F.H.F.G.F.I.G.I.G.I.K.J.K.J.K.J.I.L.J.L.L.L.L.M.L.O.L.O.M.N.M.N.O.P.O.P.O.Q#f.Q.Q.Q.Q.R.Q", +"#o#l#o#l#l.h#l#p#l#p#l#p.h#p#p#p#p.l#p.l#p#m#p#t.l#t.l#t.l#t#u#t#u#e#u#e#t#e#u#x#e#x#e#x#e.s#e.s#x.s#x.s#x.s#x.s.s#b.s#k.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#j#k#q#j#q#k#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j#k" +"#j.s#j.s#j.s#j.s#j.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.z.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.B.B.B.B.B.7.B.C.B.C.B.C.B.C.D.C.D.C.C.C.D.E.C.E.C.F.C.F.E.F.F.F.F.H.F.H.F.I.F.I.G.I.G.I.G.I.I.J.I.L.I.L.J.L.J.L.L.8.L.M.L.N.L.N.M.N.O.N.O.P.N.Q.N.Q.Q.Q.Q.Q.Q.S.Q.T", +"#l#l#p#l#p#l#p.h#p.h#B#p#p#p#m#p#m#p#t#p#t.l#t.l#t#u#e#t#e#u#e#t#e#t#x#e#x#e#x#e#x#e.s#x.s#x#b#x.s#x#b.s#b.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#j#j#k#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#z#q#w#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j" +"#j#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.D.B.C.B.C.B.C.D.C.D.C.D.C.D.E.D.E.C.F.C.F.E.F.E.F.F.F.F.G.F.I.F.I.G.I.G.I.K.I.K.J.K.L.K.L.J.L.J.L.L.M.L.M.L.N.L.N.O.N.O.N.O.Q.O.Q.N.Q.Q.Q.Q.Q.Q", +"#o#l#l.h#o#p#l#p#l#p.h#p.h#p#p#p#p#p#p#m#p#u#p#t.l#t.l#t.l#t#u#e#u#e#u#e#u#e#e#x#e#x#e#x#e#x#e.s#x.s#x.s#x.s.s#b.s#k.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#j#k#q#j#q#k#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k" +"#j#k#j.s#j.s#j.s#j.s#j.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.x.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.B.B.B.7.B.B.B.C.B.C.B.C.B.C.D.C.D.C.D.C.C.E.C.E.C.F.C.F.E.F.E.F.F.F.F.H.F.H.F.I.G.I.G.I.K.I.K.J.I.J.I.L.J.L.J.L.L.L.L.8.L.8.L.N.M.N.M.N.O.P.O.Q.N.Q.P.Q.Q.Q.Q.S.Q.S", +".h#l#p#l#p#l#p#l#p#p#p#p#m#p#m#p#t#p#t#p#t.l#t.l#t#u#t#u#e#t#e#t#e#e#x#e#x#e#x#e.s#e.s#x#b#x.s#x#b.s#b.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#j#j#k#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j" +"#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.D.B.C.B.C.B.C.D.C.D.C.D.C.D.E.D.E.C.F.E.F.E.F.E.F.F.G.F.G.F.I.F.I.G.I.G.I.K.J.K.J.I.L.I.L.J.L.L.L.L.M.L.O.L.N.M.N.O.N.O.P.O.Q.O.Q.Q.Q.Q.Q.Q", +"#o#l#o#l#l#p#l#p#l#p#l#p#p#p#p#p#p#m#p.l#p#t#p#t.l#t.l#t#u#e#u#e#u#e#u#e#e#x#h#x#e#x#e#x#e.s#x.s#x.s#x.s.s.s.s.s.s#j.s#k.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#q#j#q#k#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k" +"#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.x.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.A.B.B.B.B.7.B.B.B.C.B.C.B.C.B.C.D.C.D.C.D.C.C.E.C.F.C.F.E.F.E.F.E#d.F.G.F.H.F.I.F.I.G.I.G.I.I.J.K.J.I.L.I.L.J.L.J.L.L.M.L.N.L.N.M.N.O.N.O.P.N.P.O.Q.N.Q.Q.Q.Q.R.Q.T", +"#C#l#p#l#p#l#p#p#p#p#B#p#B#p#m#p#t#p#t.l#t.l#t#u#t#u#e#t#e#t#e#t#x#t#x#e#x#e#x#e#x#x.s#x.s#x#b.s#b.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#j#j#k#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j" +"#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B.C.B.D.B.C.B.C.D.C.D.C.D.C.D.E.C.F.D.F.C.F.E.F.F.F.F.G.F.H.F.G.F.I.G.I.K.I.K.J.K.J.K.L.I.L.J.L.L.L.L.M.L.O.L.O.M.N.M.N.O.P.O.Q.O.Q#f.Q.Q.Q.Q", +"#o#l#l#p#l#p#l#p#l#p.h#p#p#p#p#m#p.l#p#t#p#t.l#t.l#t.l#t#u#t#u#e#u#e#t#x#u#x#e#x#e#x#e.s#e.s#x.s#x.s#x.s#x.s.s#j.s#k.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#j#j#q#k#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#j#k#j#k#j#k#j#k" +"#j#k#j#k#j#k#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.q.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.u.t.u.t.u.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.z.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.B.B.B.B.B.7.B.C.B.C.B.C.B.C.D.C.D.C.C.C.D.E.C.E.C.F.C.F.E.F.F.F.F.H.F.H.F.I.F.I.G.I.G.I.K.I.I.J.I.L.I.L.J.L.L.L.L.8.L.M.L.N.L.N.M.N.O.N.O.Q.N.Q.N.Q.Q.Q.Q.Q.Q.S", +"#p#l#p#l#p.h#p#p#B#p#p#p#m#p#t#p#t#p#t#p#t.l#t#u#t#t#t#u#e#t#x#t#x#e#x#e#x#e#x#x.s#x.s#x#b#x.s#x#b.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#j#j#k#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q" +"#j#j#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.D.B.C.B.C.B.C.D.C.D.C.D.C.D.E.D.E.C.F.C.F.E.F.E.F.F.F.F.G.F.I.F.I.G.I.G.I.K.I.K.J.K.L.K.L.J.L.J.L.L.M.L.M.L.N.L.N.O.N.O.N.O.Q.O.Q.N.Q.Q.Q.Q", +"#l#l#o#p#l#p#l#p.h#p#p#p#p#p#p#p#p#t#p#t#p#t#p#t.l#t#u#t#u#e#u#e#t#e#u#x#e#x#e#x#e#x#e#x#x.s#x.s#x.s#x.s.s#j.s#k.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#j#j#q#k#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#j#k#j#k#j#k" +"#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.x.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.B.B.B.7.B.B.B.C.B.C.B.C.B.C.D.C.D.C.D.C.C.E.C.F.C.F.C.F.E.F.E.F.F.F.F.H.F.H.F.I.G.I.G.I.K.I.K.J.I.J.I.L.J.L.J.L.L.L.L.8.L.N.L.N.M.N.O.N.O.P.O.Q.N.Q.P.Q.Q.Q.Q.S", +"#p#l#p#l#p#l#B#p#p#p#B#p#m#p#t#p#t#p#t.l#t#u#t#t#t#u#e#t#e#t#x#e#x#e#x#e#x#e#x#x#x#x#b#x.s#x#b.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#j#j#k#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q" +"#j#j#j#j#j#j#k#j#j#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.D.B.C.B.C.B.C.D.C.D.C.D.C.D.E.D.E.C.F.E.F.E.F.F.F.F.G.F.G.F.I.F.I.G.I.G.I.K.J.K.J.I.L.J.L.L.L.L.L.L.M.L.O.L.N.M.N.O.N.O.P.O.Q.O.Q.Q.Q.Q", +"#o#C#l#p#l#p#l#p#l#p#p#p#p#p#p#m#p#u#p#t#p#t.l#t.l#t#u#e#u#e#u#e#u#x#t#x#t#x#e#x#e#x#x.s#x.s#x.s#x.s.s#b.s#k.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#j#j#q#k#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#j#k#j#k" +"#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.x.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.A.B.B.B.B.7.B.B.B.C.B.C.B.C.B.C.D.C.D.C.D.C.C.E.C.F.C.F.E.F.F.F.F#d.F.G.F.I.F.I.F.I.G.I.G.I.I.J.K.L.I.L.I.L.J.L.L.L.L.M.L.N.L.N.M.N.O.N.O.P.N.Q.O.Q.Q.Q.Q.Q.Q.R", +"#p#l#p#l#p#p#p#p#B#p#B#p#t#p#t#p#t.l#t.l#t#t#t#u#e#t#e#t#x#t#x#t#x#e#x#e#x#x#x#x#b#x.s#x#b#x#j#x#j.s#j.s#j.s#j.s#j#k#j#k#j#j#j#k#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#D#z#D#y#D#z#D#y#D#z#D#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q" +"#j#q#j#j#k#j#j#j#k#j#j#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.q.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.w.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.z.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B.C.B.D.B.C.B.C.D.C.D.C.D.C.D.E.C.F.D.F.C.F.E.F.F.F.F.G.F.H.F.K.F.I.G.I.K.I.K.J.K.L.K.L.I.L.J.L.L.L.L.M.L.O.L.O.M.N.O.N.O.P.O.Q.O.Q#f.Q.Q", +"#l#p#l#p#l#p#l#p#p#p#p#p#p#m#p.l#p#t#p#t.l#t.l#t#u#t#u#t#u#e#u#e#t#x#t#x#e#x#e#x#e#x#x#x#x.s#x.s#x#b#x#k.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#j#q#k#q#j#q#k#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#j#k" +"#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.x.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.B.B.B.B.B.7.B.C.B.C.B.C.B.C.D.C.D.C.C.C.D.E.C.E.C.F.C.F.E.F.F.F.F.H.F.H.F.I.F.I.G.I.K.I.K.I.I.J.I.L.I.L.J.L.L.L.L.8.L.M.L.N.L.N.M.N.O.N.O.Q.N.Q.N.Q.Q.Q.Q#A", +"#p#l#p.h#p#p#B#p#B#p#m#p#t#p#t#p#t#p#t#u#t#u#t#t#t#t#e#t#x#t#x#e#x#e#x#e#x#x#b#x.s#x#b#x#b#x#j.s#j.s#j.s#j.s#j#k#j#k#j#j#j#k#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q" +"#j#q#j#q#j#j#k#j#j#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.D.B.C.B.C.B.C.D.C.D.C.D.C.D.E.D.E.C.F.C.F.E.F.E.F.F.F.F.G.F.I.F.I.G.I.G.I.K.I.K.J.I.L.K.L.J.L.J.L.L.M.L.M.L.N.L.N.O.N.O.N.O.Q.O.Q#E.Q.Q", +"#l#C#l#p#l#p.h#p#p#p#p#p#p#p#p#t#p#t#p#t#p#t.l#t#u#t#u#e#u#e#t#x#u#x#e#x#e#x#e#x#x#x#x.s#x.s#x.s#x#k.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#q#k#q#j#q#k#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#k#q#j#q#k#j#k" +"#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.x.y.x.x.x.y.x.y.x.A.x.A.x.A.x.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.B.B.B.7.B.B.B.C.B.C.B.C.B.C.D.C.D.C.D.C.C.E.C.F.C.F.C.F.E.F.E.F.F.F.F.H.F.H.F.I.G.I.G.I.K.I.K.J.I.J.I.L.J.L.J.L.L.L.L.N.L.N.L.N.O.N.O.N.O.P.O.Q.N.Q.Q.Q.Q.Q", +"#p#l#p#C#B#p#p#p#B#p#F#p#t#p#t#p#t.l#t#u#t#t#t#u#e#t#x#t#x#t#x#t#x#e#x#x#x#x#x#x#b#x#b#x#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#j#j#k#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q" +"#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.D.B.C.B.C.B.C.D.C.D.C.D.C.D.F.D.F.C.F.E.F.F.F.F.F.F.G.F.G.F.I.F.I.K.I.K.I.K.J.K.J.I.L.J.L.L.L.L.L.L.O.L.O.L.N.M.N.O.N.O.Q.O.Q.O.Q.Q", +"#l#p#l#p#l#p#C#p#p#p#p#p#p#m#p#t#p#t#p#t.l#t#u#t#u#t#u#t#t#e#u#x#t#x#t#x#e#x#e#x#x.s#x.s#x.s#x.s.s#j.s#k.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#q#j#q#k#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k" +"#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.w.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.x.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.A.B.B.B.B.7.B.B.B.C.B.C.B.C.B.C.D.C.D.C.D.C.C.E.C.F.C.F.E.F.F.F.F#d.F.G.F.I.F.I.F.I.G.I.K.I.I.J.K.L.I.L.I.L.L.L.L.L.L.M.L.N.L.N.M.N.O.N.O.Q.N.Q.O.Q.Q.Q.Q.Q", +"#p#l#B#p#p#p#B#p#B#p#t#p#t#p#t.l#t#u#t#t#t#u#e#t#e#t#x#t#x#t#x#e#x#e#x#x#x#x#b#x.s#x#b#x#j#x#j.s#j.s#j.s#j#k#j#k#j#k#j#j#j#k#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q" +"#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.w.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.z.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B.C.B.D.B.C.B.C.D.C.D.C.D.C.D.E.C.F.D.F.C.F.E.F.F.F.F.G.F.I.F.K.F.I.G.I.K.I.K.J.K.L.K.L.I.L.J.L.L.L.L.M.L.N.L.O.O.N.O.N.O.Q.O.Q.N.Q#G", +"#l#p#l#p#l#p#p#p#p#p#p#B#p#H#p#t#p#t#p#t.l#t#u#t#u#t#u#e#u#x#t#x#t#x#e#x#e#x#x#x#x#x#x.s#x.s#x#j#x#k.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#q#j#q#k#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#k#q#j" +"#q#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.z.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.B.B.B.B.B.7.B.C.B.C.B.C.B.C.D.C.D.C.C.C.D.F.C.F.C.F.C.F.E.F.F.F.F.H.F.H.F.I.F.I.G.I.K.I.K.J.I.J.I.L.I.L.J.L.L.L.L.8.L.O.L.N.M.N.O.N.O.N.O.Q.N.Q.N.Q.Q.Q", +"#p#C#p#C#B#p#B#p#m#p#t#p#t#p#t#p#t#u#t#u#t#t#t#t#x#t#x#t#x#e#x#e#x#x#x#x#b#x.s#x#b#x#j#x#j.s#j.s#j.s#j.s#j#k#j#k#j#j#j#k#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#w#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#y#y#y#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#y#y#y#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#j#q#j#q" +"#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.D.B.C.B.C.B.C.D.C.D.C.D.C.D.E.D.F.C.F.C.F.F.F.F.F.F.F.F.G.F.I.F.I.G.I.G.I.K.I.K.J.I.L.K.L.L.L.L.L.L.M.L.O.L.N.M.N.O.N.O.P.O.Q.O.Q.Q", +"#l#p#l#p#l#p#C#p#p#B#p#p#p#t#p#t#p#t#p#t#u#t#u#t#u#e#u#e#t#x#t#x#e#x#e#x#e#x#x#x#x.s#x.s#x#b#x#k.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#q#j#q#k#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#z#D#z#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#k" +"#q#j#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.q.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.x.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.B.B.B.7.B.B.B.C.B.C.B.C.B.C.D.C.D.C.D.C.C.E.C.F.C.F.C.F.F.F.F.F.F.F.F.I.F.I.F.I.G.I.G.I.K.I.K.L.I.L.I.L.J.L.L.L.L.M.L.N.L.N.L.N.O.N.O.N.O.Q.O.Q.N.Q.Q.Q", +"#p#C#B#p#p#p#B#p#F#p#t#p#t#p#t#u#t#u#t#t#t#t#e#t#x#t#x#t#x#t#x#e#x#x#I#x#x#x#b#x#b#x#j.s#j.s#j.s#j.s#j#k#j#k#j#j#j#k#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#y#y#y#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#y#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#j#q#j#q" +"#j#q#j#q#j#q#j#q#j#j#k#j#j#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.B.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.D.B.C.B.C.B.C.D.C.D.C.D.E.C.F.D.F.C.F.E.F.F.F.F.F.F.K.F.K.F.I.G.I.K.I.K.I.K.L.K.L.I.L.J.L.L.L.L.M.L.O.L.O.L.N.O.N.O#E.O.Q.O.Q.O", +"#l#p#l#p#C#p#p#p#p#p#p#t#p#t#p#t#p#t.l#t#u#t#u#t#u#t#t#x#u#x#t#x#t#x#e#x#x#x#x.s#x.s#x.s#x#k#x#j#x#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#j#q#k#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#z#D#z#D#z#D#z#D#z#D#z#D#z#D#z#D#z#D#z#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#k#q#j" +"#q#k#q#j#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.w.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.x.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.B.B.B.B.B.7.B.7.B.C.B.C.B.C.D.C.D.C.C.C.D.F.C.F.C.F.C.F.E.F.F.F.F#d.F.G.F.I.F.I.G.I.K.I.K.I.I.J.K.L.I.L.J.L.L.L.L.L.L.M.L.N.L.N.M.N.O.N.O.Q.N.Q.N.Q.Q.Q", +"#B#p#p#p#B#p#B#p#t#p#t#p#t#p#t#H#t#t#t#u#t#t#t#t#x#t#x#t#x#e#x#x#x#x#x#x#b#x#b#x#j#x#j#x#j.s#j.s#j.s#j#k#j#j#j#k#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#y#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#y#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#j#q" +"#j#q#j#q#j#q#j#q#j#q#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.w.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B.C.B.D.B.C.B.C.D.C.D.C.D.C.D.E.C.F.C.F.E.F.E.F.F.F.F.G.F.I.F.K.F.I.G.I.K.I.K.J.K.L.K.L.J.L.L.L.L.L.L.O.L.N.L.O.O.N.O.N.O.Q.O.Q#E", +"#l#p#l#p#p#p#p#p#p#B#p#F#p#t#p#t#p#t#H#t#u#t#u#t#t#e#u#x#t#x#t#x#e#x#e#x#x#x#x#x#x.s#x.s#x#j#x#k.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#j#q#k#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#D#z#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#k" +"#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.z.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.B.B.B.B.B.7.B.C.B.C.B.C.B.C.D.C.D.C.C.C.D.F.C.F.C.F.E.F.F.F.F.F.F.I.F.I.F.I.F.I.G.I.K.I.K.J.I.L.I.L.I.L.J.L.L.L.L.N.L.N.L.N.O.N.O.N.O.P.O.Q.N.Q.Q.Q", +"#p#C#B#p#B#p#F#p#F#p#t#p#t#p#t#t#t#u#t#t#t#t#x#t#x#t#x#t#x#t#x#x#x#x#I#x#x#x#b#x#j#x#j.s#j.s#j.s#j#k#j#k#j#k#j#j#j#k#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#y#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#y#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w#q#q#q#q#q#q#q#q#q#q#j#q" +"#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.D.B.C.B.C.B.C.D.C.D.C.D.C.D.F.D.F.C.F.C.F.F.F.F.F.F.G.F.K.F.I.F.I.K.I.K.I.K.J.K.L.I.L.K.L.L.L.L.L.L.O.L.O.L.N.M.N.O.N.O.Q.O.Q.O", +"#l#p#C#p#C#p#p#B#p#p#p#t#p#t#p#t#p#t#u#t#u#t#u#t#u#t#t#x#t#x#t#x#t#x#x#x#x#x#x.s#x.s#x#j#x#k.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#q#j#q#k#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j" +"#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.q.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.x.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.B.B.B.7.B.B.B.C.B.C.B.C.B.C.D.C.D.C.D.C.C.E.C.F.C.F.C.F.F.F.F#d.F.G.F.I.F.I.F.I.K.I.K.I.K.J.K.L.I.L.I.L.L.L.L.L.L.M.L.N.L.N.M.N.O.N.O#E.N.Q.O.Q#E.Q", +"#B#p#p#p#B#p#F#p#t#p#t#p#t#H#t#u#t#t#t#t#e#t#x#t#x#t#x#t#x#x#x#x#I#x#x#x#b#x#j#x#j#x#j#x#j.s#j.s#j#k#j#k#j#j#j#k#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#y#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q" +"#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B.C.B.D.B.C.B.C.D.C.D.C.D.C.D.E.C.F.D.F.C.F.E.F.F.F.F.F.F.I.F.K.F.I.G.I.K.I.K.I.K.L.K.L.I.L.J.L.L.L.L.M.L.O.L.O.O.N.O.N.O.Q.O.Q.O", +"#l#p#C#p#p#p#p#p#p#F#p#F#p#t#p#t#p#t#H#t#u#t#u#t#t#x#u#x#t#x#t#x#e#x#x#x#x#x#x#x#x#b#x#k#x#j#x#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#q#j#q#k#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j" +"#q#j#q#k#q#j#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.w.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.x.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.B.B.B.B.B.7.B.C.B.C.B.C.B.C.D.C.D.C.C.C.D.F.C.F.C.F.C.F.E.F.F.F.F#d.F.I.F.I.F.I.G.I.K.I.K.I.I.J.I.L.I.L.J.L.L.L.L.N.L.O.L.N#J.N.O.N.O.N.O.Q.N.Q.N.Q", +"#p#C#B#p#B#p#F#p#t#p#t#p#t#H#t#t#t#u#t#t#K#t#x#t#x#t#x#e#x#x#x#x#x#x#b#x#b#x#j#x#j#x#j.s#j.s#j#k#j#k#j#j#j#k#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#w#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#y#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w#q#q#q#w#q#q#q#q#q#q#q#q" +"#j#q#j#q#j#q#j#q#j#q#j#q#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.w.t.v.t.v.t.v.t.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.z.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B.C.B.D.B.C.B.C.D.C.D.C.D.F.D.F.C.F.C.F.F.F.F.F.F.F.F.G.F.I.F.I.K.I.K.I.K.I.K.J.K.L.K.L.L.L.L.L.L.O.L.O.L.N.L.N.O.N.O.N.O.Q.O", +"#l#p#C#p#C#p#p#B#p#F#p#t#p#t#p#t#H#t#u#t#u#t#t#e#u#x#t#x#t#x#t#x#e#x#x#x#x#x#x.s#x.s#x#j#x#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#j#q#k#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j" +"#q#k#q#j#q#k#q#j#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.B.B.B.B.B.B.B.7.B.C.B.C.B.C.D.C.D.C.D.C.C.E.C.F.C.F.C.F.F.F.F.F.F.F.F.I.F.I.F.I.K.I.K.I.K.I.K.L.I.L.I.L.L.L.L.L.L.L.L.N.L.N.L.N.O.N.O#E.O.Q.O.Q#E.Q", +"#B#p#B#p#F#p#F#p#t#p#t#p#t#t#t#u#t#t#t#t#x#t#x#t#x#t#x#t#x#x#x#x#I#x#x#x#b#x#j#x#j#x#j#x#j.s#j#k#j#k#j#k#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#y#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w#q#q#q#w#q#q#q#q#q#q" +"#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.A.x.z.x.A.x.A.x.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.D.B.C.B.C.B.C.D.C.D.C.D.C.D.F.D.F.C.F.E.F.F.F.F.F.F.K.F.K.F.I.F.I.K.I.K.I.K.L.K.L.I.L.J.L.L.L.L.L.L.O.L.O#J.N.O.N.O#E.O.Q.O", +"#C#p#C#p#p#B#p#p#p#F#p#t#p#t#p#t#u#t#u#t#u#t#u#K#t#x#t#x#t#x#t#x#x#x#x#x#x#x#x#x#x#j#x#k#x#j#x#j.s#j#k#j#k#j#k#j#k#j#k#j#j#q#k#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j" +"#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.z.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.B.B.B.7.B.B.B.C.B.C.B.C.B.C.D.C.D.C.D#L.C.F.C.F.C.F.E.F.F.F.F#d.F.G.F.I.F.I.F.I.K.I.K.I.I.J.K.L.I.L.I.L.L.L.L.L.L.O.L.N.L.N.O.N.O.N.O.Q.N.Q.N.Q", +"#p#p#B#p#F#p#t#p#t#p#t#H#t#H#t#t#t#t#t#t#K#t#x#t#x#t#x#x#x#x#I#x#x#x#b#x#j#x#j#x#j#x#j.s#j#k#j#k#j#k#j#j#j#k#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#y#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#y#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w#q#q#q#w#q#q#q#q" +"#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B.C.B.D.B.C.B.C.D.C.D.C.D#L.D.F.C.F.D.F#L.F.F.F.F.F.F.G.F.I.F.K.F.I.K.I.K.I.K.J.K.L.K.L#M.L.L.L.L#J.L.O.L.N.L.O.O.N.O.N.O.Q.O", +"#C#p#C#p#p#p#p#F#p#F#p#t#p#t#p#t#H#t#u#t#u#t#t#x#u#x#t#x#t#x#e#x#x#x#x#x#x#x#x#b#x#k#x#j#x#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#q#j#q#k#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j" +"#q#j#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.x.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.B.B.B.B.B.7.B.C.B.C.B.C.B.C.D.C.D.C.C.C.D.F.C.F.C.F#L.F.F.F.F.F.F.I.F.I.F.I.F.I.K.I.K.I.K.L.I.L.I.L.I.L.L.L.L.L.L.N.L.O.L.N.O.N.O.N.O.Q.O.Q.N.Q", +"#B#p#B#p#F#p#F#p#t#p#t#H#t#t#t#u#t#t#K#t#x#t#x#t#x#t#x#K#x#x#x#x#I#x#I#x#j#x#j#x#j.s#j.s#j#k#j#k#j#j#j#k#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#y#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#y#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w#q#q#q#q#q#q" +"#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#j#k#j#j#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.q.q.o.q.q.q.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.D.B.C.B.C.B.C.D.C.D.C.D.C.D.F.D.F.C.F.C.F.F.F.F.F.F.K.F.K.F.I.F.I.K.I.K.I.K.L.K.L.I.L.K.L.L.L.L.L.L.O.L.O.L.N.O.N.O#E.O.Q.O", +"#C#p#C#p#p#B#p#F#p#t#p#t#p#t#H#t#u#t#u#t#t#t#u#K#t#x#t#x#t#x#K#x#x#x#x#x#x.s#x#k#x#j#x#j#x#j#x#j.s#j#k#j#k#j#k#j#k#j#k#q#j#q#k#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j" +"#q#j#q#j#q#j#q#k#q#j#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.u.t.u.t.u.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.B.B.B.7.B.B.B.C.B.C.B.C.B.C.D.C.D.C.D#L.C.F.C.F.C.F.C.F.F.F.F.F.F.G.F.I.F.I.F.I.K.I.K.I.K.I.K.L.I.L.I.L.L.L.L.L.L.O.L.N.L.N.L.N.O.N.O#E.O.Q.O.Q", +"#B#p#F#p#F#p#t#p#t#p#t#F#t#H#t#t#t#t#K#t#K#t#x#t#x#t#x#x#x#x#I#x#x#x#j#x#j#x#j#x#j#x#j.s#j#k#j#j#j#k#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#y#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w#q#q#q#w#q#q#q#q" +"#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.x.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.B.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.D.B.C.B.C.D.C.D.C.D#L.D.F.C.F.D.F#L.F.F.F.F.F.F.F.F.K.F.K.F.I.G.I.K.I.K.I.K.L.K.L.I.L.L.L.L.L.L.O.L.O.L.O.O.N.O.N.O#E.O", +"#C#p#p#B#p#p#p#F#p#F#p#t#p#t#H#t#H#t#u#t#u#K#t#x#t#x#t#x#t#x#x#x#x#x#x#x#x#x#x#j#x#k#x#j#x#j.s#j#k#j#k#j#k#j#k#j#k#j#j#q#k#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j" +"#q#j#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.w.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.x.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.B.B.B.B.B.7.B.C.B.C.B.C.B.C.D.C.D.C.C.C.D.F.C.F.C.F#L.F.F.F.F.F.F#N.F.I.F.I.F.I.G.I.K.I.K#M.I.L.I.L.I.L.L.L.L.L.L#J.L.O.L.N#J.N.O.N.O.N.O.Q.N.Q", +"#B#p#F#p#F#p#F#p#t#H#t#H#t#t#t#t#t#t#K#t#x#t#x#t#x#K#x#K#I#x#x#x#I#x#O#x#j#x#j#x#j.s#j#k#j#k#j#k#j#j#j#k#j#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w#q#q#q#w#q#q" +"#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.w.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B.C.B.D.B.C.B.C.D.C.D.C.D.F.D.F.C.F.C.F.F.F.F.F.F#P.F.K.F.I.F.I.K.I.K.I.K#M.K.L.K.L.K.L.L.L.L.L.L#J.L.O.L.N#J.N.O.N.O#E.O", +"#C#p#C#p#p#F#p#F#p#t#p#t#p#t#H#t#u#t#u#t#t#K#u#K#t#x#t#x#t#x#K#x#x#x#x#x#x#b#x#k#x#j#x#j#x#j#x#j#k#j#k#j#k#j#k#j#k#j#k#q#j#q#k#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#z#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j" +"#q#j#q#j#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.z.A.z.A.z.A.A.B.A.B.A.B.A.B.A.B.B.B.B.B.B.7.B.C.B.C.B.C.B.C.D.C.D#L.C.F.C.F.C.F.C.F.F.F.F.F.F.F.F.I.F.I.F.I.K.I.K.I.K.I.K.L.I.L.I.L.L.L.L.L.L.L.L.N.L.N.L.N.O.N.O#E.O.Q.O.Q", +"#B#p#F#p#F#p#t#p#t#H#t#F#t#u#t#t#K#t#K#t#x#t#x#t#x#K#x#x#x#x#I#x#I#x#j#x#j#x#j#x#j#x#j#k#j#k#j#j#j#k#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w#q#q#q#q" +"#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#j#k#j#j#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.A.x.z.x.A.x.A.x.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.D.B.C.B.C.B.C.D.C.D#L.D#L.D.F.D.F#L.F.F.F.F.F.F.F.F.K.F.K.F.I.F.I.K.I.K.I.K.L.K.L.I.L.L.L.L.L.L#J.L.O.L.O#J.N.O.N.O#E.O", +"#C#p#p#B#p#H#p#F#p#F#p#t#H#t#H#t#H#t#t#t#u#K#t#x#t#x#t#x#K#x#x#x#x#x#x#x#x#Q#x#j#x#j#x#j#x#j.s#j#k#j#k#j#k#j#k#j#k#q#j#q#k#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j" +"#q#j#q#j#q#j#q#j#q#k#q#j#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.z.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.B.B.B.7.B.B.B.C.B.C.B.C.B.C.D.C.D.C.D#L.C.F.C.F#L.F.F.F.F.F.F#N.F.K.F.I.F.I.F.I.K.I.K#M.I.L.K.L.I.L#M.L.L.L.L#J.L.O.L.N#J.N.O.N.O.N.O.Q.N.Q", +"#B#p#F#p#F#p#F#p#t#F#t#H#t#t#t#t#K#t#K#t#x#t#x#t#x#K#x#x#I#x#x#x#I#x#O#x#j#x#j#x#j.s#j#k#j#j#j#k#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w#q#q#q#w#q#q" +"#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B.C.B.D.B.C.B.C.D.C.D.C.D#L.D.F.C.F.D.F#L.F.F.F.F#P.F.K.F.I.F.K#P.I.K.I.K#M.K.L.K.L.K.L#M.L.L.L.L#J.L.O.L.N.L.O.O.N.O#E.O", +"#C#B#C#p#p#F#p#F#p#t#p#t#H#t#H#t#u#t#u#t#t#K#t#K#t#x#t#x#K#x#K#x#x#x#x#x#x#j#x#k#x#j#x#j.s#j#k#j#k#j#k#j#k#j#k#j#j#q#k#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#y#q#z#q#y#q#z#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q" +"#q#j#q#j#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.x.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.B.B.B.B.B.7.B.C.B.C.B.C.B.C.D.C.D#L.C#L.D.F.C.F.C.F#L.F.F.F.F.F.F.I.F.I.F.I#P.I.K.I.K.I.K.L.I.L.I.L#M.L.L.L.L.L.L.N.L.O.L.N.O.N.O#E.O.Q.O.Q", +"#F#p#F#p#F#p#t#p#t#H#t#t#t#t#t#t#K#t#x#t#x#t#x#K#x#K#I#x#x#x#I#x#O#x#j#x#j#x#j#x#j#Q#j#k#j#k#j#j#j#k#j#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#y#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#y#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#z#q#w#q#q#q#w" +"#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.D.B.C.B.C.B.C.D.C.D#L.D#L.D.F.D.F#L.F#L.F.F.F.F.F.F.K.F.K.F.I.F.I.K.I.K.I.K.L.K.L.I.L#R.L.L.L.L.L.L.O.L.O#J.N.O.N.O#E.O", +"#C#p#p#B#p#F#p#F#p#F#p#t#H#t#H#t#u#t#t#K#u#K#t#x#t#x#t#x#K#x#x#x#x#x#x#I#x#Q#x#j#x#j#x#j#x#j#k#j#k#j#k#j#k#j#k#q#k#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q" +"#q#j#q#j#q#j#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#k.s#b.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.B.B.B.7.B.B.B.C.B.C.B.C.B.C.D.C.D.C.D#L.C.F.C.F#L.F#L.F.F.F.F#P.F.K.F.I.F.I.F.I.K.I.K#M.K#M.K.L.I.L.I.L.L.L.L#J.L.O.L.N#J.N.O.N.O.N.O#E.N.Q", +"#F#p#F#p#F#p#t#H#t#F#t#H#t#t#t#t#K#t#K#t#x#t#x#K#x#x#x#x#I#x#I#x#O#x#j#x#j#x#j#x#j#k#j#k#j#j#j#k#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w#q#q" +"#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.x.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B.D.B.D.B.C.B.C.D.C.D.C.D#L.D.F.C.F.D.F#L.F.F.F.F#P.F#P.F.I.F.K#P.I.K.I.K#M.K#M.K.L.K.L#M.L.L.L.L#J.L.O.L.O.L.O.O.N.O#E.O", +"#C#B#C#H#p#F#p#F#p#t#p#t#H#t#H#t#t#t#u#K#t#K#t#x#t#x#t#x#K#x#K#x#x#x#x#x#x#j#x#j#x#j#x#j.s#j#k#j#k#j#k#j#k#j#k#q#j#q#k#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#q#q#q#q#q#q#q#q#q#q#q#q" +"#q#j#q#j#q#j#q#j#q#j#q#k#q#j#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.w.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.x.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.B.B.B.B.B.7.B.C.B.C.B.C.B.C.D.C.D#L.C#L.D.F.C.F.C.F#L.F.F.F.F.F.F#N.F.I.F.I#P.I.K.I.K.I.K#M.I.L.I.L#M.L.L.L.L.L.L.N.L.O.L.N#J.N.O#E.O#E.O.Q", +"#F#p#F#p#F#p#t#H#t#H#t#t#t#t#K#t#K#t#x#t#x#t#x#K#x#K#I#x#x#x#I#x#O#x#j#x#j#x#j#x#j#Q#j#k#j#k#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w#q#q#q#w" +"#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.w.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.z.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B.C.B.D.B.C.B.C.D#L.D#L.D.F.D.F#L.F#L.F.F.F.F.F.F#P.F.K.F.I.F.I.K.I.K.I.K#M.K.L.I.L#R.L.L.L.L.L.L.O.L.O#J.N#J.N.O#E.O", +"#C#p#p#F#p#F#p#F#p#t#H#t#H#t#H#t#u#t#t#K#t#K#t#x#t#x#K#x#K#x#x#x#x#x#x#O#x#Q#x#j#x#j#x#j#Q#j#k#j#k#j#k#j#k#j#j#q#k#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q" +"#q#q#q#j#q#j#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.B.B.B.B.B.B.B.C.B.C.B.C.B.C.D.C.D.C.D#L.C.F.C.F#L.F#L.F.F.F.F#P.F#P.F.I.F.I.F.I.K.I.K#M.K#M.K.L.I.L.I.L.L.L.L#J.L#J.L.N#J.N#J.N.O.N.O#E.O.Q", +"#F#p#F#p#t#p#t#H#t#F#t#H#t#t#K#t#K#t#K#t#x#t#x#K#I#x#x#x#I#x#O#x#j#x#j#x#j#x#j#Q#j#k#j#k#j#j#j#k#j#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w#q#q" +"#q#w#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.x.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.D.B.C.B.C.B.C.D.C.D#L.D.F.C.F.D.F#L.F.F.F.F#P.F#P.F.K.F.K#P.I.K.I.K#M.K#M.K.L.K.L#M.L.L.L.L#J.L#J.L.O.L.O#J.N.O.N.O", +"#C#B#C#F#p#F#p#F#p#t#H#t#H#t#H#t#t#t#u#K#t#x#t#x#t#x#K#x#K#x#K#x#x#I#x#Q#x#j#x#j#x#j#x#j#k#j#k#j#k#j#k#j#k#j#k#q#j#q#k#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q#q#q" +"#q#q#q#j#q#j#q#j#q#j#q#k#q#j#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.q.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.A.B.B.B.B.7.B.B.B.C.B.C.B.C.B.C.D#L.D#L.D.F.C.F.C.F#L.F.F.F.F.F.F#N.F.K.F.I#P.I.K.I.K.I.K#M.I.L.K.L#M.L.L.L.L.L.L#J.L.O.L.N#J.N.O#E.O#E.O.Q", +"#F#p#F#p#F#p#t#F#t#H#t#t#t#t#K#t#K#t#x#t#x#t#x#K#x#K#I#x#I#x#O#x#O#x#j#x#j#x#j#Q#j#Q#j#j#j#k#j#j#j#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#S#D#D#D#S#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w" +"#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.z.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B.C.B.D.B.C.B.C.D#L.D#L.D#L.D.F#L.F#L.F.F.F.F.F.F#P.F.K.F.I.F.K#P.I.K.I.K#M.K.L.K.L#R.L.L.L.L.L.L#J.L.O#J.N#J.O.O#E.O", +"#C#p#p#F#p#F#p#F#p#t#H#t#H#t#u#t#u#K#t#K#t#K#t#x#t#x#K#x#K#x#x#x#x#x#x#O#x#O#x#j#x#j#x#j#Q#j#k#j#k#j#k#j#k#q#j#q#k#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#q#q#q#q#q#q#q#q#q#q" +"#q#q#q#j#q#j#q#j#q#k#q#j#q#k#q#j#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.z.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.B.B.B.B.B.7.B.C.B.C.B.C.B.C.D.C.D#L.C#L.C.F#L.F#L.F.F.F.F#P.F#P.F.I.F.I.F.I#P.I.K#M.K#M.K.L.I.L.I.L#M.L.L#J.L#J.L.N#J.N#J.N.O.N.O#E.O.Q", +"#F#p#F#p#t#p#t#H#t#F#t#F#t#t#K#t#K#t#K#t#x#K#x#K#I#x#x#x#I#x#O#x#j#x#j#x#j#x#j#Q#j#k#j#k#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w#q#q" +"#q#w#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.D.B.C.B.C.B.C.D.C.D#L.D#L.D.F.D.F#L.F#L.F.F#P.F#P.F.K.F.K#P.I#P.I.K#M.K#M.K.L.K.L#M.L#M.L.L#J.L#J.L.O.L.O#J.N.O.N.O", +"#C#B#C#F#p#F#p#F#p#t#H#t#H#t#H#t#t#K#u#K#t#x#t#x#t#x#K#x#K#x#x#x#x#I#x#Q#x#j#x#j#x#j#x#j#k#j#k#j#k#j#k#j#j#q#k#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#y#q#z#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q#q#q" +"#q#q#q#j#q#j#q#j#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#k.s#b.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.x.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.B.B.B.7.B.B.B.C.B.C.B.C.B.C.D#L.D#L.D#L.C.F.C.F#L.F.F.F.F.F.F#N.F.K.F.I#P.I#P.I.K.I.K#M.I.L.K.L#M.L#M.L.L.L.L#J.L.O.L.N#J.N.O#E.O#E.O.Q", +"#F#p#F#p#F#H#t#F#t#H#t#t#t#t#K#t#K#t#x#t#x#K#x#K#x#K#I#x#I#x#O#x#O#x#j#x#j#x#j#Q#j#Q#j#j#j#k#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w" +"#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B.C.B.D.B.C.B.C.D#L.D#L.D#L.D.F#L.F#T.F#L.F.F.F.F#P.F.K.F.I.F.K#P.I.K.I.K#M.K.L.K.L#R.L#M.L.L.L.L#J.L.O#J.N#J.O.O#E.O", +"#C#H#p#F#p#F#p#F#p#t#H#t#H#t#t#t#u#K#t#K#t#K#t#x#t#x#K#x#K#x#x#x#x#Q#x#O#x#O#x#j#x#j#x#j#Q#j#k#j#k#j#k#j#k#q#j#q#k#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#z#q#z#q#y#q#z#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#q#q#q#q#q#q#q#q#q#q" +"#q#q#q#j#q#j#q#j#q#j#q#j#q#k#q#j#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.w.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.x.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.B.B.B.B.B.7.B.C.B.C.B.C.B.C.D.C.D#L.C#L.D.F#L.F#L.F#L.F.F#P.F#P.F.I.F.I.F.I#P.I.K#M.K#M.K.L.I.L.I.L#M.L.L#J.L#J.L.N#J.O#J.N.O.N.O#E.O.Q", +"#F#p#F#p#t#H#t#H#t#F#t#F#t#t#K#t#K#t#K#t#x#K#x#K#I#x#x#x#I#x#O#x#j#x#j#x#j#x#j#Q#j#j#j#k#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w#q#q" +"#q#w#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.D.B.C.B.C.B.C.D.C.D#L.D#L.D.F.D.F#L.F#L.F.F#P.F#P.F.K.F.K#P.I#P.I.K#M.K#M.K.L.K.L#M.L#R.L.L#J.L#J.L.O.L.O#J.N.O.N.O", +"#C#F#C#F#p#F#p#F#p#t#H#t#H#t#H#t#t#K#t#K#t#x#t#x#t#x#K#x#K#x#x#x#x#O#x#Q#x#j#x#j#x#j#Q#j#k#j#k#j#k#j#k#j#j#q#k#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q#q#q" +"#q#q#q#q#q#j#q#j#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.B.B.B.7.B.B.B.C.B.C.B.C.B.C.D#L.D#L.D#L.C.F.C.F#L.F#L.F.F.F.F#N.F.K.F.I#P.I#P.I.K.I.K#M.K#M.K.L#M.L#M.L.L.L.L#J.L.O.L.N#J.N.O#E.O#E.O#E", +"#F#p#F#p#F#H#t#F#t#H#t#t#K#t#K#t#K#t#x#t#x#K#I#K#x#K#I#x#I#x#O#x#O#x#j#x#j#Q#j#Q#j#Q#j#j#j#k#j#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#w#q#z#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w" +"#q#q#q#w#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.x.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B.C.B.D.B.C.B.C.D#L.D#L.D#L.D.F#L.F#T.F#L.F.F.F.F#P.F#P.F.I#P.K#P.I.K.I.K#M.K#M.K.L#R.L#M.L.L.L.L#J.L.O#J.O#J.O.O#E.O", +"#C#H#p#F#p#F#p#F#H#t#H#t#H#t#t#t#u#K#t#K#t#K#t#x#K#x#K#x#K#x#x#I#x#Q#x#O#x#O#x#j#x#j#Q#j#Q#j#k#j#k#j#k#j#k#q#j#q#k#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#y#q#z#q#y#q#z#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q" +"#q#q#q#q#q#j#q#j#q#j#q#j#q#k#q#j#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.w.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.x.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.B.B.B.B.B.7.B.C.B.C.B.C.B#L.D#L.D#L.C#L.D.F#L.F#L.F#L.F.F#P.F#P.F.I.F.I#P.I#P.I.K#M.K#M.K#M.I.L#M.L#M.L.L#J.L#J.L.N#J.O#J.N#J.N.O#E.O#E", +"#F#p#F#p#t#H#t#H#t#F#t#F#K#t#K#t#K#t#K#t#x#K#x#K#I#x#x#x#O#x#O#x#j#x#j#x#j#Q#j#Q#j#j#j#k#j#j#j#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q" +"#q#w#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.w.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.x.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.z.A.z.A.z.A.z.B.z.B.A.B.A.B.A.B.B.B.B.B.B.D.B.C.B.C.B.C.D.C.D#L.D#L.D.F.D.F#L.F#L.F.F#P.F#P.F#P.F.K#P.I#P.I.K#M.K#M.K#M.K.L#M.L#R.L.L#J.L#J.L.O.L.O#J.N.O.N.O", +"#C#F#C#F#p#F#p#F#H#t#H#t#H#t#H#t#t#K#t#K#t#x#t#x#K#x#K#x#K#x#K#x#x#O#x#Q#x#j#x#j#x#j#Q#j#k#j#k#j#k#j#k#q#j#q#k#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#q#q#q#q#q#q#q#q" +"#q#q#q#q#q#j#q#j#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.B.B.B.7.B.B.B.C.B.C.B.C.B.C.D#L.D#L.D#L.C.F#L.F#L.F#L.F.F#P.F#P.F#P.F.I#P.I#P.I.K.I.K#M.K#M.K.L#M.L#M.L.L.L.L#J.L.O.L.N#J.N#J#E.O#E.O#E", +"#F#p#F#p#F#H#t#F#t#F#t#t#K#t#K#t#K#t#x#t#x#K#I#K#x#K#I#x#O#x#O#x#O#x#j#x#j#Q#j#Q#j#Q#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w" +"#q#q#q#w#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.x.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.D.B.C.B.C.D#L.D#L.D#L.D.F#L.F#T.F#L.F.F.F.F#P.F#P.F.K#P.K#P.I.K.I.K#M.K#M.K.L#R.L#M.L.L.L.L#J.L.O#J.O#J.O#J#E.O", +"#C#F#p#F#p#F#p#F#H#t#H#t#H#t#t#t#u#K#t#K#t#K#t#x#K#x#K#x#K#x#x#I#x#Q#x#O#x#O#x#j#x#j#Q#j#Q#j#k#j#k#j#k#q#k#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#y#q#z#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q" +"#q#q#q#q#q#j#q#j#q#j#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.x.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.B.B.B.B.B.7.B.C.B.C.B.C.B#L.D#L.D#L.C#L.D.F#L.F#L.F#L.F.F#P.F#P.F#N#P.I#P.I#P.I.K#M.K#M.K#M.I.L#M.L#M.L.L#J.L#J.L#J#J.O#J.N#J.N.O#E.O#E", +"#F#p#F#p#t#F#t#H#t#F#t#F#K#t#K#t#K#t#K#K#x#K#x#K#I#x#I#x#O#x#O#x#O#x#O#x#j#Q#j#Q#j#j#j#k#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q" +"#q#w#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.z.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B.C.B.D.B#L.B#L.D#L.D#L.D.F.D.F#L.F#L.F.F#P.F#P.F#P.F.K#P.I#P.I.K#M.K#M.K#M.K.L#R.L#R.L.L#J.L#J.L.O.L.O#J.N#J.N.O", +"#C#F#C#F#p#F#p#F#H#t#H#t#H#t#H#K#t#K#t#K#t#K#t#x#K#x#K#x#K#x#K#x#x#O#x#O#x#j#x#j#x#j#Q#j#k#j#k#j#k#j#k#q#j#q#k#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#q#q#q#q#q#q#q#q" +"#q#q#q#q#q#j#q#j#q#j#q#k#q#j#q#k#q#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.B.B.B.B.B.B.B.C.B.C.B.C.B.C.D#L.D#L.D#L#L.F#L.F#L.F#L#P.F#P.F#P.F#P.F.I#P.I#P.I.K.I.K#M.K#M.K.L#M.L#M.L.L.L.L#J.L#J.L.N#J.N#J#E.O#E.O#E", +"#F#p#F#p#F#H#t#F#t#F#t#t#K#t#K#t#K#t#x#K#x#K#I#K#x#K#I#x#O#x#O#x#O#x#j#x#j#Q#j#Q#j#Q#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w" +"#q#q#q#w#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.x.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.D.B.C.B.C.B#L.D#L.D#L.D.F#L.F#T.F#L.F.F#P.F#P.F#P#P.K#P.K#P.I.K.I.K#M.K#M#R.L#R.L#M.L.L#J.L#J.L#J#J.O#J.O#J#E.O", +"#C#F#p#F#p#F#p#F#H#t#H#t#H#t#F#K#u#K#t#K#t#K#t#x#K#x#K#x#K#x#x#I#x#Q#x#O#x#O#x#j#x#j#Q#j#Q#j#k#j#k#j#j#q#k#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q" +"#q#q#q#q#q#j#q#j#q#j#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#k.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.q.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.A.B.B.B.B.7.B.B.B.C.B.C.B#L.B#L.D#L.C#L.D.F#L.F#L.F#L.F.F#P.F#P.F#N#P.K#P.I#P.I.K#M.K#M.K#M#M.L#R.L#M.L.L#J.L#J.L#J#J.O#J.N#J.N.O#E.O#E", +"#F#p#F#p#t#F#t#H#t#F#t#F#K#t#K#t#K#t#K#K#x#K#x#K#I#x#I#x#O#x#O#x#O#x#O#x#j#Q#j#Q#j#j#j#k#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q" +"#q#w#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.z.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B.C.B.D.B#L.B#L.D#L.D#L#T#L#T.F#L.F#L.F.F#P.F#P.F#P.F.K#P.I#P.I#P#M.K#M.K#M.K.L#R.L#R.L.L#J.L#J.L#J#J.O#J.N#J#U.O", +"#C#F#C#F#p#F#p#F#H#t#H#t#H#t#H#K#t#K#t#K#t#K#t#K#K#x#K#x#K#x#K#x#x#O#x#O#x#j#x#j#x#j#Q#j#Q#j#Q#j#k#j#k#q#j#q#k#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#z#q#z#q#y#q#z#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#q#q#q#q#q#q#q#q" +"#q#q#q#q#q#j#q#j#q#j#q#k#q#j#q#k#q#j#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.z.A.z.A.z.A.A.B.A.B.A.B.A.B.A.B.B.B.B.B.B.7.B.C.B.C.B.C.B#L.D#L.D#L#L.F#L.F#L.F#L#P.F#P.F#P.F#P.F.I#P.I#P.I#P.I.K#M.K#M.K.L#M.L#M.L.L#J.L#J.L#J.L.N#J.N#J#E.O#E.O#E", +"#F#p#F#H#F#H#t#F#t#F#t#t#K#t#K#t#K#t#x#K#x#K#I#K#x#K#I#x#O#x#O#x#O#x#j#x#j#Q#j#Q#j#Q#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w" +"#q#q#q#w#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.A.x.z.x.A.x.A.x.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.D.B.C.B.C.B#L.D#L.D#L.D#L#T.F#T.F#L#P.F#P.F#P.F#P#P.K#P.K#P.I#P.I.K#M.K#M#R.L#R.L#M.L.L#J.L#J.L#J#J.O#J.O#J#E.O", +"#C#F#p#F#p#F#p#F#H#F#H#t#H#t#F#K#H#K#t#K#t#K#t#x#K#x#K#x#K#x#x#I#x#Q#x#O#x#O#x#j#x#j#Q#j#Q#j#k#j#k#j#j#q#k#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q" +"#q#q#q#q#q#j#q#j#q#j#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#k.s#b.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.q.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.z.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.B.B.B.7.B.B.B.C.B.C.B#L.B#L.D#L.D#L.D.F#L.F#L.F#L.F.F#P.F#P.F#N#P.K#P.I#P.I#P#M.K#M.K#M#M.L#R.L#M.L#M#J.L#J.L#J#J.O#J.N#J.N.O#E.O#E", +"#F#p#F#H#F#F#t#H#t#F#t#F#K#t#K#t#K#t#K#K#x#K#x#K#I#K#I#K#O#x#O#x#O#x#O#x#j#Q#j#Q#j#j#j#k#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#y#y#z#y#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q" +"#q#w#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.z.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B.C.B.D.B#L.B#L.D#L.D#L#T#L#T.F#L.F#L.F.F#P.F#P.F#P.F.K#P.I#P.K#P#M.K#M.K#M.K.L#R.L#R.L#M#J.L#J.L#J#J.O#J.N#J#U.O", +"#C#F#C#F#p#F#p#F#H#t#H#t#H#t#H#K#t#K#t#K#t#K#t#K#K#x#K#x#K#x#K#x#x#O#x#O#x#j#x#j#x#j#Q#j#Q#j#Q#j#k#j#k#q#j#q#k#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#q#q#q#q#q#q#q#q" +"#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#k#q#j#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.z.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.B.B.B.B.B.7.B.C.B#L.B#L.B#L.D#L.D#L#L#L#L.F#L.F#L#P.F#P.F#P.F#P.F.I#P.I#P.I#P#M.K#M.K#M.K.L#M.L#M.L#M#J.L#J.L#J#J.N#J.N#J#E.O#E.O#E", +"#F#p#F#H#F#H#t#F#t#F#t#F#K#t#K#t#K#t#K#K#x#K#I#K#x#K#I#x#O#x#O#x#O#x#j#x#j#Q#j#Q#j#Q#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w" +"#q#q#q#w#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.D.B.C.B.C.B#L.D#L.D#L.D#L#T.F#T.F#L#P.F#P.F#P.F#P#P.K#P.K#P.I#P#M.K#M.K#M#R.L#R.L#M#J#M#J.L#J.L#J#J.O#J.O#J#E.O", +"#C#F#p#F#p#F#p#F#H#F#H#t#H#t#F#K#H#K#t#K#t#K#t#x#K#x#K#x#K#x#x#I#x#Q#x#O#x#O#x#j#x#j#Q#j#Q#j#k#j#k#j#j#q#k#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q" +"#q#q#q#q#q#j#q#j#q#j#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#k.s#b.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.z.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.B.B.B.7.B.B.B.C.B.C.B#L.B#L.D#L#T#L#T#L#L.F#L.F#L#P.F#P.F#P.F#N#P.K#P.I#P.I#P#M.K#M.K#M#M.L#R.L#M.L#M#J.L#J.L#J#J.O#J.N#J#E.O#E.O#E", +"#F#p#F#H#F#F#F#H#t#F#t#F#K#t#K#t#K#t#K#K#x#K#x#K#I#K#I#K#O#x#O#x#O#x#O#x#j#Q#j#Q#j#O#j#Q#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#y#y#z#y#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q" +"#q#w#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B.C.B.D.B#L.B#L.D#L.D#L#T#L#T.F#L.F#L.F#L#P.F#P.F#P#P.K#P.I#P.K#P#M.K#M.K#M.K.L#R.L#R.L#M#J.L#J#J#J#J.O#J.N#J#U.O", +"#C#F#C#F#p#F#p#F#H#t#H#t#F#t#H#K#t#K#t#K#t#K#t#K#K#x#K#x#K#x#K#Q#x#O#x#O#x#O#x#O#x#j#Q#j#Q#j#Q#j#k#j#k#q#j#q#k#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#z#q#z#q#y#q#z#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#q#q#q#q#q#q#q#q" +"#q#q#q#q#q#j#q#j#q#j#q#k#q#j#q#k#q#j#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.z.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.B.B.B.B.B.7.B.C.B#L.B#L.B#L.D#L.D#L#L#L#T.F#L.F#L#P.F#P.F#P#P#P#P.I#P.I#P#M#P#M.K#M.K#M.K.L#M.L#M#J#M#J.L#J.L#J#J.N#J.O#J#E.O#E.O#E", +"#F#p#F#H#F#H#t#F#t#F#t#F#K#F#K#t#K#t#K#K#K#K#I#K#x#K#I#x#O#x#O#x#O#x#j#x#j#Q#j#Q#j#Q#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w" +"#q#q#q#w#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.D.B#L.B#L.B#L.D#L#T#L#T#L#T.F#T.F#L#P#L#P.F#P.F#P#P.K#P.K#P#M#P#M.K#M.K#M#R.L#R.L#M#J#R#J.L#J.L#J#J.O#J.O#J#E.O", +"#C#F#p#F#p#F#p#F#H#F#H#t#H#t#F#K#H#K#t#K#t#K#t#x#K#x#K#x#K#x#x#O#x#Q#x#O#x#O#x#j#x#j#Q#j#Q#j#k#j#k#j#j#q#k#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q" +"#q#q#q#q#q#j#q#j#q#j#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#k.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.z.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.B.B.B.7.B.B.B#L.B#L.B#L.B#L.D#L#T#L#T#L#L.F#L#P#L#P.F#P.F#P.F#N#P.K#P.I#P.I#P#M.K#M.K#M#M.L#R.L#M.L#M#J.L#J.L#J#J.O#J.N#J#E.O#E.O#E", +"#F#p#F#H#F#F#F#H#t#F#t#F#K#t#K#t#K#t#K#K#x#K#x#K#I#K#I#K#O#x#O#x#O#x#O#x#j#Q#j#Q#j#O#j#Q#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q" +"#q#w#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B.C.B.D.B#L.B#L.D#L.D#L#T#L#T.F#L#P#T#P#L#P.F#P#P#P#P.K#P.I#P.K#P#M.K#M.K#M#R.L#R.L#R.L#M#J.L#J#J#J#J.O#J#U#J#U.O", +"#C#F#C#F#p#F#p#F#H#t#H#t#F#t#H#K#t#K#t#K#t#K#t#K#K#x#K#x#K#x#K#x#x#O#x#O#x#O#x#O#x#j#Q#j#Q#j#Q#j#k#j#k#q#j#q#k#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#z#q#z#q#y#q#z#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#q#q#q#q#q#q#q#q" +"#q#q#q#q#q#j#q#j#q#j#q#k#q#j#q#k#q#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.z.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.B.B.B.B.B.7.B.C.B#L.B#L.B#L.D#L.D#L#L#L#T.F#L.F#L#P.F#P.F#P#P#P#P.I#P.I#P#M#P#M.K#M.K#M#R.L#M.L#M#J#M#J.L#J#J#J#J.N#J.O#J#E.O#E.O#E", +"#F#p#F#H#F#H#t#F#t#F#t#F#K#F#K#t#K#t#K#K#K#K#I#K#x#K#I#x#O#x#O#x#O#x#O#x#O#Q#j#Q#j#Q#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w" +"#q#q#q#w#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.D.B#L.B#L.B#L.D#L#T#L#T#L#T.F#T.F#L#P#L#P.F#P.F#P#P.K#P.K#P#M#P#M.K#M.K#M#R.L#R.L#M#J#R#J.L#J.L#J#J.O#J.O#J#E.O", +"#C#F#p#F#p#F#p#F#H#F#H#t#H#t#F#K#H#K#t#K#t#K#t#x#K#x#K#x#K#x#K#I#K#Q#x#O#x#O#x#j#x#j#Q#j#Q#j#Q#j#Q#j#j#q#k#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q" +"#q#q#q#q#q#j#q#j#q#j#q#j#q#k#q#j#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.q.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.z.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.B.B.B.7.B.B.B#L.B#L.B#L.B#L.D#L#T#L#T#L#L.F#L#P#L#P.F#P.F#P.F#N#P.K#P.I#P#M#P#M.K#M.K#M#M.L#R.L#M.L#M#J.L#J.L#J#J.O#J#E#J#E.O#E#U#E", +"#F#p#F#H#F#F#F#H#t#F#t#F#K#t#K#t#K#t#K#K#x#K#x#K#I#K#I#K#O#x#O#x#O#x#O#x#j#Q#j#Q#j#O#j#Q#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q" +"#q#w#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B#L.B#T.B#L.B#L.D#L.D#L#T#L#T.F#L#P#T#P#L#P.F#P#P#P#P.K#P.I#P#R#P#M.K#M#R#M#R.L#R.L#R#J#M#J.L#J#J#J#J.O#J#U#J#U.O", +"#C#F#C#F#p#F#p#F#H#t#H#t#H#t#H#K#t#K#t#K#t#K#t#K#K#x#K#x#K#x#K#x#x#O#x#O#x#O#x#O#x#j#Q#j#Q#j#Q#j#k#j#k#q#j#q#k#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#z#q#y#q#z#q#z#q#q#q#q#q#q#q#q#q" +"#q#q#q#q#q#j#q#j#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.z.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.B.B.B.B.B.7.B.C.B#L.B#L.B#L#T#L#T#L#L#L#T.F#L#P#L#P.F#P.F#P#P#P#P.I#P.I#P#M#P#M.K#M#R#M#R.L#M.L#M#J#M#J.L#J#J#J#J.N#J.O#J#E.O#E.O#E", +"#F#p#F#H#F#H#t#F#t#F#t#F#K#F#K#t#K#t#K#K#K#K#I#K#x#K#I#K#O#x#O#x#O#x#O#x#O#Q#j#Q#j#Q#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w" +"#q#q#q#w#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B.B.B.B.B.B.B.D.B#L.B#L.B#L.D#L#T#L#T#L#T.F#T.F#L#P#L#P.F#P.F#P#P.K#P.K#P#M#P#M.K#M.K#M#R.L#R.L#M#J#R#J.L#J#J#J#J.O#J.O#J#E.O", +"#C#F#C#F#C#F#p#F#H#F#H#t#H#t#F#K#H#K#t#K#t#K#t#K#K#K#K#x#K#x#K#I#K#Q#x#O#x#O#x#j#x#j#Q#j#Q#j#Q#j#Q#j#j#q#k#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#y#q#z#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#q#q#q#q#q#q#q#q#q#q" +"#q#q#q#q#q#j#q#j#q#j#q#j#q#k#q#j#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.q.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.z.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.B.B.B.7.B.B.B#L.B#L.B#L.B#L.D#L#T#L#T#L#L.F#L#P#L#P.F#P#P#P#P#N#P.K#P#M#P#M#P#M.K#M.K#M#M.L#R#J#M#J#M#J.L#J.L#J#J.O#J#E#J#E.O#E#U#E", +"#F#p#F#H#F#F#F#H#t#F#t#F#K#t#K#t#K#t#K#K#x#K#x#K#I#K#I#K#O#x#O#x#O#x#O#x#j#Q#j#Q#j#O#j#Q#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w#q#q" +"#q#w#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B#L.B#T.B#L.B#L#T#L#T#L#T#L#T.F#L#P#T#P#L#P.F#P#P#P#P.K#P#M#P#R#P#M.K#M#R#M#R.L#R#J#R#J#M#J.L#J#J#J#J.O#J#U#J#U.O", +"#C#F#C#F#p#F#p#F#H#F#H#F#H#t#H#K#F#K#F#K#t#K#t#K#K#x#K#x#K#x#K#x#x#O#x#O#x#O#x#O#x#j#Q#j#Q#j#Q#j#k#j#k#q#j#q#k#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q#q#q" +"#q#q#q#q#q#j#q#j#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.z.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.B.B.B.B.B#V.B#L.B#L.B#L.B#L#T#L#T#L#L#L#T#P#L#P#L#P.F#P.F#P#P#P#P.I#P.I#P#M#P#M.K#M#R#M#R.L#M.L#M#J#M#J.L#J#J#J#J.N#J.O#J#E.O#E.O#E", +"#F#C#F#H#F#H#F#F#t#F#t#F#K#F#K#t#K#t#K#K#K#K#I#K#x#K#I#K#O#K#O#x#O#x#O#x#O#Q#j#Q#j#Q#j#O#j#O#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w" +"#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.A.x.z.x.A.x.A.x.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B.B.B.B.B#W.B#T.B#L.B#L.B#L.D#L#T#L#T#L#T#P#T#P#L#P#L#P#P#P#P#P#P.K#P.K#P#M#P#M.K#M#R#M#R.L#R.L#M#J#R#J#J#J#J#J#J.O#J#U#J#E.O", +"#C#F#C#F#C#F#p#F#H#F#H#t#H#t#F#K#H#K#t#K#t#K#t#K#K#K#K#x#K#x#K#I#K#Q#x#O#x#O#x#O#x#O#Q#j#Q#j#Q#j#Q#j#k#q#k#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#q#q#q#q#q#q#q#q#q#q" +"#q#q#q#j#q#j#q#j#q#j#q#j#q#k#q#j#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.z.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.B.B.B.7.B.B.B#L.B#L.B#L#W#L#T#L#T#L#T#L#L.F#L#P#L#P.F#P#P#P#P#N#P.K#P#M#P#M#P#M.K#M#R#M#M.L#R#J#M#J#M#J.L#J#J#J#J.O#J#E#J#E.O#E#U#E", +"#F#p#F#p#F#F#F#H#t#F#t#F#K#F#K#F#K#t#K#K#K#K#K#K#I#K#I#K#O#x#O#x#O#x#O#x#j#Q#j#Q#j#O#j#Q#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#S#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w#q#q" +"#q#w#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.z.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B.B.B.B.B#L.B#T.B#L.B#L#T#L#T#L#T#L#T.F#L#P#T#P#L#P.F#P#P#P#P.K#P#M#P#R#P#M.K#M#R#M#R.L#R#J#R#J#M#J.L#J#J#J#J.O#J#U#J#U.O", +"#C#F#C#F#p#F#p#F#H#F#H#F#H#t#H#K#F#K#F#K#t#K#t#K#K#x#K#x#K#x#K#x#K#O#K#Q#x#O#x#O#x#j#Q#j#Q#j#Q#j#Q#j#Q#j#j#q#k#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q#q#q" +"#q#q#q#j#q#j#q#j#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.z.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.B.B.B.B.B#V.B#L.B#L.B#L.B#L#T#L#T#L#L#L#T#P#L#P#L#P.F#P#P#P#P#P#P.I#P#M#P#M#P#M.K#M#R#M#R.L#M.L#M#J#M#J.L#J#J#J#J.N#J#U#J#E.O#E#U#E", +"#F#C#F#p#F#H#F#F#F#F#t#F#K#F#K#t#K#t#K#K#K#K#I#K#x#K#I#K#O#K#O#x#O#x#O#x#O#Q#j#Q#j#Q#j#O#j#Q#j#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w" +"#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.A.x.z.x.A.x.A.x.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B.B.B.B.B#W.B#T.B#L.B#L#W#L#T#L#T#L#T#L#T#P#T#P#L#P#L#P#P#P#P#P#P.K#P#R#P#M#P#M#R#M#R#M#R.L#R.L#M#J#R#J#J#J#J#J#J#U#J#U#J#E.O", +"#C#F#C#F#C#F#p#F#H#F#H#t#H#t#F#K#H#K#t#K#t#K#t#K#K#K#K#x#K#x#K#I#K#Q#x#O#x#O#x#O#x#O#Q#j#Q#j#Q#j#Q#j#k#j#k#q#j#q#k#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#z#q#z#q#y#q#z#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#z#q#q#q#q#q#q#q#q#q#q#q" +"#q#q#q#j#q#j#q#j#q#k#q#j#q#k#q#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.w.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.A.B.B.B.B#V.B#W.B#L.B#L.B#L#W#L#T#L#T#L#T#X#L#P#L#P#L#P.F#P#P#P#P#N#P.K#P#M#P#M#P#M#R#M#R#M#M.L#R#J#M#J#M#J#J#J#J#J#J.O#J#E#J#E.O#E#U#E", +"#F#p#F#p#F#F#F#H#t#F#t#F#K#F#K#F#K#t#K#t#K#K#K#K#I#K#x#K#O#K#O#x#O#x#O#x#O#Q#O#Q#j#O#j#Q#j#O#j#O#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w#q#q" +"#q#w#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.w.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B#W.B.B.B#L.B#T.B#L.B#L#T#L#T#L#T#X#T#P#L#P#T#P#X#P#P#P#P#P#P.K#P#M#P#R#P#M.K#M#R#M#R.L#R#J#R#J#M#J.L#J#J#J#J.O#J#U#J#U#U", +"#C#F#C#F#p#F#p#F#H#F#H#F#H#t#H#t#F#K#F#K#t#K#t#K#K#K#K#K#K#x#K#x#K#O#K#Q#x#O#x#O#x#O#Q#O#Q#j#Q#j#Q#j#Q#j#j#q#k#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#y#q#z#q#y#q#z#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#q#q#q#q#q#q#q#q#q#q#q#q" +"#q#q#q#j#q#j#q#j#q#j#q#k#q#j#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#k.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.A.B.B.B.B.B.B#V.B#L.B#L#W#L#W#L#T#L#T#L#L#L#L#P#L#P#L#P#P#P#P#P#P#P#P#M#P#M#P#M#P#M.K#M#R#M#R#J#M#J#M#J#M#J.L#J#J#J#J#E#J#U#J#E#U#E#U#E", +"#F#C#F#p#F#H#F#F#F#F#t#F#K#F#K#t#K#t#K#t#K#K#I#K#x#K#I#K#I#K#O#x#O#x#O#x#O#x#j#Q#j#Q#j#O#j#Q#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w#q#q#q#w" +"#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.x.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.x.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B.B.B.B.B#W.B#T.B#L.B#L#W#L#T#L#T#L#T#L#T#P#T#P#L#P.F#P#P#P#P#P#P#R#P#R#P#M#P#M#R#M#R#M#R#J#R#J#M#J#R#J#J#J#J#J#J#U#J#U#J#E.O", +"#C#F#C#F#C#F#p#F#H#F#H#F#H#F#F#t#H#K#F#K#F#K#t#K#K#K#K#x#K#x#K#x#K#Q#x#O#x#O#x#O#x#O#x#j#Q#j#Q#j#Q#j#Q#j#Q#q#j#q#k#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q" +"#q#j#q#j#q#j#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.w.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.x.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.A.B.B.B.B#V.B#W.B#L.B#L.B#L#W#L#T#L#T#L#T#X#L#P#L#P#L#P.F#P#P#P#P#N#P.K#P#M#P#M#P#M#R#M#R#M#M.L#R#J#M#J#M#J#J#J#J#J#J.O#J#E#J#E.O#E#U#E", +"#F#C#F#p#F#H#F#H#F#F#t#F#K#F#K#F#K#t#K#t#K#K#K#K#I#K#x#K#I#K#O#K#O#x#O#x#O#x#O#Q#j#Q#j#Q#j#O#j#O#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w#q#q" +"#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#j#j#k#j#j#j#k#j#k#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.z.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B#W.B#W.B#L.B#T#W#L#W#L#T#L#T#L#T#X#T#P#L#P#L#P#P#P#P#P#P#P#P.K#P#M#P#R#P#M#R#M#R#M#R.L#R#J#R#J#Y#J#J#J#J#J#J#U#J#U#J#U#U", +"#C#F#C#F#C#F#C#F#H#F#H#F#H#t#H#t#F#K#F#K#t#K#t#K#t#K#K#K#K#x#K#x#K#I#K#Q#x#O#x#O#x#O#x#O#Q#j#Q#j#Q#j#Q#j#k#q#k#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#z#q#y#q#z#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q" +"#q#j#q#j#q#j#q#j#q#j#q#k#q#j#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.B.B.B#W.B#W.B#V.B#L.B#L#W#L#W#L#T#L#T#X#L#P#L#P#L#P#L#P#P#P#P#P#P#P#P#M#P#M#P#M#Z#M#R#M#R#M#R#J#M#J#M#J#Y#J#J#J#J#J#J#E#J#U#J#E#U#E#U#E", +"#F#C#F#p#F#H#F#F#F#H#t#F#K#F#K#F#K#F#K#t#K#K#K#K#K#K#I#K#I#K#O#x#O#x#O#x#O#x#O#Q#O#Q#j#O#j#Q#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#y#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#z#q#w#q#q#q#w" +"#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B#W.B#W.B#W.B#T.B#L.B#L#W#L#T#L#T#X#T#X#T#P#T#P#L#P#P#P#P#P#P#P#P#R#P#R#P#M#P#M#R#M#R#M#R#J#R#J#M#J#R#J#J#J#J#J#J#U#J#U#J#E#U", +"#C#H#C#F#C#F#p#F#p#F#H#F#H#F#F#t#H#K#F#K#F#K#t#K#t#K#K#x#K#x#K#x#K#x#K#O#K#O#x#O#x#O#x#j#Q#O#Q#j#Q#j#Q#j#Q#j#j#q#k#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q" +"#q#j#q#j#q#j#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.x.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.B#W.B.B.B#V.B#L.B#L#W#L#W#L#T#L#T#L#L#L#T#P#L#P#L#P#X#P#P#P#P#P#P#0#P#R#P#M#P#M#P#M#R#M#R#M#M#J#R#J#M#J#M#J#J#J#J#J#J#U#J#E#J#E#U#E#U#E", +"#F#C#F#C#F#H#F#H#F#F#F#F#t#F#K#F#K#t#K#t#K#K#K#K#I#K#x#K#I#K#O#K#O#x#O#x#O#x#O#Q#j#Q#j#Q#j#O#j#Q#j#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w#q#q#q#w#q#q" +"#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.z.A.z.A.z.A.z.B.z.B.A.B.A.B.A.B.B.B.B#W.B#W.B#L.B#T#W#L#W#L#T#L#T#L#T#X#T#P#L#P#L#P#P#P#P#P#P#Z#P#R#P#M#P#R#Z#M#R#M#R#M#R#J#R#J#R#J#Y#J#J#J#J#1#J#U#J#U#J#U#U", +"#C#F#C#F#C#F#C#F#p#F#H#F#H#t#H#t#F#K#H#K#t#K#t#K#t#K#K#K#K#x#K#x#K#I#K#Q#x#O#x#O#x#O#x#O#Q#j#Q#j#Q#j#Q#j#Q#j#Q#q#j#q#k#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j" +"#q#j#q#j#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.q.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.v.v.v.v.v.x.v.x.v.x.v.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.x.A.z.A.A.A.z.A.A.B.A.B.A.B.A.B.B.B.B#V.B#W.B#L.B#L.B#L#W#L#T#L#T#L#T#X#L#P#L#P#L#P#L#P#P#P#P#P#P#P#P#M#P#M#P#M#Z#M#R#M#R#M#R#J#M#J#M#J#Y#J#J#J#J#J#J#E#J#U#J#E#U#E#U#E", +"#F#C#F#p#F#H#F#F#F#H#t#F#t#F#K#F#K#F#K#t#K#K#K#K#K#K#I#K#I#K#O#K#O#K#O#x#O#x#O#Q#O#Q#j#O#j#Q#j#O#j#O#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w#q#q#q#q" +"#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.A.B.B#W.B#W.B#W.B#T#W#L#W#L#W#L#T#L#T#X#T#P#L#P#T#P#X#P#P#P#P#P#P#P#P#R#P#R#P#M#P#M#R#M#R#M#R#J#R#J#M#J#Y#J#J#J#J#J#J#U#J#U#1#E#U", +"#C#H#C#F#C#F#C#F#p#F#H#F#H#F#H#t#H#K#F#K#F#K#t#K#t#K#K#K#K#K#K#x#K#x#K#O#K#Q#x#O#x#O#x#O#Q#O#Q#j#Q#j#Q#j#Q#j#j#q#k#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#z#q#y#q#z#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j" +"#q#j#q#j#q#j#q#j#q#k#q#j#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.x.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.B#W.B#W.B#V.B#L.B#L#W#L#W#L#T#L#T#X#L#X#T#P#L#P#L#P#X#P#P#P#P#P#P#0#P#R#P#M#Z#M#Z#M#R#M#R#Y#M#J#R#J#M#J#Y#J#J#J#J#1#J#U#J#E#1#E#U#E#U#E", +"#F#C#F#C#F#H#F#H#F#F#F#F#t#F#K#F#K#F#K#t#K#t#K#K#2#K#K#K#I#K#O#K#O#x#O#x#O#x#O#x#O#Q#O#Q#j#O#j#Q#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w#q#q#q#w#q#q" +"#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B#W.B#W.B#W.B#T.B#L.B#L#W#L#T#L#T#X#T#X#T#P#T#P#L#P#X#P#P#P#P#P#P#Z#P#R#P#M#P#M#Z#M#R#M#R#Y#R#J#R#J#R#J#Y#J#J#J#J#1#J#U#J#E#J#U#U", +"#C#B#C#F#C#F#C#F#p#F#H#F#H#F#H#F#F#t#H#K#F#K#F#K#t#K#K#K#K#x#K#x#K#x#K#Q#K#O#K#O#x#O#x#O#x#j#Q#j#Q#j#Q#j#Q#j#Q#q#j#q#k#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j" +"#q#j#q#j#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.x.A.z.A.A.A.z.A.A.B.A.B.A.B.A#W.B#W.B#V.B#W.B#L#W#L#W#L#W#L#T#L#T#L#T#X#L#P#L#P#X#P#X#P#P#P#P#Z#P#Z#P#M#P#M#P#M#R#M#R#M#R#M#R#J#M#J#M#J#Y#J#J#J#J#J#J#E#J#E#J#E#U#E#U#3", +"#F#C#F#C#F#C#F#F#F#H#F#F#F#F#K#F#K#F#K#t#K#t#K#K#K#K#I#K#x#K#I#K#O#K#O#x#O#x#O#x#O#Q#j#Q#j#Q#j#O#j#O#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w#q#q#q#w#q#q#q#q" +"#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.w.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.B.A.B.A.B.A.B.B.B.B#W.B#W.B#L.B#T#W#L#W#L#T#L#T#L#T#X#T#P#L#P#T#P#X#P#P#P#P#Z#P#Z#P#R#P#R#Z#M#R#M#R#M#R#M#R#J#R#J#Y#J#J#J#J#J#J#1#J#U#J#U#1#E#U", +"#C#C#C#F#C#F#C#F#C#F#H#F#H#F#H#t#H#t#F#K#F#K#t#K#t#K#t#K#K#K#K#x#K#x#K#I#K#Q#x#O#x#O#x#O#x#O#Q#j#Q#j#Q#j#Q#j#Q#j#Q#q#j#q#k#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j" +"#q#j#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.z.A.z.A.z.A.A.A.A.B.A.B.A.B.A.B.B#W.B#W.B#V.B#L.B#L#W#L#W#L#T#L#T#X#L#X#T#P#L#P#L#P#X#P#P#P#P#P#P#0#P#M#P#M#Z#M#R#M#R#M#R#Y#M#J#R#J#Y#J#J#J#J#J#J#1#J#U#J#E#1#E#U#E#U#E", +"#F#C#F#C#F#p#F#H#F#F#F#H#t#F#K#F#K#F#K#F#K#t#K#K#K#K#K#K#I#K#I#K#O#K#O#K#O#x#O#x#O#Q#O#Q#j#O#j#Q#j#O#j#O#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#w#q#q#q#w#q#z#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#y#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w#q#q#q#q#q#q" +"#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.A.x.z.x.A.x.A.x.A.z.A.z.A.z.A.A.B.z.B.A.B.A.B.B#W.B#W.B#W.B#T#W#L#W#L#W#L#T#L#T#X#T#X#T#P#T#P#X#P#X#P#P#P#P#P#P#Z#P#R#P#M#P#M#R#M#R#M#R#Y#R#J#R#J#R#J#J#J#J#J#J#1#J#U#J#E#1#U#U", +"#C#B#C#H#C#F#C#F#p#F#H#F#H#F#H#F#F#t#H#K#F#K#F#K#t#K#t#K#K#K#K#K#K#x#K#x#K#O#K#Q#x#O#x#O#x#O#Q#O#Q#j#Q#j#Q#j#Q#j#j#q#k#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j" +"#q#j#q#j#q#j#q#k#q#j#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#k.s#b.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.w.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.x.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.z.A.z.A.A.A.z.A.A.B.A.B.A.B.A#W.B#W.B#V.B#W.B#L#W#L#W#L#W#L#T#X#T#X#T#X#L#P#L#P#X#P#X#P#P#P#P#Z#P#Z#P#M#Z#M#Z#M#R#M#R#Y#R#Y#R#J#M#J#M#J#J#J#J#1#J#1#J#E#J#E#1#E#U#E#U#3", +"#F#C#F#C#F#C#F#H#F#H#F#F#F#F#t#F#K#F#K#t#K#t#K#K#K#K#2#K#K#K#I#K#O#K#O#x#O#x#O#x#O#Q#O#Q#O#Q#j#O#j#Q#j#j#q#O#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#y#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w#q#q#q#w#q#q#q#q" +"#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.B.A.B.A.B.A#W.B#W.B#W.B#W.B#L.B#T#W#L#W#L#T#X#T#X#T#X#T#P#X#P#4#P#X#P#P#P#P#Z#P#Z#P#R#P#R#Z#M#R#M#R#Y#R#Y#R#J#R#J#Y#J#J#J#J#1#J#1#J#U#J#U#1#E#U", +"#C#C#C#F#C#F#C#F#C#F#p#F#H#F#H#F#H#F#F#K#H#K#F#K#F#K#t#K#K#K#K#x#K#x#K#I#K#Q#K#O#K#O#x#O#x#O#x#j#Q#O#Q#j#Q#j#Q#j#Q#q#j#q#k#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j" +"#q#j#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.q.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.z.A.A.A.z.A.A.B.A.B.A.B.A#W.A#W.B#W.B#W.B#V#W#L#W#L#W#L#W#X#T#X#T#X#L#X#T#P#X#P#X#P#X#P#P#Z#P#Z#P#M#P#M#P#M#Z#M#R#M#R#M#R#Y#M#J#M#J#Y#J#J#J#J#J#J#1#J#U#J#E#1#E#U#3#U#3", +"#F#C#F#C#F#p#F#H#F#F#F#H#F#F#t#F#K#F#K#F#K#t#K#K#K#K#K#K#I#K#x#K#O#K#O#K#O#x#O#x#O#x#O#Q#j#Q#j#Q#j#O#j#O#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#y#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#z#q#w#q#q#q#w#q#q#q#q#q#q" +"#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.x.A.z.A.z.A.z.A.A.B.z.B.A#W.A#W.B#W.B#W.B#W.B#T#W#L#W#L#W#L#T#L#T#X#T#X#T#P#T#P#X#P#X#P#P#Z#P#Z#P#Z#P#R#Z#M#Z#M#R#M#R#M#R#Y#R#J#Y#J#5#J#J#J#J#1#J#1#J#U#1#E#1#U#U", +"#C#6#C#7#C#F#C#F#C#F#C#F#H#F#H#F#H#t#H#K#F#K#F#K#t#K#t#K#K#K#K#K#K#x#K#x#K#O#K#Q#x#O#x#O#x#O#x#O#Q#j#Q#j#Q#j#Q#j#Q#j#Q#q#j#q#k#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j" +"#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.x.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.z.A.z.A.A.A.A.B.A.B.A#W.A#W.A#W.B#W.B#V#W#W#W#L#W#L#W#L#W#L#T#X#T#X#T#X#X#P#X#P#X#P#X#P#P#P#P#0#P#R#P#M#Z#M#Z#M#R#M#R#Y#R#Y#R#J#Y#J#Y#J#J#J#J#1#J#1#J#E#1#E#1#E#U#E#U#3", +"#8#C#F#C#F#C#F#H#F#H#F#F#F#F#t#F#K#F#K#F#K#F#K#t#K#K#2#K#K#K#I#K#I#K#O#K#O#K#O#x#O#x#O#Q#O#Q#j#O#j#Q#j#O#j#O#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#w#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#y#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#y#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w#q#q#q#w#q#q#q#q#q#q#q#q" +"#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.z.A.z.A.z.A.z.A.z.B.A.B.A.B.A#W.B#W.B#W.B#W#W#L#W#T#W#L#W#L#T#X#T#X#T#X#T#P#X#P#4#P#X#P#P#P#P#Z#P#R#P#M#P#R#Z#M#R#M#R#Y#R#Y#R#J#R#J#Y#J#J#J#J#1#J#U#J#U#1#U#1#E#U", +"#C#C#C#B#C#F#C#F#C#F#p#F#H#F#H#F#H#F#F#t#H#K#F#K#F#K#t#K#t#K#K#K#K#K#K#x#K#x#K#O#K#Q#x#O#x#O#x#O#Q#O#Q#j#Q#j#Q#j#Q#j#j#q#k#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j" +"#q#k#q#j#q#k#q#j#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.x.A.z.A.A.A.z.A.A.B.A.B.A.B.A#W.B#W.B#W.B#W.B#V#W#L#W#L#W#L#W#X#T#X#T#X#L#X#L#P#X#P#X#P#P#P#P#Z#P#Z#P#M#Z#M#Z#M#Z#M#R#Y#R#Y#R#Y#M#J#M#J#Y#J#J#1#J#1#J#E#J#U#1#E#1#E#U#3#U#3", +"#F#C#F#C#F#C#F#C#F#F#F#H#F#F#F#F#K#F#K#F#K#t#K#t#K#K#K#K#2#K#K#K#I#K#O#K#O#x#O#x#O#x#O#Q#O#Q#O#Q#j#O#j#Q#j#O#q#O#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#w#q#q#q#w#q#z#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#y#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#y#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q" +"#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.w.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.B.A.B.z.B.A#W.A#W.B#W.B#W#W#W#W#T#W#L#W#L#W#X#T#X#T#X#T#X#4#P#4#P#X#P#X#P#P#Z#P#Z#P#R#P#R#Z#M#Z#M#R#Y#R#Y#R#Y#R#J#Y#J#5#J#J#1#J#1#J#U#J#U#1#E#1#E#U", +"#C#6#C#C#C#F#C#F#C#F#C#F#H#F#H#F#H#F#H#F#F#K#H#K#F#K#F#K#t#K#K#K#K#x#K#x#K#I#K#Q#K#O#K#O#x#O#x#O#x#O#Q#O#Q#j#Q#j#Q#j#Q#j#j#q#k#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j" +"#q#j#q#k#q#j#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.x.A.z.A.z.A.A.A.A.B.A.B.A#W.A#W.B#W.B#W.B#V#W#L#W#L#W#L#W#X#T#X#T#X#T#X#T#P#X#P#X#P#X#P#P#Z#P#Z#P#0#P#R#P#M#Z#M#Z#M#R#M#R#Y#M#J#R#J#Y#J#Y#J#J#J#J#1#J#U#J#E#1#E#1#E#U#3#U#3", +"#6#C#F#C#F#C#F#p#F#H#F#F#F#H#t#F#t#F#K#F#K#F#K#t#K#K#K#K#K#K#I#K#I#K#O#K#O#K#O#x#O#x#O#x#O#Q#j#Q#j#Q#j#O#j#Q#j#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#y#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#y#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q" +"#j#q#j#q#j#q#j#q#j#q#j#q#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.z.A.z.A.z.A.A.B.z.B.A#W.A#W.B#W.B#W.B#W.B#W#W#L#W#T#W#X#W#X#T#X#T#X#T#X#T#P#X#P#X#P#P#Z#P#Z#P#Z#P#R#Z#M#Z#R#Z#M#R#M#R#Y#R#J#5#J#5#J#Y#J#J#J#J#1#J#U#1#U#1#U#1#3#U", +"#C#C#C#6#C#7#C#F#C#F#C#F#C#F#H#F#H#F#H#t#H#K#F#K#F#K#t#K#t#K#K#K#K#K#K#x#K#x#K#O#K#Q#x#O#x#O#x#O#x#O#Q#j#Q#j#Q#j#Q#j#Q#j#Q#q#j#q#k#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#z#D#z#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#z#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j" +"#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.x.A.z.A.A.A.z.A.A.B.A#W.A#W.A#W.B#W.B#V#W#W#W#L#W#L#W#L#W#L#T#X#T#X#T#X#X#P#X#P#X#P#X#Z#P#Z#P#Z#P#Z#P#M#Z#M#Z#M#Z#M#R#Y#R#Y#R#J#Y#J#Y#J#Y#J#J#1#J#1#J#E#1#U#1#E#1#E#U#3#U#3", +"#6#C#8#C#F#C#F#C#F#H#F#H#F#F#F#F#t#F#K#F#K#F#K#F#K#t#K#K#2#K#K#K#I#K#I#K#O#K#O#K#O#x#O#x#O#Q#O#Q#j#O#j#Q#j#O#j#O#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#y#y#y#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#y#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#j#q" +"#j#q#j#q#j#q#j#q#j#q#j#j#k#j#j#j#k#j#j#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.z.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.B.A#W.A#W.A#W.B#W.B#W.B#W#W#T#W#T#W#L#W#L#T#X#T#X#T#X#T#P#X#P#4#P#X#P#P#P#P#Z#P#Z#P#R#Z#R#Z#M#Z#M#R#Y#R#Y#R#J#R#J#Y#J#5#J#J#1#J#1#J#U#J#U#1#E#U#E#U", +"#C#C#C#C#C#F#C#F#C#F#C#F#p#F#H#F#H#F#H#F#F#t#H#K#F#K#F#K#t#K#t#K#K#K#K#K#K#x#K#x#K#O#K#Q#x#O#x#O#x#O#Q#O#Q#j#Q#j#Q#j#Q#j#Q#j#Q#q#j#q#k#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#z#D#z#D#z#D#z#D#z#D#z#D#z#D#z#D#z#D#z#D#z#D#z#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#k" +"#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.z.A.z.A.z.A.A.A.A#W.A#W.A#W.A#W.B#W#W#W#W#V#W#L#W#L#W#L#W#X#T#X#T#X#L#X#T#P#X#P#X#P#X#P#P#Z#P#Z#P#0#Z#R#Z#M#Z#M#Z#Y#R#Y#R#Y#M#J#R#J#Y#J#Y#1#J#1#J#1#J#U#1#E#1#E#U#3#U#3#U#3", +"#6#C#F#C#F#C#F#C#F#C#F#F#F#H#F#F#F#F#K#F#K#F#K#t#K#t#K#K#K#K#2#K#K#K#I#K#O#K#O#x#O#x#O#x#O#x#O#Q#O#Q#j#O#j#Q#j#O#q#O#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#y#y#y#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#y#y#y#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#z#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#j#q" +"#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.x.A.z.A.z.A.z.A.A.B.z.B.A#W.A#W.B#W.B#W#W#W#W#T#W#L#W#L#W#X#T#X#T#X#T#X#4#P#4#P#X#P#X#P#P#Z#P#Z#P#Z#P#R#Z#M#Z#R#Z#Y#R#Y#R#Y#R#J#5#J#5#J#Y#1#J#1#J#1#J#U#1#U#1#U#U#3#U", +"#C#C#C#6#C#C#C#F#C#F#C#F#C#F#H#F#H#F#H#F#H#F#F#K#H#K#F#K#F#K#t#K#K#K#K#K#K#K#K#I#K#Q#K#O#K#O#x#O#x#O#x#O#Q#O#Q#j#Q#j#Q#j#Q#j#j#q#k#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#D#z#D#z#D#z#D#z#D#z#D#z#D#z#D#z#D#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#k#q#j" +"#q#k#q#j#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.x.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.z.A.z.A.A.A.A#W.A.B.A#W.A#W.A#W.B#W.B#V#W#W#W#L#W#L#W#X#W#X#T#X#T#X#T#X#X#P#X#P#X#P#X#Z#P#Z#P#Z#P#Z#P#M#Z#M#Z#M#R#M#R#Y#R#Y#R#J#Y#J#Y#J#Y#J#J#1#J#1#J#E#1#U#1#E#U#3#U#3#U#3", +"#6#C#8#C#F#C#F#C#F#p#F#H#F#F#F#H#t#F#K#F#K#F#K#F#K#t#K#K#K#K#K#K#I#K#x#K#I#K#O#K#O#x#O#x#O#x#O#Q#O#Q#O#Q#j#O#j#Q#j#O#q#O#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#y#y#y#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#j#q#j#q" +"#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.z.A.z.A.z.A.z.A.z.B.A#W.A#W.A#W.B#W#W#W#W#W#W#L#W#T#W#X#W#X#T#X#T#X#4#X#4#P#X#P#4#P#X#Z#P#Z#P#Z#P#Z#Z#R#Z#R#Z#M#R#Y#R#Y#R#Y#5#J#5#J#Y#J#Y#J#J#1#J#1#1#U#1#U#1#3#U#3#U", +"#C#C#C#C#C#6#C#7#C#F#C#F#C#F#C#F#H#F#H#F#H#t#H#K#F#K#F#K#t#K#t#K#K#K#K#K#K#x#K#x#K#I#K#Q#K#O#K#O#x#O#x#O#Q#O#Q#O#Q#j#Q#j#Q#j#Q#j#j#q#k#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#z#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#k#q#j#q#k" +"#q#j#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.x.A.z.A.A.A.z.A.A.B.A#W.A#W.A#W.A#W.B#W#W#W#W#V#W#L#W#X#W#X#W#X#T#X#T#X#X#X#4#P#X#P#X#Z#X#Z#P#Z#P#Z#P#0#Z#M#Z#M#Z#M#R#Y#R#Y#R#Y#Y#J#5#J#Y#J#J#1#J#1#J#1#1#U#1#E#1#E#U#3#U#3#U#A", +"#6#C#6#C#8#C#F#C#F#C#F#H#F#H#F#F#F#F#t#F#K#F#K#F#K#F#K#t#K#K#2#K#K#K#I#K#I#K#O#K#O#K#O#x#O#x#O#Q#O#Q#j#O#j#Q#j#O#j#O#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#y#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q" +"#j#q#j#q#j#q#j#q#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.w.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.z.A.z.A.z.A.z.A.A#W.z#W.A#W.A#W.B#W.B#W#W#W#W#T#W#X#W#X#W#X#T#X#T#X#T#X#4#P#4#P#X#Z#X#Z#P#Z#P#Z#Z#Z#Z#R#Z#M#Z#M#R#Y#R#Y#R#Y#R#J#5#J#5#J#J#1#J#1#J#1#J#U#1#E#1#U#U#3#U", +"#9#C#C#C#C#C#C#F#C#F#C#F#C#F#p#F#H#F#H#F#H#F#F#t#H#K#F#K#F#K#t#K#t#K#K#K#K#K#K#x#K#x#K#O#K#Q#x#O#x#O#x#O#x#O#Q#j#Q#j#Q#j#Q#j#Q#j#Q#q#j#q#k#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#z#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#k#q#j" +"#q#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.x.A.z.A.z.A.A.A.A#W.A#W.A#W.A#W.B#W#W#W#W#V#W#V#W#X#W#L#W#X#W#X#T#X#4#X#4#X#X#P#X#P#X#P#X#Z#P#Z#P#0#Z#R#Z#M#Z#M#Z#Y#R#Y#R#Y#R#Y#5#J#Y#J#Y#1#J#1#J#1#J#1#1#E#1#E#1#3#U#3#U#3a.#A", +"#6#C#6#C#F#C#F#C#F#C#F#7#F#F#F#H#F#F#F#F#K#F#K#F#K#F#K#F#K#K#K#K#2#K#K#K#I#K#O#K#O#K#O#K#O#x#O#x#O#Q#O#Q#j#O#j#Q#j#O#j#O#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#y#y#y#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#j#q#j#q#j#q" +"#j#q#j#q#j#q#j#j#k#j#j#j#k#j#j#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.x.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.z.A.z.A.z.A.A#W.z#W.A#W.A#W.A#W.B#W#W#W#W#W#W#L#W#T#W#X#W#X#T#X#T#X#4#X#4#P#X#P#4#P#X#Z#P#Z#P#Z#P#R#Z#M#Z#R#Z#Y#R#Y#R#Y#R#Y#5#J#5#J#Y#1#J#1#J#1#J#1#1#U#1#U#1#3#U#3#U", +"#C#C#C#C#C#6#C#C#C#F#C#F#C#F#C#F#H#F#H#F#H#F#H#F#F#K#H#K#F#K#F#K#t#K#K#K#K#K#K#K#K#x#K#x#K#O#K#O#x#O#x#O#x#O#Q#O#Q#j#Q#j#Q#j#Q#j#Q#j#Q#q#j#q#k#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#z#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k" +"#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.x.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.z.A.z.A.A.A.za#.A#W.A#W.A#W.A#W#W#W#W#V#W#W#W#L#W#L#W#X#W#X#T#X#T#X#T#X#X#P#X#P#X#P#X#Z#P#Z#P#Z#Z#Z#Z#M#Z#M#Z#Y#Z#Y#R#Y#R#Y#R#Y#Y#J#Y#J#Y#J#J#1#J#1#J#1#1#U#1#E#1#3#U#3#U#3#U#A", +"#C#C#6#C#8#C#F#C#F#C#F#p#F#H#F#F#F#H#F#F#F#F#K#F#K#F#K#t#K#t#K#K#K#K#I#K#x#K#I#K#O#K#O#x#O#x#O#x#O#Q#O#Q#O#Q#j#O#j#Q#j#O#j#O#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#D#y#D#z#D#y#D#z#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#y#D#z#D#y#D#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q" +"#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.x.A.z.A.z.A.za#.z#W.A#W.A#W.A#W.B#W#W#W#W#W#W#W#W#T#W#X#W#X#W#X#T#X#4#X#4#X#4#P#4#P#X#Z#P#Z#P#Z#P#Z#Z#R#Z#R#Z#Y#Z#Y#R#Y#R#Y#5#Y#5#J#Y#J#5#1#J#1#J#1#1#U#1#U#1#3#1a.#U#3#U", +"#9#C#C#C#C#C#C#6#C#8#C#F#C#F#C#F#C#F#H#F#H#F#H#t#H#K#F#K#F#K#F#K#F#K#t#K#K#K#K#x#K#x#K#I#K#Q#K#O#K#O#x#O#x#O#x#O#Q#O#Q#j#Q#j#Q#j#Q#j#j#q#Q#q#j#q#k#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#z#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k#j#k" +"#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.z.A.z.A.za#.Aa#.A#W.A#W.A#Wa##W#W#W#W#W#W#V#W#L#W#X#W#X#W#X#T#X#T#X#X#X#4#P#X#P#X#Z#X#Z#P#Z#P#Z#P#0#Z#R#Z#M#Z#M#Z#Y#R#Y#R#Y#Y#J#5#J#Y#J#Y#1#J#1#J#1#1#U#1#E#1#E#1#3#U#3#U#3a.#A", +"#6#C#6#C#6#C#8#C#F#C#F#C#F#H#F#H#F#F#F#F#t#F#K#F#K#F#K#F#K#t#K#K#K#K#K#K#I#K#I#K#O#K#O#K#O#x#O#x#O#x#O#Q#O#Q#O#Q#j#O#j#Q#j#O#q#O#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#D#y#D#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q" +"#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.w.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.x.A.z.A.za#.z.A.A#W.z#W.A#W.A#W#W#W#W#W#W#W#W#T#W#X#W#X#W#X#T#X#4#X#4#X#4#P#4#P#X#Z#X#Z#P#Z#P#Z#Z#Z#Z#R#Z#M#Z#R#Z#Y#R#Y#R#Y#R#J#5#J#5#J#Y#1#J#1#J#1#1#U#1#U#1#U#1#3#U#3a.", +"aa#C#9#C#C#C#C#C#C#F#C#F#C#F#C#F#p#F#H#F#H#F#H#F#F#t#H#K#F#K#F#K#t#K#t#K#K#K#K#K#K#x#K#x#K#I#K#Q#K#O#K#O#x#O#x#O#Q#O#Q#O#Q#j#Q#j#Q#j#Q#j#j#q#k#q#j#q#k#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#z#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#j#k" +"#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.u.t.u.t.u.t.u.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.x.A.z.A.za#.Aa#.A#W.A#W.A#W.A#W.A#W#W#W#W#V#W#W#W#X#W#X#W#X#W#X#T#X#4#X#4#X#X#P#X#Z#X#Z#X#Z#P#Z#P#Z#Z#Z#Z#M#Z#M#Z#Y#Z#Y#R#Y#5#Y#5#J#Y#J#Y#1#Y#1#J#1#J#1#1#E#1#U#1#3#1#3#U#3a.#3a.#A", +"#C#C#6#C#6#C#F#C#F#C#F#C#F#C#F#F#F#H#F#F#F#F#K#F#K#F#K#F#K#F#K#K#K#K#2#K#K#K#I#K#I#K#O#K#O#K#O#x#O#x#O#Q#O#Q#j#Q#j#Q#j#O#j#Q#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q" +"#j#q#j#j#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.z.A.z.A.z.A.za#.z#W.A#W.A#Wa##W#W#W#W#W#W#W#W#X#W#4#W#X#W#X#T#X#T#X#4#X#4#P#X#Z#4#Z#X#Z#P#Z#P#Z#Z#Z#Z#R#Z#R#Z#Y#Z#Y#R#Y#R#Y#5#J#5#J#Y#1#5#1#J#1#J#1#1#U#1#U#1#3#U#3#U#3a.", +"aa#C#9#C#C#C#C#6#C#C#C#F#C#F#C#F#C#F#H#F#H#F#H#F#H#F#F#K#H#K#F#K#F#K#t#K#K#K#K#K#K#K#K#x#K#x#K#O#K#Q#x#O#x#O#x#O#x#O#Q#j#Q#j#Q#j#Q#j#Q#j#Q#j#j#q#k#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#z#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#j#k#j#k" +"#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.x.A.za#.A.A.za#.A#W.A#W.A#W.A#W#W#W#W#W#W#W#Wab#W#X#W#X#W#X#W#X#4#X#4#X#X#X#4#P#X#P#X#Z#X#Z#P#Z#Z#Z#Z#0#Z#M#Z#Y#Z#Y#R#Y#R#Y#R#Y#Y#J#5#J#Y#1#Y#1#J#1#J#1#1#U#1#E#1#3#1#3#U#3#U#3a.#A", +"#6#C#C#C#6#C#8#C#F#C#F#C#F#C#F#7#F#F#F#H#F#F#F#F#K#F#K#F#K#t#K#t#K#K#K#K#2#K#K#K#I#K#O#K#O#K#O#K#O#x#O#x#O#Q#O#Q#j#O#j#Q#j#O#j#O#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q" +"#j#q#j#j#k#j#j#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.z.A.z.A.za#.z#W.A#W.z#Wa##W.A#W#W#W#W#W#W#W#W#T#W#X#W#X#W#X#T#X#4#X#4#X#4#P#4#P#X#Z#X#Z#P#Z#P#Z#Z#Z#Z#R#Z#Y#Z#Y#R#Y#R#Y#5#Y#5#J#5#J#5#1#Y#1#J#1#1#1#1#U#1a.#1a.#U#3#U#3a.", +"aa#Caa#C#C#C#C#C#C#6#C#7#C#F#C#F#C#F#C#F#H#F#H#F#H#F#H#F#F#K#F#K#F#K#F#K#t#K#K#K#K#K#K#K#K#x#K#x#K#O#K#Q#x#O#x#O#x#O#x#O#Q#j#Q#j#Q#j#Q#j#Q#j#Q#q#j#q#k#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#j#k#j#k#j#k" +"#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#k.s#j.s.s.s#b.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.v.v.v.v.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.z.A.z.A.za#.Aa#.A#W.A#W.A#Wa##W#W#W#W#W#Wab#W#L#W#X#W#X#W#Xac#X#4#X#4#X#4#X#X#P#X#Z#X#Z#X#Z#Z#Z#Z#Z#Z#R#Z#M#Z#Y#Z#Y#R#Y#R#Y#5#Y#5#J#Y#J#Y#1#J#1#J#1#1#1#1#E#1#E#1#3#U#3#U#3a.#3a.#A", +"#C#9#6#C#6#C#6#C#8#C#F#C#F#C#F#H#F#H#F#F#F#F#t#F#K#F#K#F#K#F#K#t#K#K#K#K#K#K#I#K#x#K#I#K#O#K#O#x#O#x#O#x#O#x#O#Q#O#Q#j#O#j#Q#j#O#j#O#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q" +"#j#j#k#j#j#j#k#j#j#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.w.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.A.x.z.x.A.x.A.x.A.z.A.za#.za#.A#W.z#W.A#W.A#W#W#W#W#W#W#W#W#W#W#X#W#4#W#X#W#X#4#X#4#X#4#X#4#P#X#Z#4#Z#X#Z#P#Z#Z#Z#Z#Z#Z#M#Z#5#Z#Y#R#Y#5#Y#5#Y#5#J#5#J#Y#1#J#1#J#1#1#1#1#U#1#U#1#3#U#3a.#3a.", +"aa#Caa#C#9#C#C#C#C#C#C#F#C#F#C#F#C#F#C#F#7#F#H#F#H#F#F#t#H#K#F#K#F#K#F#K#F#K#K#K#K#K#K#x#K#x#K#I#K#Q#K#O#K#O#x#O#x#O#x#O#Q#O#Q#j#Q#j#Q#j#Q#j#Q#j#Q#q#j#q#k#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#j#k#j#k#j#k#j#k" +"#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.z.A.za#.Aa#.za#.A#W.A#Wa##Wa##W#W#W#W#V#W#W#W#X#W#X#W#X#W#X#T#X#4#X#4#X#X#P#X#Z#X#Z#X#Z#P#Z#P#Z#Z#Z#Z#M#Z#M#Z#Y#Z#Y#R#Y#5#Y#5#Y#Y#J#Y#1#Y#1#J#1#1#1#1#1#1#U#1#3#1#3#U#3a.#3a.#A#3#A", +"#6#C#C#C#6#C#6#C#F#C#F#C#F#C#F#C#F#F#F#H#F#F#F#F#t#F#K#F#K#F#K#F#K#t#K#K#K#K#K#K#I#K#I#K#O#K#O#K#O#x#O#x#O#x#O#Q#O#Q#O#Q#j#O#j#Q#j#O#j#O#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#y#y#z#y#y#y#z#y#y#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j" +"#k#j#j#j#k#j#j#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.y.x.z.x.A.x.A.x.A.z.A.za#.za#.za#.z#W.A#W.A#Wa##W#W#W#W#W#W#W#W#X#W#4#W#X#W#Xac#X#4#X#4#X#4#X#4#Z#4#Z#X#Z#P#Z#Z#Z#Z#Z#Z#R#Z#R#Z#Y#Z#Y#R#Y#R#Y#5#Y#5#J#Y#1#5#1#J#1#J#1#1#1#1#U#1#3#1a.#U#3a.#3a.", +"aa#Caa#C#9#C#9#C#C#6#C#C#C#F#C#F#C#F#C#F#p#F#H#F#H#F#H#F#F#t#H#K#F#K#F#K#t#K#t#K#K#K#K#K#K#x#K#x#K#I#K#Q#K#O#K#O#x#O#x#O#x#O#Q#O#Q#j#Q#j#Q#j#Q#j#k#j#Q#q#j#q#k#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k" +"#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.q.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.y.x.x.x.y.x.A.x.A.x.A.x.A.x.A.za#.Aa#.za#.A#W.A#Wa##Wa##Wa##W#W#W#W#W#Wab#W#X#W#X#W#X#W#X#4#X#4#X#X#X#4#Z#X#Z#X#Z#X#Z#P#Z#Z#Z#Z#0#Z#R#Z#Y#Z#Y#Z#Y#R#Y#5#Y#5#Y#5#1#Y#1#Y#1#J#1#J#1#1#1#1#3#1#3#1#3#U#3a.#3a.#Aa.ad", +"#C#9#6#C#C#C#6#C#8#C#F#C#F#C#F#C#F#7#F#F#F#H#F#F#F#F#K#F#K#F#K#F#K#F#K#K#K#K#2#K#K#K#I#K#I#K#O#K#O#K#O#x#O#x#O#x#O#Q#j#Q#O#Q#j#O#j#Q#j#O#q#O#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j" +"#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.x.x.A.x.A.x.A.x.A.za#.za#.za#.za#.A#W.z#Wa##Wa##W#W#W#W#W#Wac#W#4#W#X#W#X#W#X#T#X#4#X#4#X#4#Z#4#Z#X#Z#X#Z#P#Z#Z#Z#Z#Z#Z#R#Z#Y#Z#5#Z#Y#R#Y#5#Y#5#J#5#1#5#1#Y#1#J#1#1#1#1#U#1a.#1a.#1#3#U#3a.#3a.", +"aa#Caa#Caa#C#C#C#C#C#C#6#C#7#C#F#C#F#C#F#C#F#H#F#H#F#H#F#H#F#F#K#H#K#F#K#F#K#t#K#t#K#K#K#K#K#K#x#K#x#K#O#K#Q#x#O#K#O#x#O#x#O#x#O#Q#O#Q#j#Q#j#Q#j#Q#j#k#j#k#q#j#q#k#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k" +"#j#k#j#k#j.s#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.v.v.v.v.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.y.x.A.x.A.x.A.x.A.xa#.za#.za#.Aa#.A#Wa##Wa##Wa##W#W#W#W#W#Wab#Wac#W#X#W#X#W#Xac#X#4#X#4#X#4ae#X#Z#X#Z#X#Z#X#Z#Z#Z#Z#Z#Z#Z#Z#Y#Z#Y#Z#Y#Z#Y#R#Y#5#Y#5#J#Y#J#Y#1#Y#1#J#1#1#1#1#E#1#U#1#3#1#3#U#3a.#3a.ad#3ad", +"#C#9#C#9#6#C#6#C#6#C#8#C#F#C#F#C#F#p#F#H#F#F#F#H#F#F#F#F#K#F#K#F#K#t#K#t#K#K#K#K#2#K#K#K#I#K#O#K#O#K#O#K#O#x#O#x#O#x#O#Q#j#Q#j#Q#j#O#j#Q#j#j#q#O#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j" +"#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.w.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.A.x.z.x.A.x.A.xa#.za#.za#.za#.A#W.z#Wa##Wa##Wa##W#W#W#Wac#Wac#W#X#W#4#W#X#W#X#4#X#4#X#4#X#4#P#X#Z#4#Z#X#Z#P#Z#Z#Z#Z#Z#Z#5#Z#5#Z#Y#Z#Y#5#Y#5#Y#5#J#5#J#Y#1#5#1#1#1#1#1#1#U#1a.#1#3#1#3a.#3a.#3a.", +"aa#Caa#Caa#C#9#C#C#C#C#C#C#6#C#8#C#F#C#F#C#F#C#F#H#F#H#F#H#t#H#t#F#K#F#K#F#K#F#K#t#K#K#K#K#K#K#K#K#x#K#x#K#O#K#Q#x#O#x#O#x#O#x#O#Q#j#Q#O#Q#j#Q#j#Q#j#Q#j#k#j#k#q#j#q#k#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j#k" +"#j#k#j.s#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.x.x.y.x.A.x.A.x.A.xa#.za#.za#.Aa#.za#a##W.A#Wa##Wa##W#W#W#Wab#Wac#W#X#W#X#W#Xac#Xac#X#4#X#4#X#X#X#4#Z#X#Z#X#Zae#Z#Z#Z#Z#Z#Z#0#Z#Y#Z#Y#Z#Y#R#Y#5#Y#5#Y#Y#J#5#1#Y#1#Y#1#1#1#1#1#1#U#1#3#1#3#1#3a.#3a.#3a.#Aa.ad", +"#Caa#6#9#C#C#6#C#6#C#8#C#8#C#F#C#F#C#F#H#F#H#F#F#F#F#t#F#K#F#K#F#K#F#K#t#K#K#K#K#K#K#2#K#K#K#I#K#O#K#O#x#O#K#O#x#O#x#O#Q#O#Q#j#Q#j#Q#j#O#j#Q#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j" +"#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.y.x.z.x.A.x.A.xa#.x.A.za#.za#.za#.z#Wa##Wa##Wa##W#W#W#Wac#Wac#Wac#W#4#W#X#W#Xac#X#4#X#4#X#4#X#4#Z#4#Z#X#Z#X#Z#Z#Z#Z#Z#Z#Z#Z#5#Z#Y#Z#Y#R#Y#5#Y#5#Y#5#J#5#1#5#1#Y#1#J#1#1#1#1#U#1a.#1a.#U#3a.#3a.#3a.", +"aa#9aa#Caa#Caa#C#9#C#C#C#C#C#C#F#C#F#C#F#C#F#C#F#7#F#H#F#H#F#F#t#H#K#F#K#F#K#F#K#F#K#t#K#K#K#K#K#K#K#K#x#K#x#K#O#K#Q#x#O#x#O#x#O#x#O#Q#j#Q#j#Q#j#Q#j#Q#j#Q#j#k#j#k#q#j#q#k#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k" +"#j.s#j.s#j.s#j.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.y.x.x.x.y.x.A.x.A.x.A.xa#.xa#.za#.Aa#.za#.A#W.A#Wa##Wa##Wa##W#Wac#Wac#Wab#W#X#W#Xac#Xac#X#4#X#4#X#X#X#4#Z#X#Z#X#Z#X#Z#P#Z#Z#Z#Z#0#Z#R#Z#Y#Z#Y#Z#Y#5#Y#5#Y#5#Y#5#1#Y#1#Y#1#J#1#1#1#1#1#1#3#1a.#1#3#U#3a.#3a.#3a.ad#3ad", +"#Caa#C#9#6#C#C#C#6#C#6#C#F#C#F#C#F#C#F#C#F#F#F#H#F#F#F#F#t#F#K#F#K#F#K#F#K#t#K#K#K#K#K#K#I#K#x#K#I#K#O#K#O#x#O#x#O#x#O#x#O#Q#O#Q#j#O#j#Q#j#O#j#Q#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#z#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j" +"#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.x.x.A.x.A.xa#.x.A.za#.za#.za#.za#a##Waf#Wa##Wa##W#W#W#W#W#Wac#W#4#W#X#W#Xac#X#4#X#4#X#4#X#4ae#4#Z#X#Z#X#Zae#Z#Z#Z#Z#Z#Z#R#Z#Y#Z#5#Z#Y#R#Y#5#Y#5#Y#5#1#5#1#Y#1#J#1#1#1#1#1#1a.#1a.#1#3#U#3a.#3a.#Aa.", +"aa#Caa#Caa#Caa#C#9#C#C#C#C#6#C#C#C#F#C#F#C#F#C#F#p#F#H#F#H#F#H#F#F#t#H#K#F#K#F#K#t#K#t#K#K#K#K#K#K#x#K#x#K#I#K#Q#K#O#K#O#x#O#x#O#x#O#x#O#Q#j#Q#j#Q#j#Q#j#Q#j#Q#j#j#q#k#q#j#q#k#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s" +"#j.s#j.s#j.s#j.s#k.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.q.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.v.v.v.v.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.y.x.A.x.A.xa#.xa#.xa#.za#.za#.Aa#.A#Wa##Wa##Wa##Wa#ac#W#W#Wab#Wac#W#X#W#X#W#Xac#X#4#X#4#X#4ae#X#Z#X#Z#X#Z#X#Z#Z#Z#Z#Z#Z#Z#Z#Y#Z#Y#Z#Y#Z#Y#5#Y#5#Y#5ag#Y#1#Y#1#Y#1#J#1#1#1#1#1#1a.#1#3#1#3#U#3a.#3a.ad#3ada.ad", +"#Caa#Caa#C#9#6#C#6#C#6#C#8#C#F#C#F#C#F#C#F#7#F#F#F#H#F#F#F#F#K#F#K#F#K#F#K#F#K#t#K#K#2#K#K#K#I#K#I#K#O#K#O#K#O#x#O#x#O#x#O#x#O#Q#O#Q#j#O#j#Q#j#O#j#Q#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j" +"#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.A.x.z.x.A.x.A.xa#.za#.za#.za#af#W.z#Wa##Wa##Wa##W#W#W#Wac#Wac#W#X#W#4ac#Xac#X#4#X#4#X#4ae#4#Z#X#Z#4#Zae#Z#Z#Z#Z#Z#Z#Z#Z#5#Z#5#Z#Y#Z#Y#5#Y#5#Y#5ag#5#1#Y#1#5#1#1#1#1#1#1ah#1a.#1#3#1a.a.#3a.#3a.ada.", +"aa#9aa#Caa#Caa#C#9#C#C#C#C#C#C#6#C#7#C#F#C#F#C#F#C#F#H#F#H#F#H#F#H#F#F#K#H#K#F#K#F#K#t#K#t#K#K#K#K#K#K#x#K#x#K#I#K#Q#K#O#K#O#x#O#x#O#x#O#x#O#Q#j#Q#j#Q#j#Q#j#Q#j#Q#j#j#q#k#q#j#q#k#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s" +"#j.s#j.s#j.s#k.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.x.x.y.x.A.xa#.xa#.xa#.za#.za#.Aa#.za#a##Wa##Wa##Wa##W#W#W#Wab#Wac#Wab#W#X#W#Xac#Xac#X#4#X#4ae#Xae#4#Z#X#Z#X#Zae#Z#Z#Z#Z#Z#Zai#Z#5#Z#Y#Z#Y#Z#Y#5#Y#5#Y#Y#J#5#1#Y#1#Y#1#1#1#1#1#1#1#1#3#1#3#1#3a.#3a.#3a.#Aa.ad#3ad", +"#Caa#Caa#C#9#C#9#6#C#6#C#6#C#8#C#F#C#F#C#F#p#F#H#F#F#F#H#F#F#F#F#K#F#K#F#K#t#K#F#K#K#K#K#2#K#K#K#I#K#I#K#O#K#O#K#O#x#O#x#O#x#O#Q#O#Q#O#Q#j#O#j#Q#j#O#j#Q#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#w#q#z#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j" +"#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.y.x.z.x.A.x.A.xa#.xa#.za#.za#.za#.z#Wa##Wa##Wa##W#W#W#Wac#Wac#Wac#W#4ac#Xac#Xac#X#4#X#4ae#4ae#4#Z#4#Z#X#Z#X#Z#Z#Z#Z#Z#Zaj#Z#5#Z#Y#Z#5aj#Y#5#Y#5#Y#5#J#5#1#5#1#Y#1#1#1#1#1#1#U#1a.#1a.ah#3a.#3a.aka.ada.", +"aa#9aa#9aa#Caa#Caa#C#9#C#C#C#C#C#C#6#C#8#C#F#C#F#C#F#C#F#H#F#H#F#H#F#H#F#F#K#H#K#F#K#F#K#t#K#t#K#K#K#K#K#K#x#K#x#K#I#K#Q#K#O#K#O#x#O#x#O#x#O#x#O#Q#j#Q#j#Q#j#Q#j#Q#j#Q#j#k#j#k#q#j#q#k#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s" +"#j.s#j.s#j.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.u.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.y.x.x.x.y.x.A.xa#.xa#.xa#.xa#.za#.Aa#.za#a##Wa##Wa##Wa##Wa##W#Wac#Wac#Wab#W#X#W#Xac#Xac#X#4#X#4ae#4ae#4ae#X#Z#X#Zae#Zae#Z#Z#Z#Zaj#Zaj#Z#Y#Z#Y#Z#Y#5#Y#5#Y#5#Y#5#1#Y#1#Y#1ag#1#1#1#1#1#1#3#1a.#1#3ah#3a.#3a.#3a.ad#3ad#3ad", +"#9aa#Caa#Caa#6#C#C#C#6#C#6#C#8#C#F#C#F#C#F#C#F#H#F#H#F#F#F#F#t#F#K#F#K#F#K#F#K#t#K#t#K#K#K#K#2#K#K#K#I#K#I#K#O#K#O#K#O#x#O#x#O#x#O#Q#j#Q#O#Q#j#O#j#Q#j#O#j#O#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j#k#j" +"#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.p.p.r.p.p.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.x.x.A.x.A.xa#.xa#.za#.za#.za#.za#a##Waf#Wa##Wa##W#Wac#Wac#Wac#W#4#W#X#W#Xac#Xac#X#4ae#4ae#4ae#4#Z#X#Z#4#Zae#Z#Z#Z#Zaj#Zaj#Z#5#Z#5aj#Y#5#Y#5#Y#5#Y#5#1#5#1#Y#1#5#1#1#1#1#1#1a.#1a.#1#3#1#3a.#3a.#3a.ada.", +"alaaaa#9aa#9aa#Caa#C#9#C#9#C#C#6#C#C#C#F#C#F#C#F#C#F#C#F#7#F#H#F#H#F#H#t#H#t#F#K#F#K#F#K#F#K#t#K#K#K#K#K#K#K#K#x#K#x#K#I#K#Q#x#O#K#O#x#O#x#O#x#O#x#O#Q#j#Q#j#Q#j#Q#j#Q#j#Q#j#k#j#k#q#j#q#k#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#z#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#y#q#z#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s" +"#j.s#j.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.x.x.y.x.y.xa#.xa#.xa#.xa#.xa#.za#.za#a#a#a##Wa##Wa##Wa##Wa#ac#Wac#Wab#Wac#W#Xac#Xac#Xac#X#4ae#4#X#4ae#X#Z#X#Zae#Zae#Z#Z#Z#Z#Z#Z#Z#Z#Y#Z#Y#Z#Yaj#Y#5#Y#5#Y#5ag#Y#1#5#1#Y#1ag#1#1#1#1ah#1a.#1#3#1#3a.#3a.#3a.aka.ada.adakad", +"#9aa#9aa#Caa#C#9#6#C#C#C#6#C#6#C#F#C#F#C#F#C#F#C#F#F#F#H#F#F#F#F#t#F#K#F#K#F#K#F#K#t#K#K#K#K#K#K#2#K#K#K#I#K#I#K#O#K#O#K#O#x#O#x#O#x#O#Q#j#Q#j#Q#j#O#j#Q#j#O#j#O#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#z#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j#k#j#k#j" +".s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.A.x.z.xa#.xa#.xa#.za#.za#.za#af#Waf#Wa##Wa##Wa#ac#Wac#Wac#Wac#W#X#W#4ac#Xac#X#4#X#4#X#4ae#4#Z#X#Z#4#Zae#Z#Z#Z#Z#Z#Z#Z#Z#5#Z#5#Z#Y#Z#Y#5#Y#5#Y#5ag#5#1#5#1#5#1#1#1#1#1#1ah#1a.#1a.#1a.a.#3a.#3a.aka.ada.", +"aaaaal#9aa#Caa#Caa#Caa#C#C#C#C#C#C#6#C#C#C#F#C#F#C#F#C#F#p#F#H#F#H#F#H#F#F#t#H#K#F#K#F#K#F#K#F#K#t#K#K#K#K#K#K#K#K#x#K#x#K#O#K#Q#x#O#x#O#x#O#x#O#x#O#x#O#Q#j#Q#j#Q#j#Q#j#Q#j#Q#j#k#j#k#q#j#q#k#q#j#q#k#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s" +"#j.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.o.q.q.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.y.xam.xa#.xa#.xa#.xa#.za#.za#a#a#afa#a##Wa##Wa##Wa#ac#Wac#Wab#Wac#Wabac#Xac#Xac#Xac#X#4#X#4ae#Xae#4#Z#X#Z#X#Zae#Z#Z#Z#Z#Z#Zai#Z#5#Z#Yaj#Yaj#Y#5#Y#5ag#5ag#5#1#Y#1#Y#1#1#1#1#1#1#1#1#3#1#3#1#3a.#3a.#3a.aka.ad#3adakad", +"#9aa#Caa#Caa#Caa#C#9#6#C#6#C#6#C#8#C#F#C#F#C#F#C#F#7#F#F#F#H#F#F#F#F#t#F#K#F#K#F#K#F#K#t#K#K#K#K#K#K#I#K#x#K#I#K#O#K#O#x#O#K#O#x#O#x#O#x#O#Q#j#Q#j#Q#j#O#j#Q#j#O#j#Q#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j#k#j#k#j.s#j" +".s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.w.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.w.x.v.x.v.x.v.x.x.x.x.x.x.x.x.y.x.z.xa#.xa#.xa#.xa#.za#.za#afa#af#Wa##Wa##Wa#ac#Wac#Wac#Wac#Wac#W#4ac#Xac#Xac#X#4#X#4ae#4ae#4#Z#4#Zae#Zae#Z#Z#Z#Z#Z#Zaj#Z#5#Z#Y#Z#5aj#Y#5#Y#5ag#5ag#5#1#5#1ag#1#1#1#1#1#1ah#1a.#1a.ah#3a.#3a.aka.ada.ada.", +"anaaaaaaaa#9aa#Caa#Caa#C#9#C#C#C#C#C#C#6#C#7#C#F#C#F#C#F#C#F#H#F#H#F#H#F#H#F#F#t#H#K#F#K#F#K#t#K#t#K#t#K#K#K#K#x#K#K#K#x#K#x#K#O#K#Q#x#O#x#O#x#O#x#O#x#j#x#O#Q#j#Q#j#Q#j#Q#j#Q#j#Q#j#k#j#k#q#j#q#k#q#j#q#k#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s" +"#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.x.y.x.x.xam.xa#.xa#.xa#.xa#.xa#.za#a#a#afa#a##Wa##Wa##Wa#aca#ac#Wac#Wac#Wabac#Xac#Xac#Xac#Xac#X#4ae#4ae#4ae#X#Z#X#Zae#Zae#Z#Z#Z#Zaj#Zaj#Z#Y#Z#Y#Z#Yaj#Y#5#Y#5#Y#5#1#Y#1#Y#1ag#1#1#1#1#1#1ah#1a.#1#3ah#3a.#3a.#3a.ad#3ada.adakad", +"#9aa#9aa#Caa#Caa#C#9#C#9#6#C#6#C#6#C#8#C#F#C#F#C#F#C#F#7#F#F#F#H#F#F#F#F#K#F#K#F#K#F#K#F#K#t#K#K#K#K#K#K#I#K#x#K#I#K#O#K#O#x#O#x#O#x#O#x#O#x#O#Q#j#Q#j#Q#j#O#j#Q#j#O#j#Q#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#z#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#k#j#k#j#k#j.s#j.s#j" +".s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.x.xa#.xa#.xa#.xa#.za#.za#afa#afa#a##Waf#Wa#aca#ac#Wac#Wac#Wac#W#4ac#Xac#4ac#Xac#X#4ae#4ae#4ae#4#Zae#Zao#Zae#Z#Z#Z#Zaj#Zaj#Z#5#Z#5aj#Yaj#Y#5#Y#5#Y#5#1#5#1ag#1ap#1#1#1#1#1#1a.#1a.ah#3aha.a.#3a.aka.ada.adaq", +"alaaalaaaa#9aa#9aa#Caa#Caa#C#9#C#C#C#C#C#C#6#C#8#C#F#C#F#C#F#C#F#H#F#H#F#H#F#H#F#F#t#H#K#F#K#F#K#t#K#t#K#t#K#K#K#K#x#K#x#K#x#K#x#K#O#K#Q#x#O#x#O#x#O#x#O#x#j#x#O#Q#j#Q#j#Q#j#Q#j#k#j#Q#j#k#j#k#q#j#q#k#q#j#q#k#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#q#k#q#j#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s" +"#k.s#j.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.u.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.x.y.x.x.xam.xam.xa#.xa#.xa#.xa#.za#afa#afa#a#a#a##Wa##Wa#aca#aca#ac#Wac#Wabacacac#Xac#Xac#Xac#X#4ae#4ae#4ae#X#Z#X#Zae#Zae#Z#Z#Z#Zaj#Zaj#Z#Y#Z#Y#Z#Yaj#Y#5#Y#5#Y#5ag#Y#1#5#1ag#1ag#1#1#1#1ah#1a.#1#3ah#3ah#3a.#3a.aka.ada.adakadadad", +"aaaa#9aa#9aa#Caa#Caa#6#C#C#C#6#C#6#C#8#C#8#C#F#C#F#C#F#H#F#H#F#F#F#H#F#F#F#F#K#F#K#F#K#F#K#F#K#t#K#K#K#K#K#K#I#K#x#K#I#K#O#K#O#x#O#x#O#x#O#x#O#x#O#Q#j#Q#j#Q#j#O#j#Q#j#O#j#Q#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#y#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#j#j#k#j#j#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j" +".s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.t.v.w.v.w.v.v.v.w.v.v.x.v.x.v.x.v.x.x.x.x.x.x.x.x.x.xa#.xa#.xa#.xa#.xa#.za#afa#afa#a##Waf#Wa#aca#aca#ac#Wac#Wac#Wacac#Xac#4ac#Xac#X#4ae#4ae#4ae#4#Zao#Zao#Zae#Zae#Z#Zaj#Zaj#Z#5#Z#5aj#Yaj#Y#5#Y#5#Y#5ag#5#1#5#1#5#1ag#1#1#1#1ah#1a.#1a.#1a.ah#3a.#3a.aka.adaqadaq", +"anaaaaaaalaaaa#9aa#9aa#Caa#C#9#C#9#C#C#C#C#C#C#F#C#F#C#F#C#F#C#F#C#F#H#F#H#F#H#F#H#F#F#K#H#K#F#K#F#K#t#K#t#K#K#K#K#K#K#x#K#x#K#x#K#x#K#O#K#Q#x#O#x#O#x#O#x#O#x#j#x#O#Q#j#Q#j#Q#j#Q#j#k#j#Q#j#k#j#k#j#j#q#k#q#j#q#k#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#q#k#j#j#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#k.s" +"#j.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.v.v.v.v.v.v.v.x.v.x.v.x.v.x.x.x.x.x.xam.xam.xa#.xa#.xa#.xa#.xa#afa#afa#a#a#afa#a##Wa#aca#aca#ac#Wac#Wabacacacabac#Xac#Xac#Xacae#4ae#4ae#Xae#4#Zae#Zae#Zae#Z#Zaj#Zaj#Zai#Z#5#Z#Yaj#Yaj#Y#5#Y#5ag#5ag#5#1#Y#1ag#1#1#1#1ah#1ah#1#3#1a.#1#3a.#3a.aka.aka.adakadakadadad", +"aaaa#9aa#9aa#9aa#Caa#C#9#6#C#C#C#6#C#6#C#F#C#F#C#F#C#F#C#F#H#F#H#F#F#F#F#t#F#t#F#K#F#K#F#K#t#K#t#K#K#K#K#2#K#K#K#I#K#x#K#I#K#O#K#O#x#O#x#O#x#O#x#O#x#O#Q#j#Q#j#Q#j#O#j#Q#j#j#j#Q#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#k#j#j#j#k#j#j#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j" +".s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.v.x.x.x.x.x.x.x.xam.xaf.xa#.xa#.xa#.za#afa#afa#afa#af#Wa#aca##Wa#ac#Wac#Wac#Wacacacac#4ac#Xac#Xacae#4ae#4ae#4ae#4#Z#4#Zae#Zae#Z#Zaj#Zaj#Zaj#Z#5#Z#Yaj#5aj#Y#5#Y#5ag#5ag#5#1#5#1ag#1#1#1#1ah#1ah#1a.#1a.ah#3a.#3a.aka.aka.ada.adak", +"anaaanaaaaaaal#9aa#Caa#Caa#Caa#C#9#C#9#C#C#6#C#C#C#F#C#F#C#F#C#F#C#F#7#F#H#F#H#F#H#t#H#t#F#K#H#K#F#K#F#K#t#K#t#K#K#K#K#K#K#x#K#x#K#x#K#x#K#O#K#Q#x#O#x#O#x#O#x#O#x#j#x#j#Q#j#Q#j#Q#j#Q#j#k#j#Q#j#k#j#k#j#j#q#k#q#j#q#k#q#j#q#k#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#k.s#j.s" +".s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.v.x.x.x.xam.xar.xam.xa#.xa#.xa#.xa#ara#afa#a#a#afa#a##Wa#aca#aca#aca#ac#Wacacac#Wabac#Xac#Xac#Xacae#4ae#4ae#4ae#4aeae#Zae#Zae#Zaeaj#Zaj#Zaj#Zaj#Z#Yaj#Yaj#Yaj#Y#5ag#5ag#5#1#Y#1#Y#1ag#1#1#1#1ah#1ah#1a.#1#3ah#3a.#3a.aka.ak#3ada.adakadadas", +"aaaaaaaa#9aa#Caa#Caa#Caa#C#9#6#C#C#C#6#C#6#C#F#C#F#C#F#C#F#C#F#H#F#H#F#F#F#F#t#F#K#F#K#F#K#F#K#t#K#t#K#K#K#K#2#K#K#K#I#K#I#K#I#K#O#K#O#x#O#x#O#x#O#x#O#x#O#Q#j#Q#j#Q#j#O#j#Q#j#j#j#Q#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#k#j#j#j#k#j#j#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j" +".s#j.s#j.s#b.s#b.s.s.s#b.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.w.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.v.x.x.x.x.x.xam.xaf.xa#.xa#.xa#.xa#afa#afa#afa#afa#a#acaf#Wa#aca#ac#Wac#Wacacacac#4ac#Xac#4acaeacae#4ae#4ae#4ae#4#Zae#Zao#Zae#Z#Z#Z#Zaj#Zaj#Z#5#Z#5aj#Yaj#Y#5ag#5ag#5#1#5#1ag#1ap#1#1ah#1ah#1ah#1a.ah#3aha.a.aka.aka.ada.adaqadaq", +"anaaanaaanaaaaaaaa#9aa#Caa#Caa#Caa#C#C#C#C#C#C#6#C#C#C#F#C#F#C#F#C#F#p#F#H#F#H#F#H#F#H#t#H#t#F#K#H#K#F#K#F#K#t#K#t#K#K#K#K#K#K#x#K#x#K#x#K#x#K#O#K#Q#x#O#x#O#x#O#x#O#x#j#x#j#Q#j#Q#j#Q#j#Q#j#k#j#Q#j#k#j#k#j#k#j#k#q#j#q#k#q#j#q#k#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#q#k#q#j#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#k.s#j.s.s.s" +".s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.xam.xar.xam.xa#.xa#.xa#.xa#ara#afa#afa#afa#a#a#a#aca#aca#aca#ac#Wac#Wac#Wabacacac#Xac#Xacaeacae#4ae#4ae#4aeae#Zae#Zae#Zae#Z#Z#Z#Zaj#Zaj#Z#Yaj#Yaj#Yaj#Y#5ag#5ag#5ag#Y#1#5#1ag#1ag#1#1#1#1ah#1a.#1#3ah#3ah#3a.#3a.aka.ada.adakadakadadas", +"aaaaaaaaaaaa#9aa#Caa#Caa#C#9#C#9#6#C#6#C#6#C#8#C#F#C#F#C#F#C#F#7#F#F#F#H#F#F#F#F#t#F#K#F#K#F#K#F#K#t#K#t#K#K#K#K#2#K#K#K#I#K#I#K#I#K#O#K#O#x#O#x#O#x#O#x#O#x#O#Q#j#Q#j#Q#j#O#j#Q#j#j#j#Q#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#w#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#j#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j" +".s#j.s#b.s#b.s.s.s#b.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.v.x.v.x.x.x.x.x.xar.xar.xa#.xa#.xa#.xa#ara#afa#afa#afa#a#acaf#Wa#aca#aca#ac#Wacacacacacac#Xac#4acaeacae#4ae#4ae#4ae#4#Zao#Zao#Zae#Zae#Z#Zaj#Zaj#Zaj#Z#5aj#Yaj#Y#5ag#5ag#5ag#5#1ap#1ap#1ag#1#1#1#1ah#1a.aha.aha.ah#3a.aka.aka.adaqadaqadad", +"ataaanaaalaaalaaaa#9aa#9aa#Caa#Caa#C#9#C#C#C#C#C#C#6#C#7#C#F#C#F#C#F#C#F#p#F#H#F#H#F#H#F#H#t#H#t#F#K#F#K#F#K#F#K#t#K#t#K#K#K#K#K#K#x#K#x#K#x#K#x#K#O#K#Q#x#O#x#O#x#O#x#O#x#j#x#j#Q#j#Q#j#Q#j#Q#j#k#j#Q#j#k#j#k#j#k#j#k#j#j#q#k#q#j#q#k#q#j#q#k#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#j#j#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#k.s#b.s.s.s.s.s" +".s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.o.q.q.q.o.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.v.v.x.v.x.v.x.v.x.v.x.xar.xar.xam.xam.xa#.xa#.xa#ara#ara#afa#afa#a#a#a#aca#aca#aca#aca#ac#Wac#Wabacacac#Xac#Xacaeacaeacae#4ae#4aeaeaeao#Zae#Zae#Zae#Z#Zaj#Zaj#Zaiaj#5aj#Yaj#Yaj#Y#5#Y#5ag#5ag#5#1ag#1ag#1ag#1#1ah#1ah#1#3aha.ah#3ah#3a.aka.aka.adakadakadadadadas", +"aaauaaaaaaaa#9aa#9aa#Caa#Caa#C#9#C#9#6#C#6#C#6#C#8#C#F#C#F#C#F#C#F#7#F#F#F#H#F#F#F#F#t#F#K#F#K#F#K#F#K#t#K#t#K#K#K#K#2#K#K#K#I#K#I#K#I#K#O#K#O#x#O#x#O#x#O#x#O#x#O#Q#j#Q#j#Q#j#O#j#Q#j#j#j#Q#j#j#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#j#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j" +".s#b.s#b.s.s.s#b.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.v.x.x.x.xar.xar.xa#.xaf.xa#.xa#ara#afa#afa#afa#afa#af#Wa#aca#aca#ac#Wacacacacacacacac#4ac#Xac#Xacae#4ae#4ae#4aeao#Zao#Zae#Zae#Z#Zaj#Zaj#Zaj#Z#5aj#Yaj#5aj#Y#5#Y#5ag#5ag#5#1ap#1ag#1#1#1#1ah#1ah#1a.#1a.ah#3a.#3a.aka.aka.adaqadakadav", +"ataaanaaanaaaaaaalaaaa#9aa#9aa#Caa#Caa#C#9#C#C#C#C#C#C#6#C#7#C#F#C#F#C#F#C#F#p#F#H#F#H#F#H#F#F#t#H#K#F#K#F#K#F#K#F#K#t#K#t#K#K#K#K#K#K#x#K#x#K#x#K#x#K#O#K#Q#x#O#x#O#x#O#x#O#x#j#x#j#x#j#Q#j#Q#j#Q#j#Q#j#Q#j#k#j#k#j#k#j#k#j#j#j#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#k.s#j.s#k.s#b.s.s.s.s.s.s.s" +".s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.v.v.v.v.v.v.v.x.v.x.v.x.v.x.var.xar.xam.xam.xam.xa#.xa#ara#ara#afa#afa#a#a#afawa#aca#aca#aca#aca#ac#Wacacacacabac#Xacaeacaeacae#4ae#4aeaoae#4aeae#Zae#Zae#Zaeaj#Zaj#Zaj#Zaj#Z#Yaj#Yaj#Yaj#Y#5ag#5ag#5agag#1ag#1ag#1#1ah#1ah#1ah#1a.ah#3ah#3a.aka.aka.akaqadaqadakadadasadas", +"aaauaaauaaaaaaaa#9aa#9aa#Caa#C#9#6#C#C#C#6#C#6#C#8#C#8#C#F#C#F#C#F#p#F#H#F#F#F#H#F#F#F#F#t#F#K#F#K#F#K#F#K#t#K#t#K#K#K#K#I#K#K#K#I#K#I#K#I#K#O#K#O#x#O#x#O#x#O#x#O#x#O#x#j#Q#j#Q#j#Q#j#Q#j#j#j#Q#j#j#j#k#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#j#j#k#j#j#j#k#j#j#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b" +".s#b.s.s.s#b.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.v.x.v.x.var.x.x.xar.xar.xam.xaf.xa#.xa#ara#ara#afa#afa#afa#af#Wa#acafaca#aca#acacac#Wacacacac#4ac#Xac#Xacaeacae#4ae#4aeaoaeao#Zae#Zao#Zaeaj#Zaj#Zaj#Zajaj#5aj#5aj#Yaj#Y#5ag#5ag#5#1#5#1ag#1ap#1#1ah#1ah#1ah#1a.ah#3aha.a.aka.aka.ada.adaqadaqadad", +"ataaataaanaaanaaaaaaalaaaa#9aa#9aa#Caa#Caa#C#9#C#C#C#C#C#C#B#C#8#C#F#C#F#C#F#C#F#H#F#H#F#H#F#H#F#F#t#H#K#F#K#F#K#t#K#F#K#t#K#t#K#K#K#K#K#K#x#K#x#K#x#K#x#K#O#K#Q#x#O#x#O#x#O#x#O#x#j#x#j#x#j#Q#j#Q#j#Q#j#Q#j#Q#j#k#j#k#j#k#j#k#j#k#j#k#j#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#k.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s" +".s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.var.xar.xam.xar.xam.xa#.xa#ara#ara#ara#afa#a#a#afawa#awa#aca#aca#aca#ac#Wacacacacabacacacaeac#Xacaeacae#4ae#4ae#4aeae#Zae#Zae#Zaeaj#Zaj#Zaj#Zaj#Z#Yaj#Yaj#Yaj#Y#5ag#5ag#5ag#Y#1ap#1ag#1agah#1ah#1ah#1ah#1#3ah#3ah#3a.aka.aka.ada.adakadakasadasadas", +"aaanaaaaaaaaaaaa#9aa#9aa#Caa#Caa#C#9#6#C#C#C#6#C#6#C#F#C#F#C#F#C#F#C#F#p#F#H#F#F#F#H#F#F#F#F#K#F#K#F#K#F#K#F#K#t#K#t#K#K#K#K#I#K#x#K#I#K#I#K#I#K#O#K#O#x#O#x#O#x#O#x#O#x#O#x#j#Q#j#Q#j#Q#j#Q#j#j#j#Q#j#j#j#k#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b" +".s.s.s#b.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.q.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.var.v.x.xar.xar.xam.xaf.xa#.xa#ara#ara#afa#afa#afa#afa#a#acafaca#aca#acacac#Wacacacacacac#Xac#4acaeacae#4ae#4aeaoaeao#Zae#Zao#Zaeaj#Zaj#Zaj#Zajaj#5aj#5aj#Yaj#Y#5ag#5ag#5ag#5#1ap#1ap#1agah#1ah#1ah#1a.aha.aha.ahaka.aka.aka.adaqadaqadadasad", +"atauataaanaaanaaanaaaaaaal#9aa#Caa#Caa#Caa#C#9#C#9#C#C#C#C#C#C#F#C#F#C#F#C#F#C#F#C#F#H#F#H#F#H#F#H#F#F#t#H#K#F#K#F#K#t#K#t#K#t#K#t#K#K#K#K#K#K#x#K#x#K#x#K#x#K#I#K#Q#x#O#x#O#x#O#x#O#x#j#x#j#x#j#x#j#Q#j#Q#j#Q#j#Q#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#j#j#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#k.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.s" +".s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.v.x.v.x.v.x.v.x.var.var.xam.xar.xam.xam.xa#ara#ara#ara#afa#afa#afawa#awa#aca#aca#aca#aca#acacacacabacacac#Xac#Xacaeacaeacae#4ae#4aeaeaeao#Zae#Zaeajaeaj#Zaj#Zaj#Zaiaj#5aj#Yaj#Yajag#5ag#5ag#5ag#5#1ag#1ag#1ag#1#1ah#1ah#1#3aha.ah#3ah#3a.aka.aka.adakadaqadadasadasadas", +"aaauaaanaaaaaaaaaaaa#9aa#Caa#Caa#Caa#C#9#6#C#C#C#6#C#6#C#F#C#F#C#F#C#F#C#F#H#F#H#F#F#F#H#t#F#F#F#K#F#K#F#K#F#K#F#K#t#K#t#K#K#K#K#I#K#x#K#I#K#I#K#I#K#O#K#O#x#O#x#O#x#O#x#O#x#O#x#j#Q#j#Q#j#Q#j#Q#j#O#j#Q#j#j#j#k#j#j#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#j#j#k#j#j#j#k#j#j#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s" +".s#b.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.w.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.var.v.x.xar.xar.xar.xar.xa#.xa#ara#ara#ara#afa#afa#afa#afacafaca#aca#aca#ac#Wacacacacacac#4ac#4acaeacaeacae#4aeaoaeaoaeao#Zao#Zaeajaeaj#Zaj#Zajajajaj#5aj#Yaj#5ajag#5ag#5ag#5agap#1ap#1ag#1agah#1ah#1ahaha.aha.ah#3ahaka.aka.akaqadaqadakasavasad", +"ataaataaataaanaaanaaalaaaaaaaa#9aa#Caa#Caa#Caa#C#C#C#C#C#C#6#C#C#C#F#C#F#C#F#C#F#C#F#C#F#H#F#H#F#H#F#H#F#F#t#H#K#F#K#F#K#t#K#t#K#t#K#t#K#K#K#K#K#K#x#K#x#K#x#K#x#K#I#K#Q#x#O#x#Q#x#O#x#O#x#j#x#O#x#j#x#j#Q#j#Q#j#Q#j#Q#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#j#j#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#k.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.s.s.s" +".s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.v.v.x.var.v.x.var.var.xar.xar.xam.xam.xa#ara#ara#ara#ara#afa#afawa#awafawa#aca#aca#aca#acacacacacacacacabac#Xacaeacaeacae#4ae#4aeaeaeao#Zae#Zaeajaeajaeaj#Zaj#Zajajajaj#Yaj#Yajagajag#5ag#5ag#5agag#1ag#1ag#1#1ah#1ah#1ahaha.ah#3ah#3a.aka.aka.akaqadaqadakadadasadasadax", +"aaataaauaaanaaaaaaaa#9aa#9aa#Caa#Caa#C#9#C#9#6#C#C#C#6#C#6#C#F#C#F#C#F#C#F#C#F#H#F#H#F#F#F#H#t#F#t#F#K#F#K#F#K#t#K#F#K#t#K#t#K#K#K#K#I#K#x#K#I#K#x#K#I#K#O#K#O#x#O#x#O#x#O#x#O#x#O#x#j#x#j#Q#j#Q#j#Q#j#Q#j#Q#j#j#j#k#j#j#j#k#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b" +".s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.o.q.q.q.o.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.v.v.w.x.v.x.v.x.var.var.var.xar.xar.xar.xam.xafara#ara#ara#afa#afa#afa#afawafaca#aca#aca#aca#acacacacacacacac#4acaeacaeacae#4aeaoaeaoaeaoaeao#Zaeajaoajaeaj#Zaj#Zaj#Zajaj#5aj#5ajagajag#5ag#5agap#1ap#1ag#1ap#1#1ah#1ah#1ahaha.ah#3aha.a.aka.akaqakaqadaqadaqasadasad", +"atauataaataaataaanaaalaaalaaaa#9aa#9aa#Caa#Caa#Caa#C#C#C#C#C#C#6#C#C#C#F#C#F#C#F#C#F#p#F#p#F#H#F#H#F#H#t#H#F#F#t#H#K#F#K#F#K#t#K#t#K#t#K#t#K#K#x#K#K#K#x#K#x#K#x#K#x#K#I#K#Q#x#O#x#Q#x#O#x#O#x#j#x#O#x#j#x#j#x#j#Q#j#Q#j#Q#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#j#j#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#k.s#j.s.s.s#b.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p" +".s.p.s.p.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.v.v.w.v.v.v.v.v.v.x.var.v.x.var.var.var.xar.xam.xam.xamara#ara#ara#ara#afa#afawa#awafawa#aca#aca#aca#acawacacacacacacabac#Xacaeacaeacaeacae#4aeaoaeaoaeae#Zaeajaeajaeaj#Zaj#Zajajajaj#Yaj#Yajagajag#5ag#5ag#5agag#1ap#1ag#1agah#1ah#1ahahahah#3ah#3ahaka.aka.akaqakaqadakadakasadasadasasax", +"aaataaanaaauaaauaaaaaaaa#9aa#9aa#Caa#Caa#C#9#C#9#6#C#6#C#6#C#8#C#F#C#F#C#F#C#F#C#F#H#F#H#F#F#F#H#t#F#t#F#K#F#K#F#K#t#K#t#K#t#K#t#K#K#K#K#I#K#x#K#I#K#x#K#I#K#O#K#O#x#O#x#O#x#O#x#O#x#O#x#j#x#j#Q#j#Q#j#Q#j#Q#j#Q#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s#b.s.s.s#b.s.s" +".s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.v.x.var.var.var.xar.xar.xar.xam.xafara#ara#ara#ara#afawafa#afawafawa#acafaca#aca#acacacacacacacacacacaeacaoacaeacaeaoae#4aeaoaeao#Zaeajaoajaeaj#Zaj#Zaj#Zajaj#5aj#5ajagajag#5ag#5agapagap#1ap#1ap#1agah#1ah#1ah#1a.aha.aha.ahaka.aka.aka.adaqadaqadakasadasas", +"atauatauataaataaanaaanaaaaaaalaaaa#9aa#9aa#Caa#Caa#C#9#C#C#C#C#C#C#6#C#C#C#F#C#F#C#F#C#F#p#F#p#F#H#F#H#F#H#t#H#t#F#t#H#K#F#K#F#K#t#K#t#K#t#K#t#K#K#x#K#K#K#x#K#x#K#x#K#x#K#I#K#x#x#O#x#Q#x#O#x#O#x#j#x#O#x#j#x#j#x#j#x#j#Q#j#Q#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#j#j#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#q#k#q#j#j#k#j#j#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#k.s#j.s#k.s#j.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p" +".s.p.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.u.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.v.v.v.v.v.v.var.var.var.var.var.xar.xamarar.xamara#ara#ara#ara#ara#afawa#awafawa#awa#aca#aca#acawacacacacacacabacacacaeacaeacaeacae#4aeaoaeaoaeaeaeaoajaeajaeajaeaj#Zajajajajaiaj#5aj#Yaj#Yajag#5ag#5agapagap#1ag#1agahagah#1ah#1ahah#3aha.ahakahaka.aka.akaqadakadaqasadasadasasasasay", +"auataaataaanaaauaaauaaaaaaaa#9aa#9aa#Caa#Caa#C#C#C#C#6#C#6#C#6#C#8#C#F#C#F#C#F#C#F#C#F#H#F#H#F#F#F#H#t#F#t#F#K#F#K#F#K#t#K#t#K#t#K#t#K#K#K#K#I#K#x#K#I#K#x#K#I#K#I#K#O#x#O#x#O#x#O#x#O#x#O#x#j#x#j#x#j#Q#j#Q#j#Q#j#Q#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s#b.s.s.s#b.s.s.s.s" +".s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.x.w.x.var.var.var.xar.xar.xar.xam.xafara#ara#ara#ara#afawafa#afawafawa#acafaca#aca#acawacacacacacacacacaeacaoacaeacaeacae#4aeaoaeaoaeao#Zao#Zaeajaeaj#Zaj#Zajajajaj#5aj#Yaj#5ajag#5ag#5ag#5agap#1ap#1agah#1ah#1ah#1ahaha.aha.ahakahaka.aka.akaqadaqadakasavasadasas", +"atauatauatauataaataaanaaanaaaaaaalaaaa#9aa#9aa#Caa#Caa#C#9#C#C#C#C#C#C#6#C#C#C#F#C#F#C#F#C#F#p#F#p#F#H#F#H#F#H#t#H#t#F#t#H#K#F#K#F#K#t#K#t#K#t#K#t#K#K#x#K#K#K#x#K#x#K#x#K#x#K#x#K#x#x#O#x#Q#x#O#x#O#x#j#x#O#x#j#x#j#x#j#x#j#x#j#Q#j#k#j#Q#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#k.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p" +".s.p.s.p.s.r.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.u.t.t.t.u.t.u.t.v.t.v.t.v.t.v.t.v.t.v.w.v.v.v.w.v.v.v.var.var.var.var.var.xar.xamarar.xamara#ara#ara#ara#ara#afawafawafawa#awa#aca#aca#acawacawacacacacabacacacaeacaeacaeacaeacaeaoaeaoaeaeaeaoajae#Zaeajaeaj#Zajajajajajajajaj#Yaj#Yajagajag#5agapagap#1ag#1agahagah#1ah#1ah#1ahaha.ah#3ahaka.aka.aka.akaqadaqasakasadasadasasaxasax", +"auatauataaazaaanaaaaaaaaaaaa#9aa#9aa#9aa#Caa#Caa#6#C#C#C#6#C#6#C#6#C#8#C#F#C#F#C#F#C#F#C#F#H#F#H#F#F#F#H#t#F#t#F#K#F#K#F#K#t#K#t#K#t#K#t#K#K#K#K#I#K#x#K#I#K#x#K#I#K#I#K#O#x#O#x#O#x#O#x#O#x#O#x#j#x#j#x#j#x#j#Q#j#Q#j#Q#j#k#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#j#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s.s.s#b.s.s.s#b.s.s.s.s.s.s" +".s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.t.t.u.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.w.v.v.v.w.x.var.var.var.var.xar.xararar.xarara#ara#ara#ara#arawafa#afawafawafawafaca#aca#acawacacacacacacacacaAacaoacaeacaeacae#4aeaoaeaoaeao#Zao#Zaeajaeajaeaj#Zajajajajajaj#5aj#5ajagajag#5ag#5agap#1ap#1agahapah#1ah#1ahahahaha.ahakahaqa.aka.akaqakaqadaqasaqasadasadasas", +"atazatauatauatauataaataaanaaanaaaaaaalaaaa#Caa#Caa#Caa#Caa#C#9#C#C#C#C#C#C#6#C#7#C#F#C#F#C#F#C#F#p#F#H#F#H#F#H#F#H#t#H#t#F#t#H#K#F#K#F#K#t#K#t#K#t#K#t#K#t#x#K#K#K#x#K#x#K#x#K#x#K#x#K#x#x#I#x#Q#x#O#x#Q#x#O#x#O#x#j#x#j#x#j#x#j#x#j#x#j.s#j#Q#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#k.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p" +".s.p.s.r.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.waB.v.v.vaB.var.var.var.var.var.xamarararamaramara#ara#ara#ara#arawafawafawa#awafawa#aca#acawacawacacacacacacacacaCacaeacaeacaeacaeaoaeaoaeaoaeaoaeae#Zaeajaeajaeaj#Zaj#Zajajajaj#Yaj#Yajagajag#5agapagapagag#1ap#1agahagah#1ah#1ahahahah#3ah#3ahaka.aka.akaqakaqadakadakasadasadasasaxasaD", +"auatauatauataaauaaanaaaaaaaaaaaa#9aa#Caa#Caa#Caa#C#9#6#C#C#C#6#C#6#C#B#C#8#C#F#C#F#C#F#p#F#p#F#H#F#H#F#F#F#H#t#F#t#F#K#F#K#F#K#t#K#t#K#t#K#t#K#K#K#K#x#K#x#K#I#K#x#K#I#K#I#K#O#x#O#x#O#x#O#x#O#x#O#x#j#x#j#x#j#x#j#x#j#Q#j#Q#j#k#j#Q#j#k#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#j#j#j#j#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#q#j#j#j#j#j#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s#b.s.s.s.s.s.s.p.s" +".p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.q.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.t.t.u.t.w.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.vaB.w.x.var.var.var.var.xar.xararar.xarara#arafara#ara#arawafa#afawafawafawafacawaca#acawacawacacacacacacaAacaoacaeacaeacaeacaeaoaeaoaeaoaeao#Zaeajaoajaeaj#Zajajajajajaj#5aj#5ajagajag#5ag#5agapagap#1apahapahagah#1ahahahaha.aha.aha.ahaka.akaqakaqadaqasaqasakasadasasasas", +"aEatatazatauataaataaataaanaaanaaanaaaaaaal#9aa#Caa#Caa#Caa#Caa#C#9#C#C#C#C#C#C#B#C#7#C#F#C#F#C#F#C#F#p#F#H#F#H#F#H#F#H#t#H#t#F#t#H#K#F#K#F#K#t#K#t#K#t#K#t#K#t#x#K#K#K#x#K#x#K#x#K#x#K#x#K#x#x#I#x#Q#x#O#x#Q#x#O#x#O#x#j#x#j#x#j#x#j#x#j#x#j#x#j#x#j.s#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#k.s#j.s#k.s#j.s.s.s#b.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p" +".s.r.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.r.q.o.q.q.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.w.v.v.v.waB.v.v.vaB.var.var.var.var.var.xararararamaramara#ara#ara#ara#arawafawafawa#awafawa#aca#acawacawacawacacacacacacaCacaCacaeacaeacaeaAaeaoaeaoaeaoaeae#Zaeajaeajaeajaeaj#Zajajajajaiaj#5ajagajagajag#5ag#5agapagap#1ag#1agah#1ah#1ahahahah#3aha.ahakahaka.akaqakaqadakadaqasadasadasasasasayasaF", +"auatauataaataaataaauaaanaaaaaaaaaaaa#9aa#Caa#Caa#Caa#C#9#6#C#C#C#6#C#6#C#B#C#F#C#F#C#F#C#F#p#F#p#F#F#F#H#F#F#F#H#t#F#t#F#K#F#K#F#K#t#K#t#K#t#K#t#K#K#K#K#x#K#x#K#I#K#x#K#I#K#I#K#I#x#O#x#O#x#O#x#O#x#O#x#j#x#j#x#j#x#j#x#j#x#j#Q#j#k#j#Q#j#k#j#k#j#k#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#j#j#j#j#j#j#j#j#j#j#j#j#j#j#j#j#j#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s" +".p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.vaB.w.v.var.var.var.var.var.xararararararamarafara#ara#arawarawafawafawafawafawawacafacawacawacacacacacacaAacaAacaeacaoacaeacaeaoaeaoaeaoaeaoaeaoajaoajaeajaeajajajajajajajaj#5ajagajapajag#5agapagapagap#1ap#1agah#1ah#1ahahahaha.aha.ahakahaka.akaqakaqadaqadakasavasasasasaxas", +"aEazaEatatauatauataaataaataaanaaalaaalaaaaaaal#9aa#Caa#Caa#Caa#C#C#C#C#C#C#C#C#C#C#B#C#H#C#F#C#F#C#F#C#F#p#F#H#F#H#F#H#F#H#t#H#t#F#t#H#K#F#K#H#K#t#K#t#K#t#K#t#K#t#x#K#K#K#x#K#x#K#x#K#x#K#x#K#x#x#I#x#x#x#O#x#Q#x#O#x#Q#x#j#x#j#x#j#x#j#x#j#x#j#x#j#x#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#k.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.r" +".s.p.p.r.p.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.r.q.o.q.q.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.t.v.v.v.waB.vaB.vaB.var.var.var.var.var.vararararamarararamara#arawara#arawarawafawa#awafawawawa#acawacawacawacacacacacacaCacaAacaeacaeacaeaAaeaAaeaoaeaoaeaeaeaoajaeajaeajaeaj#Zajajajajaiaj#5ajagajagajag#5ag#5agapagap#1ag#1agahagah#1ahahahahahaha.ahakahaka.akaqakaqakaqadaqasakasadasasasasaxasaxasaD", +"azatauatauataaataaataaauaaanaaaaaaaaaaaa#9aa#Caa#Caa#Caa#C#9#6#C#C#C#6#C#6#C#F#C#F#C#F#C#F#C#F#p#F#p#F#F#F#H#F#F#F#H#t#F#t#F#K#F#K#F#K#t#K#t#K#t#K#t#K#t#K#K#x#K#x#K#I#K#x#K#I#K#x#K#I#x#I#x#O#x#O#x#O#x#O#x#j#x#O#x#j#x#j#x#j#x#j#x#j#x#j#Q#j#k#j#k#j#k#j#k#j#k#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s#b.s.s.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s" +".p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.w.v.w.v.w.v.waB.waB.var.var.var.var.var.xararararararamarafara#ara#arawarawafawafawafawafawawacafacawacawacawacacacacaAacaAacaeacaoacaeacaeaAaeaoaeaoaeaoaeaoajaoajaeajaeajajajajajajajaj#5ajagajapajag#5agapagapagap#1ap#1agahapah#1ah#1ahahahaha.ahakahaqa.aka.akaqakaqadaqasaqasasasasasasaFas", +"aEataEazatazatauatauataaataaataaanaaalaaalaaaaaaaa#9aa#Caa#Caa#Caa#C#C#C#C#C#C#C#C#C#C#B#C#H#C#F#C#F#C#F#C#F#p#F#p#F#H#F#H#F#H#t#H#t#F#t#H#t#F#K#H#K#t#K#t#K#t#K#t#K#t#K#t#K#K#x#K#x#K#x#K#x#K#x#K#x#x#x#x#x#x#I#x#Q#x#O#x#Q#x#j#x#k#x#j#x#j#x#j#x#j#x#j#x#j.s#j#x#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#k.s#j.s#k.s#j.s.s.s#b.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.r.s.p" +".p.r.p.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.r.q.o.q.q.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.u.t.v.t.v.t.v.t.v.t.v.taB.w.v.waB.vaB.vaB.vaB.var.var.varaBar.vararararamarararamara#arawara#arawarawafawafawafawawawa#acawacawacawacawacacacacaCacaAacaCacaeacaeaAaeaAaeaoaeaoaeaeaeaoajaeajaeajaeajaeajajajajajajajajagajagajagajag#5agapagapagag#1apahagahagahahahahahaha.ahakahakahaka.akaqakaqadaqasakasakasasasasasasaxasaDasaD", +"azatazatauatauataaataaanaaauaaauaaaaaaaa#9aa#9aa#Caa#Caa#Caa#C#9#6#C#C#C#6#C#6#C#F#C#F#C#F#C#F#C#F#p#F#p#F#H#F#H#F#F#F#H#t#F#t#F#K#F#K#F#K#t#K#t#K#t#K#t#K#t#K#K#x#K#x#K#I#K#x#K#I#K#x#K#I#x#I#x#O#x#O#x#O#x#O#x#j#x#O#x#j#x#j#x#j#x#j#x#j#x#j#x#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s.s.s#b.s.s.s#b.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s" +".p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.t.v.waB.w.v.waB.waB.var.war.var.var.var.varararararararararara#ara#arawarawarawafawafawafawaGacafacawacawacawacacacacaAacaAacaAacaoacaeacaeaAaeaoaeaoaeaoaeaoaHaoajaeajaoajaHajajajajajajajajapajapajagajagapagapagapagap#1apahapahagah#1ahahahaha.ahaqahaqahaka.akaqakaqadaqasaqasadasadasasasasaFas", +"aEataEatatazatazatauatauataaataaanaaanaaalaaalaaaaaaaa#9aa#Caa#Caa#Caa#C#C#C#C#C#C#C#C#C#C#B#C#H#C#F#C#F#C#F#C#F#p#F#p#F#H#F#H#F#H#t#H#t#F#t#H#t#F#K#H#K#t#K#t#K#t#K#t#K#t#K#t#K#K#x#K#x#K#x#K#x#K#x#K#x#x#x#x#x#x#I#x#x#x#O#x#Q#x#j#x#Q#x#j#x#j#x#j#x#j#x#j#x#j#x#j#x#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#k.s#j.s#k.s#j.s#k.s#b.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.r.s.p.p.r" +".p.p.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.r.q.o.q.q.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.t.u.t.t.t.u.t.u.t.u.t.u.t.v.t.v.t.v.t.v.taB.w.v.waB.vaB.waB.vaB.var.var.varaBar.vararararamarararamaramarawarawarawarawarawafawafawawawawawawacawacawacawaAacacacaAacaAacaCacaeacaeaAaeaAaeaAaeaoaeaoaeaoaHaeajaeajaeajaeajajajajajajajajagajagajagajag#5agapagapagag#1apahagahagah#1ah#1ahahahahakahaqahakahaka.akaqakaqadakasaqasadasasasasasasaDasaFasaD", +"azaEazatauatauatauataaataaanaaauaaauaaaaaaaa#9aa#9aa#Caa#Caa#C#9#C#9#6#C#C#C#6#C#6#C#F#C#F#C#F#C#F#C#F#p#F#p#F#H#F#H#F#F#F#H#t#F#t#F#K#F#K#F#K#t#K#t#K#t#K#t#K#t#K#K#x#K#x#K#I#K#x#K#I#K#x#K#I#x#I#x#I#x#O#x#O#x#O#x#O#x#O#x#j#x#j#x#j#x#j#x#j#x#j#x#j.s#j#x#j.s#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#j#j#k#j#j#j#k#j#j#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s#b.s.s.s#b.s.s.s#b.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s" +".p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.u.t.t.t.v.t.v.t.v.t.v.t.v.t.v.waB.w.v.waB.waB.vaB.war.var.varaBar.varararararararararara#ara#arawarawarawafawafawafawaGawaGacawacawacawacawacacaAacaAacaAacaoacaeacaoaAaeaAaeaoaeaoaeaoaHaoajaeajaoajaHajajajajajajajajaIajapajagajagaIagapagapagap#1apahapahagah#1ahahahahahahaqahaqahaka.akaqakaqakaqasaqasakasavasasasasaxasaFas", +"aJataEataEatatazatauatauatauataaataaanaaanaaalaaalaaaa#9aa#9aa#Caa#Caa#Caa#C#C#C#C#C#C#C#C#C#C#B#C#H#C#F#C#F#C#F#C#F#p#F#p#F#H#F#H#F#H#t#H#t#H#t#H#t#F#K#H#K#t#K#t#K#t#K#t#K#t#K#t#K#t#x#K#x#K#x#K#x#K#x#K#x#x#x#x#x#x#x#x#x#x#I#x#x#x#j#x#Q#x#j#x#k#x#j#x#k#x#j#x#j#x#j#x#j.s#j#x#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#k.s#j.s#k.s#j.s#k.s#b.s.s.s#b.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.r.p.p.p.r.p.r" +".p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.r.q.o.q.q.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.t.u.t.u.t.v.t.v.taB.t.v.taB.taB.waB.vaB.waB.vaB.var.var.varaBaraBaraBararamarararamaramarawarawarawarawarawafawafawawawaGawawacawacawacawaAawacacaAacaAacaCacaeacaeaAaeaAaeaAaeaoaeaoaeaoaHaeajaeajaeajaeajaHajajajajajajaKajapajagajagajagapagapagapagapahagahagahagah#1ahahahahahaha.ahakahaka.akaqakaqakaqadaqasakasadasasasasaFasaFasaDaFaD", +"azaEazaEazatauatauatauataaataaanaaaaaaaaaaaaaaaa#9aa#9aa#Caa#Caa#C#C#C#C#6#C#C#C#6#C#6#C#F#C#F#C#F#C#F#C#F#p#F#H#F#H#F#H#F#F#F#H#t#F#t#F#t#F#K#F#K#t#K#t#K#t#K#t#K#t#K#t#x#K#x#K#x#K#x#K#I#K#x#K#I#x#x#x#I#x#I#x#O#x#O#x#O#x#O#x#j#x#j#x#j#x#j#x#j#x#j#x#j.s#j#x#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s#b.s#b.s.s.s#b.s.s.s#b.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s" +".p.p.p.p.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.u.t.v.t.v.t.v.t.v.t.v.waB.waB.waB.waB.vaB.war.var.varaBar.varararararararararara#arafarawarawarawafawafawafawaGawaGacawacaGacawacawacacaAacaAacaAacaAacaeacaoaAaeaAaeaoaeaoaeaoaHaoaHaoajaoajaHajaeajajajajajajaIajapajagajapajag#5agapagapagapahapahagahapahahahahahaha.ahaqahakahaqaqakaqakaqadaqasaqasaqasasasasasasaFasaFas", +"aJataEataEazaEatatazatauatauatauataaataaanaaanaaaaaaalaaaa#9aa#9aa#Caa#Caa#Caa#C#C#C#C#C#C#C#C#C#C#B#C#H#C#F#C#F#C#F#C#F#p#F#p#F#H#F#H#F#H#t#H#t#H#t#H#t#F#K#H#K#t#K#t#K#t#K#t#K#t#K#t#K#t#x#t#x#K#x#K#x#K#x#K#x#x#x#K#x#x#x#x#x#x#x#x#x#x#I#x#x#x#j#x#k#x#j#x#k#x#j#x#k#x#j#x#j.s#j#x#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#k.s#j.s#k.s#j.s#k.s#j.s#k.s#b.s.s.s#b.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.r.s.p.s.r.p.p.p.r.p.r.p.r" +".p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.r.q.o.q.q.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.t.u.t.u.t.v.t.v.taB.t.v.taB.taB.waB.vaB.waB.vaB.vaBaBar.varaBaraBaraBararararararamaramarawarawarawarawarawafawafawawawaGawawacawacawacawaAawacacaAacaAacaCacaAacaeaAaeaAaeaAaeaAaeaoaeaoaHaeaHaoajaeajaeajaHajajajajajajaKajaIajagajagajagaIagapagapagapaLagahagahagah#1ahahahahahaha.ahakahakahakaqakaqakaqadaqasakasakasasasasasasaFasaDasaDaFaD", +"ataEazatazatazatauatauatauataaauaaanaaaaaaaaaaaaaaaa#Caa#Caa#Caa#Caa#C#C#C#C#6#C#C#C#6#C#6#C#F#C#F#C#F#C#F#C#F#p#F#p#F#H#F#H#F#F#F#H#t#F#t#F#t#F#K#F#K#t#K#t#K#t#K#t#K#t#K#t#x#K#x#K#x#K#x#K#I#K#x#K#I#x#x#x#I#x#I#x#I#x#O#x#O#x#O#x#j#x#j#x#j#x#j#x#j#x#j#x#j#x#j#x#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j#k#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s#b.s.s.s#b.s.s.s#b.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p" +".p.p.p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.u.t.v.t.v.t.v.taB.t.v.taB.waB.waB.waB.vaB.war.var.varaBaraBaraBararararararararaMarafarawarawarawarawafawafawaGawaGawawacaGacawacawacawaAacaAacaAacaAacaeacaoaAaeaAaeaAaeaoaeaoaHaoaHaoajaoajaeajaeajajajajajajaIajaIajapajapajagajagapagapagapaLapahagahapahahahahahahahaha.ahaqahaqaNakaqakaqakaqadaqasaqasasasasasasaOasaFasaFas", +"aJaEaJataEataEazaEatatazatauataaataaataaataaanaaanaaaaaaalaaaa#Caa#Caa#Caa#Caa#Caa#C#C#C#C#C#C#C#C#C#C#B#C#H#C#F#C#F#C#F#C#F#p#F#p#F#H#F#H#F#H#t#H#t#H#t#H#t#F#t#H#K#t#K#u#K#t#K#t#K#t#K#t#K#t#x#t#x#K#x#K#x#K#x#K#x#x#x#K#x#x#x#x#x#x#x#x#x#x#x#x#x#x#b#x#x#x#j#x#k#x#j#x#k#x#j#x#k#x#j#x#k.s#j#x#k.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#k.s#j.s#k.s#j.s#k.s#j.s#k.s#j.s#k.s#b.s.s.s#b.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.p.p.r.p.r.p.r.p.r" +".p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.r.q.o.q.q.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.t.u.t.u.taB.t.v.taB.taB.taB.taB.waB.vaB.waB.vaB.vaBaBar.varaBaraBaraBararararararaMaramaraMarawarawarawarawarawafawawawaGawawawawacawacawaAawaAawaAacaAacaCacaAacaeaAaeaAaeaAaeaAaeaoaeaoaHaeaHaoajaeajaeajaHajaHajajajajaIajaIajagajagajagaIagapagapagapaLagahapahagahagahahahahahahahahakahakahakaqakaqakaqakaqasakasakasasasasasasasasaDasaFasaDaFaD", +"azaEataEazatazatauatauataaataaataaauaaanaaaaaaaaaaaa#9aa#Caa#Caa#Caa#Caa#C#C#C#C#6#C#C#C#6#C#6#C#F#C#F#C#F#C#F#C#F#p#F#p#F#H#F#H#F#F#F#H#t#F#t#F#t#F#K#F#K#t#K#t#K#t#K#t#K#t#K#t#x#t#K#K#x#K#x#K#x#K#x#K#I#x#x#K#I#x#x#x#I#x#I#x#I#x#O#x#j#x#O#x#j#x#j#x#j#x#j#x#j#x#j#x#j.s#j#x#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p" +".p.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.u.t.v.t.v.t.v.taB.taB.taB.waB.waB.waB.vaB.waraBar.varaBaraBaraBararararararararaMarafarawarawarawarawafawafawaGawaGawawacaGacawacawacawaAacaAacaAacaAacaAacaoaAaeaAaeaAaeaoaeaoaHaoaHaoaHaoajaeajaoajaHajajajajaIajaIajapajapajagajagapagapagapaLapahapahapahaLahahahahahahahahaqahaqahaka.akaqakaqakaqasaqasakasaPasasasasaFasaFasaFaF", +"aJaEaJataEataEataEazaEatatauatauataaataaataaanaaalaaalaaaaaaalaaaa#Caa#Caa#Caa#Caa#Caa#C#C#C#C#C#C#C#C#C#C#B#C#H#C#F#C#F#C#F#C#F#p#F#p#F#H#F#H#F#H#t#H#t#H#t#H#t#F#t#H#K#t#K#u#K#t#K#t#K#t#K#t#K#t#x#t#x#t#x#K#x#K#x#K#x#K#x#K#x#x#x#x#x#x#x#x#x#x#x#x#x#x.s#x#x#x#b#x.s#x#b#x#k#x#j#x#k#x#j#x#k.s#j#x#k.s#j.s#k.s#j.s#k.s#j.s#k.s#j.s#k.s#j.s#k.s#j.s#k.s#j.s#k.s#j.s#k.s#j.s#k.s#j.s.s.s#b.s.s.s#b.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.p.p.r.p.r.p.r.p.r.p.r" +".p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.r.q.o.q.q.q.o.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.t.u.t.u.taB.taB.taB.taB.taB.taB.waB.vaB.waB.vaB.vaBaBaraBaraBaraBaraBaraBararararaMarararaMarawarawarawarawarawafawaGawaGawawawawacawacawaAawaAawaAacaAacaAacaAacaCaAaeaAaeaAaeaAaeaoaeaoaHaoaHaoaHaeajaeajaHajaHajajajajaIajaIajaKajagajagaIagaIagapagapagapaLapahagahagahaLahahahahahahakahaqahakaNakaqakaqakaqasakasaqasaQasasasasasasaFasaFasaDaFaDaFaR", +"aEaEazaEazaEazatazatauatauataaataaataaauaaanaaaaaaaaaaaa#9aa#Caa#Caa#Caa#Caa#C#C#C#C#6#C#C#C#6#C#6#C#F#C#F#C#F#C#F#C#F#p#F#p#F#H#F#H#F#F#F#H#t#F#t#F#t#F#K#F#K#t#K#t#K#t#K#t#K#t#K#t#x#t#K#t#x#K#x#K#x#K#x#K#I#x#x#K#I#x#x#x#I#x#x#x#I#x#I#x#j#x#O#x#j#x#j#x#j#x#j#x#j#x#j#x#j.s#j#x#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s#b.s#b.s#b.s.s.s#b.s.s.s#b.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p" +".p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.u.t.t.t.u.t.v.taB.t.v.taB.taB.taB.waB.waB.waB.vaB.waBaBar.varaBaraBaraBararararararararaMaraSarawarawarawarawarawafawaGawaGawaGawaGacawacawacawaAacaAacaAacaAacaAacaoaAaeaAaeaAaeaAaeaoaHaoaHaoaHaoajaeajaoajaHajajajajajajajajaIajapajagajapaIagapagapagapaLapahapahagahaLahahahahahahaqahaqahakahaqaqakaqakaqasaqasaqasaqasasasasasasaFasaFaOaDaF", +"aJaEaJataJataEataEatatazatatatauatauataaataaataaanaaalaaalaaaaaaalaaaa#Caa#Caa#Caa#Caa#C#9#C#C#C#C#C#C#C#C#C#C#B#C#H#C#F#C#F#C#F#C#F#p#F#p#F#H#F#H#F#H#t#H#t#H#t#H#t#F#t#H#t#t#K#u#K#t#K#t#K#t#K#t#K#t#x#t#x#t#x#t#x#K#x#K#x#K#x#K#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x.s#x.s#x.s#x.s#x#b#x.s#x#b#x#k#x#j#x#k.s#j#x#k.s#j.s#k.s#j.s#k.s#j.s#k.s#j.s#k.s#j.s#k.s#b.s.s.s#b.s.s.s#b.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.r.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.r.p.r.p.r.p.r" +".p.q.p.q.p.q.p.q.p.q.p.q.p.q.r.q.o.q.q.q.q.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.q.u.t.t.t.u.t.u.taT.t.u.taB.taB.taB.taB.taB.taB.waB.vaB.waBaBaB.vaBaBaraBaraBaraBaraBaraBararararaMaraSaraMarawarawarawarawaSawarawaGawaGawawawawawawacawaAawaAawaAawaAacaAacaAacaCaAaeaAaeaAaeaAaeaAaeaoaHaoaHaoaHaeajaeajaHajaHajaHajajaIajajajaKajapajagaIagaIagapagapagapagapahagahagahaLahahahahahahaNahaqahakahakaNakaqakaqaQaqasaqasakasasasasasasaOasaFasaDaOaDaFaDaFaR", +"ataJataEazaEazaEazatazatauatauataaataaataaauaaanaaaaaaaaaaaa#9aa#Caa#Caa#Caa#Caa#C#C#C#C#6#C#C#C#6#C#6#C#F#C#F#C#F#C#F#C#F#p#F#p#F#H#F#H#F#F#F#H#t#F#t#F#t#F#t#F#K#t#K#t#K#t#K#t#K#t#K#t#x#t#K#t#x#K#x#K#x#K#x#K#x#K#x#K#I#x#x#x#I#x#x#x#I#x#x#x#I#x#I#x#j#x#j#x#j#x#j#x#j#x#j#x#j#x#j#x#j.s#j#x#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s#b.s#b.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p" +".r.p.p.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.t.taT.t.w.taB.taB.taB.taB.taB.waB.waB.waB.waB.waBaBaraBaraBaraBaraBaraBararararararaSaraSarawarawarawarawaSawafawaGawaGawaGawaGacawaAawacawaAawaAacaAacaAacaAacaAaAaeaAaoaAaeaAaeaoaHaoaHaoaHaoaHaoajaoajaHajaHajajajajajajaIajapajagajapaIagapagapagapagapahapahagahapahahahahahahaNahaqahaqahaqaqakaqakaqaQaqasaqasaqasasasasasasaFasaFaOaFaOaFaF", +"aJaEaJaEaJataJataEataEatatazatatatauatauataaataaataaanaaalaaalaaaaaaal#9aa#Caa#Caa#Caa#Caa#C#9#C#C#C#C#C#C#C#C#C#C#B#C#H#C#F#C#F#p#F#C#F#p#F#p#F#p#F#H#F#H#t#H#t#H#t#H#t#H#t#H#t#t#K#u#K#t#K#u#K#t#K#t#K#t#x#t#x#t#x#t#x#t#x#t#x#K#x#K#x#x#x#K#x#x#x#x#x#x#x#x#x#x#x#x#x#x.s#x#x#x.s#x.s#x.s#x.s#x.s#x.s#x.s#x.s.s#b#x.s.s#b#x.s.s#b.s.s.s#b.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.r.s.p.p.r.p.p.p.r.p.r.p.r.p.r.p.r.p.r.p.r.p.q.p.q" +".p.q.p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.q.u.t.t.taT.t.t.taT.taT.taB.taB.taB.taB.taB.taB.taB.vaB.waBaBaBaBaBaBaraBaraBaraBaraBaraBaSarararaMaraSaraMaraMarawarawarawaSawaSawaGawaGawawawaGawawacawaAawaAawaAawaAacaAacaAacaCaAaAaAaeaAaeaAaeaAaeaoaHaoaHaoaHaeaHaoajaHajaHajaHajajaIajajajaIajaIajagaIagaIagaIagapagapagapaLagahapahaLahaLahahahahaNahaqahakahakahakaqakaqakaqaQaqasakasakasasasasaOasaFasaDaOaFaOaDaFaDaFaR", +"aEaJataEataEazaEazaEazatauatauatauataaataaanaaauaaanaaaaaaaaaaaa#9aa#Caa#Caa#Caa#Caa#C#C#C#C#6#C#C#C#B#C#6#C#F#C#F#C#F#C#F#C#F#p#F#p#F#H#F#H#F#F#F#H#t#F#t#H#t#F#t#F#K#t#K#t#K#t#K#t#K#t#K#t#K#t#K#t#x#t#x#K#x#K#x#K#x#K#x#K#I#x#x#x#I#x#x#x#I#x#x#x#I#x#x#x#b#x#I#x#b#x#j#x#j#x#j#x#j#x#j#x#j.s#j#x#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.p.p.r.p.p.p.r.p" +".p.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.t.t.t.taT.t.w.taB.taB.taB.taB.taB.waB.waB.waBaUaB.waBaBaraUaraBaraBaraBaraBararaSarararaSaraSarawaraGarawarawaSawafawaGawaGawaGawaGacawaAaGacawaAawaAacaAacaAaAaAacaAaAaeaAaoaAaeaAaeaAaHaoaHaoaHaoaHaoajaoajaHajaHajajajajajajaIajaIajapajapaIagaIagapagapagapaLapahapahapahaLahahahahaNahaqahaqahaqaNakaqakaqaQaqasaqasaqasaQasasasasaOasaFasaFaOaFaFaDaF", +"aJaEaJaEaJaEaJataEataEataEatatazatanatauatauataaataaataaanaaalaaalaaaaaaal#9aa#Caa#Caa#Caa#Caa#C#9#C#C#C#C#C#C#C#C#C#C#B#C#H#C#F#C#F#p#F#C#F#p#F#p#F#p#F#H#F#H#t#H#t#H#t#H#t#H#t#H#t#t#t#H#K#t#K#u#K#t#K#t#K#t#x#t#K#t#x#t#x#t#x#t#x#t#x#K#x#x#x#K#x#x#x#x#x#x#x#x#x#x#x#x#x#x.s#x#x#x.s#x.s#x.s#x.s#x.s#x.s#x.s#x.s#x.s#x.s.s.s#x.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.r.s.p.s.r.s.p.p.r.p.p.p.r.p.r.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q" +".p.q.p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.qaT.t.t.taT.t.6.taT.taT.taB.taB.taB.taB.taB.taB.taBaBaB.waBaBaBaBaBaBaBaBaraBaraBaraBaraBaSarararaMaraSaraMaraMarawarawarawaSawaSawaGawaGawawawaGawawacawaAawaAawaAawaAacaAaAaAacaCaAaAaAaeaAaeaAaeaAaeaAaHaoaHaoaHaeaHaoajaHajaHajaHajaHaIajajajaIajaIajagaIagaIagaIagapagapagapaLagahapahaLahaLahahahahaNahaNahakahaqahakaNakaqakaqakaqasakasaqasaQasasasasaOasaFasaFaOaDaFaDaFaRaFaV", +"aEaJaEaJazaEataEazaEazaEazatauatauatauataaataaanaaauaaanaaaaaaaaaaaa#9aa#Caa#Caa#Caa#Caa#C#C#C#C#6#C#C#C#B#C#6#C#F#C#F#C#F#C#F#C#F#p#F#p#F#H#F#H#F#F#F#H#t#F#t#H#t#F#t#F#t#t#K#F#K#t#K#t#K#t#K#t#K#t#K#t#x#t#x#t#x#K#x#K#x#K#x#K#x#x#x#x#I#x#x#x#I#x#x#x#I#x#x#x#b#x#x#x#b#x.s#x#b#x#b#x#b#x#j#x#j#x#j#x#j.s#j#x#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#j.s#b.s#b.s#b.s#b.s#b.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.p.p.p.p.r.p.p.p.r.p.r.p" +".r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.q.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.q.t.t.t.t.t.t.6.t.t.taT.taU.taB.taB.taB.taB.taB.taB.waB.waBaUaBaUaBaBaraUaraBaraBaraBaraBararaSaraSaraSaraSarawaraGarawarawaSawaSawaGawaGawaGawaGawawaAaGaAawaAawaAawaAacaAaAaAacaAaAaoaAaoaAaeaAaeaAaHaoaHaoaHaoaHaoaHaoajaHajaWajaHajajajajaIajaIajapajapaIagaIagapagapagapaLapahapahapahaLahahahahaNahaNahaqahaqaNakaqakaqakaqaQaqasaqasaXasaPasasaOasaOasaFasaFaOaDaFaDaF", +"aJaEaJaEaJaEaJaEaJataEataEataEatatazatauatauatauataaataaanaaanaaalaaalaaaaaaal#9aa#Caa#Caa#Caa#C#l#C#9#C#C#C#C#C#C#C#C#C#C#B#C#H#C#F#C#F#p#F#C#F#p#F#p#F#p#F#H#F#H#t#H#t#H#t#H#t#H#t#H#t#u#t#H#t#t#K#u#K#t#K#u#K#t#x#t#K#t#x#t#x#t#x#t#x#t#x#t#x#t#x#K#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x.s#x#x#x.s#x.s#x.s#x.s#x.s#x.s#x.s#x.s#x.s#x.s.s.s#x.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.r.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q" +".p.q.p.q.p.q.p.q.q.q.o.q.q.q.q.q.q.q.q.q.q.q.q.t.q.t.q.t.q.t.q.6.q.t.qaT.t.6.taT.t.6.taT.taT.taT.taB.taB.taB.taB.6aB.taBaBaBaUaBaBaBaBaBaBaBaBaraBaraBaraBaraBaSaBaSaraMaraSaraMaraMarawaSawarawaSawaSawaGawaGawawawaGaYawawawaAawaAawaAawaAawaAaAaAacaCaAaAaAaeaAaeaAaHaAaeaAaHaoaHaoaHaoaHaoaHaHajaHajaHajaHaIajajajaIajaIajaKaIagajagaIagaIagapagapaLapaLapahaLahaLahaLahahahahaNahaNahaqahakaNakaqakaqakaqaQaqasaqasaQasasasasasasaOasaFasaDaOaDaFaRaFaRaFaV", +"aEaJaEaJaEaJazaEataEazatazatazatauatauatauataaataaanaaaaaaalaaaaaaaa#9aa#9aa#Caa#Caa#Caa#Caa#C#C#C#C#6#C#C#C#B#C#6#C#F#C#F#C#F#C#F#C#F#p#F#p#F#p#F#H#F#H#F#H#t#F#t#H#t#F#t#F#t#t#K#F#K#t#K#t#K#t#K#t#K#t#K#t#x#t#x#t#x#t#x#t#x#K#x#K#x#x#x#K#x#x#x#x#I#x#x#x#I#x#x#x#I#x#x#x#b#x.s#x#b#x.s#x#b#x.s#x#b#x.s#x#b#x#b#x#b.s#b#x#b.s#b.s#b.s#b.s#b.s#b.s#b.s#b.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.p.p.r.p.r.p.q.p" +".q.p.q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.o.q.q.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.q.t.q.t.t.6.t.t.t.6.t.6.taT.t.6.taB.taB.taB.taB.taB.taBaUaB.waBaUaBaUaBaBaBaUaraBaraBaraBaraBararaSaraSaraSaraSaraMaraGarawarawaSawaSawaGawaGawaGawaGawawaAaGaAawaAawaAawaAacaAaAaAaAaAaAaAaAaoaAaeaAaeaAaHaoaHaoaHaoaHaoaHaoajaHajaWajaHajajajajaIajaIajaIajapaIagaIapaIagapagapaLapaLapahapahaLahaZahahaNahaNahaqahaqaNakaNaqaqakaqakaqaQaqasaXasaXasasaOasaOasaFasaFaOaDaFaFaFaRaF", +"a0aJaJaEaJaEaJaEaJaEaJataEataEataEatatazatauatauatauataaataaanaaanaaalaaalaaaaaaal#9aa#Caa#Caa#Caa#C#l#Caa#C#C#C#C#C#C#C#C#C#C#B#C#p#C#F#C#H#C#F#C#F#p#F#p#F#p#F#p#F#H#t#H#t#H#t#H#t#H#t#H#t#u#t#H#t#t#t#u#K#t#K#u#K#t#K#u#K#t#x#t#x#t#x#t#x#t#x#t#x#t#x#t#x#e#x#t#x#x#x#x#x#x#x#x#x#x#x#x#x#x.s#x#x#x.s#x.s#x.s#x.s#x.s#x.s#x.s#x.s#x.s#x.s#x.s#x.s.s.s#x.s.s.s#x.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.r.s.p.s.r.s.p.p.r.p.p.p.r.p.r.p.r.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q" +".p.q.r.q.o.q.q.q.o.q.q.q.q.q.q.q.q.q.q.t.q.6.q.t.q.6.q.t.q.6.q.6.qaT.t.6.taT.taT.taT.taT.taT.taB.taB.taB.taB.6aB.6aBaBaBaUaBaBaBaBaBaBaBaBaraBaraBaSaBaraBaSaBaSaraMaraSaraMaraMarawaSawarawaSawaSawaSawaGawawawaGaYawaYawaAawaAawaAawaAawaAaAaAaAaAaAaAaAaCaAaeaAaHaAaeaAaHaAaHaoaHaoaHaoaHaHajaHajaHajaHaIaHajajaIajaIajaKajapajagaIagaIagapagapaLapaLapahagahagahaLahahahahahahaNahaqahakaNakaNakaqakaqaQaqasaqasaQasaQasasasasaOasaFasaDaOaDaFaRaFaRaFaVa1aV", +"aEaJaEaJaEaJaEaJazaEataEazatazatauatauataaataaataaataaanaaaaaaalaaaaaaaa#9aa#9aa#Caa#Caa#Caa#Caa#C#C#C#C#6#C#C#C#B#C#B#C#F#C#F#C#F#C#F#C#F#p#F#p#F#p#F#H#F#H#F#H#t#F#t#H#t#F#t#H#t#t#t#F#K#t#K#t#K#t#K#t#K#t#K#t#x#t#x#t#x#t#x#t#x#t#x#K#x#K#x#K#x#x#x#x#x#x#x#x#x#x#x#x#I#x#x#x#b#x#x#x#b#x.s#x#b#x.s#x#b#x.s#x#b#x.s#x#b.s.s#x#b.s.s#x#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.p.p.r.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p" +".q.p.q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.o.q.q.q.o.q.q.q.q.t.q.t.q.t.q.t.q.t.q.6.q.t.t.6.t.6.t.6.t.6.taT.t.6.taB.taB.taB.taB.taB.taBaUaBaUaBaUaBaUaBaBaBaUaraBaraBaraBaSaBararaSaraSaraSaraSaraMaraGaSawarawaSawaSawaGawaGawaGawaGawawaAaGaAawaAawaAawaAacaAaAaAaAaAaAaAaAaoaAaeaAaoaAaHaAaHaoaHaoaHaoaHaoajaWajaWajaHajaHajajaIajaIajaIajapaIagaIapaIagapagapaLapaLapahapahaLahaZahahahahaNahaNahaqaNaqaNaqaNakaqakaqaQaqasaqasaXasasasasaOasaOasaFaOaFaOaFaFaRaFaRaF", +"a2aJa0aEaJaEaJaEaJataJataJataEataEataEatatazatauataaataaataaataaanaaanaaalaaalaaaaaaal#9aa#Caa#Caa#Caa#C#l#C#l#C#C#C#C#C#C#C#C#C#C#B#C#p#C#F#C#H#C#F#C#F#p#F#p#F#p#F#p#F#H#t#H#t#H#t#H#t#H#t#H#t#H#t#H#t#u#t#u#t#t#K#u#K#t#K#u#K#t#x#t#x#t#x#t#x#t#x#t#x#t#x#t#x#e#x#t#x#e#x#e#x#e#x#e#x#x#x#x#x#x#x#x#x#x.s#x#x#x.s#x.s#x.s#x.s#x.s#x.s#x.s#x.s#x.s#x.s#x.s#x.s.s.s#x.s.s.s#e.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.r.s.p.s.r.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.p.q" +".r.q.o.q.q.q.o.q.q.q.q.q.q.q.q.m.q.t.q.6.q.t.q.6.q.6.q.6.q.6.qaT.t.6.taT.taT.taT.taT.taT.taB.taB.6aB.taB.6aB.6aBaUaBaUaBaBaBaUaBaBaBaBaraBaraBaSaBaSaBaSaBaSaraSaraSaraMaraMaraMaSawaSawaSawaSawaSawaGawaGawaGaYawaYawaAawaAawaAawaAawaAaAaAaAaAaAaAaAaCaAaeaAaHaAaHaAaHaAaHaoaHaoaHaoaHaHaHaWajaHajaHaIaHajajaIajaIajaKajapajagaIagaIagaIagapaLapaLapaLagahapahaLahaLahahahahaNahaNahakaNakaNakaqakaqaQaqaQaqasaQasaQasasasasaOasaOasaDaOaFaOaDaFaRaFaRaFaVa1aV", +"aEaJaEaJaEaJataJataEazaEataEazatazatauatauataaataaataaanaaanaaaaaaalaaaaaaaa#9aa#9aa#Caa#Caa#Caa#Caa#C#C#C#C#6#C#C#C#B#C#B#C#F#C#F#C#F#C#F#C#F#p#F#p#F#p#F#H#F#H#F#H#t#F#t#H#t#F#t#H#t#F#t#F#t#t#K#t#K#t#K#t#K#t#K#t#x#t#K#t#x#t#x#t#x#t#x#t#x#t#x#K#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#b#x.s#x#b#x.s#x#b#x.s#x#b#x.s#x#b#x.s#x#b.s.s#x#b.s.s#x#b.s.s.s#b.s.s.s#b.s.s.s#b.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.p.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p" +".q.p.q.p.q.p.q.p.q.o.q.o.q.o.q.o.q.q.q.o.q.q.q.q.t.q.t.q.t.q.6.q.t.q.6.q.6.t.6.t.6.t.6.t.6.taT.t.6.taB.taB.taB.taB.6aB.taBaUaBaUaBaUaBaUaBaBaBaUaraBaraBaraBaSaBaSaBaSaraSaraSaraSaraMaraGaSawarawaSawaSawaSawaGawaGaYaGawaGaYaGaAawaAawaAawaAawaAaAaAaAaAaAaAaAaAaAaeaAaoaAaHaAaHaoaHaoaHaWaHaoaHaWajaWajaHajaHajajaIajaIajaIajaIaIapaIapaIagaIagapaLapaLapaLapahaZahaZahaLahahahahaNahaqahaqahaqaNakaqakaqaQaqaQaqasaqasaQasaPasasaOasaFaOaFaOaFaFaRaFaRaFaVaF", +"a0aJa2aJa0aEaJaEaJaEaJataJataEataEatatatatatatauatauataaataaataaataaanaaanaaalaaalaaaaaaal#9aa#Caa#Caa#Caa#C#l#C#l#C#C#C#C#C#C#C#C#C#C#p#C#p#C#F#C#H#C#F#C#F#p#F#p#F#p#F#p#F#p#t#H#F#H#t#H#t#H#t#H#t#H#t#H#t#u#t#u#t#t#t#u#K#t#K#u#K#t#x#u#K#t#x#u#x#t#x#t#x#t#x#t#x#t#x#t#x#e#x#e#x#e#x#e#x#e#x#e#x#e#x#e#x#e#x#e#x#e.s#e#x#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s.p.s#e.s.p.s#e.s.p.s#e.s.p.s.p.s.p.s.r.s.p.s.r.s.p.s.r.p.p.p.r.p.r.p.r.p.r.p.r.p.r.p.r.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.p.q.p.q.r.q" +".o.m.q.q.o.m.q.q.q.m.q.q.q.m.q.6.q.6.q.6.q.6.q.6.q.6.q.6.qaT.t.6.taT.taT.taT.taT.taB.6aB.taB.6aB.6aB.6aB.6aBaUaBaUaBaBaBaUaBaBaBaBaSaBaraBaSaBaSaBaSaBaSaraSaraSaraMaSaSaraMaSawaSawaSawaSawaSawaGawaGawaGaYawaYawaYawaAawaAawaAawaAaYaAaAaAaAaAaAaCaAaAaAaHaAaHaAaHaAaHaoaHaoaHaoaHaHaHaWajaHajaHaIaHajaHaIajaIajaIajaIajagaIagaIagaIagapaLapaLapaLagahapahaLahaLahahahahaNahaNahakaNaqaNakaNakaqaQaqaQaqasakasaXasaQasasaOasaOasaFaOaFaOaDaFaDaFaRaFaRaFaVaRaV", +"aJaJaEaJaEaJaEaJataJataEazaEataEazatazatauatauataaataaataaanaaanaaaaaaalaaaaaaaa#Caa#Caa#Caa#Caa#Caa#C#9#C#C#C#C#6#C#C#C#B#C#B#C#F#C#F#C#F#C#F#C#F#p#F#p#F#p#F#p#F#H#F#H#t#H#t#H#t#F#t#H#t#F#t#H#t#t#t#t#K#t#K#t#K#t#K#t#x#t#K#t#x#t#x#t#x#t#x#t#x#t#x#t#x#e#x#t#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x.s#x#x#x.s#x.s#x.s#x.s#x.s#x.s#x.s#x.s#x.s#x.s#x.s.s.s#x.s.s.s#x.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.p.p.r.p.p.p.r.p.p.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p" +".q.p.q.p.q.p.q.o.q.o.q.o.q.o.q.q.q.o.q.q.m.q.t.q.6.q.t.q.6.q.6.q.6.q.6.t.6.t.6.t.6.t.6.taT.t.6.taB.taB.6aB.taB.6aB.6aBaUaBaUaBaUaBaUaBaBaBaUaraBaSaBaraBaSaBaSaBaSaraSaraSaraSaraMaraGaSawaSawaSawaSawaSawaGawaGaYaGawaGaYaGaAawaAawaAawaAawaAaAaAaAaAaAaAaAaAaAaHaAaoaAaHaAaHaAaHaoaHaWaHaoaHaWajaWajaHajaHajaHaIajaIajaIajaIaIapaIapaIagaIagapaLapaLapaLapahaZahaZahaLahahahahaNahaNahaqahaqaNakaNakaqaQaqaQaqasaqasaXasaXasasaOasaOasaFaOaFaOaDaFa1aFaRaFaVa1", +"a0aJa0aJa2aJa3aEaJaEaJaEaJataJataEataEatatazatatatauatauataaataaataaataaanaaanaaalaaalaaaaaaal#9aa#Caa#Caa#Caa#C#l#C#l#C#C#C#C#C#C#C#C#C#C#p#C#p#C#F#C#H#C#F#C#F#p#F#p#F#p#F#p#F#p#t#H#F#H#t#H#t#H#t#H#t#H#t#H#t#u#t#u#t#u#t#u#t#t#t#u#K#t#K#u#K#t#x#u#x#t#x#u#x#t#x#t#x#t#x#t#x#e#x#t#x#e#x#e#x#e#x#e#x#e#x#e#x#e#x#e#x#e#x#e#x#e.s#e#x#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s.p.s#h.s.p.s#h.s.p.s#h.s.p.p#h.p.p.p#h.p.r.p.r.p.r.p.r.p.r.p.r.p.r.p.r.p.q.p.m.p.q.p.m.p.q.p.m.p.q.p.m.p.q.p.m.q.q.o.m" +".q.q.q.m.q.m.q.m.q.m.q.m.q.6.q.6.q.6.q.6.q.6.q.6.q.6.taT.t.6.taT.taT.taT.6aT.taB.6aB.6aB.6aB.6aB.6aB.6aBaUaBaUaBaBaBaUa4aBaBaBaSaBaSaBaSaBaSaBaSaBaSaraSaraSaraMaSaSaraMaSawaSawaSawaSawaSawaSaYaGawaGaYawaYaGaYawaAawaAawaAawaAaYaAaAaAaAaAaAaCaAaAaAaHaAaHaAaHaAaHaAaHaoaHaoaHaHaHaWajaHajaHaIaHaIaHaIajaIajaIaIaIajagaIagaIagaIagaIaLapaLapaLapaLapahaLahaLahaLahahaNahaNahaNaNaqaNakaNakaqaQaqaQaqaQaqasaqasaQasasaOasaOasaOaOaFaOaDaOaDaFaRaFaRaFaVa1aVa1a5", +"aJa2aJaJaEaJaEaJaEaJataEataEazaEataEazatauatauatauataaataaataaanaaanaaaaaaalaaaaaaaa#Caa#Caa#Caa#Caa#C#l#C#9#C#C#C#C#6#C#C#C#B#C#p#C#B#C#F#C#F#C#F#C#F#p#F#p#F#p#F#p#F#H#F#H#t#H#t#H#t#F#t#H#t#F#t#H#t#t#t#t#t#t#K#t#K#t#K#t#K#t#K#t#x#t#x#t#x#t#x#t#x#t#x#t#x#t#x#t#x#e#x#e#x#e#x#x#x#x#x#x#x#x#x#x#x#x#x#x.s#x#x#x.s#x.s#x.s#x.s#x.s#x.s#x.s#x.s#x.s#x.s#x.s#x.s#x.s.s.s#x.s.s.s#e.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.p.p.r.p.p.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.p" +".q.p.q.o.q.o.q.o.q.q.q.o.q.q.m.o.q.q.6.q.t.q.6.q.6.q.6.q.6.q.6.q.6.t.6.t.6.t.6.t.6.taT.t.6.6aB.taB.6aB.6aB.6aB.6aBaUaBaUaBaUaBaUaBaBaBaUaraBaSaBaSaBaSaBaSaBaSaraSaraSaraSaSaMaraSaSawaSawaSawaSawaSawaGawaGaYaGaYaGaYaGaAawaAaGaAawaAawaAaAaAaAaAaAaAaAaAaAaHaAaoaAaHaAaHaAaHaoaHaWaHaWaHaWaHaWajaHajaWajaHaIajaIajaIajaIaIapaIapaIagaIagaIaLapaLapaLapaLaZahaZahaLahaZahahaNahaNahaqahaqaNakaNaqaqaQaqaQaqaQaqasaXasaXasasaOasaOasaFasaFaOaFaOaFaFaRaFaRa1aVa1", +"a0aJa0aJa0aJaJaJa3aEaJaEaJaEaJataJataEataEatatazatatatauatauataaataaataaataaalaaalaaalaaalaaaa#lal#9aa#Caa#Caa#Caa#C#l#C#l#C#C#C#C#C#C#C#C#C#C#p#C#p#C#B#C#H#C#F#C#H#p#F#p#F#p#F#p#F#p#t#p#F#H#t#H#t#H#t#H#t#H#t#H#t#u#t#H#t#u#t#u#t#u#t#u#t#t#K#u#K#t#x#u#x#t#x#u#x#t#x#u#x#t#x#u#x#t#x#t#x#e#x#t#x#e#x#e#x#e#x#e#x#e#x#e#x#e#x#e#x#e#x#e#x#e.s#e#x#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#h.s#e.s#h.s#e.s#h.s#e.s#h.s#e.p#h.p#e.p#h.p.r.p#h.p.r.p#h.p.r.p#h.p.r.p#h.p.r.p#h.p.q.p.m.p.q.p.m.p.q.p.m.p.m.p.m.r.m.p.m.q.m.o.m.q.m" +".q.m.q.m.q.m.q.m.q.m.q.6.q.6.q.6.q.6.q.6.q.6.q.6.taT.6.6.taT.6aT.taT.6aT.6aB.6aB.6aB.6aB.6aB.6aB.6aBaUaBaUaBaBaBaUa4aBa4aBaSaBaSaBaSaBaSaBaSaBaSaraSaSaSaraMaSaSaSaMaSawaSawaSawaSawaSawaSaYaGaYaGaYawaYaGaYawaAawaAaYaAawaAaYaAaAaAaAaAaAaCaAaAaAaHaAaHaAaHaAaHaAaHaWaHaoaHaWaHaWaHaHajaHaIaHaIaHaIajaIajaIaIaIajaKaIapaIagaIagaIaLapaLapaLapaLapahaLahaLahaLahahaNahaNahaNahaqaNakaNakaNaQaqaQaqaQaqasaqasaQasaQaOasaOasaOasaFaOaDaOaFaOaRaFaRaFaRa1aVa1aVaRa5", +"aJa2aJa2aEaJaEaJaEaJaEaJataEataEazaEataEazatauatauatauataaataaataaanaaanaaaaaaalaaaaaaaa#Caa#Caa#Caa#Caa#C#l#C#9#C#C#C#C#6#C#C#C#B#C#p#C#B#C#F#C#F#C#F#C#F#p#F#p#F#p#F#p#F#p#F#H#t#H#t#H#t#H#t#H#t#F#t#H#t#t#t#u#t#t#t#t#K#t#K#t#K#t#K#t#x#t#x#t#x#t#x#t#x#t#x#t#x#t#x#t#x#e#x#t#x#e#x#e#x#e#x#e#x#e#x#e#x#e#x#e#x#e#x#e.s#x#x#x.s#x.s#x.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s.p.s#e.s.p.s#e.s.p.s#e.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.s.p.p.p.p.p.p.r.p.p.p.r.p.p.p.r.p.p.p.r.p.r.p.r.p.q.p.q.p.q.p.q.p.q.p.q.p.q.p.q.p.q.p" +".m.o.q.o.m.o.q.q.m.o.q.q.m.o.m.q.6.q.6.q.6.q.6.q.6.q.6.q.6.q.6.t.6.t.6.taT.t.6.6aT.t.6.6aB.6aB.6aB.6aB.6aB.6aBaUaBaUaBaUaBaUaBaBa4aUaraBaSaBaSaBaSaBaSaBaSaraSaraSaraSaSaSaSaSaSawaSawaSawaSawaSawaGawaGaYaGaYaGaYaGaYawaAaGaAaYaAawaAaYaAaAaAaAaAaAaAaAa6aAaWaAaHaAaHaAaHaoaHaWaHaWaHaWaHaWajaHajaWajaHaIaHaIajaIajaIaIaIaIapaIagaIapaIaLapaLapaLapaLaZahaZahaLahaZahahaNahaNahaNahaqaNaqaNaqaNaQaqaQaqaQaqasaXasaXasaQaOasaOasaOasaFaOaFaOaFaFaRaFaRa1aVa1aVa1", +"a0aJa0aJa0aJa0aJaJaEaJaEaJaEaJaEaJataEataEataEatatazatatatauatauataaataaataaanaaalaaalaaalaaalaaaa#lal#9aa#Cal#Caa#Caa#C#l#C#l#C#C#C#C#C#C#C#C#C#C#p#C#p#C#B#C#H#C#F#C#H#p#F#p#F#p#F#p#F#p#F#p#F#p#t#H#t#H#t#H#t#H#t#H#t#u#t#H#t#u#t#u#t#u#t#u#t#u#t#u#t#t#x#u#K#t#x#u#x#t#x#u#x#t#x#u#x#t#x#u#x#e#x#u#x#e#x#h#x#e#x#h#x#e#x#h#x#e#x#h#x#e#x#h#x#e#x#h#x#e.s#h#x#e.s#h.s#e.s#h.s#e.s#h.s#e.s#h.s#e.s#h.p#e.p#h.p#h.p#h.p#h.p#h.p#h.p#h.p#h.p#h.p#h.p#h.p#h.p#h.p#h.p.m.p.m.p.m.p.m.p.m.p.m.p.m.p.m.p.m.r.m.o.m.q.m.o.m.q.m.q.m" +".q.m.q.m.q.m.q.6.q.6.q.6.q.6.q.6.q.6.q.6.m.6.taT.6.6.taT.6aT.6aT.6aT.6aB.6aB.6aB.6aB.6aB.6aB.6aBaUaBaUa4aBaBaUa4aBa4aBa4aBaSaBaSaBaSaBaSaBaSaBaSaSaSaraMaSaSaSaMaSawaSawaSawaSawaSawaSaYaGaYaGaYawaYaGaYawaAawaAaYaAaYaAaYaAaYaAaAaAaAaCaAaAaAa7aAaHaAaHaAaHaAaHaWaHaWaHaWaHaWaHaHajaHaIaHaIaHaIaHaIajaIaIaIajaKaIapaIagaIagaIaLapaLapaLapaLapaLaLahaZahaLahaLaNahaNahaNahaNahakaNakaNakaqaQaqaQaqaQaqasaQasaXasasaOasaOasaOasaFaOaFaOaRaFaRaFaRa1aVa1aVaRaVaVa5", +"aJa0aJa2aJa2aEaJaEaJaEaJaEaJataEataEazaEataEazatauatauatauataaataaataaanaaanaaaaaaalaaaaaaaa#Caa#Caa#Caa#Caa#C#l#Caa#C#C#C#C#C#C#C#C#B#C#p#C#B#C#F#C#F#C#F#C#F#p#F#p#F#p#F#p#F#p#F#H#t#H#t#H#t#H#t#H#t#F#t#H#t#t#t#H#t#t#t#u#t#t#K#t#K#t#K#t#x#t#K#t#x#t#x#t#x#t#x#t#x#t#x#t#x#e#x#t#x#e#x#e#x#e#x#e#x#e#x#e#x#e#x#e#x#e#x#e.s#e#x#e.s#e#x#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s.p.s#e.s.p.s#e.s.p.s#e.p.p.p#e.p.p.p#h.p.p.p#h.p.p.p#h.p.r.p#h.p.r.p#h.p.q.p.m.p.q.p.m.p.q.p.m.p.q.p.m.p.q.p.m.o" +".q.o.m.o.m.q.m.o.m.q.m.q.m.q.6.q.6.q.6.q.6.q.6.q.6.q.6.q.6.t.6.t.6.6aT.t.6.6aT.t.6.6aB.6aB.6aB.6aB.6aB.6aBaUaBaUaBaUa4aUaBaBa4aUaSaBaSaBaSaBaSaBaSaBaSaraSaSaSaraSaSaSaSaSaSawaSaGaSawaSawaSaYaSawaGaYaGaYaGaYaGaYawaAaGaAaYaAaYaAaYaAaAaAaAaAaAaAaAa6aAaWaAaHaAaHaAaHaAaHaWaHaWaHaWaHaWajaWaIaWajaHaIaHaIajaIajaIaIaIaIapaIagaIapaIaLaIaLapaLapaLaZaLaZahaZahaZahaLaNahaNahaNahaqaNaqaNaqaNaQaqaQaqaQaqaQaXasaXasaQaOaPaOasaOasaOaOaFaOaFaOaRaFaRaFaRa1aVa1a5a1", +"a8a2a0aJa0aJa0aJa0aJaJaEaJaEaJaEaJaEaJataEataEataEatatazatatatauatauataaataaataaanaaalaaalaaalaaalaaal#lal#9aa#Cal#Caa#Caa#C#l#C#l#C#C#C#C#C#C#C#C#C#C#p#C#p#C#p#C#H#C#F#C#H#p#F#p#H#p#F#p#F#p#F#p#F#p#t#p#t#H#t#H#t#H#t#H#t#H#t#H#t#u#t#u#t#u#t#u#t#u#t#u#t#u#t#u#t#u#e#u#e#t#x#u#x#t#x#u#x#t#x#u#x#t#x#u#x#e#x#u#x#e#x#h#x#e#x#h#x#e#x#h#x#e#x#h#x#e#x#h#x#e#x#h#x#e.s#h#x#e.s#h#e#e.p#h.p#e.p#h.p#h.p#h.p#h.p#h.p#h.p#h.p#h.p#h.p#h.p#h.p#h.p#h.p#h.p.m.p.m.p.m.p.m.p.m.p.m.p.m.p.m.p.m.r.m.p.m.r.m.o.m.q.m.q.m.q.m.q.m.q.m" +".q.m.q.m.q.6.q.6.q.6.m.6.q.6.m.6.q.6.m.6.6aT.6.6.6aT.6aT.6aT.6aT.6aB.6aB.6aB.6aB.6aB.6aB.6a4aBaBaUa4aBa4aUa4aBa4aBa4aBaSaBaSaBaSaBaSa4aSaBaSaSaSaSaMaSaSaSaMaSaMaSawaSawaSaYaSawaSaYaGaYaGaYawaYaGaYawaYawaAaYaAaYaAaYaAaYaAaAaAaAa7aAaAaAa7aAaHaAaHaAaHaAaHa6aHaWaHaWaHaWaHaHaHaWaIaHaIaHaIaHaIajaIaIaIaIaKaIaIaIagaIagaIaLaIaLapaLapaLapaLaLahaZahaLahaLaNahaNahaNahaNahakaNaqaNakaNakaqaQaqaQaqasaQasaXasaQasasaOasaOasaFaOaFaOaDaOaRaFaRaFaRa1aVaRaVa1a5aVa5", +"aJa2aJa0aJa2aJa2aEaJaEaJaEaJaEaJataEataEazatatatazatauatauatauataaataaataaanaaanaaaaaaalaaaaaaaa#Caa#Caa#Caa#Caa#C#l#Caa#C#C#C#C#C#C#C#C#B#C#p#C#B#C#F#C#F#C#F#C#F#p#F#p#F#p#F#p#F#p#F#p#t#H#t#H#t#H#t#H#t#H#t#H#t#t#t#H#t#t#t#u#t#t#t#u#K#t#K#t#K#t#K#t#x#t#x#t#x#t#x#t#x#t#x#t#x#t#x#t#x#e#x#t#x#e#x#e#x#e#x#e#x#e#x#e#x#e#x#e#x#e#x#e.s#e#x#e.s#e#x#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.p#e.p#e.p#e.p#h.p#e.p#h.p.p.p#h.p.p.p#h.p.r.p#h.p.r.p.m.p.q.p.m.p.m.p.m.p.m.p.m.p.m.p.m.p.m.o.m.o.m.o" +".m.o.m.q.m.o.m.q.m.q.m.q.6.q.6.q.6.q.6.q.6.q.6.q.6.t.6.6.6.t.6.6aT.6.6.6aT.6.6.6aB.6aB.6aB.6aB.6aB.6aBaUaBaUaBaUa4aUaBaBa4aUa4aBaSaBaSaBaSaBaSaBaSaraSaSaSaraSaSaSaSaSaSawaSaGaSawaSawaSaYaSaYaGaYaGaYaGaYaGaYawaAaGaAaYaAaYaAaYaAaAaAaAaAaAaAaAa6aAaWaAaHaAaWaAaHaAaHaWaHaWaHaWaHaWaHaWaIaWaIaHaIaHaIajaIajaIaIaIaIaIaIapaIapaIaLaIaLapaLapaLaZaLaZahaZahaZahaLaNahaNahaNahaNaNaqaNaqaNaQaNaQaqaQaqaQaXasaXasaXasaXaOasaOasaOaOaFaOaFaOaRaFa1aFaRa1aVa1aVa1a5aV", +"a8a2a8a2a0aJa0aJa0aJa0aJaJaEaJaEaJaEaJaEaJataEataEataEatatazatanatauatauataaataaataaanaaalaaalaaalaaalaaal#lal#9aa#Cal#Caa#Caa#C#l#C#l#C#C#C#C#C#C#C#C#C#C#p#C#p#C#p#C#p#C#F#C#H#p#F#p#H#p#F#p#F#p#F#p#F#p#t#p#t#p#t#H#t#H#t#H#t#H#t#H#t#u#t#u#t#u#t#u#t#u#t#u#t#u#t#u#t#u#e#u#t#u#e#u#e#u#e#u#e#u#e#u#x#t#x#u#x#t#x#u#x#e#x#u#x#e#x#h#x#e#x#h#x#e#x#h#x#e#x#h#e#e#e#h#e#h#e#h#e#h.p#h#e#h.p#h#e#h.p#h#e#h.p#h#e#h.p#h.p#h.p#h.p#h.p#h.p#h.p#h.p.m.p.m.p.m.p.m.p.m.p.m.p.m.p.m.p.m.p.m.r.m.p.m.q.m.o.m.q.m.q.m.q.m.q.m.q.m.q.m" +".m.m.q.6.m.6.q.6.m.6.q.6.m.6.maT.m.6.6aT.6.6.6aT.6aT.6aT.6aT.6aB.6aB.6aB.6aB.6a4.6aB.6a4aBa4aUa4aBa4aUa4aBa4aBa4aBaSaBaSaBaSaBaSa4aSaBaSaSaSaSaMaSaSaSaMaSaMaSawaSawaSaYaSaYaSaYaGaYaGaYawaYaGaYaYaYawaAaYaAaYaAaYaAaYaAaAaAaAa6aAa6aAa7aAaHaAaHaAaHaAaHa6aHaWaHaWaHaWaHaHaHaWaIaHaIaHaIaHaIajaIaIaIaIaIaIaIaIagaIagaIaLaIaLapaLapaLapaLaLahaZahaLahaLaNaLaNahaNahaNahakaNaqaNakaNakaqaQaqaQaqaQaXasaXasaQasasaOasaOasaOaOaFaOaDaOaRaFaRaFaRa1aVa1aVa1a5aVa5aVa5", +"a2a0aJa2aJa0aJaJaEaJaEaJaEaJaEaJaEaEataEataEazatatatazatauatauatauataaataaataaanaaanaaaaaaalaaaaaaaa#Caa#Caa#Caa#Caa#C#l#Caa#C#C#C#C#C#C#C#C#B#C#C#C#B#C#p#C#F#C#F#C#F#p#F#p#F#p#F#p#F#p#F#p#t#p#F#H#t#H#t#H#t#H#t#H#t#H#t#H#t#t#t#u#t#t#t#u#t#t#t#u#t#t#K#t#x#t#x#t#x#t#x#t#x#t#x#t#x#t#x#t#x#t#x#t#x#e#x#t#x#e#x#e#x#e#x#e#x#e#x#e#x#e#x#e#x#e#x#e.s#e#x#e.s#e#x#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.s#e.p#e.p#h.p#e.p#h.p#e.p#h.p#e.p#h.p#e.p#h.p#h.p#h.p#h.p#h.p.m.p.m.p.m.p.m.p.m.p.m.p.m.p.m.p.m.p.m.o.m.o.m.o.m.q.m.o" +".m.q.m.o.m.q.m.q.6.q.6.q.6.q.6.q.6.m.6.q.6.m.6.t.6.6.6.6.6.6aT.6.6.6aT.6aT.6aB.6aB.6aB.6aB.6aB.6aBaUa4aUaBaUa4aUa4aBa4aUa4aBaSaBaSaBaSaBaSa4aSaBaSaSaSaSaSaSaSaSaSaSawaSaGaSawaSawaSaYaSaYaGaYaGaYaGaYaGaYawaAaGaAaYaAaYaAaYaAaAaAaAaAaAaAaAa6aAa6aAaHaAaWaAaHaAaHaWaHaWaHaWaHaWaHaWaIaWaIaHaIaHaIaHaIajaIaIaIaIaIaIapaIapaIaLaIaLapaLapaLaZaLaZaLaZahaZahaLaNaLaNahaNahaNaNaqaNaqaNakaNaXaqaQaqaQaXaQaXasaXasaXasasaOasaOaOaOaOaFaOa1aOa1aFaRaFaRa1aVa1aVa1a5a9", +"a8a2a8a2a8a2a0aJa0aJa0aJa0aJaJaEaJaEaJaEaJaEaJataEataEataEatatazatanatauatauataaataaataaanaaalaaalaaalaaalaaal#lal#9aa#Cal#Caa#Caa#C#l#C#l#C#l#C#C#C#C#C#C#C#C#p#C#p#C#p#C#p#C#p#C#H#p#F#p#H#p#F#p#H#p#F#p#F#p#t#p#F#p#t#p#t#H#t#H#t#H#t#H#t#u#t#H#t#u#t#u#t#u#t#u#t#u#t#u#t#u#e#u#t#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#h#e#u#e#h#e#h#e#h#e#h#e#h#e#h#e#h#e#h#e#h#e#h#e#h#e#h#e#h#e#h#e#h#e#h#e#h.p#h#e#h.p#h#e#h.p#h#e#h.p.m#e.m.p.m#e.m.p.m#e.m.p.m#e.m.p.m#h.m.p.m#h.m.o.m.m.m.q.m.m.m.q.m.m.m.q.m.m.m.q.m.m.6" +".m.6.m.6.m.6.m.6.m.6.m.6.maT.m.6.6aT.6.6.6aT.6aT.6aT.6aT.6aB.6aB.6a4.6aB.6a4.6a4.6a4aBa4aUa4aBa4aUa4aBa4aBa4aBaSaBaSa4aSaBaSa4aSa4aSaSaSaSaMaSaSaSaMaSaMaSaYaSawaSaYaSaYaSaYaSaYaGaYawaYaGaYaYaYawaAaYaAaYaAaYaAaYaAaAaAaAa6aAa6aAa7aAaHaAaHaAaHaAaHa6aHaWaHaWaHaWaHaHaHaWaIaHaIaHaIaHaIaHaIaIaIaIaIaIaIaIagaIagaIaLaIaLaIaLapaLapaLaZaLaZahaLahaLaNaLaNahaNahaNahaNaNaqaNakaNakaNaQaqaQaqaQaXasaXasaQasaQaOasaOasaOaOaFaOaDaOaFaOaRaFaRaFaRa1aVa1a5aRa5aVa5a5a5", +"a2a0a2a0aJa2aJa2aJaJaEaJaEaJaEaJataJataEataEataEazatatatazatauatauatauataaataaataaanaaanaaaaaaalaaaaaaaa#Caa#Caa#Caa#Caa#C#l#Caa#C#C#C#C#C#C#C#C#B#C#C#C#B#C#p#C#B#C#F#C#F#p#F#p#F#p#F#p#F#p#F#p#F#p#F#p#t#H#t#H#t#H#t#H#t#H#t#H#t#u#t#u#t#t#t#u#t#t#t#u#t#t#t#u#e#t#t#u#x#t#x#t#x#t#x#t#x#t#x#t#x#t#x#t#x#e#x#t#x#e#x#e#x#e#x#e#x#e#x#e#x#e#x#e#x#e#x#e#x#e#x#e#x#e#x#e.s#e#x#e.s#e#x#e.s#e.p#h.p#e.p#h.p#e.p#h.p#e.p#h.p#e.p#h.p#e.p#h.p#h.p#h.p#h.p#h.p#h.p.m.p.m.p.m.p.m.p.m.p.m.p.m.p.m.p.m.p.m.p.m.o.m.o.m.o.m.q.m.o.m.q" +".m.o.m.q.m.q.6.m.6.q.6.m.6.q.6.m.6.q.6.m.6.6.6.6.6.6.6.6aT.6.6.6aT.6aB.6aB.6aB.6aB.6aB.6a4.6aBaUa4aUa4aUa4aUa4aBa4aUa4aBaSaBaSaBaSaBaSa4aSaBaSaSaSaSaSaSaSaSaSaSaMaSaGaSaYaSawaSaYaSaYaGaYaGaYaGaYaGaYaYaYaGaAaYaAaYaAaYaAaYaAaAa6aAaAaAa6aAa6aAaHaAaWaAaHaAaHa6aHaWaHaWaHaWaHaWaIaWaIaHaIaWaIaHaIajaIaIaIaIaIaIapaIapaIaLaIaZaIaLapaLaZaLaZaLaZahaZahaLaNaZaNahaNahaNaNaNaNaqaNaqaNaqaNaQaqaQaqaQaXasaXasaXasaQaOasaOaOaOaOaFaOaFaOa1aFaRaFaRa1aVa1aVa1a5a9a5a5", +"a8a2a8a2a8a2a0a2a0aJa0aJa0aJa0aEaJaEaJaEaJataJataJataEataEataEatatatatanatauatauataaataaataaataaalaaalaaalaaalaaal#lal#9aa#Cal#Caa#Caa#C#l#C#l#C#l#C#C#C#C#C#C#C#C#p#C#p#C#p#C#p#C#p#C#H#p#F#C#H#p#F#p#H#p#F#p#F#p#t#p#F#p#t#p#t#p#t#p#t#H#t#H#t#H#t#H#t#u#t#u#t#u#t#u#t#u#t#u#t#u#t#u#t#u#e#u#t#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#h#e#u#e#h#e#h#e#h#e#h#e#h#e#h#e#h#e#h#e#h#e#h#e#h#e#h#e#h#e#h#e#h#e#h#e#h#e.m#e.m#e.m#e.m#e.m#e.m#e.m#e.m.p.m#h.m.p.m#h.m.p.m#h.m.n.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.6.m.6" +".m.6.m.6.m.6.m.6.m.6.maT.6.6.6aT.6aT.6aT.6aT.6aT.6aT.6a4.6aB.6a4.6a4.6a4.6a4.6a4aBa4aUa4aBa4aBa4aBa4aBa4a4aSaBaSa4aSa4aSa4aSa4aSaSaSaSaMaSaSaSaMaSaMaSaYaSaYaSaYaSaYaSaYaSaYaGaYawaYaGaYaYaYaYaAaYaAaYaAaYaAaYaAaYaAaAa6aAa6aAa7aAa6aAaHaAaHaAaHa6aHa6aHaWaHaWaHaHaHaWaIaHaIaHaIaHaIaHaIaIaIaIaIaIaIaIaKaIapaIaLaIaLaIaLapaLapaLaZaLaZahaLahaLaNaLaNahaNahaNahaNaNaqaNakaNakaNaQaqaQaqaQaXaQaXasaQasaQaOasaOasaOaOaOaOaFaOaFaOaRaFaRaFaRa1aVa1a5aRa5aVa5a5a5a5b.", +"a2a8a2a0a2a0aJa2aJa2aJaJaEaJaEaJaEaJataJataEataEataEazatatatazatauatauatauataaataaataaanaaanaaaaaaalaaaaaaaa#Caa#Caa#Caa#Caa#C#l#Caa#C#l#C#C#C#C#C#C#p#C#C#C#B#C#p#C#B#C#F#C#F#p#F#p#F#p#F#p#F#p#F#p#F#p#F#p#t#p#t#H#t#H#t#H#t#H#t#H#t#u#t#H#t#u#t#u#t#t#t#u#t#t#t#u#t#t#t#u#e#t#e#u#e#t#e#u#x#t#x#u#x#t#x#t#x#t#x#t#x#e#x#t#x#e#x#e#x#e#x#e#x#e#x#e#x#e#x#e#x#e#e#h#e#e#e#h#e#e#e#h#e#e#e#h.p#e#e#h.p#e#e#h.p#e#e#h.p#e.p#h.p#h.p#h.p#h.p#h.p#h.p.m.p.m.p.m.p.m.p.m.p.m.p.m.p.m.p.m.p.m.p.m.p.m.o.m.o.m.q.m.o.m.m.m.o.m.m.m.q" +".m.m.m.q.6.m.6.q.6.m.6.m.6.m.6.m.6.m.6.6.6.6.6.6.6.6aT.6.6.6aT.6aB.6aB.6aB.6a4.6aB.6a4.6a4aUa4aUa4aUa4aUa4aBa4aUa4aBaSaBaSa4aSaBaSa4aSa4aSaSaSaSaSaSaSaSaSaSaMaSaGaSaYaSaYaSaYaSaYaGaYaGaYaGaYaGaYb#aYb#aAaYaAaYaAaYaAaYaAaAa6aAa6aAa6aAa6aAaHaAaWa6aHaAaHa6aHaWaHaWaHaWaHaWbaaWaIaHaIaWaIaHaIajaIaIaIaIaIaIaIaIapaIaLaIaZaIaLapaLaZaLaZaLaZahaZahaLaNaZaNahaNahaNaNaNaNaqaNaqaNaqaNaQaqaQaqaQaXaQaXasaXasaQaOaPaOasaOaOaOaOaFaOa1aOaRaFaRa1aRa1aVa1a5a1a5a5a5a5", +"bba2a8a2a8a2a8aJa0aJa0aJa0aJa0aJa0aEaJaEaJaEaJataJataJataEataEataEatatatatanatauatanataaataaataaataaalaaalaaalaaalaaal#lalaaaa#Cal#Caa#Cal#C#l#Caa#C#l#C#l#C#C#C#C#C#C#p#C#p#C#p#C#p#C#p#C#p#p#H#C#H#p#F#p#H#p#F#p#H#p#F#p#F#p#t#p#t#p#t#p#t#p#t#p#t#H#t#H#t#u#t#H#t#u#t#u#t#u#t#u#t#u#t#u#t#u#t#u#t#u#e#u#t#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#h#e#u#e#h#e#u#e#h#e#h#e#h#e#h#e#h#e#h#e#h#e#h#e.m#e.m#e.m#e.m#e.m#e.m#e.m#e.m#e.m#e.m#e.m#e.m#h.m#e.m#h.m#e.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.6.m.6.m.6.m.6" +".m.6.m.6.m.6.m.6.maT.6.6.6aT.6aT.6.5.6aT.6.5.6aT.6a4.6a4.6a4.6a4.6a4.6a4.6a4aBa4aUa4aBa4aBa4aBa4aBa4a4aSaBaSa4aSa4aSa4aSa4aSaSaSaSaMaSaSaSbcaSaMaSaYaSaYaSaYaSaYaSaYaSaYaGaYaYaYaGaYaYaYaYaYaYaAaYaAaYaAaYa6aYaAaAa6aAa6aAa7aAa6aAaHa6aHaAaHa6aHa6aHaWaHaWaHaWaHaWbaaHaIaHaIaHaIaHaIaIaIaIaIaIaIaIaKaIapaIaLaIaLaIaLapaLapaLaZaLaZaLaLahaZaNaLaNaLaNahaNahaNaNaNaNakaNaqaNaQaNaQaqaQaXaQaXasaQasaXaOaQaOasaOaOaOaOaFaOaFaOaRaOaRaFaRa1aRa1aVaRa5a1a5a5a5a5a5a5b.", +"a2a8a2a8a2a0aJa0aJa2aJa2aJaJaEaJaEaJaEaJataJataEataEataEazatatatazatauataaatauataaataaataaalaaanaaaaaaalaaaaaaal#Caa#Caa#Caa#Caa#Caa#Caa#C#l#C#C#C#C#C#C#C#C#C#C#B#C#p#C#B#C#p#C#F#p#F#C#F#p#F#p#F#p#F#p#F#p#F#p#t#p#t#p#t#p#t#H#t#H#t#H#t#H#t#H#t#u#t#u#t#u#t#u#t#t#t#u#t#t#t#u#e#t#t#u#e#t#e#u#e#t#e#u#e#t#e#u#e#t#e#u#e#t#e#u#e#e#e#u#e#e#e#h#e#e#e#h#e#e#e#h#e#e#e#h#e#e#e#h#e#e#e#h#e#e#e#h#e#e#e#h#e#h#e#h.p#h#e#h.p#h#e#h.p#h#e#h.p.m#e.m.p.m#e.m.p.m#e.m.p.m#e.m.p.m#e.m.p.m#e.m.o.m.n.m.o.m.m.m.o.m.m.m.o.m.m.m.m.m.m" +".6.m.6.m.6.m.6.m.6.m.6.m.6.m.6.m.6.6.6.6.6.6.6.6aT.6.6.6aT.6aB.6a4.6aB.6a4.6a4.6a4.6a4aUa4aUa4aUa4aUa4aBa4aUa4aBaSaBaSa4aSa4aSa4aSa4aSaSaSaSaSaSaSaSaSaSbcaSaGaSaYaSaYaSaYaSaYaSaYaGaYaGaYaGaYb#aYb#aAaYaAaYaAaYaAaYaAaAa6aAa6aAa6aAa6aAaHaAaWa6aHaAaHa6aHaWaHaWaHaWaHaWbaaWaIaHaIaWaIaHaIaHaIaIaIaIaIaIaIaIapaIaLaIaZaIaLaIaLaZaLaZaLaZaLaZahaZaNaZaNaLaNahaNaNaNaNaNaNaqaNaqaNaQaqaQaqaQaqaQaXasaXasaXaOaXaOasaOasaOaOaFaOaFaOaRaFa1a1aRa1aVa1a5a1a5aVa5bda5a5", +"bba2bba2a8a2a8a2a8aJa0aJa0aJa0aJa3aJa3aEaJaEaJaEaJataJataEataEataEataEatatatatanatauatanataaataaataaataaalaaalaaalaaalaaal#lalaaaa#Cal#Caa#Cal#C#l#Caa#C#l#C#l#C#C#C#C#C#C#p#C#p#C#p#C#p#C#p#C#p#C#p#C#p#p#F#p#H#p#F#p#H#p#F#p#H#p#t#p#t#p#t#p#t#p#t#p#t#p#t#p#t.l#t#H#t#u#t#u#t#u#t#u#t#u#t#u#t#u#t#u#t#u#e#u#t#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#h#e#u#e#h#e#u#e#h#e.l#e.m#e.m#e.m#e.m#e.m#e.m#e.m#e.m#e.m#e.m#h.m#e.m#h.m#e.m#h.m#e.m.m.m.n.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.6.m.6.m.6.m.6.m.6" +".m.6.maT.m.6.m.5.6.6.6.5.6aT.6.5.6.5.6.5.6.5.6a4.6a4.6a4.6a4.6a4.6a4.6a4aBa4aUa4aBa4aBa4a4a4aBa4a4aSa4aSa4aSa4aSa4aSa4aSaSaSaSaMaSaSaSbcaSbcaSaYaSaYaSaYaSaYaSaYaSaYaGaYaYaYb#aYaYaYaYaYaYaAaYaAaYaAaYa6aYa6aAa6aAa6aAa7aAa6aAaHa6aHa6aHa6aHa6aHaWaHaWbaaWaHaWbaaHaIaHaIaHaIaHaIbaaIaIaIaIaIaIaKaIapaIaLaIaLaIaLaIaLapaLaZaLaZaLaLahaZaNaLaNaLaNahaNahaNaNaNaNakaNaqaNaQaNaQaqaQaXaQaXaQaXasaXaOaQaOasaOasaOaOaOaOaFaOaRaOaRaFaRa1aRa1aVa1aVa1a5aVa5a5a5a5b.a5be", +"a2a8a2a8a2a0aJa0aJa0aJa2aJa2aEaJaEaJaEaJaEaJataJataEataEataEazatatatazatauataaataaataaataaataaalaaanaaalaaalaaaaaaal#laa#Caa#Caa#Caa#Caa#Caa#C#l#C#C#C#C#C#C#C#C#C#C#p#C#p#C#B#C#p#C#B#C#F#C#F#p#F#p#F#p#F#p#F#p#F#p#t#p#F#p#t#p#t#p#t#H#t#H#t#H#t#H#t#u#t#H#t#u#t#u#t#u#t#u#t#u#t#u#t#u#t#u#e#t#t#u#e#t#e#u#e#t#e#u#e#t#e#u#e#t#e#u#e#t#e#u#e#e#e#u#e#e#e#h#e#e#e#h#e#e#e#h#e#e#e#h#e#h#e#h#e#h#e#h#e#h#e#h#e#h#e#h#e#h#e#h#e.m#e.m#e.m#e.m#e.m#e.m#e.m#e.m#e.m#e.m#e.m#e.m#e.m#e.m.n.m.m.m.n.m.m.m.n.m.m.m.m.m.m.m.m.m.m.6.m" +".6.m.6.m.6.m.6.m.6.m.6.m.6.m.6.6.6.6aT.6.6.6aT.6.6.6.5.6aB.6a4.6a4.6a4.6a4.6a4.6a4aUa4aUa4aUa4aUa4aBa4aUa4a4aSaBaSa4aSa4aSa4aSa4aSaSaSaSaSaSaSaSaSaSbcaSb#aSaYaSaYaSaYaSaYaSaYaGaYb#aYaGaYb#aYb#aAaYaAb#aAaYaAaYaAaYa6aAa6aAa6aAa6aAa6aAaWa6aHa6aHa6aHa6aHaWaHaWaHaWbaaWaIaHaIaWaIaHaIaHaIaIaIaIaIaIaIaIaIaIaZaIaZaIaLaIaLaZaLaZaLaZaLaZahaZaNaZaNaLaNahaNaNaNaNaNaNaqaNaqaNaQaNaXaqaQaqaQaXaQaXasaXaOaXaOasaOasaOaOaOaOaFaOa1aOa1a1aRa1aRa1a5a1a5a1a5a9a5a5a5a5", +"bba8bba2bba2a8a2a8a2a8aJa0aJa0aJa0aJa3aJa3aEaJaEaJaEaJataJataEataEataEataEatatatatanatauatanataaataaataaataaalaaalaaalaaalaaal#lalaaal#Cal#Caa#Cal#Caa#Caa#C#l#C#l#C#l#C#C#C#C#p#C#C#C#p#C#p#C#p#C#p#C#p#C#p#p#p#p#H#p#F#p#H#p#F#p#H#p#t#p#H#p#t#p#u#p#t#p#t#p#t#p#t#p#t#p#t.l#t#p#t.l#t#u#t#u#t#u#t#u#t#u#t#u#t#u#t#u#e#u#t#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e.l#e.l#e.l#e.l#e.m#e.l#e.m#e.l#e.m#e.l#e.m#e.l#h.m#e.m#h.m#e.m#h.m#e.m#h.m.n.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.6.m.6.m.6.m.k.m.6.m.k.m.6" +".m.5.m.6.6.5.6.k.6.5.6.5.6.5.6.5.6.5.6.5.6a4.6a4.6a4.6a4.6a4.6a4.6a4aBa4aUa4a4a4aBa4a4a4a4a4a4aSa4aSa4aSa4aSa4aSa4aSaSaSaSbcaSaSaSbcaSbcaSaYaSaYaSaYaSaYaSaYaSaYaGaYb#aYb#aYaYaYaYaYaYaAaYaAaYaAaYa6aYa6aAa6aAa6aAa7aAa6aAa7a6aHa6aHa6aHa6aHa6aHaWbaaWbaaWbaaHaIaHaIaHaIaHaIbaaIaIaIaIaIaIaIaIaIaIaLaIaLaIaLaIaLapaLaZaLaZaLaLahaZaNaLaNaLaNaLaNahaNaNaNaNaNaNaqaNaQaNaQaNaQaXaQaXaQaXasaXaOaQaOaQaOasaOaOaOaOaFaOaRaOa1aOaRa1aRa1aRa1aVa1a5aRa5aVa5a5a5a5bea5be", +"a2a8a2a8a2a8a2a0aJa0aJa0aJa2aJa2aEaJaEaJaEaJaEaJataJataEataEataEazatatatauatauataaataaataaataaataaalaaanaaalaaalaaaaaaal#laa#Caa#Caa#Caa#Caa#Caa#C#l#C#l#C#C#C#C#C#C#C#C#p#C#p#C#B#C#p#C#B#C#p#C#F#p#F#p#F#p#F#p#F#p#F#p#F#p#F#p#t#p#t#p#t#p#t#p#t#H#t#H#t#u#t#H#t#u#t#u#t#u#t#u#t#u#t#u#t#u#t#u#t#u#t#u#e#u#t#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#h#e#u#e#h#e#u#e#h#e#h#e#h#e#h#e#h#e#h#e#h#e#h#e#h#e#h#e.m#e.m#e.m#e.m#e.m#e.m#e.m#e.m#e.m#e.m#e.m#e.m#e.m#e.m.n.m.n.m.n.m.m.m.n.m.m.m.n.m.m.m.m.m.m.m.m.6.m.6.m.6.m" +".6.m.6.m.6.m.6.m.6.m.6.6.6.6.6.6.5.6.6.6.5.6.6.6.5.6a4.6a4.6a4.6a4.6a4.6a4.6a4aUa4aUa4aUa4aUa4a4a4aUa4a4aSa4aSa4aSa4aSa4aSa4aSaSaSaSaSaSbfaSaSaSbcaSb#aSaYaSaYaSaYaSaYaSaYaGaYb#aYb#aYb#aYb#aYaYaAb#aAaYa6aYaAaYa6aAa6aAa6aAa6aAa6aAaWa6aHa6aHa6aHa6aHaWaHaWaHaWbaaWbaaWaIaWaIaHaIaHaIaIaIaIaIaIaIaIaIaIaZaIaZaIaLaIaLaZaLaZaLaZaLaZaLaZaNaZaNaLaNaLaNaNaNaNaNaNaNaNaqaNaQaNaXaqaQaqaQaXaQaXasaXaOaXaOaQaOasaOaOaOaOaFaOa1aOa1aFaRa1aRa1aVa1a5a1a5a9a5a5a5a5b.a5", +"bba8bba0a8a2a8a2a8a2a8a2a0aJa0aJa0aJa0aJa3aJa3aEaJaEaJaEaJataJataEataEatatatatatatatatanataaatanataaataaataaataaalaaalaaalaaalaaalaaalaaal#lal#Caa#Cal#Caa#Cal#C#l#C#l#C#l#C#l#C#C#p#C#C#C#p#C#p#C#p#C#p#C#p#C#p#p#p#p#p#p#H#p#H#p#F#p#H#p#F#p#H#p#t#p#u#p#t#p#u#p#t#p#t#p#t#p#t#p#t#p#t.l#t.l#t.l#t.l#t.l#t.l#t.l#t.l#t.l#t.l#t.l#e.l#t.l#e.l#e.l#e.l#e.l#e.l#e.l#e.l#e.l#e.l#e.l#e.l#e.l#e.l#e.l#e.l#e.l#e.l#h.l#e.l#h.m#e.l#h.m#e.l#h.m.n.l.m.m.m.l.m.m.m.l.m.m.m.l.m.m.m.l.m.m.m.l.m.m.m.k.m.6.m.k.m.6.m.k.m.k.m.k.m.k.m.5" +".m.k.6.5.6.5.6.5.6.5.6.5.6.5.6.5.6a4.6a4.6a4.6a4.6a4.6a4.6a4.6a4a4a4aUa4a4a4a4a4a4a4a4a4a4aSa4aSa4aSa4aSa4aSa4bfaSaSaSbcaSbfaSbcaSbcaSbcaSaYaSaYaSaYaSaYbfaYaSaYb#aYb#aYaYaYaYaYaYaAaYa6aYaAaYa6aYa6aYa6aAa6aAa7aAa6aAa7a6aHa6aHa6aHa6aHa6aHaWbaaWbaaWbaaHbaaWaIaHaIaHaIbaaIbaaIaIaIaIbgaIaIaIaLaIaLaIaLaIaLaIaLaZaLaZaLaZaLaZaNaLaNaLaNaLaNahaNaNaNaNaNaNaqaNaQaNaQaNaQaqaQaXaQaXaQaXaOaQaOaQaOasaOasaOaOaOaOa1aOa1aOaRa1aRa1aRa1aVa1a5aRa5aVa5a5a5a5bea5bea5bh", +"a2bba2a8a2a8a2a8a2a0aJa0aJa0aJa2aJa2aEaJaEaJaEaJaEaJataJataEataEataEazatatatauatauataaataaataaataaataaalaaanaaalaaalaaaaaaal#laa#Caa#Caa#Caa#Caa#Caa#C#l#C#l#C#l#C#C#C#C#C#C#p#C#p#C#p#C#p#C#B#C#p#C#B#p#H#p#F#p#F#p#F#p#F#p#F#p#F#p#t#p#t#p#t#p#t#p#t#p#t#p#t#p#t#H#t#u#t#H#t#u#t#u#t#u#t#u#t#u#t#u#t#u#t#u#e#u#t#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#h#e#u#e#h#e#u#e#h#e.m#e.m#e.m#e.m#e.m#e.m#e.m#e.m#e.m#e.m#e.m#e.m#e.m#e.m#e.m#e.m.n.m.n.m.m.m.n.m.m.m.n.m.m.m.m.m.m.m.m.m.m.6.m.6.m.6.m.6.m.6.m" +".6.m.6.m.6.m.k.m.6.6.k.6.6.6.5.6.k.6.5.6.5.6.5.6a4.6a4.6a4.6a4.6a4.6a4.6a4aUa4aUa4bia4aUa4a4a4bia4a4aSa4aSa4aSa4aSa4aSa4aSaSaSaSaSaSbfaSbfaSbcaSb#aSaYaSaYaSaYaSaYbfaYaGaYb#aYb#aYb#aYb#aYaYaAb#aAaYa6aYa6aYa6aAa6aAa6aAa6aAa6aAaWa6aHa6aHa6aHa6aHaWbaaWaHaWbaaWbaaWaIaWaIbaaIaHaIbaaIaIaIaIaIaIaIaIaZaIaZaIaLaIaLbgaLaZaLaZaLaZaLaZaNaZaNaLaNaZaNaNaNaNaNaNaNaNaqaNaXaNaXaNaQaqaQaXaQaXasaXaOaXaOaQaOaPaOaOaOaOaFaOa1aOa1aOaRaFaRa1aRa1a5a1a5a1a5a5a5a5a5a5bea5", +"bba8bba8bba0a8a2a8a2a8a2a8a2a0aJa0aJa0aJa0aJa3aJa3aEaJaEaJaEaJataJataEataEatatatatatatatatanataaatanataaataaataaataaalaaalaaalaaalaaalaaalaaal#lal#Caa#Cal#Caa#Cal#C#l#C#l#C#l#C#l#C#l#C#C#C#C#p#C#p#C#p#C#p#C#p#C#p#p#p#C#p#p#p#p#p#p#H#p#H#p#F#p#H#p#t#p#H#p#t#p#u#p#t#p#u#p#t#p#u#p#t#p#u.l#t#p#t.l#t.l#t.l#t.l#t.l#t.l#t.l#t.l#t.l#t.l#t.l#e.l#t.l#e.l#t.l#e.l#e.l#e.l#e.l#e.l#h.l#e.l#h.l#e.l#h.l#e.l#h.l#e.l#h.l#e.l#h.l#e.l.m.l.m.l.m.l.m.l.m.l.m.l.m.l.m.l.m.l.m.l.m.l.m.l.m.k.m.k.m.k.m.k.m.k.m.k.m.k.m.5.m.k.m.5.6.k" +".6.5.6.5.6.5.6.5.6.5.6.5.6.5.6a4.6a4.6a4.6a4.ka4.6a4.ka4.6a4a4a4bia4a4a4a4a4a4a4a4a4a4aSa4aSa4aSa4aSa4aSa4bfa4aSaSbcaSbfaSbcaSbcaSbcaSaYaSaYaSaYaSaYbfaYbfaYb#aYb#aYaYaYaYaYaYaAaYa6aYa6aYa6aYa6aYa6aAa6aAa7a6a6aAa7a6aHa6aHa6aHa6aHa6aHaWbaaWbaaWbaaHbaaWaIaHaIaHaIbaaIbaaIaIaIaIbgaIaIaIaLaIaLaIaLaIaLaIaLaZaLaZaLaZaLaZaNaLaNaLaNaLaNahaNaNaNaNaNaNaqaNaQaNaQaNaQaqaQaXaQaXaQaXaOaQaOaXaOaQaOasaOaOaOaOa1aOa1aOaRaOaRa1aRa1aRa1a5aRa5a1a5a5a5a5bja5bea5bhbjbh", +"bkbba2bba2a8a2a8a2a8a2a0aJa0aJa0aJa2aJa2aEaJaEaJaEaJaEaJataJataEataEataEazatatatauatauataaataaataaataaataaalaaanaaalaaalaaaaaaal#laa#Cal#Caa#Caa#Caa#Caa#C#l#C#l#C#l#C#C#C#C#C#C#p#C#p#C#p#C#p#C#B#C#p#C#B#p#p#C#F#p#H#p#F#p#F#p#F#p#F#p#t#p#F#p#t#p#t#p#t#p#t#p#t#p#t#p#t.l#t#p#t.l#t.l#t#u#t#u#t#u#t#u#t#u#t#u#t#u#t#u#e#u#t#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e#u#e.l#e.l#e.l#e.l#e.l#e.m#e.l#e.m#e.l#e.m#e.l#e.m#e.l#e.m#e.m#e.m#e.m#e.m#e.m.n.m.m.m.n.m.m.m.n.m.m.m.n.m.m.m.m.m.m.l.m.m.m.k.m.6.m.k.m.6.m.k.m.6.m" +".k.m.6.m.k.6.k.6.k.6.k.6.5.6.k.6.5.6.5.6.5.6a4.6a4.6a4.6a4.6a4.6a4.6a4bia4aUa4bia4bia4a4a4bia4a4aSa4aSa4aSa4aSa4aSa4aSa4bfaSaSaSbfaSbfaSbcaSbfaSaYaSaYaSaYaSaYbfaYaGaYb#aYb#aYb#aYb#aYaYaAb#aAaYa6aYa6aYa6aAa6aAa6aAa6a6a6aAa6a6aHa6aWa6aHa6aHa6baaWbaaWbaaWbaaWaIaWaIbaaIblaIbaaIaIaIaIaIaIaIaIbgaIaZaIaLaIaZbgaLaZaLaZaLaZaLaZaNaZaNaLaNaZaNaNaNaNaNaNaNaNaqaNaXaNaXaNaQaqaQaXaQaXaQaXaOaXaOaXaOaPaOaOaOaOaOaOa1aOa1aOaRaFa1a1aRa1aVa1a5a1a5a5a5bda5a5bea5bebj", +"bba8bba8bbbkbba0a8a2a8a2a8a2a8a2a0aJa0aJa0aJa0aJa3aEa3aEaJaEaJaEaJataJataEataEatatatatatatatatatataaatanataaataaataaataaalaaalaaalaaalaaalaaalaaal#lal#lal#Cal#Caa#Cal#C#l#C#o#C#l#C#l#C#l#C#l#C#C#p#C#p#C#p#C#p#C#p#C#p#C#p#C#p#p#p#p#p#p#p#p#p#p#H#p#H#p#H#p#H#p#t#p#u#p#t#p#u#p#t#p#u#p#t#p#u#p#t#p#u.l#t#p#u.l#t.l#u.l#t.l#u.l#t.l#u.l#t.l#u.l#t.l#u.l#t.l#u.l#e.l#u.l#e.l#u.l#e.l#h.l#e.l#h.l#e.l#h.l#e.l#h.l#h.l.m.l.m.l.m.l.m.l.m.l.m.l.m.l.m.l.m.l.m.l.m.l.m.l.m.l.m.k.m.k.m.k.m.k.m.k.m.k.m.k.m.k.m.5.m.k.m.5.6.k.6.5" +".6.5.6.5.6.5.6.5.6.5.6.5.ka4.6a4.ka4.6a4.ka4.ka4.5a4.ka4a4a4bia4a4a4a4a4a4a4a4a4a4aSa4aSa4aSa4bfa4aSa4bfa4bfaSbcaSbfaSbcaSbcaSbcaSaYaSaYbfaYaSaYbfaYbfaYb#aYb#aYaYaYb#aYaYaYaYa6aYa6aYa6aYa6aYa6aAa6aAa7a6a6a6a7a6aHa6aHa6aHa6aHa6aHa6baaWbaaWbaaHbaaWaIbaaIaHaIbaaIbaaIaIaIaIbgaIbgaIbmaIaZaIaLbgaLaIaLaZaLaZaLaZaLaZbnaLaNaLaNaLaNaLaNaNaNaNaNaNaNaNaQaNaXaNaQaNaQaqaQaXaQaXaQaQaOaXaOaQaOasaOaOaOaOaOaOa1aOaRaOaRaFaRa1aRa1a5a1a5a1a5a5a5a5a5a5bea5bebjbebebh", +"a8bbbkbba2bba2a8a2a8a2a8a2a0aJa0aJa0aJa2aJa2aEaJaEaJaEaJaEaJataJataEataEataEazatatatazatauataaataaataaataaataaalaaanaaalaaalaaaaaaal#laaaaal#Caa#Caa#Caa#Caa#C#l#C#l#C#l#C#l#C#C#C#C#p#C#C#C#p#C#p#C#p#C#p#C#B#p#p#C#B#p#p#p#F#p#H#p#F#p#F#p#F#p#F#p#t#p#t#p#t#p#t#p#t#p#t#p#t#p#t#p#t.l#t#p#t.l#t.l#t.l#t.l#t.l#t.l#t.l#t.l#t.l#t.l#e.l#t.l#e.l#t.l#e.l#e.l#e.l#e.l#e.l#e.l#e.l#e.l#e.l#e.l#e.l#e.l#e.l#e.l#e.l#e.l#e.l#e.l#e.m#e.l#e.m#e.l#e.m.m.l.n.m.m.l.n.m.m.l.n.m.m.l.m.m.m.l.m.m.m.l.m.6.m.k.m.k.m.k.m.k.m.k.m.k.m.k.m" +".k.m.k.6.k.6.5.6.k.6.5.6.k.6.5.6.5.6a4.6a4.6a4.6a4.6a4.6a4.ka4.6a4bia4bia4a4a4bia4a4a4bia4a4aSa4aSa4aSa4aSa4bfa4aSa4bfaSbfaSbfaSbfaSbcaSbfaSaYaSaYaSaYaSaYbfaYbfaYb#aYb#aYb#aYb#aYaYa6b#aAaYa6aYa6aYa6aYa6aAa6aAa6a6a6a6a6a6aHa6aWa6aHa6aHa6baaWbaaWbaaWbaaWbaaWaIbaaIblaIbaaIaIaIaIbgaIaIaIbgaIaZaIaLaIaZbgaLaZaLaZaLaZaLaZbnaZaNaZaNaZaNbnaNaNaNaNaNaNaNaNaXaNaXaNaQaNaQaXaQaXaQaXaOaXaOaXaOaXaOaOaOaOaOaOa1aOa1aOa1aOa1a1aRa1aRa1a5a1a5boa5bda5a5bja5bea5bebe", +"bbbbbba8bba8bbbkbba0a8a2a8a2a8a2a8a2a0aJa0aJa0aJa0aJa3aEa3aEaJaEa3aEaJataJataEataEatatatatatatatatatataaatanataaatalataaataa#iaaalaaalaaalaaalaaalaaal#lal#lal#Cal#Caa#Cal#C#l#C#o#C#l#C#l#C#l#C#l#C#C#p#C#p#C#p#C#p#C#p#C#p#C#p#C#p#p#p#C#p#p#p#p#p#p#p#p#p#p#p#p#H#p#u#p#H#p#u#p#u#p#t#p#u#p#t#p#u#p#t#p#u#p#t#p#u.l#t#p#u.l#t.l#u.l#t.l#u.l#t.l#u.l#t.l#u.l#t.l#u.l#t.l#u.l#e.l#u.l#e.l#u.l#h.l#u.l.m.l.m.l.m.l.m.l.m.l.m.l.m.l.m.l.m.l.m.l.m.l.m.l.m.l.m.l.m.l.m.k.m.k.m.k.m.k.m.k.m.k.m.k.m.5.m.k.m.5.m.k.6.5.6.5.6.5.6.5" +".6.5.k.5.6.5.k.5.6a4.ka4.ka4.ka4.ka4.ka4.ka4.5a4bia4a4a4bia4a4a4a4a4a4a4a4a4a4aSa4bfa4aSa4bfa4bfa4bfa4bfaSbcaSbfaSbcaSbcaSbcbfaYaSaYbfaYbfaYbfaYbfaYb#aYb#aYaYaYb#bpaYaYaYa6aYa6aYa6aYa6aYa6aAa6aAa7a6a6a6a7a6a7a6aHa6aHa6baa6aHa6baaWbaaWbaaHbaaWbabaaIbaaIbaaIbaaIbaaIaIbgaIbgaIbmaIaZaIaLbgaLbgaLbgaLaZaLaZaLaZbnaLaNaZaNaLaNaLaNaNaNaNaNaNaNaNaQaNaXaNaQaNaQaqaQaXaQaXaQaXaOaXaOaQaOaQaOaOaOaOaOaOaFaOaRaOaRaFaRa1aRa1bqa1a5a1a5bqa5a5a5a5a5a5bea5bebjbhbebh", +"bkbba8bbbkbba2bba2a8a2a8a2a8a2a0aJa0aJa0aJaJaJaJaEaJaEaJaEaJaEaJataJataEataEataEazatatatazatauataaataaataaataaataaataaanaaalaaalaaalaaal#laaaaal#Caa#Caa#Caa#Caa#C#l#C#l#C#l#C#l#C#l#C#C#p#C#C#C#p#C#p#C#p#C#p#C#p#C#p#C#B#p#p#p#B#p#p#p#F#p#H#p#F#p#F#p#t#p#F#p#t#p#t#p#t#p#t#p#t#p#t#p#t#p#t#p#t.l#t#p#t.l#t.l#t.l#t.l#t.l#t.l#t.l#t.l#t.l#t.l#e.l#t.l#e.l#t.l#e.l#e.l#e.l#e.l#e.l#e.l#e.l#e.l#e.l#e.l#e.l#e.l#e.l#e.l#e.l#e.l#e.l.m.l.n.l.m.l.n.l.m.l.n.l.m.l.m.l.m.l.m.l.m.l.m.l.m.k.m.k.m.k.m.k.m.k.m.k.m.k.m.k.m.k.m.k.6" +".k.6.k.6.5.6.k.6.5.6.k.6.5.6.5.6a4.6a4.ka4.6a4.ka4.6a4.ka4.ka4bia4bia4a4a4bia4a4a4bia4a4aSa4aSa4bfa4aSa4bfa4bfa4bfaSbfaSbfaSbfaSbcaSbfaSaYaSaYbfaYaSaYbfaYbfaYb#aYb#aYb#aYb#aYaYbpb#aAaYa6aYa6aYa6aYa6aAa6aAa6a6a6a6a6a6aHa6aWa6aHa6aHa6baaWbaaWbaaWbaaWbaaWaIbaaIblaIbaaIbaaIaIbgaIaIaIbgaIaZaIaLaIaZbgaLbgaLaZaLaZaLaZbnaZaNaZaNaZaNbnaNaNaNaNaNaNaNaNaXaNaXaNaQaNaXaXaQaXaQaXbraXaOaXaOaXaOaOaOaOaOaObsaOa1aOa1aOa1a1aRa1aRa1a5a1a5a1a5bda5a5bja5bea5bebjbebe", +"btbbbbbbbba8bba8bbbkbba0a8a2a8a2a8a2a8a2a0aJa0aJa0aJa0aJa3aEa3aEaJaEa3aEaJataJataEataEatatatatatatatatatatanatanataaatalataaataa#iaaanaaalaaalaaalaaalaaal#lal#lal#lal#Cal#Cal#C#l#C#o#C#l#C#o#C#l#C#l#C#l#p#l#C#C#p#C#p#C#p#C#p#C#p#C#p#p#p#C#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p.l#p.l#p#u#p#u#p#u#p#u#p#u#p#u#p#u#p#u#p#u#p#u.l#u#p#u.l#u.l#u.l#u.l#u.l#u.l#u.l#u.l#u.l#u.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.m.l.l.l.m.l.l.l.m.l.l.l.m.l.l.l.m.l.l.l.m.l.m.l.m.k.m.k.m.k.m.k.m.k.m.k.m.5.l.k.m.5.l.k.m.5.l.k.6.5.k.5.6.5.k.5.6.5" +".k.5.k.5.k.5.ka4.ka4.ka4.ka4.ka4.ka4.ka4.5a4bia4a4a4a4a4a4a4a4a4a4a4a4.ia4aSa4bfa4bfa4bfa4bfa4bca4bfaSbcaSbfaSbcaSbcaSbcbfaYaSaYbfaYbfaYbfaYbfaYb#aYb#aYaYaYb#bpaYbpaYa6aYa6aYa6aYa6aYa6aYa6aAa7a6a6a6a7a6a7a6aHa6aHa6baa6baa6baaWbaaWbaaHbaaWbabaaIbaaIbaaIbaaIbaaIaIbgaIbgaIbmaIbgaIaLbgaLbgaLbgaLaZaLaZaLaZbnaLaNaZaNaLaNaLaNbnaNaNaNaNaNaNbuaNaXaNaQaNaQaNaQaXaQaXaQaXasaXaOaQaOaQaOaOaOaOaOaOaFaOaRaOa1aOaRa1aRa1bqa1a5a1a5bqa5a5a5a5a5a5bea5bebjbhbebhbebv", +"bbbbbkbba8bba2bba2bba2a8a2a8a2a0a2a0aJa0aJa0aJaJaJaJaEaJaEaJaEaJaEaJataJataEataEataEazatatatazatanataaataaataaataaataaataaanaaalaaalaaalaaalaaaaaaal#laa#Cal#Caa#Caa#C#l#C#l#C#l#C#l#C#l#C#l#C#C#C#C#p#C#p#C#p#C#p#C#p#C#p#C#p#p#p#p#B#p#p#p#B#p#H#p#F#p#H#p#F#p#H#p#t#p#t#p#t#p#t#p#t#p#t#p#t#p#t#p#t.l#t#p#t.l#t.l#t.l#t.l#t.l#t.l#t.l#t.l#t.l#t.l#t.l#t.l#t.l#t.l#e.l#t.l#e.l#t.l#e.l#e.l#e.l#e.l#e.l#e.l#e.l#h.l#e.l.m.l.n.l.m.l.n.l.m.l.n.l.m.l.m.l.m.l.m.l.m.l.m.l.m.l.m.k.m.k.m.k.m.k.m.k.m.k.m.k.m.k.m.k.m.k.m.k.6.5.6" +".k.6.5.6.k.6.5.6.5.k.5.6.5.ka4.6a4.ka4.ka4.ka4.ka4.ka4.ka4bia4bia4a4a4bia4a4a4a4a4a4aSa4aSa4bfa4aSa4bfa4bfa4bfaSbfaSbfaSbfaSbcaSbfbfaYaSaYbfaYbfaYbfaYbfaYb#aYb#aYb#aYb#aYaYbpb#a6aYa6aYa6aYa6aYa6aAa6aAa6a6a6a6a6a6a7a6aWa6aHa6aHa6baaWbaaWbaaWbaaWbaaWaIbaaIblaIbaaIbaaIaIbgaIbgaIbgaIbgaIaLaIaZbgaLbgaLaZaLaZaLaZbnaZaNaZaNaZaNbnaNbnaNaNaNaNaNaNbwaNaXaNaQaNaXaXaQaXaQaXbraXaOaXaOaXaObraOaOaOaObsaOa1aOa1aOa1a1aRa1aRa1bqa1a5a1a5boa5a5a5a5bja5bea5bebebhbe", +"btbbbtbbbbbbbba8bba8bbbkbba0a8a2a8a2a8a2a8a2a0aJa0aJa0aJa0aJa3aEa3aEaJaEa3aEaJataJataEataEatatatatatatatatatatanatanataaatalataaataa#iaaataaalaaalaaalaaalaaal#lal#lal#lal#lal#Cal#C#l#Cal#C#l#C#o#C#l#C#o#C#l#C#l#C#l#p#C#p#C#p#C#p#C#p#C#p#C#p#C#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p.l#p#p#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l.l.l#p.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.m.k.l.k.m.k.l.k.m.k.l.k.m.5.l.k.m.5.l.k.m.5.l.k.l.5.k.5.k.5.k.5.k.5.k.5.k.5.k.5" +".k.5.k.5.ka4.ka4.ka4.ka4.ka4.5a4.ka4.5a4bia4a4a4a4.ia4a4a4.ia4a4a4bfa4bfa4bfa4bfa4bfa4bfa4bca4bfaSbcaSbfaSbcbfbcaSbcbfaYbfaYbfaYbfaYbfaYbfaYb#aYb#bpaYaYb#bpaYbpaYa6aYa6aYa6aYa6aYa6bpa6aAa7a6a6a6a7a6a7a6aHa6aHa6baa6baa6baaWbaaWbaaHbaaWbabaaIbaaIbaaIbaaIbaaIaIbgaIbgaIbmaIbgaIaLbgaLbgaLbgaLaZaLaZaLaZbnaLbnaZaNaLaNaLaNbnaNaNaNaNaNaNbwaNaXaNaQaNaQaNaQaXaQaXaQaXaQaXaOaQaOaQaOaOaOaOaOaOaOaOa1aOa1aOaRa1aRa1aRa1bqa1a5aRa5boa5a5a5a5bja5bea5bhbebhbebvbebx", +"bbbbbbbbbkbba8bba2a8a2a8a2a8a2a8a2a0a2a0aJa0aJa0aJaJaJa3aEaJaEaJaEaJaEaJataJataEataEataEatatatatazatanataaataaataaataaataaataaanaaalaaalaaalaaalaaalaaal#laa#lal#Caa#Caa#C#l#Caa#C#l#C#l#C#l#C#l#C#l#C#C#p#C#p#C#p#C#p#C#p#C#p#C#p#p#p#C#p#p#p#p#B#p#p#p#B#p#p#p#F#p#H#p#t#p#H#p#t#p#u#p#t#p#t#p#t#p#t#p#t#p#t#p#t.l#t#p#t.l#t.l#t.l#t.l#t.l#t.l#t.l#t.l#t.l#t.l#t.l#t.l#t.l#t.l#t.l#t.l#e.l#u.l#e.l#u.l.n.l.l.l.n.l.m.l.n.l.m.l.n.l.m.l.m.l.m.l.m.l.m.l.m.l.m.l.m.l.m.k.m.k.m.k.m.k.m.k.m.k.m.k.m.k.m.k.m.k.m.k.6.k.6.5.6.k.k" +".5.6.k.k.5.6.5.k.5.6.5.ka4.ka4.ka4.ka4.ka4.ka4.ka4bia4bia4bia4a4a4bia4a4.ia4a4a4bfa4aSa4bfa4bfa4bfa4bfa4bfaSbfaSbfaSbfaSbcaSbfbfaYaSaYbfaYbfaYbfaYbfaYb#aYb#aYb#bpb#aYaYbpb#a6aYa6aYa6aYa6aYa6bpa6aAa6a6a6a6a6a6a7a6aWa6baa6aHa6baa6baaWbaaWbaaWbaaWbabaaIblaIbaaIbaaIaIbgaIbgaIbgaIbgaIaZaIaZbgaLbgaLbgaLaZaLaZbnaZbnaZaNaZaNbnaNbyaNaNaNaNaNaNbwaNaXaNaXaNaXbwaQaXaQaXbraXbraXaOaXaObraObzaOaOaOaObsaOa1aOa1bsaRa1a1a1bqa1a5a1a5a1a5a5a5bdbja5bea5bebjbebebAbe", +"btbbbtbbbbbbbbbbbba8bba8bba2bba0a8a2a8a2a8a2a8a2a0aJa0aJa0aJa0aJa3aEa3aEaJaEa3aEaJataJataJataEatatatatatatatatatatanatanataaatalataaataaataaataaalaaalaaalaaalaaal#lal#lal#lal#lal#lal#Cal#Cal#C#l#C#o#C#l#C#o#C#l#C#o#C#l#p#l#p#l#p#C#p#C#p#C#p#C#p#C#p#p#p#C#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p.l#p#p#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l.l.l#p.l.l.l#p.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.k.l.k.l.k.l.k.l.k.l.k.l.k.l.k.l.5.l.k.l.5.l.k.l.5.l.5.k.5.k.5.k.5.k.5.k.5.k.5.k.5.k.5.k.5" +".ka4.ka4.ka4.ka4.ka4.ka4.5a4.ka4.5a4bi.ia4a4a4.ia4.ia4.ia4.ia4bfa4bfa4bfa4bfa4bfa4bfa4bcaSbfaSbcbfbcaSbcbfbcbfbcbfaYbfaYbfaYbfaYbfaYbfaYaYaYb#bpaYbpaYbpaYbpaYa6aYa6aYa6aYa6aYa6bpa6a6a7a6a6a6a7a6a7a6a7a6aHa6baa6baa6baa6baaWbaaHbaaWbabababaaIbaaIbaaIbaaIbabgaIbgaIbmaIbgaIaLbgaLbgaLbgaLbgaLaZaLaZbnaZbnaZaNaLaNaLaNbnaNaNaNaNaNaNbwaNaXaNaQaNaQaNaQaXaQaXaQaXaQaXaOaQaOaXaObraOaOaOaOaOaOa1aOa1aOaRbsaRa1aRa1aRa1a5a1a5a1a5a5a5a5bja5bea5bebjbebebvbebvbebx", +"bbbbbbbbbbbbbkbba8bba2a8a2a8a2a8a2a8a2a0a2a0aJa0aJa0aJaJaJa3aEaJaEaJaEaJaEaJataJataEataEataEatatatatazatanataaatauataaataaataaataaataaalaaalaaalaaalaaalaaal#laa#lal#Caa#Cal#Caa#Caa#C#l#C#l#C#l#C#l#C#l#C#l#p#C#C#C#p#C#p#C#p#C#p#C#p#C#p#C#p#p#p#p#p#p#p#p#B#p#p#p#B#p#p#p#B#p#p#p#t#p#u#p#t#p#u#p#t#p#u#p#t#p#u#p#t#p#u#p#t.l#u#p#t.l#u#p#t.l#u.l#t.l#u.l#t.l#u.l#t.l#u.l#t.l.l.l#m.l.l.l#m.l.l.l#m.l.l.l.n.l.l.l.m.l.l.l.m.l.l.l.m.l.l.l.m.l.l.l.m.l.l.l.m.k.l.k.m.k.l.k.m.k.l.k.m.k.l.k.m.k.l.k.m.k.l.5.6.k.k.5.6.k.k.5.k" +".5.k.5.k.5.k.5.ka4.ka4.ka4.ka4.ka4.ka4.ka4.ka4bia4bia4bia4a4.ibia4a4.ia4a4a4bfa4bfa4bfa4bfa4bfa4bfa4bfaSbfaSbfaSbfbfbcaSbfbfaYbfaYbfaYbfaYbfaYbfaYb#aYb#aYb#bpb#bpaYbpb#a6aYa6aYa6aYa6aYa6bpa6a6a6a6a6a6a6a6a7a6aWa6baa6baa6baa6baaWbaaWbablbaaWbabaaIblaIbaaIbaaIbabgaIbgaIbgaIbgaIaZaIaZbgaLbgaLbgaLaZaLaZbnaZbnaZaNaZaNbnaNbyaNaNaNaNaNaNbwaNaXaNaXaNaXbwaQaXaQaXaQaXbraXaOaXaObBaObBaOaOaOaObsaOa1aOa1bsaRa1a1a1bqa1bqa1a5a1a5boa5bda5a5bea5bebjbebebebebvbe", +"bCbbbtbbbtbbbbbbbbbbbba8bba8bba2bba0a8a2a8a2a8a2a8a2a0aJa0aJa0aJa0aJa3aEa3aEaJaEa3aEaJataJataJataEatatataEatatatatatatatatanataaatalataaatalataaataa#iaaalaaalaaalaaal#lalaaal#lal#lal#lal#lal#Cal#C#o#C#o#C#l#C#o#C#l#C#o#C#l#p#o#C#l#p#l#p#l#p#C#p#C#p#C#p#C#p#C#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p.l#p#p#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l.l.l#p.l.l.l#p.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.k.l.k.l.k.l.k.l.k.l.k.l.5.l.k.l.5.l.k.l.5.l.k.l.5.l.k.l.5.k.5.k.5.k.5.k.5.k.5.k.5.k.5.k.5.k.5.ka4.ka4" +".ka4.ka4.ka4.ka4.k.i.5a4.k.ia4a4a4.ia4.ia4.ia4.ia4.ia4.ia4bfa4bfa4bfa4bfa4bfa4bfa4bcbfbfaSbcbfbcbfbcbfbcbfbcbfaYbfaYbfaYbfaYbfaYbfbpaYaYb#bpaYbpaYbpaYbpaYbpaYa6aYa6bpa6aYa6bpa6a6a6a6a6a6a7a6a7a6bDa6aHa6baa6baa6baa6baaWbablbaaWbabababaaIbaaIbaaIbaaIbabgaIbgaIbgaIbgaIbmbgaLbgaLbgaLbgaLaZaLaZbnaZbnaZbnaLaNaLaNbnaNbnaNaNaNaNbwaNbwaNaQaNaQaNaQbwaQaXaQaXaQaXbraQaOaXaObraOaOaOaOaOaObsaOa1aOaRbsaRa1aRa1aRa1a5a1a5a1a5bqa5a5bja5bja5bebjbebebvbebvbebxbAbx", +"bbbtbbbbbbbbbbbbbkbba8bba2a8a2a8a2a8a2a8aJa0aJa0aJa0aJa0aJaJaJa3aEaJaEaJaEaJaEaJataJataEataEataEatatatatazatatataaatauataaataaataaataaataaalaaalaaalaaalaaalaaal#laa#lal#laa#Cal#Caa#Caa#C#l#C#l#C#l#C#l#C#l#C#l#C#l#C#l#p#C#p#C#p#C#p#C#p#C#p#C#p#p#p#C#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#m#p#p#p#m#p.l#p#m#p.l#p#m#p.l#p#m#p.l#p#m#p.l#p#m.l.l#p#m.l.l#p#m.l.l.l#m.l.l.l#m.l.l.l#m.l.l.l#m.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.k.l.k.l.k.l.k.l.k.l.k.l.k.l.k.l.k.l.k.l.k.l.k.l.k.k.5.k.k.k.5.k.k.k.5.k.5.k" +".5.k.5.k.5.ka4.ka4.ka4.ka4.ka4.ka4.ka4.ka4bia4a4.ibia4a4.ibia4a4.ia4.ia4bfa4bfa4bfa4bfa4bfa4bfaSbfaSbfbfbcaSbfbfbcbfbfbfaYbfaYbfaYbfaYbfaYbfaYb#bpb#aYb#bpb#bpaYbpb#a6aYa6aYa6aYa6aYa6bpa6a6a6a6a6a6a6a6a7a6aWa6baa6baa6baa6baa6baaWbablbaaWbablbablaIbaaIbaaIbabgaIbgaIbgaIbgaIbgaIaZbgaLbgaLbgaLaZaLaZbnaZbnaZbnaZaNbnaNbyaNbnaNaNaNaNbwaNbwaNaXaNaXbwaQbwaQaXaQaXbraXaOaXaObBaObBaOaOaOaOaOaOa1aOa1bsa1bsa1a1bqa1bqa1a5a1a5boa5bda5a5bja5bebjbebjbebebvbebxbA", +"bEbbbCbbbtbbbtbbbbbbbbbbbba8bba8bba0bba0a8a2a8a2a8aJa8aJa0aJa0aJa0aJa0aJa3aJa3aEaJaEa3aEaJataJataJataEatatataEatatatatatatatatanatalatalataaatalataaataa#iaa#iaaalaaalaaalaaalaaal#lal#lal#lal#lal#lal#C#o#Cal#C#o#C#o#C#l#C#o#C#l#C#o#C#l#p#o#p#l#p#l#p#l#p#l#p#C#p#C#p#p#p#C#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p.l#p#p#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l.l.l#p.l.k.l.h.l.k.l.h.l.k.l.k.l.k.l.5.l.k.l.5.l.k.l.5.l.k.l.5.l.k.l.5.k.5.k.5.k.5.k.5.k.5.k.5.k.5.k.5.k.5.k.j.k.5.k.i.ka4.k.i" +".ka4.k.i.5a4.k.i.5.i.k.ia4.ia4.ia4.ia4.ia4.ia4.ia4.ia4bfa4bfa4bfa4bfa4bf.ibfa4bc.ibfbfbcbfbcbfbcbfbcbfbcbfaYbfaYbfaYbfbpbfaYbfbpaYbpb#bpaYbpaYbpaYbpaYbpaYa6aYa6bpa6bpa6bpa6a6a6a6a6a6a7a6a7a6bDa6baa6baa6baa6baa6baaWbablbablbabababaaIbaaIbabgbaaIbabgaIbgaIbgaIbgaIbmbgaLbgaLbgaLbgaLbgaLaZbnaZbnaZbnaLaNaLaNbnaNbnaNaNaNaNbwaNbwaNaQaNaXaNaQbwaQaXaQaXaQaXbraXaOaXaObraObraOaOaOaObsaOa1aOaRbsa1bsaRa1aRa1bqa1a5a1a5bqa5a5bja5bja5bebjbebjbhbebvbebvbAbxbAbF", +"bbbEbbbtbbbbbbbbbbbbbkbba8bba2a8a2a8a2a8a2a8aJa0aJa0aJa0aJa0aJaJaJa3aEaJaEaJaEaJaEaJataJataEataEataEatatatatazatatatauatanataaataaataaataaataa#iaaalaaalaaalaaalaaal#lal#lal#laa#lal#Caa#Cal#C#l#C#l#C#l#C#l#C#l#C#l#C#l#C#l#p#l#p#l#p#C#p#C#p#C#p#C#p#C#p#C#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p.l#p#p#p.l#p.l#p.l#p.l#p.l#p.l#p#m#p.l#p#m#p.l#p.l#p.l#p.l.l.l#p.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.k.l.k.l.k.l.k.l.k.l.k.l.k.l.k.l.k.l.k.l.k.l.k.l.k.l.5.k.k.k.5.k.k.k.5.k.5.k.5.k.5.k.5.k" +".5.ka4.ka4.ka4.ka4.ka4.ka4.k.i.ka4.k.ibia4a4.ibi.ia4.ibi.ia4.ia4.ia4bfa4bfa4bfa4bfa4bfa4bf.ibfaSbfbfbcbfbfbfbcbfbcbfaYbfaYbfaYbfaYbfbpbfaYb#bpb#bpb#bpb#bpaYbpb#a6aYa6aYa6bpa6aYa6bpa6a6a6a6a6a6a6a6a7a6a6a6baa6baa6baa6baa6baaWbablbablbablbablaIbaaIbaaIbabgbabgaIbgaIbgaIbgaIaZbgaLbgaZbgaLbgaLaZbnaZbnaZbnaZaNbnaNbyaNbnaNaNaNaNbwaNbwaNaXaNaXbwaQbwaXaXaQaXaQaXbraXaObBaObBaOaOaOaOaOaObsaOa1bsa1bsa1a1aRa1bqa1a5a1a5boa5bda5a5bja5bebjbebjbebebvbebvbAbxbA", +"bCbbbEbbbCbbbtbbbtbbbbbbbba8bba8bba8bba0bba0a8a2a8a2a8aJa8aJa0aJa0aJa0aJa0aJa3aJa3aEaJaEa3aEaJataJataJataEataEataEatatatatatatatatatatalatalataaatalataaatal#iaa#iaaalaaalaaalaaalaaal#lal#lal#lal#lal#lal#l#o#Cal#C#o#C#o#C#o#C#o#C#l#C#o#C#l#p#o#C#l#p#o#p#l#p#o#p#l#p#l#p#l#p#l#p#p#p#C#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p.l#p#p#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l.h.l.h.l.h.l.h.l.h.l.h.l.j.l.h.l.j.l.k.l.j.l.k.l.j.l.k.l.j.l.k.l.j.l.5.k.j.k.5.k.j.k.5.k.j.k.5.k.j.k.5.k.j.k.5.k.j.ka4.k.i.k.i.k.i.k.i" +".k.i.5.i.k.i.5.ibi.ia4.ia4.ia4.ia4.ia4.ia4.ia4.ia4bfa4bfa4bf.ibfa4bf.ibf.ibcbfbfbfbcbfbcbfbcbfbcbfbcbfaYbfaYbfaYbfbpbfbpbfbpaYbpb#bpaYbpaYbpaYbpaYbpbpa6aYa6bpa6bpa6bpa6bpa7a6a6a6a7a6a7a6bDa6baa6baa6baa6baa6baa6bablbablbabababababaaIbabgbabgbabgbabgaIbgaIbgaIbmbgaLbgaLbgaLbgbnbgaLaZbnaZbnaZbnaLaNaZaNbnaNbnaNbnaNaNbwaNbwaNbuaNaXaNaQbwaQbwaQaXaQaXbraXaOaXaObraObraOaOaOaObsaObsaOaRbsa1bsaRa1aRa1bqa1a5a1a5bqa5a5bja5bja5bebjbebjbhbebvbebvbAbxbAbxbvbF", +"bbbEbbbtbbbtbbbbbbbbbbbbbkbba8bba2a8a2a8a2a8a2a8aJa0aJa0aJa0aJa0aJaJaJa3aEaJaEaJaEaJaEaJataJataEataEataEatatatatatatatatauatanataaataaataaataaataa#iaaalaaalaaalaaalaaal#lalaaal#lal#lal#laa#Cal#C#l#Cal#C#l#C#l#C#l#C#l#C#l#C#l#p#l#C#l#p#l#p#l#p#C#p#C#p#C#p#C#p#p#p#C#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p.l#p#p#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l.l.l#p.l.l.l#p.l.l.l#p.l.l.l.l.l.l.l.l.l.l.l.k.l.k.l.k.l.k.l.k.l.k.l.k.l.k.l.k.l.k.l.k.l.k.l.k.l.k.l.5.k.k.k.5.k.k.k.5.k.k.k.5.k.5.k.5.k.5.k.5.ka4.k" +"a4.ka4.k.i.ka4.k.i.ka4.k.i.k.ibi.ibi.ia4.ibi.ia4.ia4.ia4.ia4bfa4bfa4bfa4bfa4bf.ibfa4bf.ibfaSbfbfbcbfbfbfbcbfbcbfaYbfaYbfaYbfaYbfbpbfaYb#bpb#bpb#bpb#bpaYbpb#a6aYa6aYa6bpa6bpa6bpa6a6a6a6a6a6a6a6bDa6a6a6baa6baa6baa6baa6baaWbablbablbablbablaIbaaIbaaIbabgbabgaIbgaIbgbgbgaIbgbgaLbgaZbgaLbgaLaZbnaZbnaZbnaZaNbyaNbyaNbnaNbnaNaNbwaNbwaNbwaNaXbwaQbwaXaXaQaXaQaXbraXaOaXaObBaObraOaOaOaObsaOa1aOa1bsa1bsaRa1bqa1bqa1a5boa5boa5a5bja5bjbjbebjbebjbAbebAbebxbAbxbA", +"bCbtbCbbbEbbbCbbbtbbbtbbbba8bba8bba8bba8bba0bba0a8a2a8a2a8aJa8aJa0aJa0aJa0aJa0aJa3aJa3aEa3aEa3aEaJata3ataJataJataEataEatatatatatatatatatatalatalatalatalataaatal#iaa#iaa#iaaalaaalaaalaaal#lal#lal#lal#lal#lal#lal#lal#l#o#C#o#C#o#C#o#C#o#C#o#C#l#C#o#C#l#p#o#p#l#p#o#p#l#p#o#p#l#p#o#p#l#p#l#p.h#p#l#p.h#p.h#p.h#p.h#p.h#p.h#p.h#p.h#p.h#p.h#p.h.l.h#p.h.l.h.l.h.l.h.l.h.l.h.l.h.l.h.l.h.l.j.l.h.l.j.l.h.l.j.l.h.l.j.l.h.l.j.l.h.l.j.l.j.l.j.l.j.k.j.k.j.k.j.k.j.k.j.k.j.k.j.k.j.k.j.k.j.k.j.k.j.k.i.k.i.k.i.k.i.k.i.5.i.k.i" +".5.i.k.i.5.ia4.ia4.ia4.ia4.ia4.ia4.ia4.i.ibfa4bf.ibfa4bf.ibf.ibc.ibf.ibcbfbfbfbcbfbcbfbcbfbcbfbcbfaYbfbpbfaYbfbpbfbpbfbpbcbpb#bpaYbpaYbpaYbpaYbpbpa6bpa6bpa6bpa6bpa6bpa7a6a6a6bDa6a7a6bDa6baa6baa6baa6baa6baa6bablbablbabababababaaIbabgbabgbabgbabgaIbgaIbgaIbmbgbmbgaLbgaLbgbnbgaLaZbnaZbnaZbnbnbnaZaNbnaNbnaNbnaNaNbwaNbwaNbuaNaXaNaQbwaQbwaQaXaQaXbraXbraXaObraObraObraOaObsaObsaOa1bsa1bsaRa1aRa1bqa1bqa1a5bqa5boa5a5bja5bjbjbebjbhbjbebebvbebxbAbxbAbxbGbF", +"bbbEbbbtbbbtbbbtbbbba8bba8bbbkbba8bba2a8a2a8a2a8a2a8aJa0aJa0aJa0aJa0aJaJaJa3aEaJaEaJaEaJaEaJataJataEataEataEatatatatatatatatazatanataaataaataaataaataa#iaa#iaaalaaalaaalaaal#lalaaal#lal#lal#laa#lal#Caa#Cal#C#l#C#o#C#l#C#l#C#l#C#l#C#l#C#l#p#l#p#l#p#l#p#l#p#l#p#C#p#C#p#C#p#p#p#C#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p.l#p#p#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l.l.l.h.l.k.l.h.l.k.l.h.l.k.l.h.l.k.l.h.l.k.l.k.l.k.l.k.l.k.l.5.l.k.k.5.k.k.k.5.k.k.k.j.k.5.k.j.k.5.k.j.k.5.k.i.ka4.k.i.k" +"a4.k.i.k.i.k.i.k.i.k.i.k.ia4.ibi.ia4.ibi.ia4.ia4.ia4.ia4bfa4bfa4bf.ibfa4bf.ibfa4bfbfbfbfbfbfbcbfbfbfbcbfbcbfaYbfaYbfbpbfaYbfbpbfbpbfbpb#bpb#bpb#bpaYbpb#a6bpa6aYa6bpa6bpa6bpa6a6a6a6a6a6a6a6bDa6bHa6baa6baa6baa6baa6baaWbablbablbablbablaIbabgbaaIbabgbabgaIbgaIbgbgbgbgbgbgaLbgaZbgaLbgaLaZbnaZbnaZbnaZbnbyaNbyaNbnaNbnaNaNbwaNbwaNbwaNaXbwaQbwaXbwaQaXaQaXbraXbraXaObBaObraObzaOaObsaObsaOa1bsa1bsaRa1a1a1bqa1a5boa5boa5a5bjbdbja5bebjbebjbAbebAbebvbAbxbAbFbG", +"bCbEbCbtbCbbbEbbbCbbbtbbbtbbbba8bba8bba8bba8bba0bba0a8a2a8a0a8aJa8aJa0aJa0aJa0aJa0aJa3aJa3aEa3aEa3aEaJata3ataJataJataEataEatatatatatatatatatat#iatalatalatalataaatal#iaaatal#iaa#iaaalaaalaaal#lalaaal#lal#lal#lal#lal#lal#l#o#lal#l#o#C#o#C#o#C#o#C#o#C#o#C#o#p#o#C#l#p#o#p#l#p#o#p#l#p#o#p#l#p#o#p.h#p#o#p.h#p.j#p.h#p.j#p.h#p.j#p.h#p.j#p.h#p.j#p.h#p.j#p.h.l.j#p.h.l.j#p.h.l.j.l.h.l.j.l.h.l.j.l.h.l.j.l.h.l.j.l.h.l.j.l.j.l.j.l.j.l.j.k.j.k.j.k.j.k.j.k.j.k.j.k.j.k.j.k.j.k.j.k.j.k.j.k.i.k.i.k.i.k.i.k.i.k.i.5.i.k.i.5.i" +".k.ia4.ia4.ia4.ia4.i.i.ia4.i.i.ia4.i.ibf.ibf.ibf.ibf.ibf.ibc.ibf.ibcbfbfbfbcbfbcbfbcbfbcbfbIbfaYbfbpbfbpbfbpbfbpbfbpbcbpb#bpaYbpaYbpbpbpaYbpbpa6bpa6bpa6bpa6bpa6bpa7a6a6a6bDa6bDa6bDa6baa6baa6baa6babHbaa6bablbablbabababababaaIbabgbabgbabgbabgaIbgbgbgaIbmbgbgbgaLbgaLbgbnbgbnbgbnaZbnaZbnbnbnbyaNbnaNbnaNbnaNaNbwaNbwaNbwaNaXaNaQbwaQbwaQaXaQaXbraXbraXaObraObraObraOaObsaObsaObsbsa1bsaRbsaRa1bqa1bqa1a5boa5boa5a5bja5bja5bebjbebjbebebvbebvbAbxbAbxbGbFbxbF", +"btbEbbbEbbbtbbbtbbbtbbbba8bba8bbbkbba8bba2a8a2a8a2a8a2a8aJa0aJa0aJa0aJa0aJaJaJa3aEaJaEaJaEaJaEaJataJataJataEataEatatatatatatatatazatanataaatalataaataaataa#iaaataa#iaaalaaalaaalaaalaaal#lal#lal#lal#lal#laa#lal#C#l#C#o#C#l#C#o#C#l#C#l#C#l#C#l#p#l#C#l#p#l#p#l#p#l#p#l#p#l#p#l#p#l#p#C#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p.l#p#p#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l#p.l.h.l.h.l.h.l.h.l.h.l.h.l.h.l.h.l.h.l.h.l.h.l.k.l.h.l.k.l.h.l.k.l.j.l.k.l.j.k.k.k.j.k.k.k.j.k.5.k.j.k.j.k.j.k.j.k.j.k.j.k.i.k.i.k.i.k.i.k" +".i.k.i.k.i.k.i.k.ibi.ia4.ibi.ia4.ibi.ia4.ia4.ia4.ia4bf.ibfa4bf.ibf.ibf.ibf.ibfbfbfbfbfbfbcbfbfbfbcbfbcbfbpbfaYbfbpbfbpbfbpbfbpbfbpb#bpb#bpb#bpaYbpb#bpbpa6bpa6bpa6bpa6bpa6a6a6a6bHa6a6a6bDa6bHa6baa6baa6baa6babHbaaWbablbablbablbablbababgbabgbabgbabgaIbgaIbgbgbgbgbgbgaLbgaZbgbnbgaLbgbnaZbnaZbnaZbnbyaNbyaNbnaNbnaNaNbwaNbwaNbwaNaXbwaXbwaXbwaQaXaQaXbraXbraXaOaXaObraObBaOaObsaObsaOa1aOa1bsaRbsa1a1bqa1bqboa5boa5bobjbdbja5bjbjbebjbebebAbebvbebxbAbFbAbFbx", +"bCbEbCbEbCbtbCbbbEbbbCbbbtbbbtbbbba8bba8bba8bba8bba0bba0a8a2a8a0a8aJa8aJa0aJa0aJa0aJa0aJa3aJa3aEa3aEa3aEaJata3ataJataJataEataEatatatatatatatatatat#iatalatalatalataaatal#iaaatal#iaa#iaa#iaaalaaalaaalaaal#lal#lal#lal#lal#lal#lal#lal#l#o#l#o#l#o#C#o#C#o#C#o#C#o#C#o#C#o#p#o#p#o#p#o#p#l#p#o#p#l#p#o#p#l#p#o#p.h#p#o#p.h#p.j#p.h#p.j#p.h#p.j#p.h#p.j#p.h#p.j#p.h#p.j#p.h#p.j#p.h.l.j#p.h.l.j#p.j.l.j#p.j.l.j.l.j.l.j.l.j.k.j.k.j.k.j.k.j.k.j.k.j.k.j.k.j.k.j.k.j.k.j.k.j.k.j.k.j.k.i.k.i.k.i.k.i.k.i.5.i.k.i.5.i.k.i.j.ia4.i" +".i.ia4.i.i.ia4.i.i.i.i.i.i.i.i.i.ibf.ibf.ibf.ibf.ibf.ibc.ibf.ibcbfbcbfbcbfbcbfbIbfbcbfbIbfbpbfbpbfbpbfbpbfbpbfbpbcbpb#bpaYbpaYbpbpbpbpbpbpa6bpa6bpa6bpa6bpa6bpbDa6a6a6bDa6bDa6bDa6bDa6baa6baa6babHbabHbablbablbababababJbaaIbabgbabgbabgbabgaIbgbgbgbgbmbgbgbgaLbgaLbgbnbgbnbgbnaZbnaZbnbnbnbyaNbnaNbnaNbnaNbnbwaNbwaNbwaNbwaNaQbwaQbwaQbwaQaXbraXbraXbrbraObBaObraOaObsaObsaObsbsa1bsaRbsaRa1bqa1bqa1bqboa5boa5bqa5a5bja5bjbjbebjbebjbvbebvbebxbAbxbAbFbxbFbFbK", +"bEbCbtbEbbbEbbbtbbbtbbbbbbbba8bba8bbbkbba8bba2a8a2a8a2a8a2a8aJa0aJa0aJa0aJa0aJaJaJa3aEaJaEa3aEaJaEaJataJataJataEataEatatatatatatatatatatatataaatalataaataaataaataaataa#iaa#iaaalaaalaaalaaal#lal#lal#lal#lal#lal#lal#l#l#Cal#C#l#C#o#C#l#C#o#C#l#C#l#C#l#C#l#p#l#p#l#p#l#p#l#p#l#p#l#p#l#p#l#p.h#p#l#p.h#p.h#p.h#p.h#p.h#p.h#p.h#p.h#p.h#p.h#p.h#p.h.l.h#p.h.l.h#p.h.l.h.l.h.l.h.l.h.l.h.l.h.l.h.l.h.l.h.l.h.l.h.l.h.l.h.l.h.l.h.l.h.l.h.l.j.l.h.l.j.k.h.k.j.k.h.k.j.k.j.k.j.k.j.k.j.k.j.k.j.k.j.k.j.k.i.k.i.k.i.k.i.k.i.k.i.k" +".i.k.i.k.i.5.ibi.ia4.ibi.ia4.ia4.i.i.ia4.i.ibfa4bf.ibf.ibf.ibf.ibf.ibf.ibfbfbfbfbfbfbcbfbfbfbcbfbcbfbpbfaYbfbpbfbpbfbpbfbpbfbpb#bpb#bpb#bpbpbpb#bpbpa6bpa6bpa6bpa6bpa6bpa6a6bHa6bHa6bDa6bHa6baa6baa6baa6babHbabHbablbablbablbablbababgblbgbabgbabgbabgaIbgbgbgbgbgbgbmbgaZbgbnbgbnbgbnaZbnaZbnaZbnbybnbyaNbnaNbnaNbnbwaNbwaNbwaNbwbwaXbwaXbwaQbwaQaXbraXbraXbraXaObBaObBaOaObsaObsaObsaOa1bsa1bsa1a1bqa1bqboa5boa5bobjbdbja5bja5bebjbebjbAbebvbebvbAbxbAbFbGbFbL", +"bCbEbCbEbCbEbCbtbCbbbEbbbCbbbtbbbtbbbba8bba8bba8bba8bba0bba0a8a2a8a0a8aJa8aJa0aJa0aJa0aJa0aJa3aJa3aEa3aEa3aEaJata3ataJata3ataJataEatatatatatatatatatat#iatatatalatalatalatalataaatal#iaa#ial#iaa#iaa#iaaalaaal#lal#lal#lal#lal#lal#lal#lal#l#o#lal#l#o#l#o#l#o#l#o#C#o#C#o#C#o#p#o#C#o#p#o#p#o#p#o#p#o#p#o#p#o#p#o#p#o#p#o#p.j#p#o#p.j#p#o#p.j#p.j#p.j#p.j#p.j#p.j#p.j#p.j#p.j#p.j#p.j#p.j#p.j#p.j#p.j#p.j.h.j.k.j.h.j.k.j.h.j.k.j.h.j.k.j.h.j.k.j.h.j.k.j.h.j.k.j.h.j.k.j.h.i.k.i.h.i.k.i.j.i.k.i.j.i.k.i.j.i.k.i.j.i.i.i.i.i" +".i.i.i.i.i.i.i.i.i.i.i.i.ibf.ibf.ibf.ibf.ibc.ibf.ibc.ibfbfbcbfbcbfbIbfbcbfbIbfbIbfbIbfbpbfbpbfbpbfbpbfbpbfbpbcbpb#bpbpbpaYbpbpbpbpbpbpa6bpa6bpa6bpa6bpa6bpbDa6bHa6bDa6bDa6bDa6bDa6baa6baa6babHbabHbablbablbababablbJbabJbabgbabgbabgbabgbabgbgbgbgbmbgbgbgbmbgaLbgbnbgbnbgbnaZbnaZbnbnbnbybnbnaNbnaNbnaNbnbwaNbwaNbwaNbwaNaQbwaQbwaQbwaQaXbraXbraXbrbraObBaObraObrbsaObsaObsaOa1bsaRbsaRbsbqa1bqa1bqboa5boa5bqa5a5bja5bja5bebjbebjbvbebvbebvbAbxbAbFbxbFbxbFbFbK", +"bEbEbEbCbbbEbbbEbbbtbbbtbbbbbbbba8bba8bbbkbba8bba2a8a2a8a2a8a2a8aJa0aJa0aJa0aJa0aJa3aJa3aJaJaEa3aEaJaEaJataJataJataEataEatatatatatatatatatatatataaatalataaatalataaataaataa#iaa#iaa#iaaalaaalaaal#lalaaal#lal#lal#lal#lal#lal#lal#l#l#C#o#C#l#C#o#C#l#C#o#C#l#C#o#p#l#C#l#p#l#p#l#p#l#p#l#p#l#p#l#p#l#p#l#p.h#p#l#p.h#p.h#p.h#p.h#p.h#p.h#p.h#p.h#p.h#p.h#p.h#p.h#p.h#p.h.l.h#p.h.l.h#p.h.l.h.l.h.l.h.l.h.l.h.l.h.l.h.l.j.l.h.l.j.l.h.l.j.k.h.k.j.k.h.k.j.k.j.k.j.k.j.k.j.k.j.k.j.k.j.k.j.k.j.k.i.k.i.k.i.k.i.k.i.k.i.k.i.k.i.k" +".i.k.ia4.ibi.i.i.ibi.i.i.ia4.i.i.i.i.i.ibf.ibf.ibf.ibf.ibf.ibf.ibf.ibfbfbcbfbfbfbcbfbfbfbIbfbcbfbpbfbpbfbpbfbpbfbpbfbpbfbpb#bpbpbpb#bpbpbpbMbpbpa6bpa6bpa6bpa6bpa6bpa6a6bHa6bHa6bDa6bHa6bDa6baa6baa6babHbabHbablbablbablbablbababgblbgbabgbabgbabgaIbgbgbgbgbgbgbmbgaZbgbnbgbnbgbnaZbnaZbnaZbnbybnbyaNbnaNbyaNbnbwaNbwaNbwaNbwbwaXbwaXbwaQbwaQaXbraXbraXbraXaObBaObBaObrbsaObsaObsaOa1bsa1bsa1a1bqa1bqa1bqboa5boa5bobja5bja5bjbjbebjbebebvbebvbAbxbAbFbAbFbGbFbF", +"bNbEbCbEbCbEbCbtbCbtbCbbbEbbbCbbbtbbbtbbbba8bba8bba8bba8bba0bba0a8a2a8a0a8aJa8aJa0aJa0aJa0aJa0aJa3aJa3aJa3aEa3aEa3ata3ataJata3ataJataEatatatatatatatatatatatatatat#iatalatalatalatalatal#iaa#ial#iaa#ial#iaa#iaaal#lalaaal#lal#lal#lal#lal#lal#l#o#lal#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o#p#o#C#o#p#o#p#o#p#o#p#o#p#o#p#o#p#o#p#o#p#o#p#o#p#o#p.j#p#o#p.j#p.j#p.j#p.j#p.j#p.j#p.j#p.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.i.h.i.h.i.h.i.j.i.h.i.j.i.h.i.j.i.h.i.j.i.j.i.i.i.i.i.i.i.i.i" +".i.i.i.i.i.i.i.i.ibf.ibf.ibf.ibf.ibf.ibc.ibf.ibI.ibfbfbIbfbcbfbIbfbIbfbIbfbIbfbIbfbpbfbpbfbpbfbpbfbpbfbpbIbpb#bpbpbpbpbpbpbpbpbpbpa6bpa6bpa6bpbHbpa6bpbDa6bHa6bDa6bDa6bDa6bDa6babHbaa6babHbabHbabHbablbababablbJbabJbabgbabgbabgbabgbabgbgbgbgbmbgbgbgbmbgaLbgbnbgbnbgbnbgbnaZbnbnbnbybnbnaNbnaNbnaNbnbwaNbwaNbwaNbwaNbubwaQbwaQbwaQbwbraXbraXbrbBbrbBaObraObrbsaObsaObsaObsbsaRbsa1bsbqa1bqa1bqbobqboa5bqa5bqbja5bja5bjbjbebjbvbebvbebvbAbxbAbFbvbFbxbFbFbKbFbO", +"bEbCbEbEbEbCbbbEbbbEbbbtbbbtbbbbbbbba8bba8bbbkbba8bba2a8a2a8a2a8a2a8aJa0aJa0aJa0aJa0aJa3aJa3aJaJaEa3aEaJaEaJataJataJataJataEatatatatatatatatatatatat#ratalataaatalataaataaataa#iaa#iaa#iaa#iaaalaaalaaalaaal#lal#lal#lal#lal#lal#lal#l#o#lal#l#o#l#o#C#l#C#o#C#l#C#o#C#l#C#o#p#l#C#o#p#l#p#o#p#l#p#l#p#l#p#l#p#l#p#l#p.h#p#l#p.h#p.h#p.h#p.h#p.h#p.h#p.h#p.h#p.h#p.h#p.h#p.h#p.h#p.h#p.h#p.j.l.h#p.j.l.h#p.j.l.h#p.j.l.h#p.j.k.h.k.j.k.h.k.j.k.j.k.j.k.j.k.j.k.j.k.j.k.j.k.j.k.j.k.j.k.i.k.i.k.i.k.i.k.i.k.i.k.i.h.i.k.i.j.i.k" +".i.i.ibi.i.i.i.i.i.i.i.i.i.i.i.ibf.ibf.ibf.ibf.ibf.ibf.ibf.ibfbfbfbfbIbfbfbfbIbfbcbfbIbfbIbfbpbfbpbfbpbfbpbfbpbfbpbfbpb#bpbpbpbMbpbpbpbpbpbpa6bpa6bpa6bpa6bpbHbpa6a6bHa6bHa6bDa6bHa6bDa6babHbaa6babHbabHbablbablbablbJblbababgblbgbabgbabgbabgaIbgbgbgbgbgbgbmbgaZbgbnbgbnbgbnbgbnaZbnaZbnbybnbyaNbnaNbyaNbnbwaNbwaNbwaNbwbwbwbwaXbwaQbwaQbwbraXbraXbraXaObBaObBaObrbsaObsaObsaObsbsa1bsa1bsbqa1bqa1bqboa5boa5bobja5bja5bjbjbebjbebjbAbebAbAbxbAbxbAbFbGbFbFbKbF", +"bPbEbNbEbCbEbCbtbCbtbCbbbCbbbEbbbCbbbtbbbtbbbba8bba8bba8bba8bba0bba0a8a2a8a0a8aJa8a2a0aJa0aJa0aJa0aJa3aJa3aJa3aEa3aEa3ata3ataJata3ataJataJatatatatatatatatatatatatatat#iat#iatalatalatalatal#iaaatal#iaa#ial#iaa#ial#iaa#iaaal#lal#lal#lal#lal#lal#lal#lal#l#o#lal#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o.h#o#l#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h.j.h#o.h.j.h#o.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.i.h.i.h.i.h.i.j.i.h.i.j.i.h.i.j.i.h.i.j.i.j.i.j.i.i.i.i.i.i.i.i.i.i.i.i.i" +".i.i.i.i.i.i.ibf.ibf.ibf.i.d.ibf.ibI.ibf.ibI.ibIbfbIbfbIbfbIbfbIbfbIbfbIbfbpbfbpbfbpbfbpbfbpbIbpbfbpbpbpbMbpbpbpbpbpbpbpbpbpbpa6bpa6bpa6bpbHbpbHbpbDa6bHa6bDa6bDa6bDa6bDa6babHbabHbabHbabHbabHbablbababablbJbabJbabgbabgbabgbabgbabgbgbgbgbmbgbgbgbmbgaLbgbnbgbnbgbnbgbnaZbnbybnbybnbnaNbnaNbnaNbnbwbnbwaNbwbwbwbwbubwaXbwaQbwaQbwbraXbraXbrbBbrbBaObraObrbsbrbsaObsaObsbsaRbsa1bsbqbsbqa1bqa1bqboa5bqa5bobja5bja5bjbjbebjbvbjbAbebvbAbvbAbFbAbFbGbFbFbFbFbObFbO", +"bEbCbEbCbEbEbtbCbbbEbbbEbbbtbbbtbbbbbbbba8bba8bba8bba8bba2a8a2a8a2a8a2a8aJa8aJa0aJa0aJa0aJa3aJa3aJaJaEa3aEaJaEaJataJataJataJataEatatataEatatatatatatatat#iatatataaatalataaatalataa#iaaataa#iaa#iaa#iaaalaaalaaal#lal#lal#lal#lal#lal#lal#lal#lal#l#o#l#o#l#o#l#o#l#l#C#o#C#l#C#o#p#l#C#o#p#l#p#o#p#l#p#o#p#l#p#o#p#l#p#o#p#l#p#o#p.h#p#o#p.h#p#o#p.h#p.j#p.h#p.j#p.h#p.j#p.h#p.j#p.h#p.j#p.h#p.j#p.h#p.j#p.h.h.j.h.h.h.j.k.j.h.j.k.j.h.j.k.j.h.j.k.j.h.j.k.j.h.j.k.j.h.j.k.i.h.i.k.i.h.i.k.i.h.i.k.i.h.i.k.i.h.i.h.i.j.i.g.i.i" +".i.g.i.i.i.i.i.i.i.i.i.i.i.ibf.ibf.ibf.ibf.ibf.ibf.ibf.i.dbfbfbfbIbf.dbfbIbfbIbfbIbfbIbfbpbfbpbfbpbfbpbfbpbfbp.dbpb#bpbpbpbMbpbpbpbpbpbpa6bpa6bpa6bpa6bpbHbpbHa6bHa6bHa6bDa6bHa6bDa6babHbabHbabHbabHbablbablbablbJblbJbabJblbgbabgbabgbJbgbgbgbgbgbgbgbgbgbgaZbgbnbgbnbgbnbgbnaZbnaZbnbybnbyaNbnaNbyaNbnbwbnbwaNbwaNbwbwbwbwaXbwaQbwaXbwbraXbraXbraXbrbBaObBaObrbsaObsaObsaObsbsa1bsa1bsbqa1bqa1bqa1bqboa5boa5bqbjbdbjbjbjbjbebjbAbebAbAbvbAbxbAbFbGbFbFbFbFbObF", +"bPbEbPbEbNbEbCbEbCbtbCbtbCbbbCbbbEbbbQbbbtbbbtbbbba8bba8bba8bba8bba0bba0a8a2a8a0a8aJa8a2a8aJa0aJa0aJa0aJa3aJa3aJa3aJa3aEa3ata3aEaJata3ataJata3atatataEatatatatatatatatatat#iat#iat#iatalatalatalatalatal#iaa#ial#iaa#ial#iaa#ial#i#l#iaaal#lal#lal#lal#lal#lal#lal#lal#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o.h#o#l#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h.j.h#o.h.j.h#o.h.j.h#o.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.i.h.i.h.i.h.i.j.i.h.i.j.i.h.i.j.i.h.i.j.i.j.i.j.i.j.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i" +".i.i.i.e.ibf.i.d.ibf.ibI.i.d.ibI.i.d.ibIbfbIbfbIbfbIbfbIbfbIbfbIbfbIbfbpbfbpbfbp.dbpbfbpbIbp.dbpbpbpbpbpbpbpbpbpbpbpbpbpbpa6bpbHbpa6bpbHbpbHbpbDa6bHa6bDa6bDa6bDbHbDa6babHbabHbabHbabHbabHbablbJbabababJbabJbabgbabgbabgbJbgbabgbJbgbgbmbgbgbgbRbgbnbgbnbgbnbgbnbgbnaZbnbybnbybnbnbnbnbwbnbwbnbwbnbwaNbwbwbwbwbubwaXbwaQbwaQbwbraXbraXbrbBbrbBaObraObrbsbrbsaObsaObsaObsbsa1bsbqbsbqa1bqa1bqboa5bqa5bobjbqbja5bjbjbjbjbebjbAbebvbAbvbAbxbAbFbAbFbFbFbFbObFbObKbS", +"bEbCbEbCbEbCbtbCbtbCbbbEbbbEbbbtbbbtbbbbbbbba8bba8bba8bba8bba2a8a0a8a2a8a2a8aJa8aJa0aJa0aJa0aJa3aJa0aJaJaEa3aEaJaEa3ataJataJataJataJataEataEatatatatatatatatatatatat#ratalataaatalataaataaataa#iaa#iaa#iaa#iaa#iaaal#lalaaal#lal#lal#lal#lal#lal#lal#l#o#lal#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o#p#l#C#o#p#l#p#o#p#l#p#o#p#l#p#o#p#l#p#o#p#l#p#o#p#l#p#o#p.h#p#o#p.h#p.j#p.h#p.j#p.h#p.j.h.h.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.i.h.i.h.i.h.i.h.i.h.i.h.i.h.i.h.i.h.i.j.i.h.i.i.i.g.i.i.i.i" +".i.i.i.i.i.i.i.i.i.i.i.ibf.ibf.ibf.i.d.ibf.i.d.ibf.ibIbf.dbfbIbf.dbfbIbfbIbfbIbfbpbfbpbfbpbfbpbfbp.dbpbfbpbMbpbMbpbpbpbMbpbpbpbpbpbpa6bpa6bpbHbpa6bpbHbpbHa6bHa6bHa6bDa6bHbHbDa6babHbabHbabHbabHbabHbablbablbJblbJbabJblbgbabgbabgbJbgbJbgbgbgbgbgbgbgbgbgbgbnbgbnbgbnbgbnbybnbybnbybnbybnbnbwbyaNbnbwbnbwaNbwaNbwbwbwbwaXbwaQbwaXbwbraXbraXbraXbrbBaObBaObrbsbBbsaObsaObsbsa1bsa1bsbqbsboa1bqa1bqboa5boa5bqbjbdbjbjbjbjbebjbAbjbAbAbvbAbxbAbFbAbFbFbFbFbKbFbObF", +"bPbCbPbEbPbEbCbEbCbEbCbtbCbtbCbbbCbbbtbbbQbbbtbbbtbbbba8bba8bba8bba8bba8bba0a8a0a8a0a8a2a8a0a8aJa0aJa0aJa0aJa3aJa3aJa3aJa3aEa3ata3aEa3ata3ataJata3ataJataEatatatatatatatatatat#iatatat#iat#iatalatalatalatal#ial#ial#iaa#ial#iaa#ial#i#l#ial#i#l#i#oal#lal#lal#lal#lal#lal#l#o#lal#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o.h#o#l#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h.j.h#o.h.j.h#o.h.j.h#o.h.i.h.e.h.i.h.e.j.i.h.e.j.i.h.e.j.i.h.i.j.i.j.e.j.i.j.e.j.i.i.e.i.i.i.e.i.i.i.e.i.i.i.e.i.i.i.e.i.i" +".i.d.i.d.i.d.i.d.ibI.i.d.ibI.i.d.ibIbfbIbfbIbfbIbfbIbfbIbfbIbfbIbfbp.dbpbfbp.dbp.dbpbIbp.dbpbpbpbpbpbpbpbpbpbpbpbpbTbpa6bpbHbpbHbpbHbpbHbpbDa6bHa6bDa6bDa6bDbHbDbHbabHbabHbabHbabHbabHbablbJbabJbabJbabJbabJbabgbabgbJbgbJbgbJbgbgbmbgbgbgbRbgbRbgbnbgbnbgbnbgbnaZbnbybnbybnbnbnbnbwbnbwbnbwbnbwaNbwbwbwbwbubwbwbwaQbwaQbwbrbwbraXbrbBbrbBbrbraObrbsbrbsaObsaObsaObsbsa1bsbqbsbqa1bqa1bqbobqboa5bobjbqbja5bjbjbjbjbebjbAbjbvbAbvbAbvbAbFbAbFbFbFbFbFbFbObFbSbObS", +"bEbNbEbCbEbCbEbCbtbCbtbCbbbEbbbEbbbtbbbtbbbbbbbba8bba8bba8bba8bba2a8a0a8a2a8a2a8aJa8aJa0aJa0aJa0aJa3aJa0aJa3aJa3aEaJaEa3ataJataJataJataJataJataEatatatatatatatatatatatat#iat#iataaatalataaatalataa#iaa#iaa#iaa#iaa#iaa#iaa#iaaal#lal#lal#lal#lal#lal#lal#lal#lal#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o.h#o#l#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h.j.h#o.h.j.h#o.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.j.h.i.h.i.h.i.h.i.h.i.h.i.h.i.h.i.h.i.h.i.j.i.h.i.j.i.g.i.i.i.g.i.i.i.i.i.i" +".i.i.i.i.i.i.i.i.d.ibf.i.d.ibf.i.d.ibf.i.d.i.d.ibIbf.dbfbIbf.dbfbIbfbIbfbIbfbpbfbpbfbp.dbpbfbp.dbp.dbpbMbpbMbpbpbpbMbpbpbpbpbpbpbHbpa6bpbHbpbHbpbHbpbHa6bHa6bHa6bDa6bHbHbDbHbabHbabHbabHbabHbabHbJblbablbJblbJbabJblbgbabgbabgbJbgbJbgbgbgbgbgbgbUbgbgbgbnbgbnbgbnbgbnbUbnbybnbybnbybnbnbwbybwbnbwbnbwaNbwaNbwbwbwbwbwbwaQbwaXbwbrbwbraXbraXbrbBbrbBaObrbsbBbsaObsaObsbsbsbsa1bsbqbsboa1bqa1bqboa5boa5bobjbdbjbjbjbjbebjbAbjbAbebvbAbvbAbFbAbFbLbFbLbFbFbObFbObO", +"bPbCbPbCbPbEbPbEbCbEbCbEbCbtbCbtbCbbbCbbbQbbbQbbbtbbbtbbbba8bba8bba8bba8bba8bba0a8a0a8a0a8a2a8a0a8aJa0aJa0aJa0aJa3aJa3aJa3aJa3aJa3aEa3aEa3ata3ataJata3ataJata3atatatatatatatatatatatatatat#iat#iat#iat#iatalatal#ialatal#ial#ial#ial#ial#iaa#ial#i#l#ial#i#l#i#o#i#l#i#oal#lal#lal#lal#l#o#lal#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o.h#o#l#o.h#o#l#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h.e.h.e.h.e.h.e.j.e.h.e.j.e.h.e.j.e.h.e.j.e.h.e.j.i.j.e.j.i.j.e.j.i.i.e.i.e.i.e.i.e.i.e.i.e.i.e.i.e.i.e.i.e.i.e.i.d.i.d" +".i.d.ibI.i.d.ibI.i.d.ibI.ibIbfbIbfbIbfbIbfbIbfbI.dbIbfbI.dbIbfbp.dbp.dbp.dbp.dbpbIbp.dbpbpbpbpbpbpbpbpbTbpbpbpbTbpbHbpbHbpbHbpbHbpbHbpbDa6bHa6bDbHbDa6bDbHbDbHbabHbabHbabHbabHbJbHbablbJbabJbabJbabJbabJbabgbabgbJbgbJbgbJbgbgbmbgbgbgbRbgbRbgbnbgbnbgbnbUbnbgbnbybnbybnbnbnbnbwbnbwbnbwbnbwbnbwbwbwbwbubwbwbwbrbwaQbwbrbwbraXbrbBbrbBbrbraObrbsbrbsbrbsaObsaObsbsa1bsbqbsbqbsbqa1bqa1bqboa5bobjbqbja5bjbjbjbjbebjbAbjbvbebvbAbvbAbxbAbFbvbFbFbFbFbObFbObObObObV", +"bEbPbEbNbEbCbEbCbEbCbtbCbtbCbbbEbbbEbbbtbbbtbbbbbbbba8bba8bba8bba8bba2a8a0a8a2a8a2a8aJa8a2a0aJa0aJa0aJa0aJa0aJa3aJa3aEaJaEa3ataJaEaJataJataJataJataEatatatatatatatatatatatat#iat#iat#iatalataaatalataa#ialataa#iaa#iaa#iaa#iaa#iaa#i#l#iaaal#lal#lal#lal#lal#lal#lal#l#o#lal#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o.h#o#l#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h.j.h#o.h.j.h#o.h.j.h#o.h.j.h#o.h.j.h.j.h.j.h.j.h.j.h.i.h.i.h.i.h.i.h.i.h.i.h.i.h.i.h.i.h.i.j.i.h.i.j.i.h.i.i.i.g.i.i.i.i.i.i.e.i.i.i.e.i" +".i.i.e.ibf.i.d.i.d.i.d.i.d.i.d.i.d.i.d.i.dbfbIbf.dbfbIbfbIbfbIbfbIbfbIbfbp.dbpbfbp.dbp.dbp.dbp.dbpbMbpbMbpbpbpbMbpbpbpbpbpbpbHbpbHbpbHbpbHbpbHbpbHa6bHa6bHbHbDa6bHbHbDbHbabHbabHbabHbabHbabHbJblbJblbJblbJbabJblbgbabgbabgbJbgbJbgbgbgbgbgbgbUbgbUbgbnbgbnbgbnbgbnbUbnbybnbybnbybnbnbWbybwbnbwbnbwbnbwaNbwbwbwbwbwbwbrbwbBbwbrbwbraXbraXbrbBbrbBaObrbsbBbsbrbsaObsbsbsbsa1bsbobsboa1bqa1bqbobqboa5bobjbobjbjbjbjbjbjbAbjbAbjbvbAbvbAbFbAbFbAbFbLbFbFbObFbObObObO", +"bPbPbPbCbPbCbPbEbPbEbCbEbCbEbCbtbCbtbCbbbCbbbQbbbQbbbtbbbtbbbba8bba8bba8bba8bba8bba0a8a0a8a0a8a2a8a0a8aJa8aJa0aJa0aJa3aJa0aJa3aJa3aJa3aEa3aEa3ata3ata3ata3ataJata3at.batatatatatatatatatatatat#iat#iat#iat#iat#iatalatalatal#ial#ial#ial#ial#ial#ial#iaa#ial#i#l#i#o#i#l#i#o#i#l#i#o#i#l#i#o#i#lal#o#o#lal#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o.h#o#l#o.h#o#l#o.h#o.h#o.h.e.j.e.h.e.j.e.h.e.j.e.h.e.j.e.h.e.j.e.h.e.j.e.h.e.j.e.h.e.j.e.j.e.j.e.j.e.j.e.j.e.i.e.i.e.i.e.i.e.i.e.i.e.i.e.i.e.i.e.i.e.i.e.i.d.i.d.i.d.i.d" +".ibI.i.d.ibI.i.d.ibI.ibIbfbI.dbIbfbI.dbIbfbI.dbI.dbI.dbp.dbp.dbp.dbpbIbp.dbpbIbp.dbpbpbpbpbTbpbpbpbTbpbTbpbTbpbHbpbHbpbHbpbHbpbHbpbDbTbHa6bDbHbDbHbDbHbDbHbabHbabHbabHbabHbJbDbJblbJbabJbabJbabJbabJbJbgbabgbJbgbJbgbJbgbgbmbgbgbgbRbgbRbgbnbgbnbgbnbUbnbUbnbybnbybnbnbnbnbWbnbwbnbwbnbwbnbwbwbwbwbubwbwbwbrbwbrbwbrbwbraXbrbBbrbBbrbraObBbsbrbsbrbsaObsaObsbsbsbsbqbsbqbsbqa1bqa1bqbobqbobjbqbjbqbjbjbjbjbjbjbebjbvbjbvbAbvbAbxbAbFbvbFbFbFbFbXbFbObXbObObVbObY", +"bEbPbEbPbEbNbEbCbEbCbEbCbtbCbtbCbbbEbbbEbbbtbbbtbbbbbbbba8bba8bba8bba8bba2a8a0a8a2a8a2a8a2a8a2a8aJa0aJa0aJa0aJa0aJa3aJa3aJaJaEa3aEaJaEa3ataJataJataJataJatatatatatatatatatatatat#iatatat#iat#iatalatalataaatalataa#ial#iaa#iaa#iaa#iaa#iaa#iaa#i#l#i#l#i#lal#lal#lal#lal#lal#lal#l#o#lal#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o.h#o#l#o.h#o#l#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h.i.h.e.h.i.h.e.h.i.h.e.h.i.h.e.h.i.h.e.h.i.j.e.h.i.j.e.h.i.i.e.g.i.i.e.i.i.i.e.i.i.i.e.i.e.i.e.i.e.i" +".d.i.d.i.d.i.d.i.d.i.d.i.d.i.d.ibI.i.dbfbIbf.dbfbIbfbIbfbIbfbI.dbIbfbp.dbp.dbp.dbp.dbp.dbp.dbpbpbpbMbpbpbpbMbpbpbTbpbpbpbHbpbHbpbHbpbHbpbHbpbHa6bHa6bHbHbDbHbHbHbDbHbabHbabHbabHbabHbabHbJblbJblbJblbJbabJblbgbJbgbJbgbJbgbJbgbJbgbgbgbgbUbgbUbgbRbgbnbgbnbgbnbUbnbybnbybnbybnbybWbybwbnbwbnbwbnbwaNbwbwbwbwbwbwbrbwbBbwbrbwbraXbraXbrbBbrbBaObBbsbBbsbrbsaObsbsbsbsbsbsbobsbobsbqa1bqbobqboa5bobjbobjbjbjbjbjbjbAbjbAbjbvbAbAbAbZbAbFbAbFbLbFbFbXbFbObXbObOb0bO", +"bPbPbPb1bPbCbPbCbPbEbPbEbCbEbCbEbCbtbCbtbCbbbCbbbQbbbQbbbtbbbQbbbba8bba8bba8bba8bba8bba0a8a0a8a0a8a2a8a0a8aJa8a3a0aJa0aJa0aJa0aJa3aJa3aJa3aJa3aEa3ata3ata3ata3ataJata3at.bat#gatatatatatatatatatat#iatatat#iat#iat#iat#iat#iatal#ialatal#ial#ial#ial#ial#ial#ial#i#o#ial#i#l#i#o#i#l#i#o#i#l#i#o#i#l#i#o#i#l#i#o.e#l#i#o.e#l.e#o.e#l.e#o.e#l.e#o.e#l.e#o.e#l.e#o.e#l.e#o.e.h.e#o.e.h.e#o.e.h.e#o.e.h.e.j.e.h.e.j.e.h.e.j.e.j.e.j.e.j.e.j.e.j.e.j.e.j.e.i.e.i.e.i.e.i.e.i.e.i.e.i.e.i.e.i.e.i.e.i.e.i.e.i.d.i.d.i.d.ibI.i.d.ibI" +".i.d.ibI.ebI.ibI.dbIbfbI.dbI.dbI.dbI.dbI.dbI.dbI.dbp.dbp.dbp.dbpbIbp.dbpbIbpbIbTbpbpbpbTbpbTbpbTbpbTbpbTbpbHbpbHbpbHbpbDbpbHbpbDbHbHbHbDbHbDbHbDbHbDbHbDbHbabHbJbHbabHbJbDbJblbJbabJbabJbabJbabJbJbgbJbgbJbgbJbgbJbgbgbRbgbgbgbRbgbRbgbnbgbnbgbnbUbnbUbnbybnbybnbnbnbnbWbnbwbnbwbnbwbnbwbWbwbwbubwbwbwb2bwbrbwbrbwbrbwbrbBbrbBbrbrbrbBbsbrbsbrbsbrbsaObsbsbsbsaRbsbqbsbqbsbqa1bqbobqbobjbqbjbqbjbjbjbjbjbjbebjbvbjbvbAbvbAbvbAbFbvbFbLbFbFbFbFbObXbObObSbObYbObY", +"b1bPbEbPbEbPbEbNbEbCbEbCbEbCbtbCbtbCbbbEbbbCbbbtbbbtbbbbbbbba8bba8bba8bba8bba2a8a0a8a2a8a2a8a2a8a2a8aJa0aJa0aJa0aJa0aJa3aJa3aJa3aEa3aEaJaEa3ataJataJataJataJat.bataEatatatatatatatatatatatat#iat#iat#iat#iatalatalataa#ial#iaa#ial#iaa#ial#iaa#iaa#i#l#iaa#i#l#i#l#i#l#i#lal#lal#lal#lal#lal#l#o#lal#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o.h#o#l#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h#o.h.e.h.e.h.e.h.e.h.e.h.e.h.e.h.e.h.e.h.e.h.e.h.e.h.e.j.e.h.e.j.e.h.e.j.e.g.e.i.e.i.e.i.e.i.e.i.e.i.e.i.e.i.e.i.e.i.e.i.d.i" +".d.i.d.i.d.i.d.i.d.i.d.i.d.ibIbf.dbfbIbfbI.dbIbfbI.dbIbfbI.dbp.dbp.dbp.dbp.dbp.dbp.dbp.dbpbpbpbMbpbpbTbpbpbpbTbpbTbpbHbpbHbpbHbpbHbpbHbpbHbHbHa6bHbHbDbHbHbHbDbHbabHbabHbabHbJbHbJbHbJblbJblbJblbJbabJblbgbJbgbJbgbJbgbJbgbJbgbgbgbgbUbgbUbgbRbgbnbgbnbgbnbUbnbUbnbybnbybnbybWbybwbnbwbnbwbnbwbnbwbwbwbwbwbwb3bwbBbwbrbwbrb3brbBbrbBbrbBbrbBbsbBbsbrbsaObsbsbsbsbsbsbobsbobsbqa1bqbobqbobqbobjbobjbqbjbjbjbjb4bjbAbjbAbebAbAbvbAbFbAbFb5bFbFbXbFbObXbObObObObYbO", +"bPbPbPbPbPb1bPbCbPbCbPbEbPbEbCbEbCbEbCbtbCbtbCbbbCbbbQbbbQbbbtbbbQbbbba8bba8bba8bba8bba8bba0a8a0a8a0a8a0a8a0a8aJa8a3a0aJa0aJa0aJa0aJa3aJa3aJa3aJa3aEa3ata3ata3ata3ata3ata3at.bata3at.batb6atatatatatatatatatat#iat#iat#iat#iat#iat#iat#iatal#ial#ial#ial#ial#ial#ial#ial#ial#i#o#ial#i#o#i#o#i#o#i#o#i#l#i#o#i#l#i#o#i#l#i#o.e#l#i#o.e#l.e#o.e#l.e#o.e#l.e#o.e#l.e#o.e#l.e#o.e#l.e#o.e#l.e#o.e#o.e#o.e.j.e#o.e.j.e#o.e.j.e#o.e.j.e#o.e.j.e.e.e.i.e.i.e.i.e.i.e.i.e.i.e.i.e.i.e.i.e.e.e.i.e.e.e.i.d.e.d.ibI.e.d.ibI.e.d.ibI.ebI" +".ibI.ebI.dbI.dbI.dbI.dbI.dbI.dbI.dbI.dbI.dbp.dbp.dbp.dbp.dbpbIbp.dbTbIbpbpbTbpbTbpbTbpbTbpbTbpbTbpbTbpbHbpbHbpbHbpbDbTbHbpbDbHbDbHbDbHbDbHbDbHbDbHbDbHbabHbJbHbJbHbJbDbJbHbJbabJbabJbJbJbabJbJbgbJbgbJbgbJbgbJbgbgbRbgbUbgbRbgbRbgbRbgbnbgbnbUbnbUbnbUbnbybnbnbnbnbWbnbwbnbwbnbwbnbwbWbwbwbwbwbwbwb2bwbrbwbrbwbrbwbrbBbrbBbrbrbrbBbsbrbsbrbsbrbsaObsbsbsbsb7bsbobsbqbsbqa1bqbobqbobjbqbjbqbjb8bjbjbjbjbjbjbvbjbAbjbvbAbvbAbFbAbFbAbFbFbFbFbObFbObXbSbObVbObYb0bY", +"bPbPb1bPbEbPbEbPbEbNbEbCbEbCbEbCbtbCbtbCbbbEbbbCbbbtbbbtbbbtbbbba8bba8bba8bba8bba8a8a0a8a2a8a0a8a2a8a2a8aJa0aJa0aJa0aJa0aJa3aJa3aJa3aJa3aEaJaEa3ataJata3ataJataJataJataJatatatatatatatatatatatat#iat#iat#iat#iat#iatalatal#ialataa#ial#iaa#ial#iaa#ial#iaa#iaa#i#l#iaa#i#l#i#l#i#l#i#l#i#l#i#l#i#l#i#lal#l#o#lal#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o#l#o.h#o#l#o.h.e#l.e.h.e.h.e.h.e.h.e.h.e.h.e.h.e.h.e.h.e.h.e.h.e.h.e.h.e.j.e.h.e.j.e.h.e.j.e.h.e.j.e.g.e.i.e.i.e.i.e.i.e.i.e.i.e.i.e.i.e.i.e.i.e.i.e.i.d.i.d.i.d.i" +".d.i.d.i.d.i.d.ibI.i.d.dbIbf.d.dbIbfbI.dbI.dbI.dbI.dbI.dbp.dbp.dbp.dbp.dbp.dbp.dbp.dbpbpbTbMbpbpbTbpbTbpbTbpbTbpbHbpbHbpbHbpbHbpbHbpbHbHbDbHbHbHbDbHbDbHbDbHbabHbabHbabHbJbHbJbHbJblbJblbJblbJbabJbabJbJbgbJbgbJbgbJbgbJbUbgbgbgbUbgbUbgbRbgbnbgbnbgbnbUbnbUbnbybnbybnbybWbybwbnbwbnbwbWbwbWbwbwbwbwbwbwb3bwbBbwbrbwbrbwbrbBbrbBbrbBbrbBbsbBbsbrbsbrbsbsbsbsbsbsbobsbobsbqbsbqbobqbobqbobjbobjbqbjbjbjbjbjbjbAbjbAbjbAbAbvbAbZbAbFbAbFbFbFbFbXbFbObXbObObVbObYb0", +"bPbPbPbPbPbPbPb1bPbCbPbCbPbEbPbCbCbEbCbEbCbtbCbtbCbtbCbbbQbbbQbbbtbbbQbbbba8bba8bba8bba8bba8bba8a8a0a8a0a8a0a8a0a8aJa8a3a8aJa0aJa0aJa0aJa3aJa3aJa3aJa3aJa3ata3aEa3ata3ata3ata3ata3ata3at.bat#gatatatb6atatatatatat#iat#iat#iat#iat#iat#iat#iat#i#i#iat#i#ial#ial#ial#ial#ial#ial#ial#ial#i#o#ial#i#o#i#o#i#o#i#o#i#o#i#o#i#o#i#o#i#o#i#o.e#o#i#o.e#o#i#o.e#o.e#o.e#o.e#o.e#o.e#o.e#o.e#o.e#o.e#o.e#o.e#o.e#o.e#o.e#o.e#o.e.e.e.e.e.e.e.e.e.e.e.e.e.i.e.e.e.i.e.e.e.i.e.e.e.i.e.e.e.e.d.e.d.ebI.e.d.ebI.e.d.ebI.e.d.ebI.ebI.ebI" +".ebI.dbI.dbI.dbI.dbI.dbI.dbI.dbI.dbI.dbp.dbp.dbTbIbp.dbTbIbp.dbTbIbTbpbTbpbTbpbTbpbTbpbTbpbTbpbHbpbHbpbHbTbHbpbDbTbHbTbDbHbDbHbDbHbDbHbDbHbDbHb9bHbabHbJbHbJbHbJbDbJbHbJbabJbabJbJbJbJbJbJbgbJbgbJbgbJbgbJbgbJbRbgbUbgbRbgbRbgbRbUbnbgbnbUbnbUbnbUbnbybWbnbnbnbWbnbWbnbwbnbwbnbwbWbwbwbwbwbwbwb2bwbrbwbrbwbrbwbrb3brbBbrbrbrbBc.brbsbrbsbrbsaObsbsbsbsc#bsbobsbqbsbqa1bqbobqbob8bqbjbobjbqbjbjbjbjbjbjbvbjbAbjbvbAbvbAbZbAbFbAbFbFbFbFbXbFbObXbSbObVbObYb0bYcacb", +"bPbPbPbPb1bPbEbPbEbPbEbNbEbCbEbCbEbCbtbCbtbCbbbEbbbCbbbtbbbtbbbtbbbba8bba8bba8bba8bba8a8a0a8a2a8a0a8a2a8a2a8aJa8aJa0aJa0aJa0aJa3aJa3aJa3aJa3aJa3aEa3ataJata3ataJataJataJataJat.batatatatatatatatatat#iatatat#iat#iat#iat#iat#iatalatal#ial#iaa#ial#iaa#ial#iaa#ial#i#l#ial#i#l#i#o#i#l#i#l#i#l#i#l#i#l#i#l#i#l#i#l#i#l.e#l#i#l.e#l.e#l.e#l.e#l.e#l.e#l.e#l.e#l.e#l.e#l.e#l.e#l.e#l.e.h.e#l.e.h.e#l.e.h.e#l.e.h.e#o.e.h.e.j.e.h.e.j.e.h.e.j.e.h.e.j.e.g.e.i.e.i.e.i.e.i.e.i.e.i.e.i.e.i.e.i.e.i.e.i.e.i.d.i.d.i.d.e.d.i.d.e.d.i" +".d.ebI.i.d.ebI.i.d.dbI.dbI.dbI.dbI.dbI.dbI.dbI.dbI.dbp.dbp.dbp.dbp.dbp.dbp.dbTbMbpbpbTbMbTbpbTbpbTbpbTbpbTbpbHbpbHbpbHbpbHbTbHbpbHbHbDbHbHbHbDbHbDbHbDbHbabHbJbHbabHbJbHbJbHbJblbJblbJblbJbJbJbabJbJbgbJbgbJbgbJbgbJbUbgbUbgbUbgbUbgbRbgbnbUbnbUbnbUbnbUbnbybnbybnbybWbybWbnbwbnbwbWbwbWbwbwbwbwbwbwb3bwbBbwbrbwbrb3brb3brbBbrbBbrbBc.bBbsbrbsbrbsbsbsbsbsbsccbsbobsbqbsbqbobqbobqbobjbobjbqbjcdbjbjbjbjb4bjbAbjbAbAbvbAbZbAbFbAbFb5bFbLbXbFbObXbObObVbObYb0bYca", +"cebPbPbPbPbPbPbPbPb1bPbCbPbCbPbEbPbCbCbEbCbEbCbtbCbtbCbtbCbbbQbbbCbbbtbbbQbbbta8bba8bba8bba8bba8bba8a8a0a8a0a8a0a8a0a8aJa8a3a8aJa8a3a0aJa0aJa3aJa3aJa3aJa3aJa3aJa3aEa3ata3ata3ata3ata3ata3at.bat#gat.bat#gatatatb6atat#iatatat#iat#iat#iat#iat#iat#iat#iat#i#i#i#i#i#i#i#i#i#ial#ial#ial#ial#ial#ial#i#o#i#o#i#o#i#o#i#o#i#o#i#o#i#o#i#o#i#o#i#o#i#o#i#o#i#o.e#o#i#o.e#o#i#o.e#o.e#o.e#o.e#o.e#o.e#o.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.d.ebI.e.d.ebI.e.d.ebI.e.d.ebI.ebI.ebI.ebI.ebI.dbI" +".dbI.dbI.dbI.dbI.dbI.dbI.dbI.dbp.dbT.dbp.dbTbIbT.dbTbIbTbIbTbIbTbpbTbpbTbpbTbpbTbpbTbpbTbpbHbTbHbpbHbTbHbTbDbTbHbTbDbHbDbHbDbHbDbHbDbHbDbHb9bHbJbHbJbHbJbHbJbDbJbHbJbabJbabJbJbJbJbJbJbgbJbgbJbgbJbUbJbgbJbRbgbUbgbRbgbRbgbRbUbnbgbnbUbnbUbnbUbnbybWbnbWbnbWbnbWbnbwbnbwbnbwbWbwbwbwbwbwbwb2bwb2bwbrbwbrbwbrb3brbBbrbrbrbBc.brbsbrbsbrbsbrbsbsbsbsb7bsbobsbqbsbqbsbqbobqbob8bqbjbobjbqbjbjbjbjbjbjbAbjbAbjbvbAbvbAbZbAbFbAbFbZbFbFbXbFbObFbSbXbSbObVb0bYb0cbbYcb", +"bPbPbPbPbPbPb1bPbEbPbEbPbEbNbEbCbEbCbEbCbtbCbtbCbbbEbbbCbbbtbbbtbbbtbbbba8bba8bba8bba8bba8a8a0a8a2a8a0a8a2a8a2a8aJa8aJa0aJa0aJa0aJa3aJa3aJa3aJa3aJa3aEa3ataJata3ataJata3ataJataJat.bat.batatatatatatatatatatatat#iat#iat#iat#iat#iat#iat#i#i#iatal#ial#ial#ial#iaa#ial#iaa#ial#i#l#ial#i#l#i#o#i#l#i#o#i#l#i#o#i#l#i#o#i#l#i#l#i#l.e#l#i#l.e#l.e#l.e#l.e#l.e#l.e#l.e#o.e#l.e#o.e#l.e#o.e#l.e#o.e#l.e#o.e#l.e#o.e#l.e#o.e.h.e#o.e.h.e#o.e.i.e.e.e.i.e.e.e.i.e.e.e.i.e.e.e.i.e.e.e.i.e.e.e.i.e.e.d.i.d.e.d.i.d.e.d.e.d.e.d.e.d.e" +"bI.e.d.ebI.d.d.dbI.dbI.dbI.dbI.dbI.dbI.dbI.dbp.dbp.dbp.dbT.dbp.dbT.dbpbIbTbMbTbpbTbMbTbpbTbpbTbpbTbpbHbpbHbpbHbTbHbpbHbTbHbTbHbHbDbHbHbHbDbHbDbHbDbHbabHbJbHbJbHbJbHbJbHbJblbJbabJblbJbJbJbJbJbJbgbJbgbJbgbJbgbJbUbgbUbgbUbgbUbgbRbgbRbUbnbUbnbUbnbUbnbybWbybnbybWbybWbnbwbnbwbWbwbWbwbwbwbwbwbwb3bwb3bwbrbwbrb3brb3brbBbrbBbrbBc.bBbsbrbsbrbsc.bsbsbsbsccbsbobsbqbsbqbobqbobqbob8bobjbobjbobjbjbjbjb4bjbAbjbAb4bvbAbvbAbFbAbFb5bFbLbXbFbObFbObXbVbObVb0bYb0cbbY", +"cebPcfbPbPbPbPbPbPbPbPbCbPbCbPbCbPbEbPbCbCbEbCbEbCbtbCbtbCbtbCbbbCbbbCbbbQbbbQbbbta8cgbbbba8bba8bba8bba8a8a8a8a0a8a0a8a0a8a3a8a3a8aJa8a3a0aJa0aJa3aJa3aJa3aJa3aJa3aJa3aJa3ata3ata3ata3ata3ata3at#gata3at.bat#gat.bat#gatatatb6atat#iat#iat#iat#iat#iat#iat#iat#i#i#iat#i#i#i#i#i#i#i#i#i#i#i#i#i#i#i#i#i#i.e#ial#i#o#ial#i#o#i#o#i#o#i#o#i#o#i#o#i#o#i#o#i#o#i#o#i#o#i.e#i.e#i.e.e.e#i.e.e.e#i.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.d.ebI.e.d.ebI.e.d.ebI.e.d.ebI.ebI.ebI.ebI.ebI.ebI.dbI.dbI.dbI" +".dbI.d.4.dbI.d.4.dbI.d.4.dbT.dbTbIbT.dbTbIbT.dbTbIbTbIbTbpbTbpbTbpbTbpbTbpbTbpbTbTbTbpbHbTbHbTbHbTbHbTbDbTbHbTbDbHbDbHbDbHbDbHb9bHbDbHb9bHbJbHbJbHbJbHbJbDbJbHbJbJbJbabJbJbJbJbJbJbJbJbgbJbgbJbUbJbUbJbRbgbUbgbRbgbRbgbRbUbnbUbnbUbnbUbnbUbnbybWbnbWbnbWbnbWbnbwbWbwbWbwbWbwbWbwbwbwbwb2bwb2bwbrbwbrbwbrb3brbBbrbBbrbBc.brbsbrbsbrbsbrbsbsbsbsb7bsccbsbqbsbqbsbqbobqbob8bob8bobjbqbjb8bjbjbjbjb4bjbAbjbvb4bvbAbZbAbZbAbFbZbFbFbXbFbXbFbObXbObObVbObYb0cbbYcbbYch", +"bPcfbPbPbPbPbPbPb1bPbEbPbEbPbEbNbEbCbEbCbEbCbtbCbtbCbbbEbbbCbbbtbbbtbbbtbbbba8bba8bba8bba8bba8a8a8a8a2a8a0a8a2a8a0a8aJa8aJa8aJa0aJa0aJa3aJa0aJa3aJa3aJa3aJa3aEa3aEa3ataJata3ataJata3at.bataJat.batatatatatatatatatat#iatatat#iat#iat#iat#iat#iat#iat#i#i#iat#i#ial#ial#ial#ial#ial#iaa#ial#i#l#ial#i#l#i#o#i#l#i#o#i#l#i#o#i#l#i#o#i#l#i#o#i#l.e#o#i#l.e#o#i#l.e#o.e#l.e#o.e#l.e#o.e#l.e#o.e#l.e#o.e#l.e#o.e#l.e#o.e#o.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.d.e.d.e.d.e.d.e.d.e.d.e.d.ebI.e.d.ebI.e" +".d.dbI.dbI.dbI.dbI.dbI.dbI.dbI.dbI.dbT.dbp.dbT.dbp.dbT.dbT.dbT.dbTbIbTbMbTbpbTbpbTbpbTbpbTbpbTbpbHbTbHbpbHbTbHbTbHbTbHbTbHbHbDbHbHbHbDbHbDbHb9bHbJbHbJbHbJbHbJbHbJbHbJblbJbJbJblbJbJbJbJbJbJbgbJbgbJbUbJbgbJbUbJbUbgbUbgbUbgbRbgbRbUbnbUbnbUbnbUbnbUbWbybWbybWbybWbnbwbnbwbWbwbWbwbWbwbwbwbwb3bwb3bwbrbwbrb3brb3brbBbrbBbrbBc.bBbsbrbsbrbsc.bsbsbsbsccbsccbsbqbsboccbqbobqbob8bobjbobjbobjbjbjbjbjbjbAbjbAb4bvbAbvbAbZbAbFb5bFbLbFbFbXbFbObXb0bOb0b0bYb0bYcacbcb", +"cibPcebPcjbPbPbPbPbPbPbPbPbCbPbCbPbCbPbEbPbCbCbEbCbEbCbtbCbtbCbtbCbbbCbbbCbbbQbbbQbbbtbbcgbbbba8bba8bba8bba8a8a8a8a0a8a0a8a0a8a3a8a0a8aJa8a3a8aJa0a3a3aJa0aJa3aJa3aJa3aJa3aJa3.ba3ata3ata3ata3ata3ata3ata3at#gat#gat.bat#gat.bat#gatat#ib6atat#iat#iat#iat#iat#iat#iat#iat#i#i#iat#i#i#i#i#i#i#i#i#i#i#i#i#i#i#i#i#i#i#i#i#i#i.e#i#i#i.e#i.e#i.e#i.e#i.e#i.e#i.e#i.e#i.e#i.e#i.e#i.e#i.e#i.e#i.e#i.e.e.e#i.e.e.e#i.e.e.e#i.e.e.e#i.e.e.e#i.e.e.eck.e.d.ebI.e.d.ebI.e.d.ebI.e.d.e.4.ebI.e.4.ebI.e.4.ebI.d.4.dbI.d.4.dbI.d.4.dbI" +".d.4.d.4.d.4.d.4.dbT.dbT.dbTbIbT.dbTbIbTbIbTbIbTbIbTbpbTbpbTbpbTbpbTbTbTbpbTbTbTbTbHbTbHbTbDbTbHbTbDbTbHbTbDbHbDbHb9bHbDbHb9bHb9bHbJbHbJbHbJbHbJbHbJb9bJbHbJbJbJbJbJbJbJbJbJbJbJbJbgbJbgbJbUbJbUbJbRbgbUbgbRbgbRbgbRbUbnbUbnbUbnbUbnbUbnbUbWbnbWbnbWbnbWbnbwbWbwbWbwbWbwbWbwbwbwbwb2bwb2bwbrbwbrbwbrb3brb3brbBbrbBc.brc.brbsbrbsc.bsbsbsbsbsbsccbsbqbsbqbsbqccbqbobqbob8bobjbqbjb8bjbjbjbjb4bjbAbjbvb4bvbAbZbAbZbAbFbZbFbZbXbFbXbFbObXbObObVbObVb0bYbVcbbYcbcbcl"}; + + + switch (id) { + case image0_ID: return QPixmap((const char**)image0_data); + default: return QPixmap(); + } // switch + } // icon + +}; + +namespace Ui { + class NewPreset: public Ui_NewPreset {}; +} // namespace Ui + +QT_END_NAMESPACE + +class NewPreset : public QDialog, public Ui::NewPreset +{ + Q_OBJECT + +public: + NewPreset(QWidget* parent = 0, const char* name = 0, bool modal = false, Qt::WindowFlags fl = 0); + ~NewPreset(); + +protected slots: + virtual void languageChange(); + +}; + +#endif // NEWPRESET_H diff --git a/muse2/synti/deicsonze/newpreset.ui b/muse2/synti/deicsonze/newpreset.ui new file mode 100644 index 00000000..7ffa8705 --- /dev/null +++ b/muse2/synti/deicsonze/newpreset.ui @@ -0,0 +1,402 @@ + +NewPreset + + + NewPreset + + + + 0 + 0 + 271 + 157 + + + + + 195 + 195 + 195 + + + + image0 + + + New preset + + + + nameNPGroupBox + + + + 10 + 0 + 120 + 50 + + + + AncestorOrigin + + + Preset Name + + + + nameNPLineEdit + + + + 10 + 20 + 100 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 8 + + + + INIT VOICE + + + 12 + + + + + + subcategoryNPGroupBox + + + + 10 + 50 + 120 + 50 + + + + AncestorOrigin + + + Subcategory + + + + subcategoryNPLineEdit + + + + 10 + 20 + 100 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 8 + + + + NONE + + + 12 + + + + + + categoryNPGroupBox + + + + 10 + 100 + 120 + 50 + + + + AncestorOrigin + + + Category + + + + categoryNPLineEdit + + + + 10 + 20 + 100 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 8 + + + + NONE + + + 12 + + + + + + bankNPGroupBox + + + + 140 + 0 + 60 + 50 + + + + AncestorOrigin + + + Bank + + + + bankNPSpinBox + + + + 10 + 20 + 40 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 1 + + + + 128 + + + 1 + + + Bank numerous + + + + + + progNPGroupBox + + + + 200 + 0 + 60 + 50 + + + + AncestorOrigin + + + Prog + + + + progNPSpinBox + + + + 10 + 20 + 40 + 21 + + + + + 0 + 180 + 0 + + + + + 220 + 240 + 30 + + + + + Zero Threes + 1 + + + + 128 + + + 1 + + + Program numerous + + + + + + WantButtonGroup + + + + 140 + 50 + 119 + 100 + + + + AncestorOrigin + + + New preset + + + + CancelPushButton + + + + 10 + 60 + 100 + 30 + + + + &Cancel + + + Alt+C + + + + + OkPushButton + + + + 10 + 20 + 100 + 30 + + + + &Ok + + + Alt+O + + + + + + + 789cedbd5b53144bd7b67bfefe8a27de3e7b63457f32d9a8f1c53a000441146437d9ac5807dd08229b092a0aba62fdf7afaa725363648edc675655337d2ad23467fb6853787be57d8f91d5ffeb7ffe73fcf1c37ffee77ffdd7f787c9c397b3ff9c5d4ebefde77f3efdb8bdfdf5fffcbffff7fff75fffbdf0f2f57fe6975efce7af97d5f8efffebbffefbece63f67ff192d4de65fccbf6ed697f5fae5bc5c4ff97a81ada727cd7a2ad66713b15e986b5eff9baf5ff15fff42acf9ebfbf5fad5bc7c7d47acf9ebc77c7dc6d75bcdbafdffaff3b578fdbd5c4f9af5295b2fbce0af2fca357bfda95ebf5e90ffffb772cd5effc9d6f2ffbf2cd7ecf505be5ee0ebe67ebd3e93bffe5caed9eb577c2d7efd2bbe7ec5d6679fc47a917d3fbeb0f5e2a745f6fab9582fb1d7f9efb734c75fbf106bf6faa8f97e4c16e4fd1ab3b5783f9345be16efe79358b33f7ffa95aff9fb9bde89357f7f23bee6f7ebec4cacf9ffff235b8bf7339de3eb45b61effd5accfc4fb1bcff135ff7e4cfe666bf1fe26afc59afdfe933dbee6ef6f3227d6fccf7fc9d7e2fbf95dacf9fb67f7e36cf105fff5db6c2ddfef2a5ff3f73b5d93ebe6f71b377fffa7f2efcff8855c37af8fced85afc7d189fca357bbf6ff85abcff75b1e65fdf0e5f8bfbf95baed9d7f38dade5fb5f916bf6fa5f7cbdc85f9f976bf6fa2e5bcbafef41aed9f7f3335fbfe6af4fe59a7d7dcdf77ffa497e7dc772cdeecf115f8befdf2fbe165fef9358f3aff73b5ff3af77f251aed9af67eff793f87a27c772cdbe9e1f7c2dbede47b966aff3f7b3f89aff7eafd85a7c3dd36bb17e39dfbcfe82af3fb1d7277f89357b7d7c58afcf16c5d737fe5bacd99f3ffaced7fceb1dfd146bfefe3ff1b5f87a7fca35fbf3aed95a7ebd5fe59abdbecdd7e2ebfb87aff9d737fd25d6fcfbb7c7d7fcdf93e9a158733dceb3b5fcfb3de26b7e7f26e275713fde8935bf5f6b6cfd728ead478dbecee4f77ff48f58b3af677cc0d7fcfe8cf7c59adfbf65bee6f767c4fefcf6fb3f966bf67e2ef99adf8fc97bbe16dfef53b1e6f7e396afc5fdf82cd6fc75f6f57d92ff1ebce66bf1efd784aff9fdd97d106bfef5f3df4fdcaff154acd9ebd325b67e39c7efe78358f3fbf95baea7cd9adfbf978bfcf51f72ddbc3e6ededf27f9f76dbc27d6fc7eeff2b5b89f6fe59a7d7fd6d85adcdfd1a15cb3d7e7f85adcdfcf7c2deeefbd58b3fb33d9e26b7e7f279b62cdefe784ade5fdbd916bf6fd78c3d7e2dfa70db966af1ff035bfffe305be16f7fb4cacd9fd3abb666b71bf475fc49a7fbfbec935bbdffcfdc8fb3d91ebe6f511bfdf2f5ff3fbdffc7bf5e95cdedf0bb966ef679badc5fd1defc8357b3feff89adfdfd1095ff3fb3b5a146b7e7fbff0b5b8bf5762cd5f67f7eb5cdcdfc9915cb35fff92aff9fd9d2cc935bbbff77c2dfe7dfc20d6fcefef265f8bfbfd49acf9bf8fe76c2deeeff842aed9fdbbe36b7e7f473772cd5e5fe56b7e7f474b62fd8afd7afefe5f7ee2afbf126bf6fab859575f8eb8df1fe49abddff77c2deeb7785ddcef3db1e6fba9177ccdeff7e854acf9fd3b676b79bfefe49addef55be16f77b59aed9eb277c2deef748acf9fd3ee36b7ebfa71762cdefef17b696f7fbb35cb3bf9f577ccdeff7f852aed9fdbbe76b71bf57c49adfef0dbe16f77b5dacf9fd6efefe9ecbbfbfe34dbee6f773bc25d6fc7e6ef3b5b89f1fc59abf7eccd6723fbb20d7ec7e4df95adccf33b966af3ff2b5e0d75bb1e67afec0d78267fb62cd5fe77f9eb89fd32f72cdeee7225f8bfb792dd7ecf51bbe16f7f356acf9fdfcc1d7e27e3e88357f9ddfaf57737cfd975cb3dfbff97e5cc8bfafe3b762cdefd727bee6f777bc2ed6fcf5f76c2defef815cb3efc7df7ccdefefe848aed9fd1af1b5b8bf1762cdefdf2d5f8bfbfb4dacf9eb2b6c2d797728d7ecdf5ffe7ee4fd5d926bf6f5f3df5ffefbfb8f58f3fb75c9d7e2fe9e8b357ffd89ade5fddd946bf6eb77f97a91bfbe23d7eccf6b78797121f74fab6c2deee7f88d5cb3fbff92afc5fe6145aed9ebcb7c2d78f65bacf9d7ff8bafc5bfb74f62cd5fffc9d652ff8f72cddeef0fbe16f7f341aed9eb5ff95adccf3bb1e6fafec6d7fc7e8eefc59abffe9dade5fd9cca35bb9fd77c2deee7955cb3d7f99fffea355f3f8af5eb8566cdefc7ab4ffcf55f62cd5fe7f7fbf51c5fefcbf559bdde7d188faa31a9c7785a8d3339f0f5a91ae7cdf8d48c8beac7fafa0cc66533be807135beae7e64a3bd6ef8b845835dff80b91e77d5b847e3ab32bef1714fccedf53d79e4b872bc0f36f0457dfd62a8f70b8f3b30be6af38371e0eb079f7f92e351193f9bf9a9fa511ff8fa558ddfd55846e3b73296c72bd5bcd2ccf5d0afd56abce1f36af53338d6e4581daf37638d0f76bdadc64633de8e37c17837dee26373fcbefa518c0fd58f626c573fb2b133fec8c76ef5231bbbe3bd6aec57e3a0fad941f5b37a1c36e3ef6a1c8e8faa715cfd78ccaf93f169355e8ce7aaf1d798250cf3955a47d5981874bcc007d3b0aae37370d51afe42e8f8ba19577cd4d7a245c74b52cbe2aa35fc95cfdf8c3afeaafcbd358df6eff9f76afe8ee6a10cfcbe685d9a865daf6240adea9749b73f14bdfe0083d6ee4fa0d9f632e9f6179897adba5de6ba5507be5e4acdaada5d95f31a18aa7637d080dadd04e31dd02fd3edab667c90fafd58fdc8b4bb2db55b5faf1bfd4aed8ec652bfec3a6663341a1fd703e8f7a4d6ef6802198c755bfd179abf6749fcbd5106d3ec8dc65d31eeadfc2dc55de7359ac6cd45d8ac5f261efbb3b84f0eeb970f87579239bc0a38bc86b4fcd68bc3ef0c1c6e19bc2d19bc8374bc8775cc35dc7298e9f8a8d1f119d2316370cd5fbc8f9e12fc1557387faf02f87bdbe899e2afdf3e3a84bbb332caf1388ec3aa5e87cae1979e1c5e431c96da1d7d42ba5d47bab571f815e030de436f3743dd431f687be80382c3c78a7e4f6afd8effe20c56f6ce0d7fa706fe9e49fe5ef0e1e62f1b66fede480ef3313ab7f297f2bd29eccdcad98c7c4ee1716e0e9b354d7398d6734e0eab5ed8cde137c538bc4970b8d5f107ca0b8f2e342fac73f850e130d4f069bd97660c46fb68a9e3d167037fc570f3f712f1f7527298e6ef0dc5dfd1a5731f5d9abba5aeae786cd7ec3752ab6e16cf1687578b7318efa10587b78117f6e430f7c21587ab9fb51c3e02faad46f5b386c382c1ad766bfe36da95d7e84b107f3f17e4afddf7266832859fae11f3fb26ebdded8be3f2693f4f5c8ac3cbde1c36675b6f481d8772f82de0709b47630eb779b4be9f665a661cde55386ccbb48e140ebf900c263268ace328fe5e2afcd5350cd97ba3d6922cfc2d9533f77dc5f1d85c470acba84339fc3599c3b67a929bc3cb091c7e63e430ae27d938bc5129b5e5f07b650ffdcaa2dd8f0a83f72483150eb7faad7cb09a657106f7c0df9b40feda7d6fa43e93f87a153832f0394ae729bef8b97058bf6c1c5e437bea35c461a1e3b7da7e1a7258f7c2ea7efaa3d432ad633b878f21871b05dbf8bb5084bfaa9615fed63a26b4ecc7df30ee0efd4ae171ee7c7af638bc12c461ba2ecc86a92ebc29f7ce2a87615dd8b08756ea492d87a17e0f150ee34cba65703c7fc5f8cc751bc55f836673f0d79bbbc99c8d1d115c0ed4b7cd17fb7b62dcafd53787ed3d5add73b8ebfeac53c8e028fe0a4d5f6a0c2ec5df5c7973962b632f47191ea7f8e2d9e5b02dc7d2ebc23939dc537f56a3e096bf539abfa32fdefcbdccc5dfd125c18b28f67a73b72be6063039e0df84540efb7b629f7eadbe39acd685750eaf067058d5727c9fb4bb3f8bae0babfd59722f0d183cd5f95beb1868d9c6dff300fede04f2f71bd7738aefcdc3d95a5fd709733e3e97e730ac13fbd788f37218f7738841ebb65f0efbf467e91cf6eccf427561a53f8b3158f2774af8df6aaefecb0560700c7f6ff8f58f1c88bf58bb1a7fb3fadec131d793c99e3c4ecda76797c3aef34a2e0ef7d59f65ad0b2bfd5958c798c1ad8e29fe321d87f197d631c1dfbaee6bde4b1bf8ebe77ba3789bc4d9883981c77ebe38369fb6f76bf5c561f3fed9c4e1b0f34aa5faa4b7b53d74407f16d22fe8eb600c6ef98bb44bf07774e3c55f311add8e6e75feaaecc5fcad562d87b3f8de99e36eba3ff665f15039fca471b88f73c3e11c76f5676d7bd6963cfbb33883257f990f8ee62fac27293a0ee3af602fe26f48ee1cc65d1b274b8d00bf9c81c53ebef8dfc0e1aece2be5e9cfdab7f467712f0c187ca66bb7087f6f2aaddee8fc959a0de5af712f8cf89ba4b7d175de519ec7811c0eab13cf16877dcf2b9933699ac3b02e8cbd705c7f96ba97ded332ad6a8cfe51ebc282c12d7fb52cab0c7f999643f99bc1f75ab9dbf748e771190edf6b5acdc7e1476f0eff0ae270d93ee9f8fe2cf5ac925e176efb3ae83df411e4306770287fab31ba93fc35e8b6307f0b7137376f0b73d9cd61378b63fbb5d238ecfb1c8f1ccfd14a39afd4557fd6aea33fcbf0dc8ee6c9779f55fe221d03fed63a56b4ecc75f7141fe925956347f6797bb113c4e64b14f3e1ddaaf350c0ebbce0d77d5271dd39f15f9dc0ee18375fe8ae1c1dfcb02fc8df0bdf1ecb5f2f1aad09c97c7397cf173e270f77dd221fd59199fdb2118dcf672b45aaef9cbf7d2247f1b1dfbf3f79f48feda73672fdf9bc6dd01ec97e3ebc7b3cce12ece2bf5d59f15fddc0eb52edc28f80bd42ee6af6070ab5d7ffe8e6ecbf0378fefed94b7095c8e63f14c7358efcfd2f51c7e6e7828fd59999fdbc14f17827d34e66feb831dfcbdf2e12fa5e3d13964af377fc37d6f2fbc2dc0e5705fec9b4f3f570e87f549977f7e56d6bab0cae004fe3603f277746be2efe8b21ae75cbbe76c74c1df6cdc0dbdbae7b1c1177be9ba24877d9f2f3d84f34a399f9fa5d79642ebc2fb745d583298a82579f2b79a47f79a9623f90bf6d309fc0df3bd7d71370393c37cf1d0386cceb15239dc779ff446d4733ba2eac290c14cb336fe8e6e22f90bf44bf1b71adfeb61d76b7cee1cc5ddf6fa9a7984f3394edf7f381cda27edd79f15f7fcacf4ba30795e989f2ea43cf039d631d372187f47b788bf0a870dfc8dc89dc37d6fdf8ccdc8e2305fecc3618ac7dd71f871acd6855d1cced127edfb3c69a53fcbf3f95905ebc282c12d7fd9206a473790c1b56e15ed76cbdf788ddab99b9bb7615c0ee471188bd5fbe8e470cbe2140ebb3269a1e7c70c1ccedf271d53170eedcf32d585bdce0bab0c16fc6d7b3988bdf49d377f6fccfc1523077ffd7c6f563e26e451e579ec71f5c3613d8ff6e570fa79a5b43ee9a1d6855957e5b75ab97a1f16d83bdfc01c7a06f93b4ceec6f3385cdb2975e2f4734bf11cce715ea94c7f96fa39c3617561fc790e3bf17561c860c85face350fe4a4d97e6af97ef4de42cd355be3999cfd97cf1b039dc7d9f745c7f56febab0e39c21d3efe87bbb8b4ee36fb5aa86e06f331e92f84b6754e1ec9d2dee66e1b11f8b7be1b0bb472becdc70d93ee91cfd59f47961575d38f839d22d8343f8ab6b99e958ad0327f2d77a15f2bd7979ebcfe5bc2ccec16173df74c8f9614ab7b99fdf31dcfeacb8cf73a09f234dd593c42edac95f9c4107f0b71aa31f82bf7c56f88b384cf2c1cd5f2fdf3b5beca5599c8dc3963a715e0e634de77d7e47cefe2cfd8ae1707a5d38f039d2a39f82c1b80f1aea787423f8dbe898e0afd0b291bf42cb06fe92fb699abb5eb97351eec68e823c2ec2e196c7311c76d786bbeb932ed39f95b32e1c9847e3e7484306575afd02b47bd1ea963158e816ee9d511f96c6df46b706fe6aba2dc7df7406e6ba4afae230160f9bc3c3ebcf2a5517b6e5d15e7561916409fe6a3a061e98f960177f0d7be94b65f4cddf92bccdc7e5ccbed871a573d8fc390f5d9d579ac5baf0b6b687861cde5538ac9c53c20cd6f6cefefcd57b2793f8ebaefd7af8defe995b8ec95ebed8df1377c8e19ce786f3f467755517cef51c69744e897755821c3a99bf3f0af3379ebd43e06e1c8fff3d1cb69f573265d2a9fd592b19389cff39d296734a6d9625186ce32f553b1add2a39f483ba776ef51ac5dfb4ba6f77cc7d34cc5d3139473e1dcae1d8e74b77715e695875619f3cda5617f638a704184ceb18d68195bdb4a801330ef7c35f4f36e5e16e57bacce08bb37238bc4f8be670cef34a71fd59b1cfcf32d785d5e748c7d7853f00fdd29f2f7c40d5931a05ebd9d50d1c50b715757df8fb03d481d9f59483bfd973e734cec6ce65583c040ee73e37ecd7276dcfa4edcfcfcaf1dc0e3dd78a7f8ef487315d1736e6d19cc17a2d49a9038feea82c4be32fd2b2d4b181bf48cf347fd372e714ee96bed2789c89c3963a711f1c4eeb934e7d7e56177561f373a4ed79b4a52eac33b8b9ee68fed6cfe148e5afd46d4efee6e36e6ede76c9633a9f1e2a87cbf549f75317863e18e75aa6e748b71a863a0e3ca7646270187f9b99d632ccb32e752d77cadfbeb99baad3085f5c8cc37e3d5af1e795faeccf4ac9a3d7910f56f7d0c207632f1c9247efa9793463b01f7fdb3e6831806e1f34feb639f430f89b9fbbbfaaf19b98cbf03894c5c3e77077fd59ddd48543cf296d25e6d17b2d836dfc5533e83acb825aee96bfd1b9f310b91ba3d5e7cae161f467611f6cf6c22a877df2e82dd0d3117f4e695fad2701065fe03a70cde096c36efed2e7906add2a3974d7fcb55f3e9ccd39d2791ccb61c0e39e38dc659ff430eac221e794740ed379f42ee583d50c1a723892bf783fdd0f7f678dbdbe5a8dcca7a3386c3e3f9cc6e1f43ee9e1d485a9cf17a673ac02e7945a0637ba6d2e95bfb00eece0ef03caa135fe8e9eea11c1df98ba6f1c77859fed6ac4f1b82f0ebb7aa52187bbee93763d3f2bac2e4c9f17a6f6d3e6734aeb017561571e6d3ca7a4fa6095bf58c75a1fd683aa65c4dfd607ebf5a4a78cfc9d75df1bcbe2ec1cf6f4c2e11cced9271dde9f155317f6798eb4f99c525c1eade658db328fde467be83d0383257fed7d58d5a075ebe22fd26de7fc1d127763781ccbe2ae385cbe4f7a16eac2b6734a74a665caa3292fbc3d26f268d507a31c5ad731f2c1c6bdb4c65f7d2fdd397ff35cbfc130d5927e29bfae3c8bfbe3f030fab3d2eac225ce0bab7561771e6dab0b5bf368de93a5d481a17615fed20c8ee3af91c1d1fca5afae72e6aef2ea500e7f25eea30f87cdcff148e3707c9fb47d4f5df6bc703fe7941c79f468b9395d883268be97bed374ace4d03e7dd0958ed51cba6bfea6f1d6c5d9d8b934879d75e20173787875e1f43c3aec9c929e475b3e4f8933f80e67d040bb2b5cbd66fefe003ef801321868f74968d7fdfcab0ef8db3763cbf8e2621c56bf6f811ceeb73fabebba30ed8543f3e81dff3c5a66d188bfd45edac8df66a00cfa8781bf48cb684f1dca5f9a3be9ec2dc9ddbc3c9e4d0e97e8cfca5317cef11c6955bba63c7a73eccaa3f5734a641e3d5a463e98f6c0a80eac303888bf4a1db80ffef6cdd4dcbeb8270e7b30b8cffe2c9ff3c2b1cf918ec9a32187a94cebbd671ebd4b675ac207dbeac0e0129996bd0e2cfbb04c7be98cfc4df7be7d70979a6783c326dd96eecfca5f17eefa9c52a13c5a3098f4c01a7f55ed2a75605db3741f5649fe96abf7fe4e18e57c713a87ed7aee96c343a80bdbf6d3360efbe5d1f439a5843cba51f01df4c1a48ea10f56753cabfcf5adebc2397684fc39e1ded89d4f97e5707ffd59c338a7943b8fa69fd761c8a3a10fc6daad2e9843dbf9cb7cf093c6e150feea1c0ed16adedc3985b9e5989c83c331e787d3ce2b95edcfeaf639d2ae3c7abd9a5b2d631ffc966470521e8d184ceca5893ab0aae3079467fdb06559b0a69499bf61ec2dc9db5c5cee8cc306cdda3f6fc997c3fdd6859f1c1c4ef97c61571e6d7f5e478e3c1af960771d186a3784bf2d87690617e2eff0b89b8fc7b6e78074cfe1dcfd59fdd785cbe5d1aa0f161cb6e7d13b441e2d2fc960d08765cea12bc5527b69b50e4c6ab977fefaf8debe469e7a71971c9ed5ba70be734a741e4d69b7681edd5493d0deb919047f15063fb8ebc06efe6abaed83bf7d70370f8b8b71d89e490fb23f2bee39d265cf2985e6d1b41776e4d1d807933a4675606d2f4df66199f82b736890773a199c83bf79b85b569779f2e959e6708e3c3afc39d279cf29d9f268acdd4d42bb3e7974bb87de933e7895d0ed0a1f9407c6fcad3db0ea83511fd640f91bcbca5f9e73372cee9ac3ca79a541d68567258fde1ac33cdac460358fdec57974eb83317f714f2559075673e827cf1c3a84bff8fc51d7fced6faf9c964f9bf9fb55d5a983c3317dd265eac2662f9c7a4ea9af3c7a8bc8a35b1f4cf755127974a360671d18eab7d1ed83e4b095bf80c3b3c95f5fde96e0f2a039dc635df84f1e8df6d2b29a7447f2575cb48e8d756055cbbdf0372e771e4e76d50b870d3eb8447f5689ba70ff79f47ac63cdaf5ac1d82c1d510fc5d51194cf097a803d7ba6d2e2b7f916e7d9fff9c83bf7d703785c7dd70b8bd140edb33692f0ec7d685fb38a754328f6e19ecee8f6e2f8f3c9afbe0557b0ecdeac0961cfa49db4f7bf66175ccdf61b0d75fa7b3cae1b275e1f0734a7de5d1cd25f3e84d431efdde504ba2fbb2f0d9863d85c13887d6ebc02a7f35dd62fe56e3aa1ecf90bf6faaf90d3197e1711c87dd9a861c56bf1f25fbb3e2ce0beb7974f8e70be3abaf3c7a8bc8a3df3bf3e81d2a8fe63e38b40eace7d05a9ea5665a017d583a2fcaf1b74ff6fae934ad5f2b2f87d3eac265cf0b0ff5b959a63c7a2b471ecd9e74a7e5d09a076ec60fe0838d7560c4dfe920f89bce5d136fcd43fff5b3c7e17c7dd25dd68567398f763daf43c9a3476b80c1ab0939f493964323fe367a0ee983ee86bf7df3369f2f4ee170c9feacf8ba70a9734af1cfcdea278fde26b4abf665ed021fbc8a72e875af3a30e4707b19f91b5c07ee8fbf6ece868e1c3ccec1e1e1d685cb9c53ea2b8fa67cb09e476f8d716f969e47ef1079f46e9b476b3e7855cba129fe0a3dfbe6d079faa0ff0dfc2dc1614aafe11cce53178e3d2fec3ea7348b79b4f0c1308fc6b524da07ef100c86fcd57268b20e1c91430f82bf5d72d7cee37f1387cbd58567318fde0ccca3d9e719127d59a3b71a83dbabd6f18685c106fe6a39f415e5837be16fdf5ccdc7e2f0fa7004877bad0b779f47e7eb8f6e7db05f1ead7f9e619b47abfb672d8fe60c5e953ed82787ce5907f6c9a04bf3d72f5f2ec361bb2f1e10877bab0bcf721eddea185fee3cdabb2fcbe083c59e9ad671621df819f0f78d65cc2287fbae0bfb9c53ca9f4777d31f8d2fbd2f8b69d7de976539db20196ccca18d75609c436fba72e8a03ab07e95e56fdfc3e68be3394ced5ffc189c5a17f63d2f3c0b79f44a24874d3e789d7b60d5076f3afbb2a48e476b6d1e8d188c7368531d58e8f949f3c1441dd89967b9faa087c15f1b735d63381c8ee8cf4aaa0be73ea7d46f1e8d7df04b52b7561face4d16a5f96ae5d7b1e0d196ccca19bb1217368da07137560a36ed3f8eb7efeb33f7fbbf7bdcf80c3cf328f2effbc0e735f96398fd66bc2641e3d5a430cc639f4baa663671dd89d4307f1d7cee0d2fcd579fa2b70cecde3b21ceebb2efc5cf368bc7fde1c533561f8bc2ccc61675f16f2c142b758bb26fe8af1a4f9e05275e0e7cbdfee38eccfe0540effc9a3615f16ceb4de4afeea7d59ef893cdad2972519bcea9d43b73e58d771de3ab0fd2ac5df34eefaf1b82487c37bb472d685d3cf29e5caa387f4bc0e535f16a55d675fd6684df465d5671b341f4cef9d4d39b481bf2a87fff03798c3749d388ec343aa0bcf721e9daf2f4beca7c3f368b5a68419dc5efa5e7a63e49143a34c4bcba133d6814bf0373f77dd3ccec1e19c7dd2a5eac2cf338f8ee8cb6a384cf960d339e16db17f1ebda3fbb2481f6ccaa1b76272e8c83ab07f1fd673e2afce633f0ebbbdf0bf398f8e797eb47a46298ec3261f8cfbb2b688fdb4c9076bbd1d061fec9f436b5a463eb8441d98fafca314fe96f1bdb3c4e1f0baf090f3e81c9f6768f7c1348763fab2b694fdb3ee83893cbaede7403e386b0e0df5abe5d0b9fbb0fae0afed1a2687a97d4d790ecf521ebd5c3c8f36f565ad3b7db0e470bb97163ae69fbaa2e6d0745f251b5b061dc3eb4af5c105fbb0668fbf348f5333e9e1d48573f64777fffce8df5e1c76e4d1a3f75e7d59eb63ba2f6b53d3aebe7fc63ed8b477de90fcd57d700c7fc373e861f037e54ae730fd75e5e4f0f3cca3c3ce0917c8a32b1d0bfe5673b5a27cf0165957aac6e883d0f0e89db92f4b61f03072e87f137f6788c383cda3533ecfb0e4732b258315ed6e920c86fcc50c967934753ec9e2836d39743db61087373baf0397e66fee2bde07fb73d89d49d33ed8cce190734a25f2e8b0e747e7fd3cc3b27d596e1f6ccaa35d3ed8c65fdd076f41fe8ed17924870f0ead03bbfba043f91bc3cb30ddf5cd617b261d5817a6f7ce3de6d1f19f67989e4787f960bda732248f6e7d3091474b06eb7be775e483b71c3ef8caa8dbf83a70b8071e2a7f53599c8fc3cf338ff6efcb72e7d1e9e784fd7cb0df39619dc1c007d73a960cc63934de4bb71cee3387ee8fbfa9a32487699da6d685879d47cf5c5f16d6ee689beecb1a7da07d709b63517d591a83d7bd72e8ad666c020eef44e7d0fa95a30f2b4e7f5d5db9389c338fb679e1d279f4733e276cf0c1a38fb40fae742c18bce5d23162f0aa570ebd65f7c1388796233d87ced587d53d7f63789cc6e161e6d129cf8feefb9cb0e9d9d1160e5b7d70d6be2c830fdee03eb8cda14dbad572684db7fdd48187cbdf1416fbf8e0300efb31b88b3cfa19f665d53e987b61970f36e5d13a83770c0c6e9f0fadefa5dbba928dbff5b59b94439baf6ef95b7af87138571e6de7705a1eddfff3a367a22f8bf0c15b3a87b90fe6daa5fa39027cb02b87de4239b4d90797c8a19f0b7f4b7278f87974dce7193ea3be2ce483b7aa15e983ed7d5980c12ba40fc639b4aee52d8dc3dde7d021fcf5e17057a35b0efb7be12ef2e87f415f56cd5fa05d4b5f56ab5dec835bed527d598a0f5e27b51b99433763d7d307eb57780e4df561cd0a7fe3384c7fddfe1cfe1dc1e1c83cdaa3269c96470fba2f4bf7c18a8e9d3e78b4a7d784ad3e98ae29f9e5d09b940f263d70d8732973d481f3f137a71e7372d8ee83c37ab372e5d1cffd9c70900f36ec9fb10f167b6894479b7c307b5e16c16091439b7cb09e43eb0c2e95439bfefec6d681877285efbf0791477bfbe02ef2e8eefab2cc0c0ef4c18d96091fdc7a61c20783be2cc5076f187d709b4353fb69d5070f2d87cec3df52ba1c425db8ef3cbacc39e15efbb25c3eb8edcbc23eb8edcb32f960c6e15abbcc0b1b18eccaa1437d703739f46cf2378ec343cea39f535f56d2f3b25c3ed8d19765f1c1ad8e810fa6750c7db03d87ded17cf0ee48ff373c2c87eea60e5c5ae75d71b8a33c3afb39e1e1f665f93d2f2bc207cbfdb3a70f6ef6d0dbad76db3c1a31f881f0c15b8476879a43cf2e7fbbe7b0baeff163b05f1e3dfb7d59f61ecbe03cdaea83b7fc7d30d597057cb099c1a67eac96c3be3974a80f4ecda1fbe76f1e0ef79547fbd6844bf565f5f9f90d361feccca3c1fed9d19745fae02dd507ab79b4d507fbf4636da11c7a4763f0aef2ef75573974770cde57e66e193c8b79f4acf465653c9f2474ccb4ecf0c1645f16f6c14cc77c2fbde3e983db73c13e3e58d772a91c3a471db8eb7d76ff1c0ef5c1e979f490fab23afe1c439e477bf860a65ddd07330e47fbe075c2073f871c3a1f774d73571cee3a8f9ed5beac5e3fc7d09447eb3e58d331df4b2b3a8ef3c1743f16eeed70fbe0b47ee8eeeac025afa1e6d1b3dc97e5f6c1e6beac429f6308f6cf1e3e18ed9f3755ed06f9609f7eac701f5ca61fabdb1cda97bfe93cee278feec307e7caa35d3e98eacbeae47c12e1830fc2ce27d53e58d531e983378c3e18f763997cf06e011f6c7f2e47a91cba8b6be83e7856fab2723e2fabe8f924b17756f6cf313e58fbdc15c5070bdda6fae0eecf050f91bf65399c9e473fdfe765cdc0f9a4001fbce7e183d79d3ed8de133dc47eacf01cbaabab641e3df4beac7fc9f924da0783fdb3d90773fdfaf9e0d19ad507d3fd58361fbc3bf2f3c1faf568d46abf39742a7fe338dcbd0f7e1e7d597d9f4f8af0c16c3f5dfd48f665197cf08ec307d3fd58ea5e5aedc7a2b5ecf2c1e6cbdc8f552a87eef29a9d3cfadfe183339e4f82fc75fb607dffccf268a28e247d30e4b0d5076f691cc63eb8bf7eac6e72e85cfc0de7b07f1e9de283cd79b48dc1cfe17c52bc0ffeadf860ace5081fccbc30a9e3781f0c194cf9e02d8dc33e3eb8cb7eac61f3d7a6d1a1e4d171cfcbca793ee919f9609ac172ff1cec8347ef9c3e98caa1751fbc63dc3b0b0ecf6e0edd1f7f4338ec9347f7d397d5eff9a4923ed83f8ff6f7c15b313e98e95832b8bc0f1e4e3fd610181ccae199e8cb4af0c13ee793c29fd3e13a9fd4ab0f1e6d0bfefaf9e04ab16e1fbc6ef1c1e67eac56bb43eec70abffae570ae3c3ac607db185cfa7c520e1f9c723e29d3733a2ab5ae600647f9e03db30f663af6f0c1a63c4bf5c1433a97347c1f6cd2688e3c3aaf0ff665709a0f8e3b9f34d8e774b4da85fcad561fe37d303c9f14e583057ffff8e06e383cdb3ed8f77cd2b37e4e87cd07b73ae61e58f3c182bf86bdb4af0f5e97e792d27c70d7fd5821fc1d128373e4d1bdf9e09ac3057df08c3ca703ec9fdd3e98dc3f8b1ad21f1f1ca9d1fef9ebcbe07fa70f9e89e774601f3c3aa887db07574476f860a8e3d161940fdef2f6c198c3213e38e55cd26ce4d0268d0ed107e77f4ec72cf9e0a8cf110ef7c1eab9062a8b76f8e08d3f3e185cfd7338970fb673f88f0f2ef839c2d00773061fe83a863e18ea38c907af231fbc31533e783672689b4667da07677f4ec7507cb0775f965e47f2f1c170ff0c7d70b5f2f5c1b56e7d7d301b43f0c125ce25f5cf5f5f06fbf8603b8387e783752dff7b7cf096c907d33a1eb00fa6fcdb1f1fdca50fc61cceed83733dafb25b1fecd197c5758b7c30f4c2361f4c9c69d0191ce283690677ef834d7f4f67eb5cd21f1feceb83cd0ceece07677a4e478c0f067b69c05f82c17f7cf03019fcc707977a5e650f3e98ed9d8d0c4ef0c14606af230ec7fbe01dc9e13f3eb86f1f3c6bf5e0217c6e4386e774d87d30d432d0b1d307b3cbdb07af7bf9e0dd91adb7e34f3d384ca343f1c17f3eb721a70f3ea074db6857f297f6c1dafe79bbdd3f7bf9e075a4dbad3ff5e019f4c17606fff1c1057c30d6b1dc4b031f4c30784bd531f2c17b057df0cec07c709b6f0d9dc3213e7826ce077bf7453f4b1f0c744bfa60acdb3f3e18cc2518dc2f7f7d19fc1c7df010faa20bfae04aa907ad96f95e9af4c192c1a40f1e1d66f3c14f03f3c1b3914797caa14bf860fff3c1cfbb2fba331f0cf9ab68b79c0f66e38f0fee9abfcfcf070fa12ffadfe48399a6cd3eb8d5f39fcf6b706974869e174debd6703d8ff3c1457db0a25dab0f1ead0906573be93f3eb80b0e9763f0737b5ef433f0c18d7e0fe27c7045da8f82bfd0076b7b695f1f1cde179dcb07db395cc20777cde17e7cb03f83bb7e5ef4b3f3c12d7f81763d7cb0d46e791fac33b83f1f3c5c0e9765b02b87b63358bdff7e0c9e85e7453f5b1f0c7ab2541f0c396cf7c142cb257db0d85397f1c17de7d171fc2ddb8f15e883bd73e83f3e98f0c1fcda86bad57d30e3ef1f1f9c41a343e56faa0f0ecda187e283cb3e2f3aab0f6ef9ebf2c18d86091fccf81bec832187b788fdf4d07d705c1edd05874bf23725870ef4c1dee7927c7db0ae5bdd07877f6e52673e78f4b7ca60ec8399660bfae055a0db101fac7218ea76a7195df8e09279742c87cb33d8c7070fa91f6b967c70e473b246472887d67c70cbdf667c840cc63e1865d1dc07b7976470191fac6b79973338de0777974797e6b07b5fdc7f3f561f3e38e6f38307eb834747cafe39c00737da257c30d0aec907df133e1872780b71b85f1f4ce5d165bd70088fbb61705a0edd613f560f9f1fdce373b266d207b3fdf4aed107c7e5d165fbb2fae07069fea6f8609abff97d7089734933e783c1fe799364b0d5078bfd336230dc3faf4b2f9cee834d1cd6afa1e7d1dd5cdde5d0ddfb60ea9c7f5f9f1fdc890fd6f6d2561fccf8db8c3d970f66fceddc07777d3e69381cf6d363e91c3aa61fabc4b9a47c3e58e5af39bf2afab9490d7f8f2c3ef8586ad6e183a576151fac6458b13e58e730c5e01dc4dfeef268ffbeaca17238c4cba7fb60f5bebbf89be0833d189cdb073f26f860bd1fcbcb07d71ab6fae063c9df7a3ed6181ce58347871e3ed8b49f861c567d70abe5781f2cf6d434874318ece25c49ada7f3b77c0e6df6c101e7927a7c3e87d907b77b669ac158b7619f1f6cf0c10d7f8f141ffc9eda3b37d78711e983017f91761bfe36fbe79abf813ef841f3c1b39b470f91c3ddf1b7743f567f3e98cea1751ffc54e6f383fd7d30ceb31af6123eb8e56f940f869fc342d595c29e57c946880f165e38258f4eab0ba7e8dd3f8ffaf7e4d0a59f5319ee835bfeceba0f56b5ebe783bbedcbca99470f8dc161fc7de3e46f891cba8b7349713ed8d58fa56a59e5afcb07ffd686c1074b1d1f687b69e883b5bd34f6c1388be6fc3d2119acfa60315c3eb8bbbeacfef3e810ed87ebb02bfe8631b8eb7eacf2cfa92ce183b16e4d3e18f1d7ea834f95fdb3e02fd6aeaf0fde5018ecdf97a5e7d1613eb89bfee821713895bfe13ef8f76888fd58f4b9a41c9fd740f9607b4f962d87267cb0d4b1c9071f4b061f903a8ef6c192c11bc63c9af2c1e6be2cd50797cda3fbe470caf0e36f0a8373e4d0ddf56375f5790d797d705b3fb2e7d070ef8c6a48a31748b7c80703ed7ed0b4bb6660303e9f341b7d59541e3d4b1c8ed3ffece5d0fd9e4bcaeb835732fbe053a0e33d6d2fadfbe0390f1f5caa2fabef3c3a477d78f6f89b3587eead1f2bc7f33928069bf9ebe7838372e8ce7db0dff92495c325fbb29e13874bf1377f0e9dee83bbecc7eaf6f91c840f96fc3d22f8abf56379fa602a8b9e237db05e1336f9e0aefab272e4d1c3e07009feba73e8300f1c9643873e277a96ce2579f960670e7dece5834f11834f900fd6f7cf6b4cbb413e186bf72fc061dd07cf5a1edd078b87c1dfa41c7a70fd583d3da7322287c63a3e45fc853ab6fbe035e48357b2f465d179b49f0f2e9f47f7c361df3fa70c7f879343e7eec72aff7c0eab0f46fc3d42fc35f9e063a4dd533ef41cdaed8361163daf307855fa60c1e1aefab2540e877be159e070dabf036efece720e3d84734991cfa90cc8a10f481def1139f40782bf388b863e78b5b3beac127974690e87fe7b10fafb96e36f7f397457fd58f1e792929fcf91c507533974eb8369edda7c706c5f56fe3cdaac55bf3c3a8dc3b9599cbe0fa7bebe50fef69343e7ecc7ca712e29f3f339bc72e8d6071f6b3ac63e78cfe083691d631fbc11e483bbcda3dd1c0ee3573c874bcc31fcd5f51ac65f9366a3ce05133e383e871ee2b9a4701f7c2c87cb07ab39b4d02eeec79ae3634d6130e583fdfab2ec79f4ae218fa6384cfbe01c75e1740ea7b238f5cf0ee1ef9f1cba443f96d50723fe523ef81831b8d6ef82970f3e410c3ed174ece383750e6f39f2e84d4b1ead72387f1e3dab1ccec3df9c75e0b239749e7eac5ecf25555ac5dafd1bf1f708f1f718ed9d8f0d3934e583f51c5af5c1f30483b10fa66bc2d807b7671a62f3683387e3188c7995bf3fa32473cbf137e63c52a91cbacb7eacd47349461face938d4079f22069f123a16fc5d24183ca7f8e0a56abc74e4d1713e385f1efdfc385c8ebfd9ebc01972e87efbb1329d4be2ba5d46fc3d52188cf7cfc71a83edfd5850bbfafe798d6b17fbe0575e3e187318fae05279741c87756e953faf907be4e5afbd0eec62701739747ffd5849cfe7c00ce6fa0df5c1d4b9249b0f161e58f7c1e17d5925f2e8b0ba704a7f16cde26eb81bcf5f5aafb9f86bcca10d9a1dc6b9e0befab1fc7cb04f0e7d8a74abfa6098431f0206533e38ac2f2b3c8fae191c9647dbebc2cf91c3a1fc7533382b7f3b3a173ce47e2cc207f3eb80d4713d16007fb10f6e736855c7d807eb393464f092a32f2b358f2e5917cecfe1523c4e65af1f7ffbad03a7e5d0833f97149043c3bdb3ae5bf7b924dd071f2a3eb865f012b97f4e3d271cf2bc8ef275e1d9e0707efec6d681879643e7793e56a67349640e0d7df0b155cb740eadfa60c6de4542c77372cc231f3c9c3c3ab53f2b9ec3348bfbf6bdddf077983974dcf3b1523f2f89f4c1c939f4a9a25d930f6ef9abfae039830faeb53ba43cba24877f0d96c343e6ef6ce6d0ba0f76d5823dfab1341d0bfe1e44e4d082c1940f7ee7f4c1874a16edd39795378f8eaf0bdb9fdb91ce613b8fc3468ef79187bf9466fbe26f37e78253fab1900f06ba5d46d9556c3fd60ba4db5325876e393c37d2fb38247f0d3e38671e4d7398cea3ed1c76f32686c343e1b1f97da6f0d7de87e562b03f7fd3faa167be1f2b2187567d30cea15b1facea988d43c207a7e4d130db4acfa373f467e5e170289373ff995df0f779e7d089fd58b55ebd7cb09e5ff9fa60533f96c907530c7e45ee9ffdcf09db9ed791a32e5c82c3fde6d3ed3ea0047f8758078ecfa107d48f45eea5cd39f4026770eb83b18e4f810f86b5609843431da31c5a6170ce3c9ae6f0eeb3e070b7c38fbfe119741a7fbb792ec780fab19c3ef858d3ee31d06ead5bacdd17c67eac9311ac21cd29da557df0b264f030f2e8921c36f3b87b0edb72e77ef91b5a071e4e0e5dba1f8beda77feb5934f0c1ba8eb10fc63a3e950ca6fbb10487df917916f4c1af01854be6d1f9ebc2cf97c3e66c2a9cbf26cdfe3b73e8e07e2c2b7fffe69ac53e78810fda079b7368b17fd673e839c9dfb9d6034fc60a83b1765f5af268314c7974390efb31289cc3bf46a5f3691fdf5b86bf43a8030f21874eeac752f89bc7079b72e813430eede78373e4d1a6cf330caf0b87f767c53d236f486398fcfd37e6d0bf272395c180bf713934bb5afeaadaa57368e883e7351fbc4afa60fd791d29cf8feeae3f2b8dc3348f63b99c83bb61fcfd95c0df3c75e061e4d0599f8f55e9d8ce5fda072f0006db7368ace345b0975e34f077aeda419b7cb0ae655b1e9df39cd2bf9dc3e6f7fc7cf83b841cdab31fabe62f66f06484349b9243d33e18e6d027247fed3e38368ff63da794ab3fab2b0ed379b5ffecfffb0f98bf45eac0fde7d0defd58357f751f1cc55f730eedd78fd53258fae0c9b856f06452a9b54c1e1d5f170eeb93b6717836f2e9eef95bba0e5c3e87ceff390d4f66fe1a7cf0b151bb90bf3e3e18ee9d6bdd62edaeb5fb67c9df96c1ab80c1fefdd1e63cda5e1716c3755eb82b0e87f338cf9caeed30feda191ccadff41c3ad77339ca9f0b567cb0b297163a5eb0e4d0a7d56c6230e5835bfe9a7cf0a185c125f268dfba704a7f96b8c238dc378bed9a8ce72fa5d7aef87befcddfdc39749673c1357bad3934bf26538dc12d7f691fccae171a7f751fac32b8cda14d3ed89c61d9eac2ae734a79ebc2f11c0ed5e910f81bf2b5a5f157af037b79e0e275e06e7268473f16e0ef6fc6dfcc3e98cea117790e7d2235cc755ca956e6d090c10d87fdfba35b0e9b73adfcfd592539dc258bc3b9db197fed7d58339643279c0b76e5d00d7f510e3d3943bad57df0e948cdafcc3524cc5f533f16f4c1afb3e6d1e6baf02c7138378fcb78dffcfc2d5d07cef13985257268c207d7fce53a36e7d0ba0f5e5018acfae0f6aa75bca86459743fd69cee83998611836d79b4d84f9bf2689c6bc5d785fbe670291efbfdb936fefa5ff9f85bba0edc5f3fb4a51f8bf317f8e09abf80c1a572e893919a43cf21ed6a3974b5d27db04f1e5da22e9c725e298cc339f49983b3e9ec9d4dfece480ecd351c98436b7be905237f5dfd586a0e0d74cc7cb081c1af2d7974eebab089c3d7d9384c3d4f2b9cc7a1ba0fd76157fccddb87955607be1f53fc1d400e4df397f0c1b61cfa5463709b43b7bad5f7cf73440e3d27f9ab3078329e7c423e382e8f0ead0bb719967f7f56090e77995de5d7bcfbfc910f7ffba803c73f1fbab31c1af2b7f5c1848ecf90ffd573e853a4659dc127840f6619b42d8736fae0e83c3af4bcb02f874dfd59611c162ccec3e1bcc3f5bec22e93563df8db711f56481db8ab1cfa096a96e9d6ccdf46bb861c7a728ef88b73e853c45f573f569b43133e78f2a9fab165b03d8f0e3ba7e4ae0bdb3ecfa16b0ef7c5e278dde7e06fcbe0fef93ba81cdacedf56cbb586a58e6372e845c9df53430ebda866599cbf73721f4d3138fc9c922bd7f2ad0bf7cde1ae78ecf33ec2bc6f1ffcedaa0edc510eadf0b79a45ef86a25b92bf88c18a0fae880c75fbc2e8814f400fc789218746da853eb8d2ee12c8b0846e53eac2f473a453fba4fdeac35f9334364cee0e97bf25ce23f5944357dad57cb08dbfd8075b73687d2fbd48ead8c7071f120c7e6de1705c5d38579f745e0e0b16fbf23895cba17f4e1ef606e4cf3df1d7b70e9cebb91cd61cbad62de62f9d434bdd4e7df9ebcca11747e61cbabde6f5fc4af5c15cb725eac2e1fd5943e0702e26e7db7b535f5f76fece541d38730e4df197eda52717ee1c5ae76fb57b36efa54d39f48981bf73740e5defa3551fec754ea9445dd8f7bc9289c3712c8ee564ee399cbdc5f91bdc87d54d1d38730ecdf9ebc8a12b259f15c9a1a56e279f257f49edd23934f2c190c3741eed5b17f67d8e74371c8ecfa78733668dbf7d9f47ca9443d7ecf5c9a1b5bd34e4ef82c65f4b0e5de958f017e5d093cb56c7956ac13edacb07e7ae0b0f89c37df2388ebb7df377b875e0e01cdac05fb177d6753bb5fbe09abfb6bdf3e40bd22dd4ae398746fd586a0e8d7d30e8ab4cab0b87f76775c1e1be7b3762861f773be76fe775e0ce7268a516ec91430b0d231d0b069339f4e40ae878b15a997368ad165ca9f652f2f75a63b08bc3b6ba70371cf6c9a5e339dc058fd3b86bd3693a7fd3fba04bd78133e6d080bf4f76fefae5d042b7ad0faef9db32b8d66da35d670e5deda4c91cbad56eeb832583a176d53cdaac5b5b1e4df76785f649b3918fc35f47fd7335afefed84bf117d58b1e781cbd5819d39b4ca5f2a8736d7819996818e491f2c75bc48f017e7d0d8078fe97e2cc9e09bc944e5b0f39c925a170eefcfda1c99faa47370389dc590c929dccd770d8dbffdd781fdce232939b4c2df27a8598ac190bf2cbfc27be746afc766feea3934d62ecfa1175506c3fc0ae996ef9fab710d18fc5ac9a373d68543387c15c5615aaf268e0d91c7bf3dde6f0c7b53f81bda075da20e5c3c8726f22c9e4343fe021d97cda11735fe5eb60c463934f2c1d5ff6eb00f26ce2985d78563fbb362389ca75f6b98974d9f01cfdfe899bf25ebc0decf879edc5af97ba13258e5ef640af91b9343d7fc6d195ceb16d490bc7268a6dda61e7c4df8e0d8ba705c7f962f877d7269bb5e6d7c1b62de6cf7bd2e5d97e46f993eacdce791bc726883962f38838dfcf5cba1f5bdb42987063a5e54b3ac96c17a0e2d19fccf84ff2f4b5d98eecfc29fabe4c3e1ab6c1c9e5516bbf4d9157f43fba0075a0726f8fb64e7afa25d8dbf5a7ee599432b199621876e7d3095439b7db0575d38ac3fcbbf4f3a0787c3f3e9aeebc63eef235ed743e26f5a1f56d11cdac65f98436b3a86fc5d20752cf87b67cfa1351d73fe4eeef51cbad1f0a5f0c180c15f65164de4d10975611f0e3f4573f83a92c3b3c2627feee6e26fcc39a4f43eac0eebc00d7f490fdc6a163298e916fae06a75969fbf6d0edd6897c8a19976e91cbabe4492a56997aa0b9bcf0bcf0e8743782ce62e789bcbf7b6eced8ebfe97d58f17560fd3c92ed5c03cd5f4dcb98bf2a839dfcbd6bf9cbb4ece22fcea1751d1b7cf057c960e183ed7561f379e1b4feac1c1cf6ef9b1e328fc37cef57933e6798bff175608b6e0dfc7d52f82b7db089bfaa0f86fc057b674db77e39b4a2db4bd48fd5eaf65af2d7c4e0b0bab0de9ff5a0f197eecf8ae3f0552087fd741acac95273bcb6217fa1ae87cbdfdeeac08d962f8cfc953974ad613d87e67be90552c7640e2d757c0574ec91430b1d93fc057b69c960c961b2b614df9f958fc3741eede2f0d079ecabcdc0beab5ef81bd287d5511db8d1eb378ac1936f76fe0aed368ad5726855b79373c8df6a75a56857f2976957af03d3dad53cf035cca1abebbbece8d06a49091c0ee9934ee1706e160f83b771ec2dcbdfd03ee8903ab02f7ff53a70700e4df0f749e56fa3e8332a8756f8bb50eb9862b07f0eadf397e5d052c397388756f88b7d30e430a5e5d0feacbe381c934f77c9e390f711993b77c2df943ee8dc756003833df88b72689dbf740eadeb16f357cfa169fe26e6d004830d3d1db9fab386c0e1307dce0277bfcabbd03d7fbbebc3ca50076eb4fccd43cb67540edd5e0efe1a7368c66052c78b8cbdcd5074dcb0f752f860c0e0af7cb024eb81f337ac2eacf767d9386cd673290ea7f9e21c6c8ef9334cefd73377f6d06a6cff55287fef35ad86f237a10e2cf5aae5d08d66bfd9f96bae0333dd42ed36d79dcae0368716b995298716fc65da6d7368a95b55bb2087060cfe81183c8b1c0e6771e9fd72177a7f7efc8da9033b7368c4df0b237f510e4df1d79e437bf297cca109feda73e8af5cc73f11832d75e1680edbce2ba570986231cd61b32f4ee171ce617f7fdebed7a255bfe75fd9f51a7a0e29ae0f2bbd0efc53e3efad95bf1793471383711d98e0ef5d4a0e3df94cf317e65748b7d772efcc3db0c2600387893c5aefcfa29f9fe5e2f066108729cd420e8b7d73577be47e988bd93b1bfc4debc38aac03d71ad6f6d317462d43fe5e002d9f99ebc0aa96257fef741d73f666cea1910f8ee3f00ab9a7f6e993ee92c33ebeb86b1ebbde4700777be56f777d585e7560a4d76f247fbf69fcd5188cf9db5ce77e39b43f7f9b1af0bd6030d2ed25cea1d51e8e667c57182ceb4846ddbaebc2aee7589a39fc34cacbe134169762721eed9bb9abf0d7c1defcfc4def838eefc35272e84abb7a9ee5e0afc8a14dfc35e7d0f1fc55736895bf725cd33974ad61cee01f88c17efd59a17dd2e6f34a760eb7cfd33271d8944f9b872f07bbe26dcbdd40dfeb57f79d31fe46f661d5bad5f87b4bf2f7c2cc5fa1dd96bfbe3974a555ac5d258786ba4dc8a1bfb61e58f1c13a87d3fab3581da91b0ec37cbae5701e160f6378fbde81f237ae0f3aa20f4be32faa031bb43c6ad87b3131eda585075e5075ccf80b7368ac6376c11c1aeb18d6812183511df892ccb2be4f7e02064f342f7c93d09f5596c3bb0a87ed7562f708e564ee398abb1e3a1d167fd3fab08c7560aed796bf5a1d1869f69bc25f2a87c697398726f84b6857f257d3ae218736f097cca1abf1c419fca072d85a170ee5b07e5ec9ce61f7b9255b8e4571aa7f86a6b1d7c3f77ab2b76ffefaf74147f461711dffd4f8dbf8600b7f1f55feea5ab6f15768b952e99db697063e18eb18f1f7dea46390437f053afe2a348c7c30e4b0a53fcbbb4f1ad7861f3c39ac3e472b8cc3aaae43d93670ee7aea14f43d77cadff43ee8803e2c85bf441d3898bf8f76fe6ada4de12fbd77be94fcc57be76bc95f9043571764f03ff6bab0777f962f87f5fd73590ecf0e8f83b81bee7d3be16fe77d5801fcfd26b92be6472a8756ae5abf7752cb776a0e1dca5fc0e0981c5ae8f83b60f08f84ba7008871f1239fce4c561a8ed48d6012ec7fa65a7ee0af95efbb9a321f0d7ff7958641f16d0abc2df4a9fdf48fe7ed3f8fb68e7afd4ad81bfcd7ca532985fc61c5a6a97f3173358e4d09542d5fcea1aee9d1bfed6d7af46c158bb2e0e631fdc0587379d1c36d5896d1c1b1e8fed79737cee3c7bfcf5efc37a2cc0df47077fb3e7d0b89f03f1d79a43130c9e050e3f05715868fb7a9487c73d0c7fdfeb913bdbf4faad07fe46f46125f0f7c2c2df473b7fc5de19f317eb165fba0fb6f157c9afae891cfabbea81a50f6eb5fbdbd89f657b8ee570386ccab186c9637ce5f7bd80bf90bb03e56f641f16a9e56f5ccbdf082d63feaa39b4cedfe510feea5a76e5d0955aefd52c4bf2f72b91437fc77b69cee0df9e1c5ed532e9b473c3760e3f3839bc0938acf2581bf5dfe759e2b0a73ec3f86bf6bdf9f99bb10f6bb2c2f9bb6260f02d536d33530cc6fc8539f423a9db55237f237368c65f9843ab1e383c87aec61bc4e01f7a5dd8bb3f4b3fe3a0ee9fc338fc94c46135c70ae7716e2efbf3368fef35d47dbd9f3fd91f7f3dfab02a1dfbf3f7c2c9df47a39635feea5ad67368377f0583197f858e017f710eadf2f71a66598d82d72ae5b61cd6fbb32c7dd286f34a83e530e2f100389b81bb7e75dff2fc2dd607ede4efb764fe3e6afcc50c5eb6f397cea1996e6d39b4ce5f25bffa6acfa1abb1aef86031e2394ce758eb5939bce9cd61578e15cac3902bf6f74ff7bdc3e26f481fb4471f56c35f639e05ae5b8dbfdf107bd978e43934cddf65aa0eac8c2b5453ba5219dc68f85edb4b1339b4c2605dc73087fe2ef6d19cc1bf3987752da3fe2c9ac3c4556b79238ac31bd11c56f3e95d1f0e8b3170e6a6e5ce6efe9a9f7fd50f7f1f207fe5d035fb13e9f51b60f0a3a6db91d4eca383bfcb1a7f2183bdeac06efe2a7be74b836ef51c5a6a17f8e0dfa476739d578ae5f08391c34f9cc3148bcd3525c8636aa472b37fee5aeabecf82bfb59e1f9d7be978fe3e3af8abeea533f0372a876eaf75e083d71a1dd35a56396cef937673d85c1f7eb07058d5b4ca6171a9beb8d6eeb5d50f3fe95a181073e37daf4bab03e52fdf2763fe22dd4e5602f97b61e1efa3c6dfd510feeada6df94be7d08cbfcda0f84be557d77c7c470c7e8318ac6bd7a33f2b98c3a1b974090e3f7968ad07de266adccd5d377b87c6df07c15d85bf8fc6bd34bc307f552dbf75f277d9c1df0da9e57aded0747c2ff8db8c7b95c1c61cfa2b1f8e3a30c1609147d35a9e3d0e435f7c15ea8b0730ae8939ddf70e89bf048315fe3e06f1f716e955d56d7b41dd2e2bbad5f9bbace836137f95bdf3b5d4ad9e43b7da6daf374cbf92c16b969e0efff34a7d72382c9f56f6cf517be208be66e6aebfef7d2efc5d81fc55b41cc25fc6607d2f4df1f78ed4b19dbf9b88bf9b5efcbd34f0f71ad581510e2d19fc8e3318d7851d1c769e1b8ee3b0fa794b260e3f3839acf21872f85a999dbeb87fee66e5af99bbf9f9eb3c075ce952ce48ab247fe508e5ef5b82bf8f89fcc5dadd42bad5f6cec0ffa6e5d0eb82bfd58f90c1360ea3ff59cf2bf93dcf92e6f08395c3ba66218785564dbe7810395606e612ec4dca9d317bcbf237e81c12d7701c7f2fbcf8fbd6c8df65077f37640ebda1eda5217f891cbae56f33630d8b7df4574dc3640e4d30f8b717872703e230c5e2272f1eab1cbe76e9ba03dec673d72f7776f3d7acd77ef8bb22b58af9abf661e5e0efb2c6df65c4df0d9443ebfcdd44fc457be7c97b2ffe5e1af87bad69f70d6230ac25e9dad5eac28d76f5deca100e9bfd702e0eab2cb66658a17aed80b1e9be7706f90bf4ece02fa1e5fafaa0f1f79bc6df478dbf8f0efe2e1bf8ab67599b80c1540efddec05f9c436f133ac6fcddd118bc66e1f06442f54ab71cd6b49c99c30f92c33fb270585c530f1e5f731e5f27eacec6db34eee6ca9d3be4afc2dd78fe7ee0fcfd606470cbdf4785bfcb40b771fcddd0746be72f5d07be34f0f7dac05f9443231f6cefe9f0e8cfea94c3744d6993ebd6c463679db8a3fd7366ee46e5ce83e42fd0b2c25f879673f277d9c15f530eedc75f31de6b3a76e7d01fb52c6b9d9f6cc00c7e08eb931e1087fdf3697e557ffb258f9b9f4f3d389c69f6d803a7b277a0fc258681bfe468f52a669abf6fbdf8db72d8c45f31ecfcdd42fc55190cf9fb5ee32fd3ed36c1df7adea5f22bc6df6aecf18e8e359447cf0e87295fac7318f27856383cd54716df6baefbf6c05f623fadf3d7b597163ade776a59af03bbf9bbecc55f3a87a6747c4feab8e52fcea1bf4f6c39f44ead61c460bd2e9cc461e5dc700e0e3f7871d8e48bad57cd6038682e47f0d84f7bf9b9eb57f7f5e7afeff33734fe4e0e7cf95b5f9efcdd27f9bbcf67ccdf478dbf8f0efeaaba55f9bb21f58aebc03a7f3f5bf8bb8dfab05a06efa2bdb39e5fbd61da050c16da1d22871f22388c79fc64e5b1fb3900ddf1d893bbd1bed7cd5fb396d3f9cbaf46cf8f462d2bc3a1e56f5ccb3a7ff78dfc5d467a5619ccf47b67e02fae036f78f3d75607de060c86fcdd75f0970dc8e0440e7b3dbf83e6f0bda2e77b038737080effb07058e5b1339f16be58e5311eb586d4390b5f53d91be27bdd7aa57daf277f1b9df2b919347f1f307ff94569769fe0ef074db3fb0a7fdf7af177d9c1df0da459ccdf3687de347860a1d9f788c198bf3887de257268c8df758dc16a2dc9dd271dcee195280e6f38396caf29d9392c6a4a9b7cee83c39ebc4df2bdf6dc7970fc9d1c02fe1e92fcdd27f8fbd68bbf6f09fe2e1bf8bb1cc4df36873665597a0e8df94beda37196b58318bcaef8e0352293161cfe67801c36e5d34f461e67e470cbe376ee99bbbdf3177277bce4c3dfc6f762fe520ccecfdf650b7f971dfcddc8c2dfedc01c1a6a57f2b71a7f4b06d7e3f7c039ccf6cf765f6ccbb16c1c566b4a62e4e231e17123b99bc25e93be4bf27709eca70fad7916e76f33ecfcddb7f2775fe3ef23e7af49cbcb9cbd36feb65a3eb2d481c3f8bb4df01733f858d68177681d130c3671d8e3bc12cde1d14d210eff30fa623387551e3bf3e98e79ecafcddcb9731c7f97007f9708feea0c5e6af9cbb56ae7ef8ae42ee6efbe95bf27fc67cbdaa0f9bb61d4ad9dbf5b8d5ef51cfabdd4ee7b238329feee127b672a87de23198c396cea9386e795f079ff3c1c566b4ab11cb6e758161e0b0e9b6636588e65626b2867b3723747dd57656f187f97007fa1aee9bdf4a1c6df154ffe7e48e66f7ba5f07713f0f79ed4b1d0f2a981bfdb440e7dcc07cddf75a6e146c12f2ae576c0614b9fd63dd7f106a9e77b2f0e3f68f9f40f0787eb71cee74c1ca678ece4723c77fd7d6f4adf95d0eb12312f61fe6a43e7ef9293bffbc1fcddd7f87b62e46f7bad6afc55b5abf27743e12f5d076e75ebaa036f1beac0bba407d6f83b9923184c7158cfb0d239ac3f5bda97c342af211c56bd317d597c313d337de2392b7753d9db257f97007f9742f88b86cedf7d2b7f4d7be938fede913abee3ec3d9aa8f5a418fe62066fcb417be0ef0a83651d58e8b851f05f956a5f28fc556bc33ee7957cfcf04d010e431eff30fa623787cf955182c7e7519a54b9ebef7bdd5ab5f3f796e66e007f9714fe62ad52fcdd07fcdd57f8fb017157d76d0c7f3748ddd6d751007f37916edd39b4cedf5d037f77943ab09dc1b03fcbfd0cda3e390c7db1ad5f2b3ac7f2f5c5313ccebcaff6f5bd7e59963f7fb1ae7df9bb14c45f55cb66feee031db7b34bcbb00e8c757c24671b7f37397bef491ddf73f69e7ad781f15efa23d8476bfcad34dcfa6013875bfe8acbbca74ee3f0bd1787ef1bfdda7df10fd2173f81d9ce63af51f354cce1a3d69c69cec25d3fad32fede728dde02ee8a79c93c8cfcd5b8ebe0efbe93bffb72f6e1afcee0138dbfcbc1fcdd50749bc6dfaf80c1ad6eaff9de7997dc3bc33a30d3ef1e67b09a63a572983e6bf83a92c3544d89f2c5a11cf6cab1e2f6ce68dfec535f8a636e98ef4de5af7d3fede2af692fadf357d7b389bfb49643f9bb81f8bbece0afaae338feaa39b4ce5f2a876e753cd7eea325830587e7ad1c36f7490f91c3761e3f19796cf2c585788cb87c49cef7d57c2f671ff6de3a679dbbea30f397aafb2e01fe1243d1ea02e0af3e7cf9bb0ff4fad8fc3c8ebfcb56fe6e22dd6e12fcdd44baa5eac0db72d0fc55ebc03b7208dd121eb81a8b9cc17f111c5ed338acd7920238acf475400edf932c8ee3b0cd17bbf32c638695966565cbb3427caf7fee6ceebbbae5b321c772f0d7b597a6f96bd272ade40f7cb6f1f704f117723884bfed8075603b7f551d43fedaebc058c7e63a30f6c1731a83595d388dc337ca988c6e22390cfbb536480efbd489751e9b394c71b9248f2fad73c35b31d73af49a4ddc65e31b9f993629eefaf17749cc80bf06f61af8bb60e5ef3ee0efbe95bf27247f4f02f97ba468d7cedf2dab6e6dfc85fbe66d037f77017fbf4bfed6f31ed66ee3832183ff32f6740c87c326cd420e8b7d732c87bdf54af038678e95ca5d3ff6de73cede49dec2d9916591dc6df96bd372abe9054ffe8acb87bf2792bfb496eb6ba91a4741fc55b5dceaf83e80bf6a1d98e6afae6382bf2483fdfbb3dce786290edf64e530f4c5fe1c6e79ace7d3d47c0ee6cb90b9e6a9989ddc95bc8d1980b3a6f10d70d7cc5fb3566f09fe2e79f37741e1af99c139f80b07e6ef4b92bf4716fe6e04f1f7bdd42c63f0b6a2dd6ba307ded5f6ce50bb147fffae2ec1e017dd7298e8afcccb61cce3b87c3a78cf9c9e6559f8cc722c315f12b3ef7e1acf2d7f296dfbf1772998bf0b80bfaebdb4cadfb748c7fb0efe9e78f257d772cdde4d6ffe6e22feb60c3ed5746ce2ef2ee2ef472dcba274bcc819fcaa526e690edf4473f89ee0b0c917bbfbb5cce3bc199df0b8faaf8acf2dc85d95bf3edef7969897387f97bcf98bb96be3ef02e0ef3ee2ef074daf347f4f2cfc7d69e4ef92c6df8d46b7147f371bfe6e22feaa0c76f397ae1fed4eec756055bb7b5cbf7f231fecc3e18789f98c43d71cb6e955e7705b4f2ae98bf3f2f81e0d986b59f84be457d4b85346087f1f9892257797d01cc25f7a2fedcfdf9344fe1e19f8bbc1f94b67592d8343f9bb8df8bb4df0970d137fe7b007ae352c191ccf61f7f33bf270f8de9bc3365fece670cb633c62797cde5c9770d47a73cd49ec0dc99d6fb95e29eede56ba0ce3ef02e0ef4266fe62cd0afe9e58f9bbc4472a7f3783f9fbde8bbf70ef6caa03eb1e98f35732f82fd05749e9760de8b60b0eab671dec1c769d79c01c56fdb19bc3ddf258e3ad718ed3b589bbadc6e90c4b66599cbf4ba4ae4dfc5d00fc5d30f2176bb9147f9782f9ab6bd9c6dff788bfef49fed63a3e061ac60c6e352c743cd70c4ac7af118387c0619dc52a87ef090e6f689a36b1d8954fdb396c1e97604e1a662e8f6f2bf5de5ae74b30df49bedae625f3f0e6ef029817bcf8bb00e605237f4f262a7ff73be4ef8683bfd4de99e62feec3a2f6ce6a1d78c75a075eacebc00d83170183ff023ed8d427dd1787571c1c76fb62dc5fa9cee77ccecc612f2efbf1d6927779b2d797bfd45e5a665946fe923916e0ef42027f3f70fe623dabfc3de17d58ba9697acfc55b50cf97be4e4efa9d431c5df53a461c8e0afa48e611d78077960037fa5823183550efb9c1b7e307298ead3cac961da17630edb781cef8b3be071cd56dbd0b82be67f3867ed979dbf3477c5d0b84bf2170e95bb6efeea43e5afaa57ac5bc1df258dbf4bc1fcdd9ac07d731efeee1af86baf1f01fe4e16a763cee05703e0f08da6d9380efbf67798797c0ee61ce71fce519e85e69aafa6390b77217b056f6fc93db6926129c38fbf48d74efed27b69137ff52c8b8fe9a819361d63fe2e99f83b9d38f8bb5980bf741d187b60a1615007161aae153c9d0206bf527c701c87fff1e330d7b4e0f08da2675dd3fab86f6ac52e5fac0f7f5f9c8fc71e5cb633571b9778f6bc2ceca5f83b5ec4b3cedd3cfc9d9e39f97b82f8ab3278c9c8df25037f856ed3f82b72e86d22bbda96e71760fd08f2b7ae1dd17be73d4dbb7b50bb1a83618e15c7e189c6e11b82c3373a87d13e5abf2087ef2587edf974585d89f6c52a8fcdf339988dbcf598d3b32c38dff1fdb4caddbb103d3bf94beea7bdf8ab6b195c8d9e75feee77c85f5dcb98bf9b88bf82c1db52cbad86b749fe620fbc63ad03abfcadf6d1d34f90c1560ecf3bce2bf5cde196c71487378c1ce6637c5398c3161e577f76246f1177fd7caf45af3c77bead39db5c80bb7004f07701f0971a1a7f1bcd5af95bebd5c2df25237f9754fe367a25f95bfd173b7fd5bd731c7f77a56e690facf317d681397fab716e60b0ad3fcbcd615db7fab9ff9b400edf2b1c76f9623dcb0aaf2b95e571962ccb9871fda3689bd6b8277fd5beab46cb648e65e5af7d2fadf0b752ab41cb8d8e15fe2a1c56f9bb24f9ab69d99bbf9b9cbd69fca5ebc02a7f711d784eea78518ed78a0f7ed53b876f30872df9f4fdc8ee8bef2d1c16f30f2b8fc55c80c70d73e1b8b5ce06ee06e4cd9456af9579916bb5e6ecb5cedd00fe2e00fe2eb8f8db30d78bbf5caba1fc7da9697649e8950f3b7fc5e5cf5f5abbbb7250fcd53df09eccafe694fc0ae7d0e70483d3384cd79262396cae29d1bed8954fa7e558719a0dccb13270570c3b7f43bcefa23e5bb4acf27701f0d7bc97ae757ce1cb5f38007f97e2f9cb191ccfdff788bfef9186b7bdf8abebb8edc3523df06bb88f060c7e81744cf567b9388c2fc15f0f0ea33af12ae58b1516fb7058b0d8c4e31f230f1e7b8e7330a78e4b39dfaa73a5c51bae41df59e5edb532169bd9c85dbb5e1bcd2e00ad2eb8f88b747ad1f2576770f52a9b69fe2e21fe9ec4f017ec9d397f5b064f3f93fcd5b5ebcf5fec81317f5bedce85f0b71a978cc1cafe79581cb667592d8fe9b30ef69a1264b2af2f4ec9b24c7956147335f6a6fbde6bcedf6bc0dd6b5f3d0bee4ebfb49a6e7eeec55fa9678dbf8d96ddfc55f7d216fe821c0bf0b7d12fbd9746fcadd46de6ef29c9df633eccfcfd48f0176759ad075e843a060c9e2d0edf1835dd72d8ce63ca176b33f4c5113c3671f9326ce64c0d192a6b75eedeba7c2fa1d76b3c038dfaf177c19fbfcd30f37789e4efd20cf157df3bb7bac50c5ec475e0e995e0eff48a31787a4de458dd7398a813477058f862f3b3f15c7525a0d74eb22c779e159a3763fedaf6d3785e422388bf82bbf52c346de56fbb9f86fcbdc8c6df2539d7fa051c063a56f83bbda1f8dbe859f0f734137f77257f8f117f7714feea75e045510766fbe8e9156670a3651f0eaf0570f82192c3376a3edde8f8cee88b6d7562f5da508695c30a8f7f707d87cce7c46ce3ee6514775dec0de3ef35c1dd7a2cb2d98fbf9cbbcd0c75aaf357fa5e82bf80c376fe2e19f8bba4f317ee99317f9b712b74db6856e3eff41fc45f3dbbda95ba55b54bf37707f1d7b977aeb55b8d73ee838576737238a23e4cf76b59f6ce348fefc1ecf32c004f1e67d83bc70d8dc78d56ff31cc7a9e45e557fad0b97bed64ef75cb5f85bb06fe023defa361e42fd432d0f492c6df1385bf4b3efc6db58cf92bf6d12efe563a160cae46b552757c8c744cf1f798e42f59079ede49fe5e491d9f3306d7ff4be0f07c30876f849e475f3ae430cd63c1e41f60ee92c7976c8e646e98ef35e5ced77006bc55c7a2ae559dbf0a772dfcd5b84bf2777a1fc0df9748af247fa713c15d384cfc1543e3afb97664e62fccae769176893eace957a9ddaf24832f05831bcdfa71f89dd62b1dc761f2fc7f00877d6a4a2d874d3c76fae2e1f09873969ee3f6d390bd6efe1af6d46efe127ab6f0d7b4976e353dbd2fc5df56c7347f351dfbf3f7b8d5f0f41bcddfe9771b7f1b1dabfcbd920c7e984e3be2f03f460e9b9fe78159ac7218f3f8deca633b87c155a9a61992c7d6513354ccee61bd6e0366bb4e17ab57f559e32d9fe5f0e3af7e8dbf90dc5da8f499ccdf86c13a7f4f5cfce52398bf8d76bdf98bb53bfd81f86bebc3d2f90beac07efcadc64fb98bbe86bd9588c3ea99ff700eeb1996f5f9f0743e4d72d855536af50a791c7cf62182c3295c8635a430eefab3f7d6c25da96d25c35206c55f9c65f9f1d7a56585bfa6bd34e4efcb78fec2e1cf5f45c78f3efcad560efe021ddf69b5a473a661c9e02170d8fc3c0f8dc5231f1e87e5d30487218ffd467d89b9d0556bef866b10cf34776f54ce9a06cd5d9dbfe32f78d6b86be46fa556c95f728c5adf6be36ff55f7be22fd72ecddf470b7f770dfc35f46171edee91da95fcadc6539b64410e13bad5393cefe4b0d06c3887a52f06fd1deaf33c42b22cbc7f36f963afb30f19780cb90c32ad86af3751dc0d656fcbdd6b3463fe3ad88bf90bf54ceea723f9db70d7c85fae6582bf20c72218ecc1df53c8df56cbb5865b0637fcfd45eab819d50af0b76570cddfe96f9dc1d5cff61a0a03feb67560d5034f972906430e37fbe9780ebf9b047118d59bec1c76fbe23be98bef8d3c0ef2c5693c4ee6f2b5632c12733c7b35fe42eec261e1afc65d3168fe62ee3af8bba4f1f7a5c6df2595bf1483edfc25759bc25fb477c6fce5da35d48135edfe2419dc1587cd75621787ddbed8954fabea54792c66af1e0fce616d06b523626e147d4bcf92c3fe9996694f4dcd3a777df54cf277fc45e7af6100fe724d5fd8f7d282bf4ccb46fe2e99f8abefa5a737347f818e0bf1177be0e90a1b76fe620f8cfbb01a0d731d370a5ee50c2ecd6173dff4cd84f2c5f43962da17df5938eccb63af2b8ec7515c0ee12d9e53d87b3dfec2f86be2ae9bbf8d3a11776dfc557dafcee046abba66397ba76f4cfc6d356be5afe4b09dbf6d1f16ceae6add36da95fcd5b44bf2576ad7c85f964337fcbda2f85beda205831fbc38ac3f032f9cc3a2b72386c3fef9b42bcbf2db3fdfb673a35be7cc748967336f2577f3efa9f5c174abcec1fc85dc6df96bd1b3c65da66f337f99efcdc65f55cb37f5b0eaf8b39dbf8cc182bf848e257fb107a6f8dbeea32b0d37c3c2df56c3ad8e2b0d370a5eab546be7f00b85c3ef483dc3734b611cbe317198eed9a27d71cd5a0f1edf231e439d7bfbe23c3cd6b85c6bed52993373777cc5e72f92b70a77ab57bf30feda86aed54ad10d7feb5967afcadf4a9792bfad564dfc1583e6af59b3cd40fc9d7ef6e52fd36e107f8f49fec2ec4aaf1fed71ed1aeac00a7faf6406fdb3e66f35d63983d73ae730fd0c1e639f25d0aae28b9d1cb6ed9dbdf5ead2aacae302f5a570eedef870d7b19fe673cb5da66131dbf8db681a71d7b497e67ae6dc35f1d7b09706b99643cb047f290fccf57b4aead89fbf5a1d58e72fd371cb5fbd066ce12fd7b0f4c124872583f371d85c27a6387c13c8e11b8dc33a8fef351e535cee80c70d67a97105e66bc70cb9ea310b5d2a63b19db136edfce5dc6de66a283ab5f1970d137fa156c178e9c5df2595bf82c14caf846e15fe4eff21f90b7a379876856edb3e2ce3de59e36fa3dd54fe3e553f5319dc0d87c515c1618dc77a7f07cd613b8f83f41abf77863c76f23986b926ee7af85e625f7dcdf44c73d7ba972ec25f622fbdc473ac64fed6179b1dfcfdd5f257d1f1a38dbf92c1441f56abe3d60337fcbd6b752cf97b55d7809bf18418fc40731831389cc3f380c3f3048bcd1c463c161ca6f369f3d0384cf3f8de3ad70abb6c67bf513354cc8e711530b7e33a7858b92b661b7b91360177fdf8dbfa5e39ceccfc25c64ba0d7ccfc850cd6f95b5f71fce57be76f90c192bf733a7fb976bf92dabdc4f9151f6f490623ed16e7b0b15fcbac590f5f4c9d3f54396c6272473ca6f8ace558a699ae2fe9dc35eda749deaac3ec7bcd7be97a069781bf849e09fe527b699dbf53bd8e64e46f9b63a9fce514b6f0b752b2277f491dafc03e2c52c773147f451f96c25f99634ddf7206af4572f8457e0e57aa357098f6c5c63ab1e0b09dc777165f0ce686c37c1e5f85cc3533d5398abbb9d84bf057e7ad3a4be6c2e1e2efa6a653037f1bf27af1570eccdd8d30fef23df32dd02de72f1b90bf50b3946ec3f93bfd2e74ebda3b9bf32bc6dfeac775de55b9d60187cdba851c463d96e2bc837796c5796c39ef40fb62139783ae301e7bedb1c5a038dce6592d6f55eefa6b1a0c95bb147f95bdb41c66fe12dc35f297d632d7f1868dbfd30d8abf8d9ac97db4ce5fb68f863af6e4efb189bf52cb2b98bfa20f0bd6818586a77792bf5740c3cb601fbdde8c27c0e099e370842f16c3c6e37664e7b181cb57704e64aebfefbd32f156bd9cfc55b82b675dab06fe720a13fc9539d51b13836bcd3603f3f79d8dbfccfb86f3b7fa2f8f8a76257f9976856ea7df8466fdf80bb4fb95ccaf7e2a1eb8e16f756df18e8e5582c3d30c1c9ef7e6b0b8e8b30e565f6cd0abfbfca19bc35139969a6579665a61b9d775355fa3396e3fad689ce22edc4b53dccdc5dfe632f09731b861ee868dbf48cb90bf37462d733d0bfe621d33feaa5ac63a86fc55758cebc0ad8ea93e2c8abf8a07fe893d7035de2b0cee96c3f313cbf9a586c3ae7c9ae0b19bc30a8f5526df933c368c9a9dea1c3f2a3532bdc5cf4c8b972d678db3f3327357e9bb82dcddf4e16feb7b5dfc957af5e7ef4dcddf667cd606e2afc8a04dfc6d52e864fe562b55b77b6cd8f90bb4fb53d3ee93c6e0b546bbd36c1c9ee7239dc39a2f0ecdb2048f0d7d96ab7c7f5c90c7915cd673ad70eefab117e4cee32fed8cf7d466f6023dc379b3e5af6120ee56d78720fedab55c82bfbfe2f94be858e983c60cd6f6d1aa8605835992b5ad31b80487218b3d396cf4c5370487414eed9d4fbb46108f292e3b789b677c41e3ca32c7b117f27793eb95e2ae9dbf9b40abf726fe562a74f057e6ce1b8a6e13f92bb4ebc7dfe90fc8df4ac92d7f57ea41f1b7f1c0bc0f0bea966bb7ae037fd5b4abf3f767cbdf6aec481fdc3d87adba1d7df3e170902fc6bab5f3d8d66f9985c722d7e23c36cf71dcb5b357dd6303ee7aea59f5be9b0a77ed5abe50b96bda4b333d9bf8ab69b965efbb58fea2bdb493bf92c19a8ecdfc9559d61cb98fa6f82beac0cb20c77a2b34dc28f863a5d86d82c1f11cfe2b8ac3ef5c1cd659ace4d3061e07fb6262548a92b3ffa819a9ce3d70d78bbdaa5ec79f2077f94c31d7acd74d3e6b5a35f1b71956fe6a23277f7fd1fc15dae5d70f936e55fe42ed42fe6adafd4a6af7a7ccaf969b01f6cecdb5a3309871f8c1cde1f6ecbfc661fa73c3fd38acf15866599a2f867562da177bd795d8f0e1b0677d29b1cec4f479199965b57cb5cd42db9fb96e3ffbe8591de34f2d779b9f7beda5ab5f19c05fc95e92bf9a8e5bfe322d43febe43ec1535e020fe42062bfc3dc6fce53af6e42fceb2580ecd2fc8df9f0a7fb98625835d1cde8de0b049cf2d8b1fc87c9ad433e470902faee6d18d2f8ffd461c8f6d5cf6e2733877bdd93b3ed7b9dbfc5cce16f66e6a1ae5fc6d7e6ebc90ef35f2b7faaf36febe6bebbf0a7fdf21ed0afeeea99ad5f9db5c8f70a4f2b7d5ae99bfc2032bdafd89b4bb8cf95beda2f71506ab39961f87ed671de6659d183e87e7816471065fec936505ec9f8379ecd7f721395b624f6d1a42e356eedaf6d3adbe5bee6afca5b97bc1992bb84bf217eb59e5af43cb76fe920c56b4fc4b19b57e13f95be99ae46f35eebcf87ba5f0b7d5f01662f0aae430a565e183ed1c169f3ffc0268fa853787bdf369b1b736fae21b0b87f93cbacb905367e1b193cbb5e6cee57c45ce82b7e7686eb8ea357fc2239cbf42a3f5dcfcdccedf0385bb56fe927a6df9ab0eac599dbf1a83c3f8db6857f2576897f197d781bdf92bb46be0ef95e4ef4f45bb82c1fbd58f82c1b67a524e0ee3f3ff3a87edf9b4d02ce98b4d23ca1767d66a913c2b8cbb5ebe57e899e26eab6f1ffe6a9a36f257db471bf96bd0f2bb40fe1e92fc3da4f88b750cb4fc08f94befa555fe221debfcbd33f057cdb1def321f6d13b80c16e0eef16e1b03d9f9e37e959f5c52d8f6bd62a3cbeb1f1d8c4e5341e47e4d6e7685c396713777d8795bb26f6567a84b3d4a883bf076056d98bf8cbf7ca26febecbc6df4365ef4cf0b71988bfb55eddfc553268c95fbd7e64e1afea817f2a1e985d7f73067f2cc261bda6447338a44eacea1572d8c263779615a6d7f4bdb32dcf32723a9cbbb4ef25f6d390b3f4b0e4cee45eda8fbffa10fce55a76f1f75d207f0f3df87b04f9abeca5b98e2bd53af82b740cf87b87f90b747c27357c25f97ba5f07759e52f60f0c74e38fc6a62da57eb1c56783c9efa72187b6382c3048f5b0e53f3a4566d461e7bf1d53c53239abd76fe2abc6d663e68ee62fe42ee8a41f2b77a650370d7ccdf3740ab70bc8be0efa1c6df23377fdba1f17785e26f7311fc6d46c3df665c2106ff04da55f97bdc68f798f1b71a2780c1f9391cd6af45f962738f259565211e9bbdf148e8b6008fd3332da4759c63d9e62b65aeb5fad9c45b9b9e697d9bf86bda4b4b6d43ee7e40ba76f2b7f93194bfef8881f9ab6b1967d069fc5da1f8db5c777c84f0b7be4e15fe420dbf400c9e8be2f06e3087e72dfd5aef5c1c1e7df6d134e6b1c5170b3f7ce7cbe37a1e9fb7733502e65a6fa6d99bb771dc75fbde73c65e82b7ea30f2b71a147729febe9173ab538ac1efbcf8ab6b762f99bf4788bf7fa90c6ef9dbccdf550fccf7ce7b2a8303f8fb53f2f73df0c04cbb750e7d22193c2735ebe2b0fd79b4711c9eb773b8d93f7bf962cc63baa6847d31e4b189c9e1fbe7381e2b3996cfa034ff39653fadf3177297d8531bd9abf057d535c9dffa72f0f79d1cb9f87b68e72fd84bd7d73ce46fb56a75bcc275eccd5faee33ba4e30590412f230fbca8f17787691830b834875f2471781ef8613e4f977c7d31e6b17d481edf2923338fe5cc47ad3fd7dc5c3eda3c47f3a7ea47ce5975e6dc3db73297642fe0ef41c35f9abb347f0f247f4d03ebf50d9f5beebaf87b08f8bba769f6d08bbf8f69fc9dbe14ba35f2f71562f04f637e0533e8e386bf8d07ae76d12752c1711c366459caded987c37a9d38c8175beb4a513ca6f89cca63a6db6cbc8de3ae83bd7c5ffd89f1d7b2a776f1f700f0d79565a9dca5b22c337f692d1f26f1f748d331e6efa399bfcd20f8db0c337fa10716fc3d5534ace558d3170a83290eaf125a7e08e0f02b2387dd75e207178f852fc63cb671b852e3173147f3981c352bd5396d182f9db3783ee7dc3de7bc256730fcf97b00b9cb673ff60aee1e343f37b1f7b5177fdf19f8fb8ee0ef21c9df23c0dfa320fece43fe9e8d69fe9e8d0cfc7dd56856d7aeca5f9376117fcf266753a4e06e38ecd7df61e4305d57b2675960ff6c3bfba06659d6c1f7cf377c3f1c38208fb5d9966de5e0eeb93a73ee9eb7fc0ddd4f4b7d7f90fc75eda585a66dfc7da7e919f2d7bc973e04ec6df97ba8e918f2f7c89bbff3aa07ae744cf2f7ecccc5dfb3b60f6bc1c8dfc526cb22f85b6bb856f0d9b942e1500ea3bee9080e435facebd9e98b6b0eeb3cb6691af3185f361e870f7f2e67bafcb9ebcfde03c0df03c9dd4d0ffe1e00ad1e78f1f7dd349cbf8711fc3df2e4ef5fbefc05da45fe1768d7c45fb57fa3d5ee29e06fdd072d18fca2d6efd9b452f054db450f97c3f398c3613d1e70ff6ceaedb0f75c1a665f1ee7a83db9f6cef4ac73170da0ef4f4efe22dec2b9d1b2e0aece5f9dbb077cd8f98b479b3bdbf6d2147ff708fe1e05f077de97bfd5cac5df5792c177047f17941c0bf29731f86fac61c1e0b30b8dc3abde1cd6f2e9c9abb3cfbaa6f905393c1fc0e177260e37ec75f2d8c717bbae4a4911fe988dfaffcb467da97387dc25d93b5e20e60395bb88bf26f61e00feb6c3c4dfd74efeb67b654ab7877cd0fca574abf2f748192efeaeb8f8db6857e7afd02ecea017247f17247f4f15fe12fb67c6df6a5c32062bfacdcde1570a87db1e4b7b9f25eeb55478dc3038ca177be559313cbee31cd6e6b81a53baae4d43d1b97b2f7d4070f7006adce07ba9bdb48dbfba8e217fdf19f97b88f4ece2ef21e7ae89bf4739f82b757c57fdccc6df2b82bfa780bf30c77ad1f461bd68732cb68b3efb5269b8e6f0554e0e4fa7011c56f3e979839eab5129d6c062c163c8e196c7a32f79790cb92ce6f84171d9349f5ddbb95bf193fd1ccf3467f90c07d6a6e67b29fe1e8099e22ee62fe42eadd9d780bffa15c7dfc344fece43feb60c6e752bf7ce92bf9a7643f87b4af297ed9fff660caeae9bfffefffff77ffd1f9ff650a1 + + + + + OkPushButton + clicked() + NewPreset + accept() + + + CancelPushButton + clicked() + NewPreset + reject() + + + + diff --git a/muse2/synti/deicsonze2/.deps/deicsonze.Plo b/muse2/synti/deicsonze2/.deps/deicsonze.Plo new file mode 100644 index 00000000..9ce06a81 --- /dev/null +++ b/muse2/synti/deicsonze2/.deps/deicsonze.Plo @@ -0,0 +1 @@ +# dummy diff --git a/muse2/synti/deicsonze2/.deps/deicsonzefilter.Plo b/muse2/synti/deicsonze2/.deps/deicsonzefilter.Plo new file mode 100644 index 00000000..9ce06a81 --- /dev/null +++ b/muse2/synti/deicsonze2/.deps/deicsonzefilter.Plo @@ -0,0 +1 @@ +# dummy diff --git a/muse2/synti/deicsonze2/.deps/deicsonzegui.Plo b/muse2/synti/deicsonze2/.deps/deicsonzegui.Plo new file mode 100644 index 00000000..9ce06a81 --- /dev/null +++ b/muse2/synti/deicsonze2/.deps/deicsonzegui.Plo @@ -0,0 +1 @@ +# dummy diff --git a/muse2/synti/deicsonze2/.deps/deicsonzeplugin.Plo b/muse2/synti/deicsonze2/.deps/deicsonzeplugin.Plo new file mode 100644 index 00000000..9ce06a81 --- /dev/null +++ b/muse2/synti/deicsonze2/.deps/deicsonzeplugin.Plo @@ -0,0 +1 @@ +# dummy diff --git a/muse2/synti/deicsonze2/.deps/deicsonzepreset.Plo b/muse2/synti/deicsonze2/.deps/deicsonzepreset.Plo new file mode 100644 index 00000000..9ce06a81 --- /dev/null +++ b/muse2/synti/deicsonze2/.deps/deicsonzepreset.Plo @@ -0,0 +1 @@ +# dummy diff --git a/muse2/synti/deicsonze2/.deps/moc_deicsonzegui.Plo b/muse2/synti/deicsonze2/.deps/moc_deicsonzegui.Plo new file mode 100644 index 00000000..9ce06a81 --- /dev/null +++ b/muse2/synti/deicsonze2/.deps/moc_deicsonzegui.Plo @@ -0,0 +1 @@ +# dummy diff --git a/muse2/synti/deicsonze2/ARCH_ALIN b/muse2/synti/deicsonze2/ARCH_ALIN new file mode 100644 index 00000000..75e89ef7 --- /dev/null +++ b/muse2/synti/deicsonze2/ARCH_ALIN @@ -0,0 +1,24945 @@ +* TX81Z/DX11 Voice Archive +* $Header: /cvsroot/lmuse/muse/synti/deicsonze2/Attic/ARCH_ALIN,v 1.1.2.1 2009/12/23 16:15:42 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/muse2/synti/deicsonze2/CMakeLists.txt b/muse2/synti/deicsonze2/CMakeLists.txt new file mode 100644 index 00000000..98457f5c --- /dev/null +++ b/muse2/synti/deicsonze2/CMakeLists.txt @@ -0,0 +1,59 @@ +#============================================================================= +# MusE +# Linux Music Editor +# $Id: CMakeLists.txt,v 1.1.2.1 2009/12/23 16:15:42 a-lin Exp $ +# +# Copyright (C) 2002-2006 by Werner Schweer and others +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the 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/muse2/synti/deicsonze2/Makefile b/muse2/synti/deicsonze2/Makefile new file mode 100644 index 00000000..808654fe --- /dev/null +++ b/muse2/synti/deicsonze2/Makefile @@ -0,0 +1,687 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# synti/deicsonze2/Makefile. Generated from Makefile.in by configure. + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + + + + +pkgdatadir = $(datadir)/muse +pkgincludedir = $(includedir)/muse +pkglibdir = $(libdir)/muse +pkglibexecdir = $(libexecdir)/muse +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = i686-pc-linux-gnu +host_triplet = i686-pc-linux-gnu +DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/common.am $(top_srcdir)/synti/synti-install.am \ + TODO +#am__append_1 = -include $(top_srcdir)/all-pic.h -DINSTPREFIX=\"$(prefix)\" +am__append_2 = -DINSTPREFIX=\"$(prefix)\" +subdir = synti/deicsonze2 +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal-include.m4 \ + $(top_srcdir)/m4/alsa.m4 $(top_srcdir)/m4/docbook.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/qt.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(synthidir)" \ + "$(DESTDIR)$(deicsonzepkgdatadir)" +LTLIBRARIES = $(synthi_LTLIBRARIES) +deicsonze2_la_DEPENDENCIES = ../libsynti/libsynti.la +am_deicsonze2_la_OBJECTS = deicsonze.lo deicsonzegui.lo \ + deicsonzefilter.lo deicsonzeplugin.lo deicsonzepreset.lo +nodist_deicsonze2_la_OBJECTS = moc_deicsonzegui.lo +deicsonze2_la_OBJECTS = $(am_deicsonze2_la_OBJECTS) \ + $(nodist_deicsonze2_la_OBJECTS) +deicsonze2_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ + $(CXXFLAGS) $(deicsonze2_la_LDFLAGS) $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I. -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +CXXLD = $(CXX) +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(deicsonze2_la_SOURCES) $(nodist_deicsonze2_la_SOURCES) +DIST_SOURCES = $(deicsonze2_la_SOURCES) +DATA = $(deicsonzepkgdata_DATA) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = ${SHELL} /home/ddskrjo/dev/svn_muse/lmuse/trunk/muse/missing --run aclocal-1.11 -I m4 +ALSA_CFLAGS = +ALSA_LIBS = -lasound -lm -ldl +AMTAR = ${SHELL} /home/ddskrjo/dev/svn_muse/lmuse/trunk/muse/missing --run tar +AR = ar +AUTOCONF = ${SHELL} /home/ddskrjo/dev/svn_muse/lmuse/trunk/muse/missing --run autoconf +AUTOHEADER = ${SHELL} /home/ddskrjo/dev/svn_muse/lmuse/trunk/muse/missing --run autoheader +AUTOMAKE = ${SHELL} /home/ddskrjo/dev/svn_muse/lmuse/trunk/muse/missing --run automake-1.11 +AWK = gawk +CC = gcc +CCDEPMODE = depmode=gcc3 +CFLAGS = -g -O2 +CPP = gcc -E +CPPFLAGS = +CXX = g++ +CXXCPP = g++ -E +CXXDEPMODE = depmode=gcc3 +CXXFLAGS = -g +CYGPATH_W = echo +DEFS = -DHAVE_CONFIG_H +DEPDIR = .deps +DOCBOOKSTYLE = +DOCBOOKTARGETS = +DOT = no +DOTPATH = +DOXYGEN = no +DOXYGEN_TREEVIEW = YES +DSYMUTIL = +DUMPBIN = +ECHO_C = +ECHO_N = -n +ECHO_T = +EGREP = /bin/grep -E +EXEEXT = +FGREP = /bin/grep -F +FLUIDSYNTHDIRS = fluid fluidsynth +FST_CFLAGS = +FST_LIBS = +Fluidsynth_CFLAGS = +Fluidsynth_LIBS = -lfluidsynth +GIVERTCAP = +GREP = /bin/grep +HAVEDOT = NO +INSTALL = /usr/bin/install -c +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_PROGRAM = ${INSTALL} +INSTALL_SCRIPT = ${INSTALL} +INSTALL_STRIP_PROGRAM = $(install_sh) -c -s +JACK_CFLAGS = +JACK_LIBS = -ljack +JADE = +LASH_CFLAGS = +LASH_LIBS = +LD = /usr/bin/ld +LDFLAGS = +LIBOBJS = +LIBS = -lasound -lm -ldl -L/usr/share/qt3/lib -lqt-mt -lqui +LIBTOOL = $(SHELL) $(top_builddir)/libtool +LIPO = +LN_S = ln -s +LO_CFLAGS = -I/usr/local/include +LO_LIBS = -llo +LTLIBOBJS = +MAKEINFO = ${SHELL} /home/ddskrjo/dev/svn_muse/lmuse/trunk/muse/missing --run makeinfo +MKDIR_P = /bin/mkdir -p +MOC = /usr/share/qt3/bin/moc +MUSECXXFLAGS = -g -fno-exceptions -Wall -W -D_GNU_SOURCE -D_REENTRANT -DQT_CLEAN_NAMESPACE -DQT_NO_COMPAT -I$(top_srcdir) -I$(top_srcdir)/muse/widgets $(QT_CFLAGS) -O3 -fomit-frame-pointer -ffast-math -fstrength-reduce -funroll-loops +NM = /usr/bin/nm -B +NMEDIT = +NSGMLS = +OBJDUMP = objdump +OBJEXT = o +OTOOL = +OTOOL64 = +PACKAGE = muse +PACKAGE_BUGREPORT = +PACKAGE_NAME = MusE +PACKAGE_STRING = MusE 1.0.1 +PACKAGE_TARNAME = muse +PACKAGE_URL = +PACKAGE_VERSION = 1.0.1 +PATH_SEPARATOR = : +PCH = +PERL = /usr/bin/perl +PKG_CONFIG = /usr/bin/pkg-config +PYTHON = /usr/bin/python +PYTHON_EXEC_PREFIX = ${exec_prefix} +PYTHON_INCLUDES = -I/usr/include/python2.6 -I/usr/include/python2.6 +PYTHON_LIB = -lpthread -ldl -lutil -lm -lpython2.6 +PYTHON_PLATFORM = linux2 +PYTHON_PREFIX = ${prefix} +PYTHON_VERSION = 2.6 +QT_CFLAGS = -I/usr/share/qt3/include +QT_LIBS = -L/usr/share/qt3/lib -lqt-mt -lqui +RANLIB = ranlib +SAMPLERATE_CFLAGS = +SAMPLERATE_LIBS = -lsamplerate +SED = /bin/sed +SET_MAKE = +SHELL = /bin/bash +SNDFILE_CFLAGS = +SNDFILE_LIBS = -lsndfile +STRIP = strip +SUIDBUILD = no +SUIDINSTALL = no +UIC = /usr/share/qt3/bin/uic +USE_SSE = +UUID_CFLAGS = +UUID_LIBS = -luuid +VERSION = 1.0.1 +XMKMF = +X_CFLAGS = +X_EXTRA_LIBS = +X_LIBS = +X_PRE_LIBS = -lSM -lICE +abs_builddir = /home/ddskrjo/dev/svn_muse/lmuse/trunk/muse/synti/deicsonze2 +abs_srcdir = /home/ddskrjo/dev/svn_muse/lmuse/trunk/muse/synti/deicsonze2 +abs_top_builddir = /home/ddskrjo/dev/svn_muse/lmuse/trunk/muse +abs_top_srcdir = /home/ddskrjo/dev/svn_muse/lmuse/trunk/muse +ac_ct_CC = gcc +ac_ct_CXX = g++ +ac_ct_DUMPBIN = +am__include = include +am__leading_dot = . +am__quote = +am__tar = ${AMTAR} chof - "$$tardir" +am__untar = ${AMTAR} xf - +bindir = ${exec_prefix}/bin +build = i686-pc-linux-gnu +build_alias = +build_cpu = i686 +build_os = linux-gnu +build_vendor = pc +builddir = . +datadir = ${datarootdir} +datarootdir = ${prefix}/share +docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} +dvidir = ${docdir} +exec_prefix = ${prefix} +have_docbook = +host = i686-pc-linux-gnu +host_alias = +host_cpu = i686 +host_os = linux-gnu +host_vendor = pc +htmldir = ${docdir} +includedir = ${prefix}/include +infodir = ${datarootdir}/info +install_sh = ${SHELL} /home/ddskrjo/dev/svn_muse/lmuse/trunk/muse/install-sh +libdir = ${exec_prefix}/lib +libexecdir = ${exec_prefix}/libexec +localedir = ${datarootdir}/locale +localstatedir = ${prefix}/var +lt_ECHO = echo +mandir = ${datarootdir}/man +mkdir_p = /bin/mkdir -p +oldincludedir = /usr/include +pdfdir = ${docdir} +pkgpyexecdir = ${pyexecdir}/muse +pkgpythondir = ${pythondir}/muse +prefix = /usr/local +program_transform_name = s,x,x, +psdir = ${docdir} +pyexecdir = ${exec_prefix}/lib/python2.6/dist-packages +pythondir = ${prefix}/lib/python2.6/dist-packages +sbindir = ${exec_prefix}/sbin +sharedstatedir = ${prefix}/com +srcdir = . +synth_fluid = fluid +synth_fluidsynth = fluidsynth +sysconfdir = ${prefix}/etc +target_alias = +top_build_prefix = ../../ +top_builddir = ../.. +top_srcdir = ../.. +AM_CXXFLAGS = $(MUSECXXFLAGS) -I.. -I$(top_srcdir)/synti \ + -I$(top_srcdir)/muse/widgets -DQT_SHARED -DQT_THREAD_SUPPORT \ + -DQT_PLUGIN $(am__append_1) $(am__append_2) +AM_CPPFLAGS = +UIFILES = $(wildcard *.ui) +MOCFILES = $(shell for h in $(filter %.h,$(SOURCES)); do \ + if grep -q Q_OBJECT $$h; then \ + echo $$h | sed "s/\(.*\)\.h/moc_\1.cpp/"; \ + fi; \ + done) + +BUILT_SOURCES = $(MOCFILES) $(UIFILES:%.ui=%.h) +MOSTLYCLEANFILES = $(MOCFILES) $(UIFILES:%.ui=%.h) +SUFFIXES = .ui .h.gch +synthidir = $(pkglibdir)/synthi +synthi_LTLIBRARIES = deicsonze2.la +deicsonze2_la_SOURCES = deicsonze.cpp deicsonze.h \ + deicsonzegui.cpp deicsonzegui.h \ + deicsonzefilter.cpp deicsonzefilter.h \ + deicsonzeplugin.cpp deicsonzeplugin.h \ + deicsonzepreset.cpp deicsonzepreset.h \ + deicsonzeguibase.h + +nodist_deicsonze2_la_SOURCES = moc_deicsonzegui.cpp +deicsonze2_la_LIBADD = ../libsynti/libsynti.la +deicsonze2_la_LDFLAGS = -module -avoid-version +EXTRA_DIST = SutulaBank.dei README +deicsonzepkgdata_DATA = SutulaBank.dei +deicsonzepkgdatadir = $(pkgdatadir)/presets/deicsonze2 +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: .ui .h.gch .cpp .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/common.am $(top_srcdir)/synti/synti-install.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu synti/deicsonze2/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu synti/deicsonze2/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-synthiLTLIBRARIES: $(synthi_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(synthidir)" || $(MKDIR_P) "$(DESTDIR)$(synthidir)" + @list='$(synthi_LTLIBRARIES)'; test -n "$(synthidir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(synthidir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(synthidir)"; \ + } + +uninstall-synthiLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(synthi_LTLIBRARIES)'; test -n "$(synthidir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(synthidir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(synthidir)/$$f"; \ + done + +clean-synthiLTLIBRARIES: + -test -z "$(synthi_LTLIBRARIES)" || rm -f $(synthi_LTLIBRARIES) + @list='$(synthi_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +deicsonze2.la: $(deicsonze2_la_OBJECTS) $(deicsonze2_la_DEPENDENCIES) + $(deicsonze2_la_LINK) -rpath $(synthidir) $(deicsonze2_la_OBJECTS) $(deicsonze2_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +include ./$(DEPDIR)/deicsonze.Plo +include ./$(DEPDIR)/deicsonzefilter.Plo +include ./$(DEPDIR)/deicsonzegui.Plo +include ./$(DEPDIR)/deicsonzeplugin.Plo +include ./$(DEPDIR)/deicsonzepreset.Plo +include ./$(DEPDIR)/moc_deicsonzegui.Plo + +.cpp.o: + $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< + $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +# source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \ +# $(CXXCOMPILE) -c -o $@ $< + +.cpp.obj: + $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` + $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +# source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \ +# $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.cpp.lo: + $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< + $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +# source='$<' object='$@' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \ +# $(LTCXXCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-deicsonzepkgdataDATA: $(deicsonzepkgdata_DATA) + @$(NORMAL_INSTALL) + test -z "$(deicsonzepkgdatadir)" || $(MKDIR_P) "$(DESTDIR)$(deicsonzepkgdatadir)" + @list='$(deicsonzepkgdata_DATA)'; test -n "$(deicsonzepkgdatadir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(deicsonzepkgdatadir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(deicsonzepkgdatadir)" || exit $$?; \ + done + +uninstall-deicsonzepkgdataDATA: + @$(NORMAL_UNINSTALL) + @list='$(deicsonzepkgdata_DATA)'; test -n "$(deicsonzepkgdatadir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(deicsonzepkgdatadir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(deicsonzepkgdatadir)" && rm -f $$files + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-am +all-am: Makefile $(LTLIBRARIES) $(DATA) +installdirs: + for dir in "$(DESTDIR)$(synthidir)" "$(DESTDIR)$(deicsonzepkgdatadir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +clean: clean-am + +clean-am: clean-generic clean-libtool clean-synthiLTLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-deicsonzepkgdataDATA \ + install-synthiLTLIBRARIES + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-deicsonzepkgdataDATA \ + uninstall-synthiLTLIBRARIES + +.MAKE: all check install install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-synthiLTLIBRARIES ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am \ + install-deicsonzepkgdataDATA install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + install-synthiLTLIBRARIES installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \ + uninstall-am uninstall-deicsonzepkgdataDATA \ + uninstall-synthiLTLIBRARIES + + +de: + @for base in $(MOCFILES); do echo -e "\t$${base}.cpp $${base}.h \\"; done + +nde: + @for base in $(MOCFILES); do echo -e "\tmoc_$${base}.cpp \\"; done + +.ui.o: %.h + $(UIC) -L $(top_srcdir)/muse/widgets -o $*.cpp -impl $*.h $*.ui + $(MOC) $*.h >> $*.cpp + $(CXXCOMPILE) -c $*.cpp -o $*.o + $(RM) $*.cpp moc_$*.cpp moc_$*.o + +.ui.lo: %.h + $(UIC) -L $(top_srcdir)/muse/widgets -o $*.cpp -impl $*.h $*.ui + $(MOC) $*.h >> $*.cpp + $(LTCXXCOMPILE) -c $*.cpp -o $*.lo + $(RM) $*.cpp moc_$*.cpp moc_$*.lo moc_$*.o + +moc_%.cpp: %.h + $(MOC) $< -o $@ + +%.h: %.ui + $(UIC) -L $(top_srcdir)/muse/widgets -o $@ $< + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/muse2/synti/deicsonze2/Makefile.am b/muse2/synti/deicsonze2/Makefile.am new file mode 100644 index 00000000..7e212c01 --- /dev/null +++ b/muse2/synti/deicsonze2/Makefile.am @@ -0,0 +1,27 @@ +include $(top_srcdir)/common.am +include $(top_srcdir)/synti/synti-install.am + +if PCH +AM_CXXFLAGS += -include $(top_srcdir)/all-pic.h -DINSTPREFIX=\"$(prefix)\" +else +AM_CXXFLAGS += -DINSTPREFIX=\"$(prefix)\" +endif + +synthi_LTLIBRARIES = deicsonze2.la + +deicsonze2_la_SOURCES = deicsonze.cpp deicsonze.h \ + deicsonzegui.cpp deicsonzegui.h \ + deicsonzefilter.cpp deicsonzefilter.h \ + deicsonzeplugin.cpp deicsonzeplugin.h \ + deicsonzepreset.cpp deicsonzepreset.h \ + deicsonzeguibase.h + +nodist_deicsonze2_la_SOURCES = moc_deicsonzegui.cpp + +deicsonze2_la_LIBADD = ../libsynti/libsynti.la +deicsonze2_la_LDFLAGS = -module -avoid-version + +EXTRA_DIST = SutulaBank.dei README + +deicsonzepkgdata_DATA = SutulaBank.dei +deicsonzepkgdatadir = $(pkgdatadir)/presets/deicsonze2 diff --git a/muse2/synti/deicsonze2/Makefile.in b/muse2/synti/deicsonze2/Makefile.in new file mode 100644 index 00000000..8bc735ed --- /dev/null +++ b/muse2/synti/deicsonze2/Makefile.in @@ -0,0 +1,687 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/common.am $(top_srcdir)/synti/synti-install.am \ + TODO +@PCH_TRUE@am__append_1 = -include $(top_srcdir)/all-pic.h -DINSTPREFIX=\"$(prefix)\" +@PCH_FALSE@am__append_2 = -DINSTPREFIX=\"$(prefix)\" +subdir = synti/deicsonze2 +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal-include.m4 \ + $(top_srcdir)/m4/alsa.m4 $(top_srcdir)/m4/docbook.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/qt.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(synthidir)" \ + "$(DESTDIR)$(deicsonzepkgdatadir)" +LTLIBRARIES = $(synthi_LTLIBRARIES) +deicsonze2_la_DEPENDENCIES = ../libsynti/libsynti.la +am_deicsonze2_la_OBJECTS = deicsonze.lo deicsonzegui.lo \ + deicsonzefilter.lo deicsonzeplugin.lo deicsonzepreset.lo +nodist_deicsonze2_la_OBJECTS = moc_deicsonzegui.lo +deicsonze2_la_OBJECTS = $(am_deicsonze2_la_OBJECTS) \ + $(nodist_deicsonze2_la_OBJECTS) +deicsonze2_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ + $(CXXFLAGS) $(deicsonze2_la_LDFLAGS) $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +CXXLD = $(CXX) +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(deicsonze2_la_SOURCES) $(nodist_deicsonze2_la_SOURCES) +DIST_SOURCES = $(deicsonze2_la_SOURCES) +DATA = $(deicsonzepkgdata_DATA) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DOCBOOKSTYLE = @DOCBOOKSTYLE@ +DOCBOOKTARGETS = @DOCBOOKTARGETS@ +DOT = @DOT@ +DOTPATH = @DOTPATH@ +DOXYGEN = @DOXYGEN@ +DOXYGEN_TREEVIEW = @DOXYGEN_TREEVIEW@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FLUIDSYNTHDIRS = @FLUIDSYNTHDIRS@ +FST_CFLAGS = @FST_CFLAGS@ +FST_LIBS = @FST_LIBS@ +Fluidsynth_CFLAGS = @Fluidsynth_CFLAGS@ +Fluidsynth_LIBS = @Fluidsynth_LIBS@ +GIVERTCAP = @GIVERTCAP@ +GREP = @GREP@ +HAVEDOT = @HAVEDOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_LIBS = @JACK_LIBS@ +JADE = @JADE@ +LASH_CFLAGS = @LASH_CFLAGS@ +LASH_LIBS = @LASH_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LO_CFLAGS = @LO_CFLAGS@ +LO_LIBS = @LO_LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MOC = @MOC@ +MUSECXXFLAGS = @MUSECXXFLAGS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NSGMLS = @NSGMLS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PCH = @PCH@ +PERL = @PERL@ +PKG_CONFIG = @PKG_CONFIG@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIB = @PYTHON_LIB@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QT_CFLAGS = @QT_CFLAGS@ +QT_LIBS = @QT_LIBS@ +RANLIB = @RANLIB@ +SAMPLERATE_CFLAGS = @SAMPLERATE_CFLAGS@ +SAMPLERATE_LIBS = @SAMPLERATE_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ +SNDFILE_LIBS = @SNDFILE_LIBS@ +STRIP = @STRIP@ +SUIDBUILD = @SUIDBUILD@ +SUIDINSTALL = @SUIDINSTALL@ +UIC = @UIC@ +USE_SSE = @USE_SSE@ +UUID_CFLAGS = @UUID_CFLAGS@ +UUID_LIBS = @UUID_LIBS@ +VERSION = @VERSION@ +XMKMF = @XMKMF@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +have_docbook = @have_docbook@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +synth_fluid = @synth_fluid@ +synth_fluidsynth = @synth_fluidsynth@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AM_CXXFLAGS = $(MUSECXXFLAGS) -I.. -I$(top_srcdir)/synti \ + -I$(top_srcdir)/muse/widgets -DQT_SHARED -DQT_THREAD_SUPPORT \ + -DQT_PLUGIN $(am__append_1) $(am__append_2) +AM_CPPFLAGS = +UIFILES = $(wildcard *.ui) +MOCFILES = $(shell for h in $(filter %.h,$(SOURCES)); do \ + if grep -q Q_OBJECT $$h; then \ + echo $$h | sed "s/\(.*\)\.h/moc_\1.cpp/"; \ + fi; \ + done) + +BUILT_SOURCES = $(MOCFILES) $(UIFILES:%.ui=%.h) +MOSTLYCLEANFILES = $(MOCFILES) $(UIFILES:%.ui=%.h) +SUFFIXES = .ui .h.gch +synthidir = $(pkglibdir)/synthi +synthi_LTLIBRARIES = deicsonze2.la +deicsonze2_la_SOURCES = deicsonze.cpp deicsonze.h \ + deicsonzegui.cpp deicsonzegui.h \ + deicsonzefilter.cpp deicsonzefilter.h \ + deicsonzeplugin.cpp deicsonzeplugin.h \ + deicsonzepreset.cpp deicsonzepreset.h \ + deicsonzeguibase.h + +nodist_deicsonze2_la_SOURCES = moc_deicsonzegui.cpp +deicsonze2_la_LIBADD = ../libsynti/libsynti.la +deicsonze2_la_LDFLAGS = -module -avoid-version +EXTRA_DIST = SutulaBank.dei README +deicsonzepkgdata_DATA = SutulaBank.dei +deicsonzepkgdatadir = $(pkgdatadir)/presets/deicsonze2 +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: .ui .h.gch .cpp .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/common.am $(top_srcdir)/synti/synti-install.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu synti/deicsonze2/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu synti/deicsonze2/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-synthiLTLIBRARIES: $(synthi_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(synthidir)" || $(MKDIR_P) "$(DESTDIR)$(synthidir)" + @list='$(synthi_LTLIBRARIES)'; test -n "$(synthidir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(synthidir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(synthidir)"; \ + } + +uninstall-synthiLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(synthi_LTLIBRARIES)'; test -n "$(synthidir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(synthidir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(synthidir)/$$f"; \ + done + +clean-synthiLTLIBRARIES: + -test -z "$(synthi_LTLIBRARIES)" || rm -f $(synthi_LTLIBRARIES) + @list='$(synthi_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +deicsonze2.la: $(deicsonze2_la_OBJECTS) $(deicsonze2_la_DEPENDENCIES) + $(deicsonze2_la_LINK) -rpath $(synthidir) $(deicsonze2_la_OBJECTS) $(deicsonze2_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/deicsonze.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/deicsonzefilter.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/deicsonzegui.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/deicsonzeplugin.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/deicsonzepreset.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/moc_deicsonzegui.Plo@am__quote@ + +.cpp.o: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< + +.cpp.obj: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.cpp.lo: +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-deicsonzepkgdataDATA: $(deicsonzepkgdata_DATA) + @$(NORMAL_INSTALL) + test -z "$(deicsonzepkgdatadir)" || $(MKDIR_P) "$(DESTDIR)$(deicsonzepkgdatadir)" + @list='$(deicsonzepkgdata_DATA)'; test -n "$(deicsonzepkgdatadir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(deicsonzepkgdatadir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(deicsonzepkgdatadir)" || exit $$?; \ + done + +uninstall-deicsonzepkgdataDATA: + @$(NORMAL_UNINSTALL) + @list='$(deicsonzepkgdata_DATA)'; test -n "$(deicsonzepkgdatadir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(deicsonzepkgdatadir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(deicsonzepkgdatadir)" && rm -f $$files + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-am +all-am: Makefile $(LTLIBRARIES) $(DATA) +installdirs: + for dir in "$(DESTDIR)$(synthidir)" "$(DESTDIR)$(deicsonzepkgdatadir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +clean: clean-am + +clean-am: clean-generic clean-libtool clean-synthiLTLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-deicsonzepkgdataDATA \ + install-synthiLTLIBRARIES + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-deicsonzepkgdataDATA \ + uninstall-synthiLTLIBRARIES + +.MAKE: all check install install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-synthiLTLIBRARIES ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am \ + install-deicsonzepkgdataDATA install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + install-synthiLTLIBRARIES installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \ + uninstall-am uninstall-deicsonzepkgdataDATA \ + uninstall-synthiLTLIBRARIES + + +de: + @for base in $(MOCFILES); do echo -e "\t$${base}.cpp $${base}.h \\"; done + +nde: + @for base in $(MOCFILES); do echo -e "\tmoc_$${base}.cpp \\"; done + +.ui.o: %.h + $(UIC) -L $(top_srcdir)/muse/widgets -o $*.cpp -impl $*.h $*.ui + $(MOC) $*.h >> $*.cpp + $(CXXCOMPILE) -c $*.cpp -o $*.o + $(RM) $*.cpp moc_$*.cpp moc_$*.o + +.ui.lo: %.h + $(UIC) -L $(top_srcdir)/muse/widgets -o $*.cpp -impl $*.h $*.ui + $(MOC) $*.h >> $*.cpp + $(LTCXXCOMPILE) -c $*.cpp -o $*.lo + $(RM) $*.cpp moc_$*.cpp moc_$*.lo moc_$*.o + +moc_%.cpp: %.h + $(MOC) $< -o $@ + +%.h: %.ui + $(UIC) -L $(top_srcdir)/muse/widgets -o $@ $< + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/muse2/synti/deicsonze2/README b/muse2/synti/deicsonze2/README new file mode 100644 index 00000000..c9b36d02 --- /dev/null +++ b/muse2/synti/deicsonze2/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/muse2/synti/deicsonze2/SutulaBank.dei b/muse2/synti/deicsonze2/SutulaBank.dei new file mode 100644 index 00000000..3a64e876 --- /dev/null +++ b/muse2/synti/deicsonze2/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/muse2/synti/deicsonze2/TODO b/muse2/synti/deicsonze2/TODO new file mode 100644 index 00000000..f7d486f1 --- /dev/null +++ b/muse2/synti/deicsonze2/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/muse2/synti/deicsonze2/deicsonze.cpp b/muse2/synti/deicsonze2/deicsonze.cpp new file mode 100644 index 00000000..28b9183e --- /dev/null +++ b/muse2/synti/deicsonze2/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 "muse/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 + // TODO _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.ascii(), "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(); + MidiPlayEvent 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(); + MidiPlayEvent 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(); + MidiPlayEvent 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()); + MidiPlayEvent 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; + MidiPlayEvent evFontSize(0, ME_SYSEX, (const unsigned char*)dataFontSize, 2); + _gui->writeEvent(evFontSize); + //display load preset + unsigned char dataUpdateGuiSet[1]; + dataUpdateGuiSet[0]=SYSEX_UPDATESETGUI; + MidiPlayEvent 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; + MidiPlayEvent 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; + MidiPlayEvent + 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; + MidiPlayEvent 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(); + MidiPlayEvent 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; + MidiPlayEvent 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; + MidiPlayEvent + 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; + MidiPlayEvent + 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; + MidiPlayEvent + 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); + MidiPlayEvent + 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; + MidiPlayEvent + 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); + MidiPlayEvent + 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(); + MidiPlayEvent 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->Qt::red(); + buffer[NUM_GREEN_TEXT]=(unsigned char)_gui->tColor->Qt::green(); + buffer[NUM_BLUE_TEXT]=(unsigned char)_gui->tColor->Qt::blue(); + buffer[NUM_RED_BACKGROUND]=(unsigned char)_gui->bColor->Qt::red(); + buffer[NUM_GREEN_BACKGROUND]=(unsigned char)_gui->bColor->Qt::green(); + buffer[NUM_BLUE_BACKGROUND]=(unsigned char)_gui->bColor->Qt::blue(); + buffer[NUM_RED_EDITTEXT]=(unsigned char)_gui->etColor->Qt::red(); + buffer[NUM_GREEN_EDITTEXT]=(unsigned char)_gui->etColor->Qt::green(); + buffer[NUM_BLUE_EDITTEXT]=(unsigned char)_gui->etColor->Qt::blue(); + buffer[NUM_RED_EDITBACKGROUND]=(unsigned char)_gui->ebColor->Qt::red(); + buffer[NUM_GREEN_EDITBACKGROUND]=(unsigned char)_gui->ebColor->Qt::green(); + buffer[NUM_BLUE_EDITBACKGROUND]=(unsigned char)_gui->ebColor->Qt::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(); + MidiPlayEvent + 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]); + MidiPlayEvent + evChEnable(0, c, ME_CONTROLLER, + CTRL_CHANNELENABLE, data[NUM_CHANNEL_ENABLE + c]); + _gui->writeEvent(evChEnable); + //nbrVoices + setNbrVoices(c, data[NUM_NBRVOICES + c]); + MidiPlayEvent + evNbrVoices(0,c,ME_CONTROLLER,CTRL_NBRVOICES, data[NUM_NBRVOICES + c]); + _gui->writeEvent(evNbrVoices); + //channel volume + setChannelVol(c, data[NUM_CHANNEL_VOL + c]); + MidiPlayEvent + evChVol(0, c, ME_CONTROLLER, + CTRL_CHANNELVOLUME, data[NUM_CHANNEL_VOL + c]); + _gui->writeEvent(evChVol); + //channel pan + setChannelPan(c, data[NUM_CHANNEL_PAN + c]); + MidiPlayEvent + 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); + MidiPlayEvent + 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); + MidiPlayEvent + evChBrightness(0, c, ME_CONTROLLER, + CTRL_FINEBRIGHTNESS, getChannelBrightness(c)); + _gui->writeEvent(evChBrightness); + //channel modulation + setChannelModulation(c, data[NUM_CHANNEL_MODULATION + c]); + MidiPlayEvent + evChMod(0, c, ME_CONTROLLER, + CTRL_MODULATION, data[NUM_CHANNEL_MODULATION + c]); + _gui->writeEvent(evChMod); + //channel attack + setChannelAttack(c, data[NUM_CHANNEL_ATTACK + c]); + MidiPlayEvent + 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]); + MidiPlayEvent + 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]); + MidiPlayEvent + 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]); + MidiPlayEvent + 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]); + MidiPlayEvent + 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; + MidiPlayEvent + 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; + MidiPlayEvent + 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]); + MidiPlayEvent 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]); + MidiPlayEvent 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]; + MidiPlayEvent 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]; + MidiPlayEvent 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]; + MidiPlayEvent 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]; + MidiPlayEvent 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]; + MidiPlayEvent 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; + MidiPlayEvent 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(); + MidiPlayEvent 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; + MidiPlayEvent 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; + MidiPlayEvent 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(); + MidiPlayEvent 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; + MidiPlayEvent 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; + MidiPlayEvent 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(); + MidiPlayEvent 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)); + MidiPlayEvent 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)); + MidiPlayEvent 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)); + MidiPlayEvent 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)); + MidiPlayEvent 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)); + MidiPlayEvent 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); + MidiPlayEvent 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) { + MidiPlayEvent evSysex(0, ME_SYSEX, data, length); + _gui->writeEvent(evSysex); + } + break; + //case SYSEX_CHANNELNUM: + //_global.channelNum = (char)data[1]; + //if(!fromGui) { + // MidiPlayEvent evSysex(0, ME_SYSEX, data, length); + // _gui->writeEvent(evSysex); + //} + //break; + case SYSEX_QUALITY: + setQuality((Quality)data[1]); + if(!fromGui) { + MidiPlayEvent evSysex(0, ME_SYSEX, data, length); + _gui->writeEvent(evSysex); + } + break; + case SYSEX_FILTER: + setFilter((bool)data[1]); + if(!fromGui) { + MidiPlayEvent evSysex(0, ME_SYSEX, data, length); + _gui->writeEvent(evSysex); + } + break; + case SYSEX_FONTSIZE: + _global.fontSize = (int)data[1]; + if(!fromGui) { + MidiPlayEvent evSysex(0, ME_SYSEX, data, length); + _gui->writeEvent(evSysex); + } + break; + case SYSEX_SAVECONFIG: + _saveConfig = (bool)data[1]; + if(!fromGui) { + MidiPlayEvent evSysex(0, ME_SYSEX, data, length); + _gui->writeEvent(evSysex); + } + break; + case SYSEX_SAVEONLYUSED: + _saveOnlyUsed = (bool)data[1]; + if(!fromGui) { + MidiPlayEvent evSysex(0, ME_SYSEX, data, length); + _gui->writeEvent(evSysex); + } + break; + case SYSEX_ISINITSET: + _isInitSet = (bool)data[1]; + if(!fromGui) { + MidiPlayEvent evSysex(0, ME_SYSEX, data, length); + _gui->writeEvent(evSysex); + } + break; + case SYSEX_INITSETPATH: + _initSetPath = (char*)&data[1]; + if(!fromGui) { + MidiPlayEvent evSysex(0, ME_SYSEX, data, length); + _gui->writeEvent(evSysex); + } + break; + case SYSEX_ISBACKGROUNDPIX: + _isBackgroundPix = (bool)data[1]; + if(!fromGui) { + MidiPlayEvent evSysex(0, ME_SYSEX, data, length); + _gui->writeEvent(evSysex); + } + break; + case SYSEX_BACKGROUNDPIXPATH: + _backgroundPixPath = (char*)&data[1]; + if(!fromGui) { + MidiPlayEvent 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) { + MidiPlayEvent 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) { + MidiPlayEvent evSysex(0, ME_SYSEX, data, length); + _gui->writeEvent(evSysex); + } + break; + case SYSEX_REVERBACTIV: + _global.isReverbActivated = (bool)data[1]; + if(!fromGui) { + MidiPlayEvent 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) { + MidiPlayEvent evSysex(0, ME_SYSEX, data, length); + _gui->writeEvent(evSysex); + } + break; + case SYSEX_DELAYACTIV: + _global.isDelayActivated = (bool)data[1]; + if(!fromGui) { + MidiPlayEvent evSysex(0, ME_SYSEX, data, length); + _gui->writeEvent(evSysex); + } + break; + case SYSEX_CHORUSRETURN: + setChorusReturn((int)data[1]); + if(!fromGui) { + MidiPlayEvent evSysex(0, ME_SYSEX, data, length); + _gui->writeEvent(evSysex); + } + break; + case SYSEX_REVERBRETURN: + setReverbReturn((int)data[1]); + if(!fromGui) { + MidiPlayEvent evSysex(0, ME_SYSEX, data, length); + _gui->writeEvent(evSysex); + } + break; + case SYSEX_DELAYRETURN: + setDelayReturn((int)data[1]); + if(!fromGui) { + MidiPlayEvent 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) { + MidiPlayEvent evSysex(0, ME_SYSEX, data, length); + _gui->writeEvent(evSysex); + } + break; + case SYSEX_DELAYBEATRATIO: + memcpy(&f, &data[1], sizeof(float)); + setDelayBeatRatio(f); + if(!fromGui) { + MidiPlayEvent evSysex(0, ME_SYSEX, data, length); + _gui->writeEvent(evSysex); + } + break; + case SYSEX_DELAYFEEDBACK: + memcpy(&f, &data[1], sizeof(float)); + setDelayFeedback(f); + if(!fromGui) { + MidiPlayEvent evSysex(0, ME_SYSEX, data, length); + _gui->writeEvent(evSysex); + } + break; + case SYSEX_DELAYLFOFREQ: + memcpy(&f, &data[1], sizeof(float)); + setDelayLFOFreq(f); + if(!fromGui) { + MidiPlayEvent evSysex(0, ME_SYSEX, data, length); + _gui->writeEvent(evSysex); + } + break; + case SYSEX_DELAYLFODEPTH: + memcpy(&f, &data[1], sizeof(float)); + setDelayLFODepth(f); + if(!fromGui) { + MidiPlayEvent 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) { + MidiPlayEvent 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) { + MidiPlayEvent 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) { + MidiPlayEvent 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) { + MidiPlayEvent 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) { + MidiPlayEvent 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) { + MidiPlayEvent 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) { + MidiPlayEvent 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) { + MidiPlayEvent 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) { + MidiPlayEvent 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) { + MidiPlayEvent 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) { + MidiPlayEvent 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) { + MidiPlayEvent 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) { + MidiPlayEvent 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) { + MidiPlayEvent 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) { + MidiPlayEvent 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) { + MidiPlayEvent 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) { + MidiPlayEvent 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) { + MidiPlayEvent 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) { + MidiPlayEvent 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) { + MidiPlayEvent 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) { + MidiPlayEvent 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) { + MidiPlayEvent 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) { + MidiPlayEvent 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) { + MidiPlayEvent 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) { + MidiPlayEvent 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) { + MidiPlayEvent 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) { + MidiPlayEvent 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) { + MidiPlayEvent 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) { + MidiPlayEvent 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) { + MidiPlayEvent 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) { + MidiPlayEvent 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) { + MidiPlayEvent 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) { + MidiPlayEvent 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) { + MidiPlayEvent 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) { + MidiPlayEvent 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) { + MidiPlayEvent 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) { + MidiPlayEvent 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) { + MidiPlayEvent 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) { + MidiPlayEvent 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) { + MidiPlayEvent 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) { + MidiPlayEvent 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) { + MidiPlayEvent 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) { + MidiPlayEvent 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) { + MidiPlayEvent 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) { + MidiPlayEvent 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) { + MidiPlayEvent 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) { + MidiPlayEvent 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) { + MidiPlayEvent 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) { + MidiPlayEvent 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) { + MidiPlayEvent 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) { + MidiPlayEvent 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) { + MidiPlayEvent 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) { + MidiPlayEvent ev(0,ch,ME_CONTROLLER,CTRL_FCAMPLITUDE,val); + _gui->writeEvent(ev); + } + break; + case CTRL_CHANNELENABLE: + setChannelEnable(ch, (bool)val); + if(!fromGui) { + MidiPlayEvent ev(0,ch,ME_CONTROLLER,CTRL_CHANNELENABLE,val); + _gui->writeEvent(ev); + } + break; + case CTRL_CHANNELDETUNE: + _preset[ch]->setIsUsed(true); + setChannelDetune(ch, val); + if(!fromGui) { + MidiPlayEvent ev(0,ch,ME_CONTROLLER,CTRL_CHANNELDETUNE,val); + _gui->writeEvent(ev); + } + break; + case CTRL_CHANNELVOLUME: + setChannelVol(ch, val); + applyChannelAmp(ch); + if(!fromGui) { + MidiPlayEvent ev(0,ch,ME_CONTROLLER,CTRL_CHANNELVOLUME,val); + _gui->writeEvent(ev); + } + break; + case CTRL_NBRVOICES: + setNbrVoices(ch, val); + if(!fromGui) { + MidiPlayEvent 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) { + MidiPlayEvent ev(0, ch, ME_CONTROLLER, CTRL_PROGRAM, val); + _gui->writeEvent(ev); + } + } break; + case CTRL_MODULATION: + setModulation(ch, val); + if(!fromGui) { + MidiPlayEvent 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) { + MidiPlayEvent 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) { + MidiPlayEvent 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) { + MidiPlayEvent 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) { + MidiPlayEvent + 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) { + MidiPlayEvent 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) { + MidiPlayEvent ev(0,ch, ME_CONTROLLER, CTRL_RELEASE_TIME, val); + _gui->writeEvent(ev); + } + break; + case CTRL_REVERB_SEND: + setChannelReverb(ch, val); + if(!fromGui) { + MidiPlayEvent ev(0,ch, ME_CONTROLLER, CTRL_REVERB_SEND, val); + _gui->writeEvent(ev); + } + break; + case CTRL_CHORUS_SEND: + setChannelChorus(ch, val); + if(!fromGui) { + MidiPlayEvent ev(0,ch, ME_CONTROLLER, CTRL_CHORUS_SEND, val); + _gui->writeEvent(ev); + } + break; + case CTRL_VARIATION_SEND: + setChannelDelay(ch, val); + if(!fromGui) { + MidiPlayEvent 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) { + MidiPlayEvent + 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()) { + MidiPlayEvent 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/muse2/synti/deicsonze2/deicsonze.h b/muse2/synti/deicsonze2/deicsonze.h new file mode 100644 index 00000000..c462cfcd --- /dev/null +++ b/muse2/synti/deicsonze2/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 "muse/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(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/muse2/synti/deicsonze2/deicsonzefilter.cpp b/muse2/synti/deicsonze2/deicsonzefilter.cpp new file mode 100644 index 00000000..d4bef946 --- /dev/null +++ b/muse2/synti/deicsonze2/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/muse2/synti/deicsonze2/deicsonzefilter.h b/muse2/synti/deicsonze2/deicsonzefilter.h new file mode 100644 index 00000000..fc92142a --- /dev/null +++ b/muse2/synti/deicsonze2/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/muse2/synti/deicsonze2/deicsonzegui.cpp b/muse2/synti/deicsonze2/deicsonzegui.cpp new file mode 100644 index 00000000..e69de29b diff --git a/muse2/synti/deicsonze2/deicsonzegui.h b/muse2/synti/deicsonze2/deicsonzegui.h new file mode 100644 index 00000000..0fe3345b --- /dev/null +++ b/muse2/synti/deicsonze2/deicsonzegui.h @@ -0,0 +1,571 @@ +//=========================================================================== +// +// 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 +//Added by qt3to4: +#include +#include +#include +#include +#include + +#include "deicsonze.h" + +#include "deicsonzepreset.h" +#include "deicsonzeguibase.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 Q3ListViewItem { + public: + Category* _category; + QTreeCategory(Q3ListView* p, QString shbank, QString l, Category* c) + :Q3ListViewItem(p) { + setText(0, shbank); + setText(1, l); + _category=c; + }; +}; + +class QTreeSubcategory:public Q3ListViewItem { + public: + Subcategory* _subcategory; + QTreeSubcategory(Q3ListView* p, QString slbank, + QString l, Subcategory* s) + :Q3ListViewItem(p) { + setText(0, slbank); + setText(1, l); + _subcategory=s; + }; +}; + +class QTreePreset:public Q3ListViewItem { + public: + Preset* _preset; + QTreePreset(Q3ListView* pa, QString sprog, QString l, Preset* p) + :Q3ListViewItem(pa) { + setText(0, sprog); + setText(1, l); + _preset=p; + }; +}; + +//--------------------------------------------------------- +// DeicsOnzeGui +//--------------------------------------------------------- +class DeicsOnzeGui : public QDialog, public DeicsOnzeGuiBase, public MessGui { + bool _enabledPreset; + + QFramePitchEnvelope* pitchEnvelopeGraph; + QFrameEnvelope* envelopeGraph[NBROP]; + + QWidget* _chorusSuperWidget; + QWidget* _reverbSuperWidget; + std::vector _chorusSliderVector; + // TODO std::vector _chorusFloatEntryVector; + // TODO std::vector _chorusCheckBoxVector; + std::vector _reverbSliderVector; + // TODO std::vector _reverbFloatEntryVector; + // TODO 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); + // TODO 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*); + // TODO void setCategory(QTreeWidgetItem*); + void setSubcategory(Subcategory*); + // TODO void setSubcategory(QTreeWidgetItem*); + // TODO void setPreset(QTreeWidgetItem*); + public: + virtual void processEvent(const MidiPlayEvent&); + 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, Q3GridLayout* grid, bool isReverb); + void addPluginIntSlider(int index, QString text, double min, double max, + double val, QWidget* parent, Q3GridLayout* grid, + bool isReverb); + void addPluginSlider(int index, QString text, bool isLog, double min, + double max, double val, QWidget* parent, + Q3GridLayout* 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 Q3Frame { + 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):Q3Frame(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 Q3Frame { + 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):Q3Frame(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/muse2/synti/deicsonze2/deicsonzegui.ui b/muse2/synti/deicsonze2/deicsonzegui.ui new file mode 100644 index 00000000..6b91cf49 --- /dev/null +++ b/muse2/synti/deicsonze2/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/muse2/synti/deicsonze2/deicsonzeguibase.h b/muse2/synti/deicsonze2/deicsonzeguibase.h new file mode 100644 index 00000000..f4209078 --- /dev/null +++ b/muse2/synti/deicsonze2/deicsonzeguibase.h @@ -0,0 +1,312 @@ +/**************************************************************************** +** Form interface generated from reading ui file 'deicsonzeguibase.ui' +** +** Created: Thu Dec 24 07:50:17 2009 +** +** WARNING! All changes made in this file will be lost! +****************************************************************************/ + +#ifndef DEICSONZEGUIBASE_H +#define DEICSONZEGUIBASE_H + +#include +#include +#include +//Added by qt3to4: +#include +#include +#include +#include + +class Q3VBoxLayout; +class Q3HBoxLayout; +class Q3GridLayout; +class QSpacerItem; +class QTabWidget; +class QWidget; +class QPushButton; +class Q3GroupBox; +class QLineEdit; +class Q3ListView; +class Q3ListViewItem; +class QSpinBox; +class QLabel; +class QSlider; +class QComboBox; +class QCheckBox; + +class DeicsOnzeGuiBase : public QDialog +{ + Q_OBJECT + +public: + DeicsOnzeGuiBase( QWidget* parent = 0, const char* name = 0, bool modal = FALSE, Qt::WFlags fl = 0 ); + ~DeicsOnzeGuiBase(); + + QTabWidget* deicsOnzeTabWidget; + QWidget* TabPage; + QPushButton* loadPushButton; + QPushButton* savePushButton; + Q3GroupBox* nameGroupBox; + QLineEdit* nameLineEdit; + Q3GroupBox* subcategoryGroupBox; + QLineEdit* subcategoryLineEdit; + Q3GroupBox* categoryGroupBox; + QLineEdit* categoryLineEdit; + QPushButton* deletePushButton; + Q3ListView* categoryListView; + Q3ListView* subcategoryListView; + Q3ListView* presetsListView; + QPushButton* newPushButton; + Q3GroupBox* bankGroupBox; + QSpinBox* bankSpinBox; + Q3GroupBox* progGroupBox; + QSpinBox* progSpinBox; + QLabel* presentTextLAbel; + QWidget* TabPage_2; + Q3GroupBox* masterVolGroupBox; + QSlider* masterVolSlider; + QSpinBox* MasterVolumeSpinBox; + Q3GroupBox* FeedbackGroupBox; + QSpinBox* feedbackSpinBox; + QSlider* feedbackSlider; + Q3GroupBox* functionGroupBox; + QComboBox* polyMonoComboBox; + QLabel* PitchBendRangeLabel; + QSlider* PitchBendRangeSlider; + QSpinBox* pitchBendRangeSpinBox; + Q3GroupBox* LFOGroupBox; + QLabel* PModSensLabel; + QLabel* PModDepthLabel; + QLabel* AModDepthLabel; + QLabel* LFOSpeedLabel; + QLabel* LFODelayLabel; + QLabel* AModSensLabel; + QComboBox* LFOWaveComboBox; + QCheckBox* LFOSyncCheckBox; + QSlider* AModSensSlider; + QSlider* PModSensSlider; + QSpinBox* PMSSpinBox; + QSpinBox* AMSSpinBox; + QSlider* PModDepthSlider; + QSlider* AModDepthSlider; + QSlider* LFOSpeedSlider; + QSpinBox* LFOSpeedSpinBox; + QSlider* LFODelaySlider; + QSpinBox* LFODelaySpinBox; + QSpinBox* PModDepthSpinBox; + QSpinBox* AModDepthSpinBox; + Q3GroupBox* transposeGroupBox; + QSlider* transposeSlider; + QSpinBox* transposeSpinBox; + QSlider* globalDetuneSlider; + QSpinBox* globalDetuneSpinBox; + QComboBox* algorithmComboBox; + QWidget* tab; + Q3GroupBox* Frequency1groupBox; + QCheckBox* Fix1CheckBox; + QLabel* CoarseRatio1Label; + QLabel* FineRatio1Label; + QLabel* Freq1Label; + QSpinBox* CoarseRatio1SpinBox; + QSpinBox* FineRatio1SpinBox; + QSpinBox* Freq1SpinBox; + Q3GroupBox* Env1GroupBox; + QLabel* RR1Label; + QLabel* D1R1Label; + QLabel* D1L1Label; + QLabel* D2R1Label; + QSlider* D1L1Slider; + QSlider* D2R1Slider; + QSlider* D1R1Slider; + QSlider* RR1Slider; + QLabel* AR1Label; + QSpinBox* D1R1SpinBox; + QSpinBox* D1L1SpinBox; + QSpinBox* D2R1SpinBox; + QSpinBox* RR1SpinBox; + QSlider* AR1Slider; + QSpinBox* AR1SpinBox; + Q3GroupBox* Scaling1GroupBox; + QLabel* LS1Label; + QLabel* RS1Label; + QSlider* LS1Slider; + QSlider* RS1Slider; + QSpinBox* LS1SpinBox; + QSpinBox* RS1SpinBox; + Q3GroupBox* Vol1groupBox; + QSlider* Vol1Slider; + QSpinBox* Vol1SpinBox; + Q3GroupBox* sensitivity1groupBox; + QLabel* EGS1Label; + QLabel* KVS1Label; + QCheckBox* AME1CheckBox; + QSlider* KVS1Slider; + QSlider* EBS1Slider; + QSpinBox* KVS1SpinBox; + QSpinBox* EBS1SpinBox; + Q3GroupBox* DetWaveEGS1GroupBox; + QComboBox* WaveForm1ComboBox; + QLabel* DET1Label; + QComboBox* EGQ1ComboBox; + QSlider* DET1Slider; + QSpinBox* DET1SpinBox; + QWidget* tab_2; + Q3GroupBox* Frequency2groupBox; + QCheckBox* Fix2CheckBox; + QLabel* Freq2Label; + QLabel* FineRatio2Label; + QLabel* CoarseRatio2Label; + QSpinBox* CoarseRatio2SpinBox; + QSpinBox* FineRatio2SpinBox; + QSpinBox* Freq2SpinBox; + Q3GroupBox* Env2GroupBox; + QLabel* AR2Label; + QLabel* RR2Label; + QLabel* D2R2Label; + QLabel* D1L2Label; + QLabel* D1R2Label; + QSlider* AR2Slider; + QSlider* D1R2Slider; + QSlider* D1L2Slider; + QSlider* D2R2Slider; + QSlider* RR2Slider; + QSpinBox* D1R2SpinBox; + QSpinBox* D1L2SpinBox; + QSpinBox* D2R2SpinBox; + QSpinBox* RR2SpinBox; + QSpinBox* AR2SpinBox; + Q3GroupBox* Scaling2GroupBox; + QLabel* LS2Label; + QLabel* RS2Label; + QSlider* LS2Slider; + QSlider* RS2Slider; + QSpinBox* LS2SpinBox; + QSpinBox* RS2SpinBox; + Q3GroupBox* Vol2groupBox; + QSlider* Vol2Slider; + QSpinBox* Vol2SpinBox; + Q3GroupBox* sensitivity2groupBox; + QLabel* EGS2Label; + QLabel* KVS2Label; + QCheckBox* AME2CheckBox; + QSlider* KVS2Slider; + QSlider* EBS2Slider; + QSpinBox* EBS2SpinBox; + QSpinBox* KVS2SpinBox; + Q3GroupBox* DetWaveEGS2GroupBox; + QSlider* DET2Slider; + QLabel* DET2Label; + QComboBox* WaveForm2ComboBox; + QComboBox* EGS2comboBox; + QSpinBox* DET2SpinBox; + QWidget* TabPage_3; + Q3GroupBox* Frequency3groupBox; + QCheckBox* Fix3CheckBox; + QLabel* CoarseRatio3Label; + QLabel* FineRatio3Label; + QLabel* Freq3Label; + QSpinBox* CoarseRatio3SpinBox; + QSpinBox* FineRatio3SpinBox; + QSpinBox* Freq3SpinBox; + Q3GroupBox* Env3GroupBox; + QLabel* RR3Label; + QLabel* D2R3Label; + QLabel* D1L3Label; + QLabel* D1R3Label; + QLabel* AR3Label; + QSlider* AR3Slider; + QSlider* D1R3Slider; + QSlider* D1L3Slider; + QSlider* D2R3Slider; + QSlider* RR3Slider; + QSpinBox* D1R3SpinBox; + QSpinBox* D1L3SpinBox; + QSpinBox* D2R3SpinBox; + QSpinBox* RR3SpinBox; + QSpinBox* AR3SpinBox; + Q3GroupBox* Scaling3GroupBox; + QLabel* LS3Label; + QLabel* RS3Label; + QSlider* LS3Slider; + QSlider* RS3Slider; + QSpinBox* LS3SpinBox; + QSpinBox* RS3SpinBox; + Q3GroupBox* Vol3groupBox; + QSlider* Vol3Slider; + QSpinBox* Vol3SpinBox; + Q3GroupBox* sensitivity3groupBox; + QLabel* EGS3Label; + QLabel* KVS3Label; + QCheckBox* AME3CheckBox; + QSlider* KVS3Slider; + QSlider* EBS3Slider; + QSpinBox* EBS3SpinBox; + QSpinBox* KVS3SpinBox; + Q3GroupBox* DetWaveEGS3GroupBox; + QComboBox* WaveForm3ComboBox; + QComboBox* EGS3comboBox; + QLabel* DET3Label; + QSlider* DET3Slider; + QSpinBox* DET3SpinBox; + QWidget* TabPage_4; + Q3GroupBox* Frequency4groupBox; + QLabel* CoarseRatio4Label; + QLabel* FineRatio4Label; + QLabel* Freq4Label; + QCheckBox* Fix4CheckBox; + QSpinBox* FineRatio4SpinBox; + QSpinBox* Freq4SpinBox; + QSpinBox* CoarseRatio4SpinBox; + Q3GroupBox* Scaling4GroupBox; + QLabel* LS4Label; + QLabel* RS4Label; + QSlider* LS4Slider; + QSlider* RS4Slider; + QSpinBox* RS4SpinBox; + QSpinBox* LS4SpinBox; + Q3GroupBox* Env4GroupBox; + QSlider* AR4Slider; + QLabel* AR4Label; + QLabel* RR4Label; + QLabel* D2R4Label; + QSlider* D2R4Slider; + QSlider* D1L4Slider; + QLabel* D1L4Label; + QLabel* D1R4Label; + QSlider* D1R4Slider; + QSlider* RR4Slider; + QSpinBox* D1R4SpinBox; + QSpinBox* D1L4SpinBox; + QSpinBox* D2R4SpinBox; + QSpinBox* RR4SpinBox; + QSpinBox* AR4SpinBox; + Q3GroupBox* Vol4groupBox; + QSlider* Vol4Slider; + QSpinBox* Vol4SpinBox; + Q3GroupBox* sensitivity4groupBox; + QLabel* EGS4Label; + QLabel* KVS4Label; + QCheckBox* AME4CheckBox; + QSlider* KVS4Slider; + QSlider* EBS4Slider; + QSpinBox* KVS4SpinBox; + QSpinBox* EBS4SpinBox; + Q3GroupBox* DetWaveEGS4GroupBox; + QSlider* DET4Slider; + QLabel* DET4Label; + QComboBox* WaveForm4ComboBox; + QComboBox* EGS4comboBox; + QSpinBox* DET4SpinBox; + +protected: + +protected slots: + virtual void languageChange(); + +private: + QPixmap image0; + +}; + +#endif // DEICSONZEGUIBASE_H diff --git a/muse2/synti/deicsonze2/deicsonzeplugin.cpp b/muse2/synti/deicsonze2/deicsonzeplugin.cpp new file mode 100644 index 00000000..581dad38 --- /dev/null +++ b/muse2/synti/deicsonze2/deicsonzeplugin.cpp @@ -0,0 +1,502 @@ +//=========================================================================== +// +// 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 "muse/plugin.h" +//#include "plugingui.h" +#include "muse/ctrl.h" +#include "muse/fastlog.h" +#include "muse/midi.h" +//Added by qt3to4: +#include +#include +//#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, Q3GridLayout* 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, + Q3GridLayout* 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, Q3GridLayout* 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()); + Q3GridLayout* superLayout = new Q3GridLayout(parametersReverbGroupBox); + parametersReverbGroupBox->setLayout(superLayout); + //build super widget + if(_reverbSuperWidget) delete(_reverbSuperWidget); + _reverbSuperWidget = new QWidget(parametersReverbGroupBox); + superLayout->addWidget(_reverbSuperWidget); + //build grid + Q3GridLayout* grid = new Q3GridLayout(_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()); + Q3GridLayout* superLayout = new Q3GridLayout(parametersChorusGroupBox); + parametersChorusGroupBox->setLayout(superLayout); + //build super widget + if(_chorusSuperWidget) delete(_chorusSuperWidget); + _chorusSuperWidget = new QWidget(parametersChorusGroupBox); + superLayout->addWidget(_chorusSuperWidget); + //build grid + Q3GridLayout* grid = new Q3GridLayout(_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/muse2/synti/deicsonze2/deicsonzeplugin.h b/muse2/synti/deicsonze2/deicsonzeplugin.h new file mode 100644 index 00000000..d9527e23 --- /dev/null +++ b/muse2/synti/deicsonze2/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/muse2/synti/deicsonze2/deicsonzepreset.cpp b/muse2/synti/deicsonze2/deicsonzepreset.cpp new file mode 100644 index 00000000..007b0d06 --- /dev/null +++ b/muse2/synti/deicsonze2/deicsonzepreset.cpp @@ -0,0 +1,1202 @@ +//=========================================================================== +// +// 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 + +#define SET_LEVEL 1 +#define CAT_LEVEL 2 +#define SUB_LEVEL 3 +#define PRE_LEVEL 4 + +//----------------------------------------------------------- +// 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().ascii(); + 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(Xml* xml, bool onlyUsed) { + xml->tag(0, "deicsOnzeSet version=\"1.0\""); + xml->strTag(SET_LEVEL, "setName", _setName.c_str()); + for(std::vector::iterator i = _categoryVector.begin(); + i != _categoryVector.end(); i++) (*i)->writeCategory(xml, onlyUsed); + xml->etag(0, "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().ascii(); + 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(Xml* xml, bool onlyUsed) { + if((!onlyUsed || _isUsed)) { + xml->tag(SET_LEVEL, "deicsOnzeCategory version=\"1.0\""); + xml->strTag(CAT_LEVEL, "categoryName", _categoryName.c_str()); + xml->intTag(CAT_LEVEL, "hbank", _hbank); + for(std::vector::iterator i=_subcategoryVector.begin(); + i!=_subcategoryVector.end(); i++) + (*i)->writeSubcategory(xml, onlyUsed); + xml->etag(SET_LEVEL, "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().ascii(); + 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(Xml* xml, bool onlyUsed) { + if((!onlyUsed || _isUsed)) { + xml->tag(CAT_LEVEL, "deicsOnzeSubcategory version=\"1.0\""); + xml->strTag(SUB_LEVEL, "subcategoryName", _subcategoryName.c_str()); + xml->intTag(SUB_LEVEL, "lbank", _lbank); + for(std::vector::iterator i=_presetVector.begin(); + i!=_presetVector.end(); i++) (*i)->writePreset(xml, onlyUsed); + xml->etag(CAT_LEVEL, "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().ascii(); + //prog + else if(presetEl.tagName()=="prog") + prog=presetEl.text().toInt(); + presetNode = presetNode.nextSibling(); + } +} + +//--------------------------------------------------------- +// witePreset +//--------------------------------------------------------- +void Preset::writePreset(Xml* xml, bool onlyUsed) { + char s[MAXCHARTAG]; + if((!onlyUsed || _isUsed)) { + xml->tag(SUB_LEVEL, "deicsOnzePreset version=\"1.0\""); + + //algorithm + xml->strTag(PRE_LEVEL, ALGSTR, (algorithm==FIRST? "FIRST": + (algorithm==SECOND? "SECOND": + (algorithm==THIRD? "THIRD": + (algorithm==FOURTH? "FOURTH": + (algorithm==FIFTH? "FIFTH": + (algorithm==SIXTH? "SIXTH": + (algorithm==SEVENTH? "SEVENTH": + "EIGHTH")))))))); + //feedback + xml->uintTag(PRE_LEVEL, 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->tag(PRE_LEVEL, "lfo"); + xml->strTag(PRE_LEVEL + 1, WAVESTR, + (lfo.wave==SAWUP? "SAWUP": + (lfo.wave==SQUARE? "SQUARE": + (lfo.wave==TRIANGL? "TRIANGL":"SHOLD")))); + xml->uintTag(PRE_LEVEL + 1, SPEEDSTR, lfo.speed); + xml->uintTag(PRE_LEVEL + 1, DELAYSTR, lfo.delay); + xml->uintTag(PRE_LEVEL + 1, PMODDEPTHSTR, lfo.pModDepth); + xml->uintTag(PRE_LEVEL + 1, AMODDEPTHSTR, lfo.aModDepth); + xml->strTag(PRE_LEVEL + 1, SYNCSTR, (lfo.sync==true? "on":"off")); + xml->etag(PRE_LEVEL, "lfo"); + //sensitivity + xml->tag(PRE_LEVEL, "sensitivity"); + xml->uintTag(PRE_LEVEL + 1, PMODSENSSTR, sensitivity.pitch); + xml->uintTag(PRE_LEVEL + 1, AMSSTR, sensitivity.amplitude); + for(int i=0; istrTag(PRE_LEVEL + 1, s, + (sensitivity.ampOn[i]==true? "on":"off")); + } + for(int i=0; iuintTag(PRE_LEVEL + 1, s, sensitivity.egBias[i]); + } + for(int i=0; iuintTag(PRE_LEVEL + 1, s, sensitivity.keyVelocity[i]); + } + xml->etag(PRE_LEVEL, "sensitivity"); + //frequency + xml->tag(PRE_LEVEL, "frequency"); + for(int i=0; idoubleTag(PRE_LEVEL + 1, s, frequency[i].ratio); + } + for(int i=0; istrTag(PRE_LEVEL + 1, s, (frequency[i].isFix==true? "yes":"no")); + } + for(int i=0; idoubleTag(PRE_LEVEL + 1, s, frequency[i].freq); + } + xml->etag(PRE_LEVEL, "frequency"); + //oscWave + for(int i=0; istrTag(PRE_LEVEL, s, (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; iintTag(PRE_LEVEL, s, detune[i]); + } + //eg + xml->tag(PRE_LEVEL, "eg"); + for(int i=0; iuintTag(PRE_LEVEL + 1, s, eg[i].ar); + } + for(int i=0; iuintTag(PRE_LEVEL + 1, s, eg[i].d1r); + } + for(int i=0; iuintTag(PRE_LEVEL + 1, s, eg[i].d1l); + } + for(int i=0; iuintTag(PRE_LEVEL + 1, s, eg[i].d2r); + } + for(int i=0; iuintTag(PRE_LEVEL + 1, s, eg[i].rr); + } + for(int i=0; istrTag(PRE_LEVEL + 1, s, (eg[i].egShift==VOF?"VOF": + (eg[i].egShift==V48?"V48": + (eg[i].egShift==V24?"V24":"V12")))); + } + xml->etag(PRE_LEVEL, "eg"); + //pitchEg + xml->tag(PRE_LEVEL, "pitchEg"); + xml->uintTag(PRE_LEVEL + 1, PR1STR,pitchEg.pr1); + xml->uintTag(PRE_LEVEL + 1, PR2STR,pitchEg.pr2); + xml->uintTag(PRE_LEVEL + 1, PR3STR,pitchEg.pr3); + xml->uintTag(PRE_LEVEL + 1, PL1STR,pitchEg.pl1); + xml->uintTag(PRE_LEVEL + 1, PL2STR,pitchEg.pl2); + xml->uintTag(PRE_LEVEL + 1, PL3STR,pitchEg.pl3); + xml->etag(PRE_LEVEL, "pitchEg"); + //outLevel + for(int i=0; iuintTag(PRE_LEVEL, s, outLevel[i]); + } + //scaling + xml->tag(PRE_LEVEL, "scaling"); + for(int i=0; iuintTag(PRE_LEVEL + 1, s, scaling.rate[i]); + } + for(int i=0; iuintTag(PRE_LEVEL + 1, s, scaling.level[i]); + } + xml->etag(PRE_LEVEL, "scaling"); + //function + xml->tag(PRE_LEVEL, "function"); + xml->intTag(PRE_LEVEL + 1, TRANSPOSESTR, function.transpose); + xml->strTag(PRE_LEVEL + 1, POLYMODESTR, + (function.mode==POLY? "POLY":"MONO")); + xml->uintTag(PRE_LEVEL + 1, PBENDRANGESTR, function.pBendRange); + xml->strTag(PRE_LEVEL + 1, PORTAMODESTR, + (function.portamento==FINGER? "FINGER":"FULL")); + xml->uintTag(PRE_LEVEL + 1, PORTATIMESTR, function.portamentoTime); + xml->strTag(PRE_LEVEL + 1, FSWSTR, (function.footSw==POR? "POR":"SUS")); + xml->uintTag(PRE_LEVEL + 1, FCVOLUMESTR, function.fcVolume); + xml->uintTag(PRE_LEVEL + 1, FCPITCHSTR, function.fcPitch); + xml->uintTag(PRE_LEVEL + 1, FCAMPLITUDESTR, function.fcAmplitude); + xml->uintTag(PRE_LEVEL + 1, MWPITCHSTR, function.mwPitch); + xml->uintTag(PRE_LEVEL + 1, MWAMPLITUDESTR, function.mwAmplitude); + xml->uintTag(PRE_LEVEL + 1, BCPITCHSTR, function.bcPitch); + xml->uintTag(PRE_LEVEL + 1, BCAMPLITUDESTR, function.bcAmplitude); + xml->intTag(PRE_LEVEL + 1, BCPITCHBIASSTR, function.bcPitchBias); + xml->uintTag(PRE_LEVEL + 1, BCEGBIASSTR, function.bcEgBias); + xml->uintTag(PRE_LEVEL + 1, ATPITCHSTR, function.atPitch); + xml->uintTag(PRE_LEVEL + 1, ATAMPLITUDESTR, function.atAmplitude); + xml->intTag(PRE_LEVEL + 1, ATPITCHBIASSTR, function.atPitchBias); + xml->uintTag(PRE_LEVEL + 1, ATEGBIASSTR, function.atEgBias); + xml->intTag(PRE_LEVEL + 1, REVERBRATESTR, function.reverbRate); + xml->etag(PRE_LEVEL, "function"); + //globalDetune + //xml->tag("globalDetune", globalDetune); + //preset name + xml->strTag(PRE_LEVEL, "name", name.c_str()); + //bank prog + xml->intTag(PRE_LEVEL, "prog", prog); + + xml->etag(SUB_LEVEL, "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/muse2/synti/deicsonze2/deicsonzepreset.h b/muse2/synti/deicsonze2/deicsonzepreset.h new file mode 100644 index 00000000..3c005c8d --- /dev/null +++ b/muse2/synti/deicsonze2/deicsonzepreset.h @@ -0,0 +1,567 @@ +//=========================================================================== +// +// 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 + +#include + +#include "muse/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(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(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(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(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/muse2/synti/deicsonze2/pics/SHold.fig b/muse2/synti/deicsonze2/pics/SHold.fig new file mode 100644 index 00000000..2e1d2431 --- /dev/null +++ b/muse2/synti/deicsonze2/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/muse2/synti/deicsonze2/pics/SHold.png b/muse2/synti/deicsonze2/pics/SHold.png new file mode 100644 index 00000000..b500ca67 Binary files /dev/null and b/muse2/synti/deicsonze2/pics/SHold.png differ diff --git a/muse2/synti/deicsonze2/pics/algo1.fig b/muse2/synti/deicsonze2/pics/algo1.fig new file mode 100644 index 00000000..f90714b7 --- /dev/null +++ b/muse2/synti/deicsonze2/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/muse2/synti/deicsonze2/pics/algo1.png b/muse2/synti/deicsonze2/pics/algo1.png new file mode 100644 index 00000000..1347af71 Binary files /dev/null and b/muse2/synti/deicsonze2/pics/algo1.png differ diff --git a/muse2/synti/deicsonze2/pics/algo2.fig b/muse2/synti/deicsonze2/pics/algo2.fig new file mode 100644 index 00000000..d0dbea38 --- /dev/null +++ b/muse2/synti/deicsonze2/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/muse2/synti/deicsonze2/pics/algo2.png b/muse2/synti/deicsonze2/pics/algo2.png new file mode 100644 index 00000000..7d623227 Binary files /dev/null and b/muse2/synti/deicsonze2/pics/algo2.png differ diff --git a/muse2/synti/deicsonze2/pics/algo3.fig b/muse2/synti/deicsonze2/pics/algo3.fig new file mode 100644 index 00000000..9efaa53f --- /dev/null +++ b/muse2/synti/deicsonze2/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/muse2/synti/deicsonze2/pics/algo3.png b/muse2/synti/deicsonze2/pics/algo3.png new file mode 100644 index 00000000..b091cc16 Binary files /dev/null and b/muse2/synti/deicsonze2/pics/algo3.png differ diff --git a/muse2/synti/deicsonze2/pics/algo4.fig b/muse2/synti/deicsonze2/pics/algo4.fig new file mode 100644 index 00000000..26d12f54 --- /dev/null +++ b/muse2/synti/deicsonze2/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/muse2/synti/deicsonze2/pics/algo4.png b/muse2/synti/deicsonze2/pics/algo4.png new file mode 100644 index 00000000..de0e6d26 Binary files /dev/null and b/muse2/synti/deicsonze2/pics/algo4.png differ diff --git a/muse2/synti/deicsonze2/pics/algo5.fig b/muse2/synti/deicsonze2/pics/algo5.fig new file mode 100644 index 00000000..63731eba --- /dev/null +++ b/muse2/synti/deicsonze2/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/muse2/synti/deicsonze2/pics/algo5.png b/muse2/synti/deicsonze2/pics/algo5.png new file mode 100644 index 00000000..2e41a1db Binary files /dev/null and b/muse2/synti/deicsonze2/pics/algo5.png differ diff --git a/muse2/synti/deicsonze2/pics/algo6.fig b/muse2/synti/deicsonze2/pics/algo6.fig new file mode 100644 index 00000000..4e23b8fa --- /dev/null +++ b/muse2/synti/deicsonze2/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/muse2/synti/deicsonze2/pics/algo6.png b/muse2/synti/deicsonze2/pics/algo6.png new file mode 100644 index 00000000..80de4a94 Binary files /dev/null and b/muse2/synti/deicsonze2/pics/algo6.png differ diff --git a/muse2/synti/deicsonze2/pics/algo7.fig b/muse2/synti/deicsonze2/pics/algo7.fig new file mode 100644 index 00000000..6d0fe501 --- /dev/null +++ b/muse2/synti/deicsonze2/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/muse2/synti/deicsonze2/pics/algo7.png b/muse2/synti/deicsonze2/pics/algo7.png new file mode 100644 index 00000000..0cdda327 Binary files /dev/null and b/muse2/synti/deicsonze2/pics/algo7.png differ diff --git a/muse2/synti/deicsonze2/pics/algo8.fig b/muse2/synti/deicsonze2/pics/algo8.fig new file mode 100644 index 00000000..8bf9dcc9 --- /dev/null +++ b/muse2/synti/deicsonze2/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/muse2/synti/deicsonze2/pics/algo8.png b/muse2/synti/deicsonze2/pics/algo8.png new file mode 100644 index 00000000..17ca60d7 Binary files /dev/null and b/muse2/synti/deicsonze2/pics/algo8.png differ diff --git a/muse2/synti/deicsonze2/pics/sawUp.fig b/muse2/synti/deicsonze2/pics/sawUp.fig new file mode 100644 index 00000000..2c701818 --- /dev/null +++ b/muse2/synti/deicsonze2/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/muse2/synti/deicsonze2/pics/sawUp.png b/muse2/synti/deicsonze2/pics/sawUp.png new file mode 100644 index 00000000..d0541858 Binary files /dev/null and b/muse2/synti/deicsonze2/pics/sawUp.png differ diff --git a/muse2/synti/deicsonze2/pics/square.fig b/muse2/synti/deicsonze2/pics/square.fig new file mode 100644 index 00000000..0adb802e --- /dev/null +++ b/muse2/synti/deicsonze2/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/muse2/synti/deicsonze2/pics/square.png b/muse2/synti/deicsonze2/pics/square.png new file mode 100644 index 00000000..f2293267 Binary files /dev/null and b/muse2/synti/deicsonze2/pics/square.png differ diff --git a/muse2/synti/deicsonze2/pics/triangl.fig b/muse2/synti/deicsonze2/pics/triangl.fig new file mode 100644 index 00000000..95970995 --- /dev/null +++ b/muse2/synti/deicsonze2/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/muse2/synti/deicsonze2/pics/triangl.png b/muse2/synti/deicsonze2/pics/triangl.png new file mode 100644 index 00000000..c0937be9 Binary files /dev/null and b/muse2/synti/deicsonze2/pics/triangl.png differ diff --git a/muse2/synti/deicsonze2/pics/wave1.fig b/muse2/synti/deicsonze2/pics/wave1.fig new file mode 100644 index 00000000..9cf6f065 --- /dev/null +++ b/muse2/synti/deicsonze2/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/muse2/synti/deicsonze2/pics/wave1.gnuplot b/muse2/synti/deicsonze2/pics/wave1.gnuplot new file mode 100644 index 00000000..ff4aa2ed --- /dev/null +++ b/muse2/synti/deicsonze2/pics/wave1.gnuplot @@ -0,0 +1,2 @@ +set terminal fig +plot [0:4*pi] sin(x) diff --git a/muse2/synti/deicsonze2/pics/wave1.png b/muse2/synti/deicsonze2/pics/wave1.png new file mode 100644 index 00000000..009aa7f7 Binary files /dev/null and b/muse2/synti/deicsonze2/pics/wave1.png differ diff --git a/muse2/synti/deicsonze2/pics/wave2.fig b/muse2/synti/deicsonze2/pics/wave2.fig new file mode 100644 index 00000000..2da89e13 --- /dev/null +++ b/muse2/synti/deicsonze2/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/muse2/synti/deicsonze2/pics/wave2.gnuplot b/muse2/synti/deicsonze2/pics/wave2.gnuplot new file mode 100644 index 00000000..01e57a9b --- /dev/null +++ b/muse2/synti/deicsonze2/pics/wave2.gnuplot @@ -0,0 +1,2 @@ +set terminal fig +plot [0:4*pi] sin(x)*abs(sin(x)) diff --git a/muse2/synti/deicsonze2/pics/wave2.png b/muse2/synti/deicsonze2/pics/wave2.png new file mode 100644 index 00000000..5f4daaee Binary files /dev/null and b/muse2/synti/deicsonze2/pics/wave2.png differ diff --git a/muse2/synti/deicsonze2/pics/wave3.fig b/muse2/synti/deicsonze2/pics/wave3.fig new file mode 100644 index 00000000..5051c2ef --- /dev/null +++ b/muse2/synti/deicsonze2/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/muse2/synti/deicsonze2/pics/wave3.gnuplot b/muse2/synti/deicsonze2/pics/wave3.gnuplot new file mode 100644 index 00000000..e97c06b8 --- /dev/null +++ b/muse2/synti/deicsonze2/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/muse2/synti/deicsonze2/pics/wave3.png b/muse2/synti/deicsonze2/pics/wave3.png new file mode 100644 index 00000000..6e0ada6d Binary files /dev/null and b/muse2/synti/deicsonze2/pics/wave3.png differ diff --git a/muse2/synti/deicsonze2/pics/wave4.fig b/muse2/synti/deicsonze2/pics/wave4.fig new file mode 100644 index 00000000..cb54e0e6 --- /dev/null +++ b/muse2/synti/deicsonze2/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/muse2/synti/deicsonze2/pics/wave4.gnuplot b/muse2/synti/deicsonze2/pics/wave4.gnuplot new file mode 100644 index 00000000..bf7b43c9 --- /dev/null +++ b/muse2/synti/deicsonze2/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/muse2/synti/deicsonze2/pics/wave4.png b/muse2/synti/deicsonze2/pics/wave4.png new file mode 100644 index 00000000..f104e06c Binary files /dev/null and b/muse2/synti/deicsonze2/pics/wave4.png differ diff --git a/muse2/synti/deicsonze2/pics/wave5.fig b/muse2/synti/deicsonze2/pics/wave5.fig new file mode 100644 index 00000000..5d60ea7e --- /dev/null +++ b/muse2/synti/deicsonze2/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/muse2/synti/deicsonze2/pics/wave5.gnuplot b/muse2/synti/deicsonze2/pics/wave5.gnuplot new file mode 100644 index 00000000..066cb3d4 --- /dev/null +++ b/muse2/synti/deicsonze2/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/muse2/synti/deicsonze2/pics/wave5.png b/muse2/synti/deicsonze2/pics/wave5.png new file mode 100644 index 00000000..003af248 Binary files /dev/null and b/muse2/synti/deicsonze2/pics/wave5.png differ diff --git a/muse2/synti/deicsonze2/pics/wave6.fig b/muse2/synti/deicsonze2/pics/wave6.fig new file mode 100644 index 00000000..5bad4b67 --- /dev/null +++ b/muse2/synti/deicsonze2/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/muse2/synti/deicsonze2/pics/wave6.gnuplot b/muse2/synti/deicsonze2/pics/wave6.gnuplot new file mode 100644 index 00000000..e1eed2e5 --- /dev/null +++ b/muse2/synti/deicsonze2/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/muse2/synti/deicsonze2/pics/wave6.png b/muse2/synti/deicsonze2/pics/wave6.png new file mode 100644 index 00000000..08e717ce Binary files /dev/null and b/muse2/synti/deicsonze2/pics/wave6.png differ diff --git a/muse2/synti/deicsonze2/pics/wave7.fig b/muse2/synti/deicsonze2/pics/wave7.fig new file mode 100644 index 00000000..b5ad0ea2 --- /dev/null +++ b/muse2/synti/deicsonze2/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/muse2/synti/deicsonze2/pics/wave7.gnuplot b/muse2/synti/deicsonze2/pics/wave7.gnuplot new file mode 100644 index 00000000..294b2423 --- /dev/null +++ b/muse2/synti/deicsonze2/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/muse2/synti/deicsonze2/pics/wave7.png b/muse2/synti/deicsonze2/pics/wave7.png new file mode 100644 index 00000000..44e5928f Binary files /dev/null and b/muse2/synti/deicsonze2/pics/wave7.png differ diff --git a/muse2/synti/deicsonze2/pics/wave8.fig b/muse2/synti/deicsonze2/pics/wave8.fig new file mode 100644 index 00000000..017deb5b --- /dev/null +++ b/muse2/synti/deicsonze2/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/muse2/synti/deicsonze2/pics/wave8.gnuplot b/muse2/synti/deicsonze2/pics/wave8.gnuplot new file mode 100644 index 00000000..e86332c7 --- /dev/null +++ b/muse2/synti/deicsonze2/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/muse2/synti/deicsonze2/pics/wave8.png b/muse2/synti/deicsonze2/pics/wave8.png new file mode 100644 index 00000000..6df0dda5 Binary files /dev/null and b/muse2/synti/deicsonze2/pics/wave8.png differ diff --git a/muse2/synti/fluid/Makefile.am b/muse2/synti/fluid/Makefile.am new file mode 100644 index 00000000..7e641a85 --- /dev/null +++ b/muse2/synti/fluid/Makefile.am @@ -0,0 +1,16 @@ +include $(top_srcdir)/common.am +include $(top_srcdir)/synti/synti-install.am + +AM_CXXFLAGS += -fPIC -O3 -ffast-math -fno-exceptions -fno-rtti + +synthi_LTLIBRARIES = fluid.la + +fluid_la_SOURCES = fluid.cpp fluid.h \ + fluidgui.cpp fluidgui.h \ + fluidguibase.ui + +nodist_fluid_la_SOURCES = moc_fluidgui.cpp + +fluid_la_LIBADD = ../libsynti/libsynti.la -lfluidsynth +fluid_la_LDFLAGS = -module -avoid-version + diff --git a/muse2/synti/fluid/Makefile.in b/muse2/synti/fluid/Makefile.in new file mode 100644 index 00000000..a9f97135 --- /dev/null +++ b/muse2/synti/fluid/Makefile.in @@ -0,0 +1,649 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/common.am $(top_srcdir)/synti/synti-install.am +subdir = synti/fluid +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal-include.m4 \ + $(top_srcdir)/m4/alsa.m4 $(top_srcdir)/m4/docbook.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(synthidir)" +LTLIBRARIES = $(synthi_LTLIBRARIES) +fluid_la_DEPENDENCIES = ../libsynti/libsynti.la +am_fluid_la_OBJECTS = fluid.lo fluidgui.lo fluidguibase.lo +nodist_fluid_la_OBJECTS = moc_fluidgui.lo +fluid_la_OBJECTS = $(am_fluid_la_OBJECTS) $(nodist_fluid_la_OBJECTS) +fluid_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ + $(CXXFLAGS) $(fluid_la_LDFLAGS) $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +CXXLD = $(CXX) +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(fluid_la_SOURCES) $(nodist_fluid_la_SOURCES) +DIST_SOURCES = $(fluid_la_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DOCBOOKSTYLE = @DOCBOOKSTYLE@ +DOCBOOKTARGETS = @DOCBOOKTARGETS@ +DOT = @DOT@ +DOTPATH = @DOTPATH@ +DOXYGEN = @DOXYGEN@ +DOXYGEN_TREEVIEW = @DOXYGEN_TREEVIEW@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FLUIDSYNTHDIRS = @FLUIDSYNTHDIRS@ +FST_CFLAGS = @FST_CFLAGS@ +FST_LIBS = @FST_LIBS@ +Fluidsynth_CFLAGS = @Fluidsynth_CFLAGS@ +Fluidsynth_LIBS = @Fluidsynth_LIBS@ +GIVERTCAP = @GIVERTCAP@ +GREP = @GREP@ +HAVEDOT = @HAVEDOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_LIBS = @JACK_LIBS@ +JADE = @JADE@ +LASH_CFLAGS = @LASH_CFLAGS@ +LASH_LIBS = @LASH_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LO_CFLAGS = @LO_CFLAGS@ +LO_LIBS = @LO_LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MUSECXXFLAGS = @MUSECXXFLAGS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NSGMLS = @NSGMLS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PCH = @PCH@ +PERL = @PERL@ +PKG_CONFIG = @PKG_CONFIG@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIB = @PYTHON_LIB@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QTDIR_BIN = @QTDIR_BIN@ +QTDIR_INC = @QTDIR_INC@ +QT_LIBS = @QT_LIBS@ +RANLIB = @RANLIB@ +SAMPLERATE_CFLAGS = @SAMPLERATE_CFLAGS@ +SAMPLERATE_LIBS = @SAMPLERATE_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ +SNDFILE_LIBS = @SNDFILE_LIBS@ +STRIP = @STRIP@ +SUIDBUILD = @SUIDBUILD@ +SUIDINSTALL = @SUIDINSTALL@ +USE_SSE = @USE_SSE@ +UUID_CFLAGS = @UUID_CFLAGS@ +UUID_LIBS = @UUID_LIBS@ +VERSION = @VERSION@ +XMKMF = @XMKMF@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +have_docbook = @have_docbook@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +synth_fluid = @synth_fluid@ +synth_fluidsynth = @synth_fluidsynth@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AM_CXXFLAGS = $(MUSECXXFLAGS) -I.. -I$(top_srcdir)/synti \ + -I$(top_srcdir)/muse/widgets -DQT_SHARED -DQT_THREAD_SUPPORT \ + -DQT_PLUGIN $(QTDIR_INC) -DQT3_SUPPORT -fPIC -O3 -ffast-math \ + -fno-exceptions -fno-rtti +AM_CPPFLAGS = +MOC = $(QTDIR_BIN)/moc +#UIC = $(QTDIR_BIN)/uic3 +UIC = /usr/bin/uic3 +UIFILES = $(wildcard *.ui) +MOCFILES = $(shell for h in $(filter %.h,$(SOURCES)); do \ + if grep -q Q_OBJECT $$h; then \ + echo $$h | sed "s/\(.*\)\.h/moc_\1.cpp/"; \ + fi; \ + done) + +BUILT_SOURCES = $(MOCFILES) $(UIFILES:%.ui=%.h) +MOSTLYCLEANFILES = $(MOCFILES) $(UIFILES:%.ui=%.h) +SUFFIXES = .ui .h.gch +synthidir = $(pkglibdir)/synthi +synthi_LTLIBRARIES = fluid.la +fluid_la_SOURCES = fluid.cpp fluid.h \ + fluidgui.cpp fluidgui.h \ + fluidguibase.ui + +nodist_fluid_la_SOURCES = moc_fluidgui.cpp +fluid_la_LIBADD = ../libsynti/libsynti.la -lfluidsynth +fluid_la_LDFLAGS = -module -avoid-version +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: .ui .h.gch .cpp .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/common.am $(top_srcdir)/synti/synti-install.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu synti/fluid/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu synti/fluid/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-synthiLTLIBRARIES: $(synthi_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(synthidir)" || $(MKDIR_P) "$(DESTDIR)$(synthidir)" + @list='$(synthi_LTLIBRARIES)'; test -n "$(synthidir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(synthidir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(synthidir)"; \ + } + +uninstall-synthiLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(synthi_LTLIBRARIES)'; test -n "$(synthidir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(synthidir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(synthidir)/$$f"; \ + done + +clean-synthiLTLIBRARIES: + -test -z "$(synthi_LTLIBRARIES)" || rm -f $(synthi_LTLIBRARIES) + @list='$(synthi_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +fluid.la: $(fluid_la_OBJECTS) $(fluid_la_DEPENDENCIES) + $(fluid_la_LINK) -rpath $(synthidir) $(fluid_la_OBJECTS) $(fluid_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fluid.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fluidgui.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/moc_fluidgui.Plo@am__quote@ + +.cpp.o: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< + +.cpp.obj: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.cpp.lo: +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-am +all-am: Makefile $(LTLIBRARIES) +installdirs: + for dir in "$(DESTDIR)$(synthidir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +clean: clean-am + +clean-am: clean-generic clean-libtool clean-synthiLTLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-synthiLTLIBRARIES + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-synthiLTLIBRARIES + +.MAKE: all check install install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-synthiLTLIBRARIES ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip install-synthiLTLIBRARIES installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-synthiLTLIBRARIES + + +de: + @for base in $(MOCFILES); do echo -e "\t$${base}.cpp $${base}.h \\"; done + +nde: + @for base in $(MOCFILES); do echo -e "\tmoc_$${base}.cpp \\"; done + +.ui.o: %.h + $(UIC) -L $(top_srcdir)/muse/widgets -o $*.cpp -impl $*.h $*.ui + $(MOC) $*.h >> $*.cpp + $(CXXCOMPILE) -c $*.cpp -o $*.o + $(RM) $*.cpp moc_$*.cpp moc_$*.o + +.ui.lo: %.h + $(UIC) -L $(top_srcdir)/muse/widgets -o $*.cpp -impl $*.h $*.ui + $(MOC) $*.h >> $*.cpp + $(LTCXXCOMPILE) -c $*.cpp -o $*.lo + $(RM) $*.cpp moc_$*.cpp moc_$*.lo moc_$*.o + +moc_%.cpp: %.h + $(MOC) $< -o $@ + +%.h: %.ui + $(UIC) -o $@ $< +# $(UIC) -L $(top_srcdir)/muse/widgets -o $@ $< + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/muse2/synti/fluid/fluid.cpp b/muse2/synti/fluid/fluid.cpp new file mode 100644 index 00000000..a03be4de --- /dev/null +++ b/muse2/synti/fluid/fluid.cpp @@ -0,0 +1,588 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: fluid.cpp,v 1.18.2.8 2009/12/06 10:05:00 terminator356 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 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "muse/midictrl.h" + +#include "muse/midi.h" +#include "fluid.h" +#include "fluidgui.h" + +//--------------------------------------------------------- +// instantiate +//--------------------------------------------------------- + +class QWidget; + +static Mess* instantiate(int sr, QWidget*, QString *projectPathPtr, 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", + "fluid soundfont loader by 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(): busy!\n"); + 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; + } + +//--------------------------------------------------------- +// processMessages +// Called from host always, even if output path is unconnected. +//--------------------------------------------------------- + +void ISynth::processMessages() +{ + //Process messages from the gui + if (!_busy) + { + // + // get and process all pending events from the + // synthesizer GUI + // + while (gui->fifoSize()) + processEvent(gui->readEvent()); + } +} + +//--------------------------------------------------------- +// process +// Called from host, ONLY if output path is connected. +//--------------------------------------------------------- + +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)); + } + +//--------------------------------------------------------- +// processEvent +// All events from the sequencer go here +//--------------------------------------------------------- +bool ISynth::processEvent(const MidiPlayEvent& ev) + { + switch(ev.type()) { + case ME_CONTROLLER: + setController(ev.channel(), ev.dataA(), ev.dataB()); + return true; + 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_PITCHBEND: + setController(ev.channel(), CTRL_PITCH, ev.dataA()); + break; + case ME_PROGRAM: + setController(ev.channel(), CTRL_PROGRAM, ev.dataA()); + break; + default: + break; + } + return false; + } + +//--------------------------------------------------------- +// getPatchName +//--------------------------------------------------------- + +const char* ISynth::getPatchName(int /*ch*/, int val, int, bool /*drum*/) const + { + int prog = val & 0xff; + if(val == CTRL_VAL_UNKNOWN || prog == 0xff) + return ""; + prog &= 0x7f; + + 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; + const 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, (char*) "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->setCaption(QString(name)); + gui->show(); + return false; + } + diff --git a/muse2/synti/fluid/fluid.h b/muse2/synti/fluid/fluid.h new file mode 100644 index 00000000..c1669846 --- /dev/null +++ b/muse2/synti/fluid/fluid.h @@ -0,0 +1,84 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: fluid.h,v 1.7.2.4 2009/11/19 04:20:33 terminator356 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 +#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 processMessages(); + 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 bool processEvent(const MidiPlayEvent&); + virtual const char* getPatchName (int, int, int, bool) 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/muse2/synti/fluid/fluidgui.cpp b/muse2/synti/fluid/fluidgui.cpp new file mode 100644 index 00000000..e5677bcb --- /dev/null +++ b/muse2/synti/fluid/fluidgui.cpp @@ -0,0 +1,82 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: fluidgui.cpp,v 1.6.2.1 2009/08/12 20:47:01 spamatica Exp $ +// +// This is a simple GUI implemented with QT for +// fluid software synthesizer. +// +// (C) Copyright 2001-2004 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "fluidgui.h" +#include "muse/midi.h" + +//--------------------------------------------------------- +// FLUIDGui +//--------------------------------------------------------- + +FLUIDGui::FLUIDGui() + : FLUIDGuiBase(0, "fluidgui", Qt::WType_TopLevel), MessGui() + { + connect(fdialogButton, SIGNAL(clicked()), SLOT(soundFontFileDialog())); + connect(loadButton, SIGNAL(clicked()), SLOT(loadFont())); + + // work around for probable QT/WM interaction bug. + // for certain window managers, e.g xfce, this window is + // is displayed although not specifically set to show(); + // bug: 2811156 Softsynth GUI unclosable with XFCE4 (and a few others) + show(); + hide(); + } + +//--------------------------------------------------------- +// 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().latin1(); + 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 = Q3FileDialog::getOpenFileName(QString::null, QString("*.[Ss][Ff]2"), this); + if (!s.isEmpty()) { + pathEntry->setText(s); + } + } + diff --git a/muse2/synti/fluid/fluidgui.h b/muse2/synti/fluid/fluidgui.h new file mode 100644 index 00000000..9aeaa73b --- /dev/null +++ b/muse2/synti/fluid/fluidgui.h @@ -0,0 +1,31 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: fluidgui.h,v 1.2 2004/02/12 17:32:29 wschweer Exp $ +// +// (C) Copyright 2001 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __GUI_H__ +#define __GUI_H + +#include "fluidguibase.h" +#include "libsynti/gui.h" + +//--------------------------------------------------------- +// FLUIDGui +//--------------------------------------------------------- + +class FLUIDGui : public FLUIDGuiBase, public MessGui { + + Q_OBJECT + + private slots: + void soundFontFileDialog(); + void loadFont(); + + public: + FLUIDGui(); + }; + +#endif diff --git a/muse2/synti/fluid/fluidguibase.ui b/muse2/synti/fluid/fluidguibase.ui new file mode 100644 index 00000000..80f79e7b --- /dev/null +++ b/muse2/synti/fluid/fluidguibase.ui @@ -0,0 +1,166 @@ + +FLUIDGuiBase + + QDialog + + name + FLUIDGuiBase + + + geometry + + 0 + 0 + 248 + 94 + + + + caption + Form1 + + + + margin + 11 + + + spacing + 6 + + + QLayoutWidget + + name + Layout1 + + + + margin + 0 + + + spacing + 6 + + + QLabel + + name + TextLabel1 + + + text + Soundfont + + + + QLineEdit + + name + pathEntry + + + + QToolButton + + name + fdialogButton + + + text + + + + pixmap + image0 + + + + + + + name + Spacer2 + + + orientation + Vertical + + + sizeType + Expanding + + + sizeHint + + 20 + 20 + + + + + QLayoutWidget + + name + Layout2 + + + + margin + 0 + + + spacing + 6 + + + QPushButton + + name + loadButton + + + sizePolicy + + 5 + 0 + + + + text + Load + + + + + name + Spacer1 + + + orientation + Horizontal + + + sizeType + Expanding + + + sizeHint + + 20 + 20 + + + + + + + + + + image0 + 789c5d8fb10ac2301040f77c45e86d45ac955607f1131447411c2e97141daaa07510f1dfcd256992fadae1de23e9d1aa94c7c34e9695780e385c49d2051fb2d4afbe7f9fcedb8f28ea95b4ef5ad6c54c147349727fbf199ec1ceb070b01a566cb0c68655b3524b4b6a5989551b7e5891b5eb105b64555eb541725b1c60f1536c36b80aa9417636dd1de37fcbcea5cfc71d804a2178625316f4406a90e31b02254203d216f7db06c20ed77c1adb34a516526cd314ce6570fb6ec40ff56a68fe + + + diff --git a/muse2/synti/fluidsynth/Makefile.am b/muse2/synti/fluidsynth/Makefile.am new file mode 100644 index 00000000..817c3cb5 --- /dev/null +++ b/muse2/synti/fluidsynth/Makefile.am @@ -0,0 +1,19 @@ +include $(top_srcdir)/common.am +include $(top_srcdir)/synti/synti-install.am + +AM_CXXFLAGS += -fPIC -O3 -ffast-math -fno-exceptions + +synthi_LTLIBRARIES = fluidsynth.la + +fluidsynth_la_SOURCES = fluidsynti.h fluidsynti.cpp \ + fluidsynthgui.cpp fluidsynthgui.h \ + fluidsynthguibase.ui + +nodist_fluidsynth_la_SOURCES = moc_fluidsynthgui.cpp + +fluidsynth_la_LIBADD = ../libsynti/libsynti.la -lfluidsynth +fluidsynth_la_LDFLAGS = -module -avoid-version + +CLEANFILES = $(wildcard *.ui~) +EXTRA_DIST = TODO README.txt + diff --git a/muse2/synti/fluidsynth/Makefile.in b/muse2/synti/fluidsynth/Makefile.in new file mode 100644 index 00000000..e567a9b8 --- /dev/null +++ b/muse2/synti/fluidsynth/Makefile.in @@ -0,0 +1,655 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/common.am $(top_srcdir)/synti/synti-install.am \ + TODO +subdir = synti/fluidsynth +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal-include.m4 \ + $(top_srcdir)/m4/alsa.m4 $(top_srcdir)/m4/docbook.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(synthidir)" +LTLIBRARIES = $(synthi_LTLIBRARIES) +fluidsynth_la_DEPENDENCIES = ../libsynti/libsynti.la +am_fluidsynth_la_OBJECTS = fluidsynti.lo fluidsynthgui.lo \ + fluidsynthguibase.lo +nodist_fluidsynth_la_OBJECTS = moc_fluidsynthgui.lo +fluidsynth_la_OBJECTS = $(am_fluidsynth_la_OBJECTS) \ + $(nodist_fluidsynth_la_OBJECTS) +fluidsynth_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ + $(CXXFLAGS) $(fluidsynth_la_LDFLAGS) $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +CXXLD = $(CXX) +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(fluidsynth_la_SOURCES) $(nodist_fluidsynth_la_SOURCES) +DIST_SOURCES = $(fluidsynth_la_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DOCBOOKSTYLE = @DOCBOOKSTYLE@ +DOCBOOKTARGETS = @DOCBOOKTARGETS@ +DOT = @DOT@ +DOTPATH = @DOTPATH@ +DOXYGEN = @DOXYGEN@ +DOXYGEN_TREEVIEW = @DOXYGEN_TREEVIEW@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FLUIDSYNTHDIRS = @FLUIDSYNTHDIRS@ +FST_CFLAGS = @FST_CFLAGS@ +FST_LIBS = @FST_LIBS@ +Fluidsynth_CFLAGS = @Fluidsynth_CFLAGS@ +Fluidsynth_LIBS = @Fluidsynth_LIBS@ +GIVERTCAP = @GIVERTCAP@ +GREP = @GREP@ +HAVEDOT = @HAVEDOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_LIBS = @JACK_LIBS@ +JADE = @JADE@ +LASH_CFLAGS = @LASH_CFLAGS@ +LASH_LIBS = @LASH_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LO_CFLAGS = @LO_CFLAGS@ +LO_LIBS = @LO_LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MUSECXXFLAGS = @MUSECXXFLAGS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NSGMLS = @NSGMLS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PCH = @PCH@ +PERL = @PERL@ +PKG_CONFIG = @PKG_CONFIG@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIB = @PYTHON_LIB@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QTDIR_BIN = @QTDIR_BIN@ +QTDIR_INC = @QTDIR_INC@ +QT_LIBS = @QT_LIBS@ +RANLIB = @RANLIB@ +SAMPLERATE_CFLAGS = @SAMPLERATE_CFLAGS@ +SAMPLERATE_LIBS = @SAMPLERATE_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ +SNDFILE_LIBS = @SNDFILE_LIBS@ +STRIP = @STRIP@ +SUIDBUILD = @SUIDBUILD@ +SUIDINSTALL = @SUIDINSTALL@ +USE_SSE = @USE_SSE@ +UUID_CFLAGS = @UUID_CFLAGS@ +UUID_LIBS = @UUID_LIBS@ +VERSION = @VERSION@ +XMKMF = @XMKMF@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +have_docbook = @have_docbook@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +synth_fluid = @synth_fluid@ +synth_fluidsynth = @synth_fluidsynth@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AM_CXXFLAGS = $(MUSECXXFLAGS) -I.. -I$(top_srcdir)/synti \ + -I$(top_srcdir)/muse/widgets -DQT_SHARED -DQT_THREAD_SUPPORT \ + -DQT_PLUGIN $(QTDIR_INC) -DQT3_SUPPORT -fPIC -O3 -ffast-math \ + -fno-exceptions +AM_CPPFLAGS = +MOC = $(QTDIR_BIN)/moc +#UIC = $(QTDIR_BIN)/uic3 +UIC = /usr/bin/uic3 +UIFILES = $(wildcard *.ui) +MOCFILES = $(shell for h in $(filter %.h,$(SOURCES)); do \ + if grep -q Q_OBJECT $$h; then \ + echo $$h | sed "s/\(.*\)\.h/moc_\1.cpp/"; \ + fi; \ + done) + +BUILT_SOURCES = $(MOCFILES) $(UIFILES:%.ui=%.h) +MOSTLYCLEANFILES = $(MOCFILES) $(UIFILES:%.ui=%.h) +SUFFIXES = .ui .h.gch +synthidir = $(pkglibdir)/synthi +synthi_LTLIBRARIES = fluidsynth.la +fluidsynth_la_SOURCES = fluidsynti.h fluidsynti.cpp \ + fluidsynthgui.cpp fluidsynthgui.h \ + fluidsynthguibase.ui + +nodist_fluidsynth_la_SOURCES = moc_fluidsynthgui.cpp +fluidsynth_la_LIBADD = ../libsynti/libsynti.la -lfluidsynth +fluidsynth_la_LDFLAGS = -module -avoid-version +CLEANFILES = $(wildcard *.ui~) +EXTRA_DIST = TODO README.txt +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: .ui .h.gch .cpp .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/common.am $(top_srcdir)/synti/synti-install.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu synti/fluidsynth/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu synti/fluidsynth/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-synthiLTLIBRARIES: $(synthi_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(synthidir)" || $(MKDIR_P) "$(DESTDIR)$(synthidir)" + @list='$(synthi_LTLIBRARIES)'; test -n "$(synthidir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(synthidir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(synthidir)"; \ + } + +uninstall-synthiLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(synthi_LTLIBRARIES)'; test -n "$(synthidir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(synthidir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(synthidir)/$$f"; \ + done + +clean-synthiLTLIBRARIES: + -test -z "$(synthi_LTLIBRARIES)" || rm -f $(synthi_LTLIBRARIES) + @list='$(synthi_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +fluidsynth.la: $(fluidsynth_la_OBJECTS) $(fluidsynth_la_DEPENDENCIES) + $(fluidsynth_la_LINK) -rpath $(synthidir) $(fluidsynth_la_OBJECTS) $(fluidsynth_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fluidsynthgui.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fluidsynti.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/moc_fluidsynthgui.Plo@am__quote@ + +.cpp.o: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< + +.cpp.obj: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.cpp.lo: +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-am +all-am: Makefile $(LTLIBRARIES) +installdirs: + for dir in "$(DESTDIR)$(synthidir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +clean: clean-am + +clean-am: clean-generic clean-libtool clean-synthiLTLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-synthiLTLIBRARIES + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-synthiLTLIBRARIES + +.MAKE: all check install install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-synthiLTLIBRARIES ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip install-synthiLTLIBRARIES installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-synthiLTLIBRARIES + + +de: + @for base in $(MOCFILES); do echo -e "\t$${base}.cpp $${base}.h \\"; done + +nde: + @for base in $(MOCFILES); do echo -e "\tmoc_$${base}.cpp \\"; done + +.ui.o: %.h + $(UIC) -L $(top_srcdir)/muse/widgets -o $*.cpp -impl $*.h $*.ui + $(MOC) $*.h >> $*.cpp + $(CXXCOMPILE) -c $*.cpp -o $*.o + $(RM) $*.cpp moc_$*.cpp moc_$*.o + +.ui.lo: %.h + $(UIC) -L $(top_srcdir)/muse/widgets -o $*.cpp -impl $*.h $*.ui + $(MOC) $*.h >> $*.cpp + $(LTCXXCOMPILE) -c $*.cpp -o $*.lo + $(RM) $*.cpp moc_$*.cpp moc_$*.lo moc_$*.o + +moc_%.cpp: %.h + $(MOC) $< -o $@ + +%.h: %.ui + $(UIC) -o $@ $< +# $(UIC) -L $(top_srcdir)/muse/widgets -o $@ $< + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/muse2/synti/fluidsynth/README.txt b/muse2/synti/fluidsynth/README.txt new file mode 100644 index 00000000..7764edb6 --- /dev/null +++ b/muse2/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/muse2/synti/fluidsynth/TODO b/muse2/synti/fluidsynth/TODO new file mode 100644 index 00000000..e941e1e9 --- /dev/null +++ b/muse2/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/muse2/synti/fluidsynth/fluidsynthgui.cpp b/muse2/synti/fluidsynth/fluidsynthgui.cpp new file mode 100644 index 00000000..bdb0719b --- /dev/null +++ b/muse2/synti/fluidsynth/fluidsynthgui.cpp @@ -0,0 +1,819 @@ +/* + * MusE FLUID Synth softsynth plugin + * + * Copyright (C) 2004 Mathias Lundgren (lunar_shuttle@users.sourcforge.net) + * + * $Id: fluidsynthgui.cpp,v 1.13.2.2 2009/08/12 20:47:01 spamatica Exp $ + * + */ + +#include "fluidsynthgui.h" +#include "fluidsynti.h" +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "muse/midi.h" +#include "xpm/buttondown.xpm" + + + /* +#include "muse/debug.h" +#include +#include +#include +#include +#define MUSE_FLUID_DEBUG false +*/ + +FluidSynthGui::FluidSynthGui() + : MessGui() + { + //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())); + + lastdir = ""; + + 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(); + + //Init reverb sliders: + /*ReverbRoomSize->setValue((int)(16383*FS_PREDEF_REVERB_ROOMSIZE)); + ReverbDamping->setValue((int)(16383*FS_PREDEF_REVERB_DAMPING)); + ReverbWidth->setValue((int)(16383*FS_PREDEF_REVERB_WIDTH));*/ + + connect(Gain, SIGNAL(valueChanged(int)), SLOT(changeGain(int))); + connect(dumpInfoButton , SIGNAL(clicked()), SLOT(dumpInfo())); + connect(channelListView, SIGNAL(pressed(Q3ListViewItem*,const QPoint&,int)), + this, SLOT(channelItemClicked(Q3ListViewItem*,const QPoint&,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(sfListView, SIGNAL(pressed(Q3ListViewItem*,const QPoint&,int)), + this, SLOT(sfItemClicked(Q3ListViewItem*,const QPoint&,int))); + 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))); +/* + _notifier = new QSocketNotifier(0, QSocketNotifier::Read); + connect(_notifier, SIGNAL(activated(int)), SLOT(readData(int))); + + //Setup the ListView + sfListView->setColumnWidthMode(MUSE_FLUID_ID_COL,QListView::Maximum); + sfListView->setColumnWidthMode(MUSE_FLUID_SFNAME_COL,QListView::Maximum); + + sfListView->setColumnAlignment(MUSE_FLUID_ID_COL,AlignHCenter); + sfListView->setSorting(MUSE_FLUID_ID_COL,true); + channelListView->setColumnAlignment(MUSE_FLUID_CHANNEL_COL,AlignHCenter); + + _currentlySelectedFont = -1; //No selected font to start with + // The GUI-process is killed every time the window is shut, + // need to get all parameters from the synth + + requestAllParameters(); + + */ + + //Clear channels + for (int i=0; itext(); + if (fns.isEmpty()) + return; + const char * fn = fns.latin1(); + + int datalen = strlen(fn) + 3; + unsigned char data [datalen]; + data[0] = MUSE_FLUID_SOUNDFONT_PUSH; + data[1] = MUSE_FLUID_UNSPECIFIED_ID; //This makes the client choose next available external id + memcpy(data + 2, fn, strlen(fn) + 1 ); //Store filename + sendSysex(data, datalen); + data[0] = MUSE_FLUID_GUI_REQ_SOUNDFONTS; //For simplicity's sake, just get all the soundfont data again. + sendSysex(data, 1); + printf("Gui sent Sysex.\n"); + + return; + } + */ + +void FluidSynthGui::loadClicked() + { + QString filename = Q3FileDialog::getOpenFileName(lastdir, QString("*.[Ss][Ff]2"), + this, + "Load Soundfont dialog", + "Choose soundfont"); + if (filename != QString::null) { + int lastslash = filename.findRev('/'); + lastdir = filename.left(lastslash); + + sendLastdir(lastdir); + sendLoadFont(filename); + } + } + +//--------------------------------------------------------- +// sendLastdir +// Send the last dir-value to the client +//--------------------------------------------------------- + +void FluidSynthGui::sendLastdir(QString dir) + { + int l = strlen(dir)+2; + byte data[l]; + data[0] = FS_LASTDIR_CHANGE; + memcpy(data+1, dir.latin1(), strlen(dir)+1); + sendSysex(data,l); + } + +//--------------------------------------------------------- +// sendLoadFont +// Tell the client to load a font with first available id +//--------------------------------------------------------- + +void FluidSynthGui::sendLoadFont(QString filename) + { + int l = filename.length()+3; + byte data[l]; + data[0] = FS_PUSH_FONT; + data[1] = FS_UNSPECIFIED_ID; + memcpy(data+2, filename.latin1(), filename.length()+1); + sendSysex(data,l); + } + +//--------------------------------------------------------- +// processEvent +//--------------------------------------------------------- + +void FluidSynthGui::processEvent(const MidiPlayEvent& ev) + { + //Sysexes sent from the client + if (ev.type() == ME_SYSEX) { + byte* data = ev.data(); + switch (*data) { + case FS_LASTDIR_CHANGE: + lastdir = QString((const char*)data+1); + break; + case FS_ERROR: { + char* msg = (char*) (data+1); + + printf("Muse: fluidsynth error: %s\n", msg); + + break; + } + case FS_SEND_SOUNDFONTDATA: { + int chunk_len; + int filename_len; + + int count = (int)*(data+1); //Number of elements + byte* cp = data+2; //Point to beginning of first chunk + sfListView->clear(); //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--; + } + updateSoundfontListView(); + updateChannelListView(); + 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; + } + updateChannelListView(); + + 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->setCurrentItem(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::updateChannelListView() + { + if (FS_DEBUG) + printf("FluidSynthGui::updateChannelListView\n"); + channelListView->clear(); + for (int i=0; isetText(FS_CHANNEL_COL, chanstr); + qlvNewItem->setPixmap(FS_SF_ID_COL, buttondown_xpm); + qlvNewItem->setText(FS_SF_ID_COL, sfidstr); + qlvNewItem->setPixmap(FS_DRUM_CHANNEL_COL, buttondown_xpm); + qlvNewItem->setText(FS_DRUM_CHANNEL_COL, drumchanstr); + channelListView->insertItem(qlvNewItem); + } + } + +//--------------------------------------------------------- +// updateSoundfontListView +//--------------------------------------------------------- +void FluidSynthGui::updateSoundfontListView() + { + sfListView->clear(); //Clear the listview + for (std::list::iterator it = stack.begin(); it != stack.end(); it++) { + Q3ListViewItem* qlvNewItem = new Q3ListViewItem(sfListView); + QString qsid = QString("%1").arg(it->id); + qlvNewItem->setText(FS_ID_COL, qsid); + qlvNewItem->setText(FS_SFNAME_COL, QString(it->name)); + sfListView->insertItem(qlvNewItem); + } + sfListView->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(Q3ListViewItem* item, const QPoint&, int col) + { + if (col == FS_SF_ID_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); + + int i = 0; + for (std::list::reverse_iterator it = stack.rbegin(); it != stack.rend(); it++) { + i++; + /*byte* d = (byte*) it->name.latin1(); + for (int i=0; i<96; i++) { + if (i%16 == 0) + printf("%x:",(i+d)); + + printf("%x ",*(d-48+i)); + + if (i%16 == 15) + printf("\n"); + } + for (int i=0; i<96; i++) { + if (i%16 == 0) + printf("%x:",(i+d-48)); + + printf("%c ",*(d-48+i)); + + if (i%16 == 15) + printf("\n"); + } + printf("\n\n");*/ + popup->insertItem(it->name,i); + } + int lastindex = i+1; + popup->insertItem("unspecified",lastindex); + int index = popup->exec(ppt, 0); + if (index !=-1) { + 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(popup->text(index)); + fontname = getSoundFontName(sfid); + } + byte channel = atoi(item->text(FS_CHANNEL_COL).latin1()) - 1; + sendChannelChange(sfid, channel); + item->setText(FS_SF_ID_COL, fontname); + } + delete popup; + } + // Drumchannel column: + 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).latin1()) - 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" ); + } + } + } + +//--------------------------------------------------------- +// 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(Q3ListViewItem* item, const QPoint&, int /*col*/) + { + if (item != 0) { + currentlySelectedFont = atoi(item->text(FS_ID_COL)); + 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); + } + + + +void FluidSynthGui::changeReverbRoomSize (int value) { + sendParameterChange(MUSE_FLUID_PARAMETER_REVERB, + "roomsize", value); +} + +void FluidSynthGui::changeReverbDamping (int value) { + sendParameterChange(MUSE_FLUID_PARAMETER_REVERB, + "damping", value); +} + +void FluidSynthGui::changeReverbWidth (int value) { + sendParameterChange(MUSE_FLUID_PARAMETER_REVERB, + "width", value); +} + + +void FluidSynthGui::changeChorusNumber (int value) { + sendParameterChange(MUSE_FLUID_PARAMETER_CHORUS, + "number", value); +} + +void FluidSynthGui::changeChorusType (int value) { + sendParameterChange(MUSE_FLUID_PARAMETER_CHORUS, + "type", value); +} + +void FluidSynthGui::changeChorusSpeed (int value) { + sendParameterChange(MUSE_FLUID_PARAMETER_CHORUS, + "speed", value); //TODO: Right now illegal values may be sent. + //Make sure they stay within fluidsynths legal boundaries (0.29-5Hz) dunno what that is in doubles + //This might be the case for the other chorus parameters as well +} + +void FluidSynthGui::changeChorusDepth (int value) { + sendParameterChange(MUSE_FLUID_PARAMETER_CHORUS, + "depth", value); +} + +void FluidSynthGui::changeChorusLevel (int value) { + sendParameterChange(MUSE_FLUID_PARAMETER_CHORUS, + "level", value); +} + + +void FluidSynthGui::sysexReceived(unsigned char const * data, int len) + { + char * cp; + double * dp; + //std::cerr << "FluidSynthGui, sysexReceived: " << (int) *data << std::endl; + switch (*data) { + case MUSE_FLUID_CLIENT_SEND_PARAMETER: + cp = (char *) (data + 2); + dp = (double *) (data + strlen (cp) + 3); + setParameter ((int) *(data+1), cp, *dp); + break; + + case MUSE_FLUID_GAIN_GET: + dp = (double *) (data + 1); + Gain->setValue ((int) (*dp * 12.8)); + break; + + case MUSE_FLUID_CLIENT_LASTDIR_CHANGE: { + if (*(char*)(data+1) != MUSE_FLUID_UNSPECIFIED_LASTDIR) + _lastDir = QString((char*)(data+1)); + else + _lastDir=""; + } + + default: + break; + } + } + + + + + + + +void FluidSynthGui::requestAllParameters () { + unsigned char data[1]; + + //data[0] = MUSE_FLUID_ADVGUI_GET; + //sendSysex (data, 1); + dbgMsg("Requesting all parameters!\n"); + sendParameterRequest (MUSE_FLUID_PARAMETER_REVERB, "on"); + sendParameterRequest (MUSE_FLUID_PARAMETER_REVERB, "roomsize"); + sendParameterRequest (MUSE_FLUID_PARAMETER_REVERB, "damping"); + sendParameterRequest (MUSE_FLUID_PARAMETER_REVERB, "width"); + sendParameterRequest (MUSE_FLUID_PARAMETER_REVERB, "level"); + sendParameterRequest (MUSE_FLUID_PARAMETER_CHORUS, "on"); + sendParameterRequest (MUSE_FLUID_PARAMETER_CHORUS, "number"); + sendParameterRequest (MUSE_FLUID_PARAMETER_CHORUS, "type"); + sendParameterRequest (MUSE_FLUID_PARAMETER_CHORUS, "speed"); + sendParameterRequest (MUSE_FLUID_PARAMETER_CHORUS, "depth"); + sendParameterRequest (MUSE_FLUID_PARAMETER_CHORUS, "level"); + data[0] = MUSE_FLUID_GAIN_GET; + sendSysex (data, 1); + data[0] = MUSE_FLUID_GUI_REQ_SOUNDFONTS; + sendSysex (data, 1); +} + +bool FluidSynthGui::sendParameterRequest (int parameterSet, const char * parameter) { + size_t parameterMem = strlen (parameter) + 1; + int datalen = 2 + parameterMem; + unsigned char * data = new unsigned char [datalen]; + *data = MUSE_FLUID_GUI_REQ_FXPARAMETER_GET; + *(data + 1) = (char) parameterSet; + memcpy (data + 2, parameter, parameterMem); + sendSysex (data, datalen); + delete data; + return true; +} + +void FluidSynthGui::setParameter (int parameterSet, const char * parameter, double value) { + int ival = (int) (value * 128); + std::string ps (parameter); + if (parameterSet == MUSE_FLUID_PARAMETER_REVERB) { + if (ps == "roomsize") { + ReverbRoomSize->setValue (ival); + } else if (ps == "damping") { + ReverbDamping->setValue (ival); + } else if (ps == "width") { + ReverbWidth->setValue (ival); + } else if (ps == "level") { + ReverbLevel->setValue (ival); + } else if (ps == "on") { + Reverb->setChecked (ival); + } + } else { + if (ps == "number") { + ChorusNumber->setValue (ival); + } else if (ps == "type") { + ChorusType->setCurrentItem (ival); + } else if (ps == "speed") { + ChorusSpeed->setValue (ival); + } else if (ps == "depth") { + ChorusDepth->setValue (ival); + } else if (ps == "level") { + ChorusLevel->setValue (ival); + } else if (ps == "on") { + Chorus->setChecked (ival); + } + } +} + +//Sends parameter to reverb or chorus +bool FluidSynthGui::sendParameterChange (int parameterSet, const char * parameter, int value) { + size_t parameterMem = strlen (parameter) + 1; + int datalen = 2 + parameterMem + sizeof (double); + unsigned char * data = new unsigned char [datalen]; + *data = (unsigned char) MUSE_FLUID_GUI_REQ_FXPARAMETER_SET; + *(data + 1) = (unsigned char) parameterSet; + memcpy (data + 2, parameter, parameterMem); + double * dp = (double *) (data + 2 + parameterMem); + *dp = ((double) value) / ((double) 128.0); + sendSysex (data, datalen); + delete data; + return true; +} + +void FluidSynthGui::dbgMsg(const char* msg) + { + if (MUSE_FLUID_DEBUG) + std::cerr << msg << std::endl; + } +//--------------------------------------------------------- +// main +//--------------------------------------------------------- + +/*QString museProject; +QString museGlobalShare; +QString museUser;*/ + + +int main(int argc, char* argv[]) +{ +/* + museUser = getenv("MUSEHOME"); + if (museUser == 0) + museUser = getenv("HOME"); + museGlobalShare = getenv("MUSE"); + if (museGlobalShare == 0) { + museGlobalShare = "/usr/muse"; + if (access(museGlobalShare.latin1(), R_OK) != 0) { + museGlobalShare = "/usr/local/muse"; + if (access(museGlobalShare.latin1(), R_OK) != 0) + museGlobalShare = museUser; + } + }*/ + char * instanceName = argv[1]; + QApplication app (argc, argv, true); + QWidget* w = new FluidSynthGui (); + if (argc > 1) + w->setCaption(QString(instanceName)); + w->show(); + app.connect(&app, SIGNAL(lastWindowClosed()), &app, SLOT(quit())); + qApp->exec(); +} + +#endif diff --git a/muse2/synti/fluidsynth/fluidsynthgui.h b/muse2/synti/fluidsynth/fluidsynthgui.h new file mode 100644 index 00000000..d464dee2 --- /dev/null +++ b/muse2/synti/fluidsynth/fluidsynthgui.h @@ -0,0 +1,225 @@ +/* + * MusE FLUID Synth softsynth plugin + * + * Copyright (C) 2004 Mathias Lundgren (lunar_shuttle@users.sourcforge.net) + * + * $Id: fluidsynthgui.h,v 1.10.2.3 2009/02/02 21:38:02 terminator356 Exp $ + * + */ + +#ifndef __MUSE_FLUIDSYNTHGUI_H__ +#define __MUSE_FLUIDSYNTHGUI_H__ + +#include "fluidsynthguibase.h" +#include "libsynti/gui.h" +#include + +struct FluidChannel; +#define FS_DEBUG 0 //Turn on/off debug +/* +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include "muse/debug.h" +*/ + +#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.063 +#define FS_PREDEF_REVERB_LEVEL 0.125 +#define FS_PREDEF_REVERB_ROOMSIZE 0.125 +#define FS_PREDEF_REVERB_DAMPING 0.3 +#define FS_PREDEF_REVERB_WIDTH 0.125 +#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; + + +/* + + +#define MUSE_FLUID_UNSPECIFIED_CHANNEL 127 + + +#define MUSE_FLUID_UNSPECIFIED_LASTDIR 127 +*/ + +//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 + }; + +enum + { + FS_DUMP_INFO = 240, + FS_ERROR, + FS_INIT_DATA + }; +/* +enum { + MUSE_FLUID_REVERB = 100, + MUSE_FLUID_REVERB_ROOMSIZE, + MUSE_FLUID_REVERB_DAMPING, + MUSE_FLUID_REVERB_WIDTH, + MUSE_FLUID_REVERB_LEVEL, + MUSE_FLUID_CHORUS, + MUSE_FLUID_CHORUS_NUMBER, + MUSE_FLUID_CHORUS_TYPE, + MUSE_FLUID_CHORUS_SPEED, + MUSE_FLUID_CHORUS_DEPTH, + MUSE_FLUID_CHORUS_LEVEL, + MUSE_FLUID_GAIN, + MUSE_FLUID_SOUNDFONT, + MUSE_FLUID_STRING, + MUSE_FLUID_STRING_END + }; + +enum { + MUSE_FLUID_CLIENT_SEND_PARAMETER = 33, + MUSE_FLUID_CLIENT_SEND_SOUNDFONTS, + MUSE_FLUID_PARAMETER_GET, + MUSE_FLUID_PARAMETER_REVERB, + MUSE_FLUID_PARAMETER_CHORUS, + + MUSE_FLUID_GAIN_GET, + MUSE_FLUID_SOUNDFONT_PUSH, + MUSE_FLUID_SOUNDFONT_POP, + + MUSE_FLUID_CLIENT_SEND_ERROR = 44, + MUSE_FLUID_SOUNDFONT_LOAD, + , + MUSE_FLUID_CLIENT_RESTORE_CHANNELDATA, + MUSE_FLUID_CLIENT_INIT_PARAMS, + MUSE_FLUID_CLIENT_LASTDIR_CHANGE, + + MUSE_FLUID_GUI_REQ_SOUNDFONTS = 60, + MUSE_FLUID_GUI_REQ_FXPARAMETER_SET, + MUSE_FLUID_GUI_REQ_FXPARAMETER_GET, + MUSE_FLUID_GUI_SEND_ERROR, + MUSE_FLUID_GUI_LASTDIR_CHANGE + }; +*/ + +struct FluidGuiSoundFont + { + QString filename; + QString name; + byte id; + }; + +//--------------------------------------------------------- +// FluidSynthGui +//--------------------------------------------------------- + +class FluidSynthGui : public FLUIDSynthGuiBase, public MessGui + { + Q_OBJECT + private: + virtual void processEvent(const MidiPlayEvent& ev); + void sendLastdir(QString); + void sendLoadFont(QString); + void sendChannelChange(byte font_id, byte channel); + void sendDrumChannelChange(byte onoff, byte channel); + void updateSoundfontListView(); + void updateChannelListView(); + + 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 + +/* + unsigned _smallH; + unsigned _bigH; + QSocketNotifier * _notifier; + bool sendParameterChange (int, const char *, int); + void setParameter (int, const char *, double); + void requestAllParameters (); + void dbgMsg(const char*); + bool sendParameterRequest(int, const char *); + //void dealWithSysex (unsigned char const * data, int datalen); + + + + + + +*/ + private slots: + void loadClicked(); + void readMessage(int); + void changeGain(int); + void dumpInfo(); + void channelItemClicked(Q3ListViewItem* item, const QPoint&, int col); + 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(Q3ListViewItem* item, const QPoint&, int col); + /* + void readData(int); + + + + + */ + + public: +// virtual void sysexReceived (const unsigned char *, int); +// virtual void controllerReceived(int, int, int); + + FluidSynthGui(); + ~FluidSynthGui(); +}; + + +#endif /* __MUSE_FLUIDSYNTHGUI_H__ */ diff --git a/muse2/synti/fluidsynth/fluidsynthguibase.ui b/muse2/synti/fluidsynth/fluidsynthguibase.ui new file mode 100644 index 00000000..336ee9fa --- /dev/null +++ b/muse2/synti/fluidsynth/fluidsynthguibase.ui @@ -0,0 +1,632 @@ + +FLUIDSynthGuiBase + + + FLUIDSynthGuiBase + + + + 0 + 0 + 617 + 514 + + + + FLUID Synth + + + image0 + + + + unnamed + + + 1 + + + Minimum + + + + layout3 + + + + unnamed + + + + DiskButtons + + + StyledPanel + + + Raised + + + + unnamed + + + + Push + + + Load + + + + + Pop + + + false + + + Delete + + + + + dumpInfoButton + + + Dump Info + + + + + + + + ID + + + false + + + false + + + + + Fontname + + + false + + + false + + + + sfListView + + + + 3 + 7 + 0 + 0 + + + + + + + Chnl + + + false + + + false + + + + + Soundfont + + + false + + + false + + + + + Drum Chnl + + + false + + + false + + + + channelListView + + + + 3 + 7 + 0 + 0 + + + + + + ReverbFrame + + + false + + + StyledPanel + + + Raised + + + + unnamed + + + + ReverbLevel + + + 16383 + + + 16 + + + 1638 + + + Horizontal + + + Both + + + 1638 + + + + + ReverbWidth + + + 16383 + + + 16 + + + 1638 + + + Horizontal + + + Both + + + 1638 + + + + + ReverbDamping + + + 16383 + + + 16 + + + 1638 + + + Horizontal + + + Both + + + 1638 + + + + + ReverbRoomSize + + + 16383 + + + 16 + + + 1638 + + + Horizontal + + + Both + + + 1638 + + + + + ReverbLevelLabel + + + Level + + + AlignCenter + + + + + ReverbWidthLabel + + + Width + + + AlignCenter + + + + + ReverbDampingLabel + + + Damping + + + AlignCenter + + + + + ReverbRoomSizeLabel + + + Room Size + + + AlignCenter + + + + + Reverb + + + Reverb + + + + + + + fontSetupLabel + + + + 1 + + + + CHANNEL SETUP + + + false + + + WordBreak|AlignCenter + + + + + ChorusFrame + + + false + + + StyledPanel + + + Raised + + + + unnamed + + + + + Sine + + + image1 + + + + + Triangle + + + image2 + + + + ChorusType + + + + + ChorusTypeLabel + + + Type + + + AlignCenter + + + + + ChorusNumber + + + 127 + + + + + ChorusNumberLabel + + + Number + + + AlignCenter + + + + + ChorusSpeed + + + 16383 + + + 16 + + + 1638 + + + Horizontal + + + Both + + + 1638 + + + + + ChorusSpeedLabel + + + Speed + + + AlignCenter + + + + + ChorusDepth + + + 16383 + + + 16 + + + 1638 + + + Horizontal + + + Both + + + 1638 + + + + + ChorusDepthLabel + + + Depth + + + AlignCenter + + + + + ChorusLevel + + + 16383 + + + 16 + + + 1638 + + + Horizontal + + + Both + + + 1638 + + + + + ChorusLevelLabel + + + Level + + + AlignCenter + + + + + Chorus + + + Chorus + + + + + + + GainBox + + + + + + + unnamed + + + + GainLabel + + + Gain + + + AlignCenter + + + + + Gain + + + 0 + + + 127 + + + 5 + + + 13 + + + true + + + Horizontal + + + Both + + + 7 + + + + + + + loadedFontsLabel + + + + 1 + + + + LOADED SOUNDFONTS + + + WordBreak|AlignCenter + + + + + pixmapLabel + + + + 4 + 4 + 0 + 0 + + + + image3 + + + true + + + + + + + + + 89504e470d0a1a0a0000000d4948445200000020000000200806000000737a7af400000472494441545885c557cb6e1c45143db7a77b7a5ec699b1c71e3fb0239010f80ff807d6d9b065c12f20250a2862c10690901c93c40111136c1ca448880dec67c18e05444158b63103f22376e2b167babaaafb66d1efd780c2c225cda3abcebdf7dc5375abaaa9dbede2229bf67f8c7f3416f8a7f2225f0881efed0e379a33a8373bf8c1997b61127afce1eb3d83c7da1d58fd535c693fa35186f5e60c94f4f8d7c63bc0596f64a08dfd0657c79be81fede3ed793bf49d5060627109f5d61c5af3afe1dba37661561b87930c3621052005c05cc683934e217e7dbfc5ad975f47bd3587c9c5a5c4584860e3609635ad062508aea3a331b150984d656c0aca262801289f84596f17e2c7da97c1ae01250844556c1e2f8464430266bd0d290065fb59b9657cf3cf426e56a55223c42adb23415a2d37f8fdde5ca856e0bb5c9dc82a0054c28c824fb996cd6a6def323bb294c13ab686fbbd573384cdfa5406cbae992470e7b769766c2d03845bc6178fe7134ecbd5c90c2ef81895163eeb9642fceaa319663673c812ee3ef62a470700add480140c04a60410111880d9e8e0f6af1a2b5ba0d2b884ea4b065c051001cc9e01b38707e9189f59c2e7bf3c612a95506f4e43d914f9856f0780b43a4202400d52a4c563dfc040a5311bf64a2b1a4be38908546aa076c973ce0e41298053780201a84604d82d7b9287aed807e505f3dc913f42218672b1488c47fdae6b44041ca5c3f165050249bddf22074414e2029b64e0081f27cbe1782946c0a64cd024816c0bc7f3120fc213122403169e9dd7496fbdb7c56393af8099235fcce122cccf8863dfc162a418249a42cec107937cf66407baeb185e6dc663b8482a3eaa152850d81f4b8a5d03ba23c9dfcf933629d5121aa495cf1da7c8679e1f6640490dbab4140c334636cd209f7c3edb603898f73cd631901c4a50b7dbc5079b6f7242af3438a70a463db3bf8646e19919ef5ff999740050820b252e4a20dd97988ea0a246f8092a4c07006939007975995f7ee9d0c5cf9efdbfe3999d88803db4a1e95580a333205a95f1dd4c8bf5e568c3c1024c2d8e9c8a701d152760c128a7cff3a862953880eb9cc3a8cc82b46a6c9b8ee302c702caee41d3aad0cd6950c1b55379874a406000a0950fb44fb072759b00e09d6b43361b6f80fce94a3466b82c21fa8fb0fae19000e0dd1b25d6cda95cbf5e4cff3e70ebfa1e498b33e7b6b41cac5cfd3d4cf7ce8d3ed9e7cff2ef0336c11e9c86c10160e5da16c9a1cafa15c0adeb7f52a8000048cb0669d14d05001cf934c37cd8efc1ac37915713f6e03083178363948ca40acc32fc1f4e903d3849317560f577330ed73e3923391c66b31a0adcfbf86966fbfaf2a32d525652057b1025161258fb749ba425fd4ba60b717e88f56591bb1f8ac1912f7b74291583e33ca88f3f8012ae7f295510677b59020020ce77600f4f21067f637d79bb7033deb8d92329546c4e1d6cdcdc2dc4af2fef9238ffcbf37db68bcddb51628937a3efee1e1170549849bcd98343687a0700c1758ab30fda83d51e01d9b7a7177e377c786f87e4f014d23ac5c3affef8af8777a6d145bf9e3f076c35aaedab709f8e0000000049454e44ae426082 + + + 789cd3d7528808f055d0d2e72a2e492cc94c5648ce482c52d04a29cdcdad8c8eb5ade652323452002220a1a4c3a5a4a790aca06c000620ae32886b649096666801964502e4f1959595c13c6565301fc481626c7c985a65b2ed43e2d75a73010022253132 + + + 789cd3d7528808f055d0d2e72a2e492cc94c5648ce482c52d04a29cdcdad8c8eb5ade652323452002220a1a4c3a5a4a790aca06c000620ae32886b649096666801964502e4f29551f9ca500165085f590f86c17ca81c88063b07aa57991cfb6badb90035703153 + + + 89504e470d0a1a0a0000000d494844520000007c0000002d08060000006ccc0fec00001c1b49444154789ced9c779ca55779dfbfe7bcedf6693bb333b35d5af506261059103b9490c40ec514f1010ca60a442008448bb1892146b11cba648a4237b215d1314522d8a0c4a08201f5bada5d6d9d3e73fb7dcb394ffe786f9d99d5162448849fcfe7eedeb9e7bee7fc9ee777cef33ca75df5939ffc847f96df1c717fdd007e9572cd4c227e2e87761c4061ad256935b9705ca95f37b65f95fc4610fe95e5408a1bc6993ab584e3fb28a54001229824e1fbb5aad4171728cfcdf08a9dc5c734f98f69c2af3ea864646a33635b87f1820cda7152b2fb443942decd11e446c80e4f70edec21b9703c7ccc927ec2847ff6be86f8d9028ee7910e17b0d660a290b05ee3b567977ead46bb76be201bb66e22532ca21d1750580322abbfa950ca41bb59b2251fc7cbf1b5f919795e69f1d74efa1776c5e20401da75514a03828913a2469d579d9639217cea7893b62fedf3253fba81205fc4f503b476daee11440463624c1811b51ab4aa2bd4571679cd192706ee44e5cb8ba3529a98c6cf76e2f57a440f4a67e08bb5c451486d719685bdbb78edd9f95f19f6ab6eaf497e740399e21041ae90dad7f5d05aa50005ac589230246ad668ac2cf392e9fa71e13b66c23f738f95e1e9ad644b235df7c87ab94edbb2622d2689899a0d1a2b8b94670f70d1398f3ef1d72e8c4b697c0a2f936d8f8a75c8eea090bef77d4522421285d496e759dcf720179d1d3caab83ffeb3b20c4f6da130328e972be07a3e5aebd4bedd9e2803efc55a9238a4592d539d3bc4cb7744c784f19808fffcae408627b7121487701cb71b07bb76ecbce96bb2f3d68ac5c43161bd4265fe307fb4e3f87ae4b1ca95b754647cdba914366cc40bb2eb635c4d74ffff7da0bba4c7318d950596f63fc845e7ba8f0aeecfddef4b69629a4c6918d70b505a0f405a83b10db0f3913586a859a33a7788976e59392ac6a312feb9fb72323cbd153f57eabac71311b196a8d5a0b134c7e2c10779d3bf2c3c6206bce2e69a8c6d3985c2d8465c3fb326313b5111041b2734ca8b2c1fdccdebce7b64a76f5fdc332cc5f169fc6c01e568d46a7773ac38c512b71a54e60ef1b26d0f9f7b3c2ce157dde1cbc8f44904853eb28f120b8fdc523bc6c711cdf222cb0776f386273abfb401afb8a925a39b77921f19c7f18394ec13c5b85afaa66eadca12cb87f7f2fac7d95f1ef38d0d19d97432f99109dc2083d269e83921dcdddc43885b75ca33fb78e5a9e523623c22e11fbb31920d5bcf203b34f6cb93dd074e009bc484d515ca33fb78fd6f1d5bec594f3efe532d4353dbc81447713cef9125bb236d743649086b652a73fbb9e8bce60963bef2662bc35327911d1ac5f1fc47067307a3b544f50acb071fe4f58f5fdfae4724fc33f74e4871c3e674d4c0609c5b2f06f657bf5e92b42a4e4a3bf6d4976628cf3ec4a54f3fbe058f4fdd5692e2d8347eae8876ddf5db5dafedf56279bfaca74b3fe6b0417d7186f2ec5e2e7ddaf185a54fdd5a94c28669825c09e5ba6b1df8c3e1399acddb1f4912d3589967e1a17b78eb53736b9a5897f02b6f0e64786a277eb688d27dcf1ccda0ab9a17e8a6c8695c550320452c268a08ebcb345616682ccff1b667ae05d92f57dc14487e6423d9c2084e90e966e25d7c5d3c82f4a5e7ddf6d7e05e950dada75fbf5622d838a455afd05899a3be7488b73ff3e13beb1537fa921f9920531cc5f5b33d17be2eee556df7656f47d5a78d2f099b54e6f7f1fac72d1f1be19fbe7b9be48626504ebb178a60ad41ac49696ccf10faa73b2a45d155c6c42149d4c49a04a5348e17e006391cd7efe9d8ae43acc1c41149ab4ed8ac10376b189320d62236c1442d945678d922417e984c6138ed8c8ed7af6b57ac8949c20649d442c4a2b5831be4dac67652e3598b3531d618446c5a8fd668eda0b48352ce1a627a8e42b056b07144dcaa12d62b44ad1ad624088242a19db4cd203744ba4015a0da6bf8eb6146a46b5b543fa1824d12e2a88169eba3b48337a0cf2a8cd6d2aa2db3b8ff6edef6f4c1d9c59a95b68ffe9fbc0c4d0e61add3f6112979adda12617591240e01dbabbd5b9dc2717dfcdc30ae9fa1b13243757e2f51b38ae3fae447a7199a3c954c712c5dace907a81c9493c5cb06b8c110b6942e89890851b342656e0fb5857d98782f6e90a5b0611b43933bc9e486413b03c6b3d610d6565899d9457de900260ef132054ae33b284e6cc70b72247148585f26ac2d11b76a98380495e277fd2c5eb644901fc6cf96d0ae3f10013abaa2143819bcac8f130c93ed5bc64bcda2504ea7f368ac0071f7e9dea016c1241149d448712068c7c70b72385e808810d65628cfeca2b6b81f9384784181d2c693294decc0cb14d64e41d168374fa6b011581ce0770de15e760c510126692713626955ab540fdfc3c9a30fe0fb4d10db06dc171c95423901771ddc82ce4d636a7b79fb85b36c9b8638862bafad31b73286eb0fa15d67c0883dcfa5db2f0f940086248c715afbb9eca2794687157152e77d5735689637e0baa5d4a87df84d92d058596254ddcfe56fa9e33ac262b9c27b3f1be3664688fd88dae27eea73f772c69645769e6a2966856628946b707016f63d54a09a3b8591e933090a831d74d0b0fd98dd81793c805845db791c317d30494ca33c4b65e6011a9539b096a030cad0e429e44736815234569628997bf8c0db5b08c2c25299f77d41087213289debe2ebe25220d6c70b4678ffdfed97773fab17260708bffc3a4f86274b8871b036adc15a216a3491e60caf7eae61f3547e751fe94a1c0baf7bef616a951c342b0c178489319f30b2903488a216712b41bbba0b4f298d529de54f9bbad7f6aa523abf8c499a7546861413631e512424610dd38a4822413b923e6753d76ce290b05e27676a8c8fbab8ae423044f50aad4a99249ea510dfca656f8dd93419acab47a365f8932bf7b2bc3285760a28edb6d30f95bad04ede20360d3b6d8f97cea3536a45a413e77a1ddaf64247c715c7ad16d5b9835cb0f37e5ef4ef52977ae3ad2b7ce9872e8e5bc2f102c27a8320aa313e9601c0241151bd42d868e078611753baccddc1a0d04e9e4c6e2350edea3640b8178c82ca6012d5cdccad85244e932b39da823420cac31a8518191809d6589230a25959c6442d4c12a2b4c6cb14f1b3c328a5895a65e266056b13b4e3e30679e230a6d110bef5bd59724184e053a94e901dd298d812870de26699b0b182895b884d685666c967ebc050bb238189135ab50a61793f7f7649c4a6c934fe4791e5a1032d40b171dca358704120095bb44c0591c35893eaee781982dc305ea684528a246c10369649a27a5aee0638ae8f3131364e47a3d62e4a3b589360e21628851714f073c3388e4fb3b640757e3fcef60a1363230064bd2a95d9dd68278f171468d596c8a910c8b4f5115ab532d5f903b4aa65001c3f4b901bc1cb0ee1b8417bc004b8c1c8fa84ff976b9a32baa984b50e12d3f53962041b0bd6d0f51922f0b1abf6f0bd1b62fcec50374eb941119bd986972d92583de0fbacb1848d3a716b17a3fe1eb4ada21d97e595cdc44367a1b44bb8722fc3de5eb021a2f32c2f6d4779251a0dcbf77fb880c465b49fa7ca387e6c69d56a34cb87682cdecfcea979a6a7131696626eb96799c6581da144c7899ac410d66b8ce69638657b4af6e252c4abdeb28ba5e6047e7608c4303ddee2b71fef530b4789a23a3a3cc0903f8b3531b114595a3a8da18da7a11d8fdae24338cd3b29788b80d04c4acc568b0c656b943265c41a2a7587b945d8b609ce3d196a0dcb7d0fe528eb1d640a638495036cf077335288bab62a64123666f71044153005660e4169acd9edc0885099db83af9b9c775e1e470bbb0ffacc1dde4c69e3196487a671bc0ca051bac0fbbe6ae53dcf4fa75b5dc2dd600454169bf422a202ac01938035423f83f586b052cb104811ed7828ede0eb118aa531d019c40e66b8d60871ab894a56b8f4ad754e3b39edadeffed001ee5b9844bb3e63de7e2ebf542815331c9c0979e787f6530bb752ca593ef6eeb3d838ee1146c26bdf1dd1acd7891a0ddce66dbcff0d4dce3ad5031c20e0e06197abafadf5b99d540fe2844ccef4ab4d2b04ad3378c1286e90672571b9fee71e7e7604ed0839672f1f7807e4b201cbe516af78d75dd4bd619c20c7cae1fb79f7abe679f2bf4843c3e59f9ce7bb372cf1dc671b5ef3e22200d7fffd1cd5bae5f9cf9aecee7d349a09977dfc0e6eb967845266850ffcd721c6467a79c2054f1ae18227a5a37d662ee1b9af3e4852ead95ec4f27bbfa3b8e4e22172b9f4396384af5cb787bffd8105952153dc988622021c6f04483d415773c71902f131f1e08441ba84f74d4b143ced29c36c9a8ed04e0ba52294d21c5e34fce3ddc33899098ce91bded271ab16a2b03b0d0230514812c568a3304e88d0898f4212862436c1edc4f54ee789635ae10a617d8ecbdedce0ac53d3a95e9208fb0eb6182eb9bced4da70faca98b2820c3c1b90c6164097cc5d8a8cf373e773a37fdbcce5d0f1ce4f6fb14bb0f16f00b9bf07301daf1393c5fe4c73f2df36f7e27cb5051f3dbe794f9c77bf6e1664ae4d421ce3ddd6b1313f3d3db144a0588edb9d067fceb71b4562cafc4948a694e91cb6afee3cb3c6ebe643f91d5345b2e71acf03cdd252f8a2c82a2150ae02136eed639b931cb1f5f7a06b57a42a361c8e51c1c47f1dc67f8fcf4f643ec59de82e38de2780e625d1ca7b09670a57318a3519226c89d2cd2da1ee1fd2efafc278e72fe1307fa06b7dc1a72c3cf2b881a41561d36100b36018c0c92d7f95cc076e6a1eda6ac4d43899581a6d378dc5862e7f42ce79d9103d284f15def9fe5a6dbb264fd0a7ffe8e3ce73fa1d07bc83a386e8928dacc67aeb99f37bc3c0b4036ab79ea938b3cf5c9e9d7169612aefefa2ebe7f4b037fe854943bce37fed7019efe14d01a9efd0c8feffe68176e50e499e737c9e75237fb939fc5ac3426707d0768749b8d13e1f22b66f9ce0f2ddba742fee693db715dc5d484c7f438ec9919e105172df2a2df8f78cbeb370370fd3f2cf29e0f54c90d6fc1cb0c931b2ea2ddfddd3a1d47f1f5ef2ef3c1ab1a783ae2caffb691b34ecb11048ad3b7b7b8f7276592a118c820a2416579e7a7eb72f96bf269baf98eff118948808d15261292184cdfcb26d0372801a8d513169622169762169662169712aaf5b472b14eda41fa446cda69ecaa7a8c114c92be06ca24cd1f4c2288194c166d62089b55ce3cc9e279e928bef3de2677ee1e6778fa7c54fe5cbe7e5d3cf88c4de359a674325fbf610797fc59931b6e6cd06c0d02da30eaf29f5e95e339bf3b4b636506ed16d97d688c5fdcd102e0f49d19b66d384879e66e9ef6db1aad53cf72dd8f345e760ae5e491be89e203bb237e70f328c3534f64b632cdfe4361b76c722243909f26377c32aed7eb9cdacd50183b9dd12dff8a914d17901d3a09ed64076cf6e9ff09d9d1276083d3b8e39e9eae13638a386c9144a6cd9d0209503a1d182ea42326890d6956dfb7d9aa52a24ccc008122f0914f1ce49b3fc8121426d318ae5cbccc30d9e16da01cac1ddc14b0168c016554dbbd760a246ddbc4e026dd291ab43b4802abd2018c154c1451c8f51a285784448a04fe184e028b2b1e564077366c8c601270fd8020bf95bb0fe4b8f5ca4554b2c4f6e9324f382be605cf2a32b9314843d6050edff8fb25c46ec1ea4d7ce3fa799e705e3aca9ff36f7d0eeddfcbb9676e07e0b6bb43f6cf8de196c649a218faf4db7fc8e0f81bf1b35324cd455aad956e99a315a8f66e99ea9f3069b453c4f136e0b839945a01e919617129a1190f932d4e610db4c2a5de935a30b12189413b2957496c3071027829e11f7c434efde9d54d711cbb7639b1edd2578f70c72f51d87026850d67b4416994e3a1b547d45a4456ef225ab046a3ad3330923d27a25599076078a24536d3ebc95daf30982f22a210f1a8f69da528e61524355ad525e2d632439331dd6d00019b58c27a99b07a98a8b988e0e37aa3e08fb17ba6cc9df73ec8fe0387b8ec4fb7e3388a5c06f281a1253e5e768a9befd8cb43fbeb6cdbe2f37bcf9c60e6708520486df5fd1b0cb19ac2774a889d1b0865710ce023e221d6c15819d0c31a8d883340a8584bd8acd2aa2de2fa3171d8c2eade737122201e223e222ea6df9bdade4031719ae045cd26fffd75a92becb612356a246142120dbaf38e5b905523532917ed0ee3fa13b8c1465c7f02ed8e02396ca2d3b9f8c00857202ec6665858ea153cfe4ca13a771ba67a3b17fe07bfeba23bcf58a3d6761e71d04e91bbefd7a9f2c0d96766d83935c3d2fe9b88566ee759cf1c5c44b489216a9429b90ff2f9bf98e3594fb99f02bfa0327b27f5e5bd28b3cc19a76670da5bf48da6a2dac800591c778c84cd7ce37ba9ebcc655d2e7eed6928958eb61fffac80174c2264db78fbb182350a93a4bab02aaf11a311f1a8d47a846f99d6d07c8085bd3f66e9c03fd15839848907439458854d54db65f725a7a403d4c469684e2243d4ece5145dab84f565dccc349e17f4ce4eb52b3609a8554617ab11a3b18933e08645da40cc2008442312801ee5f6bb67f9dd0bd2b2173d6f034f3ebf45a9e876173d7adb91e94953cb809d403c1c6f84db1f88b9ebde151e77b64fe06b3e7ad924f73ed060c368894dd39941c2adc2c60613b7d8b625e0d28b87b8f462a8d50cd59a6164781b994ccfe8fffb264b2b1ec757795019dccc26befbc30779d58b0dc5a2d3ed183ffc7144b5b999627114315e5bef7edd535bd884b5798d805817ed061c9c0968b5844c4671f619397ef4cd2d542a09dff9c1437cec330e66381c78b6d789069363042401132b944e77f6a27a2f8c7435fcc8254ac5cd1a496407477892ba6218ec084a7988789844adf508c601fc6ef50a052a40a902ae3fcdd7ae1fe3b6bb7a3d76f3748638163ef2577b58a9743e4f9f11eba35406d5838ad2591c6f0341fe34defbc12c0fec4e00c864348f3ba74026e3f0d18fef218e6db72ea5b22855a4158d72d7bd71d7488582c3d4a4df253b4e84af7e3be26fff6e123fbb0d911c625cb433422d9ce05bd7d50708fbd6f50ac79b060a58e322e2035e0f2b0e48801817a532a46b059dc2005416c71de7ce5dd37ce5db09619402f35cc5d8a8473e9b761445ff3270ca8758172400e5f595b9083e2681244a8f9585b5e55e93fddba3977c785832c51d2827689394c680245c26aadec5d6f107f0741d94cbecf2040d1e4f90df82d67eff8e01495426acdcc3960df7e3bb55048f03f39b31de39385e91a87188b072374f3a77816d9b2d8bcbf0e35b842882534e02d711129b63dfdc0ec49b42e2c36cdfb81b57b740f9ec3eb40d277736dacd10d60e20e1fd3cf19c45b64c19e6162d37fed412468ad34fd1a42be905761f3a0937b71513576955f790f36639fde490cd5342b1a0301666e714b7df9763b9be996c69277e6e12edf898a441d498a5be7c079b477ec157bfb815805bef68f1a6f78c110c3f85203f8dd88456ed214ade1d8c0fcd212294eba3ccd7cec4cb4e10d5f7b175fc5e02b78a522e07e6a7899d73703363c4ad459ae55d649c036c1c6b90cf5a509a956a89430b1b08bc063bb72e203622b17976cf9c4a503889245c6638b88bb1a10510a1dc1865be7636d9e2c928c725acede3c36f5e50eb127ef19fc7921d3a0bd71f193858606d8889ca24d10ad64628348e97c70dc670dc1c7d8ea2cd794c129749c265ac0d51cac1f14a78c1084afb581b92842b9868196b429476d14e065088c488085afb38fe108e93c5240d4c5cc6da18a55c5cbf9462d41ed684986825c5669aa09cb42ea5c126edf56c1fd71fc6f18a88586c52c7c4354c52c79a30f5814aa39d00c72be27843385e01ad5c4c52a7597d90e6cadde4bc3dbcf1d59a0b9fb701803f797f837ff8a7df223f7a2eae57020413d789a3656c5c0304ede670fd51b41360927a1b67ab7d46a0d82ecb209260e31a495cc59a162249ea1f9c0cdacd2136c62475444c5b9f111caf80b51149b48c8d1bedf6b2699d5e1e9bd46994efe5137f2ceb130ef0c6cb27c4cf6d46eba02f14497b17ab2f9a7677b9d63becd1f7fdceaed1c0f73be59dc3072a75d98a813604d5bd71d10b542add0357fa08753150d6794629dddbe5eac327fd3aa1fb0e3e681043d49a87d6cd7cfcb2839c795a2f11bcfdae888bde368c5fba003fbf09adbc74d74c2c22d29bd976f46eeffeb1ba3ddd674369efbc49ffb424c59e6e5cd94ea5e91982ce3e7867e5aa631fe5802444cdc35cf1f6430f7f0022accfa174e750a0ee5582c340fc795839daf757970b562c6223ac6922128124a9224aa170514e80d6d934dcd80ea1ebb775f43d3dc56aaf34f0ace9fd91ae0ea6c9519208e58ae1c65b123ef4c93c78a70379e26635f54c366ad7e0b637943cb49345e9a0ddd9d7b1c94022d7d95b3f5ef106fe4a0f55b408ebf36bbeb9ee11a78bde3b2e7e760b4afb9ce859e9a349efa896c1da26362993448b24e1029ffb8bec9a465ff1aeaab8de28ae3f81e38fa075b6bb58f1e8204c519aa44a58df4358db8549aa28ede378237899711c278fb54d4cbcb23ee677d6c40dc670bd311c6f18ede441ad7378f111450c6223e2d6213ef59ec3c776a6ede56f0f25533813c71b4b5d1cb41338569dcf59759243f515f59f77eb3bffd67b2f88c4987899383ccce72e3bf6a3bfaff8cf8e78c1261c6f14add3d8df7f45e0486dd387b3fbbd3e053a7b085ddd14883558dbc026f534ae8a416c8b245ee2f3971f3b77af7ca71637b309d71f43e980347cb471b07edbeb613c9acd05838d57086bf7f1f9bf5c7b71e288c794ffe81d39f13327a1dd7c1a7fe98563691ba7237dd1a3d731fa1be9fed347b66d9284b384adbd5cfde1e3bf73f69237af48903b19cf9f423939c01934525fdbab5d7c3f4eb5aa40d61854ba8614d3c4c4f3448d3d7ce9230f7fbaf648f2ca778d8aeb4fa576edc3dcc13dc06d3fc147b379bb026b9bc4cd87f8fce5eb5f3b7ad89b272f7fdbb878c1344a67dbb174b0a17e43f6ad62ae6da44f2130585327090ff2c50f1efd2ed4d1e4656fcd8a176c45bb25c01d1835ab71f6635c356806bebba64c6c8a393ac8173fb0f6e8eff163ce89176c413925941ac4bc1eae8e1cc9e690c66d9198249ae10b7f79f088188f7ab7ec656f9914c79b6a271e6beb7938d207ff9674ea91ac904407f89b8fb51eb150f69237f9e206db71dca18118b99ee1068cc49189efe2168bb53592e800577fe4c857788e575efc46c40bb6e3b8a3a0fcee805a0ff7ea46d7e06c936d9305a2c6fd5cf38923df763d2ae12f78cd8af899d3d0de647baeacd718add3f86a0376cbc52212629345a2700f5ffed4237f13f3c28b1df1fc1d6877241d35abf0f5635cfd7eb5f446b6c19a1a49bc9f6bfeaafa88637ee16b1be26576e0781328956d4f1bd5bad83bb8faa53b906c844de6895bbbb9f62aef61711ef3fdf00b5f372cae3785d29d4cb3afde553da003046c3a5d31554c32c7b59faa3c9a092a2f788d1237d8817646dba4abf5738a6eccebbdef026be3173188ad9244fbf8f2558fce15e78ebcf0a28c38de245a0f7513ba7ee28f6cdf348134c91c49b89baf7ef6e83f5e705cbf00f1bc57228e3b85764648d7c6dd145cb74bb6171e302011d6d611b38c4966f9fa17d64e5b1e0df983578ab8de0eb43386521eeb05f5fe9c42b587b3f47d98925d2689f7f1b5cf3e72a1e768f2fc57e745eb11945340a9205d8757edb979ef272a10312021d656b0c90c5ffd6c7ccc188ffb273f009ef38789286718ad5360698fb48844883411db426c9d6f7ee997bf0e7c22f2ec9786e2fa3bd0ce787bc342b32640ae7e0f6db223ac59c224fbf8e65ffff257834f449ef387a1285d48377c74b6cfc6a436b635ac2df3cdbf3efefbea2744f8ff2ff2ec978e887626513a9f7a23516b032190269426edac661e93ece1dbd79cd8b4ebff75794c130ef0fb2f44943385d223e9366b270c011da2a185d832d6ccf19d6b1fbb3fd905bf018477e4dfff8111a537802af4ae3661db216889ebbe661ed34477e43786f07f9654fe2fc2ee9042ad017b950000000049454e44ae426082 + + + + diff --git a/muse2/synti/fluidsynth/fluidsynti.cpp b/muse2/synti/fluidsynth/fluidsynti.cpp new file mode 100644 index 00000000..d3cd5699 --- /dev/null +++ b/muse2/synti/fluidsynth/fluidsynti.cpp @@ -0,0 +1,1314 @@ +/* + * MusE FLUID Synth softsynth plugin + * + * Copyright (C) 2004 Mathias Lundgren (lunar_shuttle@users.sourcforge.net) + * + * $Id: fluidsynti.cpp,v 1.19.2.18 2009/12/06 10:05:00 terminator356 Exp $ + * + */ + +#include "fluidsynti.h" +#include "muse/midi.h" + +#include +#include +#include + + +FluidCtrl FluidSynth::fluidCtrl[] = { + //{ "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 } + + // These controllers' initial values are set by the FS_PREDEF_ values, so just set them to zero here. + { "Gain", FS_GAIN ,0, 127, 0}, + { "Master reverb on/off", FS_REVERB_ON , 0, 1, 0}, + { "Master reverb level", FS_REVERB_LEVEL, 0, 16384, 0}, + { "Master reverb size", FS_REVERB_ROOMSIZE, 0, 16384, 0}, // Interval: [0,1] + { "Master reverb damping", FS_REVERB_DAMPING, 0, 16384, 0}, // Interval: [0,1] + { "Master reverb width", FS_REVERB_WIDTH, 0, 16384, 0}, // Interval: [0,100] + { "Master chorus on/off", FS_CHORUS_ON, 0, 1, 0}, + { "Master chorus num delay lines", FS_CHORUS_NUM, 0, 10, 0}, //Default: 3 + { "Master chorus type", FS_CHORUS_TYPE, 0, 1, 0}, + { "Master chorus speed", FS_CHORUS_SPEED, 0, 16384, 0}, // (0.291,5) Hz + { "Master chorus depth", FS_CHORUS_DEPTH, 0, 16384, 0}, // [0,40] + { "Master chorus level", FS_CHORUS_LEVEL, 0, 16384, 0}, // [0,1] + + { "Program", CTRL_PROGRAM, 0, 0xffffff, 0}, + { "Modulation", CTRL_MODULATION, 0, 127, 0}, + { "Portamento time", CTRL_PORTAMENTO_TIME, 0, 127, 0}, + { "Volume", CTRL_VOLUME, 0, 127, 100}, + { "Pan", CTRL_PANPOT, -64, 63, 0}, + { "Expression", CTRL_EXPRESSION, 0, 127, 127}, + { "Sustain", CTRL_SUSTAIN, 0, 127, 0}, + { "Portamento", CTRL_PORTAMENTO, 0, 127, 0}, + { "Soft Pedal", CTRL_SOFT_PEDAL, 0, 127, 0}, + { "Variation", CTRL_VARIATION_SEND, 0, 127, 0}, + { "Channel reverb send", CTRL_REVERB_SEND, 0, 127, 40}, + { "Channel chorus send", CTRL_CHORUS_SEND, 0, 127, 0}, + { "Pitch", CTRL_PITCH, -8192, 8191, 0}, + // Added by T356 + { "Pitch bend sensitivity", FS_PITCHWHEELSENS, 0, 24, 2} + }; + +static int NUM_CONTROLLER = sizeof(FluidSynth::fluidCtrl)/sizeof(*(FluidSynth::fluidCtrl)); + +QString *projPathPtr; +// +// Fluidsynth +// +FluidSynth::FluidSynth(int sr, pthread_mutex_t *_Globalsfloader_mutex) : Mess(2) + { + setSampleRate(sr); + fluid_settings_t* s = new_fluid_settings(); + fluid_settings_setnum(s, (char*) "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->setCaption(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; + } + +//--------------------------------------------------------- +// processMessages +// Called from host always, even if output path is unconnected. +//--------------------------------------------------------- + +void FluidSynth::processMessages() +{ + //Process messages from the gui + while (gui->fifoSize()) + { + MidiPlayEvent 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()); + } + } + +} + +//--------------------------------------------------------- +// process +// Called from host, ONLY if output path is connected. +//--------------------------------------------------------- + +void FluidSynth::process(float** ports, int offset, int len) + { + /* + //Process messages from the gui + while (gui->fifoSize()) { + MidiPlayEvent 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) const + { + + //printf("projPathPtr "); + //std::cout << *projPathPtr << std::endl; + + // 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++) { + + // if the soundfont is located under the projectPath we extract this from the filename + int fileLen = strlen(it->filename.c_str()); + if (QString(it->filename.c_str()).startsWith(*projPathPtr)) { + printf("project path found in filename, len %d shortened with %d\n",fileLen, projPathPtr->length()+1); + fileLen = fileLen - projPathPtr->length()-1; + } + len+=fileLen + 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++) { + + // if the soundfont is located under the projectPath we extract this from the filename + int offset=0; + if (QString(it->filename.c_str()).startsWith(*projPathPtr)) { + offset= projPathPtr->length()+1; + } + + memcpy(chptr, it->filename.c_str()+offset, strlen(it->filename.c_str())-offset+1); + //printf("path name stored=%s\n", it->filename.c_str()+offset); + chptr = chptr + 1 + strlen(it->filename.c_str())-offset; + } + + //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; itoAscii().data() << std::endl; + + bool load_drumchannels = true; // Introduced in initdata ver 0.3 + bool handle_bankvalue = true; // Introduced in initdata ver 0.4 + + if (FS_DEBUG) { + printf("--- PARSING INIT DATA ---\n"); + for (int i=0; iascii() + std::string("/")+ fonts[i].filename; + } + std::cout << "SOUNDFONT FILENAME + PATH " << fonts[i].filename << std::endl; + } + + if (*chptr != FS_INIT_CHANNEL_SECTION) { + sendError("Init-data corrupt... Projectfile error. Initdata ignored.\n"); + return; + } + + chptr++; + 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, ::fontLoadThread, (void*) helper)) + perror("creating thread failed:"); + + pthread_attr_destroy(attributes); + return true; + } + +//--------------------------------------------------------- +// fontLoadThread +// helper thread to load soundfont in the +// background +//--------------------------------------------------------- + +static void* 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 + QString temp = QString(filename); + QString name = temp.right(temp.length() - temp.findRev('/',-1) - 1); + name = name.left(name.length()-4); //Strip off ".sf2" + font.name = name.latin1(); + 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(); + } + + pthread_exit(0); + } + +//--------------------------------------------------------- +// playNote +// called from host +//--------------------------------------------------------- + +bool FluidSynth::playNote(int channel, int pitch, int velo) + { + if (channels[channel].font_intid == FS_UNSPECIFIED_FONT || + channels[channel].font_intid == FS_UNSPECIFIED_ID) + 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) { + MidiPlayEvent ev(0, 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) { + MidiPlayEvent ev(0, 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) { + MidiPlayEvent ev(0, 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) { + MidiPlayEvent ev(0, 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) { + MidiPlayEvent ev(0, 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) { + MidiPlayEvent ev(0, 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) { + MidiPlayEvent ev(0, 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) { + MidiPlayEvent ev(0, 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) { + MidiPlayEvent ev(0, 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) { + MidiPlayEvent ev(0, 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) { + MidiPlayEvent ev(0, 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) { + MidiPlayEvent ev(0, 0, 0, ME_CONTROLLER, FS_CHORUS_LEVEL, val); + gui->writeEvent(ev); + } + break; + } + // + // Controllers that depend on channels + // + case CTRL_PITCH: + // MusE's range is from -8192 to +8191, fluidsynth seems to be [0, 16384] + val +=8192; + err = fluid_synth_pitch_bend (fluidsynth, channel, val); + break; + + // Added by T356 + case FS_PITCHWHEELSENS: + err = fluid_synth_pitch_wheel_sens(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, int* initval) const + { + if (id >= NUM_CONTROLLER) + return 0; + *controller = fluidCtrl[id].num; + *name = fluidCtrl[id].name; + *min = fluidCtrl[id].min; + *max = fluidCtrl[id].max; + switch(id) + { + case 0: + *initval = (int)(fluidCtrl[0].max*FS_PREDEF_VOLUME); + break; + case 1: + *initval = 0; + break; + case 2: + *initval = (int)(fluidCtrl[2].max*FS_PREDEF_REVERB_LEVEL); + break; + case 3: + *initval = (int)(fluidCtrl[3].max*FS_PREDEF_REVERB_ROOMSIZE); + break; + case 4: + *initval = (int)(fluidCtrl[4].max*FS_PREDEF_REVERB_DAMPING); + break; + case 5: + *initval = (int)(fluidCtrl[5].max*FS_PREDEF_REVERB_WIDTH); + break; + case 6: + *initval = 0; + break; + case 7: + *initval = (int)(fluidCtrl[7].max*FS_PREDEF_CHORUS_NUM); + break; + case 8: + *initval = (int)(fluidCtrl[8].max*FS_PREDEF_CHORUS_TYPE); + break; + case 9: + *initval = (int)(fluidCtrl[9].max*FS_PREDEF_CHORUS_SPEED); + break; + case 10: + *initval = (int)(fluidCtrl[10].max*FS_PREDEF_CHORUS_DEPTH); + break; + case 11: + *initval = (int)(fluidCtrl[11].max*FS_PREDEF_CHORUS_LEVEL); + break; + default: + *initval = fluidCtrl[id].initval; + break; + } + + if (FS_DEBUG) + //printf("FluidSynth::getControllerInfo() id: %d name: %s controller: %d min: %d max: %d\n",id,*name,*controller,*min,*max); + printf("FluidSynth::getControllerInfo() id: %d name: %s controller: %d min: %d max: %d initval: %d\n",id,*name,*controller,*min,*max,*initval); + 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); + + MidiPlayEvent ev(0,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; i"; + else if (channels[i].preset == FS_UNSPECIFIED_PRESET) + //return "no preset"; + return ""; + else { + fluid_preset_t *preset = fluid_synth_get_channel_preset(fluidsynth, i); + //if (!preset) return "no preset"; + if (!preset) return ""; + return preset->get_name(preset); + } + } +//--------------------------------------------------------- +// getPatchInfo +//--------------------------------------------------------- +const MidiPatch* FluidSynth::getPatchInfo(int i, const MidiPatch* patch) const + { + //if (channels[i].font_intid == FS_UNSPECIFIED_FONT) + if (channels[i].font_intid == FS_UNSPECIFIED_FONT || + channels[i].font_intid == FS_UNSPECIFIED_ID) + 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) + if (font_id == FS_UNSPECIFIED_FONT || font_id == FS_UNSPECIFIED_ID) + 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 || font_id == FS_UNSPECIFIED_ID) + return 0; + if (patch == 0) + return getFirstPatch(channel); + midiPatch.typ = 0; + midiPatch.lbank = 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) { + if (int_id == FS_UNSPECIFIED_FONT || int_id == FS_UNSPECIFIED_ID) { + 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 pthread_mutex_t globalMutex; +static bool mutexEnabled = false; + + +static Mess* instantiate(int sr, QWidget*, QString* projectPathPtr, const char* name) + { +printf("fluidsynth sampleRate %d\n", sr); + projPathPtr=projectPathPtr; + + if (!mutexEnabled) { + pthread_mutex_init(&globalMutex,NULL); + mutexEnabled = true; + } + + FluidSynth* synth = new FluidSynth(sr, &globalMutex); + if (synth->init(name)) { + delete synth; + synth = 0; + } + return synth; + } + +extern "C" + { + static MESS descriptor = { + "FluidSynth", + "FluidSynth soundfont loader by Mathias Lundgren", //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/muse2/synti/fluidsynth/fluidsynti.h b/muse2/synti/fluidsynth/fluidsynti.h new file mode 100644 index 00000000..10b96b9d --- /dev/null +++ b/muse2/synti/fluidsynth/fluidsynti.h @@ -0,0 +1,150 @@ +/* + * MusE FLUID Synth softsynth plugin + * + * Copyright (C) 2004 Mathias Lundgren (lunar_shuttle@users.sourcforge.net) + * + * $Id: fluidsynti.h,v 1.15.2.5 2009/11/19 04:20:33 terminator356 Exp $ + * + */ + +#ifndef __MUSE_FLUIDSYNTI_H__ +#define __MUSE_FLUIDSYNTI_H__ + +#include +#include +#include +#include +#include "fluidsynthgui.h" +#include "libsynti/mess.h" +#include "muse/debug.h" +#include "libsynti/mpevent.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; + int initval; + }; + +// 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; +// Added by T356 +static const int FS_PITCHWHEELSENS = 0 + CTRL_RPN_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 + //FluidSoundFont* font; + }; + +/*#include +#include +#include +*/ + +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, pthread_mutex_t *_Globalsfloader_mutex); + ~FluidSynth(); + bool init(const char*); + virtual void processMessages(); + 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**) const; + virtual const char* getPatchName(int, int, int, bool) const; + virtual const MidiPatch* getPatchInfo(int i, const MidiPatch* patch) const; + virtual int getControllerInfo(int, const char**, int*, int*, int*, int*) const; + virtual bool processEvent(const MidiPlayEvent&); + + virtual bool hasGui() const { return true; } + virtual bool guiVisible() const; + virtual void showGui(bool val); + + void sendError(const char*); + void sendSoundFontData(); + void sendChannelData(); + 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[]; + + }; + +struct FS_Helper //Only used to pass parameters when calling the loading thread + { + FluidSynth* fptr; + std::string filename; + int id; + }; + +static void* fontLoadThread(void* t); +#endif /* __MUSE_FLUIDSYNTI_H__ */ diff --git a/muse2/synti/libsynti/Makefile.am b/muse2/synti/libsynti/Makefile.am new file mode 100644 index 00000000..04ec45d6 --- /dev/null +++ b/muse2/synti/libsynti/Makefile.am @@ -0,0 +1,15 @@ +include $(top_srcdir)/common.am + +AM_CXXFLAGS += -I$(top_srcdir) + +EXTRA_LTLIBRARIES = + +noinst_LTLIBRARIES = libsynti.la +libsynti_la_LDFLAGS = + +libsynti_la_SOURCES = \ + mess.cpp mess.h \ + gui.cpp gui.h \ + mono.cpp mono.h \ + poly.cpp poly.h \ + mpevent.cpp mpevent.h evdata.h diff --git a/muse2/synti/libsynti/Makefile.in b/muse2/synti/libsynti/Makefile.in new file mode 100644 index 00000000..e2e2197a --- /dev/null +++ b/muse2/synti/libsynti/Makefile.in @@ -0,0 +1,602 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/common.am +subdir = synti/libsynti +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal-include.m4 \ + $(top_srcdir)/m4/alsa.m4 $(top_srcdir)/m4/docbook.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +LTLIBRARIES = $(noinst_LTLIBRARIES) +libsynti_la_LIBADD = +am_libsynti_la_OBJECTS = mess.lo gui.lo mono.lo poly.lo mpevent.lo +libsynti_la_OBJECTS = $(am_libsynti_la_OBJECTS) +libsynti_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ + $(CXXFLAGS) $(libsynti_la_LDFLAGS) $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +CXXLD = $(CXX) +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(libsynti_la_SOURCES) +DIST_SOURCES = $(libsynti_la_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DOCBOOKSTYLE = @DOCBOOKSTYLE@ +DOCBOOKTARGETS = @DOCBOOKTARGETS@ +DOT = @DOT@ +DOTPATH = @DOTPATH@ +DOXYGEN = @DOXYGEN@ +DOXYGEN_TREEVIEW = @DOXYGEN_TREEVIEW@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FLUIDSYNTHDIRS = @FLUIDSYNTHDIRS@ +FST_CFLAGS = @FST_CFLAGS@ +FST_LIBS = @FST_LIBS@ +Fluidsynth_CFLAGS = @Fluidsynth_CFLAGS@ +Fluidsynth_LIBS = @Fluidsynth_LIBS@ +GIVERTCAP = @GIVERTCAP@ +GREP = @GREP@ +HAVEDOT = @HAVEDOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_LIBS = @JACK_LIBS@ +JADE = @JADE@ +LASH_CFLAGS = @LASH_CFLAGS@ +LASH_LIBS = @LASH_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LO_CFLAGS = @LO_CFLAGS@ +LO_LIBS = @LO_LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MUSECXXFLAGS = @MUSECXXFLAGS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NSGMLS = @NSGMLS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PCH = @PCH@ +PERL = @PERL@ +PKG_CONFIG = @PKG_CONFIG@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIB = @PYTHON_LIB@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QTDIR_BIN = @QTDIR_BIN@ +QTDIR_INC = @QTDIR_INC@ +QT_LIBS = @QT_LIBS@ +RANLIB = @RANLIB@ +SAMPLERATE_CFLAGS = @SAMPLERATE_CFLAGS@ +SAMPLERATE_LIBS = @SAMPLERATE_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ +SNDFILE_LIBS = @SNDFILE_LIBS@ +STRIP = @STRIP@ +SUIDBUILD = @SUIDBUILD@ +SUIDINSTALL = @SUIDINSTALL@ +USE_SSE = @USE_SSE@ +UUID_CFLAGS = @UUID_CFLAGS@ +UUID_LIBS = @UUID_LIBS@ +VERSION = @VERSION@ +XMKMF = @XMKMF@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +have_docbook = @have_docbook@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +synth_fluid = @synth_fluid@ +synth_fluidsynth = @synth_fluidsynth@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AM_CXXFLAGS = $(MUSECXXFLAGS) -I.. -I$(top_srcdir)/synti \ + -I$(top_srcdir)/muse/widgets -DQT_SHARED -DQT_THREAD_SUPPORT \ + -DQT_PLUGIN $(QTDIR_INC) -DQT3_SUPPORT -I$(top_srcdir) +AM_CPPFLAGS = +MOC = $(QTDIR_BIN)/moc +#UIC = $(QTDIR_BIN)/uic3 +UIC = /usr/bin/uic3 +UIFILES = $(wildcard *.ui) +MOCFILES = $(shell for h in $(filter %.h,$(SOURCES)); do \ + if grep -q Q_OBJECT $$h; then \ + echo $$h | sed "s/\(.*\)\.h/moc_\1.cpp/"; \ + fi; \ + done) + +BUILT_SOURCES = $(MOCFILES) $(UIFILES:%.ui=%.h) +MOSTLYCLEANFILES = $(MOCFILES) $(UIFILES:%.ui=%.h) +SUFFIXES = .ui .h.gch +EXTRA_LTLIBRARIES = +noinst_LTLIBRARIES = libsynti.la +libsynti_la_LDFLAGS = +libsynti_la_SOURCES = \ + mess.cpp mess.h \ + gui.cpp gui.h \ + mono.cpp mono.h \ + poly.cpp poly.h \ + mpevent.cpp mpevent.h evdata.h + +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: .ui .h.gch .cpp .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/common.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu synti/libsynti/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu synti/libsynti/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-noinstLTLIBRARIES: + -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) + @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +libsynti.la: $(libsynti_la_OBJECTS) $(libsynti_la_DEPENDENCIES) + $(libsynti_la_LINK) $(libsynti_la_OBJECTS) $(libsynti_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gui.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mess.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mono.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mpevent.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/poly.Plo@am__quote@ + +.cpp.o: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< + +.cpp.obj: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.cpp.lo: +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-am +all-am: Makefile $(LTLIBRARIES) +installdirs: +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +clean: clean-am + +clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: all check install install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-noinstLTLIBRARIES ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags uninstall uninstall-am + + +de: + @for base in $(MOCFILES); do echo -e "\t$${base}.cpp $${base}.h \\"; done + +nde: + @for base in $(MOCFILES); do echo -e "\tmoc_$${base}.cpp \\"; done + +.ui.o: %.h + $(UIC) -L $(top_srcdir)/muse/widgets -o $*.cpp -impl $*.h $*.ui + $(MOC) $*.h >> $*.cpp + $(CXXCOMPILE) -c $*.cpp -o $*.o + $(RM) $*.cpp moc_$*.cpp moc_$*.o + +.ui.lo: %.h + $(UIC) -L $(top_srcdir)/muse/widgets -o $*.cpp -impl $*.h $*.ui + $(MOC) $*.h >> $*.cpp + $(LTCXXCOMPILE) -c $*.cpp -o $*.lo + $(RM) $*.cpp moc_$*.cpp moc_$*.lo moc_$*.o + +moc_%.cpp: %.h + $(MOC) $< -o $@ + +%.h: %.ui + $(UIC) -o $@ $< +# $(UIC) -L $(top_srcdir)/muse/widgets -o $@ $< + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/muse2/synti/libsynti/evdata.h b/muse2/synti/libsynti/evdata.h new file mode 100644 index 00000000..29f6441e --- /dev/null +++ b/muse2/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/muse2/synti/libsynti/gui.cpp b/muse2/synti/libsynti/gui.cpp new file mode 100644 index 00000000..cc737a9e --- /dev/null +++ b/muse2/synti/libsynti/gui.cpp @@ -0,0 +1,130 @@ +//========================================================= +// MusE +// Linux Music Editor +// software synthesizer helper library +// $Id: gui.cpp,v 1.5 2004/04/11 10:46:14 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; + } + } + +//--------------------------------------------------------- +// sendEvent +//--------------------------------------------------------- + +void MessGui::sendEvent(const MidiPlayEvent& ev) + { + if (wFifoSize == EVENT_FIFO_SIZE) { + printf("event gui->synti fifo overflow\n"); + return; + } + wFifo[wFifoWindex] = ev; + wFifoWindex = (wFifoWindex + 1) % EVENT_FIFO_SIZE; + ++wFifoSize; + } + +//--------------------------------------------------------- +// sendController +//--------------------------------------------------------- + +void MessGui::sendController(int ch, int idx, int val) + { +// MidiPlayEvent pe(0, 0, ch, ME_CONTROLLER, idx, val); +// sendEvent(pe); + + sendEvent(MidiPlayEvent(0, 0, ch, ME_CONTROLLER, idx, val)); + } + +//--------------------------------------------------------- +// sendSysex +//--------------------------------------------------------- + +void MessGui::sendSysex(unsigned char* p, int n) + { +// MidiPlayEvent pe(0, 0, ME_SYSEX, p, n); +// sendEvent(pe); + + sendEvent(MidiPlayEvent(0, 0, ME_SYSEX, p, n)); + } + +//--------------------------------------------------------- +// writeEvent +// send an event to synti gui +//--------------------------------------------------------- + +void MessGui::writeEvent(const MidiPlayEvent& 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 + } + +//--------------------------------------------------------- +// readEvent +// read event from synti gui +//--------------------------------------------------------- + +MidiPlayEvent MessGui::readEvent() + { + MidiPlayEvent ev = wFifo[wFifoRindex]; + wFifoRindex = (wFifoRindex + 1) % EVENT_FIFO_SIZE; + --wFifoSize; + return ev; + } + diff --git a/muse2/synti/libsynti/gui.h b/muse2/synti/libsynti/gui.h new file mode 100644 index 00000000..54044243 --- /dev/null +++ b/muse2/synti/libsynti/gui.h @@ -0,0 +1,72 @@ +//========================================================= +// MusE +// Linux Music Editor +// software synthesizer helper library +// $Id: gui.h,v 1.4 2004/06/19 09:50:37 wschweer Exp $ +// +// (C) Copyright 2004 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __SYNTH_GUI_H__ +#define __SYNTH_GUI_H__ + +#include "mpevent.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 + MidiPlayEvent rFifo[EVENT_FIFO_SIZE]; + volatile int rFifoSize; + int rFifoWindex; + int rFifoRindex; + + // Event Fifo GUI -> synti + MidiPlayEvent wFifo[EVENT_FIFO_SIZE]; + volatile int wFifoSize; + int wFifoWindex; + int wFifoRindex; + + protected: + int readFd; + void readMessage(); + void sendEvent(const MidiPlayEvent& ev); + void sendController(int,int,int); + void sendSysex(unsigned char*, int); + + virtual void processEvent(const MidiPlayEvent&) {}; + + public: + MessGui(); + virtual ~MessGui(); + + void writeEvent(const MidiPlayEvent&); + int fifoSize() const { return wFifoSize; } + MidiPlayEvent 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/muse2/synti/libsynti/mess.cpp b/muse2/synti/libsynti/mess.cpp new file mode 100644 index 00000000..639ffee6 --- /dev/null +++ b/muse2/synti/libsynti/mess.cpp @@ -0,0 +1,122 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: mess.cpp,v 1.2 2004/04/15 13:46:18 wschweer Exp $ +// (C) Copyright 2004 Werner Schweer (ws@seh.de) +//========================================================= + +#include "mess.h" +#include "muse/midi.h" + +static const int FIFO_SIZE = 32; + +//--------------------------------------------------------- +// MessP +//--------------------------------------------------------- + +struct MessP { + // Event Fifo synti -> Host: + MidiPlayEvent 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(MidiPlayEvent 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 +//--------------------------------------------------------- + +MidiPlayEvent Mess::receiveEvent() + { + MidiPlayEvent 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 MidiPlayEvent& 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/muse2/synti/libsynti/mess.h b/muse2/synti/libsynti/mess.h new file mode 100644 index 00000000..921dbd6c --- /dev/null +++ b/muse2/synti/libsynti/mess.h @@ -0,0 +1,97 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: mess.h,v 1.3.2.3 2009/11/19 04:20:33 terminator356 Exp $ +// (C) Copyright 2001-2004 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __MESS_H__ +#define __MESS_H__ + +#define MESS_MAJOR_VERSION 1 +#define MESS_MINOR_VERSION 1 + +#include "mpevent.h" + +class QWidget; +class QString; +class MessP; + +//--------------------------------------------------------- +// MidiPatch +//--------------------------------------------------------- + +struct MidiPatch { + signed char typ; // 1 - GM 2 - GS 4 - XG + 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 processMessages() { }; + virtual void process(float** data, int offset, int len) = 0; + + // the synti has to (re-)implement processEvent() or provide + // some of the next three functions: + + virtual bool processEvent(const MidiPlayEvent&); + 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**) const {} + virtual int getControllerInfo(int, const char**, int*, int*, int*, int*) const {return 0;} + virtual const char* getPatchName(int, int, int, bool) const { return "?"; } + virtual const MidiPatch* getPatchInfo(int, const MidiPatch*) const { return 0; } + + // synthesizer -> host communication + void sendEvent(MidiPlayEvent); // called from synti + MidiPlayEvent 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; + Mess* (*instantiate)(int sr, QWidget* parent, QString* projectPathPtr, const char* name); + }; + +extern "C" { + const MESS* mess_descriptor(); + } + +#endif + diff --git a/muse2/synti/libsynti/mono.cpp b/muse2/synti/libsynti/mono.cpp new file mode 100644 index 00000000..14a23aca --- /dev/null +++ b/muse2/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/muse2/synti/libsynti/mono.h b/muse2/synti/libsynti/mono.h new file mode 100644 index 00000000..f2f8bdf7 --- /dev/null +++ b/muse2/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/muse2/synti/libsynti/mpevent.cpp b/muse2/synti/libsynti/mpevent.cpp new file mode 100644 index 00000000..482bc952 --- /dev/null +++ b/muse2/synti/libsynti/mpevent.cpp @@ -0,0 +1,22 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: mpevent.cpp,v 1.1 2004/02/12 18:30:30 wschweer Exp $ +// +// (C) Copyright 2002-2004 Werner Schweer (ws@seh.de) +//========================================================= + +#include "mpevent.h" + +//--------------------------------------------------------- +// MEvent +//--------------------------------------------------------- + +MEvent::MEvent(unsigned t, int port, int tpe, const unsigned char* data, int len) + { + _time = t; + _port = port; + edata.setData(data, len); + _type = tpe; + } + diff --git a/muse2/synti/libsynti/mpevent.h b/muse2/synti/libsynti/mpevent.h new file mode 100644 index 00000000..8568169f --- /dev/null +++ b/muse2/synti/libsynti/mpevent.h @@ -0,0 +1,100 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: mpevent.h,v 1.1 2004/02/12 18:30:31 wschweer Exp $ +// +// (C) Copyright 1999-2002 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __MPEVENT_H__ +#define __MPEVENT_H__ + +#include "evdata.h" + +//--------------------------------------------------------- +// MEvent +// baseclass for MidiPlayEvent and MidiRecordEvent +//--------------------------------------------------------- + +//--------------------------------------------------------- +// MEvent +//--------------------------------------------------------- + +class MEvent { + unsigned _time; + EvData edata; + unsigned char _port, _channel, _type; + int _a, _b; + + public: + MEvent() {} + MEvent(unsigned tm, int p, int c, int t, int a, int b) + : _time(tm), _port(p), _channel(c & 0xf), _type(t), _a(a), _b(b) {} + MEvent(unsigned t, int p, int type, const unsigned char* data, int len); + MEvent(unsigned t, int p, int tpe, EvData d) : _time(t), edata(d), _port(p), _type(tpe) {} + + ~MEvent() {} + + int port() const { return _port; } + 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 setPort(int val) { _port = val; } + 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); } + }; + +//--------------------------------------------------------- +// MidiRecordEvent +// allocated and deleted in midiseq thread context +//--------------------------------------------------------- + +class MidiPlayEvent; + +class MidiRecordEvent : public MEvent { + public: + MidiRecordEvent() {} + MidiRecordEvent(const MEvent& e) : MEvent(e) {} + MidiRecordEvent(unsigned tm, int p, int c, int t, int a, int b) + : MEvent(tm, p, c, t, a, b) {} + MidiRecordEvent(unsigned t, int p, int tpe, const unsigned char* data, int len) + : MEvent(t, p, tpe, data, len) {} + MidiRecordEvent(unsigned t, int p, int type, EvData data) + : MEvent(t, p, type, data) {} + ~MidiRecordEvent() {} + }; + +//--------------------------------------------------------- +// MidiPlayEvent +// allocated and deleted in audio thread context +//--------------------------------------------------------- + +class MidiPlayEvent : public MEvent { + public: + MidiPlayEvent() {} + MidiPlayEvent(const MEvent& e) : MEvent(e) {} + MidiPlayEvent(unsigned tm, int p, int c, int t, int a, int b) + : MEvent(tm, p, c, t, a, b) {} + MidiPlayEvent(unsigned t, int p, int type, const unsigned char* data, int len) + : MEvent(t, p, type, data, len) {} + MidiPlayEvent(unsigned t, int p, int type, EvData data) + : MEvent(t, p, type, data) {} + ~MidiPlayEvent() {} + }; + +#endif + diff --git a/muse2/synti/libsynti/poly.cpp b/muse2/synti/libsynti/poly.cpp new file mode 100644 index 00000000..e76fe966 --- /dev/null +++ b/muse2/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/muse2/synti/libsynti/poly.h b/muse2/synti/libsynti/poly.h new file mode 100644 index 00000000..b990b198 --- /dev/null +++ b/muse2/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/muse2/synti/organ/Makefile.am b/muse2/synti/organ/Makefile.am new file mode 100644 index 00000000..83f5800e --- /dev/null +++ b/muse2/synti/organ/Makefile.am @@ -0,0 +1,15 @@ +include $(top_srcdir)/common.am +include $(top_srcdir)/synti/synti-install.am + +AM_CXXFLAGS += -O3 -ffast-math -fno-exceptions + +synthi_LTLIBRARIES = organ.la + +organ_la_SOURCES = organ.cpp organ.h organgui.cpp organgui.h \ + organguibase.ui \ + $(top_srcdir)/muse/xml.cpp + +nodist_organ_la_SOURCES = moc_organgui.cpp + +organ_la_LIBADD = ../libsynti/libsynti.la +organ_la_LDFLAGS = -module -avoid-version diff --git a/muse2/synti/organ/Makefile.in b/muse2/synti/organ/Makefile.in new file mode 100644 index 00000000..93f56ac5 --- /dev/null +++ b/muse2/synti/organ/Makefile.in @@ -0,0 +1,657 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/common.am $(top_srcdir)/synti/synti-install.am +subdir = synti/organ +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal-include.m4 \ + $(top_srcdir)/m4/alsa.m4 $(top_srcdir)/m4/docbook.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(synthidir)" +LTLIBRARIES = $(synthi_LTLIBRARIES) +organ_la_DEPENDENCIES = ../libsynti/libsynti.la +am_organ_la_OBJECTS = organ.lo organgui.lo organguibase.lo xml.lo +nodist_organ_la_OBJECTS = moc_organgui.lo +organ_la_OBJECTS = $(am_organ_la_OBJECTS) $(nodist_organ_la_OBJECTS) +organ_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ + $(CXXFLAGS) $(organ_la_LDFLAGS) $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +CXXLD = $(CXX) +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(organ_la_SOURCES) $(nodist_organ_la_SOURCES) +DIST_SOURCES = $(organ_la_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DOCBOOKSTYLE = @DOCBOOKSTYLE@ +DOCBOOKTARGETS = @DOCBOOKTARGETS@ +DOT = @DOT@ +DOTPATH = @DOTPATH@ +DOXYGEN = @DOXYGEN@ +DOXYGEN_TREEVIEW = @DOXYGEN_TREEVIEW@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FLUIDSYNTHDIRS = @FLUIDSYNTHDIRS@ +FST_CFLAGS = @FST_CFLAGS@ +FST_LIBS = @FST_LIBS@ +Fluidsynth_CFLAGS = @Fluidsynth_CFLAGS@ +Fluidsynth_LIBS = @Fluidsynth_LIBS@ +GIVERTCAP = @GIVERTCAP@ +GREP = @GREP@ +HAVEDOT = @HAVEDOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_LIBS = @JACK_LIBS@ +JADE = @JADE@ +LASH_CFLAGS = @LASH_CFLAGS@ +LASH_LIBS = @LASH_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LO_CFLAGS = @LO_CFLAGS@ +LO_LIBS = @LO_LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MUSECXXFLAGS = @MUSECXXFLAGS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NSGMLS = @NSGMLS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PCH = @PCH@ +PERL = @PERL@ +PKG_CONFIG = @PKG_CONFIG@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIB = @PYTHON_LIB@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QTDIR_BIN = @QTDIR_BIN@ +QTDIR_INC = @QTDIR_INC@ +QT_LIBS = @QT_LIBS@ +RANLIB = @RANLIB@ +SAMPLERATE_CFLAGS = @SAMPLERATE_CFLAGS@ +SAMPLERATE_LIBS = @SAMPLERATE_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ +SNDFILE_LIBS = @SNDFILE_LIBS@ +STRIP = @STRIP@ +SUIDBUILD = @SUIDBUILD@ +SUIDINSTALL = @SUIDINSTALL@ +USE_SSE = @USE_SSE@ +UUID_CFLAGS = @UUID_CFLAGS@ +UUID_LIBS = @UUID_LIBS@ +VERSION = @VERSION@ +XMKMF = @XMKMF@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +have_docbook = @have_docbook@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +synth_fluid = @synth_fluid@ +synth_fluidsynth = @synth_fluidsynth@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AM_CXXFLAGS = $(MUSECXXFLAGS) -I.. -I$(top_srcdir)/synti \ + -I$(top_srcdir)/muse/widgets -DQT_SHARED -DQT_THREAD_SUPPORT \ + -DQT_PLUGIN $(QTDIR_INC) -DQT3_SUPPORT -O3 -ffast-math \ + -fno-exceptions +AM_CPPFLAGS = +MOC = $(QTDIR_BIN)/moc +#UIC = $(QTDIR_BIN)/uic3 +UIC = /usr/bin/uic3 +UIFILES = $(wildcard *.ui) +MOCFILES = $(shell for h in $(filter %.h,$(SOURCES)); do \ + if grep -q Q_OBJECT $$h; then \ + echo $$h | sed "s/\(.*\)\.h/moc_\1.cpp/"; \ + fi; \ + done) + +BUILT_SOURCES = $(MOCFILES) $(UIFILES:%.ui=%.h) +MOSTLYCLEANFILES = $(MOCFILES) $(UIFILES:%.ui=%.h) +SUFFIXES = .ui .h.gch +synthidir = $(pkglibdir)/synthi +synthi_LTLIBRARIES = organ.la +organ_la_SOURCES = organ.cpp organ.h organgui.cpp organgui.h \ + organguibase.ui \ + $(top_srcdir)/muse/xml.cpp + +nodist_organ_la_SOURCES = moc_organgui.cpp +organ_la_LIBADD = ../libsynti/libsynti.la +organ_la_LDFLAGS = -module -avoid-version +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: .ui .h.gch .cpp .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/common.am $(top_srcdir)/synti/synti-install.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu synti/organ/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu synti/organ/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-synthiLTLIBRARIES: $(synthi_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(synthidir)" || $(MKDIR_P) "$(DESTDIR)$(synthidir)" + @list='$(synthi_LTLIBRARIES)'; test -n "$(synthidir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(synthidir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(synthidir)"; \ + } + +uninstall-synthiLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(synthi_LTLIBRARIES)'; test -n "$(synthidir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(synthidir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(synthidir)/$$f"; \ + done + +clean-synthiLTLIBRARIES: + -test -z "$(synthi_LTLIBRARIES)" || rm -f $(synthi_LTLIBRARIES) + @list='$(synthi_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +organ.la: $(organ_la_OBJECTS) $(organ_la_DEPENDENCIES) + $(organ_la_LINK) -rpath $(synthidir) $(organ_la_OBJECTS) $(organ_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/moc_organgui.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/organ.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/organgui.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xml.Plo@am__quote@ + +.cpp.o: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< + +.cpp.obj: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.cpp.lo: +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< + +xml.lo: $(top_srcdir)/muse/xml.cpp +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT xml.lo -MD -MP -MF $(DEPDIR)/xml.Tpo -c -o xml.lo `test -f '$(top_srcdir)/muse/xml.cpp' || echo '$(srcdir)/'`$(top_srcdir)/muse/xml.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/xml.Tpo $(DEPDIR)/xml.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(top_srcdir)/muse/xml.cpp' object='xml.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o xml.lo `test -f '$(top_srcdir)/muse/xml.cpp' || echo '$(srcdir)/'`$(top_srcdir)/muse/xml.cpp + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-am +all-am: Makefile $(LTLIBRARIES) +installdirs: + for dir in "$(DESTDIR)$(synthidir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +clean: clean-am + +clean-am: clean-generic clean-libtool clean-synthiLTLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-synthiLTLIBRARIES + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-synthiLTLIBRARIES + +.MAKE: all check install install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-synthiLTLIBRARIES ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip install-synthiLTLIBRARIES installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-synthiLTLIBRARIES + + +de: + @for base in $(MOCFILES); do echo -e "\t$${base}.cpp $${base}.h \\"; done + +nde: + @for base in $(MOCFILES); do echo -e "\tmoc_$${base}.cpp \\"; done + +.ui.o: %.h + $(UIC) -L $(top_srcdir)/muse/widgets -o $*.cpp -impl $*.h $*.ui + $(MOC) $*.h >> $*.cpp + $(CXXCOMPILE) -c $*.cpp -o $*.o + $(RM) $*.cpp moc_$*.cpp moc_$*.o + +.ui.lo: %.h + $(UIC) -L $(top_srcdir)/muse/widgets -o $*.cpp -impl $*.h $*.ui + $(MOC) $*.h >> $*.cpp + $(LTCXXCOMPILE) -c $*.cpp -o $*.lo + $(RM) $*.cpp moc_$*.cpp moc_$*.lo moc_$*.o + +moc_%.cpp: %.h + $(MOC) $< -o $@ + +%.h: %.ui + $(UIC) -o $@ $< +# $(UIC) -L $(top_srcdir)/muse/widgets -o $@ $< + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/muse2/synti/organ/fdialogbuttons.ui b/muse2/synti/organ/fdialogbuttons.ui new file mode 100644 index 00000000..f1ad496b --- /dev/null +++ b/muse2/synti/organ/fdialogbuttons.ui @@ -0,0 +1,136 @@ + +FileDialogButtons + + + FileDialogButtons + + + + 27 + 0 + 69 + 368 + + + + + 4 + 5 + 0 + 0 + + + + Form1 + + + + unnamed + + + 11 + + + 6 + + + + globalButton + + + + + + image0 + + + true + + + true + + + true + + + Global + + + + + userButton + + + + + + image1 + + + true + + + true + + + true + + + User + + + + + projectButton + + + + + + image2 + + + true + + + true + + + true + + + Project + + + + + Spacer1 + + + Vertical + + + Expanding + + + + 20 + 20 + + + + + + + + 789cad965b73e2481285dffb57383adf3a3672102021c5c63ed86e5ff10ddfdaee89794824617cc137c0b789fdef9bca3ca5a66dd8d999d9aec6e673294f9dcaca4af8e5cbd2d9c1eed2975f3e8d2732b9cc97f2a13c2e7d29a6a3d1ebafbffdebf74f9f5bed25fd1f7592a5e6e77f7cfadc9b2ce54b7b77b765054c0ad4b07fc603e77623918ae919dceeb48c6f9ce322ed572c6bc669236fa4363f74aee34fc039e213e7b8d1f1f86770ec4ca7ce699cc7c6b715478d6a98bf6fceaae7f1afceaae7fa54b3eb75c0716af3528033677e724e63c98d6f03f7db16ff669c467964fbe307e7a0cfd760e8f30518faf252b3fb49c1c81fad3bd7eb413fcdc0bbce595c783eba15371bd530fd3be7b8403e2681b17e59b3af97392711ce6f1038f3f5cec0b1b3907327ca2c3ff4cd390d7e1ec1c1ef8e731615565fc2c6599279bcdc80839ff3c0d0ffee1cd6e3041c637e2fb0f87ad760e8d37e60ccaf3987f3a51c5cf40be3c2398be07f195cc0ff65c5ad28f895dcb913f2d500073f17e0e0e725b0cfcb2db8c0f30735fbf3abce6904ee83437e2370f0df7456ffc6fc1d1c637ec559e23231be0397d8df57e32abfae0faed72b9db3701fef9d453c9e5a15b7a376a31d99de15b80dbe700ee72702ceb05ecf39cbe0bf012e7c3d3e77ee377d3d3e0becfb61d7135dcffa8d74c1a9331d3a4b04ff78be8eb7f38f9b7123b6e648c7ce69a8f7d839f823ab87583a05fc6f39a7387f8e9c25cefdf901589cc5f493661225b61eef394be9f3bce3dc4ffc7eb1f5af44d250cfd6af3a2d41bd72d3393c2f47c6fd4e86fe543aa791f7031a3bd7fafb6001ef82437d98bfb4d509fde4c039e8c92e38f43fcc6bbcfbb1fca77d9d773f4330fa21df81433fb0fac9da29f22b1bce59b86fe03cd443e004bc06467d8aed2fcbb3507f3be0d08f9e9cfb09ea6dd339c4f33a18f9a0ed8aa52d11cee3158cf397a1731fe74947ce7989fb3732ce05fd487a60c1e74f0a2e31df770e7a72edacfb77bf5bce45e2fa62fefb6d29bd3e64dbb9df44bd5c8213f0917311ee430f9c94beff17b060be6d5c68bcd76b0e1667590797b82f783e477dc92a18f9e43767d5777e059703df8fed2f8f75ff1ebfe29c37715e31389c5fcbb928a187e7cba6b3587fcf0b7ddefd4ec1b89fbc0d0ef771e21ce27939b0fbe33138815fdb4f11e7a87fce9c0b9c978cc1b87f34710ef1fc0816e8399745a8ef6370a8cf1370a8cfa97389f313fb3e512605ea4f46ce25ce5beec1a81fb6ef5f651d4f0c0ee773050ef93d0c0cff53e741c8cf6acd03d3db0427ce6ceb0f923abeeb5cc73f83437e6ec08278fbbc1a0c6abd1138ccf7c103e7dee4ef8f1f3a4c61fc1d1d16eeebc8b9f86b6adee779c0173ce44bbe32b5cb3faf663ad77cc323be35b53b55b9ffe8ed8f766d3a0ffcc8639ef054a39fde790b6ab9be7f5eec137e5ef895df789957f4b5aa11b3de46a6f0555f237bdf5fa8f3c06bbcce1bbcc95baa3851b59fbd6d43ed4ab52ac5aeef748ece0eeff21eeff381aaad73cfbc4dd4d9211fa952ae4ac77cc2a7aa52a9dd7f74643adff88ccff93b373852b5a6a9b9b796aa0dd4519b63554ab8c329677c42fcde91dd27e27312ea534e0595dca0c18cb7095dd0902ee94ab50674adaf1b1af131ddcef34377744f0f9a8f5b7aacd482371af3064d684a4ff44c2fea6cd9f296d02bbdcdcb332dd30aadd2575aa3075ad7517b536707b4c12fb4a9ce5e788526fa7b8bb6a93bd7cf0eedd21eedd381aaf52b35f3e66a3d3ab47d6ed291664df346c7f3fdd0099dd2373aa373fa4e0d555b7de72da2e66cde5467ae1f6a519b624aa8432965c242ea6def83b728e44d64417efcaeebc7a5e4fab54e3ff664b0c09b9d825c2cf2a32a23ab53ad7e19566a7c31e3ed5ddee472be1fb9b29b53d5bcd6aad65897bb72ed6af3bcc9cd423fa32ad655886524a3aa66f59dedf4a7bcedcbaddc2dcccfacca3d9fca833cf0b13cca587fdebbda0f6f32a9fcfcdc41e0e73eb429f752a9e8c8746ccb54a6d59d9227fda6f5aca7f022af959f1f9dad1a9e9fca039fba8a7b511f631d6f3aa6b22c2b36a6aab62a5f7583337e6674d678a84f3d9a8f937a4795974a656a1aebda3d72ce644336e56abe9ff09eaa3da882bdc6418563f5b3255b9ceb8e87b2ad7fefcef7e3990a7f911d5ddd7dd45e54675db3bfab2ac7b2b7c8cfecf9d56afbbabee7055e2a15cddd81f4febb9fd9fe56eff44a63b7b4db1fcba179a954a61ffdcc7e2e7f1cb5b7a91ca8d6b6eea8a73f8fdefb09f5335fe3839a768b4a855e7ff6f3a30e17f999ebed48f6a52b1bc1cfecbdf8638d0f797ba7f2bffb79ffb9f77efcdfbe47fdfb9f9ffe03facd42d6 + + + 789ca5975b6fe3381285dffb57045d6f8305c7b22d59c2621f724f3acefd9ec53e5451729cc4cecdcec51eec7fdf12eb50dd71328b01a6d5eef617528787c56291f9fdb7a58b83dda5df7eff3699f2f4c62ff9213f2ffd56be8cc7b37fffe75f7f7cfbdee92ee9df76d65b6a7fffc7b7ef87d325bfb4f7705fd52033056a853f353bff91e571a15d167879818f1678eb23d3cd47f6bcd03f5d685f188fb617fc650bbcf0bea3059e80bb60ccafdbca38bcff00ee1ad33a38ef75423bfc77bdb1bb0e9cab401edaafc0b931d978799614dd309fb2e6a4957413f3eb8cd3566efab7e0d4988b8625b4b371a317d62bc955cfc67f037b3019a785bdef9ec025f4dbc6596a7a220dfbd0de0117c674615c24651af8129c96964f6b35b75bf513f812dc35e66363d50be3f1a6712f61e32d701cff2cb2b54bf0df2eda79bb08fc0ef6c67c641ce7c31be0127c62dc4b301fb437e39d46869f6d70c9d63f31cea3dff786ed7d17d987f8f00f702ad67f075c406f16d9da690c2ec178bf282dbe84f73931e6bb9a3b49db7792b0be73e34e0bfc6edcc3fab987c8e69f4ec125e633336efce0fdc6cf7ec365e07be3223176393845fbd498d9fcba90bf9da2e33bb67e43e3187f3a308ee369290bacfac60370d4ef820bf08b3157182f33963638ecbf6ed2f15d8bcfd0b8db32e66570d7584e1bb6fa7067dcc40f1cf5b91f98637f26700ebe007b7062dc4b6c7f720ec67e778571515a3ed1833123bfe8d658da5516faf7c019fcecd69cb6bb3e0dc59f578cd39631ad19e7d80fe2c171bde7c6cd780e9c22bfaf1b0ef197d7c0daddea1fdf1aa7451ae6eb2b70694ccfc6717c2e8de37afba09fb5637ef395719664369f7be31eea1b57c605f297bbc68dff3618fea9886cf5cc87fa9e713b9e278971dc4fbc6f9c15382f9ec1a5311f1ae7a8cf740dc6fee337e3c60f812b8b9f3b35d67c0aedee18ccc612ea41afd3f83b02e33c932e3837e655e35e62e7157be3e8873ac645ac87adc8a8070fc6ccf0cbc692c1ef5964f83d0157f01bf2bd27d18ff48c7b45cfceb33eb834a663e302f597f6c0b15ebe81637d38379636fc41bf8957783fef34fbf7c4b817cf3fb4e709f8058cf397968d8bb8df47c68cfca4141ceb91180bea8f84fd934b1ef7f30d38e6abf5175d7f8bdfb9b18ff56a1b8cfd2cc15fd14d53cb47d930d6fd60fba934cee379971a17311fb7c0381fdd8571a31ff2a5f09a4e61fffa2118f7159e1a17b15e9f83633e3d1a4bdbe221d79131bf1fc6beb27a25a13e71b7c0f923236346fe490e8ef970682c6cf94768f7b1deef44867e889f266fdc2f0538c5fd686adc4b911febc63a9ed5c30acc38df6fc01518fd7ddcaf7de312f5d887fd2ddd66fc65e322deef2e8da31e0d2323bf33638da7cdbf0267e015e33243fd8fcc95ad678897946981fbe9c038beef6e1bb6fdfc0c66637e32f6583fb907637f91f92bcb98afadc8f0b30b861fb70aae8c7d384f74394af81b1b0bf6034f8ce3f8ae03cec07bc651cfbd1a576dccdffa975981fb76dbb840fde1b9b1473da30118f9252d30ea33f78ce37c19ed31fefc08c67d8739b2b5d32638fadd378e7edd5ae481f53f0367689f46b67609f7a532cd13dca7cec129ee2f3bc6d1bf4b22235ff17e19f3771d8c7a4ebb60ec27ba328e7ee9090c7f7412d9fcb91730c36fa83f655514767ecb99b130f6fbb1711cdfdd356cf33f04c7f80ec1d8fffc6a1cfdf1081cfdad82e18762ff0afec2fa549967db1fb2d2b0c5af6d1ce3e106c655ccf72e38e6c35a64d3e731388e7f04c6f8d46f7810f42e8d07311f7cc3a15d42fe5495afcc9f373fcd7cdd0c1ceb41098ef977651cf5dc1b380387f365d08cef46e0389f8386adff3d98e12fecdfc120f6779b0d5bff3118fd5d051e181f4efffef3958e237dd889f37f47c795aed267a05ad77f5deda38e1bea9b4377e36edd9d6a8d82da5ff2b6a053bab1bb770feed13da9da73501b07b54954d33ed7fa5950fee467ea5edcab7bd3f7dfa1760bb5996a4d5431ce9adcdc2d47b54f7e56dcaa3eaf6e0d6a3fbdadabd286dbd4d9daa7527d725ba6f4c9cfb6fba19f1dd777bb6ecfed2f783b7087aa36523d539ca9d251adf4c9cfb13b71a7eecc9dbb8ba0567b9bba4b77e55aaa74eb12556abb8e7ae9aad64c63953af9c24fe67a2e77854e9f8849a0b6eb5ec9bb472aa9a281cef081ae69a8ee06aa36a11be717fdd02dddd188c674ef727a20a7de76e951d5faf454c78a9e43ac1ec3f7897e3fd499a9a3453f34a5177aa5377aa7993ef734776bb44ce42e68c5edd32aadd13a6dd084362d6eb4a57eb6ddf2273f3f6887fab44b7baab24f07744847740c6fe7b4a2ef5fd1099daafa99c6ada2730dc0679d215dd0a58eba4957d4a284dafafd883ac15d9752caa8a7ce728d97c5edfe2b3f1a65a2821d937e2bf5f625f4a4de8ed8d38c4bb743f50d6c400f7c1de256afe9e5577e34f3c9cd9878c8377ccb773c5237ab3ce67b7ee047d57be26775f66eab50afa99bfe999fa032e129bf04a5575519f1b89e9dfeffc6ef3c0b71abe759abf579fa859f32a8cc799957f4b30aa5913e6bfa59e70ddee42dde56b51fbc533bd3587de1075efabccb7bfae9f37e503a085e5ef9908ff8984ff8549fb3a036e3f3cf7ea0b2cc177ce90634d4ff97f9aa56d2bdaeb5486768de5a7a1f6f732778d3bbf8473fb58abe5b7bc934dbb53270163c45a5faa9f8807b9c73214e486f9722fea39fa0b215bdd85b7a0fad7ef134d29f697d9481bb936b19ca8ddcaadaddaf7e546522a3e0e5267889cf8caa0f9e0ef992e732d6d9cf55ed5ed51e7ef5238fbab19fdc5c9e752f8f6522537991d7109501bfc89b3cc9bbeeebb17e067c2963dda7cfee407f6bb8e1be8c7efa9199d6a25475e6ba7b2bd5589615590d4a033a97354467139f912a1dc85cbd27aab3fe6b7c5449dc5c73bcf6b3219bb225dbf2c37434c72d364d45951d8d82aa48ffa31f64e15c7683ce9eeccb811cca51ada33f23ad7b2378d990e3e025d37f4fa492d38f7e4c077ef6e44cce55e722fa914bb99256ed4573611254d48b54aef37ffd24fa7b4e4775bad18fa492d5e78c5ca9b3035df97a463734909eeae47fea2791c23b4f36afe0476f705a83532fdefb9257f4be3452957e9d2b5ff9d19c4afcc05ffba1acfaa1bff13ab2fe2c8ce7bcaec4b2a9e919a1154a7aba960f9ff797f6a3af1e49ed64a99fb0ae516d124e6bb4ffd4b12cf242db1f1fed75f4f12cff552db6ff5a37acfdd3f327778da67768fffedf7f7efb1f6c86991b + + + 789ca5975b6f23bd0d86eff75704cbbb0f853e7b3ce3cca0e845cee7f339452f486a1c3b8ee338cec929fadf2b8baf6693ec6ed1a2eb75902792382f298ae2fcf9c7c2e5e1dec21f7f7e9b3ef1d34017b4cf8f0b7ff8e7d168f6f77ffced9fdfbe77f285f83f5bc8beffe5db77c70bbab03fbeaf23d007387afa382201a815ff459e8273633f0697ad32f22358db367e63dc6e19eb22386fc7f9ba0b2ec1b760055f1967da69cf594ae34e0b3c036b6efc6e9cb78cfd6dc31cf58f1377230b81736385fdbcb4f9da4a5cc4b0c963e2c5ce9c6937711959f6c06ae3ba6f5c1485d93b00fb6eb4a787c6ddb63ddf33b8809ef7c4b07794d89ea7c7608f71dfb0445e365e6c83ef1297c6237081f17b7005fb0f892b8dbc02f6551e19f12c93bd0eb8b271b9007bb6f5abc655053e492c3e32f68359cc3ef28f6b2da23df823ac71be9c1b6bd7c77167f956860db67c74c629ff780a46bef1997127b7fd65b35736f9700d2e6dffbcc5a32c5ac8074e8c78ed812bdb5fb2fd2fbb6d367fdae0b49fb38663fce80d5cd97c4fe0b49f9971d83f5bbf04ae107ff8cb05e2a9e0dae2a5d02b6cf1e2a8afddcacaac8a9c19a7f3451d70d9b1f115e374bef80d9c9bbfbc0546fecbd438c5872f12233fba60e4335f82e18f3c833d783fb1e5a3887117f9270789cd3e5f810b8b277be3d2fb58df288f1cf61ff5a4679cfc9327e302f9efdec0c87f9e1987e7d9f803b8c0f876c3a6f72531f4ec80715e286b38cee777309e27be61b3a789cd9e1c361cc7a9655cb56dbfa90d2eeae83f6fce396bcd3f91af8d17db76feb805867e1e2686fe257085f9b5710850b4efe3fe6755ae382fce38ed17ed1937f6efc0c87f6e83bde5339d1a976df8b798d8c6f9105cc07e99d8e6f37262ab279418f588d6139b3fb49618f31fc01efe8e1ab6e7ef1a576dcc3f36e6b6c59b8ec088bf8bfbdb69a7f3a6a760e42375c16ae74f26c68ba827ee159cf4f71343ff1518f9412fc625f6972a70f26f150cff682531c6cf8c1bff361a8efebb128cfa43e3c498ffd8b08dc37f66cb1717f3b953257fb5366ecee300ac568fb930eea6fbeacd38dd675224b6f8c82e18e7839f8d9b7c39496cfafd109ccea3334efe39db9f4a32d493257017fb1bcf6bde4efd89eb1b277f740aceaddf904db082178dd37eba7be366ffce8d537cf9be618bef045c81312e99e993b8bf3977f07cafe0d4ffbc1a37faaec118a7020cbd3c36ae3cf2a14a8cfbe6c198518f9cf9c75243cf99b1e27e12acd7dad847fd4596a7fb7704467de135e3743f73175c18d38e71897aad4370aa9f4789115f67cc88aff48d7dddeb468efd65c1a9bfe31770857e41c0de98a6c60cffc8f4b3b0d9e3f8fc6e16fa41d37f0b2e8ce5d538c58f27e0daf28fc958bac6b264ec918f3e3eaf1bf4587fc303e3d47f721f5c818fc198ef319efa3b1a346cf5e73531ea91e9e1a487637d5deca47e954be3d09f1abf82d11f111b4b17f97496b88ef1722760e407c77c5a94d4eff209b842ff7409463fc537c615f2416a63c9709e188cfd72a789f1fc6363cd8c05f63cc6394f8c7c89f5b5ec34fd7517ecf1feb0665ca2bf932118fd919f188778583e9e1ad719f227d6e332f867f5ccd7c6a93f770330fa2bb765ac697fa2bd2a4ffd3d57c625fa197933aed05fd12118e324c6c99ebb488c7e63d538e9551bd712f7bfae83d1dfe89a71da1fadc0c837d900a77ee8c1986babcf921ba7fd74e7c66182d5eb589f43394be7ffd2b8c2fd2aeb60f423726fcc697cc758707fb11a6b3a8f9218f52df637ac15ee233d07e3bcf01e38f56fd7c68c7e47b6c1b5b1db35f6c83f7799d8e2eb30df77917f27c635f643637f2b79857ae707c68cfb45b6c005c67be01aef671363c9502f6b7017fdd1a371f37eb663dce889fd65381ee97d65079cf6efca38d8b7fbd883bb186f8319ebb7c058ef603fc5839ec0a9de1e18f7b25e2f8ec77aab453a5f9a8319bc01c6fba8be182bf24b7b60acf74f60bcafba7d638f7ca0cdc4d82fd8ab713fbba5c4a68f61afc67cee356ce31de3e48f8bf1519feaa716e0a4e7168cf74337310efed8fc3e18eba503c67a1d24b6fca303e3e49f5b4e8cf86e1937feed2586de2730f2c3ad341cc735d6575fa47aaf9bc69a21bf7230f24dc660d46f7d06633d0d8d3dd613ecfb94af6bc6499f8fe7d7d78af32e1918e79d7ac61efda01b82533d3c04633d5d1827ffdc2a98c15760c44f8e8d7b291ef17cd7dde6fcaf83d3fd7800c6fee899718df97407c67c7a4e8cfdba04e3f90ee34d7ec5f35dd7a9bf701918f5d56d8253becf8cd3fe93e9af1b7b31bf7add66ff7b609c577764dc4bf5edba615b7f07c67a52708a67ccff5e2fc5571fc1c9bf9971636f039cf667044ef66a70cff8e8c9d1fffb8d7639fcf6f12be1a3f39f5ffefe1fbebfd0e35d1d3ebd60e7a6b1f63fea71fdb0b2ef06eed60d83adbb68edbfd2f645cf5ccbc8ddbbb17b08d626ee31f2dcdab4b1e6834eff55e74f7a9edcb37b899ebd066b6f8db6919b055bd3b03e792deefd87ce9ff42cb965b7127eaebab5b8e287b6f5606916feb2816fed36a335f9a59e2db71dbe3b6ed7edb9fd60edb3b60377186cdd057547317eb364e9273dc7eec49dba3377ee2e82b5cba8edca5d8795ada0ab1d5465aee3f2a0a513fe568458cd2dfdaca7eb165de92a7244c4ee8204da5e48dd983cd5d4a31bead3806e69e87a741763265ff5d088ee694c0f34a1479a924bdae8899ee925587a8db11acfe346c15382675ff5d03b2dd132add02aadd13a6d34da8436698bb6698776698ff6e9c0e24687bfd17344c77442a77416ac9c076b1fb59dbb1dba7033baa4abb0032b216e355dff464f8bda945187722aa84b8b545215acadccb5b1630a2f6be1ba747b885bfd1b3da105e49a3adce31beef3806f79c8773ca275be376d3ce6079e3471bbfe8d9e293ff2949ff8995f829d57d7e7379ef13b2fd1292f236e2bc153c4cd5dfd56cf4ad0b2ca6bbc1eec6c849f9bbcc5dbbcc34b3c4c719b6be3dd79dcdc25effd4a0fef072d077c18ec1cf1319ff0695074c6e77cc1977c45195f738bdb3fb4b1fc4a0f67414b27f4cd057779914baedc802b7e09d3c8bd09f34c4434f47d8d36a97fd623bdb916b991be0ce476ee950ce5ce0d6424f732960799c8a34cc3e7499ee5c5b4c9abbc7dd42333798f71c965499665850a59953559970dba964dd9926d19cf4f81ecc8aeecc9be4c83b6033994a38f7a829563399153390b5acee5c2d532e613b9940db90a16aee54d5ad20e5d6bc70d6948b3d01117c15a37685bfca8474aa9d429857e4a54d58733337207721f4e62ed265a075df7e14ce5d4d35e7887b991b1f6dda60e8236faa8476f7518bab03b1de9bd8ef5412721be7d7da49b501d863a75037da25a9fb517be2f2e97b69bd030e8ddd6d7f084460f4ff54d67faae4bbaac2bbaaa6b61df37622d2ddc86d61ae2a41bfa12b46c062d5b41e376f8dbb65bd757ddf9a06757f7745f0ff4508ff4584ff434a8398b76c2990e7eade9795895eb46d8b7a8452f82e675bdfcacc7895ee9b5b6b41d2c65dad13ca8b77a379adbe10d3aa4dbd08f375a829503edca954e3feab1df74514b68aadc443a340bb5ae0edffefc66e013bafdac2558e97dd5631fefb4e5c9b36c6911aa67c89750c7d7bd8d86d95e75932bb3e2bd744287f8ea7b5ff5444b37734dbeaffde0d97ab81b7ae1fcc8874fb026d75efc403a41d1fd673de80ce287a7fed60f754b327f17f228f3a34f76ec13ee087f1f3cbdfe9c3fa83d49d3d83ff8c97c9743fe0e3eade7afda4ccbd7f3de587af453ff143c9bf0dac7955fe77dfc7ca987bf98f1c1caa71ee3f3d8f77ffdf5dbbf01849f9bad + + + + diff --git a/muse2/synti/organ/organ.cpp b/muse2/synti/organ/organ.cpp new file mode 100644 index 00000000..a1788a6c --- /dev/null +++ b/muse2/synti/organ/organ.cpp @@ -0,0 +1,710 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: organ.cpp,v 1.15.2.8 2009/12/06 10:05:00 terminator356 Exp $ +// +// Parts of this file taken from: +// Organ - Additive Organ Synthesizer Voice +// Copyright (c) 1999, 2000 David A. Bartold +// +// (C) Copyright 2001-2004 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include + +#include "muse/midi.h" +#include "libsynti/mpevent.h" + +#include "organ.h" +#include "organgui.h" + +//#define ORGAN_DEBUG + +SynthCtrl Organ::synthCtrl[] = { + { "harm0", HARM0, 0 }, + { "harm1", HARM1, 0 }, + { "harm2", HARM2, 0 }, + { "harm3", HARM3, 0 }, + { "harm4", HARM4, 0 }, + { "harm5", HARM5, 0 }, + { "attackLo", ATTACK_LO, 20 }, + { "decayLo", DECAY_LO, 20 }, + { "sustainLo", SUSTAIN_LO, 0 }, + { "releaseLo", RELEASE_LO, 20 }, + { "attackHi", ATTACK_HI, 10 }, + { "decayHi", DECAY_HI, 10 }, + { "sustainHi", SUSTAIN_HI, 0 }, + { "releaseHi", RELEASE_HI, 10 }, + { "brass", BRASS, 1 }, + { "flute", FLUTE, 1 }, + { "reed", REED, 1 }, + { "velocity", VELO, 0 }, + // next controller not send as init data + { "volume", CTRL_VOLUME, 100 }, + }; + +static int NUM_CONTROLLER = sizeof(Organ::synthCtrl)/sizeof(*(Organ::synthCtrl)); +static int NUM_INIT_CONTROLLER = NUM_CONTROLLER - 1; + +float* Organ::sine_table; +float* Organ::g_triangle_table; +float* Organ::g_pulse_table; +int Organ::useCount = 0; +double Organ::cb2amp_tab[MAX_ATTENUATION]; +unsigned Organ::freq256[128]; + +//--------------------------------------------------------- +// 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]; + } + +//--------------------------------------------------------- +// Organ +//--------------------------------------------------------- + +Organ::Organ(int sr) + : Mess(1) + { + idata = new int[NUM_CONTROLLER]; + setSampleRate(sr); + gui = 0; + + ++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); + + for (int i = 0; i < 128; ++i) { + double freq = 8.176 * exp(double(i)*log(2.0)/12.0); + freq256[i] = (int) (freq * ((double) RESOLUTION) / sr * 256.0); + } + int size = RESOLUTION; + int half = size / 2; + int slope = size / 10; + int i; + + // Initialize sine table. + sine_table = new float[size]; + for (i = 0; i < size; i++) + sine_table[i] = sin ((i * 2.0 * M_PI) / size) / 6.0; + + // Initialize triangle table. + g_triangle_table = new float[size]; + for (i = 0; i < half; i++) + g_triangle_table[i] = (4.0 / size * i - 1.0) / 6.0; + for (; i < size; i++) + g_triangle_table[i] = (4.0 / size * (size - i) - 1.0) / 6.0; + + // Initialize pulse table. + g_pulse_table = new float[size]; + for (i = 0; i < slope; i++) + g_pulse_table[i] = (((double) -i) / slope) / 6.0; + for (; i < half - slope; i++) + g_pulse_table[i] = -1.0 / 6.0; + for (; i < half + slope; i++) + g_pulse_table[i] = (((double) i - half) / slope) / 6.0; + for (; i < size - slope; i++) + g_pulse_table[i] = 1.0 / 6.0; + for (; i < size; i++) + g_pulse_table[i] = (((double) size - i) / slope) / 6.0; + } + +//--------------------------------------------------------- +// ~Organ +//--------------------------------------------------------- + +Organ::~Organ() + { + if (gui) + delete gui; + delete idata; + --useCount; + if (useCount == 0) { + delete[] g_pulse_table; + delete[] g_triangle_table; + delete[] sine_table; + } + } + +//--------------------------------------------------------- +// table_pos +//--------------------------------------------------------- + +static inline float table_pos (float* table, unsigned long freq_256, unsigned *accum) + { + *accum += freq_256; + while (*accum >= RESOLUTION * 256) + *accum -= RESOLUTION * 256; + return table[*accum >> 8]; + } + +//--------------------------------------------------------- +// init +//--------------------------------------------------------- + +bool Organ::init(const char* name) + { + gui = new OrganGui; + gui->setCaption(QString(name)); + gui->show(); + + for (int i = 0; i < NUM_CONTROLLER; ++i) + setController(0, synthCtrl[i].num, synthCtrl[i].val); + + for (int i = 0; i < VOICES; ++i) + voices[i].isOn = false; + return false; + } + +//--------------------------------------------------------- +// processMessages +// Called from host always, even if output path is unconnected. +//--------------------------------------------------------- + +void Organ::processMessages() +{ + //Process messages from the gui + // + // get and process all pending events from the + // synthesizer GUI + // + while (gui->fifoSize()) + { + MidiPlayEvent ev = gui->readEvent(); + if (ev.type() == ME_CONTROLLER) + { + // process local? + setController(ev.dataA(), ev.dataB()); + sendEvent(ev); + } + else + printf("Organ::process(): unknown event\n"); + } +} + +//--------------------------------------------------------- +// process +// Called from host, ONLY if output path is connected. +//--------------------------------------------------------- + +void Organ::process(float** ports, int offset, int sampleCount) + { + /* + // + // get and process all pending events from the + // synthesizer GUI + // + while (gui->fifoSize()) { + MidiPlayEvent ev = gui->readEvent(); + if (ev.type() == ME_CONTROLLER) { + // process local? + setController(ev.dataA(), ev.dataB()); + sendEvent(ev); + } + else + printf("Organ::process(): unknown event\n"); + } + */ + + float* buffer = *ports + offset; + for (int i = 0; i < VOICES; ++i) { + Voice* v = &voices[i]; + if (!v->isOn) + continue; + double vol = velo ? v->velocity : 1.0; + vol *= volume; + + unsigned freq_256 = freq256[v->pitch]; + unsigned* harm0_accum = &(v->harm0_accum); + unsigned* harm1_accum = &(v->harm1_accum); + unsigned* harm2_accum = &(v->harm2_accum); + unsigned* harm3_accum = &(v->harm3_accum); + unsigned* harm4_accum = &(v->harm4_accum); + unsigned* harm5_accum = &(v->harm5_accum); + + unsigned long freq_256_harm2, freq_256_harm3; + unsigned long freq_256_harm4, freq_256_harm5; + + float* reed_table = reed ? g_pulse_table : sine_table; + float* flute_table = flute ? g_triangle_table : sine_table; + + unsigned freq_256_harm0 = freq_256 / 2; + unsigned freq_256_harm1 = freq_256; + + if (brass) { + freq_256_harm2 = freq_256 * 2; + freq_256_harm3 = freq_256_harm2 * 2; + freq_256_harm4 = freq_256_harm3 * 2; + freq_256_harm5 = freq_256_harm4 * 2; + for (int i = 0; i < sampleCount; i++) { + int a1=0, a2=0; //prevent compiler warning: unitialized usage of vars a1 & a2 + switch(v->state1) { + case ATTACK: + if (v->envL1.step(&a1)) + break; + v->state1 = DECAY; + case DECAY: + if (v->envL2.step(&a1)) + break; + v->state1 = SUSTAIN; + case SUSTAIN: + a1 = sustain0; + break; + case RELEASE: + if (v->envL3.step(&a1)) + break; + v->state1 = OFF; + a1 = MAX_ATTENUATION; + break; + } + switch(v->state2) { + case ATTACK: + if (v->envH1.step(&a2)) + break; + v->state2 = DECAY; + case DECAY: + if (v->envH2.step(&a2)) + break; + v->state2 = SUSTAIN; + case SUSTAIN: + a2 = sustain1; + break; + case RELEASE: + if (v->envH3.step(&a2)) + break; + v->state2 = OFF; + a1 = MAX_ATTENUATION; + break; + } + if (v->state1 == OFF && v->state2 == OFF) { + v->isOn = false; + break; + } + buffer[i] += + (table_pos (sine_table, freq_256_harm0, harm0_accum) * harm0 + + table_pos (sine_table, freq_256_harm1, harm1_accum) * harm1 + + table_pos (reed_table, freq_256_harm2, harm2_accum) * harm2) + * cb2amp(a1) * vol + + (table_pos (sine_table, freq_256_harm3, harm3_accum) * harm3 + + table_pos (flute_table, freq_256_harm4, harm4_accum) * harm4 + + table_pos (flute_table, freq_256_harm5, harm5_accum) * harm5) + * cb2amp(a2) * vol; + } + } + else { + freq_256_harm2 = freq_256 * 3 / 2; + freq_256_harm3 = freq_256 * 2; + freq_256_harm4 = freq_256 * 3; + freq_256_harm5 = freq_256_harm3 * 2; + for (int i = 0; i < sampleCount; i++) { + int a1=0, a2=0;//prevent compiler warning: unitialized usage of vars a1 & a2 + switch(v->state1) { + case ATTACK: + if (v->envL1.step(&a1)) + break; + v->state1 = DECAY; + case DECAY: + if (v->envL2.step(&a1)) + break; + v->state1 = SUSTAIN; + case SUSTAIN: + a1 = sustain0; + break; + case RELEASE: + if (v->envL3.step(&a1)) + break; + v->state1 = OFF; + a1 = MAX_ATTENUATION; + break; + } + switch(v->state2) { + case ATTACK: + if (v->envH1.step(&a2)) + break; + v->state2 = DECAY; + case DECAY: + if (v->envH2.step(&a2)) + break; + v->state2 = SUSTAIN; + case SUSTAIN: + a2 = sustain1; + break; + case RELEASE: + if (v->envH3.step(&a2)) + break; + v->state2 = OFF; + a1 = MAX_ATTENUATION; + break; + } + if (v->state1 == OFF && v->state2 == OFF) { + v->isOn = false; + break; + } + buffer[i] += + (table_pos (sine_table, freq_256_harm0, harm0_accum) * harm0 + + table_pos (sine_table, freq_256_harm1, harm1_accum) * harm1 + + table_pos (sine_table, freq_256_harm2, harm2_accum) * harm2) + * cb2amp(a1) * vol + + (table_pos (reed_table, freq_256_harm3, harm3_accum) * harm3 + + table_pos (sine_table, freq_256_harm4, harm4_accum) * harm4 + + table_pos (flute_table, freq_256_harm5, harm5_accum) * harm5) + * cb2amp(a2) * vol; + } + } + } + } + +//--------------------------------------------------------- +// playNote +//--------------------------------------------------------- + +bool Organ::playNote(int channel, int pitch, int velo) + { + if (velo == 0) { + noteoff(channel, pitch); + return false; + } + for (int i = 0; i < VOICES; ++i) { + if (voices[i].isOn) + continue; + voices[i].isOn = true; + voices[i].pitch = pitch; + voices[i].channel = channel; + // velo is never 0 + voices[i].velocity = cb2amp(int(200 * log10((127.0 * 127)/(velo*velo)))); + voices[i].state1 = ATTACK; + voices[i].state2 = ATTACK; + voices[i].envL1.set(attack0, MAX_ATTENUATION, 0); + voices[i].envL2.set(decay0, MAX_ATTENUATION, sustain0); + voices[i].envL3.set(release0, sustain0, MAX_ATTENUATION); + + voices[i].envH1.set(attack1, MAX_ATTENUATION, 0); + voices[i].envH2.set(decay1, MAX_ATTENUATION, sustain1); + voices[i].envH3.set(release1, sustain1, MAX_ATTENUATION); + + voices[i].harm0_accum = 0; + voices[i].harm1_accum = 0; + voices[i].harm2_accum = 0; + voices[i].harm3_accum = 0; + voices[i].harm4_accum = 0; + voices[i].harm5_accum = 0; + return false; + } + printf("organ: voices overflow!\n"); + return false; + } + +//--------------------------------------------------------- +// noteoff +//--------------------------------------------------------- + +void Organ::noteoff(int channel, int pitch) + { + bool found = false; + for (int i = 0; i < VOICES; ++i) { + if (voices[i].isOn && (voices[i].pitch == pitch) + && (voices[i].channel == channel)) { + found = true; + voices[i].state1 = RELEASE; + voices[i].state2 = RELEASE; + } + } + if (!found) + printf("Organ: noteoff %d:%d not found\n", channel, pitch); + } + +//--------------------------------------------------------- +// setController +//--------------------------------------------------------- + +void Organ::setController(int ctrl, int data) + { + int sr = sampleRate(); + + // Changed By T356. + // Because of muse's auto-bias controllers, some of these negative-range + // controls need to apply the auto-bias correction. + + switch (ctrl) { + case HARM0: + //harm0 = cb2amp(-data); + harm0 = cb2amp(-data + 8192); + break; + case HARM1: + //harm1 = cb2amp(-data); + harm1 = cb2amp(-data + 8192); + break; + case HARM2: + //harm2 = cb2amp(-data); + harm2 = cb2amp(-data + 8192); + break; + case HARM3: + //harm3 = cb2amp(-data); + harm3 = cb2amp(-data + 8192); + break; + case HARM4: + //harm4 = cb2amp(-data); + harm4 = cb2amp(-data + 8192); + break; + case HARM5: + //harm5 = cb2amp(-data); + harm5 = cb2amp(-data + 8192); + break; + case ATTACK_LO: // maxval -> 500msec + attack0 = (data * sr) / 1000; + break; + case DECAY_LO: // maxval -> 5000msec + decay0 = (data * sr) / 1000; + break; + case SUSTAIN_LO: + //sustain0 = -data; + sustain0 = -data + 8192; + break; + case RELEASE_LO: + release0 = (data * sr) / 1000; + break; + case ATTACK_HI: + attack1 = (data * sr) / 1000; + break; + case DECAY_HI: + decay1 = (data * sr) / 1000; + break; + case SUSTAIN_HI: + //sustain1 = -data; + sustain1 = -data + 8192; + break; + case RELEASE_HI: + release1 = (data * sr) / 1000; + break; + case BRASS: + brass = data; + break; + case FLUTE: + flute = data; + break; + case REED: + reed = data; + break; + case VELO: + velo = data; + break; + case CTRL_VOLUME: + data &= 0x7f; + volume = data == 0 ? 0.0 : cb2amp(int(200 * log10((127.0 * 127)/(data*data)))); + break; + case CTRL_ALL_SOUNDS_OFF: + for (int i = 0; i < VOICES; ++i) + voices[i].isOn = false; + 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", ctrl, data); + return; + } + for (int i = 0; i < NUM_CONTROLLER; ++i) { + if (synthCtrl[i].num == ctrl) { + synthCtrl[i].val = data; + break; + } + } + } + +//--------------------------------------------------------- +// setController +//--------------------------------------------------------- + +bool Organ::setController(int channel, int ctrl, int data) + { + setController(ctrl, data); + + switch (ctrl) { + case HARM0: + case HARM1: + case HARM2: + case HARM3: + case HARM4: + case HARM5: + case ATTACK_LO: + case DECAY_LO: + case SUSTAIN_LO: + case RELEASE_LO: + case ATTACK_HI: + case DECAY_HI: + case SUSTAIN_HI: + case RELEASE_HI: + case BRASS: + case FLUTE: + case REED: + case VELO: + { + MidiPlayEvent ev(0, 0, channel, ME_CONTROLLER, ctrl, data); + #ifdef ORGAN_DEBUG + fprintf(stderr, "OrganGui:setController before gui->writeEvent ctrl:%d data:%d\n", ctrl, data); + #endif + + gui->writeEvent(ev); + } + break; + default: + break; + } + return false; + } + +//--------------------------------------------------------- +// sysex +//--------------------------------------------------------- + +bool Organ::sysex(int n, const unsigned char* data) + { + #ifdef ORGAN_DEBUG + printf("Organ: sysex\n"); + #endif + if (unsigned(n) != (NUM_INIT_CONTROLLER * sizeof(int))) { + printf("Organ: unknown sysex\n"); + return false; + } + int* s = (int*) data; + for (int i = 0; i < NUM_INIT_CONTROLLER; ++i) { + int val = *s++; + #ifdef ORGAN_DEBUG + printf("Organ: sysex before setController num:%d val:%d\n", synthCtrl[i].num, val); + #endif + setController(0, synthCtrl[i].num, val); + } + return false; + } + +//--------------------------------------------------------- +// getInitData +//--------------------------------------------------------- + +void Organ::getInitData(int* n, const unsigned char**p) const + { + int* d = idata; + for (int i = 0; i < NUM_INIT_CONTROLLER; ++i) + *d++ = synthCtrl[i].val; + *n = NUM_INIT_CONTROLLER * sizeof(int); // sizeof(idata); + *p = (unsigned char*)idata; + } + +//--------------------------------------------------------- +// MESS +//--------------------------------------------------------- + +//--------------------------------------------------------- +// getControllerInfo +//--------------------------------------------------------- + +int Organ::getControllerInfo(int id, const char** name, int* controller, + int* min, int* max, int* initval) const + { + if (id >= NUM_CONTROLLER) + return 0; + *controller = synthCtrl[id].num; + *name = synthCtrl[id].name; + *initval = synthCtrl[id].val; + + if(synthCtrl[id].num == CTRL_VOLUME) + { + *min = 0; + *max = 127; + } + else + gui->getControllerMinMax(id,min,max); + + //*min = 0; + //*max = 128*128-1; + return ++id; + } + +//--------------------------------------------------------- +// 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, QWidget*, QString* projectPathPtr, 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/muse2/synti/organ/organ.h b/muse2/synti/organ/organ.h new file mode 100644 index 00000000..308646e1 --- /dev/null +++ b/muse2/synti/organ/organ.h @@ -0,0 +1,198 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: organ.h,v 1.5.2.3 2009/11/19 04:20:33 terminator356 Exp $ +// +// Parts of this file taken from: +// Organ - Additive Organ Synthesizer Voice +// Copyright (c) 1999, 2000 David A. Bartold +// +// (C) Copyright 2001-2004 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __ORGAN_H__ +#define __ORGAN_H__ + +#include "muse/midictrl.h" +#include "libsynti/mess.h" + +#define RESOLUTION (16384*2) +#define VOICES 128 // max polyphony + +class OrganGui; + +static const int MAX_ATTENUATION = 960; + +enum EnvelopeState { + ATTACK, + DECAY, + SUSTAIN, + RELEASE, + OFF + }; + +//--------------------------------------------------------- +// Envelope +//--------------------------------------------------------- + +struct Envelope { + int ticks; // len of segment + int error, delta, schritt; + int y, yinc; + + void set(int t, int y1, int y2) { + ticks = t; + y = y1; + int dy = y2 - y1; + int dx = t; + error = -dx; + schritt = 2*dx; + if (dy < 0) { + yinc = -1; + delta = -2 * dy; + } + else { + yinc = 1; + delta = 2 * dy; + } + } + + // return false on envelope end + bool step(int* a) { + *a = y; + if (ticks == 0) + return false; + error += delta; + while (error > 0) { + y += yinc; + error -= schritt; + } + --ticks; + return true; + } + }; + +static const int HARM0 = 0 + CTRL_RPN14_OFFSET; +static const int HARM1 = 1 + CTRL_RPN14_OFFSET; +static const int HARM2 = 2 + CTRL_RPN14_OFFSET; +static const int HARM3 = 3 + CTRL_RPN14_OFFSET; +static const int HARM4 = 4 + CTRL_RPN14_OFFSET; +static const int HARM5 = 5 + CTRL_RPN14_OFFSET; +static const int ATTACK_LO = 6 + CTRL_RPN14_OFFSET; +static const int DECAY_LO = 7 + CTRL_RPN14_OFFSET; +static const int SUSTAIN_LO = 8 + CTRL_RPN14_OFFSET; +static const int RELEASE_LO = 9 + CTRL_RPN14_OFFSET; +static const int ATTACK_HI = 10 + CTRL_RPN14_OFFSET; +static const int DECAY_HI = 11 + CTRL_RPN14_OFFSET; +static const int SUSTAIN_HI = 12 + CTRL_RPN14_OFFSET; +static const int RELEASE_HI = 13 + CTRL_RPN14_OFFSET; +static const int BRASS = 14 + CTRL_RPN14_OFFSET; +static const int FLUTE = 15 + CTRL_RPN14_OFFSET; +static const int REED = 16 + CTRL_RPN14_OFFSET; +static const int VELO = 17 + CTRL_RPN14_OFFSET; + +//--------------------------------------------------------- +// SynthCtrl +//--------------------------------------------------------- + +struct SynthCtrl { + const char* name; + int num; + int val; + }; + +//--------------------------------------------------------- +// Voice +//--------------------------------------------------------- + +struct Voice { + bool isOn; + int pitch; + int channel; + + double velocity; + + int state1, state2; + Envelope envL1, envL2, envL3; + Envelope envH1, envH2, envH3; + + unsigned harm0_accum; + unsigned harm1_accum; + unsigned harm2_accum; + unsigned harm3_accum; + unsigned harm4_accum; + unsigned harm5_accum; + }; + +//--------------------------------------------------------- +// Preset +//--------------------------------------------------------- + +struct Preset { + char* name; + bool brass, flute, reed; + int attack0, attack1; + int release0, release1; + int decay0, decay1; + double harm0, harm1, harm2, harm3, harm4, harm5; + bool velo; + }; + +//--------------------------------------------------------- +// Organ +//--------------------------------------------------------- + +class Organ : public Mess { + static int useCount; + + static double cb2amp_tab[MAX_ATTENUATION]; + static unsigned freq256[128]; + static double cb2amp(int cb); + + int* idata; // buffer for init data + + bool brass, flute, reed; + int attack0, attack1; + int release0, release1; + int decay0, decay1; // ticks + int sustain0, sustain1; // centibel + bool velo; + double volume; + + double harm0, harm1, harm2, harm3, harm4, harm5; + + Voice voices[VOICES]; + + static float* sine_table; + static float* g_triangle_table; + static float* g_pulse_table; + + void noteoff(int channel, int pitch); + void setController(int ctrl, int val); + + + OrganGui* gui; + + public: + virtual void processMessages(); + 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 int getControllerInfo(int, const char**, int*, int*, int*, int*) const; + virtual void getInitData(int*, const unsigned char**) const; + + 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); + virtual bool sysex(int, const unsigned char*); + static SynthCtrl synthCtrl[]; + Organ(int sampleRate); + ~Organ(); + bool init(const char* name); + }; + +#endif + diff --git a/muse2/synti/organ/organgui.cpp b/muse2/synti/organ/organgui.cpp new file mode 100644 index 00000000..2f68b655 --- /dev/null +++ b/muse2/synti/organ/organgui.cpp @@ -0,0 +1,189 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: organgui.cpp,v 1.16.2.3 2009/11/16 04:30:46 terminator356 Exp $ +// +// This is a simple GUI implemented with QT for +// organ software synthesizer. +// +// (C) Copyright 2001-2004 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "organgui.h" +#include "muse/midi.h" +#include "muse/midictrl.h" + +//#define ORGANGUI_DEBUG + +//--------------------------------------------------------- +// OrganGui +//--------------------------------------------------------- + +OrganGui::OrganGui() + : OrganGuiBase(0, "organgui", Qt::WType_TopLevel), MessGui() + { + QSocketNotifier* s = new QSocketNotifier(readFd, QSocketNotifier::Read); + connect(s, SIGNAL(activated(int)), SLOT(readMessage(int))); + + dctrl[0] = SynthGuiCtrl(p1, lcd1, SynthGuiCtrl::SLIDER); + dctrl[1] = SynthGuiCtrl(p2, lcd2, SynthGuiCtrl::SLIDER); + dctrl[2] = SynthGuiCtrl(p3, lcd3, SynthGuiCtrl::SLIDER); + dctrl[3] = SynthGuiCtrl(p4, lcd4, SynthGuiCtrl::SLIDER); + dctrl[4] = SynthGuiCtrl(p5, lcd5, SynthGuiCtrl::SLIDER); + dctrl[5] = SynthGuiCtrl(p6, lcd6, SynthGuiCtrl::SLIDER); + dctrl[6] = SynthGuiCtrl(p7, lcd7, SynthGuiCtrl::SLIDER); + dctrl[7] = SynthGuiCtrl(p8, lcd8, SynthGuiCtrl::SLIDER); + dctrl[8] = SynthGuiCtrl(p9, lcd9, SynthGuiCtrl::SLIDER); + dctrl[9] = SynthGuiCtrl(p10, lcd10, SynthGuiCtrl::SLIDER); + dctrl[10] = SynthGuiCtrl(p11, lcd11, SynthGuiCtrl::SLIDER); + dctrl[11] = SynthGuiCtrl(p12, lcd12, SynthGuiCtrl::SLIDER); + dctrl[12] = SynthGuiCtrl(p13, lcd13, SynthGuiCtrl::SLIDER); + dctrl[13] = SynthGuiCtrl(p14, lcd14, SynthGuiCtrl::SLIDER); + dctrl[14] = SynthGuiCtrl(sw1, 0, SynthGuiCtrl::SWITCH); + dctrl[15] = SynthGuiCtrl(sw3, 0, SynthGuiCtrl::SWITCH); + dctrl[16] = SynthGuiCtrl(sw2, 0, SynthGuiCtrl::SWITCH); + dctrl[17] = SynthGuiCtrl(sw4, 0, SynthGuiCtrl::SWITCH); + + map = new QSignalMapper(this); + for (int i = 0; i < NUM_GUI_CONTROLLER; ++i) { + map->setMapping(dctrl[i].editor, i); + if (dctrl[i].type == SynthGuiCtrl::SLIDER) + connect((QSlider*)(dctrl[i].editor), SIGNAL(valueChanged(int)), map, SLOT(map())); + else if (dctrl[i].type == SynthGuiCtrl::SWITCH) + connect((QCheckBox*)(dctrl[i].editor), SIGNAL(toggled(bool)), map, SLOT(map())); + } + connect(map, SIGNAL(mapped(int)), this, SLOT(ctrlChanged(int))); + + // work around for probable QT/WM interaction bug. + // for certain window managers, e.g xfce, this window is + // is displayed although not specifically set to show(); + // bug: 2811156 Softsynth GUI unclosable with XFCE4 (and a few others) + show(); + hide(); + } + +//--------------------------------------------------------- +// ctrlChanged +//--------------------------------------------------------- + +void OrganGui::ctrlChanged(int idx) + { + SynthGuiCtrl* ctrl = &dctrl[idx]; + int val = 0; + if (ctrl->type == SynthGuiCtrl::SLIDER) { + QSlider* slider = (QSlider*)(ctrl->editor); + val = slider->value(); + // By T356. Apply auto-bias center value. + if(slider->minValue() < 0) + val += 8192; + } + else if (ctrl->type == SynthGuiCtrl::SWITCH) { + val = ((QCheckBox*)(ctrl->editor))->isChecked(); + } + sendController(0, idx + CTRL_RPN14_OFFSET, val); + } + +//--------------------------------------------------------- +// getControllerInfo +// return min max values for controllers +//--------------------------------------------------------- +int OrganGui::getControllerMinMax(int id, int* min, int* max) const + { + if (id >= NUM_GUI_CONTROLLER) + return 0; + + const SynthGuiCtrl* ctrl = (const SynthGuiCtrl*)&dctrl[id]; + //int val = 0; + if (ctrl->type == SynthGuiCtrl::SLIDER) { + QSlider* slider = (QSlider*)(ctrl->editor); + *max = slider->maxValue(); + *min = slider->minValue(); + //val = (slider->value() * 16383 + max/2) / max; + + //val = 16383 + 1/2 + } + else if (ctrl->type == SynthGuiCtrl::SWITCH) { + //val = ((QCheckBox*)(ctrl->editor))->isOn(); + *min=0; + *max=1; + } + return ++id; + } + +//--------------------------------------------------------- +// setParam +// set param in gui +//--------------------------------------------------------- + +void OrganGui::setParam(int param, int val) + { + #ifdef ORGANGUI_DEBUG + fprintf(stderr, "OrganGui:setParam param:%d val:%d\n", param, val); + #endif + + param &= 0xfff; + if (param >= int(sizeof(dctrl)/sizeof(*dctrl))) { + fprintf(stderr, "OrganGui: set unknown Ctrl 0x%x to 0x%x\n", param, val); + return; + } + SynthGuiCtrl* ctrl = &dctrl[param]; + ctrl->editor->blockSignals(true); + if (ctrl->type == SynthGuiCtrl::SLIDER) { + QSlider* slider = (QSlider*)(ctrl->editor); +// int max = slider->maxValue(); +// if(val < 0) val = (val * max + 8191) / 16383 - 1; +// else val = (val * max + 8191) / 16383; + + // By T356. Apply auto-bias center value. + if(slider->minValue() < 0) + val -= 8192; + + #ifdef ORGANGUI_DEBUG + fprintf(stderr, "OrganGui:setParam setting slider val:%d\n", val); + #endif + + slider->setValue(val); + if (ctrl->label) + ((QSpinBox*)(ctrl->label))->setValue(val); + } + else if (ctrl->type == SynthGuiCtrl::SWITCH) { + ((QCheckBox*)(ctrl->editor))->setChecked(val); + } + ctrl->editor->blockSignals(false); + } + +//--------------------------------------------------------- +// processEvent +//--------------------------------------------------------- + +void OrganGui::processEvent(const MidiPlayEvent& 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/muse2/synti/organ/organgui.h b/muse2/synti/organ/organgui.h new file mode 100644 index 00000000..9f133de7 --- /dev/null +++ b/muse2/synti/organ/organgui.h @@ -0,0 +1,43 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: organgui.h,v 1.6.2.1 2005/12/29 23:33:50 spamatica Exp $ +// +// (C) Copyright 2001-2004 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __ORGANGUI_H__ +#define __ORGANGUI_H__ + +#include "organguibase.h" +#include "organ.h" +#include "libsynti/gui.h" +#include "libsynti/mpevent.h" + +class QSignalMapper; + +#define NUM_GUI_CONTROLLER 18 + +//--------------------------------------------------------- +// OrganGui +//--------------------------------------------------------- + +class OrganGui : public OrganGuiBase, public MessGui { + Q_OBJECT + + QSignalMapper* map; + SynthGuiCtrl dctrl[NUM_GUI_CONTROLLER]; + void setParam(int, int); + + private slots: + void ctrlChanged(int idx); + void readMessage(int); + + public: + virtual void processEvent(const MidiPlayEvent&); + int getControllerMinMax(int id, int* min, int* max) const; + OrganGui(); + }; + +#endif + diff --git a/muse2/synti/organ/organguibase.ui b/muse2/synti/organ/organguibase.ui new file mode 100644 index 00000000..1a87fee8 --- /dev/null +++ b/muse2/synti/organ/organguibase.ui @@ -0,0 +1,1219 @@ + +OrganGuiBase + + + OrganGuiBase + + + + 0 + 0 + 534 + 366 + + + + + 7 + 5 + 0 + 0 + + + + + 198 + 205 + 220 + + + + MusE: Organ + + + + unnamed + + + 4 + + + 6 + + + + GroupBox1 + + + + 7 + 7 + 0 + 0 + + + + Drawbars + + + + unnamed + + + 6 + + + 2 + + + + TextLabel1 + + + 16' + + + + + TextLabel4 + + + 4' + + + + + TextLabel5 + + + 2 2/3' + + + + + TextLabel6 + + + 2' + + + + + TextLabel2 + + + 5 1/3' + + + + + TextLabel3 + + + 8' + + + + + p2 + + + + 0 + 0 + 0 + + + + + 170 + 85 + 0 + + + + -960 + + + 0 + + + 1 + + + Horizontal + + + NoMarks + + + 10 + + + + + p3 + + + + 255 + 255 + 255 + + + + -960 + + + 0 + + + 1 + + + Horizontal + + + NoMarks + + + 10 + + + + + p4 + + + + 255 + 255 + 255 + + + + -960 + + + 0 + + + 1 + + + Horizontal + + + NoMarks + + + 10 + + + + + p5 + + + + 255 + 255 + 255 + + + + + 0 + 0 + 0 + + + + -960 + + + 0 + + + 1 + + + Horizontal + + + NoMarks + + + 10 + + + + + p6 + + + + 255 + 255 + 255 + + + + -960 + + + 0 + + + 1 + + + Horizontal + + + NoMarks + + + 10 + + + + + p1 + + + + 7 + 0 + 0 + 0 + + + + + 170 + 85 + 0 + + + + -960 + + + 0 + + + 1 + + + Horizontal + + + NoMarks + + + 10 + + + + + lcd1 + + + 0 + + + -960 + + + + + lcd2 + + + 0 + + + -960 + + + 10 + + + + + lcd3 + + + 0 + + + -960 + + + 10 + + + + + lcd4 + + + 0 + + + -960 + + + 10 + + + + + lcd5 + + + 0 + + + -960 + + + 10 + + + + + lcd6 + + + 0 + + + -960 + + + 10 + + + + + + + GroupBox4 + + + + 7 + 7 + 0 + 0 + + + + Envelope Hi + + + + unnamed + + + 11 + + + 2 + + + + TextLabel14 + + + Release + + + + + TextLabel13 + + + Sustain + + + + + TextLabel12 + + + Decay + + + + + TextLabel11 + + + + 5 + 4 + 0 + 0 + + + + Attack + + + + + p14 + + + 500 + + + 1 + + + Horizontal + + + NoMarks + + + 50 + + + + + p13 + + + -960 + + + 0 + + + 1 + + + Horizontal + + + NoMarks + + + 10 + + + + + p12 + + + 5000 + + + 1 + + + Horizontal + + + NoMarks + + + 500 + + + + + lcd11 + + + + 5 + 0 + 0 + 0 + + + + ms + + + 500 + + + + + p11 + + + + 7 + 0 + 0 + 0 + + + + 500 + + + 1 + + + Horizontal + + + NoMarks + + + 50 + + + + + lcd12 + + + + 5 + 0 + 0 + 0 + + + + ms + + + 5000 + + + + + lcd13 + + + + 5 + 0 + 0 + 0 + + + + cB + + + 0 + + + -960 + + + + + lcd14 + + + + 5 + 0 + 0 + 0 + + + + ms + + + 500 + + + + + + + GroupBox2 + + + + 7 + 7 + 0 + 0 + + + + Envelope Lo + + + AlignLeft + + + + unnamed + + + 11 + + + 2 + + + + TextLabel7 + + + Attack + + + + + TextLabel8 + + + Decay + + + + + TextLabel9 + + + Sustain + + + + + TextLabel10 + + + Release + + + + + p7 + + + + 7 + 0 + 0 + 0 + + + + + 80 + 0 + + + + 500 + + + 1 + + + Horizontal + + + NoMarks + + + 50 + + + + + p8 + + + 5000 + + + 1 + + + Horizontal + + + NoMarks + + + 500 + + + + + p9 + + + -960 + + + 0 + + + 1 + + + Horizontal + + + NoMarks + + + 10 + + + + + p10 + + + 500 + + + 1 + + + Horizontal + + + NoMarks + + + 50 + + + + + lcd7 + + + + 1 + 0 + 0 + 0 + + + + ms + + + 500 + + + + + lcd8 + + + + 1 + 0 + 0 + 0 + + + + ms + + + 5000 + + + + + lcd9 + + + + 1 + 0 + 0 + 0 + + + + cB + + + 0 + + + -960 + + + 0 + + + + + lcd10 + + + + 1 + 0 + 0 + 0 + + + + ms + + + 500 + + + + + + + layout1 + + + + unnamed + + + + TextLabel1_2 + + + + 7 + 5 + 0 + 0 + + + + + 0 + 0 + 255 + + + + + 198 + 205 + 220 + + + + + 48 + + + + O-1 + + + AlignCenter + + + + + GroupBox3 + + + + 7 + 7 + 0 + 0 + + + + Oscillator + + + + unnamed + + + 11 + + + 2 + + + + sw1 + + + + 5 + 1 + 0 + 0 + + + + Brass + + + + + sw2 + + + + 5 + 1 + 0 + 0 + + + + Reed + + + + + sw3 + + + + 5 + 1 + 0 + 0 + + + + Flute + + + + + spacer1 + + + Vertical + + + Expanding + + + + 20 + 20 + + + + + + sw4 + + + Velocity + + + + + + + + + + + p11 + valueChanged(int) + lcd11 + setValue(int) + + + p12 + valueChanged(int) + lcd12 + setValue(int) + + + p13 + valueChanged(int) + lcd13 + setValue(int) + + + p14 + valueChanged(int) + lcd14 + setValue(int) + + + p7 + valueChanged(int) + lcd7 + setValue(int) + + + p8 + valueChanged(int) + lcd8 + setValue(int) + + + p9 + valueChanged(int) + lcd9 + setValue(int) + + + p10 + valueChanged(int) + lcd10 + setValue(int) + + + p1 + valueChanged(int) + lcd1 + setValue(int) + + + p2 + valueChanged(int) + lcd2 + setValue(int) + + + p3 + valueChanged(int) + lcd3 + setValue(int) + + + p4 + valueChanged(int) + lcd4 + setValue(int) + + + p5 + valueChanged(int) + lcd5 + setValue(int) + + + p6 + valueChanged(int) + lcd6 + setValue(int) + + + lcd1 + valueChanged(int) + p1 + setValue(int) + + + lcd2 + valueChanged(int) + p2 + setValue(int) + + + lcd3 + valueChanged(int) + p3 + setValue(int) + + + lcd4 + valueChanged(int) + p4 + setValue(int) + + + lcd5 + valueChanged(int) + p5 + setValue(int) + + + lcd6 + valueChanged(int) + p6 + setValue(int) + + + lcd7 + valueChanged(int) + p7 + setValue(int) + + + lcd8 + valueChanged(int) + p8 + setValue(int) + + + lcd9 + valueChanged(int) + p9 + setValue(int) + + + lcd10 + valueChanged(int) + p10 + setValue(int) + + + lcd11 + valueChanged(int) + p11 + setValue(int) + + + lcd12 + valueChanged(int) + p12 + setValue(int) + + + lcd13 + valueChanged(int) + p13 + setValue(int) + + + lcd14 + valueChanged(int) + p14 + setValue(int) + + + + p1 + p3 + p2 + p4 + p5 + p6 + p7 + p8 + p9 + p10 + p11 + p12 + p13 + p14 + sw1 + sw2 + sw3 + + + diff --git a/muse2/synti/s1/Makefile.am b/muse2/synti/s1/Makefile.am new file mode 100644 index 00000000..9b5f87db --- /dev/null +++ b/muse2/synti/s1/Makefile.am @@ -0,0 +1,13 @@ +include $(top_srcdir)/common.am +include $(top_srcdir)/synti/synti-install.am + +MOCBASES = + +UICBASES = + +synthi_LTLIBRARIES = s1.la + +s1_la_SOURCES = s1.cpp +s1_la_LIBADD = ../libsynti/libsynti.la +s1_la_LDFLAGS = -module -avoid-version + diff --git a/muse2/synti/s1/Makefile.in b/muse2/synti/s1/Makefile.in new file mode 100644 index 00000000..a42c132c --- /dev/null +++ b/muse2/synti/s1/Makefile.in @@ -0,0 +1,634 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/common.am $(top_srcdir)/synti/synti-install.am +subdir = synti/s1 +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal-include.m4 \ + $(top_srcdir)/m4/alsa.m4 $(top_srcdir)/m4/docbook.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(synthidir)" +LTLIBRARIES = $(synthi_LTLIBRARIES) +s1_la_DEPENDENCIES = ../libsynti/libsynti.la +am_s1_la_OBJECTS = s1.lo +s1_la_OBJECTS = $(am_s1_la_OBJECTS) +s1_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) \ + $(s1_la_LDFLAGS) $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +CXXLD = $(CXX) +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(s1_la_SOURCES) +DIST_SOURCES = $(s1_la_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DOCBOOKSTYLE = @DOCBOOKSTYLE@ +DOCBOOKTARGETS = @DOCBOOKTARGETS@ +DOT = @DOT@ +DOTPATH = @DOTPATH@ +DOXYGEN = @DOXYGEN@ +DOXYGEN_TREEVIEW = @DOXYGEN_TREEVIEW@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FLUIDSYNTHDIRS = @FLUIDSYNTHDIRS@ +FST_CFLAGS = @FST_CFLAGS@ +FST_LIBS = @FST_LIBS@ +Fluidsynth_CFLAGS = @Fluidsynth_CFLAGS@ +Fluidsynth_LIBS = @Fluidsynth_LIBS@ +GIVERTCAP = @GIVERTCAP@ +GREP = @GREP@ +HAVEDOT = @HAVEDOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_LIBS = @JACK_LIBS@ +JADE = @JADE@ +LASH_CFLAGS = @LASH_CFLAGS@ +LASH_LIBS = @LASH_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LO_CFLAGS = @LO_CFLAGS@ +LO_LIBS = @LO_LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MUSECXXFLAGS = @MUSECXXFLAGS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NSGMLS = @NSGMLS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PCH = @PCH@ +PERL = @PERL@ +PKG_CONFIG = @PKG_CONFIG@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIB = @PYTHON_LIB@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QTDIR_BIN = @QTDIR_BIN@ +QTDIR_INC = @QTDIR_INC@ +QT_LIBS = @QT_LIBS@ +RANLIB = @RANLIB@ +SAMPLERATE_CFLAGS = @SAMPLERATE_CFLAGS@ +SAMPLERATE_LIBS = @SAMPLERATE_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ +SNDFILE_LIBS = @SNDFILE_LIBS@ +STRIP = @STRIP@ +SUIDBUILD = @SUIDBUILD@ +SUIDINSTALL = @SUIDINSTALL@ +USE_SSE = @USE_SSE@ +UUID_CFLAGS = @UUID_CFLAGS@ +UUID_LIBS = @UUID_LIBS@ +VERSION = @VERSION@ +XMKMF = @XMKMF@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +have_docbook = @have_docbook@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +synth_fluid = @synth_fluid@ +synth_fluidsynth = @synth_fluidsynth@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AM_CXXFLAGS = $(MUSECXXFLAGS) -I.. -I$(top_srcdir)/synti \ + -I$(top_srcdir)/muse/widgets -DQT_SHARED -DQT_THREAD_SUPPORT \ + -DQT_PLUGIN $(QTDIR_INC) -DQT3_SUPPORT +AM_CPPFLAGS = +MOC = $(QTDIR_BIN)/moc +#UIC = $(QTDIR_BIN)/uic3 +UIC = /usr/bin/uic3 +UIFILES = $(wildcard *.ui) +MOCFILES = $(shell for h in $(filter %.h,$(SOURCES)); do \ + if grep -q Q_OBJECT $$h; then \ + echo $$h | sed "s/\(.*\)\.h/moc_\1.cpp/"; \ + fi; \ + done) + +BUILT_SOURCES = $(MOCFILES) $(UIFILES:%.ui=%.h) +MOSTLYCLEANFILES = $(MOCFILES) $(UIFILES:%.ui=%.h) +SUFFIXES = .ui .h.gch +synthidir = $(pkglibdir)/synthi +MOCBASES = +UICBASES = +synthi_LTLIBRARIES = s1.la +s1_la_SOURCES = s1.cpp +s1_la_LIBADD = ../libsynti/libsynti.la +s1_la_LDFLAGS = -module -avoid-version +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: .ui .h.gch .cpp .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/common.am $(top_srcdir)/synti/synti-install.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu synti/s1/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu synti/s1/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-synthiLTLIBRARIES: $(synthi_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(synthidir)" || $(MKDIR_P) "$(DESTDIR)$(synthidir)" + @list='$(synthi_LTLIBRARIES)'; test -n "$(synthidir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(synthidir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(synthidir)"; \ + } + +uninstall-synthiLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(synthi_LTLIBRARIES)'; test -n "$(synthidir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(synthidir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(synthidir)/$$f"; \ + done + +clean-synthiLTLIBRARIES: + -test -z "$(synthi_LTLIBRARIES)" || rm -f $(synthi_LTLIBRARIES) + @list='$(synthi_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +s1.la: $(s1_la_OBJECTS) $(s1_la_DEPENDENCIES) + $(s1_la_LINK) -rpath $(synthidir) $(s1_la_OBJECTS) $(s1_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s1.Plo@am__quote@ + +.cpp.o: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< + +.cpp.obj: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.cpp.lo: +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-am +all-am: Makefile $(LTLIBRARIES) +installdirs: + for dir in "$(DESTDIR)$(synthidir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +clean: clean-am + +clean-am: clean-generic clean-libtool clean-synthiLTLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-synthiLTLIBRARIES + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-synthiLTLIBRARIES + +.MAKE: all check install install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-synthiLTLIBRARIES ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip install-synthiLTLIBRARIES installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-synthiLTLIBRARIES + + +de: + @for base in $(MOCFILES); do echo -e "\t$${base}.cpp $${base}.h \\"; done + +nde: + @for base in $(MOCFILES); do echo -e "\tmoc_$${base}.cpp \\"; done + +.ui.o: %.h + $(UIC) -L $(top_srcdir)/muse/widgets -o $*.cpp -impl $*.h $*.ui + $(MOC) $*.h >> $*.cpp + $(CXXCOMPILE) -c $*.cpp -o $*.o + $(RM) $*.cpp moc_$*.cpp moc_$*.o + +.ui.lo: %.h + $(UIC) -L $(top_srcdir)/muse/widgets -o $*.cpp -impl $*.h $*.ui + $(MOC) $*.h >> $*.cpp + $(LTCXXCOMPILE) -c $*.cpp -o $*.lo + $(RM) $*.cpp moc_$*.cpp moc_$*.lo moc_$*.o + +moc_%.cpp: %.h + $(MOC) $< -o $@ + +%.h: %.ui + $(UIC) -o $@ $< +# $(UIC) -L $(top_srcdir)/muse/widgets -o $@ $< + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/muse2/synti/s1/s1.cpp b/muse2/synti/s1/s1.cpp new file mode 100644 index 00000000..c73615bd --- /dev/null +++ b/muse2/synti/s1/s1.cpp @@ -0,0 +1,227 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: s1.cpp,v 1.9.2.5 2009/11/19 04:20:33 terminator356 Exp $ +// +// S1 - simple mono demo synthesizer +// - plays only one note at a time +// - has no gui nor any controller +// +// Version 0.2: stop note on wave zero crossing to avoid +// clicks +// +// (C) Copyright 2001-2004 Werner Schweer (ws@seh.de) +//========================================================= + +#include +#include +#include +#include + +#include "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; + bool _showGui; + + int param; + + virtual void note(int channel, int pitch, int velo); + //virtual void processMessages(); + virtual void process(float** buffer, int offset, int n); + virtual bool hasGui() const { return true; } + virtual bool guiVisible() const { return _showGui; } + virtual void showGui(bool); + virtual bool setController(int channel, int ctrl, int val); + virtual int getControllerInfo(int id, const char** name, int* ctrl, int* min, int* max, int* initval) const; + + 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; + + param = 0; + + _showGui=false; + showGui(true); + } + +//--------------------------------------------------------- +// ~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; + float sample1, sample2; + 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; + + sample1 = wave_table[accu >> 8]; // sinus component + + if (sample1< 0.0f) // square wave component + sample2 = -0.4; + else + sample2 = 0.4; + + sample = ((1.0-float(param)/127.0)*sample1 + (float(param)/127.0)*sample2) / 2.0; + + // + // 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 +//--------------------------------------------------------- + + +void S1::showGui(bool show) + { + if (show) + QMessageBox::information( NULL, "S1", + "S1 is a demo synth mainly for\n" + "developers wishing to learn\n" + "how to make a M.E.S.S synth.\n" + "\n" + "One modulation parameter is available,\n" + "it sweeps the signal between square and\n" + "sinus wave.\n", 1 ); + } + +bool S1::setController(int, int ctrl, int val) + { + if (ctrl == 1) { + param = val; + } + return true; + } + +int S1::getControllerInfo(int id, const char** name, int* ctrl, int* min, int* max, int* initval) const + { + if (id == 0) { + *name = "Modulation"; + *ctrl = 1; + *min = 0; + *max = 127; + *initval = 0; + return 1; + } + else + return 0; + } + +//--------------------------------------------------------- +// inst +//--------------------------------------------------------- +class QWidget; + + +static Mess* instantiate(int sr, QWidget*, QString* projectPathPtr, 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/muse2/synti/simpledrums/COPYING b/muse2/synti/simpledrums/COPYING new file mode 100644 index 00000000..5c3cefc2 --- /dev/null +++ b/muse2/synti/simpledrums/COPYING @@ -0,0 +1,3 @@ +COPYING +--------------------------------------- +This software is licensed under GNU GPL. diff --git a/muse2/synti/simpledrums/Makefile.am b/muse2/synti/simpledrums/Makefile.am new file mode 100644 index 00000000..16b77dc5 --- /dev/null +++ b/muse2/synti/simpledrums/Makefile.am @@ -0,0 +1,20 @@ +include $(top_srcdir)/common.am +include $(top_srcdir)/synti/synti-install.am + +AM_CXXFLAGS +=-fPIC -O3 -fno-rtti -ffast-math -fno-exceptions -include $(top_srcdir)/all-pic.h + +synthi_LTLIBRARIES = simpledrums.la + +simpledrums_la_SOURCES = simpledrums.h simpledrums.cpp common.h \ + simpledrumsgui.cpp simpledrumsgui.h \ + ssplugin.h ssplugin.cpp ssplugingui.h ssplugingui.cpp \ + simpledrumsguibase.ui sspluginchooserbase.ui + +nodist_simpledrums_la_SOURCES = moc_simpledrumsgui.cpp moc_ssplugingui.cpp + +simpledrums_la_LIBADD = ../libsynti/libsynti.la -lsamplerate +simpledrums_la_LDFLAGS = -module -avoid-version + +CLEANFILES = $(wildcard *.ui~) +EXTRA_DIST = README ReleaseNotes.txt COPYING + diff --git a/muse2/synti/simpledrums/Makefile.in b/muse2/synti/simpledrums/Makefile.in new file mode 100644 index 00000000..9526cba6 --- /dev/null +++ b/muse2/synti/simpledrums/Makefile.in @@ -0,0 +1,661 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/common.am $(top_srcdir)/synti/synti-install.am \ + COPYING +subdir = synti/simpledrums +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal-include.m4 \ + $(top_srcdir)/m4/alsa.m4 $(top_srcdir)/m4/docbook.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(synthidir)" +LTLIBRARIES = $(synthi_LTLIBRARIES) +simpledrums_la_DEPENDENCIES = ../libsynti/libsynti.la +am_simpledrums_la_OBJECTS = simpledrums.lo simpledrumsgui.lo \ + ssplugin.lo ssplugingui.lo simpledrumsguibase.lo \ + sspluginchooserbase.lo +nodist_simpledrums_la_OBJECTS = moc_simpledrumsgui.lo \ + moc_ssplugingui.lo +simpledrums_la_OBJECTS = $(am_simpledrums_la_OBJECTS) \ + $(nodist_simpledrums_la_OBJECTS) +simpledrums_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ + $(CXXFLAGS) $(simpledrums_la_LDFLAGS) $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +CXXLD = $(CXX) +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(simpledrums_la_SOURCES) $(nodist_simpledrums_la_SOURCES) +DIST_SOURCES = $(simpledrums_la_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DOCBOOKSTYLE = @DOCBOOKSTYLE@ +DOCBOOKTARGETS = @DOCBOOKTARGETS@ +DOT = @DOT@ +DOTPATH = @DOTPATH@ +DOXYGEN = @DOXYGEN@ +DOXYGEN_TREEVIEW = @DOXYGEN_TREEVIEW@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FLUIDSYNTHDIRS = @FLUIDSYNTHDIRS@ +FST_CFLAGS = @FST_CFLAGS@ +FST_LIBS = @FST_LIBS@ +Fluidsynth_CFLAGS = @Fluidsynth_CFLAGS@ +Fluidsynth_LIBS = @Fluidsynth_LIBS@ +GIVERTCAP = @GIVERTCAP@ +GREP = @GREP@ +HAVEDOT = @HAVEDOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_LIBS = @JACK_LIBS@ +JADE = @JADE@ +LASH_CFLAGS = @LASH_CFLAGS@ +LASH_LIBS = @LASH_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LO_CFLAGS = @LO_CFLAGS@ +LO_LIBS = @LO_LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MUSECXXFLAGS = @MUSECXXFLAGS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NSGMLS = @NSGMLS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PCH = @PCH@ +PERL = @PERL@ +PKG_CONFIG = @PKG_CONFIG@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIB = @PYTHON_LIB@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QTDIR_BIN = @QTDIR_BIN@ +QTDIR_INC = @QTDIR_INC@ +QT_LIBS = @QT_LIBS@ +RANLIB = @RANLIB@ +SAMPLERATE_CFLAGS = @SAMPLERATE_CFLAGS@ +SAMPLERATE_LIBS = @SAMPLERATE_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ +SNDFILE_LIBS = @SNDFILE_LIBS@ +STRIP = @STRIP@ +SUIDBUILD = @SUIDBUILD@ +SUIDINSTALL = @SUIDINSTALL@ +USE_SSE = @USE_SSE@ +UUID_CFLAGS = @UUID_CFLAGS@ +UUID_LIBS = @UUID_LIBS@ +VERSION = @VERSION@ +XMKMF = @XMKMF@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +have_docbook = @have_docbook@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +synth_fluid = @synth_fluid@ +synth_fluidsynth = @synth_fluidsynth@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AM_CXXFLAGS = $(MUSECXXFLAGS) -I.. -I$(top_srcdir)/synti \ + -I$(top_srcdir)/muse/widgets -DQT_SHARED -DQT_THREAD_SUPPORT \ + -DQT_PLUGIN $(QTDIR_INC) -DQT3_SUPPORT -fPIC -O3 -fno-rtti \ + -ffast-math -fno-exceptions -include $(top_srcdir)/all-pic.h +AM_CPPFLAGS = +MOC = $(QTDIR_BIN)/moc +#UIC = $(QTDIR_BIN)/uic3 +UIC = /usr/bin/uic3 +UIFILES = $(wildcard *.ui) +MOCFILES = $(shell for h in $(filter %.h,$(SOURCES)); do \ + if grep -q Q_OBJECT $$h; then \ + echo $$h | sed "s/\(.*\)\.h/moc_\1.cpp/"; \ + fi; \ + done) + +BUILT_SOURCES = $(MOCFILES) $(UIFILES:%.ui=%.h) +MOSTLYCLEANFILES = $(MOCFILES) $(UIFILES:%.ui=%.h) +SUFFIXES = .ui .h.gch +synthidir = $(pkglibdir)/synthi +synthi_LTLIBRARIES = simpledrums.la +simpledrums_la_SOURCES = simpledrums.h simpledrums.cpp common.h \ + simpledrumsgui.cpp simpledrumsgui.h \ + ssplugin.h ssplugin.cpp ssplugingui.h ssplugingui.cpp \ + simpledrumsguibase.ui sspluginchooserbase.ui + +nodist_simpledrums_la_SOURCES = moc_simpledrumsgui.cpp moc_ssplugingui.cpp +simpledrums_la_LIBADD = ../libsynti/libsynti.la -lsamplerate +simpledrums_la_LDFLAGS = -module -avoid-version +CLEANFILES = $(wildcard *.ui~) +EXTRA_DIST = README ReleaseNotes.txt COPYING +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: .ui .h.gch .cpp .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/common.am $(top_srcdir)/synti/synti-install.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu synti/simpledrums/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu synti/simpledrums/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-synthiLTLIBRARIES: $(synthi_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(synthidir)" || $(MKDIR_P) "$(DESTDIR)$(synthidir)" + @list='$(synthi_LTLIBRARIES)'; test -n "$(synthidir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(synthidir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(synthidir)"; \ + } + +uninstall-synthiLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(synthi_LTLIBRARIES)'; test -n "$(synthidir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(synthidir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(synthidir)/$$f"; \ + done + +clean-synthiLTLIBRARIES: + -test -z "$(synthi_LTLIBRARIES)" || rm -f $(synthi_LTLIBRARIES) + @list='$(synthi_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +simpledrums.la: $(simpledrums_la_OBJECTS) $(simpledrums_la_DEPENDENCIES) + $(simpledrums_la_LINK) -rpath $(synthidir) $(simpledrums_la_OBJECTS) $(simpledrums_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/moc_simpledrumsgui.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/moc_ssplugingui.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/simpledrums.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/simpledrumsgui.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ssplugin.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ssplugingui.Plo@am__quote@ + +.cpp.o: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< + +.cpp.obj: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.cpp.lo: +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-am +all-am: Makefile $(LTLIBRARIES) +installdirs: + for dir in "$(DESTDIR)$(synthidir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +clean: clean-am + +clean-am: clean-generic clean-libtool clean-synthiLTLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-synthiLTLIBRARIES + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-synthiLTLIBRARIES + +.MAKE: all check install install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-synthiLTLIBRARIES ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip install-synthiLTLIBRARIES installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-synthiLTLIBRARIES + + +de: + @for base in $(MOCFILES); do echo -e "\t$${base}.cpp $${base}.h \\"; done + +nde: + @for base in $(MOCFILES); do echo -e "\tmoc_$${base}.cpp \\"; done + +.ui.o: %.h + $(UIC) -L $(top_srcdir)/muse/widgets -o $*.cpp -impl $*.h $*.ui + $(MOC) $*.h >> $*.cpp + $(CXXCOMPILE) -c $*.cpp -o $*.o + $(RM) $*.cpp moc_$*.cpp moc_$*.o + +.ui.lo: %.h + $(UIC) -L $(top_srcdir)/muse/widgets -o $*.cpp -impl $*.h $*.ui + $(MOC) $*.h >> $*.cpp + $(LTCXXCOMPILE) -c $*.cpp -o $*.lo + $(RM) $*.cpp moc_$*.cpp moc_$*.lo moc_$*.o + +moc_%.cpp: %.h + $(MOC) $< -o $@ + +%.h: %.ui + $(UIC) -o $@ $< +# $(UIC) -L $(top_srcdir)/muse/widgets -o $@ $< + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/muse2/synti/simpledrums/README b/muse2/synti/simpledrums/README new file mode 100644 index 00000000..9e2695dc --- /dev/null +++ b/muse2/synti/simpledrums/README @@ -0,0 +1,44 @@ +-------------------------------------- +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 +- Possible to save synth state to file +- 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/muse2/synti/simpledrums/ReleaseNotes.txt b/muse2/synti/simpledrums/ReleaseNotes.txt new file mode 100644 index 00000000..1144321a --- /dev/null +++ b/muse2/synti/simpledrums/ReleaseNotes.txt @@ -0,0 +1,21 @@ +RELEASE NOTES: +-------------- +2005-05-07 ver 1.0 (go figure!) +- Now possible to load/save setup to file + +2004-12-13 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/muse2/synti/simpledrums/common.h b/muse2/synti/simpledrums/common.h new file mode 100644 index 00000000..e4763540 --- /dev/null +++ b/muse2/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/muse2/synti/simpledrums/simpledrums.cpp b/muse2/synti/simpledrums/simpledrums.cpp new file mode 100644 index 00000000..5a0431a0 --- /dev/null +++ b/muse2/synti/simpledrums/simpledrums.cpp @@ -0,0 +1,1759 @@ +// +// 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/mpevent.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